nestjs-apcore 0.1.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.
Files changed (90) hide show
  1. package/README.md +304 -0
  2. package/dist/bridge/binding-loader.d.ts +33 -0
  3. package/dist/bridge/binding-loader.d.ts.map +1 -0
  4. package/dist/bridge/binding-loader.js +118 -0
  5. package/dist/bridge/binding-loader.js.map +1 -0
  6. package/dist/bridge/index.d.ts +3 -0
  7. package/dist/bridge/index.d.ts.map +1 -0
  8. package/dist/bridge/index.js +2 -0
  9. package/dist/bridge/index.js.map +1 -0
  10. package/dist/constants.d.ts +6 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +8 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/core/apcore-executor.service.d.ts +42 -0
  15. package/dist/core/apcore-executor.service.d.ts.map +1 -0
  16. package/dist/core/apcore-executor.service.js +68 -0
  17. package/dist/core/apcore-executor.service.js.map +1 -0
  18. package/dist/core/apcore-registry.service.d.ts +52 -0
  19. package/dist/core/apcore-registry.service.d.ts.map +1 -0
  20. package/dist/core/apcore-registry.service.js +181 -0
  21. package/dist/core/apcore-registry.service.js.map +1 -0
  22. package/dist/core/apcore.module.d.ts +27 -0
  23. package/dist/core/apcore.module.d.ts.map +1 -0
  24. package/dist/core/apcore.module.js +105 -0
  25. package/dist/core/apcore.module.js.map +1 -0
  26. package/dist/decorators/ap-context.decorator.d.ts +2 -0
  27. package/dist/decorators/ap-context.decorator.d.ts.map +1 -0
  28. package/dist/decorators/ap-context.decorator.js +9 -0
  29. package/dist/decorators/ap-context.decorator.js.map +1 -0
  30. package/dist/decorators/ap-module.decorator.d.ts +3 -0
  31. package/dist/decorators/ap-module.decorator.d.ts.map +1 -0
  32. package/dist/decorators/ap-module.decorator.js +7 -0
  33. package/dist/decorators/ap-module.decorator.js.map +1 -0
  34. package/dist/decorators/ap-tool-scanner.service.d.ts +28 -0
  35. package/dist/decorators/ap-tool-scanner.service.d.ts.map +1 -0
  36. package/dist/decorators/ap-tool-scanner.service.js +166 -0
  37. package/dist/decorators/ap-tool-scanner.service.js.map +1 -0
  38. package/dist/decorators/ap-tool.decorator.d.ts +3 -0
  39. package/dist/decorators/ap-tool.decorator.d.ts.map +1 -0
  40. package/dist/decorators/ap-tool.decorator.js +7 -0
  41. package/dist/decorators/ap-tool.decorator.js.map +1 -0
  42. package/dist/decorators/index.d.ts +4 -0
  43. package/dist/decorators/index.d.ts.map +1 -0
  44. package/dist/decorators/index.js +4 -0
  45. package/dist/decorators/index.js.map +1 -0
  46. package/dist/index.d.ts +23 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +41 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/mcp/apcore-mcp.module.d.ts +28 -0
  51. package/dist/mcp/apcore-mcp.module.d.ts.map +1 -0
  52. package/dist/mcp/apcore-mcp.module.js +77 -0
  53. package/dist/mcp/apcore-mcp.module.js.map +1 -0
  54. package/dist/mcp/apcore-mcp.service.d.ts +53 -0
  55. package/dist/mcp/apcore-mcp.service.d.ts.map +1 -0
  56. package/dist/mcp/apcore-mcp.service.js +148 -0
  57. package/dist/mcp/apcore-mcp.service.js.map +1 -0
  58. package/dist/schema/adapters/dto.adapter.d.ts +44 -0
  59. package/dist/schema/adapters/dto.adapter.d.ts.map +1 -0
  60. package/dist/schema/adapters/dto.adapter.js +191 -0
  61. package/dist/schema/adapters/dto.adapter.js.map +1 -0
  62. package/dist/schema/adapters/json-schema.adapter.d.ts +30 -0
  63. package/dist/schema/adapters/json-schema.adapter.d.ts.map +1 -0
  64. package/dist/schema/adapters/json-schema.adapter.js +48 -0
  65. package/dist/schema/adapters/json-schema.adapter.js.map +1 -0
  66. package/dist/schema/adapters/schema-adapter.interface.d.ts +21 -0
  67. package/dist/schema/adapters/schema-adapter.interface.d.ts.map +1 -0
  68. package/dist/schema/adapters/schema-adapter.interface.js +2 -0
  69. package/dist/schema/adapters/schema-adapter.interface.js.map +1 -0
  70. package/dist/schema/adapters/typebox.adapter.d.ts +32 -0
  71. package/dist/schema/adapters/typebox.adapter.d.ts.map +1 -0
  72. package/dist/schema/adapters/typebox.adapter.js +46 -0
  73. package/dist/schema/adapters/typebox.adapter.js.map +1 -0
  74. package/dist/schema/adapters/zod.adapter.d.ts +16 -0
  75. package/dist/schema/adapters/zod.adapter.d.ts.map +1 -0
  76. package/dist/schema/adapters/zod.adapter.js +184 -0
  77. package/dist/schema/adapters/zod.adapter.js.map +1 -0
  78. package/dist/schema/schema-extractor.service.d.ts +58 -0
  79. package/dist/schema/schema-extractor.service.d.ts.map +1 -0
  80. package/dist/schema/schema-extractor.service.js +100 -0
  81. package/dist/schema/schema-extractor.service.js.map +1 -0
  82. package/dist/types.d.ts +106 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist/utils/id-generator.d.ts +41 -0
  87. package/dist/utils/id-generator.d.ts.map +1 -0
  88. package/dist/utils/id-generator.js +87 -0
  89. package/dist/utils/id-generator.js.map +1 -0
  90. package/package.json +100 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Dynamically imports class-validator's `getMetadataStorage`.
3
+ * Returns null if class-validator is not installed.
4
+ */
5
+ function getStorage() {
6
+ try {
7
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
8
+ const cv = require('class-validator');
9
+ return cv.getMetadataStorage();
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ // ---------------------------------------------------------------------------
16
+ // Adapter implementation
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * SchemaAdapter that converts class-validator decorated DTO classes into
20
+ * JSON Schema / TSchema objects.
21
+ *
22
+ * Detection relies on querying class-validator's global MetadataStorage for
23
+ * validation metadata associated with the target constructor.
24
+ */
25
+ export class DtoAdapter {
26
+ name = 'dto';
27
+ priority = 20;
28
+ /**
29
+ * Returns `true` when `input` is a class constructor that has at least one
30
+ * class-validator decorator registered in the global MetadataStorage.
31
+ */
32
+ detect(input) {
33
+ if (typeof input !== 'function')
34
+ return false;
35
+ const storage = getStorage();
36
+ if (!storage)
37
+ return false;
38
+ try {
39
+ const metadatas = storage.getTargetValidationMetadatas(input, '', false, false);
40
+ return Array.isArray(metadatas) && metadatas.length > 0;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ /**
47
+ * Converts a class-validator DTO into a TSchema-compatible JSON Schema
48
+ * object (type: 'object' with properties and required).
49
+ */
50
+ extract(input) {
51
+ return this.extractJsonSchema(input);
52
+ }
53
+ /**
54
+ * Reads class-validator metadata from the global MetadataStorage and builds
55
+ * a JSON Schema object.
56
+ *
57
+ * Mapping rules:
58
+ * - isString -> type: 'string'
59
+ * - isNumber -> type: 'number'
60
+ * - isInt -> type: 'integer'
61
+ * - isBoolean -> type: 'boolean'
62
+ * - isEmail -> type: 'string', format: 'email'
63
+ * - isUrl / isURL -> type: 'string', format: 'uri'
64
+ * - isEnum -> type: 'string', enum: Object.values(constraints[0])
65
+ * - isOptional -> not included in required[]
66
+ * - minLength -> minLength constraint
67
+ * - maxLength -> maxLength constraint
68
+ * - min -> minimum
69
+ * - max -> maximum
70
+ * - isArray -> type: 'array'
71
+ */
72
+ extractJsonSchema(input) {
73
+ const ctor = input;
74
+ const storage = getStorage();
75
+ if (!storage) {
76
+ throw new Error('class-validator is required to extract schemas from DTO classes. ' +
77
+ 'Install it: npm install class-validator');
78
+ }
79
+ const metadatas = storage.getTargetValidationMetadatas(ctor, '', false, false);
80
+ const grouped = storage.groupByPropertyName(metadatas);
81
+ const properties = {};
82
+ const required = [];
83
+ for (const [propertyName, validators] of Object.entries(grouped)) {
84
+ const propSchema = {};
85
+ let isOptional = false;
86
+ for (const meta of validators) {
87
+ const name = meta.name ?? '';
88
+ const constraints = meta.constraints ?? [];
89
+ switch (name) {
90
+ // Type validators
91
+ case 'isString':
92
+ propSchema.type = 'string';
93
+ break;
94
+ case 'isNumber':
95
+ propSchema.type = 'number';
96
+ break;
97
+ case 'isInt':
98
+ propSchema.type = 'integer';
99
+ break;
100
+ case 'isBoolean':
101
+ propSchema.type = 'boolean';
102
+ break;
103
+ // Format validators
104
+ case 'isEmail':
105
+ propSchema.type = 'string';
106
+ propSchema.format = 'email';
107
+ break;
108
+ case 'isUrl':
109
+ case 'isURL':
110
+ propSchema.type = 'string';
111
+ propSchema.format = 'uri';
112
+ break;
113
+ // Enum
114
+ case 'isEnum':
115
+ propSchema.type = 'string';
116
+ if (constraints[0] != null) {
117
+ propSchema.enum = Object.values(constraints[0]);
118
+ }
119
+ break;
120
+ // Optional
121
+ case 'isOptional':
122
+ case 'conditionalValidation':
123
+ isOptional = true;
124
+ break;
125
+ // String constraints
126
+ case 'minLength':
127
+ propSchema.minLength =
128
+ typeof constraints[0] === 'number' ? constraints[0] : undefined;
129
+ break;
130
+ case 'maxLength':
131
+ propSchema.maxLength =
132
+ typeof constraints[0] === 'number' ? constraints[0] : undefined;
133
+ break;
134
+ // Number constraints
135
+ case 'min':
136
+ propSchema.minimum =
137
+ typeof constraints[0] === 'number' ? constraints[0] : undefined;
138
+ break;
139
+ case 'max':
140
+ propSchema.maximum =
141
+ typeof constraints[0] === 'number' ? constraints[0] : undefined;
142
+ break;
143
+ // Array
144
+ case 'isArray':
145
+ propSchema.type = 'array';
146
+ break;
147
+ }
148
+ }
149
+ // Fall back to design:type if no type validator was found
150
+ if (!propSchema.type) {
151
+ const designType = Reflect.getMetadata('design:type', ctor.prototype, propertyName);
152
+ if (designType) {
153
+ propSchema.type = designTypeToJsonType(designType);
154
+ }
155
+ }
156
+ // Clean up undefined values from constraints that had no value
157
+ for (const key of Object.keys(propSchema)) {
158
+ if (propSchema[key] === undefined) {
159
+ delete propSchema[key];
160
+ }
161
+ }
162
+ properties[propertyName] = propSchema;
163
+ if (!isOptional) {
164
+ required.push(propertyName);
165
+ }
166
+ }
167
+ return {
168
+ type: 'object',
169
+ properties,
170
+ required,
171
+ };
172
+ }
173
+ }
174
+ /**
175
+ * Maps a design:type constructor to a JSON Schema type string.
176
+ */
177
+ function designTypeToJsonType(designType) {
178
+ switch (designType) {
179
+ case String:
180
+ return 'string';
181
+ case Number:
182
+ return 'number';
183
+ case Boolean:
184
+ return 'boolean';
185
+ case Array:
186
+ return 'array';
187
+ default:
188
+ return undefined;
189
+ }
190
+ }
191
+ //# sourceMappingURL=dto.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.adapter.js","sourceRoot":"","sources":["../../../src/schema/adapters/dto.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TSchema } from '@sinclair/typebox';
2
+ import type { SchemaAdapter } from './schema-adapter.interface.js';
3
+ /**
4
+ * Schema adapter for plain JSON Schema objects.
5
+ *
6
+ * JSON Schema is structurally compatible with TypeBox's `TSchema`, so
7
+ * conversion is a straightforward deep clone via JSON round-trip.
8
+ */
9
+ export declare class JsonSchemaAdapter implements SchemaAdapter {
10
+ readonly name: "json-schema";
11
+ readonly priority = 30;
12
+ /**
13
+ * Returns `true` when `input` is a non-null object that carries a `"type"`
14
+ * property **and** is not already a TypeBox schema (identified by the
15
+ * `Symbol.for('TypeBox.Kind')` symbol key).
16
+ */
17
+ detect(input: unknown): boolean;
18
+ /**
19
+ * Deep-clone the JSON Schema via `JSON.parse(JSON.stringify())`.
20
+ *
21
+ * Because JSON Schema is structurally compatible with TypeBox's `TSchema`,
22
+ * the clone can be returned directly.
23
+ */
24
+ extract(input: unknown): TSchema;
25
+ /**
26
+ * Deep-clone the JSON Schema via `JSON.parse(JSON.stringify())`.
27
+ */
28
+ extractJsonSchema(input: unknown): Record<string, unknown>;
29
+ }
30
+ //# sourceMappingURL=json-schema.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.adapter.d.ts","sourceRoot":"","sources":["../../../src/schema/adapters/json-schema.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IACvC,QAAQ,CAAC,QAAQ,MAAM;IAEvB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAoB/B;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIhC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG3D"}
@@ -0,0 +1,48 @@
1
+ /** Well-known symbol used by @sinclair/typebox to tag its schema objects. */
2
+ const TYPEBOX_KIND = Symbol.for('TypeBox.Kind');
3
+ /**
4
+ * Schema adapter for plain JSON Schema objects.
5
+ *
6
+ * JSON Schema is structurally compatible with TypeBox's `TSchema`, so
7
+ * conversion is a straightforward deep clone via JSON round-trip.
8
+ */
9
+ export class JsonSchemaAdapter {
10
+ name = 'json-schema';
11
+ priority = 30;
12
+ /**
13
+ * Returns `true` when `input` is a non-null object that carries a `"type"`
14
+ * property **and** is not already a TypeBox schema (identified by the
15
+ * `Symbol.for('TypeBox.Kind')` symbol key).
16
+ */
17
+ detect(input) {
18
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
19
+ return false;
20
+ }
21
+ const obj = input;
22
+ // Must have a "type" property to look like a JSON Schema
23
+ if (!('type' in obj)) {
24
+ return false;
25
+ }
26
+ // Reject TypeBox schemas — they are handled by the TypeBox adapter
27
+ if (TYPEBOX_KIND in obj) {
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ /**
33
+ * Deep-clone the JSON Schema via `JSON.parse(JSON.stringify())`.
34
+ *
35
+ * Because JSON Schema is structurally compatible with TypeBox's `TSchema`,
36
+ * the clone can be returned directly.
37
+ */
38
+ extract(input) {
39
+ return JSON.parse(JSON.stringify(input));
40
+ }
41
+ /**
42
+ * Deep-clone the JSON Schema via `JSON.parse(JSON.stringify())`.
43
+ */
44
+ extractJsonSchema(input) {
45
+ return JSON.parse(JSON.stringify(input));
46
+ }
47
+ }
48
+ //# sourceMappingURL=json-schema.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.adapter.js","sourceRoot":"","sources":["../../../src/schema/adapters/json-schema.adapter.ts"],"names":[],"mappings":"AAGA,6EAA6E;AAC7E,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,aAAsB,CAAC;IAC9B,QAAQ,GAAG,EAAE,CAAC;IAEvB;;;;OAIG;IACH,MAAM,CAAC,KAAc;QACnB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,KAAyC,CAAC;QAEtD,yDAAyD;QACzD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mEAAmE;QACnE,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAY,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAc;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAA4B,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { TSchema } from '@sinclair/typebox';
2
+ /**
3
+ * Contract for pluggable schema adapters.
4
+ *
5
+ * Each adapter knows how to detect a specific schema dialect (TypeBox, JSON
6
+ * Schema, Zod, class-validator DTO, etc.) and convert it into the canonical
7
+ * representations used by the framework.
8
+ */
9
+ export interface SchemaAdapter {
10
+ /** Human-readable adapter name, e.g. 'typebox' or 'json-schema'. */
11
+ readonly name: string;
12
+ /** Lower priority wins — adapters are tried in ascending priority order. */
13
+ readonly priority: number;
14
+ /** Return `true` when `input` is a schema this adapter can handle. */
15
+ detect(input: unknown): boolean;
16
+ /** Convert `input` into a TypeBox-compatible `TSchema` object. */
17
+ extract(input: unknown): TSchema;
18
+ /** Convert `input` into a plain JSON Schema object. */
19
+ extractJsonSchema(input: unknown): Record<string, unknown>;
20
+ }
21
+ //# sourceMappingURL=schema-adapter.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-adapter.interface.d.ts","sourceRoot":"","sources":["../../../src/schema/adapters/schema-adapter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAEhC,kEAAkE;IAClE,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAEjC,uDAAuD;IACvD,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-adapter.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-adapter.interface.js","sourceRoot":"","sources":["../../../src/schema/adapters/schema-adapter.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import type { TSchema } from '@sinclair/typebox';
2
+ import type { SchemaAdapter } from './schema-adapter.interface.js';
3
+ /**
4
+ * Schema adapter for `@sinclair/typebox` schemas.
5
+ *
6
+ * TypeBox schemas are already valid JSON Schema objects decorated with
7
+ * additional `Symbol` properties that the TypeBox runtime (e.g.
8
+ * `Value.Check()`) relies on for validation.
9
+ */
10
+ export declare class TypeBoxAdapter implements SchemaAdapter {
11
+ readonly name: "typebox";
12
+ readonly priority = 100;
13
+ /**
14
+ * Returns `true` when `input` is a TypeBox schema (carries `Symbol.for('TypeBox.Kind')`).
15
+ */
16
+ detect(input: unknown): boolean;
17
+ /**
18
+ * Returns the TypeBox schema as-is. TypeBox schemas are immutable value
19
+ * objects and must retain their `Symbol` keys for runtime validation
20
+ * (e.g. `Value.Check()`).
21
+ */
22
+ extract(input: unknown): TSchema;
23
+ /**
24
+ * Converts a TypeBox schema to a plain JSON Schema object.
25
+ *
26
+ * Because TypeBox IS JSON Schema (with extra symbol decorations),
27
+ * a JSON round-trip effectively strips the symbols and returns
28
+ * a standards-compliant JSON Schema object.
29
+ */
30
+ extractJsonSchema(input: unknown): Record<string, unknown>;
31
+ }
32
+ //# sourceMappingURL=typebox.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typebox.adapter.d.ts","sourceRoot":"","sources":["../../../src/schema/adapters/typebox.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AASnE;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,QAAQ,CAAC,QAAQ,OAAO;IAExB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAM/B;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIhC;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG3D"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Well-known TypeBox symbol used to tag every schema node.
3
+ * We look up this symbol to detect TypeBox schemas without importing
4
+ * the full library at detection time.
5
+ */
6
+ const KIND = Symbol.for('TypeBox.Kind');
7
+ /**
8
+ * Schema adapter for `@sinclair/typebox` schemas.
9
+ *
10
+ * TypeBox schemas are already valid JSON Schema objects decorated with
11
+ * additional `Symbol` properties that the TypeBox runtime (e.g.
12
+ * `Value.Check()`) relies on for validation.
13
+ */
14
+ export class TypeBoxAdapter {
15
+ name = 'typebox';
16
+ priority = 100;
17
+ /**
18
+ * Returns `true` when `input` is a TypeBox schema (carries `Symbol.for('TypeBox.Kind')`).
19
+ */
20
+ detect(input) {
21
+ if (input === null || input === undefined)
22
+ return false;
23
+ if (typeof input !== 'object')
24
+ return false;
25
+ return KIND in input;
26
+ }
27
+ /**
28
+ * Returns the TypeBox schema as-is. TypeBox schemas are immutable value
29
+ * objects and must retain their `Symbol` keys for runtime validation
30
+ * (e.g. `Value.Check()`).
31
+ */
32
+ extract(input) {
33
+ return input;
34
+ }
35
+ /**
36
+ * Converts a TypeBox schema to a plain JSON Schema object.
37
+ *
38
+ * Because TypeBox IS JSON Schema (with extra symbol decorations),
39
+ * a JSON round-trip effectively strips the symbols and returns
40
+ * a standards-compliant JSON Schema object.
41
+ */
42
+ extractJsonSchema(input) {
43
+ return JSON.parse(JSON.stringify(input));
44
+ }
45
+ }
46
+ //# sourceMappingURL=typebox.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typebox.adapter.js","sourceRoot":"","sources":["../../../src/schema/adapters/typebox.adapter.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,SAAkB,CAAC;IAC1B,QAAQ,GAAG,GAAG,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,KAAc;QACnB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,IAAI,IAAK,KAAgB,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAc;QACpB,OAAO,KAAgB,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAc;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAA4B,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { TSchema } from '@sinclair/typebox';
2
+ import type { SchemaAdapter } from './schema-adapter.interface.js';
3
+ /**
4
+ * SchemaAdapter for Zod schemas.
5
+ *
6
+ * Converts Zod schema definitions to JSON Schema / TSchema representations
7
+ * used internally by apcore.
8
+ */
9
+ export declare class ZodAdapter implements SchemaAdapter {
10
+ readonly name: "zod";
11
+ readonly priority = 50;
12
+ detect(input: unknown): boolean;
13
+ extract(input: unknown): TSchema;
14
+ extractJsonSchema(input: unknown): Record<string, unknown>;
15
+ }
16
+ //# sourceMappingURL=zod.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.adapter.d.ts","sourceRoot":"","sources":["../../../src/schema/adapters/zod.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAmNnE;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI/B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAKhC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAM3D"}
@@ -0,0 +1,184 @@
1
+ function isZodLike(input) {
2
+ if (input === null || input === undefined)
3
+ return false;
4
+ if (typeof input !== 'object')
5
+ return false;
6
+ const obj = input;
7
+ return ('_def' in obj &&
8
+ obj['_def'] !== null &&
9
+ typeof obj['_def'] === 'object' &&
10
+ 'safeParse' in obj &&
11
+ typeof obj['safeParse'] === 'function');
12
+ }
13
+ // ---------------------------------------------------------------------------
14
+ // Recursive Zod → JSON Schema conversion
15
+ // ---------------------------------------------------------------------------
16
+ function convertZodToJsonSchema(zodSchema) {
17
+ const def = zodSchema._def;
18
+ const typeName = def.typeName ?? '';
19
+ let result = {};
20
+ switch (typeName) {
21
+ case 'ZodString': {
22
+ result = { type: 'string' };
23
+ break;
24
+ }
25
+ case 'ZodNumber': {
26
+ result = convertZodNumber(def);
27
+ break;
28
+ }
29
+ case 'ZodBoolean': {
30
+ result = { type: 'boolean' };
31
+ break;
32
+ }
33
+ case 'ZodObject': {
34
+ result = convertZodObject(def);
35
+ break;
36
+ }
37
+ case 'ZodArray': {
38
+ const itemSchema = def.type;
39
+ result = { type: 'array', items: convertZodToJsonSchema(itemSchema) };
40
+ break;
41
+ }
42
+ case 'ZodEnum': {
43
+ const values = def.values;
44
+ result = { type: 'string', enum: [...values] };
45
+ break;
46
+ }
47
+ case 'ZodNativeEnum': {
48
+ const enumObj = def.values;
49
+ // Filter out reverse-mapped numeric keys (TypeScript numeric enums
50
+ // produce { 0: 'Red', Red: 0 } — we want only the string-keyed values).
51
+ const vals = Object.values(enumObj).filter((v) => {
52
+ if (typeof v === 'number') {
53
+ // Keep the value if its reverse-lookup key does not map back
54
+ return !(String(v) in enumObj);
55
+ }
56
+ return true;
57
+ });
58
+ result = { type: 'string', enum: vals };
59
+ break;
60
+ }
61
+ case 'ZodOptional': {
62
+ const inner = def.innerType;
63
+ result = convertZodToJsonSchema(inner);
64
+ break;
65
+ }
66
+ case 'ZodNullable': {
67
+ const inner = def.innerType;
68
+ result = { ...convertZodToJsonSchema(inner), nullable: true };
69
+ break;
70
+ }
71
+ case 'ZodDefault': {
72
+ const inner = def.innerType;
73
+ const defaultValue = def.defaultValue();
74
+ result = { ...convertZodToJsonSchema(inner), default: defaultValue };
75
+ break;
76
+ }
77
+ case 'ZodLiteral': {
78
+ const value = def.value;
79
+ result = { type: typeof value, const: value };
80
+ break;
81
+ }
82
+ case 'ZodUnion': {
83
+ const options = def.options;
84
+ result = { anyOf: options.map((opt) => convertZodToJsonSchema(opt)) };
85
+ break;
86
+ }
87
+ case 'ZodRecord': {
88
+ const valueType = def.valueType;
89
+ result = {
90
+ type: 'object',
91
+ additionalProperties: convertZodToJsonSchema(valueType),
92
+ };
93
+ break;
94
+ }
95
+ case 'ZodEffects': {
96
+ const inner = def.schema;
97
+ result = convertZodToJsonSchema(inner);
98
+ break;
99
+ }
100
+ default: {
101
+ // Fallback — return an empty schema
102
+ result = {};
103
+ break;
104
+ }
105
+ }
106
+ // Attach description if present on the def
107
+ if (def.description) {
108
+ result['description'] = def.description;
109
+ }
110
+ return result;
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Sub-converters
114
+ // ---------------------------------------------------------------------------
115
+ function convertZodNumber(def) {
116
+ const checks = def.checks ?? [];
117
+ let type = 'number';
118
+ const result = {};
119
+ for (const check of checks) {
120
+ switch (check.kind) {
121
+ case 'int':
122
+ type = 'integer';
123
+ break;
124
+ case 'min':
125
+ result['minimum'] = check.value;
126
+ break;
127
+ case 'max':
128
+ result['maximum'] = check.value;
129
+ break;
130
+ }
131
+ }
132
+ result['type'] = type;
133
+ return result;
134
+ }
135
+ function convertZodObject(def) {
136
+ const shape = def.shape?.();
137
+ if (!shape) {
138
+ return { type: 'object' };
139
+ }
140
+ const properties = {};
141
+ const required = [];
142
+ for (const [key, fieldSchema] of Object.entries(shape)) {
143
+ properties[key] = convertZodToJsonSchema(fieldSchema);
144
+ const fieldTypeName = fieldSchema._def.typeName;
145
+ if (fieldTypeName !== 'ZodOptional' && fieldTypeName !== 'ZodDefault') {
146
+ required.push(key);
147
+ }
148
+ }
149
+ const result = {
150
+ type: 'object',
151
+ properties,
152
+ };
153
+ if (required.length > 0) {
154
+ result['required'] = required;
155
+ }
156
+ return result;
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // ZodAdapter
160
+ // ---------------------------------------------------------------------------
161
+ /**
162
+ * SchemaAdapter for Zod schemas.
163
+ *
164
+ * Converts Zod schema definitions to JSON Schema / TSchema representations
165
+ * used internally by apcore.
166
+ */
167
+ export class ZodAdapter {
168
+ name = 'zod';
169
+ priority = 50;
170
+ detect(input) {
171
+ return isZodLike(input);
172
+ }
173
+ extract(input) {
174
+ const jsonSchema = this.extractJsonSchema(input);
175
+ return jsonSchema;
176
+ }
177
+ extractJsonSchema(input) {
178
+ if (!isZodLike(input)) {
179
+ throw new Error('ZodAdapter.extractJsonSchema: input is not a Zod schema');
180
+ }
181
+ return convertZodToJsonSchema(input);
182
+ }
183
+ }
184
+ //# sourceMappingURL=zod.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.adapter.js","sourceRoot":"","sources":["../../../src/schema/adapters/zod.adapter.ts"],"names":[],"mappings":"AAqBA,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;QACpB,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ;QAC/B,WAAW,IAAI,GAAG;QAClB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,UAAU,CACvC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,SAAS,sBAAsB,CAAC,SAAkB;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAW,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM,GAA4B,EAAE,CAAC;IAEzC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC5B,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM;QACR,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAe,CAAC;YACvC,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,MAAM;QACR,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,MAAkB,CAAC;YACtC,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;YAC/C,MAAM;QACR,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAyC,CAAC;YAC9D,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,6DAA6D;oBAC7D,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxC,MAAM;QACR,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAoB,CAAC;YACvC,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM;QACR,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAoB,CAAC;YACvC,MAAM,GAAG,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9D,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAoB,CAAC;YACvC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,GAAG,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;YACrE,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAkC,CAAC;YACrD,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC9C,MAAM;QACR,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAoB,CAAC;YACzC,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAoB,CAAC;YAC3C,MAAM,GAAG;gBACP,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,sBAAsB,CAAC,SAAS,CAAC;aACxD,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAiB,CAAC;YACpC,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM;QACR,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,oCAAoC;YACpC,MAAM,GAAG,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAA4C,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IACzE,IAAI,IAAI,GAAW,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,KAAK;gBACR,IAAI,GAAG,SAAS,CAAC;gBACjB,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAChC,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAChC,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,EAAyC,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAA4C,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,UAAU,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChD,IAAI,aAAa,KAAK,aAAa,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,QAAQ;QACd,UAAU;KACX,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACZ,IAAI,GAAG,KAAc,CAAC;IACtB,QAAQ,GAAG,EAAE,CAAC;IAEvB,MAAM,CAAC,KAAc;QACnB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,UAAgC,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;CACF"}