@silkweave/typegen 1.7.1 → 1.9.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/.turbo/turbo-build.log +5 -8
- package/.turbo/turbo-check.log +4 -13
- package/.turbo/turbo-lint.log +1 -9
- package/.turbo/turbo-prepack.log +7 -7
- package/build/index.d.mts +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/lib/zodToTs.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
> @silkweave/typegen@1.6.0 build /Users/atomic/projects/ai/silkweave/packages/typegen
|
|
3
|
-
> tsdown
|
|
4
|
-
|
|
1
|
+
$ tsdown
|
|
5
2
|
[34mℹ[39m [34mtsdown v0.21.8[39m powered by [38;2;255;126;23mrolldown v1.0.0-rc.15[39m
|
|
6
|
-
[34mℹ[39m config file: [4m/Users/atomic/projects/
|
|
3
|
+
[34mℹ[39m config file: [4m/Users/atomic/projects/silkweave/silkweave/packages/typegen/tsdown.config.ts[24m
|
|
7
4
|
[34mℹ[39m entry: [34m./src/index.ts[39m
|
|
8
5
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
9
6
|
[34mℹ[39m Build start
|
|
10
7
|
[34mℹ[39m Cleaning 4 files
|
|
11
8
|
[34mℹ[39m [2mbuild/[22m[1mindex.mjs[22m [2m 6.22 kB[22m [2m│ gzip: 1.91 kB[22m
|
|
12
|
-
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m11.
|
|
9
|
+
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m11.66 kB[22m [2m│ gzip: 3.50 kB[22m
|
|
13
10
|
[34mℹ[39m [2mbuild/[22mindex.d.mts.map [2m 0.32 kB[22m [2m│ gzip: 0.22 kB[22m
|
|
14
11
|
[34mℹ[39m [2mbuild/[22m[32m[1mindex.d.mts[22m[39m [2m 0.59 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
15
|
-
[34mℹ[39m 4 files, total: 18.
|
|
16
|
-
[32m✔[39m Build complete in [
|
|
12
|
+
[34mℹ[39m 4 files, total: 18.79 kB
|
|
13
|
+
[32m✔[39m Build complete in [32m605ms[39m
|
package/.turbo/turbo-check.log
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> @silkweave/typegen@1.7.0 lint /Users/atomic/projects/ai/silkweave/packages/typegen
|
|
8
|
-
> eslint
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
> @silkweave/typegen@1.7.0 typecheck /Users/atomic/projects/ai/silkweave/packages/typegen
|
|
12
|
-
> tsc --noEmit
|
|
13
|
-
|
|
1
|
+
$ pnpm lint && pnpm typecheck
|
|
2
|
+
$ eslint
|
|
3
|
+
[ELIFECYCLE] Command failed.
|
|
4
|
+
[ELIFECYCLE] Command failed.
|
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @silkweave/typegen@1.
|
|
3
|
+
> @silkweave/typegen@1.7.1 lint /Users/atomic/projects/silkweave/silkweave/packages/typegen
|
|
4
4
|
> eslint
|
|
5
5
|
|
|
6
|
-
[0m
|
|
7
|
-
[4m/Users/atomic/projects/ai/silkweave/packages/typegen/src/lib/TypeGenerator.ts[24m
|
|
8
|
-
[2m9:12[22m [31merror[39m 'action' is defined but never used. Allowed unused args must match /^_/u [2m@typescript-eslint/no-unused-vars[22m
|
|
9
|
-
[2m10:5[22m [31merror[39m Unexpected 'debugger' statement [2mno-debugger[22m
|
|
10
|
-
|
|
11
|
-
[31m[1m✖ 2 problems (2 errors, 0 warnings)[22m[39m
|
|
12
|
-
[0m
|
|
13
|
-
[41m[30m ELIFECYCLE [39m[49m [31mCommand failed with exit code 1.[39m
|
package/.turbo/turbo-prepack.log
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @silkweave/typegen@1.
|
|
3
|
+
> @silkweave/typegen@1.8.0 prepack /Users/atomic/projects/silkweave/silkweave/packages/typegen
|
|
4
4
|
> pnpm clean && pnpm build
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
> @silkweave/typegen@1.
|
|
7
|
+
> @silkweave/typegen@1.8.0 clean /Users/atomic/projects/silkweave/silkweave/packages/typegen
|
|
8
8
|
> rimraf build
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
> @silkweave/typegen@1.
|
|
11
|
+
> @silkweave/typegen@1.8.0 build /Users/atomic/projects/silkweave/silkweave/packages/typegen
|
|
12
12
|
> tsdown
|
|
13
13
|
|
|
14
14
|
[34mℹ[39m [34mtsdown v0.21.8[39m powered by [38;2;255;126;23mrolldown v1.0.0-rc.15[39m
|
|
15
|
-
[34mℹ[39m config file: [4m/Users/atomic/projects/
|
|
15
|
+
[34mℹ[39m config file: [4m/Users/atomic/projects/silkweave/silkweave/packages/typegen/tsdown.config.ts[24m
|
|
16
16
|
[34mℹ[39m entry: [34m./src/index.ts[39m
|
|
17
17
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
18
18
|
[34mℹ[39m Build start
|
|
19
19
|
[34mℹ[39m [2mbuild/[22m[1mindex.mjs[22m [2m 6.22 kB[22m [2m│ gzip: 1.91 kB[22m
|
|
20
|
-
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m11.
|
|
20
|
+
[34mℹ[39m [2mbuild/[22mindex.mjs.map [2m11.66 kB[22m [2m│ gzip: 3.50 kB[22m
|
|
21
21
|
[34mℹ[39m [2mbuild/[22mindex.d.mts.map [2m 0.32 kB[22m [2m│ gzip: 0.22 kB[22m
|
|
22
22
|
[34mℹ[39m [2mbuild/[22m[32m[1mindex.d.mts[22m[39m [2m 0.59 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
23
|
-
[34mℹ[39m 4 files, total: 18.
|
|
24
|
-
[32m✔[39m Build complete in [
|
|
23
|
+
[34mℹ[39m 4 files, total: 18.79 kB
|
|
24
|
+
[32m✔[39m Build complete in [32m733ms[39m
|
package/build/index.d.mts
CHANGED
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["f","f"],"sources":["../src/lib/zodToTs.ts","../src/lib/generateDts.ts","../src/adapter/typegen.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ts, { factory as f } from 'typescript'\nimport { z } from 'zod'\n\nexport function zodToTs(schema: z.ZodTypeAny): ts.TypeNode {\n const def = (schema as any)._zod.def\n const handler = typeHandlers[def.type as string]\n return handler ? handler(def) : f.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword)\n}\n\nconst keyword = (kind: ts.KeywordTypeSyntaxKind) => () =>\n f.createKeywordTypeNode(kind)\n\ntype TypeHandler = (def: any) => ts.TypeNode\n\nconst typeHandlers: Record<string, TypeHandler> = {\n string: keyword(ts.SyntaxKind.StringKeyword),\n number: keyword(ts.SyntaxKind.NumberKeyword),\n nan: keyword(ts.SyntaxKind.NumberKeyword),\n bigint: keyword(ts.SyntaxKind.BigIntKeyword),\n boolean: keyword(ts.SyntaxKind.BooleanKeyword),\n undefined: keyword(ts.SyntaxKind.UndefinedKeyword),\n void: keyword(ts.SyntaxKind.VoidKeyword),\n any: keyword(ts.SyntaxKind.AnyKeyword),\n unknown: keyword(ts.SyntaxKind.UnknownKeyword),\n never: keyword(ts.SyntaxKind.NeverKeyword),\n symbol: keyword(ts.SyntaxKind.SymbolKeyword),\n date: () => f.createTypeReferenceNode('Date'),\n null: () => f.createLiteralTypeNode(f.createNull()),\n file: () => f.createTypeReferenceNode('File'),\n\n literal: (def) => {\n const members = def.values.map(literalToTypeNode)\n return members.length === 1 ? members[0] : f.createUnionTypeNode(members)\n },\n\n enum: (def) => {\n return f.createUnionTypeNode(Object.values(def.entries).map(literalToTypeNode))\n },\n\n array: (def) => f.createArrayTypeNode(zodToTs(def.element)),\n\n object: (def) => {\n const members: ts.TypeElement[] = Object.entries(def.shape as Record<string, z.ZodTypeAny>)\n .map(([key, memberSchema]) => {\n const isOptional = (memberSchema as any)._zod.optout\n return f.createPropertySignature(\n undefined,\n identifierOrString(key),\n isOptional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined,\n zodToTs(memberSchema)\n )\n })\n\n if (def.catchall) {\n members.push(indexSignature(zodToTs(def.catchall)))\n }\n\n return f.createTypeLiteralNode(members)\n },\n\n record: (def) => {\n return f.createTypeLiteralNode([indexSignature(zodToTs(def.valueType), zodToTs(def.keyType))])\n },\n\n tuple: (def) => f.createTupleTypeNode((def.items as z.ZodTypeAny[]).map(zodToTs)),\n union: (def) => f.createUnionTypeNode((def.options as z.ZodTypeAny[]).map(zodToTs)),\n intersection: (def) => f.createIntersectionTypeNode([zodToTs(def.left), zodToTs(def.right)]),\n\n optional: (def) => f.createUnionTypeNode([\n zodToTs(def.innerType),\n f.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)\n ]),\n\n nullable: (def) => f.createUnionTypeNode([\n zodToTs(def.innerType),\n f.createLiteralTypeNode(f.createNull())\n ]),\n\n default: (def) => zodToTs(def.innerType),\n prefault: (def) => zodToTs(def.innerType),\n catch: (def) => zodToTs(def.innerType),\n lazy: (def) => zodToTs(def.getter()),\n pipe: (def) => zodToTs(def.out),\n\n readonly: (def) => {\n const inner = zodToTs(def.innerType)\n if (ts.isArrayTypeNode(inner) || ts.isTupleTypeNode(inner)) {\n return f.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, inner)\n }\n return inner\n },\n\n set: (def) => f.createTypeReferenceNode('Set', [zodToTs(def.valueType)]),\n map: (def) => f.createTypeReferenceNode('Map', [zodToTs(def.keyType), zodToTs(def.valueType)]),\n promise: (def) => f.createTypeReferenceNode('Promise', [zodToTs(def.innerType)])\n}\n\nexport function printNode(node: ts.Node): string {\n const sourceFile = ts.createSourceFile('typegen.d.ts', '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed, omitTrailingSemicolon: true })\n return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile)\n}\n\nfunction indexSignature(valueType: ts.TypeNode, keyType?: ts.TypeNode): ts.IndexSignatureDeclaration {\n return f.createIndexSignature(\n undefined,\n [f.createParameterDeclaration(undefined, undefined, 'key', undefined, keyType ?? f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword))],\n valueType\n )\n}\n\nconst identifierRE = /^[$A-Z_a-z][\\w$]*$/\n\nfunction identifierOrString(name: string) {\n return identifierRE.test(name)\n ? f.createIdentifier(name)\n : f.createStringLiteral(name)\n}\n\nfunction literalToTypeNode(value: unknown): ts.TypeNode {\n switch (typeof value) {\n case 'string':\n return f.createLiteralTypeNode(f.createStringLiteral(value))\n case 'number':\n return value < 0\n ? f.createLiteralTypeNode(f.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, f.createNumericLiteral(Math.abs(value))))\n : f.createLiteralTypeNode(f.createNumericLiteral(value))\n case 'bigint':\n return f.createLiteralTypeNode(f.createBigIntLiteral(`${value}n`))\n case 'boolean':\n return f.createLiteralTypeNode(value ? f.createTrue() : f.createFalse())\n default:\n return f.createLiteralTypeNode(f.createNull())\n }\n}\n","import ts, { factory as f } from 'typescript'\nimport { type Action } from '@silkweave/core'\nimport { pascalCase } from 'change-case'\nimport { zodToTs, printNode } from './zodToTs.js'\n\nexport function generateDts(actions: Action[]): string {\n const statements: ts.Statement[] = []\n\n for (const action of actions) {\n const name = pascalCase(action.name)\n\n statements.push(\n f.createInterfaceDeclaration(\n [f.createModifier(ts.SyntaxKind.ExportKeyword)],\n `${name}Input`,\n undefined,\n undefined,\n membersFromTypeLiteral(zodToTs(action.input))\n )\n )\n\n if (action.output) {\n statements.push(\n f.createInterfaceDeclaration(\n [f.createModifier(ts.SyntaxKind.ExportKeyword)],\n `${name}Output`,\n undefined,\n undefined,\n membersFromTypeLiteral(zodToTs(action.output))\n )\n )\n }\n }\n\n return statements.map(printNode).join('\\n\\n') + '\\n'\n}\n\nfunction membersFromTypeLiteral(node: ts.TypeNode): ts.TypeElement[] {\n if (ts.isTypeLiteralNode(node)) {\n return [...node.members]\n }\n return [f.createIndexSignature(\n undefined,\n [f.createParameterDeclaration(undefined, undefined, 'key', undefined, f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword))],\n node\n )]\n}\n","import { AdapterFactory } from '@silkweave/core'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport { generateDts } from '../lib/generateDts.js'\n\nexport interface TypegenAdapterOptions {\n path: string\n}\n\nexport const typegen: AdapterFactory<TypegenAdapterOptions> = ({ path }) => {\n return (_, context) => {\n context.set('adapter', 'typegen')\n return {\n context,\n allActions: true,\n start: async (actions) => {\n const output = generateDts(actions)\n const target = resolve(path)\n await mkdir(dirname(target), { recursive: true })\n await writeFile(target, output, 'utf-8')\n console.info(`typegen: wrote ${actions.length} action types to ${target}`)\n },\n stop: async () => { }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["f","f"],"sources":["../src/lib/zodToTs.ts","../src/lib/generateDts.ts","../src/adapter/typegen.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ts, { factory as f } from 'typescript'\nimport { z } from 'zod/v4'\n\nexport function zodToTs(schema: z.ZodTypeAny): ts.TypeNode {\n const def = (schema as any)._zod.def\n const handler = typeHandlers[def.type as string]\n return handler ? handler(def) : f.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword)\n}\n\nconst keyword = (kind: ts.KeywordTypeSyntaxKind) => () =>\n f.createKeywordTypeNode(kind)\n\ntype TypeHandler = (def: any) => ts.TypeNode\n\nconst typeHandlers: Record<string, TypeHandler> = {\n string: keyword(ts.SyntaxKind.StringKeyword),\n number: keyword(ts.SyntaxKind.NumberKeyword),\n nan: keyword(ts.SyntaxKind.NumberKeyword),\n bigint: keyword(ts.SyntaxKind.BigIntKeyword),\n boolean: keyword(ts.SyntaxKind.BooleanKeyword),\n undefined: keyword(ts.SyntaxKind.UndefinedKeyword),\n void: keyword(ts.SyntaxKind.VoidKeyword),\n any: keyword(ts.SyntaxKind.AnyKeyword),\n unknown: keyword(ts.SyntaxKind.UnknownKeyword),\n never: keyword(ts.SyntaxKind.NeverKeyword),\n symbol: keyword(ts.SyntaxKind.SymbolKeyword),\n date: () => f.createTypeReferenceNode('Date'),\n null: () => f.createLiteralTypeNode(f.createNull()),\n file: () => f.createTypeReferenceNode('File'),\n\n literal: (def) => {\n const members = def.values.map(literalToTypeNode)\n return members.length === 1 ? members[0] : f.createUnionTypeNode(members)\n },\n\n enum: (def) => {\n return f.createUnionTypeNode(Object.values(def.entries).map(literalToTypeNode))\n },\n\n array: (def) => f.createArrayTypeNode(zodToTs(def.element)),\n\n object: (def) => {\n const members: ts.TypeElement[] = Object.entries(def.shape as Record<string, z.ZodTypeAny>)\n .map(([key, memberSchema]) => {\n const isOptional = (memberSchema as any)._zod.optout\n return f.createPropertySignature(\n undefined,\n identifierOrString(key),\n isOptional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined,\n zodToTs(memberSchema)\n )\n })\n\n if (def.catchall) {\n members.push(indexSignature(zodToTs(def.catchall)))\n }\n\n return f.createTypeLiteralNode(members)\n },\n\n record: (def) => {\n return f.createTypeLiteralNode([indexSignature(zodToTs(def.valueType), zodToTs(def.keyType))])\n },\n\n tuple: (def) => f.createTupleTypeNode((def.items as z.ZodTypeAny[]).map(zodToTs)),\n union: (def) => f.createUnionTypeNode((def.options as z.ZodTypeAny[]).map(zodToTs)),\n intersection: (def) => f.createIntersectionTypeNode([zodToTs(def.left), zodToTs(def.right)]),\n\n optional: (def) => f.createUnionTypeNode([\n zodToTs(def.innerType),\n f.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)\n ]),\n\n nullable: (def) => f.createUnionTypeNode([\n zodToTs(def.innerType),\n f.createLiteralTypeNode(f.createNull())\n ]),\n\n default: (def) => zodToTs(def.innerType),\n prefault: (def) => zodToTs(def.innerType),\n catch: (def) => zodToTs(def.innerType),\n lazy: (def) => zodToTs(def.getter()),\n pipe: (def) => zodToTs(def.out),\n\n readonly: (def) => {\n const inner = zodToTs(def.innerType)\n if (ts.isArrayTypeNode(inner) || ts.isTupleTypeNode(inner)) {\n return f.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, inner)\n }\n return inner\n },\n\n set: (def) => f.createTypeReferenceNode('Set', [zodToTs(def.valueType)]),\n map: (def) => f.createTypeReferenceNode('Map', [zodToTs(def.keyType), zodToTs(def.valueType)]),\n promise: (def) => f.createTypeReferenceNode('Promise', [zodToTs(def.innerType)])\n}\n\nexport function printNode(node: ts.Node): string {\n const sourceFile = ts.createSourceFile('typegen.d.ts', '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed, omitTrailingSemicolon: true })\n return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile)\n}\n\nfunction indexSignature(valueType: ts.TypeNode, keyType?: ts.TypeNode): ts.IndexSignatureDeclaration {\n return f.createIndexSignature(\n undefined,\n [f.createParameterDeclaration(undefined, undefined, 'key', undefined, keyType ?? f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword))],\n valueType\n )\n}\n\nconst identifierRE = /^[$A-Z_a-z][\\w$]*$/\n\nfunction identifierOrString(name: string) {\n return identifierRE.test(name)\n ? f.createIdentifier(name)\n : f.createStringLiteral(name)\n}\n\nfunction literalToTypeNode(value: unknown): ts.TypeNode {\n switch (typeof value) {\n case 'string':\n return f.createLiteralTypeNode(f.createStringLiteral(value))\n case 'number':\n return value < 0\n ? f.createLiteralTypeNode(f.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, f.createNumericLiteral(Math.abs(value))))\n : f.createLiteralTypeNode(f.createNumericLiteral(value))\n case 'bigint':\n return f.createLiteralTypeNode(f.createBigIntLiteral(`${value}n`))\n case 'boolean':\n return f.createLiteralTypeNode(value ? f.createTrue() : f.createFalse())\n default:\n return f.createLiteralTypeNode(f.createNull())\n }\n}\n","import ts, { factory as f } from 'typescript'\nimport { type Action } from '@silkweave/core'\nimport { pascalCase } from 'change-case'\nimport { zodToTs, printNode } from './zodToTs.js'\n\nexport function generateDts(actions: Action[]): string {\n const statements: ts.Statement[] = []\n\n for (const action of actions) {\n const name = pascalCase(action.name)\n\n statements.push(\n f.createInterfaceDeclaration(\n [f.createModifier(ts.SyntaxKind.ExportKeyword)],\n `${name}Input`,\n undefined,\n undefined,\n membersFromTypeLiteral(zodToTs(action.input))\n )\n )\n\n if (action.output) {\n statements.push(\n f.createInterfaceDeclaration(\n [f.createModifier(ts.SyntaxKind.ExportKeyword)],\n `${name}Output`,\n undefined,\n undefined,\n membersFromTypeLiteral(zodToTs(action.output))\n )\n )\n }\n }\n\n return statements.map(printNode).join('\\n\\n') + '\\n'\n}\n\nfunction membersFromTypeLiteral(node: ts.TypeNode): ts.TypeElement[] {\n if (ts.isTypeLiteralNode(node)) {\n return [...node.members]\n }\n return [f.createIndexSignature(\n undefined,\n [f.createParameterDeclaration(undefined, undefined, 'key', undefined, f.createKeywordTypeNode(ts.SyntaxKind.StringKeyword))],\n node\n )]\n}\n","import { AdapterFactory } from '@silkweave/core'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport { generateDts } from '../lib/generateDts.js'\n\nexport interface TypegenAdapterOptions {\n path: string\n}\n\nexport const typegen: AdapterFactory<TypegenAdapterOptions> = ({ path }) => {\n return (_, context) => {\n context.set('adapter', 'typegen')\n return {\n context,\n allActions: true,\n start: async (actions) => {\n const output = generateDts(actions)\n const target = resolve(path)\n await mkdir(dirname(target), { recursive: true })\n await writeFile(target, output, 'utf-8')\n console.info(`typegen: wrote ${actions.length} action types to ${target}`)\n },\n stop: async () => { }\n }\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silkweave/typegen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Silkweave Type Generator",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"main": "build/index.mjs",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"change-case": "^5.4.4",
|
|
14
|
-
"zod": "^
|
|
15
|
-
"@silkweave/core": "1.
|
|
14
|
+
"zod": "^3.25.0",
|
|
15
|
+
"@silkweave/core": "1.9.0"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"typescript": ">=5.0.0"
|
package/src/lib/zodToTs.ts
CHANGED