aquinas 0.0.1 → 0.0.2
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 -0
- package/dist/index.d.cts +59 -0
- package/package.json +65 -2
package/dist/index.cjs
ADDED
|
@@ -0,0 +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;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Container } from 'inversify';
|
|
2
|
+
|
|
3
|
+
interface Reference<T> {
|
|
4
|
+
id: symbol;
|
|
5
|
+
name: string;
|
|
6
|
+
__INJECTION_REFERENCE_FLAG: boolean;
|
|
7
|
+
__type: T;
|
|
8
|
+
toJSON: () => string;
|
|
9
|
+
}
|
|
10
|
+
declare const reference: <T>(name: string) => Reference<T>;
|
|
11
|
+
declare function derivedReference<T>(base: string, ref: Reference<any>): Reference<T>;
|
|
12
|
+
|
|
13
|
+
type Bindable<T> = {
|
|
14
|
+
reference: Reference<T>;
|
|
15
|
+
factory: (dock: Dock) => T;
|
|
16
|
+
};
|
|
17
|
+
interface Dock {
|
|
18
|
+
referenceRegistry: Set<Reference<any>>;
|
|
19
|
+
bindingRegistry: Map<Reference<any>, (dock: Dock) => any>;
|
|
20
|
+
merge(...sources: Dock[]): void;
|
|
21
|
+
register(...bindables: Bindable<any>[]): void;
|
|
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>;
|
|
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 };
|
package/package.json
CHANGED
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aquinas",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"description": "dependency inversion w/o classes",
|
|
4
|
+
"author": "Fernando Coelho",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"version": "0.0.2",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/fgcoelho/aquinas.git"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://aquinas.vercel.app",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"IOC",
|
|
20
|
+
"dependency-injection",
|
|
21
|
+
"dependency-inversion",
|
|
22
|
+
"di",
|
|
23
|
+
"design-patterns",
|
|
24
|
+
"clean-architecture",
|
|
25
|
+
"solid"
|
|
26
|
+
],
|
|
27
|
+
"type": "module",
|
|
28
|
+
"main": "./dist/index.cjs",
|
|
29
|
+
"types": "./dist/index.d.cts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": "./dist/index.cjs"
|
|
32
|
+
},
|
|
33
|
+
"typesVersions": {
|
|
34
|
+
"*": {
|
|
35
|
+
".": [
|
|
36
|
+
"./dist/index.d.cts"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "24.6.0",
|
|
42
|
+
"esbuild": "0.25.10",
|
|
43
|
+
"terser": "5.44.0",
|
|
44
|
+
"tsup": "8.5.0",
|
|
45
|
+
"typescript": "5.9.3",
|
|
46
|
+
"@biomejs/biome": "2.2.4"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"inversify": "7.10.2"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"------------- toolchain -------------": "-------------",
|
|
53
|
+
"format": "biome format --write",
|
|
54
|
+
"lint": "biome lint --error-on-warnings",
|
|
55
|
+
"checktypes": "tsc --noEmit",
|
|
56
|
+
"check": "pnpm checktypes && pnpm lint",
|
|
57
|
+
"test": "vitest",
|
|
58
|
+
"------------- dev -------------": "-------------",
|
|
59
|
+
"dev": "pnpm tsup --env.mode dev",
|
|
60
|
+
"------------- build -------------": "-------------",
|
|
61
|
+
"build": "rm -rf dist && pnpm tsup --env.mode release",
|
|
62
|
+
"bundlesize": "pnpm build --metafile && npm pack --dry-run",
|
|
63
|
+
"bundlesize:dev": "pnpm tsup --metafile && npm pack --dry-run",
|
|
64
|
+
"------------- publishing -------------": "-------------",
|
|
65
|
+
"release": "pnpm check && pnpm build && pnpm publish --no-git-checks",
|
|
66
|
+
"release:rc": "pnpm check && pnpm build && pnpm version prerelease --preid=rc"
|
|
67
|
+
}
|
|
5
68
|
}
|