@toolproof-core/genesis 1.0.53 → 1.0.55

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.
Files changed (186) hide show
  1. package/dist/generated-src/declarations/booleans.d.ts +2 -0
  2. package/{generated-src → dist/generated-src}/declarations/booleans.json +1 -1
  3. package/dist/generated-src/declarations/naturals.d.ts +2 -0
  4. package/{generated-src → dist/generated-src}/declarations/naturals.json +1 -1
  5. package/dist/generated-src/declarations/resourceTypes.d.ts +2 -0
  6. package/{generated-src → dist/generated-src}/declarations/resourceTypes.json +1 -1
  7. package/dist/generated-src/declarations/tools.d.ts +2 -0
  8. package/{generated-src → dist/generated-src}/declarations/tools.json +1 -1
  9. package/dist/generated-src/implementations/tools.d.ts +100 -0
  10. package/dist/generated-src/implementations/tools.js +135 -0
  11. package/dist/generated-src/lookups/constants.d.ts +195 -0
  12. package/{generated-src/lookups/constants.ts → dist/generated-src/lookups/constants.js} +2 -3
  13. package/dist/generated-src/lookups/mappings.d.ts +11 -0
  14. package/{generated-src/lookups/mappings.ts → dist/generated-src/lookups/mappings.js} +1 -2
  15. package/dist/generated-src/schemas/schemas.d.ts +2 -0
  16. package/{generated-src → dist/generated-src}/schemas/schemas.json +8 -8
  17. package/dist/generated-src/schemas/standalone/Boolean.d.ts +2 -0
  18. package/dist/generated-src/schemas/standalone/Boolean.json +5 -0
  19. package/dist/generated-src/schemas/standalone/Error.d.ts +2 -0
  20. package/dist/generated-src/schemas/standalone/Error.json +78 -0
  21. package/dist/generated-src/schemas/standalone/Goal.d.ts +2 -0
  22. package/dist/generated-src/schemas/standalone/Goal.json +53 -0
  23. package/dist/generated-src/schemas/standalone/Natural.d.ts +2 -0
  24. package/dist/generated-src/schemas/standalone/Natural.json +6 -0
  25. package/dist/generated-src/schemas/standalone/Resource.d.ts +2 -0
  26. package/dist/generated-src/schemas/standalone/Resource.json +166 -0
  27. package/dist/generated-src/schemas/standalone/ResourceType.d.ts +2 -0
  28. package/dist/generated-src/schemas/standalone/ResourceType.json +147 -0
  29. package/dist/generated-src/schemas/standalone/Strategy.d.ts +2 -0
  30. package/dist/generated-src/schemas/standalone/Strategy.json +637 -0
  31. package/dist/generated-src/schemas/standalone/StrategyTrace.d.ts +2 -0
  32. package/dist/generated-src/schemas/standalone/StrategyTrace.json +816 -0
  33. package/dist/generated-src/schemas/standalone/Suite.d.ts +2 -0
  34. package/dist/generated-src/schemas/standalone/Suite.json +646 -0
  35. package/dist/generated-src/schemas/standalone/Tool.d.ts +2 -0
  36. package/dist/generated-src/schemas/standalone/Tool.json +533 -0
  37. package/dist/generated-src/schemas/zod/Boolean.d.ts +2 -0
  38. package/{generated-src/schemas/zod/Boolean.ts → dist/generated-src/schemas/zod/Boolean.js} +1 -4
  39. package/dist/generated-src/schemas/zod/Error.d.ts +2 -0
  40. package/dist/generated-src/schemas/zod/Error.js +8 -0
  41. package/dist/generated-src/schemas/zod/Goal.d.ts +2 -0
  42. package/dist/generated-src/schemas/zod/Goal.js +5 -0
  43. package/dist/generated-src/schemas/zod/Natural.d.ts +2 -0
  44. package/{generated-src/schemas/zod/Natural.ts → dist/generated-src/schemas/zod/Natural.js} +1 -4
  45. package/dist/generated-src/schemas/zod/Resource.d.ts +2 -0
  46. package/dist/generated-src/schemas/zod/Resource.js +18 -0
  47. package/dist/generated-src/schemas/zod/ResourceType.d.ts +2 -0
  48. package/dist/generated-src/schemas/zod/ResourceType.js +11 -0
  49. package/dist/generated-src/schemas/zod/Strategy.d.ts +12 -0
  50. package/dist/generated-src/schemas/zod/Strategy.js +70 -0
  51. package/dist/generated-src/schemas/zod/StrategyTrace.d.ts +12 -0
  52. package/dist/generated-src/schemas/zod/StrategyTrace.js +74 -0
  53. package/dist/generated-src/schemas/zod/Suite.d.ts +15 -0
  54. package/dist/generated-src/schemas/zod/Suite.js +40 -0
  55. package/dist/generated-src/schemas/zod/Tool.d.ts +9 -0
  56. package/dist/generated-src/schemas/zod/Tool.js +30 -0
  57. package/dist/generated-src/schemas/zod/index.d.ts +10 -0
  58. package/dist/generated-src/timestampedResources/booleans.d.ts +2 -0
  59. package/{generated-src → dist/generated-src}/timestampedResources/booleans.json +1 -1
  60. package/dist/generated-src/timestampedResources/naturals.d.ts +2 -0
  61. package/{generated-src → dist/generated-src}/timestampedResources/naturals.json +1 -1
  62. package/dist/generated-src/timestampedResources/resourceTypes.d.ts +2 -0
  63. package/{generated-src → dist/generated-src}/timestampedResources/resourceTypes.json +1 -1
  64. package/dist/generated-src/timestampedResources/tools.d.ts +2 -0
  65. package/{generated-src → dist/generated-src}/timestampedResources/tools.json +1 -1
  66. package/{generated-src → dist/generated-src}/types/types.d.ts +4 -4
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.js +1 -0
  69. package/dist/scripts/_lib/config.d.ts +83 -0
  70. package/dist/scripts/_lib/config.js +269 -0
  71. package/dist/scripts/generateConstantsAndMappings.d.ts +1 -0
  72. package/dist/scripts/generateConstantsAndMappings.js +41 -0
  73. package/dist/scripts/generateCoreProjection.d.ts +1 -0
  74. package/dist/scripts/generateCoreProjection.js +56 -0
  75. package/dist/scripts/generateDeclarations.d.ts +1 -0
  76. package/dist/scripts/generateDeclarations.js +43 -0
  77. package/dist/scripts/generateDependencies.d.ts +1 -0
  78. package/dist/scripts/generateDependencies.js +25 -0
  79. package/dist/scripts/generateImplementations.d.ts +1 -0
  80. package/dist/scripts/generateImplementations.js +45 -0
  81. package/dist/scripts/generateResourceTypes.d.ts +1 -0
  82. package/dist/scripts/generateResourceTypes.js +33 -0
  83. package/dist/scripts/generateSchemaShims.d.ts +1 -0
  84. package/dist/scripts/generateSchemaShims.js +39 -0
  85. package/dist/scripts/generateStandaloneSchemas.d.ts +1 -0
  86. package/dist/scripts/generateStandaloneSchemas.js +37 -0
  87. package/dist/scripts/generateStandaloneTypes.d.ts +1 -0
  88. package/dist/scripts/generateStandaloneTypes.js +39 -0
  89. package/dist/scripts/generateStandaloneZodSchemas.d.ts +1 -0
  90. package/dist/scripts/generateStandaloneZodSchemas.js +36 -0
  91. package/dist/scripts/generateTerminals.d.ts +1 -0
  92. package/dist/scripts/generateTerminals.js +26 -0
  93. package/dist/scripts/generateTimestampedResources.d.ts +1 -0
  94. package/dist/scripts/generateTimestampedResources.js +79 -0
  95. package/dist/scripts/generateTypes.d.ts +1 -0
  96. package/dist/scripts/generateTypes.js +40 -0
  97. package/dist/scripts/normalizeAnchorsToPointers.d.ts +1 -0
  98. package/dist/scripts/normalizeAnchorsToPointers.js +32 -0
  99. package/dist/src/index.d.ts +1 -1
  100. package/dist/tsconfig.tsbuildinfo +1 -0
  101. package/package.json +42 -8
  102. package/generated-src/implementations/tools.ts +0 -214
  103. package/generated-src/metadata/Core.json +0 -1929
  104. package/generated-src/metadata/dependencyMap.json +0 -297
  105. package/generated-src/metadata/terminals.json +0 -16
  106. package/generated-src/schemas/standalone/Boolean.json +0 -5
  107. package/generated-src/schemas/standalone/Error.json +0 -78
  108. package/generated-src/schemas/standalone/Goal.json +0 -53
  109. package/generated-src/schemas/standalone/Natural.json +0 -6
  110. package/generated-src/schemas/standalone/Resource.json +0 -166
  111. package/generated-src/schemas/standalone/ResourceType.json +0 -147
  112. package/generated-src/schemas/standalone/Strategy.json +0 -637
  113. package/generated-src/schemas/standalone/StrategyTrace.json +0 -816
  114. package/generated-src/schemas/standalone/Suite.json +0 -646
  115. package/generated-src/schemas/standalone/Tool.json +0 -533
  116. package/generated-src/schemas/zod/Error.ts +0 -11
  117. package/generated-src/schemas/zod/Goal.ts +0 -8
  118. package/generated-src/schemas/zod/Resource.ts +0 -21
  119. package/generated-src/schemas/zod/ResourceType.ts +0 -14
  120. package/generated-src/schemas/zod/Strategy.ts +0 -68
  121. package/generated-src/schemas/zod/StrategyTrace.ts +0 -75
  122. package/generated-src/schemas/zod/Suite.ts +0 -44
  123. package/generated-src/schemas/zod/Tool.ts +0 -34
  124. package/src/declarations/booleans.json +0 -4
  125. package/src/declarations/naturals.json +0 -13
  126. package/src/declarations/resourceTypes/resourceTypeShells.json +0 -53
  127. package/src/declarations/resourceTypes/schemas.json +0 -1839
  128. package/src/declarations/tools.json +0 -705
  129. package/src/implementations/tools.ts +0 -214
  130. package/src/index.ts +0 -131
  131. package/src/utils/constantsAndMappings.ts +0 -361
  132. package/src/utils/coreProjection.ts +0 -53
  133. package/src/utils/resourceTypes.ts +0 -71
  134. package/src/utils/schemaDependencies.ts +0 -115
  135. package/src/utils/schemaObjectNormalization.ts +0 -71
  136. package/src/utils/schemaRefNormalization.ts +0 -83
  137. package/src/utils/schemaShims.ts +0 -17
  138. package/src/utils/standaloneSchemas.ts +0 -114
  139. package/src/utils/standaloneTypes.ts +0 -28
  140. package/src/utils/standaloneZodSchemas.ts +0 -72
  141. package/src/utils/timestampedResources.ts +0 -42
  142. package/src/utils/typeGeneration.ts +0 -31
  143. package/src/utils/typeGenerationPostProcess.ts +0 -246
  144. package/src/utils/typeGenerationPreflight.ts +0 -119
  145. package/src/utils/zodCodegen.ts +0 -549
  146. /package/{generated-src/declarations/booleans.ts → dist/generated-src/declarations/booleans.js} +0 -0
  147. /package/{generated-src/declarations/naturals.ts → dist/generated-src/declarations/naturals.js} +0 -0
  148. /package/{generated-src/declarations/resourceTypes.ts → dist/generated-src/declarations/resourceTypes.js} +0 -0
  149. /package/{generated-src/declarations/tools.ts → dist/generated-src/declarations/tools.js} +0 -0
  150. /package/{generated-src/schemas/schemas.ts → dist/generated-src/schemas/schemas.js} +0 -0
  151. /package/{generated-src/schemas/standalone/Boolean.ts → dist/generated-src/schemas/standalone/Boolean.js} +0 -0
  152. /package/{generated-src/schemas/standalone/Error.ts → dist/generated-src/schemas/standalone/Error.js} +0 -0
  153. /package/{generated-src/schemas/standalone/Goal.ts → dist/generated-src/schemas/standalone/Goal.js} +0 -0
  154. /package/{generated-src/schemas/standalone/Natural.ts → dist/generated-src/schemas/standalone/Natural.js} +0 -0
  155. /package/{generated-src/schemas/standalone/Resource.ts → dist/generated-src/schemas/standalone/Resource.js} +0 -0
  156. /package/{generated-src/schemas/standalone/ResourceType.ts → dist/generated-src/schemas/standalone/ResourceType.js} +0 -0
  157. /package/{generated-src/schemas/standalone/Strategy.ts → dist/generated-src/schemas/standalone/Strategy.js} +0 -0
  158. /package/{generated-src/schemas/standalone/StrategyTrace.ts → dist/generated-src/schemas/standalone/StrategyTrace.js} +0 -0
  159. /package/{generated-src/schemas/standalone/Suite.ts → dist/generated-src/schemas/standalone/Suite.js} +0 -0
  160. /package/{generated-src/schemas/standalone/Tool.ts → dist/generated-src/schemas/standalone/Tool.js} +0 -0
  161. /package/{generated-src/schemas/zod/index.ts → dist/generated-src/schemas/zod/index.js} +0 -0
  162. /package/{generated-src/timestampedResources/booleans.ts → dist/generated-src/timestampedResources/booleans.js} +0 -0
  163. /package/{generated-src/timestampedResources/naturals.ts → dist/generated-src/timestampedResources/naturals.js} +0 -0
  164. /package/{generated-src/timestampedResources/resourceTypes.ts → dist/generated-src/timestampedResources/resourceTypes.js} +0 -0
  165. /package/{generated-src/timestampedResources/tools.ts → dist/generated-src/timestampedResources/tools.js} +0 -0
  166. /package/{generated-src → dist/generated-src}/types/standalone/BooleanResource.d.ts +0 -0
  167. /package/{generated-src → dist/generated-src}/types/standalone/BooleanResource.js +0 -0
  168. /package/{generated-src → dist/generated-src}/types/standalone/ErrorResource.d.ts +0 -0
  169. /package/{generated-src → dist/generated-src}/types/standalone/ErrorResource.js +0 -0
  170. /package/{generated-src → dist/generated-src}/types/standalone/GoalResource.d.ts +0 -0
  171. /package/{generated-src → dist/generated-src}/types/standalone/GoalResource.js +0 -0
  172. /package/{generated-src → dist/generated-src}/types/standalone/NaturalResource.d.ts +0 -0
  173. /package/{generated-src → dist/generated-src}/types/standalone/NaturalResource.js +0 -0
  174. /package/{generated-src → dist/generated-src}/types/standalone/ResourceResource.d.ts +0 -0
  175. /package/{generated-src → dist/generated-src}/types/standalone/ResourceResource.js +0 -0
  176. /package/{generated-src → dist/generated-src}/types/standalone/ResourceTypeResource.d.ts +0 -0
  177. /package/{generated-src → dist/generated-src}/types/standalone/ResourceTypeResource.js +0 -0
  178. /package/{generated-src → dist/generated-src}/types/standalone/StrategyResource.d.ts +0 -0
  179. /package/{generated-src → dist/generated-src}/types/standalone/StrategyResource.js +0 -0
  180. /package/{generated-src → dist/generated-src}/types/standalone/StrategyTraceResource.d.ts +0 -0
  181. /package/{generated-src → dist/generated-src}/types/standalone/StrategyTraceResource.js +0 -0
  182. /package/{generated-src → dist/generated-src}/types/standalone/SuiteResource.d.ts +0 -0
  183. /package/{generated-src → dist/generated-src}/types/standalone/SuiteResource.js +0 -0
  184. /package/{generated-src → dist/generated-src}/types/standalone/ToolResource.d.ts +0 -0
  185. /package/{generated-src → dist/generated-src}/types/standalone/ToolResource.js +0 -0
  186. /package/{generated-src → dist/generated-src}/types/types.js +0 -0
@@ -1,31 +0,0 @@
1
- import { compile } from 'json-schema-to-typescript';
2
- import { finalizeOutputDts, postProcessEmittedTypes } from './typeGenerationPostProcess.js';
3
- import { normalizeSchemaForGenerator, validateSchemaArrayKeywords } from './typeGenerationPreflight.js';
4
-
5
- export async function generateTypeDeclarations(parsedSchema: any, rootName: string): Promise<string> {
6
- const validationIssues = validateSchemaArrayKeywords(parsedSchema);
7
- if (validationIssues.length) {
8
- throw new Error(
9
- 'Schema is not in canonical form for type generation:\n' +
10
- validationIssues.map((issue) => `- ${issue}`).join('\n'),
11
- );
12
- }
13
-
14
- const normalizedSchema = normalizeSchemaForGenerator(parsedSchema);
15
-
16
- let ts = await compile(normalizedSchema, rootName, {
17
- bannerComment: '',
18
- declareExternallyReferenced: true,
19
- unreachableDefinitions: true,
20
- $refOptions: {
21
- resolve: {
22
- file: { order: 2 },
23
- http: false,
24
- https: false,
25
- },
26
- } as any,
27
- });
28
-
29
- ts = postProcessEmittedTypes(ts, parsedSchema);
30
- return finalizeOutputDts(ts);
31
- }
@@ -1,246 +0,0 @@
1
- function deriveTemplateFromPattern(pattern: string): string | undefined {
2
- const match = /^\^([^$]+)\.\+\$/.exec(pattern);
3
- if (match) {
4
- const prefix = match[1];
5
- if (prefix === undefined) return undefined;
6
- if (!/[`]/.test(prefix)) {
7
- return '`' + prefix + '${string}`';
8
- }
9
- }
10
- return undefined;
11
- }
12
-
13
- function loadPatternTemplatesFromSchema(schema: any): Record<string, string> {
14
- const map: Record<string, string> = {};
15
- const defs = schema?.$defs && typeof schema.$defs === 'object' ? schema.$defs : {};
16
- for (const [defName, defVal] of Object.entries(defs)) {
17
- if (!/(Id|Handle)$/.test(defName)) continue;
18
-
19
- const value: any = defVal;
20
- if (value && value.type === 'string' && typeof value.pattern === 'string') {
21
- const tmpl = deriveTemplateFromPattern(value.pattern);
22
- if (tmpl) map[defName] = tmpl;
23
- }
24
- }
25
- return map;
26
- }
27
-
28
- function removeDuplicateUnionEntries(ts: string): string {
29
- return ts.replace(/export type ([A-Za-z0-9_]+) =([\s\S]*?);/g, (_match, typeName, body) => {
30
- const lines = body.split(/\r?\n/);
31
- const seen = new Set<string>();
32
- const kept: string[] = [];
33
- for (const line of lines) {
34
- const trimmed = line.trim();
35
- const match = /^\|\s*([A-Za-z0-9_]+)\b/.exec(trimmed);
36
- if (match) {
37
- const name = match[1];
38
- if (name === undefined) continue;
39
- if (!seen.has(name)) {
40
- seen.add(name);
41
- kept.push(' | ' + name);
42
- }
43
- continue;
44
- }
45
- if (trimmed.length) kept.push(line);
46
- }
47
- return `export type ${typeName} =\n` + kept.join('\n') + ';';
48
- });
49
- }
50
-
51
- function escapeRegExpLiteral(value: string): string {
52
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
53
- }
54
-
55
- function deriveStrategyStateInputEntryByRoleNameValueType(parsedSchema: any): string {
56
- const defs = parsedSchema?.$defs ?? parsedSchema?.projectionSchema?.$defs;
57
- const def = defs?.StrategyStateInputEntryByRoleName;
58
- const schemaNode = def?.projectionSchema ?? def;
59
- const additionalProperties = schemaNode?.additionalProperties;
60
-
61
- if (!additionalProperties || typeof additionalProperties !== 'object' || Array.isArray(additionalProperties)) {
62
- return 'StrategyStateInputEntry';
63
- }
64
-
65
- const union = (additionalProperties as any).oneOf ?? (additionalProperties as any).anyOf;
66
- if (!Array.isArray(union) || union.length === 0) {
67
- const ref = (additionalProperties as any).$ref;
68
- const match = typeof ref === 'string'
69
- ? /^#(?:\/(?:\$defs|definitions)\/)?([A-Za-z_][A-Za-z0-9_]*)$/.exec(ref)
70
- : undefined;
71
- const typeName = match?.[1];
72
- return typeName ?? 'StrategyStateInputEntry';
73
- }
74
-
75
- const names: string[] = [];
76
- for (const item of union) {
77
- const ref = item && typeof item === 'object' ? (item as any).$ref : undefined;
78
- if (typeof ref !== 'string') continue;
79
-
80
- const match = /^#(?:\/(?:\$defs|definitions)\/)?([A-Za-z_][A-Za-z0-9_]*)$/.exec(ref);
81
- const name = match?.[1];
82
- if (name !== undefined) names.push(name);
83
- }
84
-
85
- const unique = Array.from(new Set(names));
86
- if (!unique.length) return 'StrategyStateInputEntry';
87
-
88
- return unique.join(' | ');
89
- }
90
-
91
- function fixRecursiveArrayAliasSelfReference(ts: string, typeName: string): string {
92
- const lines = ts.split(/\r?\n/);
93
- const typeNamePattern = escapeRegExpLiteral(typeName);
94
- const startIndex = lines.findIndex((line) => new RegExp(`^export\\s+type\\s+${typeNamePattern}\\s*=\\s*$`).test(line.trimEnd()));
95
- if (startIndex < 0) return ts;
96
-
97
- let endIndex = -1;
98
- for (let i = startIndex + 1; i < lines.length; i++) {
99
- const line = lines[i];
100
- if (line !== undefined && /^\s*};\s*$/.test(line)) {
101
- endIndex = i;
102
- break;
103
- }
104
- }
105
- if (endIndex < 0) return ts;
106
-
107
- for (let i = startIndex + 1; i < endIndex; i++) {
108
- const line = lines[i];
109
- if (line !== undefined && new RegExp(`^\\s*\\|\\s*${typeNamePattern}\\s*$`).test(line)) {
110
- lines[i] = line.replace(new RegExp(`\\b${typeNamePattern}\\b`), `${typeName}[]`);
111
- }
112
- }
113
-
114
- return lines.join('\n');
115
- }
116
-
117
- export function postProcessEmittedTypes(ts: string, parsedSchema: any): string {
118
- ts = ts.replace(/^\s*\[k:\s*string\]:\s*unknown;\s*(?:\r?\n)?/gm, '');
119
-
120
- ts = ts.replace(
121
- /^(\s*)(\$defs\??:\s*)\{\s*\r?\n\s*\};/gm,
122
- (_m, indent, head) => `${indent}${head}Record<string, unknown>;`,
123
- );
124
-
125
- ts = ts.replace(
126
- /^(\s*)(properties\??:\s*)\{\s*\r?\n\s*\};/gm,
127
- (_m, indent, head) => `${indent}${head}Record<string, unknown>;`,
128
- );
129
-
130
- ts = ts.replace(
131
- /^(\s*)((?:allOf|anyOf|oneOf)\??:\s*)\{\s*\r?\n\s*\}\[\];/gm,
132
- (_m, indent, head) => `${indent}${head}Array<{[k: string]: unknown}>;`,
133
- );
134
-
135
- ts = removeDuplicateUnionEntries(ts);
136
-
137
- const schemaId = parsedSchema?.$id;
138
- if (typeof schemaId === 'string') {
139
- const match = /\/([^/]+)\.json$/i.exec(schemaId);
140
- const rootBaseName = match?.[1];
141
- if (rootBaseName) {
142
- const rootTypeNameEsc = escapeRegExpLiteral(rootBaseName);
143
- const generatedRootSchemaNamePattern = `Https[A-Za-z0-9_]*${rootTypeNameEsc}(?:Json)?`;
144
-
145
- ts = ts.replace(
146
- new RegExp(`^export interface ${generatedRootSchemaNamePattern}\\s*\\{\\s*\\}\\s*(?:\\r?\\n)?`, 'gm'),
147
- '',
148
- );
149
-
150
- ts = ts.replace(
151
- new RegExp(`\\b${generatedRootSchemaNamePattern}\\b`, 'g'),
152
- rootBaseName,
153
- );
154
- }
155
- }
156
-
157
- if (!ts || !ts.trim()) {
158
- throw new Error('Type generator emitted no output for schema.');
159
- }
160
-
161
- const patternTemplates = loadPatternTemplatesFromSchema(parsedSchema);
162
- ts = ts.replace(
163
- /^(export\s+type\s+)([A-Za-z_][A-Za-z0-9_]*(?:Id|Handle))(\s*=\s*)string\s*;$/gm,
164
- (_m, p1, typeName, p3) => {
165
- const tmpl = patternTemplates[typeName];
166
- return `${p1}${typeName}${p3}${tmpl ?? 'string'};`;
167
- },
168
- );
169
-
170
- const roleNameKeyType = 'RoleName';
171
- const unthreadedToolStepPathKeyType = 'UnthreadedToolStepPath';
172
- const threadedToolStepPathKeyType = 'ThreadedToolStepPath';
173
- const toolStepPathKeyType = 'ToolStepPath';
174
-
175
- ts = ts.replace(
176
- /export interface RoleValueByName\s*\{\s*\[k:\s*string\]:\s*RoleValue;\s*\}/g,
177
- `export type RoleValueByName = Record<${roleNameKeyType}, RoleValue>;`,
178
- );
179
-
180
- const strategyStateInputEntryByRoleNameValueType = deriveStrategyStateInputEntryByRoleNameValueType(parsedSchema);
181
- ts = ts.replace(
182
- /export interface StrategyStateInputEntryByRoleName\s*\{\s*\[k:\s*string\]:\s*[^;]+;\s*\}/g,
183
- `export type StrategyStateInputEntryByRoleName = Record<${roleNameKeyType}, ${strategyStateInputEntryByRoleNameValueType}>;`,
184
- );
185
-
186
- ts = ts.replace(
187
- /export\s+type\s+StrategyStateInputEntryByRoleName\s*=\s*Record<\s*RoleName\s*,\s*[^>]+>\s*;/g,
188
- `export type StrategyStateInputEntryByRoleName = Record<${roleNameKeyType}, ${strategyStateInputEntryByRoleNameValueType}>;`,
189
- );
190
-
191
- ts = ts.replace(
192
- /export interface StrategyStateInputEntryByRoleNameByUnthreadedToolStepPath\s*\{\s*\[k:\s*string\]:\s*StrategyStateInputEntryByRoleName;\s*\}/g,
193
- `export type StrategyStateInputEntryByRoleNameByUnthreadedToolStepPath = Record<${unthreadedToolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
194
- );
195
-
196
- ts = ts.replace(
197
- /export interface StrategyStateInputEntryByRoleNameByThreadedToolStepPath\s*\{\s*\[k:\s*string\]:\s*StrategyStateInputEntryByRoleName;\s*\}/g,
198
- `export type StrategyStateInputEntryByRoleNameByThreadedToolStepPath = Record<${threadedToolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
199
- );
200
-
201
- ts = ts.replace(
202
- /export\s+type\s+UnthreadedStrategyState\s*=\s*StrategyStateInputEntryByRoleNameByUnthreadedToolStepPath\s*;/g,
203
- `export type UnthreadedStrategyState = Record<${unthreadedToolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
204
- );
205
-
206
- ts = ts.replace(
207
- /export\s+type\s+ThreadedStrategyState\s*=\s*StrategyStateInputEntryByRoleNameByThreadedToolStepPath\s*;/g,
208
- `export type ThreadedStrategyState = Record<${threadedToolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
209
- );
210
-
211
- ts = ts.replace(
212
- /(strategyState\??:\s*)\{\s*\[k:\s*string\]:\s*StrategyStateInputEntryByRoleName;\s*\};/g,
213
- `$1Record<${toolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
214
- );
215
-
216
- ts = ts.replace(
217
- /(strategyStateUpdate\??:\s*)\{\s*\[k:\s*string\]:\s*StrategyStateInputEntryByRoleName;\s*\};/g,
218
- `$1Record<${toolStepPathKeyType}, StrategyStateInputEntryByRoleName>;`,
219
- );
220
-
221
- ts = ts.replace(
222
- /export interface StepsByThreadIndexFacet\s*\{\s*stepsByThreadIndex:\s*StepArrayArray;\s*\}/g,
223
- 'export interface StepsByThreadIndexFacet {\n stepsByThreadIndex: StepArrayArray;\n}',
224
- );
225
-
226
- ts = fixRecursiveArrayAliasSelfReference(ts, 'JsonData');
227
-
228
- return ts;
229
- }
230
-
231
- export function finalizeOutputDts(emittedType: string): string {
232
- const banner = '// Auto-generated from JSON schemas. Do not edit.\n';
233
-
234
- let output = banner + '\n' + emittedType + '\n';
235
- output = output.replace(/^\s*\[k:\s*string\]:\s*unknown;\s*$/gm, '');
236
- output = output
237
- .replace(/\r?\n\s*\r?\n(\s*};)/g, '\n$1')
238
- .replace(/\r?\n\s*\r?\n(\s*})/g, '\n$1')
239
- .replace(/(\r?\n){3,}/g, '\n\n');
240
-
241
- if (!/\bexport\b|\bdeclare\s+module\b|\bdeclare\s+namespace\b/.test(output)) {
242
- output += '\nexport {}\n';
243
- }
244
-
245
- return output;
246
- }
@@ -1,119 +0,0 @@
1
- import { normalizeAllOfSiblingObjectKeywords } from './schemaObjectNormalization.js';
2
-
3
- function formatPath(pathSegments: Array<string | number>): string {
4
- let out = '';
5
- for (const seg of pathSegments) {
6
- if (typeof seg === 'number') {
7
- out += `[${seg}]`;
8
- continue;
9
- }
10
- out = out ? `${out}.${seg}` : seg;
11
- }
12
- return out || '<root>';
13
- }
14
-
15
- export function validateSchemaArrayKeywords(node: any, parentKey?: string, pathSegments: Array<string | number> = []): string[] {
16
- if (Array.isArray(node)) {
17
- const issues: string[] = [];
18
- for (let i = 0; i < node.length; i++) {
19
- issues.push(...validateSchemaArrayKeywords(node[i], parentKey, pathSegments.concat([i])));
20
- }
21
- return issues;
22
- }
23
-
24
- if (!node || typeof node !== 'object') return [];
25
-
26
- const isPropertyNameMap =
27
- parentKey === 'properties' ||
28
- parentKey === 'patternProperties' ||
29
- parentKey === '$defs' ||
30
- parentKey === 'dependentSchemas' ||
31
- parentKey === 'dependentRequired';
32
-
33
- const arrayKeys = ['anyOf', 'allOf', 'oneOf', 'required', 'enum'] as const;
34
- const issues: string[] = [];
35
-
36
- for (const [key, value] of Object.entries(node)) {
37
- if (key === 'properties' || key === 'patternProperties' || key === '$defs' || key === 'dependentSchemas') {
38
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
39
- issues.push(
40
- `${formatPath(pathSegments.concat([key]))}: expected \`${key}\` to be an object map, got ${value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value}`,
41
- );
42
- }
43
- }
44
-
45
- if (key === 'dependentRequired') {
46
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
47
- issues.push(
48
- `${formatPath(pathSegments.concat([key]))}: expected \`dependentRequired\` to be an object map, got ${value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value}`,
49
- );
50
- } else {
51
- for (const [depKey, depVal] of Object.entries(value as any)) {
52
- if (!Array.isArray(depVal)) {
53
- issues.push(
54
- `${formatPath(pathSegments.concat([key, depKey]))}: expected dependentRequired entries to be string arrays, got ${depVal === null ? 'null' : typeof depVal}`,
55
- );
56
- continue;
57
- }
58
- for (let i = 0; i < depVal.length; i++) {
59
- if (typeof depVal[i] !== 'string') {
60
- issues.push(
61
- `${formatPath(pathSegments.concat([key, depKey, i]))}: expected dependentRequired entries to be strings, got ${depVal[i] === null ? 'null' : typeof depVal[i]}`,
62
- );
63
- }
64
- }
65
- }
66
- }
67
- }
68
-
69
- if (!isPropertyNameMap && (arrayKeys as readonly string[]).includes(key) && Object.prototype.hasOwnProperty.call(node, key)) {
70
- if (!Array.isArray(value)) {
71
- issues.push(
72
- `${formatPath(pathSegments.concat([key]))}: expected \`${key}\` to be an array, got ${value === null ? 'null' : typeof value}`,
73
- );
74
- } else {
75
- if ((key === 'anyOf' || key === 'allOf' || key === 'oneOf') && value.length === 0) {
76
- issues.push(`${formatPath(pathSegments.concat([key]))}: expected \`${key}\` to be a non-empty array`);
77
- }
78
-
79
- if (key === 'anyOf' || key === 'allOf' || key === 'oneOf') {
80
- for (let i = 0; i < value.length; i++) {
81
- const item = value[i];
82
- const ok =
83
- typeof item === 'boolean' ||
84
- (item !== null && typeof item === 'object' && !Array.isArray(item));
85
- if (!ok) {
86
- issues.push(
87
- `${formatPath(pathSegments.concat([key, i]))}: expected a schema (object or boolean), got ${item === null ? 'null' : Array.isArray(item) ? 'array' : typeof item}`,
88
- );
89
- }
90
- }
91
- }
92
-
93
- if (key === 'required') {
94
- const seen = new Set<string>();
95
- for (let i = 0; i < value.length; i++) {
96
- if (typeof value[i] !== 'string') {
97
- issues.push(
98
- `${formatPath(pathSegments.concat([key, i]))}: expected \`required\` entries to be strings, got ${value[i] === null ? 'null' : typeof value[i]}`,
99
- );
100
- continue;
101
- }
102
- if (seen.has(value[i])) {
103
- issues.push(`${formatPath(pathSegments.concat([key]))}: duplicate required entry \`${value[i]}\``);
104
- }
105
- seen.add(value[i]);
106
- }
107
- }
108
- }
109
- }
110
-
111
- issues.push(...validateSchemaArrayKeywords(value, key, pathSegments.concat([key])));
112
- }
113
-
114
- return issues;
115
- }
116
-
117
- export function normalizeSchemaForGenerator(schema: any): any {
118
- return normalizeAllOfSiblingObjectKeywords(schema);
119
- }