PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.13.0
Code Block Pro – Beautiful Syntax Highlighting v1.13.0
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.13.0, at build/shiki/node_modules/jsonc-parser/lib/esm/impl/parser.js

1 lines 6.7 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=[];function a(e){return e?()=>e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function i(e){return e?()=>e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),(()=>o.slice())):()=>!0}function c(e){return e?t=>e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function s(e){return e?t=>e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),(()=>o.slice())):()=>!0}const l=i(t.onObjectBegin),f=s(t.onObjectProperty),u=a(t.onObjectEnd),p=i(t.onArrayBegin),h=a(t.onArrayEnd),g=s(t.onLiteralValue),d=c(t.onSeparator),y=a(t.onComment),k=c(t.onError),T=n&&n.disallowComments,b=n&&n.allowTrailingComma;function O(){for(;;){const e=r.scan();switch(r.getTokenError()){case 4:A(14);break;case 5:A(15);break;case 3:A(13);break;case 1:T||A(11);break;case 2:A(12);break;case 6:A(16)}switch(e){case 12:case 13:T?A(10):y();break;case 16:A(1);break;case 15:case 14:break;default:return e}}}function A(e,t=[],n=[]){if(k(e),t.length+n.length>0){let e=r.getToken();for(;17!==e;){if(-1!==t.indexOf(e)){O();break}if(-1!==n.indexOf(e))break;e=O()}}}function v(e){const t=r.getTokenValue();return e?g(t):(f(t),o.push(t)),O(),!0}return O(),17===r.getToken()?!!n.allowEmptyContent||(A(4,[],[]),!1):function e(){switch(r.getToken()){case 3:return function(){p(),O();let t=!0,n=!1;for(;4!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(n||A(4,[],[]),d(","),O(),4===r.getToken()&&b)break}else n&&A(6,[],[]);t?(o.push(0),t=!1):o[o.length-1]++,e()||A(4,[],[4,5]),n=!0}return h(),t||o.pop(),4!==r.getToken()?A(8,[4],[]):O(),!0}();case 1:return function(){l(),O();let t=!1;for(;2!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||A(4,[],[]),d(","),O(),2===r.getToken()&&b)break}else t&&A(6,[],[]);(10!==r.getToken()?(A(3,[],[2,5]),0):(v(!1),6===r.getToken()?(d(":"),O(),e()||A(4,[],[2,5])):A(5,[],[2,5]),o.pop(),1))||A(4,[],[2,5]),t=!0}return u(),2!==r.getToken()?A(7,[2],[]):O(),!0}();case 10:return v(!0);default:return function(){switch(r.getToken()){case 11:const e=r.getTokenValue();let t=Number(e);isNaN(t)&&(A(2),t=0),g(t);break;case 7:g(null);break;case 8:g(!0);break;case 9:g(!1);break;default:return!1}return O(),!0}()}}()?(17!==r.getToken()&&A(9,[],[]),!0):(A(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"}}