apcore-toolkit 0.4.1 → 0.5.1

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 (108) hide show
  1. package/CHANGELOG.md +68 -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 +100 -23
  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 +52 -14
  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.map +1 -1
  96. package/dist/serializers.js +2 -0
  97. package/dist/serializers.js.map +1 -1
  98. package/dist/types.d.ts +16 -0
  99. package/dist/types.d.ts.map +1 -1
  100. package/dist/types.js +3 -0
  101. package/dist/types.js.map +1 -1
  102. package/package.json +9 -2
  103. package/dist/display-resolver.d.ts.map +0 -1
  104. package/dist/display-resolver.js.map +0 -1
  105. package/dist/flatten-params.d.ts +0 -16
  106. package/dist/flatten-params.d.ts.map +0 -1
  107. package/dist/flatten-params.js +0 -18
  108. package/dist/flatten-params.js.map +0 -1
@@ -68,6 +68,22 @@ function parseIntEnv(name, fallback) {
68
68
  throw new Error(`${name} must be a valid integer, got "${raw}"`);
69
69
  return val;
70
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
+ */
71
87
  export class AIEnhancer {
72
88
  endpoint;
73
89
  model;
@@ -80,6 +96,17 @@ export class AIEnhancer {
80
96
  this.threshold = options?.threshold ?? parseFloatEnv('APCORE_AI_THRESHOLD', _DEFAULT_THRESHOLD);
81
97
  this.batchSize = options?.batchSize ?? parseIntEnv('APCORE_AI_BATCH_SIZE', _DEFAULT_BATCH_SIZE);
82
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
+ }
83
110
  if (this.threshold < 0 || this.threshold > 1) {
84
111
  throw new Error('APCORE_AI_THRESHOLD must be a number between 0.0 and 1.0');
85
112
  }
@@ -95,6 +122,8 @@ export class AIEnhancer {
95
122
  return val === 'true' || val === '1' || val === 'yes';
96
123
  }
97
124
  async enhance(modules) {
125
+ if (!AIEnhancer.isEnabled())
126
+ return modules;
98
127
  const results = [...modules];
99
128
  const pending = [];
100
129
  for (let i = 0; i < modules.length; i++) {
@@ -105,18 +134,35 @@ export class AIEnhancer {
105
134
  }
106
135
  for (let batchStart = 0; batchStart < pending.length; batchStart += this.batchSize) {
107
136
  const batch = pending.slice(batchStart, batchStart + this.batchSize);
108
- for (const { idx, module, gaps } of batch) {
109
- try {
110
- const enhanced = await this._enhanceModule(module, gaps);
111
- 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;
112
143
  }
113
- catch {
114
- // AI enhancement failed keep original
144
+ else {
145
+ console.warn('AIEnhancer: enhancement failed for %s:', module.moduleId, outcome.reason);
115
146
  }
116
147
  }
117
148
  }
118
149
  return results;
119
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
+ }
120
166
  _identifyGaps(module) {
121
167
  const gaps = [];
122
168
  if (!module.description || module.description === module.moduleId) {
@@ -125,10 +171,13 @@ export class AIEnhancer {
125
171
  if (!module.documentation) {
126
172
  gaps.push('documentation');
127
173
  }
128
- if (module.annotations == null || JSON.stringify(module.annotations) === JSON.stringify(DEFAULT_ANNOTATIONS)) {
174
+ if (this._annotationsAreDefault(module.annotations)) {
129
175
  gaps.push('annotations');
130
176
  }
131
- 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;
132
181
  if (!props || (typeof props === 'object' && Object.keys(props).length === 0)) {
133
182
  gaps.push('input_schema');
134
183
  }
@@ -139,7 +188,16 @@ export class AIEnhancer {
139
188
  const response = await this._callLLM(prompt);
140
189
  const parsed = AIEnhancer._parseResponse(response);
141
190
  const updates = {};
142
- 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
+ }
143
201
  const confidence = {};
144
202
  const warnings = [...module.warnings];
145
203
  if (gaps.includes('description') && parsed.description) {
@@ -170,7 +228,7 @@ export class AIEnhancer {
170
228
  const annData = parsed.annotations;
171
229
  const accepted = {};
172
230
  for (const [snakeKey, spec] of ANNOTATION_FIELD_SPECS) {
173
- if (!(snakeKey in annData) || !spec.validate(annData[snakeKey]))
231
+ if (!Object.hasOwn(annData, snakeKey) || !spec.validate(annData[snakeKey]))
174
232
  continue;
175
233
  const fieldConf = parsedConf[`annotations.${snakeKey}`] ?? parsedConf[snakeKey] ?? 0;
176
234
  confidence[`annotations.${snakeKey}`] = fieldConf;
@@ -189,8 +247,13 @@ export class AIEnhancer {
189
247
  if (gaps.includes('input_schema') && parsed.input_schema) {
190
248
  const conf = parsedConf.input_schema ?? 0;
191
249
  confidence.input_schema = conf;
192
- if (conf >= this.threshold) {
193
- 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;
194
257
  }
195
258
  else {
196
259
  warnings.push(`Low confidence (${conf.toFixed(2)}) for input_schema — skipped. Review manually.`);
@@ -244,9 +307,16 @@ export class AIEnhancer {
244
307
  if (gaps.includes('input_schema')) {
245
308
  parts.push(' "input_schema": <JSON Schema object for function parameters>,');
246
309
  }
247
- parts.push(' "confidence": {');
248
- parts.push(' "description": 0.0, "documentation": 0.0');
249
- 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);
250
320
  parts.push('}');
251
321
  parts.push('');
252
322
  parts.push('Respond with ONLY valid JSON, no markdown fences or explanation.');
@@ -280,7 +350,7 @@ export class AIEnhancer {
280
350
  }
281
351
  catch (err) {
282
352
  if (err instanceof DOMException && err.name === 'AbortError') {
283
- 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 });
284
354
  }
285
355
  throw err;
286
356
  }
@@ -290,19 +360,26 @@ export class AIEnhancer {
290
360
  }
291
361
  static _parseResponse(response) {
292
362
  let text = response.trim();
363
+ // Strip markdown code fence: ```[lang]\n ... \n``` (closing fence optional)
293
364
  if (text.startsWith('```')) {
294
- const lines = text.split('\n');
295
- if (lines[0].startsWith('```'))
296
- lines.shift();
297
- if (lines.length > 0 && lines[lines.length - 1].trim() === '```')
298
- lines.pop();
299
- 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
+ }
300
377
  }
301
378
  try {
302
379
  return JSON.parse(text);
303
380
  }
304
381
  catch (err) {
305
- throw new Error(`SLM returned invalid JSON: ${err.message}`);
382
+ throw new Error(`SLM returned invalid JSON: ${err.message}`, { cause: err });
306
383
  }
307
384
  }
308
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":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoBzC,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3E,IAAI,QAAQ,KAAK,OAAO;YAAE,SAAS;QACnC,IAAI,QAAiC,CAAC;QACtC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAClC,2DAA2D;YAC3D,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7C,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,oEAAoE;YACpE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,SAAS;QACX,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YAChC,QAAQ,EAAE,QAAmC;YAC7C,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAC;AAE3D,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AACtD,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,SAAS,aAAa,CAAC,IAAY,EAAE,QAAgB;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iCAAiC,GAAG,GAAG,CAAC,CAAC;IACvF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,GAAG,GAAG,CAAC,CAAC;IACxF,OAAO,GAAG,CAAC;AACb,CAAC;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,OAAO,CAAS;IAEzB,YAAY,OAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAc,CAAC;QAC7E,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,aAAa,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,WAAW,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QAEtF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,+DAA+D,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;gBAAE,MAAM,GAAG,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS;QACd,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAAE,OAAO,OAAO,CAAC;QAC5C,MAAM,OAAO,GAAoB,CAAC,GAAG,OAAO,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAkE,EAAE,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACnE,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,WAAyC;QACtE,IAAI,WAAW,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,GAAG,GAAG,WAAiD,CAAC;QAC9D,MAAM,GAAG,GAAG,mBAAyD,CAAC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,0EAA0E;YAC1E,qEAAqE;YACrE,0EAA0E;YAC1E,+DAA+D;YAC/D,IAAI,CAAC,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC/B,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAqB;QACzC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAClC,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrE,CAAC,CAAE,MAAkC,CAAC,UAAU;YAChD,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAqB,EAAE,IAAc;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,uEAAuE;QACvE,yDAAyD;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;QAClC,MAAM,UAAU,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;QACzF,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;gBACxE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAa,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;YACzC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;YAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC;YAC3C,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACjG,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsC,CAAC;YAC9D,MAAM,QAAQ,GAAsD,EAAE,CAAC;YACvE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAAE,SAAS;gBACrF,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrF,UAAU,CAAC,eAAe,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC;gBAClD,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,QAAQ,8BAA8B,CAAC,CAAC;gBACpH,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,GAAG,mBAAmB,EAAE,CAAC;gBAC9D,OAAO,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC;YAC1C,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;YAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAK,CAAY,CAAC;YACzG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;YACpG,CAAC;iBAAM,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC/C,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAA4B,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACnC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC;QAEzC,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA4B,CAAC,CAAC;IAC3F,CAAC;IAEO,YAAY,CAAC,MAAqB,EAAE,IAAc;QACxD,MAAM,KAAK,GAAG;YACZ,wFAAwF;YACxF,EAAE;YACF,cAAc,MAAM,CAAC,QAAQ,EAAE;YAC/B,WAAW,MAAM,CAAC,MAAM,EAAE;SAC3B,CAAC;QACF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;QAED,sEAAsE;QACtE,gEAAgE;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CACpC,CAAC;QACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;aAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAE/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAc;QACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC5B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8D,CAAC;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,QAAgB;QAC5C,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,4EAA4E;QAC5E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,GAAG,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA+B,GAAa,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}
@@ -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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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Runtime-neutral binding document parser.
3
+ *
4
+ * Contains the pure parsing logic shared by {@link BindingLoader} — it takes
5
+ * a pre-loaded `bindings` document (e.g. the result of `yaml.load()` or a
6
+ * JSON fetch response) and returns `ScannedModule[]`. No filesystem access.
7
+ *
8
+ * `BindingLoader` (in `binding-loader.ts`) extends {@link BindingParser} to
9
+ * add the `load(filePath)` entry point that reads from disk with `node:fs`.
10
+ * Consumers that only need in-memory parsing — browsers, edge runtimes,
11
+ * workers — import {@link BindingParser} or {@link parseBindingDocument}
12
+ * from here (or via `apcore-toolkit/browser`).
13
+ */
14
+ import type { ScannedModule } from './types.js';
15
+ /** Options for {@link BindingParser} / {@link BindingLoader} methods. */
16
+ export interface BindingLoadOptions {
17
+ /**
18
+ * When `true`, also require `input_schema` and `output_schema`.
19
+ * Default: `false` (loose mode — only `module_id` and `target` required).
20
+ */
21
+ strict?: boolean;
22
+ /**
23
+ * When `true` and the path is a directory, recursively walk subdirectories
24
+ * to find all `**\/*.binding.yaml` files. When `false` (default), only files
25
+ * in the immediate directory are loaded (flat glob behaviour).
26
+ *
27
+ * Only honoured by {@link BindingLoader.load}; ignored by
28
+ * {@link BindingParser.loadData} and {@link parseBindingDocument} which
29
+ * do not touch the filesystem.
30
+ */
31
+ recursive?: boolean;
32
+ }
33
+ /** Thrown when a binding YAML entry cannot be parsed. */
34
+ export declare class BindingLoadError extends Error {
35
+ filePath: string | null;
36
+ moduleId: string | null;
37
+ missingFields: string[];
38
+ reason: string;
39
+ constructor(params: {
40
+ reason: string;
41
+ filePath?: string | null;
42
+ moduleId?: string | null;
43
+ missingFields?: string[];
44
+ });
45
+ }
46
+ /**
47
+ * Parse a binding document (already-loaded data, no filesystem access) into
48
+ * `ScannedModule[]`.
49
+ *
50
+ * Equivalent to {@link BindingParser.loadData} but lets callers supply an
51
+ * explicit `filePath` string that will be embedded in any
52
+ * {@link BindingLoadError} thrown for malformed entries — useful when you
53
+ * know the document came from a specific file (e.g. a server endpoint
54
+ * identifies it by path). Pass `null` when no file context applies.
55
+ */
56
+ export declare function parseBindingDocument(raw: unknown, options?: BindingLoadOptions, filePath?: string | null): ScannedModule[];
57
+ /**
58
+ * Runtime-neutral binding parser.
59
+ *
60
+ * Parses pre-loaded `bindings` data (e.g. from `yaml.load()`, `fetch()` +
61
+ * `JSON.parse()`, etc.) into `ScannedModule[]`. Does not touch the
62
+ * filesystem — safe for browsers, edge runtimes, and workers.
63
+ *
64
+ * For filesystem-based loading, use {@link BindingLoader} (subclass,
65
+ * Node-only) which adds the `load(filePath)` entry point.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * import { BindingParser } from 'apcore-toolkit/browser';
70
+ *
71
+ * const resp = await fetch('/api/bindings.yaml');
72
+ * const doc = yaml.load(await resp.text());
73
+ * const mods = new BindingParser().loadData(doc);
74
+ * ```
75
+ */
76
+ export declare class BindingParser {
77
+ /** Parse a pre-loaded binding dict (`{ bindings: [...] }`). */
78
+ loadData(data: Record<string, unknown>, options?: BindingLoadOptions): ScannedModule[];
79
+ }
80
+ //# sourceMappingURL=binding-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-parser.d.ts","sourceRoot":"","sources":["../src/binding-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,yDAAyD;AACzD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;gBAEH,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B;CAcF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,aAAa,EAAE,CA4BjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,EAAE;CAGvF"}