@redocly/openapi-core 0.0.0-snapshot.1767804621 → 0.0.0-snapshot.1767807792
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/lib/config/load.d.ts.map +1 -1
- package/lib/config/load.js +75 -10
- package/lib/config/load.js.map +1 -1
- package/package.json +1 -1
package/lib/config/load.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,YAAY,EAGZ,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,YAAY,EAGZ,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiHrD,wBAAsB,UAAU,CAC9B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,YAAY,CAAC;CAC/B,GACL,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI3D;AAED,KAAK,mBAAmB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,YAAY,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,EACpC,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAE,mBAAwB,GAC5D,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
|
package/lib/config/load.js
CHANGED
|
@@ -5,29 +5,94 @@ import { Config } from './config.js';
|
|
|
5
5
|
import { BaseResolver, makeDocumentFromString, } from '../resolve.js';
|
|
6
6
|
import { CONFIG_FILE_NAME, IGNORE_FILE } from './constants.js';
|
|
7
7
|
import { isAbsoluteUrl } from '../ref-utils.js';
|
|
8
|
-
|
|
8
|
+
// Check if path is a URL (http://, https://, or file://)
|
|
9
|
+
function isUrl(ref) {
|
|
10
|
+
return ref.startsWith('http://') || ref.startsWith('https://') || ref.startsWith('file://');
|
|
11
|
+
}
|
|
12
|
+
// Get directory from path or URL
|
|
13
|
+
function getConfigDir(configPath) {
|
|
14
|
+
if (configPath.startsWith('file://')) {
|
|
15
|
+
// Handle file:// URLs using URL API
|
|
16
|
+
const url = new URL(configPath);
|
|
17
|
+
const pathPart = url.pathname;
|
|
18
|
+
// Check if it's a yaml file or directory
|
|
19
|
+
if (pathPart.endsWith('.yaml') || pathPart.endsWith('.yml')) {
|
|
20
|
+
url.pathname = pathPart.substring(0, pathPart.lastIndexOf('/'));
|
|
21
|
+
}
|
|
22
|
+
return url.href;
|
|
23
|
+
}
|
|
24
|
+
else if (isAbsoluteUrl(configPath)) {
|
|
25
|
+
// Handle http/https URLs
|
|
26
|
+
if (configPath.endsWith('.yaml') || configPath.endsWith('.yml')) {
|
|
27
|
+
return configPath.substring(0, configPath.lastIndexOf('/'));
|
|
28
|
+
}
|
|
29
|
+
return configPath;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Handle file paths
|
|
33
|
+
if (configPath.endsWith('.yaml') || configPath.endsWith('.yml')) {
|
|
34
|
+
return path.dirname(configPath);
|
|
35
|
+
}
|
|
36
|
+
return configPath;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Join path or URL with ignore file name
|
|
40
|
+
function joinIgnorePath(configDir, ignoreFile) {
|
|
41
|
+
if (isUrl(configDir)) {
|
|
42
|
+
const separator = configDir.endsWith('/') ? '' : '/';
|
|
43
|
+
return configDir + separator + ignoreFile;
|
|
44
|
+
}
|
|
45
|
+
return path.join(configDir, ignoreFile);
|
|
46
|
+
}
|
|
9
47
|
async function loadIgnoreFile(configPath, resolver) {
|
|
10
|
-
|
|
48
|
+
console.log('[loadIgnoreFile] configPath:', configPath);
|
|
49
|
+
console.log('[loadIgnoreFile] typeof configPath:', typeof configPath);
|
|
50
|
+
if (!configPath) {
|
|
51
|
+
console.log('[loadIgnoreFile] configPath is falsy, returning undefined');
|
|
11
52
|
return undefined;
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
53
|
+
}
|
|
54
|
+
const configDir = getConfigDir(configPath);
|
|
55
|
+
const ignorePath = joinIgnorePath(configDir, IGNORE_FILE);
|
|
56
|
+
console.log('[loadIgnoreFile] configDir:', configDir);
|
|
57
|
+
console.log('[loadIgnoreFile] ignorePath:', ignorePath);
|
|
58
|
+
console.log('[loadIgnoreFile] isUrl(ignorePath):', isUrl(ignorePath));
|
|
59
|
+
// For local file system (not URL), check if file exists before loading
|
|
60
|
+
const hasFs = !!fs?.existsSync;
|
|
61
|
+
console.log('[loadIgnoreFile] fs?.existsSync available:', hasFs);
|
|
62
|
+
if (hasFs && !isUrl(ignorePath) && !fs.existsSync(ignorePath)) {
|
|
63
|
+
console.log('[loadIgnoreFile] file does not exist locally, returning undefined');
|
|
15
64
|
return undefined;
|
|
16
65
|
}
|
|
17
|
-
console.log('
|
|
66
|
+
console.log('[loadIgnoreFile] calling resolver.resolveDocument...');
|
|
18
67
|
const ignoreDocument = await resolver.resolveDocument(null, ignorePath, true);
|
|
19
|
-
console.log('
|
|
68
|
+
console.log('[loadIgnoreFile] ignoreDocument instanceof Error:', ignoreDocument instanceof Error);
|
|
69
|
+
console.log('[loadIgnoreFile] ignoreDocument.parsed:', ignoreDocument instanceof Error ? 'N/A' : !!ignoreDocument.parsed);
|
|
20
70
|
if (ignoreDocument instanceof Error || !ignoreDocument.parsed) {
|
|
71
|
+
console.log('[loadIgnoreFile] ignoreDocument is Error or no parsed, returning undefined');
|
|
21
72
|
return undefined;
|
|
22
73
|
}
|
|
74
|
+
console.log('[loadIgnoreFile] successfully loaded ignore file');
|
|
23
75
|
const ignore = (ignoreDocument.parsed || {});
|
|
76
|
+
console.log('[loadIgnoreFile] ignore keys:', Object.keys(ignore));
|
|
24
77
|
for (const fileName of Object.keys(ignore)) {
|
|
25
|
-
|
|
26
|
-
|
|
78
|
+
let resolvedFileName;
|
|
79
|
+
if (isUrl(fileName)) {
|
|
80
|
+
resolvedFileName = fileName;
|
|
81
|
+
}
|
|
82
|
+
else if (isUrl(configDir)) {
|
|
83
|
+
// For file:// or http(s):// URLs, join properly
|
|
84
|
+
const separator = configDir.endsWith('/') ? '' : '/';
|
|
85
|
+
resolvedFileName = configDir + separator + fileName;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
resolvedFileName = path.resolve(configDir, fileName);
|
|
89
|
+
}
|
|
90
|
+
console.log('[loadIgnoreFile] resolving fileName:', fileName, '->', resolvedFileName);
|
|
91
|
+
ignore[resolvedFileName] = ignore[fileName];
|
|
27
92
|
for (const ruleId of Object.keys(ignore[fileName])) {
|
|
28
93
|
ignore[fileName][ruleId] = new Set(ignore[fileName][ruleId]);
|
|
29
94
|
}
|
|
30
|
-
if (
|
|
95
|
+
if (resolvedFileName !== fileName) {
|
|
31
96
|
delete ignore[fileName];
|
|
32
97
|
}
|
|
33
98
|
}
|
package/lib/config/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|