30 lines
2.9 KiB
JavaScript
30 lines
2.9 KiB
JavaScript
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();
|