@no22/dison 1.1.0 → 1.2.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 CHANGED
@@ -93,8 +93,8 @@ class UserService {
93
93
 
94
94
  ### `configuration` / `activate`
95
95
 
96
- Groups a set of `override`/`bind` statements and activates them
97
- explicitly:
96
+ Groups a set of `override`/`bind` statements. A **named** configuration
97
+ is activated explicitly with `activate`:
98
98
 
99
99
  ```dison
100
100
  configuration TestConfig {
@@ -104,13 +104,53 @@ configuration TestConfig {
104
104
  activate TestConfig;
105
105
  ```
106
106
 
107
- `configuration` must be written at the top level. To activate a
108
- configuration defined in another file:
107
+ To activate a configuration defined in another file:
109
108
 
110
109
  ```dison
111
110
  activate TestConfig from "./configs";
112
111
  ```
113
112
 
113
+ #### Scoped configuration (new in 1.2.0)
114
+
115
+ Where you write a `configuration` decides how far it reaches. An
116
+ **anonymous** `configuration { ... }` is auto-active (no `activate`
117
+ needed) for the place it's written:
118
+
119
+ - **Top level** → global, as before.
120
+ - **Inside a function/method body** → a **local scope**, lexically
121
+ limited to the rest of that block. Great for per-test or per-request
122
+ isolation — the wiring is undone automatically when the block ends,
123
+ and concurrent async requests don't interfere.
124
+ - **Directly inside a class body** → a **class scope**: that class's
125
+ declarative DI wiring, shared by all its instances and inherited by
126
+ subclasses (which can override just the parts they change).
127
+
128
+ ```dison
129
+ class UserService {
130
+ injectable repo: IUserRepository = new SqlUserRepository();
131
+ configuration { bind IUserRepository = CachedUserRepository; } // class scope
132
+ }
133
+
134
+ function underTest(): void {
135
+ configuration { bind IUserRepository = MockUserRepository; } // local scope
136
+ new UserService().repo.findById("1"); // uses the Mock here...
137
+ }
138
+ // ...and the real (or class-scoped) wiring everywhere else.
139
+ ```
140
+
141
+ Resolution priority is **local > class > global > default initializer**.
142
+ A dependency is wired according to the scope active where its *root*
143
+ object was constructed, and the whole lazily-built object graph follows
144
+ that same scope consistently.
145
+
146
+ > Local scopes desugar to `using` + `AsyncLocalStorage`, so generated
147
+ > code that uses them needs `Symbol.dispose` (TypeScript 5.2+ / Node 20+)
148
+ > and `node:async_hooks` at runtime. See [Requirements](#requirements).
149
+
150
+ *(Named local/class configurations, and activating them by name, aren't
151
+ supported yet — use an anonymous `configuration { ... }` for local and
152
+ class scopes.)*
153
+
114
154
  ### `override`
115
155
 
116
156
  Replaces a single property on a specific class:
@@ -146,6 +186,16 @@ bind SqlUserRepository = MockUserRepository;
146
186
  and can be written standalone or inside a `configuration`, same as
147
187
  `override`.
148
188
 
189
+ The replacement can take **constructor arguments** (new in 1.2.0), so
190
+ you can bind types whose constructor needs values:
191
+
192
+ ```dison
193
+ bind Repository = PostgresRepository("postgres://localhost/db");
194
+ ```
195
+
196
+ The arguments are type-checked against the replacement's constructor,
197
+ and a standalone `bind`'s arguments can capture local variables.
198
+
149
199
  ### `token`
150
200
 
151
201
  Most name clashes are resolved automatically (see *Automatic collision
@@ -208,6 +258,23 @@ classes defined in another — as long as they all resolve
208
258
  `@no22/dison/runtime` to the same installed copy (in practice: they're part of the same project
209
259
  and share a common `node_modules` ancestor, which is the normal case).
210
260
 
261
+ ## Requirements
262
+
263
+ The generated code targets a modern TypeScript/Node toolchain:
264
+
265
+ - **TypeScript 5.2+** and **Node.js 20+** if you use **local scopes**
266
+ (an anonymous `configuration` inside a function/method body). Those
267
+ desugar to `using` + `AsyncLocalStorage`, which need `Symbol.dispose`
268
+ and `node:async_hooks`. Your `tsconfig.json` needs a `lib` that
269
+ includes `Symbol.dispose` (e.g. `"lib": ["esnext"]`) and
270
+ `@types/node`.
271
+ - Everything else (`injectable`/`override`/`bind`, global and class
272
+ scopes) has no special requirement beyond a current TypeScript.
273
+
274
+ The runtime module (`@no22/dison/runtime`) is shipped pre-compiled, so
275
+ these requirements apply to *your generated `.ts` files*, not to the
276
+ package itself.
277
+
211
278
  ## Samples
212
279
 
213
280
  See [`sample/`](sample/) for runnable, self-contained examples covering
package/dist/ast.d.ts CHANGED
@@ -12,6 +12,7 @@ export interface BindEntry {
12
12
  originalTypeKey: string;
13
13
  replacementTypeName: string;
14
14
  replacementTypeKey: string;
15
+ replacementArgs?: string;
15
16
  token?: string;
16
17
  }
17
18
  export type ConfigEntry = OverrideEntry | BindEntry;
@@ -20,7 +21,8 @@ export type Node = {
20
21
  text: string;
21
22
  } | {
22
23
  kind: "configuration";
23
- name: string;
24
+ name?: string;
25
+ scope: "global" | "local" | "class";
24
26
  entries: ConfigEntry[];
25
27
  } | {
26
28
  kind: "injectable";
package/dist/ast.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IAKb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAK3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,GAE/D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAGjH;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAI/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAGrD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IAKb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAM3B,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAQ7B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,GAErG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAGjH;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAI/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAGrD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAA4B,MAAM,UAAU,CAAC;AAI/D,MAAM,WAAW,WAAW;IAK1B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAKzC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpD;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AA+ID,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAqB3F;AAOD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAO/F;AAOD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAMrE;AAQD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CASpF;AAOD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,WAAW,GACpB,MAAM,CAsCR"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAA4B,MAAM,UAAU,CAAC;AAI/D,MAAM,WAAW,WAAW;IAK1B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAKzC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpD;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AA+LD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAqB3F;AAOD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAO/F;AAOD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAMrE;AAQD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CASpF;AAOD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,WAAW,GACpB,MAAM,CA4CR"}
package/dist/codegen.js CHANGED
@@ -37,12 +37,15 @@ function keyExprFor(typeKey, token, strategy) {
37
37
  // override 1件分のDI_REGISTRY代入文を生成する。configuration内(関数本体に
38
38
  // 収集される場合)と、configurationで包まない単独のoverride(その場に直接
39
39
  // 出力される場合)の両方から共有される。
40
- function generateOverrideEntryLines(entry) {
40
+ // local=false: グローバルレジストリへ登録(registerOverride)。local=true: ローカル
41
+ // スコープフレームへ登録(__disonOverride。__disonEnterScope の setup 内で使う)。
42
+ function generateOverrideEntryLines(entry, local) {
41
43
  // entry.className はクラスの実体を指す識別子としてそのまま埋め込む
42
- // (文字列リテラルにはしない)。registerOverride がクラスの実体そのものを
43
- // キーにするため、className がスコープ内に存在しない(タイプミス・
44
- // importし忘れ)場合は tsc が "Cannot find name" として検出する。
45
- return entry.assignments.map((a) => ` registerOverride(${entry.className}, "${a.prop}", () => (${a.valueExpr}));`);
44
+ // (文字列リテラルにはしない)。キーがクラスの実体そのものなので、className
45
+ // スコープ内に存在しない(タイプミス・importし忘れ)場合は tsc が "Cannot find name"
46
+ // として検出する。
47
+ const fn = local ? "__disonOverride" : "registerOverride";
48
+ return entry.assignments.map((a) => ` ${fn}(${entry.className}, "${a.prop}", () => (${a.valueExpr}));`);
46
49
  }
47
50
  // bind 1件分のbindType呼び出し文を生成する(generateOverrideEntryLinesと同様、
48
51
  // configuration内・単独bindの両方から共有される)。
@@ -70,32 +73,67 @@ function generateOverrideEntryLines(entry) {
70
73
  // 連鎖: 差し替え先クラス自身がさらに bind されている可能性があるので、
71
74
  // 直接 new せず resolveType を介して再帰的に解決する。
72
75
  // (bind A = B; bind B = C; と書けば、Aの解決は最終的にCまで辿る)
73
- function generateBindEntryLines(entry, strategy) {
76
+ // local=false: グローバル TYPE_BINDINGS へ登録(bindType<T>)。local=true: ローカル
77
+ // スコープフレームへ登録(__disonBind。__disonEnterScope の setup 内で使う)。
78
+ // bindType<T> は型引数で差し替え先の型互換を tsc に検査させるが、__disonBind は
79
+ // 型引数を取れないため、代わりに factory の返り値型注釈 `(): OrigType =>` で同じ検査を
80
+ // 得る(差し替え先が OrigType と非互換なら tsc がエラーにする)。
81
+ function generateBindEntryLines(entry, strategy, local) {
74
82
  const originalKeyExpr = keyExprFor(entry.originalTypeKey, entry.token, strategy);
75
83
  // 差し替え先(replacement)は `new` で実体化される具象クラスなので、それ自身が
76
84
  // さらに bind の左辺になっている場合の連鎖解決キーも、左辺と同じ規則で決める
77
85
  // (具象クラスなら実体参照、そうでなければ文字列/companion)。左辺と同じ戦略を使う
78
86
  // ことで、ある型が「bindの左辺」と「別のbindの差し替え先」の両方に現れてもキーが一致する。
79
87
  const replacementKeyExpr = keyExprFor(entry.replacementTypeKey, undefined, strategy);
88
+ // "bind Original = Replacement(args)" のコンストラクタ引数(あれば)を new 式に渡す。
89
+ const args = entry.replacementArgs ?? "";
90
+ const factory = `resolveType(${replacementKeyExpr}, () => new ${entry.replacementTypeName}(${args}))`;
80
91
  return [
81
- ` bindType<${entry.originalTypeName}>(${originalKeyExpr}, () => resolveType(${replacementKeyExpr}, () => new ${entry.replacementTypeName}()));`,
92
+ local
93
+ ? ` __disonBind(${originalKeyExpr}, (): ${entry.originalTypeName} => ${factory});`
94
+ : ` bindType<${entry.originalTypeName}>(${originalKeyExpr}, () => ${factory});`,
82
95
  ];
83
96
  }
84
- function generateConfiguration(node, strategy) {
97
+ // configuration を構文位置に応じて生成する(docs/scoped-configuration.md):
98
+ // - local(関数/メソッド本体・無名): `using __dison_scope_N = __disonEnterScope(...)` に
99
+ // 脱糖。囲みブロックの終端で自動的に元のスコープへ戻る(Symbol.dispose)。
100
+ // - class(クラス本体直下・無名): `static __dison_classScope_N = __disonBuildFrame(...)` に
101
+ // 脱糖。そのクラス(のインスタンス)の解決チェインに入る(プロトタイプ鎖で継承される)。
102
+ // - global 名前付き: `export function activateName() {...}`(activate で有効化)。
103
+ // - global 無名: auto-active。即時にグローバルへ適用する呼び出しをその場に出す。
104
+ // scopeId は複数の local/class configがあっても衝突しない連番(class は static フィールド名の
105
+ // 一意性に、local は using 変数名の一意性に使う)。
106
+ function generateConfiguration(node, strategy, scopeId) {
107
+ // local と class は「フレームへ差分を積む」形(__disonBind/__disonOverride)を共有する。
108
+ const frameForm = node.scope === "local" || node.scope === "class";
85
109
  const lines = [];
86
110
  for (const entry of node.entries) {
87
111
  if (entry.kind === "override") {
88
- lines.push(...generateOverrideEntryLines(entry));
112
+ lines.push(...generateOverrideEntryLines(entry, frameForm));
89
113
  }
90
114
  else {
91
- lines.push(...generateBindEntryLines(entry, strategy));
115
+ lines.push(...generateBindEntryLines(entry, strategy, frameForm));
92
116
  }
93
117
  }
94
- // export しておくことで、他ファイルから import { activateName } して
95
- // activate をクロスファイルで使えるようにする(docs/multi-file-support.md
96
- // フェーズ1。単一ファイル利用時もexportは無害で、同一ファイル内から
97
- // 従来通り呼び出せる)。
98
- return `export function activate${node.name}() {\n${lines.join("\n")}\n}`;
118
+ if (node.scope === "local") {
119
+ // 無名ローカル configuration。__disonEnterScope の setup で __disonBind/__disonOverride を
120
+ // 使ってフレームへ差分を積む。`using` で受けるのでブロック終端で自動的に戻る。
121
+ return (`using __dison_scope_${scopeId} = __disonEnterScope((__disonBind, __disonOverride) => {\n` +
122
+ `${lines.join("\n")}\n});`);
123
+ }
124
+ if (node.scope === "class") {
125
+ // 無名クラス configuration。クラス本体の static フィールドとしてフレームを構築する。
126
+ // __disonClassScopes が this.constructor のプロトタイプ鎖からこの static を集める。
127
+ return (`static __dison_classScope_${scopeId} = __disonBuildFrame((__disonBind, __disonOverride) => {\n` +
128
+ `${lines.join("\n")}\n});`);
129
+ }
130
+ if (node.name !== undefined) {
131
+ // 名前付きグローバル。export しておくと他ファイルから import して activate できる
132
+ // (docs/multi-file-support.md フェーズ1)。単一ファイルでもexportは無害。
133
+ return `export function activate${node.name}() {\n${lines.join("\n")}\n}`;
134
+ }
135
+ // 無名グローバル: auto-active。その場に即時適用する呼び出しを出す。
136
+ return lines.join("\n");
99
137
  }
100
138
  function generateInjectable(node, strategy) {
101
139
  const { propName: p, typeName: t, typeKey: k, defaultExpr, token } = node;
@@ -116,17 +154,22 @@ function generateInjectable(node, strategy) {
116
154
  // 同じキーで一致する。
117
155
  const keyExpr = keyExprFor(k, token, strategy);
118
156
  const fallback = simpleShape ? `resolveType(${keyExpr}, () => ${finalDefault})` : finalDefault;
157
+ // 構築時にその時点のスコープ(ローカルフレーム、無ければグローバル)を捕捉する
158
+ // (docs/scoped-configuration.md フェーズ1)。__disonResolveInjectable が解決時に
159
+ // このスコープへ再突入し、override > fallback(bind/既定初期化式)の順で解決する。
160
+ // 再突入により、fallback 内で遅延構築される依存の new も同じスコープの下で走る。
161
+ // 捕捉フィールドは injectable ごとに1つ(同じ値だが重複宣言を避けるため名前を分ける)。
162
+ //
119
163
  // strictモードでは `if (!this._x) { this._x = f(); }` の後の `return this._x;` は
120
- // 途中で挟まる関数呼び出し(factory())によりnarrowingが無効化され、
121
- // `T | undefined` のままとみなされてコンパイルエラーになる。
122
- // そのためローカル変数を経由して確実に非undefined型として返す。
164
+ // 途中で挟まる関数呼び出しによりnarrowingが無効化され `T | undefined` とみなされて
165
+ // コンパイルエラーになる。そのため末尾で `!` を付けて確実に非undefined型として返す。
123
166
  return [
124
167
  ``,
168
+ ` private readonly __dison_scope_${p} = __disonCurrentScope();`,
125
169
  ` private _${p}?: ${t};`,
126
170
  ` get ${p}(): ${t} {`,
127
171
  ` if (!this._${p}) {`,
128
- ` const factory = getOverride(this.constructor, "${p}");`,
129
- ` this._${p} = factory ? factory() : ${fallback};`,
172
+ ` this._${p} = __disonResolveInjectable(this.__dison_scope_${p}, this.constructor, "${p}", () => ${fallback});`,
130
173
  ` }`,
131
174
  ` return this._${p}!;`,
132
175
  ` }`,
@@ -221,13 +264,15 @@ export function collectDiUsedTypeNames(nodes) {
221
264
  }
222
265
  export function generate(nodes, fromBindings, strategy) {
223
266
  let out = "";
267
+ // local/class 無名 configuration の連番(using 変数名 / static フィールド名の衝突回避)。
268
+ let scopeCounter = 0;
224
269
  for (const node of nodes) {
225
270
  switch (node.kind) {
226
271
  case "raw":
227
272
  out += node.text;
228
273
  break;
229
274
  case "configuration":
230
- out += generateConfiguration(node, strategy);
275
+ out += generateConfiguration(node, strategy, node.scope === "local" || node.scope === "class" ? scopeCounter++ : -1);
231
276
  break;
232
277
  case "injectable":
233
278
  out += generateInjectable(node, strategy);
@@ -248,12 +293,12 @@ export function generate(nodes, fromBindings, strategy) {
248
293
  }
249
294
  break;
250
295
  case "standalone-override":
251
- // configurationで包まないため関数宣言にせず、その場に直接
296
+ // configurationで包まないため関数宣言にせず、その場に直接グローバルへの
252
297
  // 代入文として出力する(書かれた位置で即座に実行される)。
253
- out += generateOverrideEntryLines(node.entry).join("\n");
298
+ out += generateOverrideEntryLines(node.entry, false).join("\n");
254
299
  break;
255
300
  case "standalone-bind":
256
- out += generateBindEntryLines(node.entry, strategy).join("\n");
301
+ out += generateBindEntryLines(node.entry, strategy, false).join("\n");
257
302
  break;
258
303
  }
259
304
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts CHANGED
@@ -64,12 +64,13 @@
64
64
  * `override` はクラス内の特定プロパティ1つだけを差し替えるのに対し、
65
65
  * `bind` は「その型が要求される場所すべて」を横断的に差し替える。
66
66
  * 右辺は override と異なり任意の式ではなく、単一の型参照(具象クラス、
67
- * ジェネリクス可)のみを許可し、トランスパイラが自動的に `new` を補う
68
- * (コンストラクタに引数を渡したいケースは override のプロパティ単位
69
- * 指定を使うこと)。
67
+ * ジェネリクス可)+任意のコンストラクタ引数リストのみを許可し、
68
+ * トランスパイラが自動的に `new Replacement(args)` を補う(引数は省略可。
69
+ * docs/bind-constructor-arguments.md)。
70
70
  *
71
71
  * configuration TestConfig {
72
72
  * bind SqlUserRepository = MockUserRepository;
73
+ * bind Repository = PostgresRepository("postgres://..."); // 引数あり
73
74
  * }
74
75
  *
75
76
  * 左辺(差し替え元)はクラスだけでなく interface / type エイリアスも許可される。
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0OG;AAgBH,OAAO,EAA+B,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAI/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAW3B,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAQtC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAMjC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAiE7F;AAID,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,CAAC;AACxH,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2OG;AAgBH,OAAO,EAA+B,2BAA2B,EAAyB,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAI/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAW3B,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAQtC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAMjC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAqE7F;AAID,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,CAAC;AACxH,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAC"}
package/dist/core.js CHANGED
@@ -64,12 +64,13 @@
64
64
  * `override` はクラス内の特定プロパティ1つだけを差し替えるのに対し、
65
65
  * `bind` は「その型が要求される場所すべて」を横断的に差し替える。
66
66
  * 右辺は override と異なり任意の式ではなく、単一の型参照(具象クラス、
67
- * ジェネリクス可)のみを許可し、トランスパイラが自動的に `new` を補う
68
- * (コンストラクタに引数を渡したいケースは override のプロパティ単位
69
- * 指定を使うこと)。
67
+ * ジェネリクス可)+任意のコンストラクタ引数リストのみを許可し、
68
+ * トランスパイラが自動的に `new Replacement(args)` を補う(引数は省略可。
69
+ * docs/bind-constructor-arguments.md)。
70
70
  *
71
71
  * configuration TestConfig {
72
72
  * bind SqlUserRepository = MockUserRepository;
73
+ * bind Repository = PostgresRepository("postgres://..."); // 引数あり
73
74
  * }
74
75
  *
75
76
  * 左辺(差し替え元)はクラスだけでなく interface / type エイリアスも許可される。
@@ -237,7 +238,7 @@ import { Lexer } from "./lexer.js";
237
238
  import { collectDeclaredTypeKinds, trueInterfaceOrAliasNames, identityKeyableClassNames } from "./analysis.js";
238
239
  import { Parser } from "./parser.js";
239
240
  import { generate, resolveFromActivateBindings, generateFromImportStatements, generateCompanionDeclarations, generateCompanionImportStatements, collectDiUsedTypeNames, companionName, } from "./codegen.js";
240
- import { generateRuntimeDeclarations, DISON_RUNTIME_MODULE_SOURCE } from "./runtime.js";
241
+ import { generateRuntimeDeclarations, DISON_RUNTIME_MODULE_SOURCE, DISON_RUNTIME_IMPORTS } from "./runtime.js";
241
242
  import { findBindCollisions, computeIdentityKeyClassesByFile, computeCompanionPlanByFile } from "./collisions.js";
242
243
  /**
243
244
  * Dison言語のソースコードを受け取り、完全に動作するTypeScriptコードに変換する。
@@ -291,12 +292,16 @@ export function transpileDisonToTS(sourceCode, options = {}) {
291
292
  companionImportList.push({ localName, originalName: info.originalName, specifier: info.specifier });
292
293
  }
293
294
  }
295
+ // スコープ対応(docs/scoped-configuration.md)で AsyncLocalStorage を使うため、
296
+ // ランタイムの import を生成物の先頭に置く。単一ファイル(インライン)モードでも
297
+ // ランタイム宣言が als を参照するので、この import が必要。
294
298
  const header = `// --- Auto-generated TypeScript code ---\n\n`;
295
299
  const prelude = options.runtimeModulePath
296
- ? `${header}import {\n` +
297
- ` DI_REGISTRY,\n TYPE_BINDINGS,\n bindType,\n resolveType,\n registerOverride,\n getOverride,\n` +
300
+ ? `${header}${DISON_RUNTIME_IMPORTS}import {\n` +
301
+ ` bindType,\n resolveType,\n registerOverride,\n` +
302
+ ` __disonCurrentScope,\n __disonResolveInjectable,\n __disonEnterScope,\n __disonBuildFrame,\n` +
298
303
  `} from ${JSON.stringify(options.runtimeModulePath)};\n\n`
299
- : `${header}${generateRuntimeDeclarations("")}\n`;
304
+ : `${header}${DISON_RUNTIME_IMPORTS}\n${generateRuntimeDeclarations("")}\n`;
300
305
  // ES Modules の import はファイル先頭にしか書けないため、import 系(companion import、
301
306
  // "activate ... from" の import)を前置きの直後にまとめて出す。companion の const 宣言
302
307
  // (export const __dison_token_X = Symbol(...))は import ではないので、すべての import
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,23 @@
1
- export declare const DI_REGISTRY: WeakMap<Function, Record<string, () => any>>;
2
- export declare function registerOverride(cls: Function, prop: string, factory: () => any): void;
3
- export declare function getOverride(cls: Function, prop: string): (() => any) | undefined;
4
- export declare const TYPE_BINDINGS: Map<string | symbol | Function, () => any>;
5
- export declare function bindType<T>(typeKey: string | symbol | Function, factory: () => T): void;
6
- export declare function resolveType<T>(typeKey: string | symbol | Function, defaultFactory: () => T): T;
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ type __DisonFactory = () => any;
3
+ type __DisonKey = string | symbol | Function;
4
+ interface __DisonFrame {
5
+ binds: Map<__DisonKey, __DisonFactory>;
6
+ overrides: WeakMap<Function, Record<string, __DisonFactory>>;
7
+ parent: __DisonFrame | undefined;
8
+ }
9
+ export declare const __dison_als: AsyncLocalStorage<__DisonFrame | undefined>;
10
+ export declare function __disonCurrentScope(): __DisonFrame | undefined;
11
+ export declare function __disonBuildFrame(setup: (bind: (key: __DisonKey, factory: __DisonFactory) => void, override: (cls: Function, prop: string, factory: __DisonFactory) => void) => void): __DisonFrame;
12
+ export declare const DI_REGISTRY: WeakMap<Function, Record<string, __DisonFactory>>;
13
+ export declare function registerOverride(cls: Function, prop: string, factory: __DisonFactory): void;
14
+ export declare function getOverride(cls: Function, prop: string): __DisonFactory | undefined;
15
+ export declare const TYPE_BINDINGS: Map<__DisonKey, __DisonFactory>;
16
+ export declare function bindType<T>(typeKey: __DisonKey, factory: () => T): void;
17
+ export declare function resolveType<T>(typeKey: __DisonKey, defaultFactory: () => T): T;
18
+ export declare function __disonResolveInjectable<T>(scope: __DisonFrame | undefined, cls: Function, prop: string, fallback: () => T): T;
19
+ export declare function __disonEnterScope(setup: (bind: (key: __DisonKey, factory: __DisonFactory) => void, override: (cls: Function, prop: string, factory: __DisonFactory) => void) => void): {
20
+ [Symbol.dispose](): void;
21
+ };
22
+ export {};
7
23
  //# sourceMappingURL=generated-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-runtime.d.ts","sourceRoot":"","sources":["../src/generated-runtime.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,WAAW,yCAA8C,GAAG,EAAI,CAAC;AAE9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,IAAI,CAOtF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAEhF;AAaD,eAAO,MAAM,aAAa,wCAA6C,GAAG,CAAG,CAAC;AAO9E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAEvF;AAKD,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAa9F"}
1
+ {"version":3,"file":"generated-runtime.d.ts","sourceRoot":"","sources":["../src/generated-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,KAAK,cAAc,GAAG,MAAM,GAAG,CAAC;AAChC,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC7C,UAAU,YAAY;IACpB,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AACD,eAAO,MAAM,WAAW,6CAAoD,CAAC;AAE7E,wBAAgB,mBAAmB,IAAI,YAAY,GAAG,SAAS,CAAmC;AAwBlG,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,KAAK,IAAI,GAClJ,YAAY,CAWd;AAKD,eAAO,MAAM,WAAW,mDAA0D,CAAC;AAEnF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAI3F;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAUnF;AAID,eAAO,MAAM,aAAa,iCAAwC,CAAC;AAKnE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAEvE;AAoBD,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAS9E;AASD,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAY9H;AAMD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,KAAK,IAAI,GAClJ;IAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;CAAE,CAa9B"}