@bluelibs/runner 3.4.2 → 4.0.1
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/AI.md +621 -0
- package/README.md +1024 -577
- package/dist/context.d.ts +4 -8
- package/dist/context.js +5 -12
- package/dist/context.js.map +1 -1
- package/dist/define.d.ts +9 -113
- package/dist/define.js +29 -358
- package/dist/define.js.map +1 -1
- package/dist/definers/defineEvent.d.ts +2 -0
- package/dist/definers/defineEvent.js +23 -0
- package/dist/definers/defineEvent.js.map +1 -0
- package/dist/definers/defineHook.d.ts +6 -0
- package/dist/definers/defineHook.js +24 -0
- package/dist/definers/defineHook.js.map +1 -0
- package/dist/definers/defineOverride.d.ts +14 -0
- package/dist/definers/defineOverride.js +13 -0
- package/dist/definers/defineOverride.js.map +1 -0
- package/dist/definers/defineResource.d.ts +2 -0
- package/dist/definers/defineResource.js +69 -0
- package/dist/definers/defineResource.js.map +1 -0
- package/dist/definers/defineResourceMiddleware.d.ts +2 -0
- package/dist/definers/defineResourceMiddleware.js +42 -0
- package/dist/definers/defineResourceMiddleware.js.map +1 -0
- package/dist/definers/defineTag.d.ts +12 -0
- package/dist/definers/defineTag.js +106 -0
- package/dist/definers/defineTag.js.map +1 -0
- package/dist/definers/defineTask.d.ts +15 -0
- package/dist/definers/defineTask.js +42 -0
- package/dist/definers/defineTask.js.map +1 -0
- package/dist/definers/defineTaskMiddleware.d.ts +2 -0
- package/dist/definers/defineTaskMiddleware.js +42 -0
- package/dist/definers/defineTaskMiddleware.js.map +1 -0
- package/dist/definers/tools.d.ts +45 -0
- package/dist/definers/tools.js +75 -0
- package/dist/definers/tools.js.map +1 -0
- package/dist/defs.d.ts +16 -424
- package/dist/defs.js +26 -38
- package/dist/defs.js.map +1 -1
- package/dist/errors.d.ts +23 -8
- package/dist/errors.js +50 -10
- package/dist/errors.js.map +1 -1
- package/dist/globals/globalEvents.d.ts +15 -39
- package/dist/globals/globalEvents.js +20 -81
- package/dist/globals/globalEvents.js.map +1 -1
- package/dist/globals/globalMiddleware.d.ts +24 -17
- package/dist/globals/globalMiddleware.js +12 -4
- package/dist/globals/globalMiddleware.js.map +1 -1
- package/dist/globals/globalResources.d.ts +13 -28
- package/dist/globals/globalResources.js +15 -7
- package/dist/globals/globalResources.js.map +1 -1
- package/dist/globals/globalTags.d.ts +9 -0
- package/dist/globals/globalTags.js +23 -0
- package/dist/globals/globalTags.js.map +1 -0
- package/dist/globals/middleware/cache.middleware.d.ts +10 -17
- package/dist/globals/middleware/cache.middleware.js +4 -16
- package/dist/globals/middleware/cache.middleware.js.map +1 -1
- package/dist/globals/middleware/requireContext.middleware.d.ts +1 -1
- package/dist/globals/middleware/requireContext.middleware.js +5 -14
- package/dist/globals/middleware/requireContext.middleware.js.map +1 -1
- package/dist/globals/middleware/retry.middleware.d.ts +2 -1
- package/dist/globals/middleware/retry.middleware.js +32 -5
- package/dist/globals/middleware/retry.middleware.js.map +1 -1
- package/dist/globals/middleware/timeout.middleware.d.ts +2 -1
- package/dist/globals/middleware/timeout.middleware.js +31 -5
- package/dist/globals/middleware/timeout.middleware.js.map +1 -1
- package/dist/globals/resources/debug/debug.resource.d.ts +7 -0
- package/dist/globals/resources/debug/debug.resource.js +29 -0
- package/dist/globals/resources/debug/debug.resource.js.map +1 -0
- package/dist/globals/resources/debug/debug.tag.d.ts +2 -0
- package/dist/globals/resources/debug/debug.tag.js +12 -0
- package/dist/globals/resources/debug/debug.tag.js.map +1 -0
- package/dist/globals/resources/debug/debugConfig.resource.d.ts +22 -0
- package/dist/globals/resources/debug/debugConfig.resource.js +20 -0
- package/dist/globals/resources/debug/debugConfig.resource.js.map +1 -0
- package/dist/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
- package/dist/globals/resources/debug/executionTracker.middleware.js +87 -0
- package/dist/globals/resources/debug/executionTracker.middleware.js.map +1 -0
- package/dist/globals/resources/debug/globalEvent.hook.d.ts +27 -0
- package/dist/globals/resources/debug/globalEvent.hook.js +38 -0
- package/dist/globals/resources/debug/globalEvent.hook.js.map +1 -0
- package/dist/globals/resources/debug/hook.hook.d.ts +25 -0
- package/dist/globals/resources/debug/hook.hook.js +42 -0
- package/dist/globals/resources/debug/hook.hook.js.map +1 -0
- package/dist/globals/resources/debug/index.d.ts +6 -0
- package/dist/{types → globals/resources/debug}/index.js +6 -11
- package/dist/globals/resources/debug/index.js.map +1 -0
- package/dist/globals/resources/debug/middleware.hook.d.ts +25 -0
- package/dist/globals/resources/debug/middleware.hook.js +71 -0
- package/dist/globals/resources/debug/middleware.hook.js.map +1 -0
- package/dist/globals/resources/debug/types.d.ts +25 -0
- package/dist/globals/resources/debug/types.js +65 -0
- package/dist/globals/resources/debug/types.js.map +1 -0
- package/dist/globals/resources/debug/utils.d.ts +2 -0
- package/dist/globals/resources/debug/utils.js +9 -0
- package/dist/globals/resources/debug/utils.js.map +1 -0
- package/dist/globals/resources/queue.resource.d.ts +3 -3
- package/dist/globals/resources/queue.resource.js.map +1 -1
- package/dist/globals/types.d.ts +1 -0
- package/dist/{task.types.js → globals/types.js} +2 -7
- package/dist/globals/types.js.map +1 -0
- package/dist/index.d.ts +58 -85
- package/dist/index.js +23 -10
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.d.ts +8 -6
- package/dist/models/DependencyProcessor.js +116 -33
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/EventManager.d.ts +127 -7
- package/dist/models/EventManager.js +251 -78
- package/dist/models/EventManager.js.map +1 -1
- package/dist/models/LogPrinter.d.ts +55 -0
- package/dist/models/LogPrinter.js +196 -0
- package/dist/models/LogPrinter.js.map +1 -0
- package/dist/models/Logger.d.ts +47 -27
- package/dist/models/Logger.js +133 -155
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/MiddlewareManager.d.ts +86 -0
- package/dist/models/MiddlewareManager.js +409 -0
- package/dist/models/MiddlewareManager.js.map +1 -0
- package/dist/models/OverrideManager.d.ts +3 -3
- package/dist/models/OverrideManager.js +22 -7
- package/dist/models/OverrideManager.js.map +1 -1
- package/dist/models/ResourceInitializer.d.ts +4 -3
- package/dist/models/ResourceInitializer.js +12 -68
- package/dist/models/ResourceInitializer.js.map +1 -1
- package/dist/models/RunResult.d.ts +35 -0
- package/dist/models/RunResult.js +68 -0
- package/dist/models/RunResult.js.map +1 -0
- package/dist/models/Store.d.ts +30 -17
- package/dist/models/Store.js +87 -25
- package/dist/models/Store.js.map +1 -1
- package/dist/models/StoreRegistry.d.ts +34 -19
- package/dist/models/StoreRegistry.js +248 -100
- package/dist/models/StoreRegistry.js.map +1 -1
- package/dist/models/StoreValidator.d.ts +5 -7
- package/dist/models/StoreValidator.js +50 -17
- package/dist/models/StoreValidator.js.map +1 -1
- package/dist/models/TaskRunner.d.ts +3 -2
- package/dist/models/TaskRunner.js +6 -103
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/models/UnhandledError.d.ts +11 -0
- package/dist/models/UnhandledError.js +30 -0
- package/dist/models/UnhandledError.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -1
- package/dist/{tools → models/utils}/findCircularDependencies.js +8 -16
- package/dist/models/utils/findCircularDependencies.js.map +1 -0
- package/dist/models/utils/safeStringify.d.ts +3 -0
- package/dist/models/utils/safeStringify.js +45 -0
- package/dist/models/utils/safeStringify.js.map +1 -0
- package/dist/processHooks.d.ts +2 -0
- package/dist/processHooks.js +70 -0
- package/dist/processHooks.js.map +1 -0
- package/dist/run.d.ts +14 -27
- package/dist/run.js +100 -36
- package/dist/run.js.map +1 -1
- package/dist/testing.d.ts +5 -4
- package/dist/testing.js +3 -2
- package/dist/testing.js.map +1 -1
- package/dist/tools/getCallerFile.d.ts +0 -8
- package/dist/tools/getCallerFile.js +0 -51
- package/dist/tools/getCallerFile.js.map +1 -1
- package/dist/types/contracts.d.ts +55 -0
- package/dist/types/contracts.js +4 -0
- package/dist/types/contracts.js.map +1 -0
- package/dist/types/event.d.ts +26 -7
- package/dist/types/event.js +1 -1
- package/dist/types/event.js.map +1 -1
- package/dist/types/hook.d.ts +21 -0
- package/dist/{models/StoreTypes.js → types/hook.js} +2 -1
- package/dist/types/hook.js.map +1 -0
- package/dist/types/meta.d.ts +6 -1
- package/dist/types/meta.js +4 -2
- package/dist/types/meta.js.map +1 -1
- package/dist/types/resource.d.ts +40 -52
- package/dist/types/resource.js +1 -0
- package/dist/types/resource.js.map +1 -1
- package/dist/types/resourceMiddleware.d.ts +47 -0
- package/dist/{middleware.types.js → types/resourceMiddleware.js} +1 -1
- package/dist/types/resourceMiddleware.js.map +1 -0
- package/dist/types/runner.d.ts +37 -0
- package/dist/types/{base.js → runner.js} +1 -1
- package/dist/types/runner.js.map +1 -0
- package/dist/types/storeTypes.d.ts +40 -0
- package/dist/types/{metadata.js → storeTypes.js} +1 -1
- package/dist/types/storeTypes.js.map +1 -0
- package/dist/types/symbols.d.ts +10 -21
- package/dist/types/symbols.js +17 -22
- package/dist/types/symbols.js.map +1 -1
- package/dist/types/tag.d.ts +46 -0
- package/dist/{resource.types.js → types/tag.js} +2 -1
- package/dist/types/tag.js.map +1 -0
- package/dist/types/task.d.ts +28 -52
- package/dist/types/task.js +1 -0
- package/dist/types/task.js.map +1 -1
- package/dist/types/taskMiddleware.d.ts +48 -0
- package/dist/{event.types.js → types/taskMiddleware.js} +1 -1
- package/dist/types/taskMiddleware.js.map +1 -0
- package/dist/types/utilities.d.ts +105 -6
- package/dist/types/utilities.js +16 -2
- package/dist/types/utilities.js.map +1 -1
- package/package.json +14 -5
- package/dist/cli/extract-docs.d.ts +0 -2
- package/dist/cli/extract-docs.js +0 -88
- package/dist/cli/extract-docs.js.map +0 -1
- package/dist/common.types.d.ts +0 -20
- package/dist/common.types.js +0 -4
- package/dist/common.types.js.map +0 -1
- package/dist/defs/core.d.ts +0 -144
- package/dist/defs/core.js +0 -6
- package/dist/defs/core.js.map +0 -1
- package/dist/defs/symbols.d.ts +0 -42
- package/dist/defs/symbols.js +0 -45
- package/dist/defs/symbols.js.map +0 -1
- package/dist/defs/tags.d.ts +0 -70
- package/dist/defs/tags.js +0 -6
- package/dist/defs/tags.js.map +0 -1
- package/dist/defs.returnTag.d.ts +0 -36
- package/dist/defs.returnTag.js +0 -4
- package/dist/defs.returnTag.js.map +0 -1
- package/dist/docs/introspect.d.ts +0 -7
- package/dist/docs/introspect.js +0 -199
- package/dist/docs/introspect.js.map +0 -1
- package/dist/docs/markdown.d.ts +0 -2
- package/dist/docs/markdown.js +0 -148
- package/dist/docs/markdown.js.map +0 -1
- package/dist/docs/model.d.ts +0 -62
- package/dist/docs/model.js +0 -33
- package/dist/docs/model.js.map +0 -1
- package/dist/event.types.d.ts +0 -18
- package/dist/event.types.js.map +0 -1
- package/dist/examples/express-mongo/index.d.ts +0 -0
- package/dist/examples/express-mongo/index.js +0 -3
- package/dist/examples/express-mongo/index.js.map +0 -1
- package/dist/examples/registrator-example.d.ts +0 -122
- package/dist/examples/registrator-example.js +0 -147
- package/dist/examples/registrator-example.js.map +0 -1
- package/dist/express/docsRouter.d.ts +0 -12
- package/dist/express/docsRouter.js +0 -54
- package/dist/express/docsRouter.js.map +0 -1
- package/dist/globalEvents.d.ts +0 -40
- package/dist/globalEvents.js +0 -94
- package/dist/globalEvents.js.map +0 -1
- package/dist/globalResources.d.ts +0 -10
- package/dist/globalResources.js +0 -43
- package/dist/globalResources.js.map +0 -1
- package/dist/middleware.types.d.ts +0 -40
- package/dist/middleware.types.js.map +0 -1
- package/dist/models/StoreConstants.d.ts +0 -14
- package/dist/models/StoreConstants.js +0 -19
- package/dist/models/StoreConstants.js.map +0 -1
- package/dist/models/StoreTypes.d.ts +0 -21
- package/dist/models/StoreTypes.js.map +0 -1
- package/dist/models/VarStore.d.ts +0 -17
- package/dist/models/VarStore.js +0 -60
- package/dist/models/VarStore.js.map +0 -1
- package/dist/resource.types.d.ts +0 -31
- package/dist/resource.types.js.map +0 -1
- package/dist/symbols.d.ts +0 -24
- package/dist/symbols.js +0 -29
- package/dist/symbols.js.map +0 -1
- package/dist/t1.d.ts +0 -1
- package/dist/t1.js +0 -13
- package/dist/t1.js.map +0 -1
- package/dist/task.types.d.ts +0 -55
- package/dist/task.types.js.map +0 -1
- package/dist/tools/findCircularDependencies.js.map +0 -1
- package/dist/tools/registratorId.d.ts +0 -4
- package/dist/tools/registratorId.js +0 -40
- package/dist/tools/registratorId.js.map +0 -1
- package/dist/tools/simpleHash.d.ts +0 -9
- package/dist/tools/simpleHash.js +0 -34
- package/dist/tools/simpleHash.js.map +0 -1
- package/dist/types/base-interfaces.d.ts +0 -18
- package/dist/types/base-interfaces.js +0 -6
- package/dist/types/base-interfaces.js.map +0 -1
- package/dist/types/base.d.ts +0 -13
- package/dist/types/base.js.map +0 -1
- package/dist/types/dependencies.d.ts +0 -51
- package/dist/types/dependencies.js +0 -3
- package/dist/types/dependencies.js.map +0 -1
- package/dist/types/dependency-core.d.ts +0 -14
- package/dist/types/dependency-core.js +0 -5
- package/dist/types/dependency-core.js.map +0 -1
- package/dist/types/events.d.ts +0 -52
- package/dist/types/events.js +0 -6
- package/dist/types/events.js.map +0 -1
- package/dist/types/hooks.d.ts +0 -16
- package/dist/types/hooks.js +0 -5
- package/dist/types/hooks.js.map +0 -1
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.js.map +0 -1
- package/dist/types/metadata.d.ts +0 -75
- package/dist/types/metadata.js.map +0 -1
- package/dist/types/middleware.d.ts +0 -63
- package/dist/types/middleware.js +0 -3
- package/dist/types/middleware.js.map +0 -1
- package/dist/types/registerable.d.ts +0 -10
- package/dist/types/registerable.js +0 -5
- package/dist/types/registerable.js.map +0 -1
- package/dist/types/resources.d.ts +0 -44
- package/dist/types/resources.js +0 -5
- package/dist/types/resources.js.map +0 -1
- package/dist/types/tasks.d.ts +0 -41
- package/dist/types/tasks.js +0 -5
- package/dist/types/tasks.js.map +0 -1
- package/src/__tests__/benchmark/benchmark.test.ts +0 -148
- package/src/__tests__/benchmark/task-benchmark.test.ts +0 -132
- package/src/__tests__/context.test.ts +0 -91
- package/src/__tests__/createTestResource.test.ts +0 -139
- package/src/__tests__/errors.test.ts +0 -341
- package/src/__tests__/globalEvents.test.ts +0 -542
- package/src/__tests__/globals/cache.middleware.test.ts +0 -772
- package/src/__tests__/globals/queue.resource.test.ts +0 -141
- package/src/__tests__/globals/requireContext.middleware.test.ts +0 -98
- package/src/__tests__/globals/retry.middleware.test.ts +0 -157
- package/src/__tests__/globals/timeout.middleware.test.ts +0 -88
- package/src/__tests__/index.helper.test.ts +0 -55
- package/src/__tests__/models/EventManager.test.ts +0 -585
- package/src/__tests__/models/Logger.test.ts +0 -519
- package/src/__tests__/models/Queue.test.ts +0 -189
- package/src/__tests__/models/ResourceInitializer.test.ts +0 -148
- package/src/__tests__/models/Semaphore.test.ts +0 -713
- package/src/__tests__/models/Store.test.ts +0 -227
- package/src/__tests__/models/TaskRunner.test.ts +0 -221
- package/src/__tests__/override.test.ts +0 -104
- package/src/__tests__/recursion/README.md +0 -3
- package/src/__tests__/recursion/a.resource.ts +0 -25
- package/src/__tests__/recursion/b.resource.ts +0 -33
- package/src/__tests__/recursion/c.resource.ts +0 -18
- package/src/__tests__/run.anonymous.test.ts +0 -706
- package/src/__tests__/run.dynamic-register-and-dependencies.test.ts +0 -1185
- package/src/__tests__/run.middleware.test.ts +0 -549
- package/src/__tests__/run.overrides.test.ts +0 -424
- package/src/__tests__/run.test.ts +0 -1040
- package/src/__tests__/setOutput.test.ts +0 -244
- package/src/__tests__/tags.test.ts +0 -396
- package/src/__tests__/tools/findCircularDependencies.test.ts +0 -217
- package/src/__tests__/tools/getCallerFile.test.ts +0 -179
- package/src/__tests__/typesafety.test.ts +0 -423
- package/src/__tests__/validation-edge-cases.test.ts +0 -111
- package/src/__tests__/validation-interface.test.ts +0 -428
- package/src/context.ts +0 -86
- package/src/define.ts +0 -480
- package/src/defs.returnTag.ts +0 -91
- package/src/defs.ts +0 -596
- package/src/errors.ts +0 -105
- package/src/globals/globalEvents.ts +0 -125
- package/src/globals/globalMiddleware.ts +0 -16
- package/src/globals/globalResources.ts +0 -53
- package/src/globals/middleware/cache.middleware.ts +0 -115
- package/src/globals/middleware/requireContext.middleware.ts +0 -36
- package/src/globals/middleware/retry.middleware.ts +0 -56
- package/src/globals/middleware/timeout.middleware.ts +0 -46
- package/src/globals/resources/queue.resource.ts +0 -34
- package/src/index.ts +0 -39
- package/src/models/DependencyProcessor.ts +0 -257
- package/src/models/EventManager.ts +0 -210
- package/src/models/Logger.ts +0 -282
- package/src/models/OverrideManager.ts +0 -79
- package/src/models/Queue.ts +0 -66
- package/src/models/ResourceInitializer.ts +0 -165
- package/src/models/Semaphore.ts +0 -208
- package/src/models/Store.ts +0 -193
- package/src/models/StoreConstants.ts +0 -18
- package/src/models/StoreRegistry.ts +0 -253
- package/src/models/StoreTypes.ts +0 -47
- package/src/models/StoreValidator.ts +0 -43
- package/src/models/TaskRunner.ts +0 -203
- package/src/models/index.ts +0 -8
- package/src/run.ts +0 -116
- package/src/testing.ts +0 -66
- package/src/tools/findCircularDependencies.ts +0 -69
- package/src/tools/getCallerFile.ts +0 -96
- /package/dist/{tools → models/utils}/findCircularDependencies.d.ts +0 -0
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { DependencyNotFoundError, DuplicateRegistrationError } from "../errors";
|
|
2
|
-
import {
|
|
3
|
-
TaskStoreElementType,
|
|
4
|
-
MiddlewareStoreElementType,
|
|
5
|
-
ResourceStoreElementType,
|
|
6
|
-
EventStoreElementType,
|
|
7
|
-
} from "./StoreTypes";
|
|
8
|
-
|
|
9
|
-
export class StoreValidator {
|
|
10
|
-
constructor(
|
|
11
|
-
private tasks: Map<string | symbol, TaskStoreElementType>,
|
|
12
|
-
private resources: Map<string | symbol, ResourceStoreElementType>,
|
|
13
|
-
private events: Map<string | symbol, EventStoreElementType>,
|
|
14
|
-
private middlewares: Map<string | symbol, MiddlewareStoreElementType>
|
|
15
|
-
) {}
|
|
16
|
-
|
|
17
|
-
checkIfIDExists(id: string | symbol): void | never {
|
|
18
|
-
if (this.tasks.has(id)) {
|
|
19
|
-
throw new DuplicateRegistrationError("Task", id);
|
|
20
|
-
}
|
|
21
|
-
if (this.resources.has(id)) {
|
|
22
|
-
throw new DuplicateRegistrationError("Resource", id);
|
|
23
|
-
}
|
|
24
|
-
if (this.events.has(id)) {
|
|
25
|
-
throw new DuplicateRegistrationError("Event", id);
|
|
26
|
-
}
|
|
27
|
-
if (this.middlewares.has(id)) {
|
|
28
|
-
throw new DuplicateRegistrationError("Middleware", id);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
runSanityChecks() {
|
|
33
|
-
for (const task of this.tasks.values()) {
|
|
34
|
-
task.task.middleware.forEach((middleware) => {
|
|
35
|
-
if (!this.middlewares.has(middleware.id)) {
|
|
36
|
-
throw new DependencyNotFoundError(
|
|
37
|
-
`Middleware ${middleware.id.toString()} in Task ${task.task.id.toString()}`
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
package/src/models/TaskRunner.ts
DELETED
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { DependencyMapType, DependencyValuesType, ITask } from "../defs";
|
|
2
|
-
import { EventManager } from "./EventManager";
|
|
3
|
-
import { globalEvents } from "../globals/globalEvents";
|
|
4
|
-
import { Store } from "./Store";
|
|
5
|
-
import { MiddlewareStoreElementType } from "./StoreTypes";
|
|
6
|
-
import { Logger } from "./Logger";
|
|
7
|
-
import { ValidationError } from "../errors";
|
|
8
|
-
|
|
9
|
-
export class TaskRunner {
|
|
10
|
-
protected readonly runnerStore = new Map<
|
|
11
|
-
string | symbol,
|
|
12
|
-
(input: any) => Promise<any>
|
|
13
|
-
>();
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
protected readonly store: Store,
|
|
17
|
-
protected readonly eventManager: EventManager,
|
|
18
|
-
protected readonly logger: Logger
|
|
19
|
-
) {}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
|
|
23
|
-
* This function can throw only if any of the event listeners or run function throws
|
|
24
|
-
* @param task the task to be run
|
|
25
|
-
* @param input the input to be passed to the task
|
|
26
|
-
*/
|
|
27
|
-
public async run<
|
|
28
|
-
TInput,
|
|
29
|
-
TOutput extends Promise<any>,
|
|
30
|
-
TDeps extends DependencyMapType
|
|
31
|
-
>(
|
|
32
|
-
task: ITask<TInput, TOutput, TDeps>,
|
|
33
|
-
input: TInput
|
|
34
|
-
): Promise<TOutput | undefined> {
|
|
35
|
-
let runner = this.runnerStore.get(task.id);
|
|
36
|
-
if (!runner) {
|
|
37
|
-
runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);
|
|
38
|
-
|
|
39
|
-
this.runnerStore.set(task.id, runner);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const isGlobalEventListener = task.on === "*";
|
|
43
|
-
|
|
44
|
-
if (!isGlobalEventListener) {
|
|
45
|
-
await this.eventManager.emit(task.events.beforeRun, { input }, task.id);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
!isGlobalEventListener &&
|
|
50
|
-
task.on !== globalEvents.tasks.beforeRun &&
|
|
51
|
-
task.on !== globalEvents.tasks.afterRun
|
|
52
|
-
) {
|
|
53
|
-
await this.eventManager.emit(
|
|
54
|
-
globalEvents.tasks.beforeRun,
|
|
55
|
-
{
|
|
56
|
-
task,
|
|
57
|
-
input,
|
|
58
|
-
},
|
|
59
|
-
task.id
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let error;
|
|
64
|
-
try {
|
|
65
|
-
// craft the next function starting from the first next function
|
|
66
|
-
const result = {
|
|
67
|
-
output: await runner(input),
|
|
68
|
-
};
|
|
69
|
-
const setOutput = (newOutput: any) => {
|
|
70
|
-
result.output = newOutput;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// If it's a global event listener, we stop emitting so we don't get into an infinite loop.
|
|
74
|
-
if (!isGlobalEventListener) {
|
|
75
|
-
await this.eventManager.emit(
|
|
76
|
-
task.events.afterRun,
|
|
77
|
-
{
|
|
78
|
-
input,
|
|
79
|
-
get output() {
|
|
80
|
-
return result.output;
|
|
81
|
-
},
|
|
82
|
-
setOutput,
|
|
83
|
-
},
|
|
84
|
-
task.id
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
!isGlobalEventListener &&
|
|
90
|
-
task.on !== globalEvents.tasks.beforeRun &&
|
|
91
|
-
task.on !== globalEvents.tasks.afterRun
|
|
92
|
-
) {
|
|
93
|
-
// If it's a lifecycle listener we prevent from emitting further events.
|
|
94
|
-
await this.eventManager.emit(
|
|
95
|
-
globalEvents.tasks.afterRun,
|
|
96
|
-
{
|
|
97
|
-
task,
|
|
98
|
-
input,
|
|
99
|
-
get output() {
|
|
100
|
-
return result.output;
|
|
101
|
-
},
|
|
102
|
-
setOutput,
|
|
103
|
-
},
|
|
104
|
-
task.id
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return result.output;
|
|
109
|
-
} catch (e) {
|
|
110
|
-
let isSuppressed = false;
|
|
111
|
-
function suppress() {
|
|
112
|
-
isSuppressed = true;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
error = e;
|
|
116
|
-
|
|
117
|
-
// If you want to rewthrow the error, this should be done inside the onError event.
|
|
118
|
-
await this.eventManager.emit(
|
|
119
|
-
task.events.onError,
|
|
120
|
-
{ error, suppress },
|
|
121
|
-
task.id
|
|
122
|
-
);
|
|
123
|
-
await this.eventManager.emit(
|
|
124
|
-
globalEvents.tasks.onError,
|
|
125
|
-
{
|
|
126
|
-
task,
|
|
127
|
-
error,
|
|
128
|
-
suppress,
|
|
129
|
-
},
|
|
130
|
-
task.id
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
if (!isSuppressed) throw e;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Creates the function with the chain of middleware.
|
|
139
|
-
* @param task
|
|
140
|
-
* @param input
|
|
141
|
-
* @param taskDependencies
|
|
142
|
-
* @returns
|
|
143
|
-
*/
|
|
144
|
-
protected createRunnerWithMiddleware<
|
|
145
|
-
TInput,
|
|
146
|
-
TOutput extends Promise<any>,
|
|
147
|
-
TDeps extends DependencyMapType
|
|
148
|
-
>(task: ITask<TInput, TOutput, TDeps>) {
|
|
149
|
-
const storeTask = this.store.tasks.get(task.id);
|
|
150
|
-
|
|
151
|
-
// this is the final next()
|
|
152
|
-
let next = async (input: any) => {
|
|
153
|
-
// Validate input with schema if provided
|
|
154
|
-
if (task.inputSchema) {
|
|
155
|
-
try {
|
|
156
|
-
input = task.inputSchema.parse(input);
|
|
157
|
-
} catch (error) {
|
|
158
|
-
throw new ValidationError("Task input", task.id, error instanceof Error ? error : new Error(String(error)));
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return task.run.call(null, input, storeTask?.computedDependencies as any);
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
const existingMiddlewares = task.middleware;
|
|
166
|
-
const createdMiddlewares = [
|
|
167
|
-
...this.store.getEverywhereMiddlewareForTasks(
|
|
168
|
-
existingMiddlewares.map((x) => x.id)
|
|
169
|
-
),
|
|
170
|
-
...existingMiddlewares,
|
|
171
|
-
];
|
|
172
|
-
|
|
173
|
-
if (createdMiddlewares.length === 0) {
|
|
174
|
-
return next;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// we need to run the middleware in reverse order
|
|
178
|
-
// so we can chain the next function
|
|
179
|
-
for (let i = createdMiddlewares.length - 1; i >= 0; i--) {
|
|
180
|
-
const middleware = createdMiddlewares[i];
|
|
181
|
-
const storeMiddleware = this.store.middlewares.get(
|
|
182
|
-
middleware.id
|
|
183
|
-
) as MiddlewareStoreElementType; // we know it exists because at this stage all sanity checks have been done.
|
|
184
|
-
|
|
185
|
-
const nextFunction = next;
|
|
186
|
-
next = async (input) => {
|
|
187
|
-
return storeMiddleware.middleware.run(
|
|
188
|
-
{
|
|
189
|
-
task: {
|
|
190
|
-
definition: task as any,
|
|
191
|
-
input,
|
|
192
|
-
},
|
|
193
|
-
next: nextFunction,
|
|
194
|
-
},
|
|
195
|
-
storeMiddleware.computedDependencies,
|
|
196
|
-
middleware.config
|
|
197
|
-
);
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return next;
|
|
202
|
-
}
|
|
203
|
-
}
|
package/src/models/index.ts
DELETED
package/src/run.ts
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { TaskRunner } from "./models/TaskRunner";
|
|
2
|
-
import {
|
|
3
|
-
DependencyMapType,
|
|
4
|
-
ITaskDefinition,
|
|
5
|
-
IResourceDefinition,
|
|
6
|
-
IEventDefinition,
|
|
7
|
-
IMiddlewareDefinition,
|
|
8
|
-
DependencyValuesType,
|
|
9
|
-
IResource,
|
|
10
|
-
} from "./defs";
|
|
11
|
-
import { DependencyProcessor } from "./models/DependencyProcessor";
|
|
12
|
-
import { EventManager } from "./models/EventManager";
|
|
13
|
-
import { globalEvents } from "./globals/globalEvents";
|
|
14
|
-
import { Store } from "./models/Store";
|
|
15
|
-
import { findCircularDependencies } from "./tools/findCircularDependencies";
|
|
16
|
-
import { CircularDependenciesError } from "./errors";
|
|
17
|
-
import { globalResources } from "./globals/globalResources";
|
|
18
|
-
import { Logger } from "./models/Logger";
|
|
19
|
-
|
|
20
|
-
export type ResourcesStoreElementType<
|
|
21
|
-
C = any,
|
|
22
|
-
V extends Promise<any> = any,
|
|
23
|
-
D extends DependencyMapType = {}
|
|
24
|
-
> = {
|
|
25
|
-
resource: IResourceDefinition<C, V, D>;
|
|
26
|
-
computedDependencies?: DependencyValuesType<D>;
|
|
27
|
-
config: C;
|
|
28
|
-
value: V;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export type TasksStoreElementType<
|
|
32
|
-
Input = any,
|
|
33
|
-
Output extends Promise<any> = any,
|
|
34
|
-
D extends DependencyMapType = {}
|
|
35
|
-
> = {
|
|
36
|
-
task: ITaskDefinition<Input, Output, D>;
|
|
37
|
-
computedDependencies?: DependencyValuesType<D>;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export type MiddlewareStoreElementType = {
|
|
41
|
-
middleware: IMiddlewareDefinition;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export type EventStoreElementType = {
|
|
45
|
-
event: IEventDefinition;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export type RunnerState = {
|
|
49
|
-
tasks: Record<string, TasksStoreElementType>;
|
|
50
|
-
resources: Record<string, ResourcesStoreElementType>;
|
|
51
|
-
events: Record<string, EventStoreElementType>;
|
|
52
|
-
middleware: Record<string, MiddlewareStoreElementType>;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export async function run<C, V>(
|
|
56
|
-
resource: IResource<C, V extends Promise<any> ? V : Promise<any>>,
|
|
57
|
-
config?: C
|
|
58
|
-
): Promise<{
|
|
59
|
-
value: V extends Promise<infer U> ? U : V;
|
|
60
|
-
dispose: () => Promise<void>;
|
|
61
|
-
}> {
|
|
62
|
-
const eventManager = new EventManager();
|
|
63
|
-
|
|
64
|
-
// ensure for logger, that it can be used only after: computeAllDependencies() has executed
|
|
65
|
-
const logger = new Logger(eventManager);
|
|
66
|
-
|
|
67
|
-
const store = new Store(eventManager, logger);
|
|
68
|
-
const taskRunner = new TaskRunner(store, eventManager, logger);
|
|
69
|
-
const processor = new DependencyProcessor(
|
|
70
|
-
store,
|
|
71
|
-
eventManager,
|
|
72
|
-
taskRunner,
|
|
73
|
-
logger
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
// In the registration phase we register deeply all the resources, tasks, middleware and events
|
|
77
|
-
store.initializeStore(resource, config);
|
|
78
|
-
store.storeGenericItem(globalResources.logger.with(logger));
|
|
79
|
-
store.storeGenericItem(globalResources.taskRunner.with(taskRunner));
|
|
80
|
-
|
|
81
|
-
// We verify that there isn't any circular dependencies before we begin computing the dependencies
|
|
82
|
-
const dependentNodes = store.getDependentNodes();
|
|
83
|
-
const circularDependencies = findCircularDependencies(dependentNodes);
|
|
84
|
-
if (circularDependencies.cycles.length > 0) {
|
|
85
|
-
throw new CircularDependenciesError(circularDependencies.cycles);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// the overrides that were registered now will override the other registered resources
|
|
89
|
-
await store.processOverrides();
|
|
90
|
-
|
|
91
|
-
// a form of hooking, we create the events for all tasks and store them so they can be referenced
|
|
92
|
-
await store.storeEventsForAllTasks();
|
|
93
|
-
await processor.attachListeners();
|
|
94
|
-
await processor.computeAllDependencies();
|
|
95
|
-
|
|
96
|
-
// After this stage, logger print policy could have been set.
|
|
97
|
-
await logger.debug("All elements have been initalized..");
|
|
98
|
-
|
|
99
|
-
// Now we can safely compute dependencies without being afraid of an infinite loop.
|
|
100
|
-
// The hooking part is done here.
|
|
101
|
-
await eventManager.emit(globalEvents.beforeInit, null, resource.id);
|
|
102
|
-
|
|
103
|
-
// Now we can initialise the root resource
|
|
104
|
-
await processor.initializeRoot();
|
|
105
|
-
|
|
106
|
-
await eventManager.emit(globalEvents.afterInit, null, resource.id);
|
|
107
|
-
await logger.debug("System initialized and operational.");
|
|
108
|
-
|
|
109
|
-
// disallow manipulation or attaching more
|
|
110
|
-
store.lock();
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
value: store.root.value,
|
|
114
|
-
dispose: () => store.dispose(),
|
|
115
|
-
};
|
|
116
|
-
}
|
package/src/testing.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { defineResource } from "./define";
|
|
2
|
-
import { globalResources } from "./globals/globalResources";
|
|
3
|
-
import {
|
|
4
|
-
IResource,
|
|
5
|
-
IResourceWithConfig,
|
|
6
|
-
IMiddleware,
|
|
7
|
-
ITask,
|
|
8
|
-
RegisterableItems,
|
|
9
|
-
IEvent,
|
|
10
|
-
IEventEmission,
|
|
11
|
-
DependencyMapType,
|
|
12
|
-
DependencyValuesType,
|
|
13
|
-
} from "./defs";
|
|
14
|
-
import { EventManager, Logger, Store, TaskRunner } from "./models";
|
|
15
|
-
|
|
16
|
-
let testResourceCounter = 0;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Helper to create a minimal test harness resource that wraps a root app (or any registerable)
|
|
20
|
-
* and exposes convenient testing utilities while running the full ecosystem
|
|
21
|
-
* (registration, overrides, middleware, events) without modifying the core API.
|
|
22
|
-
*/
|
|
23
|
-
export function createTestResource(
|
|
24
|
-
root: RegisterableItems,
|
|
25
|
-
options?: {
|
|
26
|
-
overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
27
|
-
}
|
|
28
|
-
): IResource<void, Promise<ReturnType<typeof buildTestFacade>>> {
|
|
29
|
-
return defineResource({
|
|
30
|
-
id: `tests.createTestResource.${++testResourceCounter}`,
|
|
31
|
-
register: [root],
|
|
32
|
-
overrides: options?.overrides || [],
|
|
33
|
-
dependencies: {
|
|
34
|
-
taskRunner: globalResources.taskRunner,
|
|
35
|
-
store: globalResources.store,
|
|
36
|
-
logger: globalResources.logger,
|
|
37
|
-
eventManager: globalResources.eventManager,
|
|
38
|
-
},
|
|
39
|
-
async init(_, deps) {
|
|
40
|
-
return buildTestFacade(deps);
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function buildTestFacade(deps: {
|
|
46
|
-
taskRunner: TaskRunner;
|
|
47
|
-
store: Store;
|
|
48
|
-
logger: Logger;
|
|
49
|
-
eventManager: EventManager;
|
|
50
|
-
}) {
|
|
51
|
-
return {
|
|
52
|
-
// Run a task within the fully initialized ecosystem
|
|
53
|
-
runTask: <I, O extends Promise<any>, D extends DependencyMapType>(
|
|
54
|
-
task: ITask<I, O, D>,
|
|
55
|
-
input: I
|
|
56
|
-
): Promise<Awaited<O> | undefined> =>
|
|
57
|
-
deps.taskRunner.run(task, input) as any,
|
|
58
|
-
// Access a resource value by id (string or symbol)
|
|
59
|
-
getResource: (id: string | symbol) => deps.store.resources.get(id)?.value,
|
|
60
|
-
// Expose internals when needed in tests (not recommended for app usage)
|
|
61
|
-
taskRunner: deps.taskRunner,
|
|
62
|
-
store: deps.store,
|
|
63
|
-
logger: deps.logger,
|
|
64
|
-
eventManager: deps.eventManager,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A node that has dependencies.
|
|
3
|
-
*/
|
|
4
|
-
export interface IDependentNode {
|
|
5
|
-
id: string;
|
|
6
|
-
dependencies: Record<string, IDependentNode>;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface FindCircularDependenciesResult {
|
|
10
|
-
cycles: string[];
|
|
11
|
-
missingDependencies: Array<{ nodeId: string; dependencyId: string }>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function findCircularDependencies(
|
|
15
|
-
nodes: IDependentNode[]
|
|
16
|
-
): FindCircularDependenciesResult {
|
|
17
|
-
const result: FindCircularDependenciesResult = {
|
|
18
|
-
cycles: [],
|
|
19
|
-
missingDependencies: [],
|
|
20
|
-
};
|
|
21
|
-
const visited: Set<string> = new Set();
|
|
22
|
-
const stack: Set<string> = new Set();
|
|
23
|
-
const path: string[] = [];
|
|
24
|
-
|
|
25
|
-
function dfs(node: IDependentNode): void {
|
|
26
|
-
if (stack.has(node.id)) {
|
|
27
|
-
const cycleStartIndex = path.indexOf(node.id);
|
|
28
|
-
const cycle = path.slice(cycleStartIndex).concat(node.id).join(" -> ");
|
|
29
|
-
result.cycles.push(cycle);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (visited.has(node.id)) return;
|
|
34
|
-
|
|
35
|
-
visited.add(node.id);
|
|
36
|
-
stack.add(node.id);
|
|
37
|
-
path.push(node.id);
|
|
38
|
-
|
|
39
|
-
if (node.dependencies && typeof node.dependencies === "object") {
|
|
40
|
-
for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {
|
|
41
|
-
if (!dependentNode) {
|
|
42
|
-
result.missingDependencies.push({
|
|
43
|
-
nodeId: node.id,
|
|
44
|
-
dependencyId: depKey,
|
|
45
|
-
});
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
dfs(dependentNode);
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
result.missingDependencies.push({
|
|
52
|
-
nodeId: node.id,
|
|
53
|
-
dependencyId: "unknown",
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
stack.delete(node.id);
|
|
58
|
-
path.pop();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
for (const node of nodes) {
|
|
62
|
-
if (!visited.has(node.id)) {
|
|
63
|
-
dfs(node);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
result.cycles = Array.from(new Set(result.cycles)); // Remove duplicate cycles
|
|
68
|
-
return result;
|
|
69
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
export function getCallerFile(): string {
|
|
2
|
-
const originalFunc = Error.prepareStackTrace;
|
|
3
|
-
|
|
4
|
-
try {
|
|
5
|
-
const err = new Error();
|
|
6
|
-
let callerfile;
|
|
7
|
-
let currentfile;
|
|
8
|
-
|
|
9
|
-
// Safeguard prepareStackTrace
|
|
10
|
-
Error.prepareStackTrace = (err, stack) => stack;
|
|
11
|
-
|
|
12
|
-
const stack = err.stack as unknown as NodeJS.CallSite[];
|
|
13
|
-
|
|
14
|
-
// Don't know how to test this.
|
|
15
|
-
// if (stack.length < 3) {
|
|
16
|
-
// // We need at least 3 frames: current function, its caller, and one above
|
|
17
|
-
// return undefined;
|
|
18
|
-
// }
|
|
19
|
-
|
|
20
|
-
// Remove the first frame (getCallerFile itself)
|
|
21
|
-
stack.shift();
|
|
22
|
-
|
|
23
|
-
// Remove the second frame (the direct caller of getCallerFile)
|
|
24
|
-
currentfile = stack.shift()?.getFileName();
|
|
25
|
-
|
|
26
|
-
// The third frame (the caller above the immediate one)
|
|
27
|
-
callerfile = stack.shift()?.getFileName();
|
|
28
|
-
|
|
29
|
-
return callerfile as string; // Return the file name of the caller above
|
|
30
|
-
} finally {
|
|
31
|
-
Error.prepareStackTrace = originalFunc;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Gets a file path, looks at all the parts between current path and 'src' and generates a unique symbol based on that.
|
|
37
|
-
* If there is no 'src' to be found, it will rely on using the last 4 parts of the path.
|
|
38
|
-
* This is useful for generating unique IDs for tasks, resources, etc.
|
|
39
|
-
* @param filePath
|
|
40
|
-
* @returns
|
|
41
|
-
*/
|
|
42
|
-
export function generateCallerIdFromFile(
|
|
43
|
-
filePath: string,
|
|
44
|
-
suffix: string = "",
|
|
45
|
-
fallbackParts: number = 4
|
|
46
|
-
): symbol {
|
|
47
|
-
// Normalize paths for consistency across platforms
|
|
48
|
-
const normalizedPath = filePath.replace(/\\/g, "/");
|
|
49
|
-
const cwdNormalized = process.cwd().replace(/\\/g, "/");
|
|
50
|
-
|
|
51
|
-
const parts = normalizedPath.split("/");
|
|
52
|
-
const nodeModulesIndex = parts.lastIndexOf("node_modules");
|
|
53
|
-
|
|
54
|
-
let relevantParts: string[];
|
|
55
|
-
|
|
56
|
-
if (nodeModulesIndex !== -1) {
|
|
57
|
-
// If inside node_modules, generate id relative to the package path
|
|
58
|
-
relevantParts = parts.slice(nodeModulesIndex + 1);
|
|
59
|
-
} else if (
|
|
60
|
-
normalizedPath === cwdNormalized ||
|
|
61
|
-
normalizedPath.startsWith(cwdNormalized + "/")
|
|
62
|
-
) {
|
|
63
|
-
// Prefer generating id relative to the workspace root (process.cwd())
|
|
64
|
-
const relativeToCwd = normalizedPath
|
|
65
|
-
.slice(cwdNormalized.length)
|
|
66
|
-
.replace(/^\//, "");
|
|
67
|
-
relevantParts = relativeToCwd.length > 0 ? relativeToCwd.split("/") : [""];
|
|
68
|
-
} else {
|
|
69
|
-
// Fallback: use the last N parts if path is outside cwd and not in node_modules
|
|
70
|
-
relevantParts = parts.slice(-fallbackParts);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (relevantParts.length > 0) {
|
|
74
|
-
const lastPartIndex = relevantParts.length - 1;
|
|
75
|
-
const lastPart = relevantParts[lastPartIndex];
|
|
76
|
-
const dotIndex = lastPart.lastIndexOf(".");
|
|
77
|
-
if (dotIndex !== -1 && dotIndex > 0) {
|
|
78
|
-
const extension = lastPart.substring(dotIndex + 1);
|
|
79
|
-
const knownExtensions = ["ts", "js", "tsx", "jsx", "json", "node"];
|
|
80
|
-
if (knownExtensions.includes(extension)) {
|
|
81
|
-
relevantParts[lastPartIndex] = lastPart.substring(0, dotIndex);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const id = relevantParts.join(".");
|
|
87
|
-
const lastPart =
|
|
88
|
-
relevantParts.length > 0 ? relevantParts[relevantParts.length - 1] : "";
|
|
89
|
-
|
|
90
|
-
let finalId = id;
|
|
91
|
-
if (suffix && !lastPart.includes(suffix)) {
|
|
92
|
-
finalId += "." + suffix;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return Symbol(finalId);
|
|
96
|
-
}
|
|
File without changes
|