@homedev/objector 1.0.3 → 1.0.5
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.d.ts +35 -0
- package/dist/index.js +1 -1
- package/package.json +8 -8
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FieldProcessorMap } from '@homedev/fields';
|
|
2
|
+
import { Output } from '@homedev/files';
|
|
3
|
+
import { WriteOutputsOption } from '@homedev/files';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare class Objector {
|
|
9
|
+
private includeDirectories;
|
|
10
|
+
private includes;
|
|
11
|
+
private outputs;
|
|
12
|
+
private vars;
|
|
13
|
+
private cache;
|
|
14
|
+
private fields;
|
|
15
|
+
private objectMetadata;
|
|
16
|
+
constructor();
|
|
17
|
+
use(handler: (o: Objector) => void): this;
|
|
18
|
+
includeDirectory(...dirs: string[]): this;
|
|
19
|
+
getIncludeDirectories(): string[];
|
|
20
|
+
include(...files: string[]): this;
|
|
21
|
+
keys(keys: FieldProcessorMap): this;
|
|
22
|
+
sources(sources: FieldProcessorMap): this;
|
|
23
|
+
variables(vars: Record<string, any>): this;
|
|
24
|
+
getOutputs(): Output[];
|
|
25
|
+
output(o: Output): this;
|
|
26
|
+
metadata(path: string, o: any): this;
|
|
27
|
+
getMetadata(path: string): any;
|
|
28
|
+
getAllMetadata(): Record<string, any>;
|
|
29
|
+
filter(f: RegExp): this;
|
|
30
|
+
private docIncludes;
|
|
31
|
+
load<T = any>(fileName: string, cwd?: string, container?: any, noProcess?: boolean): Promise<T | null>;
|
|
32
|
+
writeOutputs(options?: WriteOutputsOption): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { }
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var nr=Object.create;var{getPrototypeOf:ir,defineProperty:g,getOwnPropertyNames:E,getOwnPropertyDescriptor:pr}=Object,S=Object.prototype.hasOwnProperty;var w=(o,r,e)=>{e=o!=null?nr(ir(o)):{};let s=r||!o||!o.__esModule?g(e,"default",{value:o,enumerable:!0}):e;for(let t of E(o))if(!S.call(s,t))g(s,t,{get:()=>o[t],enumerable:!0});return s},h=new WeakMap,lr=(o)=>{var r=h.get(o),e;if(r)return r;if(r=g({},"__esModule",{value:!0}),o&&typeof o==="object"||typeof o==="function")E(o).map((s)=>!S.call(r,s)&&g(r,s,{get:()=>o[s],enumerable:!(e=pr(o,s))||e.enumerable}));return h.set(o,r),r};var mr=(o,r)=>{for(var e in r)g(o,e,{get:r[e],enumerable:!0,configurable:!0,set:(s)=>r[e]=()=>s})};var fr={};mr(fr,{Objector:()=>ar});module.exports=lr(fr);var sr=require("@homedev/fields"),F=require("@homedev/files"),tr=require("@homedev/merge"),P=w(require("path"));var C=(o)=>({output:(r)=>{delete r.parent[r.key];for(let e of Array.isArray(r.value)?r.value:[r.value])if(typeof e==="string")o.output({name:e,value:r.parent});else o.output({...e,value:e.value??r.parent})}});var _=require("@homedev/navigate"),v=w(require("path")),L=(o)=>({load:async(r)=>{let e=r.options.globalContext;for(let{file:s}of Array.isArray(r.value)?r.value:[r.value]){if(!s)throw new Error("File reference required");await o.load(s,e.file&&v.default.dirname(e.file))}return _.NavigateResult.DeleteItem()}});var j=require("@homedev/fields"),A=require("@homedev/merge"),c=require("@homedev/select"),D=(o)=>({each:{filters:[/select|model/],fn:async(r)=>{let e=r.value;delete r.parent[r.key];let s=()=>{let p=e.model;if(typeof r.value==="string"||!p)return r.parent;if(typeof p==="string")return c.select(r.root,p);return p},t=()=>{if(typeof r.value==="string")return c.select(r.root,r.value);if(Array.isArray(r.value))return r.value;if(typeof e.from==="string")return c.select(r.root,e.from);return e.from},a=async(p)=>{if(e.selector===void 0)return p;if(typeof e.selector!=="string"){let f=JSON.parse(JSON.stringify(e.selector));return await j.processFields(f,{...r.options,root:{...r.root,result:p}}),f}return await c.select({...r.root,result:p},e.selector)},n=await t(),i=await s();if(!Array.isArray(n))throw new Error('Key "each" requires a source list');if(i===void 0)throw new Error('Key "each" must define a model');if(e.extend?.model)i=A.mergeAll([e.model,...Array.isArray(e.extend.model)?e.extend.model:[e.extend.model]]);let m=[];for(let p=0;p<n.length;p++){let f=JSON.parse(JSON.stringify(i));if(await j.processFields(f,{...r.options,root:{...r.root,item:n[p],this:f,index:p}}),e.extend?.result)f=A.mergeAll([f,...Array.isArray(e.extend?.result)?e.extend.result:[Array.isArray(e.extend?.result)]]);m.push(await a(f))}return m}}});var I=require("@homedev/select"),q=(o)=>({concat:async(r)=>{let e=[];for(let s of Array.isArray(r.value)?r.value:[r.value])e.push(...await I.select(r.root,s));return e.filter((s)=>s!==void 0)}});var B=require("@homedev/fields"),J=require("@homedev/merge"),R=require("@homedev/select"),U=(o)=>({extends:async(r)=>{let e=async(s,t)=>{for(let a of Array.isArray(t)?t:[t]){let n=await R.select(r.root,a),i=JSON.parse(JSON.stringify(n));if(i[r.key])await e(i,i[r.key]);await B.processFields(i,{...r.options}),J.merge(i,s),delete s[r.key]}};await e(r.parent,r.value)}});var b=require("@homedev/navigate"),N=(o)=>({skip:()=>b.NavigateResult.DeleteParent(),metadata:({path:r,value:e})=>{return o.metadata(r,e),b.NavigateResult.DeleteItem()},if:(r)=>{let e=r.parent[".then"],s=r.parent[".else"];if(e)delete r.parent[".then"];if(s)delete r.parent[".else"];if(r.value===null||r.value===void 0||["0",0,"false",""].includes(r.value)||Array.isArray(r.value)&&r.value.length===0)return s??null;else return e??b.NavigateResult.DeleteItem()},switch:(r)=>{let e=r.value;if(!e.cases)throw new Error("Missing cases for switch");return e.cases[e.from]??e.default??null}});var z=require("@homedev/merge"),G=require("@homedev/select"),T=(o)=>({from:async({root:r,parent:e,value:s})=>{let t=await G.select(r,s);if(e.content){if(Array.isArray(e.content)&&Array.isArray(t))return[...t,...e.content];return z.merge(t,e.content),e.content}return t}});var y=require("@homedev/files"),M=w(require("fs/promises")),u=w(require("path")),V=(o)=>({include:async(r)=>{let{file:e}=r.options.globalContext;return await y.globMap(r.args[0],{cwd:u.default.dirname(e),filter:(s)=>u.default.basename(e)!==s,map:async(s)=>o.load(s,u.default.dirname(e),{parent:r.root})})},file:async(r)=>await M.default.readFile(await y.locate(r.args[0],o.getIncludeDirectories())).then((e)=>e.toString()),scan:async(r)=>{let e=[],t=(()=>{let i=r.args[2]??["**/node_modules/**"],m=typeof i==="string"?i.split(",").map((p)=>p.trim()):i;if(!Array.isArray(m))throw new Error("Scan exclusion must be a list");return m})(),{file:a}=r.options.globalContext,n=r.args[1]?await y.locate(r.args[1],o.getIncludeDirectories()):u.default.dirname(a);for await(let i of M.default.glob(r.args[0],{cwd:n,exclude:(m)=>t.some((p)=>u.default.matchesGlob(m,p))}))e.push(i);return e}});var $=(o)=>({env:(r)=>process.env[r.args[0]]});var l=require("@homedev/string-utils"),H=(o)=>({len:(r)=>r.args[0].length,reverse:(r)=>r.args[0].split("").reverse().join(""),substring:(r)=>r.args[0].substring(+r.args[1],+r.args[2]),concat:(r)=>r.args.join(""),lower:(r)=>r.args[0].toLowerCase(),upper:(r)=>r.args[0].toUpperCase(),pascal:(r)=>l.pascal(r.args[0]),camel:(r)=>l.camel(r.args[0]),capital:(r)=>l.capital(r.args[0]),snake:(r)=>l.changeCase(l.snake(r.args[0],"_"),r.args[1]),kebab:(r)=>l.changeCase(l.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()});var O=require("@homedev/object-utils"),K=require("@homedev/select"),Q=(o)=>({merge:(r)=>r.args.flatMap((e)=>e),join:(r)=>{let[e,s,t]=r.args,a=e;if(!Array.isArray(a))throw new Error("Object is not a list");if(s?.length)a=a.map((n)=>K.select({...r.root,...n},s));return a.join(t?.replace("\\n",`
|
|
2
|
-
`))},list:(r)=>O.toList(r.args[0],r.args[1]),object:(r)=>O.toObject(r.args[0],r.args[1]),range:(r)=>{let[e,s,t]=r.args,a=parseInt(e),n=parseInt(s),i=parseInt(t)||1;if(isNaN(a)||isNaN(n))throw new Error("Invalid range");return Array.from({length:Math.floor((n-a)/i)+1},(m,p)=>a+p*i)}});var W=require("@homedev/fields"),X=require("@homedev/object-utils"),k=require("@homedev/select"),Y=(o)=>({each:{processArgs:!1,fn:async(r)=>{let e=await k.select(r.root,r.rawArgs[0].value),s=await k.select(r.root,r.rawArgs[1].value),t=r.rawArgs[2]?.value,a=Array.isArray(e)?e:X.toList(e),n=[];for(let i=0;i<a.length;i++){let m=JSON.parse(JSON.stringify(s)),p={instance:m};if(await W.processFields(p,{...r.options,root:{...r.root,item:a[i],this:m,parent:r.root.this,index:i,params:r.rawArgs.slice(3).map((f)=>f.value)}}),t!==void 0&&t!=="@")n.push(p.instance[t]);else n.push(p.instance)}return n}}});var Z=require("@homedev/select"),d=async(o,r,e)=>o.rawArgs[r].quoted?o.rawArgs[r].value:await Z.select(o.root,o.rawArgs[r].value,{defaultValue:e}),x=(o)=>({default:{processArgs:!1,fn:async(r)=>{let e=r.rawArgs[1]?.value?await d(r,1):"";return d(r,0,e)}},switch:{processArgs:!1,fn:async(r)=>{let e=await d(r,0,!1),s=await d(r,1);if(s[e]===void 0){if(r.rawArgs.length>2)return d(r,2);throw new Error(`Unhandled switch case: ${e}`)}return s[e]}}});var rr=(o)=>({log:(r)=>{console.log(...r.args)}});var or=(o)=>({if:{keywords:{0:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:(r)=>{let[e,...s]=r.args;switch(e){case"eq":return s.every((t,a,n)=>t===n[0]);case"ne":return s.every((t,a,n)=>t!==n[0]);case"lt":return s[0]<s[1];case"le":return s[0]<=s[1];case"gt":return s[0]>s[1];case"ge":return s[0]>=s[1];case"in":return s[0].includes(s[1]);case"notin":return!s[0].includes(s[1]);case"null":return s.every((t,a,n)=>t===null||t===void 0);case"notnull":return s.every((t,a,n)=>t!==null&&t!==void 0);case"empty":return s.every((t,a,n)=>t==="");case"notempty":return s.every((t,a,n)=>t!=="");case"nullorempty":return s.every((t,a,n)=>t===null||t===void 0||t==="");case"notnullorempty":return s.every((t,a,n)=>t!==null&&t!==void 0&&t!=="")}}}});var er=(o)=>o.keys(C(o)).keys(L(o)).keys(D(o)).keys(T(o)).keys(q(o)).keys(U(o)).keys(N(o)).sources(V(o)).sources($(o)).sources(H(o)).sources(Q(o)).sources(Y(o)).sources(x(o)).sources(rr(o)).sources(or(o));class ar{includeDirectories=[];includes=[];outputs=[];vars={};cache={};fields={};objectMetadata={};constructor(){this.use(er)}use(o){return o(this),this}includeDirectory(...o){return this.includeDirectories.push(...o),this}getIncludeDirectories(){return this.includeDirectories}include(...o){return this.includes.push(...o),this}keys(o){return this.fields.keys={...this.fields.keys,...o},this}sources(o){return this.fields.sources={...this.fields.sources,...o},this}variables(o){return this.vars={...this.vars,...o},this}getOutputs(){return this.outputs}output(o){return this.outputs.push(o),this}metadata(o,r){return this.objectMetadata[o]=r,this}getMetadata(o){return this.objectMetadata[o]}getAllMetadata(){return this.objectMetadata}filter(o){return this.fields.filters??=[],this.fields.filters?.push(o),this}async docIncludes(o,r){let e=[];if(o.content.includes)e.push(...o.content.includes),delete o.content.includes;e.push(...this.includes),this.includes.length=0;for(let s of e)tr.merge(await this.load(s,o.folderPath,{parent:o.content,...r},!0),o.content)}async load(o,r,e,s){if(this.cache[o])return this.cache[o];let t=r?[r]:[];t.push(...this.includeDirectories.map((n)=>P.default.isAbsolute(n)?n:P.default.join(r??process.cwd(),n)));let a=await F.loadFormat(o,{dirs:t});if(!a.content)return null;if(await this.docIncludes(a,e),s!==!0)await sr.processFields(a.content,{...this.fields,globalContext:{file:a.fullPath},root:{...this.fields.root,...this.vars,$document:{root:a,fileName:o,folder:a.folderPath,fullPath:a.fullPath,...e}}});return a.content}async writeOutputs(o){await F.writeOutputs(this.getOutputs(),o)}}
|
|
2
|
+
`))},list:(r)=>O.toList(r.args[0],r.args[1]),object:(r)=>O.toObject(r.args[0],r.args[1]),range:(r)=>{let[e,s,t]=r.args,a=parseInt(e),n=parseInt(s),i=parseInt(t)||1;if(isNaN(a)||isNaN(n))throw new Error("Invalid range");return Array.from({length:Math.floor((n-a)/i)+1},(m,p)=>a+p*i)}});var W=require("@homedev/fields"),X=require("@homedev/object-utils"),k=require("@homedev/select"),Y=(o)=>({each:{processArgs:!1,fn:async(r)=>{let e=await k.select(r.root,r.rawArgs[0].value),s=await k.select(r.root,r.rawArgs[1].value),t=r.rawArgs[2]?.value,a=Array.isArray(e)?e:X.toList(e),n=[];for(let i=0;i<a.length;i++){let m=JSON.parse(JSON.stringify(s)),p={instance:m};if(await W.processFields(p,{...r.options,root:{...r.root,item:a[i],this:m,parent:r.root.this,index:i,params:r.rawArgs.slice(3).map((f)=>f.value)}}),t!==void 0&&t!=="@")n.push(p.instance[t]);else n.push(p.instance)}return n}}});var Z=require("@homedev/select"),d=async(o,r,e)=>o.rawArgs[r].quoted?o.rawArgs[r].value:await Z.select(o.root,o.rawArgs[r].value,{defaultValue:e}),x=(o)=>({default:{processArgs:!1,fn:async(r)=>{let e=r.rawArgs[1]?.value?await d(r,1):"";return d(r,0,e)}},switch:{processArgs:!1,fn:async(r)=>{let e=await d(r,0,!1),s=await d(r,1);if(s[e]===void 0){if(r.rawArgs.length>2)return d(r,2);throw new Error(`Unhandled switch case: ${e}`)}return s[e]}}});var rr=(o)=>({log:(r)=>{console.log(...r.args)}});var or=(o)=>({if:(r)=>r.args[0]==="true"?r.args[1]:r.args[2],check:{keywords:{0:["eq","ne","lt","le","gt","ge","in","notin","null","notnull","empty","notempty","nullorempty","notnullorempty"]},fn:(r)=>{let[e,...s]=r.args;switch(e){case"eq":return s.every((t,a,n)=>t===n[0]);case"ne":return s.every((t,a,n)=>t!==n[0]);case"lt":return s[0]<s[1];case"le":return s[0]<=s[1];case"gt":return s[0]>s[1];case"ge":return s[0]>=s[1];case"in":return s[0].includes(s[1]);case"notin":return!s[0].includes(s[1]);case"null":return s.every((t,a,n)=>t===null||t===void 0);case"notnull":return s.every((t,a,n)=>t!==null&&t!==void 0);case"empty":return s.every((t,a,n)=>t==="");case"notempty":return s.every((t,a,n)=>t!=="");case"nullorempty":return s.every((t,a,n)=>t===null||t===void 0||t==="");case"notnullorempty":return s.every((t,a,n)=>t!==null&&t!==void 0&&t!=="")}}}});var er=(o)=>o.keys(C(o)).keys(L(o)).keys(D(o)).keys(T(o)).keys(q(o)).keys(U(o)).keys(N(o)).sources(V(o)).sources($(o)).sources(H(o)).sources(Q(o)).sources(Y(o)).sources(x(o)).sources(rr(o)).sources(or(o));class ar{includeDirectories=[];includes=[];outputs=[];vars={};cache={};fields={};objectMetadata={};constructor(){this.use(er)}use(o){return o(this),this}includeDirectory(...o){return this.includeDirectories.push(...o),this}getIncludeDirectories(){return this.includeDirectories}include(...o){return this.includes.push(...o),this}keys(o){return this.fields.keys={...this.fields.keys,...o},this}sources(o){return this.fields.sources={...this.fields.sources,...o},this}variables(o){return this.vars={...this.vars,...o},this}getOutputs(){return this.outputs}output(o){return this.outputs.push(o),this}metadata(o,r){return this.objectMetadata[o]=r,this}getMetadata(o){return this.objectMetadata[o]}getAllMetadata(){return this.objectMetadata}filter(o){return this.fields.filters??=[],this.fields.filters?.push(o),this}async docIncludes(o,r){let e=[];if(o.content.includes)e.push(...o.content.includes),delete o.content.includes;e.push(...this.includes),this.includes.length=0;for(let s of e)tr.merge(await this.load(s,o.folderPath,{parent:o.content,...r},!0),o.content)}async load(o,r,e,s){if(this.cache[o])return this.cache[o];let t=r?[r]:[];t.push(...this.includeDirectories.map((n)=>P.default.isAbsolute(n)?n:P.default.join(r??process.cwd(),n)));let a=await F.loadFormat(o,{dirs:t});if(!a.content)return null;if(await this.docIncludes(a,e),s!==!0)await sr.processFields(a.content,{...this.fields,globalContext:{file:a.fullPath},root:{...this.fields.root,...this.vars,$document:{root:a,fileName:o,folder:a.folderPath,fullPath:a.fullPath,...e}}});return a.content}async writeOutputs(o){await F.writeOutputs(this.getOutputs(),o)}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@homedev/objector",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "object extensions for YAML/JSON",
|
|
5
5
|
"author": "julzor",
|
|
6
6
|
"license": "ISC",
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"typings": "dist/index.d.ts",
|
|
10
10
|
"peerDependencies": {
|
|
11
|
-
"@homedev/fields": "^1.0.
|
|
12
|
-
"@homedev/files": "^1.0.
|
|
13
|
-
"@homedev/merge": "^1.0.
|
|
14
|
-
"@homedev/navigate": "^1.0.
|
|
15
|
-
"@homedev/object-utils": "^1.0.
|
|
16
|
-
"@homedev/select": "^1.0.
|
|
17
|
-
"@homedev/string-utils": "^1.0.
|
|
11
|
+
"@homedev/fields": "^1.0.10",
|
|
12
|
+
"@homedev/files": "^1.0.2",
|
|
13
|
+
"@homedev/merge": "^1.0.2",
|
|
14
|
+
"@homedev/navigate": "^1.0.2",
|
|
15
|
+
"@homedev/object-utils": "^1.0.2",
|
|
16
|
+
"@homedev/select": "^1.0.3",
|
|
17
|
+
"@homedev/string-utils": "^1.0.6",
|
|
18
18
|
"yaml": "^2.8.0"
|
|
19
19
|
}
|
|
20
20
|
}
|