import fs from 'node:fs'; const root = new URL('../../', import.meta.url); import {PGlite} from '@electric-sql/pglite'; import {pgcrypto} from '@electric-sql/pglite/contrib/pgcrypto'; export const db=new PGlite({extensions:{pgcrypto}}); await db.exec(`create role anon; create role authenticated; create role service_role bypassrls; create schema auth; create schema storage; create schema cron; create schema realtime; create table realtime.messages(id bigint,extension text,topic text); create function realtime.topic() returns text language sql as $$select ''::text$$; create table auth.users(id uuid primary key,email varchar,raw_user_meta_data jsonb default '{}',raw_app_meta_data jsonb default '{}',created_at timestamptz default now(),last_sign_in_at timestamptz,email_confirmed_at timestamptz,encrypted_password varchar); create table auth.identities(id uuid primary key,user_id uuid,identity_data jsonb,provider text); create function auth.uid() returns uuid language sql stable as $$select nullif(current_setting('request.jwt.claim.sub',true),'')::uuid$$; create function auth.jwt() returns jsonb language sql stable as $$select coalesce(nullif(current_setting('request.jwt.claims',true),''),'{}')::jsonb$$; create function auth.role() returns text language sql stable as $$select coalesce(auth.jwt()->>'role','authenticated')$$; create table storage.buckets(id text primary key,name text,public boolean,file_size_limit bigint,allowed_mime_types text[]); create table storage.objects(id uuid primary key default gen_random_uuid(),bucket_id text,name text,owner uuid,metadata jsonb); alter table storage.objects enable row level security; create function storage.foldername(text) returns text[] language sql immutable as $$select string_to_array($1,'/')$$; create table cron.job(jobid bigserial,jobname text); create function cron.unschedule(bigint) returns boolean language sql as $$select true$$; create function cron.schedule(text,text,text) returns bigint language sql as $$select 1::bigint$$; create publication supabase_realtime; grant usage on schema public,auth,storage to anon,authenticated,service_role; grant execute on all functions in schema auth to anon,authenticated,service_role;`); const files=JSON.parse(fs.readFileSync(new URL('manifest.json',import.meta.url),'utf8')); for(const file of files){try{await db.exec(fs.readFileSync(new URL(file,root),'utf8'));console.log('PASS '+file);}catch(e){console.error(JSON.stringify({file,message:e.message,detail:e.detail,where:e.where,position:e.position},null,2));process.exit(1);}} console.log((await db.query(`select count(*) as tables from pg_tables where schemaname='public'`)).rows); if(process.argv.includes('--smoke')){try{await (await import('./smoke.mjs')).run(db);}catch(e){console.error(JSON.stringify({message:e.message,detail:e.detail,where:e.where,query:e.query,internalQuery:e.internalQuery},null,2));process.exit(1);}} else await db.close();