@interactors/core 0.4.0 → 1.0.0-effection.0
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/dist/cjs/constructor.js +55 -126
- package/dist/cjs/constructor.js.map +1 -1
- package/dist/cjs/converge.js +3 -5
- package/dist/cjs/converge.js.map +1 -1
- package/dist/cjs/format.js +50 -0
- package/dist/cjs/format.js.map +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/inspector.js +2 -1
- package/dist/cjs/inspector.js.map +1 -1
- package/dist/cjs/interaction.js +54 -35
- package/dist/cjs/interaction.js.map +1 -1
- package/dist/cjs/match.js +17 -7
- package/dist/cjs/match.js.map +1 -1
- package/dist/cjs/matcher.js +13 -1
- package/dist/cjs/matcher.js.map +1 -1
- package/dist/cjs/matchers/and.js +3 -0
- package/dist/cjs/matchers/and.js.map +1 -1
- package/dist/cjs/matchers/every.js +3 -0
- package/dist/cjs/matchers/every.js.map +1 -1
- package/dist/cjs/matchers/including.js +4 -0
- package/dist/cjs/matchers/including.js.map +1 -1
- package/dist/cjs/matchers/matching.js +4 -0
- package/dist/cjs/matchers/matching.js.map +1 -1
- package/dist/cjs/matchers/not.js +3 -0
- package/dist/cjs/matchers/not.js.map +1 -1
- package/dist/cjs/matchers/or.js +3 -0
- package/dist/cjs/matchers/or.js.map +1 -1
- package/dist/cjs/matchers/some.js +3 -0
- package/dist/cjs/matchers/some.js.map +1 -1
- package/dist/cjs/resolvers.js +98 -0
- package/dist/cjs/resolvers.js.map +1 -0
- package/dist/cjs/serialize.js +48 -0
- package/dist/cjs/serialize.js.map +1 -0
- package/dist/constructor.d.ts +2 -8
- package/dist/constructor.d.ts.map +1 -1
- package/dist/converge.d.ts +2 -1
- package/dist/converge.d.ts.map +1 -1
- package/dist/esm/constructor.js +52 -117
- package/dist/esm/constructor.js.map +1 -1
- package/dist/esm/converge.js +3 -5
- package/dist/esm/converge.js.map +1 -1
- package/dist/esm/{format-table.js → format.js} +19 -1
- package/dist/esm/format.js.map +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inspector.js +2 -1
- package/dist/esm/inspector.js.map +1 -1
- package/dist/esm/interaction.js +51 -29
- package/dist/esm/interaction.js.map +1 -1
- package/dist/esm/match.js +17 -7
- package/dist/esm/match.js.map +1 -1
- package/dist/esm/matcher.js +11 -0
- package/dist/esm/matcher.js.map +1 -1
- package/dist/esm/matchers/and.js +4 -1
- package/dist/esm/matchers/and.js.map +1 -1
- package/dist/esm/matchers/every.js +4 -1
- package/dist/esm/matchers/every.js.map +1 -1
- package/dist/esm/matchers/including.js +4 -0
- package/dist/esm/matchers/including.js.map +1 -1
- package/dist/esm/matchers/matching.js +4 -0
- package/dist/esm/matchers/matching.js.map +1 -1
- package/dist/esm/matchers/not.js +4 -1
- package/dist/esm/matchers/not.js.map +1 -1
- package/dist/esm/matchers/or.js +4 -1
- package/dist/esm/matchers/or.js.map +1 -1
- package/dist/esm/matchers/some.js +4 -1
- package/dist/esm/matchers/some.js.map +1 -1
- package/dist/esm/resolvers.js +88 -0
- package/dist/esm/resolvers.js.map +1 -0
- package/dist/esm/serialize.js +43 -0
- package/dist/esm/serialize.js.map +1 -0
- package/dist/format.d.ts +10 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/inspector.d.ts.map +1 -1
- package/dist/interaction.d.ts +38 -10
- package/dist/interaction.d.ts.map +1 -1
- package/dist/match.d.ts +5 -5
- package/dist/match.d.ts.map +1 -1
- package/dist/matcher.d.ts +2 -0
- package/dist/matcher.d.ts.map +1 -1
- package/dist/matchers/and.d.ts.map +1 -1
- package/dist/matchers/every.d.ts.map +1 -1
- package/dist/matchers/including.d.ts.map +1 -1
- package/dist/matchers/matching.d.ts.map +1 -1
- package/dist/matchers/not.d.ts.map +1 -1
- package/dist/matchers/or.d.ts.map +1 -1
- package/dist/matchers/some.d.ts.map +1 -1
- package/dist/resolvers.d.ts +9 -0
- package/dist/resolvers.d.ts.map +1 -0
- package/dist/serialize.d.ts +13 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/specification.d.ts +19 -17
- package/dist/specification.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/constructor.ts +63 -138
- package/src/converge.ts +3 -6
- package/src/format.ts +58 -0
- package/src/index.ts +4 -2
- package/src/inspector.ts +2 -1
- package/src/interaction.ts +96 -36
- package/src/match.ts +23 -15
- package/src/matcher.ts +11 -0
- package/src/matchers/and.ts +4 -1
- package/src/matchers/every.ts +4 -1
- package/src/matchers/including.ts +4 -1
- package/src/matchers/matching.ts +4 -1
- package/src/matchers/not.ts +4 -1
- package/src/matchers/or.ts +4 -1
- package/src/matchers/some.ts +4 -1
- package/src/resolvers.ts +100 -0
- package/src/serialize.ts +54 -0
- package/src/specification.ts +21 -19
- package/CHANGELOG.md +0 -27
- package/dist/cjs/format-table.js +0 -30
- package/dist/cjs/format-table.js.map +0 -1
- package/dist/esm/format-table.js.map +0 -1
- package/dist/format-table.d.ts +0 -6
- package/dist/format-table.d.ts.map +0 -1
- package/src/format-table.ts +0 -34
package/src/specification.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
|
+
import { Operation } from '@effection/core';
|
|
3
4
|
import { FilterSet } from './filter-set';
|
|
4
5
|
import { Locator } from './locator';
|
|
5
|
-
import {
|
|
6
|
+
import { ActionInteraction, AssertionInteraction } from './interaction';
|
|
6
7
|
import { MergeObjects } from './merge-objects';
|
|
7
8
|
import { MaybeMatcher } from './matcher';
|
|
8
9
|
|
|
@@ -38,7 +39,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
38
39
|
* await Link('Next').perform((e) => e.click());
|
|
39
40
|
* ```
|
|
40
41
|
*/
|
|
41
|
-
perform(fn: (element: E) => void):
|
|
42
|
+
perform(fn: (element: E) => void): ActionInteraction<E, void>;
|
|
42
43
|
|
|
43
44
|
/**
|
|
44
45
|
* Perform a one-off assertion on the given interactor. Takes a function which
|
|
@@ -54,7 +55,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
54
55
|
* await Link('Next').assert((e) => assert(e.tagName === 'A'));
|
|
55
56
|
* ```
|
|
56
57
|
*/
|
|
57
|
-
assert(fn: (element: E) => void):
|
|
58
|
+
assert(fn: (element: E) => void): AssertionInteraction<E, void>;
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
61
|
* An assertion which checks that an element matching the interactor exists.
|
|
@@ -66,7 +67,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
66
67
|
* await Link('Next').exists();
|
|
67
68
|
* ```
|
|
68
69
|
*/
|
|
69
|
-
exists():
|
|
70
|
+
exists(): AssertionInteraction<E, void> & FilterObject<boolean, Element>;
|
|
70
71
|
|
|
71
72
|
/**
|
|
72
73
|
* An assertion which checks that an element matching the interactor does not
|
|
@@ -78,7 +79,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
78
79
|
* await Link('Next').absent();
|
|
79
80
|
* ```
|
|
80
81
|
*/
|
|
81
|
-
absent():
|
|
82
|
+
absent(): AssertionInteraction<E, void> & FilterObject<boolean, Element>;
|
|
82
83
|
|
|
83
84
|
/**
|
|
84
85
|
* Checks that there is one element matching the interactor, and that this
|
|
@@ -91,7 +92,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
91
92
|
* await Link('Home').has({ href: '/' })
|
|
92
93
|
* ```
|
|
93
94
|
*/
|
|
94
|
-
has(filters: F):
|
|
95
|
+
has(filters: F): AssertionInteraction<E, void>;
|
|
95
96
|
|
|
96
97
|
/**
|
|
97
98
|
* Identical to {@link has}, but reads better with some filters.
|
|
@@ -102,7 +103,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
102
103
|
* await CheckBox('Accept conditions').is({ checked: true })
|
|
103
104
|
* ```
|
|
104
105
|
*/
|
|
105
|
-
is(filters: F):
|
|
106
|
+
is(filters: F): AssertionInteraction<E, void>;
|
|
106
107
|
|
|
107
108
|
/**
|
|
108
109
|
* Returns a copy of the given interactor which is scoped to this interactor.
|
|
@@ -128,7 +129,7 @@ export interface Interactor<E extends Element, F extends FilterParams<any, any>>
|
|
|
128
129
|
apply: FilterFn<string, Element>;
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
export type ActionFn<E extends Element
|
|
132
|
+
export type ActionFn<E extends Element, I extends Interactor<E, any>> = (interactor: I, ...args: any[]) => Operation<unknown>;
|
|
132
133
|
|
|
133
134
|
export type FilterFn<T, E extends Element> = (element: E) => T;
|
|
134
135
|
|
|
@@ -141,11 +142,11 @@ export type FilterDefinition<T, E extends Element> = FilterFn<T, E> | FilterObje
|
|
|
141
142
|
|
|
142
143
|
export type Filters<E extends Element> = Record<string, FilterDefinition<unknown, E>>;
|
|
143
144
|
|
|
144
|
-
export type Actions<E extends Element
|
|
145
|
+
export type Actions<E extends Element, I extends Interactor<E, any>> = Record<string, ActionFn<E, I>>;
|
|
145
146
|
|
|
146
147
|
export type SelectorFn<E extends Element> = (parentElement: Element) => E[];
|
|
147
148
|
|
|
148
|
-
export type InteractorSpecification<E extends Element, F extends Filters<E>, A extends Actions<E
|
|
149
|
+
export type InteractorSpecification<E extends Element, F extends Filters<E>, A extends Actions<E, Interactor<E, EmptyObject>>> = {
|
|
149
150
|
/**
|
|
150
151
|
* The CSS selector that this interactor uses to find matching elements
|
|
151
152
|
*/
|
|
@@ -161,16 +162,16 @@ export type InteractorSpecification<E extends Element, F extends Filters<E>, A e
|
|
|
161
162
|
locator?: FilterDefinition<string, E>;
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
export type ActionMethods<E extends Element, A extends Actions<E>> = {
|
|
165
|
-
[P in keyof A]: A[P] extends ((interactor:
|
|
166
|
-
? ((...args: TArgs) =>
|
|
165
|
+
export type ActionMethods<E extends Element, A extends Actions<E, I>, I extends Interactor<E, any>> = {
|
|
166
|
+
[P in keyof A]: A[P] extends ((interactor: I, ...args: infer TArgs) => Operation<infer TReturn>)
|
|
167
|
+
? ((...args: TArgs) => ActionInteraction<E, TReturn>)
|
|
167
168
|
: never;
|
|
168
169
|
}
|
|
169
170
|
|
|
170
171
|
export type FilterMethods<E extends Element, F extends Filters<E>> = {
|
|
171
172
|
[P in keyof F]:
|
|
172
|
-
F[P] extends FilterFn<infer TReturn, any> ? (() =>
|
|
173
|
-
F[P] extends FilterObject<infer TReturn, any> ? (() =>
|
|
173
|
+
F[P] extends FilterFn<infer TReturn, any> ? (() => AssertionInteraction<E, TReturn> & FilterObject<TReturn, Element>) :
|
|
174
|
+
F[P] extends FilterObject<infer TReturn, any> ? (() => AssertionInteraction<E, TReturn> & FilterObject<TReturn, Element>) :
|
|
174
175
|
never;
|
|
175
176
|
}
|
|
176
177
|
|
|
@@ -197,11 +198,11 @@ export type FilterParams<E extends Element, F extends Filters<E>> = keyof F exte
|
|
|
197
198
|
* @typeParam F the filters of this interactor, this is usually inferred from the specification
|
|
198
199
|
* @typeParam A the actions of this interactor, this is usually inferred from the specification
|
|
199
200
|
*/
|
|
200
|
-
export interface InteractorConstructor<E extends Element, FP extends FilterParams<any, any>, FM extends FilterMethods<any, any>, AM extends ActionMethods<any, any>> {
|
|
201
|
+
export interface InteractorConstructor<E extends Element, FP extends FilterParams<any, any>, FM extends FilterMethods<any, any>, AM extends ActionMethods<any, any, any>> {
|
|
201
202
|
selector(value: string | SelectorFn<E>): InteractorConstructor<E, FP, FM, AM>;
|
|
202
203
|
locator(value: FilterDefinition<string, E>): InteractorConstructor<E, FP, FM, AM>;
|
|
203
204
|
filters<FR extends Filters<E>>(filters: FR): InteractorConstructor<E, MergeObjects<FP, FilterParams<E, FR>>, MergeObjects<FM, FilterMethods<E, FR>>, AM>;
|
|
204
|
-
actions<AR extends Actions<E>>(actions: AR): InteractorConstructor<E, FP, FM, MergeObjects<AM, ActionMethods<E, AR>>>;
|
|
205
|
+
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>>>;
|
|
205
206
|
extend<ER extends E = E>(name: string): InteractorConstructor<ER, FP, FM, AM>;
|
|
206
207
|
|
|
207
208
|
/**
|
|
@@ -225,6 +226,7 @@ export interface InteractorConstructor<E extends Element, FP extends FilterParam
|
|
|
225
226
|
*
|
|
226
227
|
* ``` typescript
|
|
227
228
|
* Link('Home');
|
|
229
|
+
* Link(/^home/i);
|
|
228
230
|
* ```
|
|
229
231
|
*
|
|
230
232
|
* Or with a locator and options:
|
|
@@ -236,10 +238,10 @@ export interface InteractorConstructor<E extends Element, FP extends FilterParam
|
|
|
236
238
|
* @param value The locator value, which should match the value of applying the locator function defined in the {@link InteractorSpecification} to the element.
|
|
237
239
|
* @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.
|
|
238
240
|
*/
|
|
239
|
-
(value: MaybeMatcher<string
|
|
241
|
+
(value: MaybeMatcher<string> | RegExp, filters?: FP): Interactor<E, FP> & FM & AM;
|
|
240
242
|
}
|
|
241
243
|
|
|
242
|
-
export type InteractorOptions<E extends Element, F extends Filters<E>, A extends Actions<E
|
|
244
|
+
export type InteractorOptions<E extends Element, F extends Filters<E>, A extends Actions<E, Interactor<E, EmptyObject>>> = {
|
|
243
245
|
name: string;
|
|
244
246
|
specification: InteractorSpecification<E, F, A>;
|
|
245
247
|
locator?: Locator<E>;
|
package/CHANGELOG.md
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# @interactors/core
|
|
2
|
-
|
|
3
|
-
## 0.4.0
|
|
4
|
-
|
|
5
|
-
### Minor Changes
|
|
6
|
-
|
|
7
|
-
- 76215cc: Remove deprecated functionality
|
|
8
|
-
|
|
9
|
-
### Patch Changes
|
|
10
|
-
|
|
11
|
-
- f06c7fe: simplify interactor instatiate function
|
|
12
|
-
- 960da4e: Remove the ExistsAssertionsImplementation since it is no longer necessary
|
|
13
|
-
- Updated dependencies [891af02]
|
|
14
|
-
- @interactors/globals@0.2.0
|
|
15
|
-
|
|
16
|
-
## 0.3.0
|
|
17
|
-
|
|
18
|
-
### Minor Changes
|
|
19
|
-
|
|
20
|
-
- 53dea63: Enable delegation to locator of an interactor if no filter given
|
|
21
|
-
|
|
22
|
-
## 0.2.0
|
|
23
|
-
|
|
24
|
-
### Minor Changes
|
|
25
|
-
|
|
26
|
-
- 0c96dab: Add locator delegation. Locators can be delegated to another delegator.
|
|
27
|
-
- f4949ac: Selector can be a function to return arbitrary elements
|
package/dist/cjs/format-table.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatTable = void 0;
|
|
4
|
-
const MAX_COLUMN_WIDTH = 40;
|
|
5
|
-
function formatValue(value, width) {
|
|
6
|
-
if (value.length > width) {
|
|
7
|
-
return value.slice(0, width - 1) + '…';
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
return value.padEnd(width);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function formatTable(options) {
|
|
14
|
-
let columnWidths = options.headers.map((h, index) => {
|
|
15
|
-
return Math.min(MAX_COLUMN_WIDTH, Math.max(h.length, ...options.rows.map((r) => r[index].length)));
|
|
16
|
-
});
|
|
17
|
-
let formatRow = (cells) => {
|
|
18
|
-
return '┃ ' + cells.map((c, index) => formatValue(c, columnWidths[index])).join(' ┃ ') + ' ┃';
|
|
19
|
-
};
|
|
20
|
-
let spacerRow = () => {
|
|
21
|
-
return '┣━' + columnWidths.map((w) => "━".repeat(w)).join('━╋━') + '━┫';
|
|
22
|
-
};
|
|
23
|
-
return [
|
|
24
|
-
formatRow(options.headers),
|
|
25
|
-
spacerRow(),
|
|
26
|
-
...options.rows.map((row) => formatRow(row))
|
|
27
|
-
].join('\n');
|
|
28
|
-
}
|
|
29
|
-
exports.formatTable = formatTable;
|
|
30
|
-
//# sourceMappingURL=format-table.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format-table.js","sourceRoot":"","sources":["../../src/format-table.ts"],"names":[],"mappings":";;;AAKA,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAG,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;KACxC;SAAM;QACL,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,OAAqB;IAC/C,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE;QAClC,OAAO,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAChG,CAAC,CAAA;IAED,IAAI,SAAS,GAAG,GAAG,EAAE;QACnB,OAAO,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1E,CAAC,CAAA;IAED,OAAO;QACL,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1B,SAAS,EAAE;QACX,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAlBD,kCAkBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format-table.js","sourceRoot":"","sources":["../../src/format-table.ts"],"names":[],"mappings":"AAKA,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAG,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;KACxC;SAAM;QACL,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAqB;IAC/C,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE;QAClC,OAAO,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAChG,CAAC,CAAA;IAED,IAAI,SAAS,GAAG,GAAG,EAAE;QACnB,OAAO,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1E,CAAC,CAAA;IAED,OAAO;QACL,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1B,SAAS,EAAE;QACX,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/format-table.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format-table.d.ts","sourceRoot":"","sources":["../src/format-table.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;CAClB;AAYD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAkBzD"}
|
package/src/format-table.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export interface TableOptions {
|
|
2
|
-
headers: string[];
|
|
3
|
-
rows: string[][];
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
const MAX_COLUMN_WIDTH = 40
|
|
7
|
-
|
|
8
|
-
function formatValue(value: string, width: number) {
|
|
9
|
-
if(value.length > width) {
|
|
10
|
-
return value.slice(0, width - 1) + '…';
|
|
11
|
-
} else {
|
|
12
|
-
return value.padEnd(width);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function formatTable(options: TableOptions): string {
|
|
17
|
-
let columnWidths = options.headers.map((h, index) => {
|
|
18
|
-
return Math.min(MAX_COLUMN_WIDTH, Math.max(h.length, ...options.rows.map((r) => r[index].length)));
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
let formatRow = (cells: string[]) => {
|
|
22
|
-
return '┃ ' + cells.map((c, index) => formatValue(c, columnWidths[index])).join(' ┃ ') + ' ┃';
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let spacerRow = () => {
|
|
26
|
-
return '┣━' + columnWidths.map((w) => "━".repeat(w)).join('━╋━') + '━┫';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return [
|
|
30
|
-
formatRow(options.headers),
|
|
31
|
-
spacerRow(),
|
|
32
|
-
...options.rows.map((row) => formatRow(row))
|
|
33
|
-
].join('\n');
|
|
34
|
-
}
|