apcore-toolkit 0.4.0 → 0.5.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 (109) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +185 -0
  3. package/README.md +91 -39
  4. package/dist/ai-enhancer.d.ts +18 -1
  5. package/dist/ai-enhancer.d.ts.map +1 -1
  6. package/dist/ai-enhancer.js +145 -72
  7. package/dist/ai-enhancer.js.map +1 -1
  8. package/dist/binding-loader.d.ts +55 -0
  9. package/dist/binding-loader.d.ts.map +1 -0
  10. package/dist/binding-loader.js +175 -0
  11. package/dist/binding-loader.js.map +1 -0
  12. package/dist/binding-parser.d.ts +80 -0
  13. package/dist/binding-parser.d.ts.map +1 -0
  14. package/dist/binding-parser.js +257 -0
  15. package/dist/binding-parser.js.map +1 -0
  16. package/dist/browser/index.d.ts +17 -0
  17. package/dist/browser/index.d.ts.map +1 -0
  18. package/dist/browser/index.js +46 -0
  19. package/dist/browser/index.js.map +1 -0
  20. package/dist/{display-resolver.d.ts → display/resolver.d.ts} +14 -2
  21. package/dist/display/resolver.d.ts.map +1 -0
  22. package/dist/{display-resolver.js → display/resolver.js} +79 -25
  23. package/dist/display/resolver.js.map +1 -0
  24. package/dist/formatting/markdown.d.ts.map +1 -1
  25. package/dist/formatting/markdown.js +25 -22
  26. package/dist/formatting/markdown.js.map +1 -1
  27. package/dist/http-verb-map.d.ts +79 -0
  28. package/dist/http-verb-map.d.ts.map +1 -0
  29. package/dist/http-verb-map.js +179 -0
  30. package/dist/http-verb-map.js.map +1 -0
  31. package/dist/index.d.ts +8 -5
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +12 -4
  34. package/dist/index.js.map +1 -1
  35. package/dist/openapi.d.ts.map +1 -1
  36. package/dist/openapi.js +37 -10
  37. package/dist/openapi.js.map +1 -1
  38. package/dist/output/base-writer.d.ts +17 -0
  39. package/dist/output/base-writer.d.ts.map +1 -0
  40. package/dist/output/base-writer.js +34 -0
  41. package/dist/output/base-writer.js.map +1 -0
  42. package/dist/output/errors.d.ts +7 -2
  43. package/dist/output/errors.d.ts.map +1 -1
  44. package/dist/output/errors.js +8 -3
  45. package/dist/output/errors.js.map +1 -1
  46. package/dist/output/factory.d.ts +13 -1
  47. package/dist/output/factory.d.ts.map +1 -1
  48. package/dist/output/factory.js +21 -2
  49. package/dist/output/factory.js.map +1 -1
  50. package/dist/output/http-proxy-writer.d.ts +82 -0
  51. package/dist/output/http-proxy-writer.d.ts.map +1 -0
  52. package/dist/output/http-proxy-writer.js +222 -0
  53. package/dist/output/http-proxy-writer.js.map +1 -0
  54. package/dist/output/index.d.ts +1 -1
  55. package/dist/output/index.d.ts.map +1 -1
  56. package/dist/output/index.js +1 -1
  57. package/dist/output/index.js.map +1 -1
  58. package/dist/output/registry-writer.d.ts +23 -5
  59. package/dist/output/registry-writer.d.ts.map +1 -1
  60. package/dist/output/registry-writer.js +56 -16
  61. package/dist/output/registry-writer.js.map +1 -1
  62. package/dist/output/types.d.ts +1 -0
  63. package/dist/output/types.d.ts.map +1 -1
  64. package/dist/output/types.js.map +1 -1
  65. package/dist/output/typescript-writer.d.ts +14 -6
  66. package/dist/output/typescript-writer.d.ts.map +1 -1
  67. package/dist/output/typescript-writer.js +100 -32
  68. package/dist/output/typescript-writer.js.map +1 -1
  69. package/dist/output/verifiers.d.ts +1 -9
  70. package/dist/output/verifiers.d.ts.map +1 -1
  71. package/dist/output/verifiers.js +92 -42
  72. package/dist/output/verifiers.js.map +1 -1
  73. package/dist/output/verify-core.d.ts +20 -0
  74. package/dist/output/verify-core.d.ts.map +1 -0
  75. package/dist/output/verify-core.js +59 -0
  76. package/dist/output/verify-core.js.map +1 -0
  77. package/dist/output/yaml-writer.d.ts +18 -6
  78. package/dist/output/yaml-writer.d.ts.map +1 -1
  79. package/dist/output/yaml-writer.js +99 -42
  80. package/dist/output/yaml-writer.js.map +1 -1
  81. package/dist/resolve-target.d.ts.map +1 -1
  82. package/dist/resolve-target.js +34 -5
  83. package/dist/resolve-target.js.map +1 -1
  84. package/dist/safe-keys.d.ts +2 -0
  85. package/dist/safe-keys.d.ts.map +1 -0
  86. package/dist/safe-keys.js +19 -0
  87. package/dist/safe-keys.js.map +1 -0
  88. package/dist/scanner.d.ts +22 -0
  89. package/dist/scanner.d.ts.map +1 -1
  90. package/dist/scanner.js +40 -16
  91. package/dist/scanner.js.map +1 -1
  92. package/dist/schema-utils.d.ts.map +1 -1
  93. package/dist/schema-utils.js +13 -2
  94. package/dist/schema-utils.js.map +1 -1
  95. package/dist/serializers.d.ts +8 -1
  96. package/dist/serializers.d.ts.map +1 -1
  97. package/dist/serializers.js +15 -6
  98. package/dist/serializers.js.map +1 -1
  99. package/dist/types.d.ts +16 -0
  100. package/dist/types.d.ts.map +1 -1
  101. package/dist/types.js +3 -0
  102. package/dist/types.js.map +1 -1
  103. package/package.json +10 -2
  104. package/dist/display-resolver.d.ts.map +0 -1
  105. package/dist/display-resolver.js.map +0 -1
  106. package/dist/flatten-params.d.ts +0 -16
  107. package/dist/flatten-params.d.ts.map +0 -1
  108. package/dist/flatten-params.js +0 -18
  109. package/dist/flatten-params.js.map +0 -1
@@ -10,6 +10,41 @@
10
10
  */
11
11
  import { DEFAULT_ANNOTATIONS } from 'apcore-js';
12
12
  import { cloneModule } from './types.js';
13
+ function camelToSnake(camel) {
14
+ return camel.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`);
15
+ }
16
+ function buildAnnotationFieldSpecs() {
17
+ const specs = new Map();
18
+ for (const [camelKey, defaultValue] of Object.entries(DEFAULT_ANNOTATIONS)) {
19
+ if (camelKey === 'extra')
20
+ continue;
21
+ let validate;
22
+ if (camelKey === 'cacheKeyFields') {
23
+ // Default is null but the field type is `string[] | null`.
24
+ validate = (v) => v === null || (Array.isArray(v) && v.every((x) => typeof x === 'string'));
25
+ }
26
+ else if (typeof defaultValue === 'boolean') {
27
+ validate = (v) => typeof v === 'boolean';
28
+ }
29
+ else if (typeof defaultValue === 'number') {
30
+ // Reject booleans (not subclass of number in TS, but be defensive).
31
+ validate = (v) => typeof v === 'number' && Number.isFinite(v);
32
+ }
33
+ else if (typeof defaultValue === 'string') {
34
+ validate = (v) => typeof v === 'string';
35
+ }
36
+ else {
37
+ // Unknown shape — skip rather than risk garbage data.
38
+ continue;
39
+ }
40
+ specs.set(camelToSnake(camelKey), {
41
+ camelKey: camelKey,
42
+ validate,
43
+ });
44
+ }
45
+ return specs;
46
+ }
47
+ const ANNOTATION_FIELD_SPECS = buildAnnotationFieldSpecs();
13
48
  const _DEFAULT_ENDPOINT = 'http://localhost:11434/v1';
14
49
  const _DEFAULT_MODEL = 'qwen:0.6b';
15
50
  const _DEFAULT_THRESHOLD = 0.7;
@@ -33,6 +68,22 @@ function parseIntEnv(name, fallback) {
33
68
  throw new Error(`${name} must be a valid integer, got "${raw}"`);
34
69
  return val;
35
70
  }
71
+ /**
72
+ * AI-driven metadata enhancement using a local SLM (Small Language Model).
73
+ *
74
+ * Calls an OpenAI-compatible local API (Ollama, vLLM, LM Studio, etc.) to fill
75
+ * metadata gaps that static analysis cannot resolve: missing descriptions,
76
+ * behavioral annotation inference, and input schema generation for untyped
77
+ * functions.
78
+ *
79
+ * Enhancement is gated behind the `APCORE_AI_ENABLED` environment variable.
80
+ * All AI-generated fields are tagged with `x-generated-by: slm` in the module
81
+ * metadata for auditability.
82
+ *
83
+ * @example
84
+ * const enhancer = new AIEnhancer({ endpoint: 'http://localhost:11434/v1', model: 'qwen:0.6b' });
85
+ * const enhanced = await enhancer.enhance(modules);
86
+ */
36
87
  export class AIEnhancer {
37
88
  endpoint;
38
89
  model;
@@ -45,6 +96,17 @@ export class AIEnhancer {
45
96
  this.threshold = options?.threshold ?? parseFloatEnv('APCORE_AI_THRESHOLD', _DEFAULT_THRESHOLD);
46
97
  this.batchSize = options?.batchSize ?? parseIntEnv('APCORE_AI_BATCH_SIZE', _DEFAULT_BATCH_SIZE);
47
98
  this.timeout = options?.timeout ?? parseIntEnv('APCORE_AI_TIMEOUT', _DEFAULT_TIMEOUT);
99
+ try {
100
+ const parsed = new URL(this.endpoint);
101
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
102
+ throw new Error(`AIEnhancer endpoint must use http: or https: protocol, got "${parsed.protocol}"`);
103
+ }
104
+ }
105
+ catch (err) {
106
+ if (err instanceof Error && err.message.startsWith('AIEnhancer endpoint'))
107
+ throw err;
108
+ throw new Error(`AIEnhancer endpoint is not a valid URL: ${this.endpoint}`, { cause: err });
109
+ }
48
110
  if (this.threshold < 0 || this.threshold > 1) {
49
111
  throw new Error('APCORE_AI_THRESHOLD must be a number between 0.0 and 1.0');
50
112
  }
@@ -60,6 +122,8 @@ export class AIEnhancer {
60
122
  return val === 'true' || val === '1' || val === 'yes';
61
123
  }
62
124
  async enhance(modules) {
125
+ if (!AIEnhancer.isEnabled())
126
+ return modules;
63
127
  const results = [...modules];
64
128
  const pending = [];
65
129
  for (let i = 0; i < modules.length; i++) {
@@ -70,18 +134,35 @@ export class AIEnhancer {
70
134
  }
71
135
  for (let batchStart = 0; batchStart < pending.length; batchStart += this.batchSize) {
72
136
  const batch = pending.slice(batchStart, batchStart + this.batchSize);
73
- for (const { idx, module, gaps } of batch) {
74
- try {
75
- const enhanced = await this._enhanceModule(module, gaps);
76
- results[idx] = enhanced;
137
+ const settled = await Promise.allSettled(batch.map(({ module, gaps }) => this._enhanceModule(module, gaps)));
138
+ for (let i = 0; i < batch.length; i++) {
139
+ const { idx, module } = batch[i];
140
+ const outcome = settled[i];
141
+ if (outcome.status === 'fulfilled') {
142
+ results[idx] = outcome.value;
77
143
  }
78
- catch {
79
- // AI enhancement failed keep original
144
+ else {
145
+ console.warn('AIEnhancer: enhancement failed for %s:', module.moduleId, outcome.reason);
80
146
  }
81
147
  }
82
148
  }
83
149
  return results;
84
150
  }
151
+ _annotationsAreDefault(annotations) {
152
+ if (annotations == null)
153
+ return true;
154
+ const ann = annotations;
155
+ const def = DEFAULT_ANNOTATIONS;
156
+ return Object.keys(def).every((k) => {
157
+ // `extra` is an object type whose default is Object.freeze({}). Reference
158
+ // equality always fails after cloning, producing spurious SLM calls.
159
+ // The SLM never populates `extra` (excluded from ANNOTATION_FIELD_SPECS),
160
+ // so we skip it here to avoid false "not at default" readings.
161
+ if (k === 'extra')
162
+ return true;
163
+ return ann[k] === def[k];
164
+ });
165
+ }
85
166
  _identifyGaps(module) {
86
167
  const gaps = [];
87
168
  if (!module.description || module.description === module.moduleId) {
@@ -90,10 +171,13 @@ export class AIEnhancer {
90
171
  if (!module.documentation) {
91
172
  gaps.push('documentation');
92
173
  }
93
- if (module.annotations == null || JSON.stringify(module.annotations) === JSON.stringify(DEFAULT_ANNOTATIONS)) {
174
+ if (this._annotationsAreDefault(module.annotations)) {
94
175
  gaps.push('annotations');
95
176
  }
96
- const props = module.inputSchema.properties;
177
+ const schema = module.inputSchema;
178
+ const props = typeof schema === 'object' && schema !== null && !Array.isArray(schema)
179
+ ? schema.properties
180
+ : undefined;
97
181
  if (!props || (typeof props === 'object' && Object.keys(props).length === 0)) {
98
182
  gaps.push('input_schema');
99
183
  }
@@ -104,7 +188,16 @@ export class AIEnhancer {
104
188
  const response = await this._callLLM(prompt);
105
189
  const parsed = AIEnhancer._parseResponse(response);
106
190
  const updates = {};
107
- const parsedConf = (parsed.confidence ?? {});
191
+ // Build parsedConf from a null-prototype object so attacker-controlled
192
+ // keys like '__proto__' cannot affect prototype lookups.
193
+ const rawConf = parsed.confidence;
194
+ const parsedConf = Object.create(null);
195
+ if (rawConf !== null && typeof rawConf === 'object' && !Array.isArray(rawConf)) {
196
+ for (const [k, v] of Object.entries(rawConf)) {
197
+ if (typeof v === 'number' && Number.isFinite(v))
198
+ parsedConf[k] = v;
199
+ }
200
+ }
108
201
  const confidence = {};
109
202
  const warnings = [...module.warnings];
110
203
  if (gaps.includes('description') && parsed.description) {
@@ -128,61 +221,22 @@ export class AIEnhancer {
128
221
  }
129
222
  }
130
223
  if (gaps.includes('annotations') && parsed.annotations && typeof parsed.annotations === 'object') {
224
+ // SLM produces wire-format snake_case keys; ANNOTATION_FIELD_SPECS maps
225
+ // each snake key to the camelCase ModuleAnnotations property and a type
226
+ // validator. Confidence-gated values are merged into the camelCase base
227
+ // so the resulting annotations object is a valid ModuleAnnotations.
131
228
  const annData = parsed.annotations;
132
229
  const accepted = {};
133
- const boolFields = [
134
- 'readonly', 'destructive', 'idempotent', 'requires_approval',
135
- 'open_world', 'streaming', 'cacheable', 'paginated',
136
- ];
137
- for (const field of boolFields) {
138
- if (typeof annData[field] === 'boolean') {
139
- const fieldConf = parsedConf[`annotations.${field}`] ?? parsedConf[field] ?? 0;
140
- confidence[`annotations.${field}`] = fieldConf;
141
- if (fieldConf >= this.threshold) {
142
- accepted[field] = annData[field];
143
- }
144
- else {
145
- warnings.push(`Low confidence (${fieldConf.toFixed(2)}) for annotations.${field} — skipped. Review manually.`);
146
- }
147
- }
148
- }
149
- // Handle integer annotation fields
150
- const intFields = ['cache_ttl'];
151
- for (const field of intFields) {
152
- if (typeof annData[field] === 'number') {
153
- const fieldConf = parsedConf[`annotations.${field}`] ?? parsedConf[field] ?? 0;
154
- confidence[`annotations.${field}`] = fieldConf;
155
- if (fieldConf >= this.threshold) {
156
- accepted[field] = annData[field];
157
- }
158
- else {
159
- warnings.push(`Low confidence (${fieldConf.toFixed(2)}) for annotations.${field} — skipped. Review manually.`);
160
- }
161
- }
162
- }
163
- // Handle string annotation fields
164
- const strFields = ['pagination_style'];
165
- for (const field of strFields) {
166
- if (typeof annData[field] === 'string') {
167
- const fieldConf = parsedConf[`annotations.${field}`] ?? parsedConf[field] ?? 0;
168
- confidence[`annotations.${field}`] = fieldConf;
169
- if (fieldConf >= this.threshold) {
170
- accepted[field] = annData[field];
171
- }
172
- else {
173
- warnings.push(`Low confidence (${fieldConf.toFixed(2)}) for annotations.${field} — skipped. Review manually.`);
174
- }
175
- }
176
- }
177
- // Handle list annotation fields
178
- if (Array.isArray(annData['cache_key_fields'])) {
179
- const fieldConf = parsedConf['annotations.cache_key_fields'] ?? parsedConf['cache_key_fields'] ?? 0;
180
- confidence['annotations.cache_key_fields'] = fieldConf;
230
+ for (const [snakeKey, spec] of ANNOTATION_FIELD_SPECS) {
231
+ if (!Object.hasOwn(annData, snakeKey) || !spec.validate(annData[snakeKey]))
232
+ continue;
233
+ const fieldConf = parsedConf[`annotations.${snakeKey}`] ?? parsedConf[snakeKey] ?? 0;
234
+ confidence[`annotations.${snakeKey}`] = fieldConf;
181
235
  if (fieldConf >= this.threshold) {
182
- accepted['cache_key_fields'] = annData['cache_key_fields'];
236
+ accepted[spec.camelKey] = annData[snakeKey];
183
237
  }
184
238
  else {
185
- warnings.push(`Low confidence (${fieldConf.toFixed(2)}) for annotations.cache_key_fields — skipped. Review manually.`);
239
+ warnings.push(`Low confidence (${fieldConf.toFixed(2)}) for annotations.${snakeKey} — skipped. Review manually.`);
186
240
  }
187
241
  }
188
242
  if (Object.keys(accepted).length > 0) {
@@ -193,8 +247,13 @@ export class AIEnhancer {
193
247
  if (gaps.includes('input_schema') && parsed.input_schema) {
194
248
  const conf = parsedConf.input_schema ?? 0;
195
249
  confidence.input_schema = conf;
196
- if (conf >= this.threshold) {
197
- updates.inputSchema = parsed.input_schema;
250
+ const s = parsed.input_schema;
251
+ const isValidShape = typeof s === 'object' && !Array.isArray(s) && s !== null && 'type' in s;
252
+ if (!isValidShape) {
253
+ warnings.push('SLM returned malformed input_schema (missing "type") — skipped. Review manually.');
254
+ }
255
+ else if (conf >= this.threshold) {
256
+ updates.inputSchema = s;
198
257
  }
199
258
  else {
200
259
  warnings.push(`Low confidence (${conf.toFixed(2)}) for input_schema — skipped. Review manually.`);
@@ -248,9 +307,16 @@ export class AIEnhancer {
248
307
  if (gaps.includes('input_schema')) {
249
308
  parts.push(' "input_schema": <JSON Schema object for function parameters>,');
250
309
  }
251
- parts.push(' "confidence": {');
252
- parts.push(' "description": 0.0, "documentation": 0.0');
253
- parts.push(' }');
310
+ // Build confidence keys dynamically from all annotation fields so the
311
+ // prompt stays in sync as DEFAULT_ANNOTATIONS evolves upstream.
312
+ const confidenceKeys = Object.fromEntries(Object.keys(DEFAULT_ANNOTATIONS)
313
+ .filter(k => k !== 'extra')
314
+ .map(k => [camelToSnake(k), 0.0]));
315
+ const confidenceKeysJson = JSON.stringify(confidenceKeys, null, 4)
316
+ .split('\n')
317
+ .map((l, i) => i === 0 ? ` "confidence": ${l}` : ` ${l}`)
318
+ .join('\n');
319
+ parts.push(confidenceKeysJson);
254
320
  parts.push('}');
255
321
  parts.push('');
256
322
  parts.push('Respond with ONLY valid JSON, no markdown fences or explanation.');
@@ -284,7 +350,7 @@ export class AIEnhancer {
284
350
  }
285
351
  catch (err) {
286
352
  if (err instanceof DOMException && err.name === 'AbortError') {
287
- throw new Error(`SLM request timed out after ${this.timeout}s`);
353
+ throw new Error(`SLM request timed out after ${this.timeout}s`, { cause: err });
288
354
  }
289
355
  throw err;
290
356
  }
@@ -294,19 +360,26 @@ export class AIEnhancer {
294
360
  }
295
361
  static _parseResponse(response) {
296
362
  let text = response.trim();
363
+ // Strip markdown code fence: ```[lang]\n ... \n``` (closing fence optional)
297
364
  if (text.startsWith('```')) {
298
- const lines = text.split('\n');
299
- if (lines[0].startsWith('```'))
300
- lines.shift();
301
- if (lines.length > 0 && lines[lines.length - 1].trim() === '```')
302
- lines.pop();
303
- text = lines.join('\n');
365
+ const firstNl = text.indexOf('\n');
366
+ if (firstNl === -1) {
367
+ text = '';
368
+ }
369
+ else {
370
+ text = text.slice(firstNl + 1);
371
+ if (text.endsWith('```')) {
372
+ const lastNl = text.lastIndexOf('\n');
373
+ text = lastNl === -1 ? '' : text.slice(0, lastNl);
374
+ }
375
+ text = text.trim();
376
+ }
304
377
  }
305
378
  try {
306
379
  return JSON.parse(text);
307
380
  }
308
381
  catch (err) {
309
- throw new Error(`SLM returned invalid JSON: ${err.message}`);
382
+ throw new Error(`SLM returned invalid JSON: ${err.message}`, { cause: err });
310
383
  }
311
384
  }
312
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-enhancer.js","sourceRoot":"","sources":["../src/ai-enhancer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-enhancer.js","sourceRoot":"","sources":["../src/ai-enhancer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * BindingLoader — parse `.binding.yaml` files back into `ScannedModule`.
3
+ *
4
+ * Inverse of {@link YAMLWriter}. Unlike apcore-js's binding loader (which
5
+ * imports the target and creates a runtime `FunctionModule`), this loader
6
+ * is pure data: it parses YAML into `ScannedModule` objects for validation,
7
+ * merging, diffing, or round-trip workflows. No module resolution occurs.
8
+ *
9
+ * This file adds the filesystem-reading entry point (`load(filePath)`) on
10
+ * top of the runtime-neutral parsing in `binding-parser.ts`. Consumers that
11
+ * only need to parse already-loaded documents (browsers, edge runtimes,
12
+ * workers) should use {@link BindingParser} or {@link parseBindingDocument}
13
+ * from `apcore-toolkit/browser` instead.
14
+ */
15
+ import { BindingParser } from './binding-parser.js';
16
+ import type { BindingLoadOptions } from './binding-parser.js';
17
+ import type { ScannedModule } from './types.js';
18
+ export { BindingLoadError, BindingParser, parseBindingDocument } from './binding-parser.js';
19
+ export type { BindingLoadOptions } from './binding-parser.js';
20
+ /**
21
+ * Loads `.binding.yaml` files into `ScannedModule` objects.
22
+ *
23
+ * Extends {@link BindingParser} so `loadData(data)` (runtime-neutral parsing
24
+ * of pre-loaded documents) is also available on every `BindingLoader`
25
+ * instance — the class hierarchy mirrors the Python SDK's
26
+ * `BindingLoader.load_data` method.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const loader = new BindingLoader();
31
+ * const modules = loader.load('./bindings/');
32
+ * const strict = loader.load('foo.binding.yaml', { strict: true });
33
+ * ```
34
+ */
35
+ export declare class BindingLoader extends BindingParser {
36
+ /**
37
+ * Load one file or every `*.binding.yaml` in a directory.
38
+ *
39
+ * @throws {BindingLoadError} when the path is missing, YAML is malformed,
40
+ * or any entry fails validation.
41
+ */
42
+ load(filePath: string, options?: BindingLoadOptions): ScannedModule[];
43
+ /**
44
+ * Recursively collect `.binding.yaml` files under `dir`. Follows symlinks
45
+ * (for parity with the non-recursive branch, which reads file contents and
46
+ * thus transparently dereferences symlinks) and caps recursion at
47
+ * {@link MAX_RECURSION_DEPTH}. Permission errors (`EACCES`/`EPERM`) on an
48
+ * individual subdirectory are swallowed with a warning so one unreadable
49
+ * subtree does not abort loading of the rest; all other `readdirSync`
50
+ * failures (e.g. `EMFILE`, `ENOTDIR`) propagate so systemic problems are
51
+ * not silently turned into partial loads.
52
+ */
53
+ private _collectRecursive;
54
+ }
55
+ //# sourceMappingURL=binding-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-loader.d.ts","sourceRoot":"","sources":["../src/binding-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAEL,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAU9D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,EAAE;IAiErE;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;CA6C1B"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * BindingLoader — parse `.binding.yaml` files back into `ScannedModule`.
3
+ *
4
+ * Inverse of {@link YAMLWriter}. Unlike apcore-js's binding loader (which
5
+ * imports the target and creates a runtime `FunctionModule`), this loader
6
+ * is pure data: it parses YAML into `ScannedModule` objects for validation,
7
+ * merging, diffing, or round-trip workflows. No module resolution occurs.
8
+ *
9
+ * This file adds the filesystem-reading entry point (`load(filePath)`) on
10
+ * top of the runtime-neutral parsing in `binding-parser.ts`. Consumers that
11
+ * only need to parse already-loaded documents (browsers, edge runtimes,
12
+ * workers) should use {@link BindingParser} or {@link parseBindingDocument}
13
+ * from `apcore-toolkit/browser` instead.
14
+ */
15
+ import * as fs from 'node:fs';
16
+ import * as path from 'node:path';
17
+ import * as yaml from 'js-yaml';
18
+ import { BindingLoadError, BindingParser, parseBindingDocument, } from './binding-parser.js';
19
+ // Re-export the runtime-neutral surface so the default package entry
20
+ // (`apcore-toolkit`) continues to expose exactly the same symbols it did
21
+ // before the split — existing consumers (`nestjs-apcore` etc.) see no
22
+ // change — plus the new {@link BindingParser} and
23
+ // {@link parseBindingDocument} additions that are now also available.
24
+ export { BindingLoadError, BindingParser, parseBindingDocument } from './binding-parser.js';
25
+ // Cap on directory recursion depth in `_collectRecursive`. This is the
26
+ // PRIMARY defense against symlink loops (`a -> b -> a`): `statSync` resolves
27
+ // symlinks but does not detect cycles, so a cyclic graph would recurse until
28
+ // the JS stack overflows without this cap. Also bounds worst-case stack
29
+ // usage on legitimately-deep trees; 64 is well above any realistic
30
+ // `.binding.yaml` layout.
31
+ const MAX_RECURSION_DEPTH = 64;
32
+ /**
33
+ * Loads `.binding.yaml` files into `ScannedModule` objects.
34
+ *
35
+ * Extends {@link BindingParser} so `loadData(data)` (runtime-neutral parsing
36
+ * of pre-loaded documents) is also available on every `BindingLoader`
37
+ * instance — the class hierarchy mirrors the Python SDK's
38
+ * `BindingLoader.load_data` method.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const loader = new BindingLoader();
43
+ * const modules = loader.load('./bindings/');
44
+ * const strict = loader.load('foo.binding.yaml', { strict: true });
45
+ * ```
46
+ */
47
+ export class BindingLoader extends BindingParser {
48
+ /**
49
+ * Load one file or every `*.binding.yaml` in a directory.
50
+ *
51
+ * @throws {BindingLoadError} when the path is missing, YAML is malformed,
52
+ * or any entry fails validation.
53
+ */
54
+ load(filePath, options) {
55
+ const strict = options?.strict ?? false;
56
+ const recursive = options?.recursive ?? false;
57
+ let stat;
58
+ try {
59
+ stat = fs.statSync(filePath);
60
+ }
61
+ catch (exc) {
62
+ const code = exc.code;
63
+ const reason = code === 'ENOENT'
64
+ ? 'path does not exist'
65
+ : `cannot stat path (${code ?? 'unknown'})`;
66
+ throw new BindingLoadError({ reason, filePath });
67
+ }
68
+ let files;
69
+ if (stat.isFile()) {
70
+ files = [filePath];
71
+ }
72
+ else if (stat.isDirectory()) {
73
+ if (recursive) {
74
+ files = this._collectRecursive(filePath).sort();
75
+ }
76
+ else {
77
+ files = fs
78
+ .readdirSync(filePath)
79
+ .filter((f) => f.endsWith('.binding.yaml'))
80
+ .sort()
81
+ .map((f) => path.join(filePath, f));
82
+ }
83
+ }
84
+ else {
85
+ throw new BindingLoadError({
86
+ reason: 'path is neither a file nor a directory',
87
+ filePath,
88
+ });
89
+ }
90
+ const modules = [];
91
+ for (const f of files) {
92
+ let content;
93
+ try {
94
+ content = fs.readFileSync(f, 'utf-8');
95
+ }
96
+ catch (exc) {
97
+ throw new BindingLoadError({
98
+ reason: `failed to read file: ${exc.message}`,
99
+ filePath: f,
100
+ });
101
+ }
102
+ let raw;
103
+ try {
104
+ raw = yaml.load(content);
105
+ }
106
+ catch (exc) {
107
+ throw new BindingLoadError({
108
+ reason: `failed to parse YAML: ${exc.message}`,
109
+ filePath: f,
110
+ });
111
+ }
112
+ if (raw == null) {
113
+ console.warn(`BindingLoader: ${f} is empty, skipping`);
114
+ continue;
115
+ }
116
+ modules.push(...parseBindingDocument(raw, { strict }, f));
117
+ }
118
+ return modules;
119
+ }
120
+ /**
121
+ * Recursively collect `.binding.yaml` files under `dir`. Follows symlinks
122
+ * (for parity with the non-recursive branch, which reads file contents and
123
+ * thus transparently dereferences symlinks) and caps recursion at
124
+ * {@link MAX_RECURSION_DEPTH}. Permission errors (`EACCES`/`EPERM`) on an
125
+ * individual subdirectory are swallowed with a warning so one unreadable
126
+ * subtree does not abort loading of the rest; all other `readdirSync`
127
+ * failures (e.g. `EMFILE`, `ENOTDIR`) propagate so systemic problems are
128
+ * not silently turned into partial loads.
129
+ */
130
+ _collectRecursive(dir, depth = 0) {
131
+ if (depth > MAX_RECURSION_DEPTH) {
132
+ console.warn(`BindingLoader: max recursion depth (${MAX_RECURSION_DEPTH}) reached at ${dir}; stopping descent.`);
133
+ return [];
134
+ }
135
+ let entries;
136
+ try {
137
+ entries = fs.readdirSync(dir, { withFileTypes: true });
138
+ }
139
+ catch (exc) {
140
+ const code = exc.code;
141
+ if (code === 'EACCES' || code === 'EPERM') {
142
+ console.warn(`BindingLoader: cannot read ${dir}: ${exc.message}; skipping`);
143
+ return [];
144
+ }
145
+ throw exc;
146
+ }
147
+ const results = [];
148
+ for (const entry of entries) {
149
+ const full = path.join(dir, entry.name);
150
+ let isDir = entry.isDirectory();
151
+ let isFile = entry.isFile();
152
+ // Dirent.isDirectory/isFile both return false for symlinks; follow the
153
+ // link with stat so symlinked bindings / bindings-dirs behave the same
154
+ // as real ones (matching non-recursive-branch behaviour).
155
+ if (entry.isSymbolicLink()) {
156
+ try {
157
+ const st = fs.statSync(full);
158
+ isDir = st.isDirectory();
159
+ isFile = st.isFile();
160
+ }
161
+ catch {
162
+ continue;
163
+ }
164
+ }
165
+ if (isDir) {
166
+ results.push(...this._collectRecursive(full, depth + 1));
167
+ }
168
+ else if (isFile && entry.name.endsWith('.binding.yaml')) {
169
+ results.push(full);
170
+ }
171
+ }
172
+ return results;
173
+ }
174
+ }
175
+ //# sourceMappingURL=binding-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-loader.js","sourceRoot":"","sources":["../src/binding-loader.ts"],"names":[],"mappings":"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"}