@no22/dison 1.1.0 → 1.3.0
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/README.md +79 -4
- package/dist/ast.d.ts +3 -1
- package/dist/ast.d.ts.map +1 -1
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +69 -24
- package/dist/codegen.js.map +1 -1
- package/dist/core.d.ts +4 -3
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +12 -7
- package/dist/core.js.map +1 -1
- package/dist/generated-runtime.d.ts +22 -6
- package/dist/generated-runtime.d.ts.map +1 -1
- package/dist/generated-runtime.js +144 -28
- package/dist/generated-runtime.js.map +1 -1
- package/dist/parser.d.ts +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +74 -22
- package/dist/parser.js.map +1 -1
- package/dist/runtime.d.ts +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +180 -64
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/runtime.js
CHANGED
|
@@ -1,91 +1,207 @@
|
|
|
1
1
|
// =====================================================================
|
|
2
2
|
// 共有ランタイムの前置き生成
|
|
3
3
|
// =====================================================================
|
|
4
|
-
// ランタイムの宣言部分(DI_REGISTRY/TYPE_BINDINGS/bindType/resolveType/
|
|
5
|
-
// registerOverride/getOverride)を生成する。exportKeyword に "export " を渡すと
|
|
6
|
-
// 各宣言がexportされる(複数ファイルで共有するランタイムモジュールとして使う
|
|
7
|
-
// 場合)。単一ファイルでインライン生成する場合は ""(空文字)を渡す。
|
|
8
4
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// タイプミスがないか)をtsc自身が「名前が見つからない」エラーとして
|
|
13
|
-
// 検出できるようになる(従来は文字列一致だったため、タイプミスしても
|
|
14
|
-
// 一切検出されずDI_REGISTRY["Typo"]という誰も参照しないエントリを
|
|
15
|
-
// 静かに作るだけだった)。
|
|
16
|
-
// - 複数ファイルにまたがって同名クラスが存在しても、参照そのものが
|
|
17
|
-
// キーになるため衝突しない(docs/multi-file-support.md参照)。
|
|
5
|
+
// ランタイムの宣言部分を生成する。exportKeyword に "export " を渡すと各宣言が
|
|
6
|
+
// exportされる(複数ファイルで共有するランタイムモジュールとして使う場合)。
|
|
7
|
+
// 単一ファイルでインライン生成する場合は ""(空文字)を渡す。
|
|
18
8
|
//
|
|
19
|
-
// TYPE_BINDINGS(bind
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// docs/
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
9
|
+
// DI_REGISTRY(override用)/TYPE_BINDINGS(bind用)はグローバルな束縛レジストリ。
|
|
10
|
+
// クラスは実体(Function)、interface/型エイリアスは companion Symbol または文字列、
|
|
11
|
+
// as トークンはそのSymbolをキーにする(docs/type-identity-matching.md、
|
|
12
|
+
// docs/bind-interface-token.md)。
|
|
13
|
+
//
|
|
14
|
+
// スコープ対応(docs/scoped-configuration.md フェーズ1): 非トップレベルの
|
|
15
|
+
// configuration はローカルスコープ(レキシカルなブロック)に閉じる。AsyncLocalStorage
|
|
16
|
+
// で現在のスコープフレーム(束縛の差分+親フレーム)を持ち、getOverride/resolveType は
|
|
17
|
+
// 「現在のフレーム鎖(内→外)→ グローバル」の順に解決する。injectable は構築時に
|
|
18
|
+
// 現在のフレームを捕捉し、解決時にそのフレームへ再突入する(遅延構築される依存グラフ
|
|
19
|
+
// 全体が root の構築スコープに一貫して従う)。ローカルスコープは `using` 宣言で入り、
|
|
20
|
+
// 囲みブロックの終端で自動的に元に戻る(Symbol.dispose)。
|
|
21
|
+
// スコープ対応に必要な import(AsyncLocalStorage)。生成物のファイル先頭に置く必要が
|
|
22
|
+
// あるため、宣言本体(generateRuntimeDeclarations)とは分けて提供する。単一ファイル
|
|
23
|
+
// モードでは core.ts が、複数ファイルモードでは共有ランタイムモジュールが先頭に付ける。
|
|
24
|
+
export const DISON_RUNTIME_IMPORTS = `import { AsyncLocalStorage } from "node:async_hooks";\n`;
|
|
28
25
|
export function generateRuntimeDeclarations(exportKeyword) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
`
|
|
35
|
-
`
|
|
36
|
-
`
|
|
37
|
-
`
|
|
26
|
+
const E = exportKeyword;
|
|
27
|
+
return (`// --- scope infrastructure (docs/scoped-configuration.md) ---\n` +
|
|
28
|
+
`type __DisonFactory = () => any;\n` +
|
|
29
|
+
`type __DisonKey = string | symbol | Function;\n` +
|
|
30
|
+
`interface __DisonFrame {\n` +
|
|
31
|
+
` binds: Map<__DisonKey, __DisonFactory>;\n` +
|
|
32
|
+
` overrides: WeakMap<Function, Record<string, __DisonFactory>>;\n` +
|
|
33
|
+
` parent: __DisonFrame | undefined;\n` +
|
|
34
|
+
`}\n` +
|
|
35
|
+
`${E}const __dison_als = new AsyncLocalStorage<__DisonFrame | undefined>();\n` +
|
|
36
|
+
`// Current scope frame (undefined = global only). Captured by injectable at construction.\n` +
|
|
37
|
+
`${E}function __disonCurrentScope(): __DisonFrame | undefined { return __dison_als.getStore(); }\n\n` +
|
|
38
|
+
`// Class scopes (an anonymous configuration directly inside a class body).\n` +
|
|
39
|
+
`// Unlike local scopes (als), a class scope is a static context that is only active\n` +
|
|
40
|
+
`// while resolving an instance of that class, so it is kept in a synchronous module\n` +
|
|
41
|
+
`// variable (not in als, so a dependency doesn't wrongly capture its parent's class\n` +
|
|
42
|
+
`// scope). __disonResolveInjectable sets it for the duration of a resolution and\n` +
|
|
43
|
+
`// restores it afterwards (correct nesting because resolution is synchronous). It stays\n` +
|
|
44
|
+
`// set throughout a resolution, so bind chains inside a class scope are followed too.\n` +
|
|
45
|
+
`let __dison_classScopeCtx: __DisonFrame[] | undefined;\n` +
|
|
46
|
+
`// A class-body configuration is placed as a static __dison_classScope_N field. Walk\n` +
|
|
47
|
+
`// this.constructor's prototype chain (child -> parent) and collect the fields each class\n` +
|
|
48
|
+
`// owns (inheritance: a subclass inherits its parent's class scope and can override just\n` +
|
|
49
|
+
`// the delta).\n` +
|
|
50
|
+
`function __disonClassScopes(cls: Function): __DisonFrame[] {\n` +
|
|
51
|
+
` const out: __DisonFrame[] = [];\n` +
|
|
52
|
+
` for (let c: any = cls; c && c !== Function.prototype && c !== Object; c = Object.getPrototypeOf(c)) {\n` +
|
|
53
|
+
` for (const key of Object.getOwnPropertyNames(c)) {\n` +
|
|
54
|
+
` if (key.indexOf('__dison_classScope') === 0) out.push(c[key]);\n` +
|
|
55
|
+
` }\n` +
|
|
38
56
|
` }\n` +
|
|
57
|
+
` return out;\n` +
|
|
58
|
+
`}\n` +
|
|
59
|
+
`// Build a frame without entering it (used to initialize a class body static field).\n` +
|
|
60
|
+
`${E}function __disonBuildFrame(\n` +
|
|
61
|
+
` setup: (bind: (key: __DisonKey, factory: __DisonFactory) => void, override: (cls: Function, prop: string, factory: __DisonFactory) => void) => void\n` +
|
|
62
|
+
`): __DisonFrame {\n` +
|
|
63
|
+
` const frame: __DisonFrame = { binds: new Map(), overrides: new WeakMap(), parent: undefined };\n` +
|
|
64
|
+
` setup(\n` +
|
|
65
|
+
` (key, factory) => { frame.binds.set(key, factory); },\n` +
|
|
66
|
+
` (cls, prop, factory) => {\n` +
|
|
67
|
+
` let e = frame.overrides.get(cls);\n` +
|
|
68
|
+
` if (!e) { e = {}; frame.overrides.set(cls, e); }\n` +
|
|
69
|
+
` e[prop] = factory;\n` +
|
|
70
|
+
` }\n` +
|
|
71
|
+
` );\n` +
|
|
72
|
+
` return frame;\n` +
|
|
73
|
+
`}\n\n` +
|
|
74
|
+
`// --- global registries ---\n` +
|
|
75
|
+
`// Global dependency registry (per-property override). Keyed by the class itself\n` +
|
|
76
|
+
`// so tsc catches a typo in the override target class name.\n` +
|
|
77
|
+
`${E}const DI_REGISTRY = new WeakMap<Function, Record<string, __DisonFactory>>();\n\n` +
|
|
78
|
+
`${E}function registerOverride(cls: Function, prop: string, factory: __DisonFactory): void {\n` +
|
|
79
|
+
` let entry = DI_REGISTRY.get(cls);\n` +
|
|
80
|
+
` if (!entry) { entry = {}; DI_REGISTRY.set(cls, entry); }\n` +
|
|
39
81
|
` entry[prop] = factory;\n` +
|
|
40
82
|
`}\n\n` +
|
|
41
|
-
|
|
42
|
-
|
|
83
|
+
`// Override target matching walks the prototype chain of the receiver's class\n` +
|
|
84
|
+
`// (child -> parent, child-wins): an override targeting a base class applies to\n` +
|
|
85
|
+
`// subclass instances too, consistent with how injectable properties and class-scope\n` +
|
|
86
|
+
`// configurations are inherited (docs/override-inheritance.md). Same stop condition\n` +
|
|
87
|
+
`// as __disonClassScopes.\n` +
|
|
88
|
+
`function __disonClassChain(cls: Function): Function[] {\n` +
|
|
89
|
+
` const out: Function[] = [];\n` +
|
|
90
|
+
` for (let c: any = cls; c && c !== Function.prototype && c !== Object; c = Object.getPrototypeOf(c)) out.push(c);\n` +
|
|
91
|
+
` return out;\n` +
|
|
92
|
+
`}\n` +
|
|
93
|
+
`// Match one override table against the class chain (child-wins).\n` +
|
|
94
|
+
`function __disonChainLookup(\n` +
|
|
95
|
+
` map: { get(k: Function): Record<string, __DisonFactory> | undefined },\n` +
|
|
96
|
+
` chain: Function[], prop: string\n` +
|
|
97
|
+
`): __DisonFactory | undefined {\n` +
|
|
98
|
+
` for (const c of chain) {\n` +
|
|
99
|
+
` const o = map.get(c);\n` +
|
|
100
|
+
` if (o && Object.prototype.hasOwnProperty.call(o, prop)) return o[prop];\n` +
|
|
101
|
+
` }\n` +
|
|
102
|
+
` return undefined;\n` +
|
|
103
|
+
`}\n` +
|
|
104
|
+
`// Look up an override in order: local frame chain (inner->outer) -> class scopes\n` +
|
|
105
|
+
`// (child->parent) -> global (priority: local > class > global). Scope-major: each\n` +
|
|
106
|
+
`// layer checks the whole class chain, so a nearer scope targeting a base class\n` +
|
|
107
|
+
`// beats a farther scope targeting the subclass.\n` +
|
|
108
|
+
`${E}function getOverride(cls: Function, prop: string): __DisonFactory | undefined {\n` +
|
|
109
|
+
` const chain = __disonClassChain(cls);\n` +
|
|
110
|
+
` for (let f = __dison_als.getStore(); f; f = f.parent) {\n` +
|
|
111
|
+
` const hit = __disonChainLookup(f.overrides, chain, prop);\n` +
|
|
112
|
+
` if (hit) return hit;\n` +
|
|
113
|
+
` }\n` +
|
|
114
|
+
` if (__dison_classScopeCtx) for (const f of __dison_classScopeCtx) {\n` +
|
|
115
|
+
` const hit = __disonChainLookup(f.overrides, chain, prop);\n` +
|
|
116
|
+
` if (hit) return hit;\n` +
|
|
117
|
+
` }\n` +
|
|
118
|
+
` return __disonChainLookup(DI_REGISTRY, chain, prop);\n` +
|
|
43
119
|
`}\n\n` +
|
|
44
|
-
`// Global type-replacement registry (bind)
|
|
45
|
-
`//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`//
|
|
49
|
-
`//
|
|
50
|
-
|
|
51
|
-
`// - A type-name string. Used for interfaces/type aliases (no runtime value)\n` +
|
|
52
|
-
`// and generics with concrete type arguments (Repository<User>).\n` +
|
|
53
|
-
`// - A Symbol explicitly given via an "as <token>" clause (to avoid collisions\n` +
|
|
54
|
-
`// between same-named interfaces/type aliases across files. docs/bind-interface-token.md).\n` +
|
|
55
|
-
`${exportKeyword}const TYPE_BINDINGS = new Map<string | symbol | Function, () => any>();\n` +
|
|
56
|
-
`const _resolvingTypeBindings = new Set<string | symbol | Function>();\n\n` +
|
|
57
|
-
`// bindType<T> takes T as an explicit type argument, so tsc raises a\n` +
|
|
58
|
-
`// compile error if the replacement factory isn't compatible with the\n` +
|
|
59
|
-
`// original type. T may be an interface or type alias (used only as a\n` +
|
|
60
|
-
`// type argument).\n` +
|
|
61
|
-
`${exportKeyword}function bindType<T>(typeKey: string | symbol | Function, factory: () => T): void {\n` +
|
|
120
|
+
`// Global type-replacement registry (bind). Key: class value (concrete class),\n` +
|
|
121
|
+
`// companion/token Symbol, or type-name string. See docs/type-identity-matching.md.\n` +
|
|
122
|
+
`${E}const TYPE_BINDINGS = new Map<__DisonKey, __DisonFactory>();\n` +
|
|
123
|
+
`const _resolvingTypeBindings = new Set<__DisonKey>();\n\n` +
|
|
124
|
+
`// bindType<T> takes T as an explicit type argument, so tsc raises a compile error\n` +
|
|
125
|
+
`// if the replacement factory isn't compatible with the original type.\n` +
|
|
126
|
+
`${E}function bindType<T>(typeKey: __DisonKey, factory: () => T): void {\n` +
|
|
62
127
|
` TYPE_BINDINGS.set(typeKey, factory);\n` +
|
|
63
128
|
`}\n\n` +
|
|
64
|
-
`//
|
|
65
|
-
`//
|
|
66
|
-
`//
|
|
67
|
-
|
|
68
|
-
`
|
|
129
|
+
`// Look up a bind in order: local frame chain (inner->outer) -> class scopes (child->parent)\n` +
|
|
130
|
+
`// -> global. __dison_classScopeCtx stays set throughout a resolution, so a bind chain inside\n` +
|
|
131
|
+
`// a class scope (the recursion in resolveType) follows the class scope too.\n` +
|
|
132
|
+
`function __disonLookupBind(typeKey: __DisonKey): __DisonFactory | undefined {\n` +
|
|
133
|
+
` for (let f = __dison_als.getStore(); f; f = f.parent) {\n` +
|
|
134
|
+
` const b = f.binds.get(typeKey);\n` +
|
|
135
|
+
` if (b) return b;\n` +
|
|
136
|
+
` }\n` +
|
|
137
|
+
` if (__dison_classScopeCtx) for (const f of __dison_classScopeCtx) {\n` +
|
|
138
|
+
` const b = f.binds.get(typeKey);\n` +
|
|
139
|
+
` if (b) return b;\n` +
|
|
140
|
+
` }\n` +
|
|
141
|
+
` return TYPE_BINDINGS.get(typeKey);\n` +
|
|
142
|
+
`}\n\n` +
|
|
143
|
+
`// Scope-aware bind resolution. bind chains (bind A = B; bind B = C; resolves A to C).\n` +
|
|
144
|
+
`// Each hop of the chain also consults the current frame chain -> class -> global.\n` +
|
|
145
|
+
`// A cycle raises a clear error.\n` +
|
|
146
|
+
`${E}function resolveType<T>(typeKey: __DisonKey, defaultFactory: () => T): T {\n` +
|
|
147
|
+
` const bound = __disonLookupBind(typeKey);\n` +
|
|
69
148
|
` if (!bound) return defaultFactory();\n` +
|
|
70
149
|
` if (_resolvingTypeBindings.has(typeKey)) {\n` +
|
|
71
150
|
` const label = typeof typeKey === 'function' ? (typeKey.name || '<anonymous class>') : String(typeKey);\n` +
|
|
72
151
|
` throw new Error('Detected a circular "bind" reference ("' + label + '"). The bind chain loops back on itself.');\n` +
|
|
73
152
|
` }\n` +
|
|
74
153
|
` _resolvingTypeBindings.add(typeKey);\n` +
|
|
154
|
+
` try { return bound(); } finally { _resolvingTypeBindings.delete(typeKey); }\n` +
|
|
155
|
+
`}\n\n` +
|
|
156
|
+
`// injectable resolution. Re-enter the local scope captured at construction (scope) and set\n` +
|
|
157
|
+
`// this's class scope (cls's prototype chain) for the duration of the resolution. Re-entering\n` +
|
|
158
|
+
`// makes any dependency lazily constructed inside fallback run under the same local scope and\n` +
|
|
159
|
+
`// capture it too (the whole graph follows root's construction scope). The class scope is not\n` +
|
|
160
|
+
`// put in als, so a dependency never wrongly inherits this's class scope (it uses its own\n` +
|
|
161
|
+
`// this.constructor's class scope). Priority: override > fallback (bind or default\n` +
|
|
162
|
+
`// initializer), and within each: local > class > global.\n` +
|
|
163
|
+
`${E}function __disonResolveInjectable<T>(scope: __DisonFrame | undefined, cls: Function, prop: string, fallback: () => T): T {\n` +
|
|
164
|
+
` const prevLocal = __dison_als.getStore();\n` +
|
|
165
|
+
` const prevClass = __dison_classScopeCtx;\n` +
|
|
166
|
+
` __dison_als.enterWith(scope);\n` +
|
|
167
|
+
` __dison_classScopeCtx = __disonClassScopes(cls);\n` +
|
|
75
168
|
` try {\n` +
|
|
76
|
-
`
|
|
169
|
+
` const ov = getOverride(cls, prop);\n` +
|
|
170
|
+
` return ov ? ov() : fallback();\n` +
|
|
77
171
|
` } finally {\n` +
|
|
78
|
-
`
|
|
172
|
+
` __dison_als.enterWith(prevLocal);\n` +
|
|
173
|
+
` __dison_classScopeCtx = prevClass;\n` +
|
|
79
174
|
` }\n` +
|
|
175
|
+
`}\n\n` +
|
|
176
|
+
`// Desugar target for a non-top-level configuration. Build a new frame whose parent is the\n` +
|
|
177
|
+
`// current frame, populate its bind/override via setup, and enter it (enterWith). The return\n` +
|
|
178
|
+
`// value has Symbol.dispose, so a \`using\` declaration restores the previous frame at the end\n` +
|
|
179
|
+
`// of the enclosing block. setup uses the bind/override helpers to add the deltas.\n` +
|
|
180
|
+
`${E}function __disonEnterScope(\n` +
|
|
181
|
+
` setup: (bind: (key: __DisonKey, factory: __DisonFactory) => void, override: (cls: Function, prop: string, factory: __DisonFactory) => void) => void\n` +
|
|
182
|
+
`): { [Symbol.dispose](): void } {\n` +
|
|
183
|
+
` const frame: __DisonFrame = { binds: new Map(), overrides: new WeakMap(), parent: __dison_als.getStore() };\n` +
|
|
184
|
+
` setup(\n` +
|
|
185
|
+
` (key, factory) => { frame.binds.set(key, factory); },\n` +
|
|
186
|
+
` (cls, prop, factory) => {\n` +
|
|
187
|
+
` let e = frame.overrides.get(cls);\n` +
|
|
188
|
+
` if (!e) { e = {}; frame.overrides.set(cls, e); }\n` +
|
|
189
|
+
` e[prop] = factory;\n` +
|
|
190
|
+
` }\n` +
|
|
191
|
+
` );\n` +
|
|
192
|
+
` const prev = __dison_als.getStore();\n` +
|
|
193
|
+
` __dison_als.enterWith(frame);\n` +
|
|
194
|
+
` return { [Symbol.dispose]() { __dison_als.enterWith(prev); } };\n` +
|
|
80
195
|
`}\n`);
|
|
81
196
|
}
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
export const DISON_RUNTIME_MODULE_SOURCE =
|
|
197
|
+
// 複数ファイルでランタイム状態を共有するための共有ランタイムモジュールのソース。
|
|
198
|
+
// scripts/generate-runtime-module.tsがこれをsrc/generated-runtime.tsとして書き出し、
|
|
199
|
+
// tscがdist/にコンパイルすることで、"dison/runtime" として配布される
|
|
200
|
+
// (docs/packaging.md)。AsyncLocalStorage の import を先頭に付ける。
|
|
201
|
+
export const DISON_RUNTIME_MODULE_SOURCE = DISON_RUNTIME_IMPORTS +
|
|
202
|
+
`// --- Dison shared runtime module ---\n` +
|
|
87
203
|
`// Multiple generated files import this module to share runtime state\n` +
|
|
88
|
-
`// such as DI_REGISTRY/TYPE_BINDINGS.\n` +
|
|
204
|
+
`// such as DI_REGISTRY/TYPE_BINDINGS and the scope infrastructure.\n` +
|
|
89
205
|
`// This file is auto-generated when the Dison package is built. Do not edit it by hand.\n\n` +
|
|
90
206
|
generateRuntimeDeclarations("export ");
|
|
91
207
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,gBAAgB;AAChB,wEAAwE;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED