micro-contracts 0.16.4 → 0.17.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 (181) hide show
  1. package/dist/micro-contracts.bundle.mjs +4683 -0
  2. package/dist/micro-contracts.bundle.mjs.map +7 -0
  3. package/package.json +22 -25
  4. package/dist/agents/context-builder.d.ts +0 -5
  5. package/dist/agents/context-builder.d.ts.map +0 -1
  6. package/dist/agents/context-builder.js +0 -239
  7. package/dist/agents/context-builder.js.map +0 -1
  8. package/dist/agents/formatter.d.ts +0 -9
  9. package/dist/agents/formatter.d.ts.map +0 -1
  10. package/dist/agents/formatter.js +0 -124
  11. package/dist/agents/formatter.js.map +0 -1
  12. package/dist/agents/index.d.ts +0 -5
  13. package/dist/agents/index.d.ts.map +0 -1
  14. package/dist/agents/index.js +0 -3
  15. package/dist/agents/index.js.map +0 -1
  16. package/dist/agents/orchestrator.d.ts +0 -5
  17. package/dist/agents/orchestrator.d.ts.map +0 -1
  18. package/dist/agents/orchestrator.js +0 -105
  19. package/dist/agents/orchestrator.js.map +0 -1
  20. package/dist/agents/types.d.ts +0 -21
  21. package/dist/agents/types.d.ts.map +0 -1
  22. package/dist/agents/types.js +0 -2
  23. package/dist/agents/types.js.map +0 -1
  24. package/dist/cli/templates.d.ts +0 -22
  25. package/dist/cli/templates.d.ts.map +0 -1
  26. package/dist/cli/templates.js +0 -445
  27. package/dist/cli/templates.js.map +0 -1
  28. package/dist/cli.d.ts +0 -3
  29. package/dist/cli.d.ts.map +0 -1
  30. package/dist/cli.js +0 -1142
  31. package/dist/cli.js.map +0 -1
  32. package/dist/commands/audit-guardrails.d.ts +0 -13
  33. package/dist/commands/audit-guardrails.d.ts.map +0 -1
  34. package/dist/commands/audit-guardrails.js +0 -32
  35. package/dist/commands/audit-guardrails.js.map +0 -1
  36. package/dist/commands/audit-openapi.d.ts +0 -13
  37. package/dist/commands/audit-openapi.d.ts.map +0 -1
  38. package/dist/commands/audit-openapi.js +0 -32
  39. package/dist/commands/audit-openapi.js.map +0 -1
  40. package/dist/commands/propose-overlays.d.ts +0 -13
  41. package/dist/commands/propose-overlays.d.ts.map +0 -1
  42. package/dist/commands/propose-overlays.js +0 -32
  43. package/dist/commands/propose-overlays.js.map +0 -1
  44. package/dist/commands/review-published.d.ts +0 -13
  45. package/dist/commands/review-published.d.ts.map +0 -1
  46. package/dist/commands/review-published.js +0 -32
  47. package/dist/commands/review-published.js.map +0 -1
  48. package/dist/generated/commands.d.ts +0 -2
  49. package/dist/generated/commands.d.ts.map +0 -1
  50. package/dist/generated/commands.js +0 -2
  51. package/dist/generated/commands.js.map +0 -1
  52. package/dist/generated/dsl/agents.d.ts +0 -34
  53. package/dist/generated/dsl/agents.d.ts.map +0 -1
  54. package/dist/generated/dsl/agents.js +0 -98
  55. package/dist/generated/dsl/agents.js.map +0 -1
  56. package/dist/generated/dsl/handoffs.d.ts +0 -457
  57. package/dist/generated/dsl/handoffs.d.ts.map +0 -1
  58. package/dist/generated/dsl/handoffs.js +0 -205
  59. package/dist/generated/dsl/handoffs.js.map +0 -1
  60. package/dist/generated/dsl/index.d.ts +0 -13
  61. package/dist/generated/dsl/index.d.ts.map +0 -1
  62. package/dist/generated/dsl/index.js +0 -10
  63. package/dist/generated/dsl/index.js.map +0 -1
  64. package/dist/generated/dsl/tasks.d.ts +0 -26
  65. package/dist/generated/dsl/tasks.d.ts.map +0 -1
  66. package/dist/generated/dsl/tasks.js +0 -133
  67. package/dist/generated/dsl/tasks.js.map +0 -1
  68. package/dist/generated/dsl/workflows.d.ts +0 -34
  69. package/dist/generated/dsl/workflows.d.ts.map +0 -1
  70. package/dist/generated/dsl/workflows.js +0 -84
  71. package/dist/generated/dsl/workflows.js.map +0 -1
  72. package/dist/generated/index.d.ts +0 -7
  73. package/dist/generated/index.d.ts.map +0 -1
  74. package/dist/generated/index.js +0 -7
  75. package/dist/generated/index.js.map +0 -1
  76. package/dist/generated/policy-runtime.d.ts +0 -114
  77. package/dist/generated/policy-runtime.d.ts.map +0 -1
  78. package/dist/generated/policy-runtime.js +0 -195
  79. package/dist/generated/policy-runtime.js.map +0 -1
  80. package/dist/generated/policy.d.ts +0 -619
  81. package/dist/generated/policy.d.ts.map +0 -1
  82. package/dist/generated/policy.js +0 -802
  83. package/dist/generated/policy.js.map +0 -1
  84. package/dist/generated/program.d.ts +0 -112
  85. package/dist/generated/program.d.ts.map +0 -1
  86. package/dist/generated/program.js +0 -266
  87. package/dist/generated/program.js.map +0 -1
  88. package/dist/generated/schemas.d.ts +0 -778
  89. package/dist/generated/schemas.d.ts.map +0 -1
  90. package/dist/generated/schemas.js +0 -1005
  91. package/dist/generated/schemas.js.map +0 -1
  92. package/dist/generated/types.d.ts +0 -395
  93. package/dist/generated/types.d.ts.map +0 -1
  94. package/dist/generated/types.js +0 -3
  95. package/dist/generated/types.js.map +0 -1
  96. package/dist/generator/dependencyGenerator.d.ts +0 -43
  97. package/dist/generator/dependencyGenerator.d.ts.map +0 -1
  98. package/dist/generator/dependencyGenerator.js +0 -159
  99. package/dist/generator/dependencyGenerator.js.map +0 -1
  100. package/dist/generator/index.d.ts +0 -39
  101. package/dist/generator/index.d.ts.map +0 -1
  102. package/dist/generator/index.js +0 -720
  103. package/dist/generator/index.js.map +0 -1
  104. package/dist/generator/inputHash.d.ts +0 -23
  105. package/dist/generator/inputHash.d.ts.map +0 -1
  106. package/dist/generator/inputHash.js +0 -145
  107. package/dist/generator/inputHash.js.map +0 -1
  108. package/dist/generator/linter.d.ts +0 -26
  109. package/dist/generator/linter.d.ts.map +0 -1
  110. package/dist/generator/linter.js +0 -352
  111. package/dist/generator/linter.js.map +0 -1
  112. package/dist/generator/overlayProcessor.d.ts +0 -90
  113. package/dist/generator/overlayProcessor.d.ts.map +0 -1
  114. package/dist/generator/overlayProcessor.js +0 -541
  115. package/dist/generator/overlayProcessor.js.map +0 -1
  116. package/dist/generator/schemaGenerator.d.ts +0 -10
  117. package/dist/generator/schemaGenerator.d.ts.map +0 -1
  118. package/dist/generator/schemaGenerator.js +0 -299
  119. package/dist/generator/schemaGenerator.js.map +0 -1
  120. package/dist/generator/serviceGenerator.d.ts +0 -41
  121. package/dist/generator/serviceGenerator.d.ts.map +0 -1
  122. package/dist/generator/serviceGenerator.js +0 -296
  123. package/dist/generator/serviceGenerator.js.map +0 -1
  124. package/dist/generator/templateProcessor.d.ts +0 -245
  125. package/dist/generator/templateProcessor.d.ts.map +0 -1
  126. package/dist/generator/templateProcessor.js +0 -821
  127. package/dist/generator/templateProcessor.js.map +0 -1
  128. package/dist/generator/typeGenerator.d.ts +0 -9
  129. package/dist/generator/typeGenerator.d.ts.map +0 -1
  130. package/dist/generator/typeGenerator.js +0 -424
  131. package/dist/generator/typeGenerator.js.map +0 -1
  132. package/dist/generator/typeGenerator.test.d.ts +0 -2
  133. package/dist/generator/typeGenerator.test.d.ts.map +0 -1
  134. package/dist/generator/typeGenerator.test.js +0 -122
  135. package/dist/generator/typeGenerator.test.js.map +0 -1
  136. package/dist/guardrails/allowlist.d.ts +0 -45
  137. package/dist/guardrails/allowlist.d.ts.map +0 -1
  138. package/dist/guardrails/allowlist.js +0 -261
  139. package/dist/guardrails/allowlist.js.map +0 -1
  140. package/dist/guardrails/config.d.ts +0 -40
  141. package/dist/guardrails/config.d.ts.map +0 -1
  142. package/dist/guardrails/config.js +0 -174
  143. package/dist/guardrails/config.js.map +0 -1
  144. package/dist/guardrails/docs.d.ts +0 -24
  145. package/dist/guardrails/docs.d.ts.map +0 -1
  146. package/dist/guardrails/docs.js +0 -138
  147. package/dist/guardrails/docs.js.map +0 -1
  148. package/dist/guardrails/drift.d.ts +0 -23
  149. package/dist/guardrails/drift.d.ts.map +0 -1
  150. package/dist/guardrails/drift.js +0 -127
  151. package/dist/guardrails/drift.js.map +0 -1
  152. package/dist/guardrails/index.d.ts +0 -19
  153. package/dist/guardrails/index.d.ts.map +0 -1
  154. package/dist/guardrails/index.js +0 -23
  155. package/dist/guardrails/index.js.map +0 -1
  156. package/dist/guardrails/lint.d.ts +0 -20
  157. package/dist/guardrails/lint.d.ts.map +0 -1
  158. package/dist/guardrails/lint.js +0 -274
  159. package/dist/guardrails/lint.js.map +0 -1
  160. package/dist/guardrails/manifest.d.ts +0 -63
  161. package/dist/guardrails/manifest.d.ts.map +0 -1
  162. package/dist/guardrails/manifest.js +0 -299
  163. package/dist/guardrails/manifest.js.map +0 -1
  164. package/dist/guardrails/runner.d.ts +0 -43
  165. package/dist/guardrails/runner.d.ts.map +0 -1
  166. package/dist/guardrails/runner.js +0 -365
  167. package/dist/guardrails/runner.js.map +0 -1
  168. package/dist/guardrails/typecheck.d.ts +0 -15
  169. package/dist/guardrails/typecheck.d.ts.map +0 -1
  170. package/dist/guardrails/typecheck.js +0 -104
  171. package/dist/guardrails/typecheck.js.map +0 -1
  172. package/dist/guardrails/types.d.ts +0 -202
  173. package/dist/guardrails/types.d.ts.map +0 -1
  174. package/dist/guardrails/types.js +0 -8
  175. package/dist/guardrails/types.js.map +0 -1
  176. package/dist/index.d.ts.map +0 -1
  177. package/dist/index.js.map +0 -1
  178. package/dist/types.d.ts +0 -583
  179. package/dist/types.d.ts.map +0 -1
  180. package/dist/types.js +0 -305
  181. package/dist/types.js.map +0 -1
@@ -1,90 +0,0 @@
1
- /**
2
- * OpenAPI Overlay Processor
3
- *
4
- * Implements OpenAPI Overlay Specification for cross-cutting concerns.
5
- * Parses overlays and applies transformations to OpenAPI specs.
6
- */
7
- import type { OpenAPISpec, ParameterObject, ResponseObject } from '../types.js';
8
- export interface OverlaySpec {
9
- overlay: string;
10
- info: {
11
- title: string;
12
- version: string;
13
- };
14
- actions: OverlayAction[];
15
- }
16
- export interface OverlayAction {
17
- target: string;
18
- description?: string;
19
- update?: Record<string, unknown>;
20
- remove?: boolean;
21
- /** Explicit name for this overlay action (used for type generation) */
22
- 'x-micro-contracts-overlay-name'?: string;
23
- }
24
- export interface ExtensionInfo {
25
- /** Extension name (e.g., 'requireAuth', 'tenantIsolation') */
26
- name: string;
27
- /** Extension marker (e.g., 'x-middleware') */
28
- marker: string;
29
- /** Parameters injected by this extension */
30
- injectedParameters: ParameterObject[];
31
- /** Responses injected by this extension */
32
- injectedResponses: Record<string, ResponseObject>;
33
- }
34
- export interface OverlayResult {
35
- /** Transformed OpenAPI spec */
36
- spec: OpenAPISpec;
37
- /** Extension information extracted from overlays */
38
- extensionInfo: Map<string, ExtensionInfo>;
39
- /** List of applied overlays */
40
- appliedOverlays: string[];
41
- /** Application log */
42
- log: OverlayApplicationLog[];
43
- }
44
- export interface OverlayApplicationLog {
45
- overlay: string;
46
- target: string;
47
- path: string;
48
- method: string;
49
- changes: string[];
50
- }
51
- export interface OverlayConfig {
52
- /** Collision policy: error | warn | last-wins */
53
- collision?: 'error' | 'warn' | 'last-wins';
54
- /** Overlay files to apply in order */
55
- files: string[];
56
- }
57
- /**
58
- * Process overlays and apply to OpenAPI spec
59
- *
60
- * @param spec - Source OpenAPI spec
61
- * @param overlayConfig - Overlay configuration
62
- * @param basePath - Base path for resolving overlay file paths
63
- * @param specPath - Path to the source spec file (for $ref rebasing)
64
- */
65
- export declare function processOverlays(spec: OpenAPISpec, overlayConfig: OverlayConfig, basePath?: string, specPath?: string): OverlayResult;
66
- /**
67
- * Rebase $ref paths in an object from source directory to target directory
68
- *
69
- * @param obj - Object that may contain $ref properties
70
- * @param sourceDir - Directory where the source file is located (e.g., overlay or OpenAPI source)
71
- * @param targetDir - Directory where the output file will be written
72
- * @returns Object with rebased $ref paths
73
- */
74
- export declare function rebaseRefs<T>(obj: T, sourceDir?: string, targetDir?: string): T;
75
- /**
76
- * Generate TypeScript interfaces for overlays
77
- *
78
- * These interfaces are HTTP-agnostic. The HTTP layer (routes template)
79
- * extracts parameters from the request and passes them to overlay handlers.
80
- */
81
- export declare function generateExtensionInterfaces(extensionInfo: Map<string, ExtensionInfo>): string;
82
- /**
83
- * Load overlay configuration from micro-contracts config
84
- */
85
- export declare function loadOverlayConfig(configPath: string, moduleName: string): OverlayConfig | null;
86
- /**
87
- * Format overlay application log for console output
88
- */
89
- export declare function formatOverlayLog(result: OverlayResult): string;
90
- //# sourceMappingURL=overlayProcessor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlayProcessor.d.ts","sourceRoot":"","sources":["../../src/generator/overlayProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAmB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMjG,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,gCAAgC,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sBAAsB;IACtB,GAAG,EAAE,qBAAqB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3C,sCAAsC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,aAAa,EAC5B,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CA2Cf;AAwLD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAO/E;AAoJD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACxC,MAAM,CAqJR;AAoDD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,aAAa,GAAG,IAAI,CAoCtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAa9D"}
@@ -1,541 +0,0 @@
1
- /**
2
- * OpenAPI Overlay Processor
3
- *
4
- * Implements OpenAPI Overlay Specification for cross-cutting concerns.
5
- * Parses overlays and applies transformations to OpenAPI specs.
6
- */
7
- import fs from 'fs';
8
- import path from 'path';
9
- import yaml from 'js-yaml';
10
- // =============================================================================
11
- // Overlay Processor
12
- // =============================================================================
13
- /**
14
- * Process overlays and apply to OpenAPI spec
15
- *
16
- * @param spec - Source OpenAPI spec
17
- * @param overlayConfig - Overlay configuration
18
- * @param basePath - Base path for resolving overlay file paths
19
- * @param specPath - Path to the source spec file (for $ref rebasing)
20
- */
21
- export function processOverlays(spec, overlayConfig, basePath = process.cwd(), specPath) {
22
- const result = {
23
- spec: JSON.parse(JSON.stringify(spec)), // Deep clone
24
- extensionInfo: new Map(),
25
- appliedOverlays: [],
26
- log: [],
27
- };
28
- const collision = overlayConfig.collision || 'error';
29
- const injectedKeys = new Map();
30
- // Target directory for $ref rebasing (where transformed spec will be written)
31
- const targetDir = specPath ? path.dirname(path.resolve(basePath, specPath)) : undefined;
32
- for (const overlayFile of overlayConfig.files) {
33
- const overlayPath = path.resolve(basePath, overlayFile);
34
- if (!fs.existsSync(overlayPath)) {
35
- console.warn(`Overlay file not found: ${overlayPath}`);
36
- continue;
37
- }
38
- const overlayContent = fs.readFileSync(overlayPath, 'utf-8');
39
- const overlay = yaml.load(overlayContent);
40
- const overlayDir = path.dirname(overlayPath);
41
- result.appliedOverlays.push(overlayFile);
42
- for (const action of overlay.actions) {
43
- applyAction(result, overlay, action, overlayFile, collision, injectedKeys, overlayDir, targetDir);
44
- }
45
- }
46
- return result;
47
- }
48
- /**
49
- * Apply a single overlay action
50
- */
51
- function applyAction(result, overlay, action, overlayFile, collision, injectedKeys, overlayDir, targetDir) {
52
- const { target, update, remove } = action;
53
- // Parse the target JSONPath pattern
54
- const parsed = parseTarget(target);
55
- if (!parsed) {
56
- console.warn(`Invalid overlay target: ${target}`);
57
- return;
58
- }
59
- // Find matching operations
60
- const matches = findMatchingOperations(result.spec, parsed);
61
- for (const match of matches) {
62
- const { path: apiPath, method, operation } = match;
63
- const changes = [];
64
- if (update) {
65
- // Apply updates (parameters, responses)
66
- if (update.parameters) {
67
- const params = update.parameters;
68
- for (const param of params) {
69
- // Rebase $ref paths in parameter
70
- const rebasedParam = rebaseRefs(param, overlayDir, targetDir);
71
- const key = `${apiPath}:${method}:param:${rebasedParam.name}`;
72
- checkCollision(key, rebasedParam, overlayFile, collision, injectedKeys);
73
- if (!operation.parameters) {
74
- operation.parameters = [];
75
- }
76
- // Avoid duplicates
77
- const existing = operation.parameters.findIndex(p => !('$ref' in p) && p.name === rebasedParam.name && p.in === rebasedParam.in);
78
- if (existing >= 0) {
79
- operation.parameters[existing] = rebasedParam;
80
- }
81
- else {
82
- operation.parameters.push(rebasedParam);
83
- }
84
- changes.push(`+${rebasedParam.name} (${rebasedParam.in})`);
85
- }
86
- }
87
- if (update.responses) {
88
- const responses = update.responses;
89
- for (const [statusCode, response] of Object.entries(responses)) {
90
- // Rebase $ref paths in response
91
- const rebasedResponse = rebaseRefs(response, overlayDir, targetDir);
92
- const key = `${apiPath}:${method}:response:${statusCode}`;
93
- checkCollision(key, rebasedResponse, overlayFile, collision, injectedKeys);
94
- operation.responses[statusCode] = rebasedResponse;
95
- changes.push(`+${statusCode}`);
96
- }
97
- }
98
- for (const [key, value] of Object.entries(update)) {
99
- if (key === 'parameters' || key === 'responses')
100
- continue;
101
- const rebasedValue = rebaseRefs(value, overlayDir, targetDir);
102
- const collisionKey = `${apiPath}:${method}:${key}`;
103
- checkCollision(collisionKey, rebasedValue, overlayFile, collision, injectedKeys);
104
- operation[key] = rebasedValue;
105
- changes.push(`+${key}`);
106
- }
107
- }
108
- if (remove) {
109
- // Remove the operation (not commonly used, but supported)
110
- changes.push('REMOVED');
111
- }
112
- // Log the application
113
- result.log.push({
114
- overlay: overlayFile,
115
- target,
116
- path: apiPath,
117
- method,
118
- changes,
119
- });
120
- // Extract extension info
121
- extractExtensionInfo(result.extensionInfo, parsed, action);
122
- }
123
- }
124
- function parseTarget(target) {
125
- // Pattern: $.paths[*][*][?(@.x-ext contains 'value')]
126
- const containsMatch = target.match(/\$\.paths\[\*\]\[\*\]\[\?\(@\.(x-[a-z-]+)\s+contains\s+'([^']+)'\)\]/);
127
- if (containsMatch) {
128
- return {
129
- extensionMarker: containsMatch[1],
130
- extensionValue: containsMatch[2],
131
- };
132
- }
133
- // Pattern: $.paths[*][*][?(@.x-ext)]
134
- const existsMatch = target.match(/\$\.paths\[\*\]\[\*\]\[\?\(@\.(x-[a-z-]+)\)\]/);
135
- if (existsMatch) {
136
- return {
137
- extensionMarker: existsMatch[1],
138
- };
139
- }
140
- // Simple pattern: $.paths[*][*]
141
- if (target === '$.paths[*][*]') {
142
- return {};
143
- }
144
- return null;
145
- }
146
- function findMatchingOperations(spec, parsed) {
147
- const matches = [];
148
- const methods = ['get', 'post', 'put', 'patch', 'delete'];
149
- for (const [apiPath, pathItem] of Object.entries(spec.paths)) {
150
- for (const method of methods) {
151
- const operation = pathItem[method];
152
- if (!operation)
153
- continue;
154
- // Check if operation matches the target
155
- if (parsed.extensionMarker) {
156
- const extValue = operation[parsed.extensionMarker];
157
- if (!extValue)
158
- continue;
159
- if (parsed.extensionValue) {
160
- // Check if array contains the value
161
- if (Array.isArray(extValue)) {
162
- if (!extValue.includes(parsed.extensionValue))
163
- continue;
164
- }
165
- else if (extValue !== parsed.extensionValue) {
166
- continue;
167
- }
168
- }
169
- }
170
- matches.push({ path: apiPath, method, operation });
171
- }
172
- }
173
- return matches;
174
- }
175
- /**
176
- * Rebase $ref paths in an object from source directory to target directory
177
- *
178
- * @param obj - Object that may contain $ref properties
179
- * @param sourceDir - Directory where the source file is located (e.g., overlay or OpenAPI source)
180
- * @param targetDir - Directory where the output file will be written
181
- * @returns Object with rebased $ref paths
182
- */
183
- export function rebaseRefs(obj, sourceDir, targetDir) {
184
- if (!sourceDir || !targetDir) {
185
- return obj;
186
- }
187
- // Deep clone and rebase
188
- return rebaseRefsRecursive(JSON.parse(JSON.stringify(obj)), sourceDir, targetDir);
189
- }
190
- function rebaseRefsRecursive(obj, overlayDir, targetDir) {
191
- if (obj === null || obj === undefined) {
192
- return obj;
193
- }
194
- if (Array.isArray(obj)) {
195
- return obj.map(item => rebaseRefsRecursive(item, overlayDir, targetDir));
196
- }
197
- if (typeof obj === 'object') {
198
- const result = {};
199
- for (const [key, value] of Object.entries(obj)) {
200
- if (key === '$ref' && typeof value === 'string') {
201
- // Rebase the $ref path
202
- result[key] = rebaseRefPath(value, overlayDir, targetDir);
203
- }
204
- else {
205
- result[key] = rebaseRefsRecursive(value, overlayDir, targetDir);
206
- }
207
- }
208
- return result;
209
- }
210
- return obj;
211
- }
212
- /**
213
- * Rebase a single $ref path from overlay directory to target directory
214
- *
215
- * @param refPath - The $ref value (e.g., '../openapi/problem-details.yaml#/components/schemas/X')
216
- * @param overlayDir - Directory where the overlay file is located
217
- * @param targetDir - Directory where the transformed spec will be written
218
- * @returns Rebased $ref path
219
- */
220
- function rebaseRefPath(refPath, overlayDir, targetDir) {
221
- // Handle internal references (start with #)
222
- if (refPath.startsWith('#')) {
223
- return refPath;
224
- }
225
- // Split $ref into file path and JSON pointer
226
- const [filePath, jsonPointer] = refPath.split('#');
227
- // If no file path, it's a pure JSON pointer
228
- if (!filePath) {
229
- return refPath;
230
- }
231
- // Resolve the absolute path of the referenced file
232
- const absoluteRefPath = path.resolve(overlayDir, filePath);
233
- // Calculate the relative path from target directory
234
- const relativePath = path.relative(targetDir, absoluteRefPath);
235
- // Normalize to forward slashes (for cross-platform compatibility)
236
- const normalizedPath = relativePath.split(path.sep).join('/');
237
- // Reconstruct the $ref
238
- return jsonPointer ? `${normalizedPath}#${jsonPointer}` : normalizedPath;
239
- }
240
- /**
241
- * Check for collision and handle according to policy
242
- */
243
- function checkCollision(key, content, overlayFile, collision, injectedKeys) {
244
- const existing = injectedKeys.get(key);
245
- if (existing) {
246
- const contentStr = JSON.stringify(content);
247
- const existingStr = JSON.stringify(existing.content);
248
- if (contentStr === existingStr) {
249
- // Identical content - idempotent, allow
250
- return;
251
- }
252
- const message = `Overlay collision at ${key}: ${existing.overlay} vs ${overlayFile}`;
253
- switch (collision) {
254
- case 'error':
255
- throw new Error(message);
256
- case 'warn':
257
- console.warn(`Warning: ${message}`);
258
- break;
259
- case 'last-wins':
260
- // Just overwrite
261
- break;
262
- }
263
- }
264
- injectedKeys.set(key, { overlay: overlayFile, content });
265
- }
266
- /**
267
- * Extract extension information from overlay action
268
- */
269
- function extractExtensionInfo(extensionInfo, parsed, action) {
270
- const { update } = action;
271
- if (!parsed.extensionMarker || !update)
272
- return;
273
- // Use explicit x-micro-contracts-overlay-name if provided, otherwise fall back to parsed value
274
- const overlayName = action['x-micro-contracts-overlay-name'] || parsed.extensionValue;
275
- if (!overlayName)
276
- return;
277
- const key = `${parsed.extensionMarker}:${overlayName}`;
278
- if (!extensionInfo.has(key)) {
279
- extensionInfo.set(key, {
280
- name: overlayName,
281
- marker: parsed.extensionMarker,
282
- injectedParameters: [],
283
- injectedResponses: {},
284
- });
285
- }
286
- const info = extensionInfo.get(key);
287
- if (update.parameters) {
288
- const params = update.parameters;
289
- for (const param of params) {
290
- // Avoid duplicates
291
- if (!info.injectedParameters.find(p => p.name === param.name)) {
292
- info.injectedParameters.push(param);
293
- }
294
- }
295
- }
296
- if (update.responses) {
297
- const responses = update.responses;
298
- Object.assign(info.injectedResponses, responses);
299
- }
300
- }
301
- // =============================================================================
302
- // Overlay Interface Generation
303
- // =============================================================================
304
- /**
305
- * Generate TypeScript interfaces for overlays
306
- *
307
- * These interfaces are HTTP-agnostic. The HTTP layer (routes template)
308
- * extracts parameters from the request and passes them to overlay handlers.
309
- */
310
- export function generateExtensionInterfaces(extensionInfo) {
311
- const lines = [];
312
- lines.push('/**');
313
- lines.push(' * Overlay Interfaces');
314
- lines.push(' * Auto-generated from overlay specifications');
315
- lines.push(' * DO NOT EDIT MANUALLY');
316
- lines.push(' * ');
317
- lines.push(' * These interfaces are HTTP-agnostic. Overlay handlers receive');
318
- lines.push(' * extracted parameters and return success/failure with optional context.');
319
- lines.push(' */');
320
- lines.push('');
321
- // Generate common result type
322
- lines.push('// =============================================================================');
323
- lines.push('// Common Types');
324
- lines.push('// =============================================================================');
325
- lines.push('');
326
- lines.push('/**');
327
- lines.push(' * Result returned by overlay handlers');
328
- lines.push(' * - success: true → continue to next handler/service');
329
- lines.push(' * - success: false → return error response');
330
- lines.push(' */');
331
- lines.push('export interface OverlayResult<TContext = unknown> {');
332
- lines.push(' success: boolean;');
333
- lines.push(' error?: {');
334
- lines.push(' status: number;');
335
- lines.push(' message: string;');
336
- lines.push(' code?: string;');
337
- lines.push(' };');
338
- lines.push(' /** Context passed to subsequent handlers and service */');
339
- lines.push(' context?: TContext;');
340
- lines.push('}');
341
- lines.push('');
342
- // Group by marker
343
- const byMarker = new Map();
344
- for (const info of extensionInfo.values()) {
345
- if (!byMarker.has(info.marker)) {
346
- byMarker.set(info.marker, []);
347
- }
348
- byMarker.get(info.marker).push(info);
349
- }
350
- // Generate interfaces for each marker
351
- for (const [marker, extensions] of byMarker) {
352
- const markerName = markerToTypeName(marker);
353
- lines.push(`// =============================================================================`);
354
- lines.push(`// ${markerName} Overlays`);
355
- lines.push(`// =============================================================================`);
356
- lines.push('');
357
- // Generate value type
358
- const values = extensions.map(e => `'${e.name}'`).join(' | ');
359
- lines.push(`export type ${markerName}Value = ${values};`);
360
- lines.push('');
361
- // Generate input and handler types for each extension
362
- for (const ext of extensions) {
363
- const inputName = `${capitalize(ext.name)}OverlayInput`;
364
- const handlerName = `${capitalize(ext.name)}Overlay`;
365
- // Generate input type from injected parameters
366
- lines.push(`/**`);
367
- lines.push(` * Input for ${ext.name} overlay`);
368
- lines.push(` * Parameters extracted from HTTP request by the routes layer`);
369
- lines.push(` */`);
370
- lines.push(`export interface ${inputName} {`);
371
- if (ext.injectedParameters.length > 0) {
372
- for (const param of ext.injectedParameters) {
373
- const optional = param.required ? '' : '?';
374
- const tsType = parameterToTsType(param);
375
- if (param.description) {
376
- lines.push(` /** ${param.description} */`);
377
- }
378
- // Use OpenAPI parameter name as-is (quoted for names with special chars)
379
- lines.push(` '${param.name}'${optional}: ${tsType};`);
380
- }
381
- }
382
- else {
383
- // No parameters - empty input
384
- lines.push(` // No parameters required`);
385
- }
386
- lines.push(`}`);
387
- lines.push('');
388
- // Generate handler type
389
- lines.push(`/**`);
390
- lines.push(` * Handler for ${ext.name} overlay`);
391
- if (Object.keys(ext.injectedResponses).length > 0) {
392
- lines.push(` * May return errors: ${Object.keys(ext.injectedResponses).join(', ')}`);
393
- }
394
- lines.push(` */`);
395
- lines.push(`export type ${handlerName} = (input: ${inputName}) => Promise<OverlayResult>;`);
396
- lines.push('');
397
- }
398
- // Generate registry interface
399
- const registryName = `${markerName}Registry`;
400
- lines.push(`/**`);
401
- lines.push(` * Registry interface for ${marker} overlay handlers`);
402
- lines.push(` */`);
403
- lines.push(`export interface ${registryName} {`);
404
- for (const ext of extensions) {
405
- const handlerName = `${capitalize(ext.name)}Overlay`;
406
- lines.push(` ${ext.name}: ${handlerName};`);
407
- }
408
- lines.push(`}`);
409
- lines.push('');
410
- }
411
- // Generate unified OverlayRegistry (combines all markers)
412
- lines.push('// =============================================================================');
413
- lines.push('// Unified Overlay Registry');
414
- lines.push('// =============================================================================');
415
- lines.push('');
416
- lines.push('/**');
417
- lines.push(' * Combined registry interface for all overlay handlers');
418
- lines.push(' * Use this when a single handler registry is needed');
419
- lines.push(' */');
420
- lines.push('export interface OverlayRegistry {');
421
- for (const extensions of byMarker.values()) {
422
- for (const ext of extensions) {
423
- const handlerName = `${capitalize(ext.name)}Overlay`;
424
- lines.push(` ${ext.name}: ${handlerName};`);
425
- }
426
- }
427
- lines.push('}');
428
- lines.push('');
429
- // Generate combined extension info type
430
- lines.push('// =============================================================================');
431
- lines.push('// Overlay Info (for templates)');
432
- lines.push('// =============================================================================');
433
- lines.push('');
434
- lines.push('export interface OverlayInfoMap {');
435
- for (const [key, info] of extensionInfo) {
436
- lines.push(` '${key}': {`);
437
- lines.push(` name: '${info.name}';`);
438
- lines.push(` marker: '${info.marker}';`);
439
- lines.push(` injectedParameters: ${JSON.stringify(info.injectedParameters.map(p => p.name))};`);
440
- lines.push(` injectedResponses: ${JSON.stringify(Object.keys(info.injectedResponses))};`);
441
- lines.push(` };`);
442
- }
443
- lines.push('}');
444
- lines.push('');
445
- return lines.join('\n');
446
- }
447
- /**
448
- * Convert parameter to TypeScript type
449
- */
450
- function parameterToTsType(param) {
451
- if (!param.schema)
452
- return 'unknown';
453
- const schema = param.schema;
454
- switch (schema.type) {
455
- case 'string':
456
- return 'string';
457
- case 'integer':
458
- case 'number':
459
- return 'number';
460
- case 'boolean':
461
- return 'boolean';
462
- case 'array':
463
- return 'unknown[]';
464
- default:
465
- return 'unknown';
466
- }
467
- }
468
- /**
469
- * Convert string to camelCase
470
- */
471
- function camelCase(str) {
472
- return str
473
- .replace(/[-_](.)/g, (_, c) => c.toUpperCase())
474
- .replace(/^./, c => c.toLowerCase());
475
- }
476
- /**
477
- * Convert marker like 'x-middleware' to type name like 'Middleware'
478
- */
479
- function markerToTypeName(marker) {
480
- return marker
481
- .replace(/^x-/, '')
482
- .split('-')
483
- .map(capitalize)
484
- .join('');
485
- }
486
- function capitalize(str) {
487
- return str.charAt(0).toUpperCase() + str.slice(1);
488
- }
489
- // =============================================================================
490
- // Utility Functions
491
- // =============================================================================
492
- /**
493
- * Load overlay configuration from micro-contracts config
494
- */
495
- export function loadOverlayConfig(configPath, moduleName) {
496
- if (!fs.existsSync(configPath))
497
- return null;
498
- const content = fs.readFileSync(configPath, 'utf-8');
499
- const config = yaml.load(content);
500
- const files = [];
501
- // Get shared overlays from defaults
502
- const defaults = config.defaults;
503
- if (defaults?.overlays) {
504
- const overlays = defaults.overlays;
505
- if (Array.isArray(overlays)) {
506
- files.push(...overlays);
507
- }
508
- else if (overlays.shared) {
509
- files.push(...overlays.shared);
510
- }
511
- }
512
- // Get module-specific overlays
513
- const modules = config.modules;
514
- const moduleConfig = modules?.[moduleName];
515
- if (moduleConfig?.overlays) {
516
- const overlays = moduleConfig.overlays;
517
- files.push(...overlays);
518
- }
519
- if (files.length === 0)
520
- return null;
521
- const collision = defaults?.overlays?.collision;
522
- return {
523
- collision: collision || 'error',
524
- files,
525
- };
526
- }
527
- /**
528
- * Format overlay application log for console output
529
- */
530
- export function formatOverlayLog(result) {
531
- const lines = [];
532
- for (const overlay of result.appliedOverlays) {
533
- lines.push(`[overlay] Applying ${overlay}`);
534
- const overlayLogs = result.log.filter(l => l.overlay === overlay);
535
- for (const log of overlayLogs) {
536
- lines.push(` → ${log.path} ${log.method.toUpperCase()}: ${log.changes.join(', ')}`);
537
- }
538
- }
539
- return lines.join('\n');
540
- }
541
- //# sourceMappingURL=overlayProcessor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlayProcessor.js","sourceRoot":"","sources":["../../src/generator/overlayProcessor.ts"],"names":[],"mappings":"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"}