@toolproof-core/genesis 1.0.53 → 1.0.54

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 (185) 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} +1 -2
  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 +1 -1
  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/dist/index.d.ts +1 -0
  67. package/dist/index.js +1 -0
  68. package/dist/scripts/_lib/config.d.ts +83 -0
  69. package/dist/scripts/_lib/config.js +269 -0
  70. package/dist/scripts/generateConstantsAndMappings.d.ts +1 -0
  71. package/dist/scripts/generateConstantsAndMappings.js +41 -0
  72. package/dist/scripts/generateCoreProjection.d.ts +1 -0
  73. package/dist/scripts/generateCoreProjection.js +56 -0
  74. package/dist/scripts/generateDeclarations.d.ts +1 -0
  75. package/dist/scripts/generateDeclarations.js +43 -0
  76. package/dist/scripts/generateDependencies.d.ts +1 -0
  77. package/dist/scripts/generateDependencies.js +25 -0
  78. package/dist/scripts/generateImplementations.d.ts +1 -0
  79. package/dist/scripts/generateImplementations.js +45 -0
  80. package/dist/scripts/generateResourceTypes.d.ts +1 -0
  81. package/dist/scripts/generateResourceTypes.js +33 -0
  82. package/dist/scripts/generateSchemaShims.d.ts +1 -0
  83. package/dist/scripts/generateSchemaShims.js +39 -0
  84. package/dist/scripts/generateStandaloneSchemas.d.ts +1 -0
  85. package/dist/scripts/generateStandaloneSchemas.js +37 -0
  86. package/dist/scripts/generateStandaloneTypes.d.ts +1 -0
  87. package/dist/scripts/generateStandaloneTypes.js +39 -0
  88. package/dist/scripts/generateStandaloneZodSchemas.d.ts +1 -0
  89. package/dist/scripts/generateStandaloneZodSchemas.js +36 -0
  90. package/dist/scripts/generateTerminals.d.ts +1 -0
  91. package/dist/scripts/generateTerminals.js +26 -0
  92. package/dist/scripts/generateTimestampedResources.d.ts +1 -0
  93. package/dist/scripts/generateTimestampedResources.js +79 -0
  94. package/dist/scripts/generateTypes.d.ts +1 -0
  95. package/dist/scripts/generateTypes.js +40 -0
  96. package/dist/scripts/normalizeAnchorsToPointers.d.ts +1 -0
  97. package/dist/scripts/normalizeAnchorsToPointers.js +32 -0
  98. package/dist/tsconfig.tsbuildinfo +1 -0
  99. package/package.json +42 -8
  100. package/generated-src/implementations/tools.ts +0 -214
  101. package/generated-src/metadata/Core.json +0 -1929
  102. package/generated-src/metadata/dependencyMap.json +0 -297
  103. package/generated-src/metadata/terminals.json +0 -16
  104. package/generated-src/schemas/standalone/Boolean.json +0 -5
  105. package/generated-src/schemas/standalone/Error.json +0 -78
  106. package/generated-src/schemas/standalone/Goal.json +0 -53
  107. package/generated-src/schemas/standalone/Natural.json +0 -6
  108. package/generated-src/schemas/standalone/Resource.json +0 -166
  109. package/generated-src/schemas/standalone/ResourceType.json +0 -147
  110. package/generated-src/schemas/standalone/Strategy.json +0 -637
  111. package/generated-src/schemas/standalone/StrategyTrace.json +0 -816
  112. package/generated-src/schemas/standalone/Suite.json +0 -646
  113. package/generated-src/schemas/standalone/Tool.json +0 -533
  114. package/generated-src/schemas/zod/Error.ts +0 -11
  115. package/generated-src/schemas/zod/Goal.ts +0 -8
  116. package/generated-src/schemas/zod/Resource.ts +0 -21
  117. package/generated-src/schemas/zod/ResourceType.ts +0 -14
  118. package/generated-src/schemas/zod/Strategy.ts +0 -68
  119. package/generated-src/schemas/zod/StrategyTrace.ts +0 -75
  120. package/generated-src/schemas/zod/Suite.ts +0 -44
  121. package/generated-src/schemas/zod/Tool.ts +0 -34
  122. package/src/declarations/booleans.json +0 -4
  123. package/src/declarations/naturals.json +0 -13
  124. package/src/declarations/resourceTypes/resourceTypeShells.json +0 -53
  125. package/src/declarations/resourceTypes/schemas.json +0 -1839
  126. package/src/declarations/tools.json +0 -705
  127. package/src/implementations/tools.ts +0 -214
  128. package/src/index.ts +0 -131
  129. package/src/utils/constantsAndMappings.ts +0 -361
  130. package/src/utils/coreProjection.ts +0 -53
  131. package/src/utils/resourceTypes.ts +0 -71
  132. package/src/utils/schemaDependencies.ts +0 -115
  133. package/src/utils/schemaObjectNormalization.ts +0 -71
  134. package/src/utils/schemaRefNormalization.ts +0 -83
  135. package/src/utils/schemaShims.ts +0 -17
  136. package/src/utils/standaloneSchemas.ts +0 -114
  137. package/src/utils/standaloneTypes.ts +0 -28
  138. package/src/utils/standaloneZodSchemas.ts +0 -72
  139. package/src/utils/timestampedResources.ts +0 -42
  140. package/src/utils/typeGeneration.ts +0 -31
  141. package/src/utils/typeGenerationPostProcess.ts +0 -246
  142. package/src/utils/typeGenerationPreflight.ts +0 -119
  143. package/src/utils/zodCodegen.ts +0 -549
  144. /package/{generated-src/declarations/booleans.ts → dist/generated-src/declarations/booleans.js} +0 -0
  145. /package/{generated-src/declarations/naturals.ts → dist/generated-src/declarations/naturals.js} +0 -0
  146. /package/{generated-src/declarations/resourceTypes.ts → dist/generated-src/declarations/resourceTypes.js} +0 -0
  147. /package/{generated-src/declarations/tools.ts → dist/generated-src/declarations/tools.js} +0 -0
  148. /package/{generated-src/schemas/schemas.ts → dist/generated-src/schemas/schemas.js} +0 -0
  149. /package/{generated-src/schemas/standalone/Boolean.ts → dist/generated-src/schemas/standalone/Boolean.js} +0 -0
  150. /package/{generated-src/schemas/standalone/Error.ts → dist/generated-src/schemas/standalone/Error.js} +0 -0
  151. /package/{generated-src/schemas/standalone/Goal.ts → dist/generated-src/schemas/standalone/Goal.js} +0 -0
  152. /package/{generated-src/schemas/standalone/Natural.ts → dist/generated-src/schemas/standalone/Natural.js} +0 -0
  153. /package/{generated-src/schemas/standalone/Resource.ts → dist/generated-src/schemas/standalone/Resource.js} +0 -0
  154. /package/{generated-src/schemas/standalone/ResourceType.ts → dist/generated-src/schemas/standalone/ResourceType.js} +0 -0
  155. /package/{generated-src/schemas/standalone/Strategy.ts → dist/generated-src/schemas/standalone/Strategy.js} +0 -0
  156. /package/{generated-src/schemas/standalone/StrategyTrace.ts → dist/generated-src/schemas/standalone/StrategyTrace.js} +0 -0
  157. /package/{generated-src/schemas/standalone/Suite.ts → dist/generated-src/schemas/standalone/Suite.js} +0 -0
  158. /package/{generated-src/schemas/standalone/Tool.ts → dist/generated-src/schemas/standalone/Tool.js} +0 -0
  159. /package/{generated-src/schemas/zod/index.ts → dist/generated-src/schemas/zod/index.js} +0 -0
  160. /package/{generated-src/timestampedResources/booleans.ts → dist/generated-src/timestampedResources/booleans.js} +0 -0
  161. /package/{generated-src/timestampedResources/naturals.ts → dist/generated-src/timestampedResources/naturals.js} +0 -0
  162. /package/{generated-src/timestampedResources/resourceTypes.ts → dist/generated-src/timestampedResources/resourceTypes.js} +0 -0
  163. /package/{generated-src/timestampedResources/tools.ts → dist/generated-src/timestampedResources/tools.js} +0 -0
  164. /package/{generated-src → dist/generated-src}/types/standalone/BooleanResource.d.ts +0 -0
  165. /package/{generated-src → dist/generated-src}/types/standalone/BooleanResource.js +0 -0
  166. /package/{generated-src → dist/generated-src}/types/standalone/ErrorResource.d.ts +0 -0
  167. /package/{generated-src → dist/generated-src}/types/standalone/ErrorResource.js +0 -0
  168. /package/{generated-src → dist/generated-src}/types/standalone/GoalResource.d.ts +0 -0
  169. /package/{generated-src → dist/generated-src}/types/standalone/GoalResource.js +0 -0
  170. /package/{generated-src → dist/generated-src}/types/standalone/NaturalResource.d.ts +0 -0
  171. /package/{generated-src → dist/generated-src}/types/standalone/NaturalResource.js +0 -0
  172. /package/{generated-src → dist/generated-src}/types/standalone/ResourceResource.d.ts +0 -0
  173. /package/{generated-src → dist/generated-src}/types/standalone/ResourceResource.js +0 -0
  174. /package/{generated-src → dist/generated-src}/types/standalone/ResourceTypeResource.d.ts +0 -0
  175. /package/{generated-src → dist/generated-src}/types/standalone/ResourceTypeResource.js +0 -0
  176. /package/{generated-src → dist/generated-src}/types/standalone/StrategyResource.d.ts +0 -0
  177. /package/{generated-src → dist/generated-src}/types/standalone/StrategyResource.js +0 -0
  178. /package/{generated-src → dist/generated-src}/types/standalone/StrategyTraceResource.d.ts +0 -0
  179. /package/{generated-src → dist/generated-src}/types/standalone/StrategyTraceResource.js +0 -0
  180. /package/{generated-src → dist/generated-src}/types/standalone/SuiteResource.d.ts +0 -0
  181. /package/{generated-src → dist/generated-src}/types/standalone/SuiteResource.js +0 -0
  182. /package/{generated-src → dist/generated-src}/types/standalone/ToolResource.d.ts +0 -0
  183. /package/{generated-src → dist/generated-src}/types/standalone/ToolResource.js +0 -0
  184. /package/{generated-src → dist/generated-src}/types/types.d.ts +0 -0
  185. /package/{generated-src → dist/generated-src}/types/types.js +0 -0
@@ -1,53 +0,0 @@
1
- import * as path from 'node:path';
2
-
3
- export type CoreProjectionNode = CoreProjectionDirectoryNode | CoreProjectionFileNode;
4
-
5
- export interface CoreProjectionBaseNode {
6
- kind: 'directory' | 'file';
7
- name: string;
8
- path: string;
9
- }
10
-
11
- export interface CoreProjectionDirectoryNode extends CoreProjectionBaseNode {
12
- kind: 'directory';
13
- children: CoreProjectionNode[];
14
- }
15
-
16
- export interface CoreProjectionFileNode extends CoreProjectionBaseNode {
17
- kind: 'file';
18
- }
19
-
20
- const EXCLUDED_DIRECTORY_NAMES = new Set([
21
- '.git',
22
- '.next',
23
- 'dist',
24
- 'node_modules',
25
- ]);
26
-
27
- export function toPosixPath(value: string): string {
28
- return value.split(path.sep).join('/');
29
- }
30
-
31
- export function shouldExclude(relativePath: string, isDirectory: boolean, excludedRelativePathPrefixes: string[]): boolean {
32
- if (!relativePath || relativePath === '.') {
33
- return false;
34
- }
35
-
36
- const normalizedPath = toPosixPath(relativePath);
37
- const baseName = path.posix.basename(normalizedPath);
38
-
39
- if (isDirectory && EXCLUDED_DIRECTORY_NAMES.has(baseName)) {
40
- return true;
41
- }
42
-
43
- return excludedRelativePathPrefixes.some((prefix) => {
44
- return normalizedPath === prefix || normalizedPath.startsWith(`${prefix}/`);
45
- });
46
- }
47
-
48
- export function compareNodes(a: CoreProjectionNode, b: CoreProjectionNode): number {
49
- if (a.kind !== b.kind) {
50
- return a.kind === 'directory' ? -1 : 1;
51
- }
52
- return a.name.localeCompare(b.name);
53
- }
@@ -1,71 +0,0 @@
1
- type JsonObject = Record<string, unknown>;
2
-
3
- type SchemasDocument = {
4
- $defs?: Record<string, JsonObject>;
5
- };
6
-
7
- type ResourceTypeShell = JsonObject & {
8
- handle?: unknown;
9
- name?: unknown;
10
- description?: unknown;
11
- ingestorToolInputSchema?: unknown;
12
- };
13
-
14
- type ResourceTypeShellByName = Record<string, ResourceTypeShell>;
15
-
16
- export function generateResourceTypes(
17
- schemasDocument: SchemasDocument,
18
- resourceTypeShells: ResourceTypeShellByName,
19
- ): ResourceTypeShell[] {
20
- if (!schemasDocument.$defs || typeof schemasDocument.$defs !== 'object') {
21
- throw new Error('Schema document must have root $defs');
22
- }
23
-
24
- const resourceTypes: ResourceTypeShell[] = [];
25
-
26
- for (const [resourceTypeName, resourceTypeShell] of Object.entries(resourceTypeShells)) {
27
- const projectionSchema = schemasDocument.$defs[resourceTypeName];
28
- const ingestorToolInputSchemaDefName = resourceTypeShell.ingestorToolInputSchema;
29
-
30
- if (!projectionSchema || typeof projectionSchema !== 'object' || Array.isArray(projectionSchema)) {
31
- throw new Error(`Missing matching schema for resource type record ${resourceTypeName}`);
32
- }
33
-
34
- if (
35
- ingestorToolInputSchemaDefName !== undefined &&
36
- typeof ingestorToolInputSchemaDefName !== 'string'
37
- ) {
38
- throw new Error(
39
- `ingestorToolInputSchema for resource type record ${resourceTypeName} must be a schema definition name when present`,
40
- );
41
- }
42
-
43
- const ingestorToolInputSchema =
44
- typeof ingestorToolInputSchemaDefName === 'string'
45
- ? schemasDocument.$defs[ingestorToolInputSchemaDefName]
46
- : undefined;
47
-
48
- if (typeof ingestorToolInputSchemaDefName === 'string' && !ingestorToolInputSchema) {
49
- throw new Error(
50
- `Missing ingestor input schema ${ingestorToolInputSchemaDefName} for resource type record ${resourceTypeName}`,
51
- );
52
- }
53
-
54
- if (
55
- ingestorToolInputSchema !== undefined &&
56
- (typeof ingestorToolInputSchema !== 'object' || Array.isArray(ingestorToolInputSchema))
57
- ) {
58
- throw new Error(
59
- `Ingestor input schema ${ingestorToolInputSchemaDefName} for resource type record ${resourceTypeName} must be an object`,
60
- );
61
- }
62
-
63
- resourceTypes.push({
64
- ...resourceTypeShell,
65
- projectionSchema,
66
- ...(ingestorToolInputSchema ? { ingestorToolInputSchema } : {}),
67
- });
68
- }
69
-
70
- return resourceTypes;
71
- }
@@ -1,115 +0,0 @@
1
- type JSONValue = null | boolean | number | string | JSONValue[] | { [k: string]: JSONValue };
2
-
3
- export type DependencyMap = Record<string, string[]>;
4
-
5
- export function decodeJsonPointerSegment(segment: string): string {
6
- return segment.replace(/~1/g, '/').replace(/~0/g, '~');
7
- }
8
-
9
- export function collectRefs(node: unknown, out: Set<string>): void {
10
- if (Array.isArray(node)) {
11
- for (const item of node) collectRefs(item, out);
12
- return;
13
- }
14
- if (!node || typeof node !== 'object') return;
15
-
16
- const obj = node as Record<string, unknown>;
17
- const ref = obj.$ref;
18
- if (typeof ref === 'string') out.add(ref);
19
-
20
- for (const value of Object.values(obj)) {
21
- collectRefs(value, out);
22
- }
23
- }
24
-
25
- export function resolveInternalRefToDefKey(
26
- ref: string,
27
- defKeys: Set<string>,
28
- anchorToDef: Record<string, string>,
29
- ): string | null {
30
- if (!ref.startsWith('#')) return null;
31
-
32
- const defsPrefix = '#/$defs/';
33
- if (ref.startsWith(defsPrefix)) {
34
- const rest = ref.slice(defsPrefix.length);
35
- const firstSegment = rest.split('/')[0] ?? '';
36
- const defKey = decodeJsonPointerSegment(firstSegment);
37
- return defKeys.has(defKey) ? defKey : null;
38
- }
39
-
40
- if (!ref.startsWith('#/')) {
41
- const anchor = ref.slice(1);
42
- const mapped = anchorToDef[anchor];
43
- if (mapped && defKeys.has(mapped)) return mapped;
44
- if (defKeys.has(anchor)) return anchor;
45
- }
46
-
47
- return null;
48
- }
49
-
50
- export function generateDependencyMap(doc: { $defs?: Record<string, JSONValue> } | null | undefined): DependencyMap {
51
- const defs: Record<string, JSONValue> = doc?.$defs && typeof doc.$defs === 'object' ? doc.$defs : {};
52
- const defKeys = new Set(Object.keys(defs));
53
-
54
- const anchorToDef: Record<string, string> = {};
55
- for (const [defKey, defSchema] of Object.entries(defs)) {
56
- if (!defSchema || typeof defSchema !== 'object' || Array.isArray(defSchema)) continue;
57
- const anchor = (defSchema as { $anchor?: unknown }).$anchor;
58
- if (typeof anchor === 'string' && !(anchor in anchorToDef)) {
59
- anchorToDef[anchor] = defKey;
60
- }
61
- }
62
-
63
- const dependencyMap: DependencyMap = {};
64
-
65
- for (const [defKey, defSchema] of Object.entries(defs)) {
66
- const refs = new Set<string>();
67
- collectRefs(defSchema, refs);
68
-
69
- const deps = new Set<string>();
70
- for (const ref of refs) {
71
- const depKey = resolveInternalRefToDefKey(ref, defKeys, anchorToDef);
72
- if (!depKey || depKey === defKey) continue;
73
- deps.add(depKey);
74
- }
75
-
76
- dependencyMap[defKey] = Array.from(deps);
77
- }
78
-
79
- return dependencyMap;
80
- }
81
-
82
- export function normalizeDependencyMap(value: unknown): DependencyMap {
83
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
84
- throw new Error('Invalid dependencyMap.json: expected an object');
85
- }
86
-
87
- const input = value as Record<string, unknown>;
88
- const out: DependencyMap = {};
89
-
90
- for (const [key, rawDeps] of Object.entries(input)) {
91
- if (rawDeps == null) {
92
- out[key] = [];
93
- continue;
94
- }
95
- if (!Array.isArray(rawDeps)) {
96
- throw new Error(`Invalid dependencyMap.json: value for ${key} must be an array`);
97
- }
98
- out[key] = rawDeps.filter((dep): dep is string => typeof dep === 'string');
99
- }
100
-
101
- return out;
102
- }
103
-
104
- export function computeTerminalsInKeyOrder(dependencyMap: DependencyMap): string[] {
105
- const keys = Object.keys(dependencyMap);
106
- const dependedUpon = new Set<string>();
107
-
108
- for (const key of keys) {
109
- for (const dep of dependencyMap[key] ?? []) {
110
- dependedUpon.add(dep);
111
- }
112
- }
113
-
114
- return keys.filter((key) => !dependedUpon.has(key));
115
- }
@@ -1,71 +0,0 @@
1
- export function normalizeAllOfSiblingObjectKeywords(node: any): any {
2
- if (Array.isArray(node)) {
3
- let changed = false;
4
- const out = node.map((item) => {
5
- const next = normalizeAllOfSiblingObjectKeywords(item);
6
- if (next !== item) changed = true;
7
- return next;
8
- });
9
- return changed ? out : node;
10
- }
11
- if (!node || typeof node !== 'object') return node;
12
-
13
- const hasAllOf = Array.isArray((node as any).allOf) && (node as any).allOf.length > 0;
14
- const looksLikeObjectSchema =
15
- (node as any).type === 'object' ||
16
- (node as any).properties !== undefined ||
17
- (node as any).required !== undefined ||
18
- (node as any).unevaluatedProperties !== undefined ||
19
- (node as any).additionalProperties !== undefined ||
20
- (node as any).propertyNames !== undefined;
21
-
22
- const siblingKeys = [
23
- 'type',
24
- 'properties',
25
- 'required',
26
- 'additionalProperties',
27
- 'unevaluatedProperties',
28
- 'propertyNames',
29
- 'patternProperties',
30
- 'dependentRequired',
31
- 'dependentSchemas',
32
- 'minProperties',
33
- 'maxProperties',
34
- ] as const;
35
-
36
- let localNode: any = node;
37
- if (hasAllOf && looksLikeObjectSchema) {
38
- const hasSiblingObjectKeywords = siblingKeys.some((key) => key in localNode);
39
- if (hasSiblingObjectKeywords) {
40
- const overlay: any = {};
41
- const nextNode: any = { ...localNode };
42
-
43
- for (const key of siblingKeys) {
44
- if (key in nextNode) {
45
- overlay[key] = nextNode[key];
46
- delete nextNode[key];
47
- }
48
- }
49
-
50
- nextNode.allOf = [overlay, ...(nextNode.allOf as any[])];
51
- localNode = nextNode;
52
- }
53
- }
54
-
55
- let changed = localNode !== node;
56
- const out: Record<string, any> = localNode === node ? ({} as any) : { ...localNode };
57
- for (const [key, value] of Object.entries(localNode)) {
58
- const next = normalizeAllOfSiblingObjectKeywords(value);
59
- if (next !== value) {
60
- if (!changed) {
61
- changed = true;
62
- Object.assign(out, localNode);
63
- }
64
- out[key] = next;
65
- } else if (changed) {
66
- out[key] = value;
67
- }
68
- }
69
-
70
- return changed ? out : node;
71
- }
@@ -1,83 +0,0 @@
1
- export function stripAnchors<T>(schema: T): T {
2
- const seen = new WeakMap<object, unknown>();
3
-
4
- function walk(node: unknown): unknown {
5
- if (!node || typeof node !== 'object') return node;
6
-
7
- const existing = seen.get(node as object);
8
- if (existing) return existing;
9
-
10
- if (Array.isArray(node)) {
11
- const out: unknown[] = [];
12
- seen.set(node, out);
13
- for (const item of node) out.push(walk(item));
14
- return out;
15
- }
16
-
17
- const out: Record<string, unknown> = {};
18
- seen.set(node as object, out);
19
-
20
- for (const [key, value] of Object.entries(node as Record<string, unknown>)) {
21
- if (key === '$anchor') continue;
22
- out[key] = walk(value);
23
- }
24
-
25
- return out;
26
- }
27
-
28
- return walk(schema) as T;
29
- }
30
-
31
- export function normalizeAnchorsToPointers<T>(input: T): T {
32
- if (!input || typeof input !== 'object') return input;
33
-
34
- const root = JSON.parse(JSON.stringify(input)) as { $defs?: Record<string, unknown> };
35
- const defs: Record<string, unknown> = root.$defs && typeof root.$defs === 'object' ? root.$defs : {};
36
- const anchorToDef: Record<string, string> = {};
37
-
38
- for (const [defName, defValue] of Object.entries(defs)) {
39
- if (!anchorToDef[defName]) {
40
- anchorToDef[defName] = defName;
41
- }
42
-
43
- if (!defValue || typeof defValue !== 'object') continue;
44
-
45
- const envelope = defValue as { projectionSchema?: { $anchor?: unknown }; $anchor?: unknown };
46
- const projectionSchema = envelope.projectionSchema;
47
- if (projectionSchema && typeof projectionSchema === 'object') {
48
- const anchor = projectionSchema.$anchor;
49
- if (typeof anchor === 'string' && !anchorToDef[anchor]) {
50
- anchorToDef[anchor] = defName;
51
- }
52
- } else {
53
- const anchor = envelope.$anchor;
54
- if (typeof anchor === 'string' && !anchorToDef[anchor]) {
55
- anchorToDef[anchor] = defName;
56
- }
57
- }
58
- }
59
-
60
- function walk(node: unknown): void {
61
- if (Array.isArray(node)) {
62
- for (const item of node) walk(item);
63
- return;
64
- }
65
- if (!node || typeof node !== 'object') return;
66
-
67
- const obj = node as { $ref?: unknown } & Record<string, unknown>;
68
- if (typeof obj.$ref === 'string' && obj.$ref.startsWith('#') && !obj.$ref.startsWith('#/')) {
69
- const anchor = obj.$ref.slice(1);
70
- const defName = anchorToDef[anchor];
71
- if (defName) {
72
- obj.$ref = `#/$defs/${defName}`;
73
- }
74
- }
75
-
76
- for (const value of Object.values(obj)) {
77
- walk(value);
78
- }
79
- }
80
-
81
- walk(root);
82
- return root as T;
83
- }
@@ -1,17 +0,0 @@
1
- import * as path from 'node:path';
2
-
3
- export function generateShimContent(jsonFile: string, variableName: string): string {
4
- return `import ${variableName} from './${jsonFile}' with { type: 'json' };\nexport default ${variableName};\n`;
5
- }
6
-
7
- export function getShimsForFiles(jsonFiles: string[], variableName: string): Record<string, string> {
8
- const shims: Record<string, string> = {};
9
-
10
- for (const jsonFile of jsonFiles) {
11
- const baseName = path.basename(jsonFile, '.json');
12
- const tsFile = `${baseName}.ts`;
13
- shims[tsFile] = generateShimContent(jsonFile, variableName);
14
- }
15
-
16
- return shims;
17
- }
@@ -1,114 +0,0 @@
1
- export function isObject(value: unknown): value is Record<string, unknown> {
2
- return value !== null && typeof value === 'object' && !Array.isArray(value);
3
- }
4
-
5
- export function deepClone<T>(value: T): T {
6
- if (Array.isArray(value)) return value.map((item) => deepClone(item)) as T;
7
- if (isObject(value)) {
8
- const out: Record<string, unknown> = {};
9
- for (const key of Object.keys(value)) out[key] = deepClone(value[key]);
10
- return out as T;
11
- }
12
- return value;
13
- }
14
-
15
- export function extractPointerDefName(ref: string): string | null {
16
- if (!ref || !ref.startsWith('#/')) return null;
17
- const parts = ref.slice(2).split('/');
18
- if (parts.length !== 2) return null;
19
- if (parts[0] !== '$defs') return null;
20
- const defName = parts[1];
21
- if (defName === undefined) return null;
22
- return defName.replace(/~1/g, '/').replace(/~0/g, '~');
23
- }
24
-
25
- export function collectLocalDefClosure(node: unknown, rootDefs: Record<string, unknown>): Set<string> {
26
- const needed = new Set<string>();
27
- const queue: string[] = [];
28
-
29
- function visit(value: unknown) {
30
- if (Array.isArray(value)) {
31
- for (const item of value) visit(item);
32
- return;
33
- }
34
- if (!isObject(value)) return;
35
-
36
- if (typeof value.$ref === 'string') {
37
- const name = extractPointerDefName(value.$ref);
38
- if (name && !needed.has(name)) {
39
- needed.add(name);
40
- queue.push(name);
41
- }
42
- }
43
-
44
- for (const nested of Object.values(value)) visit(nested);
45
- }
46
-
47
- visit(node);
48
-
49
- while (queue.length > 0) {
50
- const name = queue.shift();
51
- if (!name) continue;
52
- const def = rootDefs[name];
53
- if (def === undefined) continue;
54
- visit(def);
55
- }
56
-
57
- return needed;
58
- }
59
-
60
- export function extractStandaloneSchema(
61
- schemasDocument: { $defs?: Record<string, unknown> },
62
- name: string,
63
- ): { schema: unknown; warnings: string[] } {
64
- const rootDefs = schemasDocument.$defs;
65
- if (!rootDefs || typeof rootDefs !== 'object') {
66
- throw new Error('No $defs object found in schema document');
67
- }
68
-
69
- const target = rootDefs[name];
70
- if (target === undefined) {
71
- throw new Error(`Subschema named '${name}' not found under $defs in schema document`);
72
- }
73
-
74
- const needed = collectLocalDefClosure(target, rootDefs);
75
- const targetClone = deepClone(target);
76
- const defsOut: Record<string, unknown> = {};
77
- const warnings: string[] = [];
78
-
79
- for (const defName of needed) {
80
- if (defName === name) continue;
81
- const defSchema = rootDefs[defName];
82
- if (defSchema === undefined) {
83
- warnings.push(`Warning: referenced def '${defName}' missing in root $defs (skipped).`);
84
- continue;
85
- }
86
- defsOut[defName] = deepClone(defSchema);
87
- }
88
-
89
- const existingInner = isObject(targetClone) && isObject(targetClone.$defs)
90
- ? targetClone.$defs
91
- : {};
92
-
93
- if (isObject(targetClone)) {
94
- targetClone.$defs = { ...existingInner, ...defsOut };
95
- }
96
-
97
- return { schema: targetClone, warnings };
98
- }
99
-
100
- export function generateStandaloneSchemas(
101
- schemasDocument: { $defs?: Record<string, unknown> },
102
- names: string[],
103
- ): { standaloneSchemas: Record<string, unknown>; warnings: string[] } {
104
- const standaloneSchemas: Record<string, unknown> = {};
105
- const warnings: string[] = [];
106
-
107
- for (const name of names) {
108
- const result = extractStandaloneSchema(schemasDocument, name);
109
- standaloneSchemas[name] = result.schema;
110
- warnings.push(...result.warnings);
111
- }
112
-
113
- return { standaloneSchemas, warnings };
114
- }
@@ -1,28 +0,0 @@
1
- export function generateStandaloneTypeContent(name: string): string {
2
- const header = '// Auto-generated strict composite type. Do not edit.\n';
3
- const standaloneResourceTypeName = `${name}Resource`;
4
-
5
- const ts =
6
- `import type { ResourcePointer, ${name} as ProjectionSchema } from "../types.js";\n` +
7
- `export type ${standaloneResourceTypeName} = ResourcePointer & { projection: ProjectionSchema };\n`;
8
- return header + ts;
9
- }
10
-
11
- export function validateStandaloneSchemaForWarnings(schema: any): string[] {
12
- const warnings: string[] = [];
13
- if (schema?.$schema && schema.$schema !== 'https://json-schema.org/draft/2020-12/schema') {
14
- warnings.push(
15
- `Warning: schema $schema is '${String(schema.$schema)}', expected draft 2020-12. Proceeding anyway.`,
16
- );
17
- }
18
- return warnings;
19
- }
20
-
21
- export function generateStandaloneTypeArtifacts(name: string): { dtsFileName: string; jsFileName: string; dtsContent: string; jsContent: string } {
22
- return {
23
- dtsFileName: `${name}Resource.d.ts`,
24
- jsFileName: `${name}Resource.js`,
25
- dtsContent: generateStandaloneTypeContent(name),
26
- jsContent: 'export {}\n',
27
- };
28
- }
@@ -1,72 +0,0 @@
1
- import { jsonSchemaToZodExpressions, type JsonSchemaToZodWarning } from './zodCodegen.js';
2
-
3
- export type GeneratedZodModule = {
4
- fileName: string;
5
- content: string;
6
- warnings: JsonSchemaToZodWarning[];
7
- };
8
-
9
- function isValidIdentifier(name: string): boolean {
10
- return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
11
- }
12
-
13
- function toIdentifier(name: string): string {
14
- let out = name.replace(/[^A-Za-z0-9_]/g, '_');
15
- if (!/^[A-Za-z_]/.test(out)) out = `_${out}`;
16
- return out;
17
- }
18
-
19
- function emitHeader(name: string): string {
20
- return (
21
- `// Auto-generated from standalone schema '${name}'. Do not edit.\n` +
22
- `import { z } from 'zod/v4';\n\n`
23
- );
24
- }
25
-
26
- function emitModule(name: string, expressionsByName: Record<string, string>, warnings: JsonSchemaToZodWarning[]): string {
27
- const lines: string[] = [];
28
- lines.push(emitHeader(name));
29
-
30
- if (warnings.length > 0) {
31
- const warningsName = `${toIdentifier(name)}ZodGenerationWarnings`;
32
- lines.push(`export const ${warningsName} = ${JSON.stringify(warnings, null, 2)} as const;\n`);
33
- }
34
-
35
- const rootIdent = toIdentifier(name);
36
- const defNames = Object.keys(expressionsByName)
37
- .filter((schemaName) => schemaName !== name)
38
- .sort((a, b) => a.localeCompare(b));
39
-
40
- for (const schemaName of defNames) {
41
- const ident = toIdentifier(schemaName);
42
- if (!isValidIdentifier(ident)) {
43
- throw new Error(`Invalid generated identifier for schema '${schemaName}': '${ident}'`);
44
- }
45
- const expr = expressionsByName[schemaName];
46
- lines.push(`const ${ident}Schema: z.ZodTypeAny = z.lazy(() => ${expr});`);
47
- }
48
-
49
- lines.push('');
50
-
51
- const rootExpr = expressionsByName[name];
52
- lines.push(`export const ${rootIdent}Schema: z.ZodTypeAny = z.lazy(() => ${rootExpr});`);
53
-
54
- return lines.join('\n') + '\n';
55
- }
56
-
57
- export function generateStandaloneZodModule(name: string, standaloneSchema: unknown): GeneratedZodModule {
58
- const { expressionsByName, warnings } = jsonSchemaToZodExpressions(standaloneSchema, name);
59
- return {
60
- fileName: `${name}.ts`,
61
- content: emitModule(name, expressionsByName, warnings),
62
- warnings,
63
- };
64
- }
65
-
66
- export function generateStandaloneZodBarrel(names: string[]): string {
67
- const exports = names
68
- .slice()
69
- .sort((a, b) => a.localeCompare(b))
70
- .map((name) => `export { ${toIdentifier(name)}Schema } from './${name}.js';`);
71
- return `// Auto-generated barrel file. Do not edit.\n${exports.join('\n')}\n`;
72
- }
@@ -1,42 +0,0 @@
1
- type JsonObject = Record<string, unknown>;
2
-
3
- type TimestampedResource = JsonObject & {
4
- id: string;
5
- resourceTypeHandle: string;
6
- provenance: {
7
- resourceProvenanceKind: 'genesis';
8
- };
9
- timestamp: string;
10
- projection: unknown;
11
- };
12
-
13
- type GenerateTimestampedResourcesOptions = {
14
- resourceTypeHandle: string;
15
- getResourceId: (projection: unknown) => string;
16
- };
17
-
18
- const GENESIS_TIMESTAMP = '2025-11-30T00:00:00.000Z';
19
-
20
- export function generateTimestampedResources(
21
- declarations: unknown[],
22
- options: GenerateTimestampedResourcesOptions,
23
- ): TimestampedResource[] {
24
- return declarations.map((projection) => {
25
- return createTimestampedResource(projection, options);
26
- });
27
- }
28
-
29
- function createTimestampedResource(
30
- projection: unknown,
31
- options: GenerateTimestampedResourcesOptions,
32
- ): TimestampedResource {
33
- return {
34
- id: options.getResourceId(projection),
35
- resourceTypeHandle: options.resourceTypeHandle,
36
- provenance: {
37
- resourceProvenanceKind: 'genesis',
38
- },
39
- timestamp: GENESIS_TIMESTAMP,
40
- projection,
41
- };
42
- }