ember-source 5.2.0-alpha.3 → 5.2.0-alpha.5

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.
@@ -5,5 +5,5 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 5.2.0-alpha.3
8
+ * @version 5.2.0-alpha.5
9
9
  */
@@ -5002,4 +5002,4 @@ function setComponentManager(manager, obj) {
5002
5002
  let componentCapabilities = componentCapabilities$1;
5003
5003
  let modifierCapabilities = modifierCapabilities$1;
5004
5004
 
5005
- export { Component, Helper, Input, LinkTo, OutletView, Renderer, RootTemplate, SafeString, Textarea, _resetRenderers, componentCapabilities, escapeExpression, getTemplate, getTemplates, hasTemplate, helper, htmlSafe, isHTMLSafe, modifierCapabilities, renderSettled, setComponentManager, setTemplate, setTemplates, setupApplicationRegistry, setupEngineRegistry };
5005
+ export { Component, Helper, Input, LinkTo, OutletView, Renderer, RootTemplate, SafeString, Textarea, _resetRenderers, componentCapabilities, escapeExpression, getTemplate, getTemplates, hasTemplate, helper, htmlSafe, isHTMLSafe, modifierCapabilities, renderSettled, setComponentManager, setTemplate, setTemplates, setupApplicationRegistry, setupEngineRegistry, uniqueId$1 as uniqueId };
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { setHelperManager as glimmerSetHelperManager, helperCapabilities } from '@glimmer/manager';
5
5
  import { invokeHelper as glimmerInvokeHelper, hash as glimmerHash, array as glimmerArray, concat as glimmerConcat, get as glimmerGet, fn as glimmerFn } from '@glimmer/runtime';
6
+ import { uniqueId as glimmerUniqueId } from '@ember/-internals/glimmer';
6
7
  /**
7
8
  `capabilities` returns a capabilities configuration which can be used to modify
8
9
  the behavior of the manager. Manager capabilities _must_ be provided using the
@@ -445,4 +446,23 @@ export const get = glimmerGet;
445
446
  * ```
446
447
  */
447
448
  export const fn = glimmerFn;
449
+ /**
450
+ * Use the {{uniqueId}} helper to generate a unique ID string suitable for use as
451
+ * an ID attribute in the DOM.
452
+ *
453
+ * Each invocation of {{uniqueId}} will return a new, unique ID string.
454
+ * You can use the `let` helper to create an ID that can be reused within a template.
455
+ *
456
+ * ```js
457
+ * import { uniqueId } from '@ember/helper';
458
+ *
459
+ * <template>
460
+ * {{#let (uniqueId) as |emailId|}}
461
+ * <label for={{emailId}}>Email address</label>
462
+ * <input id={{emailId}} type="email" />
463
+ * {{/let}}
464
+ * </template>
465
+ * ```
466
+ */
467
+ export const uniqueId = glimmerUniqueId;
448
468
  /* eslint-enable @typescript-eslint/no-empty-interface */
@@ -1 +1 @@
1
- export default "5.2.0-alpha.3";
1
+ export default "5.2.0-alpha.5";
package/docs/data.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "The Ember API",
4
4
  "description": "The Ember API: a framework for building ambitious web applications",
5
5
  "url": "https://emberjs.com/",
6
- "version": "5.2.0-alpha.3"
6
+ "version": "5.2.0-alpha.5"
7
7
  },
8
8
  "files": {
9
9
  "node_modules/rsvp/lib/rsvp/promise/all.js": {
@@ -12792,7 +12792,7 @@
12792
12792
  },
12793
12793
  {
12794
12794
  "file": "packages/@ember/helper/index.ts",
12795
- "line": 16,
12795
+ "line": 17,
12796
12796
  "description": "`capabilities` returns a capabilities configuration which can be used to modify\nthe behavior of the manager. Manager capabilities _must_ be provided using the\n`capabilities` function, as the underlying implementation can change over time.\n\nThe first argument to capabilities is a version string, which is the version of\nEmber that the capabilities were defined in. Ember can add new versions at any\ntime, and these may have entirely different behaviors, but it will not remove\nold versions until the next major version.\n\n```js\ncapabilities('3.23');\n```\n\nThe second argument is an object of capabilities and boolean values indicating\nwhether they are enabled or disabled.\n\n```js\ncapabilities('3.23', {\n hasValue: true,\n hasDestructor: true,\n});\n```\n\nIf no value is specified, then the default value will be used.\n\n### `3.23` capabilities\n\n#### `hasDestroyable`\n\n- Default value: false\n\nDetermines if the helper has a destroyable to include in the destructor\nhierarchy. If enabled, the `getDestroyable` hook will be called, and its result\nwill be associated with the destroyable parent block.\n\n#### `hasValue`\n\n- Default value: false\n\nDetermines if the helper has a value which can be used externally. The helper's\n`getValue` hook will be run whenever the value of the helper is accessed if this\ncapability is enabled.",
12797
12797
  "itemtype": "method",
12798
12798
  "name": "capabilities",
@@ -12819,7 +12819,7 @@
12819
12819
  },
12820
12820
  {
12821
12821
  "file": "packages/@ember/helper/index.ts",
12822
- "line": 70,
12822
+ "line": 71,
12823
12823
  "description": "Sets the helper manager for an object or function.\n\n```js\nsetHelperManager((owner) => new ClassHelperManager(owner), Helper)\n```\n\nWhen a value is used as a helper in a template, the helper manager is looked up\non the object by walking up its prototype chain and finding the first helper\nmanager. This manager then receives the value and can create and manage an\ninstance of a helper from it. This provides a layer of indirection that allows\nusers to design high-level helper APIs, without Ember needing to worry about the\ndetails. High-level APIs can be experimented with and iterated on while the\ncore of Ember helpers remains stable, and new APIs can be introduced gradually\nover time to existing code bases.\n\n`setHelperManager` receives two arguments:\n\n1. A factory function, which receives the `owner` and returns an instance of a\n helper manager.\n2. A helper definition, which is the object or function to associate the factory function with.\n\nThe first time the object is looked up, the factory function will be called to\ncreate the helper manager. It will be cached, and in subsequent lookups the\ncached helper manager will be used instead.\n\nOnly one helper manager is guaranteed to exist per `owner` and per usage of\n`setHelperManager`, so many helpers will end up using the same instance of the\nhelper manager. As such, you should only store state that is related to the\nmanager itself. If you want to store state specific to a particular helper\ndefinition, you should assign a unique helper manager to that helper. In\ngeneral, most managers should either be stateless, or only have the `owner` they\nwere created with as state.\n\nHelper managers must fulfill the following interface (This example uses\n[TypeScript interfaces](https://www.typescriptlang.org/docs/handbook/interfaces.html)\nfor precision, you do not need to write helper managers using TypeScript):\n\n```ts\ninterface HelperManager<HelperStateBucket> {\n capabilities: HelperCapabilities;\n\n createHelper(definition: HelperDefinition, args: TemplateArgs): HelperStateBucket;\n\n getValue?(bucket: HelperStateBucket): unknown;\n\n runEffect?(bucket: HelperStateBucket): void;\n\n getDestroyable?(bucket: HelperStateBucket): object;\n}\n```\n\nThe capabilities property _must_ be provided using the `capabilities()` function\nimported from the same module as `setHelperManager`:\n\n```js\nimport { capabilities } from '@ember/helper';\n\nclass MyHelperManager {\n capabilities = capabilities('3.21.0', { hasValue: true });\n\n // ...snip...\n}\n```\n\nBelow is a description of each of the methods on the interface and their\nfunctions.\n\n#### `createHelper`\n\n`createHelper` is a required hook on the HelperManager interface. The hook is\npassed the definition of the helper that is currently being created, and is\nexpected to return a _state bucket_. This state bucket is what represents the\ncurrent state of the helper, and will be passed to the other lifecycle hooks at\nappropriate times. It is not necessarily related to the definition of the\nhelper itself - for instance, you could return an object _containing_ an\ninstance of the helper:\n\n```js\nclass MyManager {\n createHelper(Definition, args) {\n return {\n instance: new Definition(args);\n };\n }\n}\n```\n\nThis allows the manager to store metadata that it doesn't want to expose to the\nuser.\n\nThis hook is _not_ autotracked - changes to tracked values used within this hook\nwill _not_ result in a call to any of the other lifecycle hooks. This is because\nit is unclear what should happen if it invalidates, and rather than make a\ndecision at this point, the initial API is aiming to allow as much expressivity\nas possible. This could change in the future with changes to capabilities and\ntheir behaviors.\n\nIf users do want to autotrack some values used during construction, they can\neither create the instance of the helper in `runEffect` or `getValue`, or they\ncan use the `cache` API to autotrack the `createHelper` hook themselves. This\nprovides maximum flexibility and expressiveness to manager authors.\n\nThis hook has the following timing semantics:\n\n**Always**\n- called as discovered during DOM construction\n- called in definition order in the template\n\n#### `getValue`\n\n`getValue` is an optional hook that should return the value of the helper. This\nis the value that is returned from the helper and passed into the template.\n\nThis hook is called when the value is requested from the helper (e.g. when the\ntemplate is rendering and the helper value is needed). The hook is autotracked,\nand will rerun whenever any tracked values used inside of it are updated.\nOtherwise it does not rerun.\n\n> Note: This means that arguments which are not _consumed_ within the hook will\n> not trigger updates.\n\nThis hook is only called for helpers with the `hasValue` capability enabled.\nThis hook has the following timing semantics:\n\n**Always**\n- called the first time the helper value is requested\n- called after autotracked state has changed\n\n**Never**\n- called if the `hasValue` capability is disabled\n\n#### `runEffect`\n\n`runEffect` is an optional hook that should run the effect that the helper is\napplying, setting it up or updating it.\n\nThis hook is scheduled to be called some time after render and prior to paint.\nThere is not a guaranteed, 1-to-1 relationship between a render pass and this\nhook firing. For instance, multiple render passes could occur, and the hook may\nonly trigger once. It may also never trigger if it was dirtied in one render\npass and then destroyed in the next.\n\nThe hook is autotracked, and will rerun whenever any tracked values used inside\nof it are updated. Otherwise it does not rerun.\n\nThe hook is also run during a time period where state mutations are _disabled_\nin Ember. Any tracked state mutation will throw an error during this time,\nincluding changes to tracked properties, changes made using `Ember.set`, updates\nto computed properties, etc. This is meant to prevent infinite rerenders and\nother antipatterns.\n\nThis hook is only called for helpers with the `hasScheduledEffect` capability\nenabled. This hook is also not called in SSR currently, though this could be\nadded as a capability in the future. It has the following timing semantics:\n\n**Always**\n- called after the helper was first created, if the helper has not been\n destroyed since creation\n- called after autotracked state has changed, if the helper has not been\n destroyed during render\n\n**Never**\n- called if the `hasScheduledEffect` capability is disabled\n- called in SSR\n\n#### `getDestroyable`\n\n`getDestroyable` is an optional hook that users can use to register a\ndestroyable object for the helper. This destroyable will be registered to the\ncontaining block or template parent, and will be destroyed when it is destroyed.\nSee the [Destroyables RFC](https://github.com/emberjs/rfcs/blob/master/text/0580-destroyables.md)\nfor more details.\n\n`getDestroyable` is only called if the `hasDestroyable` capability is enabled.\n\nThis hook has the following timing semantics:\n\n**Always**\n- called immediately after the `createHelper` hook is called\n\n**Never**\n- called if the `hasDestroyable` capability is disabled",
12824
12824
  "itemtype": "method",
12825
12825
  "name": "setHelperManager",
@@ -12847,7 +12847,7 @@
12847
12847
  },
12848
12848
  {
12849
12849
  "file": "packages/@ember/helper/index.ts",
12850
- "line": 264,
12850
+ "line": 265,
12851
12851
  "description": "The `invokeHelper` function can be used to create a helper instance in\nJavaScript.\n\nTo access a helper's value you have to use `getValue` from\n`@glimmer/tracking/primitives/cache`.\n\n```js\n// app/components/data-loader.js\nimport Component from '@glimmer/component';\nimport { getValue } from '@glimmer/tracking/primitives/cache';\nimport Helper from '@ember/component/helper';\nimport { invokeHelper } from '@ember/helper';\n\nclass PlusOne extends Helper {\n compute([number]) {\n return number + 1;\n }\n}\n\nexport default class PlusOneComponent extends Component {\n plusOne = invokeHelper(this, PlusOne, () => {\n return {\n positional: [this.args.number],\n };\n });\n\n get value() {\n return getValue(this.plusOne);\n }\n}\n```\n```js\n{{this.value}}\n```\n\nIt receives three arguments:\n\n* `context`: The parent context of the helper. When the parent is torn down and\n removed, the helper will be as well.\n* `definition`: The definition of the helper.\n* `computeArgs`: An optional function that produces the arguments to the helper.\n The function receives the parent context as an argument, and must return an\n object with a `positional` property that is an array and/or a `named`\n property that is an object.\n\nAnd it returns a Cache instance that contains the most recent value of the\nhelper. You can access the helper using `getValue()` like any other cache. The\ncache is also destroyable, and using the `destroy()` function on it will cause\nthe helper to be torn down.\n\nNote that using `getValue()` on helpers that have scheduled effects will not\ntrigger the effect early. Effects will continue to run at their scheduled time.",
12852
12852
  "itemtype": "method",
12853
12853
  "name": "invokeHelper",
@@ -12879,39 +12879,46 @@
12879
12879
  },
12880
12880
  {
12881
12881
  "file": "packages/@ember/helper/index.ts",
12882
- "line": 336,
12882
+ "line": 337,
12883
12883
  "description": "Using the `{{hash}}` helper, you can pass objects directly from the template\nas an argument to your components.\n\n```\nimport { hash } from '@ember/helper';\n\n<template>\n {{#each-in (hash givenName='Jen' familyName='Weber') as |key value|}}\n <p>{{key}}: {{value}}</p>\n {{/each-in}}\n</template>\n```\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `hash` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
12884
12884
  "class": "@ember/helper",
12885
12885
  "module": "@ember/helper"
12886
12886
  },
12887
12887
  {
12888
12888
  "file": "packages/@ember/helper/index.ts",
12889
- "line": 357,
12889
+ "line": 358,
12890
12890
  "description": "Using the `{{array}}` helper, you can pass arrays directly from the template\nas an argument to your components.\n\n```js\nimport { array } from '@ember/helper';\n\n<template>\n <ul>\n {{#each (array 'Tom Dale' 'Yehuda Katz' @anotherPerson) as |person|}}\n <li>{{person}}</li>\n {{/each}}\n </ul>\n</template>\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `array` to use it (it is a built-in when\nwriting standalone `.hbs` files).\n```",
12891
12891
  "class": "@ember/helper",
12892
12892
  "module": "@ember/helper"
12893
12893
  },
12894
12894
  {
12895
12895
  "file": "packages/@ember/helper/index.ts",
12896
- "line": 380,
12896
+ "line": 381,
12897
12897
  "description": "The `{{concat}}` helper makes it easy to dynamically send a number of\nparameters to a component or helper as a single parameter in the format of a\nconcatenated string.\n\nFor example:\n\n```js\nimport { concat } from '@ember/helper';\n\n<template>\n {{get @foo (concat \"item\" @index)}}\n</template>\n```\n\nThis will display the result of `@foo.item1` when `index` is `1`, and\n`this.foo.item2` when `index` is `2`, etc.\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `concat` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
12898
12898
  "class": "@ember/helper",
12899
12899
  "module": "@ember/helper"
12900
12900
  },
12901
12901
  {
12902
12902
  "file": "packages/@ember/helper/index.ts",
12903
- "line": 405,
12903
+ "line": 406,
12904
12904
  "description": "The `{{get}}` helper makes it easy to dynamically look up a property on an\nobject or an element in an array. The second argument to `{{get}}` can be a\nstring or a number, depending on the object being accessed.\n\nTo access a property on an object with a string key:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @someObject \"objectKey\"}}\n</template>\n```\n\nTo access the first element in an array:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @someArray 0}}\n</template>\n```\n\nTo access a property on an object with a dynamic key:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @address @field}}\n</template>\n```\n\nThis will display the result of `@foo.item1` when `index` is `1`, and\n`this.foo.item2` when `index` is `2`, etc.\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `concat` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
12905
12905
  "class": "@ember/helper",
12906
12906
  "module": "@ember/helper"
12907
12907
  },
12908
12908
  {
12909
12909
  "file": "packages/@ember/helper/index.ts",
12910
- "line": 450,
12910
+ "line": 451,
12911
12911
  "description": "`{{fn}}` is a helper that receives a function and some arguments, and returns\na new function that combines. This allows you to pass parameters along to\nfunctions in your templates:\n\n```js\nimport { fn } from '@ember/helper';\n\nfunction showAlert(message) {\n alert(`The message is: '${message}'`);\n}\n\n<template>\n <button type=\"button\" {{on \"click\" (fn showAlert \"Hello!\")}}>\n Click me!\n </button>\n</template>\n```",
12912
12912
  "class": "@ember/helper",
12913
12913
  "module": "@ember/helper"
12914
12914
  },
12915
+ {
12916
+ "file": "packages/@ember/helper/index.ts",
12917
+ "line": 473,
12918
+ "description": "Use the {{uniqueId}} helper to generate a unique ID string suitable for use as\nan ID attribute in the DOM.\n\nEach invocation of {{uniqueId}} will return a new, unique ID string.\nYou can use the `let` helper to create an ID that can be reused within a template.\n\n```js\nimport { uniqueId } from '@ember/helper';\n\n<template>\n {{#let (uniqueId) as |emailId|}}\n <label for={{emailId}}>Email address</label>\n <input id={{emailId}} type=\"email\" />\n {{/let}}\n</template>\n```",
12919
+ "class": "@ember/helper",
12920
+ "module": "@ember/helper"
12921
+ },
12915
12922
  {
12916
12923
  "file": "packages/@ember/instrumentation/index.ts",
12917
12924
  "line": 120,
@@ -19093,7 +19100,7 @@
19093
19100
  },
19094
19101
  {
19095
19102
  "message": "replacing incorrect tag: returns with return",
19096
- "line": " packages/@ember/helper/index.ts:264"
19103
+ "line": " packages/@ember/helper/index.ts:265"
19097
19104
  },
19098
19105
  {
19099
19106
  "message": "unknown tag: internal",
@@ -19581,23 +19588,27 @@
19581
19588
  },
19582
19589
  {
19583
19590
  "message": "Missing item type\nUsing the `{{hash}}` helper, you can pass objects directly from the template\nas an argument to your components.\n\n```\nimport { hash } from '@ember/helper';\n\n<template>\n {{#each-in (hash givenName='Jen' familyName='Weber') as |key value|}}\n <p>{{key}}: {{value}}</p>\n {{/each-in}}\n</template>\n```\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `hash` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
19584
- "line": " packages/@ember/helper/index.ts:336"
19591
+ "line": " packages/@ember/helper/index.ts:337"
19585
19592
  },
19586
19593
  {
19587
19594
  "message": "Missing item type\nUsing the `{{array}}` helper, you can pass arrays directly from the template\nas an argument to your components.\n\n```js\nimport { array } from '@ember/helper';\n\n<template>\n <ul>\n {{#each (array 'Tom Dale' 'Yehuda Katz' @anotherPerson) as |person|}}\n <li>{{person}}</li>\n {{/each}}\n </ul>\n</template>\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `array` to use it (it is a built-in when\nwriting standalone `.hbs` files).\n```",
19588
- "line": " packages/@ember/helper/index.ts:357"
19595
+ "line": " packages/@ember/helper/index.ts:358"
19589
19596
  },
19590
19597
  {
19591
19598
  "message": "Missing item type\nThe `{{concat}}` helper makes it easy to dynamically send a number of\nparameters to a component or helper as a single parameter in the format of a\nconcatenated string.\n\nFor example:\n\n```js\nimport { concat } from '@ember/helper';\n\n<template>\n {{get @foo (concat \"item\" @index)}}\n</template>\n```\n\nThis will display the result of `@foo.item1` when `index` is `1`, and\n`this.foo.item2` when `index` is `2`, etc.\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `concat` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
19592
- "line": " packages/@ember/helper/index.ts:380"
19599
+ "line": " packages/@ember/helper/index.ts:381"
19593
19600
  },
19594
19601
  {
19595
19602
  "message": "Missing item type\nThe `{{get}}` helper makes it easy to dynamically look up a property on an\nobject or an element in an array. The second argument to `{{get}}` can be a\nstring or a number, depending on the object being accessed.\n\nTo access a property on an object with a string key:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @someObject \"objectKey\"}}\n</template>\n```\n\nTo access the first element in an array:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @someArray 0}}\n</template>\n```\n\nTo access a property on an object with a dynamic key:\n\n```js\nimport { get } from '@ember/helper';\n\n<template>\n {{get @address @field}}\n</template>\n```\n\nThis will display the result of `@foo.item1` when `index` is `1`, and\n`this.foo.item2` when `index` is `2`, etc.\n\n**NOTE:** this example uses the experimental `<template>` feature, which is\nthe only place you need to import `concat` to use it (it is a built-in when\nwriting standalone `.hbs` files).",
19596
- "line": " packages/@ember/helper/index.ts:405"
19603
+ "line": " packages/@ember/helper/index.ts:406"
19597
19604
  },
19598
19605
  {
19599
19606
  "message": "Missing item type\n`{{fn}}` is a helper that receives a function and some arguments, and returns\na new function that combines. This allows you to pass parameters along to\nfunctions in your templates:\n\n```js\nimport { fn } from '@ember/helper';\n\nfunction showAlert(message) {\n alert(`The message is: '${message}'`);\n}\n\n<template>\n <button type=\"button\" {{on \"click\" (fn showAlert \"Hello!\")}}>\n Click me!\n </button>\n</template>\n```",
19600
- "line": " packages/@ember/helper/index.ts:450"
19607
+ "line": " packages/@ember/helper/index.ts:451"
19608
+ },
19609
+ {
19610
+ "message": "Missing item type\nUse the {{uniqueId}} helper to generate a unique ID string suitable for use as\nan ID attribute in the DOM.\n\nEach invocation of {{uniqueId}} will return a new, unique ID string.\nYou can use the `let` helper to create an ID that can be reused within a template.\n\n```js\nimport { uniqueId } from '@ember/helper';\n\n<template>\n {{#let (uniqueId) as |emailId|}}\n <label for={{emailId}}>Email address</label>\n <input id={{emailId}} type=\"email\" />\n {{/let}}\n</template>\n```",
19611
+ "line": " packages/@ember/helper/index.ts:473"
19601
19612
  },
19602
19613
  {
19603
19614
  "message": "Missing item type",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-source",
3
- "version": "5.2.0-alpha.3",
3
+ "version": "5.2.0-alpha.5",
4
4
  "description": "A JavaScript framework for creating ambitious web applications",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -56,7 +56,7 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@babel/helper-module-imports": "^7.16.7",
59
- "@babel/plugin-transform-block-scoping": "^7.20.5",
59
+ "@babel/plugin-transform-block-scoping": "^7.21.0",
60
60
  "@ember/edition-utils": "^1.2.0",
61
61
  "@glimmer/compiler": "0.84.2",
62
62
  "@glimmer/component": "^1.1.2",
@@ -107,11 +107,11 @@
107
107
  "@types/node": "^18.11.11",
108
108
  "@types/qunit": "^2.19.4",
109
109
  "@types/rsvp": "^4.0.4",
110
- "@typescript-eslint/eslint-plugin": "^5.57.0",
110
+ "@typescript-eslint/eslint-plugin": "^5.59.8",
111
111
  "@typescript-eslint/parser": "^5.57.1",
112
112
  "ast-types": "^0.14.2",
113
113
  "auto-dist-tag": "^2.1.1",
114
- "aws-sdk": "^2.1325.0",
114
+ "aws-sdk": "^2.1388.0",
115
115
  "babel-template": "^6.26.0",
116
116
  "broccoli-babel-transpiler": "^7.8.1",
117
117
  "broccoli-persistent-filter": "^2.3.1",
@@ -133,7 +133,7 @@
133
133
  "eslint-import-resolver-node": "^0.3.7",
134
134
  "eslint-plugin-disable-features": "^0.1.3",
135
135
  "eslint-plugin-ember-internal": "^3.0.0",
136
- "eslint-plugin-import": "^2.26.0",
136
+ "eslint-plugin-import": "^2.27.5",
137
137
  "eslint-plugin-node": "^11.1.0",
138
138
  "eslint-plugin-prettier": "^4.2.1",
139
139
  "eslint-plugin-qunit": "^7.3.4",
@@ -184,7 +184,7 @@
184
184
  "node": "16.20.0",
185
185
  "yarn": "1.22.19"
186
186
  },
187
- "_originalVersion": "5.2.0-alpha.3",
187
+ "_originalVersion": "5.2.0-alpha.5",
188
188
  "_versionPreviouslyCalculated": true,
189
189
  "publishConfig": {
190
190
  "tag": "alpha"
@@ -484,4 +484,5 @@ declare module '@ember/-internals/glimmer' {
484
484
  setComponentManager,
485
485
  } from '@ember/-internals/glimmer/lib/utils/managers';
486
486
  export { isSerializationFirstNode } from '@ember/-internals/glimmer/lib/utils/serialization-first-node-helpers';
487
+ export { uniqueId } from '@ember/-internals/glimmer/lib/helpers/unique-id';
487
488
  }
@@ -4,4 +4,5 @@ declare module '@ember/-internals/glimmer/lib/helpers/unique-id' {
4
4
  */
5
5
  const _default: object;
6
6
  export default _default;
7
+ export function uniqueId(): string;
7
8
  }
@@ -7,6 +7,7 @@ declare module '@ember/helper' {
7
7
  helperCapabilities,
8
8
  } from '@glimmer/manager';
9
9
  import { invokeHelper as glimmerInvokeHelper } from '@glimmer/runtime';
10
+ import { uniqueId as glimmerUniqueId } from '@ember/-internals/glimmer';
10
11
  import { type Opaque } from '@ember/-internals/utility-types';
11
12
  /**
12
13
  `capabilities` returns a capabilities configuration which can be used to modify
@@ -449,4 +450,24 @@ declare module '@ember/helper' {
449
450
  */
450
451
  export const fn: FnHelper;
451
452
  export interface FnHelper extends Opaque<'helper:fn'> {}
453
+ /**
454
+ * Use the {{uniqueId}} helper to generate a unique ID string suitable for use as
455
+ * an ID attribute in the DOM.
456
+ *
457
+ * Each invocation of {{uniqueId}} will return a new, unique ID string.
458
+ * You can use the `let` helper to create an ID that can be reused within a template.
459
+ *
460
+ * ```js
461
+ * import { uniqueId } from '@ember/helper';
462
+ *
463
+ * <template>
464
+ * {{#let (uniqueId) as |emailId|}}
465
+ * <label for={{emailId}}>Email address</label>
466
+ * <input id={{emailId}} type="email" />
467
+ * {{/let}}
468
+ * </template>
469
+ * ```
470
+ */
471
+ export const uniqueId: typeof glimmerUniqueId;
472
+ export type UniqueIdHelper = typeof uniqueId;
452
473
  }