PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.27.3
Code Block Pro – Beautiful Syntax Highlighting v1.27.3
1.27.1 1.27.2 1.27.3 1.27.4 1.27.5 1.27.6 1.27.7 1.28.0 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.8.0 1.9.0 1.9.1 1.9.2 1.9.3 trunk 1.1.0 1.10.0 1.11.0 1.11.1 All 63 releases
code-block-pro / build / shiki / node_modules / jsonc-parser / lib / esm / impl / parser.js

parser.js in Code Block Pro – Beautiful Syntax Highlighting 1.27.3, at build/shiki/node_modules/jsonc-parser/lib/esm/impl/parser.js

1 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";import{createScanner}from"./scanner";var ParseOptions;!function(e){e.DEFAULT={allowTrailingComma:!1}}(ParseOptions||(ParseOptions={}));export function getLocation(e,t){const n=[],r=new Object;let o;const a={value:{},offset:0,length:0,type:"object",parent:void 0};let i=!1;function c(e,t,n,r){a.value=e,a.offset=t,a.length=n,a.type=r,a.colonOffset=void 0,o=a}try{visit(e,{onObjectBegin:(e,a)=>{if(t<=e)throw r;o=void 0,i=t>e,n.push("")},onObjectProperty:(e,o,a)=>{if(t<o)throw r;if(c(e,o,a,"property"),n[n.length-1]=e,t<=o+a)throw r},onObjectEnd:(e,a)=>{if(t<=e)throw r;o=void 0,n.pop()},onArrayBegin:(e,a)=>{if(t<=e)throw r;o=void 0,n.push(0)},onArrayEnd:(e,a)=>{if(t<=e)throw r;o=void 0,n.pop()},onLiteralValue:(e,n,o)=>{if(t<n)throw r;if(c(e,n,o,getNodeType(e)),t<=n+o)throw r},onSeparator:(e,a,c)=>{if(t<=a)throw r;if(":"===e&&o&&"property"===o.type)o.colonOffset=a,i=!1,o=void 0;else if(","===e){const e=n[n.length-1];"number"==typeof e?n[n.length-1]=e+1:(i=!0,n[n.length-1]=""),o=void 0}}})}catch(e){if(e!==r)throw e}return{path:n,previousNode:o,isAtPropertyKey:i,matches:e=>{let t=0;for(let r=0;t<e.length&&r<n.length;r++)if(e[t]===n[r]||"*"===e[t])t++;else if("**"!==e[t])return!1;return t===e.length}}}export function parse(e,t=[],n=ParseOptions.DEFAULT){let r=null,o=[];const a=[];function i(e){Array.isArray(o)?o.push(e):null!==r&&(o[r]=e)}return visit(e,{onObjectBegin:()=>{const e={};i(e),a.push(o),o=e,r=null},onObjectProperty:e=>{r=e},onObjectEnd:()=>{o=a.pop()},onArrayBegin:()=>{const e=[];i(e),a.push(o),o=e,r=null},onArrayEnd:()=>{o=a.pop()},onLiteralValue:i,onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n),o[0]}export function parseTree(e,t=[],n=ParseOptions.DEFAULT){let r={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(e){"property"===r.type&&(r.length=e-r.offset,r=r.parent)}function a(e){return r.children.push(e),e}visit(e,{onObjectBegin:e=>{r=a({type:"object",offset:e,length:-1,parent:r,children:[]})},onObjectProperty:(e,t,n)=>{r=a({type:"property",offset:t,length:-1,parent:r,children:[]}),r.children.push({type:"string",value:e,offset:t,length:n,parent:r})},onObjectEnd:(e,t)=>{o(e+t),r.length=e+t-r.offset,r=r.parent,o(e+t)},onArrayBegin:(e,t)=>{r=a({type:"array",offset:e,length:-1,parent:r,children:[]})},onArrayEnd:(e,t)=>{r.length=e+t-r.offset,r=r.parent,o(e+t)},onLiteralValue:(e,t,n)=>{a({type:getNodeType(e),offset:t,length:n,parent:r,value:e}),o(t+n)},onSeparator:(e,t,n)=>{"property"===r.type&&(":"===e?r.colonOffset=t:","===e&&o(t))},onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n);const i=r.children[0];return i&&delete i.parent,i}export function findNodeAtLocation(e,t){if(!e)return;let n=e;for(let e of t)if("string"==typeof e){if("object"!==n.type||!Array.isArray(n.children))return;let t=!1;for(const r of n.children)if(Array.isArray(r.children)&&r.children[0].value===e&&2===r.children.length){n=r.children[1],t=!0;break}if(!t)return}else{const t=e;if("array"!==n.type||t<0||!Array.isArray(n.children)||t>=n.children.length)return;n=n.children[t]}return n}export function getNodePath(e){if(!e.parent||!e.parent.children)return[];const t=getNodePath(e.parent);if("property"===e.parent.type){const n=e.parent.children[0].value;t.push(n)}else if("array"===e.parent.type){const n=e.parent.children.indexOf(e);-1!==n&&t.push(n)}return t}export function getNodeValue(e){switch(e.type){case"array":return e.children.map(getNodeValue);case"object":const t=Object.create(null);for(let n of e.children){const e=n.children[1];e&&(t[n.children[0].value]=getNodeValue(e))}return t;case"null":case"string":case"number":case"boolean":return e.value;default:return}}export function contains(e,t,n=!1){return t>=e.offset&&t<e.offset+e.length||n&&t===e.offset+e.length}export function findNodeAtOffset(e,t,n=!1){if(contains(e,t,n)){const r=e.children;if(Array.isArray(r))for(let e=0;e<r.length&&r[e].offset<=t;e++){const o=findNodeAtOffset(r[e],t,n);if(o)return o}return e}}export function visit(e,t,n=ParseOptions.DEFAULT){const r=createScanner(e,!1),o=[];let a=0;function i(e){return e?t=>0===a&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function c(e){return e?t=>0===a&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),(()=>o.slice())):()=>!0}function s(e){return e?()=>{a>0?a++:!1===e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),(()=>o.slice()))&&(a=1)}:()=>!0}function f(e){return e?()=>{a>0&&a--,0===a&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}const l=s(t.onObjectBegin),u=c(t.onObjectProperty),p=f(t.onObjectEnd),g=s(t.onArrayBegin),h=f(t.onArrayEnd),d=c(t.onLiteralValue),y=i(t.onSeparator),k=(b=t.onComment)?()=>0===a&&b(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0,T=i(t.onError);var b;const O=n&&n.disallowComments,A=n&&n.allowTrailingComma;function v(){for(;;){const e=r.scan();switch(r.getTokenError()){case 4:w(14);break;case 5:w(15);break;case 3:w(13);break;case 1:O||w(11);break;case 2:w(12);break;case 6:w(16)}switch(e){case 12:case 13:O?w(10):k();break;case 16:w(1);break;case 15:case 14:break;default:return e}}}function w(e,t=[],n=[]){if(T(e),t.length+n.length>0){let e=r.getToken();for(;17!==e;){if(-1!==t.indexOf(e)){v();break}if(-1!==n.indexOf(e))break;e=v()}}}function j(e){const t=r.getTokenValue();return e?d(t):(u(t),o.push(t)),v(),!0}return v(),17===r.getToken()?!!n.allowEmptyContent||(w(4,[],[]),!1):function e(){switch(r.getToken()){case 3:return function(){g(),v();let t=!0,n=!1;for(;4!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(n||w(4,[],[]),y(","),v(),4===r.getToken()&&A)break}else n&&w(6,[],[]);t?(o.push(0),t=!1):o[o.length-1]++,e()||w(4,[],[4,5]),n=!0}return h(),t||o.pop(),4!==r.getToken()?w(8,[4],[]):v(),!0}();case 1:return function(){l(),v();let t=!1;for(;2!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||w(4,[],[]),y(","),v(),2===r.getToken()&&A)break}else t&&w(6,[],[]);(10!==r.getToken()?(w(3,[],[2,5]),0):(j(!1),6===r.getToken()?(y(":"),v(),e()||w(4,[],[2,5])):w(5,[],[2,5]),o.pop(),1))||w(4,[],[2,5]),t=!0}return p(),2!==r.getToken()?w(7,[2],[]):v(),!0}();case 10:return j(!0);default:return function(){switch(r.getToken()){case 11:const e=r.getTokenValue();let t=Number(e);isNaN(t)&&(w(2),t=0),d(t);break;case 7:d(null);break;case 8:d(!0);break;case 9:d(!1);break;default:return!1}return v(),!0}()}}()?(17!==r.getToken()&&w(9,[],[]),!0):(w(4,[],[]),!1)}export function stripComments(e,t){let n,r,o=createScanner(e),a=[],i=0;do{switch(r=o.getPosition(),n=o.scan(),n){case 12:case 13:case 17:i!==r&&a.push(e.substring(i,r)),void 0!==t&&a.push(o.getTokenValue().replace(/[^\r\n]/g,t)),i=o.getPosition()}}while(17!==n);return a.join("")}export function getNodeType(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":return e?Array.isArray(e)?"array":"object":"null";default:return"null"}}