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 CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("inversify");function r(){const r=new e.Container,n=new Set,t=new Map;function o(e){const t=r.bind(e.id);return"symbol"==typeof e.id&&n.add(e),t}function i(e){if("id"in e)return r.get(e.id);const n={};for(const t in e)n[t]=r.get(e[t].id);return n}const c={referenceRegistry:n,bindingRegistry:t,merge(...o){const i=o.map(r=>new e.ContainerModule(({bind:e})=>{for(const o of r.referenceRegistry){const i=r.bindingRegistry.get(o);if(!i)throw new Error("Missing factory during merge");n.add(o),t.set(o,i),e(o.id).toDynamicValue(()=>i(c)).inSingletonScope()}}));r.loadSync(...i)},register(...e){for(const r of e)n.add(r.reference),t.set(r.reference,r.factory),o(r.reference).toDynamicValue(()=>r.factory(c)).inSingletonScope()},overwrite(...e){for(const i of e)r.isBound(i.reference.id)&&r.unbind(i.reference.id),n.add(i.reference),t.set(i.reference,i.factory),o(i.reference).toDynamicValue(()=>i.factory(c)).inSingletonScope()},getContainer:()=>r,get:i,safeGet(e){try{return i(e)}catch{return}}};return c}function n(e,r){if(!e||"object"!=typeof e)throw new Error("Invalid references object provided");const n={};for(const[t,o]of Object.entries(e)){if(!o||"object"!=typeof o)throw new Error(`Invalid dependency reference for key: ${t}`);if(!("__INJECTION_REFERENCE_FLAG"in o)||!o.__INJECTION_REFERENCE_FLAG)throw new Error(`Invalid dependency reference flag for key: ${t}`);try{n[t]=r.get(o)}catch(e){throw new Error(`Failed to resolve dependency for key: ${t}. ${e instanceof Error?e.message:String(e)}`)}}return n}function t(e){return e?{get:r=>e.get(r),safeGet:r=>{try{return e.get(r)}catch{return}},dock:e}:{get:()=>{throw new Error("Dock not available in this context")},safeGet:()=>{throw new Error("Dock not available in this context")},dock:r()}}var o=e=>({id:Symbol.for(e),name:e,__INJECTION_REFERENCE_FLAG:!0,__type:null,toJSON:()=>e});exports.derivedReference=function(e,r){return o(`${e}:${r.toJSON()}`)},exports.dock=r,exports.injectable=function(e){const r={};let o;return function i(){return{deps:e=>(Object.assign(r,e),i()),init:e=>(o=e,i()),implements:i=>({reference:e,factory:e=>{const c=n(r,e),f={...c,...o?o(c):{},ctx:t(e)};return i(f)},instantiate:(e={})=>{const r={...e,...o?o(e):{},ctx:t()};return i(r)}})}}()},exports.reference=o,exports.resolveReferences=n;
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
- import { Container } from 'inversify';
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 Bindable<T> = {
14
- reference: Reference<T>;
15
- factory: (dock: Dock) => T;
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
- interface Dock {
18
- referenceRegistry: Set<Reference<any>>;
19
- bindingRegistry: Map<Reference<any>, (dock: Dock) => any>;
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
- register(...bindables: Bindable<any>[]): void;
22
- overwrite(...bindables: Bindable<any>[]): void;
23
- getContainer(): Container;
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
- safeGet<U>(reference: Reference<U>): U | undefined;
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
- 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>;
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.3",
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
- "inversify": "7.10.2"
50
+ "@owja/ioc": "1.0.1"
50
51
  },
51
52
  "scripts": {
52
53
  "------------- toolchain -------------": "-------------",