@overkill-dev/assert 0.0.1 → 0.0.3
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/LICENSE +21 -0
- package/assert/assertion-extension.d.ts +65 -0
- package/assert/assertion-extension.d.ts.map +1 -0
- package/assert/assertion-extension.js +257 -0
- package/assert/assertion-extension.js.map +1 -0
- package/package.json +33 -6
- package/packages/assert/assert.entry-point.d.ts +5 -0
- package/packages/assert/assert.entry-point.d.ts.map +1 -0
- package/packages/assert/assert.entry-point.js +2 -0
- package/packages/assert/assert.entry-point.js.map +1 -0
- package/readme.md +54 -5
- package/sbom.cdx.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Overkill contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type CompositeAssertionGroup, type CompositeAssertionReference, type CompositeAssertionSummaryContext, type AssertCompositeAssertionReturn, type NarrowingCompositeAssertionReference } from '@overkill-dev/engine/assertion-protocol/assertion-reference.js';
|
|
2
|
+
import type { BuiltInAssertAssertionNode, CompositeAssertionChildNode, ForeignAssertionNode } from '@overkill-dev/engine/assertion-protocol/assertion-node.js';
|
|
3
|
+
import type { AssertionSource, DeepComparable, InstanceConstructor, NonEmptyReadonlyArray, ResolvableSourceLocation } from '@overkill-dev/engine/assertion-protocol/assertion-node-shape.d.ts';
|
|
4
|
+
import { type SynchronousCallback, type ThrownMatcher } from '@overkill-dev/engine/assertion-protocol/thrown-matcher.js';
|
|
5
|
+
type GroupItem<Source extends AssertionSource> = CompositeAssertionChildNode<Source> | CompositeAssertionGroup<Source>;
|
|
6
|
+
type CompositeAssertionSummaryFormatter<Arguments extends readonly unknown[]> = (context: CompositeAssertionSummaryContext, ...parameters: Arguments) => string;
|
|
7
|
+
type NarrowingCompositeAssertionSummaryFormatter<Actual, Arguments extends readonly unknown[]> = (context: CompositeAssertionSummaryContext, actual: Actual, ...parameters: Arguments) => string;
|
|
8
|
+
export type CompositeCheckBuilder<Source extends AssertionSource = AssertionSource> = {
|
|
9
|
+
readonly annotated: (message: string) => CompositeCheckBuilder<Source>;
|
|
10
|
+
readonly array: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
11
|
+
readonly arrayContainsPartial: <Actual, Expected>(actual: readonly DeepComparable<Actual>[], expectedSubset: DeepComparable<Expected>) => BuiltInAssertAssertionNode<Source>;
|
|
12
|
+
readonly between: (actual: number, minimum: number, maximum: number) => BuiltInAssertAssertionNode<Source>;
|
|
13
|
+
readonly boolean: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
14
|
+
readonly deepEqual: <Actual, Expected>(actual: DeepComparable<Actual>, expected: DeepComparable<Expected>) => BuiltInAssertAssertionNode<Source>;
|
|
15
|
+
readonly defined: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
16
|
+
readonly empty: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
17
|
+
readonly endsWith: (actual: string, expected: string) => BuiltInAssertAssertionNode<Source>;
|
|
18
|
+
readonly equal: (actual: unknown, expected: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
19
|
+
readonly fail: () => BuiltInAssertAssertionNode<Source>;
|
|
20
|
+
readonly false: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
21
|
+
readonly fromRejectable: (label: string, body: () => Promise<void>) => Promise<ForeignAssertionNode<Source>>;
|
|
22
|
+
readonly fromThrowable: (label: string, body: () => void) => ForeignAssertionNode<Source>;
|
|
23
|
+
readonly function: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
24
|
+
readonly greaterThan: (actual: number, expected: number) => BuiltInAssertAssertionNode<Source>;
|
|
25
|
+
readonly greaterThanOrEqual: (actual: number, expected: number) => BuiltInAssertAssertionNode<Source>;
|
|
26
|
+
readonly group: (children: NonEmptyReadonlyArray<GroupItem<Source>>) => CompositeAssertionGroup<Source>;
|
|
27
|
+
readonly hasProperty: (actual: unknown, key: PropertyKey) => BuiltInAssertAssertionNode<Source>;
|
|
28
|
+
readonly includes: (actual: string, expected: string) => BuiltInAssertAssertionNode<Source>;
|
|
29
|
+
readonly instanceOf: (actual: unknown, expected: InstanceConstructor) => BuiltInAssertAssertionNode<Source>;
|
|
30
|
+
readonly length: (actual: unknown, expectedLength: number) => BuiltInAssertAssertionNode<Source>;
|
|
31
|
+
readonly lessThan: (actual: number, expected: number) => BuiltInAssertAssertionNode<Source>;
|
|
32
|
+
readonly lessThanOrEqual: (actual: number, expected: number) => BuiltInAssertAssertionNode<Source>;
|
|
33
|
+
readonly match: (actual: string, pattern: RegExp) => BuiltInAssertAssertionNode<Source>;
|
|
34
|
+
readonly membersPartialDeepEqual: <Actual, Expected>(actual: readonly DeepComparable<Actual>[], expectedMembers: readonly DeepComparable<Expected>[]) => BuiltInAssertAssertionNode<Source>;
|
|
35
|
+
readonly notDeepEqual: <Actual, Expected>(actual: DeepComparable<Actual>, expected: DeepComparable<Expected>) => BuiltInAssertAssertionNode<Source>;
|
|
36
|
+
readonly notEmpty: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
37
|
+
readonly notEqual: (actual: unknown, expected: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
38
|
+
readonly notMatch: (actual: string, pattern: RegExp) => BuiltInAssertAssertionNode<Source>;
|
|
39
|
+
readonly notNull: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
40
|
+
readonly null: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
41
|
+
readonly number: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
42
|
+
readonly object: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
43
|
+
readonly partialDeepEqual: <Actual, Expected>(actual: DeepComparable<Actual>, expectedSubset: DeepComparable<Expected>) => BuiltInAssertAssertionNode<Source>;
|
|
44
|
+
readonly rejects: (thunk: () => PromiseLike<unknown>, matcher: ThrownMatcher) => Promise<CompositeAssertionGroup<Source>>;
|
|
45
|
+
readonly startsWith: (actual: string, expected: string) => BuiltInAssertAssertionNode<Source>;
|
|
46
|
+
readonly string: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
47
|
+
readonly throws: <Body extends () => unknown>(body: SynchronousCallback<Body>, matcher: ThrownMatcher) => CompositeAssertionGroup<Source>;
|
|
48
|
+
readonly true: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
49
|
+
readonly undefined: (actual: unknown) => BuiltInAssertAssertionNode<Source>;
|
|
50
|
+
};
|
|
51
|
+
export type CompositeAssertionDefinition<Arguments extends readonly unknown[], Result extends AssertCompositeAssertionReturn> = {
|
|
52
|
+
readonly assert: (check: CompositeCheckBuilder<'assert'>, ...parameters: Arguments) => Result;
|
|
53
|
+
readonly formatSummary?: CompositeAssertionSummaryFormatter<Arguments>;
|
|
54
|
+
readonly name: string;
|
|
55
|
+
};
|
|
56
|
+
export type NarrowingCompositeAssertionDefinition<Actual, Narrowed extends Actual, Arguments extends readonly unknown[]> = {
|
|
57
|
+
readonly formatSummary?: NarrowingCompositeAssertionSummaryFormatter<Actual, Arguments>;
|
|
58
|
+
readonly name: string;
|
|
59
|
+
readonly narrows: (actual: Actual, ...parameters: Arguments) => actual is Narrowed;
|
|
60
|
+
};
|
|
61
|
+
export declare function createCompositeCheckBuilder<Source extends AssertionSource>(source: Source, message: string | null, location: ResolvableSourceLocation): CompositeCheckBuilder<Source>;
|
|
62
|
+
export declare function defineCompositeAssertion<Arguments extends readonly unknown[], Result extends AssertCompositeAssertionReturn>(definition: CompositeAssertionDefinition<Arguments, Result>): CompositeAssertionReference<Arguments, Result>;
|
|
63
|
+
export declare function defineNarrowingCompositeAssertion<Actual, Narrowed extends Actual, Arguments extends readonly unknown[]>(definition: NarrowingCompositeAssertionDefinition<Actual, Narrowed, Arguments>): NarrowingCompositeAssertionReference<Actual, Narrowed, Arguments>;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=assertion-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-extension.d.ts","sourceRoot":"","sources":["../../../../source/assert/assertion-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { createAssertionReferenceRecord, createCompositeAssertionGroup, isCompositeAssertionGroup } from "@overkill-dev/engine/assertion-protocol/assertion-reference.js";
|
|
2
|
+
import { createThrownErrorRecord } from "@overkill-dev/engine/assertion-protocol/thrown-error-record.js";
|
|
3
|
+
import { thrownMatcherChildren } from "@overkill-dev/engine/assertion-protocol/thrown-matcher.js";
|
|
4
|
+
function createForeignAssertionNode(input) {
|
|
5
|
+
return {
|
|
6
|
+
check: 'foreign',
|
|
7
|
+
label: input.label,
|
|
8
|
+
location: input.location,
|
|
9
|
+
message: input.message,
|
|
10
|
+
result: input.result,
|
|
11
|
+
source: input.source,
|
|
12
|
+
summary: input.result.passed
|
|
13
|
+
? `Expected foreign assertion ${input.label} to pass.`
|
|
14
|
+
: `${input.label}: ${input.result.error.message}`
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function assertNonEmptyItems(items, message) {
|
|
18
|
+
if (items.length === 0) {
|
|
19
|
+
throw new TypeError(message);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function flattenCompositeGroupItems(items) {
|
|
23
|
+
const children = items.flatMap(function toChildren(item) {
|
|
24
|
+
return isCompositeAssertionGroup(item) ? item.children : [item];
|
|
25
|
+
});
|
|
26
|
+
assertNonEmptyItems(children, 'Expected composite assertion group to contain children.');
|
|
27
|
+
return children;
|
|
28
|
+
}
|
|
29
|
+
export function createCompositeCheckBuilder(source, message, location) {
|
|
30
|
+
return {
|
|
31
|
+
annotated(childMessage) {
|
|
32
|
+
return createCompositeCheckBuilder(source, childMessage, location);
|
|
33
|
+
},
|
|
34
|
+
array(actual) {
|
|
35
|
+
return { actual, check: 'array', location, message, source };
|
|
36
|
+
},
|
|
37
|
+
arrayContainsPartial(actual, expected) {
|
|
38
|
+
return { actual, check: 'array-contains-partial', expected, location, message, source };
|
|
39
|
+
},
|
|
40
|
+
between(actual, minimum, maximum) {
|
|
41
|
+
return { actual, check: 'between', location, maximum, message, minimum, source };
|
|
42
|
+
},
|
|
43
|
+
boolean(actual) {
|
|
44
|
+
return { actual, check: 'boolean', location, message, source };
|
|
45
|
+
},
|
|
46
|
+
deepEqual(actual, expected) {
|
|
47
|
+
return { actual, check: 'deep-equal', expected, location, message, source };
|
|
48
|
+
},
|
|
49
|
+
defined(actual) {
|
|
50
|
+
return { actual, check: 'defined', location, message, source };
|
|
51
|
+
},
|
|
52
|
+
empty(actual) {
|
|
53
|
+
return { actual, check: 'empty', location, message, source };
|
|
54
|
+
},
|
|
55
|
+
endsWith(actual, expected) {
|
|
56
|
+
return { actual, check: 'ends-with', expected, location, message, source };
|
|
57
|
+
},
|
|
58
|
+
equal(actual, expected) {
|
|
59
|
+
return { actual, check: 'equal', expected, location, message, source };
|
|
60
|
+
},
|
|
61
|
+
fail() {
|
|
62
|
+
return { check: 'fail', location, message, source };
|
|
63
|
+
},
|
|
64
|
+
false(actual) {
|
|
65
|
+
return { actual, check: 'false', location, message, source };
|
|
66
|
+
},
|
|
67
|
+
async fromRejectable(label, body) {
|
|
68
|
+
try {
|
|
69
|
+
await body();
|
|
70
|
+
return createForeignAssertionNode({
|
|
71
|
+
label,
|
|
72
|
+
location,
|
|
73
|
+
message,
|
|
74
|
+
result: { passed: true },
|
|
75
|
+
source
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
return createForeignAssertionNode({
|
|
80
|
+
label,
|
|
81
|
+
location,
|
|
82
|
+
message,
|
|
83
|
+
result: {
|
|
84
|
+
error: createThrownErrorRecord(error),
|
|
85
|
+
passed: false
|
|
86
|
+
},
|
|
87
|
+
source
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
fromThrowable(label, body) {
|
|
92
|
+
try {
|
|
93
|
+
body();
|
|
94
|
+
return createForeignAssertionNode({
|
|
95
|
+
label,
|
|
96
|
+
location,
|
|
97
|
+
message,
|
|
98
|
+
result: { passed: true },
|
|
99
|
+
source
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return createForeignAssertionNode({
|
|
104
|
+
label,
|
|
105
|
+
location,
|
|
106
|
+
message,
|
|
107
|
+
result: {
|
|
108
|
+
error: createThrownErrorRecord(error),
|
|
109
|
+
passed: false
|
|
110
|
+
},
|
|
111
|
+
source
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
function(actual) {
|
|
116
|
+
return { actual, check: 'function', location, message, source };
|
|
117
|
+
},
|
|
118
|
+
greaterThan(actual, expected) {
|
|
119
|
+
return { actual, check: 'greater-than', expected, location, message, source };
|
|
120
|
+
},
|
|
121
|
+
greaterThanOrEqual(actual, expected) {
|
|
122
|
+
return { actual, check: 'greater-than-or-equal', expected, location, message, source };
|
|
123
|
+
},
|
|
124
|
+
group(children) {
|
|
125
|
+
return createCompositeAssertionGroup(flattenCompositeGroupItems(children));
|
|
126
|
+
},
|
|
127
|
+
hasProperty(actual, key) {
|
|
128
|
+
return { actual, check: 'has-property', key, location, message, source };
|
|
129
|
+
},
|
|
130
|
+
includes(actual, expected) {
|
|
131
|
+
return { actual, check: 'includes', expected, location, message, source };
|
|
132
|
+
},
|
|
133
|
+
instanceOf(actual, expected) {
|
|
134
|
+
return { actual, check: 'instance-of', expected, location, message, source };
|
|
135
|
+
},
|
|
136
|
+
length(actual, expectedLength) {
|
|
137
|
+
return { actual, check: 'length', expectedLength, location, message, source };
|
|
138
|
+
},
|
|
139
|
+
lessThan(actual, expected) {
|
|
140
|
+
return { actual, check: 'less-than', expected, location, message, source };
|
|
141
|
+
},
|
|
142
|
+
lessThanOrEqual(actual, expected) {
|
|
143
|
+
return { actual, check: 'less-than-or-equal', expected, location, message, source };
|
|
144
|
+
},
|
|
145
|
+
match(actual, pattern) {
|
|
146
|
+
return { actual, check: 'match', location, message, pattern, source };
|
|
147
|
+
},
|
|
148
|
+
membersPartialDeepEqual(actual, expected) {
|
|
149
|
+
return { actual, check: 'members-partial-deep-equal', expected, location, message, source };
|
|
150
|
+
},
|
|
151
|
+
notDeepEqual(actual, expected) {
|
|
152
|
+
return { actual, check: 'not-deep-equal', expected, location, message, source };
|
|
153
|
+
},
|
|
154
|
+
notEmpty(actual) {
|
|
155
|
+
return { actual, check: 'not-empty', location, message, source };
|
|
156
|
+
},
|
|
157
|
+
notEqual(actual, expected) {
|
|
158
|
+
return { actual, check: 'not-equal', expected, location, message, source };
|
|
159
|
+
},
|
|
160
|
+
notMatch(actual, pattern) {
|
|
161
|
+
return { actual, check: 'not-match', location, message, pattern, source };
|
|
162
|
+
},
|
|
163
|
+
notNull(actual) {
|
|
164
|
+
return { actual, check: 'not-null', location, message, source };
|
|
165
|
+
},
|
|
166
|
+
null(actual) {
|
|
167
|
+
return { actual, check: 'null', location, message, source };
|
|
168
|
+
},
|
|
169
|
+
number(actual) {
|
|
170
|
+
return { actual, check: 'number', location, message, source };
|
|
171
|
+
},
|
|
172
|
+
object(actual) {
|
|
173
|
+
return { actual, check: 'object', location, message, source };
|
|
174
|
+
},
|
|
175
|
+
partialDeepEqual(actual, expected) {
|
|
176
|
+
return { actual, check: 'partial-deep-equal', expected, location, message, source };
|
|
177
|
+
},
|
|
178
|
+
async rejects(thunk, matcher) {
|
|
179
|
+
const promise = thunk();
|
|
180
|
+
try {
|
|
181
|
+
const value = await promise;
|
|
182
|
+
return createCompositeAssertionGroup(thrownMatcherChildren({
|
|
183
|
+
kind: 'rejects',
|
|
184
|
+
location,
|
|
185
|
+
matcher,
|
|
186
|
+
message,
|
|
187
|
+
observation: { status: 'resolved', value },
|
|
188
|
+
source
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
return createCompositeAssertionGroup(thrownMatcherChildren({
|
|
193
|
+
kind: 'rejects',
|
|
194
|
+
location,
|
|
195
|
+
matcher,
|
|
196
|
+
message,
|
|
197
|
+
observation: { status: 'rejected', value: error },
|
|
198
|
+
source
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
startsWith(actual, expected) {
|
|
203
|
+
return { actual, check: 'starts-with', expected, location, message, source };
|
|
204
|
+
},
|
|
205
|
+
string(actual) {
|
|
206
|
+
return { actual, check: 'string', location, message, source };
|
|
207
|
+
},
|
|
208
|
+
throws(body, matcher) {
|
|
209
|
+
try {
|
|
210
|
+
const value = body();
|
|
211
|
+
return createCompositeAssertionGroup(thrownMatcherChildren({
|
|
212
|
+
kind: 'throws',
|
|
213
|
+
location,
|
|
214
|
+
matcher,
|
|
215
|
+
message,
|
|
216
|
+
observation: { status: 'returned', value },
|
|
217
|
+
source
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
return createCompositeAssertionGroup(thrownMatcherChildren({
|
|
222
|
+
kind: 'throws',
|
|
223
|
+
location,
|
|
224
|
+
matcher,
|
|
225
|
+
message,
|
|
226
|
+
observation: { status: 'threw', value: error },
|
|
227
|
+
source
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
true(actual) {
|
|
232
|
+
return { actual, check: 'true', location, message, source };
|
|
233
|
+
},
|
|
234
|
+
undefined(actual) {
|
|
235
|
+
return { actual, check: 'undefined', location, message, source };
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
export function defineCompositeAssertion(definition) {
|
|
240
|
+
return createAssertionReferenceRecord({
|
|
241
|
+
formatSummary: definition.formatSummary ?? null,
|
|
242
|
+
kind: 'composite',
|
|
243
|
+
name: definition.name,
|
|
244
|
+
run(input) {
|
|
245
|
+
return definition.assert(createCompositeCheckBuilder(input.source, input.message, input.location), ...input.parameters);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
export function defineNarrowingCompositeAssertion(definition) {
|
|
250
|
+
return createAssertionReferenceRecord({
|
|
251
|
+
formatSummary: definition.formatSummary ?? null,
|
|
252
|
+
kind: 'narrowing-composite',
|
|
253
|
+
name: definition.name,
|
|
254
|
+
narrows: definition.narrows
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=assertion-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-extension.js","sourceRoot":"","sources":["../../../../source/assert/assertion-extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"author": "Christian Rackerseder <git@echooff.de>",
|
|
3
|
+
"bugs": {
|
|
4
|
+
"url": "https://github.com/enormora/overkill/issues"
|
|
5
|
+
},
|
|
6
|
+
"description": "Reusable Overkill assertion-extension helpers.",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": "^26"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./packages/assert/assert.entry-point.js",
|
|
13
|
+
"types": "./packages/assert/assert.entry-point.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"homepage": "https://github.com/enormora/overkill#readme",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"tdd",
|
|
19
|
+
"test",
|
|
20
|
+
"tests"
|
|
21
|
+
],
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"name": "@overkill-dev/assert",
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@overkill-dev/engine": "0.0.3"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/enormora/overkill.git"
|
|
30
|
+
},
|
|
31
|
+
"sideEffects": false,
|
|
32
|
+
"type": "module",
|
|
33
|
+
"version": "0.0.3"
|
|
34
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { defineCompositeAssertion, defineNarrowingCompositeAssertion } from '../../assert/assertion-extension.ts';
|
|
2
|
+
export type { CompositeAssertionDefinition, CompositeCheckBuilder, NarrowingCompositeAssertionDefinition } from '../../assert/assertion-extension.ts';
|
|
3
|
+
export type { AssertReferenceArguments, AssertReferenceReturn, CompositeAssertionGroup, CompositeAssertionReference, CompositeAssertionReturn, CompositeAssertionSummaryContext, NarrowingCompositeAssertionReference } from '@overkill-dev/engine/packages/engine/assertion-protocol.entry-point.js';
|
|
4
|
+
export type { AssertionSource, DeepComparable, ErrorMatcher, ExactThrownMatcher, NonEmptyReadonlyArray, SynchronousCallback, ThrownMatcher } from '@overkill-dev/engine/packages/engine/assertion-protocol.entry-point.js';
|
|
5
|
+
//# sourceMappingURL=assert.entry-point.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/assert/assert.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,wBAAwB,EACxB,iCAAiC,EACpC,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACR,4BAA4B,EAC5B,qBAAqB,EACrB,qCAAqC,EACxC,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACR,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,gCAAgC,EAChC,oCAAoC,EACvC,MAAM,6CAA6C,CAAC;AACrD,YAAY,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EAChB,MAAM,6CAA6C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/assert/assert.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,wBAAwB,EACxB,iCAAiC,EACpC,MAAM,qCAAqC,CAAC"}
|
package/readme.md
CHANGED
|
@@ -1,7 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@overkill-dev/assert`
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
can subsequently be configured for it. It contains no real package content and is published already
|
|
5
|
-
deprecated.
|
|
3
|
+
Reusable assertion-extension helpers for Overkill.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
Top-level API:
|
|
6
|
+
|
|
7
|
+
- `defineCompositeAssertion(options)`
|
|
8
|
+
- `defineNarrowingCompositeAssertion(options)`
|
|
9
|
+
- `CompositeCheckBuilder`
|
|
10
|
+
- `CompositeAssertionReference`
|
|
11
|
+
- `NarrowingCompositeAssertionReference`
|
|
12
|
+
- `CompositeAssertionReturn`
|
|
13
|
+
- `AssertReferenceArguments`
|
|
14
|
+
- `AssertReferenceReturn`
|
|
15
|
+
- `ThrownMatcher`, `ErrorMatcher`, `ExactThrownMatcher`
|
|
16
|
+
|
|
17
|
+
Composite assertions are imported reference values:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { defineCompositeAssertion } from '@overkill-dev/assert';
|
|
21
|
+
|
|
22
|
+
export const resultValueDeepEqual = defineCompositeAssertion({
|
|
23
|
+
name: 'resultValueDeepEqual',
|
|
24
|
+
|
|
25
|
+
assert(check, result: { readonly ok: boolean; readonly value: unknown; }, expected: unknown) {
|
|
26
|
+
return check.group([
|
|
27
|
+
check.annotated('ok flag').true(result.ok),
|
|
28
|
+
check.annotated('value').deepEqual(result.value, expected)
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Tests pass references to the engine-owned assertion facade:
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
scope.assert(resultValueDeepEqual, result, expected);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`defineNarrowingCompositeAssertion(...)` creates synchronous references accepted by both `scope.assert(...)` and `scope.require(...)`.
|
|
41
|
+
|
|
42
|
+
Foreign throwable-style assertions can be bridged inside a composite assertion:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
export const hasDomainInvariant = defineCompositeAssertion({
|
|
46
|
+
name: 'hasDomainInvariant',
|
|
47
|
+
|
|
48
|
+
assert(check, value: unknown) {
|
|
49
|
+
return check.fromThrowable('domain.assertInvariant', () => {
|
|
50
|
+
assertDomainInvariant(value);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Each composite reference records one assertion boundary. Child checks created through `check.*` are grouped diagnostics, not extra plan units.
|
package/sbom.cdx.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
|
|
3
|
+
"bomFormat": "CycloneDX",
|
|
4
|
+
"specVersion": "1.6",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"metadata": {
|
|
7
|
+
"tools": {
|
|
8
|
+
"components": [
|
|
9
|
+
{
|
|
10
|
+
"type": "application",
|
|
11
|
+
"name": "packtory",
|
|
12
|
+
"version": "0.0.78"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"component": {
|
|
17
|
+
"type": "library",
|
|
18
|
+
"name": "@overkill-dev/assert",
|
|
19
|
+
"version": "0.0.3",
|
|
20
|
+
"bom-ref": "pkg:npm/@overkill-dev/assert@0.0.3",
|
|
21
|
+
"purl": "pkg:npm/@overkill-dev/assert@0.0.3"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"components": [
|
|
25
|
+
{
|
|
26
|
+
"type": "library",
|
|
27
|
+
"name": "@overkill-dev/engine",
|
|
28
|
+
"version": "0.0.3",
|
|
29
|
+
"bom-ref": "pkg:npm/@overkill-dev/engine@0.0.3",
|
|
30
|
+
"scope": "optional",
|
|
31
|
+
"licenses": [
|
|
32
|
+
{
|
|
33
|
+
"expression": "MIT"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"purl": "pkg:npm/@overkill-dev/engine@0.0.3"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"dependencies": [
|
|
40
|
+
{
|
|
41
|
+
"ref": "pkg:npm/@overkill-dev/assert@0.0.3",
|
|
42
|
+
"dependsOn": [
|
|
43
|
+
"pkg:npm/@overkill-dev/engine@0.0.3"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"ref": "pkg:npm/@overkill-dev/engine@0.0.3"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|