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.`);