Skip to content
This repository was archived by the owner on Apr 21, 2024. It is now read-only.

Commit 54de00e

Browse files
committed
perf: avoid container clone when possible
1 parent 876a83a commit 54de00e

File tree

2 files changed

+43
-19
lines changed

2 files changed

+43
-19
lines changed

lambda-ioc/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@coderspirit/lambda-ioc",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"main": "./dist/cjs/index.js",
55
"module": "./dist/esm/index.js",
66
"types": "./dist/cjs/index.d.ts",

lambda-ioc/src/container.ts

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -287,13 +287,21 @@ function __createContainer<
287287
Container<TSyncDependencies, {}>
288288
>,
289289
): ContainerWithNewSyncDep<TName, TDependency> {
290-
return __createContainer(
291-
{
292-
...syncDependencies,
293-
[name]: dependency,
294-
},
295-
asyncDependencies,
296-
) as ContainerWithNewSyncDep<TName, TDependency>
290+
if (name in syncDependencies) {
291+
return __createContainer(
292+
{
293+
...syncDependencies,
294+
[name]: dependency,
295+
},
296+
asyncDependencies,
297+
) as ContainerWithNewSyncDep<TName, TDependency>
298+
} else {
299+
;(syncDependencies as Record<TName, unknown>)[name] = dependency
300+
return __createContainer(
301+
syncDependencies,
302+
asyncDependencies,
303+
) as ContainerWithNewSyncDep<TName, TDependency>
304+
}
297305
},
298306

299307
registerAsync<TName extends ContainerKey, TDependency>(
@@ -303,23 +311,39 @@ function __createContainer<
303311
Container<TSyncDependencies, TAsyncDependencies>
304312
>,
305313
): ContainerWithNewAsyncDep<TName, TDependency> {
306-
return __createContainer(syncDependencies, {
307-
...asyncDependencies,
308-
[name]: dependency,
309-
}) as ContainerWithNewAsyncDep<TName, TDependency>
314+
if (name in asyncDependencies) {
315+
return __createContainer(syncDependencies, {
316+
...asyncDependencies,
317+
[name]: dependency,
318+
}) as ContainerWithNewAsyncDep<TName, TDependency>
319+
} else {
320+
;(asyncDependencies as Record<TName, unknown>)[name] = dependency
321+
return __createContainer(
322+
syncDependencies,
323+
asyncDependencies,
324+
) as ContainerWithNewAsyncDep<TName, TDependency>
325+
}
310326
},
311327

312328
registerValue<TName extends ContainerKey, TDependency>(
313329
name: TName,
314330
dependency: TDependency,
315331
): ContainerWithNewSyncDep<TName, TDependency> {
316-
return __createContainer(
317-
{
318-
...syncDependencies,
319-
[name]: () => dependency,
320-
},
321-
asyncDependencies,
322-
) as ContainerWithNewSyncDep<TName, TDependency>
332+
if (name in syncDependencies) {
333+
return __createContainer(
334+
{
335+
...syncDependencies,
336+
[name]: () => dependency,
337+
},
338+
asyncDependencies,
339+
) as ContainerWithNewSyncDep<TName, TDependency>
340+
} else {
341+
;(syncDependencies as Record<TName, unknown>)[name] = () => dependency
342+
return __createContainer(
343+
syncDependencies,
344+
asyncDependencies,
345+
) as ContainerWithNewSyncDep<TName, TDependency>
346+
}
323347
},
324348

325349
resolve<TName extends keyof TSyncDependencies>(

0 commit comments

Comments
 (0)