micro-contracts 0.14.1 → 0.14.3
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/cli-contract.yaml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputHash.d.ts","sourceRoot":"","sources":["../../src/generator/inputHash.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"inputHash.d.ts","sourceRoot":"","sources":["../../src/generator/inputHash.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA+DrD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAuDV;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAeR"}
|
|
@@ -9,8 +9,63 @@
|
|
|
9
9
|
import fs from 'fs';
|
|
10
10
|
import path from 'path';
|
|
11
11
|
import crypto from 'crypto';
|
|
12
|
+
import YAML from 'yaml';
|
|
12
13
|
import { resolveModuleConfig } from '../types.js';
|
|
13
14
|
import { resolveTemplatePath } from './templateProcessor.js';
|
|
15
|
+
/**
|
|
16
|
+
* Recursively walk a parsed YAML/JSON structure and collect absolute
|
|
17
|
+
* paths of files referenced by external `$ref` values (e.g.
|
|
18
|
+
* `../../_shared/openapi/problem-details.yaml#/components/...`).
|
|
19
|
+
* Follows transitive references so that indirectly referenced files
|
|
20
|
+
* are also included.
|
|
21
|
+
*/
|
|
22
|
+
function collectExternalRefs(value, baseDir, visited) {
|
|
23
|
+
if (value === null || typeof value !== 'object')
|
|
24
|
+
return;
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
for (const item of value)
|
|
27
|
+
collectExternalRefs(item, baseDir, visited);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const obj = value;
|
|
31
|
+
if (typeof obj['$ref'] === 'string') {
|
|
32
|
+
const ref = obj['$ref'];
|
|
33
|
+
const filePart = ref.split('#')[0];
|
|
34
|
+
if (filePart) {
|
|
35
|
+
const absPath = path.resolve(baseDir, filePart);
|
|
36
|
+
if (!visited.has(absPath) && fs.existsSync(absPath)) {
|
|
37
|
+
visited.add(absPath);
|
|
38
|
+
try {
|
|
39
|
+
const raw = fs.readFileSync(absPath, 'utf8');
|
|
40
|
+
const parsed = YAML.parse(raw);
|
|
41
|
+
collectExternalRefs(parsed, path.dirname(absPath), visited);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// unparseable — file is still tracked by its content hash
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const v of Object.values(obj)) {
|
|
50
|
+
collectExternalRefs(v, baseDir, visited);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse a YAML/JSON file and collect all externally-referenced file
|
|
55
|
+
* paths (via `$ref`) transitively.
|
|
56
|
+
*/
|
|
57
|
+
function collectRefsFromFile(filePath) {
|
|
58
|
+
try {
|
|
59
|
+
const raw = fs.readFileSync(filePath, 'utf8');
|
|
60
|
+
const parsed = YAML.parse(raw);
|
|
61
|
+
const refFiles = new Set();
|
|
62
|
+
collectExternalRefs(parsed, path.dirname(filePath), refFiles);
|
|
63
|
+
return [...refFiles];
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
14
69
|
/**
|
|
15
70
|
* Collect every input file path that can affect generation output.
|
|
16
71
|
*
|
|
@@ -21,16 +76,20 @@ export function collectInputFiles(config, configPath) {
|
|
|
21
76
|
files.add(path.resolve(configPath));
|
|
22
77
|
for (const [moduleName, moduleConfig] of Object.entries(config.modules)) {
|
|
23
78
|
const resolved = resolveModuleConfig(moduleName, moduleConfig, config.defaults);
|
|
24
|
-
// OpenAPI spec
|
|
79
|
+
// OpenAPI spec + transitive $ref targets
|
|
25
80
|
const openapiPath = path.resolve(resolved.openapi);
|
|
26
81
|
if (fs.existsSync(openapiPath)) {
|
|
27
82
|
files.add(openapiPath);
|
|
83
|
+
for (const ref of collectRefsFromFile(openapiPath))
|
|
84
|
+
files.add(ref);
|
|
28
85
|
}
|
|
29
|
-
// Overlays
|
|
86
|
+
// Overlays + their transitive $ref targets
|
|
30
87
|
for (const overlay of resolved.overlays) {
|
|
31
88
|
const overlayPath = path.resolve(overlay);
|
|
32
89
|
if (fs.existsSync(overlayPath)) {
|
|
33
90
|
files.add(overlayPath);
|
|
91
|
+
for (const ref of collectRefsFromFile(overlayPath))
|
|
92
|
+
files.add(ref);
|
|
34
93
|
}
|
|
35
94
|
}
|
|
36
95
|
// Templates from outputs (new system)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputHash.js","sourceRoot":"","sources":["../../src/generator/inputHash.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"inputHash.js","sourceRoot":"","sources":["../../src/generator/inputHash.ts"],"names":[],"mappings":"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"}
|
package/docs/cli-reference.md
CHANGED
package/package.json
CHANGED