Socket
Socket
Sign inDemoInstall

@stoplight/json

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stoplight/json - npm Package Compare versions

Comparing version 3.18.1 to 3.19.0

__tests__/resolveExternalRef.spec.d.ts

2

hasRef.d.ts

@@ -1,3 +0,3 @@

export declare const hasRef: (obj: unknown) => obj is object & {
export declare const hasRef: (obj: unknown) => obj is Record<string, unknown> & {
$ref: string;
};

@@ -1,1 +0,1 @@

"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var lodash=require("lodash"),jsoncParser=require("jsonc-parser"),createOrderedObject=require("@stoplight/ordered-object-literal"),createOrderedObject__default=_interopDefault(createOrderedObject),types=require("@stoplight/types"),fastStringify=_interopDefault(require("safe-stable-stringify"));const hasRef=e=>lodash.isObject(e)&&"$ref"in e&&"string"==typeof e.$ref,isLocalRef=e=>e.length>0&&("#"===e||/^#\S*$/.test(e)),replaceInString=(e,t,r)=>{const n=e.toString();let o="",i=n,a=0,s=i.indexOf(t);for(;s>-1;)o+=n.substring(a,a+s)+r,i=i.substring(s+t.length,i.length),a+=s+t.length,s=i.indexOf(t);return i.length>0&&(o+=n.substring(n.length-i.length,n.length)),o},encodePointerFragment=e=>"number"==typeof e?e:replaceInString(replaceInString(e,"~","~0"),"/","~1"),pathToPointer=e=>encodeUriFragmentIdentifier(e),encodeUriFragmentIdentifier=e=>{if(e&&"object"!=typeof e)throw new TypeError("Invalid type: path must be an array of segments.");return 0===e.length?"#":`#/${e.map(encodePointerFragment).join("/")}`};function safeDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(t){return e}}const PERCENT_ENCODING_OCTET=/%[0-9a-f]+/gi,decodePointer=e=>{let t;try{t=decodeURIComponent(e)}catch(r){t=e.replace(PERCENT_ENCODING_OCTET,safeDecodeURIComponent)}return replaceInString(replaceInString(t,"~1","/"),"~0","~")},pointerToPath=e=>decodeUriFragmentIdentifier(e),decodeFragmentSegments=e=>{const t=e.length,r=[];let n=-1;for(;++n<t;)r.push(decodePointer(e[n]));return r},decodeUriFragmentIdentifier=e=>{if("string"!=typeof e)throw new TypeError("Invalid type: JSON Pointers are represented as strings.");if(0===e.length||"#"!==e[0])throw new URIError("Invalid JSON Pointer syntax; URI fragment identifiers must begin with a hash.");if(1===e.length)return[];if("/"!==e[1])throw new URIError("Invalid JSON Pointer syntax.");return decodeFragmentSegments(e.substring(2).split("/"))},extractSourceFromRef=e=>{if("string"!=typeof e||0===e.length||isLocalRef(e))return null;const t=e.indexOf("#");return-1===t?e:e.slice(0,t)};function isPlainObject(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype||"function"==typeof e.constructor&&Function.toString.call(Object)===Function.toString.call(e.constructor)}function _resolveInlineRef(e,t,r,n){if(null!==extractSourceFromRef(t))throw new ReferenceError("Cannot resolve external references");const o=pointerToPath(t);let i=o,a=e;for(const[s,c]of o.entries()){if(!isPlainObject(a)&&!Array.isArray(a)||!(c in a))throw new ReferenceError(`Could not resolve '${t}'`);if(isPlainObject(a=a[c])&&"$ref"in a){if("string"!=typeof a.$ref)throw new TypeError("$ref should be a string");if(r.includes(a))return{location:n||i,value:r[r.length-1]};r.push(a),({value:a,location:i}=_resolveInlineRef(e,a.$ref,r,i)),i.push(...o.slice(s+1))}}if(0===r.length)return{location:i,value:a};const s=r[r.length-1];return isPlainObject(s)&&("summary"in s||"description"in s)?{location:i,value:Object.assign(Object.assign(Object.assign({},a),"description"in s?{description:s.description}:null),"summary"in s?{summary:s.summary}:null)}:{location:i,value:a}}function resolveInlineRef(e,t){return _resolveInlineRef(e,t,[]).value}function resolveInlineRefWithLocation(e,t){return _resolveInlineRef(e,t,[])}const _traverse=(e,t,r)=>{const n={value:e,path:r};t.onEnter&&t.onEnter(n);for(const n of Object.keys(e)){const o=e[n];t.onProperty&&t.onProperty({parent:e,parentPath:r,property:n,propertyValue:o}),"object"==typeof o&&null!==o&&_traverse(o,t,r.concat(n))}t.onLeave&&t.onLeave(n)},traverse=(e,t)=>{"object"==typeof e&&null!==e&&_traverse(e,"function"==typeof t?{onProperty:t}:t,[])},BUNDLE_ROOT="#/__bundled__",ERRORS_ROOT="#/__errors__",bundleTarget=({document:e,path:t,bundleRoot:r=BUNDLE_ROOT,errorsRoot:n=ERRORS_ROOT,cloneDocument:o=!0},i)=>{if(t===r||t===n)throw new Error("Roots do not make any sense");const a=o?lodash.cloneDeep(e):e;return bundle(a,pointerToPath(r),pointerToPath(n))(t,{[t]:!0},i)},bundle=(e,t,r)=>{const n=new Set,o=(i,a,s,c={},l={},f={})=>{const p=pointerToPath(i),u=lodash.get(e,p);traverse(s||u,({parent:r})=>{if(hasRef(r)&&isLocalRef(r.$ref)){const s=r.$ref;if(f[s])return;if(c[s])return void(r.$ref=c[s]);let p,u,d,h,g;try{let r;if(p=pointerToPath(s),Array.isArray(lodash.get(e,p.slice(0,-1)))){r=`${p[p.length-2]}_${p[p.length-1]}`}else r=p[p.length-1];d=r;let o=1;for(;n.has(d);)if(d=`${r}_${++o}`,o>20)throw new Error(`Keys ${r}_2 through ${r}_20 already taken.`);n.add(d),u=[...t,d],h=pathToPointer(u)}catch(e){f[s]=e.message}if(!p||!u||!h)return;if("object"==typeof e&&null!==e)try{g=resolveInlineRef(Object(e),s)}catch(t){g=lodash.get(e,p)}void 0!==g&&(c[s]=h,r.$ref=h,lodash.has(l,u)||(Array.isArray(g)?lodash.set(l,u,new Array(g.length).fill(null)):"object"==typeof g&&lodash.setWith(l,u,{},Object),lodash.set(l,u,g),a[s]||(a[s]=!0,o(i,a,g,c,l,f),a[s]=!1)))}});const d=lodash.get(l,t);return d&&Object.keys(d).length&&lodash.set(u,t,d),(Object.keys(f).length||lodash.has(e,r))&&lodash.set(u,r,lodash.has(e,r)?lodash.get(e,r):f),u};return o},decodePointerFragment=e=>replaceInString(replaceInString(e,"~1","/"),"~0","~"),decycle=(e,t)=>{const r=new WeakMap;return function e(n,o){let i;if(t&&(n=t(n)),isPlainObject(n)||Array.isArray(n)){const t=r.get(n);return t?{$ref:t}:(r.set(n,pathToPointer(o)),Array.isArray(n)?i=n.map((t,r)=>e(t,[...o,String(r)])):(i={},Object.keys(n).forEach(t=>{i[t]=e(n[t],[...o,t])})),r.delete(n),i)}return n}(e,[])},encodePointer=e=>replaceInString(replaceInString(e,"~","~0"),"//","/~1"),extractPointerFromRef=e=>{if("string"!=typeof e||0===e.length)return null;const t=e.indexOf("#");return-1===t?null:e.slice(t)},getFirstPrimitiveProperty=e=>{const t=jsoncParser.createScanner(e,!0);if(t.scan(),1!==t.getToken())return;if(t.scan(),2===t.getToken())return;if(10!==t.getToken())throw new SyntaxError("Unexpected character");const r=t.getTokenValue();if(t.scan(),6!==t.getToken())throw new SyntaxError("Colon expected");switch(t.scan(),t.getToken()){case 10:return[r,t.getTokenValue()];case 11:return[r,Number(t.getTokenValue())];case 8:return[r,!0];case 9:return[r,!1];case 7:return[r,null];case 16:throw new SyntaxError("Unexpected character");case 17:throw new SyntaxError("Unexpected end of file");default:return}},getJsonPathForPosition=({lineMap:e,ast:t},r)=>{const n=e[r.line],o=e[r.line+1];if(void 0===n)return;const i=jsoncParser.findNodeAtOffset(t,void 0===o?n+r.character:Math.min(o,n+r.character),!0);if(void 0===i)return;const a=jsoncParser.getNodePath(i);return 0!==a.length?a:void 0};function getLastPathSegment(e){return decodePointerFragment(e.split("/").pop()||"")}const getLocationForJsonPath=({lineMap:e,ast:t},r,n=!1)=>{const o=findNodeAtPath(t,r,n);if(void 0!==o&&void 0!==o.range)return{range:o.range}};function findNodeAtPath(e,t,r){e:for(const n of t){const t=Number.isInteger(Number(n))?Number(n):n;if("string"==typeof t||"number"==typeof t&&"array"!==e.type){if("object"!==e.type||!Array.isArray(e.children))return r?e:void 0;for(const r of e.children)if(Array.isArray(r.children)&&r.children[0].value===String(t)&&2===r.children.length){e=r.children[1];continue e}return r?e:void 0}if("array"!==e.type||t<0||!Array.isArray(e.children)||t>=e.children.length)return r?e:void 0;e=e.children[t]}return e}const parseWithPointers=(e,t={disallowComments:!0})=>{const r=[],{ast:n,data:o,lineMap:i}=parseTree(e,r,t);return{data:o,diagnostics:r,ast:n,lineMap:i}};function parseTree(e,t=[],r){const n=computeLineMap(e);let o={type:"array",offset:-1,length:-1,children:[],parent:void 0},i=null,a=[];const s=new WeakMap,c=[];function l(e){"property"===o.type&&(o.length=e-o.offset,o=o.parent)}function f(e,t,r){return{start:{line:e,character:t},end:{line:e,character:t+r}}}function p(e){return o.children.push(e),e}function u(e){Array.isArray(a)?a.push(e):null!==i&&(a[i]=e)}function d(e){u(e),c.push(a),a=e,i=null}function h(){a=c.pop()}const g={onObjectBegin:(e,t,n,i)=>{o=p({type:"object",offset:e,length:-1,parent:o,children:[],range:f(n,i,t)}),!1===r.ignoreDuplicateKeys&&s.set(o,[]),d(createObjectLiteral(!0===r.preserveKeyOrder))},onObjectProperty:(e,n,c,l,u)=>{if((o=p({type:"property",offset:n,length:-1,parent:o,children:[]})).children.push({type:"string",value:e,offset:n,length:c,parent:o}),!1===r.ignoreDuplicateKeys){const r=s.get(o.parent);r&&(0!==r.length&&r.includes(e)?t.push({range:f(l,u,c),message:"DuplicateKey",severity:types.DiagnosticSeverity.Error,path:getJsonPath(o),code:20}):r.push(e))}!0===r.preserveKeyOrder&&swapKey(a,e),i=e},onObjectEnd:(e,t,n,i)=>{!1===r.ignoreDuplicateKeys&&s.delete(o),o.length=e+t-o.offset,o.range&&(o.range.end.line=n,o.range.end.character=i+t),o=o.parent,l(e+t),h()},onArrayBegin:(e,t,r,n)=>{o=p({type:"array",offset:e,length:-1,parent:o,children:[],range:f(r,n,t)}),d([])},onArrayEnd:(e,t,r,n)=>{o.length=e+t-o.offset,o.range&&(o.range.end.line=r,o.range.end.character=n+t),o=o.parent,l(e+t),h()},onLiteralValue:(e,t,r,n,i)=>{p({type:getLiteralNodeType(e),offset:t,length:r,parent:o,value:e,range:f(n,i,r)}),l(t+r),u(e)},onSeparator:(e,t,r)=>{"property"===o.type&&(":"===e?o.colonOffset=t:","===e&&l(t))},onError:(e,r,n,o,i)=>{t.push({range:f(o,i,n),message:jsoncParser.printParseErrorCode(e),severity:types.DiagnosticSeverity.Error,code:e})}};jsoncParser.visit(e,g,r);const y=o.children[0];return y&&delete y.parent,{ast:y,data:a[0],lineMap:n}}function getLiteralNodeType(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";default:return"null"}}const computeLineMap=e=>{const t=[0];let r=0;for(;r<e.length;r++)"\n"===e[r]&&t.push(r+1);return t.push(r+1),t};function getJsonPath(e,t=[]){return"property"===e.type&&t.unshift(e.children[0].value),void 0!==e.parent?("array"===e.parent.type&&void 0!==e.parent.parent&&t.unshift(e.parent.children.indexOf(e)),getJsonPath(e.parent,t)):t}function createObjectLiteral(e){return e?createOrderedObject__default({}):{}}function swapKey(e,t){if(!(t in e))return;const r=createOrderedObject.getOrder(e),n=r.indexOf(t);-1!==n&&(r.splice(n,1),r.push(t))}const renameObjectKey=(e,t,r)=>{if(!e||!Object.hasOwnProperty.call(e,t)||t===r)return e;const n={};for(const[o,i]of Object.entries(e))o===t?n[r]=i:o in n||(n[o]=i);return n};function isObject(e){return isPlainObject(e)||Array.isArray(e)}function reparentBundleTarget(e,t,r){if(r.length<=1||t.length<=1)throw Error("Source/target path must not be empty and point at root");if(0===t.indexOf(r))throw Error("Target path cannot be contained within source");const n=pointerToPath(t);let o=e;for(const e of n){if(!isObject(o))return;o=o[e]}if(!isObject(o))return;const i=pointerToPath(r);let a=e;for(const[e,t]of i.entries()){if(!isObject(a)||t in a)return;const r=e===i.length-1?o:{};a[t]=r,a=r}delete e[n[0]],_reparentBundleTarget(e,t,r)}function _reparentBundleTarget(e,t,r){for(const n of Object.keys(e)){const o=e[n];if("$ref"!==n)isObject(o)&&_reparentBundleTarget(o,t,r);else{if("string"!=typeof o||!isLocalRef(o))continue;0===o.indexOf(t)&&(e[n]=o.replace(t,r))}}}const safeParse=(e,t)=>{if("string"!=typeof e)return e;try{const r=parseNumber(e);return"string"==typeof r?r:JSON.parse(e,t)}catch(e){return}},parseNumber=e=>{const t=Number(e);return Number.isFinite(t)?String(t)===e?t:e:NaN},safeStringify=(e,t,r)=>{if("string"==typeof e)return e;try{return JSON.stringify(e,t,r)}catch(n){return fastStringify(e,t,r)}},startsWith=(e,t)=>{if(e instanceof Array){if(t instanceof Array){if(t.length>e.length)return!1;for(const r in t){if(!t.hasOwnProperty(r))continue;const n=parseInt(e[r]),o=parseInt(t[r]);if(isNaN(n)&&isNaN(o)){if(e[r]!==t[r])return!1}else if(n!==o)return!1}}}else{if("string"!=typeof e)return!1;if("string"==typeof t)return e.startsWith(t)}return!0},stringify=(e,t,r)=>{const n=safeStringify(e,t,r);if(void 0===n)throw new Error("The value could not be stringified");return n};function toPropertyPath(e){return e.replace(/^(\/|#\/)/,"").split("/").map(decodePointerFragment).map(sanitize).join(".")}function sanitize(e){return e.includes(".")?`["${e.replace(/"/g,'\\"')}"]`:e}const KEYS=Symbol.for(createOrderedObject.ORDER_KEY_ID),traps={ownKeys:e=>KEYS in e?e[KEYS]:Reflect.ownKeys(e)},trapAccess=e=>new Proxy(e,traps);function trimStart(e,t){if("string"==typeof e&&"string"==typeof t)return lodash.trimStart(e,t);if(!(e&&Array.isArray(e)&&e.length&&t&&Array.isArray(t)&&t.length))return e;let r=0;for(const n in e)if(e.hasOwnProperty(n)){if(e[n]!==t[n])break;r++}return e.slice(r)}exports.BUNDLE_ROOT=BUNDLE_ROOT,exports.ERRORS_ROOT=ERRORS_ROOT,exports.KEYS=KEYS,exports.bundleTarget=bundleTarget,exports.decodePointer=decodePointer,exports.decodePointerFragment=decodePointerFragment,exports.decycle=decycle,exports.encodePointer=encodePointer,exports.encodePointerFragment=encodePointerFragment,exports.extractPointerFromRef=extractPointerFromRef,exports.extractSourceFromRef=extractSourceFromRef,exports.getFirstPrimitiveProperty=getFirstPrimitiveProperty,exports.getJsonPathForPosition=getJsonPathForPosition,exports.getLastPathSegment=getLastPathSegment,exports.getLocationForJsonPath=getLocationForJsonPath,exports.hasRef=hasRef,exports.isLocalRef=isLocalRef,exports.isPlainObject=isPlainObject,exports.parseTree=parseTree,exports.parseWithPointers=parseWithPointers,exports.pathToPointer=pathToPointer,exports.pointerToPath=pointerToPath,exports.renameObjectKey=renameObjectKey,exports.reparentBundleTarget=reparentBundleTarget,exports.resolveInlineRef=resolveInlineRef,exports.resolveInlineRefWithLocation=resolveInlineRefWithLocation,exports.safeParse=safeParse,exports.safeStringify=safeStringify,exports.startsWith=startsWith,exports.stringify=stringify,exports.toPropertyPath=toPropertyPath,exports.trapAccess=trapAccess,exports.traverse=traverse,exports.trimStart=trimStart;
"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var lodash=require("lodash"),path=require("@stoplight/path"),jsoncParser=require("jsonc-parser"),createOrderedObject=require("@stoplight/ordered-object-literal"),createOrderedObject__default=_interopDefault(createOrderedObject),types=require("@stoplight/types"),fastStringify=_interopDefault(require("safe-stable-stringify"));function isPlainObject(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype||"function"==typeof e.constructor&&Function.toString.call(Object)===Function.toString.call(e.constructor)}function assertResolvableInput(e,t,r){if(!isPlainObject(e)&&!Array.isArray(e)||!(t in e))throw new ReferenceError(`Could not resolve '${r}'`)}function assertObjectWithValidRef(e){if("string"!=typeof e.$ref)throw new TypeError("$ref should be a string")}const hasSomeRef=e=>isPlainObject(e)&&"$ref"in e,hasRef=e=>hasSomeRef(e)&&"string"==typeof e.$ref,isLocalRef=e=>e.length>0&&("#"===e||/^#\S*$/.test(e)),replaceInString=(e,t,r)=>{const n=e.toString();let o="",a=n,i=0,s=a.indexOf(t);for(;s>-1;)o+=n.substring(i,i+s)+r,a=a.substring(s+t.length,a.length),i+=s+t.length,s=a.indexOf(t);return a.length>0&&(o+=n.substring(n.length-a.length,n.length)),o},encodePointerFragment=e=>"number"==typeof e?e:replaceInString(replaceInString(e,"~","~0"),"/","~1"),pathToPointer=e=>encodeUriFragmentIdentifier(e),encodeUriFragmentIdentifier=e=>{if(e&&"object"!=typeof e)throw new TypeError("Invalid type: path must be an array of segments.");return 0===e.length?"#":`#/${e.map(encodePointerFragment).join("/")}`};function safeDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(t){return e}}const PERCENT_ENCODING_OCTET=/%[0-9a-f]+/gi,decodePointer=e=>{let t;try{t=decodeURIComponent(e)}catch(r){t=e.replace(PERCENT_ENCODING_OCTET,safeDecodeURIComponent)}return replaceInString(replaceInString(t,"~1","/"),"~0","~")},pointerToPath=e=>decodeUriFragmentIdentifier(e),decodeFragmentSegments=e=>{const t=e.length,r=[];let n=-1;for(;++n<t;)r.push(decodePointer(e[n]));return r},decodeUriFragmentIdentifier=e=>{if("string"!=typeof e)throw new TypeError("Invalid type: JSON Pointers are represented as strings.");if(0===e.length||"#"!==e[0])throw new URIError("Invalid JSON Pointer syntax; URI fragment identifiers must begin with a hash.");if(1===e.length)return[];if("/"!==e[1])throw new URIError("Invalid JSON Pointer syntax.");return decodeFragmentSegments(e.substring(2).split("/"))},extractSourceFromRef=e=>{if("string"!=typeof e||0===e.length||isLocalRef(e))return null;const t=e.indexOf("#");return-1===t?e:e.slice(0,t)};function applyOverrides(e,t){return isPlainObject(t)&&isPlainObject(e)&&("summary"in e||"description"in e)?Object.assign(Object.assign(Object.assign({},t),"description"in e?{description:e.description}:null),"summary"in e?{summary:e.summary}:null):t}function resolveSource(e,t){const r=extractSourceFromRef(t);return null===r?e:path.isAbsolute(r)?r:path.join(path.dirname(e),r)}function*traverse(e,t,r){hasSomeRef(e.value)&&(assertObjectWithValidRef(e.value),yield[-1,e.value]);for(const[n,o]of t.entries())assertResolvableInput(e.value,o,r),e.value=e.value[o],hasSomeRef(e.value)&&(assertObjectWithValidRef(e.value),yield[n,e.value])}function _resolveInlineRefWithLocation(e,t,r,n){if(null!==extractSourceFromRef(t))throw new ReferenceError("Cannot resolve external references");const o=pointerToPath(t);let a=[...o];"#"===t&&hasSomeRef(e)&&(assertObjectWithValidRef(e),o.unshift(...pointerToPath(e.$ref)));const i={value:e};for(const[s,c]of traverse(i,o,t)){if(r.includes(c))return{source:null,location:null!=n?n:a,value:r[r.length-1]};r.push(c);const t=_resolveInlineRefWithLocation(e,c.$ref,r,a);i.value=t.value,(a=t.location).push(...o.slice(s+1))}return{source:null,location:a,value:r.length>0?applyOverrides(r[r.length-1],i.value):i.value}}function resolveInlineRef(e,t){return resolveInlineRefWithLocation(e,t).value}function resolveInlineRefWithLocation(e,t){return _resolveInlineRefWithLocation(e,t,[])}const _traverse=(e,t,r)=>{const n={value:e,path:r};t.onEnter&&t.onEnter(n);for(const n of Object.keys(e)){const o=e[n];t.onProperty&&t.onProperty({parent:e,parentPath:r,property:n,propertyValue:o}),"object"==typeof o&&null!==o&&_traverse(o,t,r.concat(n))}t.onLeave&&t.onLeave(n)},traverse$1=(e,t)=>{"object"==typeof e&&null!==e&&_traverse(e,"function"==typeof t?{onProperty:t}:t,[])},BUNDLE_ROOT="#/__bundled__",ERRORS_ROOT="#/__errors__",bundleTarget=({document:e,path:t,bundleRoot:r=BUNDLE_ROOT,errorsRoot:n=ERRORS_ROOT,cloneDocument:o=!0},a)=>{if(t===r||t===n)throw new Error("Roots do not make any sense");const i=o?lodash.cloneDeep(e):e;return bundle(i,pointerToPath(r),pointerToPath(n))(t,{[t]:!0},a)},bundle=(e,t,r)=>{const n=new Set,o=(a,i,s,c={},l={},f={})=>{const u=pointerToPath(a),p=lodash.get(e,u);traverse$1(s||p,({parent:r})=>{if(hasRef(r)&&isLocalRef(r.$ref)){const s=r.$ref;if(f[s])return;if(c[s])return void(r.$ref=c[s]);let u,p,h,d,g;try{let r;if(u=pointerToPath(s),Array.isArray(lodash.get(e,u.slice(0,-1)))){r=`${u[u.length-2]}_${u[u.length-1]}`}else r=u[u.length-1];h=r;let o=1;for(;n.has(h);)if(h=`${r}_${++o}`,o>20)throw new Error(`Keys ${r}_2 through ${r}_20 already taken.`);n.add(h),p=[...t,h],d=pathToPointer(p)}catch(e){f[s]=e instanceof Error?e.message:String(e)}if(!u||!p||!d)return;if("object"==typeof e&&null!==e)try{g=resolveInlineRef(Object(e),s)}catch(t){g=lodash.get(e,u)}void 0!==g&&(c[s]=d,r.$ref=d,lodash.has(l,p)||(Array.isArray(g)?lodash.set(l,p,new Array(g.length).fill(null)):"object"==typeof g&&lodash.setWith(l,p,{},Object),lodash.set(l,p,g),i[s]||(i[s]=!0,o(a,i,g,c,l,f),i[s]=!1)))}});const h=lodash.get(l,t);return h&&Object.keys(h).length&&lodash.set(p,t,h),(Object.keys(f).length||lodash.has(e,r))&&lodash.set(p,r,lodash.has(e,r)?lodash.get(e,r):f),p};return o},decodePointerFragment=e=>replaceInString(replaceInString(e,"~1","/"),"~0","~"),decycle=(e,t)=>{const r=new WeakMap;return function e(n,o){let a;if(t&&(n=t(n)),isPlainObject(n)||Array.isArray(n)){const t=r.get(n);return t?{$ref:t}:(r.set(n,pathToPointer(o)),Array.isArray(n)?a=n.map((t,r)=>e(t,[...o,String(r)])):(a={},Object.keys(n).forEach(t=>{a[t]=e(n[t],[...o,t])})),r.delete(n),a)}return n}(e,[])},encodePointer=e=>replaceInString(replaceInString(e,"~","~0"),"//","/~1"),extractPointerFromRef=e=>{if("string"!=typeof e||0===e.length)return null;const t=e.indexOf("#");return-1===t?null:e.slice(t)},getFirstPrimitiveProperty=e=>{const t=jsoncParser.createScanner(e,!0);if(t.scan(),1!==t.getToken())return;if(t.scan(),2===t.getToken())return;if(10!==t.getToken())throw new SyntaxError("Unexpected character");const r=t.getTokenValue();if(t.scan(),6!==t.getToken())throw new SyntaxError("Colon expected");switch(t.scan(),t.getToken()){case 10:return[r,t.getTokenValue()];case 11:return[r,Number(t.getTokenValue())];case 8:return[r,!0];case 9:return[r,!1];case 7:return[r,null];case 16:throw new SyntaxError("Unexpected character");case 17:throw new SyntaxError("Unexpected end of file");default:return}},getJsonPathForPosition=({lineMap:e,ast:t},r)=>{const n=e[r.line],o=e[r.line+1];if(void 0===n)return;const a=jsoncParser.findNodeAtOffset(t,void 0===o?n+r.character:Math.min(o,n+r.character),!0);if(void 0===a)return;const i=jsoncParser.getNodePath(a);return 0!==i.length?i:void 0};function getLastPathSegment(e){return decodePointerFragment(e.split("/").pop()||"")}const getLocationForJsonPath=({ast:e},t,r=!1)=>{const n=findNodeAtPath(e,t,r);if(void 0!==n&&void 0!==n.range)return{range:n.range}};function findNodeAtPath(e,t,r){e:for(const n of t){const t=Number.isInteger(Number(n))?Number(n):n;if("string"==typeof t||"number"==typeof t&&"array"!==e.type){if("object"!==e.type||!Array.isArray(e.children))return r?e:void 0;for(const r of e.children)if(Array.isArray(r.children)&&r.children[0].value===String(t)&&2===r.children.length){e=r.children[1];continue e}return r?e:void 0}if("array"!==e.type||t<0||!Array.isArray(e.children)||t>=e.children.length)return r?e:void 0;e=e.children[t]}return e}const parseWithPointers=(e,t={disallowComments:!0})=>{const r=[],{ast:n,data:o,lineMap:a}=parseTree(e,r,t);return{data:o,diagnostics:r,ast:n,lineMap:a}};function parseTree(e,t=[],r){const n=computeLineMap(e);let o={type:"array",offset:-1,length:-1,children:[],parent:void 0},a=null,i=[];const s=new WeakMap,c=[];function l(e){"property"===o.type&&(o.length=e-o.offset,o=o.parent)}function f(e,t,r){return{start:{line:e,character:t},end:{line:e,character:t+r}}}function u(e){return o.children.push(e),e}function p(e){Array.isArray(i)?i.push(e):null!==a&&(i[a]=e)}function h(e){p(e),c.push(i),i=e,a=null}function d(){i=c.pop()}const g={onObjectBegin:(e,t,n,a)=>{o=u({type:"object",offset:e,length:-1,parent:o,children:[],range:f(n,a,t)}),!1===r.ignoreDuplicateKeys&&s.set(o,[]),h(createObjectLiteral(!0===r.preserveKeyOrder))},onObjectProperty:(e,n,c,l,p)=>{if((o=u({type:"property",offset:n,length:-1,parent:o,children:[]})).children.push({type:"string",value:e,offset:n,length:c,parent:o}),!1===r.ignoreDuplicateKeys){const r=s.get(o.parent);r&&(0!==r.length&&r.includes(e)?t.push({range:f(l,p,c),message:"DuplicateKey",severity:types.DiagnosticSeverity.Error,path:getJsonPath(o),code:20}):r.push(e))}!0===r.preserveKeyOrder&&swapKey(i,e),a=e},onObjectEnd:(e,t,n,a)=>{!1===r.ignoreDuplicateKeys&&s.delete(o),o.length=e+t-o.offset,o.range&&(o.range.end.line=n,o.range.end.character=a+t),o=o.parent,l(e+t),d()},onArrayBegin:(e,t,r,n)=>{o=u({type:"array",offset:e,length:-1,parent:o,children:[],range:f(r,n,t)}),h([])},onArrayEnd:(e,t,r,n)=>{o.length=e+t-o.offset,o.range&&(o.range.end.line=r,o.range.end.character=n+t),o=o.parent,l(e+t),d()},onLiteralValue:(e,t,r,n,a)=>{u({type:getLiteralNodeType(e),offset:t,length:r,parent:o,value:e,range:f(n,a,r)}),l(t+r),p(e)},onSeparator:(e,t)=>{"property"===o.type&&(":"===e?o.colonOffset=t:","===e&&l(t))},onError:(e,r,n,o,a)=>{t.push({range:f(o,a,n),message:jsoncParser.printParseErrorCode(e),severity:types.DiagnosticSeverity.Error,code:e})}};jsoncParser.visit(e,g,r);const y=o.children[0];return y&&delete y.parent,{ast:y,data:i[0],lineMap:n}}function getLiteralNodeType(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";default:return"null"}}const computeLineMap=e=>{const t=[0];let r=0;for(;r<e.length;r++)"\n"===e[r]&&t.push(r+1);return t.push(r+1),t};function getJsonPath(e,t=[]){return"property"===e.type&&t.unshift(e.children[0].value),void 0!==e.parent?("array"===e.parent.type&&void 0!==e.parent.parent&&t.unshift(e.parent.children.indexOf(e)),getJsonPath(e.parent,t)):t}function createObjectLiteral(e){return e?createOrderedObject__default({}):{}}function swapKey(e,t){if(!(t in e))return;const r=createOrderedObject.getOrder(e),n=r.indexOf(t);-1!==n&&(r.splice(n,1),r.push(t))}const renameObjectKey=(e,t,r)=>{if(!e||!Object.hasOwnProperty.call(e,t)||t===r)return e;const n={};for(const[o,a]of Object.entries(e))o===t?n[r]=a:o in n||(n[o]=a);return n};function isObject(e){return isPlainObject(e)||Array.isArray(e)}function reparentBundleTarget(e,t,r){if(r.length<=1||t.length<=1)throw Error("Source/target path must not be empty and point at root");if(0===t.indexOf(r))throw Error("Target path cannot be contained within source");const n=pointerToPath(t);let o=e;for(const e of n){if(!isObject(o))return;o=o[e]}if(!isObject(o))return;const a=pointerToPath(r);let i=e;for(const[e,t]of a.entries()){if(!isObject(i)||t in i)return;const r=e===a.length-1?o:{};i[t]=r,i=r}delete e[n[0]],_reparentBundleTarget(e,t,r)}function _reparentBundleTarget(e,t,r){for(const n of Object.keys(e)){const o=e[n];if("$ref"!==n)isObject(o)&&_reparentBundleTarget(o,t,r);else{if("string"!=typeof o||!isLocalRef(o))continue;0===o.indexOf(t)&&(e[n]=o.replace(t,r))}}}async function _resolveExternalRefWithLocation(e,t,r,n,o){let a=resolveSource(t,r);const i=extractPointerFromRef(r)||"#",s=await e[a],c=pointerToPath(i);let l=[...c];const f={value:s};for(const[r,s]of traverse(f,c,i)){if(n.includes(s))return{source:t,location:null!=o?o:l,value:n[n.length-1]};n.push(s);const i=await _resolveExternalRefWithLocation(e,a,s.$ref,n,l);({source:a,location:l}=i),f.value=i.value,l.push(...c.slice(r+1))}return{source:a,location:l,value:n.length>0?applyOverrides(n[n.length-1],f.value):f.value}}async function resolveExternalRef(e,t,r){return(await resolveExternalRefWithLocation(e,t,r)).value}function resolveExternalRefWithLocation(e,t,r){return _resolveExternalRefWithLocation(e,t,r,[])}const safeParse=(e,t)=>{if("string"!=typeof e)return e;try{const r=parseNumber(e);return"string"==typeof r?r:JSON.parse(e,t)}catch(e){return}},parseNumber=e=>{const t=Number(e);return Number.isFinite(t)?String(t)===e?t:e:NaN},safeStringify=(e,t,r)=>{if("string"==typeof e)return e;try{return JSON.stringify(e,t,r)}catch(n){return fastStringify(e,t,r)}},startsWith=(e,t)=>{if(e instanceof Array){if(t instanceof Array){if(t.length>e.length)return!1;for(const r in t){if(!t.hasOwnProperty(r))continue;const n=parseInt(e[r]),o=parseInt(t[r]);if(isNaN(n)&&isNaN(o)){if(e[r]!==t[r])return!1}else if(n!==o)return!1}}}else{if("string"!=typeof e)return!1;if("string"==typeof t)return e.startsWith(t)}return!0},stringify=(e,t,r)=>{const n=safeStringify(e,t,r);if(void 0===n)throw new Error("The value could not be stringified");return n};function toPropertyPath(e){return e.replace(/^(\/|#\/)/,"").split("/").map(decodePointerFragment).map(sanitize).join(".")}function sanitize(e){return e.includes(".")?`["${e.replace(/"/g,'\\"')}"]`:e}const KEYS=Symbol.for(createOrderedObject.ORDER_KEY_ID),traps={ownKeys:e=>KEYS in e?e[KEYS]:Reflect.ownKeys(e)},trapAccess=e=>new Proxy(e,traps);function trimStart(e,t){if("string"==typeof e&&"string"==typeof t)return lodash.trimStart(e,t);if(!(e&&Array.isArray(e)&&e.length&&t&&Array.isArray(t)&&t.length))return e;let r=0;for(const n in e)if(e.hasOwnProperty(n)){if(e[n]!==t[n])break;r++}return e.slice(r)}exports.BUNDLE_ROOT=BUNDLE_ROOT,exports.ERRORS_ROOT=ERRORS_ROOT,exports.KEYS=KEYS,exports.bundleTarget=bundleTarget,exports.decodePointer=decodePointer,exports.decodePointerFragment=decodePointerFragment,exports.decycle=decycle,exports.encodePointer=encodePointer,exports.encodePointerFragment=encodePointerFragment,exports.extractPointerFromRef=extractPointerFromRef,exports.extractSourceFromRef=extractSourceFromRef,exports.getFirstPrimitiveProperty=getFirstPrimitiveProperty,exports.getJsonPathForPosition=getJsonPathForPosition,exports.getLastPathSegment=getLastPathSegment,exports.getLocationForJsonPath=getLocationForJsonPath,exports.hasRef=hasRef,exports.isLocalRef=isLocalRef,exports.isPlainObject=isPlainObject,exports.parseTree=parseTree,exports.parseWithPointers=parseWithPointers,exports.pathToPointer=pathToPointer,exports.pointerToPath=pointerToPath,exports.renameObjectKey=renameObjectKey,exports.reparentBundleTarget=reparentBundleTarget,exports.resolveExternalRef=resolveExternalRef,exports.resolveExternalRefWithLocation=resolveExternalRefWithLocation,exports.resolveInlineRef=resolveInlineRef,exports.resolveInlineRefWithLocation=resolveInlineRefWithLocation,exports.safeParse=safeParse,exports.safeStringify=safeStringify,exports.startsWith=startsWith,exports.stringify=stringify,exports.toPropertyPath=toPropertyPath,exports.trapAccess=trapAccess,exports.traverse=traverse$1,exports.trimStart=trimStart;

@@ -21,3 +21,4 @@ export * from './bundle';

export * from './reparentBundleTarget';
export * from './resolveInlineRef';
export * from './resolvers/resolveExternalRef';
export * from './resolvers/resolveInlineRef';
export * from './safeParse';

@@ -24,0 +25,0 @@ export * from './safeStringify';

@@ -1,1 +0,1 @@

import{isObject as e,cloneDeep as r,get as t,set as n,has as o,setWith as i,trimStart as s}from"lodash";import{createScanner as a,findNodeAtOffset as c,getNodePath as l,visit as u,printParseErrorCode as f}from"jsonc-parser";import p,{getOrder as h,ORDER_KEY_ID as y}from"@stoplight/ordered-object-literal";import{DiagnosticSeverity as g}from"@stoplight/types";import d from"safe-stable-stringify";const b=r=>e(r)&&"$ref"in r&&"string"==typeof r.$ref,m=e=>e.length>0&&("#"===e||/^#\S*$/.test(e)),w=(e,r,t)=>{const n=e.toString();let o="",i=n,s=0,a=i.indexOf(r);for(;a>-1;)o+=n.substring(s,s+a)+t,i=i.substring(a+r.length,i.length),s+=a+r.length,a=i.indexOf(r);return i.length>0&&(o+=n.substring(n.length-i.length,n.length)),o},v=e=>"number"==typeof e?e:w(w(e,"~","~0"),"/","~1"),O=e=>j(e),j=e=>{if(e&&"object"!=typeof e)throw new TypeError("Invalid type: path must be an array of segments.");return 0===e.length?"#":`#/${e.map(v).join("/")}`};function A(e){try{return decodeURIComponent(e)}catch(r){return e}}const E=/%[0-9a-f]+/gi,$=e=>{let r;try{r=decodeURIComponent(e)}catch(t){r=e.replace(E,A)}return w(w(r,"~1","/"),"~0","~")},x=e=>S(e),S=e=>{if("string"!=typeof e)throw new TypeError("Invalid type: JSON Pointers are represented as strings.");if(0===e.length||"#"!==e[0])throw new URIError("Invalid JSON Pointer syntax; URI fragment identifiers must begin with a hash.");if(1===e.length)return[];if("/"!==e[1])throw new URIError("Invalid JSON Pointer syntax.");return(e=>{const r=e.length,t=[];let n=-1;for(;++n<r;)t.push($(e[n]));return t})(e.substring(2).split("/"))},_=e=>{if("string"!=typeof e||0===e.length||m(e))return null;const r=e.indexOf("#");return-1===r?e:e.slice(0,r)};function k(e){if("object"!=typeof e||null===e)return!1;const r=Object.getPrototypeOf(e);return null===r||r===Object.prototype||"function"==typeof e.constructor&&Function.toString.call(Object)===Function.toString.call(e.constructor)}function N(e,r,t,n){if(null!==_(r))throw new ReferenceError("Cannot resolve external references");const o=x(r);let i=o,s=e;for(const[a,c]of o.entries()){if(!k(s)&&!Array.isArray(s)||!(c in s))throw new ReferenceError(`Could not resolve '${r}'`);if(k(s=s[c])&&"$ref"in s){if("string"!=typeof s.$ref)throw new TypeError("$ref should be a string");if(t.includes(s))return{location:n||i,value:t[t.length-1]};t.push(s),({value:s,location:i}=N(e,s.$ref,t,i)),i.push(...o.slice(a+1))}}if(0===t.length)return{location:i,value:s};const a=t[t.length-1];return k(a)&&("summary"in a||"description"in a)?{location:i,value:Object.assign(Object.assign(Object.assign({},s),"description"in a?{description:a.description}:null),"summary"in a?{summary:a.summary}:null)}:{location:i,value:s}}function P(e,r){return N(e,r,[]).value}function T(e,r){return N(e,r,[])}const I=(e,r,t)=>{const n={value:e,path:t};r.onEnter&&r.onEnter(n);for(const n of Object.keys(e)){const o=e[n];r.onProperty&&r.onProperty({parent:e,parentPath:t,property:n,propertyValue:o}),"object"==typeof o&&null!==o&&I(o,r,t.concat(n))}r.onLeave&&r.onLeave(n)},R=(e,r)=>{"object"==typeof e&&null!==e&&I(e,"function"==typeof r?{onProperty:r}:r,[])},K="#/__bundled__",M="#/__errors__",U=({document:e,path:t,bundleRoot:n="#/__bundled__",errorsRoot:o="#/__errors__",cloneDocument:i=!0},s)=>{if(t===n||t===o)throw new Error("Roots do not make any sense");const a=i?r(e):e;return C(a,x(n),x(o))(t,{[t]:!0},s)},C=(e,r,s)=>{const a=new Set,c=(l,u,f,p={},h={},y={})=>{const g=x(l),d=t(e,g);R(f||d,({parent:s})=>{if(b(s)&&m(s.$ref)){const f=s.$ref;if(y[f])return;if(p[f])return void(s.$ref=p[f]);let g,d,b,m,w;try{let n;if(g=x(f),Array.isArray(t(e,g.slice(0,-1)))){n=`${g[g.length-2]}_${g[g.length-1]}`}else n=g[g.length-1];b=n;let o=1;for(;a.has(b);)if(b=`${n}_${++o}`,o>20)throw new Error(`Keys ${n}_2 through ${n}_20 already taken.`);a.add(b),d=[...r,b],m=O(d)}catch(e){y[f]=e.message}if(!g||!d||!m)return;if("object"==typeof e&&null!==e)try{w=P(Object(e),f)}catch(r){w=t(e,g)}void 0!==w&&(p[f]=m,s.$ref=m,o(h,d)||(Array.isArray(w)?n(h,d,new Array(w.length).fill(null)):"object"==typeof w&&i(h,d,{},Object),n(h,d,w),u[f]||(u[f]=!0,c(l,u,w,p,h,y),u[f]=!1)))}});const w=t(h,r);return w&&Object.keys(w).length&&n(d,r,w),(Object.keys(y).length||o(e,s))&&n(d,s,o(e,s)?t(e,s):y),d};return c},D=e=>w(w(e,"~1","/"),"~0","~"),J=(e,r)=>{const t=new WeakMap;return function e(n,o){let i;if(r&&(n=r(n)),k(n)||Array.isArray(n)){const r=t.get(n);return r?{$ref:r}:(t.set(n,O(o)),Array.isArray(n)?i=n.map((r,t)=>e(r,[...o,String(t)])):(i={},Object.keys(n).forEach(r=>{i[r]=e(n[r],[...o,r])})),t.delete(n),i)}return n}(e,[])},V=e=>w(w(e,"~","~0"),"//","/~1"),F=e=>{if("string"!=typeof e||0===e.length)return null;const r=e.indexOf("#");return-1===r?null:e.slice(r)},L=e=>{const r=a(e,!0);if(r.scan(),1!==r.getToken())return;if(r.scan(),2===r.getToken())return;if(10!==r.getToken())throw new SyntaxError("Unexpected character");const t=r.getTokenValue();if(r.scan(),6!==r.getToken())throw new SyntaxError("Colon expected");switch(r.scan(),r.getToken()){case 10:return[t,r.getTokenValue()];case 11:return[t,Number(r.getTokenValue())];case 8:return[t,!0];case 9:return[t,!1];case 7:return[t,null];case 16:throw new SyntaxError("Unexpected character");case 17:throw new SyntaxError("Unexpected end of file");default:return}},W=({lineMap:e,ast:r},t)=>{const n=e[t.line],o=e[t.line+1];if(void 0===n)return;const i=c(r,void 0===o?n+t.character:Math.min(o,n+t.character),!0);if(void 0===i)return;const s=l(i);return 0!==s.length?s:void 0};function B(e){return D(e.split("/").pop()||"")}const q=({lineMap:e,ast:r},t,n=!1)=>{const o=function(e,r,t){e:for(const n of r){const r=Number.isInteger(Number(n))?Number(n):n;if("string"==typeof r||"number"==typeof r&&"array"!==e.type){if("object"!==e.type||!Array.isArray(e.children))return t?e:void 0;for(const t of e.children)if(Array.isArray(t.children)&&t.children[0].value===String(r)&&2===t.children.length){e=t.children[1];continue e}return t?e:void 0}if("array"!==e.type||r<0||!Array.isArray(e.children)||r>=e.children.length)return t?e:void 0;e=e.children[r]}return e}(r,t,n);if(void 0!==o&&void 0!==o.range)return{range:o.range}};const z=(e,r={disallowComments:!0})=>{const t=[],{ast:n,data:o,lineMap:i}=G(e,t,r);return{data:o,diagnostics:t,ast:n,lineMap:i}};function G(e,r=[],t){const n=Q(e);let o={type:"array",offset:-1,length:-1,children:[],parent:void 0},i=null,s=[];const a=new WeakMap,c=[];function l(e){"property"===o.type&&(o.length=e-o.offset,o=o.parent)}function y(e,r,t){return{start:{line:e,character:r},end:{line:e,character:r+t}}}function d(e){return o.children.push(e),e}function b(e){Array.isArray(s)?s.push(e):null!==i&&(s[i]=e)}function m(e){b(e),c.push(s),s=e,i=null}function w(){s=c.pop()}u(e,{onObjectBegin:(e,r,n,i)=>{o=d({type:"object",offset:e,length:-1,parent:o,children:[],range:y(n,i,r)}),!1===t.ignoreDuplicateKeys&&a.set(o,[]),m(function(e){return e?p({}):{}}(!0===t.preserveKeyOrder))},onObjectProperty:(e,n,c,l,u)=>{if((o=d({type:"property",offset:n,length:-1,parent:o,children:[]})).children.push({type:"string",value:e,offset:n,length:c,parent:o}),!1===t.ignoreDuplicateKeys){const t=a.get(o.parent);t&&(0!==t.length&&t.includes(e)?r.push({range:y(l,u,c),message:"DuplicateKey",severity:g.Error,path:X(o),code:20}):t.push(e))}!0===t.preserveKeyOrder&&function(e,r){if(!(r in e))return;const t=h(e),n=t.indexOf(r);-1!==n&&(t.splice(n,1),t.push(r))}(s,e),i=e},onObjectEnd:(e,r,n,i)=>{!1===t.ignoreDuplicateKeys&&a.delete(o),o.length=e+r-o.offset,o.range&&(o.range.end.line=n,o.range.end.character=i+r),o=o.parent,l(e+r),w()},onArrayBegin:(e,r,t,n)=>{o=d({type:"array",offset:e,length:-1,parent:o,children:[],range:y(t,n,r)}),m([])},onArrayEnd:(e,r,t,n)=>{o.length=e+r-o.offset,o.range&&(o.range.end.line=t,o.range.end.character=n+r),o=o.parent,l(e+r),w()},onLiteralValue:(e,r,t,n,i)=>{d({type:H(e),offset:r,length:t,parent:o,value:e,range:y(n,i,t)}),l(r+t),b(e)},onSeparator:(e,r,t)=>{"property"===o.type&&(":"===e?o.colonOffset=r:","===e&&l(r))},onError:(e,t,n,o,i)=>{r.push({range:y(o,i,n),message:f(e),severity:g.Error,code:e})}},t);const v=o.children[0];return v&&delete v.parent,{ast:v,data:s[0],lineMap:n}}function H(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";default:return"null"}}const Q=e=>{const r=[0];let t=0;for(;t<e.length;t++)"\n"===e[t]&&r.push(t+1);return r.push(t+1),r};function X(e,r=[]){return"property"===e.type&&r.unshift(e.children[0].value),void 0!==e.parent?("array"===e.parent.type&&void 0!==e.parent.parent&&r.unshift(e.parent.children.indexOf(e)),X(e.parent,r)):r}const Y=(e,r,t)=>{if(!e||!Object.hasOwnProperty.call(e,r)||r===t)return e;const n={};for(const[o,i]of Object.entries(e))o===r?n[t]=i:o in n||(n[o]=i);return n};function Z(e){return k(e)||Array.isArray(e)}function ee(e,r,t){if(t.length<=1||r.length<=1)throw Error("Source/target path must not be empty and point at root");if(0===r.indexOf(t))throw Error("Target path cannot be contained within source");const n=x(r);let o=e;for(const e of n){if(!Z(o))return;o=o[e]}if(!Z(o))return;const i=x(t);let s=e;for(const[e,r]of i.entries()){if(!Z(s)||r in s)return;const t=e===i.length-1?o:{};s[r]=t,s=t}delete e[n[0]],function e(r,t,n){for(const o of Object.keys(r)){const i=r[o];if("$ref"!==o)Z(i)&&e(i,t,n);else{if("string"!=typeof i||!m(i))continue;0===i.indexOf(t)&&(r[o]=i.replace(t,n))}}}(e,r,t)}const re=(e,r)=>{if("string"!=typeof e)return e;try{const t=te(e);return"string"==typeof t?t:JSON.parse(e,r)}catch(e){return}},te=e=>{const r=Number(e);return Number.isFinite(r)?String(r)===e?r:e:NaN},ne=(e,r,t)=>{if("string"==typeof e)return e;try{return JSON.stringify(e,r,t)}catch(n){return d(e,r,t)}},oe=(e,r)=>{if(e instanceof Array){if(r instanceof Array){if(r.length>e.length)return!1;for(const t in r){if(!r.hasOwnProperty(t))continue;const n=parseInt(e[t]),o=parseInt(r[t]);if(isNaN(n)&&isNaN(o)){if(e[t]!==r[t])return!1}else if(n!==o)return!1}}}else{if("string"!=typeof e)return!1;if("string"==typeof r)return e.startsWith(r)}return!0},ie=(e,r,t)=>{const n=ne(e,r,t);if(void 0===n)throw new Error("The value could not be stringified");return n};function se(e){return e.replace(/^(\/|#\/)/,"").split("/").map(D).map(ae).join(".")}function ae(e){return e.includes(".")?`["${e.replace(/"/g,'\\"')}"]`:e}const ce=Symbol.for(y),le={ownKeys:e=>ce in e?e[ce]:Reflect.ownKeys(e)},ue=e=>new Proxy(e,le);function fe(e,r){if("string"==typeof e&&"string"==typeof r)return s(e,r);if(!(e&&Array.isArray(e)&&e.length&&r&&Array.isArray(r)&&r.length))return e;let t=0;for(const n in e)if(e.hasOwnProperty(n)){if(e[n]!==r[n])break;t++}return e.slice(t)}export{K as BUNDLE_ROOT,M as ERRORS_ROOT,ce as KEYS,U as bundleTarget,$ as decodePointer,D as decodePointerFragment,J as decycle,V as encodePointer,v as encodePointerFragment,F as extractPointerFromRef,_ as extractSourceFromRef,L as getFirstPrimitiveProperty,W as getJsonPathForPosition,B as getLastPathSegment,q as getLocationForJsonPath,b as hasRef,m as isLocalRef,k as isPlainObject,G as parseTree,z as parseWithPointers,O as pathToPointer,x as pointerToPath,Y as renameObjectKey,ee as reparentBundleTarget,P as resolveInlineRef,T as resolveInlineRefWithLocation,re as safeParse,ne as safeStringify,oe as startsWith,ie as stringify,se as toPropertyPath,ue as trapAccess,R as traverse,fe as trimStart};
import{cloneDeep as e,get as r,set as t,has as n,setWith as o,trimStart as i}from"lodash";import{isAbsolute as a,join as s,dirname as c}from"@stoplight/path";import{createScanner as u,findNodeAtOffset as l,getNodePath as f,visit as p,printParseErrorCode as h}from"jsonc-parser";import y,{getOrder as g,ORDER_KEY_ID as d}from"@stoplight/ordered-object-literal";import{DiagnosticSeverity as v}from"@stoplight/types";import b from"safe-stable-stringify";function m(e){if("object"!=typeof e||null===e)return!1;const r=Object.getPrototypeOf(e);return null===r||r===Object.prototype||"function"==typeof e.constructor&&Function.toString.call(Object)===Function.toString.call(e.constructor)}function w(e,r,t){if(!m(e)&&!Array.isArray(e)||!(r in e))throw new ReferenceError(`Could not resolve '${t}'`)}function O(e){if("string"!=typeof e.$ref)throw new TypeError("$ref should be a string")}const j=e=>m(e)&&"$ref"in e,A=e=>j(e)&&"string"==typeof e.$ref,E=e=>e.length>0&&("#"===e||/^#\S*$/.test(e)),$=(e,r,t)=>{const n=e.toString();let o="",i=n,a=0,s=i.indexOf(r);for(;s>-1;)o+=n.substring(a,a+s)+t,i=i.substring(s+r.length,i.length),a+=s+r.length,s=i.indexOf(r);return i.length>0&&(o+=n.substring(n.length-i.length,n.length)),o},S=e=>"number"==typeof e?e:$($(e,"~","~0"),"/","~1"),x=e=>_(e),_=e=>{if(e&&"object"!=typeof e)throw new TypeError("Invalid type: path must be an array of segments.");return 0===e.length?"#":`#/${e.map(S).join("/")}`};function k(e){try{return decodeURIComponent(e)}catch(r){return e}}const N=/%[0-9a-f]+/gi,P=e=>{let r;try{r=decodeURIComponent(e)}catch(t){r=e.replace(N,k)}return $($(r,"~1","/"),"~0","~")},T=e=>I(e),I=e=>{if("string"!=typeof e)throw new TypeError("Invalid type: JSON Pointers are represented as strings.");if(0===e.length||"#"!==e[0])throw new URIError("Invalid JSON Pointer syntax; URI fragment identifiers must begin with a hash.");if(1===e.length)return[];if("/"!==e[1])throw new URIError("Invalid JSON Pointer syntax.");return(e=>{const r=e.length,t=[];let n=-1;for(;++n<r;)t.push(P(e[n]));return t})(e.substring(2).split("/"))},R=e=>{if("string"!=typeof e||0===e.length||E(e))return null;const r=e.indexOf("#");return-1===r?e:e.slice(0,r)};function K(e,r){return m(r)&&m(e)&&("summary"in e||"description"in e)?Object.assign(Object.assign(Object.assign({},r),"description"in e?{description:e.description}:null),"summary"in e?{summary:e.summary}:null):r}function*U(e,r,t){j(e.value)&&(O(e.value),yield[-1,e.value]);for(const[n,o]of r.entries())w(e.value,o,t),e.value=e.value[o],j(e.value)&&(O(e.value),yield[n,e.value])}function M(e,r){return C(e,r).value}function C(e,r){return function e(r,t,n,o){if(null!==R(t))throw new ReferenceError("Cannot resolve external references");const i=T(t);let a=[...i];"#"===t&&j(r)&&(O(r),i.unshift(...T(r.$ref)));const s={value:r};for(const[c,u]of U(s,i,t)){if(n.includes(u))return{source:null,location:null!=o?o:a,value:n[n.length-1]};n.push(u);const t=e(r,u.$ref,n,a);s.value=t.value,(a=t.location).push(...i.slice(c+1))}return{source:null,location:a,value:n.length>0?K(n[n.length-1],s.value):s.value}}(e,r,[])}const D=(e,r,t)=>{const n={value:e,path:t};r.onEnter&&r.onEnter(n);for(const n of Object.keys(e)){const o=e[n];r.onProperty&&r.onProperty({parent:e,parentPath:t,property:n,propertyValue:o}),"object"==typeof o&&null!==o&&D(o,r,t.concat(n))}r.onLeave&&r.onLeave(n)},J=(e,r)=>{"object"==typeof e&&null!==e&&D(e,"function"==typeof r?{onProperty:r}:r,[])},V="#/__bundled__",F="#/__errors__",L=({document:r,path:t,bundleRoot:n="#/__bundled__",errorsRoot:o="#/__errors__",cloneDocument:i=!0},a)=>{if(t===n||t===o)throw new Error("Roots do not make any sense");const s=i?e(r):r;return W(s,T(n),T(o))(t,{[t]:!0},a)},W=(e,i,a)=>{const s=new Set,c=(u,l,f,p={},h={},y={})=>{const g=T(u),d=r(e,g);J(f||d,({parent:a})=>{if(A(a)&&E(a.$ref)){const f=a.$ref;if(y[f])return;if(p[f])return void(a.$ref=p[f]);let g,d,v,b,m;try{let t;if(g=T(f),Array.isArray(r(e,g.slice(0,-1)))){t=`${g[g.length-2]}_${g[g.length-1]}`}else t=g[g.length-1];v=t;let n=1;for(;s.has(v);)if(v=`${t}_${++n}`,n>20)throw new Error(`Keys ${t}_2 through ${t}_20 already taken.`);s.add(v),d=[...i,v],b=x(d)}catch(e){y[f]=e instanceof Error?e.message:String(e)}if(!g||!d||!b)return;if("object"==typeof e&&null!==e)try{m=M(Object(e),f)}catch(t){m=r(e,g)}void 0!==m&&(p[f]=b,a.$ref=b,n(h,d)||(Array.isArray(m)?t(h,d,new Array(m.length).fill(null)):"object"==typeof m&&o(h,d,{},Object),t(h,d,m),l[f]||(l[f]=!0,c(u,l,m,p,h,y),l[f]=!1)))}});const v=r(h,i);return v&&Object.keys(v).length&&t(d,i,v),(Object.keys(y).length||n(e,a))&&t(d,a,n(e,a)?r(e,a):y),d};return c},B=e=>$($(e,"~1","/"),"~0","~"),q=(e,r)=>{const t=new WeakMap;return function e(n,o){let i;if(r&&(n=r(n)),m(n)||Array.isArray(n)){const r=t.get(n);return r?{$ref:r}:(t.set(n,x(o)),Array.isArray(n)?i=n.map((r,t)=>e(r,[...o,String(t)])):(i={},Object.keys(n).forEach(r=>{i[r]=e(n[r],[...o,r])})),t.delete(n),i)}return n}(e,[])},z=e=>$($(e,"~","~0"),"//","/~1"),G=e=>{if("string"!=typeof e||0===e.length)return null;const r=e.indexOf("#");return-1===r?null:e.slice(r)},H=e=>{const r=u(e,!0);if(r.scan(),1!==r.getToken())return;if(r.scan(),2===r.getToken())return;if(10!==r.getToken())throw new SyntaxError("Unexpected character");const t=r.getTokenValue();if(r.scan(),6!==r.getToken())throw new SyntaxError("Colon expected");switch(r.scan(),r.getToken()){case 10:return[t,r.getTokenValue()];case 11:return[t,Number(r.getTokenValue())];case 8:return[t,!0];case 9:return[t,!1];case 7:return[t,null];case 16:throw new SyntaxError("Unexpected character");case 17:throw new SyntaxError("Unexpected end of file");default:return}},Q=({lineMap:e,ast:r},t)=>{const n=e[t.line],o=e[t.line+1];if(void 0===n)return;const i=l(r,void 0===o?n+t.character:Math.min(o,n+t.character),!0);if(void 0===i)return;const a=f(i);return 0!==a.length?a:void 0};function X(e){return B(e.split("/").pop()||"")}const Y=({ast:e},r,t=!1)=>{const n=function(e,r,t){e:for(const n of r){const r=Number.isInteger(Number(n))?Number(n):n;if("string"==typeof r||"number"==typeof r&&"array"!==e.type){if("object"!==e.type||!Array.isArray(e.children))return t?e:void 0;for(const t of e.children)if(Array.isArray(t.children)&&t.children[0].value===String(r)&&2===t.children.length){e=t.children[1];continue e}return t?e:void 0}if("array"!==e.type||r<0||!Array.isArray(e.children)||r>=e.children.length)return t?e:void 0;e=e.children[r]}return e}(e,r,t);if(void 0!==n&&void 0!==n.range)return{range:n.range}};const Z=(e,r={disallowComments:!0})=>{const t=[],{ast:n,data:o,lineMap:i}=ee(e,t,r);return{data:o,diagnostics:t,ast:n,lineMap:i}};function ee(e,r=[],t){const n=te(e);let o={type:"array",offset:-1,length:-1,children:[],parent:void 0},i=null,a=[];const s=new WeakMap,c=[];function u(e){"property"===o.type&&(o.length=e-o.offset,o=o.parent)}function l(e,r,t){return{start:{line:e,character:r},end:{line:e,character:r+t}}}function f(e){return o.children.push(e),e}function d(e){Array.isArray(a)?a.push(e):null!==i&&(a[i]=e)}function b(e){d(e),c.push(a),a=e,i=null}function m(){a=c.pop()}p(e,{onObjectBegin:(e,r,n,i)=>{o=f({type:"object",offset:e,length:-1,parent:o,children:[],range:l(n,i,r)}),!1===t.ignoreDuplicateKeys&&s.set(o,[]),b(function(e){return e?y({}):{}}(!0===t.preserveKeyOrder))},onObjectProperty:(e,n,c,u,p)=>{if((o=f({type:"property",offset:n,length:-1,parent:o,children:[]})).children.push({type:"string",value:e,offset:n,length:c,parent:o}),!1===t.ignoreDuplicateKeys){const t=s.get(o.parent);t&&(0!==t.length&&t.includes(e)?r.push({range:l(u,p,c),message:"DuplicateKey",severity:v.Error,path:ne(o),code:20}):t.push(e))}!0===t.preserveKeyOrder&&function(e,r){if(!(r in e))return;const t=g(e),n=t.indexOf(r);-1!==n&&(t.splice(n,1),t.push(r))}(a,e),i=e},onObjectEnd:(e,r,n,i)=>{!1===t.ignoreDuplicateKeys&&s.delete(o),o.length=e+r-o.offset,o.range&&(o.range.end.line=n,o.range.end.character=i+r),o=o.parent,u(e+r),m()},onArrayBegin:(e,r,t,n)=>{o=f({type:"array",offset:e,length:-1,parent:o,children:[],range:l(t,n,r)}),b([])},onArrayEnd:(e,r,t,n)=>{o.length=e+r-o.offset,o.range&&(o.range.end.line=t,o.range.end.character=n+r),o=o.parent,u(e+r),m()},onLiteralValue:(e,r,t,n,i)=>{f({type:re(e),offset:r,length:t,parent:o,value:e,range:l(n,i,t)}),u(r+t),d(e)},onSeparator:(e,r)=>{"property"===o.type&&(":"===e?o.colonOffset=r:","===e&&u(r))},onError:(e,t,n,o,i)=>{r.push({range:l(o,i,n),message:h(e),severity:v.Error,code:e})}},t);const w=o.children[0];return w&&delete w.parent,{ast:w,data:a[0],lineMap:n}}function re(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";default:return"null"}}const te=e=>{const r=[0];let t=0;for(;t<e.length;t++)"\n"===e[t]&&r.push(t+1);return r.push(t+1),r};function ne(e,r=[]){return"property"===e.type&&r.unshift(e.children[0].value),void 0!==e.parent?("array"===e.parent.type&&void 0!==e.parent.parent&&r.unshift(e.parent.children.indexOf(e)),ne(e.parent,r)):r}const oe=(e,r,t)=>{if(!e||!Object.hasOwnProperty.call(e,r)||r===t)return e;const n={};for(const[o,i]of Object.entries(e))o===r?n[t]=i:o in n||(n[o]=i);return n};function ie(e){return m(e)||Array.isArray(e)}function ae(e,r,t){if(t.length<=1||r.length<=1)throw Error("Source/target path must not be empty and point at root");if(0===r.indexOf(t))throw Error("Target path cannot be contained within source");const n=T(r);let o=e;for(const e of n){if(!ie(o))return;o=o[e]}if(!ie(o))return;const i=T(t);let a=e;for(const[e,r]of i.entries()){if(!ie(a)||r in a)return;const t=e===i.length-1?o:{};a[r]=t,a=t}delete e[n[0]],function e(r,t,n){for(const o of Object.keys(r)){const i=r[o];if("$ref"!==o)ie(i)&&e(i,t,n);else{if("string"!=typeof i||!E(i))continue;0===i.indexOf(t)&&(r[o]=i.replace(t,n))}}}(e,r,t)}async function se(e,r,t,n,o){let i=function(e,r){const t=R(r);return null===t?e:a(t)?t:s(c(e),t)}(r,t);const u=G(t)||"#",l=await e[i],f=T(u);let p=[...f];const h={value:l};for(const[t,a]of U(h,f,u)){if(n.includes(a))return{source:r,location:null!=o?o:p,value:n[n.length-1]};n.push(a);const s=await se(e,i,a.$ref,n,p);({source:i,location:p}=s),h.value=s.value,p.push(...f.slice(t+1))}return{source:i,location:p,value:n.length>0?K(n[n.length-1],h.value):h.value}}async function ce(e,r,t){return(await ue(e,r,t)).value}function ue(e,r,t){return se(e,r,t,[])}const le=(e,r)=>{if("string"!=typeof e)return e;try{const t=fe(e);return"string"==typeof t?t:JSON.parse(e,r)}catch(e){return}},fe=e=>{const r=Number(e);return Number.isFinite(r)?String(r)===e?r:e:NaN},pe=(e,r,t)=>{if("string"==typeof e)return e;try{return JSON.stringify(e,r,t)}catch(n){return b(e,r,t)}},he=(e,r)=>{if(e instanceof Array){if(r instanceof Array){if(r.length>e.length)return!1;for(const t in r){if(!r.hasOwnProperty(t))continue;const n=parseInt(e[t]),o=parseInt(r[t]);if(isNaN(n)&&isNaN(o)){if(e[t]!==r[t])return!1}else if(n!==o)return!1}}}else{if("string"!=typeof e)return!1;if("string"==typeof r)return e.startsWith(r)}return!0},ye=(e,r,t)=>{const n=pe(e,r,t);if(void 0===n)throw new Error("The value could not be stringified");return n};function ge(e){return e.replace(/^(\/|#\/)/,"").split("/").map(B).map(de).join(".")}function de(e){return e.includes(".")?`["${e.replace(/"/g,'\\"')}"]`:e}const ve=Symbol.for(d),be={ownKeys:e=>ve in e?e[ve]:Reflect.ownKeys(e)},me=e=>new Proxy(e,be);function we(e,r){if("string"==typeof e&&"string"==typeof r)return i(e,r);if(!(e&&Array.isArray(e)&&e.length&&r&&Array.isArray(r)&&r.length))return e;let t=0;for(const n in e)if(e.hasOwnProperty(n)){if(e[n]!==r[n])break;t++}return e.slice(t)}export{V as BUNDLE_ROOT,F as ERRORS_ROOT,ve as KEYS,L as bundleTarget,P as decodePointer,B as decodePointerFragment,q as decycle,z as encodePointer,S as encodePointerFragment,G as extractPointerFromRef,R as extractSourceFromRef,H as getFirstPrimitiveProperty,Q as getJsonPathForPosition,X as getLastPathSegment,Y as getLocationForJsonPath,A as hasRef,E as isLocalRef,m as isPlainObject,ee as parseTree,Z as parseWithPointers,x as pathToPointer,T as pointerToPath,oe as renameObjectKey,ae as reparentBundleTarget,ce as resolveExternalRef,ue as resolveExternalRefWithLocation,M as resolveInlineRef,C as resolveInlineRefWithLocation,le as safeParse,pe as safeStringify,he as startsWith,ye as stringify,ge as toPropertyPath,me as trapAccess,J as traverse,we as trimStart};
{
"name": "@stoplight/json",
"version": "3.18.1",
"version": "3.19.0",
"description": "Useful functions when working with JSON.",

@@ -26,4 +26,5 @@ "keywords": [

"dependencies": {
"@stoplight/ordered-object-literal": "^1.0.2",
"@stoplight/types": "^13.0.0",
"@stoplight/ordered-object-literal": "^1.0.3",
"@stoplight/path": "^1.3.2",
"@stoplight/types": "^13.6.0",
"jsonc-parser": "~2.2.1",

@@ -30,0 +31,0 @@ "lodash": "^4.17.21",

import { IDiagnostic, IParserASTResult } from '@stoplight/types';
import { IJsonASTNode, IParseOptions } from './types';
export declare const parseWithPointers: <T = any>(value: string, options?: IParseOptions) => import("@stoplight/types").IParserResult<T, IJsonASTNode, number[], unknown>;
import { IJsonASTNode, IParseOptions, JsonParserResult } from './types';
export declare const parseWithPointers: <T = any>(value: string, options?: IParseOptions) => JsonParserResult<T>;
export declare function parseTree<T>(text: string, errors: IDiagnostic[] | undefined, options: IParseOptions): IParserASTResult<T, IJsonASTNode, number[]>;

@@ -1,1 +0,2 @@

export declare const pathToPointer: (path: import("@stoplight/types").Segment[]) => string;
import { JsonPath } from '@stoplight/types';
export declare const pathToPointer: (path: JsonPath) => string;

@@ -1,1 +0,2 @@

export declare const pointerToPath: (pointer: string) => import("@stoplight/types").Segment[];
import { JsonPath } from '@stoplight/types';
export declare const pointerToPath: (pointer: string) => JsonPath;
import { Optional } from '@stoplight/types';
export declare const safeStringify: (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined) => Optional<string>;
export declare const safeStringify: (value: any, replacer?: ((key: string, value: any) => any | Array<number | string> | null) | undefined, space?: string | number) => Optional<string>;

@@ -1,1 +0,1 @@

export declare const startsWith: (source: string | any[], val: string | any[]) => boolean;
export declare const startsWith: (source: any[] | string, val: any[] | string) => boolean;

@@ -1,1 +0,1 @@

export declare const stringify: (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined) => string;
export declare const stringify: (value: any, replacer?: ((key: string, value: any) => any | Array<number | string> | null) | undefined, space?: string | number) => string;

@@ -18,8 +18,3 @@ import { JsonPath, Segment } from '@stoplight/types';

};
export declare const traverse: (obj: unknown, hooks: Partial<Hooks> | ((ctx: Readonly<{
parent: object;
parentPath: Segment[];
property: Segment;
propertyValue: unknown;
}>) => void)) => void;
export declare const traverse: (obj: unknown, hooks: Partial<Hooks> | Hooks['onProperty']) => void;
export {};
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc