@soda-gql/cli 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
let node_path = require("node:path");
|
|
3
|
+
let __soda_gql_codegen = require("@soda-gql/codegen");
|
|
4
|
+
let __soda_gql_config = require("@soda-gql/config");
|
|
5
|
+
let neverthrow = require("neverthrow");
|
|
6
|
+
let zod = require("zod");
|
|
7
7
|
|
|
8
8
|
//#region packages/cli/src/schemas/args.ts
|
|
9
|
-
const CodegenArgsSchema = z.object({
|
|
10
|
-
config: z.string().optional(),
|
|
11
|
-
format: z.enum(["human", "json"]).optional(),
|
|
12
|
-
"emit-inject-template": z.string().optional()
|
|
9
|
+
const CodegenArgsSchema = zod.z.object({
|
|
10
|
+
config: zod.z.string().optional(),
|
|
11
|
+
format: zod.z.enum(["human", "json"]).optional(),
|
|
12
|
+
"emit-inject-template": zod.z.string().optional()
|
|
13
13
|
});
|
|
14
|
-
const BuilderArgsSchema = z.object({
|
|
15
|
-
mode: z.enum(["runtime", "zero-runtime"]),
|
|
16
|
-
entry: z.string(),
|
|
17
|
-
out: z.string(),
|
|
18
|
-
format: z.enum(["human", "json"]).optional().default("human")
|
|
14
|
+
const BuilderArgsSchema = zod.z.object({
|
|
15
|
+
mode: zod.z.enum(["runtime", "zero-runtime"]),
|
|
16
|
+
entry: zod.z.string(),
|
|
17
|
+
out: zod.z.string(),
|
|
18
|
+
format: zod.z.enum(["human", "json"]).optional().default("human")
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
//#endregion
|
|
@@ -56,33 +56,33 @@ const parseArgs = (args, schema) => {
|
|
|
56
56
|
}
|
|
57
57
|
if (positional.length > 0) parsed._ = positional;
|
|
58
58
|
const result = schema.safeParse(parsed);
|
|
59
|
-
if (!result.success) return err(result.error.issues.map((e) => e.message).join(", "));
|
|
60
|
-
return ok(result.data);
|
|
59
|
+
if (!result.success) return (0, neverthrow.err)(result.error.issues.map((e) => e.message).join(", "));
|
|
60
|
+
return (0, neverthrow.ok)(result.data);
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
//#endregion
|
|
64
64
|
//#region packages/cli/src/commands/codegen.ts
|
|
65
65
|
const parseCodegenArgs = (argv) => {
|
|
66
66
|
const parsed = parseArgs([...argv], CodegenArgsSchema);
|
|
67
|
-
if (!parsed.isOk()) return err({
|
|
67
|
+
if (!parsed.isOk()) return (0, neverthrow.err)({
|
|
68
68
|
code: "EMIT_FAILED",
|
|
69
69
|
message: parsed.error,
|
|
70
70
|
outPath: ""
|
|
71
71
|
});
|
|
72
72
|
const args = parsed.value;
|
|
73
|
-
if (args["emit-inject-template"]) return ok({
|
|
73
|
+
if (args["emit-inject-template"]) return (0, neverthrow.ok)({
|
|
74
74
|
kind: "emitInjectTemplate",
|
|
75
75
|
outPath: args["emit-inject-template"],
|
|
76
76
|
format: args.format ?? "human"
|
|
77
77
|
});
|
|
78
|
-
const configResult = loadConfig(args.config);
|
|
79
|
-
if (configResult.isErr()) return err({
|
|
78
|
+
const configResult = (0, __soda_gql_config.loadConfig)(args.config);
|
|
79
|
+
if (configResult.isErr()) return (0, neverthrow.err)({
|
|
80
80
|
code: "EMIT_FAILED",
|
|
81
81
|
message: `Failed to load config: ${configResult.error.message}`,
|
|
82
82
|
outPath: ""
|
|
83
83
|
});
|
|
84
84
|
const config = configResult.value;
|
|
85
|
-
if (!config.schemas || Object.keys(config.schemas).length === 0) return err({
|
|
85
|
+
if (!config.schemas || Object.keys(config.schemas).length === 0) return (0, neverthrow.err)({
|
|
86
86
|
code: "EMIT_FAILED",
|
|
87
87
|
message: "schemas configuration is required in soda-gql.config.ts",
|
|
88
88
|
outPath: ""
|
|
@@ -95,10 +95,10 @@ const parseCodegenArgs = (argv) => {
|
|
|
95
95
|
runtimeAdapters[name] = schemaConfig.runtimeAdapter;
|
|
96
96
|
scalars[name] = schemaConfig.scalars;
|
|
97
97
|
}
|
|
98
|
-
return ok({
|
|
98
|
+
return (0, neverthrow.ok)({
|
|
99
99
|
kind: "multi",
|
|
100
100
|
schemas,
|
|
101
|
-
outPath: resolve(config.outdir, "index.ts"),
|
|
101
|
+
outPath: (0, node_path.resolve)(config.outdir, "index.ts"),
|
|
102
102
|
format: args.format ?? "human",
|
|
103
103
|
runtimeAdapters,
|
|
104
104
|
scalars
|
|
@@ -128,8 +128,8 @@ const codegenCommand = async (argv) => {
|
|
|
128
128
|
}
|
|
129
129
|
const command = parsed.value;
|
|
130
130
|
if (command.kind === "emitInjectTemplate") {
|
|
131
|
-
const outPath = resolve(command.outPath);
|
|
132
|
-
const result$1 = writeInjectTemplate(outPath);
|
|
131
|
+
const outPath = (0, node_path.resolve)(command.outPath);
|
|
132
|
+
const result$1 = (0, __soda_gql_codegen.writeInjectTemplate)(outPath);
|
|
133
133
|
if (result$1.isErr()) {
|
|
134
134
|
process.stderr.write(`${formatCodegenError(command.format, result$1.error)}\n`);
|
|
135
135
|
return 1;
|
|
@@ -137,12 +137,12 @@ const codegenCommand = async (argv) => {
|
|
|
137
137
|
process.stdout.write(`${formatTemplateSuccess(command.format, outPath)}\n`);
|
|
138
138
|
return 0;
|
|
139
139
|
}
|
|
140
|
-
const result = await runMultiSchemaCodegen({
|
|
141
|
-
schemas: Object.fromEntries(Object.entries(command.schemas).map(([name, path]) => [name, resolve(path)])),
|
|
142
|
-
outPath: resolve(command.outPath),
|
|
140
|
+
const result = await (0, __soda_gql_codegen.runMultiSchemaCodegen)({
|
|
141
|
+
schemas: Object.fromEntries(Object.entries(command.schemas).map(([name, path]) => [name, (0, node_path.resolve)(path)])),
|
|
142
|
+
outPath: (0, node_path.resolve)(command.outPath),
|
|
143
143
|
format: command.format,
|
|
144
|
-
runtimeAdapters: Object.fromEntries(Object.entries(command.runtimeAdapters).map(([name, path]) => [name, resolve(path)])),
|
|
145
|
-
scalars: Object.fromEntries(Object.entries(command.scalars).map(([name, path]) => [name, resolve(path)]))
|
|
144
|
+
runtimeAdapters: Object.fromEntries(Object.entries(command.runtimeAdapters).map(([name, path]) => [name, (0, node_path.resolve)(path)])),
|
|
145
|
+
scalars: Object.fromEntries(Object.entries(command.scalars).map(([name, path]) => [name, (0, node_path.resolve)(path)]))
|
|
146
146
|
});
|
|
147
147
|
if (result.isErr()) {
|
|
148
148
|
process.stderr.write(`${formatCodegenError(command.format, result.error)}\n`);
|
|
@@ -175,7 +175,7 @@ const dispatch = async (argv) => {
|
|
|
175
175
|
process.stderr.write(`Unknown command: ${command}\n`);
|
|
176
176
|
return 1;
|
|
177
177
|
};
|
|
178
|
-
|
|
178
|
+
dispatch(process.argv.slice(2)).then((exitCode) => {
|
|
179
179
|
process.exitCode = exitCode;
|
|
180
180
|
}).catch((error) => {
|
|
181
181
|
const unexpectedError = {
|
|
@@ -187,5 +187,4 @@ if (import.meta.main) dispatch(Bun.argv.slice(2)).then((exitCode) => {
|
|
|
187
187
|
});
|
|
188
188
|
|
|
189
189
|
//#endregion
|
|
190
|
-
|
|
191
|
-
//# sourceMappingURL=index.mjs.map
|
|
190
|
+
exports.dispatch = dispatch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAGM,uCAA4C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soda-gql/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,29 +8,28 @@
|
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
10
|
"bin": {
|
|
11
|
-
"soda-gql": "./dist/index.
|
|
11
|
+
"soda-gql": "./dist/index.cjs"
|
|
12
12
|
},
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "Shota Hatada",
|
|
15
15
|
"email": "shota.hatada@whatasoda.me",
|
|
16
16
|
"url": "https://github.com/whatasoda"
|
|
17
17
|
},
|
|
18
|
-
"main": "./dist/index.
|
|
19
|
-
"module": "./dist/index.
|
|
20
|
-
"types": "./dist/index.d.
|
|
18
|
+
"main": "./dist/index.cjs",
|
|
19
|
+
"module": "./dist/index.cjs",
|
|
20
|
+
"types": "./dist/index.d.cts",
|
|
21
21
|
"exports": {
|
|
22
22
|
".": {
|
|
23
23
|
"development": "./src/index.ts",
|
|
24
|
-
"types": "./dist/index.d.
|
|
25
|
-
"import": "./dist/index.mjs",
|
|
24
|
+
"types": "./dist/index.d.cts",
|
|
26
25
|
"require": "./dist/index.cjs",
|
|
27
|
-
"default": "./dist/index.
|
|
26
|
+
"default": "./dist/index.cjs"
|
|
28
27
|
},
|
|
29
28
|
"./package.json": "./package.json"
|
|
30
29
|
},
|
|
31
30
|
"dependencies": {
|
|
32
|
-
"@soda-gql/codegen": "0.0.
|
|
33
|
-
"@soda-gql/builder": "0.0.
|
|
31
|
+
"@soda-gql/codegen": "0.0.7",
|
|
32
|
+
"@soda-gql/builder": "0.0.7",
|
|
34
33
|
"neverthrow": "^8.1.1",
|
|
35
34
|
"zod": "^4.1.11"
|
|
36
35
|
},
|
package/dist/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAGM,uCAA4C"}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["parsed: Record<string, unknown>","positional: string[]","schemas: Record<string, string>","runtimeAdapters: Record<string, string>","scalars: Record<string, string>","result","unexpectedError: CodegenError"],"sources":["../src/schemas/args.ts","../src/utils/format.ts","../src/utils/parse-args.ts","../src/commands/codegen.ts","../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const CodegenArgsSchema = z.object({\n config: z.string().optional(),\n format: z.enum([\"human\", \"json\"]).optional(),\n \"emit-inject-template\": z.string().optional(),\n});\n\nexport const BuilderArgsSchema = z.object({\n mode: z.enum([\"runtime\", \"zero-runtime\"]),\n entry: z.string(),\n out: z.string(),\n format: z.enum([\"human\", \"json\"]).optional().default(\"human\"),\n});\n\nexport type CodegenArgs = z.infer<typeof CodegenArgsSchema>;\nexport type BuilderArgs = z.infer<typeof BuilderArgsSchema>;\n","export const formatters = {\n json: (data: unknown) => JSON.stringify(data, null, 2),\n human: (data: unknown) => {\n if (typeof data === \"string\") return data;\n if (data instanceof Error) return data.message;\n return JSON.stringify(data, null, 2);\n },\n} as const;\n\nexport type OutputFormat = keyof typeof formatters;\n\nexport const formatOutput = (data: unknown, format: OutputFormat = \"human\"): string => {\n return formatters[format](data);\n};\n\nexport const formatError = (error: unknown, format: OutputFormat = \"human\"): string => {\n if (format === \"json\") {\n return JSON.stringify(\n {\n error: error,\n },\n null,\n 2,\n );\n }\n return error instanceof Error ? error.message : String(error);\n};\n","import { err, ok, type Result } from \"neverthrow\";\nimport type { z } from \"zod\";\n\nexport const parseArgs = <T extends z.ZodType>(args: string[], schema: T): Result<z.infer<T>, string> => {\n const parsed: Record<string, unknown> = {};\n const positional: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (!arg) continue;\n\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2);\n const nextArg = args[i + 1];\n\n if (!nextArg || nextArg.startsWith(\"--\")) {\n parsed[key] = true;\n } else {\n parsed[key] = nextArg;\n i++;\n }\n } else {\n positional.push(arg);\n }\n }\n\n if (positional.length > 0) {\n parsed._ = positional;\n }\n\n const result = schema.safeParse(parsed);\n if (!result.success) {\n return err(result.error.issues.map((e) => e.message).join(\", \"));\n }\n\n return ok(result.data);\n};\n","import { resolve } from \"node:path\";\nimport type { CodegenError, CodegenFormat, MultiSchemaCodegenSuccess } from \"@soda-gql/codegen\";\nimport { runMultiSchemaCodegen, writeInjectTemplate } from \"@soda-gql/codegen\";\nimport { loadConfig } from \"@soda-gql/config\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport { CodegenArgsSchema } from \"../schemas/args\";\nimport { formatError, formatOutput, type OutputFormat } from \"../utils/format\";\nimport { parseArgs } from \"../utils/parse-args\";\n\ntype ParsedCommand =\n | {\n kind: \"emitInjectTemplate\";\n outPath: string;\n format: CodegenFormat;\n }\n | {\n kind: \"multi\";\n schemas: Record<string, string>;\n outPath: string;\n format: CodegenFormat;\n runtimeAdapters: Record<string, string>;\n scalars: Record<string, string>;\n };\n\nconst parseCodegenArgs = (argv: readonly string[]): Result<ParsedCommand, CodegenError> => {\n const parsed = parseArgs([...argv], CodegenArgsSchema);\n\n if (!parsed.isOk()) {\n return err<ParsedCommand, CodegenError>({\n code: \"EMIT_FAILED\",\n message: parsed.error,\n outPath: \"\",\n });\n }\n\n const args = parsed.value;\n\n // Handle emit inject template\n if (args[\"emit-inject-template\"]) {\n return ok<ParsedCommand, CodegenError>({\n kind: \"emitInjectTemplate\",\n outPath: args[\"emit-inject-template\"],\n format: (args.format ?? \"human\") as CodegenFormat,\n });\n }\n\n // Load config from @soda-gql/config\n const configResult = loadConfig(args.config);\n if (configResult.isErr()) {\n return err<ParsedCommand, CodegenError>({\n code: \"EMIT_FAILED\",\n message: `Failed to load config: ${configResult.error.message}`,\n outPath: \"\",\n });\n }\n\n const config = configResult.value;\n\n // Check if schemas config exists\n if (!config.schemas || Object.keys(config.schemas).length === 0) {\n return err<ParsedCommand, CodegenError>({\n code: \"EMIT_FAILED\",\n message: \"schemas configuration is required in soda-gql.config.ts\",\n outPath: \"\",\n });\n }\n\n // Extract schemas, runtimeAdapters, and scalars from config\n const schemas: Record<string, string> = {};\n const runtimeAdapters: Record<string, string> = {};\n const scalars: Record<string, string> = {};\n\n for (const [name, schemaConfig] of Object.entries(config.schemas)) {\n schemas[name] = schemaConfig.schema;\n runtimeAdapters[name] = schemaConfig.runtimeAdapter;\n scalars[name] = schemaConfig.scalars;\n }\n\n // Derive output path from outdir (default to index.ts)\n const outPath = resolve(config.outdir, \"index.ts\");\n\n return ok<ParsedCommand, CodegenError>({\n kind: \"multi\",\n schemas,\n outPath,\n format: (args.format ?? \"human\") as CodegenFormat,\n runtimeAdapters,\n scalars,\n });\n};\n\nconst formatMultiSchemaSuccess = (format: OutputFormat, success: MultiSchemaCodegenSuccess) => {\n if (format === \"json\") {\n return formatOutput(success, \"json\");\n }\n const schemaNames = Object.keys(success.schemas).join(\", \");\n const totalObjects = Object.values(success.schemas).reduce((sum, s) => {\n // biome-ignore lint/suspicious/noExplicitAny: type assertion needed for schema stats\n return sum + (s as any).objects;\n }, 0);\n return `Generated ${totalObjects} objects from schemas: ${schemaNames}\\n TypeScript: ${success.outPath}\\n CommonJS: ${success.cjsPath}`;\n};\n\nconst formatTemplateSuccess = (format: OutputFormat, outPath: string) => {\n if (format === \"json\") {\n return formatOutput({ outPath }, \"json\");\n }\n return `Created inject template → ${outPath}`;\n};\n\nconst formatCodegenError = (format: OutputFormat, error: CodegenError) => {\n if (format === \"json\") {\n return formatError(error, \"json\");\n }\n return `${error.code}: ${\"message\" in error ? error.message : \"Unknown error\"}`;\n};\n\nexport const codegenCommand = async (argv: readonly string[]): Promise<number> => {\n try {\n const parsed = parseCodegenArgs(argv);\n\n if (parsed.isErr()) {\n process.stderr.write(`${formatCodegenError(\"json\", parsed.error)}\\n`);\n return 1;\n }\n\n const command = parsed.value;\n\n if (command.kind === \"emitInjectTemplate\") {\n const outPath = resolve(command.outPath);\n const result = writeInjectTemplate(outPath);\n if (result.isErr()) {\n process.stderr.write(`${formatCodegenError(command.format, result.error)}\\n`);\n return 1;\n }\n process.stdout.write(`${formatTemplateSuccess(command.format, outPath)}\\n`);\n return 0;\n }\n\n const result = await runMultiSchemaCodegen({\n schemas: Object.fromEntries(Object.entries(command.schemas).map(([name, path]) => [name, resolve(path)])),\n outPath: resolve(command.outPath),\n format: command.format,\n runtimeAdapters: Object.fromEntries(Object.entries(command.runtimeAdapters).map(([name, path]) => [name, resolve(path)])),\n scalars: Object.fromEntries(Object.entries(command.scalars).map(([name, path]) => [name, resolve(path)])),\n });\n\n if (result.isErr()) {\n process.stderr.write(`${formatCodegenError(command.format, result.error)}\\n`);\n return 1;\n }\n\n process.stdout.write(`${formatMultiSchemaSuccess(command.format, result.value)}\\n`);\n return 0;\n } catch (error) {\n // Catch unexpected errors and convert to structured format\n const unexpectedError: CodegenError = {\n code: \"EMIT_FAILED\",\n message: error instanceof Error ? error.message : String(error),\n outPath: \"\",\n };\n process.stderr.write(`${formatCodegenError(\"json\", unexpectedError)}\\n`);\n return 1;\n }\n};\n","import { codegenCommand } from \"./commands/codegen\";\nimport { formatError } from \"./utils/format\";\n\nconst dispatch = async (argv: readonly string[]): Promise<number> => {\n const [command, ...rest] = argv;\n\n if (!command || command === \"--help\" || command === \"-h\") {\n process.stdout.write(`Usage: soda-gql <command> [options]\\n`);\n process.stdout.write(`\\nCommands:\\n`);\n process.stdout.write(` codegen Generate graphql-system runtime module\\n`);\n return 0;\n }\n\n if (command === \"codegen\") {\n return codegenCommand(rest);\n }\n\n process.stderr.write(`Unknown command: ${command}\\n`);\n return 1;\n};\n\nif (import.meta.main) {\n dispatch(Bun.argv.slice(2))\n .then((exitCode) => {\n process.exitCode = exitCode;\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n const unexpectedError = {\n code: \"UNEXPECTED_ERROR\",\n message,\n };\n process.stderr.write(`${formatError(unexpectedError, \"json\")}\\n`);\n process.exitCode = 1;\n });\n}\n\nexport { dispatch };\n"],"mappings":"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"}
|