mirror of
https://github.com/wassname/talk.git
synced 2026-06-27 20:07:24 +08:00
43b6a2cdcd
* feat: enable persisted queries on the client * fix: use `id` inside websocket message * feat: initial server support for PQ * feat: deeper server support * feat: abstracted persisted query replacing logic
88 lines
2.2 KiB
TypeScript
88 lines
2.2 KiB
TypeScript
#!/usr/bin/env ts-node
|
|
|
|
import program from "commander";
|
|
import spawn from "cross-spawn";
|
|
import fs from "fs-extra";
|
|
import path from "path";
|
|
|
|
const config = JSON.parse(
|
|
fs.readFileSync(path.resolve(__dirname, "../.graphqlconfig"), "utf8")
|
|
);
|
|
|
|
program
|
|
.version("0.1.0")
|
|
.usage("--src ./src/core/client/stream --schema tenant")
|
|
.option("--src <folder>", "Find gql recursively in this folder")
|
|
.option("--schema <schema>", "Identifier of schema")
|
|
.option("--persist", "Use persisted queries")
|
|
.description("Compile relay gql data")
|
|
.parse(process.argv);
|
|
|
|
if (!program.schema) {
|
|
// tslint:disable-next-line:no-console
|
|
console.error("Schema identifier not provided");
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!program.src) {
|
|
// tslint:disable-next-line:no-console
|
|
console.error("Src not provided");
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!config.projects) {
|
|
// tslint:disable-next-line:no-console
|
|
console.error("Missing projects key in .graphqconfig");
|
|
process.exit(1);
|
|
}
|
|
if (!config.projects[program.schema]) {
|
|
// tslint:disable-next-line:no-console
|
|
console.error(`Project ${program.schema} not found in .graphqconfig`);
|
|
process.exit(1);
|
|
}
|
|
if (!config.projects[program.schema].schemaPath) {
|
|
// tslint:disable-next-line:no-console
|
|
console.error(
|
|
`SchemaPath for project ${program.schema} not found in .graphqconfig`
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
const args = [
|
|
"--language",
|
|
"typescript",
|
|
"--no-watchman",
|
|
"--src",
|
|
program.src,
|
|
"--artifactDirectory",
|
|
`${program.src}/__generated__`,
|
|
"--schema",
|
|
config.projects[program.schema].schemaPath,
|
|
];
|
|
|
|
// Set the persisted query path.
|
|
const persist = program.persist
|
|
? `${program.src}/persisted-queries.json`
|
|
: null;
|
|
if (persist) {
|
|
args.push("--persist-output", persist);
|
|
}
|
|
|
|
spawn.sync("relay-compiler", args, { stdio: "inherit" });
|
|
|
|
if (persist) {
|
|
if (fs.existsSync(persist)) {
|
|
// Create the new filename.
|
|
const name = path.basename(program.src);
|
|
const generated = "./src/core/server/graph/tenant/persisted/__generated__";
|
|
|
|
// Create the generated directory if it doesn't exist.
|
|
fs.ensureDirSync(generated);
|
|
|
|
// Copy the file over to the destination directory.
|
|
fs.copySync(persist, `${generated}/${name}.json`, {
|
|
overwrite: true,
|
|
});
|
|
}
|
|
}
|