caterium-app/ops/demo/build-trial-banquet.mjs

19 lines
1.7 KiB
JavaScript

import fs from 'node:fs';
import assert from 'node:assert/strict';
import {banquetDemo} from './trial-banquet-data.mjs';
const root=new URL('../../',import.meta.url);
const original=fs.readFileSync(new URL('trial-demo.sql',import.meta.url),'utf8');
const functionBlock=name=>original.slice(original.indexOf(`create or replace function public.${name}(`),original.indexOf('end $fn$;',original.indexOf(`create or replace function public.${name}(`))+10);
let status=functionBlock('caterium_trial_demo_status');
const oldStatus="'canInstall',coalesce(v_allowed,false) and v_empty and not v_installed";
assert.ok(status.includes(oldStatus));
status=status.replace(oldStatus,oldStatus+",'canUpgrade',coalesce(v_allowed,false) and v_installed and coalesce(v_storage#>>'{sunTrialDemoV1,v,banquetVersion}','')<>'1'");
let install=functionBlock('caterium_install_trial_demo');
assert.ok(install.includes('then return v_status; end if;'));
install=install.replace('then return v_status; end if;','then return public.caterium_install_trial_banquet(p_workspace); end if;')
.replace('return public.caterium_trial_demo_status(p_workspace);','return public.caterium_install_trial_banquet(p_workspace);');
const template=fs.readFileSync(new URL('trial-banquet.sql',import.meta.url),'utf8');
fs.writeFileSync(new URL('public/demo/banquet-v1.json',root),JSON.stringify(banquetDemo,null,2)+'\n');
fs.writeFileSync(new URL('supabase/migrations/20260918060000_trial_banquet.sql',root),template.replace('__BANQUET_JSON__',JSON.stringify(banquetDemo)).replace('__STATUS_FUNCTION__',status).replace('__INSTALL_FUNCTION__',install));
console.log(`Built ${banquetDemo.banquet.length} banquet dishes and ${banquetDemo.stock.length} additional stock products.`);