@fluojs/testing 1.0.3 → 1.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/README.ko.md CHANGED
@@ -165,10 +165,8 @@ fluo는 테스트가 명시적인 `rootModule`을 이름으로 지정해야 한
165
165
 
166
166
  ## 공개 API
167
167
 
168
- - **루트 패키지**: `createTestingModule(...)`, `createTestApp(...)`, 모듈 introspection 헬퍼, 공용 테스트 타입
168
+ - **루트 패키지**: `createTestingModule(...)`, `Test.createTestingModule(...)`, `createTestApp(...)`, 모듈 introspection 헬퍼, 공용 테스트 타입
169
169
  - **서브패스**: `@fluojs/testing/app`, `@fluojs/testing/module`, `@fluojs/testing/http`, `@fluojs/testing/mock`, `@fluojs/testing/types`, `@fluojs/testing/vitest`, `@fluojs/testing/vitest/tooling`
170
- - **Mock 서브패스**: `@fluojs/testing/mock`
171
- - **HTTP 헬퍼**: `@fluojs/testing/http`
172
170
  - **하니스 서브패스**: `platform-conformance`, `http-adapter-portability`, `web-runtime-adapter-portability`, `fetch-style-websocket-conformance`
173
171
  - **도구 지원**: `@fluojs/testing/vitest`의 `fluoBabelDecoratorsPlugin()` 및 `@fluojs/testing/vitest/tooling`의 Vitest workspace config helper (`vitest`와 `@babel/core`를 함께 요구)
174
172
 
package/README.md CHANGED
@@ -163,10 +163,8 @@ fluo differs from NestJS by requiring tests to name an explicit `rootModule`. Th
163
163
 
164
164
  ## Public API
165
165
 
166
- - **Root package**: `createTestingModule(...)`, `createTestApp(...)`, module introspection helpers, shared testing types
166
+ - **Root package**: `createTestingModule(...)`, `Test.createTestingModule(...)`, `createTestApp(...)`, module introspection helpers, shared testing types
167
167
  - **Subpaths**: `@fluojs/testing/app`, `@fluojs/testing/module`, `@fluojs/testing/http`, `@fluojs/testing/mock`, `@fluojs/testing/types`, `@fluojs/testing/vitest`, `@fluojs/testing/vitest/tooling`
168
- - **Mock subpath**: `@fluojs/testing/mock`
169
- - **HTTP helpers**: `@fluojs/testing/http`
170
168
  - **Harness subpaths**: `platform-conformance`, `http-adapter-portability`, `web-runtime-adapter-portability`, `fetch-style-websocket-conformance`
171
169
  - **Tooling**: `@fluojs/testing/vitest` with `fluoBabelDecoratorsPlugin()` and `@fluojs/testing/vitest/tooling` with Vitest workspace config helpers (requires `vitest` and `@babel/core` in the consuming workspace)
172
170
 
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAId,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAqC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMrF,OAAO,KAAK,EAA2B,oBAAoB,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAC;AAExH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,EAAE,CAQzE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,CAQzE;AAyuBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,CAEvF;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;;CAEhB,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAKd,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAqC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMrF,OAAO,KAAK,EAA2B,oBAAoB,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAC;AAExH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,EAAE,CAQzE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,CAQzE;AA+vBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,CAEvF;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;;CAEhB,CAAC"}
package/dist/module.js CHANGED
@@ -90,20 +90,8 @@ function normalizeOverride(token, value) {
90
90
  useValue: value
91
91
  };
92
92
  }
93
- function isContainerIntrospection(value) {
94
- if (typeof value !== 'object' || value === null) {
95
- return false;
96
- }
97
- const candidate = value;
98
- const parentValid = candidate.parent === undefined || isContainerIntrospection(candidate.parent);
99
- const requestScopeValid = candidate.requestScopeEnabled === undefined || typeof candidate.requestScopeEnabled === 'boolean';
100
- return candidate.registrations instanceof Map && candidate.multiRegistrations instanceof Map && candidate.multiSingletonCache instanceof Map && candidate.singletonCache instanceof Map && parentValid && requestScopeValid;
101
- }
102
93
  function toContainerIntrospection(container) {
103
- if (!isContainerIntrospection(container)) {
104
- throw new Error('Testing container introspection is unavailable for the current container implementation.');
105
- }
106
- return container;
94
+ return container.inspectResolutionState();
107
95
  }
108
96
  function isPromiseLike(value) {
109
97
  return (typeof value === 'object' || typeof value === 'function') && value !== null && typeof value.then === 'function';
@@ -126,14 +114,37 @@ function effectiveProvidersForToken(introspection, token) {
126
114
  return provider ? [provider] : [];
127
115
  }
128
116
  function isSingletonLifecycleProvider(provider) {
129
- if (provider.multi === true) {
130
- return false;
131
- }
132
117
  if (provider.scope !== Scope.DEFAULT) {
133
118
  return false;
134
119
  }
135
120
  return provider.type === 'class' || provider.type === 'value' && hasAnyBootstrapLifecycleHook(provider.useValue);
136
121
  }
122
+ async function resolveLifecycleDependency(entry, bootstrapped, introspection) {
123
+ if (isOptionalToken(entry) && !hasTokenInContainer(introspection, entry.token)) {
124
+ return undefined;
125
+ }
126
+ return bootstrapped.container.resolve(dependencyToken(entry));
127
+ }
128
+ async function instantiateLifecycleProvider(provider, bootstrapped, introspection) {
129
+ if (provider.type !== 'class' || !provider.useClass) {
130
+ throw new Error(`Lifecycle provider ${String(provider.provide)} must use a class provider.`);
131
+ }
132
+ const dependencies = await Promise.all(provider.inject.map(entry => resolveLifecycleDependency(entry, bootstrapped, introspection)));
133
+ return new provider.useClass(...dependencies);
134
+ }
135
+ async function resolveMultiLifecycleProvider(provider, bootstrapped, introspection) {
136
+ const cache = rootContainerIntrospection(introspection).multiSingletonCache;
137
+ const cached = cache.get(provider);
138
+ if (cached) {
139
+ return cached;
140
+ }
141
+ const instance = instantiateLifecycleProvider(provider, bootstrapped, introspection).catch(error => {
142
+ cache.delete(provider);
143
+ throw error;
144
+ });
145
+ cache.set(provider, instance);
146
+ return instance;
147
+ }
137
148
  async function resolveTestingLifecycleInstances(bootstrapped, overrides = []) {
138
149
  const lifecycleProviders = [...bootstrapped.effectiveProviders.runtimeProviders, ...bootstrapped.effectiveProviders.moduleProviders, ...overrides];
139
150
  const instances = [];
@@ -142,7 +153,11 @@ async function resolveTestingLifecycleInstances(bootstrapped, overrides = []) {
142
153
  for (const provider of lifecycleProviders) {
143
154
  const token = providerToken(provider);
144
155
  const effectiveProviders = effectiveProvidersForToken(introspection, token);
145
- for (const effectiveProvider of effectiveProviders) {
156
+ for (let index = 0; index < effectiveProviders.length; index += 1) {
157
+ const effectiveProvider = effectiveProviders[index];
158
+ if (!effectiveProvider) {
159
+ continue;
160
+ }
146
161
  if (seenProviders.has(effectiveProvider)) {
147
162
  continue;
148
163
  }
@@ -155,6 +170,10 @@ async function resolveTestingLifecycleInstances(bootstrapped, overrides = []) {
155
170
  continue;
156
171
  }
157
172
  try {
173
+ if (effectiveProvider.multi === true) {
174
+ instances.push(await resolveMultiLifecycleProvider(effectiveProvider, bootstrapped, introspection));
175
+ continue;
176
+ }
158
177
  instances.push(await bootstrapped.container.resolve(token));
159
178
  } catch (error) {
160
179
  if (error instanceof Error && error.message.includes('Request-scoped provider')) {
@@ -195,7 +214,10 @@ function lookupProvider(target, token) {
195
214
  return target.parent ? lookupProvider(target.parent, token) : undefined;
196
215
  }
197
216
  function hasToken(state, token) {
198
- return lookupProvider(state.introspection, token) !== undefined || collectMultiProviders(state.introspection, token).length > 0;
217
+ return hasTokenInContainer(state.introspection, token);
218
+ }
219
+ function hasTokenInContainer(introspection, token) {
220
+ return lookupProvider(introspection, token) !== undefined || collectMultiProviders(introspection, token).length > 0;
199
221
  }
200
222
  function dependencyToken(entry) {
201
223
  if (isOptionalToken(entry)) {
@@ -1 +1 @@
1
- {"version":3,"file":"http-adapter-portability.d.ts","sourceRoot":"","sources":["../../src/portability/http-adapter-portability.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3G,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,gBAAgB;QACxB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB;CACF;AAED,KAAK,OAAO,GAAG;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAUF;;;;;;GAMG;AACH,MAAM,WAAW,oCAAoC,CACnD,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO;IAE9B;;;;;;OAMG;IACH,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;OAEG;IACH,2BAA2B,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAgHD;;;;;;;GAOG;AACH,qBAAa,6BAA6B,CACxC,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO;IAOlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC;;;;OAIG;gBAC0B,OAAO,EAAE,oCAAoC,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC;IAEhH;;;OAGG;IACG,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDrD,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC;IAqErD,wDAAwD,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CzE,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDlD,8CAA8C,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD/D,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDjD;;;OAGG;IACG,mCAAmC,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDpD,wCAAwC,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDzD,4BAA4B,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDjF,8CAA8C,IAAI,OAAO,CAAC,IAAI,CAAC;CA2CtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO,EAE9B,OAAO,EAAE,oCAAoC,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,GAClF,6BAA6B,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,CAErE"}
1
+ {"version":3,"file":"http-adapter-portability.d.ts","sourceRoot":"","sources":["../../src/portability/http-adapter-portability.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3G,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,gBAAgB;QACxB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB;CACF;AAED,KAAK,OAAO,GAAG;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAUF;;;;;;GAMG;AACH,MAAM,WAAW,oCAAoC,CACnD,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO;IAE9B;;;;;;OAMG;IACH,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;OAEG;IACH,2BAA2B,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AA6HD;;;;;;;GAOG;AACH,qBAAa,6BAA6B,CACxC,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO;IAOlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC;;;;OAIG;gBAC0B,OAAO,EAAE,oCAAoC,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC;IAEhH;;;OAGG;IACG,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDrD,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC;IAqErD,wDAAwD,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CzE,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDlD,8CAA8C,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD/D,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDjD;;;OAGG;IACG,mCAAmC,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDpD,wCAAwC,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCzD,4BAA4B,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCjF,8CAA8C,IAAI,OAAO,CAAC,IAAI,CAAC;CA2CtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,SAAS,MAAM,EAChC,WAAW,SAAS,MAAM,EAC1B,IAAI,SAAS,OAAO,GAAG,OAAO,EAE9B,OAAO,EAAE,oCAAoC,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,GAClF,6BAA6B,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,CAErE"}
@@ -50,6 +50,17 @@ async function requestHttps(url) {
50
50
  request.end();
51
51
  });
52
52
  }
53
+ function createLogCaptureLogger() {
54
+ const messages = [];
55
+ const capture = (...args) => messages.push(args.map(arg => String(arg)).join(' '));
56
+ return {
57
+ debug: capture,
58
+ error: capture,
59
+ log: capture,
60
+ messages,
61
+ warn: capture
62
+ };
63
+ }
53
64
  async function runWithCleanup(app, adapterName, assertion) {
54
65
  let hasAssertionError = false;
55
66
  let assertionError;
@@ -522,17 +533,7 @@ export class HttpAdapterPortabilityHarness {
522
533
  }
523
534
  async assertReportsConfiguredHostInStartupLogs() {
524
535
  let _initProto8, _initClass8;
525
- const loggerEvents = [];
526
- const logger = {
527
- debug() {},
528
- error(message, error, context) {
529
- loggerEvents.push(`error:${context}:${message}:${error instanceof Error ? error.message : 'none'}`);
530
- },
531
- log(message, context) {
532
- loggerEvents.push(`log:${context}:${message}`);
533
- },
534
- warn() {}
535
- };
536
+ const logger = createLogCaptureLogger();
536
537
  let _HealthController;
537
538
  class HealthController {
538
539
  static {
@@ -574,25 +575,14 @@ export class HttpAdapterPortabilityHarness {
574
575
  })) {
575
576
  throw new Error(`${this.options.name} adapter changed host-bound response payload.`);
576
577
  }
577
- const expectedLog = `log:FluoFactory:Listening on ${baseUrl}`;
578
- if (!loggerEvents.includes(expectedLog)) {
578
+ if (!logger.messages.some(message => message.includes(`Listening on ${baseUrl}`))) {
579
579
  throw new Error(`${this.options.name} adapter changed startup host logging.`);
580
580
  }
581
581
  });
582
582
  }
583
583
  async assertReportsHttpsStartupUrl(https) {
584
584
  let _initProto9, _initClass9;
585
- const loggerEvents = [];
586
- const logger = {
587
- debug() {},
588
- error(message, error, context) {
589
- loggerEvents.push(`error:${context}:${message}:${error instanceof Error ? error.message : 'none'}`);
590
- },
591
- log(message, context) {
592
- loggerEvents.push(`log:${context}:${message}`);
593
- },
594
- warn() {}
595
- };
585
+ const logger = createLogCaptureLogger();
596
586
  let _HealthController2;
597
587
  class HealthController {
598
588
  static {
@@ -634,8 +624,7 @@ export class HttpAdapterPortabilityHarness {
634
624
  })) {
635
625
  throw new Error(`${this.options.name} adapter changed HTTPS response payload semantics.`);
636
626
  }
637
- const expectedLog = `log:FluoFactory:Listening on ${baseUrl}`;
638
- if (!loggerEvents.includes(expectedLog)) {
627
+ if (!logger.messages.some(message => message.includes(`Listening on ${baseUrl}`))) {
639
628
  throw new Error(`${this.options.name} adapter changed HTTPS startup logging.`);
640
629
  }
641
630
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../src/vitest/tooling.ts"],"names":[],"mappings":"AA4EA;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,KAAK,uBAaxF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,wBAErC"}
1
+ {"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../src/vitest/tooling.ts"],"names":[],"mappings":"AA8EA;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYzF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,KAAK,uBAaxF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,wBAErC"}
@@ -3,6 +3,7 @@ import { extname, join, relative, sep } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { defineConfig, mergeConfig } from 'vitest/config';
5
5
  import { fluoBabelDecoratorsPlugin } from '../vitest.js';
6
+ const workspaceAliasCache = new Map();
6
7
  function collectSourceEntries(sourceRoot) {
7
8
  const entries = [];
8
9
  for (const directoryEntry of readdirSync(sourceRoot, {
@@ -58,7 +59,18 @@ function collectWorkspaceAliasesFromRoot(repoRoot) {
58
59
  * @returns A Vite/Vitest alias map that points public package imports at workspace source files.
59
60
  */
60
61
  export function collectWorkspaceAliases(repoRootUrl) {
61
- return collectWorkspaceAliasesFromRoot(fileURLToPath(repoRootUrl));
62
+ const repoRoot = fileURLToPath(repoRootUrl);
63
+ const cachedAliases = workspaceAliasCache.get(repoRoot);
64
+ if (cachedAliases) {
65
+ return {
66
+ ...cachedAliases
67
+ };
68
+ }
69
+ const aliases = collectWorkspaceAliasesFromRoot(repoRoot);
70
+ workspaceAliasCache.set(repoRoot, aliases);
71
+ return {
72
+ ...aliases
73
+ };
62
74
  }
63
75
 
64
76
  /**
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "override",
10
10
  "module-builder"
11
11
  ],
12
- "version": "1.0.3",
12
+ "version": "1.0.5",
13
13
  "private": false,
14
14
  "license": "MIT",
15
15
  "repository": {
@@ -80,11 +80,11 @@
80
80
  "dist"
81
81
  ],
82
82
  "dependencies": {
83
- "@fluojs/core": "^1.0.3",
84
83
  "@fluojs/config": "^1.0.2",
85
84
  "@fluojs/http": "^1.1.0",
86
- "@fluojs/di": "^1.0.3",
87
- "@fluojs/runtime": "^1.1.1"
85
+ "@fluojs/di": "^1.1.0",
86
+ "@fluojs/core": "^1.0.3",
87
+ "@fluojs/runtime": "^1.1.6"
88
88
  },
89
89
  "peerDependencies": {
90
90
  "@babel/core": ">=7.0.0",
@@ -92,12 +92,12 @@
92
92
  },
93
93
  "devDependencies": {
94
94
  "vitest": "^3.2.4",
95
- "@fluojs/platform-bun": "^1.0.2",
96
- "@fluojs/platform-deno": "^1.0.3",
97
- "@fluojs/platform-nodejs": "^1.0.2",
98
- "@fluojs/platform-express": "^1.0.2",
99
- "@fluojs/platform-fastify": "^1.0.3",
100
- "@fluojs/platform-cloudflare-workers": "^1.0.2"
95
+ "@fluojs/platform-bun": "^1.0.5",
96
+ "@fluojs/platform-deno": "^1.0.6",
97
+ "@fluojs/platform-nodejs": "^1.0.5",
98
+ "@fluojs/platform-cloudflare-workers": "^1.0.3",
99
+ "@fluojs/platform-express": "^1.0.5",
100
+ "@fluojs/platform-fastify": "^1.0.6"
101
101
  },
102
102
  "scripts": {
103
103
  "prebuild": "node ../../tooling/scripts/clean-dist.mjs",