aquinas 0.0.3 → 0.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.cjs +1 -1
- package/dist/index.d.cts +42 -44
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("
|
|
1
|
+
"use strict";var e=require("@owja/ioc"),t=class extends Error{constructor(e,t){const n=t?"string"==typeof t?t:t.message:"no additional info";super(n?`${e} - ${n}`:e),this.name="AquinasError"}},n=class{constructor(e){this.name=e,this.id=Symbol.for(e),this.toJSON=()=>e}id;__type;toJSON};function r(e){return e instanceof n}var i=class{reference;implementation;constructor(e,t){this.reference=e,this.implementation=t}},o=class e{constructor(e,t={},n){this.reference=e,this.refs=t,this.stateFactory=n}deps(t){return new e(this.reference,{...this.refs,...t},this.stateFactory)}init(t){return new e(this.reference,this.refs,t)}implements(e){const t=(e,t={})=>({...t,...this.stateFactory?this.stateFactory(t):{},ctx:e??f()});return new i(this.reference,n=>{const r=n.get(this.refs);return e(t(n,r))})}};function c(e){return e instanceof i}var s=class{referenceRegistry;bindingRegistry;container;constructor(){this.container=new e.Container,this.referenceRegistry=new Set,this.bindingRegistry=new Map}bindReference(e,n,r){this.referenceRegistry.add(e),this.bindingRegistry.set(e,n);try{r?.rebind?this.container.rebind(e.id).toFactory(()=>n(this)).inSingletonScope():this.container.bind(e.id).toFactory(()=>n(this)).inSingletonScope()}catch(n){throw new t(`failed to bind reference with name "${e.name}"`,n)}}merge(...e){for(const n of e){if(!a(n))throw new t("Invalid dock","expected a Dock object but got "+typeof n);for(const e of n.referenceRegistry){const r=n.bindingRegistry.get(e);if(!r)throw new t("Missing implementation during merge");this.bindReference(e,r)}}}add(...e){for(const n of e){if(!c(n))throw new t("Invalid injectable","expected an Injectable object but got "+typeof n);this.bindReference(n.reference,n.implementation)}}update(e,n){if(!c(n)&&"function"!=typeof n)throw new t("Invalid update","expected an Injectable or implementation function but got "+typeof n);c(n)?this.update(e,n.implementation):this.bindReference(e,n,{rebind:!0})}delete(e){if(!r(e))throw new t("Invalid reference","expected a Reference object but got "+typeof e);this.referenceRegistry.delete(e),this.bindingRegistry.delete(e),this.container.remove(e.id)}get(...e){if(e.length>1){const n=[];for(const i of e){if(!r(i))throw new t("Invalid reference","expected a Reference object but got "+typeof i);try{n.push(this.container.get(i.id))}catch(e){throw new t(`Failed to get reference with name "${i.name}"`,e)}}return n}const n=e[0];if("id"in n){if(!r(n))throw new t("Invalid reference","expected a Reference object but got "+typeof n);try{return this.container.get(n.id)}catch(e){throw new t(`Failed to get reference with name "${n.name}"`,e)}}const i={};for(const e in n){const o=n[e];if(!r(o))throw new t(`Invalid reference for key "${e}"`,"expected a Reference object but got "+typeof o);i[e]=this.container.get(o.id)}return i}safeGet(e){if(!r(e))throw new t("Invalid reference","expected a Reference object but got "+typeof e);try{return this.container.get(e.id)}catch{return}}find(e){const t=[];for(const n of this.referenceRegistry)try{if(e(n)){const e=this.container.get(n.id);t.push(e)}}catch{}return t}};function f(){return new s}function a(e){return e instanceof s}exports.cloneDock=function(e){const t=new s;return t.merge(e),t},exports.derivedReference=function(e,t){return new n(`${e}:${t.toJSON()}`)},exports.dock=f,exports.injectable=function(e){return new o(e)},exports.reference=function(e){return new n(e)};
|
package/dist/index.d.cts
CHANGED
|
@@ -1,59 +1,57 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
interface Reference<T> {
|
|
1
|
+
declare class Reference<T> {
|
|
2
|
+
readonly name: string;
|
|
4
3
|
id: symbol;
|
|
5
|
-
name: string;
|
|
6
|
-
__INJECTION_REFERENCE_FLAG: boolean;
|
|
7
4
|
__type: T;
|
|
8
5
|
toJSON: () => string;
|
|
6
|
+
constructor(name: string);
|
|
9
7
|
}
|
|
10
|
-
declare const reference: <T>(name: string) => Reference<T>;
|
|
11
8
|
declare function derivedReference<T>(base: string, ref: Reference<any>): Reference<T>;
|
|
9
|
+
declare function reference<T>(name: string): Reference<T>;
|
|
12
10
|
|
|
13
|
-
type
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
type RefMap = Record<string, Reference<any>>;
|
|
12
|
+
type ResolveRefs<T extends RefMap> = {
|
|
13
|
+
[K in keyof T]: T[K] extends Reference<infer U> ? U : never;
|
|
16
14
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
type InjectableImplementation<T> = (dock: Dock) => T;
|
|
16
|
+
declare class Injectable<T = any> {
|
|
17
|
+
reference: Reference<T>;
|
|
18
|
+
implementation: InjectableImplementation<T>;
|
|
19
|
+
constructor(reference: Reference<T>, implementation: InjectableImplementation<T>);
|
|
20
|
+
}
|
|
21
|
+
declare class InjectableBuilder<T, Refs = {}, State = {}> {
|
|
22
|
+
private reference;
|
|
23
|
+
private refs;
|
|
24
|
+
private stateFactory?;
|
|
25
|
+
constructor(reference: Reference<T>, refs?: RefMap, stateFactory?: ((deps: any) => any) | undefined);
|
|
26
|
+
deps<NewRefs extends RefMap>(newRefs: NewRefs): InjectableBuilder<T, Refs & ResolveRefs<NewRefs>, State>;
|
|
27
|
+
init<NewState>(factory: (refs: Refs) => NewState): InjectableBuilder<T, Refs, NewState>;
|
|
28
|
+
implements(factory: (context: Refs & State & {
|
|
29
|
+
ctx: Dock;
|
|
30
|
+
}) => T): Injectable<T>;
|
|
31
|
+
}
|
|
32
|
+
declare function injectable<T>(reference: Reference<T>): InjectableBuilder<T>;
|
|
33
|
+
|
|
34
|
+
declare class Dock {
|
|
35
|
+
private referenceRegistry;
|
|
36
|
+
private bindingRegistry;
|
|
37
|
+
private container;
|
|
38
|
+
constructor();
|
|
39
|
+
private bindReference;
|
|
20
40
|
merge(...sources: Dock[]): void;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
41
|
+
add(...bindables: Injectable[]): void;
|
|
42
|
+
update(reference: Reference<any>, injectableOrImplementation: Injectable | InjectableImplementation<any>): void;
|
|
43
|
+
delete<T>(reference: Reference<T>): void;
|
|
24
44
|
get<U>(reference: Reference<U>): U;
|
|
25
45
|
get<T extends Record<string, Reference<any>>>(reference: T): {
|
|
26
46
|
[K in keyof T]: T[K] extends Reference<infer V> ? V : never;
|
|
27
47
|
};
|
|
28
|
-
|
|
48
|
+
get<T extends readonly Reference<any>[]>(...references: T): {
|
|
49
|
+
[K in keyof T]: T[K] extends Reference<infer V> ? V : never;
|
|
50
|
+
};
|
|
51
|
+
safeGet<T>(reference: Reference<T>): T | undefined;
|
|
52
|
+
find<T>(predicate: (reference: Reference<T>) => boolean): T[];
|
|
29
53
|
}
|
|
30
54
|
declare function dock(): Dock;
|
|
55
|
+
declare function cloneDock(source: Dock): Dock;
|
|
31
56
|
|
|
32
|
-
|
|
33
|
-
type InjectableObjectFactory<Refs extends BaseObject, Type, State extends BaseObject> = (context: Refs & State) => Type;
|
|
34
|
-
interface ContextHelper {
|
|
35
|
-
get<T>(ref: Reference<T>): T;
|
|
36
|
-
safeGet<T>(ref: Reference<T>): T | undefined;
|
|
37
|
-
dock: Dock;
|
|
38
|
-
}
|
|
39
|
-
interface InjectableBuilder<ResolvedRefs extends BaseObject, Type, State extends BaseObject> {
|
|
40
|
-
deps<NewDepsConfig extends Record<string, Reference<any>>, NewlyResolvedRefs extends {
|
|
41
|
-
[K in keyof NewDepsConfig]: NewDepsConfig[K] extends Reference<infer R> ? R : never;
|
|
42
|
-
}>(references: NewDepsConfig): InjectableBuilder<ResolvedRefs & NewlyResolvedRefs, Type, State>;
|
|
43
|
-
init<NewState extends BaseObject>(initFactory: (refs: ResolvedRefs) => NewState): InjectableBuilder<ResolvedRefs, Type, NewState>;
|
|
44
|
-
implements(factory: InjectableObjectFactory<ResolvedRefs & {
|
|
45
|
-
ctx: ContextHelper;
|
|
46
|
-
}, Type, State>): Injectable<ResolvedRefs, Type>;
|
|
47
|
-
}
|
|
48
|
-
interface Injectable<ResolvedRefs extends BaseObject, Type> {
|
|
49
|
-
reference: Reference<Type>;
|
|
50
|
-
factory: (dock: Dock) => Type;
|
|
51
|
-
instantiate: (deps?: ResolvedRefs) => Type;
|
|
52
|
-
}
|
|
53
|
-
declare function injectable<Type>(reference: Reference<Type>): InjectableBuilder<BaseObject, Type, BaseObject>;
|
|
54
|
-
|
|
55
|
-
declare function resolveReferences<Refs extends Record<string, Reference<unknown>>>(references: Refs, dock: Dock): {
|
|
56
|
-
[K in keyof Refs]: Refs[K] extends Reference<infer T> ? T : never;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export { type Dock, type Injectable, type Reference, derivedReference, dock, injectable, reference, resolveReferences };
|
|
57
|
+
export { Dock, Injectable, Reference, cloneDock, derivedReference, dock, injectable, reference };
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.0.
|
|
8
|
+
"version": "0.0.5",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
+
"vitest": "3.2.4",
|
|
41
42
|
"@types/node": "24.6.0",
|
|
42
43
|
"esbuild": "0.25.10",
|
|
43
44
|
"terser": "5.44.0",
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
"@biomejs/biome": "2.2.4"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
49
|
-
"
|
|
50
|
+
"@owja/ioc": "1.0.1"
|
|
50
51
|
},
|
|
51
52
|
"scripts": {
|
|
52
53
|
"------------- toolchain -------------": "-------------",
|