@tslite/codec 0.5.2 → 0.6.1
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/dist/index.cjs +1 -1
- package/dist/index.d.cts +20 -5
- package/dist/index.d.ts +20 -5
- package/dist/index.js +1 -1
- package/package.json +6 -3
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var printer=require('@tslite/printer'),core=require('@tslite/core'),a=require('@tslite/core/builders');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__namespace=/*#__PURE__*/_interopNamespace(a);var c=e=>{if(e.type==="Literal")return e.value;if(e.type==="ArrayExpression")return e.elements.map(c);if(e.type==="ObjectExpression")return b(e);let t=r(e);if(t&&typeof t=="object"&&"type"in t){let{type:s,...l}=t;return {"#expr":s,...l}}return {"#expr":"Unknown",value:t}},d=e=>e.type==="Literal"?e.value:printer.print(e);function b(e){let t=e.properties.flatMap(s=>{if(s.type==="SpreadElement"){let i=c(s.argument);return typeof i=="object"&&i!==null&&!Array.isArray(i)&&!("#expr"in i)?Object.entries(i):[["...spread",{"#expr":"SpreadElement",argument:r(s)?.argument}]]}let l=d(s.key);return s.computed?[[`[${l}]`,c(s.value)]]:[[l,c(s.value)]]});return Object.fromEntries(t)}var p=e=>{let t={};for(let s in e)e[s]==false||e[s]==null||(t[s]=e[s]);return t},r=e=>!e||typeof e!="object"?e:Array.isArray(e)?e.map(r):f[e.type]?.(e),f={ArrayExpression:e=>({type:"ArrayExpression",elements:r(e.elements||[])}),ArrayPattern:e=>({type:"ArrayPattern",elements:r(e.elements||[])}),ArrowFunctionExpression:e=>({type:"ArrowFunctionExpression",params:r(e.params||[]),body:r(e.body),...p({async:e.async})}),AssignmentExpression:e=>({type:"AssignmentExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),AssignmentProperty:e=>({type:"Property",key:r(e.key),value:r(e.value),...p({shorthand:e.shorthand})}),AwaitExpression:e=>({type:"AwaitExpression",argument:r(e.argument)}),BinaryExpression:e=>({type:"BinaryExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),BlockStatement:e=>({type:"BlockStatement",body:r(e.body||[])}),BreakStatement:e=>({type:"BreakStatement",...p({label:r(e.label)})}),CallExpression:e=>({type:"CallExpression",callee:r(e.callee),arguments:r(e.arguments||[]),...p({optional:e.optional})}),CatchClause:e=>({type:"CatchClause",param:r(e.param||[]),body:r(e.body)}),ChainExpression:e=>({type:"ChainExpression",expression:r(e.expression)}),ConditionalExpression:e=>({type:"ConditionalExpression",test:r(e.test),consequent:r(e.consequent),alternate:r(e.alternate)}),ContinueStatement:e=>({type:"ContinueStatement",...p({label:r(e.label)})}),DoWhileStatement:e=>({type:"DoWhileStatement",body:r(e.body),test:r(e.test)}),EmptyStatement:()=>({type:"EmptyStatement"}),ExpressionStatement:e=>({type:"ExpressionStatement",expression:r(e.expression)}),ForInStatement:e=>({type:"ForInStatement",left:r(e.left),right:r(e.right),body:r(e.body)}),ForOfStatement:e=>({type:"ForOfStatement",left:r(e.left),right:r(e.right),body:r(e.body),...p({await:e.await})}),ForStatement:e=>({type:"ForStatement",body:r(e.body),...p({init:r(e.init),test:r(e.test),update:r(e.update)})}),FunctionDeclaration:e=>({type:"FunctionDeclaration",id:r(e.id),params:r(e.params||[]),body:r(e.body),...p(core.pick(e,["async"]))}),FunctionExpression:e=>({type:"FunctionExpression",params:r(e.params||[]),body:r(e.body),...p({id:e.id?r(e.id):false,async:e.async})}),Identifier:e=>({type:"Identifier",name:e.name}),Placeholder:()=>({type:"Placeholder"}),IfStatement:e=>({type:"IfStatement",test:r(e.test),consequent:r(e.consequent),alternate:r(e.alternate)}),JsonExpression:e=>({type:"JsonExpression",body:e.body}),Literal:e=>({type:"Literal",value:e.value,raw:e.raw}),LogicalExpression:e=>({type:"LogicalExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),MemberExpression:e=>({type:"MemberExpression",object:r(e.object),property:r(e.property),...p(core.pick(e,["computed","optional"]))}),ObjectExpression:e=>({type:"JsonExpression",body:b(e)}),ObjectPattern:e=>({type:"ObjectPattern",properties:r(e.properties||[])}),Program:e=>({type:"Program",body:r(e.body)}),Property:e=>({type:"Property",key:r(e.key),value:r(e.value),...p(core.pick(e,["kind","shorthand","computed"]))}),ReturnStatement:e=>({type:"ReturnStatement",argument:r(e.argument)}),SwitchCase:e=>({type:"SwitchCase",test:r(e.test),consequent:r(e.consequent)}),SwitchStatement:e=>({type:"SwitchStatement",discriminant:r(e.discriminant),cases:r(e.cases)}),TemplateElement:e=>({type:"TemplateElement",value:e.value,...p({tail:e.tail})}),TemplateLiteral:e=>({type:"TemplateLiteral",quasis:r(e.quasis),expressions:r(e.expressions)}),ThrowStatement:e=>({type:"ThrowStatement",argument:r(e.argument)}),TryStatement:e=>({type:"TryStatement",block:r(e.block),handler:r(e.handler),finalizer:r(e.finalizer)}),UnaryExpression:e=>({type:"UnaryExpression",operator:e.operator,argument:r(e.argument)}),UpdateExpression:e=>({type:"UpdateExpression",operator:e.operator,argument:r(e.argument),...p({prefix:e.prefix})}),VariableDeclaration:e=>({type:"VariableDeclaration",kind:e.kind,declarations:r(e.declarations||[])}),VariableDeclarator:e=>({type:"VariableDeclarator",id:r(e.id),init:r(e.init)}),WhileStatement:e=>({type:"WhileStatement",test:r(e.test),body:r(e.body)}),SpreadElement:e=>({type:"SpreadElement",argument:r(e.argument)}),RestElement:e=>({type:"RestElement",argument:r(e.argument)})};function n(e,t=new WeakMap){if(e==null)return e;if(typeof e!="object")throw new core.TSLiteError("not-an-object","AST node must be an object");if(t.has(e))throw new core.TSLiteError("circular-reference","Circular reference detected in AST",{phase:"ast"});t.set(e,true);try{if(Array.isArray(e))return e.map(l=>n(l,t));let s=e;if(s.type==="JsonExpression")return u(s.body,t);if(typeof s.type=="string"&&S[s.type])return S[s.type](s,t);throw new core.TSLiteError("unknown-node-type",`Unknown node type: ${s.type}`,{type:s.type})}finally{t.delete(e);}}function u(e,t=new WeakMap){if(e===null||typeof e!="object")return a__namespace.literal(e);if(t.has(e))throw new core.TSLiteError("circular-reference","Circular reference detected in JSON",{phase:"json"});t.set(e,true);try{if(Array.isArray(e))return a__namespace.arrayExpression(e.map(i=>u(i,t)));let s=e;if("#expr"in s){let i=s["#expr"];if(!core.isValidExpressionEntryType(i))throw core.invalidExpressionEntryError(i);let m={...s,type:i};return delete m["#expr"],w(m,t)}let l=Object.entries(s).map(([i,m])=>a__namespace.property(a__namespace.identifier(i),u(m,t),!1,!1));return a__namespace.objectExpression(l)}finally{t.delete(e);}}function w(e,t){if(typeof e.type!="string")throw new core.TSLiteError("missing-node-type","AST node must have a type property");if(!S[e.type])throw new core.TSLiteError("unknown-node-type",`Unknown AST node type: ${e.type}`,{type:e.type});return S[e.type](e,t)}var S={ArrayExpression:(e,t)=>a__namespace.arrayExpression(o(e.elements,t)),ArrayPattern:(e,t)=>a__namespace.arrayPattern(o(e.elements,t)),ArrowFunctionExpression:(e,t)=>a__namespace.arrowFunctionExpression(o(e.params,t),n(e.body,t),e.async||false,e.generator||false),AssignmentExpression:(e,t)=>a__namespace.assignmentExpression(e.operator,n(e.left,t),n(e.right,t)),AssignmentProperty:(e,t)=>a__namespace.assignmentProperty(n(e.key,t),n(e.value,t),e.shorthand||false),AwaitExpression:(e,t)=>a__namespace.awaitExpression(n(e.argument,t)),BinaryExpression:(e,t)=>a__namespace.binaryExpression(e.operator,n(e.left,t),n(e.right,t)),BlockStatement:(e,t)=>a__namespace.blockStatement(o(e.body,t)),BreakStatement:(e,t)=>a__namespace.breakStatement(e.label?n(e.label,t):null),CallExpression:(e,t)=>a__namespace.callExpression(n(e.callee,t),o(e.arguments,t),e.optional||false),CatchClause:(e,t)=>a__namespace.catchClause(e.param?n(e.param,t):null,n(e.body,t)),ChainExpression:(e,t)=>a__namespace.chainExpression(n(e.expression,t)),ConditionalExpression:(e,t)=>a__namespace.conditionalExpression(n(e.test,t),n(e.consequent,t),n(e.alternate,t)),ContinueStatement:(e,t)=>a__namespace.continueStatement(e.label?n(e.label,t):null),DoWhileStatement:(e,t)=>a__namespace.doWhileStatement(n(e.body,t),n(e.test,t)),EmptyStatement:()=>a__namespace.emptyStatement(),ExpressionStatement:(e,t)=>a__namespace.expressionStatement(n(e.expression,t)),ForInStatement:(e,t)=>a__namespace.forInStatement(n(e.left,t),n(e.right,t),n(e.body,t)),ForOfStatement:(e,t)=>a__namespace.forOfStatement(n(e.left,t),n(e.right,t),n(e.body,t),e.await||false),ForStatement:(e,t)=>a__namespace.forStatement(e.init?n(e.init,t):null,e.test?n(e.test,t):null,e.update?n(e.update,t):null,n(e.body,t)),FunctionDeclaration:(e,t)=>a__namespace.functionDeclaration(n(e.id,t),o(e.params,t),n(e.body,t),e.generator||false,e.async||false),FunctionExpression:(e,t)=>a__namespace.functionExpression(e.id?n(e.id,t):null,o(e.params,t),n(e.body,t),e.async||false,e.generator||false),Identifier:e=>a__namespace.identifier(e.name),Placeholder:()=>a__namespace.placeholder(),IfStatement:(e,t)=>a__namespace.ifStatement(n(e.test,t),n(e.consequent,t),e.alternate?n(e.alternate,t):null),Literal:e=>a__namespace.literal(e.value),LogicalExpression:(e,t)=>a__namespace.logicalExpression(e.operator,n(e.left,t),n(e.right,t)),MemberExpression:(e,t)=>a__namespace.memberExpression(n(e.object,t),n(e.property,t),e.computed||false,e.optional||false),ObjectExpression:(e,t)=>a__namespace.objectExpression(o(e.properties,t)),ObjectPattern:(e,t)=>a__namespace.objectPattern(o(e.properties,t)),Program:(e,t)=>a__namespace.program(o(e.body,t)),Property:(e,t)=>a__namespace.property(n(e.key,t),n(e.value,t),e.shorthand||false,e.computed||false),RestElement:(e,t)=>a__namespace.restElement(n(e.argument,t)),ReturnStatement:(e,t)=>a__namespace.returnStatement(e.argument?n(e.argument,t):null),SpreadElement:(e,t)=>a__namespace.spreadElement(n(e.argument,t)),SwitchCase:(e,t)=>a__namespace.switchCase(e.test?n(e.test,t):null,o(e.consequent,t)),SwitchStatement:(e,t)=>a__namespace.switchStatement(n(e.discriminant,t),o(e.cases,t)),TemplateElement:e=>a__namespace.templateElement(e.value,e.tail||false),TemplateLiteral:(e,t)=>a__namespace.templateLiteral(o(e.quasis,t),o(e.expressions,t)),ThrowStatement:(e,t)=>a__namespace.throwStatement(n(e.argument,t)),TryStatement:(e,t)=>a__namespace.tryStatement(n(e.block,t),e.handler?n(e.handler,t):null,e.finalizer?n(e.finalizer,t):null),UnaryExpression:(e,t)=>a__namespace.unaryExpression(e.operator,n(e.argument,t)),UpdateExpression:(e,t)=>a__namespace.updateExpression(e.operator,n(e.argument,t),e.prefix||false),VariableDeclaration:(e,t)=>a__namespace.variableDeclaration(e.kind,o(e.declarations,t)),VariableDeclarator:(e,t)=>a__namespace.variableDeclarator(n(e.id,t),e.init?n(e.init,t):null),WhileStatement:(e,t)=>a__namespace.whileStatement(n(e.test,t),n(e.body,t))};function o(e,t){return e?e.map(s=>s!=null?n(s,t):null):[]}exports.decode=n;exports.encode=r;exports.fromJson=u;exports.objectToJson=b;exports.valueToJson=c;
|
|
1
|
+
'use strict';var core=require('@tslite/core'),r=require('@tslite/core/builders');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var r__namespace=/*#__PURE__*/_interopNamespace(r);var m=e=>e.type==="Literal"?e.value:e.type==="ArrayExpression"?d(e):e.type==="ObjectExpression"?x(e):S(a(e));function S(e){if(e&&typeof e=="object"&&"type"in e){let{type:t,...s}=e;return {"#expr":t,...s}}return {"#expr":"Unknown",value:e}}function d(e){return h(e)??S(a(e))}function x(e){return f(e)??S(a(e))}function h(e){let t=[];for(let s of e.elements){if(s==null)return null;if(s.type==="SpreadElement"){let l=m(s.argument);if(!Array.isArray(l))return null;t.push(...l);continue}t.push(m(s));}return t}function f(e){let t=[];for(let s of e.properties){if(s.type==="SpreadElement"){let p=m(s.argument);if(!w(p))return null;t.push(...Object.entries(p));continue}let l=g(s.key,!!s.computed);if(l===null)return null;t.push([l,m(s.value)]);}return Object.fromEntries(t)}function g(e,t){return e.type==="Literal"?String(e.value):t?null:e.type==="Identifier"?e.name:null}var w=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&!("#expr"in e);var i=e=>{let t={};for(let s in e)e[s]==false||e[s]==null||(t[s]=e[s]);return t},a=e=>!e||typeof e!="object"?e:Array.isArray(e)?e.map(a):A[e.type]?.(e),A={ArrayExpression:e=>({type:"ArrayExpression",elements:a(e.elements||[])}),ArrayPattern:e=>({type:"ArrayPattern",elements:a(e.elements||[])}),ArrowFunctionExpression:e=>({type:"ArrowFunctionExpression",params:a(e.params||[]),body:a(e.body),...i({async:e.async})}),AssignmentExpression:e=>({type:"AssignmentExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),AssignmentProperty:e=>({type:"Property",key:a(e.key),value:a(e.value),...i({shorthand:e.shorthand})}),AwaitExpression:e=>({type:"AwaitExpression",argument:a(e.argument)}),BinaryExpression:e=>({type:"BinaryExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),BlockStatement:e=>({type:"BlockStatement",body:a(e.body||[])}),BreakStatement:e=>({type:"BreakStatement",...i({label:a(e.label)})}),CallExpression:e=>({type:"CallExpression",callee:a(e.callee),arguments:a(e.arguments||[]),...i({optional:e.optional})}),CatchClause:e=>({type:"CatchClause",param:a(e.param||[]),body:a(e.body)}),ChainExpression:e=>({type:"ChainExpression",expression:a(e.expression)}),ConditionalExpression:e=>({type:"ConditionalExpression",test:a(e.test),consequent:a(e.consequent),alternate:a(e.alternate)}),ContinueStatement:e=>({type:"ContinueStatement",...i({label:a(e.label)})}),DoWhileStatement:e=>({type:"DoWhileStatement",body:a(e.body),test:a(e.test)}),EmptyStatement:()=>({type:"EmptyStatement"}),ExpressionStatement:e=>({type:"ExpressionStatement",expression:a(e.expression)}),ForInStatement:e=>({type:"ForInStatement",left:a(e.left),right:a(e.right),body:a(e.body)}),ForOfStatement:e=>({type:"ForOfStatement",left:a(e.left),right:a(e.right),body:a(e.body),...i({await:e.await})}),ForStatement:e=>({type:"ForStatement",body:a(e.body),...i({init:a(e.init),test:a(e.test),update:a(e.update)})}),FunctionDeclaration:e=>({type:"FunctionDeclaration",id:a(e.id),params:a(e.params||[]),body:a(e.body),...i(core.pick(e,["async"]))}),FunctionExpression:e=>({type:"FunctionExpression",params:a(e.params||[]),body:a(e.body),...i({id:e.id?a(e.id):false,async:e.async})}),Identifier:e=>({type:"Identifier",name:e.name}),Placeholder:()=>({type:"Placeholder"}),IfStatement:e=>({type:"IfStatement",test:a(e.test),consequent:a(e.consequent),alternate:a(e.alternate)}),JsonExpression:e=>({type:"JsonExpression",body:e.body}),Literal:e=>({type:"Literal",value:e.value,raw:e.raw}),LogicalExpression:e=>({type:"LogicalExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),MemberExpression:e=>({type:"MemberExpression",object:a(e.object),property:a(e.property),...i(core.pick(e,["computed","optional"]))}),ObjectExpression:e=>{let t=f(e);return t?{type:"JsonExpression",body:t}:{type:"ObjectExpression",properties:a(e.properties)}},ObjectPattern:e=>({type:"ObjectPattern",properties:a(e.properties||[])}),Program:e=>({type:"Program",body:a(e.body)}),Property:e=>({type:"Property",key:a(e.key),value:a(e.value),...i(core.pick(e,["kind","shorthand","computed"]))}),ReturnStatement:e=>({type:"ReturnStatement",argument:a(e.argument)}),SwitchCase:e=>({type:"SwitchCase",test:a(e.test),consequent:a(e.consequent)}),SwitchStatement:e=>({type:"SwitchStatement",discriminant:a(e.discriminant),cases:a(e.cases)}),TemplateElement:e=>({type:"TemplateElement",value:e.value,...i({tail:e.tail})}),TemplateLiteral:e=>({type:"TemplateLiteral",quasis:a(e.quasis),expressions:a(e.expressions)}),ThrowStatement:e=>({type:"ThrowStatement",argument:a(e.argument)}),TryStatement:e=>({type:"TryStatement",block:a(e.block),handler:a(e.handler),finalizer:a(e.finalizer)}),UnaryExpression:e=>({type:"UnaryExpression",operator:e.operator,argument:a(e.argument)}),UpdateExpression:e=>({type:"UpdateExpression",operator:e.operator,argument:a(e.argument),...i({prefix:e.prefix})}),VariableDeclaration:e=>({type:"VariableDeclaration",kind:e.kind,declarations:a(e.declarations||[])}),VariableDeclarator:e=>({type:"VariableDeclarator",id:a(e.id),init:a(e.init)}),WhileStatement:e=>({type:"WhileStatement",test:a(e.test),body:a(e.body)}),SpreadElement:e=>({type:"SpreadElement",argument:a(e.argument)}),RestElement:e=>({type:"RestElement",argument:a(e.argument)})};function n(e,t=new WeakMap){if(e==null)return e;if(typeof e!="object")throw new core.TSLiteError("not-an-object","AST node must be an object");if(t.has(e))throw new core.TSLiteError("circular-reference","Circular reference detected in AST",{phase:"ast"});t.set(e,true);try{if(Array.isArray(e))return e.map(l=>n(l,t));let s=e;if(s.type==="JsonExpression")return u(s.body,t);if(typeof s.type=="string"&&b[s.type])return b[s.type](s,t);throw new core.TSLiteError("unknown-node-type",`Unknown node type: ${s.type}`,{type:s.type})}finally{t.delete(e);}}function u(e,t=new WeakMap){if(e===null||typeof e!="object")return r__namespace.literal(e);if(t.has(e))throw new core.TSLiteError("circular-reference","Circular reference detected in JSON",{phase:"json"});t.set(e,true);try{if(Array.isArray(e))return r__namespace.arrayExpression(e.map(p=>u(p,t)));let s=e;if("#expr"in s){let p=s["#expr"];if(!core.isValidExpressionEntryType(p))throw core.invalidExpressionEntryError(p);let c={...s,type:p};return delete c["#expr"],C(c,t)}let l=Object.entries(s).map(([p,c])=>r__namespace.property(r__namespace.identifier(p),u(c,t),!1,!1));return r__namespace.objectExpression(l)}finally{t.delete(e);}}function C(e,t){if(typeof e.type!="string")throw new core.TSLiteError("missing-node-type","AST node must have a type property");if(!b[e.type])throw new core.TSLiteError("unknown-node-type",`Unknown AST node type: ${e.type}`,{type:e.type});return b[e.type](e,t)}var b={ArrayExpression:(e,t)=>r__namespace.arrayExpression(o(e.elements,t)),ArrayPattern:(e,t)=>r__namespace.arrayPattern(o(e.elements,t)),ArrowFunctionExpression:(e,t)=>r__namespace.arrowFunctionExpression(o(e.params,t),n(e.body,t),e.async||false,e.generator||false),AssignmentExpression:(e,t)=>r__namespace.assignmentExpression(e.operator,n(e.left,t),n(e.right,t)),AssignmentProperty:(e,t)=>r__namespace.assignmentProperty(n(e.key,t),n(e.value,t),e.shorthand||false),AwaitExpression:(e,t)=>r__namespace.awaitExpression(n(e.argument,t)),BinaryExpression:(e,t)=>r__namespace.binaryExpression(e.operator,n(e.left,t),n(e.right,t)),BlockStatement:(e,t)=>r__namespace.blockStatement(o(e.body,t)),BreakStatement:(e,t)=>r__namespace.breakStatement(e.label?n(e.label,t):null),CallExpression:(e,t)=>r__namespace.callExpression(n(e.callee,t),o(e.arguments,t),e.optional||false),CatchClause:(e,t)=>r__namespace.catchClause(e.param?n(e.param,t):null,n(e.body,t)),ChainExpression:(e,t)=>r__namespace.chainExpression(n(e.expression,t)),ConditionalExpression:(e,t)=>r__namespace.conditionalExpression(n(e.test,t),n(e.consequent,t),n(e.alternate,t)),ContinueStatement:(e,t)=>r__namespace.continueStatement(e.label?n(e.label,t):null),DoWhileStatement:(e,t)=>r__namespace.doWhileStatement(n(e.body,t),n(e.test,t)),EmptyStatement:()=>r__namespace.emptyStatement(),ExpressionStatement:(e,t)=>r__namespace.expressionStatement(n(e.expression,t)),ForInStatement:(e,t)=>r__namespace.forInStatement(n(e.left,t),n(e.right,t),n(e.body,t)),ForOfStatement:(e,t)=>r__namespace.forOfStatement(n(e.left,t),n(e.right,t),n(e.body,t),e.await||false),ForStatement:(e,t)=>r__namespace.forStatement(e.init?n(e.init,t):null,e.test?n(e.test,t):null,e.update?n(e.update,t):null,n(e.body,t)),FunctionDeclaration:(e,t)=>r__namespace.functionDeclaration(n(e.id,t),o(e.params,t),n(e.body,t),e.generator||false,e.async||false),FunctionExpression:(e,t)=>r__namespace.functionExpression(e.id?n(e.id,t):null,o(e.params,t),n(e.body,t),e.async||false,e.generator||false),Identifier:e=>r__namespace.identifier(e.name),Placeholder:()=>r__namespace.placeholder(),IfStatement:(e,t)=>r__namespace.ifStatement(n(e.test,t),n(e.consequent,t),e.alternate?n(e.alternate,t):null),Literal:e=>r__namespace.literal(e.value),LogicalExpression:(e,t)=>r__namespace.logicalExpression(e.operator,n(e.left,t),n(e.right,t)),MemberExpression:(e,t)=>r__namespace.memberExpression(n(e.object,t),n(e.property,t),e.computed||false,e.optional||false),ObjectExpression:(e,t)=>r__namespace.objectExpression(o(e.properties,t)),ObjectPattern:(e,t)=>r__namespace.objectPattern(o(e.properties,t)),Program:(e,t)=>r__namespace.program(o(e.body,t)),Property:(e,t)=>r__namespace.property(n(e.key,t),n(e.value,t),e.shorthand||false,e.computed||false),RestElement:(e,t)=>r__namespace.restElement(n(e.argument,t)),ReturnStatement:(e,t)=>r__namespace.returnStatement(e.argument?n(e.argument,t):null),SpreadElement:(e,t)=>r__namespace.spreadElement(n(e.argument,t)),SwitchCase:(e,t)=>r__namespace.switchCase(e.test?n(e.test,t):null,o(e.consequent,t)),SwitchStatement:(e,t)=>r__namespace.switchStatement(n(e.discriminant,t),o(e.cases,t)),TemplateElement:e=>r__namespace.templateElement(e.value,e.tail||false),TemplateLiteral:(e,t)=>r__namespace.templateLiteral(o(e.quasis,t),o(e.expressions,t)),ThrowStatement:(e,t)=>r__namespace.throwStatement(n(e.argument,t)),TryStatement:(e,t)=>r__namespace.tryStatement(n(e.block,t),e.handler?n(e.handler,t):null,e.finalizer?n(e.finalizer,t):null),UnaryExpression:(e,t)=>r__namespace.unaryExpression(e.operator,n(e.argument,t)),UpdateExpression:(e,t)=>r__namespace.updateExpression(e.operator,n(e.argument,t),e.prefix||false),VariableDeclaration:(e,t)=>r__namespace.variableDeclaration(e.kind,o(e.declarations,t)),VariableDeclarator:(e,t)=>r__namespace.variableDeclarator(n(e.id,t),e.init?n(e.init,t):null),WhileStatement:(e,t)=>r__namespace.whileStatement(n(e.test,t),n(e.body,t))};function o(e,t){return e?e.map(s=>s!=null?n(s,t):null):[]}exports.decode=n;exports.encode=a;exports.fromJson=u;exports.objectToJson=x;exports.valueToJson=m;
|
package/dist/index.d.cts
CHANGED
|
@@ -83,20 +83,35 @@ declare function fromJson(value: unknown, visited?: WeakMap<object, boolean>): t
|
|
|
83
83
|
* ```json
|
|
84
84
|
* { "#expr": "CallExpression", "callee": { ... }, "arguments": [] }
|
|
85
85
|
* ```
|
|
86
|
+
*
|
|
87
|
+
* A regra do achatamento: um literal (array/objeto) vira JSON campo a campo
|
|
88
|
+
* enquanto cada peça dele VALE COMO VALOR. Um `SpreadElement` não vale — o
|
|
89
|
+
* `fromJson` só aceita como entrada de `#expr` o que é valor —, então:
|
|
90
|
+
* • spread ESTÁTICO (`[...[1, 2]]`, `{ ...{ a: 1 } }`) é expandido no lugar, sem
|
|
91
|
+
* perda;
|
|
92
|
+
* • spread DINÂMICO (`[...xs]`, `{ ...a }`) faz o literal INTEIRO virar uma ilha
|
|
93
|
+
* (`ArrayExpression`/`ObjectExpression` em forma ESTree), que o leitor já lê;
|
|
94
|
+
* • chave COMPUTADA não literal (`{ [k]: 1 }`) idem — como texto ela viraria uma
|
|
95
|
+
* propriedade chamada `[k]`, outro programa. `{ ["a"]: 1 }` achata como `a`.
|
|
96
|
+
* O que se perde é só o diff por campo desse literal. Antes, o spread dinâmico saía
|
|
97
|
+
* como uma ilha `SpreadElement` (que o leitor recusa) e, num objeto, sob a chave
|
|
98
|
+
* `"...spread"` — dois spreads no mesmo objeto sobrescreviam-se na escrita.
|
|
86
99
|
*/
|
|
87
100
|
|
|
88
101
|
/**
|
|
89
102
|
* Converte um nó AST em valor JSON.
|
|
90
103
|
* - Literal → valor direto
|
|
91
|
-
* - ArrayExpression → array JSON
|
|
92
|
-
* - ObjectExpression → objeto JSON (via objectToJson)
|
|
104
|
+
* - ArrayExpression → array JSON (ou uma ilha, se tem spread dinâmico)
|
|
105
|
+
* - ObjectExpression → objeto JSON (via objectToJson; ou uma ilha)
|
|
93
106
|
* - Outros → marcador #expr com o nó codificado
|
|
94
107
|
*/
|
|
95
|
-
declare const valueToJson: (node: any) =>
|
|
108
|
+
declare const valueToJson: (node: any) => unknown;
|
|
96
109
|
/**
|
|
97
110
|
* Converte ObjectExpression AST para objeto JSON.
|
|
98
|
-
* Valores estáticos viram JSON direto; valores com lógica recebem `#expr
|
|
111
|
+
* Valores estáticos viram JSON direto; valores com lógica recebem `#expr`;
|
|
112
|
+
* spread dinâmico ou chave computada não literal fazem o objeto inteiro virar uma
|
|
113
|
+
* ilha `ObjectExpression`.
|
|
99
114
|
*/
|
|
100
|
-
declare function objectToJson(expr: ObjectExpression):
|
|
115
|
+
declare function objectToJson(expr: ObjectExpression): unknown;
|
|
101
116
|
|
|
102
117
|
export { type CodecErrorCode, decode, encode, fromJson, objectToJson, valueToJson };
|
package/dist/index.d.ts
CHANGED
|
@@ -83,20 +83,35 @@ declare function fromJson(value: unknown, visited?: WeakMap<object, boolean>): t
|
|
|
83
83
|
* ```json
|
|
84
84
|
* { "#expr": "CallExpression", "callee": { ... }, "arguments": [] }
|
|
85
85
|
* ```
|
|
86
|
+
*
|
|
87
|
+
* A regra do achatamento: um literal (array/objeto) vira JSON campo a campo
|
|
88
|
+
* enquanto cada peça dele VALE COMO VALOR. Um `SpreadElement` não vale — o
|
|
89
|
+
* `fromJson` só aceita como entrada de `#expr` o que é valor —, então:
|
|
90
|
+
* • spread ESTÁTICO (`[...[1, 2]]`, `{ ...{ a: 1 } }`) é expandido no lugar, sem
|
|
91
|
+
* perda;
|
|
92
|
+
* • spread DINÂMICO (`[...xs]`, `{ ...a }`) faz o literal INTEIRO virar uma ilha
|
|
93
|
+
* (`ArrayExpression`/`ObjectExpression` em forma ESTree), que o leitor já lê;
|
|
94
|
+
* • chave COMPUTADA não literal (`{ [k]: 1 }`) idem — como texto ela viraria uma
|
|
95
|
+
* propriedade chamada `[k]`, outro programa. `{ ["a"]: 1 }` achata como `a`.
|
|
96
|
+
* O que se perde é só o diff por campo desse literal. Antes, o spread dinâmico saía
|
|
97
|
+
* como uma ilha `SpreadElement` (que o leitor recusa) e, num objeto, sob a chave
|
|
98
|
+
* `"...spread"` — dois spreads no mesmo objeto sobrescreviam-se na escrita.
|
|
86
99
|
*/
|
|
87
100
|
|
|
88
101
|
/**
|
|
89
102
|
* Converte um nó AST em valor JSON.
|
|
90
103
|
* - Literal → valor direto
|
|
91
|
-
* - ArrayExpression → array JSON
|
|
92
|
-
* - ObjectExpression → objeto JSON (via objectToJson)
|
|
104
|
+
* - ArrayExpression → array JSON (ou uma ilha, se tem spread dinâmico)
|
|
105
|
+
* - ObjectExpression → objeto JSON (via objectToJson; ou uma ilha)
|
|
93
106
|
* - Outros → marcador #expr com o nó codificado
|
|
94
107
|
*/
|
|
95
|
-
declare const valueToJson: (node: any) =>
|
|
108
|
+
declare const valueToJson: (node: any) => unknown;
|
|
96
109
|
/**
|
|
97
110
|
* Converte ObjectExpression AST para objeto JSON.
|
|
98
|
-
* Valores estáticos viram JSON direto; valores com lógica recebem `#expr
|
|
111
|
+
* Valores estáticos viram JSON direto; valores com lógica recebem `#expr`;
|
|
112
|
+
* spread dinâmico ou chave computada não literal fazem o objeto inteiro virar uma
|
|
113
|
+
* ilha `ObjectExpression`.
|
|
99
114
|
*/
|
|
100
|
-
declare function objectToJson(expr: ObjectExpression):
|
|
115
|
+
declare function objectToJson(expr: ObjectExpression): unknown;
|
|
101
116
|
|
|
102
117
|
export { type CodecErrorCode, decode, encode, fromJson, objectToJson, valueToJson };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {print}from'@tslite/printer';import {pick,TSLiteError,isValidExpressionEntryType,invalidExpressionEntryError}from'@tslite/core';import*as a from'@tslite/core/builders';var c=e=>{if(e.type==="Literal")return e.value;if(e.type==="ArrayExpression")return e.elements.map(c);if(e.type==="ObjectExpression")return b(e);let t=r(e);if(t&&typeof t=="object"&&"type"in t){let{type:s,...l}=t;return {"#expr":s,...l}}return {"#expr":"Unknown",value:t}},d=e=>e.type==="Literal"?e.value:print(e);function b(e){let t=e.properties.flatMap(s=>{if(s.type==="SpreadElement"){let i=c(s.argument);return typeof i=="object"&&i!==null&&!Array.isArray(i)&&!("#expr"in i)?Object.entries(i):[["...spread",{"#expr":"SpreadElement",argument:r(s)?.argument}]]}let l=d(s.key);return s.computed?[[`[${l}]`,c(s.value)]]:[[l,c(s.value)]]});return Object.fromEntries(t)}var p=e=>{let t={};for(let s in e)e[s]==false||e[s]==null||(t[s]=e[s]);return t},r=e=>!e||typeof e!="object"?e:Array.isArray(e)?e.map(r):f[e.type]?.(e),f={ArrayExpression:e=>({type:"ArrayExpression",elements:r(e.elements||[])}),ArrayPattern:e=>({type:"ArrayPattern",elements:r(e.elements||[])}),ArrowFunctionExpression:e=>({type:"ArrowFunctionExpression",params:r(e.params||[]),body:r(e.body),...p({async:e.async})}),AssignmentExpression:e=>({type:"AssignmentExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),AssignmentProperty:e=>({type:"Property",key:r(e.key),value:r(e.value),...p({shorthand:e.shorthand})}),AwaitExpression:e=>({type:"AwaitExpression",argument:r(e.argument)}),BinaryExpression:e=>({type:"BinaryExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),BlockStatement:e=>({type:"BlockStatement",body:r(e.body||[])}),BreakStatement:e=>({type:"BreakStatement",...p({label:r(e.label)})}),CallExpression:e=>({type:"CallExpression",callee:r(e.callee),arguments:r(e.arguments||[]),...p({optional:e.optional})}),CatchClause:e=>({type:"CatchClause",param:r(e.param||[]),body:r(e.body)}),ChainExpression:e=>({type:"ChainExpression",expression:r(e.expression)}),ConditionalExpression:e=>({type:"ConditionalExpression",test:r(e.test),consequent:r(e.consequent),alternate:r(e.alternate)}),ContinueStatement:e=>({type:"ContinueStatement",...p({label:r(e.label)})}),DoWhileStatement:e=>({type:"DoWhileStatement",body:r(e.body),test:r(e.test)}),EmptyStatement:()=>({type:"EmptyStatement"}),ExpressionStatement:e=>({type:"ExpressionStatement",expression:r(e.expression)}),ForInStatement:e=>({type:"ForInStatement",left:r(e.left),right:r(e.right),body:r(e.body)}),ForOfStatement:e=>({type:"ForOfStatement",left:r(e.left),right:r(e.right),body:r(e.body),...p({await:e.await})}),ForStatement:e=>({type:"ForStatement",body:r(e.body),...p({init:r(e.init),test:r(e.test),update:r(e.update)})}),FunctionDeclaration:e=>({type:"FunctionDeclaration",id:r(e.id),params:r(e.params||[]),body:r(e.body),...p(pick(e,["async"]))}),FunctionExpression:e=>({type:"FunctionExpression",params:r(e.params||[]),body:r(e.body),...p({id:e.id?r(e.id):false,async:e.async})}),Identifier:e=>({type:"Identifier",name:e.name}),Placeholder:()=>({type:"Placeholder"}),IfStatement:e=>({type:"IfStatement",test:r(e.test),consequent:r(e.consequent),alternate:r(e.alternate)}),JsonExpression:e=>({type:"JsonExpression",body:e.body}),Literal:e=>({type:"Literal",value:e.value,raw:e.raw}),LogicalExpression:e=>({type:"LogicalExpression",operator:e.operator,left:r(e.left),right:r(e.right)}),MemberExpression:e=>({type:"MemberExpression",object:r(e.object),property:r(e.property),...p(pick(e,["computed","optional"]))}),ObjectExpression:e=>({type:"JsonExpression",body:b(e)}),ObjectPattern:e=>({type:"ObjectPattern",properties:r(e.properties||[])}),Program:e=>({type:"Program",body:r(e.body)}),Property:e=>({type:"Property",key:r(e.key),value:r(e.value),...p(pick(e,["kind","shorthand","computed"]))}),ReturnStatement:e=>({type:"ReturnStatement",argument:r(e.argument)}),SwitchCase:e=>({type:"SwitchCase",test:r(e.test),consequent:r(e.consequent)}),SwitchStatement:e=>({type:"SwitchStatement",discriminant:r(e.discriminant),cases:r(e.cases)}),TemplateElement:e=>({type:"TemplateElement",value:e.value,...p({tail:e.tail})}),TemplateLiteral:e=>({type:"TemplateLiteral",quasis:r(e.quasis),expressions:r(e.expressions)}),ThrowStatement:e=>({type:"ThrowStatement",argument:r(e.argument)}),TryStatement:e=>({type:"TryStatement",block:r(e.block),handler:r(e.handler),finalizer:r(e.finalizer)}),UnaryExpression:e=>({type:"UnaryExpression",operator:e.operator,argument:r(e.argument)}),UpdateExpression:e=>({type:"UpdateExpression",operator:e.operator,argument:r(e.argument),...p({prefix:e.prefix})}),VariableDeclaration:e=>({type:"VariableDeclaration",kind:e.kind,declarations:r(e.declarations||[])}),VariableDeclarator:e=>({type:"VariableDeclarator",id:r(e.id),init:r(e.init)}),WhileStatement:e=>({type:"WhileStatement",test:r(e.test),body:r(e.body)}),SpreadElement:e=>({type:"SpreadElement",argument:r(e.argument)}),RestElement:e=>({type:"RestElement",argument:r(e.argument)})};function n(e,t=new WeakMap){if(e==null)return e;if(typeof e!="object")throw new TSLiteError("not-an-object","AST node must be an object");if(t.has(e))throw new TSLiteError("circular-reference","Circular reference detected in AST",{phase:"ast"});t.set(e,true);try{if(Array.isArray(e))return e.map(l=>n(l,t));let s=e;if(s.type==="JsonExpression")return u(s.body,t);if(typeof s.type=="string"&&S[s.type])return S[s.type](s,t);throw new TSLiteError("unknown-node-type",`Unknown node type: ${s.type}`,{type:s.type})}finally{t.delete(e);}}function u(e,t=new WeakMap){if(e===null||typeof e!="object")return a.literal(e);if(t.has(e))throw new TSLiteError("circular-reference","Circular reference detected in JSON",{phase:"json"});t.set(e,true);try{if(Array.isArray(e))return a.arrayExpression(e.map(i=>u(i,t)));let s=e;if("#expr"in s){let i=s["#expr"];if(!isValidExpressionEntryType(i))throw invalidExpressionEntryError(i);let m={...s,type:i};return delete m["#expr"],w(m,t)}let l=Object.entries(s).map(([i,m])=>a.property(a.identifier(i),u(m,t),!1,!1));return a.objectExpression(l)}finally{t.delete(e);}}function w(e,t){if(typeof e.type!="string")throw new TSLiteError("missing-node-type","AST node must have a type property");if(!S[e.type])throw new TSLiteError("unknown-node-type",`Unknown AST node type: ${e.type}`,{type:e.type});return S[e.type](e,t)}var S={ArrayExpression:(e,t)=>a.arrayExpression(o(e.elements,t)),ArrayPattern:(e,t)=>a.arrayPattern(o(e.elements,t)),ArrowFunctionExpression:(e,t)=>a.arrowFunctionExpression(o(e.params,t),n(e.body,t),e.async||false,e.generator||false),AssignmentExpression:(e,t)=>a.assignmentExpression(e.operator,n(e.left,t),n(e.right,t)),AssignmentProperty:(e,t)=>a.assignmentProperty(n(e.key,t),n(e.value,t),e.shorthand||false),AwaitExpression:(e,t)=>a.awaitExpression(n(e.argument,t)),BinaryExpression:(e,t)=>a.binaryExpression(e.operator,n(e.left,t),n(e.right,t)),BlockStatement:(e,t)=>a.blockStatement(o(e.body,t)),BreakStatement:(e,t)=>a.breakStatement(e.label?n(e.label,t):null),CallExpression:(e,t)=>a.callExpression(n(e.callee,t),o(e.arguments,t),e.optional||false),CatchClause:(e,t)=>a.catchClause(e.param?n(e.param,t):null,n(e.body,t)),ChainExpression:(e,t)=>a.chainExpression(n(e.expression,t)),ConditionalExpression:(e,t)=>a.conditionalExpression(n(e.test,t),n(e.consequent,t),n(e.alternate,t)),ContinueStatement:(e,t)=>a.continueStatement(e.label?n(e.label,t):null),DoWhileStatement:(e,t)=>a.doWhileStatement(n(e.body,t),n(e.test,t)),EmptyStatement:()=>a.emptyStatement(),ExpressionStatement:(e,t)=>a.expressionStatement(n(e.expression,t)),ForInStatement:(e,t)=>a.forInStatement(n(e.left,t),n(e.right,t),n(e.body,t)),ForOfStatement:(e,t)=>a.forOfStatement(n(e.left,t),n(e.right,t),n(e.body,t),e.await||false),ForStatement:(e,t)=>a.forStatement(e.init?n(e.init,t):null,e.test?n(e.test,t):null,e.update?n(e.update,t):null,n(e.body,t)),FunctionDeclaration:(e,t)=>a.functionDeclaration(n(e.id,t),o(e.params,t),n(e.body,t),e.generator||false,e.async||false),FunctionExpression:(e,t)=>a.functionExpression(e.id?n(e.id,t):null,o(e.params,t),n(e.body,t),e.async||false,e.generator||false),Identifier:e=>a.identifier(e.name),Placeholder:()=>a.placeholder(),IfStatement:(e,t)=>a.ifStatement(n(e.test,t),n(e.consequent,t),e.alternate?n(e.alternate,t):null),Literal:e=>a.literal(e.value),LogicalExpression:(e,t)=>a.logicalExpression(e.operator,n(e.left,t),n(e.right,t)),MemberExpression:(e,t)=>a.memberExpression(n(e.object,t),n(e.property,t),e.computed||false,e.optional||false),ObjectExpression:(e,t)=>a.objectExpression(o(e.properties,t)),ObjectPattern:(e,t)=>a.objectPattern(o(e.properties,t)),Program:(e,t)=>a.program(o(e.body,t)),Property:(e,t)=>a.property(n(e.key,t),n(e.value,t),e.shorthand||false,e.computed||false),RestElement:(e,t)=>a.restElement(n(e.argument,t)),ReturnStatement:(e,t)=>a.returnStatement(e.argument?n(e.argument,t):null),SpreadElement:(e,t)=>a.spreadElement(n(e.argument,t)),SwitchCase:(e,t)=>a.switchCase(e.test?n(e.test,t):null,o(e.consequent,t)),SwitchStatement:(e,t)=>a.switchStatement(n(e.discriminant,t),o(e.cases,t)),TemplateElement:e=>a.templateElement(e.value,e.tail||false),TemplateLiteral:(e,t)=>a.templateLiteral(o(e.quasis,t),o(e.expressions,t)),ThrowStatement:(e,t)=>a.throwStatement(n(e.argument,t)),TryStatement:(e,t)=>a.tryStatement(n(e.block,t),e.handler?n(e.handler,t):null,e.finalizer?n(e.finalizer,t):null),UnaryExpression:(e,t)=>a.unaryExpression(e.operator,n(e.argument,t)),UpdateExpression:(e,t)=>a.updateExpression(e.operator,n(e.argument,t),e.prefix||false),VariableDeclaration:(e,t)=>a.variableDeclaration(e.kind,o(e.declarations,t)),VariableDeclarator:(e,t)=>a.variableDeclarator(n(e.id,t),e.init?n(e.init,t):null),WhileStatement:(e,t)=>a.whileStatement(n(e.test,t),n(e.body,t))};function o(e,t){return e?e.map(s=>s!=null?n(s,t):null):[]}export{n as decode,r as encode,u as fromJson,b as objectToJson,c as valueToJson};
|
|
1
|
+
import {pick,TSLiteError,isValidExpressionEntryType,invalidExpressionEntryError}from'@tslite/core';import*as r from'@tslite/core/builders';var m=e=>e.type==="Literal"?e.value:e.type==="ArrayExpression"?d(e):e.type==="ObjectExpression"?x(e):S(a(e));function S(e){if(e&&typeof e=="object"&&"type"in e){let{type:t,...s}=e;return {"#expr":t,...s}}return {"#expr":"Unknown",value:e}}function d(e){return h(e)??S(a(e))}function x(e){return f(e)??S(a(e))}function h(e){let t=[];for(let s of e.elements){if(s==null)return null;if(s.type==="SpreadElement"){let l=m(s.argument);if(!Array.isArray(l))return null;t.push(...l);continue}t.push(m(s));}return t}function f(e){let t=[];for(let s of e.properties){if(s.type==="SpreadElement"){let p=m(s.argument);if(!w(p))return null;t.push(...Object.entries(p));continue}let l=g(s.key,!!s.computed);if(l===null)return null;t.push([l,m(s.value)]);}return Object.fromEntries(t)}function g(e,t){return e.type==="Literal"?String(e.value):t?null:e.type==="Identifier"?e.name:null}var w=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&!("#expr"in e);var i=e=>{let t={};for(let s in e)e[s]==false||e[s]==null||(t[s]=e[s]);return t},a=e=>!e||typeof e!="object"?e:Array.isArray(e)?e.map(a):A[e.type]?.(e),A={ArrayExpression:e=>({type:"ArrayExpression",elements:a(e.elements||[])}),ArrayPattern:e=>({type:"ArrayPattern",elements:a(e.elements||[])}),ArrowFunctionExpression:e=>({type:"ArrowFunctionExpression",params:a(e.params||[]),body:a(e.body),...i({async:e.async})}),AssignmentExpression:e=>({type:"AssignmentExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),AssignmentProperty:e=>({type:"Property",key:a(e.key),value:a(e.value),...i({shorthand:e.shorthand})}),AwaitExpression:e=>({type:"AwaitExpression",argument:a(e.argument)}),BinaryExpression:e=>({type:"BinaryExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),BlockStatement:e=>({type:"BlockStatement",body:a(e.body||[])}),BreakStatement:e=>({type:"BreakStatement",...i({label:a(e.label)})}),CallExpression:e=>({type:"CallExpression",callee:a(e.callee),arguments:a(e.arguments||[]),...i({optional:e.optional})}),CatchClause:e=>({type:"CatchClause",param:a(e.param||[]),body:a(e.body)}),ChainExpression:e=>({type:"ChainExpression",expression:a(e.expression)}),ConditionalExpression:e=>({type:"ConditionalExpression",test:a(e.test),consequent:a(e.consequent),alternate:a(e.alternate)}),ContinueStatement:e=>({type:"ContinueStatement",...i({label:a(e.label)})}),DoWhileStatement:e=>({type:"DoWhileStatement",body:a(e.body),test:a(e.test)}),EmptyStatement:()=>({type:"EmptyStatement"}),ExpressionStatement:e=>({type:"ExpressionStatement",expression:a(e.expression)}),ForInStatement:e=>({type:"ForInStatement",left:a(e.left),right:a(e.right),body:a(e.body)}),ForOfStatement:e=>({type:"ForOfStatement",left:a(e.left),right:a(e.right),body:a(e.body),...i({await:e.await})}),ForStatement:e=>({type:"ForStatement",body:a(e.body),...i({init:a(e.init),test:a(e.test),update:a(e.update)})}),FunctionDeclaration:e=>({type:"FunctionDeclaration",id:a(e.id),params:a(e.params||[]),body:a(e.body),...i(pick(e,["async"]))}),FunctionExpression:e=>({type:"FunctionExpression",params:a(e.params||[]),body:a(e.body),...i({id:e.id?a(e.id):false,async:e.async})}),Identifier:e=>({type:"Identifier",name:e.name}),Placeholder:()=>({type:"Placeholder"}),IfStatement:e=>({type:"IfStatement",test:a(e.test),consequent:a(e.consequent),alternate:a(e.alternate)}),JsonExpression:e=>({type:"JsonExpression",body:e.body}),Literal:e=>({type:"Literal",value:e.value,raw:e.raw}),LogicalExpression:e=>({type:"LogicalExpression",operator:e.operator,left:a(e.left),right:a(e.right)}),MemberExpression:e=>({type:"MemberExpression",object:a(e.object),property:a(e.property),...i(pick(e,["computed","optional"]))}),ObjectExpression:e=>{let t=f(e);return t?{type:"JsonExpression",body:t}:{type:"ObjectExpression",properties:a(e.properties)}},ObjectPattern:e=>({type:"ObjectPattern",properties:a(e.properties||[])}),Program:e=>({type:"Program",body:a(e.body)}),Property:e=>({type:"Property",key:a(e.key),value:a(e.value),...i(pick(e,["kind","shorthand","computed"]))}),ReturnStatement:e=>({type:"ReturnStatement",argument:a(e.argument)}),SwitchCase:e=>({type:"SwitchCase",test:a(e.test),consequent:a(e.consequent)}),SwitchStatement:e=>({type:"SwitchStatement",discriminant:a(e.discriminant),cases:a(e.cases)}),TemplateElement:e=>({type:"TemplateElement",value:e.value,...i({tail:e.tail})}),TemplateLiteral:e=>({type:"TemplateLiteral",quasis:a(e.quasis),expressions:a(e.expressions)}),ThrowStatement:e=>({type:"ThrowStatement",argument:a(e.argument)}),TryStatement:e=>({type:"TryStatement",block:a(e.block),handler:a(e.handler),finalizer:a(e.finalizer)}),UnaryExpression:e=>({type:"UnaryExpression",operator:e.operator,argument:a(e.argument)}),UpdateExpression:e=>({type:"UpdateExpression",operator:e.operator,argument:a(e.argument),...i({prefix:e.prefix})}),VariableDeclaration:e=>({type:"VariableDeclaration",kind:e.kind,declarations:a(e.declarations||[])}),VariableDeclarator:e=>({type:"VariableDeclarator",id:a(e.id),init:a(e.init)}),WhileStatement:e=>({type:"WhileStatement",test:a(e.test),body:a(e.body)}),SpreadElement:e=>({type:"SpreadElement",argument:a(e.argument)}),RestElement:e=>({type:"RestElement",argument:a(e.argument)})};function n(e,t=new WeakMap){if(e==null)return e;if(typeof e!="object")throw new TSLiteError("not-an-object","AST node must be an object");if(t.has(e))throw new TSLiteError("circular-reference","Circular reference detected in AST",{phase:"ast"});t.set(e,true);try{if(Array.isArray(e))return e.map(l=>n(l,t));let s=e;if(s.type==="JsonExpression")return u(s.body,t);if(typeof s.type=="string"&&b[s.type])return b[s.type](s,t);throw new TSLiteError("unknown-node-type",`Unknown node type: ${s.type}`,{type:s.type})}finally{t.delete(e);}}function u(e,t=new WeakMap){if(e===null||typeof e!="object")return r.literal(e);if(t.has(e))throw new TSLiteError("circular-reference","Circular reference detected in JSON",{phase:"json"});t.set(e,true);try{if(Array.isArray(e))return r.arrayExpression(e.map(p=>u(p,t)));let s=e;if("#expr"in s){let p=s["#expr"];if(!isValidExpressionEntryType(p))throw invalidExpressionEntryError(p);let c={...s,type:p};return delete c["#expr"],C(c,t)}let l=Object.entries(s).map(([p,c])=>r.property(r.identifier(p),u(c,t),!1,!1));return r.objectExpression(l)}finally{t.delete(e);}}function C(e,t){if(typeof e.type!="string")throw new TSLiteError("missing-node-type","AST node must have a type property");if(!b[e.type])throw new TSLiteError("unknown-node-type",`Unknown AST node type: ${e.type}`,{type:e.type});return b[e.type](e,t)}var b={ArrayExpression:(e,t)=>r.arrayExpression(o(e.elements,t)),ArrayPattern:(e,t)=>r.arrayPattern(o(e.elements,t)),ArrowFunctionExpression:(e,t)=>r.arrowFunctionExpression(o(e.params,t),n(e.body,t),e.async||false,e.generator||false),AssignmentExpression:(e,t)=>r.assignmentExpression(e.operator,n(e.left,t),n(e.right,t)),AssignmentProperty:(e,t)=>r.assignmentProperty(n(e.key,t),n(e.value,t),e.shorthand||false),AwaitExpression:(e,t)=>r.awaitExpression(n(e.argument,t)),BinaryExpression:(e,t)=>r.binaryExpression(e.operator,n(e.left,t),n(e.right,t)),BlockStatement:(e,t)=>r.blockStatement(o(e.body,t)),BreakStatement:(e,t)=>r.breakStatement(e.label?n(e.label,t):null),CallExpression:(e,t)=>r.callExpression(n(e.callee,t),o(e.arguments,t),e.optional||false),CatchClause:(e,t)=>r.catchClause(e.param?n(e.param,t):null,n(e.body,t)),ChainExpression:(e,t)=>r.chainExpression(n(e.expression,t)),ConditionalExpression:(e,t)=>r.conditionalExpression(n(e.test,t),n(e.consequent,t),n(e.alternate,t)),ContinueStatement:(e,t)=>r.continueStatement(e.label?n(e.label,t):null),DoWhileStatement:(e,t)=>r.doWhileStatement(n(e.body,t),n(e.test,t)),EmptyStatement:()=>r.emptyStatement(),ExpressionStatement:(e,t)=>r.expressionStatement(n(e.expression,t)),ForInStatement:(e,t)=>r.forInStatement(n(e.left,t),n(e.right,t),n(e.body,t)),ForOfStatement:(e,t)=>r.forOfStatement(n(e.left,t),n(e.right,t),n(e.body,t),e.await||false),ForStatement:(e,t)=>r.forStatement(e.init?n(e.init,t):null,e.test?n(e.test,t):null,e.update?n(e.update,t):null,n(e.body,t)),FunctionDeclaration:(e,t)=>r.functionDeclaration(n(e.id,t),o(e.params,t),n(e.body,t),e.generator||false,e.async||false),FunctionExpression:(e,t)=>r.functionExpression(e.id?n(e.id,t):null,o(e.params,t),n(e.body,t),e.async||false,e.generator||false),Identifier:e=>r.identifier(e.name),Placeholder:()=>r.placeholder(),IfStatement:(e,t)=>r.ifStatement(n(e.test,t),n(e.consequent,t),e.alternate?n(e.alternate,t):null),Literal:e=>r.literal(e.value),LogicalExpression:(e,t)=>r.logicalExpression(e.operator,n(e.left,t),n(e.right,t)),MemberExpression:(e,t)=>r.memberExpression(n(e.object,t),n(e.property,t),e.computed||false,e.optional||false),ObjectExpression:(e,t)=>r.objectExpression(o(e.properties,t)),ObjectPattern:(e,t)=>r.objectPattern(o(e.properties,t)),Program:(e,t)=>r.program(o(e.body,t)),Property:(e,t)=>r.property(n(e.key,t),n(e.value,t),e.shorthand||false,e.computed||false),RestElement:(e,t)=>r.restElement(n(e.argument,t)),ReturnStatement:(e,t)=>r.returnStatement(e.argument?n(e.argument,t):null),SpreadElement:(e,t)=>r.spreadElement(n(e.argument,t)),SwitchCase:(e,t)=>r.switchCase(e.test?n(e.test,t):null,o(e.consequent,t)),SwitchStatement:(e,t)=>r.switchStatement(n(e.discriminant,t),o(e.cases,t)),TemplateElement:e=>r.templateElement(e.value,e.tail||false),TemplateLiteral:(e,t)=>r.templateLiteral(o(e.quasis,t),o(e.expressions,t)),ThrowStatement:(e,t)=>r.throwStatement(n(e.argument,t)),TryStatement:(e,t)=>r.tryStatement(n(e.block,t),e.handler?n(e.handler,t):null,e.finalizer?n(e.finalizer,t):null),UnaryExpression:(e,t)=>r.unaryExpression(e.operator,n(e.argument,t)),UpdateExpression:(e,t)=>r.updateExpression(e.operator,n(e.argument,t),e.prefix||false),VariableDeclaration:(e,t)=>r.variableDeclaration(e.kind,o(e.declarations,t)),VariableDeclarator:(e,t)=>r.variableDeclarator(n(e.id,t),e.init?n(e.init,t):null),WhileStatement:(e,t)=>r.whileStatement(n(e.test,t),n(e.body,t))};function o(e,t){return e?e.map(s=>s!=null?n(s,t):null):[]}export{n as decode,a as encode,u as fromJson,x as objectToJson,m as valueToJson};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslite/codec",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "TSLite codec — serializes AST to hybrid #expr JSON and back (encode/decode)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -40,8 +40,11 @@
|
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@tslite/core": "0.8.
|
|
44
|
-
|
|
43
|
+
"@tslite/core": "0.8.2"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@tslite/parser": "1.3.0",
|
|
47
|
+
"@tslite/printer": "0.5.3"
|
|
45
48
|
},
|
|
46
49
|
"scripts": {
|
|
47
50
|
"build": "tsup",
|