agent-contracts 0.19.4 → 0.19.5

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.
package/dist/index.js CHANGED
@@ -49347,18 +49347,27 @@ async function resolveRefsDeep(data, baseDir, resolving, rootDoc) {
49347
49347
  }
49348
49348
  resolving.add(refValue);
49349
49349
  const target = resolveJsonPointer(rootDoc, refValue);
49350
- const resolved2 = await resolveRefsDeep(
49350
+ const resolved = await resolveRefsDeep(
49351
49351
  deepClone(target),
49352
49352
  baseDir,
49353
49353
  resolving,
49354
49354
  rootDoc
49355
49355
  );
49356
49356
  resolving.delete(refValue);
49357
- return resolved2;
49357
+ return resolved;
49358
49358
  }
49359
- const refTarget = resolve(baseDir, refValue);
49359
+ const hashIdx = refValue.indexOf("#");
49360
+ const filePart = hashIdx >= 0 ? refValue.slice(0, hashIdx) : refValue;
49361
+ const fragment = hashIdx >= 0 ? refValue.slice(hashIdx) : null;
49362
+ const refTarget = resolve(baseDir, filePart);
49360
49363
  const s2 = await fsStat(refTarget).catch(() => null);
49361
49364
  if (s2?.isDirectory()) {
49365
+ if (fragment) {
49366
+ throw new DslLoadError(
49367
+ `Cannot use JSON Pointer fragment with directory $ref: ${refValue}`,
49368
+ refTarget
49369
+ );
49370
+ }
49362
49371
  if (resolving.has(refTarget)) {
49363
49372
  throw new DslLoadError(
49364
49373
  `Circular $ref detected: ${refTarget}`,
@@ -49381,14 +49390,24 @@ async function resolveRefsDeep(data, baseDir, resolving, rootDoc) {
49381
49390
  }
49382
49391
  resolving.add(refTarget);
49383
49392
  const content = await readYaml(refTarget);
49384
- const resolved = await resolveRefsDeep(
49393
+ const fileRoot = fragment ? content : rootDoc;
49394
+ let fileData = await resolveRefsDeep(
49385
49395
  content,
49386
49396
  dirname(refTarget),
49387
49397
  resolving,
49388
- rootDoc
49398
+ fileRoot
49389
49399
  );
49390
49400
  resolving.delete(refTarget);
49391
- return resolved;
49401
+ if (fragment && fragment.startsWith("#/")) {
49402
+ if (!isRecord(fileData)) {
49403
+ throw new DslLoadError(
49404
+ `Cannot resolve fragment "${fragment}" in ${refTarget}: file content is not an object`,
49405
+ refTarget
49406
+ );
49407
+ }
49408
+ fileData = resolveJsonPointer(fileData, fragment);
49409
+ }
49410
+ return fileData;
49392
49411
  }
49393
49412
  let obj = data;
49394
49413
  if (hasRefs(obj)) {