@soda-gql/cli 0.0.2 → 0.0.3
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAGM,uCAA4C"}
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soda-gql/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"./package.json": "./package.json"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@soda-gql/codegen": "0.0.
|
|
33
|
-
"@soda-gql/builder": "0.0.
|
|
32
|
+
"@soda-gql/codegen": "0.0.3",
|
|
33
|
+
"@soda-gql/builder": "0.0.3",
|
|
34
34
|
"neverthrow": "^8.1.1",
|
|
35
35
|
"zod": "^4.1.11"
|
|
36
36
|
},
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAGM,uCAA4C"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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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"}
|