@glint/template 1.4.1-unstable.fd8b303 → 1.5.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.
@@ -45,7 +45,7 @@ export declare function emitContent(value: ContentValue): void;
45
45
  * });
46
46
  */
47
47
  export declare function emitElement<Name extends string>(
48
- name: Name,
48
+ name: Name
49
49
  ): { element: ElementForTagName<Name> };
50
50
 
51
51
  /*
@@ -65,7 +65,7 @@ export declare function emitElement<Name extends string>(
65
65
  * });
66
66
  */
67
67
  export declare function emitComponent<T extends ComponentReturn<any, any>>(
68
- component: T,
68
+ component: T
69
69
  ): {
70
70
  element: T extends ComponentReturn<any, infer El> ? El : any;
71
71
  blockParams: T extends ComponentReturn<infer Yields, any> ? Required<Yields> : any;
@@ -80,7 +80,7 @@ export declare function emitComponent<T extends ComponentReturn<any, any>>(
80
80
  */
81
81
  export declare function templateExpression<
82
82
  Signature extends AnyFunction = () => ComponentReturn<{}>,
83
- Context extends AnyContext = TemplateContext<void, {}, {}, void>,
83
+ Context extends AnyContext = TemplateContext<void, {}, {}, void>
84
84
  >(f: (𝚪: Context, χ: never) => void): new () => InvokableInstance<Signature> & HasContext<Context>;
85
85
 
86
86
  /*
@@ -98,7 +98,7 @@ export declare function templateExpression<
98
98
  */
99
99
  export declare function templateForBackingValue<Args extends unknown[], Context extends AnyContext>(
100
100
  backingValue: abstract new (...args: Args) => HasContext<Context>,
101
- body: (𝚪: Context, χ: never) => void,
101
+ body: (𝚪: Context, χ: never) => void
102
102
  ): abstract new () => unknown;
103
103
 
104
104
  /*
@@ -112,7 +112,7 @@ export declare function templateForBackingValue<Args extends unknown[], Context
112
112
  */
113
113
  export declare function yieldToBlock<Context extends AnyContext, K extends keyof Context['blocks']>(
114
114
  𝚪: Context,
115
- to: K,
115
+ to: K
116
116
  ): (...values: NonNullable<Context['blocks'][K]>) => void;
117
117
 
118
118
  /*
@@ -124,7 +124,7 @@ export declare function yieldToBlock<Context extends AnyContext, K extends keyof
124
124
  */
125
125
  export declare function applySplattributes<
126
126
  SourceElement extends Element,
127
- TargetElement extends SourceElement,
127
+ TargetElement extends SourceElement
128
128
  >(source: SourceElement, target: TargetElement): void;
129
129
 
130
130
  /*
@@ -27,13 +27,13 @@ import { ResolveOrReturn } from './types';
27
27
  * down to their most general form, which breaks complex declarations like `fn` that
28
28
  * rely on having multiple overrides to be typed correctly.
29
29
  *
30
- * In modern Ember.js, plain functions can themselves be invokables with their
31
- * own particular resolution semantics.
30
+ * In GlimmerX (and potentially other future environments), plain functions can themselves
31
+ * be invokables with their own particular resolution semantics.
32
32
  */
33
33
 
34
34
  export declare function resolve<T extends DirectInvokable>(item: T): T[typeof InvokeDirect];
35
35
  export declare function resolve<Args extends unknown[], Instance extends InvokableInstance>(
36
- item: (abstract new (...args: Args) => Instance) | null | undefined,
36
+ item: (abstract new (...args: Args) => Instance) | null | undefined
37
37
  ): (...args: Parameters<Instance[typeof Invoke]>) => ReturnType<Instance[typeof Invoke]>;
38
38
 
39
39
  /*
@@ -59,8 +59,8 @@ export declare const resolveOrReturn: ResolveOrReturn<typeof resolve>;
59
59
 
60
60
  export declare function resolveForBind<T extends DirectInvokable>(item: T): T[typeof InvokeDirect];
61
61
  export declare function resolveForBind<Args extends unknown[], Instance extends InvokableInstance>(
62
- item: abstract new (...args: Args) => Instance,
62
+ item: abstract new (...args: Args) => Instance
63
63
  ): (...args: Parameters<Instance[typeof Invoke]>) => ReturnType<Instance[typeof Invoke]>;
64
64
  export declare function resolveForBind<Args extends unknown[], Instance extends InvokableInstance>(
65
- item: null | undefined | (abstract new (...args: Args) => Instance),
65
+ item: null | undefined | (abstract new (...args: Args) => Instance)
66
66
  ): null | ((...args: Parameters<Instance[typeof Invoke]>) => ReturnType<Instance[typeof Invoke]>);
@@ -13,5 +13,5 @@ export type ElementForTagName<Name extends string> = Name extends keyof HTMLElem
13
13
  ? HTMLElementTagNameMap[Name] & SVGElementTagNameMap[Name]
14
14
  : HTMLElementTagNameMap[Name]
15
15
  : Name extends keyof SVGElementTagNameMap
16
- ? SVGElementTagNameMap[Name]
17
- : Element;
16
+ ? SVGElementTagNameMap[Name]
17
+ : Element;
@@ -128,17 +128,19 @@ export type ModifierLike<S = unknown> = Invokable<
128
128
  * consumers would still be obligated to provide a `@message`
129
129
  * arg when invoking the yielded component.
130
130
  */
131
- export type WithBoundArgs<T extends Invokable<AnyFunction>, BoundArgs extends NamedArgNames<T>> =
132
- T extends Invokable<(...args: [...positional: infer P, named: infer N]) => infer R>
133
- ? Invokable<
134
- (
135
- ...args: [
136
- ...positional: P,
137
- ...named: MaybeNamed<PrebindArgs<UnwrapNamedArgs<NonNullable<N>>, BoundArgs>>,
138
- ]
139
- ) => R
140
- >
141
- : never;
131
+ export type WithBoundArgs<
132
+ T extends Invokable<AnyFunction>,
133
+ BoundArgs extends NamedArgNames<T>
134
+ > = T extends Invokable<(...args: [...positional: infer P, named: infer N]) => infer R>
135
+ ? Invokable<
136
+ (
137
+ ...args: [
138
+ ...positional: P,
139
+ ...named: MaybeNamed<PrebindArgs<UnwrapNamedArgs<NonNullable<N>>, BoundArgs>>
140
+ ]
141
+ ) => R
142
+ >
143
+ : never;
142
144
 
143
145
  /**
144
146
  * Similar to `WithBoundArgs`, this utility type provides a shorthand
@@ -171,14 +173,13 @@ export type WithBoundArgs<T extends Invokable<AnyFunction>, BoundArgs extends Na
171
173
  */
172
174
  export type WithBoundPositionals<
173
175
  T extends Invokable<AnyFunction> | AnyFunction,
174
- Count extends number,
175
- > =
176
- T extends Invokable<(el: infer El, ...args: infer A) => ModifierReturn>
177
- ? Invokable<(el: El, ...args: SliceFrom<A, Count>) => ModifierReturn>
178
- : T extends Invokable<(...args: infer A) => infer R>
179
- ? Invokable<(...args: SliceFrom<A, Count>) => R>
180
- : T extends (...args: infer A) => infer R
181
- ? Invokable<(...args: SliceFrom<A, Count>) => R>
182
- : never;
176
+ Count extends number
177
+ > = T extends Invokable<(el: infer El, ...args: infer A) => ModifierReturn>
178
+ ? Invokable<(el: El, ...args: SliceFrom<A, Count>) => ModifierReturn>
179
+ : T extends Invokable<(...args: infer A) => infer R>
180
+ ? Invokable<(...args: SliceFrom<A, Count>) => R>
181
+ : T extends (...args: infer A) => infer R
182
+ ? Invokable<(...args: SliceFrom<A, Count>) => R>
183
+ : never;
183
184
 
184
185
  export {};
@@ -69,11 +69,12 @@ export interface NamedArgsMarker {
69
69
  [NamedArgs]: true;
70
70
  }
71
71
 
72
- export type NamedArgNames<T extends Invokable<AnyFunction>> =
73
- T extends Invokable<(...args: infer A) => any>
74
- ? A extends [...positional: infer _, named?: infer N]
75
- ? Exclude<keyof NonNullable<N>, typeof NamedArgs>
76
- : never
77
- : never;
72
+ export type NamedArgNames<T extends Invokable<AnyFunction>> = T extends Invokable<
73
+ (...args: infer A) => any
74
+ >
75
+ ? A extends [...positional: infer _, named?: infer N]
76
+ ? Exclude<keyof NonNullable<N>, typeof NamedArgs>
77
+ : never
78
+ : never;
78
79
 
79
80
  export type UnwrapNamedArgs<T> = T extends NamedArgs<infer U> ? U : T;
@@ -7,16 +7,16 @@ type PrefixOf<T extends unknown[]> = T extends [arg: infer Arg, ...rest: infer R
7
7
 
8
8
  export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<{
9
9
  // {{bind invokable}}
10
+ <Args extends unknown[], T extends Kind>(invokable: (...args: Args) => T): Invokable<
11
+ (...args: Args) => T
12
+ >;
10
13
  <Args extends unknown[], T extends Kind>(
11
- invokable: (...args: Args) => T,
12
- ): Invokable<(...args: Args) => T>;
13
- <Args extends unknown[], T extends Kind>(
14
- invokable: ((...args: Args) => T) | null | undefined,
14
+ invokable: ((...args: Args) => T) | null | undefined
15
15
  ): null | Invokable<(...args: Args) => T>;
16
16
  // {{bind invokableWithOnlyNamedArgs name="foo"}}
17
17
  <Named, Return extends Kind, GivenNamed>(
18
18
  invokable: (named: NamedArgs<Named>) => Return,
19
- named: NamedArgs<Partial<Named> & GivenNamed>,
19
+ named: NamedArgs<Partial<Named> & GivenNamed>
20
20
  ): Invokable<
21
21
  (
22
22
  ...named: MaybeNamed<
@@ -26,7 +26,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
26
26
  >;
27
27
  <Named, Return extends Kind, GivenNamed>(
28
28
  invokable: null | undefined | ((named: NamedArgs<Named>) => Return),
29
- named: NamedArgs<Partial<Named> & GivenNamed>,
29
+ named: NamedArgs<Partial<Named> & GivenNamed>
30
30
  ): null | Invokable<
31
31
  (
32
32
  ...named: MaybeNamed<
@@ -37,27 +37,27 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
37
37
  // {{bind invokableWithNamedAndPositionalArgs name="foo"}}
38
38
  <Named, Positional extends unknown[], Return extends Kind, GivenNamed extends Partial<Named>>(
39
39
  invokable: (...args: [...Positional, NamedArgs<Named>]) => Return,
40
- named: GivenNamed,
40
+ named: GivenNamed
41
41
  ): Invokable<
42
42
  (
43
43
  ...args: [
44
44
  ...Positional,
45
45
  ...MaybeNamed<
46
46
  PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
47
- >,
47
+ >
48
48
  ]
49
49
  ) => Return
50
50
  >;
51
51
  <Named, Positional extends unknown[], Return extends Kind, GivenNamed extends Partial<Named>>(
52
52
  invokable: (...args: [...Positional, NamedArgs<Named>]) => Return,
53
- named: GivenNamed,
53
+ named: GivenNamed
54
54
  ): Invokable<
55
55
  (
56
56
  ...args: [
57
57
  ...Positional,
58
58
  ...MaybeNamed<
59
59
  PrebindArgs<NonNullable<Named>, keyof GivenNamed & keyof UnwrapNamedArgs<Named>>
60
- >,
60
+ >
61
61
  ]
62
62
  ) => Return
63
63
  >;
@@ -65,7 +65,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
65
65
  <
66
66
  Positional extends any[],
67
67
  Return extends Kind,
68
- GivenPositional extends PrefixOf<SliceFrom<Positional, Prefix>>,
68
+ GivenPositional extends PrefixOf<SliceFrom<Positional, Prefix>>
69
69
  >(
70
70
  invokable: (...args: [...Positional]) => Return,
71
71
  ...args: GivenPositional
@@ -73,14 +73,14 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
73
73
  (
74
74
  ...args: [
75
75
  ...SliceTo<Positional, Prefix>,
76
- ...SliceFrom<SliceFrom<Positional, Prefix>, GivenPositional['length']>,
76
+ ...SliceFrom<SliceFrom<Positional, Prefix>, GivenPositional['length']>
77
77
  ]
78
78
  ) => Return
79
79
  >;
80
80
  <
81
81
  Positional extends any[],
82
82
  Return extends Kind,
83
- GivenPositional extends PrefixOf<SliceFrom<Positional, Prefix>>,
83
+ GivenPositional extends PrefixOf<SliceFrom<Positional, Prefix>>
84
84
  >(
85
85
  invokable: null | undefined | ((...args: [...Positional]) => Return),
86
86
  ...args: GivenPositional
@@ -88,7 +88,7 @@ export type BindInvokableKeyword<Prefix extends number, Kind> = DirectInvokable<
88
88
  (
89
89
  ...args: [
90
90
  ...SliceTo<Positional, Prefix>,
91
- ...SliceFrom<SliceFrom<Positional, Prefix>, GivenPositional['length']>,
91
+ ...SliceFrom<SliceFrom<Positional, Prefix>, GivenPositional['length']>
92
92
  ]
93
93
  ) => Return
94
94
  >;
@@ -1,9 +1,7 @@
1
1
  import { ComponentReturn, DirectInvokable } from '../integration';
2
2
 
3
3
  export type LetKeyword = DirectInvokable<{
4
- <T extends unknown[]>(
5
- ...values: T
6
- ): ComponentReturn<{
4
+ <T extends unknown[]>(...values: T): ComponentReturn<{
7
5
  default: T;
8
6
  }>;
9
7
  }>;
@@ -10,7 +10,7 @@ import { NamedArgs, UnwrapNamedArgs } from './integration';
10
10
  */
11
11
  export type InvokableArgs<Args> = [
12
12
  ...positional: Constrain<Get<Args, 'Positional'>, Array<unknown>, []>,
13
- ...named: MaybeNamed<NamedArgs<Get<Args, 'Named'>>>,
13
+ ...named: MaybeNamed<NamedArgs<Get<Args, 'Named'>>>
14
14
  ];
15
15
 
16
16
  /** Given a signature `S`, get back the normalized `Args` type. */
@@ -72,12 +72,12 @@ export type TupleOfSize<Len extends number, Acc extends unknown[] = []> = Acc['l
72
72
  export type SliceTo<T extends unknown[], Index extends number> = T['length'] extends Index
73
73
  ? T
74
74
  : T extends [...infer Rest, any?]
75
- ? SliceTo<Rest, Index>
76
- : [];
75
+ ? SliceTo<Rest, Index>
76
+ : [];
77
77
 
78
78
  export type SliceFrom<T extends unknown[], Index extends number> = T extends [
79
79
  ...TupleOfSize<Index>,
80
- ...infer Rest,
80
+ ...infer Rest
81
81
  ]
82
82
  ? Rest
83
83
  : [];
package/package.json CHANGED
@@ -1,15 +1,13 @@
1
1
  {
2
2
  "name": "@glint/template",
3
- "version": "1.4.1-unstable.fd8b303",
3
+ "version": "1.5.0",
4
4
  "repository": "typed-ember/glint",
5
5
  "description": "Type definitions to back typechecking for Glimmer templates",
6
6
  "license": "MIT",
7
7
  "author": "Dan Freeman (https://github.com/dfreeman)",
8
8
  "types": "-private/index.d.ts",
9
9
  "scripts": {
10
- "test": "echo 'no standalone tests within this project'",
11
- "test:typecheck": "tsc --project __tests__",
12
- "test:tsc": "echo 'no standalone typecheck within this project'"
10
+ "test": "tsc --project __tests__"
13
11
  },
14
12
  "files": [
15
13
  "README.md",
@@ -18,6 +16,7 @@
18
16
  ],
19
17
  "devDependencies": {
20
18
  "@glimmer/component": "^1.1.2",
19
+ "@glimmerx/component": "^0.6.7",
21
20
  "@types/ember__component": "~4.0.8",
22
21
  "expect-type": "^0.15.0",
23
22
  "sums-up": "^2.1.0"