tstyche 6.0.0-beta.3 → 6.0.0-beta.4

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/index.cjs ADDED
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ function noop() {
4
+ }
5
+ const noopChain = new Proxy(noop, {
6
+ apply() {
7
+ return noopChain;
8
+ },
9
+ get() {
10
+ return noopChain;
11
+ },
12
+ });
13
+
14
+ exports.describe = noopChain;
15
+ exports.expect = noopChain;
16
+ exports.it = noopChain;
17
+ exports.omit = noop;
18
+ exports.pick = noop;
19
+ exports.test = noopChain;
20
+ exports.when = noopChain;
@@ -0,0 +1,255 @@
1
+ interface Describe {
2
+ /**
3
+ * Defines a group of tests.
4
+ *
5
+ * @param name - The name of the group.
6
+ * @param callback - The function to create a scope for a group of tests.
7
+ */
8
+ (name: string, callback: () => void | Promise<void>): void;
9
+ /**
10
+ * Marks a group of tests as focused.
11
+ *
12
+ * @param name - The name of the group.
13
+ * @param callback - The function to create a scope for a group of tests.
14
+ */
15
+ only: (name: string, callback: () => void | Promise<void>) => void;
16
+ /**
17
+ * Marks a group of tests as skipped.
18
+ *
19
+ * @param name - The name of the group.
20
+ * @param callback - The function to create a scope for a group of tests.
21
+ */
22
+ skip: (name: string, callback: () => void | Promise<void>) => void;
23
+ /**
24
+ * Marks a group of tests as yet to be implemented.
25
+ *
26
+ * @param name - The name of the group.
27
+ * @param callback - The function to create a scope for a group of tests.
28
+ */
29
+ todo: (name: string, callback?: () => void | Promise<void>) => void;
30
+ }
31
+ interface Test {
32
+ /**
33
+ * Defines a single test.
34
+ *
35
+ * @param name - The name of the test.
36
+ * @param callback - The function with a code snippet and assertions.
37
+ */
38
+ (name: string, callback: () => void | Promise<void>): void;
39
+ /**
40
+ * Marks a test as focused.
41
+ *
42
+ * @param name - The name of the test.
43
+ * @param callback - The function with a code snippet and assertions.
44
+ */
45
+ only: (name: string, callback: () => void | Promise<void>) => void;
46
+ /**
47
+ * Marks a test as skipped.
48
+ *
49
+ * @param name - The name of the test.
50
+ * @param callback - The function with a code snippet and assertions.
51
+ */
52
+ skip: (name: string, callback: () => void | Promise<void>) => void;
53
+ /**
54
+ * Marks a test as yet to be implemented.
55
+ *
56
+ * @param name - The name of the test.
57
+ * @param callback - The function with a code snippet and assertions.
58
+ */
59
+ todo: (name: string, callback?: () => void | Promise<void>) => void;
60
+ }
61
+ interface Matchers {
62
+ /**
63
+ * Checks if the JSX component accepts props of the given type.
64
+ *
65
+ * @remarks
66
+ *
67
+ * This is a work in progress feature. Generic components are not yet supported.
68
+ */
69
+ toAcceptProps: {
70
+ /**
71
+ * Checks if the JSX component accepts props of the given type.
72
+ *
73
+ * @remarks
74
+ *
75
+ * This is a work in progress feature. Generic components are not yet supported.
76
+ */
77
+ <Target>(): void;
78
+ /**
79
+ * Checks if the JSX component accepts the given props.
80
+ *
81
+ * @remarks
82
+ *
83
+ * This is a work in progress feature. Generic components are not yet supported.
84
+ */
85
+ (target: unknown): void;
86
+ };
87
+ /**
88
+ * Checks if the source type is the same as the target type.
89
+ */
90
+ toBe: {
91
+ /**
92
+ * Checks if the source type is the same as the target type.
93
+ */
94
+ <Target>(): void;
95
+ /**
96
+ * Checks if the source type is the same as type of the target expression.
97
+ */
98
+ (target: unknown): void;
99
+ };
100
+ /**
101
+ * Checks if the decorator function can be applied.
102
+ */
103
+ toBeApplicable: (target: unknown, context: DecoratorContext) => void;
104
+ /**
105
+ * Checks if the source type is assignable from the target type.
106
+ */
107
+ toBeAssignableFrom: {
108
+ /**
109
+ * Checks if the source type is assignable from the target type.
110
+ */
111
+ <Target>(): void;
112
+ /**
113
+ * Checks if the source type is assignable from type of the target expression.
114
+ */
115
+ (target: unknown): void;
116
+ };
117
+ /**
118
+ * Checks if the source type is assignable to the target type.
119
+ */
120
+ toBeAssignableTo: {
121
+ /**
122
+ * Checks if the source type is assignable to the target type.
123
+ */
124
+ <Target>(): void;
125
+ /**
126
+ * Checks if the source type is assignable to type of the target expression.
127
+ */
128
+ (target: unknown): void;
129
+ };
130
+ /**
131
+ * Checks if the source type is callable with the given arguments.
132
+ */
133
+ toBeCallableWith: (...args: Array<unknown>) => void;
134
+ /**
135
+ * Checks if the source type is constructable with the given arguments.
136
+ */
137
+ toBeConstructableWith: (...args: Array<unknown>) => void;
138
+ /**
139
+ * Checks if a property key exists on the source type.
140
+ */
141
+ toHaveProperty: (key: string | number | symbol) => void;
142
+ /**
143
+ * Checks if the source type raises an error.
144
+ */
145
+ toRaiseError: (...target: Array<string | number | RegExp>) => void;
146
+ }
147
+ interface Modifier {
148
+ /**
149
+ * Indicates a type-level assertion.
150
+ */
151
+ type: Matchers & {
152
+ /**
153
+ * Negates the assertion.
154
+ */
155
+ not: Matchers;
156
+ };
157
+ }
158
+ interface Expect {
159
+ /**
160
+ * Builds an assertion.
161
+ *
162
+ * @template Source - The type which is checked.
163
+ */
164
+ <Source>(): Modifier;
165
+ /**
166
+ * Builds an assertion.
167
+ *
168
+ * @param source - The expression whose type is checked.
169
+ */
170
+ (source: unknown): Modifier;
171
+ /**
172
+ * Marks an assertion as focused.
173
+ */
174
+ only: {
175
+ /**
176
+ * Marks an assertion as focused.
177
+ *
178
+ * @template Source - The type which is checked.
179
+ */
180
+ <Source>(): Modifier;
181
+ /**
182
+ * Marks an assertion as focused.
183
+ *
184
+ * @param source - The expression whose type is checked.
185
+ */
186
+ (source: unknown): Modifier;
187
+ };
188
+ /**
189
+ * Marks an assertion as skipped.
190
+ */
191
+ skip: {
192
+ /**
193
+ * Marks an assertion as skipped.
194
+ *
195
+ * @template Source - The type which is checked.
196
+ */
197
+ <Source>(): Modifier;
198
+ /**
199
+ * Marks an assertion as skipped.
200
+ *
201
+ * @param source - The expression whose type is checked.
202
+ */
203
+ (source: unknown): Modifier;
204
+ };
205
+ }
206
+ /**
207
+ * Builds an assertion.
208
+ */
209
+ declare const expect: Expect;
210
+ /**
211
+ * Reshapes type of the given object by removing the specified keys.
212
+ */
213
+ declare function omit<T, K extends PropertyKey>(object: T, ...keys: [K, ...Array<K>]): Omit<T, K>;
214
+ /**
215
+ * Reshapes type of the given object by keeping only the specified keys.
216
+ */
217
+ declare function pick<T, K extends keyof T>(object: T, ...keys: [K, ...Array<K>]): Pick<T, K>;
218
+ /**
219
+ * Defines a test group.
220
+ */
221
+ declare const describe: Describe;
222
+ /**
223
+ * Defines a single test.
224
+ */
225
+ declare const it: Test;
226
+ /**
227
+ * Defines a single test.
228
+ */
229
+ declare const test: Test;
230
+ interface Actions {
231
+ /**
232
+ * Calls the given function with the provided arguments.
233
+ */
234
+ isCalledWith: (...args: Array<unknown>) => void;
235
+ }
236
+ interface When {
237
+ /**
238
+ * Creates a test plan.
239
+ *
240
+ * @template Target - The type upon which an action is performed.
241
+ */
242
+ <Target>(): Actions;
243
+ /**
244
+ * Creates a test plan.
245
+ *
246
+ * @param target - The expression upon which an action is performed.
247
+ */
248
+ (target: unknown): Actions;
249
+ }
250
+ /**
251
+ * Creates a test plan.
252
+ */
253
+ declare const when: When;
254
+
255
+ export { describe, expect, it, omit, pick, test, when };
package/dist/tstyche.js CHANGED
@@ -4756,6 +4756,12 @@ class Structure {
4756
4756
  }
4757
4757
  return false;
4758
4758
  }
4759
+ if ((a.flags | b.flags) & this.#compiler.TypeFlags.TemplateLiteral) {
4760
+ if (a.flags & b.flags & this.#compiler.TypeFlags.TemplateLiteral) {
4761
+ return this.compareTemplateLiteralTypes(a, b);
4762
+ }
4763
+ return false;
4764
+ }
4759
4765
  return false;
4760
4766
  }
4761
4767
  compareIntersections(a, b) {
@@ -5000,14 +5006,24 @@ class Structure {
5000
5006
  }
5001
5007
  return true;
5002
5008
  }
5009
+ compareTemplateLiteralTypes(a, b) {
5010
+ if (a.texts.length !== b.texts.length) {
5011
+ return false;
5012
+ }
5013
+ for (let i = 0; i < a.texts.length; i++) {
5014
+ if (a.texts[i] !== b.texts[i]) {
5015
+ return false;
5016
+ }
5017
+ if (!this.#compareMaybeNullish(a.types[i], b.types[i])) {
5018
+ return false;
5019
+ }
5020
+ }
5021
+ return true;
5022
+ }
5003
5023
  #normalize(type) {
5004
5024
  if (type.flags & this.#compiler.TypeFlags.Freshable && type.freshType === type) {
5005
5025
  return type.regularType;
5006
5026
  }
5007
- if (type.flags & this.#compiler.TypeFlags.Substitution &&
5008
- type.constraint.flags & this.#compiler.TypeFlags.Unknown) {
5009
- return type.baseType;
5010
- }
5011
5027
  if (type.flags & this.#compiler.TypeFlags.UnionOrIntersection) {
5012
5028
  const candidateType = this.#normalize(type.types[0]);
5013
5029
  if (type.types.every((t) => this.compare(this.#normalize(t), candidateType))) {
@@ -5872,7 +5888,7 @@ class FileRunner {
5872
5888
  class Runner {
5873
5889
  #eventEmitter = new EventEmitter();
5874
5890
  #resolvedConfig;
5875
- static version = "6.0.0-beta.3";
5891
+ static version = "6.0.0-beta.4";
5876
5892
  constructor(resolvedConfig) {
5877
5893
  this.#resolvedConfig = resolvedConfig;
5878
5894
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tstyche",
3
- "version": "6.0.0-beta.3",
3
+ "version": "6.0.0-beta.4",
4
4
  "description": "Everything You Need for Type Testing.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -21,11 +21,15 @@
21
21
  "license": "MIT",
22
22
  "type": "module",
23
23
  "exports": {
24
- ".": "./dist/index.js",
24
+ ".": {
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.cjs"
27
+ },
25
28
  "./tstyche": "./dist/tstyche.js",
26
29
  "./package.json": "./package.json"
27
30
  },
28
31
  "main": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
29
33
  "bin": "./dist/bin.js",
30
34
  "peerDependencies": {
31
35
  "typescript": ">=5.4"