json-brook 0.1.0-beta.1 → 0.1.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 CHANGED
@@ -6,7 +6,7 @@
6
6
  ## 快速入门
7
7
 
8
8
  ```typescript
9
- import { createJsonBrook, generate } from "json-brook";
9
+ import { createJsonBrook } from "json-brook";
10
10
 
11
11
  const jsonBrook = createJsonBrook();
12
12
 
package/dist/index.js CHANGED
@@ -163,7 +163,7 @@ const E = (e) => {
163
163
  throw new Error("解析失败");
164
164
  }
165
165
  if (F(e))
166
- return t.escapeLength === 6 ? (t.state = p.Normal, t.value += e, t.escapeLength = 0, {
166
+ return t.escapeLength === 5 ? (t.state = p.Normal, t.value += e, t.escapeLength = 0, {
167
167
  token: null,
168
168
  current: t
169
169
  }) : (t.value += e, t.escapeLength++, {
@@ -1,2 +1,2 @@
1
1
  (function(i,v){typeof exports=="object"&&typeof module<"u"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(i=typeof globalThis<"u"?globalThis:i||self,v(i.JsonBrook={}))})(this,(function(i){"use strict";const v=e=>{if(e.current)switch(e.current.type){case"keyword":return JSON.parse(e.current.value);case"string":return JSON.parse(`${e.current.escapeLength>0?e.current.value.slice(0,-e.current.escapeLength):e.current.value}"`);case"number":return JSON.parse(e.current.value.slice(0,e.current.validLength))}return e.value},m=e=>e.children.map(t=>w(t)),S=e=>e.children.reduce((t,r)=>(r.value&&(t[r.key.value]=w(r.value)),t),{}),w=e=>{switch(e.type){case"literal":return v(e);case"array":return m(e);case"object":return S(e)}},b=e=>{if(e.value)return w(e.value)},J=Object.freeze(Object.defineProperty({__proto__:null,arrayGenerator:m,literalGenerator:v,normalGenerator:w,objectGenerator:S,rootGenerator:b},Symbol.toStringTag,{value:"Module"})),c={Normal:"Normal",Escape:"Escape"},a={Negative:"Negative",Zero:"Zero",Digit:"Digit",Point:"Point",DigitFraction:"DigitFraction",Exp:"Exp",ExpDigitOrSign:"ExpDigitOrSign"},_=[" "," ",`
2
- `,"\r"],K=["{","}","[","]",":",","],N=["true","false","null"],Z=N.map(e=>e[0]),z=['"',"\\","/","b","f","n","r","t"],F=["+","-"],k=e=>e>="0"&&e<="9",x=e=>e>="1"&&e<="9",G=e=>k(e)||e>="a"&&e<="f"||e>="A"&&e<="F",y=e=>e==="e"||e==="E",u=e=>{if(_.includes(e))return{token:null,current:null};if(K.includes(e))return{token:{type:"symbol",value:e},current:null};const t=Z.indexOf(e);if(t!==-1)return{token:null,current:{type:"keyword",value:N[t],matchLength:1}};if(e==='"')return{token:null,current:{type:"string",state:c.Normal,value:e,escapeLength:0}};if(e==="-")return{token:null,current:{type:"number",state:a.Negative,value:e,validLength:0}};if(e==="0")return{token:null,current:{type:"number",state:a.Zero,value:e,validLength:1}};if(x(e))return{token:null,current:{type:"number",state:a.Digit,value:e,validLength:1}};throw new Error("解析失败")},L=(e,t)=>{if(e===t.value[t.matchLength])return t.matchLength++,t.matchLength===t.value.length?{token:{type:"keyword",value:JSON.parse(t.value)},current:null}:{token:null,current:t};throw new Error("解析失败")},g=(e,t)=>{switch(t.state){case c.Normal:switch(e){case'"':return t.value+=e,{token:{type:"string",value:JSON.parse(t.value)},current:null};case"\\":return t.state=c.Escape,t.value+=e,t.escapeLength=1,{token:null,current:t};default:return t.value+=e,{token:null,current:t}}case c.Escape:if(t.escapeLength===1){if(z.includes(e))return t.state=c.Normal,t.value+=e,t.escapeLength=0,{token:null,current:t};if(e==="u")return t.value+=e,t.escapeLength++,{token:null,current:t};throw new Error("解析失败")}if(G(e))return t.escapeLength===6?(t.state=c.Normal,t.value+=e,t.escapeLength=0,{token:null,current:t}):(t.value+=e,t.escapeLength++,{token:null,current:t});throw new Error("解析失败")}},T=(e,t)=>{switch(t.state){case a.Negative:if(e==="0")return t.state=a.Zero,t.value+=e,t.validLength=t.value.length,{token:null,current:t};if(x(e))return t.state=a.Digit,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.Zero:return e==="."?(t.state=a.Point,t.value+=e,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Digit:return k(e)?(t.value+=e,t.validLength=t.value.length,{token:null,current:t}):e==="."?(t.state=a.Point,t.value+=e,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Point:if(k(e))return t.state=a.DigitFraction,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.DigitFraction:return k(e)?(t.value+=e,t.validLength=t.value.length,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Exp:if(F.includes(e))return t.state=a.ExpDigitOrSign,t.value+=e,{token:null,current:t};if(k(e))return t.state=a.ExpDigitOrSign,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.ExpDigitOrSign:if(k(e))return t.value+=e,t.validLength=t.value.length,{token:null,current:t};if(t.validLength===t.value.length)return{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};throw new Error("解析失败")}},O=e=>{if(e.validLength===e.value.length)return{type:"number",value:JSON.parse(e.value)};throw new Error("解析失败")},A=Object.freeze(Object.defineProperty({__proto__:null,NumberTokenState:a,StringTokenState:c,endNumberTokenCurrent:O,parseNextToken:u,parseNextTokenWithKeyword:L,parseNextTokenWithNumber:T,parseNextTokenWithString:g},Symbol.toStringTag,{value:"Module"})),l={Start:"Start",Value:"Value",Comma:"Comma",End:"End"},o={Key:"Key",Colon:"Colon",Value:"Value"},s={Start:"Start",Property:"Property",Comma:"Comma",End:"End"},p=(e,t)=>{switch(e.type){case"root":if(t)throw new Error("解析失败");return e;case"array":if(e.state===l.Value)return t?h(e,t):e;throw new Error("解析失败");case"property":if(e.state===o.Value)return t?E(e.parent,t):e.parent;throw new Error("解析失败")}},j=(e,t)=>{if(e.value){const r=u(t);if(!r.token&&!r.current)return e;throw new Error("解析失败")}else{const r=u(t);if(r.current)return e.value={type:"literal",value:null,current:r.current,parent:e},e.value;if(!r.token)return e;switch(r.token.value){case"[":return e.value={type:"array",state:l.Start,children:[],parent:e},e.value;case"{":return e.value={type:"object",state:s.Start,children:[],parent:e},e.value}throw new Error("解析失败")}},P=(e,t)=>{if(e.current)switch(e.current.type){case"keyword":{const r=L(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent)):(e.current=r.current,e)}case"string":{const r=g(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent)):(e.current=r.current,e)}case"number":{const r=T(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent,r.char)):(e.current=r.current,e)}}throw new Error("解析失败")},h=(e,t)=>{switch(e.state){case l.Start:{const r=u(t);if(r.current){e.state=l.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.children.push(n),n}if(!r.token)return e;switch(r.token.value){case"]":return e.state=l.End,p(e.parent);case"[":{e.state=l.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.children.push(n),n}case"{":{e.state=l.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.children.push(n),n}}throw new Error("解析失败")}case l.Value:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;switch(r.token.value){case",":return e.state=l.Comma,e;case"]":return e.state=l.End,p(e.parent)}throw new Error("解析失败")}case l.Comma:{const r=u(t);if(r.current){e.state=l.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.children.push(n),n}if(!r.token)return e;switch(r.token.value){case"[":{e.state=l.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.children.push(n),n}case"{":{e.state=l.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.children.push(n),n}}throw new Error("解析失败")}case l.End:throw new Error("解析失败")}},V=(e,t)=>{if(e.current){const r=g(t,e.current);return r.current?(e.current=r.current,e):(e.value=r.token.value,e.current=null,e.parent)}throw new Error("解析失败")},D=(e,t)=>{switch(e.state){case o.Key:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;if(r.token.value===":")return e.state=o.Colon,e;throw new Error("解析失败")}case o.Colon:{const r=u(t);if(r.current){e.state=o.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.value=n,n}if(!r.token)return e;switch(r.token.value){case"[":{e.state=o.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.value=n,n}case"{":{e.state=o.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.value=n,n}}throw new Error("解析失败")}case o.Value:throw new Error("解析失败")}},E=(e,t)=>{switch(e.state){case s.Start:{const r=u(t);if(r.current){if(r.current.type==="string"){e.state=s.Property;const n={type:"property",state:o.Key,key:null,value:null,parent:e},f={type:"identifier",value:"",current:r.current,parent:n};return n.key=f,e.children.push(n),f}throw new Error("解析失败")}if(!r.token)return e;if(r.token.value==="}")return e.state=s.End,p(e.parent);throw new Error("解析失败")}case s.Property:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;switch(r.token.value){case",":return e.state=s.Comma,e;case"}":return e.state=s.End,p(e.parent)}throw new Error("解析失败")}case s.Comma:{const r=u(t);if(r.current){if(r.current.type==="string"){e.state=s.Property;const n={type:"property",state:o.Key,key:null,value:null,parent:e},f={type:"identifier",value:"",current:r.current,parent:n};return n.key=f,e.children.push(n),f}throw new Error("解析失败")}if(!r.token)return e;throw new Error("解析失败")}case s.End:throw new Error("解析失败")}},C=e=>{switch(e.type){case"root":return e;case"literal":if(e.current&&e.current.type==="number"){const t=O(e.current);return e.value=t.value,e.current=null,p(e.parent)}throw new Error("解析失败");case"array":case"object":case"property":case"identifier":throw new Error("解析失败")}},M=Object.freeze(Object.defineProperty({__proto__:null,ArrayNodeState:l,ObjectNodeState:s,PropertyNodeState:o,endAst:C,parseArrayNode:h,parseIdentifierNode:V,parseLiteralNode:P,parseObjectNode:E,parsePropertyNode:D,parseRootNode:j},Symbol.toStringTag,{value:"Module"})),B=()=>{const e={type:"root",value:null};let t=e;return{getRoot:()=>e,getCurrent:()=>t,generate:()=>b(e),parse:r=>{switch(t.type){case"root":t=j(t,r);break;case"literal":t=P(t,r);break;case"array":t=h(t,r);break;case"identifier":t=V(t,r);break;case"property":t=D(t,r);break;case"object":t=E(t,r);break}},end:()=>{C(t)}}};i.createJsonBrook=B,i.generate=J,i.parse=M,i.tokenize=A,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}));
2
+ `,"\r"],K=["{","}","[","]",":",","],N=["true","false","null"],Z=N.map(e=>e[0]),z=['"',"\\","/","b","f","n","r","t"],F=["+","-"],k=e=>e>="0"&&e<="9",x=e=>e>="1"&&e<="9",G=e=>k(e)||e>="a"&&e<="f"||e>="A"&&e<="F",y=e=>e==="e"||e==="E",u=e=>{if(_.includes(e))return{token:null,current:null};if(K.includes(e))return{token:{type:"symbol",value:e},current:null};const t=Z.indexOf(e);if(t!==-1)return{token:null,current:{type:"keyword",value:N[t],matchLength:1}};if(e==='"')return{token:null,current:{type:"string",state:c.Normal,value:e,escapeLength:0}};if(e==="-")return{token:null,current:{type:"number",state:a.Negative,value:e,validLength:0}};if(e==="0")return{token:null,current:{type:"number",state:a.Zero,value:e,validLength:1}};if(x(e))return{token:null,current:{type:"number",state:a.Digit,value:e,validLength:1}};throw new Error("解析失败")},L=(e,t)=>{if(e===t.value[t.matchLength])return t.matchLength++,t.matchLength===t.value.length?{token:{type:"keyword",value:JSON.parse(t.value)},current:null}:{token:null,current:t};throw new Error("解析失败")},g=(e,t)=>{switch(t.state){case c.Normal:switch(e){case'"':return t.value+=e,{token:{type:"string",value:JSON.parse(t.value)},current:null};case"\\":return t.state=c.Escape,t.value+=e,t.escapeLength=1,{token:null,current:t};default:return t.value+=e,{token:null,current:t}}case c.Escape:if(t.escapeLength===1){if(z.includes(e))return t.state=c.Normal,t.value+=e,t.escapeLength=0,{token:null,current:t};if(e==="u")return t.value+=e,t.escapeLength++,{token:null,current:t};throw new Error("解析失败")}if(G(e))return t.escapeLength===5?(t.state=c.Normal,t.value+=e,t.escapeLength=0,{token:null,current:t}):(t.value+=e,t.escapeLength++,{token:null,current:t});throw new Error("解析失败")}},T=(e,t)=>{switch(t.state){case a.Negative:if(e==="0")return t.state=a.Zero,t.value+=e,t.validLength=t.value.length,{token:null,current:t};if(x(e))return t.state=a.Digit,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.Zero:return e==="."?(t.state=a.Point,t.value+=e,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Digit:return k(e)?(t.value+=e,t.validLength=t.value.length,{token:null,current:t}):e==="."?(t.state=a.Point,t.value+=e,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Point:if(k(e))return t.state=a.DigitFraction,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.DigitFraction:return k(e)?(t.value+=e,t.validLength=t.value.length,{token:null,current:t}):y(e)?(t.state=a.Exp,t.value+=e,{token:null,current:t}):{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};case a.Exp:if(F.includes(e))return t.state=a.ExpDigitOrSign,t.value+=e,{token:null,current:t};if(k(e))return t.state=a.ExpDigitOrSign,t.value+=e,t.validLength=t.value.length,{token:null,current:t};throw new Error("解析失败");case a.ExpDigitOrSign:if(k(e))return t.value+=e,t.validLength=t.value.length,{token:null,current:t};if(t.validLength===t.value.length)return{token:{type:"number",value:JSON.parse(t.value)},current:null,char:e};throw new Error("解析失败")}},O=e=>{if(e.validLength===e.value.length)return{type:"number",value:JSON.parse(e.value)};throw new Error("解析失败")},A=Object.freeze(Object.defineProperty({__proto__:null,NumberTokenState:a,StringTokenState:c,endNumberTokenCurrent:O,parseNextToken:u,parseNextTokenWithKeyword:L,parseNextTokenWithNumber:T,parseNextTokenWithString:g},Symbol.toStringTag,{value:"Module"})),l={Start:"Start",Value:"Value",Comma:"Comma",End:"End"},o={Key:"Key",Colon:"Colon",Value:"Value"},s={Start:"Start",Property:"Property",Comma:"Comma",End:"End"},p=(e,t)=>{switch(e.type){case"root":if(t)throw new Error("解析失败");return e;case"array":if(e.state===l.Value)return t?h(e,t):e;throw new Error("解析失败");case"property":if(e.state===o.Value)return t?E(e.parent,t):e.parent;throw new Error("解析失败")}},j=(e,t)=>{if(e.value){const r=u(t);if(!r.token&&!r.current)return e;throw new Error("解析失败")}else{const r=u(t);if(r.current)return e.value={type:"literal",value:null,current:r.current,parent:e},e.value;if(!r.token)return e;switch(r.token.value){case"[":return e.value={type:"array",state:l.Start,children:[],parent:e},e.value;case"{":return e.value={type:"object",state:s.Start,children:[],parent:e},e.value}throw new Error("解析失败")}},P=(e,t)=>{if(e.current)switch(e.current.type){case"keyword":{const r=L(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent)):(e.current=r.current,e)}case"string":{const r=g(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent)):(e.current=r.current,e)}case"number":{const r=T(t,e.current);return r.token?(e.value=r.token.value,e.current=null,p(e.parent,r.char)):(e.current=r.current,e)}}throw new Error("解析失败")},h=(e,t)=>{switch(e.state){case l.Start:{const r=u(t);if(r.current){e.state=l.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.children.push(n),n}if(!r.token)return e;switch(r.token.value){case"]":return e.state=l.End,p(e.parent);case"[":{e.state=l.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.children.push(n),n}case"{":{e.state=l.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.children.push(n),n}}throw new Error("解析失败")}case l.Value:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;switch(r.token.value){case",":return e.state=l.Comma,e;case"]":return e.state=l.End,p(e.parent)}throw new Error("解析失败")}case l.Comma:{const r=u(t);if(r.current){e.state=l.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.children.push(n),n}if(!r.token)return e;switch(r.token.value){case"[":{e.state=l.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.children.push(n),n}case"{":{e.state=l.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.children.push(n),n}}throw new Error("解析失败")}case l.End:throw new Error("解析失败")}},V=(e,t)=>{if(e.current){const r=g(t,e.current);return r.current?(e.current=r.current,e):(e.value=r.token.value,e.current=null,e.parent)}throw new Error("解析失败")},D=(e,t)=>{switch(e.state){case o.Key:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;if(r.token.value===":")return e.state=o.Colon,e;throw new Error("解析失败")}case o.Colon:{const r=u(t);if(r.current){e.state=o.Value;const n={type:"literal",value:null,current:r.current,parent:e};return e.value=n,n}if(!r.token)return e;switch(r.token.value){case"[":{e.state=o.Value;const n={type:"array",state:l.Start,children:[],parent:e};return e.value=n,n}case"{":{e.state=o.Value;const n={type:"object",state:s.Start,children:[],parent:e};return e.value=n,n}}throw new Error("解析失败")}case o.Value:throw new Error("解析失败")}},E=(e,t)=>{switch(e.state){case s.Start:{const r=u(t);if(r.current){if(r.current.type==="string"){e.state=s.Property;const n={type:"property",state:o.Key,key:null,value:null,parent:e},f={type:"identifier",value:"",current:r.current,parent:n};return n.key=f,e.children.push(n),f}throw new Error("解析失败")}if(!r.token)return e;if(r.token.value==="}")return e.state=s.End,p(e.parent);throw new Error("解析失败")}case s.Property:{const r=u(t);if(r.current)throw new Error("解析失败");if(!r.token)return e;switch(r.token.value){case",":return e.state=s.Comma,e;case"}":return e.state=s.End,p(e.parent)}throw new Error("解析失败")}case s.Comma:{const r=u(t);if(r.current){if(r.current.type==="string"){e.state=s.Property;const n={type:"property",state:o.Key,key:null,value:null,parent:e},f={type:"identifier",value:"",current:r.current,parent:n};return n.key=f,e.children.push(n),f}throw new Error("解析失败")}if(!r.token)return e;throw new Error("解析失败")}case s.End:throw new Error("解析失败")}},C=e=>{switch(e.type){case"root":return e;case"literal":if(e.current&&e.current.type==="number"){const t=O(e.current);return e.value=t.value,e.current=null,p(e.parent)}throw new Error("解析失败");case"array":case"object":case"property":case"identifier":throw new Error("解析失败")}},M=Object.freeze(Object.defineProperty({__proto__:null,ArrayNodeState:l,ObjectNodeState:s,PropertyNodeState:o,endAst:C,parseArrayNode:h,parseIdentifierNode:V,parseLiteralNode:P,parseObjectNode:E,parsePropertyNode:D,parseRootNode:j},Symbol.toStringTag,{value:"Module"})),B=()=>{const e={type:"root",value:null};let t=e;return{getRoot:()=>e,getCurrent:()=>t,generate:()=>b(e),parse:r=>{switch(t.type){case"root":t=j(t,r);break;case"literal":t=P(t,r);break;case"array":t=h(t,r);break;case"identifier":t=V(t,r);break;case"property":t=D(t,r);break;case"object":t=E(t,r);break}},end:()=>{C(t)}}};i.createJsonBrook=B,i.generate=J,i.parse=M,i.tokenize=A,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-brook",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0",
4
4
  "description": "parse json data streamly",
5
5
  "keywords": [
6
6
  "json",