@apidevtools/json-schema-ref-parser 11.8.2 → 11.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.
- package/README.md +3 -3
- package/dist/lib/dereference.js +21 -0
- package/dist/lib/options.d.ts +10 -0
- package/lib/dereference.ts +24 -0
- package/lib/options.ts +10 -0
- package/lib/util/errors.ts +1 -1
- package/package.json +1 -1
- package/cjs/bundle.js +0 -304
- package/cjs/dereference.js +0 -258
- package/cjs/index.js +0 -603
- package/cjs/normalize-args.js +0 -64
- package/cjs/options.js +0 -125
- package/cjs/package.json +0 -3
- package/cjs/parse.js +0 -338
- package/cjs/parsers/binary.js +0 -54
- package/cjs/parsers/json.js +0 -199
- package/cjs/parsers/text.js +0 -61
- package/cjs/parsers/yaml.js +0 -239
- package/cjs/pointer.js +0 -290
- package/cjs/ref.js +0 -333
- package/cjs/refs.js +0 -214
- package/cjs/resolve-external.js +0 -333
- package/cjs/resolvers/file.js +0 -106
- package/cjs/resolvers/http.js +0 -184
- package/cjs/util/errors.js +0 -401
- package/cjs/util/plugins.js +0 -159
- package/cjs/util/projectDir.cjs +0 -6
- package/cjs/util/url.js +0 -228
package/cjs/dereference.js
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _refJs = /*#__PURE__*/ _interopRequireDefault(require("./ref.js"));
|
|
12
|
-
var _pointerJs = /*#__PURE__*/ _interopRequireDefault(require("./pointer.js"));
|
|
13
|
-
var _ono = require("@jsdevtools/ono");
|
|
14
|
-
var _urlJs = /*#__PURE__*/ _interopRequireWildcard(require("./util/url.js"));
|
|
15
|
-
function _interopRequireDefault(obj) {
|
|
16
|
-
return obj && obj.__esModule ? obj : {
|
|
17
|
-
default: obj
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
21
|
-
if (typeof WeakMap !== "function") return null;
|
|
22
|
-
var cacheBabelInterop = new WeakMap();
|
|
23
|
-
var cacheNodeInterop = new WeakMap();
|
|
24
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
25
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
26
|
-
})(nodeInterop);
|
|
27
|
-
}
|
|
28
|
-
function _interopRequireWildcard(obj, nodeInterop) {
|
|
29
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
30
|
-
return obj;
|
|
31
|
-
}
|
|
32
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
33
|
-
return {
|
|
34
|
-
default: obj
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
38
|
-
if (cache && cache.has(obj)) {
|
|
39
|
-
return cache.get(obj);
|
|
40
|
-
}
|
|
41
|
-
var newObj = {};
|
|
42
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
43
|
-
for(var key in obj){
|
|
44
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
45
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
46
|
-
if (desc && (desc.get || desc.set)) {
|
|
47
|
-
Object.defineProperty(newObj, key, desc);
|
|
48
|
-
} else {
|
|
49
|
-
newObj[key] = obj[key];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
newObj.default = obj;
|
|
54
|
-
if (cache) {
|
|
55
|
-
cache.set(obj, newObj);
|
|
56
|
-
}
|
|
57
|
-
return newObj;
|
|
58
|
-
}
|
|
59
|
-
var _default = dereference;
|
|
60
|
-
/**
|
|
61
|
-
* Crawls the JSON schema, finds all JSON references, and dereferences them.
|
|
62
|
-
* This method mutates the JSON schema object, replacing JSON references with their resolved value.
|
|
63
|
-
*
|
|
64
|
-
* @param {$RefParser} parser
|
|
65
|
-
* @param {$RefParserOptions} options
|
|
66
|
-
*/ function dereference(parser, options) {
|
|
67
|
-
// console.log('Dereferencing $ref pointers in %s', parser.$refs._root$Ref.path);
|
|
68
|
-
var dereferenced = crawl(parser.schema, parser.$refs._root$Ref.path, "#", new Set(), new Set(), new Map(), parser.$refs, options);
|
|
69
|
-
parser.$refs.circular = dereferenced.circular;
|
|
70
|
-
parser.schema = dereferenced.value;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Recursively crawls the given value, and dereferences any JSON references.
|
|
74
|
-
*
|
|
75
|
-
* @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.
|
|
76
|
-
* @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash
|
|
77
|
-
* @param {string} pathFromRoot - The path of `obj` from the schema root
|
|
78
|
-
* @param {Set<object>} parents - An array of the parent objects that have already been dereferenced
|
|
79
|
-
* @param {Set<object>} processedObjects - An array of all the objects that have already been processed
|
|
80
|
-
* @param {Map<string,object>} dereferencedCache - An map of all the dereferenced objects
|
|
81
|
-
* @param {$Refs} $refs
|
|
82
|
-
* @param {$RefParserOptions} options
|
|
83
|
-
* @returns {{value: object, circular: boolean}}
|
|
84
|
-
*/ function crawl(obj, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options) {
|
|
85
|
-
var dereferenced;
|
|
86
|
-
var result = {
|
|
87
|
-
value: obj,
|
|
88
|
-
circular: false
|
|
89
|
-
};
|
|
90
|
-
var isExcludedPath = options.dereference.excludedPathMatcher;
|
|
91
|
-
if (options.dereference.circular === "ignore" || !processedObjects.has(obj)) {
|
|
92
|
-
if (obj && typeof obj === "object" && !ArrayBuffer.isView(obj) && !isExcludedPath(pathFromRoot)) {
|
|
93
|
-
parents.add(obj);
|
|
94
|
-
processedObjects.add(obj);
|
|
95
|
-
if (_refJs.default.isAllowed$Ref(obj, options)) {
|
|
96
|
-
dereferenced = dereference$Ref(obj, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options);
|
|
97
|
-
result.circular = dereferenced.circular;
|
|
98
|
-
result.value = dereferenced.value;
|
|
99
|
-
} else {
|
|
100
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
101
|
-
try {
|
|
102
|
-
for(var _iterator = Object.keys(obj)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
103
|
-
var key = _step.value;
|
|
104
|
-
var keyPath = _pointerJs.default.join(path, key);
|
|
105
|
-
var keyPathFromRoot = _pointerJs.default.join(pathFromRoot, key);
|
|
106
|
-
if (isExcludedPath(keyPathFromRoot)) {
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
var value = obj[key];
|
|
110
|
-
var circular = false;
|
|
111
|
-
if (_refJs.default.isAllowed$Ref(value, options)) {
|
|
112
|
-
dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, processedObjects, dereferencedCache, $refs, options);
|
|
113
|
-
circular = dereferenced.circular;
|
|
114
|
-
// Avoid pointless mutations; breaks frozen objects to no profit
|
|
115
|
-
if (obj[key] !== dereferenced.value) {
|
|
116
|
-
obj[key] = dereferenced.value;
|
|
117
|
-
if (options.dereference.onDereference) {
|
|
118
|
-
options.dereference.onDereference(value.$ref, obj[key]);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
} else {
|
|
122
|
-
if (!parents.has(value)) {
|
|
123
|
-
dereferenced = crawl(value, keyPath, keyPathFromRoot, parents, processedObjects, dereferencedCache, $refs, options);
|
|
124
|
-
circular = dereferenced.circular;
|
|
125
|
-
// Avoid pointless mutations; breaks frozen objects to no profit
|
|
126
|
-
if (obj[key] !== dereferenced.value) {
|
|
127
|
-
obj[key] = dereferenced.value;
|
|
128
|
-
}
|
|
129
|
-
} else {
|
|
130
|
-
circular = foundCircularReference(keyPath, $refs, options);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// Set the "isCircular" flag if this or any other property is circular
|
|
134
|
-
result.circular = result.circular || circular;
|
|
135
|
-
}
|
|
136
|
-
} catch (err) {
|
|
137
|
-
_didIteratorError = true;
|
|
138
|
-
_iteratorError = err;
|
|
139
|
-
} finally{
|
|
140
|
-
try {
|
|
141
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
142
|
-
_iterator.return();
|
|
143
|
-
}
|
|
144
|
-
} finally{
|
|
145
|
-
if (_didIteratorError) {
|
|
146
|
-
throw _iteratorError;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
parents.delete(obj);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Dereferences the given JSON Reference, and then crawls the resulting value.
|
|
158
|
-
*
|
|
159
|
-
* @param {{$ref: string}} $ref - The JSON Reference to resolve
|
|
160
|
-
* @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash
|
|
161
|
-
* @param {string} pathFromRoot - The path of `$ref` from the schema root
|
|
162
|
-
* @param {Set<object>} parents - An array of the parent objects that have already been dereferenced
|
|
163
|
-
* @param {Set<object>} processedObjects - An array of all the objects that have already been dereferenced
|
|
164
|
-
* @param {Map<string,object>} dereferencedCache - An map of all the dereferenced objects
|
|
165
|
-
* @param {$Refs} $refs
|
|
166
|
-
* @param {$RefParserOptions} options
|
|
167
|
-
* @returns {{value: object, circular: boolean}}
|
|
168
|
-
*/ function dereference$Ref($ref, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options) {
|
|
169
|
-
// console.log('Dereferencing $ref pointer "%s" at %s', $ref.$ref, path);
|
|
170
|
-
var $refPath = _urlJs.resolve(path, $ref.$ref);
|
|
171
|
-
var cache = dereferencedCache.get($refPath);
|
|
172
|
-
if (cache) {
|
|
173
|
-
var refKeys = Object.keys($ref);
|
|
174
|
-
if (refKeys.length > 1) {
|
|
175
|
-
var extraKeys = {};
|
|
176
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
177
|
-
try {
|
|
178
|
-
for(var _iterator = refKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
179
|
-
var key = _step.value;
|
|
180
|
-
if (key !== "$ref" && !(key in cache.value)) {
|
|
181
|
-
extraKeys[key] = $ref[key];
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
} catch (err) {
|
|
185
|
-
_didIteratorError = true;
|
|
186
|
-
_iteratorError = err;
|
|
187
|
-
} finally{
|
|
188
|
-
try {
|
|
189
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
190
|
-
_iterator.return();
|
|
191
|
-
}
|
|
192
|
-
} finally{
|
|
193
|
-
if (_didIteratorError) {
|
|
194
|
-
throw _iteratorError;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return {
|
|
199
|
-
circular: cache.circular,
|
|
200
|
-
value: Object.assign({}, cache.value, extraKeys)
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
return cache;
|
|
204
|
-
}
|
|
205
|
-
var pointer = $refs._resolve($refPath, path, options);
|
|
206
|
-
if (pointer === null) {
|
|
207
|
-
return {
|
|
208
|
-
circular: false,
|
|
209
|
-
value: null
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
// Check for circular references
|
|
213
|
-
var directCircular = pointer.circular;
|
|
214
|
-
var circular = directCircular || parents.has(pointer.value);
|
|
215
|
-
circular && foundCircularReference(path, $refs, options);
|
|
216
|
-
// Dereference the JSON reference
|
|
217
|
-
var dereferencedValue = _refJs.default.dereference($ref, pointer.value);
|
|
218
|
-
// Crawl the dereferenced value (unless it's circular)
|
|
219
|
-
if (!circular) {
|
|
220
|
-
// Determine if the dereferenced value is circular
|
|
221
|
-
var dereferenced = crawl(dereferencedValue, pointer.path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options);
|
|
222
|
-
circular = dereferenced.circular;
|
|
223
|
-
dereferencedValue = dereferenced.value;
|
|
224
|
-
}
|
|
225
|
-
if (circular && !directCircular && options.dereference.circular === "ignore") {
|
|
226
|
-
// The user has chosen to "ignore" circular references, so don't change the value
|
|
227
|
-
dereferencedValue = $ref;
|
|
228
|
-
}
|
|
229
|
-
if (directCircular) {
|
|
230
|
-
// The pointer is a DIRECT circular reference (i.e. it references itself).
|
|
231
|
-
// So replace the $ref path with the absolute path from the JSON Schema root
|
|
232
|
-
dereferencedValue.$ref = pathFromRoot;
|
|
233
|
-
}
|
|
234
|
-
var dereferencedObject = {
|
|
235
|
-
circular: circular,
|
|
236
|
-
value: dereferencedValue
|
|
237
|
-
};
|
|
238
|
-
// only cache if no extra properties than $ref
|
|
239
|
-
if (Object.keys($ref).length === 1) {
|
|
240
|
-
dereferencedCache.set($refPath, dereferencedObject);
|
|
241
|
-
}
|
|
242
|
-
return dereferencedObject;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Called when a circular reference is found.
|
|
246
|
-
* It sets the {@link $Refs#circular} flag, and throws an error if options.dereference.circular is false.
|
|
247
|
-
*
|
|
248
|
-
* @param {string} keyPath - The JSON Reference path of the circular reference
|
|
249
|
-
* @param {$Refs} $refs
|
|
250
|
-
* @param {$RefParserOptions} options
|
|
251
|
-
* @returns {boolean} - always returns true, to indicate that a circular reference was found
|
|
252
|
-
*/ function foundCircularReference(keyPath, $refs, options) {
|
|
253
|
-
$refs.circular = true;
|
|
254
|
-
if (!options.dereference.circular) {
|
|
255
|
-
throw _ono.ono.reference("Circular $ref pointer found at ".concat(keyPath));
|
|
256
|
-
}
|
|
257
|
-
return true;
|
|
258
|
-
}
|