@glint/ember-tsc 1.5.0 → 1.6.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/package.json +14 -3
- package/src/environment-ember-template-imports/-private/environment/index.ts +48 -20
- package/types/-private/dsl/globals.d.ts +316 -1
- package/types/-private/intrinsics/array-hash.d.ts +17 -0
- package/types/-private/intrinsics/comparison.d.ts +36 -0
- package/types/-private/intrinsics/element.d.ts +14 -0
- package/types/-private/intrinsics/truth-convert.d.ts +86 -0
- package/types/-private/intrinsics/truth-helpers.d.ts +32 -0
- package/lib/cli/run-volar-tsc.d.ts +0 -2
- package/lib/cli/run-volar-tsc.d.ts.map +0 -1
- package/lib/cli/run-volar-tsc.js +0 -32
- package/lib/cli/run-volar-tsc.js.map +0 -1
- package/lib/config/config.d.ts +0 -15
- package/lib/config/config.d.ts.map +0 -1
- package/lib/config/config.js +0 -21
- package/lib/config/config.js.map +0 -1
- package/lib/config/environment.d.ts +0 -26
- package/lib/config/environment.d.ts.map +0 -1
- package/lib/config/environment.js +0 -96
- package/lib/config/environment.js.map +0 -1
- package/lib/config/index.d.ts +0 -24
- package/lib/config/index.d.ts.map +0 -1
- package/lib/config/index.js +0 -37
- package/lib/config/index.js.map +0 -1
- package/lib/config/loader.d.ts +0 -28
- package/lib/config/loader.d.ts.map +0 -1
- package/lib/config/loader.js +0 -121
- package/lib/config/loader.js.map +0 -1
- package/lib/config/types.cjs +0 -3
- package/lib/config/types.cjs.map +0 -1
- package/lib/config/types.d.cts +0 -60
- package/lib/config/types.d.cts.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/common.d.ts +0 -13
- package/lib/environment-ember-template-imports/-private/environment/common.d.ts.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/common.js +0 -2
- package/lib/environment-ember-template-imports/-private/environment/common.js.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/index.d.ts +0 -3
- package/lib/environment-ember-template-imports/-private/environment/index.d.ts.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/index.js +0 -76
- package/lib/environment-ember-template-imports/-private/environment/index.js.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/preprocess.d.ts +0 -4
- package/lib/environment-ember-template-imports/-private/environment/preprocess.d.ts.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/preprocess.js +0 -42
- package/lib/environment-ember-template-imports/-private/environment/preprocess.js.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/transform.d.ts +0 -4
- package/lib/environment-ember-template-imports/-private/environment/transform.d.ts.map +0 -1
- package/lib/environment-ember-template-imports/-private/environment/transform.js +0 -134
- package/lib/environment-ember-template-imports/-private/environment/transform.js.map +0 -1
- package/lib/index.d.ts +0 -7
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -6
- package/lib/index.js.map +0 -1
- package/lib/plugins/g-compiler-errors.d.ts +0 -12
- package/lib/plugins/g-compiler-errors.d.ts.map +0 -1
- package/lib/plugins/g-compiler-errors.js +0 -58
- package/lib/plugins/g-compiler-errors.js.map +0 -1
- package/lib/plugins/g-component-hover.d.ts +0 -24
- package/lib/plugins/g-component-hover.d.ts.map +0 -1
- package/lib/plugins/g-component-hover.js +0 -135
- package/lib/plugins/g-component-hover.js.map +0 -1
- package/lib/plugins/g-template-tag-symbols.d.ts +0 -11
- package/lib/plugins/g-template-tag-symbols.d.ts.map +0 -1
- package/lib/plugins/g-template-tag-symbols.js +0 -48
- package/lib/plugins/g-template-tag-symbols.js.map +0 -1
- package/lib/plugins/utils.d.ts +0 -25
- package/lib/plugins/utils.d.ts.map +0 -1
- package/lib/plugins/utils.js +0 -63
- package/lib/plugins/utils.js.map +0 -1
- package/lib/transform/diagnostics/augmentation.d.ts +0 -4
- package/lib/transform/diagnostics/augmentation.d.ts.map +0 -1
- package/lib/transform/diagnostics/augmentation.js +0 -249
- package/lib/transform/diagnostics/augmentation.js.map +0 -1
- package/lib/transform/diagnostics/index.d.ts +0 -5
- package/lib/transform/diagnostics/index.d.ts.map +0 -1
- package/lib/transform/diagnostics/index.js +0 -2
- package/lib/transform/diagnostics/index.js.map +0 -1
- package/lib/transform/index.d.ts +0 -4
- package/lib/transform/index.d.ts.map +0 -1
- package/lib/transform/index.js +0 -2
- package/lib/transform/index.js.map +0 -1
- package/lib/transform/template/code-features.d.ts +0 -30
- package/lib/transform/template/code-features.d.ts.map +0 -1
- package/lib/transform/template/code-features.js +0 -26
- package/lib/transform/template/code-features.js.map +0 -1
- package/lib/transform/template/glimmer-ast-mapping-tree.d.ts +0 -80
- package/lib/transform/template/glimmer-ast-mapping-tree.d.ts.map +0 -1
- package/lib/transform/template/glimmer-ast-mapping-tree.js +0 -132
- package/lib/transform/template/glimmer-ast-mapping-tree.js.map +0 -1
- package/lib/transform/template/inlining/index.d.ts +0 -16
- package/lib/transform/template/inlining/index.d.ts.map +0 -1
- package/lib/transform/template/inlining/index.js +0 -21
- package/lib/transform/template/inlining/index.js.map +0 -1
- package/lib/transform/template/inlining/tagged-strings.d.ts +0 -8
- package/lib/transform/template/inlining/tagged-strings.d.ts.map +0 -1
- package/lib/transform/template/inlining/tagged-strings.js +0 -140
- package/lib/transform/template/inlining/tagged-strings.js.map +0 -1
- package/lib/transform/template/map-template-contents.d.ts +0 -121
- package/lib/transform/template/map-template-contents.d.ts.map +0 -1
- package/lib/transform/template/map-template-contents.js +0 -287
- package/lib/transform/template/map-template-contents.js.map +0 -1
- package/lib/transform/template/rewrite-module.d.ts +0 -22
- package/lib/transform/template/rewrite-module.d.ts.map +0 -1
- package/lib/transform/template/rewrite-module.js +0 -265
- package/lib/transform/template/rewrite-module.js.map +0 -1
- package/lib/transform/template/scope-stack.d.ts +0 -13
- package/lib/transform/template/scope-stack.d.ts.map +0 -1
- package/lib/transform/template/scope-stack.js +0 -28
- package/lib/transform/template/scope-stack.js.map +0 -1
- package/lib/transform/template/template-to-typescript.d.ts +0 -19
- package/lib/transform/template/template-to-typescript.d.ts.map +0 -1
- package/lib/transform/template/template-to-typescript.js +0 -1125
- package/lib/transform/template/template-to-typescript.js.map +0 -1
- package/lib/transform/template/transformed-module.d.ts +0 -111
- package/lib/transform/template/transformed-module.d.ts.map +0 -1
- package/lib/transform/template/transformed-module.js +0 -287
- package/lib/transform/template/transformed-module.js.map +0 -1
- package/lib/transform/util.d.ts +0 -7
- package/lib/transform/util.d.ts.map +0 -1
- package/lib/transform/util.js +0 -15
- package/lib/transform/util.js.map +0 -1
- package/lib/volar/ember-language-plugin.d.ts +0 -14
- package/lib/volar/ember-language-plugin.d.ts.map +0 -1
- package/lib/volar/ember-language-plugin.js +0 -91
- package/lib/volar/ember-language-plugin.js.map +0 -1
- package/lib/volar/gts-virtual-code.d.ts +0 -83
- package/lib/volar/gts-virtual-code.d.ts.map +0 -1
- package/lib/volar/gts-virtual-code.js +0 -210
- package/lib/volar/gts-virtual-code.js.map +0 -1
- package/lib/volar/language-server.d.ts +0 -2
- package/lib/volar/language-server.d.ts.map +0 -1
- package/lib/volar/language-server.js +0 -180
- package/lib/volar/language-server.js.map +0 -1
- package/lib/volar/script-snapshot.d.ts +0 -17
- package/lib/volar/script-snapshot.d.ts.map +0 -1
- package/lib/volar/script-snapshot.js +0 -24
- package/lib/volar/script-snapshot.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glint/ember-tsc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"repository": "typed-ember/glint",
|
|
5
5
|
"description": "A CLI for performing typechecking on Glimmer templates",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,9 +24,12 @@
|
|
|
24
24
|
"./types": "./types/-private/dsl/integration-declarations.d.ts",
|
|
25
25
|
"./-private/dsl/globals": "./types/-private/dsl/globals.d.ts",
|
|
26
26
|
"./-private/intrinsics/action": "./types/-private/intrinsics/action.d.ts",
|
|
27
|
+
"./-private/intrinsics/array-hash": "./types/-private/intrinsics/array-hash.d.ts",
|
|
28
|
+
"./-private/intrinsics/comparison": "./types/-private/intrinsics/comparison.d.ts",
|
|
27
29
|
"./-private/intrinsics/concat": "./types/-private/intrinsics/concat.d.ts",
|
|
28
30
|
"./-private/intrinsics/each": "./types/-private/intrinsics/each.d.ts",
|
|
29
31
|
"./-private/intrinsics/each-in": "./types/-private/intrinsics/each-in.d.ts",
|
|
32
|
+
"./-private/intrinsics/element": "./types/-private/intrinsics/element.d.ts",
|
|
30
33
|
"./-private/intrinsics/fn": "./types/-private/intrinsics/fn.d.ts",
|
|
31
34
|
"./-private/intrinsics/get": "./types/-private/intrinsics/get.d.ts",
|
|
32
35
|
"./-private/intrinsics/log": "./types/-private/intrinsics/log.d.ts",
|
|
@@ -34,6 +37,8 @@
|
|
|
34
37
|
"./-private/intrinsics/mut": "./types/-private/intrinsics/mut.d.ts",
|
|
35
38
|
"./-private/intrinsics/on": "./types/-private/intrinsics/on.d.ts",
|
|
36
39
|
"./-private/intrinsics/outlet": "./types/-private/intrinsics/outlet.d.ts",
|
|
40
|
+
"./-private/intrinsics/truth-convert": "./types/-private/intrinsics/truth-convert.d.ts",
|
|
41
|
+
"./-private/intrinsics/truth-helpers": "./types/-private/intrinsics/truth-helpers.d.ts",
|
|
37
42
|
"./-private/intrinsics/unbound": "./types/-private/intrinsics/unbound.d.ts",
|
|
38
43
|
"./-private/intrinsics/unique-id": "./types/-private/intrinsics/unique-id.d.ts",
|
|
39
44
|
"./*": {
|
|
@@ -53,8 +58,14 @@
|
|
|
53
58
|
"glint-language-server": "bin/glint-language-server.js"
|
|
54
59
|
},
|
|
55
60
|
"peerDependencies": {
|
|
61
|
+
"ember-source": ">=7.1.0",
|
|
56
62
|
"typescript": ">=5.6.0"
|
|
57
63
|
},
|
|
64
|
+
"peerDependenciesMeta": {
|
|
65
|
+
"ember-source": {
|
|
66
|
+
"optional": true
|
|
67
|
+
}
|
|
68
|
+
},
|
|
58
69
|
"dependencies": {
|
|
59
70
|
"@glimmer/syntax": "^0.95.0",
|
|
60
71
|
"@volar/kit": "~2.4.28",
|
|
@@ -86,8 +97,8 @@
|
|
|
86
97
|
"execa": "^4.0.1",
|
|
87
98
|
"strip-ansi": "^6.0.0",
|
|
88
99
|
"typescript": "^5.9.3",
|
|
89
|
-
"
|
|
90
|
-
"glint-
|
|
100
|
+
"glint-monorepo-test-utils": "0.0.0",
|
|
101
|
+
"@glint/type-test": "2.0.1"
|
|
91
102
|
},
|
|
92
103
|
"publishConfig": {
|
|
93
104
|
"access": "public"
|
|
@@ -16,6 +16,52 @@ export default function emberTemplateImportsEnvironment(
|
|
|
16
16
|
? options['additionalGlobals']
|
|
17
17
|
: [];
|
|
18
18
|
|
|
19
|
+
const globalsForEmber = [
|
|
20
|
+
'action',
|
|
21
|
+
'component',
|
|
22
|
+
'debugger',
|
|
23
|
+
'each',
|
|
24
|
+
'each-in',
|
|
25
|
+
'has-block',
|
|
26
|
+
'has-block-params',
|
|
27
|
+
'helper',
|
|
28
|
+
'if',
|
|
29
|
+
'in-element',
|
|
30
|
+
'let',
|
|
31
|
+
'log',
|
|
32
|
+
'modifier',
|
|
33
|
+
'mount',
|
|
34
|
+
'mut',
|
|
35
|
+
'outlet',
|
|
36
|
+
'unbound',
|
|
37
|
+
'unless',
|
|
38
|
+
'with',
|
|
39
|
+
'yield',
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
Ember 7.1+ built-in keywords (RFCs 389, 470, 560, 561, 562, 997, 998, 999,
|
|
44
|
+
1000). Their template-side signatures live in `KeywordsForEmber71` in
|
|
45
|
+
`types/-private/dsl/globals.d.ts` and are gated on `ember-source >= 7.1.0`
|
|
46
|
+
via the `HasEmber71BuiltIns` probe.
|
|
47
|
+
*/
|
|
48
|
+
const globalsForEmber71 = [
|
|
49
|
+
'and',
|
|
50
|
+
'array',
|
|
51
|
+
'element',
|
|
52
|
+
'eq',
|
|
53
|
+
'fn',
|
|
54
|
+
'gt',
|
|
55
|
+
'gte',
|
|
56
|
+
'hash',
|
|
57
|
+
'lt',
|
|
58
|
+
'lte',
|
|
59
|
+
'neq',
|
|
60
|
+
'not',
|
|
61
|
+
'on',
|
|
62
|
+
'or',
|
|
63
|
+
];
|
|
64
|
+
|
|
19
65
|
return {
|
|
20
66
|
tags: {
|
|
21
67
|
'@glint/ember-tsc/environment-ember-template-imports/-private/tag': {
|
|
@@ -41,26 +87,8 @@ export default function emberTemplateImportsEnvironment(
|
|
|
41
87
|
},
|
|
42
88
|
},
|
|
43
89
|
globals: [
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
'debugger',
|
|
47
|
-
'each',
|
|
48
|
-
'each-in',
|
|
49
|
-
'has-block',
|
|
50
|
-
'has-block-params',
|
|
51
|
-
'helper',
|
|
52
|
-
'if',
|
|
53
|
-
'in-element',
|
|
54
|
-
'let',
|
|
55
|
-
'log',
|
|
56
|
-
'modifier',
|
|
57
|
-
'mount',
|
|
58
|
-
'mut',
|
|
59
|
-
'outlet',
|
|
60
|
-
'unbound',
|
|
61
|
-
'unless',
|
|
62
|
-
'with',
|
|
63
|
-
'yield',
|
|
90
|
+
...globalsForEmber,
|
|
91
|
+
...globalsForEmber71,
|
|
64
92
|
...Object.keys(additionalGlobalSpecialForms),
|
|
65
93
|
...additionalGlobals,
|
|
66
94
|
],
|
|
@@ -3,19 +3,59 @@ import Globals from '../../globals';
|
|
|
3
3
|
import * as VM from '@glint/template/-private/keywords';
|
|
4
4
|
|
|
5
5
|
import { ActionKeyword } from '../intrinsics/action';
|
|
6
|
+
import { ArrayHelper, HashHelper } from '../intrinsics/array-hash';
|
|
7
|
+
import {
|
|
8
|
+
EqHelper,
|
|
9
|
+
GtHelper,
|
|
10
|
+
GteHelper,
|
|
11
|
+
LtHelper,
|
|
12
|
+
LteHelper,
|
|
13
|
+
NeqHelper,
|
|
14
|
+
} from '../intrinsics/comparison';
|
|
6
15
|
import { EachKeyword } from '../intrinsics/each';
|
|
7
16
|
import { EachInKeyword } from '../intrinsics/each-in';
|
|
17
|
+
import { ElementHelper } from '../intrinsics/element';
|
|
18
|
+
import { FnHelper } from '../intrinsics/fn';
|
|
8
19
|
import { LogHelper } from '../intrinsics/log';
|
|
9
20
|
import { MountKeyword } from '../intrinsics/mount';
|
|
10
21
|
import { MutKeyword } from '../intrinsics/mut';
|
|
22
|
+
import { OnModifier } from '../intrinsics/on';
|
|
11
23
|
import { OutletKeyword } from '../intrinsics/outlet';
|
|
24
|
+
import { AndHelper, NotHelper, OrHelper } from '../intrinsics/truth-helpers';
|
|
12
25
|
import { UnboundKeyword } from '../intrinsics/unbound';
|
|
13
26
|
import { UniqueIdHelper } from '../intrinsics/unique-id';
|
|
14
27
|
|
|
28
|
+
// ---- ember-source 7.1 detection -------------------------------------------
|
|
29
|
+
//
|
|
30
|
+
// The keywords introduced by RFCs 562, 470, 997, 998, 999, 1000, 560, 561 and
|
|
31
|
+
// 389 are only available at runtime when consumers are on ember-source >= 7.1.
|
|
32
|
+
// We probe for the `eq` value re-export added by RFC 561 to decide whether to
|
|
33
|
+
// expose the new keyword types. On older versions the probe collapses to the
|
|
34
|
+
// empty type, so referencing e.g. `{{eq}}` falls back to whatever the user
|
|
35
|
+
// has imported (or surfaces as an "unknown identifier" diagnostic), keeping
|
|
36
|
+
// behaviour identical to today.
|
|
37
|
+
//
|
|
38
|
+
// We probe a value export (`eq`) rather than the matching `EqHelper`
|
|
39
|
+
// interface because `typeof import(...)` only surfaces the module's value
|
|
40
|
+
// exports; type-only exports never appear as keys, so an interface probe
|
|
41
|
+
// would always collapse to `false`.
|
|
42
|
+
//
|
|
43
|
+
// `@ember/helper` is an optional peer dependency at the type level: the
|
|
44
|
+
// `@ts-ignore` ensures Glint still type-checks in environments that haven't
|
|
45
|
+
// installed it.
|
|
46
|
+
//
|
|
47
|
+
// @ts-ignore — `@ember/helper` is an optional peer dependency
|
|
48
|
+
type EmberHelperExports = typeof import('@ember/helper');
|
|
49
|
+
|
|
50
|
+
type HasEmber71BuiltIns = [EmberHelperExports] extends [{ eq: unknown }] ? true : false;
|
|
51
|
+
|
|
52
|
+
/** Resolves to `T` only when ember-source >= 7.1 ships the new keyword set. */
|
|
53
|
+
type Ember71Only<T> = HasEmber71BuiltIns extends true ? T : never;
|
|
54
|
+
|
|
15
55
|
// The keyword vs global breakdown here is loosely matched with
|
|
16
56
|
// the listing in http://emberjs.github.io/rfcs/0496-handlebars-strict-mode.html
|
|
17
57
|
|
|
18
|
-
interface
|
|
58
|
+
interface KeywordsForEmber {
|
|
19
59
|
/**
|
|
20
60
|
The {{action}} helper provides a way to pass triggers for behavior (usually just a function)
|
|
21
61
|
between components, and into components from controllers.
|
|
@@ -201,4 +241,279 @@ interface Keywords {
|
|
|
201
241
|
yield: void;
|
|
202
242
|
}
|
|
203
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Built-in template keywords introduced by ember-source 7.1
|
|
246
|
+
* (RFCs 389, 470, 560, 561, 562, 997, 998, 999, 1000). Each entry is gated by
|
|
247
|
+
* `Ember71Only<T>` so the keyword resolves to `never` (and is therefore
|
|
248
|
+
* effectively absent) when the consumer is on ember-source < 7.1. See the
|
|
249
|
+
* `HasEmber71BuiltIns` probe at the top of this file.
|
|
250
|
+
*/
|
|
251
|
+
interface KeywordsForEmber71 {
|
|
252
|
+
/**
|
|
253
|
+
* The `{{and}}` helper evaluates arguments left to right, returning the first
|
|
254
|
+
* falsy value (using Handlebars truthiness) or the right-most value if all
|
|
255
|
+
* are truthy. Requires at least two arguments.
|
|
256
|
+
*
|
|
257
|
+
* ```gjs
|
|
258
|
+
* <template>
|
|
259
|
+
* {{if (and @isAdmin @isLoggedIn) "Welcome, admin!" "Access denied"}}
|
|
260
|
+
* </template>
|
|
261
|
+
* ```
|
|
262
|
+
*
|
|
263
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `and` is available as a keyword
|
|
264
|
+
* and does not need to be imported from `@ember/helper`.
|
|
265
|
+
*
|
|
266
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/and
|
|
267
|
+
*/
|
|
268
|
+
and: Ember71Only<AndHelper>;
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Using the `{{array}}` helper, you can pass arrays directly from the
|
|
272
|
+
* template as an argument to your components.
|
|
273
|
+
*
|
|
274
|
+
* ```gjs
|
|
275
|
+
* <template>
|
|
276
|
+
* <ul>
|
|
277
|
+
* {{#each (array "Tom Dale" "Yehuda Katz" @anotherPerson) as |person|}}
|
|
278
|
+
* <li>{{person}}</li>
|
|
279
|
+
* {{/each}}
|
|
280
|
+
* </ul>
|
|
281
|
+
* </template>
|
|
282
|
+
* ```
|
|
283
|
+
*
|
|
284
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `array` is available as a
|
|
285
|
+
* keyword and does not need to be imported from `@ember/helper`.
|
|
286
|
+
*
|
|
287
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/array
|
|
288
|
+
*/
|
|
289
|
+
array: Ember71Only<ArrayHelper>;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The `{{element}}` helper lets you dynamically set the tag name of an
|
|
293
|
+
* element.
|
|
294
|
+
*
|
|
295
|
+
* ```gjs
|
|
296
|
+
* <template>
|
|
297
|
+
* {{#let (element @tagName) as |Tag|}}
|
|
298
|
+
* <Tag class="my-element">Hello</Tag>
|
|
299
|
+
* {{/let}}
|
|
300
|
+
* </template>
|
|
301
|
+
* ```
|
|
302
|
+
*
|
|
303
|
+
* When `@tagName` is `"h1"`, this renders `<h1 class="my-element">Hello</h1>`.
|
|
304
|
+
* When `@tagName` is an empty string, the block content is rendered without
|
|
305
|
+
* a wrapping element. When `@tagName` is `null` or `undefined`, nothing is
|
|
306
|
+
* rendered.
|
|
307
|
+
*
|
|
308
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `element` is available as a
|
|
309
|
+
* keyword and does not need to be imported from `@ember/helper`.
|
|
310
|
+
*
|
|
311
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/element
|
|
312
|
+
*/
|
|
313
|
+
element: Ember71Only<ElementHelper>;
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* The `{{eq}}` helper returns `true` if its two arguments are strictly equal
|
|
317
|
+
* (`===`). Takes exactly two arguments.
|
|
318
|
+
*
|
|
319
|
+
* ```gjs
|
|
320
|
+
* <template>
|
|
321
|
+
* {{if (eq @status "active") "Active" "Inactive"}}
|
|
322
|
+
* </template>
|
|
323
|
+
* ```
|
|
324
|
+
*
|
|
325
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `eq` is available as a keyword
|
|
326
|
+
* and does not need to be imported from `@ember/helper`.
|
|
327
|
+
*
|
|
328
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/eq
|
|
329
|
+
*/
|
|
330
|
+
eq: Ember71Only<EqHelper>;
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* `{{fn}}` is a helper that receives a function and some arguments, and
|
|
334
|
+
* returns a new function that combines them. This allows you to pass
|
|
335
|
+
* parameters along to functions in your templates:
|
|
336
|
+
*
|
|
337
|
+
* ```gjs
|
|
338
|
+
* function showAlert(message) {
|
|
339
|
+
* alert(`The message is: '${message}'`);
|
|
340
|
+
* }
|
|
341
|
+
*
|
|
342
|
+
* <template>
|
|
343
|
+
* <button type="button" {{on "click" (fn showAlert "Hello!")}}>
|
|
344
|
+
* Click me!
|
|
345
|
+
* </button>
|
|
346
|
+
* </template>
|
|
347
|
+
* ```
|
|
348
|
+
*
|
|
349
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `fn` is available as a keyword
|
|
350
|
+
* and does not need to be imported from `@ember/helper`.
|
|
351
|
+
*
|
|
352
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/fn
|
|
353
|
+
*/
|
|
354
|
+
fn: Ember71Only<FnHelper>;
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* The `{{gt}}` helper returns `true` if the first argument is greater than
|
|
358
|
+
* the second argument.
|
|
359
|
+
*
|
|
360
|
+
* ```gjs
|
|
361
|
+
* <template>
|
|
362
|
+
* {{if (gt @score 100) "High score!" "Keep trying"}}
|
|
363
|
+
* </template>
|
|
364
|
+
* ```
|
|
365
|
+
*
|
|
366
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `gt` is available as a keyword
|
|
367
|
+
* and does not need to be imported from `@ember/helper`.
|
|
368
|
+
*
|
|
369
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/gt
|
|
370
|
+
*/
|
|
371
|
+
gt: Ember71Only<GtHelper>;
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* The `{{gte}}` helper returns `true` if the first argument is greater than
|
|
375
|
+
* or equal to the second argument.
|
|
376
|
+
*
|
|
377
|
+
* ```gjs
|
|
378
|
+
* <template>
|
|
379
|
+
* {{if (gte @age 18) "Adult" "Minor"}}
|
|
380
|
+
* </template>
|
|
381
|
+
* ```
|
|
382
|
+
*
|
|
383
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `gte` is available as a keyword
|
|
384
|
+
* and does not need to be imported from `@ember/helper`.
|
|
385
|
+
*
|
|
386
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/gte
|
|
387
|
+
*/
|
|
388
|
+
gte: Ember71Only<GteHelper>;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Using the `{{hash}}` helper, you can pass objects directly from the
|
|
392
|
+
* template as an argument to your components.
|
|
393
|
+
*
|
|
394
|
+
* ```gjs
|
|
395
|
+
* <template>
|
|
396
|
+
* {{#each-in (hash givenName="Jen" familyName="Weber") as |key value|}}
|
|
397
|
+
* <p>{{key}}: {{value}}</p>
|
|
398
|
+
* {{/each-in}}
|
|
399
|
+
* </template>
|
|
400
|
+
* ```
|
|
401
|
+
*
|
|
402
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `hash` is available as a
|
|
403
|
+
* keyword and does not need to be imported from `@ember/helper`.
|
|
404
|
+
*
|
|
405
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/hash
|
|
406
|
+
*/
|
|
407
|
+
hash: Ember71Only<HashHelper>;
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* The `{{lt}}` helper returns `true` if the first argument is less than the
|
|
411
|
+
* second argument.
|
|
412
|
+
*
|
|
413
|
+
* ```gjs
|
|
414
|
+
* <template>
|
|
415
|
+
* {{if (lt @temperature 0) "Freezing" "Above zero"}}
|
|
416
|
+
* </template>
|
|
417
|
+
* ```
|
|
418
|
+
*
|
|
419
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `lt` is available as a keyword
|
|
420
|
+
* and does not need to be imported from `@ember/helper`.
|
|
421
|
+
*
|
|
422
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/lt
|
|
423
|
+
*/
|
|
424
|
+
lt: Ember71Only<LtHelper>;
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* The `{{lte}}` helper returns `true` if the first argument is less than or
|
|
428
|
+
* equal to the second argument.
|
|
429
|
+
*
|
|
430
|
+
* ```gjs
|
|
431
|
+
* <template>
|
|
432
|
+
* {{if (lte @count 0) "Empty" "Has items"}}
|
|
433
|
+
* </template>
|
|
434
|
+
* ```
|
|
435
|
+
*
|
|
436
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `lte` is available as a keyword
|
|
437
|
+
* and does not need to be imported from `@ember/helper`.
|
|
438
|
+
*
|
|
439
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/lte
|
|
440
|
+
*/
|
|
441
|
+
lte: Ember71Only<LteHelper>;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* The `{{neq}}` helper returns `true` if its two arguments are strictly not
|
|
445
|
+
* equal (`!==`). Takes exactly two arguments.
|
|
446
|
+
*
|
|
447
|
+
* ```gjs
|
|
448
|
+
* <template>
|
|
449
|
+
* {{if (neq @status "active") "Not active" "Active"}}
|
|
450
|
+
* </template>
|
|
451
|
+
* ```
|
|
452
|
+
*
|
|
453
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `neq` is available as a keyword
|
|
454
|
+
* and does not need to be imported from `@ember/helper`.
|
|
455
|
+
*
|
|
456
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/neq
|
|
457
|
+
*/
|
|
458
|
+
neq: Ember71Only<NeqHelper>;
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* The `{{not}}` helper returns the logical negation of its argument using
|
|
462
|
+
* Handlebars truthiness. Takes exactly one argument.
|
|
463
|
+
*
|
|
464
|
+
* ```gjs
|
|
465
|
+
* <template>
|
|
466
|
+
* {{if (not @isDisabled) "Enabled" "Disabled"}}
|
|
467
|
+
* </template>
|
|
468
|
+
* ```
|
|
469
|
+
*
|
|
470
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `not` is available as a keyword
|
|
471
|
+
* and does not need to be imported from `@ember/helper`.
|
|
472
|
+
*
|
|
473
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/not
|
|
474
|
+
*/
|
|
475
|
+
not: Ember71Only<NotHelper>;
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* The `{{on}}` element modifier attaches an event listener to an element.
|
|
479
|
+
*
|
|
480
|
+
* ```gjs
|
|
481
|
+
* <template>
|
|
482
|
+
* <button type="button" {{on "click" this.handleClick}}>
|
|
483
|
+
* Click me!
|
|
484
|
+
* </button>
|
|
485
|
+
* </template>
|
|
486
|
+
* ```
|
|
487
|
+
*
|
|
488
|
+
* It accepts the same options as `addEventListener` via named arguments
|
|
489
|
+
* (`capture`, `once`, `passive`).
|
|
490
|
+
*
|
|
491
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `on` is available as a keyword
|
|
492
|
+
* and does not need to be imported from `@ember/modifier`.
|
|
493
|
+
*
|
|
494
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fmodifier/on
|
|
495
|
+
*/
|
|
496
|
+
on: Ember71Only<OnModifier>;
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* The `{{or}}` helper evaluates arguments left to right, returning the first
|
|
500
|
+
* truthy value (using Handlebars truthiness) or the right-most value if all
|
|
501
|
+
* are falsy. Requires at least two arguments.
|
|
502
|
+
*
|
|
503
|
+
* ```gjs
|
|
504
|
+
* <template>
|
|
505
|
+
* {{if (or @hasAccess @isAdmin) "Welcome!" "No access"}}
|
|
506
|
+
* </template>
|
|
507
|
+
* ```
|
|
508
|
+
*
|
|
509
|
+
* In strict-mode (`.gjs`/`.gts`) templates, `or` is available as a keyword
|
|
510
|
+
* and does not need to be imported from `@ember/helper`.
|
|
511
|
+
*
|
|
512
|
+
* @see https://api.emberjs.com/ember/release/functions/@ember%2Fhelper/or
|
|
513
|
+
*/
|
|
514
|
+
or: Ember71Only<OrHelper>;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
interface Keywords extends KeywordsForEmber, KeywordsForEmber71 {}
|
|
518
|
+
|
|
204
519
|
export const Globals: Keywords & Globals;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DirectInvokable } from '@glint/template/-private/integration';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `(array a b ...)` — packs the positional arguments into a typed tuple.
|
|
5
|
+
* Built-in keyword in ember-source >= 7.1 (RFC 1000).
|
|
6
|
+
*/
|
|
7
|
+
export type ArrayHelper = DirectInvokable<{
|
|
8
|
+
<T extends unknown[]>(...args: T): T;
|
|
9
|
+
}>;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* `(hash key=value ...)` — packs the named arguments into a typed object.
|
|
13
|
+
* Built-in keyword in ember-source >= 7.1 (RFC 999).
|
|
14
|
+
*/
|
|
15
|
+
export type HashHelper = DirectInvokable<{
|
|
16
|
+
<T extends Record<string, unknown>>(args: T): T;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DirectInvokable } from '@glint/template/-private/integration';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `(eq a b)` — strict equality of two values. Built-in keyword in
|
|
5
|
+
* ember-source >= 7.1 (RFC 561). The result is narrowed when both sides are
|
|
6
|
+
* literal types so templates such as `{{#if (eq this.kind "primary")}}` get
|
|
7
|
+
* accurate type information.
|
|
8
|
+
*/
|
|
9
|
+
export type EqHelper = DirectInvokable<{
|
|
10
|
+
<A, B>(a: A, b: B): [A] extends [B] ? ([B] extends [A] ? true : boolean) : boolean;
|
|
11
|
+
}>;
|
|
12
|
+
|
|
13
|
+
/** `(neq a b)` — strict inequality. Built-in keyword in ember-source >= 7.1. */
|
|
14
|
+
export type NeqHelper = DirectInvokable<{
|
|
15
|
+
<A, B>(a: A, b: B): [A] extends [B] ? ([B] extends [A] ? false : boolean) : boolean;
|
|
16
|
+
}>;
|
|
17
|
+
|
|
18
|
+
/** `(lt a b)` — numeric less-than. Built-in keyword in ember-source >= 7.1. */
|
|
19
|
+
export type LtHelper = DirectInvokable<{
|
|
20
|
+
(a: number, b: number): boolean;
|
|
21
|
+
}>;
|
|
22
|
+
|
|
23
|
+
/** `(lte a b)` — numeric less-than-or-equal. Built-in keyword in ember-source >= 7.1. */
|
|
24
|
+
export type LteHelper = DirectInvokable<{
|
|
25
|
+
(a: number, b: number): boolean;
|
|
26
|
+
}>;
|
|
27
|
+
|
|
28
|
+
/** `(gt a b)` — numeric greater-than. Built-in keyword in ember-source >= 7.1. */
|
|
29
|
+
export type GtHelper = DirectInvokable<{
|
|
30
|
+
(a: number, b: number): boolean;
|
|
31
|
+
}>;
|
|
32
|
+
|
|
33
|
+
/** `(gte a b)` — numeric greater-than-or-equal. Built-in keyword in ember-source >= 7.1. */
|
|
34
|
+
export type GteHelper = DirectInvokable<{
|
|
35
|
+
(a: number, b: number): boolean;
|
|
36
|
+
}>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ComponentLike } from '@glint/template';
|
|
2
|
+
import { DirectInvokable } from '@glint/template/-private/integration';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `(element "tag-name")` — yields a component bound to a dynamic HTML tag
|
|
6
|
+
* name. Built-in keyword in ember-source >= 7.1 (RFC 389).
|
|
7
|
+
*/
|
|
8
|
+
export type ElementHelper = DirectInvokable<{
|
|
9
|
+
(tagName: string): ComponentLike<{
|
|
10
|
+
Element: Element;
|
|
11
|
+
Args: Record<string, unknown>;
|
|
12
|
+
Blocks: { default: [] };
|
|
13
|
+
}>;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Adapted from `ember-truth-helpers` to give Glint exact return-type inference
|
|
2
|
+
// for the `(and ...)` and `(or ...)` built-in keywords introduced in
|
|
3
|
+
// ember-source 7.1 (RFC 560). The runtime semantics in Ember intentionally
|
|
4
|
+
// match `ember-truth-helpers`, so the type-level rules here mirror that
|
|
5
|
+
// package's published types.
|
|
6
|
+
//
|
|
7
|
+
// See: https://github.com/jmurphyau/ember-truth-helpers/blob/master/src/utils/truth-convert.ts
|
|
8
|
+
|
|
9
|
+
export type Falsy = { isTruthy: false } | undefined | null | false | 0 | 0n | '' | never[];
|
|
10
|
+
|
|
11
|
+
export type MaybeTruthy =
|
|
12
|
+
| { isTruthy: boolean }
|
|
13
|
+
| undefined
|
|
14
|
+
| null
|
|
15
|
+
| boolean
|
|
16
|
+
| number
|
|
17
|
+
| bigint
|
|
18
|
+
| string
|
|
19
|
+
| unknown[]
|
|
20
|
+
| object;
|
|
21
|
+
|
|
22
|
+
export type TruthConvert<T> = T extends { isTruthy: true }
|
|
23
|
+
? true
|
|
24
|
+
: T extends { isTruthy: false }
|
|
25
|
+
? false
|
|
26
|
+
: T extends { isTruthy: boolean }
|
|
27
|
+
? boolean
|
|
28
|
+
: T extends undefined | null
|
|
29
|
+
? false
|
|
30
|
+
: T extends boolean
|
|
31
|
+
? T
|
|
32
|
+
: T extends number
|
|
33
|
+
? T extends 0
|
|
34
|
+
? false
|
|
35
|
+
: number extends T
|
|
36
|
+
? boolean
|
|
37
|
+
: true
|
|
38
|
+
: T extends bigint
|
|
39
|
+
? T extends 0n
|
|
40
|
+
? false
|
|
41
|
+
: bigint extends T
|
|
42
|
+
? boolean
|
|
43
|
+
: true
|
|
44
|
+
: T extends string
|
|
45
|
+
? T extends ''
|
|
46
|
+
? false
|
|
47
|
+
: string extends T
|
|
48
|
+
? boolean
|
|
49
|
+
: true
|
|
50
|
+
: T extends never[]
|
|
51
|
+
? false
|
|
52
|
+
: T extends ArrayLike<unknown>
|
|
53
|
+
? boolean
|
|
54
|
+
: T extends object
|
|
55
|
+
? true
|
|
56
|
+
: boolean;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Walks the positional argument tuple and returns the type of the first
|
|
60
|
+
* element whose `TruthConvert` resolves to `false`, falling back to the last
|
|
61
|
+
* element. Mirrors the runtime short-circuit behaviour of `(and ...)`.
|
|
62
|
+
*/
|
|
63
|
+
export type FirstFalsy<T> = T extends [infer Item]
|
|
64
|
+
? Item
|
|
65
|
+
: T extends [infer Head, ...infer Tail]
|
|
66
|
+
? TruthConvert<Head> extends false
|
|
67
|
+
? Head
|
|
68
|
+
: TruthConvert<Head> extends true
|
|
69
|
+
? FirstFalsy<Tail>
|
|
70
|
+
: Head | FirstFalsy<Tail>
|
|
71
|
+
: undefined;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Walks the positional argument tuple and returns the type of the first
|
|
75
|
+
* element whose `TruthConvert` resolves to `true`, falling back to the last
|
|
76
|
+
* element. Mirrors the runtime short-circuit behaviour of `(or ...)`.
|
|
77
|
+
*/
|
|
78
|
+
export type FirstTruthy<T> = T extends [infer Item]
|
|
79
|
+
? Item
|
|
80
|
+
: T extends [infer Head, ...infer Tail]
|
|
81
|
+
? TruthConvert<Head> extends true
|
|
82
|
+
? Head
|
|
83
|
+
: TruthConvert<Head> extends false
|
|
84
|
+
? FirstTruthy<Tail>
|
|
85
|
+
: Exclude<Head, Falsy> | FirstTruthy<Tail>
|
|
86
|
+
: undefined;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DirectInvokable } from '@glint/template/-private/integration';
|
|
2
|
+
|
|
3
|
+
import type { FirstFalsy, FirstTruthy, MaybeTruthy, TruthConvert } from './truth-convert';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `(and a b ...)` — short-circuit logical AND. Returns the first falsy
|
|
7
|
+
* positional argument or the last argument. Available as a built-in keyword
|
|
8
|
+
* in ember-source >= 7.1 (RFC 560).
|
|
9
|
+
*/
|
|
10
|
+
export type AndHelper = DirectInvokable<{
|
|
11
|
+
<T extends MaybeTruthy[]>(...args: T): FirstFalsy<T>;
|
|
12
|
+
}>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `(or a b ...)` — short-circuit logical OR. Returns the first truthy
|
|
16
|
+
* positional argument or the last argument. Available as a built-in keyword
|
|
17
|
+
* in ember-source >= 7.1 (RFC 560).
|
|
18
|
+
*/
|
|
19
|
+
export type OrHelper = DirectInvokable<{
|
|
20
|
+
<T extends MaybeTruthy[]>(...args: T): FirstTruthy<T>;
|
|
21
|
+
}>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* `(not value)` — boolean negation using truthy semantics matching the rest
|
|
25
|
+
* of Ember's template-side helpers. Built-in keyword in ember-source >= 7.1
|
|
26
|
+
* (RFC 560).
|
|
27
|
+
*/
|
|
28
|
+
export type NotHelper = DirectInvokable<{
|
|
29
|
+
<T>(
|
|
30
|
+
value: T,
|
|
31
|
+
): TruthConvert<T> extends true ? false : TruthConvert<T> extends false ? true : boolean;
|
|
32
|
+
}>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-volar-tsc.d.ts","sourceRoot":"","sources":["../../src/cli/run-volar-tsc.ts"],"names":[],"mappings":"AAOA,wBAAgB,GAAG,IAAI,IAAI,CA6B1B"}
|