link-stack/packages/metamigo-cli/src/metamigo-postgraphile.ts

39 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-03-13 12:11:25 +00:00
import { writeFileSync } from "node:fs";
2023-02-13 12:41:30 +00:00
import {
getIntrospectionQuery,
2023-03-13 12:11:25 +00:00
GraphQLSchema,
2023-02-13 12:41:30 +00:00
graphqlSync,
lexicographicSortSchema,
printSchema,
} from "graphql";
import { createPostGraphileSchema } from "postgraphile";
import { Pool } from "pg";
2023-03-13 12:11:25 +00:00
import { loadConfig } from "@digiresilience/metamigo-config";
import { getPostGraphileOptions } from "@digiresilience/metamigo-db";
2023-02-13 12:41:30 +00:00
export const exportGraphqlSchema = async (): Promise<void> => {
const config = await loadConfig();
const rootPgPool = new Pool({
connectionString: config.db.connection,
});
const exportSchema = `../../data/schema.graphql`;
const exportJson = `../../frontend/lib/graphql-schema.json`;
try {
2023-03-13 12:11:25 +00:00
const schema = (await createPostGraphileSchema(
2023-02-13 12:41:30 +00:00
config.postgraphile.authConnection,
"app_public",
getPostGraphileOptions()
2023-03-13 12:11:25 +00:00
)) as unknown as GraphQLSchema;
2023-02-13 12:41:30 +00:00
const sorted = lexicographicSortSchema(schema);
2023-05-26 08:27:16 +00:00
const json = graphqlSync({ schema, source: getIntrospectionQuery() });
2023-02-13 12:41:30 +00:00
writeFileSync(exportSchema, printSchema(sorted));
writeFileSync(exportJson, JSON.stringify(json));
console.log(`GraphQL schema exported to ${exportSchema}`);
console.log(`GraphQL schema json exported to ${exportJson}`);
} finally {
rootPgPool.end();
}
};