@launchql/core
Version:
LaunchQL Package and Migration Tools
245 lines (244 loc) • 7.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.exportMeta = void 0;
const csv_to_pg_1 = require("csv-to-pg");
const pg_cache_1 = require("pg-cache");
const config = {
database: {
schema: 'collections_public',
table: 'database',
fields: {
id: 'uuid',
owner_id: 'uuid',
name: 'text',
hash: 'uuid'
}
},
database_extension: {
schema: 'collections_public',
table: 'database_extensions',
fields: {
name: 'text',
database_id: 'uuid'
}
},
schema: {
schema: 'collections_public',
table: 'schema',
fields: {
id: 'uuid',
database_id: 'uuid',
name: 'text',
schema_name: 'text',
description: 'text'
}
},
table: {
schema: 'collections_public',
table: 'table',
fields: {
id: 'uuid',
database_id: 'uuid',
schema_id: 'uuid',
name: 'text',
description: 'text'
}
},
field: {
schema: 'collections_public',
table: 'field',
fields: {
id: 'uuid',
database_id: 'uuid',
table_id: 'uuid',
name: 'text',
type: 'text',
description: 'text'
}
},
domains: {
schema: 'meta_public',
table: 'domains',
fields: {
id: 'uuid',
database_id: 'uuid',
site_id: 'uuid',
api_id: 'uuid',
domain: 'text',
subdomain: 'text'
}
},
sites: {
schema: 'meta_public',
table: 'sites',
fields: {
id: 'uuid',
database_id: 'uuid',
title: 'text',
description: 'text',
og_image: 'image',
favicon: 'upload',
apple_touch_icon: 'image',
logo: 'image',
dbname: 'text'
}
},
apis: {
schema: 'meta_public',
table: 'apis',
fields: {
id: 'uuid',
database_id: 'uuid',
name: 'text',
dbname: 'text',
is_public: 'boolean',
role_name: 'text',
anon_role: 'text'
}
},
apps: {
schema: 'meta_public',
table: 'apps',
fields: {
id: 'uuid',
database_id: 'uuid',
site_id: 'uuid',
name: 'text',
app_image: 'image',
app_store_link: 'url',
app_store_id: 'text',
app_id_prefix: 'text',
play_store_link: 'url'
}
},
site_modules: {
schema: 'meta_public',
table: 'site_modules',
fields: {
id: 'uuid',
database_id: 'uuid',
site_id: 'uuid',
name: 'text',
data: 'jsonb'
}
},
site_themes: {
schema: 'meta_public',
table: 'site_themes',
fields: {
id: 'uuid',
database_id: 'uuid',
site_id: 'uuid',
theme: 'jsonb'
}
},
api_modules: {
schema: 'meta_public',
table: 'api_modules',
fields: {
id: 'uuid',
database_id: 'uuid',
api_id: 'uuid',
name: 'text',
data: 'jsonb'
}
},
api_extensions: {
schema: 'meta_public',
table: 'api_extensions',
fields: {
id: 'uuid',
database_id: 'uuid',
api_id: 'uuid',
schema_name: 'text'
}
},
api_schemata: {
schema: 'meta_public',
table: 'api_schemata',
fields: {
id: 'uuid',
database_id: 'uuid',
schema_id: 'uuid',
api_id: 'uuid'
}
},
rls_module: {
schema: 'meta_public',
table: 'rls_module',
fields: {
id: 'uuid',
database_id: 'uuid',
api_id: 'uuid',
schema_id: 'uuid',
private_schema_id: 'uuid',
tokens_table_id: 'uuid',
users_table_id: 'uuid',
authenticate: 'text',
authenticate_strict: 'text',
current_role: 'text',
current_role_id: 'text'
}
},
user_auth_module: {
schema: 'meta_public',
table: 'user_auth_module',
fields: {
id: 'uuid',
database_id: 'uuid',
schema_id: 'uuid',
emails_table_id: 'uuid',
users_table_id: 'uuid',
secrets_table_id: 'uuid',
encrypted_table_id: 'uuid',
tokens_table_id: 'uuid',
sign_in_function: 'text',
sign_up_function: 'text',
sign_out_function: 'text',
sign_in_one_time_token_function: 'text',
one_time_token_function: 'text',
extend_token_expires: 'text',
send_account_deletion_email_function: 'text',
delete_account_function: 'text',
set_password_function: 'text',
reset_password_function: 'text',
forgot_password_function: 'text',
send_verification_email_function: 'text',
verify_email_function: 'text'
}
}
};
const exportMeta = async ({ opts, dbname, database_id }) => {
const pool = (0, pg_cache_1.getPgPool)({
...opts.pg,
database: dbname
});
const sql = {};
const parsers = Object.entries(config).reduce((m, [name, config]) => {
m[name] = new csv_to_pg_1.Parser(config);
return m;
}, {});
const queryAndParse = async (key, query) => {
const result = await pool.query(query, [database_id]);
if (result.rows.length) {
sql[key] = await parsers[key].parse(result.rows);
}
};
await queryAndParse('database', `SELECT * FROM collections_public.database WHERE id = $1`);
await queryAndParse('schema', `SELECT * FROM collections_public.schema WHERE database_id = $1`);
await queryAndParse('table', `SELECT * FROM collections_public.table WHERE database_id = $1`);
await queryAndParse('domains', `SELECT * FROM meta_public.domains WHERE database_id = $1`);
await queryAndParse('apis', `SELECT * FROM meta_public.apis WHERE database_id = $1`);
await queryAndParse('sites', `SELECT * FROM meta_public.sites WHERE database_id = $1`);
await queryAndParse('api_modules', `SELECT * FROM meta_public.api_modules WHERE database_id = $1`);
await queryAndParse('site_modules', `SELECT * FROM meta_public.site_modules WHERE database_id = $1`);
await queryAndParse('site_themes', `SELECT * FROM meta_public.site_themes WHERE database_id = $1`);
await queryAndParse('apps', `SELECT * FROM meta_public.apps WHERE database_id = $1`);
await queryAndParse('database_extension', `SELECT * FROM collections_public.database_extension WHERE database_id = $1`);
await queryAndParse('api_extensions', `SELECT * FROM meta_public.api_extensions WHERE database_id = $1`);
await queryAndParse('api_schemata', `SELECT * FROM meta_public.api_schemata WHERE database_id = $1`);
await queryAndParse('rls_module', `SELECT * FROM meta_public.rls_module WHERE database_id = $1`);
await queryAndParse('user_auth_module', `SELECT * FROM meta_public.user_auth_module WHERE database_id = $1`);
return Object.entries(sql).reduce((m, [_, v]) => m + '\n\n' + v, '');
};
exports.exportMeta = exportMeta;