@xyo-network/module-model 2.107.1 → 2.107.4
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/browser/index.cjs +864 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +843 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/neutral/index.cjs +864 -1
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +843 -1
- package/dist/neutral/index.js.map +1 -1
- package/dist/node/index.cjs +951 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +849 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +8 -8
package/dist/browser/index.js
CHANGED
|
@@ -1,2 +1,844 @@
|
|
|
1
|
-
var he=Object.defineProperty;var o=(e,t)=>he(e,"name",{value:t,configurable:!0});var st="network.xyo.module.config";function at(){return e=>{}}o(at,"creatableModule");function ct(){return e=>{}}o(ct,"creatableModuleFactory");var we=o((e,t)=>({...e,configSchemas:e.configSchemas,create:e.create.bind(e),defaultConfigSchema:e.defaultConfigSchema,labels:{...e.labels,...t}}),"buildModuleFactory"),Me=o((e,t,r,s=!1)=>{let n=o(c=>{switch(typeof s){case"boolean":return s;case"string":return c===s;case"object":if(Array.isArray(s))return s.includes(c)}throw new Error(`Invalid primary value: ${s}`)},"isPrimaryForSchema"),a=we(t,r);e[t.defaultConfigSchema]=[a,...e[a.defaultConfigSchema]??[]];for(let c of a.configSchemas)e[c]=n(c)?[a,...e[c]??[]]:[...e[c]??[],a]},"registerCreatableModuleFactory"),dt=o((e,t={},r=!1)=>{for(let s of e)Me(t,s,void 0,r);return t},"registerCreatableModuleFactories"),ut=o((e={},...t)=>(t.map(r=>Object.entries(r).map(([s,n])=>{if(n){let a=e[s];e[s]=a?e[s]=[...a,...n]:n}})),e),"assignCreatableModuleRegistry");var pt=o(e=>e.labels!==void 0,"hasLabels");function xt(){return e=>{}}o(xt,"labeledCreatableModuleFactory");import{assertEx as H}from"@xylabs/assert";import{merge as Q}from"@xylabs/lodash";var U=class e{static{o(this,"ModuleFactory")}configSchemas;creatableModule;defaultConfigSchema;defaultLogger;defaultParams;labels;constructor(t,r,s={}){this.creatableModule=t,this.defaultParams=r,this.configSchemas=t.configSchemas,this.defaultConfigSchema=t.defaultConfigSchema,H(this.configSchemas.includes(this.defaultConfigSchema),()=>"defaultConfigSchema must be in configSchemas"),this.labels=Object.assign({},t.labels??{},s??{})}static withParams(t,r,s={}){return new e(t,r,s)}_getRootFunction(t){let r=this;for(;r.__proto__[t];)r=r.__proto__;return r[t]}_noOverride(t){let r=this[t],s=this._getRootFunction(t);H(r===s,()=>`Override not allowed for [${t}] - override ${t}Handler instead`)}create(t){let r=this,s=r.creatableModule.defaultConfigSchema,n=Q({},r.defaultParams,t,{config:Q({},r.defaultParams?.config,t?.config,{schema:s})});return r.creatableModule.create(n)}factory(t){throw new Error("Method not implemented.")}};var P=class extends Error{static{o(this,"ModuleDetailsError")}details;constructor(t,r){super(t),this.details=r,this.name="ModuleError"}};import{AsObjectFactory as je}from"@xylabs/object";import{IsObjectFactory as Ce}from"@xylabs/object";import{AsObjectFactory as Ae}from"@xylabs/object";var It="network.xyo.query.module.manifest";var Ct="network.xyo.query.module.address";var V="network.xyo.query.module.state";var jt="network.xyo.query.module.subscribe";import{AsObjectFactory as ge}from"@xylabs/object";import{IsObjectFactory as be}from"@xylabs/object";var ye={address:"string",queries:"array",query:"function"},ve=new be,p=ve.create(ye);var W=ge.create(p);var I=class{static{o(this,"IsModuleFactory")}create(t,r){return(s,n)=>{let a=W(s);return p(a,n)&&(t?.reduce((i,l)=>i&&a.queries.includes(l),!0)??!0)&&(r?.reduce((i,l)=>i&&l(s,n),!0)??!0)}}};var Se=[V],Ie=new I,x=Ie.create(Se,[p]);var zt=Ae.create(x);var Le={manifest:"function",state:"function"},Te=new Ce,h=Te.create(Le,[x]);var A=je.create(h);import{AsObjectFactory as Re}from"@xylabs/object";import{IsObjectFactory as Fe}from"@xylabs/object";var Oe={downResolver:"object",upResolver:"object"},ke=new Fe,z=ke.create(Oe,[h]);var nr=Re.create(z);import{IsObjectFactory as Ne}from"@xylabs/object";var J=class extends Ne{static{o(this,"IsAttachableModuleInstanceFactory")}};import{IsObjectFactory as $e,toJsonString as qe}from"@xylabs/object";var B=class e extends Error{static{o(this,"DeadModuleError")}id;error;constructor(t,r,s="Dead Module Error"){super(`${s} [${t}]: ${r?.message??qe(r)}`),this.id=t,this.error=r,Object.setPrototypeOf(this,e.prototype)}},G=class extends $e{static{o(this,"IsInstanceFactory")}};var K=o(e=>e.address!==void 0,"isAddressObjectFilter"),X=o(e=>e.name!==void 0,"isNameObjectFilter"),Y=o(e=>e.query!==void 0,"isQueryObjectFilter");var hr=K,wr=X,Mr=Y;var ee=o(e=>typeof e.resolve=="function","isObjectResolver"),Z;(function(e){e[e.Disabled=-1]="Disabled",e[e.VeryLow=0]="VeryLow",e[e.Low=1]="Low",e[e.Normal=2]="Normal",e[e.High=3]="High",e[e.VeryHigh=4]="VeryHigh"})(Z||(Z={}));var Sr=ee;var Ar=o((e,t)=>t?Object.entries(t).every(([r,s])=>e?.hasOwnProperty(r)&&e?.[r]===s):!0,"hasAllLabels");var Tr="network.xyo.module.limitation",jr={ModuleLimitationLabelName:"view"};var M=o((e,t,r)=>r.findIndex(s=>s.address===e.address)===t,"duplicateModules");import{every as Ee,isArray as _e,isBoolean as De,isNull as He,isNumber as Qe,isPlainObject as Ue,isString as Pe,isUndefined as Ve,overSome as R}from"@xylabs/lodash";var te=[Ve,He,De,Qe,Pe],re=[Ue,_e],Nr=o((e,t)=>{let r=!1,s=o(()=>t?t--:void 0,"decrementDepth"),n=o(c=>{if(t!==void 0&&t<1)return r=!0,!1;s();let i=o(l=>R(re)(l)&&Ee(l,n),"nestedSerializable");return R([...te,i])(c)},"recursiveSerializable"),a=n(e);return r?null:a},"serializable"),$r=o(e=>R([...te,...re])(e),"serializableField");import{isAddress as oe}from"@xylabs/hex";var N=":",We={" ":!0,"!":!0,'"':!0,"#":!0,$:!0,"%":!0,"&":!0,"'":!0,"(":!0,")":!0,"*":!0,",":!0,".":!0,"/":!0,":":!0,";":!0,"<":!0,"=":!0,">":!0,"?":!0,"@":!0,"[":!0,"]":!0,"^":!0,_:!0,"{":!0,"|":!0,"}":!0,"~":!0},ze=new Set(Object.keys(We)),Je=o(e=>typeof e=="string"&&!oe(e)&&!Be(e),"isModuleName"),Be=o(e=>typeof e=="string"&&[...e].some(t=>ze.has(t)),"includesReservedModuleIdentifierCharacter"),Dr=o(e=>Je(e)||oe(e),"isModuleIdentifierPart");var Ur="network.xyo.address",Pr="network.xyo.address.child";var Wr="network.xyo.address.hash.previous";var Jr="network.xyo.module.description";import{isPayloadOfSchemaType as se}from"@xyo-network/payload-model";var ne="network.xyo.module.state",Kr=o(e=>se(ne)(e),"isModuleState"),Xr=o(e=>se(ne)(e),"isModuleStateWithMeta");var C=o(async(e,t,r=!1,s=[])=>{if(e.address===t)return e;let n=e.addressCache?.("up",r),a=(r?await e.privateChildren?.():[])??[],c=await e.publicChildren?.()??[],i=[...a,...c];for(let l of i){let u=await C(l,t,r,s);if(u)return n?.set(t,new WeakRef(u)),u}n?.set(t,null)},"resolveAddressToInstanceDown"),eo=o(async(e,t,r=!1,s=[])=>{let n=await e.siblings?.()??[];for(let a of n){let c=await C(a,t,r,s);if(c)return c}},"resolveAddressToInstanceSiblings"),ae=o(async(e,t,r=!1,s=[])=>{let n=e.addressCache?.("up",r),a=await e.parents?.()??[];for(let c of a){let i=await $(c,t,r,s);if(i)return n?.set(t,new WeakRef(i)),i}n?.set(t,null)},"resolveAddressToInstanceUp"),Ge=o(async(e,t,r=!1,s=[])=>{let n=e.addressCache?.("all",r),a=await C(e,t,r??!1,s)??await ae(e,t,r??!0,s);return n?.set(t,a?new WeakRef(a):null),a},"resolveAddressToInstanceAll"),$=o(async(e,t,r=!1,s=[],n="all")=>{switch(n){case"all":return await Ge(e,t,r,s);case"up":return await ae(e,t,r??!0,s);case"down":return await C(e,t,r??!1,s)}},"resolveAddressToInstance");import{assertEx as Ze}from"@xylabs/assert";import{exists as et}from"@xylabs/exists";import{isAddress as tt}from"@xylabs/hex";import{IdLogger as de}from"@xylabs/logger";import{toJsonString as rt}from"@xylabs/object";var f=class{static{o(this,"ResolveHelperStatic")}static defaultLogger;static transformers=[]};import{assertEx as Ke}from"@xylabs/assert";import{asAddress as Xe}from"@xylabs/hex";var L=o(async(e,t)=>(await e.parents?.()??[]).find(s=>s.config.name===t),"resolveLocalNameToInstanceUp"),T=o(async(e,t,r=!1)=>{let s=(r?await e.privateChildren?.():[])??[],n=await e.publicChildren?.()??[];return[...s,...n].find(c=>c.config.name===t)},"resolveLocalNameToInstanceDown"),q=o(async(e,t,r=!1)=>await T(e,t,r)??await L(e,t),"resolveLocalNameToInstanceAll"),ce=o(async(e,t,r=!1,s="all")=>{switch(s){case"all":return await q(e,t,r);case"up":return await L(e,t);case"down":return await T(e,t,r)}},"resolveLocalNameToInstance");var io=o(async(e,t)=>(await L(e,t))?.address,"resolveLocalNameToAddressUp"),lo=o(async(e,t,r=!1)=>(await T(e,t,r))?.address,"resolveLocalNameToAddressDown"),uo=o(async(e,t,r=!1)=>(await q(e,t,r))?.address,"resolveLocalNameToAddressAll"),ie=o(async(e,t,r=!1,s="all")=>(await ce(e,t,r,s))?.address,"resolveLocalNameToAddress");var j=o(async(e,t)=>{let r=e;for(let s of t)r=await s.transform(e);return r},"transformModuleIdentifier");var E=o(async(e,t,r=!1,s=f.transformers)=>{let n=t.split(N),a=await j(Ke(n.shift(),()=>`First part is invalid [${t}]`),s);if(!a)return;let c=Xe(a)??await ie(e,a,r);if(c){let i=await $(e,c,r);return i&&n.length>0?E(i,n.join(N)):i}},"resolvePathToInstance");var le=o(async(e,t,r=!1,s=f.transformers)=>(await E(e,t,r,s))?.address,"resolvePathToAddress");import{assertEx as Ye}from"@xylabs/assert";var _=o(async(e,t)=>{let r=t.split(":"),s=r.shift(),n=A(Ye(await e.resolve(s,{maxDepth:1}),()=>`Failed to resolve [${s}]`),()=>`Resolved invalid module instance [${s}]`);return n?r.length>0?[n.address,...await _(n,r.join(":"))]:[n.address]:[]},"traceModuleIdentifier");var ue=class e extends f{static{o(this,"ResolveHelper")}static async resolve(t,r="*",{maxDepth:s=3,required:n="log",...a}={}){let{transformers:c,module:i,logger:l=this.defaultLogger,dead:u=!1,upResolver:F,downResolver:O,privateResolver:me}=t,b=l?new de(l,()=>`ResolveHelper [${i.id}][${r}]`):void 0,y={...a,direction:"down",maxDepth:s,required:!1},v={...y,direction:"up"},pe={...a,maxDepth:s-1,required:!1},g=a?.direction??"all",S=g==="up"||g==="all",D=g==="down"||g==="all",w;if(b?.debug("start",r,s),r==="*"){if(u)return b?.warn("failed [dead]",r),[];let d=[...D?await O.resolve("*",y):[],...S?await F.resolve("*",v):[]].filter(M).filter(m=>m.address!==t.address);if(d.length>0&&(b?.log("modules [count]",d.length),b?.debug("modules",rt(d,4))),s===0)return d;let k=(await Promise.all(d.map(async m=>await m.resolve("*",pe)))).flat().filter(M);return[...d,...k].filter(M)}else switch(typeof r){case"string":{if(u)return;let d=await le(i,r,!1,c)??r;if(d){let k=[[O,y],[S?F:void 0,v],[S?me:void 0,v]].filter(([m])=>et(m));for(let m of k){let[xe]=m;w||(w=await this.resolveModuleIdentifier(xe,d))}}break}default:{if(u)return[];let d=r;w=[...D?await O.resolve(d,y):[],...S?await F.resolve(d,v):[]].filter(M);break}}return this.validateRequiredResolve(n,w,r,l),w}static async resolveModuleIdentifier(t,r,s){let n=r.split(":"),a=n.shift(),c=tt(a),i=await t.resolve(a,{maxDepth:c?10:1})??(a?await t.resolvePrivate(a,{maxDepth:c?10:1}):void 0),l=s?Ze(i,()=>`Failed to resolve [${a}] [${c}]`):i,u=A(l,()=>`Resolved invalid module instance [${a}]`);if(u)return n.length>0?await this.resolveModuleIdentifier(u,n.join(":")):u}static traceModuleIdentifier(t,r){return _(t,r)}static transformModuleIdentifier(t,r=e.transformers){return j(t,r)}static validateRequiredResolve(t,r,s,n=this.defaultLogger){let a=n?new de(n,()=>`validateRequiredResolve [${s}][${r}]`):void 0;if(t&&(r===void 0||Array.isArray(r)&&r.length>0))switch(t){case"warn":{a?.warn("resolve failed",s);break}case"log":{a?.log("resolve failed",s);break}default:throw new Error(`resolve failed [${s}]`)}}};var fe={create:o(e=>(t,r)=>e(t)?r(t):void 0,"create")},Bo=fe.create(x),Go=fe.create(h);export{Pr as AddressChildSchema,Wr as AddressPreviousHashSchema,Ur as AddressSchema,B as DeadModuleError,We as DisallowedModuleIdentifierCharacters,J as IsAttachableModuleInstanceFactory,G as IsInstanceFactory,I as IsModuleFactory,N as MODULE_PATH_SEPARATOR,Ct as ModuleAddressQuerySchema,st as ModuleConfigSchema,Jr as ModuleDescriptionSchema,P as ModuleDetailsError,U as ModuleFactory,Tr as ModuleLimitationLabelName,jr as ModuleLimitationViewLabel,It as ModuleManifestQuerySchema,V as ModuleStateQuerySchema,ne as ModuleStateSchema,jt as ModuleSubscribeQuerySchema,Z as ObjectResolverPriority,ze as ReservedModuleIdentifierCharacters,ue as ResolveHelper,fe as WithFactory,nr as asAttachableModuleInstance,zt as asModule,A as asModuleInstance,W as asModuleObject,ut as assignCreatableModuleRegistry,at as creatableModule,ct as creatableModuleFactory,M as duplicateModules,Ar as hasAllLabels,pt as hasLabels,Be as includesReservedModuleIdentifierCharacter,hr as isAddressModuleFilter,K as isAddressObjectFilter,z as isAttachableModuleInstance,x as isModule,Dr as isModuleIdentifierPart,h as isModuleInstance,Je as isModuleName,p as isModuleObject,Sr as isModuleResolver,Kr as isModuleState,Xr as isModuleStateWithMeta,wr as isNameModuleFilter,X as isNameObjectFilter,ee as isObjectResolver,Mr as isQueryModuleFilter,Y as isQueryObjectFilter,xt as labeledCreatableModuleFactory,dt as registerCreatableModuleFactories,Me as registerCreatableModuleFactory,Oe as requiredAttachableModuleInstanceFunctions,Le as requiredModuleInstanceFunctions,Se as requiredModuleQueries,ye as requiredModuleShape,$ as resolveAddressToInstance,Ge as resolveAddressToInstanceAll,C as resolveAddressToInstanceDown,eo as resolveAddressToInstanceSiblings,ae as resolveAddressToInstanceUp,ie as resolveLocalNameToAddress,uo as resolveLocalNameToAddressAll,lo as resolveLocalNameToAddressDown,io as resolveLocalNameToAddressUp,ce as resolveLocalNameToInstance,q as resolveLocalNameToInstanceAll,T as resolveLocalNameToInstanceDown,L as resolveLocalNameToInstanceUp,le as resolvePathToAddress,E as resolvePathToInstance,Nr as serializable,$r as serializableField,j as transformModuleIdentifier,Bo as withModule,Go as withModuleInstance};
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/Config/Config.ts
|
|
5
|
+
var ModuleConfigSchema = "network.xyo.module.config";
|
|
6
|
+
|
|
7
|
+
// src/CreatableModule/CreatableModule.ts
|
|
8
|
+
function creatableModule() {
|
|
9
|
+
return (constructor) => {
|
|
10
|
+
constructor;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
__name(creatableModule, "creatableModule");
|
|
14
|
+
function creatableModuleFactory() {
|
|
15
|
+
return (constructor) => {
|
|
16
|
+
constructor;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
__name(creatableModuleFactory, "creatableModuleFactory");
|
|
20
|
+
|
|
21
|
+
// src/CreatableModule/CreatableModuleRegistry.ts
|
|
22
|
+
var buildModuleFactory = /* @__PURE__ */ __name((mod, labels) => {
|
|
23
|
+
const factory5 = {
|
|
24
|
+
// Destructure instance properties
|
|
25
|
+
...mod,
|
|
26
|
+
configSchemas: mod.configSchemas,
|
|
27
|
+
// Copy static methods
|
|
28
|
+
create: mod.create.bind(mod),
|
|
29
|
+
defaultConfigSchema: mod.defaultConfigSchema,
|
|
30
|
+
// Merge module & supplied labels
|
|
31
|
+
labels: {
|
|
32
|
+
...mod.labels,
|
|
33
|
+
...labels
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return factory5;
|
|
37
|
+
}, "buildModuleFactory");
|
|
38
|
+
var registerCreatableModuleFactory = /* @__PURE__ */ __name((registry, factory5, labels, primary = false) => {
|
|
39
|
+
const isPrimaryForSchema = /* @__PURE__ */ __name((schema) => {
|
|
40
|
+
switch (typeof primary) {
|
|
41
|
+
case "boolean": {
|
|
42
|
+
return primary;
|
|
43
|
+
}
|
|
44
|
+
case "string": {
|
|
45
|
+
return schema === primary;
|
|
46
|
+
}
|
|
47
|
+
case "object": {
|
|
48
|
+
if (Array.isArray(primary)) {
|
|
49
|
+
return primary.includes(schema);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`Invalid primary value: ${primary}`);
|
|
54
|
+
}, "isPrimaryForSchema");
|
|
55
|
+
const factoryClone = buildModuleFactory(factory5, labels);
|
|
56
|
+
registry[factory5.defaultConfigSchema] = [
|
|
57
|
+
factoryClone,
|
|
58
|
+
...registry[factoryClone.defaultConfigSchema] ?? []
|
|
59
|
+
];
|
|
60
|
+
for (const schema of factoryClone.configSchemas) {
|
|
61
|
+
registry[schema] = isPrimaryForSchema(schema) ? [
|
|
62
|
+
factoryClone,
|
|
63
|
+
...registry[schema] ?? []
|
|
64
|
+
] : [
|
|
65
|
+
...registry[schema] ?? [],
|
|
66
|
+
factoryClone
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
}, "registerCreatableModuleFactory");
|
|
70
|
+
var registerCreatableModuleFactories = /* @__PURE__ */ __name((factories, registry = {}, primary = false) => {
|
|
71
|
+
for (const factory5 of factories) {
|
|
72
|
+
registerCreatableModuleFactory(registry, factory5, void 0, primary);
|
|
73
|
+
}
|
|
74
|
+
return registry;
|
|
75
|
+
}, "registerCreatableModuleFactories");
|
|
76
|
+
var assignCreatableModuleRegistry = /* @__PURE__ */ __name((target = {}, ...sources) => {
|
|
77
|
+
sources.map((source) => Object.entries(source).map(([schema, factories]) => {
|
|
78
|
+
if (factories) {
|
|
79
|
+
const existingFactories = target[schema];
|
|
80
|
+
target[schema] = existingFactories ? target[schema] = [
|
|
81
|
+
...existingFactories,
|
|
82
|
+
...factories
|
|
83
|
+
] : factories;
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
return target;
|
|
87
|
+
}, "assignCreatableModuleRegistry");
|
|
88
|
+
|
|
89
|
+
// src/CreatableModule/LabeledCreatableModuleFactory.ts
|
|
90
|
+
var hasLabels = /* @__PURE__ */ __name((factory5) => {
|
|
91
|
+
return factory5.labels !== void 0;
|
|
92
|
+
}, "hasLabels");
|
|
93
|
+
function labeledCreatableModuleFactory() {
|
|
94
|
+
return (constructor) => {
|
|
95
|
+
constructor;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
__name(labeledCreatableModuleFactory, "labeledCreatableModuleFactory");
|
|
99
|
+
|
|
100
|
+
// src/CreatableModule/ModuleFactory.ts
|
|
101
|
+
import { assertEx } from "@xylabs/assert";
|
|
102
|
+
import { merge } from "@xylabs/lodash";
|
|
103
|
+
var ModuleFactory = class _ModuleFactory {
|
|
104
|
+
static {
|
|
105
|
+
__name(this, "ModuleFactory");
|
|
106
|
+
}
|
|
107
|
+
configSchemas;
|
|
108
|
+
creatableModule;
|
|
109
|
+
defaultConfigSchema;
|
|
110
|
+
defaultLogger;
|
|
111
|
+
defaultParams;
|
|
112
|
+
labels;
|
|
113
|
+
constructor(creatableModule2, params, labels = {}) {
|
|
114
|
+
this.creatableModule = creatableModule2;
|
|
115
|
+
this.defaultParams = params;
|
|
116
|
+
this.configSchemas = creatableModule2.configSchemas;
|
|
117
|
+
this.defaultConfigSchema = creatableModule2.defaultConfigSchema;
|
|
118
|
+
assertEx(this.configSchemas.includes(this.defaultConfigSchema), () => "defaultConfigSchema must be in configSchemas");
|
|
119
|
+
this.labels = Object.assign({}, creatableModule2.labels ?? {}, labels ?? {});
|
|
120
|
+
}
|
|
121
|
+
static withParams(creatableModule2, params, labels = {}) {
|
|
122
|
+
return new _ModuleFactory(creatableModule2, params, labels);
|
|
123
|
+
}
|
|
124
|
+
_getRootFunction(funcName) {
|
|
125
|
+
let anyThis = this;
|
|
126
|
+
while (anyThis.__proto__[funcName]) {
|
|
127
|
+
anyThis = anyThis.__proto__;
|
|
128
|
+
}
|
|
129
|
+
return anyThis[funcName];
|
|
130
|
+
}
|
|
131
|
+
_noOverride(functionName) {
|
|
132
|
+
const thisFunc = this[functionName];
|
|
133
|
+
const rootFunc = this._getRootFunction(functionName);
|
|
134
|
+
assertEx(thisFunc === rootFunc, () => `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
|
|
135
|
+
}
|
|
136
|
+
create(params) {
|
|
137
|
+
const factory5 = this;
|
|
138
|
+
const schema = factory5.creatableModule.defaultConfigSchema;
|
|
139
|
+
const mergedParams = merge({}, factory5.defaultParams, params, {
|
|
140
|
+
config: merge({}, factory5.defaultParams?.config, params?.config, {
|
|
141
|
+
schema
|
|
142
|
+
})
|
|
143
|
+
});
|
|
144
|
+
return factory5.creatableModule.create(mergedParams);
|
|
145
|
+
}
|
|
146
|
+
factory(_params) {
|
|
147
|
+
throw new Error("Method not implemented.");
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
// src/DetailsError.ts
|
|
152
|
+
var ModuleDetailsError = class extends Error {
|
|
153
|
+
static {
|
|
154
|
+
__name(this, "ModuleDetailsError");
|
|
155
|
+
}
|
|
156
|
+
details;
|
|
157
|
+
constructor(message, details) {
|
|
158
|
+
super(message);
|
|
159
|
+
this.details = details;
|
|
160
|
+
this.name = "ModuleError";
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// src/instance/asModuleInstance.ts
|
|
165
|
+
import { AsObjectFactory as AsObjectFactory3 } from "@xylabs/object";
|
|
166
|
+
|
|
167
|
+
// src/instance/isModuleInstance.ts
|
|
168
|
+
import { IsObjectFactory as IsObjectFactory2 } from "@xylabs/object";
|
|
169
|
+
|
|
170
|
+
// src/module/asModule.ts
|
|
171
|
+
import { AsObjectFactory as AsObjectFactory2 } from "@xylabs/object";
|
|
172
|
+
|
|
173
|
+
// src/Queries/Manifest.ts
|
|
174
|
+
var ModuleManifestQuerySchema = "network.xyo.query.module.manifest";
|
|
175
|
+
|
|
176
|
+
// src/Queries/ModuleAddress/Query.ts
|
|
177
|
+
var ModuleAddressQuerySchema = "network.xyo.query.module.address";
|
|
178
|
+
|
|
179
|
+
// src/Queries/State.ts
|
|
180
|
+
var ModuleStateQuerySchema = "network.xyo.query.module.state";
|
|
181
|
+
|
|
182
|
+
// src/Queries/Subscribe.ts
|
|
183
|
+
var ModuleSubscribeQuerySchema = "network.xyo.query.module.subscribe";
|
|
184
|
+
|
|
185
|
+
// src/module/asModuleObject.ts
|
|
186
|
+
import { AsObjectFactory } from "@xylabs/object";
|
|
187
|
+
|
|
188
|
+
// src/module/isModuleObject.ts
|
|
189
|
+
import { IsObjectFactory } from "@xylabs/object";
|
|
190
|
+
var requiredModuleShape = {
|
|
191
|
+
address: "string",
|
|
192
|
+
queries: "array",
|
|
193
|
+
query: "function"
|
|
194
|
+
};
|
|
195
|
+
var factory = new IsObjectFactory();
|
|
196
|
+
var isModuleObject = factory.create(requiredModuleShape);
|
|
197
|
+
|
|
198
|
+
// src/module/asModuleObject.ts
|
|
199
|
+
var asModuleObject = AsObjectFactory.create(isModuleObject);
|
|
200
|
+
|
|
201
|
+
// src/module/IsModuleFactory.ts
|
|
202
|
+
var IsModuleFactory = class {
|
|
203
|
+
static {
|
|
204
|
+
__name(this, "IsModuleFactory");
|
|
205
|
+
}
|
|
206
|
+
create(expectedQueries, additionalChecks) {
|
|
207
|
+
return (obj, config) => {
|
|
208
|
+
const module = asModuleObject(obj);
|
|
209
|
+
const result = isModuleObject(module, config) && (expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true) && //perform additional checks
|
|
210
|
+
(additionalChecks?.reduce((prev, check) => prev && check(obj, config), true) ?? true);
|
|
211
|
+
return result;
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// src/module/isModule.ts
|
|
217
|
+
var requiredModuleQueries = [
|
|
218
|
+
ModuleStateQuerySchema
|
|
219
|
+
];
|
|
220
|
+
var factory2 = new IsModuleFactory();
|
|
221
|
+
var isModule = factory2.create(requiredModuleQueries, [
|
|
222
|
+
isModuleObject
|
|
223
|
+
]);
|
|
224
|
+
|
|
225
|
+
// src/module/asModule.ts
|
|
226
|
+
var asModule = AsObjectFactory2.create(isModule);
|
|
227
|
+
|
|
228
|
+
// src/instance/isModuleInstance.ts
|
|
229
|
+
var requiredModuleInstanceFunctions = {
|
|
230
|
+
manifest: "function",
|
|
231
|
+
state: "function"
|
|
232
|
+
};
|
|
233
|
+
var factory3 = new IsObjectFactory2();
|
|
234
|
+
var isModuleInstance = factory3.create(requiredModuleInstanceFunctions, [
|
|
235
|
+
isModule
|
|
236
|
+
]);
|
|
237
|
+
|
|
238
|
+
// src/instance/asModuleInstance.ts
|
|
239
|
+
var asModuleInstance = AsObjectFactory3.create(isModuleInstance);
|
|
240
|
+
|
|
241
|
+
// src/instance/attachable/asAttachableInstance.ts
|
|
242
|
+
import { AsObjectFactory as AsObjectFactory4 } from "@xylabs/object";
|
|
243
|
+
|
|
244
|
+
// src/instance/attachable/isAttachableInstance.ts
|
|
245
|
+
import { IsObjectFactory as IsObjectFactory3 } from "@xylabs/object";
|
|
246
|
+
var requiredAttachableModuleInstanceFunctions = {
|
|
247
|
+
downResolver: "object",
|
|
248
|
+
upResolver: "object"
|
|
249
|
+
};
|
|
250
|
+
var factory4 = new IsObjectFactory3();
|
|
251
|
+
var isAttachableModuleInstance = factory4.create(requiredAttachableModuleInstanceFunctions, [
|
|
252
|
+
isModuleInstance
|
|
253
|
+
]);
|
|
254
|
+
|
|
255
|
+
// src/instance/attachable/asAttachableInstance.ts
|
|
256
|
+
var asAttachableModuleInstance = AsObjectFactory4.create(isAttachableModuleInstance);
|
|
257
|
+
|
|
258
|
+
// src/instance/attachable/AttachableInstance.ts
|
|
259
|
+
import { IsObjectFactory as IsObjectFactory4 } from "@xylabs/object";
|
|
260
|
+
var IsAttachableModuleInstanceFactory = class extends IsObjectFactory4 {
|
|
261
|
+
static {
|
|
262
|
+
__name(this, "IsAttachableModuleInstanceFactory");
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
// src/instance/Instance.ts
|
|
267
|
+
import { IsObjectFactory as IsObjectFactory5, toJsonString } from "@xylabs/object";
|
|
268
|
+
var DeadModuleError = class _DeadModuleError extends Error {
|
|
269
|
+
static {
|
|
270
|
+
__name(this, "DeadModuleError");
|
|
271
|
+
}
|
|
272
|
+
id;
|
|
273
|
+
error;
|
|
274
|
+
constructor(id, error, msg = "Dead Module Error") {
|
|
275
|
+
super(`${msg} [${id}]: ${error?.message ?? toJsonString(error)}`);
|
|
276
|
+
this.id = id;
|
|
277
|
+
this.error = error;
|
|
278
|
+
Object.setPrototypeOf(this, _DeadModuleError.prototype);
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
var IsInstanceFactory = class extends IsObjectFactory5 {
|
|
282
|
+
static {
|
|
283
|
+
__name(this, "IsInstanceFactory");
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
// src/instance/ObjectFilter.ts
|
|
288
|
+
var isAddressObjectFilter = /* @__PURE__ */ __name((value) => value.address !== void 0, "isAddressObjectFilter");
|
|
289
|
+
var isNameObjectFilter = /* @__PURE__ */ __name((value) => value.name !== void 0, "isNameObjectFilter");
|
|
290
|
+
var isQueryObjectFilter = /* @__PURE__ */ __name((value) => value.query !== void 0, "isQueryObjectFilter");
|
|
291
|
+
|
|
292
|
+
// src/instance/ModuleFilter.ts
|
|
293
|
+
var isAddressModuleFilter = isAddressObjectFilter;
|
|
294
|
+
var isNameModuleFilter = isNameObjectFilter;
|
|
295
|
+
var isQueryModuleFilter = isQueryObjectFilter;
|
|
296
|
+
|
|
297
|
+
// src/instance/ObjectResolver.ts
|
|
298
|
+
var isObjectResolver = /* @__PURE__ */ __name((value) => {
|
|
299
|
+
return typeof value.resolve === "function";
|
|
300
|
+
}, "isObjectResolver");
|
|
301
|
+
var ObjectResolverPriority;
|
|
302
|
+
(function(ObjectResolverPriority2) {
|
|
303
|
+
ObjectResolverPriority2[ObjectResolverPriority2["Disabled"] = -1] = "Disabled";
|
|
304
|
+
ObjectResolverPriority2[ObjectResolverPriority2["VeryLow"] = 0] = "VeryLow";
|
|
305
|
+
ObjectResolverPriority2[ObjectResolverPriority2["Low"] = 1] = "Low";
|
|
306
|
+
ObjectResolverPriority2[ObjectResolverPriority2["Normal"] = 2] = "Normal";
|
|
307
|
+
ObjectResolverPriority2[ObjectResolverPriority2["High"] = 3] = "High";
|
|
308
|
+
ObjectResolverPriority2[ObjectResolverPriority2["VeryHigh"] = 4] = "VeryHigh";
|
|
309
|
+
})(ObjectResolverPriority || (ObjectResolverPriority = {}));
|
|
310
|
+
|
|
311
|
+
// src/instance/ModuleResolver.ts
|
|
312
|
+
var isModuleResolver = isObjectResolver;
|
|
313
|
+
|
|
314
|
+
// src/Labels/Labels.ts
|
|
315
|
+
var hasAllLabels = /* @__PURE__ */ __name((source, required) => {
|
|
316
|
+
if (!required) return true;
|
|
317
|
+
return Object.entries(required).every(([key, value]) => {
|
|
318
|
+
return source?.hasOwnProperty(key) && source?.[key] === value;
|
|
319
|
+
});
|
|
320
|
+
}, "hasAllLabels");
|
|
321
|
+
|
|
322
|
+
// src/Labels/standard/View.ts
|
|
323
|
+
var ModuleLimitationLabelName = "network.xyo.module.limitation";
|
|
324
|
+
var ModuleLimitationViewLabel = {
|
|
325
|
+
ModuleLimitationLabelName: "view"
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// src/lib/duplicateModules.ts
|
|
329
|
+
var duplicateModules = /* @__PURE__ */ __name((value, index, array) => {
|
|
330
|
+
return array.findIndex((v) => v.address === value.address) === index;
|
|
331
|
+
}, "duplicateModules");
|
|
332
|
+
|
|
333
|
+
// src/lib/serializable.ts
|
|
334
|
+
import { every, isArray, isBoolean, isNull, isNumber, isPlainObject, isString, isUndefined, overSome } from "@xylabs/lodash";
|
|
335
|
+
var JSONPrimitiveChecks = [
|
|
336
|
+
isUndefined,
|
|
337
|
+
isNull,
|
|
338
|
+
isBoolean,
|
|
339
|
+
isNumber,
|
|
340
|
+
isString
|
|
341
|
+
];
|
|
342
|
+
var JSONComplexChecks = [
|
|
343
|
+
isPlainObject,
|
|
344
|
+
isArray
|
|
345
|
+
];
|
|
346
|
+
var serializable = /* @__PURE__ */ __name((field, depth) => {
|
|
347
|
+
let depthExceeded = false;
|
|
348
|
+
const decrementDepth = /* @__PURE__ */ __name(() => depth ? depth-- : void 0, "decrementDepth");
|
|
349
|
+
const recursiveSerializable = /* @__PURE__ */ __name((field2) => {
|
|
350
|
+
if (depth !== void 0 && depth < 1) {
|
|
351
|
+
depthExceeded = true;
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
decrementDepth();
|
|
355
|
+
const nestedSerializable = /* @__PURE__ */ __name((field3) => overSome(JSONComplexChecks)(field3) && every(field3, recursiveSerializable), "nestedSerializable");
|
|
356
|
+
return overSome([
|
|
357
|
+
...JSONPrimitiveChecks,
|
|
358
|
+
nestedSerializable
|
|
359
|
+
])(field2);
|
|
360
|
+
}, "recursiveSerializable");
|
|
361
|
+
const valid = recursiveSerializable(field);
|
|
362
|
+
return depthExceeded ? null : valid;
|
|
363
|
+
}, "serializable");
|
|
364
|
+
var serializableField = /* @__PURE__ */ __name((field) => {
|
|
365
|
+
return overSome([
|
|
366
|
+
...JSONPrimitiveChecks,
|
|
367
|
+
...JSONComplexChecks
|
|
368
|
+
])(field);
|
|
369
|
+
}, "serializableField");
|
|
370
|
+
|
|
371
|
+
// src/ModuleIdentifier.ts
|
|
372
|
+
import { isAddress } from "@xylabs/hex";
|
|
373
|
+
var MODULE_PATH_SEPARATOR = ":";
|
|
374
|
+
var DisallowedModuleIdentifierCharacters = {
|
|
375
|
+
" ": true,
|
|
376
|
+
"!": true,
|
|
377
|
+
'"': true,
|
|
378
|
+
"#": true,
|
|
379
|
+
$: true,
|
|
380
|
+
"%": true,
|
|
381
|
+
"&": true,
|
|
382
|
+
"'": true,
|
|
383
|
+
"(": true,
|
|
384
|
+
")": true,
|
|
385
|
+
"*": true,
|
|
386
|
+
",": true,
|
|
387
|
+
".": true,
|
|
388
|
+
"/": true,
|
|
389
|
+
":": true,
|
|
390
|
+
";": true,
|
|
391
|
+
"<": true,
|
|
392
|
+
"=": true,
|
|
393
|
+
">": true,
|
|
394
|
+
"?": true,
|
|
395
|
+
"@": true,
|
|
396
|
+
"[": true,
|
|
397
|
+
"]": true,
|
|
398
|
+
"^": true,
|
|
399
|
+
_: true,
|
|
400
|
+
"{": true,
|
|
401
|
+
"|": true,
|
|
402
|
+
"}": true,
|
|
403
|
+
"~": true
|
|
404
|
+
};
|
|
405
|
+
var ReservedModuleIdentifierCharacters = new Set(Object.keys(DisallowedModuleIdentifierCharacters));
|
|
406
|
+
var isModuleName = /* @__PURE__ */ __name((value) => {
|
|
407
|
+
return typeof value === "string" && !isAddress(value) && !includesReservedModuleIdentifierCharacter(value);
|
|
408
|
+
}, "isModuleName");
|
|
409
|
+
var includesReservedModuleIdentifierCharacter = /* @__PURE__ */ __name((value) => {
|
|
410
|
+
return typeof value === "string" && [
|
|
411
|
+
...value
|
|
412
|
+
].some((char) => ReservedModuleIdentifierCharacters.has(char));
|
|
413
|
+
}, "includesReservedModuleIdentifierCharacter");
|
|
414
|
+
var isModuleIdentifierPart = /* @__PURE__ */ __name((value) => {
|
|
415
|
+
return isModuleName(value) || isAddress(value);
|
|
416
|
+
}, "isModuleIdentifierPart");
|
|
417
|
+
|
|
418
|
+
// src/Payload/Address.ts
|
|
419
|
+
var AddressSchema = "network.xyo.address";
|
|
420
|
+
var AddressChildSchema = "network.xyo.address.child";
|
|
421
|
+
|
|
422
|
+
// src/Payload/AddressPreviousHash.ts
|
|
423
|
+
var AddressPreviousHashSchema = "network.xyo.address.hash.previous";
|
|
424
|
+
|
|
425
|
+
// src/Payload/Description.ts
|
|
426
|
+
var ModuleDescriptionSchema = "network.xyo.module.description";
|
|
427
|
+
|
|
428
|
+
// src/Payload/ModuleState.ts
|
|
429
|
+
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
430
|
+
var ModuleStateSchema = "network.xyo.module.state";
|
|
431
|
+
var isModuleState = /* @__PURE__ */ __name((payload) => {
|
|
432
|
+
return isPayloadOfSchemaType(ModuleStateSchema)(payload);
|
|
433
|
+
}, "isModuleState");
|
|
434
|
+
var isModuleStateWithMeta = /* @__PURE__ */ __name((payload) => {
|
|
435
|
+
return isPayloadOfSchemaType(ModuleStateSchema)(payload);
|
|
436
|
+
}, "isModuleStateWithMeta");
|
|
437
|
+
|
|
438
|
+
// src/ResolveHelper/resolveAddressToInstance.ts
|
|
439
|
+
var resolveAddressToInstanceDown = /* @__PURE__ */ __name(async (root, address, includePrivate = false, ignore = []) => {
|
|
440
|
+
if (root.address === address) {
|
|
441
|
+
return root;
|
|
442
|
+
}
|
|
443
|
+
const cache = root.addressCache?.("up", includePrivate);
|
|
444
|
+
const privateChildren = (includePrivate ? await root.privateChildren?.() : []) ?? [];
|
|
445
|
+
const publicChildren = await root.publicChildren?.() ?? [];
|
|
446
|
+
const children = [
|
|
447
|
+
...privateChildren,
|
|
448
|
+
...publicChildren
|
|
449
|
+
];
|
|
450
|
+
for (const child of children) {
|
|
451
|
+
const found = await resolveAddressToInstanceDown(child, address, includePrivate, ignore);
|
|
452
|
+
if (found) {
|
|
453
|
+
cache?.set(address, new WeakRef(found));
|
|
454
|
+
return found;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
cache?.set(address, null);
|
|
458
|
+
}, "resolveAddressToInstanceDown");
|
|
459
|
+
var resolveAddressToInstanceSiblings = /* @__PURE__ */ __name(async (root, address, includePrivate = false, ignore = []) => {
|
|
460
|
+
const siblings = await root.siblings?.() ?? [];
|
|
461
|
+
for (const sibling of siblings) {
|
|
462
|
+
const found = await resolveAddressToInstanceDown(sibling, address, includePrivate, ignore);
|
|
463
|
+
if (found) {
|
|
464
|
+
return found;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}, "resolveAddressToInstanceSiblings");
|
|
468
|
+
var resolveAddressToInstanceUp = /* @__PURE__ */ __name(async (root, address, includePrivate = false, ignore = []) => {
|
|
469
|
+
const cache = root.addressCache?.("up", includePrivate);
|
|
470
|
+
const parents = await root.parents?.() ?? [];
|
|
471
|
+
for (const parent of parents) {
|
|
472
|
+
const found = await resolveAddressToInstance(parent, address, includePrivate, ignore);
|
|
473
|
+
if (found) {
|
|
474
|
+
cache?.set(address, new WeakRef(found));
|
|
475
|
+
return found;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
cache?.set(address, null);
|
|
479
|
+
}, "resolveAddressToInstanceUp");
|
|
480
|
+
var resolveAddressToInstanceAll = /* @__PURE__ */ __name(async (root, address, includePrivate = false, ignore = []) => {
|
|
481
|
+
const cache = root.addressCache?.("all", includePrivate);
|
|
482
|
+
const result = await resolveAddressToInstanceDown(root, address, includePrivate ?? false, ignore) ?? await resolveAddressToInstanceUp(root, address, includePrivate ?? true, ignore);
|
|
483
|
+
cache?.set(address, result ? new WeakRef(result) : null);
|
|
484
|
+
return result;
|
|
485
|
+
}, "resolveAddressToInstanceAll");
|
|
486
|
+
var resolveAddressToInstance = /* @__PURE__ */ __name(async (root, address, includePrivate = false, ignore = [], direction = "all") => {
|
|
487
|
+
switch (direction) {
|
|
488
|
+
case "all": {
|
|
489
|
+
return await resolveAddressToInstanceAll(root, address, includePrivate, ignore);
|
|
490
|
+
}
|
|
491
|
+
case "up": {
|
|
492
|
+
return await resolveAddressToInstanceUp(root, address, includePrivate ?? true, ignore);
|
|
493
|
+
}
|
|
494
|
+
case "down": {
|
|
495
|
+
return await resolveAddressToInstanceDown(root, address, includePrivate ?? false, ignore);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}, "resolveAddressToInstance");
|
|
499
|
+
|
|
500
|
+
// src/ResolveHelper/ResolveHelper.ts
|
|
501
|
+
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
502
|
+
import { exists } from "@xylabs/exists";
|
|
503
|
+
import { isAddress as isAddress2 } from "@xylabs/hex";
|
|
504
|
+
import { IdLogger } from "@xylabs/logger";
|
|
505
|
+
import { toJsonString as toJsonString2 } from "@xylabs/object";
|
|
506
|
+
|
|
507
|
+
// src/ResolveHelper/ResolveHelperStatic.ts
|
|
508
|
+
var ResolveHelperStatic = class {
|
|
509
|
+
static {
|
|
510
|
+
__name(this, "ResolveHelperStatic");
|
|
511
|
+
}
|
|
512
|
+
static defaultLogger;
|
|
513
|
+
static transformers = [];
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
// src/ResolveHelper/resolvePathToInstance.ts
|
|
517
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
518
|
+
import { asAddress } from "@xylabs/hex";
|
|
519
|
+
|
|
520
|
+
// src/ResolveHelper/resolveLocalNameToInstance.ts
|
|
521
|
+
var resolveLocalNameToInstanceUp = /* @__PURE__ */ __name(async (root, modName) => {
|
|
522
|
+
const parents = await root.parents?.() ?? [];
|
|
523
|
+
return parents.find((parent) => parent.config.name === modName);
|
|
524
|
+
}, "resolveLocalNameToInstanceUp");
|
|
525
|
+
var resolveLocalNameToInstanceDown = /* @__PURE__ */ __name(async (root, modName, includePrivate = false) => {
|
|
526
|
+
const privateChildren = (includePrivate ? await root.privateChildren?.() : []) ?? [];
|
|
527
|
+
const publicChildren = await root.publicChildren?.() ?? [];
|
|
528
|
+
const children = [
|
|
529
|
+
...privateChildren,
|
|
530
|
+
...publicChildren
|
|
531
|
+
];
|
|
532
|
+
return children.find((child) => child.config.name === modName);
|
|
533
|
+
}, "resolveLocalNameToInstanceDown");
|
|
534
|
+
var resolveLocalNameToInstanceAll = /* @__PURE__ */ __name(async (root, modName, includePrivate = false) => {
|
|
535
|
+
return await resolveLocalNameToInstanceDown(root, modName, includePrivate) ?? await resolveLocalNameToInstanceUp(root, modName);
|
|
536
|
+
}, "resolveLocalNameToInstanceAll");
|
|
537
|
+
var resolveLocalNameToInstance = /* @__PURE__ */ __name(async (root, modName, includePrivate = false, direction = "all") => {
|
|
538
|
+
switch (direction) {
|
|
539
|
+
case "all": {
|
|
540
|
+
return await resolveLocalNameToInstanceAll(root, modName, includePrivate);
|
|
541
|
+
}
|
|
542
|
+
case "up": {
|
|
543
|
+
return await resolveLocalNameToInstanceUp(root, modName);
|
|
544
|
+
}
|
|
545
|
+
case "down": {
|
|
546
|
+
return await resolveLocalNameToInstanceDown(root, modName, includePrivate);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}, "resolveLocalNameToInstance");
|
|
550
|
+
|
|
551
|
+
// src/ResolveHelper/resolveLocalNameToAddress.ts
|
|
552
|
+
var resolveLocalNameToAddressUp = /* @__PURE__ */ __name(async (root, modName) => {
|
|
553
|
+
return (await resolveLocalNameToInstanceUp(root, modName))?.address;
|
|
554
|
+
}, "resolveLocalNameToAddressUp");
|
|
555
|
+
var resolveLocalNameToAddressDown = /* @__PURE__ */ __name(async (root, modName, includePrivate = false) => {
|
|
556
|
+
return (await resolveLocalNameToInstanceDown(root, modName, includePrivate))?.address;
|
|
557
|
+
}, "resolveLocalNameToAddressDown");
|
|
558
|
+
var resolveLocalNameToAddressAll = /* @__PURE__ */ __name(async (root, modName, includePrivate = false) => {
|
|
559
|
+
return (await resolveLocalNameToInstanceAll(root, modName, includePrivate))?.address;
|
|
560
|
+
}, "resolveLocalNameToAddressAll");
|
|
561
|
+
var resolveLocalNameToAddress = /* @__PURE__ */ __name(async (root, modName, includePrivate = false, direction = "all") => {
|
|
562
|
+
return (await resolveLocalNameToInstance(root, modName, includePrivate, direction))?.address;
|
|
563
|
+
}, "resolveLocalNameToAddress");
|
|
564
|
+
|
|
565
|
+
// src/ResolveHelper/transformModuleIdentifier.ts
|
|
566
|
+
var transformModuleIdentifier = /* @__PURE__ */ __name(async (id, transformers) => {
|
|
567
|
+
let result = id;
|
|
568
|
+
for (const transformer of transformers) {
|
|
569
|
+
result = await transformer.transform(id);
|
|
570
|
+
}
|
|
571
|
+
return result;
|
|
572
|
+
}, "transformModuleIdentifier");
|
|
573
|
+
|
|
574
|
+
// src/ResolveHelper/resolvePathToInstance.ts
|
|
575
|
+
var resolvePathToInstance = /* @__PURE__ */ __name(async (root, path, includePrivate = false, transformers = ResolveHelperStatic.transformers) => {
|
|
576
|
+
const parts = path.split(MODULE_PATH_SEPARATOR);
|
|
577
|
+
const first = await transformModuleIdentifier(assertEx2(parts.shift(), () => `First part is invalid [${path}]`), transformers);
|
|
578
|
+
if (!first) {
|
|
579
|
+
return void 0;
|
|
580
|
+
}
|
|
581
|
+
const firstAddress = asAddress(first) ?? await resolveLocalNameToAddress(root, first, includePrivate);
|
|
582
|
+
if (firstAddress) {
|
|
583
|
+
const firstModule = await resolveAddressToInstance(root, firstAddress, includePrivate);
|
|
584
|
+
if (firstModule && parts.length > 0) {
|
|
585
|
+
return resolvePathToInstance(firstModule, parts.join(MODULE_PATH_SEPARATOR));
|
|
586
|
+
}
|
|
587
|
+
return firstModule;
|
|
588
|
+
}
|
|
589
|
+
}, "resolvePathToInstance");
|
|
590
|
+
|
|
591
|
+
// src/ResolveHelper/resolvePathToAddress.ts
|
|
592
|
+
var resolvePathToAddress = /* @__PURE__ */ __name(async (root, path, includePrivate = false, transformers = ResolveHelperStatic.transformers) => {
|
|
593
|
+
return (await resolvePathToInstance(root, path, includePrivate, transformers))?.address;
|
|
594
|
+
}, "resolvePathToAddress");
|
|
595
|
+
|
|
596
|
+
// src/ResolveHelper/traceModuleIdentifier.ts
|
|
597
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
598
|
+
var traceModuleIdentifier = /* @__PURE__ */ __name(async (resolver, path) => {
|
|
599
|
+
const parts = path.split(":");
|
|
600
|
+
const first = parts.shift();
|
|
601
|
+
const firstModule = asModuleInstance(assertEx3(await resolver.resolve(first, {
|
|
602
|
+
maxDepth: 1
|
|
603
|
+
}), () => `Failed to resolve [${first}]`), () => `Resolved invalid module instance [${first}]`);
|
|
604
|
+
if (firstModule) {
|
|
605
|
+
return parts.length > 0 ? [
|
|
606
|
+
firstModule.address,
|
|
607
|
+
...await traceModuleIdentifier(firstModule, parts.join(":"))
|
|
608
|
+
] : [
|
|
609
|
+
firstModule.address
|
|
610
|
+
];
|
|
611
|
+
}
|
|
612
|
+
return [];
|
|
613
|
+
}, "traceModuleIdentifier");
|
|
614
|
+
|
|
615
|
+
// src/ResolveHelper/ResolveHelper.ts
|
|
616
|
+
var ResolveHelper = class _ResolveHelper extends ResolveHelperStatic {
|
|
617
|
+
static {
|
|
618
|
+
__name(this, "ResolveHelper");
|
|
619
|
+
}
|
|
620
|
+
static async resolve(config, idOrFilter = "*", { maxDepth = 3, required = "log", ...options } = {}) {
|
|
621
|
+
const { transformers, module, logger = this.defaultLogger, dead = false, upResolver, downResolver, privateResolver } = config;
|
|
622
|
+
const log = logger ? new IdLogger(logger, () => `ResolveHelper [${module.id}][${idOrFilter}]`) : void 0;
|
|
623
|
+
const downLocalOptions = {
|
|
624
|
+
...options,
|
|
625
|
+
direction: "down",
|
|
626
|
+
maxDepth,
|
|
627
|
+
required: false
|
|
628
|
+
};
|
|
629
|
+
const upLocalOptions = {
|
|
630
|
+
...downLocalOptions,
|
|
631
|
+
direction: "up"
|
|
632
|
+
};
|
|
633
|
+
const childOptions = {
|
|
634
|
+
...options,
|
|
635
|
+
maxDepth: maxDepth - 1,
|
|
636
|
+
required: false
|
|
637
|
+
};
|
|
638
|
+
const direction = options?.direction ?? "all";
|
|
639
|
+
const up = direction === "up" || direction === "all";
|
|
640
|
+
const down = direction === "down" || direction === "all";
|
|
641
|
+
let result;
|
|
642
|
+
log?.debug("start", idOrFilter, maxDepth);
|
|
643
|
+
if (idOrFilter === "*") {
|
|
644
|
+
if (dead) {
|
|
645
|
+
log?.warn("failed [dead]", idOrFilter);
|
|
646
|
+
return [];
|
|
647
|
+
}
|
|
648
|
+
const modules = [
|
|
649
|
+
...down ? await downResolver.resolve("*", downLocalOptions) : [],
|
|
650
|
+
...up ? await upResolver.resolve("*", upLocalOptions) : []
|
|
651
|
+
].filter(duplicateModules).filter((module2) => module2.address !== config.address);
|
|
652
|
+
if (modules.length > 0) {
|
|
653
|
+
log?.log("modules [count]", modules.length);
|
|
654
|
+
log?.debug("modules", toJsonString2(modules, 4));
|
|
655
|
+
}
|
|
656
|
+
if (maxDepth === 0) {
|
|
657
|
+
return modules;
|
|
658
|
+
}
|
|
659
|
+
const childModules = (await Promise.all(modules.map(async (module2) => await module2.resolve("*", childOptions)))).flat().filter(duplicateModules);
|
|
660
|
+
return [
|
|
661
|
+
...modules,
|
|
662
|
+
...childModules
|
|
663
|
+
].filter(duplicateModules);
|
|
664
|
+
} else {
|
|
665
|
+
switch (typeof idOrFilter) {
|
|
666
|
+
case "string": {
|
|
667
|
+
if (dead) {
|
|
668
|
+
return void 0;
|
|
669
|
+
}
|
|
670
|
+
const id = await resolvePathToAddress(module, idOrFilter, false, transformers) ?? idOrFilter;
|
|
671
|
+
if (id) {
|
|
672
|
+
const resolvers = [
|
|
673
|
+
[
|
|
674
|
+
downResolver,
|
|
675
|
+
downLocalOptions
|
|
676
|
+
],
|
|
677
|
+
[
|
|
678
|
+
up ? upResolver : void 0,
|
|
679
|
+
upLocalOptions
|
|
680
|
+
],
|
|
681
|
+
[
|
|
682
|
+
up ? privateResolver : void 0,
|
|
683
|
+
upLocalOptions
|
|
684
|
+
]
|
|
685
|
+
].filter(([resolver]) => exists(resolver));
|
|
686
|
+
for (const resolver of resolvers) {
|
|
687
|
+
const [resolverInstance] = resolver;
|
|
688
|
+
if (!result) {
|
|
689
|
+
result = await this.resolveModuleIdentifier(resolverInstance, id);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
break;
|
|
694
|
+
}
|
|
695
|
+
default: {
|
|
696
|
+
if (dead) {
|
|
697
|
+
return [];
|
|
698
|
+
}
|
|
699
|
+
const filter = idOrFilter;
|
|
700
|
+
result = [
|
|
701
|
+
...down ? await downResolver.resolve(filter, downLocalOptions) : [],
|
|
702
|
+
...up ? await upResolver.resolve(filter, upLocalOptions) : []
|
|
703
|
+
].filter(duplicateModules);
|
|
704
|
+
break;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
this.validateRequiredResolve(required, result, idOrFilter, logger);
|
|
709
|
+
return result;
|
|
710
|
+
}
|
|
711
|
+
//resolves a complex module path to addresses
|
|
712
|
+
static async resolveModuleIdentifier(resolver, path, required) {
|
|
713
|
+
const parts = path.split(":");
|
|
714
|
+
const first = parts.shift();
|
|
715
|
+
const firstIsAddress = isAddress2(first);
|
|
716
|
+
const resolvedModule = await resolver.resolve(first, {
|
|
717
|
+
maxDepth: firstIsAddress ? 10 : 1
|
|
718
|
+
}) ?? (first ? await resolver.resolvePrivate(first, {
|
|
719
|
+
maxDepth: firstIsAddress ? 10 : 1
|
|
720
|
+
}) : void 0);
|
|
721
|
+
const finalModule = required ? assertEx4(resolvedModule, () => `Failed to resolve [${first}] [${firstIsAddress}]`) : resolvedModule;
|
|
722
|
+
const firstModule = asModuleInstance(finalModule, () => `Resolved invalid module instance [${first}]`);
|
|
723
|
+
if (firstModule) {
|
|
724
|
+
return parts.length > 0 ? await this.resolveModuleIdentifier(firstModule, parts.join(":")) : firstModule;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
//translates a complex module path to addresses
|
|
728
|
+
static traceModuleIdentifier(resolver, path) {
|
|
729
|
+
return traceModuleIdentifier(resolver, path);
|
|
730
|
+
}
|
|
731
|
+
static transformModuleIdentifier(identifier, transformers = _ResolveHelper.transformers) {
|
|
732
|
+
return transformModuleIdentifier(identifier, transformers);
|
|
733
|
+
}
|
|
734
|
+
static validateRequiredResolve(required, result, idOrFilter, logger = this.defaultLogger) {
|
|
735
|
+
const log = logger ? new IdLogger(logger, () => `validateRequiredResolve [${idOrFilter}][${result}]`) : void 0;
|
|
736
|
+
if (required && (result === void 0 || Array.isArray(result) && result.length > 0)) {
|
|
737
|
+
switch (required) {
|
|
738
|
+
case "warn": {
|
|
739
|
+
log?.warn("resolve failed", idOrFilter);
|
|
740
|
+
break;
|
|
741
|
+
}
|
|
742
|
+
case "log": {
|
|
743
|
+
log?.log("resolve failed", idOrFilter);
|
|
744
|
+
break;
|
|
745
|
+
}
|
|
746
|
+
default: {
|
|
747
|
+
throw new Error(`resolve failed [${idOrFilter}]`);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
// src/withModule.ts
|
|
755
|
+
var WithFactory = {
|
|
756
|
+
create: /* @__PURE__ */ __name((typeCheck) => {
|
|
757
|
+
return (module, closure) => {
|
|
758
|
+
return typeCheck(module) ? closure(module) : void 0;
|
|
759
|
+
};
|
|
760
|
+
}, "create")
|
|
761
|
+
};
|
|
762
|
+
var withModule = WithFactory.create(isModule);
|
|
763
|
+
var withModuleInstance = WithFactory.create(isModuleInstance);
|
|
764
|
+
export {
|
|
765
|
+
AddressChildSchema,
|
|
766
|
+
AddressPreviousHashSchema,
|
|
767
|
+
AddressSchema,
|
|
768
|
+
DeadModuleError,
|
|
769
|
+
DisallowedModuleIdentifierCharacters,
|
|
770
|
+
IsAttachableModuleInstanceFactory,
|
|
771
|
+
IsInstanceFactory,
|
|
772
|
+
IsModuleFactory,
|
|
773
|
+
MODULE_PATH_SEPARATOR,
|
|
774
|
+
ModuleAddressQuerySchema,
|
|
775
|
+
ModuleConfigSchema,
|
|
776
|
+
ModuleDescriptionSchema,
|
|
777
|
+
ModuleDetailsError,
|
|
778
|
+
ModuleFactory,
|
|
779
|
+
ModuleLimitationLabelName,
|
|
780
|
+
ModuleLimitationViewLabel,
|
|
781
|
+
ModuleManifestQuerySchema,
|
|
782
|
+
ModuleStateQuerySchema,
|
|
783
|
+
ModuleStateSchema,
|
|
784
|
+
ModuleSubscribeQuerySchema,
|
|
785
|
+
ObjectResolverPriority,
|
|
786
|
+
ReservedModuleIdentifierCharacters,
|
|
787
|
+
ResolveHelper,
|
|
788
|
+
WithFactory,
|
|
789
|
+
asAttachableModuleInstance,
|
|
790
|
+
asModule,
|
|
791
|
+
asModuleInstance,
|
|
792
|
+
asModuleObject,
|
|
793
|
+
assignCreatableModuleRegistry,
|
|
794
|
+
creatableModule,
|
|
795
|
+
creatableModuleFactory,
|
|
796
|
+
duplicateModules,
|
|
797
|
+
hasAllLabels,
|
|
798
|
+
hasLabels,
|
|
799
|
+
includesReservedModuleIdentifierCharacter,
|
|
800
|
+
isAddressModuleFilter,
|
|
801
|
+
isAddressObjectFilter,
|
|
802
|
+
isAttachableModuleInstance,
|
|
803
|
+
isModule,
|
|
804
|
+
isModuleIdentifierPart,
|
|
805
|
+
isModuleInstance,
|
|
806
|
+
isModuleName,
|
|
807
|
+
isModuleObject,
|
|
808
|
+
isModuleResolver,
|
|
809
|
+
isModuleState,
|
|
810
|
+
isModuleStateWithMeta,
|
|
811
|
+
isNameModuleFilter,
|
|
812
|
+
isNameObjectFilter,
|
|
813
|
+
isObjectResolver,
|
|
814
|
+
isQueryModuleFilter,
|
|
815
|
+
isQueryObjectFilter,
|
|
816
|
+
labeledCreatableModuleFactory,
|
|
817
|
+
registerCreatableModuleFactories,
|
|
818
|
+
registerCreatableModuleFactory,
|
|
819
|
+
requiredAttachableModuleInstanceFunctions,
|
|
820
|
+
requiredModuleInstanceFunctions,
|
|
821
|
+
requiredModuleQueries,
|
|
822
|
+
requiredModuleShape,
|
|
823
|
+
resolveAddressToInstance,
|
|
824
|
+
resolveAddressToInstanceAll,
|
|
825
|
+
resolveAddressToInstanceDown,
|
|
826
|
+
resolveAddressToInstanceSiblings,
|
|
827
|
+
resolveAddressToInstanceUp,
|
|
828
|
+
resolveLocalNameToAddress,
|
|
829
|
+
resolveLocalNameToAddressAll,
|
|
830
|
+
resolveLocalNameToAddressDown,
|
|
831
|
+
resolveLocalNameToAddressUp,
|
|
832
|
+
resolveLocalNameToInstance,
|
|
833
|
+
resolveLocalNameToInstanceAll,
|
|
834
|
+
resolveLocalNameToInstanceDown,
|
|
835
|
+
resolveLocalNameToInstanceUp,
|
|
836
|
+
resolvePathToAddress,
|
|
837
|
+
resolvePathToInstance,
|
|
838
|
+
serializable,
|
|
839
|
+
serializableField,
|
|
840
|
+
transformModuleIdentifier,
|
|
841
|
+
withModule,
|
|
842
|
+
withModuleInstance
|
|
843
|
+
};
|
|
2
844
|
//# sourceMappingURL=index.js.map
|