@workos/oagen 0.7.0 → 0.9.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 (52) hide show
  1. package/dist/cli/index.mjs +1190 -512
  2. package/dist/cli/index.mjs.map +1 -1
  3. package/dist/compat/index.d.mts +144 -57
  4. package/dist/compat/index.d.mts.map +1 -1
  5. package/dist/compat/index.mjs +362 -41
  6. package/dist/compat/index.mjs.map +1 -1
  7. package/dist/{diff-BYadQQV7.mjs → diff-DZvzV9p3.mjs} +31 -22
  8. package/dist/{diff-BYadQQV7.mjs.map → diff-DZvzV9p3.mjs.map} +1 -1
  9. package/dist/differ-CTl98yoS.d.mts +116 -0
  10. package/dist/differ-CTl98yoS.d.mts.map +1 -0
  11. package/dist/index.d.mts +13 -4
  12. package/dist/index.d.mts.map +1 -1
  13. package/dist/index.mjs +50 -10
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/{differ-CG5ZErKl.mjs → overlay-Bt6oz0dg.mjs} +1112 -553
  16. package/dist/overlay-Bt6oz0dg.mjs.map +1 -0
  17. package/dist/scripts/smoke/baseline.mjs +49 -9
  18. package/dist/scripts/smoke/baseline.mjs.map +1 -1
  19. package/dist/smoke.d.mts +10 -0
  20. package/dist/smoke.d.mts.map +1 -1
  21. package/dist/smoke.mjs +49 -9
  22. package/dist/smoke.mjs.map +1 -1
  23. package/dist/tree-sitter-C53w_0WE.mjs.map +1 -1
  24. package/dist/{types-DJMbCtIO.d.mts → types-mTtkgy_h.d.mts} +180 -2
  25. package/dist/types-mTtkgy_h.d.mts.map +1 -0
  26. package/dist/verify/index.d.mts +4 -3
  27. package/dist/verify/index.d.mts.map +1 -1
  28. package/dist/verify/index.mjs +56 -39
  29. package/dist/verify/index.mjs.map +1 -1
  30. package/docs/architecture/emitter-contract.md +2 -2
  31. package/docs/architecture/extractor-contract.md +6 -5
  32. package/docs/architecture/pipeline.md +4 -3
  33. package/docs/architecture/workflows.md +5 -3
  34. package/docs/cli.md +148 -6
  35. package/docs/contributor/public-api.md +1 -1
  36. package/docs/core/compatibility-ir.md +200 -0
  37. package/docs/core/compatibility-policy.md +170 -0
  38. package/docs/core/compatibility.md +83 -0
  39. package/docs/core/index.md +5 -0
  40. package/docs/core/manifest-schema.md +76 -0
  41. package/docs/core/quickstart.md +9 -2
  42. package/docs/core/verify-compat.md +235 -0
  43. package/package.json +1 -1
  44. package/skills/generate-emitter/SKILL.md +12 -7
  45. package/skills/generate-emitter/references/project-scaffold.md +27 -6
  46. package/skills/generate-extractor/SKILL.md +14 -8
  47. package/skills/generate-sdk/SKILL.md +2 -2
  48. package/skills/generate-smoke-test/SKILL.md +9 -5
  49. package/skills/review-operations/SKILL.md +2 -2
  50. package/skills/verify-compat/SKILL.md +1 -1
  51. package/dist/differ-CG5ZErKl.mjs.map +0 -1
  52. package/dist/types-DJMbCtIO.d.mts.map +0 -1
@@ -2439,8 +2439,7 @@ function generateAllFiles(spec, emitter, ctx) {
2439
2439
  ...emitter.generateClient(spec, ctx),
2440
2440
  ...emitter.generateErrors(ctx),
2441
2441
  ...emitter.generateTypeSignatures?.(reachableSpec, ctx) ?? [],
2442
- ...emitter.generateTests(reachableSpec, ctx),
2443
- ...emitter.generateManifest?.(spec, ctx) ?? []
2442
+ ...emitter.generateTests(reachableSpec, ctx)
2444
2443
  ];
2445
2444
  }
2446
2445
  /** Apply file header to generated files, respecting headerPlacement and JSON files. */
@@ -2454,11 +2453,13 @@ function applyFileHeaders(files, header) {
2454
2453
  function generateFiles(spec, emitter, options) {
2455
2454
  const ctx = buildEmitterContext(spec, options);
2456
2455
  const files = generateAllFiles(spec, emitter, ctx);
2456
+ const operations = emitter.buildOperationsMap?.(spec, ctx);
2457
2457
  const header = emitter.fileHeader();
2458
2458
  return {
2459
2459
  files: applyFileHeaders(files, header),
2460
2460
  ctx,
2461
- header
2461
+ header,
2462
+ operations
2462
2463
  };
2463
2464
  }
2464
2465
  //#endregion
@@ -2689,7 +2690,7 @@ async function formatTargetFiles(emitter, targetDir, filePaths) {
2689
2690
  * one-line notice is printed — no surprise deletions.
2690
2691
  */
2691
2692
  const MANIFEST_FILENAME = ".oagen-manifest.json";
2692
- const MANIFEST_VERSION = 1;
2693
+ const MANIFEST_VERSION = 2;
2693
2694
  /** Read `.oagen-manifest.json` from a directory. Returns null if absent or malformed. */
2694
2695
  async function readManifest(dir) {
2695
2696
  const manifestPath = path$1.join(dir, MANIFEST_FILENAME);
@@ -2716,8 +2717,16 @@ async function writeManifest(dir, opts) {
2716
2717
  const manifest = {
2717
2718
  version: MANIFEST_VERSION,
2718
2719
  language: opts.language,
2720
+ ...opts.sdkName !== void 0 ? { sdkName: opts.sdkName } : {},
2719
2721
  generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
2720
- files: [...new Set(opts.files)].sort()
2722
+ ...opts.specSha !== void 0 ? { specSha: opts.specSha } : {},
2723
+ ...opts.specPath !== void 0 ? { specPath: opts.specPath } : {},
2724
+ ...opts.emitterSha !== void 0 ? { emitterSha: opts.emitterSha } : {},
2725
+ ...opts.emitterVersion !== void 0 ? { emitterVersion: opts.emitterVersion } : {},
2726
+ ...opts.configSha !== void 0 ? { configSha: opts.configSha } : {},
2727
+ ...opts.compatSchemaVersion !== void 0 ? { compatSchemaVersion: opts.compatSchemaVersion } : {},
2728
+ files: [...new Set(opts.files)].sort(),
2729
+ ...opts.operations !== void 0 ? { operations: opts.operations } : {}
2721
2730
  };
2722
2731
  const manifestPath = path$1.join(dir, MANIFEST_FILENAME);
2723
2732
  await fs.mkdir(dir, { recursive: true });
@@ -2799,7 +2808,7 @@ async function removeEmptyParents(startDir, stopDir) {
2799
2808
  async function generate(spec, emitter, options) {
2800
2809
  const targetManifestForCtx = options.target && !options.noPrune ? await readManifest(options.target) : null;
2801
2810
  const priorTargetManifestPaths = targetManifestForCtx ? new Set(targetManifestForCtx.files) : void 0;
2802
- const { files: withHeaders, header } = generateFiles(spec, emitter, {
2811
+ const { files: withHeaders, header, operations } = generateFiles(spec, emitter, {
2803
2812
  ...options,
2804
2813
  priorTargetManifestPaths
2805
2814
  });
@@ -2825,8 +2834,11 @@ async function generate(spec, emitter, options) {
2825
2834
  currentPaths: outputEmittedPaths,
2826
2835
  language: emitter.language,
2827
2836
  header,
2828
- noPrune: options.noPrune
2837
+ noPrune: options.noPrune,
2838
+ operations
2829
2839
  });
2840
+ const allOutputFiles = [...writeResult.written, ...writeResult.merged];
2841
+ if (allOutputFiles.length > 0) await formatTargetFiles(emitter, options.outputDir, allOutputFiles);
2830
2842
  if (options.target) {
2831
2843
  const targetPrevManifest = targetManifestForCtx;
2832
2844
  const targetResult = await integrateGeneratedFiles({
@@ -2845,7 +2857,8 @@ async function generate(spec, emitter, options) {
2845
2857
  currentPaths: targetResult.emittedPaths,
2846
2858
  language: emitter.language,
2847
2859
  header,
2848
- noPrune: options.noPrune
2860
+ noPrune: options.noPrune,
2861
+ operations
2849
2862
  });
2850
2863
  const allTargetFiles = [
2851
2864
  ...targetResult.written,
@@ -2861,19 +2874,18 @@ async function generate(spec, emitter, options) {
2861
2874
  * then write the fresh manifest. Safe on first adoption (no previous manifest).
2862
2875
  */
2863
2876
  async function applyManifestPrune(opts) {
2877
+ const manifestOpts = {
2878
+ language: opts.language,
2879
+ files: opts.currentPaths,
2880
+ operations: opts.operations
2881
+ };
2864
2882
  if (opts.noPrune) {
2865
- await writeManifest(opts.dir, {
2866
- language: opts.language,
2867
- files: opts.currentPaths
2868
- });
2883
+ await writeManifest(opts.dir, manifestOpts);
2869
2884
  return;
2870
2885
  }
2871
2886
  if (!opts.prevManifest) {
2872
2887
  console.log(`${opts.label}: no ${MANIFEST_FILENAME} found — skipping prune (this baseline manifest will be written now).`);
2873
- await writeManifest(opts.dir, {
2874
- language: opts.language,
2875
- files: opts.currentPaths
2876
- });
2888
+ await writeManifest(opts.dir, manifestOpts);
2877
2889
  return;
2878
2890
  }
2879
2891
  const stale = computeStalePaths(opts.prevManifest, opts.currentPaths);
@@ -2885,10 +2897,7 @@ async function applyManifestPrune(opts) {
2885
2897
  for (const p of preserved) console.log(` ${p}`);
2886
2898
  }
2887
2899
  }
2888
- await writeManifest(opts.dir, {
2889
- language: opts.language,
2890
- files: opts.currentPaths
2891
- });
2900
+ await writeManifest(opts.dir, manifestOpts);
2892
2901
  }
2893
2902
  //#endregion
2894
2903
  //#region src/engine/registry.ts
@@ -3248,6 +3257,6 @@ function summarize(changes) {
3248
3257
  };
3249
3258
  }
3250
3259
  //#endregion
3251
- export { integrateGeneratedFiles as a, applyFileHeaders as c, generateAllFiles as d, generateFiles as f, generate as i, buildEmitterContext as l, resolveOperations as m, getEmitter as n, mapFilesForTargetIntegration as o, deriveMethodName as p, registerEmitter as r, treeShakeFiles as s, diffSpecs as t, collectReferencedNames as u };
3260
+ export { MANIFEST_FILENAME as a, treeShakeFiles as c, collectReferencedNames as d, generateAllFiles as f, resolveOperations as h, generate as i, applyFileHeaders as l, deriveMethodName as m, getEmitter as n, integrateGeneratedFiles as o, generateFiles as p, registerEmitter as r, mapFilesForTargetIntegration as s, diffSpecs as t, buildEmitterContext as u };
3252
3261
 
3253
- //# sourceMappingURL=diff-BYadQQV7.mjs.map
3262
+ //# sourceMappingURL=diff-DZvzV9p3.mjs.map