@elench/testkit 0.1.114 → 0.1.116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -8
- package/lib/cli/args.mjs +3 -3
- package/lib/cli/assistant/app.mjs +4 -2
- package/lib/cli/assistant/session.mjs +5 -1
- package/lib/cli/assistant/state.mjs +1 -2
- package/lib/cli/command-flags.mjs +4 -0
- package/lib/cli/commands/db/schema/refresh.mjs +21 -0
- package/lib/cli/commands/db/schema/verify.mjs +27 -0
- package/lib/cli/components/blocks/run-tree.mjs +7 -2
- package/lib/cli/components/hooks/use-element-layout.mjs +63 -0
- package/lib/cli/components/hooks/use-spinner-frame.mjs +26 -0
- package/lib/cli/entrypoint.mjs +1 -0
- package/lib/cli/operations/db/schema/refresh/operation.mjs +56 -0
- package/lib/cli/operations/db/{snapshot/capture → schema/verify}/operation.mjs +6 -27
- package/lib/cli/operations/run/operation.mjs +1 -0
- package/lib/cli/renderers/db-schema/text.mjs +7 -0
- package/lib/config/database.mjs +64 -0
- package/lib/config-api/index.d.ts +16 -1
- package/lib/config-api/index.mjs +31 -16
- package/lib/database/fingerprint.mjs +2 -0
- package/lib/database/index.mjs +142 -104
- package/lib/database/schema-source.mjs +295 -0
- package/lib/database/template-steps.mjs +158 -38
- package/lib/runner/orchestrator.mjs +4 -3
- package/lib/runner/template-steps.mjs +12 -1
- package/lib/runner/template.mjs +16 -1
- package/node_modules/@alcalzone/ansi-tokenize/README.md +0 -5
- package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +8 -0
- package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +10 -8
- package/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -1
- package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +1 -5
- package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +9 -45
- package/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -1
- package/node_modules/@alcalzone/ansi-tokenize/package.json +1 -1
- package/node_modules/@elench/next-analysis/package.json +1 -1
- package/node_modules/@elench/testkit-bridge/package.json +2 -2
- package/node_modules/@elench/testkit-protocol/package.json +1 -1
- package/node_modules/@elench/ts-analysis/package.json +1 -1
- package/node_modules/cli-boxes/index.d.ts +95 -90
- package/node_modules/cli-boxes/index.js +5 -2
- package/node_modules/cli-boxes/package.json +6 -13
- package/node_modules/cli-boxes/readme.md +15 -3
- package/node_modules/cli-truncate/index.d.ts +1 -1
- package/node_modules/cli-truncate/package.json +4 -4
- package/node_modules/cli-truncate/readme.md +1 -0
- package/node_modules/es-toolkit/CHANGELOG.md +801 -0
- package/node_modules/es-toolkit/src/compat/_internal/Equals.d.ts +1 -0
- package/node_modules/es-toolkit/src/compat/_internal/IsWritable.d.ts +3 -0
- package/node_modules/es-toolkit/src/compat/_internal/MutableList.d.ts +4 -0
- package/node_modules/es-toolkit/src/compat/_internal/RejectReadonly.d.ts +4 -0
- package/node_modules/esprima/ChangeLog +235 -0
- package/node_modules/ink/build/apply-styles.js +175 -0
- package/node_modules/ink/build/build-layout.js +77 -0
- package/node_modules/ink/build/calculate-wrapped-text.js +53 -0
- package/node_modules/ink/build/components/App.d.ts +1 -4
- package/node_modules/ink/build/components/App.js +22 -142
- package/node_modules/ink/build/components/App.js.map +1 -1
- package/node_modules/ink/build/components/AppContext.d.ts +3 -23
- package/node_modules/ink/build/components/AppContext.js +4 -7
- package/node_modules/ink/build/components/AppContext.js.map +1 -1
- package/node_modules/ink/build/components/Box.d.ts +3 -16
- package/node_modules/ink/build/components/Color.js +62 -0
- package/node_modules/ink/build/components/Cursor.d.ts +83 -0
- package/node_modules/ink/build/components/Cursor.js +53 -0
- package/node_modules/ink/build/components/Cursor.js.map +1 -0
- package/node_modules/ink/build/components/ErrorBoundary.d.ts +2 -2
- package/node_modules/ink/build/components/ErrorOverview.js +6 -6
- package/node_modules/ink/build/components/ErrorOverview.js.map +1 -1
- package/node_modules/ink/build/components/Static.js.map +1 -1
- package/node_modules/ink/build/components/StdinContext.d.ts +1 -7
- package/node_modules/ink/build/components/StdinContext.js +0 -1
- package/node_modules/ink/build/components/StdinContext.js.map +1 -1
- package/node_modules/ink/build/components/Text.d.ts +1 -1
- package/node_modules/ink/build/components/Text.js +1 -1
- package/node_modules/ink/build/components/Text.js.map +1 -1
- package/node_modules/ink/build/components/Transform.d.ts +1 -1
- package/node_modules/ink/build/devtools-window-polyfill.js +4 -7
- package/node_modules/ink/build/devtools-window-polyfill.js.map +1 -1
- package/node_modules/ink/build/devtools.js +6 -31
- package/node_modules/ink/build/devtools.js.map +1 -1
- package/node_modules/ink/build/dom.d.ts +1 -5
- package/node_modules/ink/build/dom.js +1 -20
- package/node_modules/ink/build/dom.js.map +1 -1
- package/node_modules/ink/build/experimental/apply-style.js +140 -0
- package/node_modules/ink/build/experimental/dom.js +123 -0
- package/node_modules/ink/build/experimental/output.js +91 -0
- package/node_modules/ink/build/experimental/reconciler.js +141 -0
- package/node_modules/ink/build/experimental/renderer.js +81 -0
- package/node_modules/ink/build/hooks/use-app.d.ts +1 -1
- package/node_modules/ink/build/hooks/use-app.js +1 -1
- package/node_modules/ink/build/hooks/use-cursor.d.ts +1 -1
- package/node_modules/ink/build/hooks/use-cursor.js +1 -1
- package/node_modules/ink/build/hooks/use-focus-manager.d.ts +2 -17
- package/node_modules/ink/build/hooks/use-focus-manager.js +1 -2
- package/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -1
- package/node_modules/ink/build/hooks/use-focus.d.ts +1 -2
- package/node_modules/ink/build/hooks/use-focus.js +4 -5
- package/node_modules/ink/build/hooks/use-focus.js.map +1 -1
- package/node_modules/ink/build/hooks/use-input.d.ts +1 -2
- package/node_modules/ink/build/hooks/use-input.js +80 -82
- package/node_modules/ink/build/hooks/use-input.js.map +1 -1
- package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.d.ts +1 -2
- package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js +1 -2
- package/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -1
- package/node_modules/ink/build/hooks/use-stderr.d.ts +1 -1
- package/node_modules/ink/build/hooks/use-stderr.js +1 -1
- package/node_modules/ink/build/hooks/use-stdin.d.ts +2 -4
- package/node_modules/ink/build/hooks/use-stdin.js +1 -2
- package/node_modules/ink/build/hooks/use-stdin.js.map +1 -1
- package/node_modules/ink/build/hooks/use-stdout.d.ts +1 -1
- package/node_modules/ink/build/hooks/use-stdout.js +1 -1
- package/node_modules/ink/build/hooks/useInput.js +38 -0
- package/node_modules/ink/build/index.d.ts +1 -8
- package/node_modules/ink/build/index.js +0 -4
- package/node_modules/ink/build/index.js.map +1 -1
- package/node_modules/ink/build/ink.d.ts +3 -48
- package/node_modules/ink/build/ink.js +155 -325
- package/node_modules/ink/build/ink.js.map +1 -1
- package/node_modules/ink/build/input-parser.d.ts +1 -4
- package/node_modules/ink/build/input-parser.js +30 -70
- package/node_modules/ink/build/input-parser.js.map +1 -1
- package/node_modules/ink/build/instance.js +205 -0
- package/node_modules/ink/build/layout.d.ts +7 -0
- package/node_modules/ink/build/layout.js +33 -0
- package/node_modules/ink/build/layout.js.map +1 -0
- package/node_modules/ink/build/log-update.d.ts +0 -1
- package/node_modules/ink/build/log-update.js +1 -13
- package/node_modules/ink/build/log-update.js.map +1 -1
- package/node_modules/ink/build/measure-element.d.ts +0 -4
- package/node_modules/ink/build/measure-element.js +0 -4
- package/node_modules/ink/build/measure-element.js.map +1 -1
- package/node_modules/ink/build/options.d.ts +52 -0
- package/node_modules/ink/build/options.js +2 -0
- package/node_modules/ink/build/options.js.map +1 -0
- package/node_modules/ink/build/output.js +0 -25
- package/node_modules/ink/build/output.js.map +1 -1
- package/node_modules/ink/build/parse-keypress.d.ts +3 -1
- package/node_modules/ink/build/parse-keypress.js +17 -19
- package/node_modules/ink/build/parse-keypress.js.map +1 -1
- package/node_modules/ink/build/reconciler.js +27 -46
- package/node_modules/ink/build/reconciler.js.map +1 -1
- package/node_modules/ink/build/render-border.js +18 -29
- package/node_modules/ink/build/render-border.js.map +1 -1
- package/node_modules/ink/build/render-to-string.js +1 -2
- package/node_modules/ink/build/render-to-string.js.map +1 -1
- package/node_modules/ink/build/render.d.ts +2 -57
- package/node_modules/ink/build/render.js +11 -18
- package/node_modules/ink/build/render.js.map +1 -1
- package/node_modules/ink/build/screen-reader-update.d.ts +13 -0
- package/node_modules/ink/build/screen-reader-update.js +38 -0
- package/node_modules/ink/build/screen-reader-update.js.map +1 -0
- package/node_modules/ink/build/styles.d.ts +16 -78
- package/node_modules/ink/build/styles.js +31 -102
- package/node_modules/ink/build/styles.js.map +1 -1
- package/node_modules/ink/build/utils.d.ts +2 -9
- package/node_modules/ink/build/utils.js +3 -18
- package/node_modules/ink/build/utils.js.map +1 -1
- package/node_modules/ink/build/wrap-text.js +0 -7
- package/node_modules/ink/build/wrap-text.js.map +1 -1
- package/node_modules/ink/build/write-synchronized.d.ts +1 -1
- package/node_modules/ink/build/write-synchronized.js +2 -4
- package/node_modules/ink/build/write-synchronized.js.map +1 -1
- package/node_modules/ink/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
- package/node_modules/ink/node_modules/emoji-regex/README.md +107 -0
- package/node_modules/ink/node_modules/emoji-regex/index.d.ts +3 -0
- package/node_modules/ink/node_modules/emoji-regex/index.js +4 -0
- package/node_modules/ink/node_modules/emoji-regex/index.mjs +4 -0
- package/node_modules/ink/node_modules/emoji-regex/package.json +45 -0
- package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/index.d.ts +1 -1
- package/node_modules/ink/node_modules/wrap-ansi/index.js +222 -0
- package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/index.d.ts +39 -0
- package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/index.js +82 -0
- package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/license +9 -0
- package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/package.json +64 -0
- package/node_modules/ink/node_modules/wrap-ansi/node_modules/string-width/readme.md +66 -0
- package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/package.json +11 -11
- package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/readme.md +0 -2
- package/node_modules/ink/package.json +98 -34
- package/node_modules/ink/readme.md +48 -554
- package/node_modules/slice-ansi/index.d.ts +1 -1
- package/node_modules/slice-ansi/index.js +89 -146
- package/node_modules/slice-ansi/package.json +5 -5
- package/node_modules/slice-ansi/readme.md +0 -1
- package/node_modules/slice-ansi/tokenize-ansi.js +1 -1
- package/package.json +14 -10
- package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.d.ts +188 -0
- package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.d.ts.map +1 -0
- package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.js +293 -0
- package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/dist/index.js.map +1 -0
- package/packages/testkit-bridge/node_modules/@elench/testkit-protocol/package.json +25 -0
- package/lib/cli/commands/db/snapshot/capture.mjs +0 -26
- package/lib/cli/renderers/db-snapshot-capture/text.mjs +0 -3
- package/node_modules/@alcalzone/ansi-tokenize/build/consts.d.ts +0 -17
- package/node_modules/@alcalzone/ansi-tokenize/build/consts.js +0 -28
- package/node_modules/@alcalzone/ansi-tokenize/build/consts.js.map +0 -1
- package/node_modules/ink/build/components/AnimationContext.d.ts +0 -9
- package/node_modules/ink/build/components/AnimationContext.js +0 -13
- package/node_modules/ink/build/components/AnimationContext.js.map +0 -1
- package/node_modules/ink/build/hooks/use-animation.d.ts +0 -49
- package/node_modules/ink/build/hooks/use-animation.js +0 -87
- package/node_modules/ink/build/hooks/use-animation.js.map +0 -1
- package/node_modules/ink/build/hooks/use-box-metrics.d.ts +0 -59
- package/node_modules/ink/build/hooks/use-box-metrics.js +0 -88
- package/node_modules/ink/build/hooks/use-box-metrics.js.map +0 -1
- package/node_modules/ink/build/hooks/use-paste.d.ts +0 -35
- package/node_modules/ink/build/hooks/use-paste.js +0 -62
- package/node_modules/ink/build/hooks/use-paste.js.map +0 -1
- package/node_modules/ink/build/hooks/use-window-size.d.ts +0 -18
- package/node_modules/ink/build/hooks/use-window-size.js +0 -22
- package/node_modules/ink/build/hooks/use-window-size.js.map +0 -1
- package/node_modules/wrap-ansi/index.js +0 -468
- /package/node_modules/{wrap-ansi → ink/node_modules/wrap-ansi}/license +0 -0
|
@@ -3,7 +3,7 @@ Slice a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escap
|
|
|
3
3
|
|
|
4
4
|
@param string - A string with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk).
|
|
5
5
|
@param startSlice - Zero-based visible-column index at which to start the slice. Grapheme clusters are kept intact.
|
|
6
|
-
@param endSlice - Zero-based visible-column index at which to end the slice.
|
|
6
|
+
@param endSlice - Zero-based visible-column index at which to end the slice.
|
|
7
7
|
|
|
8
8
|
@example
|
|
9
9
|
```
|
|
@@ -29,7 +29,7 @@ function applySgrFragments(activeStyles, fragments) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
function undoAnsiCodes(activeStyles) {
|
|
32
|
-
return [...activeStyles.keys()].
|
|
32
|
+
return [...activeStyles.keys()].reverse().join('');
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
function closeHyperlink(hyperlinkToken) {
|
|
@@ -59,130 +59,106 @@ function shouldIncludeSgrAfterEnd(token, activeStyles) {
|
|
|
59
59
|
return hasClosingEffect && !hasStartFragment;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
function
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
) {
|
|
72
|
-
const openCodeLength = parameters.activeHyperlink.code.length;
|
|
73
|
-
parameters.returnValue = parameters.returnValue.slice(0, parameters.activeHyperlinkOutputIndex) + parameters.returnValue.slice(parameters.activeHyperlinkOutputIndex + openCodeLength);
|
|
74
|
-
|
|
75
|
-
if (
|
|
76
|
-
parameters.pendingSgrOutputIndex !== undefined
|
|
77
|
-
&& parameters.pendingSgrOutputIndex > parameters.activeHyperlinkOutputIndex
|
|
78
|
-
) {
|
|
79
|
-
parameters.pendingSgrOutputIndex -= openCodeLength;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
parameters.activeHyperlink = undefined;
|
|
84
|
-
parameters.activeHyperlinkHasVisibleText = false;
|
|
85
|
-
parameters.activeHyperlinkOutputIndex = undefined;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function applySgrToken(parameters) {
|
|
89
|
-
if (
|
|
90
|
-
parameters.isPastEnd
|
|
91
|
-
&& !shouldIncludeSgrAfterEnd(parameters.token, parameters.activeStyles)
|
|
92
|
-
) {
|
|
93
|
-
return parameters;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
parameters.include
|
|
98
|
-
&& hasSgrStartFragment(parameters.token)
|
|
99
|
-
&& parameters.pendingSgrOutputIndex === undefined
|
|
100
|
-
) {
|
|
101
|
-
parameters.pendingSgrOutputIndex = parameters.returnValue.length;
|
|
102
|
-
parameters.pendingSgrActiveStyles = new Map(parameters.activeStyles);
|
|
62
|
+
function applySgrToken({token, isPastEnd, activeStyles, returnValue, include, activeHyperlink, position}) {
|
|
63
|
+
if (isPastEnd && !shouldIncludeSgrAfterEnd(token, activeStyles)) {
|
|
64
|
+
return {
|
|
65
|
+
activeStyles,
|
|
66
|
+
activeHyperlink,
|
|
67
|
+
position,
|
|
68
|
+
returnValue,
|
|
69
|
+
include,
|
|
70
|
+
};
|
|
103
71
|
}
|
|
104
72
|
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
|
|
73
|
+
activeStyles = applySgrFragments(activeStyles, token.fragments);
|
|
74
|
+
if (include) {
|
|
75
|
+
returnValue += token.code;
|
|
108
76
|
}
|
|
109
77
|
|
|
110
|
-
return
|
|
78
|
+
return {
|
|
79
|
+
activeStyles,
|
|
80
|
+
activeHyperlink,
|
|
81
|
+
position,
|
|
82
|
+
returnValue,
|
|
83
|
+
include,
|
|
84
|
+
};
|
|
111
85
|
}
|
|
112
86
|
|
|
113
|
-
function applyHyperlinkToken(
|
|
87
|
+
function applyHyperlinkToken({token, isPastEnd, activeStyles, activeHyperlink, position, returnValue, include}) {
|
|
114
88
|
if (
|
|
115
|
-
|
|
89
|
+
isPastEnd
|
|
116
90
|
&& (
|
|
117
|
-
|
|
118
|
-
|| !
|
|
91
|
+
token.action !== 'close'
|
|
92
|
+
|| !activeHyperlink
|
|
119
93
|
)
|
|
120
94
|
) {
|
|
121
|
-
return
|
|
95
|
+
return {
|
|
96
|
+
activeStyles,
|
|
97
|
+
activeHyperlink,
|
|
98
|
+
position,
|
|
99
|
+
returnValue,
|
|
100
|
+
include,
|
|
101
|
+
};
|
|
122
102
|
}
|
|
123
103
|
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (parameters.include) {
|
|
129
|
-
parameters.activeHyperlinkOutputIndex = parameters.returnValue.length;
|
|
130
|
-
}
|
|
131
|
-
} else if (parameters.token.action === 'close') {
|
|
132
|
-
if (
|
|
133
|
-
parameters.include
|
|
134
|
-
&& parameters.activeHyperlink
|
|
135
|
-
&& !parameters.activeHyperlinkHasVisibleText
|
|
136
|
-
) {
|
|
137
|
-
discardPendingHyperlink(parameters);
|
|
138
|
-
return parameters;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
parameters.activeHyperlink = undefined;
|
|
142
|
-
parameters.activeHyperlinkHasVisibleText = false;
|
|
143
|
-
parameters.activeHyperlinkOutputIndex = undefined;
|
|
104
|
+
if (token.action === 'open') {
|
|
105
|
+
activeHyperlink = token;
|
|
106
|
+
} else if (token.action === 'close') {
|
|
107
|
+
activeHyperlink = undefined;
|
|
144
108
|
}
|
|
145
109
|
|
|
146
|
-
if (
|
|
147
|
-
|
|
110
|
+
if (include) {
|
|
111
|
+
returnValue += token.code;
|
|
148
112
|
}
|
|
149
113
|
|
|
150
|
-
return
|
|
114
|
+
return {
|
|
115
|
+
activeStyles,
|
|
116
|
+
activeHyperlink,
|
|
117
|
+
position,
|
|
118
|
+
returnValue,
|
|
119
|
+
include,
|
|
120
|
+
};
|
|
151
121
|
}
|
|
152
122
|
|
|
153
|
-
function applyControlToken(
|
|
154
|
-
if (!
|
|
155
|
-
|
|
123
|
+
function applyControlToken({token, isPastEnd, activeStyles, activeHyperlink, position, returnValue, include}) {
|
|
124
|
+
if (!isPastEnd && include) {
|
|
125
|
+
returnValue += token.code;
|
|
156
126
|
}
|
|
157
127
|
|
|
158
|
-
return
|
|
128
|
+
return {
|
|
129
|
+
activeStyles,
|
|
130
|
+
activeHyperlink,
|
|
131
|
+
position,
|
|
132
|
+
returnValue,
|
|
133
|
+
include,
|
|
134
|
+
};
|
|
159
135
|
}
|
|
160
136
|
|
|
161
|
-
function applyCharacterToken(
|
|
137
|
+
function applyCharacterToken({token, start, activeStyles, activeHyperlink, position, returnValue, include}) {
|
|
162
138
|
if (
|
|
163
|
-
!
|
|
164
|
-
&&
|
|
165
|
-
&& !
|
|
139
|
+
!include
|
|
140
|
+
&& position >= start
|
|
141
|
+
&& !token.isGraphemeContinuation
|
|
166
142
|
) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (
|
|
170
|
-
|
|
171
|
-
parameters.returnValue += parameters.activeHyperlink.code;
|
|
143
|
+
include = true;
|
|
144
|
+
returnValue = [...activeStyles.values()].join('');
|
|
145
|
+
if (activeHyperlink) {
|
|
146
|
+
returnValue += activeHyperlink.code;
|
|
172
147
|
}
|
|
173
148
|
}
|
|
174
149
|
|
|
175
|
-
if (
|
|
176
|
-
|
|
177
|
-
parameters.pendingSgrOutputIndex = undefined;
|
|
178
|
-
parameters.pendingSgrActiveStyles = undefined;
|
|
179
|
-
if (parameters.activeHyperlink) {
|
|
180
|
-
parameters.activeHyperlinkHasVisibleText = true;
|
|
181
|
-
}
|
|
150
|
+
if (include) {
|
|
151
|
+
returnValue += token.value;
|
|
182
152
|
}
|
|
183
153
|
|
|
184
|
-
|
|
185
|
-
return
|
|
154
|
+
position += token.visibleWidth;
|
|
155
|
+
return {
|
|
156
|
+
activeStyles,
|
|
157
|
+
activeHyperlink,
|
|
158
|
+
position,
|
|
159
|
+
returnValue,
|
|
160
|
+
include,
|
|
161
|
+
};
|
|
186
162
|
}
|
|
187
163
|
|
|
188
164
|
const tokenHandlers = {
|
|
@@ -195,7 +171,21 @@ const tokenHandlers = {
|
|
|
195
171
|
function applyToken(parameters) {
|
|
196
172
|
const tokenHandler = tokenHandlers[parameters.token.type];
|
|
197
173
|
if (!tokenHandler) {
|
|
198
|
-
|
|
174
|
+
const {
|
|
175
|
+
activeStyles,
|
|
176
|
+
activeHyperlink,
|
|
177
|
+
position,
|
|
178
|
+
returnValue,
|
|
179
|
+
include,
|
|
180
|
+
} = parameters;
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
activeStyles,
|
|
184
|
+
activeHyperlink,
|
|
185
|
+
position,
|
|
186
|
+
returnValue,
|
|
187
|
+
include,
|
|
188
|
+
};
|
|
199
189
|
}
|
|
200
190
|
|
|
201
191
|
return tokenHandler(parameters);
|
|
@@ -216,35 +206,17 @@ function createHasContinuationAheadMap(tokens) {
|
|
|
216
206
|
return hasContinuationAhead;
|
|
217
207
|
}
|
|
218
208
|
|
|
219
|
-
function isPastEndBoundary(token, position, end) {
|
|
220
|
-
if (end === undefined) {
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (position >= end) {
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
return token.type === 'character'
|
|
229
|
-
&& !token.isGraphemeContinuation
|
|
230
|
-
&& position + token.visibleWidth > end;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
209
|
export default function sliceAnsi(string, start, end) {
|
|
234
210
|
const tokens = tokenizeAnsi(string, {endCharacter: end});
|
|
235
211
|
const hasContinuationAhead = createHasContinuationAheadMap(tokens);
|
|
236
212
|
let activeStyles = new Map();
|
|
237
213
|
let activeHyperlink;
|
|
238
|
-
let activeHyperlinkHasVisibleText = false;
|
|
239
|
-
let activeHyperlinkOutputIndex;
|
|
240
|
-
let pendingSgrOutputIndex;
|
|
241
|
-
let pendingSgrActiveStyles;
|
|
242
214
|
let position = 0;
|
|
243
215
|
let returnValue = '';
|
|
244
216
|
let include = false;
|
|
245
217
|
|
|
246
218
|
for (const [tokenIndex, token] of tokens.entries()) {
|
|
247
|
-
let isPastEnd =
|
|
219
|
+
let isPastEnd = end !== undefined && position >= end;
|
|
248
220
|
if (
|
|
249
221
|
isPastEnd
|
|
250
222
|
&& token.type !== 'character'
|
|
@@ -258,44 +230,15 @@ export default function sliceAnsi(string, start, end) {
|
|
|
258
230
|
&& token.type === 'character'
|
|
259
231
|
&& !token.isGraphemeContinuation
|
|
260
232
|
) {
|
|
261
|
-
if (activeHyperlink && !activeHyperlinkHasVisibleText) {
|
|
262
|
-
const hyperlinkState = {
|
|
263
|
-
activeHyperlink,
|
|
264
|
-
activeHyperlinkHasVisibleText,
|
|
265
|
-
activeHyperlinkOutputIndex,
|
|
266
|
-
pendingSgrOutputIndex,
|
|
267
|
-
returnValue,
|
|
268
|
-
};
|
|
269
|
-
discardPendingHyperlink(hyperlinkState);
|
|
270
|
-
({
|
|
271
|
-
activeHyperlink,
|
|
272
|
-
activeHyperlinkHasVisibleText,
|
|
273
|
-
activeHyperlinkOutputIndex,
|
|
274
|
-
pendingSgrOutputIndex,
|
|
275
|
-
returnValue,
|
|
276
|
-
} = hyperlinkState);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (pendingSgrOutputIndex !== undefined) {
|
|
280
|
-
returnValue = returnValue.slice(0, pendingSgrOutputIndex);
|
|
281
|
-
activeStyles = pendingSgrActiveStyles;
|
|
282
|
-
pendingSgrOutputIndex = undefined;
|
|
283
|
-
pendingSgrActiveStyles = undefined;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
233
|
break;
|
|
287
234
|
}
|
|
288
235
|
|
|
289
|
-
({activeStyles, activeHyperlink,
|
|
236
|
+
({activeStyles, activeHyperlink, position, returnValue, include} = applyToken({
|
|
290
237
|
token,
|
|
291
238
|
isPastEnd,
|
|
292
239
|
start,
|
|
293
240
|
activeStyles,
|
|
294
241
|
activeHyperlink,
|
|
295
|
-
activeHyperlinkHasVisibleText,
|
|
296
|
-
activeHyperlinkOutputIndex,
|
|
297
|
-
pendingSgrOutputIndex,
|
|
298
|
-
pendingSgrActiveStyles,
|
|
299
242
|
position,
|
|
300
243
|
returnValue,
|
|
301
244
|
include,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slice-ansi",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"description": "Slice a string with ANSI escape codes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "chalk/slice-ansi",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"engines": {
|
|
15
|
-
"node": ">=
|
|
15
|
+
"node": ">=20"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
18
|
"test": "xo && ava && tsc --lib esnext index.d.ts"
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"is-fullwidth-code-point": "^5.1.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"ava": "^
|
|
53
|
+
"ava": "^6.4.1",
|
|
54
54
|
"chalk": "^5.6.2",
|
|
55
55
|
"random-item": "^4.0.1",
|
|
56
|
-
"strip-ansi": "^7.2
|
|
57
|
-
"xo": "^2.
|
|
56
|
+
"strip-ansi": "^7.1.2",
|
|
57
|
+
"xo": "^1.2.3"
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -64,7 +64,7 @@ const SGR_ANSI_256_LAST_PARAMETER_OFFSET = 2;
|
|
|
64
64
|
const SGR_TRUECOLOR_LAST_PARAMETER_OFFSET = 4;
|
|
65
65
|
const VARIATION_SELECTOR_16_CODE_POINT = 65_039;
|
|
66
66
|
const COMBINING_ENCLOSING_KEYCAP_CODE_POINT = 8419;
|
|
67
|
-
const EMOJI_PRESENTATION_GRAPHEME_REGEX = /\p{Emoji_Presentation}/
|
|
67
|
+
const EMOJI_PRESENTATION_GRAPHEME_REGEX = /\p{Emoji_Presentation}/u;
|
|
68
68
|
const GRAPHEME_SEGMENTER = new Intl.Segmenter(undefined, {granularity: 'grapheme'});
|
|
69
69
|
|
|
70
70
|
const endCodeNumbers = new Set();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elench/testkit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.116",
|
|
4
4
|
"description": "Assistant-first CLI for running, inspecting, and debugging local testkit suites",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"workspaces": [
|
|
@@ -61,7 +61,11 @@
|
|
|
61
61
|
"typecheck:packages": "npm --workspace packages/testkit-protocol run typecheck && npm --workspace packages/ts-analysis run typecheck && npm --workspace packages/next-analysis run typecheck && npm --workspace packages/testkit-bridge run typecheck && npm --workspace packages/testkit-extension run compile",
|
|
62
62
|
"test": "npm run build:assistant && npm run build:packages && vitest run && npm run test:live",
|
|
63
63
|
"test:audit": "node scripts/test-boundary-audit.mjs",
|
|
64
|
+
"test:compat:node20": "volta run --node 20.19.5 --npm 10.8.2 npm test",
|
|
65
|
+
"test:database-version:compat": "node scripts/test-database-version-compat.mjs",
|
|
66
|
+
"test:engine-version:compat": "node scripts/test-engine-version-compat.mjs",
|
|
64
67
|
"test:live": "node scripts/live-sandbox/harness.mjs",
|
|
68
|
+
"test:live:neon": "node scripts/test-database-version-compat.mjs --neon-only",
|
|
65
69
|
"test:unit": "npm run build:assistant && npm run build:packages && npm run test:audit && vitest run --config vitest.unit.config.mjs",
|
|
66
70
|
"test:integration": "npm run build:assistant && npm run build:packages && vitest run test/integration",
|
|
67
71
|
"test:system": "npm run build:assistant && npm run build:packages && vitest run test/system"
|
|
@@ -85,21 +89,21 @@
|
|
|
85
89
|
"typescript"
|
|
86
90
|
],
|
|
87
91
|
"devDependencies": {
|
|
88
|
-
"@types/node": "^
|
|
92
|
+
"@types/node": "^20.19.41",
|
|
89
93
|
"vitest": "^3.2.4"
|
|
90
94
|
},
|
|
91
95
|
"dependencies": {
|
|
92
96
|
"@babel/code-frame": "^7.29.0",
|
|
93
|
-
"@elench/next-analysis": "0.1.
|
|
94
|
-
"@elench/testkit-bridge": "0.1.
|
|
95
|
-
"@elench/testkit-protocol": "0.1.
|
|
96
|
-
"@elench/ts-analysis": "0.1.
|
|
97
|
+
"@elench/next-analysis": "0.1.116",
|
|
98
|
+
"@elench/testkit-bridge": "0.1.116",
|
|
99
|
+
"@elench/testkit-protocol": "0.1.116",
|
|
100
|
+
"@elench/ts-analysis": "0.1.116",
|
|
97
101
|
"@oclif/core": "^4.10.6",
|
|
98
102
|
"@playwright/test": "^1.52.0",
|
|
99
103
|
"esbuild": "^0.25.11",
|
|
100
|
-
"execa": "
|
|
104
|
+
"execa": "9.1.0",
|
|
101
105
|
"figures": "^6.1.0",
|
|
102
|
-
"ink": "
|
|
106
|
+
"ink": "6.8.0",
|
|
103
107
|
"marked": "9.1.6",
|
|
104
108
|
"marked-terminal": "6.2.0",
|
|
105
109
|
"picocolors": "^1.1.1",
|
|
@@ -111,8 +115,8 @@
|
|
|
111
115
|
"wrap-ansi": "^10.0.0"
|
|
112
116
|
},
|
|
113
117
|
"engines": {
|
|
114
|
-
"node": ">=
|
|
115
|
-
"npm": ">=
|
|
118
|
+
"node": ">=20",
|
|
119
|
+
"npm": ">=10"
|
|
116
120
|
},
|
|
117
121
|
"volta": {
|
|
118
122
|
"node": "24.14.1",
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
export declare const TESTKIT_BROWSER_PROTOCOL_VERSION = 1;
|
|
2
|
+
export declare const TESTKIT_COVERAGE_GRAPH_VERSION = 1;
|
|
3
|
+
export type BrowserTargetKind = "testId" | "role" | "text" | "css" | "xpath" | "component";
|
|
4
|
+
export type BrowserConfidence = "low" | "medium" | "high";
|
|
5
|
+
export type BrowserFailureState = "failing" | "healthy" | "unavailable";
|
|
6
|
+
export type BrowserCoverageState = "covered" | "missing" | "unavailable";
|
|
7
|
+
export type BridgeSurfaceImportance = "critical" | "high" | "medium" | "low";
|
|
8
|
+
export type BridgeCoverageSupportKind = "direct" | "indirect" | "mixed";
|
|
9
|
+
export type CoverageNodeKind = "page_view" | "ui_surface" | "ui_action" | "client_request" | "api_route" | "server_action" | "server_capability" | "data_capability" | "test_file";
|
|
10
|
+
export type CoverageEdgeKind = "contains" | "renders" | "triggers" | "requests" | "handles" | "delegates_to" | "covers";
|
|
11
|
+
export type CoverageEvidenceSource = "convention" | "static" | "runtime";
|
|
12
|
+
export type CoverageGraphDiagnosticLevel = "info" | "warn";
|
|
13
|
+
export interface BrowserTarget {
|
|
14
|
+
kind: BrowserTargetKind;
|
|
15
|
+
value: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
confidence?: BrowserConfidence;
|
|
18
|
+
}
|
|
19
|
+
export interface BrowserMetadata {
|
|
20
|
+
label?: string;
|
|
21
|
+
origins?: string[];
|
|
22
|
+
routes?: string[];
|
|
23
|
+
targets?: BrowserTarget[];
|
|
24
|
+
}
|
|
25
|
+
export interface BrowserMetadataDocument {
|
|
26
|
+
schemaVersion: number;
|
|
27
|
+
browser: BrowserMetadata;
|
|
28
|
+
}
|
|
29
|
+
export interface CoverageGraphNode {
|
|
30
|
+
id: string;
|
|
31
|
+
kind: CoverageNodeKind;
|
|
32
|
+
service: string;
|
|
33
|
+
label: string;
|
|
34
|
+
filePath?: string;
|
|
35
|
+
route?: string;
|
|
36
|
+
method?: string;
|
|
37
|
+
path?: string;
|
|
38
|
+
target?: BrowserTarget | null;
|
|
39
|
+
metadata?: Record<string, string | number | boolean | null>;
|
|
40
|
+
}
|
|
41
|
+
export interface CoverageGraphEdge {
|
|
42
|
+
id: string;
|
|
43
|
+
kind: CoverageEdgeKind;
|
|
44
|
+
from: string;
|
|
45
|
+
to: string;
|
|
46
|
+
confidence?: BrowserConfidence;
|
|
47
|
+
metadata?: Record<string, string | number | boolean | null>;
|
|
48
|
+
}
|
|
49
|
+
export interface CoverageEvidenceDetails {
|
|
50
|
+
requestPaths?: string[];
|
|
51
|
+
route?: string;
|
|
52
|
+
targets?: BrowserTarget[];
|
|
53
|
+
}
|
|
54
|
+
export interface CoverageEvidence {
|
|
55
|
+
id: string;
|
|
56
|
+
source: CoverageEvidenceSource;
|
|
57
|
+
confidence?: BrowserConfidence;
|
|
58
|
+
service: string;
|
|
59
|
+
suiteName: string;
|
|
60
|
+
type: string;
|
|
61
|
+
testFilePath: string;
|
|
62
|
+
coveredNodeIds: string[];
|
|
63
|
+
details?: CoverageEvidenceDetails;
|
|
64
|
+
}
|
|
65
|
+
export interface CoverageGraphDiagnostic {
|
|
66
|
+
level: CoverageGraphDiagnosticLevel;
|
|
67
|
+
code: string;
|
|
68
|
+
filePath: string;
|
|
69
|
+
service: string;
|
|
70
|
+
message: string;
|
|
71
|
+
}
|
|
72
|
+
export interface CoverageGraph {
|
|
73
|
+
schemaVersion: number;
|
|
74
|
+
nodes: CoverageGraphNode[];
|
|
75
|
+
edges: CoverageGraphEdge[];
|
|
76
|
+
evidence: CoverageEvidence[];
|
|
77
|
+
diagnostics: CoverageGraphDiagnostic[];
|
|
78
|
+
}
|
|
79
|
+
export interface BridgeProductRef {
|
|
80
|
+
name: string;
|
|
81
|
+
directory: string;
|
|
82
|
+
}
|
|
83
|
+
export interface BridgeServiceRef {
|
|
84
|
+
name: string;
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
origin: string;
|
|
87
|
+
}
|
|
88
|
+
export interface BrowserMatchResponse {
|
|
89
|
+
protocolVersion: number;
|
|
90
|
+
url: string;
|
|
91
|
+
origin: string;
|
|
92
|
+
route: string;
|
|
93
|
+
matched: boolean;
|
|
94
|
+
product: BridgeProductRef;
|
|
95
|
+
service: BridgeServiceRef | null;
|
|
96
|
+
}
|
|
97
|
+
export interface BridgeRunSummary {
|
|
98
|
+
artifactAvailable: boolean;
|
|
99
|
+
generatedAt: string | null;
|
|
100
|
+
status: string | null;
|
|
101
|
+
}
|
|
102
|
+
export interface BridgeSupportingTestRef {
|
|
103
|
+
service: string;
|
|
104
|
+
suite: string;
|
|
105
|
+
type: string;
|
|
106
|
+
filePath: string;
|
|
107
|
+
label: string;
|
|
108
|
+
status?: "passed" | "failed" | "skipped" | "not_run";
|
|
109
|
+
error?: string | null;
|
|
110
|
+
}
|
|
111
|
+
export interface BridgeCoverageViaNodeRef {
|
|
112
|
+
id: string;
|
|
113
|
+
kind: CoverageNodeKind;
|
|
114
|
+
label: string;
|
|
115
|
+
route?: string;
|
|
116
|
+
method?: string;
|
|
117
|
+
path?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface FailureOverlayEntry {
|
|
120
|
+
id: string;
|
|
121
|
+
kind: CoverageNodeKind;
|
|
122
|
+
label: string;
|
|
123
|
+
service: string;
|
|
124
|
+
route?: string | null;
|
|
125
|
+
targets: BrowserTarget[];
|
|
126
|
+
failedTests: BridgeSupportingTestRef[];
|
|
127
|
+
viaNodes: BridgeCoverageViaNodeRef[];
|
|
128
|
+
importance?: BridgeSurfaceImportance;
|
|
129
|
+
surfaceKind?: string | null;
|
|
130
|
+
reason?: string | null;
|
|
131
|
+
}
|
|
132
|
+
export interface CoverageOverlayEntry {
|
|
133
|
+
id: string;
|
|
134
|
+
kind: CoverageNodeKind;
|
|
135
|
+
label: string;
|
|
136
|
+
service: string;
|
|
137
|
+
route?: string | null;
|
|
138
|
+
targets: BrowserTarget[];
|
|
139
|
+
supportingTests: BridgeSupportingTestRef[];
|
|
140
|
+
viaNodes: BridgeCoverageViaNodeRef[];
|
|
141
|
+
confidence: BrowserConfidence;
|
|
142
|
+
importance?: BridgeSurfaceImportance;
|
|
143
|
+
surfaceKind?: string | null;
|
|
144
|
+
supportKind?: BridgeCoverageSupportKind;
|
|
145
|
+
reason?: string | null;
|
|
146
|
+
}
|
|
147
|
+
export interface PageOverlayResponse {
|
|
148
|
+
protocolVersion: number;
|
|
149
|
+
page: {
|
|
150
|
+
url: string;
|
|
151
|
+
origin: string;
|
|
152
|
+
route: string;
|
|
153
|
+
};
|
|
154
|
+
match: BrowserMatchResponse;
|
|
155
|
+
run: BridgeRunSummary;
|
|
156
|
+
summary: {
|
|
157
|
+
failureState: BrowserFailureState;
|
|
158
|
+
coverageState: BrowserCoverageState;
|
|
159
|
+
relatedFailureCount: number;
|
|
160
|
+
relatedCoverageCount: number;
|
|
161
|
+
coverageBreakdown?: {
|
|
162
|
+
direct: number;
|
|
163
|
+
indirect: number;
|
|
164
|
+
mixed: number;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
failures: FailureOverlayEntry[];
|
|
168
|
+
coverage: CoverageOverlayEntry[];
|
|
169
|
+
}
|
|
170
|
+
export interface BridgeErrorResponse {
|
|
171
|
+
protocolVersion: number;
|
|
172
|
+
error: {
|
|
173
|
+
code: string;
|
|
174
|
+
message: string;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
export declare function normalizeBrowserTarget(value: unknown): BrowserTarget | null;
|
|
178
|
+
export declare function normalizeBrowserMetadata(value: unknown): BrowserMetadata | null;
|
|
179
|
+
export declare function normalizeBrowserMetadataDocument(value: unknown): BrowserMetadataDocument | null;
|
|
180
|
+
export declare function normalizeCoverageGraphNode(value: unknown): CoverageGraphNode | null;
|
|
181
|
+
export declare function normalizeCoverageGraphEdge(value: unknown): CoverageGraphEdge | null;
|
|
182
|
+
export declare function normalizeCoverageEvidence(value: unknown): CoverageEvidence | null;
|
|
183
|
+
export declare function normalizeCoverageGraphDiagnostic(value: unknown): CoverageGraphDiagnostic | null;
|
|
184
|
+
export declare function normalizeCoverageGraph(value: unknown): CoverageGraph | null;
|
|
185
|
+
export declare function isPageOverlayResponse(value: unknown): value is PageOverlayResponse;
|
|
186
|
+
export declare function normalizePageOverlayResponse(value: unknown): PageOverlayResponse | null;
|
|
187
|
+
export declare function createBridgeErrorResponse(code: string, message: string): BridgeErrorResponse;
|
|
188
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|