@interactors/core 1.0.0 → 1.1.0-alpha.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/esm/mod.d.ts +2 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +2 -0
- package/esm/mod.js.map +1 -0
- package/esm/package.json +3 -0
- package/{dist → esm/src}/constructor.d.ts +1 -1
- package/esm/src/constructor.d.ts.map +1 -0
- package/{dist/esm → esm/src}/constructor.js +20 -13
- package/esm/src/constructor.js.map +1 -0
- package/esm/src/converge.d.ts +3 -0
- package/esm/src/converge.d.ts.map +1 -0
- package/esm/src/converge.js.map +1 -0
- package/{dist → esm/src}/create-interactor.d.ts +1 -1
- package/esm/src/create-interactor.d.ts.map +1 -0
- package/{dist/esm → esm/src}/create-interactor.js +1 -1
- package/esm/src/create-interactor.js.map +1 -0
- package/esm/src/element/click.d.ts +3 -0
- package/esm/src/element/click.d.ts.map +1 -0
- package/esm/src/element/click.js +5 -0
- package/esm/src/element/click.js.map +1 -0
- package/esm/src/errors.d.ts.map +1 -0
- package/esm/src/errors.js +45 -0
- package/esm/src/errors.js.map +1 -0
- package/esm/src/escape-html.d.ts.map +1 -0
- package/esm/src/escape-html.js.map +1 -0
- package/{dist → esm/src}/filter-set.d.ts +1 -1
- package/esm/src/filter-set.d.ts.map +1 -0
- package/{dist/esm → esm/src}/filter-set.js +14 -6
- package/esm/src/filter-set.js.map +1 -0
- package/{dist → esm/src}/format.d.ts +2 -2
- package/esm/src/format.d.ts.map +1 -0
- package/esm/src/format.js.map +1 -0
- package/esm/src/index.d.ts +21 -0
- package/esm/src/index.d.ts.map +1 -0
- package/esm/src/index.js +15 -0
- package/esm/src/index.js.map +1 -0
- package/{dist → esm/src}/inspector.d.ts +1 -1
- package/esm/src/inspector.d.ts.map +1 -0
- package/{dist/esm → esm/src}/inspector.js +3 -3
- package/esm/src/inspector.js.map +1 -0
- package/{dist → esm/src}/interaction.d.ts +3 -3
- package/esm/src/interaction.d.ts.map +1 -0
- package/{dist/esm → esm/src}/interaction.js +2 -2
- package/esm/src/interaction.js.map +1 -0
- package/{dist → esm/src}/locator.d.ts +2 -2
- package/esm/src/locator.d.ts.map +1 -0
- package/esm/src/locator.js +25 -0
- package/esm/src/locator.js.map +1 -0
- package/{dist → esm/src}/match.d.ts +4 -4
- package/esm/src/match.d.ts.map +1 -0
- package/{dist/esm → esm/src}/match.js +99 -16
- package/esm/src/match.js.map +1 -0
- package/{dist → esm/src}/matcher.d.ts +4 -0
- package/esm/src/matcher.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matcher.js +8 -0
- package/esm/src/matcher.js.map +1 -0
- package/esm/src/matchers/and.d.ts +3 -0
- package/esm/src/matchers/and.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/and.js +2 -1
- package/esm/src/matchers/and.js.map +1 -0
- package/esm/src/matchers/every.d.ts +3 -0
- package/esm/src/matchers/every.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/every.js +2 -1
- package/esm/src/matchers/every.js.map +1 -0
- package/esm/src/matchers/including.d.ts +3 -0
- package/esm/src/matchers/including.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/including.js +2 -1
- package/esm/src/matchers/including.js.map +1 -0
- package/esm/src/matchers/matching.d.ts +3 -0
- package/esm/src/matchers/matching.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/matching.js +2 -1
- package/esm/src/matchers/matching.js.map +1 -0
- package/esm/src/matchers/not.d.ts +3 -0
- package/esm/src/matchers/not.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/not.js +2 -1
- package/esm/src/matchers/not.js.map +1 -0
- package/esm/src/matchers/or.d.ts +3 -0
- package/esm/src/matchers/or.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/or.js +2 -1
- package/esm/src/matchers/or.js.map +1 -0
- package/esm/src/matchers/some.d.ts +3 -0
- package/esm/src/matchers/some.d.ts.map +1 -0
- package/{dist/esm → esm/src}/matchers/some.js +2 -1
- package/esm/src/matchers/some.js.map +1 -0
- package/esm/src/merge-objects.d.ts +2 -0
- package/esm/src/merge-objects.d.ts.map +1 -0
- package/{dist/cjs → esm/src}/merge-objects.js.map +1 -1
- package/esm/src/metadata.d.ts +50 -0
- package/esm/src/metadata.d.ts.map +1 -0
- package/esm/src/metadata.js +96 -0
- package/esm/src/metadata.js.map +1 -0
- package/{dist → esm/src}/resolvers.d.ts +1 -1
- package/esm/src/resolvers.d.ts.map +1 -0
- package/{dist/esm → esm/src}/resolvers.js +3 -3
- package/esm/src/resolvers.js.map +1 -0
- package/{dist → esm/src}/serialize.d.ts +3 -3
- package/esm/src/serialize.d.ts.map +1 -0
- package/{dist/esm → esm/src}/serialize.js +2 -3
- package/esm/src/serialize.js.map +1 -0
- package/{dist → esm/src}/specification.d.ts +6 -6
- package/esm/src/specification.d.ts.map +1 -0
- package/esm/src/specification.js.map +1 -0
- package/package.json +19 -47
- package/script/mod.d.ts +2 -0
- package/script/mod.d.ts.map +1 -0
- package/script/mod.js +18 -0
- package/script/mod.js.map +1 -0
- package/script/package.json +3 -0
- package/script/src/constructor.d.ts +4 -0
- package/script/src/constructor.d.ts.map +1 -0
- package/{dist/cjs → script/src}/constructor.js +61 -55
- package/script/src/constructor.js.map +1 -0
- package/script/src/converge.d.ts +3 -0
- package/script/src/converge.d.ts.map +1 -0
- package/{dist/cjs → script/src}/converge.js +1 -2
- package/script/src/converge.js.map +1 -0
- package/script/src/create-interactor.d.ts +18 -0
- package/script/src/create-interactor.d.ts.map +1 -0
- package/{dist/cjs → script/src}/create-interactor.js +3 -4
- package/script/src/create-interactor.js.map +1 -0
- package/script/src/element/click.d.ts +3 -0
- package/script/src/element/click.d.ts.map +1 -0
- package/script/src/element/click.js +8 -0
- package/script/src/element/click.js.map +1 -0
- package/script/src/errors.d.ts +13 -0
- package/script/src/errors.d.ts.map +1 -0
- package/{dist/cjs → script/src}/errors.js +24 -4
- package/script/src/errors.js.map +1 -0
- package/script/src/escape-html.d.ts +2 -0
- package/script/src/escape-html.d.ts.map +1 -0
- package/{dist/cjs → script/src}/escape-html.js +1 -2
- package/script/src/escape-html.js.map +1 -0
- package/script/src/filter-set.d.ts +10 -0
- package/script/src/filter-set.d.ts.map +1 -0
- package/{dist/cjs → script/src}/filter-set.js +16 -8
- package/script/src/filter-set.js.map +1 -0
- package/script/src/format.d.ts +10 -0
- package/script/src/format.d.ts.map +1 -0
- package/{dist/cjs → script/src}/format.js +3 -4
- package/script/src/format.js.map +1 -0
- package/script/src/index.d.ts +21 -0
- package/script/src/index.d.ts.map +1 -0
- package/script/src/index.js +36 -0
- package/script/src/index.js.map +1 -0
- package/script/src/inspector.d.ts +17 -0
- package/script/src/inspector.d.ts.map +1 -0
- package/{dist/cjs → script/src}/inspector.js +5 -6
- package/script/src/inspector.js.map +1 -0
- package/script/src/interaction.d.ts +70 -0
- package/script/src/interaction.d.ts.map +1 -0
- package/{dist/cjs → script/src}/interaction.js +5 -6
- package/script/src/interaction.js.map +1 -0
- package/script/src/locator.d.ts +10 -0
- package/script/src/locator.d.ts.map +1 -0
- package/script/src/locator.js +29 -0
- package/script/src/locator.js.map +1 -0
- package/script/src/match.d.ts +54 -0
- package/script/src/match.d.ts.map +1 -0
- package/{dist/cjs → script/src}/match.js +105 -22
- package/script/src/match.js.map +1 -0
- package/script/src/matcher.d.ts +15 -0
- package/script/src/matcher.d.ts.map +1 -0
- package/{dist/cjs → script/src}/matcher.js +13 -5
- package/script/src/matcher.js.map +1 -0
- package/script/src/matchers/and.d.ts +3 -0
- package/script/src/matchers/and.d.ts.map +1 -0
- package/script/src/matchers/and.js +19 -0
- package/script/src/matchers/and.js.map +1 -0
- package/script/src/matchers/every.d.ts +3 -0
- package/script/src/matchers/every.d.ts.map +1 -0
- package/script/src/matchers/every.js +19 -0
- package/script/src/matchers/every.js.map +1 -0
- package/script/src/matchers/including.d.ts +3 -0
- package/script/src/matchers/including.d.ts.map +1 -0
- package/{dist/cjs → script/src}/matchers/including.js +4 -4
- package/script/src/matchers/including.js.map +1 -0
- package/script/src/matchers/matching.d.ts +3 -0
- package/script/src/matchers/matching.d.ts.map +1 -0
- package/{dist/cjs → script/src}/matchers/matching.js +4 -4
- package/script/src/matchers/matching.js.map +1 -0
- package/script/src/matchers/not.d.ts +3 -0
- package/script/src/matchers/not.d.ts.map +1 -0
- package/script/src/matchers/not.js +19 -0
- package/script/src/matchers/not.js.map +1 -0
- package/script/src/matchers/or.d.ts +3 -0
- package/script/src/matchers/or.d.ts.map +1 -0
- package/script/src/matchers/or.js +19 -0
- package/script/src/matchers/or.js.map +1 -0
- package/script/src/matchers/some.d.ts +3 -0
- package/script/src/matchers/some.d.ts.map +1 -0
- package/script/src/matchers/some.js +19 -0
- package/script/src/matchers/some.js.map +1 -0
- package/script/src/merge-objects.d.ts +2 -0
- package/script/src/merge-objects.d.ts.map +1 -0
- package/{dist/esm → script/src}/merge-objects.js.map +1 -1
- package/script/src/metadata.d.ts +50 -0
- package/script/src/metadata.d.ts.map +1 -0
- package/script/src/metadata.js +105 -0
- package/script/src/metadata.js.map +1 -0
- package/script/src/resolvers.d.ts +9 -0
- package/script/src/resolvers.d.ts.map +1 -0
- package/{dist/cjs → script/src}/resolvers.js +17 -18
- package/script/src/resolvers.js.map +1 -0
- package/script/src/serialize.d.ts +13 -0
- package/script/src/serialize.d.ts.map +1 -0
- package/{dist/cjs → script/src}/serialize.js +6 -8
- package/script/src/serialize.js.map +1 -0
- package/script/src/specification.d.ts +216 -0
- package/script/src/specification.d.ts.map +1 -0
- package/script/src/specification.js.map +1 -0
- package/src/mod.ts +1 -0
- package/src/{constructor.ts → src/constructor.ts} +25 -16
- package/src/{converge.ts → src/converge.ts} +1 -1
- package/src/{create-interactor.ts → src/create-interactor.ts} +2 -2
- package/src/src/element/click.ts +5 -0
- package/src/{errors.ts → src/errors.ts} +4 -4
- package/src/{filter-set.ts → src/filter-set.ts} +2 -3
- package/src/{format.ts → src/format.ts} +2 -2
- package/src/src/index.ts +31 -0
- package/src/{inspector.ts → src/inspector.ts} +3 -3
- package/src/{interaction.ts → src/interaction.ts} +4 -4
- package/src/{locator.ts → src/locator.ts} +3 -3
- package/src/{match.ts → src/match.ts} +5 -6
- package/src/{matcher.ts → src/matcher.ts} +12 -0
- package/src/{matchers → src/matchers}/and.ts +3 -1
- package/src/{matchers → src/matchers}/every.ts +3 -1
- package/src/{matchers → src/matchers}/including.ts +3 -1
- package/src/{matchers → src/matchers}/matching.ts +3 -1
- package/src/{matchers → src/matchers}/not.ts +3 -1
- package/src/{matchers → src/matchers}/or.ts +3 -1
- package/src/{matchers → src/matchers}/some.ts +3 -1
- package/src/src/merge-objects.ts +4 -0
- package/src/src/metadata.ts +166 -0
- package/src/{resolvers.ts → src/resolvers.ts} +4 -4
- package/src/{serialize.ts → src/serialize.ts} +4 -4
- package/src/{specification.ts → src/specification.ts} +6 -6
- package/dist/cjs/constructor.js.map +0 -1
- package/dist/cjs/converge.js.map +0 -1
- package/dist/cjs/create-interactor.js.map +0 -1
- package/dist/cjs/element/click.js +0 -12
- package/dist/cjs/element/click.js.map +0 -1
- package/dist/cjs/errors.js.map +0 -1
- package/dist/cjs/escape-html.js.map +0 -1
- package/dist/cjs/filter-set.js.map +0 -1
- package/dist/cjs/format.js.map +0 -1
- package/dist/cjs/index.js +0 -28
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/inspector.js.map +0 -1
- package/dist/cjs/interaction.js.map +0 -1
- package/dist/cjs/locator.js +0 -19
- package/dist/cjs/locator.js.map +0 -1
- package/dist/cjs/match.js.map +0 -1
- package/dist/cjs/matcher.js.map +0 -1
- package/dist/cjs/matchers/and.js +0 -19
- package/dist/cjs/matchers/and.js.map +0 -1
- package/dist/cjs/matchers/every.js +0 -19
- package/dist/cjs/matchers/every.js.map +0 -1
- package/dist/cjs/matchers/including.js.map +0 -1
- package/dist/cjs/matchers/matching.js.map +0 -1
- package/dist/cjs/matchers/not.js +0 -19
- package/dist/cjs/matchers/not.js.map +0 -1
- package/dist/cjs/matchers/or.js +0 -19
- package/dist/cjs/matchers/or.js.map +0 -1
- package/dist/cjs/matchers/some.js +0 -19
- package/dist/cjs/matchers/some.js.map +0 -1
- package/dist/cjs/resolvers.js.map +0 -1
- package/dist/cjs/serialize.js.map +0 -1
- package/dist/cjs/specification.js.map +0 -1
- package/dist/constructor.d.ts.map +0 -1
- package/dist/converge.d.ts +0 -3
- package/dist/converge.d.ts.map +0 -1
- package/dist/create-interactor.d.ts.map +0 -1
- package/dist/element/click.d.ts +0 -2
- package/dist/element/click.d.ts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/escape-html.d.ts.map +0 -1
- package/dist/esm/constructor.js.map +0 -1
- package/dist/esm/converge.js.map +0 -1
- package/dist/esm/create-interactor.js.map +0 -1
- package/dist/esm/element/click.js +0 -5
- package/dist/esm/element/click.js.map +0 -1
- package/dist/esm/errors.js +0 -25
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/escape-html.js.map +0 -1
- package/dist/esm/filter-set.js.map +0 -1
- package/dist/esm/format.js.map +0 -1
- package/dist/esm/index.js +0 -13
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/inspector.js.map +0 -1
- package/dist/esm/interaction.js.map +0 -1
- package/dist/esm/locator.js +0 -15
- package/dist/esm/locator.js.map +0 -1
- package/dist/esm/match.js.map +0 -1
- package/dist/esm/matcher.js.map +0 -1
- package/dist/esm/matchers/and.js.map +0 -1
- package/dist/esm/matchers/every.js.map +0 -1
- package/dist/esm/matchers/including.js.map +0 -1
- package/dist/esm/matchers/matching.js.map +0 -1
- package/dist/esm/matchers/not.js.map +0 -1
- package/dist/esm/matchers/or.js.map +0 -1
- package/dist/esm/matchers/some.js.map +0 -1
- package/dist/esm/resolvers.js.map +0 -1
- package/dist/esm/serialize.js.map +0 -1
- package/dist/esm/specification.js.map +0 -1
- package/dist/filter-set.d.ts.map +0 -1
- package/dist/format.d.ts.map +0 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +0 -1
- package/dist/inspector.d.ts.map +0 -1
- package/dist/interaction.d.ts.map +0 -1
- package/dist/locator.d.ts.map +0 -1
- package/dist/match.d.ts.map +0 -1
- package/dist/matcher.d.ts.map +0 -1
- package/dist/matchers/and.d.ts +0 -3
- package/dist/matchers/and.d.ts.map +0 -1
- package/dist/matchers/every.d.ts +0 -3
- package/dist/matchers/every.d.ts.map +0 -1
- package/dist/matchers/including.d.ts +0 -3
- package/dist/matchers/including.d.ts.map +0 -1
- package/dist/matchers/matching.d.ts +0 -3
- package/dist/matchers/matching.d.ts.map +0 -1
- package/dist/matchers/not.d.ts +0 -3
- package/dist/matchers/not.d.ts.map +0 -1
- package/dist/matchers/or.d.ts +0 -3
- package/dist/matchers/or.d.ts.map +0 -1
- package/dist/matchers/some.d.ts +0 -3
- package/dist/matchers/some.d.ts.map +0 -1
- package/dist/merge-objects.d.ts +0 -2
- package/dist/merge-objects.d.ts.map +0 -1
- package/dist/resolvers.d.ts.map +0 -1
- package/dist/serialize.d.ts.map +0 -1
- package/dist/specification.d.ts.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/src/element/click.ts +0 -5
- package/src/index.ts +0 -18
- package/src/merge-objects.ts +0 -2
- /package/{dist/esm → esm/src}/converge.js +0 -0
- /package/{dist → esm/src}/errors.d.ts +0 -0
- /package/{dist → esm/src}/escape-html.d.ts +0 -0
- /package/{dist/esm → esm/src}/escape-html.js +0 -0
- /package/{dist/esm → esm/src}/format.js +0 -0
- /package/{dist/esm → esm/src}/merge-objects.js +0 -0
- /package/{dist/esm → esm/src}/specification.js +0 -0
- /package/{dist/cjs → script/src}/merge-objects.js +0 -0
- /package/{dist/cjs → script/src}/specification.js +0 -0
- /package/src/{escape-html.ts → src/escape-html.ts} +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MATCHER_CONSTRUCTOR_METADATA = exports.INTERACTOR_CONSTRUCTOR_METADATA = exports.CONSTRUCTOR_METADATA_VERSION = void 0;
|
|
4
|
+
exports.getInteractorConstructorMetadata = getInteractorConstructorMetadata;
|
|
5
|
+
exports.isInteractorConstructor = isInteractorConstructor;
|
|
6
|
+
exports.getMatcherConstructorMetadata = getMatcherConstructorMetadata;
|
|
7
|
+
exports.isMatcherConstructor = isMatcherConstructor;
|
|
8
|
+
exports.defineInteractorConstructorMetadata = defineInteractorConstructorMetadata;
|
|
9
|
+
exports.defineMatcherConstructorMetadata = defineMatcherConstructorMetadata;
|
|
10
|
+
/**
|
|
11
|
+
* Version of the metadata attached to interactor and matcher constructors.
|
|
12
|
+
*
|
|
13
|
+
* Consumers should use the helpers in this module instead of reading the
|
|
14
|
+
* symbol properties directly.
|
|
15
|
+
*/
|
|
16
|
+
exports.CONSTRUCTOR_METADATA_VERSION = 1;
|
|
17
|
+
/** @internal */
|
|
18
|
+
exports.INTERACTOR_CONSTRUCTOR_METADATA = Symbol.for("@interactors/core/interactor-constructor-metadata");
|
|
19
|
+
/** @internal */
|
|
20
|
+
exports.MATCHER_CONSTRUCTOR_METADATA = Symbol.for("@interactors/core/matcher-constructor-metadata");
|
|
21
|
+
/**
|
|
22
|
+
* Return stable, serializable metadata for an interactor constructor.
|
|
23
|
+
*/
|
|
24
|
+
function getInteractorConstructorMetadata(value) {
|
|
25
|
+
if (typeof value !== "function") {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
let metadata = Reflect.get(value, exports.INTERACTOR_CONSTRUCTOR_METADATA);
|
|
29
|
+
return isInteractorConstructorMetadata(metadata) ? metadata : undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Determine whether a value was created by {@link createInteractor}.
|
|
33
|
+
*
|
|
34
|
+
* The brand uses the global symbol registry so this works when the producer
|
|
35
|
+
* and consumer load different copies of `@interactors/core`.
|
|
36
|
+
*/
|
|
37
|
+
function isInteractorConstructor(value) {
|
|
38
|
+
return getInteractorConstructorMetadata(value) !== undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Return stable, serializable metadata for a matcher constructor.
|
|
42
|
+
*/
|
|
43
|
+
function getMatcherConstructorMetadata(value) {
|
|
44
|
+
if (typeof value !== "function") {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
let metadata = Reflect.get(value, exports.MATCHER_CONSTRUCTOR_METADATA);
|
|
48
|
+
return isMatcherConstructorMetadata(metadata) ? metadata : undefined;
|
|
49
|
+
}
|
|
50
|
+
/** Determine whether a value was created by {@link createMatcher}. */
|
|
51
|
+
function isMatcherConstructor(value) {
|
|
52
|
+
return getMatcherConstructorMetadata(value) !== undefined;
|
|
53
|
+
}
|
|
54
|
+
/** @internal */
|
|
55
|
+
function defineInteractorConstructorMetadata(constructor, metadata) {
|
|
56
|
+
defineMetadata(constructor, exports.INTERACTOR_CONSTRUCTOR_METADATA, {
|
|
57
|
+
kind: "interactor",
|
|
58
|
+
version: exports.CONSTRUCTOR_METADATA_VERSION,
|
|
59
|
+
name: metadata.name,
|
|
60
|
+
actions: Object.freeze([...metadata.actions].sort()),
|
|
61
|
+
filters: Object.freeze([...metadata.filters].sort()),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** @internal */
|
|
65
|
+
function defineMatcherConstructorMetadata(constructor, metadata) {
|
|
66
|
+
defineMetadata(constructor, exports.MATCHER_CONSTRUCTOR_METADATA, {
|
|
67
|
+
kind: "matcher",
|
|
68
|
+
version: exports.CONSTRUCTOR_METADATA_VERSION,
|
|
69
|
+
name: metadata.name,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function defineMetadata(constructor, key, metadata) {
|
|
73
|
+
Object.defineProperty(constructor, key, {
|
|
74
|
+
configurable: false,
|
|
75
|
+
enumerable: false,
|
|
76
|
+
writable: false,
|
|
77
|
+
value: Object.freeze(metadata),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function isInteractorConstructorMetadata(value) {
|
|
81
|
+
if (!isRecord(value)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return value.kind === "interactor" &&
|
|
85
|
+
value.version === exports.CONSTRUCTOR_METADATA_VERSION &&
|
|
86
|
+
typeof value.name === "string" &&
|
|
87
|
+
isStringArray(value.actions) &&
|
|
88
|
+
isStringArray(value.filters);
|
|
89
|
+
}
|
|
90
|
+
function isMatcherConstructorMetadata(value) {
|
|
91
|
+
if (!isRecord(value)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return value.kind === "matcher" &&
|
|
95
|
+
value.version === exports.CONSTRUCTOR_METADATA_VERSION &&
|
|
96
|
+
typeof value.name === "string";
|
|
97
|
+
}
|
|
98
|
+
function isRecord(value) {
|
|
99
|
+
return typeof value === "object" && value !== null;
|
|
100
|
+
}
|
|
101
|
+
function isStringArray(value) {
|
|
102
|
+
return Array.isArray(value) &&
|
|
103
|
+
value.every((item) => typeof item === "string");
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/src/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InteractorOptions } from './specification.js';
|
|
2
|
+
export declare function findElements<E extends Element>(parentElement: Element, interactor: InteractorOptions<any, any, any>): E[];
|
|
3
|
+
export declare function hasMatchMatching(parentElement: Element, interactor: InteractorOptions<any, any, any>): boolean;
|
|
4
|
+
export declare function resolveUnique(parentElement: Element, interactor: InteractorOptions<any, any, any>): Element;
|
|
5
|
+
export declare function resolveFirst(parentElement: Element, interactor: InteractorOptions<any, any, any>): Element;
|
|
6
|
+
export declare function resolveEmpty(parentElement: Element, interactor: InteractorOptions<any, any, any>): void;
|
|
7
|
+
export declare function unsafeSyncResolveParent(options: InteractorOptions<any, any, any>): Element;
|
|
8
|
+
export declare function unsafeSyncResolveUnique<E extends Element>(options: InteractorOptions<E, any, any>): E;
|
|
9
|
+
//# sourceMappingURL=resolvers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../src/src/resolvers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAYzH;AA0BD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAE9G;AAcD,wBAAgB,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAS3G;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAE1G;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAOvG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAE1F;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAErG"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.findElements = findElements;
|
|
5
|
+
exports.hasMatchMatching = hasMatchMatching;
|
|
6
|
+
exports.resolveUnique = resolveUnique;
|
|
7
|
+
exports.resolveFirst = resolveFirst;
|
|
8
|
+
exports.resolveEmpty = resolveEmpty;
|
|
9
|
+
exports.unsafeSyncResolveParent = unsafeSyncResolveParent;
|
|
10
|
+
exports.unsafeSyncResolveUnique = unsafeSyncResolveUnique;
|
|
5
11
|
const globals_1 = require("@interactors/globals");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
12
|
+
const match_js_1 = require("./match.js");
|
|
13
|
+
const errors_js_1 = require("./errors.js");
|
|
14
|
+
const format_js_1 = require("./format.js");
|
|
9
15
|
const defaultSelector = 'div';
|
|
10
16
|
function findElements(parentElement, interactor) {
|
|
11
17
|
if (!interactor.name) {
|
|
@@ -22,22 +28,21 @@ function findElements(parentElement, interactor) {
|
|
|
22
28
|
return Array.from(parentElement.querySelectorAll(interactor.specification.selector || defaultSelector));
|
|
23
29
|
}
|
|
24
30
|
}
|
|
25
|
-
exports.findElements = findElements;
|
|
26
31
|
function findMatches(parentElement, interactor) {
|
|
27
|
-
return findElements(parentElement, interactor).map((e) => new
|
|
32
|
+
return findElements(parentElement, interactor).map((e) => new match_js_1.Match(e, interactor.filter, interactor.locator));
|
|
28
33
|
}
|
|
29
34
|
function throwNoSuchElementError(matches, interactor) {
|
|
30
35
|
if (matches.length === 0) {
|
|
31
|
-
throw new
|
|
36
|
+
throw new errors_js_1.NoSuchElementError(`did not find ${(0, format_js_1.formatDescription)(interactor)}`);
|
|
32
37
|
}
|
|
33
38
|
else {
|
|
34
|
-
throw new
|
|
39
|
+
throw new errors_js_1.NoSuchElementError(`did not find ${(0, format_js_1.formatDescription)(interactor)}, did you mean one of:\n\n${(0, format_js_1.formatMatchesTable)(interactor, matches)}`);
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
function findFirstMatch(parentElement, interactor) {
|
|
38
43
|
let matches = [];
|
|
39
44
|
for (let element of findElements(parentElement, interactor)) {
|
|
40
|
-
let match = new
|
|
45
|
+
let match = new match_js_1.Match(element, interactor.filter, interactor.locator);
|
|
41
46
|
matches.push(match);
|
|
42
47
|
if (match.matches) {
|
|
43
48
|
return match;
|
|
@@ -46,9 +51,8 @@ function findFirstMatch(parentElement, interactor) {
|
|
|
46
51
|
throwNoSuchElementError(matches, interactor);
|
|
47
52
|
}
|
|
48
53
|
function hasMatchMatching(parentElement, interactor) {
|
|
49
|
-
return findElements(parentElement, interactor).some(element => new
|
|
54
|
+
return findElements(parentElement, interactor).some(element => new match_js_1.Match(element, interactor.filter, interactor.locator).matches);
|
|
50
55
|
}
|
|
51
|
-
exports.hasMatchMatching = hasMatchMatching;
|
|
52
56
|
function findMatchesNonEmpty(parentElement, interactor) {
|
|
53
57
|
let matches = findMatches(parentElement, interactor);
|
|
54
58
|
let matching = matches.filter((m) => m.matches);
|
|
@@ -67,32 +71,27 @@ function resolveUnique(parentElement, interactor) {
|
|
|
67
71
|
}
|
|
68
72
|
else {
|
|
69
73
|
let alternatives = matching.map((m) => '- ' + m.elementDescription());
|
|
70
|
-
throw new
|
|
74
|
+
throw new errors_js_1.AmbiguousElementError(`${(0, format_js_1.formatDescription)(interactor)} matches multiple elements:\n\n${alternatives.join('\n')}`);
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
|
-
exports.resolveUnique = resolveUnique;
|
|
74
77
|
// Given a parent element, and an interactor, find the first matching element and
|
|
75
78
|
// return it. If no elements match, raise an error.
|
|
76
79
|
function resolveFirst(parentElement, interactor) {
|
|
77
80
|
return findFirstMatch(parentElement, interactor).element;
|
|
78
81
|
}
|
|
79
|
-
exports.resolveFirst = resolveFirst;
|
|
80
82
|
// Given a parent element, and an interactor, check if there are any matching
|
|
81
83
|
// elements, and throw an error if there are. Otherwise return undefined.
|
|
82
84
|
function resolveEmpty(parentElement, interactor) {
|
|
83
85
|
let matching = findMatches(parentElement, interactor).filter((m) => m.matches);
|
|
84
86
|
if (matching.length !== 0) {
|
|
85
87
|
let alternatives = matching.map((m) => '- ' + m.elementDescription());
|
|
86
|
-
throw new
|
|
88
|
+
throw new errors_js_1.NotAbsentError(`${(0, format_js_1.formatDescription)(interactor)} exists but should not:\n\n${alternatives.join('\n')}`);
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
|
-
exports.resolveEmpty = resolveEmpty;
|
|
90
91
|
function unsafeSyncResolveParent(options) {
|
|
91
92
|
return options.ancestors.reduce(resolveUnique, globals_1.globals.document.documentElement);
|
|
92
93
|
}
|
|
93
|
-
exports.unsafeSyncResolveParent = unsafeSyncResolveParent;
|
|
94
94
|
function unsafeSyncResolveUnique(options) {
|
|
95
95
|
return resolveUnique(unsafeSyncResolveParent(options), options);
|
|
96
96
|
}
|
|
97
|
-
exports.unsafeSyncResolveUnique = unsafeSyncResolveUnique;
|
|
98
97
|
//# sourceMappingURL=resolvers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../src/src/resolvers.ts"],"names":[],"mappings":";AACA,uDAAuD;;AAUvD,oCAYC;AA0BD,4CAEC;AAcD,sCASC;AAID,oCAEC;AAID,oCAOC;AAED,0DAEC;AAED,0DAEC;AAhGD,kDAA+C;AAC/C,yCAAmC;AACnC,2CAAwF;AACxF,2CAAoE;AAGpE,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,SAAgB,YAAY,CAAoB,aAAsB,EAAE,UAA4C;IAClH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0KAA0K,CAAC,CAAC;IAC9L,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,aAAa,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5D,OAAO,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,kGAAkG;QAClG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAM,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,aAAsB,EAAE,UAA4C;IACvF,OAAO,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAK,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA8B,EAAE,UAA4C;IAC3G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,8BAAkB,CAAC,gBAAgB,IAAA,6BAAiB,EAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,8BAAkB,CAAC,gBAAgB,IAAA,6BAAiB,EAAC,UAAU,CAAC,6BAA6B,IAAA,8BAAkB,EAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACpJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,aAAsB,EAAE,UAA4C;IAC1F,IAAI,OAAO,GAA0B,EAAE,CAAA;IACvC,KAAK,IAAI,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,KAAK,GAAG,IAAI,gBAAK,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QACrE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,gBAAgB,CAAC,aAAsB,EAAE,UAA4C;IACnG,OAAO,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,gBAAK,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AACpI,CAAC;AAED,SAAS,mBAAmB,CAAC,aAAsB,EAAE,UAA4C;IAC/F,IAAI,OAAO,GAAG,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,wEAAwE;AACxE,mCAAmC;AACnC,SAAgB,aAAa,CAAC,aAAsB,EAAE,UAA4C;IAChG,IAAI,QAAQ,GAAG,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,IAAI,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,iCAAqB,CAAC,GAAG,IAAA,6BAAiB,EAAC,UAAU,CAAC,kCAAkC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,mDAAmD;AACnD,SAAgB,YAAY,CAAC,aAAsB,EAAE,UAA4C;IAC/F,OAAO,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,OAAO,CAAA;AAC1D,CAAC;AAED,6EAA6E;AAC7E,yEAAyE;AACzE,SAAgB,YAAY,CAAC,aAAsB,EAAE,UAA4C;IAC/F,IAAI,QAAQ,GAAG,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAE9E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,0BAAc,CAAC,GAAG,IAAA,6BAAiB,EAAC,UAAU,CAAC,8BAA8B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpH,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAyC;IAC/E,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,iBAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,uBAAuB,CAAoB,OAAuC;IAChG,OAAO,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAM,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { InteractionOptions as SerializedInteractionOptions, InteractionType } from "@interactors/globals";
|
|
2
|
+
import type { InteractionOptions } from "./interaction.js";
|
|
3
|
+
import type { InteractorOptions } from "./specification.js";
|
|
4
|
+
export declare function serializeInteractorOptions(options: InteractorOptions<any, any, any>): {
|
|
5
|
+
interactor: string;
|
|
6
|
+
filter: {
|
|
7
|
+
[name: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
locator: string;
|
|
10
|
+
code: () => string;
|
|
11
|
+
};
|
|
12
|
+
export declare function serializeInteractionOptions<E extends Element, T>(type: InteractionType, { name, interactor: { options }, args, filters }: InteractionOptions<E, T>): SerializedInteractionOptions;
|
|
13
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/src/serialize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,IAAI,4BAA4B,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB,CAcA;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,EAC9D,IAAI,EAAE,eAAe,EACrB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GACzE,4BAA4B,CAsB9B"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.serializeInteractorOptions = serializeInteractorOptions;
|
|
4
|
+
exports.serializeInteractionOptions = serializeInteractionOptions;
|
|
4
5
|
const change_case_1 = require("change-case");
|
|
5
|
-
const
|
|
6
|
+
const matcher_js_1 = require("./matcher.js");
|
|
6
7
|
function serializeInteractorOptions(options) {
|
|
7
|
-
|
|
8
|
-
let locator = (0, matcher_1.matcherCode)((_a = options.locator) === null || _a === void 0 ? void 0 : _a.value);
|
|
8
|
+
let locator = (0, matcher_js_1.matcherCode)(options.locator?.value);
|
|
9
9
|
return {
|
|
10
10
|
interactor: options.name,
|
|
11
11
|
filter: options.filter.all,
|
|
12
12
|
locator,
|
|
13
13
|
code() {
|
|
14
14
|
let interactorName = (0, change_case_1.pascalCase)(options.name);
|
|
15
|
-
let filters = Object.entries(options.filter.all).map(([name, filter]) => `"${name}": ${(0,
|
|
15
|
+
let filters = Object.entries(options.filter.all).map(([name, filter]) => `"${name}": ${(0, matcher_js_1.matcherCode)(filter)}`);
|
|
16
16
|
return `${interactorName}(${[locator, filters.length && `{ ${filters.join(", ")} }`]
|
|
17
17
|
.filter(Boolean)
|
|
18
18
|
.join(", ")})`;
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
exports.serializeInteractorOptions = serializeInteractorOptions;
|
|
23
22
|
function serializeInteractionOptions(type, { name, interactor: { options }, args, filters }) {
|
|
24
23
|
let interactor = serializeInteractorOptions(options);
|
|
25
24
|
let ancestors = options.ancestors.map((ancestor) => serializeInteractorOptions(ancestor));
|
|
@@ -32,7 +31,7 @@ function serializeInteractionOptions(type, { name, interactor: { options }, args
|
|
|
32
31
|
code() {
|
|
33
32
|
let serializedArgs = "";
|
|
34
33
|
if (filters) {
|
|
35
|
-
let serializedFilters = Object.entries(filters).map(([name, filter]) => `"${name}": ${(0,
|
|
34
|
+
let serializedFilters = Object.entries(filters).map(([name, filter]) => `"${name}": ${(0, matcher_js_1.matcherCode)(filter)}`);
|
|
36
35
|
serializedArgs = `{ ${serializedFilters.join(", ")} }`;
|
|
37
36
|
}
|
|
38
37
|
else if (args) {
|
|
@@ -44,5 +43,4 @@ function serializeInteractionOptions(type, { name, interactor: { options }, args
|
|
|
44
43
|
},
|
|
45
44
|
};
|
|
46
45
|
}
|
|
47
|
-
exports.serializeInteractionOptions = serializeInteractionOptions;
|
|
48
46
|
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/src/serialize.ts"],"names":[],"mappings":";;AAOA,gEAmBC;AAED,kEAyBC;AAnDD,6CAAyC;AAEzC,6CAA2C;AAG3C,SAAgB,0BAA0B,CAAC,OAAyC;IAMlF,IAAI,OAAO,GAAG,IAAA,wBAAW,EAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,IAAI;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAC1B,OAAO;QACP,IAAI;YACF,IAAI,cAAc,GAAG,IAAA,wBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAA,wBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9G,OAAO,GAAG,cAAc,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;iBACjF,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,IAAqB,EACrB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAA4B;IAE1E,IAAI,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1F,OAAO;QACL,GAAG,UAAU;QACb,SAAS;QACT,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;YACF,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAA,wBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7G,cAAc,GAAG,KAAK,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACzD,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,GAAG,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC;iBACjC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;iBAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { Operation } from '@effection/core';
|
|
2
|
+
import type { FilterSet } from './filter-set.js';
|
|
3
|
+
import type { Locator } from './locator.js';
|
|
4
|
+
import type { ActionInteraction, AssertionInteraction } from './interaction.js';
|
|
5
|
+
import type { MergeObjects } from './merge-objects.js';
|
|
6
|
+
import type { MaybeMatcher } from './matcher.js';
|
|
7
|
+
export type EmptyObject = Record<never, never>;
|
|
8
|
+
/**
|
|
9
|
+
* Instances of an interactor returned by an {@link InteractorConstructor}, use
|
|
10
|
+
* this class as its base. They are also extended with any additional actions
|
|
11
|
+
* defined in their {@link InteractorSpecification}.
|
|
12
|
+
*/
|
|
13
|
+
export interface Interactor<E extends Element, F extends FilterParams<any, any>> {
|
|
14
|
+
/**
|
|
15
|
+
* @hidden
|
|
16
|
+
*/
|
|
17
|
+
options: InteractorOptions<E, any, any>;
|
|
18
|
+
/**
|
|
19
|
+
* @returns a human readable description of this interactor
|
|
20
|
+
*/
|
|
21
|
+
description: string;
|
|
22
|
+
/**
|
|
23
|
+
* Perform a one-off action on the given interactor. Takes a function which
|
|
24
|
+
* receives an element. This function converges, which means that it is rerun
|
|
25
|
+
* in a loop until it does not throw an error or times out.
|
|
26
|
+
*
|
|
27
|
+
* We recommend using this function for debugging only. You should normally
|
|
28
|
+
* define an action in an {@link InteractorSpecification}.
|
|
29
|
+
*
|
|
30
|
+
* ## Example
|
|
31
|
+
*
|
|
32
|
+
* ``` typescript
|
|
33
|
+
* await Link('Next').perform((e) => e.click());
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
perform(fn: (element: E) => void): ActionInteraction<E, void>;
|
|
37
|
+
/**
|
|
38
|
+
* Perform a one-off assertion on the given interactor. Takes a function which
|
|
39
|
+
* receives an element. This function converges, which means that it is rerun
|
|
40
|
+
* in a loop until it does not throw an error or times out.
|
|
41
|
+
*
|
|
42
|
+
* We recommend using this function for debugging only. You should normally
|
|
43
|
+
* define a filter in an {@link InteractorSpecification}.
|
|
44
|
+
*
|
|
45
|
+
* ## Example
|
|
46
|
+
*
|
|
47
|
+
* ``` typescript
|
|
48
|
+
* await Link('Next').assert((e) => assert(e.tagName === 'A'));
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
assert(fn: (element: E) => void): AssertionInteraction<E, void>;
|
|
52
|
+
/**
|
|
53
|
+
* An assertion which checks that an element matching the interactor exists.
|
|
54
|
+
* Throws an error if the element does not exist.
|
|
55
|
+
*
|
|
56
|
+
* ## Example
|
|
57
|
+
*
|
|
58
|
+
* ``` typescript
|
|
59
|
+
* await Link('Next').exists();
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
exists(): AssertionInteraction<E, void> & FilterObject<boolean, Element>;
|
|
63
|
+
/**
|
|
64
|
+
* An assertion which checks that an element matching the interactor does not
|
|
65
|
+
* exist. Throws an error if the element exists.
|
|
66
|
+
*
|
|
67
|
+
* ## Example
|
|
68
|
+
*
|
|
69
|
+
* ``` typescript
|
|
70
|
+
* await Link('Next').absent();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
absent(): AssertionInteraction<E, void> & FilterObject<boolean, Element>;
|
|
74
|
+
/**
|
|
75
|
+
* Checks that there is one element matching the interactor, and that this
|
|
76
|
+
* element matches the given filters. The available filters are defined by
|
|
77
|
+
* the {@link InteractorSpecification}.
|
|
78
|
+
*
|
|
79
|
+
* ## Example
|
|
80
|
+
*
|
|
81
|
+
* ``` typescript
|
|
82
|
+
* await Link('Home').has({ href: '/' })
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
has(filters: F): AssertionInteraction<E, void>;
|
|
86
|
+
/**
|
|
87
|
+
* Identical to {@link has}, but reads better with some filters.
|
|
88
|
+
*
|
|
89
|
+
* ## Example
|
|
90
|
+
*
|
|
91
|
+
* ``` typescript
|
|
92
|
+
* await CheckBox('Accept conditions').is({ checked: true })
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
is(filters: F): AssertionInteraction<E, void>;
|
|
96
|
+
/**
|
|
97
|
+
* Returns a copy of the given interactor which is scoped to this interactor.
|
|
98
|
+
* When there are multiple matches for an interactor, this makes it possible
|
|
99
|
+
* to make them more specific by limiting the interactor to a section of the
|
|
100
|
+
* page.
|
|
101
|
+
*
|
|
102
|
+
* ## Example
|
|
103
|
+
*
|
|
104
|
+
* ``` typescript
|
|
105
|
+
* await Fieldset('Owner').find(TextField('Name')).fillIn('Jonas');
|
|
106
|
+
* await Fieldset('Brand').find(TextField('Name')).fillIn('Volkswagen');
|
|
107
|
+
* ```
|
|
108
|
+
* @param interactor the interactor which should be scoped
|
|
109
|
+
* @returns a scoped copy of the initial interactor
|
|
110
|
+
* @typeParam T the type of the interactor that we are going to scope
|
|
111
|
+
*/
|
|
112
|
+
find<T extends Interactor<any, any>>(interactor: T): T;
|
|
113
|
+
/**
|
|
114
|
+
* @hidden
|
|
115
|
+
*/
|
|
116
|
+
apply: FilterFn<string, Element>;
|
|
117
|
+
}
|
|
118
|
+
export type ActionFn<E extends Element, I extends Interactor<E, any>> = (interactor: I, ...args: any[]) => Operation<unknown>;
|
|
119
|
+
export type FilterFn<T, E extends Element> = (element: E) => T;
|
|
120
|
+
export type FilterObject<T, E extends Element> = {
|
|
121
|
+
apply: FilterFn<T, E>;
|
|
122
|
+
default?: T;
|
|
123
|
+
};
|
|
124
|
+
export type FilterDefinition<T, E extends Element> = FilterFn<T, E> | FilterObject<T, E>;
|
|
125
|
+
export type Filters<E extends Element> = Record<string, FilterDefinition<unknown, E>>;
|
|
126
|
+
export type Actions<E extends Element, I extends Interactor<E, any>> = Record<string, ActionFn<E, I>>;
|
|
127
|
+
export type SelectorFn<E extends Element> = (parentElement: Element) => E[];
|
|
128
|
+
export type InteractorSpecification<E extends Element, F extends Filters<E>, A extends Actions<E, Interactor<E, EmptyObject>>> = {
|
|
129
|
+
/**
|
|
130
|
+
* The CSS selector that this interactor uses to find matching elements
|
|
131
|
+
*/
|
|
132
|
+
selector?: string | SelectorFn<E>;
|
|
133
|
+
actions?: A;
|
|
134
|
+
filters?: F;
|
|
135
|
+
/**
|
|
136
|
+
* A function which returns a string value for a matched element, which can
|
|
137
|
+
* be used to locate a specific instance of this interactor. The `value`
|
|
138
|
+
* parameter of an {@link InteractorConstructor} must match the value
|
|
139
|
+
* returned from the locator function.
|
|
140
|
+
*/
|
|
141
|
+
locator?: FilterDefinition<string, E>;
|
|
142
|
+
};
|
|
143
|
+
export type ActionMethods<E extends Element, A extends Actions<E, I>, I extends Interactor<E, any>> = {
|
|
144
|
+
[P in keyof A]: A[P] extends ((interactor: I, ...args: infer TArgs) => Operation<infer TReturn>) ? ((...args: TArgs) => ActionInteraction<E, TReturn>) : never;
|
|
145
|
+
};
|
|
146
|
+
export type FilterMethods<E extends Element, F extends Filters<E>> = {
|
|
147
|
+
[P in keyof F]: F[P] extends FilterFn<infer TReturn, any> ? (() => AssertionInteraction<E, TReturn> & FilterObject<TReturn, Element>) : F[P] extends FilterObject<infer TReturn, any> ? (() => AssertionInteraction<E, TReturn> & FilterObject<TReturn, Element>) : never;
|
|
148
|
+
};
|
|
149
|
+
export type FilterReturn<F> = {
|
|
150
|
+
[P in keyof F]?: F[P] extends MaybeMatcher<infer T> ? T : never;
|
|
151
|
+
};
|
|
152
|
+
export type FilterParams<E extends Element, F extends Filters<E>> = keyof F extends never ? never : {
|
|
153
|
+
[P in keyof F]?: F[P] extends FilterFn<infer TArg, E> ? MaybeMatcher<TArg> : F[P] extends FilterObject<infer TArg, E> ? MaybeMatcher<TArg> : never;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* An interactor constructor is a function which can be used to initialize an
|
|
157
|
+
* {@link Interactor}. When calling {@link createInteractor}, you will get
|
|
158
|
+
* back an interactor constructor.
|
|
159
|
+
*
|
|
160
|
+
* The constructor can be called with a locator value, and an object of
|
|
161
|
+
* filters. Both are optional, and can be omitted.
|
|
162
|
+
*
|
|
163
|
+
* @typeParam E The type of DOM Element that this interactor operates on.
|
|
164
|
+
* @typeParam F the filters of this interactor, this is usually inferred from the specification
|
|
165
|
+
* @typeParam A the actions of this interactor, this is usually inferred from the specification
|
|
166
|
+
*/
|
|
167
|
+
export interface InteractorConstructor<E extends Element, FP extends FilterParams<any, any>, FM extends FilterMethods<any, any>, AM extends ActionMethods<any, any, any>> {
|
|
168
|
+
interactorName: string;
|
|
169
|
+
selector(value: string | SelectorFn<E>): InteractorConstructor<E, FP, FM, AM>;
|
|
170
|
+
locator(value: FilterDefinition<string, E>): InteractorConstructor<E, FP, FM, AM>;
|
|
171
|
+
filters<FR extends Filters<E>>(filters: FR): InteractorConstructor<E, MergeObjects<FP, FilterParams<E, FR>>, MergeObjects<FM, FilterMethods<E, FR>>, AM>;
|
|
172
|
+
actions<I extends Interactor<E, FP> & FM & AM, AR extends Actions<E, I>>(actions: AR): InteractorConstructor<E, FP, FM, MergeObjects<AM, ActionMethods<E, AR, I>>>;
|
|
173
|
+
extend<ER extends E = E>(name: string): InteractorConstructor<ER, FP, FM, AM>;
|
|
174
|
+
/**
|
|
175
|
+
* The constructor can be called with filters only:
|
|
176
|
+
*
|
|
177
|
+
* ``` typescript
|
|
178
|
+
* Link({ id: 'home-link', href: '/' });
|
|
179
|
+
* ```
|
|
180
|
+
*
|
|
181
|
+
* Or with no arguments, this can be especially useful when finding a nested element.
|
|
182
|
+
*
|
|
183
|
+
* ```
|
|
184
|
+
* ListItem('JavaScript').find(Link()).click(); // click the only link within a specific list item
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @param filters An object describing a set of filters to apply, which should match the value of applying the filters defined in the {@link InteractorSpecification} to the element.
|
|
188
|
+
*/
|
|
189
|
+
(filters?: FP): Interactor<E, FP> & FM & AM;
|
|
190
|
+
/**
|
|
191
|
+
* The constructor can be called with a locator:
|
|
192
|
+
*
|
|
193
|
+
* ``` typescript
|
|
194
|
+
* Link('Home');
|
|
195
|
+
* Link(/^home/i);
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* Or with a locator and options:
|
|
199
|
+
*
|
|
200
|
+
* ``` typescript
|
|
201
|
+
* Link('Home', { href: '/' });
|
|
202
|
+
* ```
|
|
203
|
+
*
|
|
204
|
+
* @param value The locator value, which should match the value of applying the locator function defined in the {@link InteractorSpecification} to the element.
|
|
205
|
+
* @param filters An object describing a set of filters to apply, which should match the value of applying the filters defined in the {@link InteractorSpecification} to the element.
|
|
206
|
+
*/
|
|
207
|
+
(value: MaybeMatcher<string> | RegExp, filters?: FP): Interactor<E, FP> & FM & AM;
|
|
208
|
+
}
|
|
209
|
+
export type InteractorOptions<E extends Element, F extends Filters<E>, A extends Actions<E, Interactor<E, EmptyObject>>> = {
|
|
210
|
+
name: string;
|
|
211
|
+
specification: InteractorSpecification<E, F, A>;
|
|
212
|
+
locator?: Locator<E>;
|
|
213
|
+
filter: FilterSet<E, F>;
|
|
214
|
+
ancestors: InteractorOptions<any, any, any>[];
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=specification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specification.d.ts","sourceRoot":"","sources":["../../src/src/specification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specification.js","sourceRoot":"","sources":["../../src/src/specification.ts"],"names":[],"mappings":";AAAA,uDAAuD"}
|
package/src/mod.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/index.js'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
|
-
import { converge } from './converge';
|
|
4
|
-
import { MergeObjects } from './merge-objects';
|
|
5
|
-
import {
|
|
3
|
+
import { converge } from './converge.js';
|
|
4
|
+
import type { MergeObjects } from './merge-objects.js';
|
|
5
|
+
import type {
|
|
6
6
|
InteractorOptions,
|
|
7
7
|
ActionMethods,
|
|
8
8
|
InteractorConstructor,
|
|
@@ -14,16 +14,17 @@ import {
|
|
|
14
14
|
FilterMethods,
|
|
15
15
|
InteractorSpecification,
|
|
16
16
|
FilterObject,
|
|
17
|
-
} from './specification';
|
|
18
|
-
import { FilterSet } from './filter-set';
|
|
19
|
-
import { Locator } from './locator';
|
|
20
|
-
import { MatchFilter, applyFilter } from './match';
|
|
21
|
-
import { formatDescription } from './format';
|
|
22
|
-
import { FilterNotMatchingError } from './errors';
|
|
23
|
-
import { createInteraction, AssertionInteraction, ActionInteraction } from './interaction';
|
|
24
|
-
import { isMatcher } from './matcher';
|
|
25
|
-
import { matching } from './matchers/matching';
|
|
26
|
-
import { hasMatchMatching, resolveEmpty, resolveFirst, resolveUnique, unsafeSyncResolveParent, unsafeSyncResolveUnique } from './resolvers';
|
|
17
|
+
} from './specification.js';
|
|
18
|
+
import { FilterSet } from './filter-set.js';
|
|
19
|
+
import { Locator } from './locator.js';
|
|
20
|
+
import { MatchFilter, applyFilter } from './match.js';
|
|
21
|
+
import { formatDescription } from './format.js';
|
|
22
|
+
import { FilterNotMatchingError } from './errors.js';
|
|
23
|
+
import { createInteraction, type AssertionInteraction, type ActionInteraction } from './interaction.js';
|
|
24
|
+
import { isMatcher } from './matcher.js';
|
|
25
|
+
import { matching } from './matchers/matching.js';
|
|
26
|
+
import { hasMatchMatching, resolveEmpty, resolveFirst, resolveUnique, unsafeSyncResolveParent, unsafeSyncResolveUnique } from './resolvers.js';
|
|
27
|
+
import { defineInteractorConstructorMetadata } from "./metadata.js";
|
|
27
28
|
|
|
28
29
|
const defaultLocator: FilterDefinition<string, Element> = (element) => element.textContent || "";
|
|
29
30
|
|
|
@@ -137,7 +138,7 @@ export function instantiateInteractor<E extends Element, F extends Filters<E>, A
|
|
|
137
138
|
};
|
|
138
139
|
|
|
139
140
|
for (let [actionName, action] of Object.entries(options.specification.actions || {})) {
|
|
140
|
-
if (!
|
|
141
|
+
if (!Object.prototype.hasOwnProperty.call(interactor, actionName)) {
|
|
141
142
|
Object.defineProperty(interactor, actionName, {
|
|
142
143
|
value: function(...args: unknown[]) {
|
|
143
144
|
let actionDescription = actionName;
|
|
@@ -160,7 +161,7 @@ export function instantiateInteractor<E extends Element, F extends Filters<E>, A
|
|
|
160
161
|
}
|
|
161
162
|
|
|
162
163
|
for (let [filterName, filter] of Object.entries(options.specification.filters || {})) {
|
|
163
|
-
if (!
|
|
164
|
+
if (!Object.prototype.hasOwnProperty.call(interactor, filterName)) {
|
|
164
165
|
Object.defineProperty(interactor, filterName, {
|
|
165
166
|
value: function() {
|
|
166
167
|
return createInteraction('assertion', {
|
|
@@ -200,7 +201,7 @@ export function createConstructor<E extends Element, FP extends FilterParams<any
|
|
|
200
201
|
return instantiateInteractor({ name, specification, filter, locator, ancestors: [] }, unsafeSyncResolveUnique);
|
|
201
202
|
}
|
|
202
203
|
|
|
203
|
-
|
|
204
|
+
let constructor = Object.assign(initInteractor, {
|
|
204
205
|
interactorName: name,
|
|
205
206
|
selector: (value: string): InteractorConstructor<E, FP, FM, AM> => {
|
|
206
207
|
return createConstructor(name, { ...specification, selector: value });
|
|
@@ -218,4 +219,12 @@ export function createConstructor<E extends Element, FP extends FilterParams<any
|
|
|
218
219
|
return createConstructor(newName, specification) as unknown as InteractorConstructor<ER, FP, FM, AM>;
|
|
219
220
|
},
|
|
220
221
|
}) as unknown as InteractorConstructor<E, FP, FM, AM>;
|
|
222
|
+
|
|
223
|
+
defineInteractorConstructorMetadata(constructor, {
|
|
224
|
+
name,
|
|
225
|
+
actions: Object.keys(specification.actions ?? {}),
|
|
226
|
+
filters: Object.keys(specification.filters ?? {}),
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
return constructor;
|
|
221
230
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EmptyObject, InteractorConstructor } from './specification';
|
|
2
|
-
import { createConstructor } from './constructor';
|
|
1
|
+
import type { EmptyObject, InteractorConstructor } from './specification.js';
|
|
2
|
+
import { createConstructor } from './constructor.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create a custom interactor with the given name.
|