aquinas 0.0.2 → 0.0.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/index.cjs +1 -1
- package/dist/index.d.cts +39 -48
- 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=e=>e instanceof Error?e.message:"string"==typeof e?e:JSON.stringify(e),n=class extends Error{constructor(e){super(e),this.name="AquinasError"}},r=class{constructor(e){this.name=e,this.id=Symbol.for(e),this.toJSON=()=>e}id;__type;toJSON};function i(e){return e instanceof r}var o=class{reference;implementation;constructor(e,t){this.reference=e,this.implementation=t}},c=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??a()});return new o(this.reference,n=>{const r=n.get(this.refs);return e(t(n,r))})}};function s(e){return e instanceof o}var f=class{referenceRegistry;bindingRegistry;container;constructor(){this.container=new e.Container,this.referenceRegistry=new Set,this.bindingRegistry=new Map}bindReference(e,r,i){this.referenceRegistry.add(e),this.bindingRegistry.set(e,r);try{i?.rebind?this.container.rebind(e.id).toFactory(()=>r(this)).inSingletonScope():this.container.bind(e.id).toFactory(()=>r(this)).inSingletonScope()}catch(r){throw new n(`failed to bind reference with name "${e.name}" - ${t(r)}`)}}merge(...e){for(const t of e){if(!d(t))throw new n("Invalid dock: expected a Dock object but got "+typeof t);for(const e of t.referenceRegistry){const r=t.bindingRegistry.get(e);if(!r)throw new n("Missing implementation during merge");this.bindReference(e,r)}}}register(...e){for(const t of e){if(!s(t))throw new n("Invalid injectable: expected an Injectable object but got "+typeof t);this.bindReference(t.reference,t.implementation)}}override(e,t){if(!s(t)&&"function"!=typeof t)throw new n("Invalid override: expected an Injectable or implementation function but got "+typeof t);s(t)?this.override(e,t.implementation):this.bindReference(e,t,{rebind:!0})}delete(e){if(!i(e))throw new n("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("id"in e){if(!i(e))throw new n("Invalid reference: Expected a Reference object but got "+typeof e);try{return this.container.get(e.id)}catch(r){throw new n(`Failed to get reference with name "${String(e.name)}": ${t(r)}`)}}const r={};for(const t in e){const o=e[t];if(!i(o))throw new n(`Invalid reference for key "${t}": Expected a Reference object but got ${typeof o}`);r[t]=this.container.get(o.id)}return r}safeGet(e){if(!i(e))throw new n("Invalid reference: Expected a Reference object but got "+typeof e);try{return this.container.get(e.id)}catch{return}}};function a(){return new f}function d(e){return e instanceof f}exports.cloneDock=function(e){const t=new f;return t.merge(e),t},exports.derivedReference=function(e,t){return new r(`${e}:${t.toJSON()}`)},exports.dock=a,exports.injectable=function(e){return new c(e)},exports.reference=function(e){return new r(e)};
|
package/dist/index.d.cts
CHANGED
|
@@ -1,59 +1,50 @@
|
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
overwrite(...bindables: Bindable<any>[]): void;
|
|
23
|
-
getContainer(): Container;
|
|
24
|
-
get<U>(reference: Reference<U>): U;
|
|
25
|
-
get<T extends Record<string, Reference<any>>>(reference: T): {
|
|
26
|
-
[K in keyof T]: T[K] extends Reference<infer V> ? V : never;
|
|
27
|
-
};
|
|
28
|
-
safeGet<U>(reference: Reference<U>): U | undefined;
|
|
29
|
-
}
|
|
30
|
-
declare function dock(): Dock;
|
|
31
|
-
|
|
32
|
-
type BaseObject = {};
|
|
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>;
|
|
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>);
|
|
47
20
|
}
|
|
48
|
-
|
|
49
|
-
reference
|
|
50
|
-
|
|
51
|
-
|
|
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>;
|
|
52
31
|
}
|
|
53
|
-
declare function injectable<
|
|
32
|
+
declare function injectable<T>(reference: Reference<T>): InjectableBuilder<T>;
|
|
54
33
|
|
|
55
|
-
declare
|
|
56
|
-
|
|
57
|
-
|
|
34
|
+
declare class Dock {
|
|
35
|
+
private referenceRegistry;
|
|
36
|
+
private bindingRegistry;
|
|
37
|
+
private container;
|
|
38
|
+
constructor();
|
|
39
|
+
private bindReference;
|
|
40
|
+
merge(...sources: Dock[]): void;
|
|
41
|
+
register(...bindables: Injectable[]): void;
|
|
42
|
+
override(reference: Reference<any>, injectableOrImplementation: Injectable | ((dock: Dock) => any)): void;
|
|
43
|
+
delete<T>(reference: Reference<T>): void;
|
|
44
|
+
get<T>(reference: Reference<T> | Record<string, Reference<any>>): any;
|
|
45
|
+
safeGet<T>(reference: Reference<T>): T | undefined;
|
|
46
|
+
}
|
|
47
|
+
declare function dock(): Dock;
|
|
48
|
+
declare function cloneDock(source: Dock): Dock;
|
|
58
49
|
|
|
59
|
-
export {
|
|
50
|
+
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.4",
|
|
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 -------------": "-------------",
|