@norith/glimmer-component 1.0.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.
Files changed (72) hide show
  1. package/README.md +42 -0
  2. package/addon/-private/base-component-manager.ts +35 -0
  3. package/addon/-private/component.ts +287 -0
  4. package/addon/-private/ember-component-manager.ts +99 -0
  5. package/addon/index.ts +34 -0
  6. package/config/environment.js +5 -0
  7. package/dist/commonjs/addon/-private/base-component-manager.d.ts +13 -0
  8. package/dist/commonjs/addon/-private/base-component-manager.js +20 -0
  9. package/dist/commonjs/addon/-private/component.d.ts +244 -0
  10. package/dist/commonjs/addon/-private/component.js +170 -0
  11. package/dist/commonjs/index.d.ts +1 -0
  12. package/dist/commonjs/index.js +9 -0
  13. package/dist/commonjs/src/component-manager.d.ts +12 -0
  14. package/dist/commonjs/src/component-manager.js +30 -0
  15. package/dist/commonjs/src/component.d.ts +4 -0
  16. package/dist/commonjs/src/component.js +23 -0
  17. package/dist/commonjs/test/index.d.ts +1 -0
  18. package/dist/commonjs/test/index.js +4 -0
  19. package/dist/commonjs/test/interactive/args-test.d.ts +1 -0
  20. package/dist/commonjs/test/interactive/args-test.js +47 -0
  21. package/dist/commonjs/test/interactive/index.d.ts +2 -0
  22. package/dist/commonjs/test/interactive/index.js +5 -0
  23. package/dist/commonjs/test/interactive/lifecycle-hook-test.d.ts +1 -0
  24. package/dist/commonjs/test/interactive/lifecycle-hook-test.js +92 -0
  25. package/dist/modules/addon/-private/base-component-manager.d.ts +13 -0
  26. package/dist/modules/addon/-private/base-component-manager.js +17 -0
  27. package/dist/modules/addon/-private/component.d.ts +244 -0
  28. package/dist/modules/addon/-private/component.js +167 -0
  29. package/dist/modules/index.d.ts +1 -0
  30. package/dist/modules/index.js +2 -0
  31. package/dist/modules/src/component-manager.d.ts +12 -0
  32. package/dist/modules/src/component-manager.js +24 -0
  33. package/dist/modules/src/component.d.ts +4 -0
  34. package/dist/modules/src/component.js +17 -0
  35. package/dist/modules/test/index.d.ts +1 -0
  36. package/dist/modules/test/index.js +2 -0
  37. package/dist/modules/test/interactive/args-test.d.ts +1 -0
  38. package/dist/modules/test/interactive/args-test.js +42 -0
  39. package/dist/modules/test/interactive/index.d.ts +2 -0
  40. package/dist/modules/test/interactive/index.js +3 -0
  41. package/dist/modules/test/interactive/lifecycle-hook-test.d.ts +1 -0
  42. package/dist/modules/test/interactive/lifecycle-hook-test.js +87 -0
  43. package/ember-addon-main.js +5 -0
  44. package/index.ts +1 -0
  45. package/package.json +115 -0
  46. package/src/component-manager.ts +24 -0
  47. package/src/component.ts +22 -0
  48. package/test/ember/dummy/app/app.js +14 -0
  49. package/test/ember/dummy/app/components/conference-speakers.js +22 -0
  50. package/test/ember/dummy/app/config/environment.d.ts +16 -0
  51. package/test/ember/dummy/app/index.html +25 -0
  52. package/test/ember/dummy/app/resolver.js +3 -0
  53. package/test/ember/dummy/app/router.js +13 -0
  54. package/test/ember/dummy/app/styles/app.css +0 -0
  55. package/test/ember/dummy/app/templates/application.hbs +3 -0
  56. package/test/ember/dummy/app/templates/components/conference-speakers.hbs +14 -0
  57. package/test/ember/dummy/app/templates/conference-speakers.hbs +1 -0
  58. package/test/ember/dummy/config/environment.js +51 -0
  59. package/test/ember/dummy/config/optional-features.json +6 -0
  60. package/test/ember/dummy/config/targets.js +14 -0
  61. package/test/ember/dummy/public/robots.txt +3 -0
  62. package/test/ember/index.html +40 -0
  63. package/test/ember/integration/components/glimmer-component-guide-test.js +42 -0
  64. package/test/ember/integration/components/glimmer-component-test.js +288 -0
  65. package/test/ember/test-helper.js +12 -0
  66. package/test/index.ts +1 -0
  67. package/test/interactive/args-test.ts +49 -0
  68. package/test/interactive/index.ts +2 -0
  69. package/test/interactive/lifecycle-hook-test.ts +99 -0
  70. package/types/@ember/component.d.ts +11 -0
  71. package/types/ember/index.d.ts +9 -0
  72. package/types/ember-compatibility-helpers.d.ts +1 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const glimmer_component_1 = __importDefault(require("@norith/glimmer-component"));
13
+ const glimmer_tracking_1 = require("@norith/glimmer-tracking");
14
+ const utils_1 = require("@norith/glimmer-core/test/utils");
15
+ const glimmer_core_1 = require("@norith/glimmer-core");
16
+ QUnit.module('[@glimmer/component] Lifecycle Hooks', () => {
17
+ utils_1.test('Lifecycle hook ordering', async function (assert) {
18
+ assert.expect(2);
19
+ let invocations = [];
20
+ let component1;
21
+ class HookLoggerComponent extends glimmer_component_1.default {
22
+ constructor(owner, args) {
23
+ super(owner, args);
24
+ invocations.push([this.args.name, 'constructor']);
25
+ }
26
+ willDestroy() {
27
+ invocations.push([this.args.name, 'willDestroy']);
28
+ }
29
+ }
30
+ class Component1 extends HookLoggerComponent {
31
+ constructor(owner, args) {
32
+ super(owner, args);
33
+ this.firstName = 'Chirag';
34
+ this.showChildren = true;
35
+ component1 = this;
36
+ }
37
+ }
38
+ __decorate([
39
+ glimmer_tracking_1.tracked
40
+ ], Component1.prototype, "firstName", void 0);
41
+ __decorate([
42
+ glimmer_tracking_1.tracked
43
+ ], Component1.prototype, "showChildren", void 0);
44
+ class Component2 extends HookLoggerComponent {
45
+ }
46
+ class Component3 extends HookLoggerComponent {
47
+ }
48
+ class Component4 extends HookLoggerComponent {
49
+ }
50
+ class Component5 extends HookLoggerComponent {
51
+ }
52
+ glimmer_core_1.setComponentTemplate(glimmer_core_1.precompileTemplate(`
53
+ {{#if this.showChildren}}
54
+ <Component2 @name="component2" @firstName={{this.firstName}} />
55
+ <Component3 @name="component3"/>
56
+ {{/if}}
57
+ `, {
58
+ strictMode: true,
59
+ scope: { Component2, Component3 },
60
+ }), Component1);
61
+ glimmer_core_1.setComponentTemplate(glimmer_core_1.precompileTemplate(`
62
+ {{@firstName}}
63
+ <Component4 @name="component4"/>
64
+ <Component5 @name="component5"/>
65
+ `, {
66
+ strictMode: true,
67
+ scope: { Component4, Component5 },
68
+ }), Component2);
69
+ const emptyTemplate = glimmer_core_1.precompileTemplate('');
70
+ glimmer_core_1.setComponentTemplate(emptyTemplate, Component3);
71
+ glimmer_core_1.setComponentTemplate(emptyTemplate, Component4);
72
+ glimmer_core_1.setComponentTemplate(emptyTemplate, Component5);
73
+ await utils_1.render(Component1, { args: { name: 'component1' } });
74
+ assert.deepEqual(invocations, [
75
+ ['component1', 'constructor'],
76
+ ['component2', 'constructor'],
77
+ ['component4', 'constructor'],
78
+ ['component5', 'constructor'],
79
+ ['component3', 'constructor'],
80
+ ]);
81
+ invocations = [];
82
+ component1.showChildren = false;
83
+ await utils_1.settled();
84
+ assert.deepEqual(invocations, [
85
+ ['component2', 'willDestroy'],
86
+ ['component4', 'willDestroy'],
87
+ ['component5', 'willDestroy'],
88
+ ['component3', 'willDestroy'],
89
+ ]);
90
+ });
91
+ });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWhvb2stdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBvbmVudC90ZXN0L2ludGVyYWN0aXZlL2xpZmVjeWNsZS1ob29rLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxrRkFBa0Q7QUFDbEQsK0RBQW1EO0FBRW5ELDJEQUF3RTtBQUN4RSx1REFBZ0Y7QUFFaEYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDeEQsWUFBSSxDQUFDLHlCQUF5QixFQUFFLEtBQUssV0FBVyxNQUFNO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakIsSUFBSSxXQUFXLEdBQXVCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLFVBQXNCLENBQUM7UUFFM0IsTUFBZSxtQkFBb0IsU0FBUSwyQkFBMkI7WUFDcEUsWUFBWSxLQUFhLEVBQUUsSUFBc0I7Z0JBQy9DLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxXQUFXO2dCQUNULFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUM7U0FDRjtRQUVELE1BQU0sVUFBVyxTQUFRLG1CQUFtQjtZQUkxQyxZQUFZLEtBQWEsRUFBRSxJQUFzQjtnQkFDL0MsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFKWixjQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixpQkFBWSxHQUFHLElBQUksQ0FBQztnQkFJM0IsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNwQixDQUFDO1NBQ0Y7UUFQVTtZQUFSLDBCQUFPO3FEQUFzQjtRQUNyQjtZQUFSLDBCQUFPO3dEQUFxQjtRQU8vQixNQUFNLFVBQVcsU0FBUSxtQkFBbUI7U0FBRztRQUMvQyxNQUFNLFVBQVcsU0FBUSxtQkFBbUI7U0FBRztRQUMvQyxNQUFNLFVBQVcsU0FBUSxtQkFBbUI7U0FBRztRQUMvQyxNQUFNLFVBQVcsU0FBUSxtQkFBbUI7U0FBRztRQUUvQyxtQ0FBb0IsQ0FDbEIsaUNBQWtCLENBQ2hCOzs7OztTQUtDLEVBQ0Q7WUFDRSxVQUFVLEVBQUUsSUFBSTtZQUNoQixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO1NBQ2xDLENBQ0YsRUFDRCxVQUFVLENBQ1gsQ0FBQztRQUVGLG1DQUFvQixDQUNsQixpQ0FBa0IsQ0FDaEI7Ozs7U0FJQyxFQUNEO1lBQ0UsVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRTtTQUNsQyxDQUNGLEVBQ0QsVUFBVSxDQUNYLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxpQ0FBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU3QyxtQ0FBb0IsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsbUNBQW9CLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELG1DQUFvQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVoRCxNQUFNLGNBQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNELE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzVCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUM3QixDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7WUFDN0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1lBQzdCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUM3QixDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixVQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUVqQyxNQUFNLGVBQU8sRUFBRSxDQUFDO1FBRWhCLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzVCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUM3QixDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7WUFDN0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1lBQzdCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbXBvbmVudCBmcm9tICdAbm9yaXRoL2dsaW1tZXItY29tcG9uZW50JztcbmltcG9ydCB7IHRyYWNrZWQgfSBmcm9tICdAbm9yaXRoL2dsaW1tZXItdHJhY2tpbmcnO1xuXG5pbXBvcnQgeyB0ZXN0LCByZW5kZXIsIHNldHRsZWQgfSBmcm9tICdAbm9yaXRoL2dsaW1tZXItY29yZS90ZXN0L3V0aWxzJztcbmltcG9ydCB7IHNldENvbXBvbmVudFRlbXBsYXRlLCBwcmVjb21waWxlVGVtcGxhdGUgfSBmcm9tICdAbm9yaXRoL2dsaW1tZXItY29yZSc7XG5cblFVbml0Lm1vZHVsZSgnW0BnbGltbWVyL2NvbXBvbmVudF0gTGlmZWN5Y2xlIEhvb2tzJywgKCkgPT4ge1xuICB0ZXN0KCdMaWZlY3ljbGUgaG9vayBvcmRlcmluZycsIGFzeW5jIGZ1bmN0aW9uIChhc3NlcnQpIHtcbiAgICBhc3NlcnQuZXhwZWN0KDIpO1xuXG4gICAgbGV0IGludm9jYXRpb25zOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcbiAgICBsZXQgY29tcG9uZW50MTogQ29tcG9uZW50MTtcblxuICAgIGFic3RyYWN0IGNsYXNzIEhvb2tMb2dnZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ8eyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgICAgY29uc3RydWN0b3Iob3duZXI6IG9iamVjdCwgYXJnczogeyBuYW1lOiBzdHJpbmcgfSkge1xuICAgICAgICBzdXBlcihvd25lciwgYXJncyk7XG4gICAgICAgIGludm9jYXRpb25zLnB1c2goW3RoaXMuYXJncy5uYW1lLCAnY29uc3RydWN0b3InXSk7XG4gICAgICB9XG5cbiAgICAgIHdpbGxEZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpbnZvY2F0aW9ucy5wdXNoKFt0aGlzLmFyZ3MubmFtZSwgJ3dpbGxEZXN0cm95J10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbXBvbmVudDEgZXh0ZW5kcyBIb29rTG9nZ2VyQ29tcG9uZW50IHtcbiAgICAgIEB0cmFja2VkIGZpcnN0TmFtZSA9ICdDaGlyYWcnO1xuICAgICAgQHRyYWNrZWQgc2hvd0NoaWxkcmVuID0gdHJ1ZTtcblxuICAgICAgY29uc3RydWN0b3Iob3duZXI6IG9iamVjdCwgYXJnczogeyBuYW1lOiBzdHJpbmcgfSkge1xuICAgICAgICBzdXBlcihvd25lciwgYXJncyk7XG4gICAgICAgIGNvbXBvbmVudDEgPSB0aGlzO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBDb21wb25lbnQyIGV4dGVuZHMgSG9va0xvZ2dlckNvbXBvbmVudCB7fVxuICAgIGNsYXNzIENvbXBvbmVudDMgZXh0ZW5kcyBIb29rTG9nZ2VyQ29tcG9uZW50IHt9XG4gICAgY2xhc3MgQ29tcG9uZW50NCBleHRlbmRzIEhvb2tMb2dnZXJDb21wb25lbnQge31cbiAgICBjbGFzcyBDb21wb25lbnQ1IGV4dGVuZHMgSG9va0xvZ2dlckNvbXBvbmVudCB7fVxuXG4gICAgc2V0Q29tcG9uZW50VGVtcGxhdGUoXG4gICAgICBwcmVjb21waWxlVGVtcGxhdGUoXG4gICAgICAgIGBcbiAgICAgICAgICB7eyNpZiB0aGlzLnNob3dDaGlsZHJlbn19XG4gICAgICAgICAgICA8Q29tcG9uZW50MiBAbmFtZT1cImNvbXBvbmVudDJcIiBAZmlyc3ROYW1lPXt7dGhpcy5maXJzdE5hbWV9fSAvPlxuICAgICAgICAgICAgPENvbXBvbmVudDMgQG5hbWU9XCJjb21wb25lbnQzXCIvPlxuICAgICAgICAgIHt7L2lmfX1cbiAgICAgICAgYCxcbiAgICAgICAge1xuICAgICAgICAgIHN0cmljdE1vZGU6IHRydWUsXG4gICAgICAgICAgc2NvcGU6IHsgQ29tcG9uZW50MiwgQ29tcG9uZW50MyB9LFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgQ29tcG9uZW50MVxuICAgICk7XG5cbiAgICBzZXRDb21wb25lbnRUZW1wbGF0ZShcbiAgICAgIHByZWNvbXBpbGVUZW1wbGF0ZShcbiAgICAgICAgYFxuICAgICAgICAgIHt7QGZpcnN0TmFtZX19XG4gICAgICAgICAgPENvbXBvbmVudDQgQG5hbWU9XCJjb21wb25lbnQ0XCIvPlxuICAgICAgICAgIDxDb21wb25lbnQ1IEBuYW1lPVwiY29tcG9uZW50NVwiLz5cbiAgICAgICAgYCxcbiAgICAgICAge1xuICAgICAgICAgIHN0cmljdE1vZGU6IHRydWUsXG4gICAgICAgICAgc2NvcGU6IHsgQ29tcG9uZW50NCwgQ29tcG9uZW50NSB9LFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgQ29tcG9uZW50MlxuICAgICk7XG5cbiAgICBjb25zdCBlbXB0eVRlbXBsYXRlID0gcHJlY29tcGlsZVRlbXBsYXRlKCcnKTtcblxuICAgIHNldENvbXBvbmVudFRlbXBsYXRlKGVtcHR5VGVtcGxhdGUsIENvbXBvbmVudDMpO1xuICAgIHNldENvbXBvbmVudFRlbXBsYXRlKGVtcHR5VGVtcGxhdGUsIENvbXBvbmVudDQpO1xuICAgIHNldENvbXBvbmVudFRlbXBsYXRlKGVtcHR5VGVtcGxhdGUsIENvbXBvbmVudDUpO1xuXG4gICAgYXdhaXQgcmVuZGVyKENvbXBvbmVudDEsIHsgYXJnczogeyBuYW1lOiAnY29tcG9uZW50MScgfSB9KTtcblxuICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnMsIFtcbiAgICAgIFsnY29tcG9uZW50MScsICdjb25zdHJ1Y3RvciddLFxuICAgICAgWydjb21wb25lbnQyJywgJ2NvbnN0cnVjdG9yJ10sXG4gICAgICBbJ2NvbXBvbmVudDQnLCAnY29uc3RydWN0b3InXSxcbiAgICAgIFsnY29tcG9uZW50NScsICdjb25zdHJ1Y3RvciddLFxuICAgICAgWydjb21wb25lbnQzJywgJ2NvbnN0cnVjdG9yJ10sXG4gICAgXSk7XG5cbiAgICBpbnZvY2F0aW9ucyA9IFtdO1xuXG4gICAgY29tcG9uZW50MSEuc2hvd0NoaWxkcmVuID0gZmFsc2U7XG5cbiAgICBhd2FpdCBzZXR0bGVkKCk7XG5cbiAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zLCBbXG4gICAgICBbJ2NvbXBvbmVudDInLCAnd2lsbERlc3Ryb3knXSxcbiAgICAgIFsnY29tcG9uZW50NCcsICd3aWxsRGVzdHJveSddLFxuICAgICAgWydjb21wb25lbnQ1JywgJ3dpbGxEZXN0cm95J10sXG4gICAgICBbJ2NvbXBvbmVudDMnLCAnd2lsbERlc3Ryb3knXSxcbiAgICBdKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { ComponentManager, ComponentCapabilities } from '@norith/glimmer-core';
2
+ import { Arguments } from '@glimmer/interfaces';
3
+ import BaseComponent from './component';
4
+ export interface Constructor<T> {
5
+ new (owner: unknown, args: Record<string, unknown>): T;
6
+ }
7
+ export default abstract class BaseComponentManager<GlimmerComponent extends BaseComponent> implements ComponentManager<GlimmerComponent> {
8
+ abstract capabilities: ComponentCapabilities;
9
+ private owner;
10
+ constructor(owner: unknown);
11
+ createComponent(ComponentClass: Constructor<GlimmerComponent>, args: Arguments): GlimmerComponent;
12
+ getContext(component: GlimmerComponent): GlimmerComponent;
13
+ }
@@ -0,0 +1,17 @@
1
+ import { DEBUG } from '@glimmer/env';
2
+ import { ARGS_SET } from './component';
3
+ export default class BaseComponentManager {
4
+ constructor(owner) {
5
+ this.owner = owner;
6
+ }
7
+ createComponent(ComponentClass, args) {
8
+ if (DEBUG) {
9
+ ARGS_SET.set(args.named, true);
10
+ }
11
+ return new ComponentClass(this.owner, args.named);
12
+ }
13
+ getContext(component) {
14
+ return component;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBvbmVudC9hZGRvbi8tcHJpdmF0ZS9iYXNlLWNvbXBvbmVudC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHckMsT0FBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdEQsTUFBTSxDQUFDLE9BQU8sT0FBZ0Isb0JBQW9CO0lBT2hELFlBQVksS0FBYztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZSxDQUNiLGNBQTZDLEVBQzdDLElBQWU7UUFFZixJQUFJLEtBQUssRUFBRTtZQUNULFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUEyQjtRQUNwQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnRDYXBhYmlsaXRpZXMgfSBmcm9tICdAbm9yaXRoL2dsaW1tZXItY29yZSc7XG5pbXBvcnQgeyBBcmd1bWVudHMgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCBCYXNlQ29tcG9uZW50LCB7IEFSR1NfU0VUIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdG9yPFQ+IHtcbiAgbmV3IChvd25lcjogdW5rbm93biwgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBUO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50TWFuYWdlcjxHbGltbWVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudD5cbiAgaW1wbGVtZW50cyBDb21wb25lbnRNYW5hZ2VyPEdsaW1tZXJDb21wb25lbnQ+XG57XG4gIGFic3RyYWN0IGNhcGFiaWxpdGllczogQ29tcG9uZW50Q2FwYWJpbGl0aWVzO1xuXG4gIHByaXZhdGUgb3duZXI6IHVua25vd247XG5cbiAgY29uc3RydWN0b3Iob3duZXI6IHVua25vd24pIHtcbiAgICB0aGlzLm93bmVyID0gb3duZXI7XG4gIH1cblxuICBjcmVhdGVDb21wb25lbnQoXG4gICAgQ29tcG9uZW50Q2xhc3M6IENvbnN0cnVjdG9yPEdsaW1tZXJDb21wb25lbnQ+LFxuICAgIGFyZ3M6IEFyZ3VtZW50c1xuICApOiBHbGltbWVyQ29tcG9uZW50IHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIEFSR1NfU0VULnNldChhcmdzLm5hbWVkLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbXBvbmVudENsYXNzKHRoaXMub3duZXIsIGFyZ3MubmFtZWQpO1xuICB9XG5cbiAgZ2V0Q29udGV4dChjb21wb25lbnQ6IEdsaW1tZXJDb21wb25lbnQpOiBHbGltbWVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,244 @@
1
+ export declare function setDestroying(component: GlimmerComponent<object>): void;
2
+ export declare function setDestroyed(component: GlimmerComponent<object>): void;
3
+ interface ArgsSetMap extends WeakMap<Args<unknown>, boolean> {
4
+ get<S>(key: Args<S>): boolean | undefined;
5
+ set<S>(key: Args<S>, value: boolean): this;
6
+ has<S>(key: Args<S>): boolean;
7
+ }
8
+ export declare let ARGS_SET: ArgsSetMap;
9
+ declare const Empty: unique symbol;
10
+ /**
11
+ * This provides us a way to have a "fallback" which represents an empty object,
12
+ * without the downsides of how TS treats `{}`. Specifically: this will
13
+ * correctly leverage "excess property checking" so that, given a component
14
+ * which has no named args, if someone invokes it with any named args, they will
15
+ * get a type error.
16
+ *
17
+ * @internal This is exported so declaration emit works (if it were not emitted,
18
+ * declarations which fall back to it would not work). It is *not* intended for
19
+ * public usage, and the specific mechanics it uses may change at any time.
20
+ * The location of this export *is* part of the public API, because moving it
21
+ * will break existing declarations, but is not legal for end users to import
22
+ * themselves, so ***DO NOT RELY ON IT***.
23
+ */
24
+ export declare type EmptyObject = {
25
+ [Empty]?: true;
26
+ };
27
+ declare type GetOrElse<Obj, K extends PropertyKey, Fallback> = Obj extends {
28
+ [Key in K]: infer U;
29
+ } ? U : Fallback;
30
+ /** Given a signature `S`, get back the `Args` type. */
31
+ declare type ArgsFor<S> = S extends {
32
+ Args: infer Args;
33
+ } ? Args extends {
34
+ Named?: object;
35
+ Positional?: unknown[];
36
+ } ? {
37
+ Named: GetOrElse<S['Args'], 'Named', EmptyObject>;
38
+ Positional: GetOrElse<S['Args'], 'Positional', []>;
39
+ } : {
40
+ Named: S['Args'];
41
+ Positional: [];
42
+ } : {
43
+ Named: EmptyObject;
44
+ Positional: [];
45
+ };
46
+ declare type _ExpandSignature<T> = {
47
+ Element: GetOrElse<T, 'Element', null>;
48
+ Args: keyof T extends 'Args' | 'Element' | 'Blocks' ? ArgsFor<T> : {
49
+ Named: T;
50
+ Positional: [];
51
+ };
52
+ Blocks: T extends {
53
+ Blocks: infer Blocks;
54
+ } ? {
55
+ [Block in keyof Blocks]: Blocks[Block] extends unknown[] ? {
56
+ Params: {
57
+ Positional: Blocks[Block];
58
+ };
59
+ } : Blocks[Block];
60
+ } : EmptyObject;
61
+ };
62
+ /**
63
+ * Given any allowed shorthand form of a signature, desugars it to its full
64
+ * expanded type.
65
+ *
66
+ * @internal This is only exported so we can avoid duplicating it in
67
+ * [Glint](https://github.com/typed-ember/glint) or other such tooling. It is
68
+ * *not* intended for public usage, and the specific mechanics it uses may
69
+ * change at any time. Although the signature produced by is part of Glimmer's
70
+ * public API the existence and mechanics of this specific symbol are *not*,
71
+ * so ***DO NOT RELY ON IT***.
72
+ */
73
+ export declare type ExpandSignature<T> = T extends any ? _ExpandSignature<T> : never;
74
+ /**
75
+ * @internal we use this type for convenience internally; inference means users
76
+ * should not normally need to name it
77
+ */
78
+ export declare type Args<S> = ExpandSignature<S>['Args']['Named'];
79
+ /**
80
+ * The `Component` class defines an encapsulated UI element that is rendered to
81
+ * the DOM. A component is made up of a template and, optionally, this component
82
+ * object.
83
+ *
84
+ * ## Defining a Component
85
+ *
86
+ * To define a component, subclass `Component` and add your own properties,
87
+ * methods and lifecycle hooks:
88
+ *
89
+ * ```ts
90
+ * import Component from '@norith/glimmer-component';
91
+ *
92
+ * export default class extends Component {
93
+ * }
94
+ * ```
95
+ *
96
+ * ## Lifecycle Hooks
97
+ *
98
+ * Lifecycle hooks allow you to respond to changes to a component, such as when
99
+ * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a
100
+ * component, implement the hook as a method on your component subclass.
101
+ *
102
+ * For example, to be notified when Glimmer has rendered your component so you
103
+ * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:
104
+ *
105
+ * ```ts
106
+ * import Component from '@norith/glimmer-component';
107
+ *
108
+ * export default class extends Component {
109
+ * didInsertElement() {
110
+ * $(this.element).pickadate();
111
+ * }
112
+ * }
113
+ * ```
114
+ *
115
+ * ## Data for Templates
116
+ *
117
+ * `Component`s have two different kinds of data, or state, that can be
118
+ * displayed in templates:
119
+ *
120
+ * 1. Arguments
121
+ * 2. Properties
122
+ *
123
+ * Arguments are data that is passed in to a component from its parent
124
+ * component. For example, if I have a `UserGreeting` component, I can pass it
125
+ * a name and greeting to use:
126
+ *
127
+ * ```hbs
128
+ * <UserGreeting @name="Ricardo" @greeting="Olá" />
129
+ * ```
130
+ *
131
+ * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`
132
+ * arguments that I've been given:
133
+ *
134
+ * ```hbs
135
+ * {{@greeting}}, {{@name}}!
136
+ * ```
137
+ *
138
+ * Arguments are also available inside my component:
139
+ *
140
+ * ```ts
141
+ * console.log(this.args.greeting); // prints "Olá"
142
+ * ```
143
+ *
144
+ * Properties, on the other hand, are internal to the component and declared in
145
+ * the class. You can use properties to store data that you want to show in the
146
+ * template, or pass to another component as an argument.
147
+ *
148
+ * ```ts
149
+ * import Component from '@norith/glimmer-component';
150
+ *
151
+ * export default class extends Component {
152
+ * user = {
153
+ * name: 'Robbie'
154
+ * }
155
+ * }
156
+ * ```
157
+ *
158
+ * In the above example, we've defined a component with a `user` property that
159
+ * contains an object with its own `name` property.
160
+ *
161
+ * We can render that property in our template:
162
+ *
163
+ * ```hbs
164
+ * Hello, {{user.name}}!
165
+ * ```
166
+ *
167
+ * We can also take that property and pass it as an argument to the
168
+ * `UserGreeting` component we defined above:
169
+ *
170
+ * ```hbs
171
+ * <UserGreeting @greeting="Hello" @name={{user.name}} />
172
+ * ```
173
+ *
174
+ * ## Arguments vs. Properties
175
+ *
176
+ * Remember, arguments are data that was given to your component by its parent
177
+ * component, and properties are data your component has defined for itself.
178
+ *
179
+ * You can tell the difference between arguments and properties in templates
180
+ * because arguments always start with an `@` sign (think "A is for arguments"):
181
+ *
182
+ * ```hbs
183
+ * {{@firstName}}
184
+ * ```
185
+ *
186
+ * We know that `@firstName` came from the parent component, not the current
187
+ * component, because it starts with `@` and is therefore an argument.
188
+ *
189
+ * On the other hand, if we see:
190
+ *
191
+ * ```hbs
192
+ * {{name}}
193
+ * ```
194
+ *
195
+ * We know that `name` is a property on the component. If we want to know where
196
+ * the data is coming from, we can go look at our component class to find out.
197
+ *
198
+ * Inside the component itself, arguments always show up inside the component's
199
+ * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,
200
+ * inside the component `this.args.firstName` would also be `Tom`.
201
+ */
202
+ export default class GlimmerComponent<S = unknown> {
203
+ /**
204
+ * Constructs a new component and assigns itself the passed properties. You
205
+ * should not construct new components yourself. Instead, Glimmer will
206
+ * instantiate new components automatically as it renders.
207
+ *
208
+ * @param owner
209
+ * @param args
210
+ */
211
+ constructor(owner: unknown, args: Args<S>);
212
+ /**
213
+ * Named arguments passed to the component from its parent component.
214
+ * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.
215
+ *
216
+ * Say you have the following component, which will have two `args`, `firstName` and `lastName`:
217
+ *
218
+ * ```hbs
219
+ * <my-component @firstName="Arthur" @lastName="Dent" />
220
+ * ```
221
+ *
222
+ * If you needed to calculate `fullName` by combining both of them, you would do:
223
+ *
224
+ * ```ts
225
+ * didInsertElement() {
226
+ * console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);
227
+ * }
228
+ * ```
229
+ *
230
+ * While in the template you could do:
231
+ *
232
+ * ```hbs
233
+ * <p>Welcome, {{@firstName}} {{@lastName}}!</p>
234
+ * ```
235
+ */
236
+ readonly args: Readonly<Args<S>>;
237
+ get isDestroying(): boolean;
238
+ get isDestroyed(): boolean;
239
+ /**
240
+ * Called before the component has been removed from the DOM.
241
+ */
242
+ willDestroy(): void;
243
+ }
244
+ export {};
@@ -0,0 +1,167 @@
1
+ import { DEBUG } from '@glimmer/env';
2
+ const DESTROYING = new WeakMap();
3
+ const DESTROYED = new WeakMap();
4
+ export function setDestroying(component) {
5
+ DESTROYING.set(component, true);
6
+ }
7
+ export function setDestroyed(component) {
8
+ DESTROYED.set(component, true);
9
+ }
10
+ // SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.
11
+ // There is not a great way to connect that data in TS at present.
12
+ export let ARGS_SET;
13
+ if (DEBUG) {
14
+ ARGS_SET = new WeakMap();
15
+ }
16
+ /**
17
+ * The `Component` class defines an encapsulated UI element that is rendered to
18
+ * the DOM. A component is made up of a template and, optionally, this component
19
+ * object.
20
+ *
21
+ * ## Defining a Component
22
+ *
23
+ * To define a component, subclass `Component` and add your own properties,
24
+ * methods and lifecycle hooks:
25
+ *
26
+ * ```ts
27
+ * import Component from '@norith/glimmer-component';
28
+ *
29
+ * export default class extends Component {
30
+ * }
31
+ * ```
32
+ *
33
+ * ## Lifecycle Hooks
34
+ *
35
+ * Lifecycle hooks allow you to respond to changes to a component, such as when
36
+ * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a
37
+ * component, implement the hook as a method on your component subclass.
38
+ *
39
+ * For example, to be notified when Glimmer has rendered your component so you
40
+ * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:
41
+ *
42
+ * ```ts
43
+ * import Component from '@norith/glimmer-component';
44
+ *
45
+ * export default class extends Component {
46
+ * didInsertElement() {
47
+ * $(this.element).pickadate();
48
+ * }
49
+ * }
50
+ * ```
51
+ *
52
+ * ## Data for Templates
53
+ *
54
+ * `Component`s have two different kinds of data, or state, that can be
55
+ * displayed in templates:
56
+ *
57
+ * 1. Arguments
58
+ * 2. Properties
59
+ *
60
+ * Arguments are data that is passed in to a component from its parent
61
+ * component. For example, if I have a `UserGreeting` component, I can pass it
62
+ * a name and greeting to use:
63
+ *
64
+ * ```hbs
65
+ * <UserGreeting @name="Ricardo" @greeting="Olá" />
66
+ * ```
67
+ *
68
+ * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`
69
+ * arguments that I've been given:
70
+ *
71
+ * ```hbs
72
+ * {{@greeting}}, {{@name}}!
73
+ * ```
74
+ *
75
+ * Arguments are also available inside my component:
76
+ *
77
+ * ```ts
78
+ * console.log(this.args.greeting); // prints "Olá"
79
+ * ```
80
+ *
81
+ * Properties, on the other hand, are internal to the component and declared in
82
+ * the class. You can use properties to store data that you want to show in the
83
+ * template, or pass to another component as an argument.
84
+ *
85
+ * ```ts
86
+ * import Component from '@norith/glimmer-component';
87
+ *
88
+ * export default class extends Component {
89
+ * user = {
90
+ * name: 'Robbie'
91
+ * }
92
+ * }
93
+ * ```
94
+ *
95
+ * In the above example, we've defined a component with a `user` property that
96
+ * contains an object with its own `name` property.
97
+ *
98
+ * We can render that property in our template:
99
+ *
100
+ * ```hbs
101
+ * Hello, {{user.name}}!
102
+ * ```
103
+ *
104
+ * We can also take that property and pass it as an argument to the
105
+ * `UserGreeting` component we defined above:
106
+ *
107
+ * ```hbs
108
+ * <UserGreeting @greeting="Hello" @name={{user.name}} />
109
+ * ```
110
+ *
111
+ * ## Arguments vs. Properties
112
+ *
113
+ * Remember, arguments are data that was given to your component by its parent
114
+ * component, and properties are data your component has defined for itself.
115
+ *
116
+ * You can tell the difference between arguments and properties in templates
117
+ * because arguments always start with an `@` sign (think "A is for arguments"):
118
+ *
119
+ * ```hbs
120
+ * {{@firstName}}
121
+ * ```
122
+ *
123
+ * We know that `@firstName` came from the parent component, not the current
124
+ * component, because it starts with `@` and is therefore an argument.
125
+ *
126
+ * On the other hand, if we see:
127
+ *
128
+ * ```hbs
129
+ * {{name}}
130
+ * ```
131
+ *
132
+ * We know that `name` is a property on the component. If we want to know where
133
+ * the data is coming from, we can go look at our component class to find out.
134
+ *
135
+ * Inside the component itself, arguments always show up inside the component's
136
+ * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,
137
+ * inside the component `this.args.firstName` would also be `Tom`.
138
+ */
139
+ export default class GlimmerComponent {
140
+ /**
141
+ * Constructs a new component and assigns itself the passed properties. You
142
+ * should not construct new components yourself. Instead, Glimmer will
143
+ * instantiate new components automatically as it renders.
144
+ *
145
+ * @param owner
146
+ * @param args
147
+ */
148
+ constructor(owner, args) {
149
+ if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {
150
+ throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);
151
+ }
152
+ this.args = args;
153
+ DESTROYING.set(this, false);
154
+ DESTROYED.set(this, false);
155
+ }
156
+ get isDestroying() {
157
+ return DESTROYING.get(this) || false;
158
+ }
159
+ get isDestroyed() {
160
+ return DESTROYED.get(this) || false;
161
+ }
162
+ /**
163
+ * Called before the component has been removed from the DOM.
164
+ */
165
+ willDestroy() { } // eslint-disable-line @typescript-eslint/no-empty-function
166
+ }
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvY29tcG9uZW50L2FkZG9uLy1wcml2YXRlL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJDLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFxQyxDQUFDO0FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFxQyxDQUFDO0FBRW5FLE1BQU0sVUFBVSxhQUFhLENBQUMsU0FBbUM7SUFDL0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsU0FBbUM7SUFDOUQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQVlELCtFQUErRTtBQUMvRSxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLElBQUksUUFBb0IsQ0FBQztBQUVoQyxJQUFJLEtBQUssRUFBRTtJQUNULFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztDQUN4QztBQTJFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwSEc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFnQjtJQUNuQzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxLQUFjLEVBQUUsSUFBYTtRQUN2QyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ2pGLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxrRkFBa0YsQ0FDL0ssQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQTRCRCxJQUFJLFlBQVk7UUFDZCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsS0FBVSxDQUFDLENBQUMsMkRBQTJEO0NBQ25GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuXG5jb25zdCBERVNUUk9ZSU5HID0gbmV3IFdlYWtNYXA8R2xpbW1lckNvbXBvbmVudDxvYmplY3Q+LCBib29sZWFuPigpO1xuY29uc3QgREVTVFJPWUVEID0gbmV3IFdlYWtNYXA8R2xpbW1lckNvbXBvbmVudDxvYmplY3Q+LCBib29sZWFuPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVzdHJveWluZyhjb21wb25lbnQ6IEdsaW1tZXJDb21wb25lbnQ8b2JqZWN0Pik6IHZvaWQge1xuICBERVNUUk9ZSU5HLnNldChjb21wb25lbnQsIHRydWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlc3Ryb3llZChjb21wb25lbnQ6IEdsaW1tZXJDb21wb25lbnQ8b2JqZWN0Pik6IHZvaWQge1xuICBERVNUUk9ZRUQuc2V0KGNvbXBvbmVudCwgdHJ1ZSk7XG59XG5cbi8vIFRoaXMgcHJvdmlkZXMgYSB0eXBlLXNhZmUgYFdlYWtNYXBgOiB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIgbGluayB0aGUga2V5IHRvIGFcbi8vIHNwZWNpZmljIHZhbHVlLiBUaGlzIGlzIGhvdyBgV2Vha01hcGBzIGFjdHVhbGx5IGJlaGF2ZSwgYnV0IHRoZSBUUyB0eXBlXG4vLyBzeXN0ZW0gZG9lcyBub3QgKHlldCEpIGhhdmUgYSBnb29kIHdheSB0byBjYXB0dXJlIHRoYXQgZm9yIHR5cGVzIGxpa2Vcbi8vIGBXZWFrTWFwYCB3aGVyZSB0aGUgdHlwZSBpcyBnZW5lcmljIG92ZXIgYW5vdGhlciBnZW5lcmljIHR5cGUgKGhlcmUsIGBBcmdzYCkuXG5pbnRlcmZhY2UgQXJnc1NldE1hcCBleHRlbmRzIFdlYWtNYXA8QXJnczx1bmtub3duPiwgYm9vbGVhbj4ge1xuICBnZXQ8Uz4oa2V5OiBBcmdzPFM+KTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2V0PFM+KGtleTogQXJnczxTPiwgdmFsdWU6IGJvb2xlYW4pOiB0aGlzO1xuICBoYXM8Uz4oa2V5OiBBcmdzPFM+KTogYm9vbGVhbjtcbn1cblxuLy8gU0FGRVRZOiB0aGlzIG9ubHkgaG9sZHMgYmVjYXVzZSB3ZSAqb25seSogYWNjZXMgdGhpcyB3aGVuIGBERUJVR2AgaXMgYHRydWVgLlxuLy8gVGhlcmUgaXMgbm90IGEgZ3JlYXQgd2F5IHRvIGNvbm5lY3QgdGhhdCBkYXRhIGluIFRTIGF0IHByZXNlbnQuXG5leHBvcnQgbGV0IEFSR1NfU0VUOiBBcmdzU2V0TWFwO1xuXG5pZiAoREVCVUcpIHtcbiAgQVJHU19TRVQgPSBuZXcgV2Vha01hcCgpIGFzIEFyZ3NTZXRNYXA7XG59XG5cbi8vIC0tLSBUeXBlIHV0aWxpdGllcyBmb3IgY29tcG9uZW50IHNpZ25hdHVyZXMgLS0tIC8vXG4vLyBUeXBlLW9ubHkgXCJzeW1ib2xcIiB0byB1c2Ugd2l0aCBgRW1wdHlPYmplY3RgIGJlbG93LCBzbyB0aGF0IGl0IGlzICpub3QqXG4vLyBlcXVpdmFsZW50IHRvIGFuIGVtcHR5IGludGVyZmFjZS5cbmRlY2xhcmUgY29uc3QgRW1wdHk6IHVuaXF1ZSBzeW1ib2w7XG5cbi8qKlxuICogVGhpcyBwcm92aWRlcyB1cyBhIHdheSB0byBoYXZlIGEgXCJmYWxsYmFja1wiIHdoaWNoIHJlcHJlc2VudHMgYW4gZW1wdHkgb2JqZWN0LFxuICogd2l0aG91dCB0aGUgZG93bnNpZGVzIG9mIGhvdyBUUyB0cmVhdHMgYHt9YC4gU3BlY2lmaWNhbGx5OiB0aGlzIHdpbGxcbiAqIGNvcnJlY3RseSBsZXZlcmFnZSBcImV4Y2VzcyBwcm9wZXJ0eSBjaGVja2luZ1wiIHNvIHRoYXQsIGdpdmVuIGEgY29tcG9uZW50XG4gKiB3aGljaCBoYXMgbm8gbmFtZWQgYXJncywgaWYgc29tZW9uZSBpbnZva2VzIGl0IHdpdGggYW55IG5hbWVkIGFyZ3MsIHRoZXkgd2lsbFxuICogZ2V0IGEgdHlwZSBlcnJvci5cbiAqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBleHBvcnRlZCBzbyBkZWNsYXJhdGlvbiBlbWl0IHdvcmtzIChpZiBpdCB3ZXJlIG5vdCBlbWl0dGVkLFxuICogICBkZWNsYXJhdGlvbnMgd2hpY2ggZmFsbCBiYWNrIHRvIGl0IHdvdWxkIG5vdCB3b3JrKS4gSXQgaXMgKm5vdCogaW50ZW5kZWQgZm9yXG4gKiAgIHB1YmxpYyB1c2FnZSwgYW5kIHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgaXQgdXNlcyBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLlxuICogICBUaGUgbG9jYXRpb24gb2YgdGhpcyBleHBvcnQgKmlzKiBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBiZWNhdXNlIG1vdmluZyBpdFxuICogICB3aWxsIGJyZWFrIGV4aXN0aW5nIGRlY2xhcmF0aW9ucywgYnV0IGlzIG5vdCBsZWdhbCBmb3IgZW5kIHVzZXJzIHRvIGltcG9ydFxuICogICB0aGVtc2VsdmVzLCBzbyAqKipETyBOT1QgUkVMWSBPTiBJVCoqKi5cbiAqL1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSB7IFtFbXB0eV0/OiB0cnVlIH07XG5cbnR5cGUgR2V0T3JFbHNlPE9iaiwgSyBleHRlbmRzIFByb3BlcnR5S2V5LCBGYWxsYmFjaz4gPSBPYmogZXh0ZW5kcyB7IFtLZXkgaW4gS106IGluZmVyIFUgfVxuICA/IFVcbiAgOiBGYWxsYmFjaztcblxuLyoqIEdpdmVuIGEgc2lnbmF0dXJlIGBTYCwgZ2V0IGJhY2sgdGhlIGBBcmdzYCB0eXBlLiAqL1xudHlwZSBBcmdzRm9yPFM+ID0gUyBleHRlbmRzIHsgQXJnczogaW5mZXIgQXJncyB9XG4gID8gQXJncyBleHRlbmRzIHsgTmFtZWQ/OiBvYmplY3Q7IFBvc2l0aW9uYWw/OiB1bmtub3duW10gfSAvLyBBcmUgdGhleSBsb25naGFuZCBhbHJlYWR5P1xuICAgID8ge1xuICAgICAgICBOYW1lZDogR2V0T3JFbHNlPFNbJ0FyZ3MnXSwgJ05hbWVkJywgRW1wdHlPYmplY3Q+O1xuICAgICAgICBQb3NpdGlvbmFsOiBHZXRPckVsc2U8U1snQXJncyddLCAnUG9zaXRpb25hbCcsIFtdPjtcbiAgICAgIH1cbiAgICA6IHsgTmFtZWQ6IFNbJ0FyZ3MnXTsgUG9zaXRpb25hbDogW10gfVxuICA6IHsgTmFtZWQ6IEVtcHR5T2JqZWN0OyBQb3NpdGlvbmFsOiBbXSB9O1xuXG50eXBlIF9FeHBhbmRTaWduYXR1cmU8VD4gPSB7XG4gIEVsZW1lbnQ6IEdldE9yRWxzZTxULCAnRWxlbWVudCcsIG51bGw+O1xuICBBcmdzOiBrZXlvZiBUIGV4dGVuZHMgJ0FyZ3MnIHwgJ0VsZW1lbnQnIHwgJ0Jsb2NrcycgLy8gSXMgdGhpcyBhIGBTaWduYXR1cmVgP1xuICAgID8gQXJnc0ZvcjxUPiAvLyBUaGVuIHVzZSBgU2lnbmF0dXJlYCBhcmdzXG4gICAgOiB7IE5hbWVkOiBUOyBQb3NpdGlvbmFsOiBbXSB9OyAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNsYXNzaWMgYEFyZ3NgLlxuICBCbG9ja3M6IFQgZXh0ZW5kcyB7IEJsb2NrczogaW5mZXIgQmxvY2tzIH1cbiAgICA/IHtcbiAgICAgICAgW0Jsb2NrIGluIGtleW9mIEJsb2Nrc106IEJsb2Nrc1tCbG9ja10gZXh0ZW5kcyB1bmtub3duW11cbiAgICAgICAgICA/IHsgUGFyYW1zOiB7IFBvc2l0aW9uYWw6IEJsb2Nrc1tCbG9ja10gfSB9XG4gICAgICAgICAgOiBCbG9ja3NbQmxvY2tdO1xuICAgICAgfVxuICAgIDogRW1wdHlPYmplY3Q7XG59O1xuLyoqXG4gKiBHaXZlbiBhbnkgYWxsb3dlZCBzaG9ydGhhbmQgZm9ybSBvZiBhIHNpZ25hdHVyZSwgZGVzdWdhcnMgaXQgdG8gaXRzIGZ1bGxcbiAqIGV4cGFuZGVkIHR5cGUuXG4gKlxuICogQGludGVybmFsIFRoaXMgaXMgb25seSBleHBvcnRlZCBzbyB3ZSBjYW4gYXZvaWQgZHVwbGljYXRpbmcgaXQgaW5cbiAqICAgW0dsaW50XShodHRwczovL2dpdGh1Yi5jb20vdHlwZWQtZW1iZXIvZ2xpbnQpIG9yIG90aGVyIHN1Y2ggdG9vbGluZy4gSXQgaXNcbiAqICAgKm5vdCogaW50ZW5kZWQgZm9yIHB1YmxpYyB1c2FnZSwgYW5kIHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgaXQgdXNlcyBtYXlcbiAqICAgY2hhbmdlIGF0IGFueSB0aW1lLiBBbHRob3VnaCB0aGUgc2lnbmF0dXJlIHByb2R1Y2VkIGJ5IGlzIHBhcnQgb2YgR2xpbW1lcidzXG4gKiAgIHB1YmxpYyBBUEkgdGhlIGV4aXN0ZW5jZSBhbmQgbWVjaGFuaWNzIG9mIHRoaXMgc3BlY2lmaWMgc3ltYm9sIGFyZSAqbm90KixcbiAqICAgc28gKioqRE8gTk9UIFJFTFkgT04gSVQqKiouXG4gKi9cbi8vIFRoZSBjb25kaXRpb25hbCB0eXBlIGhlcmUgaXMgYmVjYXVzZSBUUyBhcHBsaWVzIGNvbmRpdGlvbmFsIHR5cGVzXG4vLyBkaXN0cmlidXRpdmVseS4gVGhpcyBtZWFucyB0aGF0IGZvciB1bmlvbiB0eXBlcywgY2hlY2tzIGxpa2UgYGtleW9mIFRgIGdldFxuLy8gYWxsIHRoZSBrZXlzIGZyb20gYWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiwgaW5zdGVhZCBvZiBlbmRpbmcgdXAgYXMgYG5ldmVyYFxuLy8gYW5kIHRoZW4gYWx3YXlzIGZhbGxpbmcgaW50byB0aGUgYFNpZ25hdHVyZWAgcGF0aCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0b1xuLy8gdGhlIGxlZ2FjeSBhcmdzIGhhbmRsaW5nIHBhdGguXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgRXhwYW5kU2lnbmF0dXJlPFQ+ID0gVCBleHRlbmRzIGFueSA/IF9FeHBhbmRTaWduYXR1cmU8VD4gOiBuZXZlcjtcblxuLyoqXG4gKiBAaW50ZXJuYWwgd2UgdXNlIHRoaXMgdHlwZSBmb3IgY29udmVuaWVuY2UgaW50ZXJuYWxseTsgaW5mZXJlbmNlIG1lYW5zIHVzZXJzXG4gKiAgIHNob3VsZCBub3Qgbm9ybWFsbHkgbmVlZCB0byBuYW1lIGl0XG4gKi9cbmV4cG9ydCB0eXBlIEFyZ3M8Uz4gPSBFeHBhbmRTaWduYXR1cmU8Uz5bJ0FyZ3MnXVsnTmFtZWQnXTtcblxuLyoqXG4gKiBUaGUgYENvbXBvbmVudGAgY2xhc3MgZGVmaW5lcyBhbiBlbmNhcHN1bGF0ZWQgVUkgZWxlbWVudCB0aGF0IGlzIHJlbmRlcmVkIHRvXG4gKiB0aGUgRE9NLiBBIGNvbXBvbmVudCBpcyBtYWRlIHVwIG9mIGEgdGVtcGxhdGUgYW5kLCBvcHRpb25hbGx5LCB0aGlzIGNvbXBvbmVudFxuICogb2JqZWN0LlxuICpcbiAqICMjIERlZmluaW5nIGEgQ29tcG9uZW50XG4gKlxuICogVG8gZGVmaW5lIGEgY29tcG9uZW50LCBzdWJjbGFzcyBgQ29tcG9uZW50YCBhbmQgYWRkIHlvdXIgb3duIHByb3BlcnRpZXMsXG4gKiBtZXRob2RzIGFuZCBsaWZlY3ljbGUgaG9va3M6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCBDb21wb25lbnQgZnJvbSAnQG5vcml0aC9nbGltbWVyLWNvbXBvbmVudCc7XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuICogfVxuICogYGBgXG4gKlxuICogIyMgTGlmZWN5Y2xlIEhvb2tzXG4gKlxuICogTGlmZWN5Y2xlIGhvb2tzIGFsbG93IHlvdSB0byByZXNwb25kIHRvIGNoYW5nZXMgdG8gYSBjb21wb25lbnQsIHN1Y2ggYXMgd2hlblxuICogaXQgZ2V0cyBjcmVhdGVkLCByZW5kZXJlZCwgdXBkYXRlZCBvciBkZXN0cm95ZWQuIFRvIGFkZCBhIGxpZmVjeWNsZSBob29rIHRvIGFcbiAqIGNvbXBvbmVudCwgaW1wbGVtZW50IHRoZSBob29rIGFzIGEgbWV0aG9kIG9uIHlvdXIgY29tcG9uZW50IHN1YmNsYXNzLlxuICpcbiAqIEZvciBleGFtcGxlLCB0byBiZSBub3RpZmllZCB3aGVuIEdsaW1tZXIgaGFzIHJlbmRlcmVkIHlvdXIgY29tcG9uZW50IHNvIHlvdVxuICogY2FuIGF0dGFjaCBhIGxlZ2FjeSBqUXVlcnkgcGx1Z2luLCBpbXBsZW1lbnQgdGhlIGBkaWRJbnNlcnRFbGVtZW50KClgIG1ldGhvZDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IENvbXBvbmVudCBmcm9tICdAbm9yaXRoL2dsaW1tZXItY29tcG9uZW50JztcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIENvbXBvbmVudCB7XG4gKiAgIGRpZEluc2VydEVsZW1lbnQoKSB7XG4gKiAgICAgJCh0aGlzLmVsZW1lbnQpLnBpY2thZGF0ZSgpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBEYXRhIGZvciBUZW1wbGF0ZXNcbiAqXG4gKiBgQ29tcG9uZW50YHMgaGF2ZSB0d28gZGlmZmVyZW50IGtpbmRzIG9mIGRhdGEsIG9yIHN0YXRlLCB0aGF0IGNhbiBiZVxuICogZGlzcGxheWVkIGluIHRlbXBsYXRlczpcbiAqXG4gKiAxLiBBcmd1bWVudHNcbiAqIDIuIFByb3BlcnRpZXNcbiAqXG4gKiBBcmd1bWVudHMgYXJlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gdG8gYSBjb21wb25lbnQgZnJvbSBpdHMgcGFyZW50XG4gKiBjb21wb25lbnQuIEZvciBleGFtcGxlLCBpZiBJIGhhdmUgYSBgVXNlckdyZWV0aW5nYCBjb21wb25lbnQsIEkgY2FuIHBhc3MgaXRcbiAqIGEgbmFtZSBhbmQgZ3JlZXRpbmcgdG8gdXNlOlxuICpcbiAqIGBgYGhic1xuICogPFVzZXJHcmVldGluZyBAbmFtZT1cIlJpY2FyZG9cIiBAZ3JlZXRpbmc9XCJPbMOhXCIgLz5cbiAqIGBgYFxuICpcbiAqIEluc2lkZSBteSBgVXNlckdyZWV0aW5nYCB0ZW1wbGF0ZSwgSSBjYW4gYWNjZXNzIHRoZSBgQG5hbWVgIGFuZCBgQGdyZWV0aW5nYFxuICogYXJndW1lbnRzIHRoYXQgSSd2ZSBiZWVuIGdpdmVuOlxuICpcbiAqIGBgYGhic1xuICoge3tAZ3JlZXRpbmd9fSwge3tAbmFtZX19IVxuICogYGBgXG4gKlxuICogQXJndW1lbnRzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbnNpZGUgbXkgY29tcG9uZW50OlxuICpcbiAqIGBgYHRzXG4gKiBjb25zb2xlLmxvZyh0aGlzLmFyZ3MuZ3JlZXRpbmcpOyAvLyBwcmludHMgXCJPbMOhXCJcbiAqIGBgYFxuICpcbiAqIFByb3BlcnRpZXMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgaW50ZXJuYWwgdG8gdGhlIGNvbXBvbmVudCBhbmQgZGVjbGFyZWQgaW5cbiAqIHRoZSBjbGFzcy4gWW91IGNhbiB1c2UgcHJvcGVydGllcyB0byBzdG9yZSBkYXRhIHRoYXQgeW91IHdhbnQgdG8gc2hvdyBpbiB0aGVcbiAqIHRlbXBsYXRlLCBvciBwYXNzIHRvIGFub3RoZXIgY29tcG9uZW50IGFzIGFuIGFyZ3VtZW50LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgQ29tcG9uZW50IGZyb20gJ0Bub3JpdGgvZ2xpbW1lci1jb21wb25lbnQnO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgdXNlciA9IHtcbiAqICAgICBuYW1lOiAnUm9iYmllJ1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgd2UndmUgZGVmaW5lZCBhIGNvbXBvbmVudCB3aXRoIGEgYHVzZXJgIHByb3BlcnR5IHRoYXRcbiAqIGNvbnRhaW5zIGFuIG9iamVjdCB3aXRoIGl0cyBvd24gYG5hbWVgIHByb3BlcnR5LlxuICpcbiAqIFdlIGNhbiByZW5kZXIgdGhhdCBwcm9wZXJ0eSBpbiBvdXIgdGVtcGxhdGU6XG4gKlxuICogYGBgaGJzXG4gKiBIZWxsbywge3t1c2VyLm5hbWV9fSFcbiAqIGBgYFxuICpcbiAqIFdlIGNhbiBhbHNvIHRha2UgdGhhdCBwcm9wZXJ0eSBhbmQgcGFzcyBpdCBhcyBhbiBhcmd1bWVudCB0byB0aGVcbiAqIGBVc2VyR3JlZXRpbmdgIGNvbXBvbmVudCB3ZSBkZWZpbmVkIGFib3ZlOlxuICpcbiAqIGBgYGhic1xuICogPFVzZXJHcmVldGluZyBAZ3JlZXRpbmc9XCJIZWxsb1wiIEBuYW1lPXt7dXNlci5uYW1lfX0gLz5cbiAqIGBgYFxuICpcbiAqICMjIEFyZ3VtZW50cyB2cy4gUHJvcGVydGllc1xuICpcbiAqIFJlbWVtYmVyLCBhcmd1bWVudHMgYXJlIGRhdGEgdGhhdCB3YXMgZ2l2ZW4gdG8geW91ciBjb21wb25lbnQgYnkgaXRzIHBhcmVudFxuICogY29tcG9uZW50LCBhbmQgcHJvcGVydGllcyBhcmUgZGF0YSB5b3VyIGNvbXBvbmVudCBoYXMgZGVmaW5lZCBmb3IgaXRzZWxmLlxuICpcbiAqIFlvdSBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcHJvcGVydGllcyBpbiB0ZW1wbGF0ZXNcbiAqIGJlY2F1c2UgYXJndW1lbnRzIGFsd2F5cyBzdGFydCB3aXRoIGFuIGBAYCBzaWduICh0aGluayBcIkEgaXMgZm9yIGFyZ3VtZW50c1wiKTpcbiAqXG4gKiBgYGBoYnNcbiAqIHt7QGZpcnN0TmFtZX19XG4gKiBgYGBcbiAqXG4gKiBXZSBrbm93IHRoYXQgYEBmaXJzdE5hbWVgIGNhbWUgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCwgbm90IHRoZSBjdXJyZW50XG4gKiBjb21wb25lbnQsIGJlY2F1c2UgaXQgc3RhcnRzIHdpdGggYEBgIGFuZCBpcyB0aGVyZWZvcmUgYW4gYXJndW1lbnQuXG4gKlxuICogT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIHNlZTpcbiAqXG4gKiBgYGBoYnNcbiAqIHt7bmFtZX19XG4gKiBgYGBcbiAqXG4gKiBXZSBrbm93IHRoYXQgYG5hbWVgIGlzIGEgcHJvcGVydHkgb24gdGhlIGNvbXBvbmVudC4gSWYgd2Ugd2FudCB0byBrbm93IHdoZXJlXG4gKiB0aGUgZGF0YSBpcyBjb21pbmcgZnJvbSwgd2UgY2FuIGdvIGxvb2sgYXQgb3VyIGNvbXBvbmVudCBjbGFzcyB0byBmaW5kIG91dC5cbiAqXG4gKiBJbnNpZGUgdGhlIGNvbXBvbmVudCBpdHNlbGYsIGFyZ3VtZW50cyBhbHdheXMgc2hvdyB1cCBpbnNpZGUgdGhlIGNvbXBvbmVudCdzXG4gKiBgYXJnc2AgcHJvcGVydHkuIEZvciBleGFtcGxlLCBpZiBge3tAZmlyc3ROYW1lfX1gIGlzIGBUb21gIGluIHRoZSB0ZW1wbGF0ZSxcbiAqIGluc2lkZSB0aGUgY29tcG9uZW50IGB0aGlzLmFyZ3MuZmlyc3ROYW1lYCB3b3VsZCBhbHNvIGJlIGBUb21gLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHbGltbWVyQ29tcG9uZW50PFMgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbXBvbmVudCBhbmQgYXNzaWducyBpdHNlbGYgdGhlIHBhc3NlZCBwcm9wZXJ0aWVzLiBZb3VcbiAgICogc2hvdWxkIG5vdCBjb25zdHJ1Y3QgbmV3IGNvbXBvbmVudHMgeW91cnNlbGYuIEluc3RlYWQsIEdsaW1tZXIgd2lsbFxuICAgKiBpbnN0YW50aWF0ZSBuZXcgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5IGFzIGl0IHJlbmRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBvd25lclxuICAgKiBAcGFyYW0gYXJnc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3duZXI6IHVua25vd24sIGFyZ3M6IEFyZ3M8Uz4pIHtcbiAgICBpZiAoREVCVUcgJiYgIShvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnICYmIEFSR1NfU0VULmhhcyhhcmdzKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBtdXN0IHBhc3MgYm90aCB0aGUgb3duZXIgYW5kIGFyZ3MgdG8gc3VwZXIoKSBpbiB5b3VyIGNvbXBvbmVudDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiBZb3UgY2FuIHBhc3MgdGhlbSBkaXJlY3RseSwgb3IgdXNlIC4uLmFyZ3VtZW50cyB0byBwYXNzIGFsbCBhcmd1bWVudHMgdGhyb3VnaC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cbiAgICBERVNUUk9ZSU5HLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgREVTVFJPWUVELnNldCh0aGlzLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZWQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50IGZyb20gaXRzIHBhcmVudCBjb21wb25lbnQuXG4gICAqIFRoZXkgY2FuIGJlIGFjY2Vzc2VkIGluIEphdmFTY3JpcHQgdmlhIGB0aGlzLmFyZ3MuYXJndW1lbnROYW1lYCBhbmQgaW4gdGhlIHRlbXBsYXRlIHZpYSBgQGFyZ3VtZW50TmFtZWAuXG4gICAqXG4gICAqIFNheSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBoYXZlIHR3byBgYXJnc2AsIGBmaXJzdE5hbWVgIGFuZCBgbGFzdE5hbWVgOlxuICAgKlxuICAgKiBgYGBoYnNcbiAgICogPG15LWNvbXBvbmVudCBAZmlyc3ROYW1lPVwiQXJ0aHVyXCIgQGxhc3ROYW1lPVwiRGVudFwiIC8+XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZGVkIHRvIGNhbGN1bGF0ZSBgZnVsbE5hbWVgIGJ5IGNvbWJpbmluZyBib3RoIG9mIHRoZW0sIHlvdSB3b3VsZCBkbzpcbiAgICpcbiAgICogYGBgdHNcbiAgICogZGlkSW5zZXJ0RWxlbWVudCgpIHtcbiAgICogICBjb25zb2xlLmxvZyhgSGksIG15IGZ1bGwgbmFtZSBpcyAke3RoaXMuYXJncy5maXJzdE5hbWV9ICR7dGhpcy5hcmdzLmxhc3ROYW1lfWApO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBXaGlsZSBpbiB0aGUgdGVtcGxhdGUgeW91IGNvdWxkIGRvOlxuICAgKlxuICAgKiBgYGBoYnNcbiAgICogPHA+V2VsY29tZSwge3tAZmlyc3ROYW1lfX0ge3tAbGFzdE5hbWV9fSE8L3A+XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgYXJnczogUmVhZG9ubHk8QXJnczxTPj47XG5cbiAgZ2V0IGlzRGVzdHJveWluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gREVTVFJPWUlORy5nZXQodGhpcykgfHwgZmFsc2U7XG4gIH1cblxuICBnZXQgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERFU1RST1lFRC5nZXQodGhpcykgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NLlxuICAgKi9cbiAgd2lsbERlc3Ryb3koKTogdm9pZCB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxufVxuIl19
@@ -0,0 +1 @@
1
+ export { default } from './src/component';
@@ -0,0 +1,2 @@
1
+ export { default } from './src/component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21wb25lbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vc3JjL2NvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import BaseComponentManager from '../addon/-private/base-component-manager';
2
+ import GlimmerComponent from '../addon/-private/component';
3
+ /**
4
+ * This component manager runs in Glimmer.js environments and extends the base component manager to:
5
+ *
6
+ * 1. Implement a lightweight destruction protocol (currently not deferred, like in Ember)
7
+ * 2. Invoke legacy component lifecycle hooks (didInsertElement and didUpdate)
8
+ */
9
+ export default class GlimmerComponentManager extends BaseComponentManager<GlimmerComponent> {
10
+ capabilities: import("@norith/glimmer-core").ComponentCapabilities;
11
+ destroyComponent(component: GlimmerComponent): void;
12
+ }
@@ -0,0 +1,24 @@
1
+ import { componentCapabilities } from '@norith/glimmer-core';
2
+ import BaseComponentManager from '../addon/-private/base-component-manager';
3
+ import { setDestroying, setDestroyed } from '../addon/-private/component';
4
+ const CAPABILITIES = componentCapabilities('3.13', {
5
+ destructor: true,
6
+ });
7
+ /**
8
+ * This component manager runs in Glimmer.js environments and extends the base component manager to:
9
+ *
10
+ * 1. Implement a lightweight destruction protocol (currently not deferred, like in Ember)
11
+ * 2. Invoke legacy component lifecycle hooks (didInsertElement and didUpdate)
12
+ */
13
+ export default class GlimmerComponentManager extends BaseComponentManager {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.capabilities = CAPABILITIES;
17
+ }
18
+ destroyComponent(component) {
19
+ setDestroying(component);
20
+ component.willDestroy();
21
+ setDestroyed(component);
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21wb25lbnQvc3JjL2NvbXBvbmVudC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE9BQU8sb0JBQW9CLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBeUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUYsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFO0lBQ2pELFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBd0IsU0FBUSxvQkFBc0M7SUFBM0Y7O1FBQ0UsaUJBQVksR0FBRyxZQUFZLENBQUM7SUFPOUIsQ0FBQztJQUxDLGdCQUFnQixDQUFDLFNBQTJCO1FBQzFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBvbmVudENhcGFiaWxpdGllcyB9IGZyb20gJ0Bub3JpdGgvZ2xpbW1lci1jb3JlJztcblxuaW1wb3J0IEJhc2VDb21wb25lbnRNYW5hZ2VyIGZyb20gJy4uL2FkZG9uLy1wcml2YXRlL2Jhc2UtY29tcG9uZW50LW1hbmFnZXInO1xuaW1wb3J0IEdsaW1tZXJDb21wb25lbnQsIHsgc2V0RGVzdHJveWluZywgc2V0RGVzdHJveWVkIH0gZnJvbSAnLi4vYWRkb24vLXByaXZhdGUvY29tcG9uZW50JztcblxuY29uc3QgQ0FQQUJJTElUSUVTID0gY29tcG9uZW50Q2FwYWJpbGl0aWVzKCczLjEzJywge1xuICBkZXN0cnVjdG9yOiB0cnVlLFxufSk7XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgbWFuYWdlciBydW5zIGluIEdsaW1tZXIuanMgZW52aXJvbm1lbnRzIGFuZCBleHRlbmRzIHRoZSBiYXNlIGNvbXBvbmVudCBtYW5hZ2VyIHRvOlxuICpcbiAqIDEuIEltcGxlbWVudCBhIGxpZ2h0d2VpZ2h0IGRlc3RydWN0aW9uIHByb3RvY29sIChjdXJyZW50bHkgbm90IGRlZmVycmVkLCBsaWtlIGluIEVtYmVyKVxuICogMi4gSW52b2tlIGxlZ2FjeSBjb21wb25lbnQgbGlmZWN5Y2xlIGhvb2tzIChkaWRJbnNlcnRFbGVtZW50IGFuZCBkaWRVcGRhdGUpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdsaW1tZXJDb21wb25lbnRNYW5hZ2VyIGV4dGVuZHMgQmFzZUNvbXBvbmVudE1hbmFnZXI8R2xpbW1lckNvbXBvbmVudD4ge1xuICBjYXBhYmlsaXRpZXMgPSBDQVBBQklMSVRJRVM7XG5cbiAgZGVzdHJveUNvbXBvbmVudChjb21wb25lbnQ6IEdsaW1tZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICBzZXREZXN0cm95aW5nKGNvbXBvbmVudCk7XG4gICAgY29tcG9uZW50LndpbGxEZXN0cm95KCk7XG4gICAgc2V0RGVzdHJveWVkKGNvbXBvbmVudCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import _GlimmerComponent, { Args } from '../addon/-private/component';
2
+ export default class GlimmerComponent<S = unknown> extends _GlimmerComponent<S> {
3
+ constructor(owner: object, args: Args<S>);
4
+ }
@@ -0,0 +1,17 @@
1
+ import { setComponentManager, setOwner } from '@norith/glimmer-core';
2
+ import GlimmerComponentManager from './component-manager';
3
+ import _GlimmerComponent from '../addon/-private/component';
4
+ import { DEBUG } from '@glimmer/env';
5
+ export default class GlimmerComponent extends _GlimmerComponent {
6
+ constructor(owner, args) {
7
+ super(owner, args);
8
+ if (DEBUG && !(owner !== null && typeof owner === 'object')) {
9
+ throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);
10
+ }
11
+ setOwner(this, owner);
12
+ }
13
+ }
14
+ setComponentManager((owner) => {
15
+ return new GlimmerComponentManager(owner);
16
+ }, GlimmerComponent);
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvY29tcG9uZW50L3NyYy9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sdUJBQXVCLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxpQkFBMkIsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQThCLFNBQVEsaUJBQW9CO0lBQzdFLFlBQVksS0FBYSxFQUFFLElBQWE7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVuQixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFBRTtZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksa0ZBQWtGLENBQy9LLENBQUM7U0FDSDtRQUVELFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBRUQsbUJBQW1CLENBQUMsQ0FBQyxLQUFTLEVBQUUsRUFBRTtJQUNoQyxPQUFPLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXRDb21wb25lbnRNYW5hZ2VyLCBzZXRPd25lciB9IGZyb20gJ0Bub3JpdGgvZ2xpbW1lci1jb3JlJztcbmltcG9ydCBHbGltbWVyQ29tcG9uZW50TWFuYWdlciBmcm9tICcuL2NvbXBvbmVudC1tYW5hZ2VyJztcbmltcG9ydCBfR2xpbW1lckNvbXBvbmVudCwgeyBBcmdzIH0gZnJvbSAnLi4vYWRkb24vLXByaXZhdGUvY29tcG9uZW50JztcbmltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2xpbW1lckNvbXBvbmVudDxTID0gdW5rbm93bj4gZXh0ZW5kcyBfR2xpbW1lckNvbXBvbmVudDxTPiB7XG4gIGNvbnN0cnVjdG9yKG93bmVyOiBvYmplY3QsIGFyZ3M6IEFyZ3M8Uz4pIHtcbiAgICBzdXBlcihvd25lciwgYXJncyk7XG5cbiAgICBpZiAoREVCVUcgJiYgIShvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IG11c3QgcGFzcyBib3RoIHRoZSBvd25lciBhbmQgYXJncyB0byBzdXBlcigpIGluIHlvdXIgY29tcG9uZW50OiAke3RoaXMuY29uc3RydWN0b3IubmFtZX0uIFlvdSBjYW4gcGFzcyB0aGVtIGRpcmVjdGx5LCBvciB1c2UgLi4uYXJndW1lbnRzIHRvIHBhc3MgYWxsIGFyZ3VtZW50cyB0aHJvdWdoLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0T3duZXIodGhpcywgb3duZXIpO1xuICB9XG59XG5cbnNldENvbXBvbmVudE1hbmFnZXIoKG93bmVyOiB7fSkgPT4ge1xuICByZXR1cm4gbmV3IEdsaW1tZXJDb21wb25lbnRNYW5hZ2VyKG93bmVyKTtcbn0sIEdsaW1tZXJDb21wb25lbnQpO1xuIl19
@@ -0,0 +1 @@
1
+ import './interactive';
@@ -0,0 +1,2 @@
1
+ import './interactive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21wb25lbnQvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi9pbnRlcmFjdGl2ZSc7XG4iXX0=