@glint/template 1.7.7 → 1.7.8
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/-private/dsl/emit.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
TemplateContext,
|
|
10
10
|
Invokable,
|
|
11
11
|
NamedArgs,
|
|
12
|
-
UnwrapNamedArgs,
|
|
13
12
|
} from '../integration';
|
|
14
13
|
import {
|
|
15
14
|
AttributesForElement,
|
|
@@ -17,7 +16,7 @@ import {
|
|
|
17
16
|
MathMlElementForTagName,
|
|
18
17
|
SVGElementForTagName,
|
|
19
18
|
} from './types';
|
|
20
|
-
import { MaybeNamed, PrebindArgs } from '../signature';
|
|
19
|
+
import { MaybeNamed, PrebindArgs, UnionKeysOf } from '../signature';
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* Used during emit to denote an object literal that corresponds
|
|
@@ -189,18 +188,14 @@ type BindNamedResult<Args, T, GivenNamed> =
|
|
|
189
188
|
// Named-only args (required or optional — handles double-currying)
|
|
190
189
|
Args extends [NamedArgs<infer Named>?]
|
|
191
190
|
? (
|
|
192
|
-
...named: MaybeNamed<
|
|
193
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
194
|
-
>
|
|
191
|
+
...named: MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>
|
|
195
192
|
) => T
|
|
196
193
|
: // Positional + named args
|
|
197
194
|
Args extends [...infer Positional, NamedArgs<infer Named>]
|
|
198
195
|
? (
|
|
199
196
|
...args: [
|
|
200
197
|
...Positional,
|
|
201
|
-
...MaybeNamed<
|
|
202
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
203
|
-
>,
|
|
198
|
+
...MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>,
|
|
204
199
|
]
|
|
205
200
|
) => T
|
|
206
201
|
: (...args: Args extends unknown[] ? Args : never) => T;
|
|
@@ -74,10 +74,14 @@ export interface NamedArgsMarker {
|
|
|
74
74
|
[NamedArgs]: true;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
// Distributes so that a union type yields the keys of every constituent;
|
|
78
|
+
// plain `keyof` over a union only sees keys common to all constituents.
|
|
79
|
+
type KeysOfConstituents<T> = T extends unknown ? keyof T : never;
|
|
80
|
+
|
|
77
81
|
export type NamedArgNames<T extends Invokable<AnyFunction>> =
|
|
78
82
|
T extends Invokable<(...args: infer A) => any>
|
|
79
83
|
? A extends [...positional: infer _, named?: infer N]
|
|
80
|
-
? Exclude<
|
|
84
|
+
? Exclude<KeysOfConstituents<NonNullable<N>>, typeof NamedArgs>
|
|
81
85
|
: never
|
|
82
86
|
: never;
|
|
83
87
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DirectInvokable, Invokable, NamedArgs
|
|
2
|
-
import { MaybeNamed, PrebindArgs, SliceFrom, SliceTo } from '../signature';
|
|
1
|
+
import { DirectInvokable, Invokable, NamedArgs } from '../integration';
|
|
2
|
+
import { MaybeNamed, PrebindArgs, SliceFrom, SliceTo, UnionKeysOf } from '../signature';
|
|
3
3
|
|
|
4
4
|
type PrefixOf<T extends unknown[]> = T extends [arg: infer Arg, ...rest: infer Rest]
|
|
5
5
|
? [] | [Arg, ...PrefixOf<Rest>]
|
|
@@ -19,9 +19,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
|
|
|
19
19
|
named: NamedArgs<Partial<Named> & GivenNamed>,
|
|
20
20
|
): Invokable<
|
|
21
21
|
(
|
|
22
|
-
...named: MaybeNamed<
|
|
23
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
24
|
-
>
|
|
22
|
+
...named: MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>
|
|
25
23
|
) => Return
|
|
26
24
|
>;
|
|
27
25
|
<Named, Return extends Kind, GivenNamed>(
|
|
@@ -29,9 +27,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
|
|
|
29
27
|
named: NamedArgs<Partial<Named> & GivenNamed>,
|
|
30
28
|
): null | Invokable<
|
|
31
29
|
(
|
|
32
|
-
...named: MaybeNamed<
|
|
33
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
34
|
-
>
|
|
30
|
+
...named: MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>
|
|
35
31
|
) => Return
|
|
36
32
|
>;
|
|
37
33
|
// {{bind invokableWithNamedAndPositionalArgs name="foo"}}
|
|
@@ -42,9 +38,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
|
|
|
42
38
|
(
|
|
43
39
|
...args: [
|
|
44
40
|
...Positional,
|
|
45
|
-
...MaybeNamed<
|
|
46
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
47
|
-
>,
|
|
41
|
+
...MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>,
|
|
48
42
|
]
|
|
49
43
|
) => Return
|
|
50
44
|
>;
|
|
@@ -55,9 +49,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
|
|
|
55
49
|
(
|
|
56
50
|
...args: [
|
|
57
51
|
...Positional,
|
|
58
|
-
...MaybeNamed<
|
|
59
|
-
PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
|
|
60
|
-
>,
|
|
52
|
+
...MaybeNamed<PrebindArgs<NonNullable<Named>, keyof GivenNamed & UnionKeysOf<Named>>>,
|
|
61
53
|
]
|
|
62
54
|
) => Return
|
|
63
55
|
>;
|
package/-private/signature.d.ts
CHANGED
|
@@ -56,17 +56,34 @@ export type ComponentSignatureElement<S> = S extends { Element: infer Element }
|
|
|
56
56
|
: Element
|
|
57
57
|
: unknown;
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
// This distributes over union `T` so that each constituent only has the bound
|
|
60
|
+
// keys it actually declares omitted/made-optional. A non-distributive
|
|
61
|
+
// `Omit<A | B, ...>` would collapse the union to its common keys, losing the
|
|
62
|
+
// per-constituent shape (#1144).
|
|
63
|
+
export type PrebindArgs<T, Args extends UnionKeysOf<T>> = NamedArgs<
|
|
64
|
+
T extends any
|
|
65
|
+
? Omit<UnwrapNamedArgs<T>, Args & keyof UnwrapNamedArgs<T>> &
|
|
66
|
+
Partial<Pick<UnwrapNamedArgs<T>, Args & keyof UnwrapNamedArgs<T>>>
|
|
67
|
+
: never
|
|
61
68
|
>;
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
// Keys across all constituents of a (possibly union) named-args type. Plain
|
|
71
|
+
// `keyof UnwrapNamedArgs<T>` would only see keys common to every constituent.
|
|
72
|
+
export type UnionKeysOf<T> = T extends any ? keyof UnwrapNamedArgs<T> : never;
|
|
73
|
+
|
|
74
|
+
// Note: this must produce a single parameter tuple rather than distributing a
|
|
75
|
+
// union `T` into a union of tuples. A union of tuples breaks contravariant
|
|
76
|
+
// assignability against the `(named: NamedArgs<Named>)` patterns used by
|
|
77
|
+
// `{{component}}`/`{{helper}}`/`{{modifier}}` to pre-bind named args (#1144).
|
|
78
|
+
// The checks below are still union-aware: `{} extends A | B` holds when any
|
|
79
|
+
// constituent accepts an empty hash, and `UnionKeysOf` collects keys from all
|
|
80
|
+
// constituents.
|
|
81
|
+
export type MaybeNamed<T> =
|
|
82
|
+
{} extends UnwrapNamedArgs<T>
|
|
83
|
+
? [UnionKeysOf<T>] extends [never]
|
|
66
84
|
? []
|
|
67
85
|
: [named?: T]
|
|
68
|
-
: [named: T]
|
|
69
|
-
: never;
|
|
86
|
+
: [named: T];
|
|
70
87
|
|
|
71
88
|
export type Get<T, K, Otherwise = unknown> = K extends keyof T ? T[K] : Otherwise;
|
|
72
89
|
export type Constrain<T, Constraint, Otherwise = Constraint> = T extends Constraint ? T : Otherwise;
|