UNPKG

lnp

Version:

A compact and deterministic length-prefixed serialization format with a minimal, unambiguous grammar.

2 lines 2.3 kB
"use strict";var u=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var m=(c,e)=>{for(var r in e)u(c,r,{get:e[r],enumerable:!0})},B=(c,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of l(e))!b.call(c,t)&&t!==r&&u(c,t,{get:()=>e[t],enumerable:!(n=d(e,t))||n.enumerable});return c};var g=c=>B(u({},"__esModule",{value:!0}),c);var y={};m(y,{LNPEncoder:()=>i,LNPParser:()=>f});module.exports=g(y);var p=new TextEncoder,i=class{encode(e){return this.encodeLNP(e)}pack(e,r){return Buffer.concat([Buffer.from(e),Buffer.from(String(r.length)),Buffer.from(":"),Buffer.from(r)])}encodeLNP(e){if(e===null)return this.pack("N",Buffer.alloc(0));switch(typeof e){case"string":return this.pack("s",p.encode(e));case"number":return this.pack("n",Buffer.from(String(e)));case"boolean":return this.pack("b",Buffer.from(e?"t":"f"));case"object":return Array.isArray(e)?this.pack("a",this.encodeLNPArray(e)):this.pack("o",this.encodeLNPObject(e));default:throw new Error("Unsupported type in LNP")}}encodeLNPArray(e){return Buffer.concat(e.map(r=>this.encodeLNP(r)))}encodeLNPObject(e){let r=[];for(let[n,t]of Object.entries(e)){let o=p.encode(n);r.push(Buffer.from(String(o.length)+":")),r.push(Buffer.from(o)),r.push(this.encodeLNP(t))}return Buffer.concat(r)}},f=class{parse(e){let[r,n]=this.parseValue(e);return r}parseValue(e,r=0){let n=String.fromCharCode(e[r]);r++;let t="";for(;e[r]!==58;)t+=String.fromCharCode(e[r]),r++;r++;let o=parseInt(t,10),s=r+o,a=e.subarray(r,s);switch(n){case"s":return[new TextDecoder().decode(a),s];case"n":return[Number(new TextDecoder().decode(a)),s];case"b":return[a[0]===116,s];case"N":return[null,s];case"B":return[Buffer.from(a.toString(),"base64"),s];case"a":return[this.parseArray(a),s];case"o":return[this.parseObject(a),s];default:throw new Error("Unknown type: "+n)}}parseArray(e){let r=0,n=[];for(;r<e.length;){let[t,o]=this.parseValue(e,r);n.push(t),r=o}return n}parseObject(e){let r=0,n={};for(;r<e.length;){let t="";for(;e[r]!==58;)t+=String.fromCharCode(e[r]),r++;r++;let o=parseInt(t,10),s=new TextDecoder().decode(e.subarray(r,r+o));r+=o;let[a,h]=this.parseValue(e,r);n[s]=a,r=h}return n}};0&&(module.exports={LNPEncoder,LNPParser}); //# sourceMappingURL=index.js.map