@drzl/cli 4.23.0 → 4.24.0
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.
- package/dist/cli.cjs +66 -4333
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +21 -15
- package/dist/cli.js.map +1 -1
- package/dist/config.d.cts +2 -2
- package/dist/config.d.ts +2 -2
- package/package.json +11 -13
- package/dist/chunk-KKPDOZOD.js +0 -794
- package/dist/chunk-KKPDOZOD.js.map +0 -1
- package/dist/dist-KQMPKOFK.js +0 -350
- package/dist/dist-KQMPKOFK.js.map +0 -1
- package/dist/dist-KX62ETKK.js +0 -634
- package/dist/dist-KX62ETKK.js.map +0 -1
- package/dist/dist-P24ILO5N.js +0 -431
- package/dist/dist-P24ILO5N.js.map +0 -1
- package/dist/dist-QYH7DRFY.js +0 -27
- package/dist/dist-QYH7DRFY.js.map +0 -1
- package/dist/dist-SGI2I53L.js +0 -434
- package/dist/dist-SGI2I53L.js.map +0 -1
- package/dist/dist-T5376MW7.js +0 -489
- package/dist/dist-T5376MW7.js.map +0 -1
- package/dist/dist-UVP6B4XJ.js +0 -646
- package/dist/dist-UVP6B4XJ.js.map +0 -1
- package/dist/dist-ZIHNXQ7U.js +0 -522
- package/dist/dist-ZIHNXQ7U.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../generator-effect/dist/index.js"],"sourcesContent":["// src/index.ts\nimport { fileWriter } from \"@drzl/validation-core\";\nimport {\n buildBrandPlan,\n buildNestedPlan,\n formatCode,\n nestedArmNotes,\n nestedNodeColumns,\n nestedSchemaName,\n nestedTypeName,\n resolveNestedDepth,\n applyWirePolicy,\n canonicalMembers,\n canonicalNumericText,\n comparisonWire,\n describeSet,\n needsNumericCanon,\n CODEPOINT_LENGTH,\n COERCIBLE_DATE_STRING,\n COLUMN_FORMATS,\n NUMERIC_CANON_NAME,\n NUMERIC_CANON_SOURCE,\n insertColumns,\n isIntegerColumn,\n lengthCheckLabel,\n lengthMeasure,\n measureExpression,\n moduleFileName,\n moduleSpecifier,\n nonFiniteAccepted,\n parseCheck,\n parsesToADate,\n renderDuplicateFinder,\n resolveAffix,\n resolveConfiguredImport,\n schemaName,\n selectColumns,\n typeName,\n updateColumns,\n wireNumberLiteral\n} from \"@drzl/validation-core\";\nvar DEFAULT_FILE_SUFFIX = \".effect.ts\";\nvar STANDARD_PREFIX = \"Standard\";\nvar NS = \"Schema\";\nvar OPS = {\n \">=\": \">=\",\n \">\": \">\",\n \"<=\": \"<=\",\n \"<\": \"<\",\n \"=\": \"===\",\n \"<>\": \"!==\"\n};\nfunction filter(expr, description) {\n return `${NS}.filter((v) => ${expr}, { description: ${JSON.stringify(description)} })`;\n}\nfunction piped(base, steps) {\n return steps.length ? `${base}.pipe(${steps.join(\", \")})` : base;\n}\nvar JSON_CONST = \"DrzlJsonValue\";\nvar JSON_PREAMBLE = `type ${JSON_CONST}Type =\n | string\n | number\n | boolean\n | null\n | readonly ${JSON_CONST}Type[]\n | { readonly [key: string]: ${JSON_CONST}Type };\n\nconst ${JSON_CONST}: ${NS}.Schema<${JSON_CONST}Type, unknown> = ${NS}.suspend(() =>\n ${NS}.Union(\n ${NS}.String,\n ${NS}.Finite,\n ${NS}.Boolean,\n ${NS}.Null,\n ${NS}.Array(${JSON_CONST}),\n // The plain-object test comes before the record, not after it. \\`Schema.Record\\` rebuilds its\n // output, so a check placed after it inspects that new object and reports every input as\n // plain. A Date sailed through: it has no own enumerable keys, so the record accepted it and\n // rebuilt it as \\`{}\\`.\n ${NS}.Unknown.pipe(\n ${NS}.filter(\n (o) => {\n if (typeof o !== 'object' || o === null || Array.isArray(o)) return false;\n const p = Object.getPrototypeOf(o);\n return p === Object.prototype || p === null;\n },\n { description: 'a plain object' }\n ),\n ${NS}.compose(${NS}.Record({ key: ${NS}.String, value: ${JSON_CONST} }), { strict: false })\n )\n )\n);\n`;\nvar UNKNOWN_EXPR = `${NS}.Unknown`;\nfunction isUnknownExpr(expr) {\n return expr === UNKNOWN_EXPR;\n}\nfunction withNarrowedType(expr, ref) {\n return `${expr} as unknown as ${NS}.Schema<${ref}>`;\n}\nfunction numericBounds(c, checks) {\n let lo = c.min !== void 0 ? { fn: \"greaterThanOrEqualTo\", value: c.min } : void 0;\n let hi = c.max !== void 0 ? { fn: \"lessThanOrEqualTo\", value: c.max } : void 0;\n for (const k of checks.filter((x) => x.column === c.name && x.kind === \"number\")) {\n if (k.operator === \">=\") lo = { fn: \"greaterThanOrEqualTo\", value: k.value };\n else if (k.operator === \">\") lo = { fn: \"greaterThan\", value: k.value };\n else if (k.operator === \"<=\") hi = { fn: \"lessThanOrEqualTo\", value: k.value };\n else if (k.operator === \"<\") hi = { fn: \"lessThan\", value: k.value };\n }\n return [lo, hi].filter(Boolean).map((x) => `${NS}.${x.fn}(${x.value})`);\n}\nfunction foldedIntoBounds(c, checks) {\n if (c.arrayDimensions || c.shape) return /* @__PURE__ */ new Set();\n if (c.tsType !== \"number\" && c.tsType !== \"bigint\") return /* @__PURE__ */ new Set();\n return new Set(\n checks.filter(\n (k) => k.column === c.name && k.kind === \"number\" && k.operator !== \"=\" && k.operator !== \"<>\"\n )\n );\n}\nfunction nonFiniteBranches(c) {\n const { nan, infinity } = nonFiniteAccepted(c);\n return [\n ...nan ? [`${NS}.Number.pipe(${filter(\"Number.isNaN(v)\", \"NaN, which this column stores\")})`] : [],\n ...infinity ? [`${NS}.Literal(Infinity, -Infinity)`] : []\n ];\n}\nfunction withNonFinite(c, base) {\n const branches = nonFiniteBranches(c);\n return branches.length ? `${NS}.Union(${base}, ${branches.join(\", \")})` : base;\n}\nfunction dateExpr(mode, coerceDates) {\n const plain = `${NS}.ValidDateFromSelf`;\n if (coerceDates === \"none\") return plain;\n const fromString = piped(`${NS}.String`, [\n `${NS}.pattern(new RegExp(${JSON.stringify(COERCIBLE_DATE_STRING)}))`,\n filter(parsesToADate(\"new Date(v)\"), \"a date the runtime can parse\")\n ]);\n const fromNumber = piped(`${NS}.Number`, [\n filter(parsesToADate(\"new Date(v)\"), \"a date the runtime can parse\")\n ]);\n const union = `${NS}.Union(${plain}, ${fromString}, ${fromNumber})`;\n if (coerceDates === \"all\") return union;\n return mode === \"select\" ? plain : union;\n}\nfunction capSteps(c, mode) {\n const steps = [];\n if (c.shape?.kind === \"byteString\") {\n const n = c.shape.length;\n if (!n) return steps;\n return mode === \"select\" ? [filter(`${CODEPOINT_LENGTH} <= ${n}`, `at most ${n} characters`)] : [filter(`new TextEncoder().encode(v).length <= ${n}`, `at most ${n} bytes`)];\n }\n if (c.maxLength) {\n steps.push(\n filter(`${CODEPOINT_LENGTH} <= ${c.maxLength}`, `at most ${c.maxLength} characters`)\n );\n }\n if (c.maxBytes) {\n steps.push(\n filter(`new TextEncoder().encode(v).length <= ${c.maxBytes}`, `at most ${c.maxBytes} bytes`)\n );\n }\n return steps;\n}\nfunction lengthSteps(c, lengths) {\n return lengths.filter((k) => k.column === c.name).flatMap((k) => {\n const measure = lengthMeasure(c, k);\n if (!measure) return [];\n return [\n filter(\n `${measureExpression(measure, \"v\")} ${OPS[k.operator]} ${k.value}`,\n lengthCheckLabel(k)\n )\n ];\n });\n}\nfunction cardinalitySteps(c, cardinalities) {\n if (!c.arrayDimensions) return [];\n return cardinalities.filter((k) => k.column === c.name).map(\n (k) => filter(\n `v.length ${OPS[k.operator]} ${k.value}`,\n `${k.name ? `${k.name}: ` : \"\"}cardinality(${c.name}) ${k.operator} ${k.value}`\n )\n );\n}\nfunction checkSteps(c, checks) {\n if (c.arrayDimensions || c.shape) return [];\n const folded = foldedIntoBounds(c, checks);\n const numericWire = comparisonWire(c) === \"numeric-string\";\n return checks.filter((k) => k.column === c.name && !folded.has(k)).map((k) => {\n const label = `${k.name ? `${k.name}: ` : \"\"}${c.name} ${k.operator} ${k.value}`;\n if (numericWire) {\n if (k.operator === \"=\" || k.operator === \"<>\") {\n const canon = JSON.stringify(canonicalNumericText(k.value));\n const op = k.operator === \"=\" ? \"===\" : \"!==\";\n return filter(`${NUMERIC_CANON_NAME}(v) ${op} ${canon}`, label);\n }\n return filter(`Number(v) ${OPS[k.operator]} ${k.value}`, label);\n }\n const literal = k.kind === \"string\" ? JSON.stringify(k.value) : wireNumberLiteral(c, k.value);\n return filter(`v ${OPS[k.operator]} ${literal}`, label);\n });\n}\nfunction hasNoRuntimeType(c) {\n return c.tsType === \"any\" || c.shape?.kind === \"custom\" || c.shape?.kind === \"json\";\n}\nfunction shapeExpr(c, mode, replaced = false) {\n const s = c.shape;\n if (!s) return void 0;\n switch (s.kind) {\n case \"json\":\n return replaced ? UNKNOWN_EXPR : JSON_CONST;\n case \"custom\":\n return UNKNOWN_EXPR;\n case \"buffer\":\n return `${NS}.Uint8ArrayFromSelf`;\n case \"tuple\":\n return `${NS}.Tuple(${Array.from({ length: s.length }, () => `${NS}.Number`).join(\", \")})`;\n case \"numberObject\":\n return `${NS}.Struct({ ${s.fields.map((f) => `${f}: ${NS}.Number`).join(\", \")} })`;\n case \"numberVector\":\n return piped(\n `${NS}.Array(${NS}.Number)`,\n s.length ? [filter(`v.length === ${s.length}`, `exactly ${s.length} elements`)] : []\n );\n case \"bitstring\":\n return piped(`${NS}.String`, [\n `${NS}.pattern(/^[01]*$/)`,\n ...s.length ? [\n s.exact ? filter(`v.length === ${s.length}`, `exactly ${s.length} binary digits`) : filter(`v.length <= ${s.length}`, `at most ${s.length} binary digits`)\n ] : []\n ]);\n case \"byteString\":\n return piped(`${NS}.String`, capSteps(c, mode));\n }\n}\nfunction exprForColumn(c, mode, coerceDates, checks, sets, lengths, replaced) {\n const shaped = shapeExpr(c, mode, replaced);\n if (shaped) return piped(shaped, lengthSteps(c, lengths));\n const set = sets.find((x) => x.column === c.name);\n if (set) {\n if (comparisonWire(c) === \"numeric-string\") {\n const members = canonicalMembers(set.values);\n const test = members.map((m) => `canon === ${JSON.stringify(m)}`).join(\" || \");\n return piped(`${NS}.String`, [\n filter(`((canon) => ${test})(${NUMERIC_CANON_NAME}(v))`, describeSet(set))\n ]);\n }\n const values = set.values.map(\n (v) => set.kind === \"string\" ? JSON.stringify(v) : wireNumberLiteral(c, v)\n );\n return `${NS}.Literal(${values.join(\", \")})`;\n }\n if (c.arrayDimensions) checks = [];\n if (c.enumValues && c.enumValues.length) {\n return `${NS}.Literal(${c.enumValues.map((v) => JSON.stringify(v)).join(\", \")})`;\n }\n const eq = checks.find((k) => k.column === c.name && k.operator === \"=\");\n if (eq && !c.shape && comparisonWire(c) !== \"numeric-string\") {\n return `${NS}.Literal(${eq.kind === \"string\" ? JSON.stringify(eq.value) : wireNumberLiteral(c, eq.value)})`;\n }\n const rest = [...checkSteps(c, checks), ...lengthSteps(c, lengths)];\n switch (c.tsType) {\n case \"string\": {\n const base = c.format === \"uuid\" ? `${NS}.UUID` : `${NS}.String`;\n const pattern = c.format && c.format !== \"uuid\" && COLUMN_FORMATS[c.format] ? [`${NS}.pattern(new RegExp(${JSON.stringify(COLUMN_FORMATS[c.format])}))`] : [];\n return piped(base, [...pattern, ...capSteps(c, mode), ...rest]);\n }\n case \"number\": {\n const base = isIntegerColumn(c) ? `${NS}.Int` : `${NS}.Finite`;\n return withNonFinite(c, piped(base, [...numericBounds(c, checks), ...rest]));\n }\n case \"bigint\":\n return piped(`${NS}.BigIntFromSelf`, [\n ...c.min !== void 0 ? [`${NS}.greaterThanOrEqualToBigInt(${c.min}n)`] : [],\n ...c.max !== void 0 ? [`${NS}.lessThanOrEqualToBigInt(${c.max}n)`] : [],\n ...rest\n ]);\n case \"boolean\":\n return `${NS}.Boolean`;\n case \"Date\":\n return dateExpr(mode, coerceDates);\n case \"Uint8Array\":\n return `${NS}.Uint8ArrayFromSelf`;\n case \"any\":\n return UNKNOWN_EXPR;\n default:\n return UNKNOWN_EXPR;\n }\n}\nfunction renderField(c, mode, coerceDates, checks, sets, lengths, cardinalities, applyDefault, narrowRef, brand) {\n let expr = exprForColumn(\n c,\n mode,\n coerceDates,\n checks,\n sets,\n lengths,\n !!narrowRef && hasNoRuntimeType(c)\n );\n const dims = c.arrayDimensions ?? 0;\n for (let i = 0; i < dims; i++) {\n expr = `${NS}.Array(${expr})`;\n if (i === dims - 1) expr = piped(expr, cardinalitySteps(c, cardinalities));\n }\n if (brand) expr = piped(expr, [`${NS}.brand(${JSON.stringify(brand)})`]);\n if (c.nullable && !isUnknownExpr(expr)) expr = `${NS}.NullOr(${expr})`;\n if (narrowRef && !brand) expr = withNarrowedType(expr, narrowRef);\n if (mode === \"select\") return expr;\n const wantsDefault = mode === \"insert\" && applyDefault && c.defaultValue !== void 0;\n if (wantsDefault) {\n return `${NS}.optionalWith(${expr}, { default: () => ${JSON.stringify(c.defaultValue)} })`;\n }\n if (mode === \"update\" || c.nullable || c.hasDefault) return `${NS}.optional(${expr})`;\n return expr;\n}\nfunction wantsRef(c, allColumns) {\n return allColumns || hasNoRuntimeType(c);\n}\nfunction renderObjectShape(cols, mode, coerceDates, checks, sets, lengths, cardinalities, typedJson, applyDefaults, brands) {\n return cols.map((c) => {\n const ref = typedJson && wantsRef(c, !!typedJson.allColumns) ? `(typeof ${typedJson.table}.$infer${typedJson.mode === \"insert\" ? \"Insert\" : \"Select\"})[${JSON.stringify(c.name)}]` : void 0;\n const field = renderField(\n c,\n mode,\n coerceDates,\n checks,\n sets,\n lengths,\n cardinalities,\n applyDefaults,\n ref,\n brands?.plan.brandOf(brands.tsName, c.name)\n );\n return ` ${JSON.stringify(c.name)}: ${field},`;\n }).join(\"\\n\");\n}\nfunction rowSteps(rows, cols) {\n const present = new Set(cols.map((c) => c.name));\n return rows.filter((r) => present.has(r.left) && present.has(r.right)).map((r) => {\n const l = `o[${JSON.stringify(r.left)}]`;\n const rt = `o[${JSON.stringify(r.right)}]`;\n const msg = `${r.name ? `${r.name}: ` : \"\"}${r.left} ${r.operator} ${r.right}`;\n return `${NS}.filter((o) => ${l} == null || ${rt} == null || ${l} ${OPS[r.operator]} ${rt}, { description: ${JSON.stringify(msg)} })`;\n });\n}\nfunction indentBlock(code, by = \" \") {\n return code.split(\"\\n\").map((line) => line ? by + line : line).join(\"\\n\");\n}\nfunction parsedChecksFor(table) {\n const parsed = (table.checks ?? []).map((k) => parseCheck(k.expression, k.name));\n const { checks, sets } = applyWirePolicy(\n table.columns,\n parsed.flatMap((p) => p.ok ? p.checks : []),\n parsed.flatMap((p) => p.ok ? p.sets ?? [] : [])\n );\n return {\n checks,\n sets,\n rows: parsed.flatMap((p) => p.ok ? p.rows ?? [] : []),\n lengths: parsed.flatMap((p) => p.ok ? p.lengths ?? [] : []),\n cardinalities: parsed.flatMap((p) => p.ok ? p.cardinalities ?? [] : [])\n };\n}\nfunction nestedNodeCols(node, mode) {\n const all = mode === \"insert\" ? insertColumns(node.table) : selectColumns(node.table);\n return nestedNodeColumns(all, node);\n}\nfunction nestedNodes(node, into = []) {\n into.push(node);\n for (const arm of node.arms) nestedNodes(arm.child, into);\n return into;\n}\nfunction renderNestedObject(node, mode, coerceDates, typedJson, applyDefaults, brands) {\n const cols = nestedNodeCols(node, mode);\n const { checks, sets, rows, lengths, cardinalities } = parsedChecksFor(node.table);\n const tj = typedJson ? { table: node.table.tsName, mode, allColumns: typedJson.allColumns } : void 0;\n const fields = renderObjectShape(\n cols,\n mode,\n coerceDates,\n checks,\n sets,\n lengths,\n cardinalities,\n tj,\n applyDefaults,\n brands ? { plan: brands, tsName: node.table.tsName } : void 0\n );\n const arms = node.arms.map((arm) => {\n const notes = nestedArmNotes(arm).map((n) => ` // ${n}\n`).join(\"\");\n const child = renderNestedObject(\n arm.child,\n mode,\n coerceDates,\n typedJson,\n applyDefaults,\n brands\n );\n const inner = arm.single ? `${NS}.NullOr(\n${indentBlock(indentBlock(child))}\n )` : `${NS}.Array(\n${indentBlock(indentBlock(child))}\n )`;\n return `${notes} ${JSON.stringify(arm.key)}: ${NS}.optional(${inner}),`;\n });\n const body = [fields, ...arms].filter(Boolean).join(\"\\n\");\n return piped(`${NS}.Struct({\n${body}\n})`, rowSteps(rows, cols));\n}\nfunction renderNestedSchemas(table, affix, coerceDates, typedJson, applyDefaults, plans, brands) {\n const out = [];\n for (const mode of [\"insert\", \"select\"]) {\n const plan = plans[mode];\n if (!plan) continue;\n const name = nestedSchemaName(mode, table.tsName, affix);\n const tname = nestedTypeName(mode, table.tsName, affix);\n const expr = renderNestedObject(plan, mode, coerceDates, typedJson, applyDefaults, brands);\n out.push(\n `export const ${name} = ${expr};\n\nexport type ${tname} = ${NS}.Schema.Type<typeof ${name}>;\n\nexport const ${STANDARD_PREFIX}${name} = ${NS}.standardSchemaV1(${name});`\n );\n }\n return out.length ? `\n${out.join(\"\\n\\n\")}\n` : \"\";\n}\nfunction nestedPlansFor(table, analysis, depth) {\n const out = {};\n for (const mode of [\"insert\", \"select\"]) {\n if (mode === \"insert\" && table.readOnly) continue;\n const plan = buildNestedPlan(table, analysis.tables, analysis.relations ?? [], mode, depth);\n if (plan) out[mode] = plan;\n }\n return out;\n}\nfunction renderTableSchemas(table, affix, coerceDates, typedJson, applyDefaults = false, wantsDuplicateFinder = false, nested = {}, brands) {\n const T = table.tsName;\n const insertCols = insertColumns(table);\n const updateCols = updateColumns(table);\n const selectCols = selectColumns(table);\n const { checks, sets, rows, lengths, cardinalities } = parsedChecksFor(table);\n const tj = typedJson ? { table: T, allColumns: typedJson.allColumns } : void 0;\n const modes = [\n [\"insert\", insertCols],\n [\"update\", updateCols],\n [\"select\", selectCols]\n ];\n const blocks = modes.map(([mode, cols]) => {\n const name = schemaName(mode, T, affix);\n const tname = typeName(mode, T, affix);\n const body = renderObjectShape(\n cols,\n mode,\n coerceDates,\n checks,\n sets,\n lengths,\n cardinalities,\n // The update schema references the insert-side inferred types: both describe a value going\n // in, and `$inferSelect` would name the post-default type for a column a write may omit.\n tj ? { ...tj, mode: mode === \"select\" ? \"select\" : \"insert\" } : void 0,\n applyDefaults,\n brands ? { plan: brands, tsName: T } : void 0\n );\n const expr = piped(`${NS}.Struct({\n${body}\n})`, rowSteps(rows, cols));\n return `export const ${name} = ${expr};\n\nexport type ${tname} = ${NS}.Schema.Type<typeof ${name}>;\n\nexport const ${STANDARD_PREFIX}${name} = ${NS}.standardSchemaV1(${name});`;\n });\n const nestedByTable = [\"insert\", \"select\"].flatMap((m) => {\n const plan = nested[m];\n return plan ? nestedNodes(plan).map((n) => [n.table.tsName, nestedNodeCols(n, m)]) : [];\n });\n const nestedCols = nestedByTable.flatMap(([, cs]) => cs);\n const referenced = /* @__PURE__ */ new Set();\n if (typedJson) {\n const all = !!typedJson.allColumns;\n if ([...insertCols, ...updateCols, ...selectCols].some((c) => wantsRef(c, all))) {\n referenced.add(T);\n }\n for (const [name, cs] of nestedByTable) {\n if (cs.some((c) => wantsRef(c, all))) referenced.add(name);\n }\n }\n const schemaImport = referenced.size ? `import type { ${[...referenced].join(\", \")} } from '${typedJson.schemaSpecifier}';\n` : \"\";\n const needsJson = !typedJson && [...insertCols, ...updateCols, ...selectCols, ...nestedCols].some(\n (c) => c.shape?.kind === \"json\"\n );\n const finder = wantsDuplicateFinder ? renderDuplicateFinder(table, `findDuplicate${T}`, typeName(\"insert\", T, affix)) : void 0;\n const duplicates = finder ? `\n${finder}\n` : \"\";\n const nestedCode = renderNestedSchemas(\n table,\n affix,\n coerceDates,\n typedJson,\n applyDefaults,\n nested,\n brands\n );\n const selectName = schemaName(\"select\", T, affix);\n const brandAliases = (brands?.aliasesFor(T) ?? []).map(\n (a) => `/** The nominal type of ${T}.${a.column}. */\nexport type ${a.alias} = ${NS}.Schema.Type<typeof ${selectName}>[${JSON.stringify(a.column)}];`\n ).join(\"\\n\\n\");\n const brandCode = brandAliases ? `\n${brandAliases}\n` : \"\";\n const involved = [\n table,\n ...[\"insert\", \"select\"].flatMap((m) => {\n const plan = nested[m];\n return plan ? nestedNodes(plan).map((n) => n.table) : [];\n })\n ];\n const canonPreamble = involved.some((t) => {\n const own = parsedChecksFor(t);\n return needsNumericCanon(t.columns, own.checks, own.sets);\n }) ? `\n${NUMERIC_CANON_SOURCE}` : \"\";\n return `import * as ${NS} from 'effect/Schema';\n${schemaImport}${needsJson ? `\n${JSON_PREAMBLE}` : \"\"}${canonPreamble}\n${blocks.join(\"\\n\\n\")}\n${brandCode}${nestedCode}${duplicates}`;\n}\nvar EffectGenerator = class {\n constructor(analysis) {\n this.analysis = analysis;\n this.library = \"effect\";\n }\n async generate(opts) {\n const fs = fileWriter(opts.fileSink);\n const path = await import(\"path\");\n const out = path.resolve(process.cwd(), opts.outDir);\n const files = [];\n await fs.mkdir(out, { recursive: true });\n const affix = resolveAffix(opts);\n const coerceDates = opts.coerceDates ?? \"input\";\n const fileSuffix = opts.fileSuffix ?? DEFAULT_FILE_SUFFIX;\n const wantsTypes = opts.typedJson || opts.typedColumns;\n const typedJson = wantsTypes && opts.schemaPath ? {\n schemaSpecifier: resolveConfiguredImport(\n opts.schemaPath,\n out,\n process.cwd(),\n opts.importExtension\n ),\n allColumns: !!opts.typedColumns\n } : void 0;\n if (wantsTypes && !opts.schemaPath) {\n console.warn(\n \"[drzl] typedJson was requested but the schema path is unknown, so json columns keep their wide type.\"\n );\n }\n const nestedDepth = opts.nestedSchemas ? resolveNestedDepth(opts.nestedDepth, (m) => console.warn(m)) : 0;\n const brands = buildBrandPlan(this.analysis.tables, opts.branded);\n for (const note of brands?.notes ?? []) console.warn(`[drzl] ${note}`);\n for (const table of this.analysis.tables) {\n const filePath = path.join(out, moduleFileName(table.tsName, fileSuffix));\n const code = renderTableSchemas(\n table,\n affix,\n coerceDates,\n typedJson,\n !!opts.applyDefaults,\n !!opts?.duplicateFinder,\n opts.nestedSchemas ? nestedPlansFor(table, this.analysis, nestedDepth) : {},\n brands\n );\n const formatted = await formatCode(\n buildHeader(opts.outputHeader) + code,\n filePath,\n opts.format\n );\n await fs.writeFile(filePath, formatted, \"utf8\");\n files.push(filePath);\n }\n const indexPath = path.join(out, \"index.ts\");\n const indexFormatted = await formatCode(\n buildHeader(opts.outputHeader) + this.defaultIndex(this.analysis, opts),\n indexPath,\n opts.format\n );\n await fs.writeFile(indexPath, indexFormatted, \"utf8\");\n files.push(indexPath);\n return files;\n }\n renderTable(table, opts) {\n return renderTableSchemas(\n table,\n resolveAffix(opts),\n opts?.coerceDates ?? \"input\",\n void 0,\n !!opts?.applyDefaults,\n !!opts?.duplicateFinder,\n {},\n buildBrandPlan(this.analysis.tables, opts?.branded)\n );\n }\n defaultIndex(analysis, opts) {\n const fileSuffix = opts.fileSuffix ?? DEFAULT_FILE_SUFFIX;\n return analysis.tables.map(\n (t) => `export * from '${moduleSpecifier(t.tsName, fileSuffix, opts.importExtension)}';`\n ).join(\"\\n\") + \"\\n\";\n }\n};\nvar index_default = EffectGenerator;\nfunction buildHeader(h) {\n if (h && h.enabled === false) return \"\";\n const text = h?.text?.trim();\n const lines = text ? text.split(/\\r?\\n/).map((l) => `// ${l}`) : [\n \"// Generated by DRZL (@drzl/*)\",\n \"// Generated output is granted to you under your project's license.\",\n \"// You may use, copy, modify, and distribute without attribution.\"\n ];\n return lines.join(\"\\n\") + \"\\n\\n\";\n}\nexport {\n EffectGenerator,\n index_default as default\n};\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,IAAI,sBAAsB;AAC1B,IAAI,kBAAkB;AACtB,IAAI,KAAK;AACT,IAAI,MAAM;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AACR;AACA,SAAS,OAAO,MAAM,aAAa;AACjC,SAAO,GAAG,EAAE,kBAAkB,IAAI,oBAAoB,KAAK,UAAU,WAAW,CAAC;AACnF;AACA,SAAS,MAAM,MAAM,OAAO;AAC1B,SAAO,MAAM,SAAS,GAAG,IAAI,SAAS,MAAM,KAAK,IAAI,CAAC,MAAM;AAC9D;AACA,IAAI,aAAa;AACjB,IAAI,gBAAgB,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,eAKvB,UAAU;AAAA,gCACO,UAAU;AAAA;AAAA,QAElC,UAAU,KAAK,EAAE,WAAW,UAAU,oBAAoB,EAAE;AAAA,IAChE,EAAE;AAAA,MACA,EAAE;AAAA,MACF,EAAE;AAAA,MACF,EAAE;AAAA,MACF,EAAE;AAAA,MACF,EAAE,UAAU,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKtB,EAAE;AAAA,QACA,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQF,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,UAAU;AAAA;AAAA;AAAA;AAAA;AAKzE,IAAI,eAAe,GAAG,EAAE;AACxB,SAAS,cAAc,MAAM;AAC3B,SAAO,SAAS;AAClB;AACA,SAAS,iBAAiB,MAAM,KAAK;AACnC,SAAO,GAAG,IAAI,kBAAkB,EAAE,WAAW,GAAG;AAClD;AACA,SAAS,cAAc,GAAG,QAAQ;AAChC,MAAI,KAAK,EAAE,QAAQ,SAAS,EAAE,IAAI,wBAAwB,OAAO,EAAE,IAAI,IAAI;AAC3E,MAAI,KAAK,EAAE,QAAQ,SAAS,EAAE,IAAI,qBAAqB,OAAO,EAAE,IAAI,IAAI;AACxE,aAAW,KAAK,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,QAAQ,GAAG;AAChF,QAAI,EAAE,aAAa,KAAM,MAAK,EAAE,IAAI,wBAAwB,OAAO,EAAE,MAAM;AAAA,aAClE,EAAE,aAAa,IAAK,MAAK,EAAE,IAAI,eAAe,OAAO,EAAE,MAAM;AAAA,aAC7D,EAAE,aAAa,KAAM,MAAK,EAAE,IAAI,qBAAqB,OAAO,EAAE,MAAM;AAAA,aACpE,EAAE,aAAa,IAAK,MAAK,EAAE,IAAI,YAAY,OAAO,EAAE,MAAM;AAAA,EACrE;AACA,SAAO,CAAC,IAAI,EAAE,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG;AACxE;AACA,SAAS,iBAAiB,GAAG,QAAQ;AACnC,MAAI,EAAE,mBAAmB,EAAE,MAAO,QAAuB,oBAAI,IAAI;AACjE,MAAI,EAAE,WAAW,YAAY,EAAE,WAAW,SAAU,QAAuB,oBAAI,IAAI;AACnF,SAAO,IAAI;AAAA,IACT,OAAO;AAAA,MACL,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;AAAA,IAC5F;AAAA,EACF;AACF;AACA,SAAS,kBAAkB,GAAG;AAC5B,QAAM,EAAE,KAAK,SAAS,IAAI,kBAAkB,CAAC;AAC7C,SAAO;AAAA,IACL,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,OAAO,mBAAmB,+BAA+B,CAAC,GAAG,IAAI,CAAC;AAAA,IACjG,GAAG,WAAW,CAAC,GAAG,EAAE,+BAA+B,IAAI,CAAC;AAAA,EAC1D;AACF;AACA,SAAS,cAAc,GAAG,MAAM;AAC9B,QAAM,WAAW,kBAAkB,CAAC;AACpC,SAAO,SAAS,SAAS,GAAG,EAAE,UAAU,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,MAAM;AAC5E;AACA,SAAS,SAAS,MAAM,aAAa;AACnC,QAAM,QAAQ,GAAG,EAAE;AACnB,MAAI,gBAAgB,OAAQ,QAAO;AACnC,QAAM,aAAa,MAAM,GAAG,EAAE,WAAW;AAAA,IACvC,GAAG,EAAE,uBAAuB,KAAK,UAAU,qBAAqB,CAAC;AAAA,IACjE,OAAO,cAAc,aAAa,GAAG,8BAA8B;AAAA,EACrE,CAAC;AACD,QAAM,aAAa,MAAM,GAAG,EAAE,WAAW;AAAA,IACvC,OAAO,cAAc,aAAa,GAAG,8BAA8B;AAAA,EACrE,CAAC;AACD,QAAM,QAAQ,GAAG,EAAE,UAAU,KAAK,KAAK,UAAU,KAAK,UAAU;AAChE,MAAI,gBAAgB,MAAO,QAAO;AAClC,SAAO,SAAS,WAAW,QAAQ;AACrC;AACA,SAAS,SAAS,GAAG,MAAM;AACzB,QAAM,QAAQ,CAAC;AACf,MAAI,EAAE,OAAO,SAAS,cAAc;AAClC,UAAM,IAAI,EAAE,MAAM;AAClB,QAAI,CAAC,EAAG,QAAO;AACf,WAAO,SAAS,WAAW,CAAC,OAAO,GAAG,gBAAgB,OAAO,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,yCAAyC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC;AAAA,EAC7K;AACA,MAAI,EAAE,WAAW;AACf,UAAM;AAAA,MACJ,OAAO,GAAG,gBAAgB,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,SAAS,aAAa;AAAA,IACrF;AAAA,EACF;AACA,MAAI,EAAE,UAAU;AACd,UAAM;AAAA,MACJ,OAAO,yCAAyC,EAAE,QAAQ,IAAI,WAAW,EAAE,QAAQ,QAAQ;AAAA,IAC7F;AAAA,EACF;AACA,SAAO;AACT;AACA,SAAS,YAAY,GAAG,SAAS;AAC/B,SAAO,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM;AAC/D,UAAM,UAAU,cAAc,GAAG,CAAC;AAClC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,WAAO;AAAA,MACL;AAAA,QACE,GAAG,kBAAkB,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK;AAAA,QAChE,iBAAiB,CAAC;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AACA,SAAS,iBAAiB,GAAG,eAAe;AAC1C,MAAI,CAAC,EAAE,gBAAiB,QAAO,CAAC;AAChC,SAAO,cAAc,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE;AAAA,IACtD,CAAC,MAAM;AAAA,MACL,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK;AAAA,MACtC,GAAG,EAAE,OAAO,GAAG,EAAE,IAAI,OAAO,EAAE,eAAe,EAAE,IAAI,KAAK,EAAE,QAAQ,IAAI,EAAE,KAAK;AAAA,IAC/E;AAAA,EACF;AACF;AACA,SAAS,WAAW,GAAG,QAAQ;AAC7B,MAAI,EAAE,mBAAmB,EAAE,MAAO,QAAO,CAAC;AAC1C,QAAM,SAAS,iBAAiB,GAAG,MAAM;AACzC,QAAM,cAAc,eAAe,CAAC,MAAM;AAC1C,SAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM;AAC5E,UAAM,QAAQ,GAAG,EAAE,OAAO,GAAG,EAAE,IAAI,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,QAAQ,IAAI,EAAE,KAAK;AAC9E,QAAI,aAAa;AACf,UAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,cAAM,QAAQ,KAAK,UAAU,qBAAqB,EAAE,KAAK,CAAC;AAC1D,cAAM,KAAK,EAAE,aAAa,MAAM,QAAQ;AACxC,eAAO,OAAO,GAAG,kBAAkB,OAAO,EAAE,IAAI,KAAK,IAAI,KAAK;AAAA,MAChE;AACA,aAAO,OAAO,aAAa,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK;AAAA,IAChE;AACA,UAAM,UAAU,EAAE,SAAS,WAAW,KAAK,UAAU,EAAE,KAAK,IAAI,kBAAkB,GAAG,EAAE,KAAK;AAC5F,WAAO,OAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,IAAI,KAAK;AAAA,EACxD,CAAC;AACH;AACA,SAAS,iBAAiB,GAAG;AAC3B,SAAO,EAAE,WAAW,SAAS,EAAE,OAAO,SAAS,YAAY,EAAE,OAAO,SAAS;AAC/E;AACA,SAAS,UAAU,GAAG,MAAM,WAAW,OAAO;AAC5C,QAAM,IAAI,EAAE;AACZ,MAAI,CAAC,EAAG,QAAO;AACf,UAAQ,EAAE,MAAM;AAAA,IACd,KAAK;AACH,aAAO,WAAW,eAAe;AAAA,IACnC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,GAAG,EAAE;AAAA,IACd,KAAK;AACH,aAAO,GAAG,EAAE,UAAU,MAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;AAAA,IACzF,KAAK;AACH,aAAO,GAAG,EAAE,aAAa,EAAE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;AAAA,IAC/E,KAAK;AACH,aAAO;AAAA,QACL,GAAG,EAAE,UAAU,EAAE;AAAA,QACjB,EAAE,SAAS,CAAC,OAAO,gBAAgB,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC;AAAA,MACrF;AAAA,IACF,KAAK;AACH,aAAO,MAAM,GAAG,EAAE,WAAW;AAAA,QAC3B,GAAG,EAAE;AAAA,QACL,GAAG,EAAE,SAAS;AAAA,UACZ,EAAE,QAAQ,OAAO,gBAAgB,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,gBAAgB,IAAI,OAAO,eAAe,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,gBAAgB;AAAA,QAC3J,IAAI,CAAC;AAAA,MACP,CAAC;AAAA,IACH,KAAK;AACH,aAAO,MAAM,GAAG,EAAE,WAAW,SAAS,GAAG,IAAI,CAAC;AAAA,EAClD;AACF;AACA,SAAS,cAAc,GAAG,MAAM,aAAa,QAAQ,MAAM,SAAS,UAAU;AAC5E,QAAM,SAAS,UAAU,GAAG,MAAM,QAAQ;AAC1C,MAAI,OAAQ,QAAO,MAAM,QAAQ,YAAY,GAAG,OAAO,CAAC;AACxD,QAAM,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI;AAChD,MAAI,KAAK;AACP,QAAI,eAAe,CAAC,MAAM,kBAAkB;AAC1C,YAAM,UAAU,iBAAiB,IAAI,MAAM;AAC3C,YAAM,OAAO,QAAQ,IAAI,CAAC,MAAM,aAAa,KAAK,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM;AAC7E,aAAO,MAAM,GAAG,EAAE,WAAW;AAAA,QAC3B,OAAO,eAAe,IAAI,KAAK,kBAAkB,QAAQ,YAAY,GAAG,CAAC;AAAA,MAC3E,CAAC;AAAA,IACH;AACA,UAAM,SAAS,IAAI,OAAO;AAAA,MACxB,CAAC,MAAM,IAAI,SAAS,WAAW,KAAK,UAAU,CAAC,IAAI,kBAAkB,GAAG,CAAC;AAAA,IAC3E;AACA,WAAO,GAAG,EAAE,YAAY,OAAO,KAAK,IAAI,CAAC;AAAA,EAC3C;AACA,MAAI,EAAE,gBAAiB,UAAS,CAAC;AACjC,MAAI,EAAE,cAAc,EAAE,WAAW,QAAQ;AACvC,WAAO,GAAG,EAAE,YAAY,EAAE,WAAW,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EAC/E;AACA,QAAM,KAAK,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG;AACvE,MAAI,MAAM,CAAC,EAAE,SAAS,eAAe,CAAC,MAAM,kBAAkB;AAC5D,WAAO,GAAG,EAAE,YAAY,GAAG,SAAS,WAAW,KAAK,UAAU,GAAG,KAAK,IAAI,kBAAkB,GAAG,GAAG,KAAK,CAAC;AAAA,EAC1G;AACA,QAAM,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,GAAG,YAAY,GAAG,OAAO,CAAC;AAClE,UAAQ,EAAE,QAAQ;AAAA,IAChB,KAAK,UAAU;AACb,YAAM,OAAO,EAAE,WAAW,SAAS,GAAG,EAAE,UAAU,GAAG,EAAE;AACvD,YAAM,UAAU,EAAE,UAAU,EAAE,WAAW,UAAU,eAAe,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,uBAAuB,KAAK,UAAU,eAAe,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5J,aAAO,MAAM,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAChE;AAAA,IACA,KAAK,UAAU;AACb,YAAM,OAAO,gBAAgB,CAAC,IAAI,GAAG,EAAE,SAAS,GAAG,EAAE;AACrD,aAAO,cAAc,GAAG,MAAM,MAAM,CAAC,GAAG,cAAc,GAAG,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC;AAAA,IAC7E;AAAA,IACA,KAAK;AACH,aAAO,MAAM,GAAG,EAAE,mBAAmB;AAAA,QACnC,GAAG,EAAE,QAAQ,SAAS,CAAC,GAAG,EAAE,+BAA+B,EAAE,GAAG,IAAI,IAAI,CAAC;AAAA,QACzE,GAAG,EAAE,QAAQ,SAAS,CAAC,GAAG,EAAE,4BAA4B,EAAE,GAAG,IAAI,IAAI,CAAC;AAAA,QACtE,GAAG;AAAA,MACL,CAAC;AAAA,IACH,KAAK;AACH,aAAO,GAAG,EAAE;AAAA,IACd,KAAK;AACH,aAAO,SAAS,MAAM,WAAW;AAAA,IACnC,KAAK;AACH,aAAO,GAAG,EAAE;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AACA,SAAS,YAAY,GAAG,MAAM,aAAa,QAAQ,MAAM,SAAS,eAAe,cAAc,WAAW,OAAO;AAC/G,MAAI,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,CAAC,aAAa,iBAAiB,CAAC;AAAA,EACnC;AACA,QAAM,OAAO,EAAE,mBAAmB;AAClC,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,WAAO,GAAG,EAAE,UAAU,IAAI;AAC1B,QAAI,MAAM,OAAO,EAAG,QAAO,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAAA,EAC3E;AACA,MAAI,MAAO,QAAO,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,KAAK,UAAU,KAAK,CAAC,GAAG,CAAC;AACvE,MAAI,EAAE,YAAY,CAAC,cAAc,IAAI,EAAG,QAAO,GAAG,EAAE,WAAW,IAAI;AACnE,MAAI,aAAa,CAAC,MAAO,QAAO,iBAAiB,MAAM,SAAS;AAChE,MAAI,SAAS,SAAU,QAAO;AAC9B,QAAM,eAAe,SAAS,YAAY,gBAAgB,EAAE,iBAAiB;AAC7E,MAAI,cAAc;AAChB,WAAO,GAAG,EAAE,iBAAiB,IAAI,sBAAsB,KAAK,UAAU,EAAE,YAAY,CAAC;AAAA,EACvF;AACA,MAAI,SAAS,YAAY,EAAE,YAAY,EAAE,WAAY,QAAO,GAAG,EAAE,aAAa,IAAI;AAClF,SAAO;AACT;AACA,SAAS,SAAS,GAAG,YAAY;AAC/B,SAAO,cAAc,iBAAiB,CAAC;AACzC;AACA,SAAS,kBAAkB,MAAM,MAAM,aAAa,QAAQ,MAAM,SAAS,eAAe,WAAW,eAAe,QAAQ;AAC1H,SAAO,KAAK,IAAI,CAAC,MAAM;AACrB,UAAM,MAAM,aAAa,SAAS,GAAG,CAAC,CAAC,UAAU,UAAU,IAAI,WAAW,UAAU,KAAK,UAAU,UAAU,SAAS,WAAW,WAAW,QAAQ,KAAK,KAAK,UAAU,EAAE,IAAI,CAAC,MAAM;AACrL,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,KAAK,QAAQ,OAAO,QAAQ,EAAE,IAAI;AAAA,IAC5C;AACA,WAAO,KAAK,KAAK,UAAU,EAAE,IAAI,CAAC,KAAK,KAAK;AAAA,EAC9C,CAAC,EAAE,KAAK,IAAI;AACd;AACA,SAAS,SAAS,MAAM,MAAM;AAC5B,QAAM,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAC/C,SAAO,KAAK,OAAO,CAAC,MAAM,QAAQ,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM;AAChF,UAAM,IAAI,KAAK,KAAK,UAAU,EAAE,IAAI,CAAC;AACrC,UAAM,KAAK,KAAK,KAAK,UAAU,EAAE,KAAK,CAAC;AACvC,UAAM,MAAM,GAAG,EAAE,OAAO,GAAG,EAAE,IAAI,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,QAAQ,IAAI,EAAE,KAAK;AAC5E,WAAO,GAAG,EAAE,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,KAAK,UAAU,GAAG,CAAC;AAAA,EAClI,CAAC;AACH;AACA,SAAS,YAAY,MAAM,KAAK,MAAM;AACpC,SAAO,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,OAAO,KAAK,OAAO,IAAI,EAAE,KAAK,IAAI;AAC1E;AACA,SAAS,gBAAgB,OAAO;AAC9B,QAAM,UAAU,MAAM,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC;AAC/E,QAAM,EAAE,QAAQ,KAAK,IAAI;AAAA,IACvB,MAAM;AAAA,IACN,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAAA,IAC1C,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAAA,EAChD;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAAA,IACpD,SAAS,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AAAA,IAC1D,eAAe,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAAA,EACxE;AACF;AACA,SAAS,eAAe,MAAM,MAAM;AAClC,QAAM,MAAM,SAAS,WAAW,cAAc,KAAK,KAAK,IAAI,cAAc,KAAK,KAAK;AACpF,SAAO,kBAAkB,KAAK,IAAI;AACpC;AACA,SAAS,YAAY,MAAM,OAAO,CAAC,GAAG;AACpC,OAAK,KAAK,IAAI;AACd,aAAW,OAAO,KAAK,KAAM,aAAY,IAAI,OAAO,IAAI;AACxD,SAAO;AACT;AACA,SAAS,mBAAmB,MAAM,MAAM,aAAa,WAAW,eAAe,QAAQ;AACrF,QAAM,OAAO,eAAe,MAAM,IAAI;AACtC,QAAM,EAAE,QAAQ,MAAM,MAAM,SAAS,cAAc,IAAI,gBAAgB,KAAK,KAAK;AACjF,QAAM,KAAK,YAAY,EAAE,OAAO,KAAK,MAAM,QAAQ,MAAM,YAAY,UAAU,WAAW,IAAI;AAC9F,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,EAAE,MAAM,QAAQ,QAAQ,KAAK,MAAM,OAAO,IAAI;AAAA,EACzD;AACA,QAAM,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ;AAClC,UAAM,QAAQ,eAAe,GAAG,EAAE,IAAI,CAAC,MAAM,QAAQ,CAAC;AAAA,CACzD,EAAE,KAAK,EAAE;AACN,UAAM,QAAQ;AAAA,MACZ,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI,SAAS,GAAG,EAAE;AAAA,EAClC,YAAY,YAAY,KAAK,CAAC,CAAC;AAAA,OAC1B,GAAG,EAAE;AAAA,EACV,YAAY,YAAY,KAAK,CAAC,CAAC;AAAA;AAE7B,WAAO,GAAG,KAAK,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK;AAAA,EACtE,CAAC;AACD,QAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AACxD,SAAO,MAAM,GAAG,EAAE;AAAA,EAClB,IAAI;AAAA,KACD,SAAS,MAAM,IAAI,CAAC;AACzB;AACA,SAAS,oBAAoB,OAAO,OAAO,aAAa,WAAW,eAAe,OAAO,QAAQ;AAC/F,QAAM,MAAM,CAAC;AACb,aAAW,QAAQ,CAAC,UAAU,QAAQ,GAAG;AACvC,UAAM,OAAO,MAAM,IAAI;AACvB,QAAI,CAAC,KAAM;AACX,UAAM,OAAO,iBAAiB,MAAM,MAAM,QAAQ,KAAK;AACvD,UAAM,QAAQ,eAAe,MAAM,MAAM,QAAQ,KAAK;AACtD,UAAM,OAAO,mBAAmB,MAAM,MAAM,aAAa,WAAW,eAAe,MAAM;AACzF,QAAI;AAAA,MACF,gBAAgB,IAAI,MAAM,IAAI;AAAA;AAAA,cAEtB,KAAK,MAAM,EAAE,uBAAuB,IAAI;AAAA;AAAA,eAEvC,eAAe,GAAG,IAAI,MAAM,EAAE,qBAAqB,IAAI;AAAA,IAClE;AAAA,EACF;AACA,SAAO,IAAI,SAAS;AAAA,EACpB,IAAI,KAAK,MAAM,CAAC;AAAA,IACd;AACJ;AACA,SAAS,eAAe,OAAO,UAAU,OAAO;AAC9C,QAAM,MAAM,CAAC;AACb,aAAW,QAAQ,CAAC,UAAU,QAAQ,GAAG;AACvC,QAAI,SAAS,YAAY,MAAM,SAAU;AACzC,UAAM,OAAO,gBAAgB,OAAO,SAAS,QAAQ,SAAS,aAAa,CAAC,GAAG,MAAM,KAAK;AAC1F,QAAI,KAAM,KAAI,IAAI,IAAI;AAAA,EACxB;AACA,SAAO;AACT;AACA,SAAS,mBAAmB,OAAO,OAAO,aAAa,WAAW,gBAAgB,OAAO,uBAAuB,OAAO,SAAS,CAAC,GAAG,QAAQ;AAC1I,QAAM,IAAI,MAAM;AAChB,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,EAAE,QAAQ,MAAM,MAAM,SAAS,cAAc,IAAI,gBAAgB,KAAK;AAC5E,QAAM,KAAK,YAAY,EAAE,OAAO,GAAG,YAAY,UAAU,WAAW,IAAI;AACxE,QAAM,QAAQ;AAAA,IACZ,CAAC,UAAU,UAAU;AAAA,IACrB,CAAC,UAAU,UAAU;AAAA,IACrB,CAAC,UAAU,UAAU;AAAA,EACvB;AACA,QAAM,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AACzC,UAAM,OAAO,WAAW,MAAM,GAAG,KAAK;AACtC,UAAM,QAAQ,SAAS,MAAM,GAAG,KAAK;AACrC,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA,KAAK,EAAE,GAAG,IAAI,MAAM,SAAS,WAAW,WAAW,SAAS,IAAI;AAAA,MAChE;AAAA,MACA,SAAS,EAAE,MAAM,QAAQ,QAAQ,EAAE,IAAI;AAAA,IACzC;AACA,UAAM,OAAO,MAAM,GAAG,EAAE;AAAA,EAC1B,IAAI;AAAA,KACD,SAAS,MAAM,IAAI,CAAC;AACrB,WAAO,gBAAgB,IAAI,MAAM,IAAI;AAAA;AAAA,cAE3B,KAAK,MAAM,EAAE,uBAAuB,IAAI;AAAA;AAAA,eAEvC,eAAe,GAAG,IAAI,MAAM,EAAE,qBAAqB,IAAI;AAAA,EACpE,CAAC;AACD,QAAM,gBAAgB,CAAC,UAAU,QAAQ,EAAE,QAAQ,CAAC,MAAM;AACxD,UAAM,OAAO,OAAO,CAAC;AACrB,WAAO,OAAO,YAAY,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,QAAQ,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAAA,EACxF,CAAC;AACD,QAAM,aAAa,cAAc,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE;AACvD,QAAM,aAA6B,oBAAI,IAAI;AAC3C,MAAI,WAAW;AACb,UAAM,MAAM,CAAC,CAAC,UAAU;AACxB,QAAI,CAAC,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG;AAC/E,iBAAW,IAAI,CAAC;AAAA,IAClB;AACA,eAAW,CAAC,MAAM,EAAE,KAAK,eAAe;AACtC,UAAI,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC,EAAG,YAAW,IAAI,IAAI;AAAA,IAC3D;AAAA,EACF;AACA,QAAM,eAAe,WAAW,OAAO,iBAAiB,CAAC,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,YAAY,UAAU,eAAe;AAAA,IACrH;AACF,QAAM,YAAY,CAAC,aAAa,CAAC,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,EAAE;AAAA,IAC3F,CAAC,MAAM,EAAE,OAAO,SAAS;AAAA,EAC3B;AACA,QAAM,SAAS,uBAAuB,sBAAsB,OAAO,gBAAgB,CAAC,IAAI,SAAS,UAAU,GAAG,KAAK,CAAC,IAAI;AACxH,QAAM,aAAa,SAAS;AAAA,EAC5B,MAAM;AAAA,IACJ;AACF,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,aAAa,WAAW,UAAU,GAAG,KAAK;AAChD,QAAM,gBAAgB,QAAQ,WAAW,CAAC,KAAK,CAAC,GAAG;AAAA,IACjD,CAAC,MAAM,2BAA2B,CAAC,IAAI,EAAE,MAAM;AAAA,cACrC,EAAE,KAAK,MAAM,EAAE,uBAAuB,UAAU,KAAK,KAAK,UAAU,EAAE,MAAM,CAAC;AAAA,EACzF,EAAE,KAAK,MAAM;AACb,QAAM,YAAY,eAAe;AAAA,EACjC,YAAY;AAAA,IACV;AACF,QAAM,WAAW;AAAA,IACf;AAAA,IACA,GAAG,CAAC,UAAU,QAAQ,EAAE,QAAQ,CAAC,MAAM;AACrC,YAAM,OAAO,OAAO,CAAC;AACrB,aAAO,OAAO,YAAY,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;AAAA,IACzD,CAAC;AAAA,EACH;AACA,QAAM,gBAAgB,SAAS,KAAK,CAAC,MAAM;AACzC,UAAM,MAAM,gBAAgB,CAAC;AAC7B,WAAO,kBAAkB,EAAE,SAAS,IAAI,QAAQ,IAAI,IAAI;AAAA,EAC1D,CAAC,IAAI;AAAA,EACL,oBAAoB,KAAK;AACzB,SAAO,eAAe,EAAE;AAAA,EACxB,YAAY,GAAG,YAAY;AAAA,EAC3B,aAAa,KAAK,EAAE,GAAG,aAAa;AAAA,EACpC,OAAO,KAAK,MAAM,CAAC;AAAA,EACnB,SAAS,GAAG,UAAU,GAAG,UAAU;AACrC;AACA,IAAI,kBAAkB,MAAM;AAAA,EAC1B,YAAY,UAAU;AACpB,SAAK,WAAW;AAChB,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,MAAM,SAAS,MAAM;AACnB,UAAM,KAAK,WAAW,KAAK,QAAQ;AACnC,UAAM,OAAO,MAAM,OAAO,MAAM;AAChC,UAAM,MAAM,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,MAAM;AACnD,UAAM,QAAQ,CAAC;AACf,UAAM,GAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACvC,UAAM,QAAQ,aAAa,IAAI;AAC/B,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,aAAa,KAAK,cAAc;AACtC,UAAM,aAAa,KAAK,aAAa,KAAK;AAC1C,UAAM,YAAY,cAAc,KAAK,aAAa;AAAA,MAChD,iBAAiB;AAAA,QACf,KAAK;AAAA,QACL;AAAA,QACA,QAAQ,IAAI;AAAA,QACZ,KAAK;AAAA,MACP;AAAA,MACA,YAAY,CAAC,CAAC,KAAK;AAAA,IACrB,IAAI;AACJ,QAAI,cAAc,CAAC,KAAK,YAAY;AAClC,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,UAAM,cAAc,KAAK,gBAAgB,mBAAmB,KAAK,aAAa,CAAC,MAAM,QAAQ,KAAK,CAAC,CAAC,IAAI;AACxG,UAAM,SAAS,eAAe,KAAK,SAAS,QAAQ,KAAK,OAAO;AAChE,eAAW,QAAQ,QAAQ,SAAS,CAAC,EAAG,SAAQ,KAAK,UAAU,IAAI,EAAE;AACrE,eAAW,SAAS,KAAK,SAAS,QAAQ;AACxC,YAAM,WAAW,KAAK,KAAK,KAAK,eAAe,MAAM,QAAQ,UAAU,CAAC;AACxE,YAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,KAAK;AAAA,QACP,CAAC,CAAC,MAAM;AAAA,QACR,KAAK,gBAAgB,eAAe,OAAO,KAAK,UAAU,WAAW,IAAI,CAAC;AAAA,QAC1E;AAAA,MACF;AACA,YAAM,YAAY,MAAM;AAAA,QACtB,YAAY,KAAK,YAAY,IAAI;AAAA,QACjC;AAAA,QACA,KAAK;AAAA,MACP;AACA,YAAM,GAAG,UAAU,UAAU,WAAW,MAAM;AAC9C,YAAM,KAAK,QAAQ;AAAA,IACrB;AACA,UAAM,YAAY,KAAK,KAAK,KAAK,UAAU;AAC3C,UAAM,iBAAiB,MAAM;AAAA,MAC3B,YAAY,KAAK,YAAY,IAAI,KAAK,aAAa,KAAK,UAAU,IAAI;AAAA,MACtE;AAAA,MACA,KAAK;AAAA,IACP;AACA,UAAM,GAAG,UAAU,WAAW,gBAAgB,MAAM;AACpD,UAAM,KAAK,SAAS;AACpB,WAAO;AAAA,EACT;AAAA,EACA,YAAY,OAAO,MAAM;AACvB,WAAO;AAAA,MACL;AAAA,MACA,aAAa,IAAI;AAAA,MACjB,MAAM,eAAe;AAAA,MACrB;AAAA,MACA,CAAC,CAAC,MAAM;AAAA,MACR,CAAC,CAAC,MAAM;AAAA,MACR,CAAC;AAAA,MACD,eAAe,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACpD;AAAA,EACF;AAAA,EACA,aAAa,UAAU,MAAM;AAC3B,UAAM,aAAa,KAAK,cAAc;AACtC,WAAO,SAAS,OAAO;AAAA,MACrB,CAAC,MAAM,kBAAkB,gBAAgB,EAAE,QAAQ,YAAY,KAAK,eAAe,CAAC;AAAA,IACtF,EAAE,KAAK,IAAI,IAAI;AAAA,EACjB;AACF;AACA,IAAI,gBAAgB;AACpB,SAAS,YAAY,GAAG;AACtB,MAAI,KAAK,EAAE,YAAY,MAAO,QAAO;AACrC,QAAM,OAAO,GAAG,MAAM,KAAK;AAC3B,QAAM,QAAQ,OAAO,KAAK,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,IAAI;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;","names":[]}
|
package/dist/dist-P24ILO5N.js
DELETED
|
@@ -1,431 +0,0 @@
|
|
|
1
|
-
// ../generator-hono/dist/index.js
|
|
2
|
-
import { fileWriter } from "@drzl/validation-core";
|
|
3
|
-
import {
|
|
4
|
-
formatCode,
|
|
5
|
-
importSpecifier,
|
|
6
|
-
resolveAffix,
|
|
7
|
-
resolveConfiguredImport,
|
|
8
|
-
schemaName
|
|
9
|
-
} from "@drzl/validation-core";
|
|
10
|
-
var APP_MODULE = "index";
|
|
11
|
-
var q = (v) => JSON.stringify(v);
|
|
12
|
-
var lit = (v) => /['\\]/.test(v) ? JSON.stringify(v) : `'${v}'`;
|
|
13
|
-
var NUMERIC_SEGMENT = String.raw`/^-?\d+(\.\d+)?$/`;
|
|
14
|
-
var LIB_IMPORTS = {
|
|
15
|
-
zod: "import { z } from 'zod';",
|
|
16
|
-
valibot: "import * as v from 'valibot';",
|
|
17
|
-
arktype: "import { type } from 'arktype';"
|
|
18
|
-
};
|
|
19
|
-
var LIB_USAGE = {
|
|
20
|
-
zod: /\bz\./,
|
|
21
|
-
valibot: /\bv\./,
|
|
22
|
-
arktype: /\btype\(|\.infer\b/
|
|
23
|
-
};
|
|
24
|
-
var LIBS = {
|
|
25
|
-
zod: {
|
|
26
|
-
number: "z.number()",
|
|
27
|
-
string: "z.string()",
|
|
28
|
-
boolean: "z.boolean()",
|
|
29
|
-
date: "z.date()",
|
|
30
|
-
unknown: "z.unknown()",
|
|
31
|
-
enum: (vals) => `z.enum([${vals.map(q).join(", ")}] as const)`,
|
|
32
|
-
nullable: (b) => `${b}.nullable()`,
|
|
33
|
-
optional: (b) => `${b}.optional()`,
|
|
34
|
-
object: (body) => `z.object({
|
|
35
|
-
${body}
|
|
36
|
-
})`,
|
|
37
|
-
objectInline: (body) => `z.object({ ${body} })`,
|
|
38
|
-
partialUpdate: (s) => `${s}.partial()`,
|
|
39
|
-
// Not `z.coerce.number()`, and not `z.coerce.date()`: both accept far more than a path
|
|
40
|
-
// segment addressing a row should. See the measured grid on `LibDialect.coerce`.
|
|
41
|
-
coerce: (t) => t === "number" ? `z.string().regex(${NUMERIC_SEGMENT}).transform(Number)` : t === "Date" ? "z.iso.datetime().transform((s) => new Date(s))" : null,
|
|
42
|
-
infer: (s) => `z.output<typeof ${s}>`
|
|
43
|
-
},
|
|
44
|
-
valibot: {
|
|
45
|
-
number: "v.number()",
|
|
46
|
-
string: "v.string()",
|
|
47
|
-
boolean: "v.boolean()",
|
|
48
|
-
date: "v.date()",
|
|
49
|
-
unknown: "v.unknown()",
|
|
50
|
-
enum: (vals) => `v.picklist([${vals.map(q).join(", ")}] as const)`,
|
|
51
|
-
nullable: (b) => `v.nullable(${b})`,
|
|
52
|
-
optional: (b) => `v.optional(${b})`,
|
|
53
|
-
object: (body) => `v.object({
|
|
54
|
-
${body}
|
|
55
|
-
})`,
|
|
56
|
-
objectInline: (body) => `v.object({ ${body} })`,
|
|
57
|
-
// A valibot pipe step sees the previous step's *output*, so the check has to happen while the
|
|
58
|
-
// value is still the string: by the time a `v.transform(Number)` has run there is no string
|
|
59
|
-
// left to look at. See the measured grid on `LibDialect.coerce`.
|
|
60
|
-
coerce: (t) => t === "number" ? `v.pipe(v.string(), v.regex(${NUMERIC_SEGMENT}), v.transform(Number))` : t === "Date" ? "v.pipe(v.string(), v.isoTimestamp(), v.transform((s) => new Date(s)))" : null,
|
|
61
|
-
infer: (s) => `v.InferOutput<typeof ${s}>`
|
|
62
|
-
},
|
|
63
|
-
arktype: {
|
|
64
|
-
number: "number",
|
|
65
|
-
string: "string",
|
|
66
|
-
boolean: "boolean",
|
|
67
|
-
date: "Date",
|
|
68
|
-
unknown: "unknown",
|
|
69
|
-
// The surrounding encode adds the quotes, so the union is built with the inner quoting
|
|
70
|
-
// ArkType expects.
|
|
71
|
-
enum: (vals) => vals.map((x) => `'${x.replace(/'/g, "\\'")}'`).join(" | "),
|
|
72
|
-
nullable: (b) => `(${b} | null)`,
|
|
73
|
-
optional: (b) => `${b}?`,
|
|
74
|
-
object: (body) => `type({
|
|
75
|
-
${body}
|
|
76
|
-
})`,
|
|
77
|
-
objectInline: (body) => `type({ ${body} })`,
|
|
78
|
-
fieldIsString: true,
|
|
79
|
-
// ArkType ships these as keywords, and they are *morphs*: the declared output type is
|
|
80
|
-
// `number`, not `string`. Returned bare, because `fieldIsString` quotes every expression this
|
|
81
|
-
// dialect produces and a keyword returned pre-quoted arrives as `"'string.numeric.parse'"`,
|
|
82
|
-
// which ArkType reads as a string *literal* type matching nothing but that sentence.
|
|
83
|
-
//
|
|
84
|
-
// `string.date.parse` and not `string.date.iso.parse` was the first draft, and it accepts
|
|
85
|
-
// `"1"` as the year 2001, which is the same over-permissiveness the coercing spellings have.
|
|
86
|
-
coerce: (t) => t === "number" ? "string.numeric.parse" : t === "Date" ? "string.date.iso.parse" : null,
|
|
87
|
-
infer: (s) => `typeof ${s}.infer`
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
var cap = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
91
|
-
var isIdent = (s) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(s);
|
|
92
|
-
function keyColumns(table) {
|
|
93
|
-
const names = table.primaryKey?.columns ?? [];
|
|
94
|
-
if (!names.length) return null;
|
|
95
|
-
const cols = names.map((n) => table.columns.find((c) => c.name === n));
|
|
96
|
-
if (cols.some((c) => !c)) return null;
|
|
97
|
-
return cols;
|
|
98
|
-
}
|
|
99
|
-
function isWide(column) {
|
|
100
|
-
if (column.enumValues && column.enumValues.length) return false;
|
|
101
|
-
if (column.shape?.kind === "tuple" || column.shape?.kind === "numberObject") return false;
|
|
102
|
-
return !["number", "string", "boolean", "Date"].includes(column.tsType);
|
|
103
|
-
}
|
|
104
|
-
function mapExpr(column, lib, mode) {
|
|
105
|
-
const d = LIBS[lib];
|
|
106
|
-
let base = (() => {
|
|
107
|
-
if (column.enumValues && column.enumValues.length) return d.enum(column.enumValues);
|
|
108
|
-
switch (column.tsType) {
|
|
109
|
-
case "number":
|
|
110
|
-
return d.number;
|
|
111
|
-
case "string":
|
|
112
|
-
return d.string;
|
|
113
|
-
case "boolean":
|
|
114
|
-
return d.boolean;
|
|
115
|
-
case "Date":
|
|
116
|
-
return d.date;
|
|
117
|
-
default:
|
|
118
|
-
return d.unknown;
|
|
119
|
-
}
|
|
120
|
-
})();
|
|
121
|
-
if (column.nullable) base = d.nullable(base);
|
|
122
|
-
if (mode !== "select") {
|
|
123
|
-
const optional = mode === "update" || column.nullable || column.hasDefault;
|
|
124
|
-
if (optional) base = d.optional(base);
|
|
125
|
-
}
|
|
126
|
-
return base;
|
|
127
|
-
}
|
|
128
|
-
function objectKey(name) {
|
|
129
|
-
return isIdent(name) ? name : JSON.stringify(name);
|
|
130
|
-
}
|
|
131
|
-
function field(column, lib, mode) {
|
|
132
|
-
const d = LIBS[lib];
|
|
133
|
-
const expr = mapExpr(column, lib, mode);
|
|
134
|
-
return `${objectKey(column.name)}: ${d.fieldIsString ? JSON.stringify(expr) : expr}`;
|
|
135
|
-
}
|
|
136
|
-
function paramField(column, lib) {
|
|
137
|
-
const d = LIBS[lib];
|
|
138
|
-
const expr = (() => {
|
|
139
|
-
if (column.enumValues && column.enumValues.length) return d.enum(column.enumValues);
|
|
140
|
-
return d.coerce(column.tsType) ?? d.string;
|
|
141
|
-
})();
|
|
142
|
-
return `${objectKey(column.name)}: ${d.fieldIsString ? JSON.stringify(expr) : expr}`;
|
|
143
|
-
}
|
|
144
|
-
function renderSchema(table, lib, mode) {
|
|
145
|
-
const d = LIBS[lib];
|
|
146
|
-
const cols = table.columns.filter((c) => mode === "select" ? true : !c.isGenerated);
|
|
147
|
-
const body = cols.map((c) => ` ${field(c, lib, mode)},`).join("\n");
|
|
148
|
-
const schema = d.object(body);
|
|
149
|
-
return mode === "update" && d.partialUpdate ? d.partialUpdate(schema) : schema;
|
|
150
|
-
}
|
|
151
|
-
function toCase(s, c) {
|
|
152
|
-
if (!c) return s;
|
|
153
|
-
const parts = s.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").split(/\s+/);
|
|
154
|
-
if (c === "camel") {
|
|
155
|
-
return parts.map(
|
|
156
|
-
(p, i) => i === 0 ? p.toLowerCase() : p.charAt(0).toUpperCase() + p.slice(1).toLowerCase()
|
|
157
|
-
).join("");
|
|
158
|
-
}
|
|
159
|
-
if (c === "kebab") return parts.map((p) => p.toLowerCase()).join("-");
|
|
160
|
-
if (c === "snake") return parts.map((p) => p.toLowerCase()).join("_");
|
|
161
|
-
return s;
|
|
162
|
-
}
|
|
163
|
-
function routesExportName(table, naming) {
|
|
164
|
-
const base = `${table.tsName}${naming?.routerSuffix ?? "Routes"}`;
|
|
165
|
-
const c = naming?.procedureCase;
|
|
166
|
-
return toCase(base, c === "kebab" ? "camel" : c);
|
|
167
|
-
}
|
|
168
|
-
function mountPath(table, naming) {
|
|
169
|
-
return `/${toCase(table.tsName, naming?.procedureCase)}`;
|
|
170
|
-
}
|
|
171
|
-
var HonoGenerator = class {
|
|
172
|
-
constructor(analysis) {
|
|
173
|
-
this.analysis = analysis;
|
|
174
|
-
}
|
|
175
|
-
async generate(opts) {
|
|
176
|
-
const fs = fileWriter(opts.fileSink);
|
|
177
|
-
const path = await import("path");
|
|
178
|
-
const out = path.resolve(process.cwd(), opts.outputDir);
|
|
179
|
-
const ctx = { out };
|
|
180
|
-
await fs.mkdir(out, { recursive: true });
|
|
181
|
-
const files = [];
|
|
182
|
-
const write = async (filePath, content) => {
|
|
183
|
-
const formatted = await formatCode(
|
|
184
|
-
buildHeader(opts.outputHeader) + content,
|
|
185
|
-
filePath,
|
|
186
|
-
opts.format
|
|
187
|
-
);
|
|
188
|
-
await fs.writeFile(filePath, formatted, "utf8");
|
|
189
|
-
files.push(filePath);
|
|
190
|
-
};
|
|
191
|
-
const barrelPath = path.join(out, `${APP_MODULE}.ts`);
|
|
192
|
-
const modules = [];
|
|
193
|
-
const total = this.analysis.tables.length;
|
|
194
|
-
let index = 0;
|
|
195
|
-
for (const table of this.analysis.tables) {
|
|
196
|
-
const base = `${table.tsName}${opts.naming?.routerSuffix ?? ""}`;
|
|
197
|
-
const filePath = path.join(out, `${toCase(base, opts.naming?.procedureCase)}.ts`);
|
|
198
|
-
if (filePath === barrelPath) {
|
|
199
|
-
throw new Error(
|
|
200
|
-
`@drzl/generator-hono: the routes for table "${table.name}" would be written to ${filePath}, which is the barrel this generator also writes. Set naming.routerSuffix to move it out of the way.`
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
await write(filePath, renderRoutes(table, opts, ctx));
|
|
204
|
-
modules.push({ table, filePath, exportName: routesExportName(table, opts.naming) });
|
|
205
|
-
index++;
|
|
206
|
-
opts.onProgress?.({ index, total, table: table.name, filePath });
|
|
207
|
-
}
|
|
208
|
-
await write(barrelPath, renderBarrel(modules, ctx, path, opts));
|
|
209
|
-
return { files };
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
var index_default = HonoGenerator;
|
|
213
|
-
function buildHeader(h) {
|
|
214
|
-
if (h && h.enabled === false) return "";
|
|
215
|
-
const text = h?.text?.trim();
|
|
216
|
-
const lines = text ? text.split(/\r?\n/).map((l) => `// ${l}`) : [
|
|
217
|
-
"// Generated by DRZL (@drzl/*)",
|
|
218
|
-
"// Generated output is granted to you under your project's license.",
|
|
219
|
-
"// You may use, copy, modify, and distribute without attribution."
|
|
220
|
-
];
|
|
221
|
-
return lines.join("\n") + "\n\n";
|
|
222
|
-
}
|
|
223
|
-
var VALIDATORS = {
|
|
224
|
-
standard: { fn: "sValidator", from: "@hono/standard-validator" },
|
|
225
|
-
zod: { fn: "zValidator", from: "@hono/zod-validator" }
|
|
226
|
-
};
|
|
227
|
-
var VALID_PARAM_HINT = "// The validated path parameters are at c.req.valid('param').";
|
|
228
|
-
function renderRoutes(table, opts, ctx) {
|
|
229
|
-
const lib = opts.validation?.library ?? "zod";
|
|
230
|
-
const d = LIBS[lib];
|
|
231
|
-
const validator = VALIDATORS[opts.validator ?? "standard"];
|
|
232
|
-
const insertName = `Insert${table.tsName}Schema`;
|
|
233
|
-
const updateName = `Update${table.tsName}Schema`;
|
|
234
|
-
const selectName = `Select${table.tsName}Schema`;
|
|
235
|
-
const paramsName = `${cap(table.tsName)}ParamsSchema`;
|
|
236
|
-
const rowType = `Select${table.tsName}Row`;
|
|
237
|
-
const writable = !table.readOnly;
|
|
238
|
-
const key = keyColumns(table);
|
|
239
|
-
const routes = [];
|
|
240
|
-
const notImplemented = (what) => `throw new Error('Not implemented: ${what} ${table.tsName}.');`;
|
|
241
|
-
routes.push({
|
|
242
|
-
name: "list",
|
|
243
|
-
method: "get",
|
|
244
|
-
path: "/",
|
|
245
|
-
middleware: [],
|
|
246
|
-
// The stub states its own contract. tRPC has `.output()` and Hono has nothing like it: what a
|
|
247
|
-
// Hono client infers is the *handler's return type*, so the only place an output schema can be
|
|
248
|
-
// honoured is the value handed to `c.json`. Annotating the local is what puts the select shape
|
|
249
|
-
// into `hc<AppType>()` rather than `never[]`.
|
|
250
|
-
body: [`const rows: ${rowType}[] = [];`, "return c.json(rows);"]
|
|
251
|
-
});
|
|
252
|
-
if (key) {
|
|
253
|
-
const keyPath = "/" + key.map((c) => `:${c.name}`).join("/");
|
|
254
|
-
routes.push({
|
|
255
|
-
name: "byId",
|
|
256
|
-
method: "get",
|
|
257
|
-
path: keyPath,
|
|
258
|
-
middleware: [`${validator.fn}('param', ${paramsName})`],
|
|
259
|
-
body: [VALID_PARAM_HINT, `const row: ${rowType} | null = null;`, "return c.json(row);"]
|
|
260
|
-
});
|
|
261
|
-
if (writable) {
|
|
262
|
-
routes.push({
|
|
263
|
-
name: "update",
|
|
264
|
-
method: "patch",
|
|
265
|
-
path: keyPath,
|
|
266
|
-
middleware: [
|
|
267
|
-
`${validator.fn}('param', ${paramsName})`,
|
|
268
|
-
`${validator.fn}('json', ${updateName})`
|
|
269
|
-
],
|
|
270
|
-
body: [notImplemented("update")]
|
|
271
|
-
});
|
|
272
|
-
routes.push({
|
|
273
|
-
name: "delete",
|
|
274
|
-
method: "delete",
|
|
275
|
-
path: keyPath,
|
|
276
|
-
middleware: [`${validator.fn}('param', ${paramsName})`],
|
|
277
|
-
body: [VALID_PARAM_HINT, "return c.json(true);"]
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
if (writable) {
|
|
282
|
-
routes.push({
|
|
283
|
-
name: "create",
|
|
284
|
-
method: "post",
|
|
285
|
-
path: "/",
|
|
286
|
-
middleware: [`${validator.fn}('json', ${insertName})`],
|
|
287
|
-
body: [notImplemented("create")]
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
if (opts.includeRelations) {
|
|
291
|
-
routes.push(...relationRoutes(table, lib, rowType, validator.fn, opts));
|
|
292
|
-
}
|
|
293
|
-
const order = ["list", "byId", "create", "update", "delete"];
|
|
294
|
-
const rank = (n) => order.indexOf(n) === -1 ? order.length : order.indexOf(n);
|
|
295
|
-
routes.sort((a, b) => rank(a.name) - rank(b.name));
|
|
296
|
-
const exportName = routesExportName(table, opts.naming);
|
|
297
|
-
const chain = routes.map((r) => {
|
|
298
|
-
const args = [lit(r.path), ...r.middleware].join(", ");
|
|
299
|
-
const ctxParam = r.body.some((line) => /\bc\./.test(line)) ? "c" : "_c";
|
|
300
|
-
return [
|
|
301
|
-
` .${r.method}(${args}, async (${ctxParam}) => {`,
|
|
302
|
-
...r.body.map((line) => ` ${line}`),
|
|
303
|
-
` })`
|
|
304
|
-
].join("\n");
|
|
305
|
-
}).join("\n");
|
|
306
|
-
const body = `export const ${exportName} = new Hono()
|
|
307
|
-
${chain};
|
|
308
|
-
`;
|
|
309
|
-
const useShared = !!opts.validation?.useShared && !!opts.validation?.importPath;
|
|
310
|
-
const declared = [];
|
|
311
|
-
if (!useShared) {
|
|
312
|
-
if (writable) {
|
|
313
|
-
declared.push(`export const ${insertName} = ${renderSchema(table, lib, "insert")};`);
|
|
314
|
-
declared.push(`export const ${updateName} = ${renderSchema(table, lib, "update")};`);
|
|
315
|
-
}
|
|
316
|
-
declared.push(`export const ${selectName} = ${renderSchema(table, lib, "select")};`);
|
|
317
|
-
}
|
|
318
|
-
if (key) {
|
|
319
|
-
declared.push(
|
|
320
|
-
`export const ${paramsName} = ${d.objectInline(
|
|
321
|
-
key.map((c) => paramField(c, lib)).join(", ")
|
|
322
|
-
)};`
|
|
323
|
-
);
|
|
324
|
-
}
|
|
325
|
-
declared.push(`export type ${rowType} = ${d.infer(selectName)};`);
|
|
326
|
-
const decided = [...declared, body].join("\n\n");
|
|
327
|
-
const imports = [];
|
|
328
|
-
if (useShared) {
|
|
329
|
-
const sharedAffix = resolveAffix({
|
|
330
|
-
affix: opts.validation?.affix,
|
|
331
|
-
schemaSuffix: opts.validation?.schemaSuffix
|
|
332
|
-
});
|
|
333
|
-
const wanted = [
|
|
334
|
-
["insert", insertName],
|
|
335
|
-
["update", updateName],
|
|
336
|
-
["select", selectName]
|
|
337
|
-
].filter(([, local]) => decided.includes(local));
|
|
338
|
-
if (wanted.length) {
|
|
339
|
-
const spec = resolveConfiguredImport(
|
|
340
|
-
opts.validation.importPath,
|
|
341
|
-
ctx.out,
|
|
342
|
-
process.cwd(),
|
|
343
|
-
opts.importExtension
|
|
344
|
-
);
|
|
345
|
-
const names = wanted.map(([mode, local]) => {
|
|
346
|
-
const exported = schemaName(mode, table.tsName, sharedAffix);
|
|
347
|
-
return exported === local ? local : `${exported} as ${local}`;
|
|
348
|
-
}).join(", ");
|
|
349
|
-
imports.push(`import { ${names} } from '${spec}';`);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
imports.push(`import { Hono } from 'hono';`);
|
|
353
|
-
if (decided.includes(`${validator.fn}(`)) {
|
|
354
|
-
imports.push(`import { ${validator.fn} } from '${validator.from}';`);
|
|
355
|
-
}
|
|
356
|
-
if (LIB_USAGE[lib].test(decided)) imports.unshift(LIB_IMPORTS[lib]);
|
|
357
|
-
const wide = table.columns.filter(isWide).map((c) => c.name);
|
|
358
|
-
const wideNote = wide.length ? `// No validated type for ${wide.length === 1 ? "this column" : "these columns"}: ${wide.join(", ")}.
|
|
359
|
-
// DRZL could not derive one from the schema, so these routes accept any value there.
|
|
360
|
-
` : "";
|
|
361
|
-
return `// Generated by @drzl/generator-hono
|
|
362
|
-
// Routes for table: ${table.name}
|
|
363
|
-
${wideNote}${imports.join("\n")}
|
|
364
|
-
|
|
365
|
-
${decided}`;
|
|
366
|
-
}
|
|
367
|
-
function relationRoutes(table, lib, rowType, validatorFn, opts) {
|
|
368
|
-
const d = LIBS[lib];
|
|
369
|
-
const out = [];
|
|
370
|
-
const taken = /* @__PURE__ */ new Set();
|
|
371
|
-
for (const fk of table.foreignKeys ?? []) {
|
|
372
|
-
if (fk.columns.length !== 1) continue;
|
|
373
|
-
const colName = fk.columns[0];
|
|
374
|
-
const column = table.columns.find((c) => c.name === colName);
|
|
375
|
-
if (!column) continue;
|
|
376
|
-
const segment = toCase(`by-${colName}`, opts.naming?.procedureCase ?? "kebab");
|
|
377
|
-
if (taken.has(segment)) continue;
|
|
378
|
-
taken.add(segment);
|
|
379
|
-
const inline = d.objectInline(paramField(column, lib));
|
|
380
|
-
out.push({
|
|
381
|
-
name: `listBy${cap(colName)}`,
|
|
382
|
-
method: "get",
|
|
383
|
-
path: `/${segment}/:${colName}`,
|
|
384
|
-
middleware: [`${validatorFn}('param', ${inline})`],
|
|
385
|
-
body: [VALID_PARAM_HINT, `const rows: ${rowType}[] = [];`, "return c.json(rows);"]
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
return out;
|
|
389
|
-
}
|
|
390
|
-
function renderBarrel(modules, ctx, path, opts) {
|
|
391
|
-
if (!modules.length) {
|
|
392
|
-
return `// Generated by @drzl/generator-hono
|
|
393
|
-
// No tables detected in analysis. Add tables to your schema and regenerate.
|
|
394
|
-
import { Hono } from 'hono';
|
|
395
|
-
|
|
396
|
-
export const app = new Hono();
|
|
397
|
-
|
|
398
|
-
/** The type a Hono client is parameterised by: \`hc<AppType>('/')\`. */
|
|
399
|
-
export type AppType = typeof app;
|
|
400
|
-
`;
|
|
401
|
-
}
|
|
402
|
-
const entries = modules.map(({ filePath, exportName, table }) => ({
|
|
403
|
-
rel: importSpecifier(
|
|
404
|
-
"./" + path.relative(ctx.out, filePath).replace(/\\/g, "/"),
|
|
405
|
-
opts.importExtension
|
|
406
|
-
),
|
|
407
|
-
exportName,
|
|
408
|
-
mount: mountPath(table, opts.naming)
|
|
409
|
-
}));
|
|
410
|
-
const imports = entries.map((e) => `import { ${e.exportName} } from '${e.rel}';`).join("\n");
|
|
411
|
-
const chain = entries.map((e) => ` .route(${lit(e.mount)}, ${e.exportName})`).join("\n");
|
|
412
|
-
const reExports = entries.map((e) => `export * from '${e.rel}';`).join("\n");
|
|
413
|
-
return `// Generated by @drzl/generator-hono
|
|
414
|
-
import { Hono } from 'hono';
|
|
415
|
-
${imports}
|
|
416
|
-
|
|
417
|
-
export const app = new Hono()
|
|
418
|
-
${chain};
|
|
419
|
-
|
|
420
|
-
/** The type a Hono client is parameterised by: \`hc<AppType>('/')\`. */
|
|
421
|
-
export type AppType = typeof app;
|
|
422
|
-
|
|
423
|
-
${reExports}
|
|
424
|
-
`;
|
|
425
|
-
}
|
|
426
|
-
export {
|
|
427
|
-
APP_MODULE,
|
|
428
|
-
HonoGenerator,
|
|
429
|
-
index_default as default
|
|
430
|
-
};
|
|
431
|
-
//# sourceMappingURL=dist-P24ILO5N.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../generator-hono/dist/index.js"],"sourcesContent":["// src/index.ts\nimport { fileWriter } from \"@drzl/validation-core\";\nimport {\n formatCode,\n importSpecifier,\n resolveAffix,\n resolveConfiguredImport,\n schemaName\n} from \"@drzl/validation-core\";\nvar APP_MODULE = \"index\";\nvar q = (v) => JSON.stringify(v);\nvar lit = (v) => /['\\\\]/.test(v) ? JSON.stringify(v) : `'${v}'`;\nvar NUMERIC_SEGMENT = String.raw`/^-?\\d+(\\.\\d+)?$/`;\nvar LIB_IMPORTS = {\n zod: \"import { z } from 'zod';\",\n valibot: \"import * as v from 'valibot';\",\n arktype: \"import { type } from 'arktype';\"\n};\nvar LIB_USAGE = {\n zod: /\\bz\\./,\n valibot: /\\bv\\./,\n arktype: /\\btype\\(|\\.infer\\b/\n};\nvar LIBS = {\n zod: {\n number: \"z.number()\",\n string: \"z.string()\",\n boolean: \"z.boolean()\",\n date: \"z.date()\",\n unknown: \"z.unknown()\",\n enum: (vals) => `z.enum([${vals.map(q).join(\", \")}] as const)`,\n nullable: (b) => `${b}.nullable()`,\n optional: (b) => `${b}.optional()`,\n object: (body) => `z.object({\n${body}\n})`,\n objectInline: (body) => `z.object({ ${body} })`,\n partialUpdate: (s) => `${s}.partial()`,\n // Not `z.coerce.number()`, and not `z.coerce.date()`: both accept far more than a path\n // segment addressing a row should. See the measured grid on `LibDialect.coerce`.\n coerce: (t) => t === \"number\" ? `z.string().regex(${NUMERIC_SEGMENT}).transform(Number)` : t === \"Date\" ? \"z.iso.datetime().transform((s) => new Date(s))\" : null,\n infer: (s) => `z.output<typeof ${s}>`\n },\n valibot: {\n number: \"v.number()\",\n string: \"v.string()\",\n boolean: \"v.boolean()\",\n date: \"v.date()\",\n unknown: \"v.unknown()\",\n enum: (vals) => `v.picklist([${vals.map(q).join(\", \")}] as const)`,\n nullable: (b) => `v.nullable(${b})`,\n optional: (b) => `v.optional(${b})`,\n object: (body) => `v.object({\n${body}\n})`,\n objectInline: (body) => `v.object({ ${body} })`,\n // A valibot pipe step sees the previous step's *output*, so the check has to happen while the\n // value is still the string: by the time a `v.transform(Number)` has run there is no string\n // left to look at. See the measured grid on `LibDialect.coerce`.\n coerce: (t) => t === \"number\" ? `v.pipe(v.string(), v.regex(${NUMERIC_SEGMENT}), v.transform(Number))` : t === \"Date\" ? \"v.pipe(v.string(), v.isoTimestamp(), v.transform((s) => new Date(s)))\" : null,\n infer: (s) => `v.InferOutput<typeof ${s}>`\n },\n arktype: {\n number: \"number\",\n string: \"string\",\n boolean: \"boolean\",\n date: \"Date\",\n unknown: \"unknown\",\n // The surrounding encode adds the quotes, so the union is built with the inner quoting\n // ArkType expects.\n enum: (vals) => vals.map((x) => `'${x.replace(/'/g, \"\\\\'\")}'`).join(\" | \"),\n nullable: (b) => `(${b} | null)`,\n optional: (b) => `${b}?`,\n object: (body) => `type({\n${body}\n})`,\n objectInline: (body) => `type({ ${body} })`,\n fieldIsString: true,\n // ArkType ships these as keywords, and they are *morphs*: the declared output type is\n // `number`, not `string`. Returned bare, because `fieldIsString` quotes every expression this\n // dialect produces and a keyword returned pre-quoted arrives as `\"'string.numeric.parse'\"`,\n // which ArkType reads as a string *literal* type matching nothing but that sentence.\n //\n // `string.date.parse` and not `string.date.iso.parse` was the first draft, and it accepts\n // `\"1\"` as the year 2001, which is the same over-permissiveness the coercing spellings have.\n coerce: (t) => t === \"number\" ? \"string.numeric.parse\" : t === \"Date\" ? \"string.date.iso.parse\" : null,\n infer: (s) => `typeof ${s}.infer`\n }\n};\nvar cap = (s) => s.charAt(0).toUpperCase() + s.slice(1);\nvar isIdent = (s) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(s);\nfunction keyColumns(table) {\n const names = table.primaryKey?.columns ?? [];\n if (!names.length) return null;\n const cols = names.map((n) => table.columns.find((c) => c.name === n));\n if (cols.some((c) => !c)) return null;\n return cols;\n}\nfunction isWide(column) {\n if (column.enumValues && column.enumValues.length) return false;\n if (column.shape?.kind === \"tuple\" || column.shape?.kind === \"numberObject\") return false;\n return ![\"number\", \"string\", \"boolean\", \"Date\"].includes(column.tsType);\n}\nfunction mapExpr(column, lib, mode) {\n const d = LIBS[lib];\n let base = (() => {\n if (column.enumValues && column.enumValues.length) return d.enum(column.enumValues);\n switch (column.tsType) {\n case \"number\":\n return d.number;\n case \"string\":\n return d.string;\n case \"boolean\":\n return d.boolean;\n case \"Date\":\n return d.date;\n default:\n return d.unknown;\n }\n })();\n if (column.nullable) base = d.nullable(base);\n if (mode !== \"select\") {\n const optional = mode === \"update\" || column.nullable || column.hasDefault;\n if (optional) base = d.optional(base);\n }\n return base;\n}\nfunction objectKey(name) {\n return isIdent(name) ? name : JSON.stringify(name);\n}\nfunction field(column, lib, mode) {\n const d = LIBS[lib];\n const expr = mapExpr(column, lib, mode);\n return `${objectKey(column.name)}: ${d.fieldIsString ? JSON.stringify(expr) : expr}`;\n}\nfunction paramField(column, lib) {\n const d = LIBS[lib];\n const expr = (() => {\n if (column.enumValues && column.enumValues.length) return d.enum(column.enumValues);\n return d.coerce(column.tsType) ?? d.string;\n })();\n return `${objectKey(column.name)}: ${d.fieldIsString ? JSON.stringify(expr) : expr}`;\n}\nfunction renderSchema(table, lib, mode) {\n const d = LIBS[lib];\n const cols = table.columns.filter((c) => mode === \"select\" ? true : !c.isGenerated);\n const body = cols.map((c) => ` ${field(c, lib, mode)},`).join(\"\\n\");\n const schema = d.object(body);\n return mode === \"update\" && d.partialUpdate ? d.partialUpdate(schema) : schema;\n}\nfunction toCase(s, c) {\n if (!c) return s;\n const parts = s.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[_-]/g, \" \").split(/\\s+/);\n if (c === \"camel\") {\n return parts.map(\n (p, i) => i === 0 ? p.toLowerCase() : p.charAt(0).toUpperCase() + p.slice(1).toLowerCase()\n ).join(\"\");\n }\n if (c === \"kebab\") return parts.map((p) => p.toLowerCase()).join(\"-\");\n if (c === \"snake\") return parts.map((p) => p.toLowerCase()).join(\"_\");\n return s;\n}\nfunction routesExportName(table, naming) {\n const base = `${table.tsName}${naming?.routerSuffix ?? \"Routes\"}`;\n const c = naming?.procedureCase;\n return toCase(base, c === \"kebab\" ? \"camel\" : c);\n}\nfunction mountPath(table, naming) {\n return `/${toCase(table.tsName, naming?.procedureCase)}`;\n}\nvar HonoGenerator = class {\n constructor(analysis) {\n this.analysis = analysis;\n }\n async generate(opts) {\n const fs = fileWriter(opts.fileSink);\n const path = await import(\"path\");\n const out = path.resolve(process.cwd(), opts.outputDir);\n const ctx = { out };\n await fs.mkdir(out, { recursive: true });\n const files = [];\n const write = async (filePath, content) => {\n const formatted = await formatCode(\n buildHeader(opts.outputHeader) + content,\n filePath,\n opts.format\n );\n await fs.writeFile(filePath, formatted, \"utf8\");\n files.push(filePath);\n };\n const barrelPath = path.join(out, `${APP_MODULE}.ts`);\n const modules = [];\n const total = this.analysis.tables.length;\n let index = 0;\n for (const table of this.analysis.tables) {\n const base = `${table.tsName}${opts.naming?.routerSuffix ?? \"\"}`;\n const filePath = path.join(out, `${toCase(base, opts.naming?.procedureCase)}.ts`);\n if (filePath === barrelPath) {\n throw new Error(\n `@drzl/generator-hono: the routes for table \"${table.name}\" would be written to ${filePath}, which is the barrel this generator also writes. Set naming.routerSuffix to move it out of the way.`\n );\n }\n await write(filePath, renderRoutes(table, opts, ctx));\n modules.push({ table, filePath, exportName: routesExportName(table, opts.naming) });\n index++;\n opts.onProgress?.({ index, total, table: table.name, filePath });\n }\n await write(barrelPath, renderBarrel(modules, ctx, path, opts));\n return { files };\n }\n};\nvar index_default = HonoGenerator;\nfunction buildHeader(h) {\n if (h && h.enabled === false) return \"\";\n const text = h?.text?.trim();\n const lines = text ? text.split(/\\r?\\n/).map((l) => `// ${l}`) : [\n \"// Generated by DRZL (@drzl/*)\",\n \"// Generated output is granted to you under your project's license.\",\n \"// You may use, copy, modify, and distribute without attribution.\"\n ];\n return lines.join(\"\\n\") + \"\\n\\n\";\n}\nvar VALIDATORS = {\n standard: { fn: \"sValidator\", from: \"@hono/standard-validator\" },\n zod: { fn: \"zValidator\", from: \"@hono/zod-validator\" }\n};\nvar VALID_PARAM_HINT = \"// The validated path parameters are at c.req.valid('param').\";\nfunction renderRoutes(table, opts, ctx) {\n const lib = opts.validation?.library ?? \"zod\";\n const d = LIBS[lib];\n const validator = VALIDATORS[opts.validator ?? \"standard\"];\n const insertName = `Insert${table.tsName}Schema`;\n const updateName = `Update${table.tsName}Schema`;\n const selectName = `Select${table.tsName}Schema`;\n const paramsName = `${cap(table.tsName)}ParamsSchema`;\n const rowType = `Select${table.tsName}Row`;\n const writable = !table.readOnly;\n const key = keyColumns(table);\n const routes = [];\n const notImplemented = (what) => `throw new Error('Not implemented: ${what} ${table.tsName}.');`;\n routes.push({\n name: \"list\",\n method: \"get\",\n path: \"/\",\n middleware: [],\n // The stub states its own contract. tRPC has `.output()` and Hono has nothing like it: what a\n // Hono client infers is the *handler's return type*, so the only place an output schema can be\n // honoured is the value handed to `c.json`. Annotating the local is what puts the select shape\n // into `hc<AppType>()` rather than `never[]`.\n body: [`const rows: ${rowType}[] = [];`, \"return c.json(rows);\"]\n });\n if (key) {\n const keyPath = \"/\" + key.map((c) => `:${c.name}`).join(\"/\");\n routes.push({\n name: \"byId\",\n method: \"get\",\n path: keyPath,\n middleware: [`${validator.fn}('param', ${paramsName})`],\n body: [VALID_PARAM_HINT, `const row: ${rowType} | null = null;`, \"return c.json(row);\"]\n });\n if (writable) {\n routes.push({\n name: \"update\",\n method: \"patch\",\n path: keyPath,\n middleware: [\n `${validator.fn}('param', ${paramsName})`,\n `${validator.fn}('json', ${updateName})`\n ],\n body: [notImplemented(\"update\")]\n });\n routes.push({\n name: \"delete\",\n method: \"delete\",\n path: keyPath,\n middleware: [`${validator.fn}('param', ${paramsName})`],\n body: [VALID_PARAM_HINT, \"return c.json(true);\"]\n });\n }\n }\n if (writable) {\n routes.push({\n name: \"create\",\n method: \"post\",\n path: \"/\",\n middleware: [`${validator.fn}('json', ${insertName})`],\n body: [notImplemented(\"create\")]\n });\n }\n if (opts.includeRelations) {\n routes.push(...relationRoutes(table, lib, rowType, validator.fn, opts));\n }\n const order = [\"list\", \"byId\", \"create\", \"update\", \"delete\"];\n const rank = (n) => order.indexOf(n) === -1 ? order.length : order.indexOf(n);\n routes.sort((a, b) => rank(a.name) - rank(b.name));\n const exportName = routesExportName(table, opts.naming);\n const chain = routes.map((r) => {\n const args = [lit(r.path), ...r.middleware].join(\", \");\n const ctxParam = r.body.some((line) => /\\bc\\./.test(line)) ? \"c\" : \"_c\";\n return [\n ` .${r.method}(${args}, async (${ctxParam}) => {`,\n ...r.body.map((line) => ` ${line}`),\n ` })`\n ].join(\"\\n\");\n }).join(\"\\n\");\n const body = `export const ${exportName} = new Hono()\n${chain};\n`;\n const useShared = !!opts.validation?.useShared && !!opts.validation?.importPath;\n const declared = [];\n if (!useShared) {\n if (writable) {\n declared.push(`export const ${insertName} = ${renderSchema(table, lib, \"insert\")};`);\n declared.push(`export const ${updateName} = ${renderSchema(table, lib, \"update\")};`);\n }\n declared.push(`export const ${selectName} = ${renderSchema(table, lib, \"select\")};`);\n }\n if (key) {\n declared.push(\n `export const ${paramsName} = ${d.objectInline(\n key.map((c) => paramField(c, lib)).join(\", \")\n )};`\n );\n }\n declared.push(`export type ${rowType} = ${d.infer(selectName)};`);\n const decided = [...declared, body].join(\"\\n\\n\");\n const imports = [];\n if (useShared) {\n const sharedAffix = resolveAffix({\n affix: opts.validation?.affix,\n schemaSuffix: opts.validation?.schemaSuffix\n });\n const wanted = [\n [\"insert\", insertName],\n [\"update\", updateName],\n [\"select\", selectName]\n ].filter(([, local]) => decided.includes(local));\n if (wanted.length) {\n const spec = resolveConfiguredImport(\n opts.validation.importPath,\n ctx.out,\n process.cwd(),\n opts.importExtension\n );\n const names = wanted.map(([mode, local]) => {\n const exported = schemaName(mode, table.tsName, sharedAffix);\n return exported === local ? local : `${exported} as ${local}`;\n }).join(\", \");\n imports.push(`import { ${names} } from '${spec}';`);\n }\n }\n imports.push(`import { Hono } from 'hono';`);\n if (decided.includes(`${validator.fn}(`)) {\n imports.push(`import { ${validator.fn} } from '${validator.from}';`);\n }\n if (LIB_USAGE[lib].test(decided)) imports.unshift(LIB_IMPORTS[lib]);\n const wide = table.columns.filter(isWide).map((c) => c.name);\n const wideNote = wide.length ? `// No validated type for ${wide.length === 1 ? \"this column\" : \"these columns\"}: ${wide.join(\", \")}.\n// DRZL could not derive one from the schema, so these routes accept any value there.\n` : \"\";\n return `// Generated by @drzl/generator-hono\n// Routes for table: ${table.name}\n${wideNote}${imports.join(\"\\n\")}\n\n${decided}`;\n}\nfunction relationRoutes(table, lib, rowType, validatorFn, opts) {\n const d = LIBS[lib];\n const out = [];\n const taken = /* @__PURE__ */ new Set();\n for (const fk of table.foreignKeys ?? []) {\n if (fk.columns.length !== 1) continue;\n const colName = fk.columns[0];\n const column = table.columns.find((c) => c.name === colName);\n if (!column) continue;\n const segment = toCase(`by-${colName}`, opts.naming?.procedureCase ?? \"kebab\");\n if (taken.has(segment)) continue;\n taken.add(segment);\n const inline = d.objectInline(paramField(column, lib));\n out.push({\n name: `listBy${cap(colName)}`,\n method: \"get\",\n path: `/${segment}/:${colName}`,\n middleware: [`${validatorFn}('param', ${inline})`],\n body: [VALID_PARAM_HINT, `const rows: ${rowType}[] = [];`, \"return c.json(rows);\"]\n });\n }\n return out;\n}\nfunction renderBarrel(modules, ctx, path, opts) {\n if (!modules.length) {\n return `// Generated by @drzl/generator-hono\n// No tables detected in analysis. Add tables to your schema and regenerate.\nimport { Hono } from 'hono';\n\nexport const app = new Hono();\n\n/** The type a Hono client is parameterised by: \\`hc<AppType>('/')\\`. */\nexport type AppType = typeof app;\n`;\n }\n const entries = modules.map(({ filePath, exportName, table }) => ({\n rel: importSpecifier(\n \"./\" + path.relative(ctx.out, filePath).replace(/\\\\/g, \"/\"),\n opts.importExtension\n ),\n exportName,\n mount: mountPath(table, opts.naming)\n }));\n const imports = entries.map((e) => `import { ${e.exportName} } from '${e.rel}';`).join(\"\\n\");\n const chain = entries.map((e) => ` .route(${lit(e.mount)}, ${e.exportName})`).join(\"\\n\");\n const reExports = entries.map((e) => `export * from '${e.rel}';`).join(\"\\n\");\n return `// Generated by @drzl/generator-hono\nimport { Hono } from 'hono';\n${imports}\n\nexport const app = new Hono()\n${chain};\n\n/** The type a Hono client is parameterised by: \\`hc<AppType>('/')\\`. */\nexport type AppType = typeof app;\n\n${reExports}\n`;\n}\nexport {\n APP_MODULE,\n HonoGenerator,\n index_default as default\n};\n"],"mappings":"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","names":[]}
|
package/dist/dist-QYH7DRFY.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DRAFT,
|
|
3
|
-
JsonSchemaGenerator,
|
|
4
|
-
allColumns,
|
|
5
|
-
componentSchemaName,
|
|
6
|
-
componentsDocument,
|
|
7
|
-
documentSchemas,
|
|
8
|
-
enumKey,
|
|
9
|
-
index_default,
|
|
10
|
-
openApiDocument,
|
|
11
|
-
planSharedEnums,
|
|
12
|
-
tableSchemas
|
|
13
|
-
} from "./chunk-KKPDOZOD.js";
|
|
14
|
-
export {
|
|
15
|
-
DRAFT,
|
|
16
|
-
JsonSchemaGenerator,
|
|
17
|
-
allColumns,
|
|
18
|
-
componentSchemaName,
|
|
19
|
-
componentsDocument,
|
|
20
|
-
index_default as default,
|
|
21
|
-
documentSchemas,
|
|
22
|
-
enumKey,
|
|
23
|
-
openApiDocument,
|
|
24
|
-
planSharedEnums,
|
|
25
|
-
tableSchemas
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=dist-QYH7DRFY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|