liminal 0.4.0 → 0.5.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/Action.ts +29 -0
- package/Actor.ts +20 -0
- package/CHANGELOG.md +14 -0
- package/Exec.ts +63 -0
- package/L.ts +27 -0
- package/LiminalAssertionError.ts +3 -0
- package/LiminalConfig.ts +7 -0
- package/Message.ts +94 -0
- package/Model.ts +20 -0
- package/PathLike.ts +19 -0
- package/Scope.ts +133 -0
- package/Spec.ts +29 -0
- package/Tool.ts +58 -0
- package/_.ts +11 -0
- package/actions/abort.ts +23 -0
- package/actions/actions_common/updateModels.ts +23 -0
- package/actions/actions_derived/__snapshots__/declareModel.test.ts.snap +89 -0
- package/actions/actions_derived/clear.ts +6 -0
- package/actions/actions_derived/declareModel.test.ts +33 -0
- package/actions/actions_derived/declareModel.ts +9 -0
- package/actions/actions_derived/declareModel.type-test.ts +70 -0
- package/actions/actions_derived/getMessages.ts +9 -0
- package/actions/actions_derived/messages.test.ts +88 -0
- package/actions/actions_derived/messages.ts +19 -0
- package/actions/actions_derived/metatype.ts +9 -0
- package/actions/appendMessage.ts +30 -0
- package/actions/await.ts +13 -0
- package/actions/branch.ts +108 -0
- package/actions/catch.ts +42 -0
- package/actions/declareArg.ts +14 -0
- package/actions/disableTool.ts +26 -0
- package/actions/embed.ts +28 -0
- package/actions/emit.ts +21 -0
- package/actions/enableTool.ts +75 -0
- package/actions/enableTool.type-test.ts +118 -0
- package/actions/getScope.ts +11 -0
- package/actions/getSignal.ts +10 -0
- package/actions/getTools.ts +11 -0
- package/actions/infer.ts +37 -0
- package/actions/pushModel.ts +32 -0
- package/actions/removeMessage.ts +22 -0
- package/actions/removeModel.ts +31 -0
- package/actions/setMessages.ts +66 -0
- package/actions/throw.ts +18 -0
- package/cli/WriteHandler.ts +35 -0
- package/cli/cli_common.ts +3 -0
- package/cli/main.ts +19 -0
- package/cli/runExec.ts +68 -0
- package/dist/Action.d.ts +15 -0
- package/dist/Action.js +13 -0
- package/dist/Action.js.map +1 -0
- package/dist/Actor.d.ts +14 -0
- package/dist/Actor.js +2 -0
- package/dist/Actor.js.map +1 -0
- package/dist/Exec.d.ts +27 -0
- package/dist/Exec.js +22 -0
- package/dist/Exec.js.map +1 -0
- package/dist/L.d.ts +26 -0
- package/dist/L.js +27 -0
- package/dist/L.js.map +1 -0
- package/dist/LiminalAssertionError.d.ts +3 -0
- package/dist/LiminalAssertionError.js +4 -0
- package/dist/LiminalAssertionError.js.map +1 -0
- package/dist/LiminalConfig.d.ts +6 -0
- package/dist/LiminalConfig.js +2 -0
- package/dist/LiminalConfig.js.map +1 -0
- package/dist/Message.d.ts +82 -0
- package/dist/Message.js +2 -0
- package/dist/Message.js.map +1 -0
- package/dist/Model.d.ts +16 -0
- package/dist/Model.js +2 -0
- package/dist/Model.js.map +1 -0
- package/dist/PathLike.d.ts +14 -0
- package/dist/PathLike.js +2 -0
- package/dist/PathLike.js.map +1 -0
- package/dist/Scope.d.ts +36 -0
- package/dist/Scope.js +90 -0
- package/dist/Scope.js.map +1 -0
- package/dist/Spec.d.ts +20 -0
- package/dist/Spec.js +2 -0
- package/dist/Spec.js.map +1 -0
- package/dist/Tool.d.ts +21 -0
- package/dist/Tool.js +32 -0
- package/dist/Tool.js.map +1 -0
- package/dist/_.d.ts +5 -0
- package/dist/_.js +7 -0
- package/dist/_.js.map +1 -0
- package/dist/actions/abort.d.ts +9 -0
- package/dist/actions/abort.js +15 -0
- package/dist/actions/abort.js.map +1 -0
- package/dist/actions/actions_common/updateModels.d.ts +3 -0
- package/dist/actions/actions_common/updateModels.js +17 -0
- package/dist/actions/actions_common/updateModels.js.map +1 -0
- package/dist/actions/actions_derived/clear.d.ts +8 -0
- package/dist/actions/actions_derived/clear.js +5 -0
- package/dist/actions/actions_derived/clear.js.map +1 -0
- package/dist/actions/actions_derived/declareModel.d.ts +5 -0
- package/dist/actions/actions_derived/declareModel.js +7 -0
- package/dist/actions/actions_derived/declareModel.js.map +1 -0
- package/dist/actions/actions_derived/declareModel.test.d.ts +1 -0
- package/dist/actions/actions_derived/declareModel.test.js +32 -0
- package/dist/actions/actions_derived/declareModel.test.js.map +1 -0
- package/dist/actions/actions_derived/declareModel.type-test.d.ts +1 -0
- package/dist/actions/actions_derived/declareModel.type-test.js +66 -0
- package/dist/actions/actions_derived/declareModel.type-test.js.map +1 -0
- package/dist/actions/actions_derived/getMessages.d.ts +3 -0
- package/dist/actions/actions_derived/getMessages.js +8 -0
- package/dist/actions/actions_derived/getMessages.js.map +1 -0
- package/dist/actions/actions_derived/messages.d.ts +6 -0
- package/dist/actions/actions_derived/messages.js +15 -0
- package/dist/actions/actions_derived/messages.js.map +1 -0
- package/dist/actions/actions_derived/messages.test.d.ts +1 -0
- package/dist/actions/actions_derived/messages.test.js +72 -0
- package/dist/actions/actions_derived/messages.test.js.map +1 -0
- package/dist/actions/actions_derived/metatype.d.ts +9 -0
- package/dist/actions/actions_derived/metatype.js +7 -0
- package/dist/actions/actions_derived/metatype.js.map +1 -0
- package/dist/actions/appendMessage.d.ts +10 -0
- package/dist/actions/appendMessage.js +20 -0
- package/dist/actions/appendMessage.js.map +1 -0
- package/dist/actions/await.d.ts +5 -0
- package/dist/actions/await.js +10 -0
- package/dist/actions/await.js.map +1 -0
- package/dist/actions/branch.d.ts +35 -0
- package/dist/actions/branch.js +40 -0
- package/dist/actions/branch.js.map +1 -0
- package/dist/actions/catch.d.ts +10 -0
- package/dist/actions/catch.js +27 -0
- package/dist/actions/catch.js.map +1 -0
- package/dist/actions/declareArg.d.ts +8 -0
- package/dist/actions/declareArg.js +10 -0
- package/dist/actions/declareArg.js.map +1 -0
- package/dist/actions/disableTool.d.ts +10 -0
- package/dist/actions/disableTool.js +17 -0
- package/dist/actions/disableTool.js.map +1 -0
- package/dist/actions/embed.d.ts +9 -0
- package/dist/actions/embed.js +23 -0
- package/dist/actions/embed.js.map +1 -0
- package/dist/actions/emit.d.ts +9 -0
- package/dist/actions/emit.js +14 -0
- package/dist/actions/emit.js.map +1 -0
- package/dist/actions/enableTool.d.ts +20 -0
- package/dist/actions/enableTool.js +26 -0
- package/dist/actions/enableTool.js.map +1 -0
- package/dist/actions/enableTool.type-test.d.ts +1 -0
- package/dist/actions/enableTool.type-test.js +30 -0
- package/dist/actions/enableTool.type-test.js.map +1 -0
- package/dist/actions/getScope.d.ts +5 -0
- package/dist/actions/getScope.js +8 -0
- package/dist/actions/getScope.js.map +1 -0
- package/dist/actions/getSignal.d.ts +4 -0
- package/dist/actions/getSignal.js +8 -0
- package/dist/actions/getSignal.js.map +1 -0
- package/dist/actions/getTools.d.ts +5 -0
- package/dist/actions/getTools.js +8 -0
- package/dist/actions/getTools.js.map +1 -0
- package/dist/actions/infer.d.ts +13 -0
- package/dist/actions/infer.js +21 -0
- package/dist/actions/infer.js.map +1 -0
- package/dist/actions/pushModel.d.ts +11 -0
- package/dist/actions/pushModel.js +21 -0
- package/dist/actions/pushModel.js.map +1 -0
- package/dist/actions/removeMessage.d.ts +9 -0
- package/dist/actions/removeMessage.js +17 -0
- package/dist/actions/removeMessage.js.map +1 -0
- package/dist/actions/removeModel.d.ts +10 -0
- package/dist/actions/removeModel.js +20 -0
- package/dist/actions/removeModel.js.map +1 -0
- package/dist/actions/setMessages.d.ts +16 -0
- package/dist/actions/setMessages.js +31 -0
- package/dist/actions/setMessages.js.map +1 -0
- package/dist/actions/throw.d.ts +9 -0
- package/dist/actions/throw.js +13 -0
- package/dist/actions/throw.js.map +1 -0
- package/dist/cli/WriteHandler.d.ts +9 -0
- package/dist/cli/WriteHandler.js +24 -0
- package/dist/cli/WriteHandler.js.map +1 -0
- package/dist/cli/cli_common.d.ts +3 -0
- package/dist/cli/cli_common.js +2 -0
- package/dist/cli/cli_common.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +15 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/runExec.d.ts +2 -0
- package/dist/cli/runExec.js +69 -0
- package/dist/cli/runExec.js.map +1 -0
- package/dist/events/Aborted.d.ts +4 -0
- package/dist/events/Aborted.js +2 -0
- package/dist/events/Aborted.js.map +1 -0
- package/dist/events/Embedded.d.ts +5 -0
- package/dist/events/Embedded.js +2 -0
- package/dist/events/Embedded.js.map +1 -0
- package/dist/events/EmbeddingRequested.d.ts +4 -0
- package/dist/events/EmbeddingRequested.js +2 -0
- package/dist/events/EmbeddingRequested.js.map +1 -0
- package/dist/events/Emitted.d.ts +4 -0
- package/dist/events/Emitted.js +2 -0
- package/dist/events/Emitted.js.map +1 -0
- package/dist/events/EventBase.d.ts +3 -0
- package/dist/events/EventBase.js +2 -0
- package/dist/events/EventBase.js.map +1 -0
- package/dist/events/EventHandler.d.ts +2 -0
- package/dist/events/EventHandler.js +2 -0
- package/dist/events/EventHandler.js.map +1 -0
- package/dist/events/EventResolved.d.ts +19 -0
- package/dist/events/EventResolved.js +2 -0
- package/dist/events/EventResolved.js.map +1 -0
- package/dist/events/Forked.d.ts +3 -0
- package/dist/events/Forked.js +2 -0
- package/dist/events/Forked.js.map +1 -0
- package/dist/events/InferenceRequested.d.ts +3 -0
- package/dist/events/InferenceRequested.js +2 -0
- package/dist/events/InferenceRequested.js.map +1 -0
- package/dist/events/Inferred.d.ts +5 -0
- package/dist/events/Inferred.js +2 -0
- package/dist/events/Inferred.js.map +1 -0
- package/dist/events/LEvent.d.ts +18 -0
- package/dist/events/LEvent.js +2 -0
- package/dist/events/LEvent.js.map +1 -0
- package/dist/events/MessageAppended.d.ts +5 -0
- package/dist/events/MessageAppended.js +2 -0
- package/dist/events/MessageAppended.js.map +1 -0
- package/dist/events/MessageRemoved.d.ts +5 -0
- package/dist/events/MessageRemoved.js +2 -0
- package/dist/events/MessageRemoved.js.map +1 -0
- package/dist/events/MessagesSet.d.ts +5 -0
- package/dist/events/MessagesSet.js +2 -0
- package/dist/events/MessagesSet.js.map +1 -0
- package/dist/events/ModelPushed.d.ts +7 -0
- package/dist/events/ModelPushed.js +2 -0
- package/dist/events/ModelPushed.js.map +1 -0
- package/dist/events/ModelRemoved.d.ts +7 -0
- package/dist/events/ModelRemoved.js +2 -0
- package/dist/events/ModelRemoved.js.map +1 -0
- package/dist/events/Returned.d.ts +4 -0
- package/dist/events/Returned.js +2 -0
- package/dist/events/Returned.js.map +1 -0
- package/dist/events/Threw.d.ts +4 -0
- package/dist/events/Threw.js +2 -0
- package/dist/events/Threw.js.map +1 -0
- package/dist/events/ToolCalled.d.ts +6 -0
- package/dist/events/ToolCalled.js +2 -0
- package/dist/events/ToolCalled.js.map +1 -0
- package/dist/events/ToolDisabled.d.ts +5 -0
- package/dist/events/ToolDisabled.js +2 -0
- package/dist/events/ToolDisabled.js.map +1 -0
- package/dist/events/ToolEnabled.d.ts +7 -0
- package/dist/events/ToolEnabled.js +2 -0
- package/dist/events/ToolEnabled.js.map +1 -0
- package/dist/events/isScopeChildEvent.d.ts +6 -0
- package/dist/events/isScopeChildEvent.js +9 -0
- package/dist/events/isScopeChildEvent.js.map +1 -0
- package/dist/events/isScopeDescendantEvent.d.ts +14 -0
- package/dist/events/isScopeDescendantEvent.js +12 -0
- package/dist/events/isScopeDescendantEvent.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/testing/ActorAssertions.d.ts +9 -0
- package/dist/testing/ActorAssertions.js +6 -0
- package/dist/testing/ActorAssertions.js.map +1 -0
- package/dist/testing/TestEmbeddingModel.d.ts +6 -0
- package/dist/testing/TestEmbeddingModel.js +10 -0
- package/dist/testing/TestEmbeddingModel.js.map +1 -0
- package/dist/testing/TestLanguageModel.d.ts +8 -0
- package/dist/testing/TestLanguageModel.js +21 -0
- package/dist/testing/TestLanguageModel.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/takeFirstAction.d.ts +3 -0
- package/dist/testing/takeFirstAction.js +6 -0
- package/dist/testing/takeFirstAction.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/AssertDiagnostics.d.ts +18 -0
- package/dist/types/AssertDiagnostics.js +152 -0
- package/dist/types/AssertDiagnostics.js.map +1 -0
- package/dist/types/JSONRootType.d.ts +6 -0
- package/dist/types/JSONRootType.js +2 -0
- package/dist/types/JSONRootType.js.map +1 -0
- package/dist/types/JSONType.d.ts +16 -0
- package/dist/types/JSONType.js +2 -0
- package/dist/types/JSONType.js.map +1 -0
- package/dist/types/JSONTypeBase.d.ts +3 -0
- package/dist/types/JSONTypeBase.js +2 -0
- package/dist/types/JSONTypeBase.js.map +1 -0
- package/dist/types/Metatype/MetatypeDescriptor.d.ts +41 -0
- package/dist/types/Metatype/MetatypeDescriptor.js +38 -0
- package/dist/types/Metatype/MetatypeDescriptor.js.map +1 -0
- package/dist/types/Metatype/fromMetatypeDescriptor.d.ts +6 -0
- package/dist/types/Metatype/fromMetatypeDescriptor.js +43 -0
- package/dist/types/Metatype/fromMetatypeDescriptor.js.map +1 -0
- package/dist/types/Type.d.ts +30 -0
- package/dist/types/Type.js +5 -0
- package/dist/types/Type.js.map +1 -0
- package/dist/types/TypeContext.d.ts +7 -0
- package/dist/types/TypeContext.js +17 -0
- package/dist/types/TypeContext.js.map +1 -0
- package/dist/types/TypeLike.d.ts +23 -0
- package/dist/types/TypeLike.js +23 -0
- package/dist/types/TypeLike.js.map +1 -0
- package/dist/types/TypeVisitor.d.ts +14 -0
- package/dist/types/TypeVisitor.js +12 -0
- package/dist/types/TypeVisitor.js.map +1 -0
- package/dist/types/array.d.ts +10 -0
- package/dist/types/array.js +9 -0
- package/dist/types/array.js.map +1 -0
- package/dist/types/boolean.d.ts +6 -0
- package/dist/types/boolean.js +3 -0
- package/dist/types/boolean.js.map +1 -0
- package/dist/types/const.d.ts +8 -0
- package/dist/types/const.js +7 -0
- package/dist/types/const.js.map +1 -0
- package/dist/types/declareType.d.ts +2 -0
- package/dist/types/declareType.js +57 -0
- package/dist/types/declareType.js.map +1 -0
- package/dist/types/enum.d.ts +8 -0
- package/dist/types/enum.js +7 -0
- package/dist/types/enum.js.map +1 -0
- package/dist/types/factories.d.ts +8 -0
- package/dist/types/factories.js +9 -0
- package/dist/types/factories.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/integer.d.ts +6 -0
- package/dist/types/integer.js +3 -0
- package/dist/types/integer.js.map +1 -0
- package/dist/types/intrinsics.d.ts +11 -0
- package/dist/types/intrinsics.js +12 -0
- package/dist/types/intrinsics.js.map +1 -0
- package/dist/types/match.d.ts +3 -0
- package/dist/types/match.js +11 -0
- package/dist/types/match.js.map +1 -0
- package/dist/types/non_factories.d.ts +21 -0
- package/dist/types/non_factories.js +9 -0
- package/dist/types/non_factories.js.map +1 -0
- package/dist/types/null.d.ts +7 -0
- package/dist/types/null.js +4 -0
- package/dist/types/null.js.map +1 -0
- package/dist/types/number.d.ts +6 -0
- package/dist/types/number.js +3 -0
- package/dist/types/number.js.map +1 -0
- package/dist/types/object.d.ts +16 -0
- package/dist/types/object.js +10 -0
- package/dist/types/object.js.map +1 -0
- package/dist/types/ref.d.ts +7 -0
- package/dist/types/ref.js +5 -0
- package/dist/types/ref.js.map +1 -0
- package/dist/types/string.d.ts +6 -0
- package/dist/types/string.js +3 -0
- package/dist/types/string.js.map +1 -0
- package/dist/types/toJSON.d.ts +5 -0
- package/dist/types/toJSON.js +97 -0
- package/dist/types/toJSON.js.map +1 -0
- package/dist/types/type_common.d.ts +10 -0
- package/dist/types/type_common.js +12 -0
- package/dist/types/type_common.js.map +1 -0
- package/dist/types/types_derived/option.d.ts +5 -0
- package/dist/types/types_derived/option.js +6 -0
- package/dist/types/types_derived/option.js.map +1 -0
- package/dist/types/types_derived/taggedUnion.d.ts +19 -0
- package/dist/types/types_derived/taggedUnion.js +8 -0
- package/dist/types/types_derived/taggedUnion.js.map +1 -0
- package/dist/types/types_derived/wrapper.d.ts +8 -0
- package/dist/types/types_derived/wrapper.js +5 -0
- package/dist/types/types_derived/wrapper.js.map +1 -0
- package/dist/types/union.d.ts +9 -0
- package/dist/types/union.js +9 -0
- package/dist/types/union.js.map +1 -0
- package/dist/util/ArrayOfLength.d.ts +1 -0
- package/dist/util/ArrayOfLength.js +2 -0
- package/dist/util/ArrayOfLength.js.map +1 -0
- package/dist/util/DeferredOr.d.ts +1 -0
- package/dist/util/DeferredOr.js +2 -0
- package/dist/util/DeferredOr.js.map +1 -0
- package/dist/util/EnsureNarrow.d.ts +2 -0
- package/dist/util/EnsureNarrow.js +2 -0
- package/dist/util/EnsureNarrow.js.map +1 -0
- package/dist/util/EnsureRecord.d.ts +2 -0
- package/dist/util/EnsureRecord.js +2 -0
- package/dist/util/EnsureRecord.js.map +1 -0
- package/dist/util/Expand.d.ts +3 -0
- package/dist/util/Expand.js +2 -0
- package/dist/util/Expand.js.map +1 -0
- package/dist/util/Falsy.d.ts +1 -0
- package/dist/util/Falsy.js +2 -0
- package/dist/util/Falsy.js.map +1 -0
- package/dist/util/FromEntries.d.ts +3 -0
- package/dist/util/FromEntries.js +2 -0
- package/dist/util/FromEntries.js.map +1 -0
- package/dist/util/IteratorLike.d.ts +1 -0
- package/dist/util/IteratorLike.js +2 -0
- package/dist/util/IteratorLike.js.map +1 -0
- package/dist/util/JSONEntry.d.ts +2 -0
- package/dist/util/JSONEntry.js +2 -0
- package/dist/util/JSONEntry.js.map +1 -0
- package/dist/util/JSONKey.d.ts +1 -0
- package/dist/util/JSONKey.js +2 -0
- package/dist/util/JSONKey.js.map +1 -0
- package/dist/util/JSONObject.d.ts +5 -0
- package/dist/util/JSONObject.js +2 -0
- package/dist/util/JSONObject.js.map +1 -0
- package/dist/util/JSONSchemaMemo.d.ts +2 -0
- package/dist/util/JSONSchemaMemo.js +13 -0
- package/dist/util/JSONSchemaMemo.js.map +1 -0
- package/dist/util/JSONValue.d.ts +2 -0
- package/dist/util/JSONValue.js +2 -0
- package/dist/util/JSONValue.js.map +1 -0
- package/dist/util/PromiseOr.d.ts +1 -0
- package/dist/util/PromiseOr.js +2 -0
- package/dist/util/PromiseOr.js.map +1 -0
- package/dist/util/Result.d.ts +7 -0
- package/dist/util/Result.js +2 -0
- package/dist/util/Result.js.map +1 -0
- package/dist/util/Taggable.d.ts +9 -0
- package/dist/util/Taggable.js +8 -0
- package/dist/util/Taggable.js.map +1 -0
- package/dist/util/TupleToRecord.d.ts +5 -0
- package/dist/util/TupleToRecord.js +2 -0
- package/dist/util/TupleToRecord.js.map +1 -0
- package/dist/util/assert.d.ts +1 -0
- package/dist/util/assert.js +7 -0
- package/dist/util/assert.js.map +1 -0
- package/dist/util/dedent.d.ts +1 -0
- package/dist/util/dedent.js +5 -0
- package/dist/util/dedent.js.map +1 -0
- package/dist/util/fixTemplateStrings.d.ts +11 -0
- package/dist/util/fixTemplateStrings.js +83 -0
- package/dist/util/fixTemplateStrings.js.map +1 -0
- package/dist/util/fixTemplateStrings.test.d.ts +1 -0
- package/dist/util/fixTemplateStrings.test.js +221 -0
- package/dist/util/fixTemplateStrings.test.js.map +1 -0
- package/dist/util/isAsyncIterator.d.ts +1 -0
- package/dist/util/isAsyncIterator.js +7 -0
- package/dist/util/isAsyncIterator.js.map +1 -0
- package/dist/util/isIterator.d.ts +1 -0
- package/dist/util/isIterator.js +7 -0
- package/dist/util/isIterator.js.map +1 -0
- package/dist/util/isJSONValue.d.ts +2 -0
- package/dist/util/isJSONValue.js +16 -0
- package/dist/util/isJSONValue.js.map +1 -0
- package/dist/util/isPropertyKey.d.ts +1 -0
- package/dist/util/isPropertyKey.js +4 -0
- package/dist/util/isPropertyKey.js.map +1 -0
- package/dist/util/isTemplateStringsArray.d.ts +1 -0
- package/dist/util/isTemplateStringsArray.js +4 -0
- package/dist/util/isTemplateStringsArray.js.map +1 -0
- package/dist/util/jsonEquals.d.ts +2 -0
- package/dist/util/jsonEquals.js +33 -0
- package/dist/util/jsonEquals.js.map +1 -0
- package/dist/util/nullaryMemo.d.ts +1 -0
- package/dist/util/nullaryMemo.js +12 -0
- package/dist/util/nullaryMemo.js.map +1 -0
- package/dist/util/unimplemented.d.ts +1 -0
- package/dist/util/unimplemented.js +5 -0
- package/dist/util/unimplemented.js.map +1 -0
- package/dist/util/unreachable.d.ts +1 -0
- package/dist/util/unreachable.js +5 -0
- package/dist/util/unreachable.js.map +1 -0
- package/dist/util/unwrapDeferred.d.ts +2 -0
- package/dist/util/unwrapDeferred.js +4 -0
- package/dist/util/unwrapDeferred.js.map +1 -0
- package/dist/util/util.d.ts +10 -0
- package/dist/util/util.js +11 -0
- package/dist/util/util.js.map +1 -0
- package/events/Aborted.ts +5 -0
- package/events/Embedded.ts +6 -0
- package/events/EmbeddingRequested.ts +5 -0
- package/events/Emitted.ts +5 -0
- package/events/EventBase.ts +3 -0
- package/events/EventHandler.ts +3 -0
- package/events/EventResolved.ts +30 -0
- package/events/Forked.ts +3 -0
- package/events/InferenceRequested.ts +3 -0
- package/events/Inferred.ts +6 -0
- package/events/LEvent.ts +36 -0
- package/events/MessageAppended.ts +6 -0
- package/events/MessageRemoved.ts +6 -0
- package/events/MessagesSet.ts +6 -0
- package/events/ModelPushed.ts +10 -0
- package/events/ModelRemoved.ts +10 -0
- package/events/Returned.ts +5 -0
- package/events/Threw.ts +5 -0
- package/events/ToolCalled.ts +7 -0
- package/events/ToolDisabled.ts +6 -0
- package/events/ToolEnabled.ts +8 -0
- package/events/isScopeChildEvent.ts +15 -0
- package/events/isScopeDescendantEvent.ts +30 -0
- package/index.ts +41 -0
- package/package.json +28 -19
- package/testing/ActorAssertions.ts +19 -0
- package/testing/TestEmbeddingModel.ts +18 -0
- package/testing/TestLanguageModel.ts +32 -0
- package/testing/index.ts +4 -0
- package/testing/takeFirstAction.ts +8 -0
- package/tsconfig.json +4 -8
- package/types/AssertDiagnostics.ts +183 -0
- package/types/JSONRootType.ts +8 -0
- package/types/JSONType.ts +27 -0
- package/types/JSONTypeBase.ts +3 -0
- package/types/Metatype/MetatypeDescriptor.ts +80 -0
- package/types/Metatype/fromMetatypeDescriptor.ts +52 -0
- package/types/Type.ts +46 -0
- package/types/TypeContext.ts +19 -0
- package/types/TypeLike.ts +60 -0
- package/types/TypeVisitor.ts +49 -0
- package/types/array.ts +20 -0
- package/types/boolean.ts +9 -0
- package/types/const.ts +17 -0
- package/types/declareType.ts +71 -0
- package/types/enum.ts +14 -0
- package/types/factories.ts +8 -0
- package/types/index.ts +2 -0
- package/types/integer.ts +9 -0
- package/types/intrinsics.ts +11 -0
- package/types/match.ts +13 -0
- package/types/non_factories.ts +26 -0
- package/types/null.ts +10 -0
- package/types/number.ts +9 -0
- package/types/object.ts +27 -0
- package/types/ref.ts +12 -0
- package/types/string.ts +9 -0
- package/types/toJSON.ts +111 -0
- package/types/type_common.ts +21 -0
- package/types/types_derived/option.ts +10 -0
- package/types/types_derived/taggedUnion.ts +30 -0
- package/types/types_derived/wrapper.ts +10 -0
- package/types/union.ts +19 -0
- package/util/ArrayOfLength.ts +5 -0
- package/util/DeferredOr.ts +1 -0
- package/util/EnsureNarrow.ts +5 -0
- package/util/EnsureRecord.ts +3 -0
- package/util/Expand.ts +1 -0
- package/util/Falsy.ts +1 -0
- package/util/FromEntries.ts +3 -0
- package/util/IteratorLike.ts +1 -0
- package/util/JSONEntry.ts +3 -0
- package/util/JSONKey.ts +1 -0
- package/util/JSONObject.ts +6 -0
- package/util/JSONSchemaMemo.ts +15 -0
- package/util/JSONValue.ts +3 -0
- package/util/PromiseOr.ts +1 -0
- package/util/Result.ts +7 -0
- package/util/Taggable.ts +18 -0
- package/util/TupleToRecord.ts +5 -0
- package/util/assert.ts +7 -0
- package/util/dedent.ts +5 -0
- package/util/fixTemplateStrings.test.ts +250 -0
- package/util/fixTemplateStrings.ts +99 -0
- package/util/isAsyncIterator.ts +6 -0
- package/util/isIterator.ts +6 -0
- package/util/isJSONValue.ts +20 -0
- package/util/isPropertyKey.ts +3 -0
- package/util/isTemplateStringsArray.ts +3 -0
- package/util/jsonEquals.ts +41 -0
- package/util/nullaryMemo.ts +11 -0
- package/util/unimplemented.ts +5 -0
- package/util/unreachable.ts +5 -0
- package/util/unwrapDeferred.ts +5 -0
- package/util/util.ts +10 -0
- package/LICENSE +0 -15
- package/README.md +0 -94
- package/jest.config.js +0 -4
- package/lib/array/array.d.ts +0 -6
- package/lib/array/array.js +0 -21
- package/lib/array/index.d.ts +0 -11
- package/lib/array/index.js +0 -17
- package/lib/composition/composition.d.ts +0 -6
- package/lib/composition/composition.js +0 -37
- package/lib/composition/index.d.ts +0 -9
- package/lib/composition/index.js +0 -13
- package/lib/composition/types.d.ts +0 -2
- package/lib/composition/types.js +0 -2
- package/lib/dispatch/getType.d.ts +0 -2
- package/lib/dispatch/getType.js +0 -15
- package/lib/dispatch/identity.d.ts +0 -2
- package/lib/dispatch/identity.js +0 -4
- package/lib/dispatch/index.d.ts +0 -22
- package/lib/dispatch/index.js +0 -13
- package/lib/dispatch/types.d.ts +0 -14
- package/lib/dispatch/types.js +0 -16
- package/lib/error/error.d.ts +0 -24
- package/lib/error/error.js +0 -25
- package/lib/error/index.d.ts +0 -2
- package/lib/error/index.js +0 -4
- package/lib/index.d.ts +0 -67
- package/lib/index.js +0 -19
- package/lib/multimethod/index.d.ts +0 -7
- package/lib/multimethod/index.js +0 -9
- package/lib/multimethod/multimethod.d.ts +0 -3
- package/lib/multimethod/multimethod.js +0 -101
- package/src/array/array.ts +0 -29
- package/src/array/index.ts +0 -12
- package/src/composition/composition.ts +0 -45
- package/src/composition/index.ts +0 -10
- package/src/composition/types.ts +0 -6
- package/src/dispatch/getType.ts +0 -17
- package/src/dispatch/identity.ts +0 -3
- package/src/dispatch/index.ts +0 -11
- package/src/dispatch/types.ts +0 -15
- package/src/error/error.ts +0 -26
- package/src/error/index.ts +0 -3
- package/src/index.ts +0 -15
- package/src/multimethod/index.ts +0 -8
- package/src/multimethod/multimethod.test.ts +0 -10
- package/src/multimethod/multimethod.ts +0 -148
package/lib/index.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import array from './array';
|
|
3
|
-
import composition from './composition';
|
|
4
|
-
import dispatch from './dispatch';
|
|
5
|
-
import error from './error';
|
|
6
|
-
import multimethod from './multimethod';
|
|
7
|
-
export { array, composition, dispatch, error, multimethod };
|
|
8
|
-
declare const _default: {
|
|
9
|
-
array: {
|
|
10
|
-
filter: (fn: any) => (arr: any) => any;
|
|
11
|
-
map: (fn: any) => (arr: any) => any;
|
|
12
|
-
reduce: (fn: any, initialValue: any) => (arr: any) => any;
|
|
13
|
-
reduceRight: (fn: any, initialValue: any) => (arr: any) => any;
|
|
14
|
-
reverse: (arr: any) => any;
|
|
15
|
-
sort: (fn: any) => (arr: any) => any[];
|
|
16
|
-
};
|
|
17
|
-
composition: {
|
|
18
|
-
compose: import("./composition/types").ChainFunctions;
|
|
19
|
-
pipe: import("./composition/types").ChainFunctions;
|
|
20
|
-
rail: import("./composition/types").ChainFunctions;
|
|
21
|
-
railSync: import("./composition/types").ChainFunctions;
|
|
22
|
-
};
|
|
23
|
-
dispatch: {
|
|
24
|
-
getType: (val: any) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "array" | "null" | "regexp";
|
|
25
|
-
identity: (x: any) => any;
|
|
26
|
-
types: {
|
|
27
|
-
array: string;
|
|
28
|
-
object: string;
|
|
29
|
-
function: string;
|
|
30
|
-
string: string;
|
|
31
|
-
number: string;
|
|
32
|
-
bigint: string;
|
|
33
|
-
symbol: string;
|
|
34
|
-
regexp: string;
|
|
35
|
-
null: string;
|
|
36
|
-
undefined: string;
|
|
37
|
-
boolean: string;
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
error: {
|
|
41
|
-
create: ({ name, defaultMessage }: {
|
|
42
|
-
name: any;
|
|
43
|
-
defaultMessage?: string;
|
|
44
|
-
}) => {
|
|
45
|
-
new (message?: string): {
|
|
46
|
-
name: string;
|
|
47
|
-
message: string;
|
|
48
|
-
stack?: string;
|
|
49
|
-
};
|
|
50
|
-
captureStackTrace(targetObject: Object, constructorOpt?: Function): void;
|
|
51
|
-
prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any;
|
|
52
|
-
stackTraceLimit: number;
|
|
53
|
-
};
|
|
54
|
-
toJSON: (error: any) => {
|
|
55
|
-
error: {
|
|
56
|
-
name: any;
|
|
57
|
-
message: any;
|
|
58
|
-
stacktrace: any;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
multimethod: {
|
|
63
|
-
multi: (dispatch: any, ...methods: any[]) => any;
|
|
64
|
-
method: (...args: any[]) => (multimethod: any) => any;
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
export default _default;
|
package/lib/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const array_1 = require("./array");
|
|
4
|
-
exports.array = array_1.default;
|
|
5
|
-
const composition_1 = require("./composition");
|
|
6
|
-
exports.composition = composition_1.default;
|
|
7
|
-
const dispatch_1 = require("./dispatch");
|
|
8
|
-
exports.dispatch = dispatch_1.default;
|
|
9
|
-
const error_1 = require("./error");
|
|
10
|
-
exports.error = error_1.default;
|
|
11
|
-
const multimethod_1 = require("./multimethod");
|
|
12
|
-
exports.multimethod = multimethod_1.default;
|
|
13
|
-
exports.default = {
|
|
14
|
-
array: array_1.default,
|
|
15
|
-
composition: composition_1.default,
|
|
16
|
-
dispatch: dispatch_1.default,
|
|
17
|
-
error: error_1.default,
|
|
18
|
-
multimethod: multimethod_1.default,
|
|
19
|
-
};
|
package/lib/multimethod/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const multimethod_1 = require("./multimethod");
|
|
4
|
-
exports.multi = multimethod_1.multi;
|
|
5
|
-
exports.method = multimethod_1.method;
|
|
6
|
-
exports.default = {
|
|
7
|
-
multi: multimethod_1.multi,
|
|
8
|
-
method: multimethod_1.method,
|
|
9
|
-
};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const equal = require("deep-strict-equal");
|
|
4
|
-
const composition_1 = require("../composition");
|
|
5
|
-
const multimethodKey = Symbol ? Symbol('multimethod') : 'multimethod';
|
|
6
|
-
const countSegments = (dispatch) => {
|
|
7
|
-
let count = 1;
|
|
8
|
-
let current = dispatch;
|
|
9
|
-
try {
|
|
10
|
-
while (typeof current === 'function') {
|
|
11
|
-
const next = current();
|
|
12
|
-
if (typeof next === 'function') {
|
|
13
|
-
count++;
|
|
14
|
-
current = next;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
return count;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
catch (_a) { }
|
|
22
|
-
return count;
|
|
23
|
-
};
|
|
24
|
-
const createSimpleTarget = (methodEntries, defaultMethod, dispatch) => {
|
|
25
|
-
return (...args) => {
|
|
26
|
-
let currentDispatchValue = dispatch(...args);
|
|
27
|
-
const entry = methodEntries.find(([dispatchValue]) => equal(dispatchValue, currentDispatchValue));
|
|
28
|
-
const target = entry ? entry[1] : defaultMethod;
|
|
29
|
-
if (!entry && target === null) {
|
|
30
|
-
throw new Error('No method specified for provided arguments');
|
|
31
|
-
}
|
|
32
|
-
if (typeof target !== 'function') {
|
|
33
|
-
return target;
|
|
34
|
-
}
|
|
35
|
-
return target(...args);
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
const createSegmentedTarget = (methodEntries, defaultMethod, dispatch, segmentsCount) => {
|
|
39
|
-
const recur = (counter, previousSegmentsArgs = []) => {
|
|
40
|
-
if (counter === 1) {
|
|
41
|
-
return (...args) => {
|
|
42
|
-
const segmentsArgs = [...previousSegmentsArgs, args];
|
|
43
|
-
let count = segmentsArgs.length;
|
|
44
|
-
let currentDispatchValue = dispatch;
|
|
45
|
-
for (let i = 0; i < count; i++) {
|
|
46
|
-
currentDispatchValue = currentDispatchValue(...segmentsArgs[i]);
|
|
47
|
-
}
|
|
48
|
-
const entry = methodEntries.find(([dispatchValue]) => equal(dispatchValue, currentDispatchValue));
|
|
49
|
-
const target = entry ? entry[1] : defaultMethod;
|
|
50
|
-
if (!entry && target === null) {
|
|
51
|
-
throw new Error('No method specified for provided arguments');
|
|
52
|
-
}
|
|
53
|
-
if (typeof target !== 'function') {
|
|
54
|
-
return target;
|
|
55
|
-
}
|
|
56
|
-
let result = target;
|
|
57
|
-
for (let i = 0; i < count; i++) {
|
|
58
|
-
result = result(...segmentsArgs[i]);
|
|
59
|
-
}
|
|
60
|
-
return result;
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
return (...args) => {
|
|
64
|
-
return recur(counter - 1, [...previousSegmentsArgs, args]);
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
return recur(segmentsCount);
|
|
68
|
-
};
|
|
69
|
-
const createMultimethod = (methodEntries = []) => (defaultMethod = null) => (dispatch, ...methods) => {
|
|
70
|
-
const segmentsCount = countSegments(dispatch);
|
|
71
|
-
const resultFn = segmentsCount === 1
|
|
72
|
-
? createSimpleTarget(methodEntries, defaultMethod, dispatch)
|
|
73
|
-
: createSegmentedTarget(methodEntries, defaultMethod, dispatch, segmentsCount);
|
|
74
|
-
resultFn[multimethodKey] = {
|
|
75
|
-
methodEntries,
|
|
76
|
-
defaultMethod,
|
|
77
|
-
dispatch,
|
|
78
|
-
};
|
|
79
|
-
if (methods.length !== 0) {
|
|
80
|
-
return composition_1.pipe(...methods)(resultFn);
|
|
81
|
-
}
|
|
82
|
-
return resultFn;
|
|
83
|
-
};
|
|
84
|
-
const multi = createMultimethod()();
|
|
85
|
-
exports.multi = multi;
|
|
86
|
-
const method = (...args) => (multimethod) => {
|
|
87
|
-
if (!multimethod[multimethodKey]) {
|
|
88
|
-
throw new Error('Function is not a multimethod');
|
|
89
|
-
}
|
|
90
|
-
const [first, second] = args;
|
|
91
|
-
const isNotDefault = second !== undefined;
|
|
92
|
-
const fn = isNotDefault ? second : first;
|
|
93
|
-
const dispatchValues = isNotDefault ? first : null;
|
|
94
|
-
const { methodEntries, defaultMethod, dispatch } = multimethod[multimethodKey];
|
|
95
|
-
if (isNotDefault) {
|
|
96
|
-
const newMethodEntries = [[dispatchValues, fn], ...methodEntries];
|
|
97
|
-
return createMultimethod(newMethodEntries)(defaultMethod)(dispatch);
|
|
98
|
-
}
|
|
99
|
-
return createMultimethod(methodEntries)(fn)(dispatch);
|
|
100
|
-
};
|
|
101
|
-
exports.method = method;
|
package/src/array/array.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export const filter = (fn) => (arr) => arr.filter(fn)
|
|
2
|
-
|
|
3
|
-
export const map = (fn) => (arr) => arr.map(fn)
|
|
4
|
-
|
|
5
|
-
export const reduce = (fn, initialValue) => (arr) =>
|
|
6
|
-
arr.reduce(fn, initialValue)
|
|
7
|
-
|
|
8
|
-
export const reduceRight = (fn, initialValue) => (arr) =>
|
|
9
|
-
arr.reduceRight(fn, initialValue)
|
|
10
|
-
|
|
11
|
-
export const reverse = (arr) => arr.reverse()
|
|
12
|
-
|
|
13
|
-
export const sort = (fn) => (arr) => {
|
|
14
|
-
if (fn) {
|
|
15
|
-
return [...arr].sort(fn)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (typeof arr[0] === 'number') {
|
|
19
|
-
return [...arr].sort((a, b) => a - b)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (typeof arr[0] === 'bigint') {
|
|
23
|
-
return [...arr].sort((a, b) => {
|
|
24
|
-
return 1
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return [...arr].sort()
|
|
29
|
-
}
|
package/src/array/index.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { reduce, reduceRight } from '../array'
|
|
2
|
-
import { ChainFactory, ChainFunctions } from './types'
|
|
3
|
-
|
|
4
|
-
const wrapSync = (fn) => (input) => {
|
|
5
|
-
if (input instanceof Error) {
|
|
6
|
-
return input
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
let result
|
|
10
|
-
|
|
11
|
-
try {
|
|
12
|
-
result = fn(input)
|
|
13
|
-
} catch (error) {
|
|
14
|
-
result = error
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return typeof result === 'undefined' ? input : result
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const wrap = (fn) => (input) => {
|
|
21
|
-
if (input instanceof Promise) {
|
|
22
|
-
return input.then((rawInput) => {
|
|
23
|
-
return wrapSync(fn)(rawInput)
|
|
24
|
-
})
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return wrapSync(fn)(input)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const chain: ChainFactory = (reducingFn, wrappingFn = null) => (...fns) => (
|
|
31
|
-
initialArg,
|
|
32
|
-
) => {
|
|
33
|
-
return wrappingFn
|
|
34
|
-
? reducingFn((arg: any, fn: Function) => wrappingFn(fn)(arg), initialArg)(
|
|
35
|
-
fns,
|
|
36
|
-
)
|
|
37
|
-
: reducingFn((arg: any, fn: Function) => fn(arg), initialArg)(fns)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const compose: ChainFunctions = chain(reduceRight)
|
|
41
|
-
const pipe: ChainFunctions = chain(reduce)
|
|
42
|
-
const rail: ChainFunctions = chain(reduce, wrap)
|
|
43
|
-
const railSync: ChainFunctions = chain(reduce, wrapSync)
|
|
44
|
-
|
|
45
|
-
export { compose, pipe, rail, railSync }
|
package/src/composition/index.ts
DELETED
package/src/composition/types.ts
DELETED
package/src/dispatch/getType.ts
DELETED
package/src/dispatch/identity.ts
DELETED
package/src/dispatch/index.ts
DELETED
package/src/dispatch/types.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const types = {
|
|
2
|
-
array: 'array',
|
|
3
|
-
object: 'object',
|
|
4
|
-
function: 'function',
|
|
5
|
-
string: 'string',
|
|
6
|
-
number: 'number',
|
|
7
|
-
bigint: 'bigint',
|
|
8
|
-
symbol: 'symbol',
|
|
9
|
-
regexp: 'regexp',
|
|
10
|
-
null: 'null',
|
|
11
|
-
undefined: 'undefined',
|
|
12
|
-
boolean: 'boolean',
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export default types
|
package/src/error/error.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const create = ({ name, defaultMessage = '' }) => {
|
|
2
|
-
const err = class extends Error {
|
|
3
|
-
constructor(message = defaultMessage) {
|
|
4
|
-
super(message)
|
|
5
|
-
this.name = name
|
|
6
|
-
this.message = message
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
return err
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const toJSON = (error) => {
|
|
14
|
-
return {
|
|
15
|
-
error: {
|
|
16
|
-
name: error.name,
|
|
17
|
-
message: error.message,
|
|
18
|
-
stacktrace: error.stack,
|
|
19
|
-
},
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default {
|
|
24
|
-
create,
|
|
25
|
-
toJSON,
|
|
26
|
-
}
|
package/src/error/index.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import array from './array'
|
|
2
|
-
import composition from './composition'
|
|
3
|
-
import dispatch from './dispatch'
|
|
4
|
-
import error from './error'
|
|
5
|
-
import multimethod from './multimethod'
|
|
6
|
-
|
|
7
|
-
export { array, composition, dispatch, error, multimethod }
|
|
8
|
-
|
|
9
|
-
export default {
|
|
10
|
-
array,
|
|
11
|
-
composition,
|
|
12
|
-
dispatch,
|
|
13
|
-
error,
|
|
14
|
-
multimethod,
|
|
15
|
-
}
|
package/src/multimethod/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { multi } from './multimethod'
|
|
2
|
-
|
|
3
|
-
describe('multi', () => {
|
|
4
|
-
describe('executed with dispatch function only', () => {
|
|
5
|
-
it('creates multimethod that throws error: no matching method', () => {
|
|
6
|
-
const fn = multi(() => true)
|
|
7
|
-
expect(fn).toThrowError('No method specified for provided arguments')
|
|
8
|
-
})
|
|
9
|
-
})
|
|
10
|
-
})
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import * as equal from 'deep-strict-equal'
|
|
2
|
-
import { pipe } from '../composition'
|
|
3
|
-
|
|
4
|
-
const multimethodKey = Symbol ? Symbol('multimethod') : 'multimethod'
|
|
5
|
-
|
|
6
|
-
const countSegments = (dispatch) => {
|
|
7
|
-
let count = 1
|
|
8
|
-
let current = dispatch
|
|
9
|
-
|
|
10
|
-
try {
|
|
11
|
-
while (typeof current === 'function') {
|
|
12
|
-
const next = current()
|
|
13
|
-
if (typeof next === 'function') {
|
|
14
|
-
count++
|
|
15
|
-
current = next
|
|
16
|
-
} else {
|
|
17
|
-
return count
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
} catch {}
|
|
21
|
-
|
|
22
|
-
return count
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const createSimpleTarget = (methodEntries, defaultMethod, dispatch) => {
|
|
26
|
-
return (...args) => {
|
|
27
|
-
let currentDispatchValue = dispatch(...args)
|
|
28
|
-
|
|
29
|
-
const entry = methodEntries.find(([dispatchValue]) =>
|
|
30
|
-
equal(dispatchValue, currentDispatchValue),
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
const target = entry ? entry[1] : defaultMethod
|
|
34
|
-
|
|
35
|
-
if (!entry && target === null) {
|
|
36
|
-
throw new Error('No method specified for provided arguments')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (typeof target !== 'function') {
|
|
40
|
-
return target
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return target(...args)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const createSegmentedTarget = (
|
|
48
|
-
methodEntries,
|
|
49
|
-
defaultMethod,
|
|
50
|
-
dispatch,
|
|
51
|
-
segmentsCount,
|
|
52
|
-
) => {
|
|
53
|
-
const recur = (counter, previousSegmentsArgs = []) => {
|
|
54
|
-
if (counter === 1) {
|
|
55
|
-
return (...args) => {
|
|
56
|
-
const segmentsArgs = [...previousSegmentsArgs, args]
|
|
57
|
-
let count = segmentsArgs.length
|
|
58
|
-
|
|
59
|
-
let currentDispatchValue = dispatch
|
|
60
|
-
|
|
61
|
-
for (let i = 0; i < count; i++) {
|
|
62
|
-
currentDispatchValue = currentDispatchValue(...segmentsArgs[i])
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const entry = methodEntries.find(([dispatchValue]) =>
|
|
66
|
-
equal(dispatchValue, currentDispatchValue),
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
const target = entry ? entry[1] : defaultMethod
|
|
70
|
-
|
|
71
|
-
if (!entry && target === null) {
|
|
72
|
-
throw new Error('No method specified for provided arguments')
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (typeof target !== 'function') {
|
|
76
|
-
return target
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
let result: any = target
|
|
80
|
-
|
|
81
|
-
for (let i = 0; i < count; i++) {
|
|
82
|
-
result = result(...segmentsArgs[i])
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return result
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return (...args) => {
|
|
90
|
-
return recur(counter - 1, [...previousSegmentsArgs, args])
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return recur(segmentsCount)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const createMultimethod = (methodEntries = []) => (defaultMethod = null) => (
|
|
98
|
-
dispatch,
|
|
99
|
-
...methods
|
|
100
|
-
) => {
|
|
101
|
-
const segmentsCount = countSegments(dispatch)
|
|
102
|
-
|
|
103
|
-
const resultFn =
|
|
104
|
-
segmentsCount === 1
|
|
105
|
-
? createSimpleTarget(methodEntries, defaultMethod, dispatch)
|
|
106
|
-
: createSegmentedTarget(
|
|
107
|
-
methodEntries,
|
|
108
|
-
defaultMethod,
|
|
109
|
-
dispatch,
|
|
110
|
-
segmentsCount,
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
resultFn[multimethodKey] = {
|
|
114
|
-
methodEntries,
|
|
115
|
-
defaultMethod,
|
|
116
|
-
dispatch,
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (methods.length !== 0) {
|
|
120
|
-
return pipe(...methods)(resultFn)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return resultFn
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const multi = createMultimethod()()
|
|
127
|
-
|
|
128
|
-
const method = (...args) => (multimethod) => {
|
|
129
|
-
if (!multimethod[multimethodKey]) {
|
|
130
|
-
throw new Error('Function is not a multimethod')
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const [first, second] = args
|
|
134
|
-
const isNotDefault = second !== undefined
|
|
135
|
-
const fn = isNotDefault ? second : first
|
|
136
|
-
const dispatchValues = isNotDefault ? first : null
|
|
137
|
-
|
|
138
|
-
const { methodEntries, defaultMethod, dispatch } = multimethod[multimethodKey]
|
|
139
|
-
|
|
140
|
-
if (isNotDefault) {
|
|
141
|
-
const newMethodEntries = [[dispatchValues, fn], ...methodEntries]
|
|
142
|
-
return createMultimethod(newMethodEntries)(defaultMethod)(dispatch)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return createMultimethod(methodEntries)(fn)(dispatch)
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export { multi, method }
|