@homedev/objector 1.2.21 → 1.2.22
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.js +11 -4
- package/package.json +1 -1
- package/dist/index.d.ts +0 -42
package/dist/index.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
`)
|
|
4
|
-
|
|
1
|
+
var Rr=Object.create;var{getPrototypeOf:Cr,defineProperty:M,getOwnPropertyNames:L,getOwnPropertyDescriptor:Sr}=Object,T=Object.prototype.hasOwnProperty;var c=(r,e,o)=>{o=r!=null?Rr(Cr(r)):{};let n=e||!r||!r.__esModule?M(o,"default",{value:r,enumerable:!0}):o;for(let i of L(r))if(!T.call(n,i))M(n,i,{get:()=>r[i],enumerable:!0});return n},J=new WeakMap,Ir=(r)=>{var e=J.get(r),o;if(e)return e;if(e=M({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")L(r).map((n)=>!T.call(e,n)&&M(e,n,{get:()=>r[n],enumerable:!(o=Sr(r,n))||o.enumerable}));return J.set(r,e),e};var Nr=(r,e)=>{for(var o in e)M(r,o,{get:e[o],enumerable:!0,configurable:!0,set:(n)=>e[o]=()=>n})};var _r={};Nr(_r,{Objector:()=>hr});module.exports=Ir(_r);var jr=require("@homedev/fields"),C=require("@homedev/files"),Or=require("@homedev/merge"),z=c(require("path"));var U=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 U.NavigateResult.SkipSiblings()}});var B=require("@homedev/navigate"),G=c(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 B.NavigateResult.DeleteItem()}});var I=require("@homedev/fields"),N=require("@homedev/merge"),P=require("@homedev/select"),K=()=>({each:{filters:[/select|model/],fn:async(r)=>{let e=r.value;delete r.parent[r.key];let o=()=>{let s=e.model;if(typeof r.value==="string"||!s)return r.parent;if(typeof s==="string")return P.select(r.root,s);return s},n=()=>{if(typeof r.value==="string")return P.select(r.root,r.value);if(Array.isArray(r.value))return r.value;if(typeof e.from==="string")return P.select(r.root,e.from);return e.from},i=async(s)=>{if(e.selector===void 0)return s;if(typeof e.selector!=="string"){let a=JSON.parse(JSON.stringify(e.selector));return await I.processFields(a,{...r.options,root:{...r.root,result:s}}),a}return await P.select({...r.root,result:s},e.selector)},t=await n(),f=await o();if(!Array.isArray(t))throw Error('Key "each" requires a source list');if(f===void 0)throw Error('Key "each" must define a model');if(e.extend?.model)f=N.mergeAll([e.model,...Array.isArray(e.extend.model)?e.extend.model:[e.extend.model]]);let l=[];for(let s=0;s<t.length;s++){let a=JSON.parse(JSON.stringify(f));if(await I.processFields(a,{...r.options,root:{...r.root,index:s,item:t[s],instance:a}}),e.extend?.result)a=N.mergeAll([a,...Array.isArray(e.extend?.result)?e.extend.result:[Array.isArray(e.extend?.result)]]);l.push(await i(a))}return l}}});var Q=require("@homedev/select"),W=()=>({concat:async(r)=>{let e=[];for(let o of Array.isArray(r.value)?r.value:[r.value])e.push(...await Q.select(r.root,o));return e.filter((o)=>o!==void 0)}});var X=require("@homedev/fields"),Z=require("@homedev/merge"),Y=require("@homedev/navigate"),v=require("@homedev/select"),x=()=>({extends:async(r)=>{let e=async(o,n)=>{for(let i of Array.isArray(n)?n:[n]){let t=await v.select(r.root,i),f=JSON.parse(JSON.stringify(t));if(f[r.key])await e(f,f[r.key]);await X.processFields(f,{...r.options}),Z.merge(f,o),delete o[r.key]}};return await e(r.parent,r.value),Y.NavigateResult.Explore()}});var rr=require("@homedev/fields"),m=require("@homedev/navigate"),er=(r)=>({skip:{types:{0:"boolean"},fn:(e)=>e.value?m.NavigateResult.DeleteParent():m.NavigateResult.DeleteItem()},metadata:({path:e,value:o})=>{return r.metadata(e,o),m.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 i=e.value?o:n;if(i===void 0)return m.NavigateResult.DeleteItem();if(typeof i==="string")return(await rr.processFields({value:i},{...e.options,root:{...e.root}})).value;return m.NavigateResult.ReplaceParent(i,!0)}},switch:(e)=>{let o=e.value;if(!o.cases)throw Error("Missing cases for switch");if(o.cases[o.from]!==void 0)return m.NavigateResult.ReplaceParent(o.cases[o.from],!0);if(o.default!==void 0)return m.NavigateResult.ReplaceParent(o.default,!0);return m.NavigateResult.DeleteParent()}});var or=require("@homedev/merge"),nr=require("@homedev/select"),sr=()=>({from:async({root:r,parent:e,value:o})=>{let n=await nr.select(r,o);if(e.content){if(Array.isArray(e.content)&&Array.isArray(n))return[...n,...e.content];return or.merge(n,e.content),e.content}return n}});var tr=require("@homedev/navigate"),_=c(require("node:vm")),ir=(r)=>({modules:async(e)=>{for(let[o,n]of Object.entries(e.value)){let i=_.default.createContext({console,objector:r,document:e.root}),t=new _.default.SourceTextModule(n,{identifier:o,context:i});return await t.link((f)=>{throw Error(`Module ${f} is not allowed`)}),await t.evaluate(),r.sources(Object.fromEntries(Object.entries(t.namespace).map(([f,l])=>[`${o}.${f}`,(s)=>l(s,...s.args)]))),tr.NavigateResult.DeleteItem()}}});var k=require("@homedev/files"),$=c(require("fs/promises")),w=c(require("path")),ar=(r)=>({include:async(e)=>{let{file:o}=e.options.globalContext;return await k.globMap(e.args[0],{cwd:w.default.dirname(o),filter:(n)=>w.default.basename(o)!==n,map:async(n)=>r.load(n,w.default.dirname(o),{parent:e.root})})},file:async(e)=>await $.default.readFile(await k.locate(e.args[0],r.getIncludeDirectories())).then((o)=>o.toString()),scan:async(e)=>{let o=[],i=(()=>{let l=e.args[2]??["**/node_modules/**"],s=typeof l==="string"?l.split(",").map((a)=>a.trim()):l;if(!Array.isArray(s))throw Error("Scan exclusion must be a list");return s})(),{file:t}=e.options.globalContext,f=e.args[1]?await k.locate(e.args[1],r.getIncludeDirectories()):w.default.dirname(t);for await(let l of $.default.glob(e.args[0],{cwd:f,exclude:(s)=>i.some((a)=>w.default.matchesGlob(s,a))}))o.push(l);return o}});var fr=()=>({env:(r)=>process.env[r.args[0]]});var p=require("@homedev/string-utils"),h=c(require("yaml")),D=(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}${D(t,e+1)},`).join(`
|
|
3
|
+
`)}
|
|
4
|
+
${o}]`}else if(typeof r==="object"){let i=Object.entries(r);if(i.length===0)return"{}";return`{
|
|
5
|
+
${i.map(([f,l])=>`${n}${f} = ${D(l,e+1)}`).join(`
|
|
6
|
+
`)}
|
|
7
|
+
${o}}`}else return String(r)},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)=>p.pascal(r.args[0]),camel:(r)=>p.camel(r.args[0]),capital:(r)=>p.capital(r.args[0]),snake:(r)=>p.changeCase(p.snake(r.args[0],"_"),r.args[1]),kebab:(r)=>p.changeCase(p.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]})=>h.default.stringify(r,null,{indent:e??2}),fromYaml:({args:[r]})=>h.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]??`
|
|
8
|
+
`,i=o.padChar?.[0]??" ";return p.padBlock(r,e??2,n,i)}},formatAs:{types:{1:["json","yaml","terraform"]},fn:({args:[r,e]})=>{switch(e){case"json":return JSON.stringify(r,null,2);case"yaml":return h.default.stringify(r,null,{indent:2});case"terraform":return D(r)}throw Error(`Unsupported format: ${e}`)}}});var R=require("@homedev/object-utils"),q=require("@homedev/select"),gr=require("@homedev/string-utils");var pr=require("@homedev/fields"),ur=require("@homedev/object-utils"),j=require("@homedev/select"),mr=require("@homedev/string-utils"),E=(r)=>{if(!r)return r;return r.replaceAll("\\n",`
|
|
9
|
+
`).replaceAll("\\$","$").replaceAll("\\t","\t")},yr=()=>({each:{processArgs:!1,fn:async({rawArgs:[r,e,...o],root:n,options:i,tags:t})=>{let f=async(u)=>u.quoted?E(u.value):await j.select(n,u.value),l=await j.select(n,r.value),s=await f(e),a=t.key?.[0],F=Array.isArray(l)?l:ur.toList(l),y=[];for(let u=0;u<F.length;u++){let g=JSON.parse(JSON.stringify(s)),A={instance:g},S=typeof s==="string"?A:g,d={...n,item:F[u],index:u,params:await Promise.all(o.map(async(Er)=>await f(Er))),instance:g,parent:n.this,tags:t};if(t?.root?.[0])Object.assign(d,await j.select(d,t.root[0]));if(await pr.processFields(S,{...i,root:d}),a!==void 0)y.push(await j.select(A.instance,a));else y.push(A.instance)}if(t.join?.length){if(y.length===0)return"";let u=E(t.join[0]),g=t.pad?.[0]??"0",A=t.padChar?.[0]??" ",S=t.finalize?.length&&u?u:"",d=`${y.join(u)}${S}`;return g?mr.padBlock(d,parseInt(g),`
|
|
10
|
+
`,A):d}return y}}});var dr=()=>({merge:(r)=>r.args.flatMap((e)=>e),join:({args:[r],root:e,tags:o})=>{let n=o.key?.[0],i=o.separator?.[0]??o.sep?.[0],t=o.finalize?.length>0,f=E(i);if(typeof r==="string"){if(t&&r.length&&f)return r+f;return r}if(!Array.isArray(r))throw Error("Object is not a list");let l=((n?.length)?r.map((y)=>q.select({...e,...y},n)):r).join(f),s=o.pad?.[0]??"0",a=o.padChar?.[0]??" ",F=t&&l.length&&f?l+f:l;return s?gr.padBlock(F,parseInt(s),`
|
|
11
|
+
`,a):F},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),i=parseInt(e),t=parseInt(o)||1;if(isNaN(n)||isNaN(i))throw Error("Invalid range");return Array.from({length:Math.floor((i-n)/t)+1},(f,l)=>n+l*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:i})=>{if(!Array.isArray(r))throw Error("Object is not a list");let t=(s,a)=>typeof s==="number"&&typeof a==="number",f={eq:(s,a)=>s===a,ne:(s,a)=>s!==a,lt:(s,a)=>t(s,a)&&s<a,le:(s,a)=>t(s,a)&&s<=a,gt:(s,a)=>t(s,a)&&s>a,ge:(s,a)=>t(s,a)&&s>=a,in:(s,a)=>Array.isArray(a)&&a.includes(s),notin:(s,a)=>Array.isArray(a)&&!a.includes(s),null:(s)=>s===null||s===void 0,notnull:(s)=>s!==null&&s!==void 0,empty:(s)=>s==="",notempty:(s)=>s!=="",nullorempty:(s)=>s===null||s===void 0||s==="",notnullorempty:(s)=>s!==null&&s!==void 0&&s!==""},l=i.key?.[0];return r.filter((s)=>f[e](l?q.select({...n,...s},l):s,o))}}});var cr=require("@homedev/select"),O=async(r,e,o)=>r.rawArgs[e].quoted?r.rawArgs[e].value:await cr.select(r.root,r.rawArgs[e].value,{defaultValue:o}),wr=()=>({switch:{processArgs:!1,fn:async(r)=>{let e=await O(r,0,!1),o=await O(r,1);if(o[e]===void 0){if(r.rawArgs.length>2)return O(r,2);throw Error(`Unhandled switch case: ${e}`)}return o[e]}}});var br=()=>({log:(r)=>{console.log(...r.args)}});var Fr=()=>({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,i,t)=>n===t[0]);case"ne":return o.every((n,i,t)=>n!==t[0]);case"lt":return o[0]<o[1];case"le":return o[0]<=o[1];case"gt":return o[0]>o[1];case"ge":return o[0]>=o[1];case"in":return o[0].includes(o[1]);case"notin":return!o[0].includes(o[1]);case"null":return o.every((n,i,t)=>n===null||n===void 0);case"notnull":return o.every((n,i,t)=>n!==null&&n!==void 0);case"empty":return o.every((n,i,t)=>n==="");case"notempty":return o.every((n,i,t)=>n!=="");case"nullorempty":return o.every((n,i,t)=>n===null||n===void 0||n==="");case"notnullorempty":return o.every((n,i,t)=>n!==null&&n!==void 0&&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)=>e===n[0])},ne:{fn:(r)=>!r.args.every((e,o,n)=>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)=>r.args[0].includes(r.args[1])},notin:{fn:(r)=>!r.args[0].includes(r.args[1])},lt:{fn:(r)=>r.args[0]<r.args[1]},le:{fn:(r)=>r.args[0]<=r.args[1]},gt:{fn:(r)=>r.args[0]>r.args[1]},ge:{fn:(r)=>r.args[0]>=r.args[1]}});var Ar=require("@homedev/navigate");var Mr=()=>({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 O(r,e,null);if(n!==null)return n}if(r.tags.nullable?.length)return Ar.NavigateResult.DeleteItem();if(r.tags.fail?.length)throw Error(`No valid value found for default (${r.rawArgs.map((e)=>e.value).join(", ")})`);return""}}});var b=require("@homedev/navigate"),Pr=()=>({convert:({args:[r,e,o]})=>{switch(e){case"string":return String(r);case"number":{let n=Number(r);if(!isNaN(n))return b.NavigateResult.ReplaceItem(n);break}case"boolean":if(r==="true"||r===!0||r===1||r==="1"||r==="yes"||r==="on")return b.NavigateResult.ReplaceItem(!0);else if(r==="false"||r===!1||r===0||r==="0"||r==="no"||r==="off")return b.NavigateResult.ReplaceItem(!1);break;default:throw Error(`Unsupported type for convert: ${e}`)}if(o!==void 0)return b.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 b.NavigateResult.ReplaceItem(n)},typeOf:({args:[r]})=>{if(r===null)return"null";else if(Array.isArray(r))return"array";else return typeof r}});var kr=(r)=>r.keys(V(r)).keys(H(r)).keys(K()).keys(sr()).keys(W()).keys(x()).keys(er(r)).keys(ir(r)).sources(ar(r)).sources(fr()).sources(lr()).sources(Pr()).sources(dr()).sources(yr()).sources(wr()).sources(br()).sources(Fr()).sources(Mr());class hr{includeDirectories=[];includes=[];outputs=[];vars={};cache={};fields={sources:{},keys:{}};objectMetadata={};constructor(){this.use(kr)}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)Or.merge(await this.load(n,r.folderPath,{parent:r.content,...e},!0),r.content)}async loadObject(r,e,o){return await jr.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){if(this.cache[r])return this.cache[r];let i=e?[e]:[];i.push(...this.includeDirectories.map((f)=>z.default.isAbsolute(f)?f:z.default.join(e??process.cwd(),f)));let t=await C.loadFormat(r,{dirs:i});if(!t.content)return null;if(await this.docIncludes(t,o),n!==!0)return this.loadObject(t.content,o,{fileName:t.fullPath,folderPath:t.folderPath,fullPath:t.fullPath});return t.content}async writeOutputs(r){await C.writeOutputs(this.getOutputs(),r)}}
|
package/package.json
CHANGED
package/dist/index.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { FieldProcessorMap } from '@homedev/fields';
|
|
2
|
-
import { Output } from '@homedev/files';
|
|
3
|
-
import { WriteOutputsOption } from '@homedev/files';
|
|
4
|
-
|
|
5
|
-
declare interface LoadObjectOptions {
|
|
6
|
-
fileName: string;
|
|
7
|
-
fullPath: string;
|
|
8
|
-
folderPath: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @public
|
|
13
|
-
*/
|
|
14
|
-
export declare class Objector {
|
|
15
|
-
private includeDirectories;
|
|
16
|
-
private includes;
|
|
17
|
-
private outputs;
|
|
18
|
-
private vars;
|
|
19
|
-
private cache;
|
|
20
|
-
private fields;
|
|
21
|
-
private objectMetadata;
|
|
22
|
-
constructor();
|
|
23
|
-
use(handler: (o: Objector) => void): this;
|
|
24
|
-
includeDirectory(...dirs: string[]): this;
|
|
25
|
-
getIncludeDirectories(): string[];
|
|
26
|
-
include(...files: string[]): this;
|
|
27
|
-
keys(keys: FieldProcessorMap): this;
|
|
28
|
-
sources(sources: FieldProcessorMap): this;
|
|
29
|
-
variables(vars: Record<string, any>): this;
|
|
30
|
-
getOutputs(): Output[];
|
|
31
|
-
output(o: Output): this;
|
|
32
|
-
metadata(path: string, o: any): this;
|
|
33
|
-
getMetadata(path: string): any;
|
|
34
|
-
getAllMetadata(): Record<string, any>;
|
|
35
|
-
filter(f: RegExp): this;
|
|
36
|
-
private docIncludes;
|
|
37
|
-
loadObject<T = any>(data: T, container?: any, options?: LoadObjectOptions): Promise<T>;
|
|
38
|
-
load<T = any>(fileName: string, cwd?: string, container?: any, noProcess?: boolean): Promise<T | null>;
|
|
39
|
-
writeOutputs(options?: WriteOutputsOption): Promise<void>;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export { }
|