@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.
@@ -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
  ℹ tsdown v0.21.8 powered by rolldown v1.0.0-rc.15
6
- ℹ config file: /Users/atomic/projects/ai/silkweave/packages/typegen/tsdown.config.ts
3
+ ℹ config file: /Users/atomic/projects/silkweave/silkweave/packages/typegen/tsdown.config.ts
7
4
  ℹ entry: ./src/index.ts
8
5
  ℹ tsconfig: tsconfig.json
9
6
  ℹ Build start
10
7
  ℹ Cleaning 4 files
11
8
  ℹ build/index.mjs  6.22 kB │ gzip: 1.91 kB
12
- ℹ build/index.mjs.map 11.65 kB │ gzip: 3.50 kB
9
+ ℹ build/index.mjs.map 11.66 kB │ gzip: 3.50 kB
13
10
  ℹ build/index.d.mts.map  0.32 kB │ gzip: 0.22 kB
14
11
  ℹ build/index.d.mts  0.59 kB │ gzip: 0.31 kB
15
- ℹ 4 files, total: 18.78 kB
16
- ✔ Build complete in 661ms
12
+ ℹ 4 files, total: 18.79 kB
13
+ ✔ Build complete in 605ms
@@ -1,13 +1,4 @@
1
-
2
- 
3
- > @silkweave/typegen@1.7.0 check /Users/atomic/projects/ai/silkweave/packages/typegen
4
- > pnpm lint && pnpm typecheck
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.
@@ -1,13 +1,5 @@
1
1
 
2
2
  
3
- > @silkweave/typegen@1.4.1 lint /Users/atomic/projects/ai/silkweave/packages/typegen
3
+ > @silkweave/typegen@1.7.1 lint /Users/atomic/projects/silkweave/silkweave/packages/typegen
4
4
  > eslint
5
5
 
6
- 
7
- /Users/atomic/projects/ai/silkweave/packages/typegen/src/lib/TypeGenerator.ts
8
- 9:12 error 'action' is defined but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars
9
- 10:5 error Unexpected 'debugger' statement no-debugger
10
-
11
- ✖ 2 problems (2 errors, 0 warnings)
12
- 
13
-  ELIFECYCLE  Command failed with exit code 1.
@@ -1,24 +1,24 @@
1
1
 
2
2
  
3
- > @silkweave/typegen@1.6.0 prepack /Users/atomic/projects/ai/silkweave/packages/typegen
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.6.0 clean /Users/atomic/projects/ai/silkweave/packages/typegen
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.6.0 build /Users/atomic/projects/ai/silkweave/packages/typegen
11
+ > @silkweave/typegen@1.8.0 build /Users/atomic/projects/silkweave/silkweave/packages/typegen
12
12
  > tsdown
13
13
 
14
14
  ℹ tsdown v0.21.8 powered by rolldown v1.0.0-rc.15
15
- ℹ config file: /Users/atomic/projects/ai/silkweave/packages/typegen/tsdown.config.ts
15
+ ℹ config file: /Users/atomic/projects/silkweave/silkweave/packages/typegen/tsdown.config.ts
16
16
  ℹ entry: ./src/index.ts
17
17
  ℹ tsconfig: tsconfig.json
18
18
  ℹ Build start
19
19
  ℹ build/index.mjs  6.22 kB │ gzip: 1.91 kB
20
- ℹ build/index.mjs.map 11.65 kB │ gzip: 3.50 kB
20
+ ℹ build/index.mjs.map 11.66 kB │ gzip: 3.50 kB
21
21
  ℹ build/index.d.mts.map  0.32 kB │ gzip: 0.22 kB
22
22
  ℹ build/index.d.mts  0.59 kB │ gzip: 0.31 kB
23
- ℹ 4 files, total: 18.78 kB
24
- ✔ Build complete in 553ms
23
+ ℹ 4 files, total: 18.79 kB
24
+ ✔ Build complete in 733ms
package/build/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import ts from "typescript";
2
2
  import { Action, AdapterFactory } from "@silkweave/core";
3
- import { z } from "zod";
3
+ import { z } from "zod/v4";
4
4
 
5
5
  //#region src/adapter/typegen.d.ts
6
6
  interface TypegenAdapterOptions {
@@ -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.7.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": "^4.3.6",
15
- "@silkweave/core": "1.7.1"
14
+ "zod": "^3.25.0",
15
+ "@silkweave/core": "1.9.0"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "typescript": ">=5.0.0"
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import ts, { factory as f } from 'typescript'
3
- import { z } from 'zod'
3
+ import { z } from 'zod/v4'
4
4
 
5
5
  export function zodToTs(schema: z.ZodTypeAny): ts.TypeNode {
6
6
  const def = (schema as any)._zod.def