@homedev/objector 1.2.24 → 1.2.26

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.
Files changed (2) hide show
  1. package/dist/index.js +9 -9
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- var Or=Object.create;var{getPrototypeOf:Rr,defineProperty:k,getOwnPropertyNames:B,getOwnPropertyDescriptor:Nr}=Object,T=Object.prototype.hasOwnProperty;var b=(r,e,o)=>{o=r!=null?Or(Rr(r)):{};let n=e||!r||!r.__esModule?k(o,"default",{value:r,enumerable:!0}):o;for(let s of B(r))if(!T.call(n,s))k(n,s,{get:()=>r[s],enumerable:!0});return n},_=new WeakMap,Ir=(r)=>{var e=_.get(r),o;if(e)return e;if(e=k({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")B(r).map((n)=>!T.call(e,n)&&k(e,n,{get:()=>r[n],enumerable:!(o=Nr(r,n))||o.enumerable}));return _.set(r,e),e};var $r=(r,e)=>{for(var o in e)k(r,o,{get:e[o],enumerable:!0,configurable:!0,set:(n)=>e[o]=()=>n})};var qr={};$r(qr,{Objector:()=>Sr});module.exports=Ir(qr);var Er=require("@homedev/fields"),N=require("@homedev/files"),jr=require("@homedev/merge"),U=b(require("path"));var z=require("@homedev/navigate"),V=(r)=>({output:(e)=>{delete e.parent[e.key];for(let o of Array.isArray(e.value)?e.value:[e.value])if(typeof o==="string")r.output({name:o,value:e.parent});else r.output({...o,value:o.value??e.parent});return z.NavigateResult.SkipSiblings()}});var Y=require("@homedev/navigate"),G=b(require("path")),H=(r)=>({load:async(e)=>{let o=e.options.globalContext;for(let{file:n}of Array.isArray(e.value)?e.value:[e.value]){if(!n)throw Error("File reference required");await r.load(n,o.file&&G.default.dirname(o.file))}return Y.NavigateResult.DeleteItem()}});var $=require("@homedev/fields"),q=require("@homedev/merge"),h=require("@homedev/select"),Q=()=>({each:{filters:[/select|model/],fn:async(r)=>{let e=r.value;delete r.parent[r.key];let o=()=>{let i=e.model;if(typeof r.value==="string"||!i)return r.parent;if(typeof i==="string")return h.select(r.root,i);return i},n=()=>{if(typeof r.value==="string")return h.select(r.root,r.value);if(Array.isArray(r.value))return r.value;if(typeof e.from==="string")return h.select(r.root,e.from);return e.from},s=async(i)=>{if(e.selector===void 0)return i;if(typeof e.selector!=="string"){let l=JSON.parse(JSON.stringify(e.selector));return await $.processFields(l,{...r.options,root:{...r.root,result:i}}),l}return await h.select({...r.root,result:i},e.selector)},t=await n(),a=await o();if(!Array.isArray(t))throw Error('Key "each" requires a source list');if(a===void 0)throw Error('Key "each" must define a model');if(e.extend?.model)a=q.mergeAll([e.model,...Array.isArray(e.extend.model)?e.extend.model:[e.extend.model]]);let f=[];for(let i=0;i<t.length;i++){let l=globalThis.structuredClone?structuredClone(a):JSON.parse(JSON.stringify(a));if(await $.processFields(l,{...r.options,root:{...r.root,index:i,item:t[i],instance:l}}),e.extend?.result){let m=e.extend.result;l=q.mergeAll([l,...Array.isArray(m)?m:[m]])}f.push(await s(l))}return f}}});var W=require("@homedev/select"),X=()=>({concat:async(r)=>{let e=[];for(let o of Array.isArray(r.value)?r.value:[r.value])e.push(...await W.select(r.root,o));return e.filter((o)=>o!==void 0)}});var Z=require("@homedev/fields"),K=require("@homedev/merge"),v=require("@homedev/navigate"),x=require("@homedev/select"),rr=()=>({extends:async(r)=>{let e=async(o,n)=>{for(let s of Array.isArray(n)?n:[n]){let t=await x.select(r.root,s),a=globalThis.structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t));if(a[r.key])await e(a,a[r.key]);await Z.processFields(a,{...r.options}),K.merge(a,o),delete o[r.key]}};return await e(r.parent,r.value),v.NavigateResult.Explore()}});var er=require("@homedev/fields"),g=require("@homedev/navigate"),or=(r)=>({skip:{types:{0:"boolean"},fn:(e)=>e.value?g.NavigateResult.DeleteParent():g.NavigateResult.DeleteItem()},metadata:({path:e,value:o})=>{return r.metadata(e,o),g.NavigateResult.DeleteItem()},if:{types:{0:"boolean"},fn:async(e)=>{let o=e.parent[".then"],n=e.parent[".else"];if(o!==void 0)delete e.parent[".then"];if(n!==void 0)delete e.parent[".else"];let s=e.value?o:n;if(s===void 0)return g.NavigateResult.DeleteItem();if(typeof s==="string")return(await er.processFields({value:s},{...e.options,root:{...e.root}})).value;return g.NavigateResult.ReplaceParent(s,!0)}},switch:(e)=>{let o=e.value;if(!o.cases)throw Error("Missing cases for switch");if(o.cases[o.from]!==void 0)return g.NavigateResult.ReplaceParent(o.cases[o.from],!0);if(o.default!==void 0)return g.NavigateResult.ReplaceParent(o.default,!0);return g.NavigateResult.DeleteParent()}});var nr=require("@homedev/merge"),tr=require("@homedev/select"),sr=()=>({from:async({root:r,parent:e,value:o})=>{let n=await tr.select(r,o);if(n===null||n===void 0)throw Error(`Unable to resolve reference: ${o}`);if(e.content){if(Array.isArray(e.content)&&Array.isArray(n))return[...n,...e.content];return nr.merge(n,e.content),e.content}return n}});var ar=require("@homedev/navigate"),D=b(require("node:vm")),ir=(r)=>({modules:async(e)=>{for(let[o,n]of Object.entries(e.value)){let s=D.default.createContext({console,objector:r,document:e.root}),t=new D.default.SourceTextModule(n,{identifier:o,context:s});await t.link((a)=>{throw Error(`Module ${a} is not allowed`)}),await t.evaluate(),r.sources(Object.fromEntries(Object.entries(t.namespace).map(([a,f])=>[`${o}.${a}`,(i)=>f(i,...i.args)])))}return ar.NavigateResult.DeleteItem()}});var P=require("@homedev/files"),J=b(require("fs/promises")),F=b(require("path")),fr=(r)=>({include:async(e)=>{let{file:o}=e.options.globalContext;return await P.globMap(e.args[0],{cwd:F.default.dirname(o),filter:(n)=>F.default.basename(o)!==n,map:async(n)=>r.load(n,F.default.dirname(o),{parent:e.root})})},file:async(e)=>await J.default.readFile(await P.locate(e.args[0],r.getIncludeDirectories())).then((o)=>o.toString()),scan:async(e)=>{let o=[],s=(()=>{let f=e.args[2]??["**/node_modules/**"],i=typeof f==="string"?f.split(",").map((l)=>l.trim()):f;if(!Array.isArray(i))throw Error("Scan exclusion must be a list");return i})(),{file:t}=e.options.globalContext,a=e.args[1]?await P.locate(e.args[1],r.getIncludeDirectories()):F.default.dirname(t);for await(let f of J.default.glob(e.args[0],{cwd:a,exclude:(i)=>s.some((l)=>F.default.matchesGlob(i,l))}))o.push(f);return o}});var pr=()=>({env:(r)=>process.env[r.args[0]]});var u=require("@homedev/string-utils"),O=b(require("yaml"));var C=(r,e=0)=>{let o=" ".repeat(e),n=" ".repeat(e+1);if(r===null||r===void 0)return"null";else if(typeof r==="boolean")return String(r);else if(typeof r==="number")return String(r);else if(typeof r==="string")return`"${r.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`;else if(Array.isArray(r)){if(r.length===0)return"[]";return`[
2
- ${r.map((t)=>`${n}${C(t,e+1)},`).join(`
1
+ var _r=Object.create;var{getPrototypeOf:hr,defineProperty:C,getOwnPropertyNames:B,getOwnPropertyDescriptor:Tr}=Object,Y=Object.prototype.hasOwnProperty;var A=(r,e,o)=>{o=r!=null?_r(hr(r)):{};let n=e||!r||!r.__esModule?C(o,"default",{value:r,enumerable:!0}):o;for(let s of B(r))if(!Y.call(n,s))C(n,s,{get:()=>r[s],enumerable:!0});return n},T=new WeakMap,Br=(r)=>{var e=T.get(r),o;if(e)return e;if(e=C({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")B(r).map((n)=>!Y.call(e,n)&&C(e,n,{get:()=>r[n],enumerable:!(o=Tr(r,n))||o.enumerable}));return T.set(r,e),e};var Yr=(r,e)=>{for(var o in e)C(r,o,{get:e[o],enumerable:!0,configurable:!0,set:(n)=>e[o]=()=>n})};var Kr={};Yr(Kr,{Objector:()=>$r});module.exports=Br(Kr);var Ir=require("@homedev/fields"),q=require("@homedev/files"),Jr=require("@homedev/merge"),_=A(require("path"));var K=require("@homedev/navigate"),G=(r)=>({output:(e)=>{delete e.parent[e.key];for(let o of Array.isArray(e.value)?e.value:[e.value])if(typeof o==="string")r.output({name:o,value:e.parent});else r.output({...o,value:o.value??e.parent});return K.NavigateResult.SkipSiblings()}});var H=require("@homedev/navigate"),Q=A(require("path")),W=(r)=>({load:async(e)=>{let o=e.options.globalContext;for(let{file:n}of Array.isArray(e.value)?e.value:[e.value]){if(!n)throw Error("File reference required");await r.load(n,o.file&&Q.default.dirname(o.file))}return H.NavigateResult.DeleteItem()}});var rr=require("@homedev/fields"),J=require("@homedev/merge");var X=require("@homedev/select"),Z=(r)=>{if(typeof r.value==="string")return r.parent;let e=r.value.model;if(!e)return r.parent;if(typeof e==="string")return X.select(r.root,e);return e};var I=require("@homedev/select"),z=(r)=>{if(typeof r.value==="string")return I.select(r.root,r.value);if(Array.isArray(r.value))return r.value;let e=r.value;if(typeof e.from==="string")return I.select(r.root,e.from);return e.from};var V=require("@homedev/fields"),v=require("@homedev/select"),x=async(r,e)=>{let o=r.value;if(o.selector===void 0)return e;if(typeof o.selector!=="string"){let n=JSON.parse(JSON.stringify(o.selector));return await V.processFields(n,{...r.options,root:{...r.root,result:e}}),n}return await v.select({...r.root,result:e},o.selector)};var F=(r)=>globalThis.structuredClone?structuredClone(r):JSON.parse(JSON.stringify(r));var er=()=>({each:{filters:[/select|model/],fn:async(r)=>{let e=r.value;delete r.parent[r.key];let o=await z(r),n=await Z(r);if(!Array.isArray(o))throw Error('Key "each" requires a source list');if(n===void 0)throw Error('Key "each" must define a model');if(e.extend?.model)n=J.mergeAll([e.model,...Array.isArray(e.extend.model)?e.extend.model:[e.extend.model]]);let s=[];for(let t=0;t<o.length;t++){let i=F(n);if(await rr.processFields(i,{...r.options,root:{...r.root,index:t,item:o[t],instance:i}}),e.extend?.result){let a=e.extend.result;i=J.mergeAll([i,...Array.isArray(a)?a:[a]])}s.push(await x(r,i))}return s}}});var or=require("@homedev/select"),nr=()=>({concat:async(r)=>{let e=[];for(let o of Array.isArray(r.value)?r.value:[r.value])e.push(...await or.select(r.root,o));return e.filter((o)=>o!==void 0)}});var tr=require("@homedev/fields"),sr=require("@homedev/merge"),ir=require("@homedev/navigate"),ar=require("@homedev/select");var fr=()=>({extends:async(r)=>{let e=async(o,n)=>{for(let s of Array.isArray(n)?n:[n]){let t=await ar.select(r.root,s),i=F(t);if(i[r.key])await e(i,i[r.key]);await tr.processFields(i,{...r.options}),sr.merge(i,o),delete o[r.key]}};return await e(r.parent,r.value),ir.NavigateResult.Explore()}});var lr=require("@homedev/fields"),d=require("@homedev/navigate"),mr=(r)=>({skip:{types:{0:"boolean"},fn:(e)=>e.value?d.NavigateResult.DeleteParent():d.NavigateResult.DeleteItem()},metadata:({path:e,value:o})=>{return r.metadata(e,o),d.NavigateResult.DeleteItem()},if:{types:{0:"boolean"},fn:async(e)=>{let o=e.parent[".then"],n=e.parent[".else"];if(o!==void 0)delete e.parent[".then"];if(n!==void 0)delete e.parent[".else"];let s=e.value?o:n;if(s===void 0)return d.NavigateResult.DeleteItem();if(typeof s==="string")return(await lr.processFields({value:s},{...e.options,root:{...e.root}})).value;return d.NavigateResult.ReplaceParent(s,!0)}},switch:(e)=>{let o=e.value;if(!o.cases)throw Error("Missing cases for switch");if(o.cases[o.from]!==void 0)return d.NavigateResult.ReplaceParent(o.cases[o.from],!0);if(o.default!==void 0)return d.NavigateResult.ReplaceParent(o.default,!0);return d.NavigateResult.DeleteParent()}});var pr=require("@homedev/merge"),yr=require("@homedev/select"),ur=()=>({from:async({root:r,parent:e,value:o})=>{let n=await yr.select(r,o);if(n===null||n===void 0)throw Error(`Unable to resolve reference: ${o}`);if(e.content){if(Array.isArray(e.content)&&Array.isArray(n))return[...n,...e.content];return pr.merge(n,e.content),e.content}return n}});var gr=require("@homedev/navigate"),$=A(require("node:vm")),dr=(r)=>({modules:async(e)=>{for(let[o,n]of Object.entries(e.value)){let s=$.default.createContext({console,objector:r,document:e.root}),t=new $.default.SourceTextModule(n,{identifier:o,context:s});await t.link((i)=>{throw Error(`Module ${i} is not allowed`)}),await t.evaluate(),r.sources(Object.fromEntries(Object.entries(t.namespace).map(([i,a])=>[`${o}.${i}`,(f)=>a(f,...f.args)])))}return gr.NavigateResult.DeleteItem()}});var w=require("@homedev/files"),U=A(require("fs/promises")),M=A(require("path")),wr=(r)=>({include:async(e)=>{let{file:o}=e.options.globalContext;return await w.globMap(e.args[0],{cwd:M.default.dirname(o),filter:(n)=>M.default.basename(o)!==n,map:async(n)=>r.load(n,M.default.dirname(o),{parent:e.root})})},exists:async({args:[e]})=>await w.exists(e),file:async(e)=>await U.default.readFile(await w.locate(e.args[0],r.getIncludeDirectories())).then((o)=>o.toString()),scan:async(e)=>{let o=[],s=(()=>{let a=e.args[2]??["**/node_modules/**"],f=typeof a==="string"?a.split(",").map((p)=>p.trim()):a;if(!Array.isArray(f))throw Error("Scan exclusion must be a list");return f})(),{file:t}=e.options.globalContext,i=e.args[1]?await w.locate(e.args[1],r.getIncludeDirectories()):M.default.dirname(t);for await(let a of U.default.glob(e.args[0],{cwd:i,exclude:(f)=>s.some((p)=>M.default.matchesGlob(f,p))}))o.push(a);return o}});var cr=()=>({env:(r)=>process.env[r.args[0]]});var u=require("@homedev/string-utils"),S=A(require("yaml"));var j=(r,e=0,o)=>{let n=" ".repeat(e),s=" ".repeat(e+1);if(r===null||r===void 0)return"null";else if(typeof r==="boolean")return String(r);else if(typeof r==="number")return String(r);else if(typeof r==="string")return`"${r.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`;else if(Array.isArray(r)){if(r.length===0)return"[]";return`[
2
+ ${r.map((i)=>`${s}${j(i,e+1)},`).join(`
3
3
  `)}
4
- ${o}]`}else if(typeof r==="object"){let s=Object.entries(r);if(s.length===0)return"{}";return`{
5
- ${s.map(([a,f])=>`${n}${a} = ${C(f,e+1)}`).join(`
4
+ ${n}]`}else if(typeof r==="object"){let t=Object.entries(r).sort((a,f)=>o?.sortKeys?a[0].localeCompare(f[0]):0);if(t.length===0)return"{}";return`{
5
+ ${t.map(([a,f])=>`${s}${a} = ${j(f,e+1,o)}`).join(`
6
6
  `)}
7
- ${o}}`}else return String(r)},E=(r)=>{if(!r)return r;return r.replaceAll("\\n",`
8
- `).replaceAll("\\$","$").replaceAll("\\t","\t")};var lr=()=>({len:(r)=>r.args[0].length,trim:(r)=>r.args[0].trim(),ltrim:(r)=>r.args[0].trimStart(),rtrim:(r)=>r.args[0].trimEnd(),reverse:(r)=>r.args[0].split("").reverse().join(""),substring:{types:{0:"ref",1:"number",2:"number"},fn:(r)=>r.args[0].substring(r.args[1],r.args[2])},concat:(r)=>r.args.join(""),repeat:{types:{0:"ref",1:"number"},fn:({args:[r,e]})=>{return r.repeat(e)}},lower:(r)=>r.args[0].toLowerCase(),upper:(r)=>r.args[0].toUpperCase(),pascal:(r)=>u.pascal(r.args[0]),camel:(r)=>u.camel(r.args[0]),capital:(r)=>u.capital(r.args[0]),snake:(r)=>u.changeCase(u.snake(r.args[0],"_"),r.args[1]),kebab:(r)=>u.changeCase(u.snake(r.args[0],"-"),r.args[1]),encode:(r)=>Buffer.from(r.args[0]).toString(r.args[1]??"base64"),decode:(r)=>Buffer.from(r.args[0],r.args[1]??"base64").toString(),uuid:(r)=>crypto.randomUUID(),toYaml:({args:[r,e]})=>O.default.stringify(r,null,{indent:e??2}),fromYaml:({args:[r]})=>O.default.parse(r),toJson:({args:[r,e]})=>JSON.stringify(r,null,e!==0?e??2:void 0),fromJson:({args:[r]})=>JSON.parse(r),pad:{types:{0:"ref",1:"number",2:"string"},fn:({args:[r,e],tags:o})=>{let n=o.join?.[0]??`
9
- `,s=o.padChar?.[0]??" ";return u.padBlock(r,e??2,n,s)}},formatAs:{types:{1:["json","yaml","terraform"]},fn:({args:[r,e]})=>{switch(e){case"json":return JSON.stringify(r,null,2);case"yaml":return O.default.stringify(r,null,{indent:2});case"terraform":return C(r)}throw Error("Unsupported format: "+String(e))}}});var R=require("@homedev/object-utils"),L=require("@homedev/select"),mr=require("@homedev/string-utils");var p={eq:(r,e)=>r===e,ne:(r,e)=>r!==e,lt:(r,e)=>typeof r==="number"&&typeof e==="number"&&r<e,le:(r,e)=>typeof r==="number"&&typeof e==="number"&&r<=e,gt:(r,e)=>typeof r==="number"&&typeof e==="number"&&r>e,ge:(r,e)=>typeof r==="number"&&typeof e==="number"&&r>=e,in:(r,e)=>{if(Array.isArray(e))return e.includes(r);if(typeof r==="string")return r.includes(e);if(Array.isArray(r))return r.includes(e);return!1},notin:(r,e)=>!p.in(r,e),null:(r)=>r===null||r===void 0,notnull:(r)=>r!==null&&r!==void 0,empty:(r)=>r==="",notempty:(r)=>r!=="",nullorempty:(r)=>r===null||r===void 0||r==="",notnullorempty:(r)=>r!==null&&r!==void 0&&r!==""},ur=()=>({if:{types:{0:"boolean"},fn:(r)=>r.args[0]?r.args[1]:r.args[2]},check:{types:{0:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:(r)=>{let[e,...o]=r.args;switch(e){case"eq":return o.every((n,s,t)=>p.eq(n,t[0]));case"ne":return!o.every((n,s,t)=>p.eq(n,t[0]));case"lt":return p.lt(o[0],o[1]);case"le":return p.le(o[0],o[1]);case"gt":return p.gt(o[0],o[1]);case"ge":return p.ge(o[0],o[1]);case"in":return p.in(o[0],o[1]);case"notin":return p.notin(o[0],o[1]);case"null":return o.every((n)=>p.null(n));case"notnull":return o.every((n)=>p.notnull(n));case"empty":return o.every((n)=>p.empty(n));case"notempty":return o.every((n)=>p.notempty(n));case"nullorempty":return o.every((n)=>p.nullorempty(n));case"notnullorempty":return o.every((n)=>p.notnullorempty(n))}}},and:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!!e)},or:{types:()=>"boolean",fn:(r)=>r.args.some((e)=>!!e)},xor:{types:()=>"boolean",fn:(r)=>r.args.filter((e)=>!!e).length===1},true:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!!e)},false:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!e)},eq:{fn:(r)=>r.args.every((e,o,n)=>p.eq(e,n[0]))},ne:{fn:(r)=>!r.args.every((e,o,n)=>p.eq(e,n[0]))},null:{fn:(r)=>r.args.every((e)=>e===null||e===void 0)},notnull:{fn:(r)=>r.args.every((e)=>e!==null&&e!==void 0)},empty:{fn:(r)=>r.args.every((e)=>e==="")},notempty:{fn:(r)=>r.args.every((e)=>e!=="")},nullorempty:{fn:(r)=>r.args.every((e)=>e===null||e===void 0||e==="")},notnullorempty:{fn:(r)=>r.args.every((e)=>e!==null&&e!==void 0&&e!=="")},in:{fn:(r)=>p.in(r.args[0],r.args[1])},notin:{fn:(r)=>p.notin(r.args[0],r.args[1])},lt:{fn:(r)=>p.lt(r.args[0],r.args[1])},le:{fn:(r)=>p.le(r.args[0],r.args[1])},gt:{fn:(r)=>p.gt(r.args[0],r.args[1])},ge:{fn:(r)=>p.ge(r.args[0],r.args[1])}});var yr=()=>({merge:(r)=>r.args.flatMap((e)=>e),join:({args:[r],root:e,tags:o})=>{let n=o.key?.[0],s=o.separator?.[0]??o.sep?.[0],t=o.finalize?.length>0,a=E(s);if(typeof r==="string"){if(t&&r.length&&a)return r+a;return r}if(!Array.isArray(r))throw Error("Object is not a list");let f=((n?.length)?r.map((c)=>L.select({...e,...c},n)):r).join(a),i=o.pad?.[0]??"0",l=o.padChar?.[0]??" ",m=t&&f.length&&a?f+a:f;return i?mr.padBlock(m,parseInt(i),`
10
- `,l):m},list:({args:r})=>R.toList(r[0],r[1]),object:({args:r})=>R.toObject(r[0],r[1]),range:({args:[r,e,o]})=>{let n=parseInt(r),s=parseInt(e),t=parseInt(o)||1;if(isNaN(n))throw Error("Invalid range: start value '"+String(r)+"' is not a number");if(isNaN(s))throw Error("Invalid range: end value '"+String(e)+"' is not a number");if(t===0)throw Error("Invalid range: step cannot be zero");if((s-n)/t<0)throw Error("Invalid range: step "+String(t)+" has wrong direction for range "+String(n)+" to "+String(s));return Array.from({length:Math.floor((s-n)/t)+1},(a,f)=>n+f*t)},filter:{types:{1:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:({args:[r,e,o],root:n,tags:s})=>{if(r===null||r===void 0)throw Error("Filter source cannot be null or undefined");if(!Array.isArray(r))throw Error("Filter source must be an array");let t=s.key?.[0],a=p[e];if(!a)throw Error(`Unsupported filter operation: ${e}`);return r.filter((f)=>{try{let i=t?L.select({...n,...f},t):f;return a(i,o)}catch{return!1}})}}});var gr=require("@homedev/fields"),cr=require("@homedev/object-utils"),j=require("@homedev/select"),dr=require("@homedev/string-utils");var wr=()=>({each:{processArgs:!1,fn:async({rawArgs:[r,e,...o],root:n,options:s,tags:t})=>{let a=async(y)=>y.quoted?E(y.value):await j.select(n,y.value),f=await j.select(n,r.value),i=await a(e),l=t.key?.[0],m=Array.isArray(f)?f:cr.toList(f),c=[];for(let y=0;y<m.length;y++){let d=globalThis.structuredClone?structuredClone(i):JSON.parse(JSON.stringify(i)),M={instance:d},I=typeof i==="string"?M:d,w={...n,item:m[y],index:y,params:await Promise.all(o.map(async(Cr)=>await a(Cr))),instance:d,parent:n.this,tags:t};if(t?.root?.[0])Object.assign(w,await j.select(w,t.root[0]));if(await gr.processFields(I,{...s,root:w}),l!==void 0)c.push(await j.select(M.instance,l));else c.push(M.instance)}if(t.join?.length){if(c.length===0)return"";let y=E(t.join[0]),d=t.pad?.[0]??"0",M=t.padChar?.[0]??" ",I=t.finalize?.length&&y?y:"",w=`${c.join(y)}${I}`;return d?dr.padBlock(w,parseInt(d),`
11
- `,M):w}return c}}});var br=require("@homedev/select"),S=async(r,e,o)=>r.rawArgs[e].quoted?r.rawArgs[e].value:await br.select(r.root,r.rawArgs[e].value,{defaultValue:o}),Fr=()=>({switch:{processArgs:!1,fn:async(r)=>{let e=await S(r,0,!1),o=await S(r,1);if(o[e]===void 0){if(r.rawArgs.length>2)return S(r,2);throw Error(`Unhandled switch case: ${e}`)}return o[e]}}});var Ar=()=>({log:(r)=>{console.log(...r.args)}});var Mr=require("@homedev/navigate");var kr=()=>({default:{processArgs:!1,fn:async(r)=>{for(let e=0;e<r.rawArgs.length;e++)if(r.rawArgs[e]?.value!==void 0){let n=await S(r,e,null);if(n!==null)return n}if(r.tags.nullable?.length)return Mr.NavigateResult.DeleteItem();if(r.tags.fail?.length)throw Error(`No valid value found for default (${r.rawArgs.map((e)=>e.value).join(", ")})`);return""}}});var A=require("@homedev/navigate"),hr=()=>({convert:({args:[r,e,o]})=>{switch(e){case"string":return String(r);case"number":{let n=Number(r);if(!isNaN(n))return A.NavigateResult.ReplaceItem(n);break}case"boolean":if(r==="true"||r===!0||r===1||r==="1"||r==="yes"||r==="on")return A.NavigateResult.ReplaceItem(!0);else if(r==="false"||r===!1||r===0||r==="0"||r==="no"||r==="off")return A.NavigateResult.ReplaceItem(!1);break;default:throw Error(`Unsupported type for convert: ${e}`)}if(o!==void 0)return A.NavigateResult.ReplaceItem(o);throw Error(`Failed to convert value to ${e}`)},isType:({args:[r,e]})=>{let n=(()=>{switch(e){case"string":return typeof r==="string";case"number":return typeof r==="number";case"boolean":return typeof r==="boolean";case"object":return r!==null&&typeof r==="object"&&!Array.isArray(r);case"array":return Array.isArray(r);case"null":return r===null;case"undefined":return r===void 0;case"function":return typeof r==="function";default:throw Error(`Unknown type for isType: ${e}`)}})();return A.NavigateResult.ReplaceItem(n)},typeOf:({args:[r]})=>{if(r===null)return"null";else if(Array.isArray(r))return"array";else return typeof r}});var Pr=(r)=>r.keys(V(r)).keys(H(r)).keys(Q()).keys(sr()).keys(X()).keys(rr()).keys(or(r)).keys(ir(r)).sources(fr(r)).sources(pr()).sources(lr()).sources(hr()).sources(yr()).sources(wr()).sources(Fr()).sources(Ar()).sources(ur()).sources(kr());class Sr{includeDirectories=[];includes=[];outputs=[];vars={};cache={};fields={sources:{},keys:{}};objectMetadata={};constructor(){this.use(Pr)}use(r){return r(this),this}includeDirectory(...r){return this.includeDirectories.push(...r),this}getIncludeDirectories(){return this.includeDirectories}include(...r){return this.includes.push(...r),this}keys(r){return Object.assign(this.fields.keys,{...this.fields.keys,...r}),this}sources(r){return Object.assign(this.fields.sources,{...this.fields.sources,...r}),this}variables(r){return this.vars={...this.vars,...r},this}getOutputs(){return this.outputs}output(r){return this.outputs.push(r),this}metadata(r,e){return this.objectMetadata[r]=e,this}getMetadata(r){return this.objectMetadata[r]}getAllMetadata(){return this.objectMetadata}filter(r){return this.fields.filters??=[],this.fields.filters?.push(r),this}async docIncludes(r,e){let o=[];if(r.content.includes)o.push(...r.content.includes),delete r.content.includes;o.push(...this.includes),this.includes.length=0;for(let n of o)jr.merge(await this.load(n,r.folderPath,{parent:r.content,...e},!0),r.content)}async loadObject(r,e,o){return await Er.processFields(r,{...this.fields,globalContext:{file:o?.fullPath??"@internal"},root:{...this.fields.root,...this.vars,$document:{root:{content:r},fileName:o?.fileName??"@internal",folder:o?.folderPath??"@internal",fullPath:o?.fullPath??"@internal",...e}}}),r}async load(r,e,o,n){let s=e?[e]:[];s.push(...this.includeDirectories.map((m)=>U.default.isAbsolute(m)?m:U.default.join(e??process.cwd(),m)));let t=await N.loadFormat(r,{dirs:s});if(!t.content)return null;let a=t.fullPath,f=this.cache[a]??t.content,i=globalThis.structuredClone?structuredClone(f):JSON.parse(JSON.stringify(f));t.content=i,await this.docIncludes(t,o);let l;if(n!==!0)l=await this.loadObject(t.content,o,{fileName:t.fullPath,folderPath:t.folderPath,fullPath:t.fullPath});else l=t.content;return this.cache[a]??=f,l}async writeOutputs(r){await N.writeOutputs(this.getOutputs(),r)}}
7
+ ${n}}`}else return String(r)},O=(r)=>{if(!r)return r;return r.replaceAll("\\n",`
8
+ `).replaceAll("\\$","$").replaceAll("\\t","\t")};var br=()=>({len:(r)=>r.args[0].length,trim:(r)=>r.args[0].trim(),ltrim:(r)=>r.args[0].trimStart(),rtrim:(r)=>r.args[0].trimEnd(),reverse:(r)=>r.args[0].split("").reverse().join(""),substring:{types:{0:"ref",1:"number",2:"number"},fn:(r)=>r.args[0].substring(r.args[1],r.args[2])},concat:(r)=>r.args.join(""),repeat:{types:{0:"ref",1:"number"},fn:({args:[r,e]})=>{return r.repeat(e)}},lower:(r)=>r.args[0].toLowerCase(),upper:(r)=>r.args[0].toUpperCase(),pascal:(r)=>u.pascal(r.args[0]),camel:(r)=>u.camel(r.args[0]),capital:(r)=>u.capital(r.args[0]),snake:(r)=>u.changeCase(u.snake(r.args[0],"_"),r.args[1]),kebab:(r)=>u.changeCase(u.snake(r.args[0],"-"),r.args[1]),encode:(r)=>Buffer.from(r.args[0]).toString(r.args[1]??"base64"),decode:(r)=>Buffer.from(r.args[0],r.args[1]??"base64").toString(),uuid:(r)=>crypto.randomUUID(),toYaml:({args:[r,e]})=>S.default.stringify(r,null,{indent:e??2}),fromYaml:({args:[r]})=>S.default.parse(r),toJson:({args:[r,e]})=>JSON.stringify(r,null,e!==0?e??2:void 0),fromJson:({args:[r]})=>JSON.parse(r),pad:{types:{0:"ref",1:"number",2:"string"},fn:({args:[r,e],tags:o})=>{let n=o.join?.[0]??`
9
+ `,s=o.padChar?.[0]??" ";return u.padBlock(r,e??2,n,s)}},formatAs:{types:{1:["json","yaml","terraform"]},fn:({args:[r,e],tags:o})=>{switch(e){case"json":return JSON.stringify(r,null,2);case"yaml":return S.default.stringify(r,null,{indent:2});case"terraform":{let n=!!(o?.sort?.length||o?.sortKeys?.length);return j(r,0,{sortKeys:n})}}throw Error("Unsupported format: "+String(e))}}});var N=require("@homedev/object-utils"),L=require("@homedev/select"),Fr=require("@homedev/string-utils");var l={eq:(r,e)=>r===e,ne:(r,e)=>r!==e,lt:(r,e)=>typeof r==="number"&&typeof e==="number"&&r<e,le:(r,e)=>typeof r==="number"&&typeof e==="number"&&r<=e,gt:(r,e)=>typeof r==="number"&&typeof e==="number"&&r>e,ge:(r,e)=>typeof r==="number"&&typeof e==="number"&&r>=e,in:(r,e)=>{if(Array.isArray(e))return e.includes(r);if(typeof r==="string")return r.includes(e);if(Array.isArray(r))return r.includes(e);return!1},notin:(r,e)=>!l.in(r,e),null:(r)=>r===null||r===void 0,notnull:(r)=>r!==null&&r!==void 0,empty:(r)=>r==="",notempty:(r)=>r!=="",nullorempty:(r)=>r===null||r===void 0||r==="",notnullorempty:(r)=>r!==null&&r!==void 0&&r!==""},Ar=()=>({if:{types:{0:"boolean"},fn:(r)=>r.args[0]?r.args[1]:r.args[2]},check:{types:{0:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:(r)=>{let[e,...o]=r.args;switch(e){case"eq":return o.every((n,s,t)=>l.eq(n,t[0]));case"ne":return!o.every((n,s,t)=>l.eq(n,t[0]));case"lt":return l.lt(o[0],o[1]);case"le":return l.le(o[0],o[1]);case"gt":return l.gt(o[0],o[1]);case"ge":return l.ge(o[0],o[1]);case"in":return l.in(o[0],o[1]);case"notin":return l.notin(o[0],o[1]);case"null":return o.every((n)=>l.null(n));case"notnull":return o.every((n)=>l.notnull(n));case"empty":return o.every((n)=>l.empty(n));case"notempty":return o.every((n)=>l.notempty(n));case"nullorempty":return o.every((n)=>l.nullorempty(n));case"notnullorempty":return o.every((n)=>l.notnullorempty(n))}}},and:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!!e)},or:{types:()=>"boolean",fn:(r)=>r.args.some((e)=>!!e)},xor:{types:()=>"boolean",fn:(r)=>r.args.filter((e)=>!!e).length===1},true:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!!e)},false:{types:()=>"boolean",fn:(r)=>r.args.every((e)=>!e)},eq:{fn:(r)=>r.args.every((e,o,n)=>l.eq(e,n[0]))},ne:{fn:(r)=>!r.args.every((e,o,n)=>l.eq(e,n[0]))},null:{fn:(r)=>r.args.every((e)=>e===null||e===void 0)},notnull:{fn:(r)=>r.args.every((e)=>e!==null&&e!==void 0)},empty:{fn:(r)=>r.args.every((e)=>e==="")},notempty:{fn:(r)=>r.args.every((e)=>e!=="")},nullorempty:{fn:(r)=>r.args.every((e)=>e===null||e===void 0||e==="")},notnullorempty:{fn:(r)=>r.args.every((e)=>e!==null&&e!==void 0&&e!=="")},in:{fn:(r)=>l.in(r.args[0],r.args[1])},notin:{fn:(r)=>l.notin(r.args[0],r.args[1])},lt:{fn:(r)=>l.lt(r.args[0],r.args[1])},le:{fn:(r)=>l.le(r.args[0],r.args[1])},gt:{fn:(r)=>l.gt(r.args[0],r.args[1])},ge:{fn:(r)=>l.ge(r.args[0],r.args[1])}});var Mr=()=>({merge:(r)=>r.args.flatMap((e)=>e),join:({args:[r],root:e,tags:o})=>{let n=o.key?.[0],s=o.separator?.[0]??o.sep?.[0],t=o.finalize?.length>0,i=O(s);if(typeof r==="string"){if(t&&r.length&&i)return r+i;return r}if(!Array.isArray(r))throw Error("Object is not a list");let a=((n?.length)?r.map((g)=>L.select({...e,...g},n)):r).join(i),f=o.pad?.[0]??"0",p=o.padChar?.[0]??" ",m=t&&a.length&&i?a+i:a;return f?Fr.padBlock(m,parseInt(f),`
10
+ `,p):m},list:({args:r})=>N.toList(r[0],r[1]),object:({args:r})=>N.toObject(r[0],r[1]),range:({args:[r,e,o]})=>{let n=parseInt(r),s=parseInt(e),t=parseInt(o)||1;if(isNaN(n))throw Error("Invalid range: start value '"+String(r)+"' is not a number");if(isNaN(s))throw Error("Invalid range: end value '"+String(e)+"' is not a number");if(t===0)throw Error("Invalid range: step cannot be zero");if((s-n)/t<0)throw Error("Invalid range: step "+String(t)+" has wrong direction for range "+String(n)+" to "+String(s));return Array.from({length:Math.floor((s-n)/t)+1},(i,a)=>n+a*t)},filter:{types:{1:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:({args:[r,e,o],root:n,tags:s})=>{if(r===null||r===void 0)throw Error("Filter source cannot be null or undefined");if(!Array.isArray(r))throw Error("Filter source must be an array");let t=s.key?.[0],i=l[e];if(!i)throw Error(`Unsupported filter operation: ${e}`);if(t){let f=Array(r.length);for(let m=0;m<r.length;m++)try{f[m]=L.select({...n,...r[m]},t)}catch{f[m]=Symbol("invalid")}let p=[];for(let m=0;m<r.length;m++){let g=f[m];if(typeof g!=="symbol"&&i(g,o))p.push(r[m])}return p}let a=[];for(let f of r)if(i(f,o))a.push(f);return a}}});var Pr=require("@homedev/fields"),kr=require("@homedev/object-utils"),E=require("@homedev/select"),Cr=require("@homedev/string-utils");var Or=()=>({each:{processArgs:!1,fn:async({rawArgs:[r,e,...o],root:n,options:s,tags:t})=>{let i=async(y)=>y.quoted?O(y.value):await E.select(n,y.value),a=await E.select(n,r.value),f=await i(e),p=t.key?.[0],m=Array.isArray(a)?a:kr.toList(a),g=[],Ur=await Promise.all(o.map(async(y)=>await i(y))),c={...n,item:void 0,index:0,params:Ur,instance:void 0,parent:n.this,tags:t},Lr={...s,root:c};for(let y=0;y<m.length;y++){let b=F(f),k={instance:b},D=typeof f==="string"?k:b;if(c.item=m[y],c.index=y,c.instance=b,t?.root?.[0])Object.assign(c,await E.select(c,t.root[0]));if(await Pr.processFields(D,Lr),p!==void 0)g.push(await E.select(k.instance,p));else g.push(k.instance)}if(t.join?.length){if(g.length===0)return"";let y=O(t.join[0]),b=t.pad?.[0]??"0",k=t.padChar?.[0]??" ",D=t.finalize?.length&&y?y:"",h=`${g.join(y)}${D}`;return b?Cr.padBlock(h,parseInt(b),`
11
+ `,k):h}return g}}});var Er=require("@homedev/select"),R=async(r,e,o)=>r.rawArgs[e].quoted?r.rawArgs[e].value:await Er.select(r.root,r.rawArgs[e].value,{defaultValue:o}),Rr=()=>({switch:{processArgs:!1,fn:async(r)=>{let e=await R(r,0,!1),o=await R(r,1);if(o[e]===void 0){if(r.rawArgs.length>2)return R(r,2);throw Error(`Unhandled switch case: ${e}`)}return o[e]}}});var jr=()=>({log:(r)=>{console.log(...r.args)}});var Sr=require("@homedev/navigate");var Nr=()=>({default:{processArgs:!1,fn:async(r)=>{for(let e=0;e<r.rawArgs.length;e++)if(r.rawArgs[e]?.value!==void 0){let n=await R(r,e,null);if(n!==null)return n}if(r.tags.nullable?.length)return Sr.NavigateResult.DeleteItem();if(r.tags.fail?.length)throw Error(`No valid value found for default (${r.rawArgs.map((e)=>e.value).join(", ")})`);return""}}});var P=require("@homedev/navigate"),qr=()=>({convert:({args:[r,e,o]})=>{switch(e){case"string":return String(r);case"number":{let n=Number(r);if(!isNaN(n))return P.NavigateResult.ReplaceItem(n);break}case"boolean":if(r==="true"||r===!0||r===1||r==="1"||r==="yes"||r==="on")return P.NavigateResult.ReplaceItem(!0);else if(r==="false"||r===!1||r===0||r==="0"||r==="no"||r==="off")return P.NavigateResult.ReplaceItem(!1);break;default:throw Error(`Unsupported type for convert: ${e}`)}if(o!==void 0)return P.NavigateResult.ReplaceItem(o);throw Error(`Failed to convert value to ${e}`)},isType:({args:[r,e]})=>{let n=(()=>{switch(e){case"string":return typeof r==="string";case"number":return typeof r==="number";case"boolean":return typeof r==="boolean";case"object":return r!==null&&typeof r==="object"&&!Array.isArray(r);case"array":return Array.isArray(r);case"null":return r===null;case"undefined":return r===void 0;case"function":return typeof r==="function";default:throw Error(`Unknown type for isType: ${e}`)}})();return P.NavigateResult.ReplaceItem(n)},typeOf:({args:[r]})=>{if(r===null)return"null";else if(Array.isArray(r))return"array";else return typeof r}});var Dr=(r)=>r.keys(G(r)).keys(W(r)).keys(er()).keys(ur()).keys(nr()).keys(fr()).keys(mr(r)).keys(dr(r)).sources(wr(r)).sources(cr()).sources(br()).sources(qr()).sources(Mr()).sources(Or()).sources(Rr()).sources(jr()).sources(Ar()).sources(Nr());class $r{includeDirectories=[];includes=[];outputs=[];vars={};cache={};fields={sources:{},keys:{}};objectMetadata={};constructor(){this.use(Dr)}use(r){return r(this),this}includeDirectory(...r){return this.includeDirectories.push(...r),this}getIncludeDirectories(){return this.includeDirectories}include(...r){return this.includes.push(...r),this}keys(r){return Object.assign(this.fields.keys,{...this.fields.keys,...r}),this}sources(r){return Object.assign(this.fields.sources,{...this.fields.sources,...r}),this}variables(r){return this.vars={...this.vars,...r},this}getOutputs(){return this.outputs}output(r){return this.outputs.push(r),this}metadata(r,e){return this.objectMetadata[r]=e,this}getMetadata(r){return this.objectMetadata[r]}getAllMetadata(){return this.objectMetadata}filter(r){return this.fields.filters??=[],this.fields.filters?.push(r),this}async docIncludes(r,e){let o=[];if(r.content.includes)o.push(...r.content.includes),delete r.content.includes;o.push(...this.includes),this.includes.length=0;for(let n of o)Jr.merge(await this.load(n,r.folderPath,{parent:r.content,...e},!0),r.content)}async loadObject(r,e,o){return await Ir.processFields(r,{...this.fields,globalContext:{file:o?.fullPath??"@internal"},root:{...this.fields.root,...this.vars,$document:{root:{content:r},fileName:o?.fileName??"@internal",folder:o?.folderPath??"@internal",fullPath:o?.fullPath??"@internal",...e}}}),r}async load(r,e,o,n){let s=e?[e]:[];s.push(...this.includeDirectories.map((m)=>_.default.isAbsolute(m)?m:_.default.join(e??process.cwd(),m)));let t=await q.loadFormat(r,{dirs:s});if(!t.content)return null;let i=t.fullPath,a=this.cache[i]??t.content,f=globalThis.structuredClone?structuredClone(a):JSON.parse(JSON.stringify(a));t.content=f,await this.docIncludes(t,o);let p;if(n!==!0)p=await this.loadObject(t.content,o,{fileName:t.fullPath,folderPath:t.folderPath,fullPath:t.fullPath});else p=t.content;return this.cache[i]??=a,p}async writeOutputs(r){await q.writeOutputs(this.getOutputs(),r)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homedev/objector",
3
- "version": "1.2.24",
3
+ "version": "1.2.26",
4
4
  "description": "object extensions for YAML/JSON",
5
5
  "author": "julzor",
6
6
  "license": "ISC",
@@ -8,7 +8,7 @@
8
8
  "type": "module",
9
9
  "dependencies": {
10
10
  "@homedev/fields": "^1.2.8",
11
- "@homedev/files": "^1.0.3",
11
+ "@homedev/files": "^1.0.4",
12
12
  "@homedev/merge": "^1.0.3",
13
13
  "@homedev/navigate": "^1.1.3",
14
14
  "@homedev/object-utils": "^1.0.3",