ember-inspector 4.11.0-alpha.2024.3.9 → 4.11.0-alpha.2024.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. package/.github/dependabot.yml +1 -0
  2. package/.github/workflows/build.yml +5 -26
  3. package/.github/workflows/plan-release.yml +83 -0
  4. package/.github/workflows/publish.yml +58 -0
  5. package/app/components/component-tree-arg.js +9 -0
  6. package/app/components/component-tree-item.hbs +18 -2
  7. package/app/components/object-inspector/dependent-keys.hbs +9 -5
  8. package/app/components/object-inspector/properties-all.hbs +1 -0
  9. package/app/components/object-inspector/properties-base.js +10 -0
  10. package/app/components/object-inspector/properties-grouped.hbs +1 -0
  11. package/app/components/object-inspector/property.hbs +12 -1
  12. package/app/components/object-inspector/property.ts +4 -2
  13. package/app/components/object-inspector.hbs +16 -2
  14. package/app/components/object-inspector.js +14 -0
  15. package/app/controllers/component-tree.js +54 -3
  16. package/app/routes/component-tree.js +0 -6
  17. package/app/services/adapters/web-extension.js +3 -3
  18. package/app/services/port.js +4 -0
  19. package/app/styles/component_tree.scss +13 -0
  20. package/app/utils/parse-text.ts +1 -0
  21. package/dist/bookmarklet/panes-3-16-0/assets/{chunk.143.ac621af5331b75527946.js → chunk.143.26f04046dc6fc0e116a0.js} +4 -4
  22. package/dist/{firefox/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → bookmarklet/panes-3-16-0/assets/chunk.178.38e53a46589969f0228d.js} +3 -3
  23. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.css +13 -0
  24. package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.js +28 -24
  25. package/dist/bookmarklet/panes-3-16-0/assets/svg/code-source.svg +9 -0
  26. package/dist/bookmarklet/panes-3-16-0/assets/vendor.css +33 -0
  27. package/dist/bookmarklet/panes-3-16-0/assets/vendor.js +12 -10
  28. package/dist/bookmarklet/panes-3-16-0/ember_debug.js +453 -559
  29. package/dist/bookmarklet/panes-3-16-0/index.html +2 -2
  30. package/dist/chrome/manifest.json +2 -2
  31. package/dist/{firefox/panes-3-16-0/assets/chunk.143.ac621af5331b75527946.js → chrome/panes-3-16-0/assets/chunk.143.26f04046dc6fc0e116a0.js} +4 -4
  32. package/dist/{bookmarklet/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → chrome/panes-3-16-0/assets/chunk.178.38e53a46589969f0228d.js} +3 -3
  33. package/dist/chrome/panes-3-16-0/assets/ember-inspector.css +13 -0
  34. package/dist/chrome/panes-3-16-0/assets/ember-inspector.js +28 -24
  35. package/dist/chrome/panes-3-16-0/assets/svg/code-source.svg +9 -0
  36. package/dist/chrome/panes-3-16-0/assets/vendor.css +33 -0
  37. package/dist/chrome/panes-3-16-0/assets/vendor.js +12 -10
  38. package/dist/chrome/panes-3-16-0/ember_debug.js +453 -559
  39. package/dist/chrome/panes-3-16-0/index.html +2 -2
  40. package/dist/firefox/manifest.json +2 -2
  41. package/dist/{chrome/panes-3-16-0/assets/chunk.143.ac621af5331b75527946.js → firefox/panes-3-16-0/assets/chunk.143.26f04046dc6fc0e116a0.js} +4 -4
  42. package/dist/{websocket/assets/chunk.178.e6b2f8bb19b9f072aa49.js → firefox/panes-3-16-0/assets/chunk.178.38e53a46589969f0228d.js} +3 -3
  43. package/dist/firefox/panes-3-16-0/assets/ember-inspector.css +13 -0
  44. package/dist/firefox/panes-3-16-0/assets/ember-inspector.js +28 -24
  45. package/dist/firefox/panes-3-16-0/assets/svg/code-source.svg +9 -0
  46. package/dist/firefox/panes-3-16-0/assets/vendor.css +33 -0
  47. package/dist/firefox/panes-3-16-0/assets/vendor.js +12 -10
  48. package/dist/firefox/panes-3-16-0/ember_debug.js +453 -559
  49. package/dist/firefox/panes-3-16-0/index.html +2 -2
  50. package/dist/websocket/assets/{chunk.143.ac621af5331b75527946.js → chunk.143.26f04046dc6fc0e116a0.js} +4 -4
  51. package/dist/{chrome/panes-3-16-0/assets/chunk.178.e6b2f8bb19b9f072aa49.js → websocket/assets/chunk.178.38e53a46589969f0228d.js} +3 -3
  52. package/dist/websocket/assets/ember-inspector.css +13 -0
  53. package/dist/websocket/assets/ember-inspector.js +28 -24
  54. package/dist/websocket/assets/svg/code-source.svg +9 -0
  55. package/dist/websocket/assets/vendor.css +33 -0
  56. package/dist/websocket/assets/vendor.js +12 -10
  57. package/dist/websocket/ember_debug.js +453 -559
  58. package/dist/websocket/index.html +2 -2
  59. package/ember-cli-build.js +3 -4
  60. package/ember_debug/adapters/basic.js +4 -4
  61. package/ember_debug/adapters/web-extension.js +9 -5
  62. package/ember_debug/general-debug.js +3 -1
  63. package/ember_debug/libs/capture-render-tree.js +7 -426
  64. package/ember_debug/libs/render-tree.js +210 -31
  65. package/ember_debug/libs/view-inspection.js +28 -0
  66. package/ember_debug/object-inspector.js +92 -109
  67. package/ember_debug/route-debug.js +2 -3
  68. package/ember_debug/utils/ember.js +16 -0
  69. package/ember_debug/utils/get-object-name.js +4 -0
  70. package/ember_debug/utils/name-functions.js +1 -1
  71. package/ember_debug/utils/type-check.js +82 -12
  72. package/ember_debug/utils/version.js +37 -0
  73. package/ember_debug/view-debug.js +1 -1
  74. package/lib/ui/addon/styles/_goto-source.scss +30 -0
  75. package/lib/ui/addon/styles/addon.scss +1 -0
  76. package/lib/ui/addon/styles/toolbar/_index.scss +4 -0
  77. package/package.json +2 -1
  78. package/public/assets/svg/code-source.svg +9 -0
  79. package/skeletons/web-extension/manifest.json +2 -2
  80. package/tests/acceptance/object-inspector-test.js +68 -0
  81. package/tests/ember_debug/object-inspector-test.js +18 -8
  82. package/tests/ember_debug/view-debug-test.js +211 -69
  83. package/tests/index.html +1 -0
@@ -150,15 +150,16 @@ define("ember-debug/adapters/basic", ["exports", "ember-debug/utils/on-ready", "
150
150
  }
151
151
 
152
152
  /**
153
- Inspect a specific DOM node. This usually
153
+ Inspect a js value or specific DOM node. This usually
154
154
  means using the current environment's tools
155
155
  to inspect the node in the DOM.
156
156
  For example, in chrome, `inspect(node)`
157
157
  will open the Elements tab in dev tools
158
158
  and highlight the DOM node.
159
- @param {Node} node
159
+ For functions, it will open the sources tab and goto the definition
160
+ @param {Node|Function} node
160
161
  */
161
- inspectNode( /* node */) {}
162
+ inspectValue( /* value */) {}
162
163
  _messageReceived(message) {
163
164
  this._messageCallbacks.forEach(callback => {
164
165
  callback(message);
@@ -344,15 +345,19 @@ define("ember-debug/adapters/web-extension", ["exports", "ember-debug/adapters/b
344
345
  // "clone" them through postMessage unless they are converted to a
345
346
  // native array.
346
347
  options = deepClone(options);
347
- this._chromePort.postMessage(options);
348
+ try {
349
+ this._chromePort.postMessage(options);
350
+ } catch (e) {
351
+ console.log('failed to send message', e);
352
+ }
348
353
  }
349
354
 
350
355
  /**
351
356
  * Open the devtools "Elements" and select an DOM node.
352
357
  *
353
- * @param {Node} node The DOM node to select
358
+ * @param {Node|Function} value The DOM node to select
354
359
  */
355
- inspectNode(node) {
360
+ inspectValue(value) {
356
361
  // NOTE:
357
362
  //
358
363
  // Basically, we are just trying to call `inspect(node)` here.
@@ -373,8 +378,8 @@ define("ember-debug/adapters/web-extension", ["exports", "ember-debug/adapters/b
373
378
  // so that the extension can find it.
374
379
 
375
380
  let name = `__EMBER_INSPECTOR_${(Math.random() * 100000000).toFixed(0)}`;
376
- window[name] = node;
377
- this.namespace.port.send('view:inspectDOMNode', {
381
+ window[name] = value;
382
+ this.namespace.port.send('view:inspectJSValue', {
378
383
  name
379
384
  });
380
385
  }
@@ -5294,7 +5299,7 @@ define("ember-debug/general-debug", ["exports", "ember-debug/debug-port", "ember
5294
5299
  */
5295
5300
  getLibraries() {
5296
5301
  this.sendMessage('libraries', {
5297
- libraries: _ember.default.libraries._registry
5302
+ libraries: _ember.default.libraries?._registry
5298
5303
  });
5299
5304
  },
5300
5305
  getEmberCliConfig() {
@@ -5323,7 +5328,7 @@ define("ember-debug/general-debug", ["exports", "ember-debug/debug-port", "ember
5323
5328
  return null;
5324
5329
  }
5325
5330
  });
5326
- define("ember-debug/libs/capture-render-tree", ["exports", "ember-debug/utils/version", "ember-debug/utils/ember"], function (_exports, _version, _ember) {
5331
+ define("ember-debug/libs/capture-render-tree", ["exports", "ember-debug/utils/ember"], function (_exports, _ember) {
5327
5332
  "use strict";
5328
5333
 
5329
5334
  Object.defineProperty(_exports, "__esModule", {
@@ -5331,401 +5336,18 @@ define("ember-debug/libs/capture-render-tree", ["exports", "ember-debug/utils/ve
5331
5336
  });
5332
5337
  _exports.default = void 0;
5333
5338
  /* eslint-disable no-console, no-inner-declarations */
5334
-
5335
- let captureRenderTree;
5336
-
5339
+ let capture = _ember.captureRenderTree;
5337
5340
  // Ember 3.14+ comes with debug render tree, but the version in 3.14.0/3.14.1 is buggy
5338
- if (_ember.default._captureRenderTree && (0, _version.compareVersion)(_ember.default.VERSION, '3.14.1') > 0) {
5339
- if (_ember.default.ENV._DEBUG_RENDER_TREE) {
5340
- captureRenderTree = _ember.default._captureRenderTree;
5341
+ if (_ember.captureRenderTree) {
5342
+ if ((0, _ember.getEnv)()._DEBUG_RENDER_TREE) {
5343
+ capture = _ember.captureRenderTree;
5341
5344
  } else {
5342
- captureRenderTree = function captureRenderTree() {
5345
+ capture = function captureRenderTree() {
5343
5346
  return [];
5344
5347
  };
5345
5348
  }
5346
- } else {
5347
- /**
5348
- * Best-effort polyfill for `Ember._captureRenderTree`.
5349
- *
5350
- * Just like the Ember API, it takes an owner (`ApplicationInstance`, specifically)
5351
- * and return an array of render nodes:
5352
- *
5353
- * interface CapturedRenderNode {
5354
- * id: string;
5355
- * type: 'outlet' | 'engine' | 'route-template' | 'component';
5356
- * name: string;
5357
- * args: {
5358
- * named: Dict<unknown>;
5359
- * positional: unknown[];
5360
- * };
5361
- * instance: unknown;
5362
- * template: Option<string>;
5363
- * bounds: Option<{
5364
- * parentElement: Simple.Element;
5365
- * firstNode: Simple.Node;
5366
- * lastNode: Simple.Node;
5367
- * }>;
5368
- * children: CapturedRenderNode[];
5369
- * }
5370
- *
5371
- * While the API is identical, there are some differences and limitations:
5372
- *
5373
- * 1. `args` property is not available (it always report empty args).
5374
- * 2. `bounds` property is only available on component nodes (`null` everywhere else).
5375
- * 3. `{{mount}}` does not insert an `engine` node.
5376
- * 4. `Ember.Component` (classic components) are the only type of component in the tree
5377
- * (other components are skipped over).
5378
- * 5. Ordering of `children` may be different (but this is also not guarenteed in the
5379
- * Ember API).
5380
- */
5381
-
5382
- const {
5383
- Controller,
5384
- ViewUtils,
5385
- get,
5386
- getOwner,
5387
- guidFor
5388
- } = _ember.default;
5389
- const {
5390
- getRootViews,
5391
- getChildViews,
5392
- getViewBounds
5393
- } = ViewUtils;
5394
-
5395
- /**
5396
- * We are building the final tree by doing the following steps:
5397
- *
5398
- * 1. Get the "outlet state" tree from the router.
5399
- * 2. Collect the "top level" components. That is, components rendered directly from within
5400
- * a route template.
5401
- * 3. Do an "interleaved walk" down the outlet and (classic) component tree and map things
5402
- * into render nodes.
5403
- * 4. Return the array of render nodes we captured.
5404
- *
5405
- * Usually, this function returns an array of exactly one render node, which is the "root"
5406
- * outlet. However, sometimes there may be other top-level components in the app (e.g.
5407
- * rendered using the `Ember.Component#appendTo` API).
5408
- */
5409
- captureRenderTree = function captureRenderTree(owner) {
5410
- let tree = [];
5411
- let outletState = getOutletState(owner);
5412
- let components = getTopLevelComponents(owner);
5413
- if (outletState && components) {
5414
- tree.push(captureOutlet('root', owner, components, outletState));
5415
- }
5416
- return tree;
5417
- };
5418
-
5419
- /**
5420
- * Get the "outlet state" tree from the router. It corresponds to the "settled",
5421
- * app state after resolving all the hooks, redirects, etc. The rendering layer
5422
- * takes this tree from the router and render it on screen.
5423
- *
5424
- * It has the following format:
5425
- *
5426
- * interface OutletState {
5427
- * render: {
5428
- * // The current owner, could be the app or an engine
5429
- * owner: Owner;
5430
- *
5431
- * // The name of the route
5432
- * name: string;
5433
- *
5434
- * // The controller for the route
5435
- * controller: Controller;
5436
- *
5437
- * // The template (or template factory?) for the route (can this really be undefined?)
5438
- * template: OwnedTemplate | undefined;
5439
- *
5440
- * // The name of the outlet this was rendered into (in the parent route template)
5441
- * outlet: string;
5442
- *
5443
- * // The name of the parent route (we don't use this)
5444
- * into: string | undefined;
5445
- * },
5446
- *
5447
- * // The children outlets of this route, keyed by the outlet names (e.g. "main", "sidebar", ...)
5448
- * outlets: Dict<OutletState | undefined>;
5449
- * }
5450
- *
5451
- * This function returns the "root" outlet state.
5452
- */
5453
- function getOutletState(owner) {
5454
- try {
5455
- // eslint-disable-next-line ember/no-private-routing-service
5456
- return owner.lookup('router:main')._toplevelView.state.ref.value();
5457
- } catch (error) {
5458
- console.log('[Ember Inspector] failed to capture render tree');
5459
- console.log(error);
5460
- return undefined;
5461
- }
5462
- }
5463
-
5464
- /**
5465
- * Collect the "top level" components. That is, components rendered directly
5466
- * from within a route template.
5467
- *
5468
- * We do this by walking the classic component tree and identify components
5469
- * that has its "target" (~= the parent template's `{{this}}` object) set to
5470
- * a controller (or undefined, for root components rendered outside of the
5471
- * application route).
5472
- *
5473
- * This function returns a `Map` keyed by controllers (`undefiend` is also a
5474
- * possible key) to arrays of top-level components for that route/controller.
5475
- */
5476
- function getTopLevelComponents(owner) {
5477
- try {
5478
- let map = new Map();
5479
- collectComponentsByController(map, null, getRootViews(owner));
5480
- return map;
5481
- } catch (error) {
5482
- console.log('[Ember Inspector] failed to capture render tree');
5483
- console.log(error);
5484
- return undefined;
5485
- }
5486
- }
5487
-
5488
- /**
5489
- * Returns the "target" of a (classic) component.
5490
- */
5491
- function targetForComponent(component) {
5492
- return get(component, '_target') || get(component, '_targetObject');
5493
- }
5494
-
5495
- /**
5496
- * Recursively walk an array of components and add any "top level" components
5497
- * to the map keyed by their controller.
5498
- */
5499
- function collectComponentsByController(map, controller, components) {
5500
- components.forEach(component => {
5501
- let target = targetForComponent(component);
5502
- if (target === undefined || target instanceof Controller) {
5503
- /**
5504
- * If our parent is already added, don't add ourself again.
5505
- *
5506
- * This is to prevent something like this:
5507
- *
5508
- * {{!-- app/templates/application.hbs}}
5509
- * <Parent>
5510
- * <Child />
5511
- * </Parent>
5512
- *
5513
- * Without this check, both the parent and the yielded child will be
5514
- * considered "top level" since they both have the controller as their
5515
- * target.
5516
- */
5517
- if (target !== controller) {
5518
- if (!map.has(target)) {
5519
- map.set(target, []);
5520
- }
5521
- map.get(target).push(component);
5522
- }
5523
- collectComponentsByController(map, target, getChildViews(component));
5524
- } else {
5525
- collectComponentsByController(map, controller, getChildViews(component));
5526
- }
5527
- });
5528
- }
5529
- const EMPTY_ARGS = {
5530
- named: Object.create(null),
5531
- positional: []
5532
- };
5533
-
5534
- /**
5535
- * Return the module name (e.g. `my-app/templates/application.hbs`) for a
5536
- * template or template factory, if available. This may not be present for,
5537
- * e.g. templates compiled using the "inline" `hbs` tagged string method.
5538
- */
5539
- function nameForTemplate(template) {
5540
- if (template.meta) {
5541
- // Factory
5542
- return template.meta.moduleName || null;
5543
- } else if (template.referrer) {
5544
- // Instance
5545
- return template.referrer.moduleName || null;
5546
- } else {
5547
- return null;
5548
- }
5549
- }
5550
-
5551
- /**
5552
- * Walk an outlet tree (the last parameter) and map its content into render nodes.
5553
- *
5554
- * For each level of the outlet tree, we also have to walk the (classic) component
5555
- * tree to attach any components for the current level (and their children) to the
5556
- * resulting render nodes tree.
5557
- *
5558
- * We also check if the owner has changed between the current level and the previous
5559
- * level, and if so, we infer that we must have just crossed an engine boundary and
5560
- * insert an engine render node to account for that.
5561
- *
5562
- * Because we don't have a good way to generate a stable ID for the outlet nodes, we
5563
- * also pass down a "path" of the routes/outlets we have encountered so far which we
5564
- * use to generate the ID.
5565
- */
5566
- function captureOutlet(path, owner, components, {
5567
- outlets,
5568
- render
5569
- }) {
5570
- let outlet = {
5571
- id: `render-node:${path}@${render.outlet}`,
5572
- type: 'outlet',
5573
- name: render.outlet,
5574
- args: EMPTY_ARGS,
5575
- instance: undefined,
5576
- template: null,
5577
- bounds: null,
5578
- children: []
5579
- };
5580
- let parent = outlet;
5581
- if (owner !== render.owner) {
5582
- let engine = {
5583
- id: `render-node:${guidFor(render.owner)}`,
5584
- type: 'engine',
5585
- name: render.owner.mountPoint,
5586
- args: EMPTY_ARGS,
5587
- instance: render.owner,
5588
- template: null,
5589
- bounds: null,
5590
- children: []
5591
- };
5592
- parent.children.push(engine);
5593
- parent = engine;
5594
- }
5595
- let subpath = `${path}@${render.outlet}/${render.name}`;
5596
- let route = {
5597
- id: `render-node:${subpath}`,
5598
- type: 'route-template',
5599
- name: render.name,
5600
- args: EMPTY_ARGS,
5601
- instance: render.controller,
5602
- template: nameForTemplate(render.template),
5603
- bounds: null,
5604
- children: []
5605
- };
5606
- parent.children.push(route);
5607
- parent = route;
5608
- let childOutlets = Object.keys(outlets).map(name => captureOutlet(subpath, render.owner, components, outlets[name]));
5609
- let childComponents = captureComponents(components.get(render.controller) || [], render.controller);
5610
- parent.children.push(...mergeOutletChildren(render.controller, childOutlets, childComponents));
5611
- return outlet;
5612
- }
5613
-
5614
- /**
5615
- * Its is possible to nest an outlet inside a component, one pretty common example
5616
- * is a "layout" component:
5617
- *
5618
- * <SidebarWrapper>
5619
- * {{outlet "sidebar"}}
5620
- * </SidebarWrapper>
5621
- *
5622
- * On the other hand, it's not possible to put a component inside an outlet anymore
5623
- * when we get to this point. Try to find a suitable parent for each child outlet
5624
- * taking the above into account.
5625
- */
5626
- function mergeOutletChildren(controller, outlets, components) {
5627
- let merged = [];
5628
- for (let outlet of outlets) {
5629
- if (controller) {
5630
- let parentComponent = findOutletComponentParent(outlet.children);
5631
- if (controllerForComponent(parentComponent) === controller) {
5632
- let parentNode = findOutletComponentNode(components, parentComponent);
5633
- if (parentNode) {
5634
- parentNode.children.unshift(outlet);
5635
- continue;
5636
- }
5637
- }
5638
- }
5639
- merged.push(outlet);
5640
- }
5641
- merged.push(...components);
5642
- return merged;
5643
- }
5644
- function findOutletComponentParent(nodes) {
5645
- let result;
5646
- for (let node of nodes) {
5647
- if (node.type === 'component') {
5648
- result = node.instance.parentView;
5649
- } else if (node.type === 'engine' || node.type === 'route-template') {
5650
- result = findOutletComponentParent(node.children);
5651
- }
5652
- if (result !== undefined) {
5653
- return result;
5654
- }
5655
- }
5656
- }
5657
- function findOutletComponentNode(nodes, instance) {
5658
- let result;
5659
- for (let node of nodes) {
5660
- if (node.type === 'component') {
5661
- if (node.instance === instance) {
5662
- result = node;
5663
- } else {
5664
- result = findOutletComponentNode(node.children, instance);
5665
- }
5666
- }
5667
- if (result !== undefined) {
5668
- return result;
5669
- }
5670
- }
5671
- }
5672
-
5673
- /**
5674
- * Returns the name of a (classic) component.
5675
- */
5676
- function nameForComponent(component) {
5677
- // remove "component:" prefix
5678
- return component._debugContainerKey.slice(10);
5679
- }
5680
-
5681
- /**
5682
- * Returns the nearest controller of a (classic) component. This is so that we know
5683
- * whether a given component belongs to the current level (the route that we are
5684
- * processing right now) or not.
5685
- */
5686
- function controllerForComponent(component) {
5687
- let target = component;
5688
- while (target && !(target instanceof Controller)) {
5689
- target = targetForComponent(target);
5690
- }
5691
- return target;
5692
- }
5693
-
5694
- /**
5695
- * Returns the template (or template factory?) for a (classic) component.
5696
- */
5697
- function templateForComponent(component) {
5698
- let layout = get(component, 'layout');
5699
- if (layout) {
5700
- return nameForTemplate(layout);
5701
- }
5702
- let layoutName = get(component, 'layoutName');
5703
- if (layoutName) {
5704
- let owner = getOwner(component);
5705
- let template = owner.lookup(`template:${layoutName}`);
5706
- return nameForTemplate(template);
5707
- }
5708
- return null;
5709
- }
5710
-
5711
- /**
5712
- * Return the render node for a given (classic) component, and its children up
5713
- * until the next route boundary.
5714
- */
5715
- function captureComponents(components, controller) {
5716
- return components.filter(component => controllerForComponent(component) === controller).map(component => ({
5717
- id: `render-node:${guidFor(component)}`,
5718
- type: 'component',
5719
- name: nameForComponent(component),
5720
- args: EMPTY_ARGS,
5721
- instance: component,
5722
- template: templateForComponent(component),
5723
- bounds: getViewBounds(component),
5724
- children: captureComponents(getChildViews(component), controller)
5725
- }));
5726
- }
5727
5349
  }
5728
- var _default = captureRenderTree;
5350
+ var _default = capture;
5729
5351
  _exports.default = _default;
5730
5352
  });
5731
5353
  define("ember-debug/libs/promise-assembler", ["exports", "ember-debug/models/promise", "ember-debug/utils/rsvp", "ember-debug/utils/base-object", "ember-debug/utils/evented"], function (_exports, _promise, _rsvp, _baseObject, _evented) {
@@ -5893,7 +5515,7 @@ define("ember-debug/libs/promise-assembler", ["exports", "ember-debug/models/pro
5893
5515
  });
5894
5516
  }
5895
5517
  });
5896
- define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-render-tree", "ember-debug/utils/ember/object/internals", "ember-debug/utils/ember/loader"], function (_exports, _captureRenderTree, _internals, _loader) {
5518
+ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-render-tree", "ember-debug/utils/ember/object/internals", "ember-debug/utils/ember/loader", "ember-debug/utils/type-check", "ember-debug/utils/version", "ember-debug/utils/ember"], function (_exports, _captureRenderTree, _internals, _loader, _typeCheck, _version, _ember) {
5897
5519
  "use strict";
5898
5520
 
5899
5521
  Object.defineProperty(_exports, "__esModule", {
@@ -5911,6 +5533,8 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5911
5533
  } catch (e) {
5912
5534
  // nope
5913
5535
  }
5536
+ this.DESTROY = (0, _loader.emberSafeRequire)('@glimmer/util')?.DESTROY;
5537
+ this.registerDestructor = (0, _loader.emberSafeRequire)('@glimmer/destroyable')?.registerDestructor || (0, _loader.emberSafeRequire)('@ember/destroyable')?.registerDestructor || (0, _loader.emberSafeRequire)('@ember/runtime')?.registerDestructor;
5914
5538
  this.debugRenderTree = owner.lookup('renderer:-dom')?.debugRenderTree || owner.lookup('service:-glimmer-environment')._debugRenderTree;
5915
5539
  this.NewElementBuilder = this.runtime.NewElementBuilder;
5916
5540
  this.patch();
@@ -5922,8 +5546,8 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5922
5546
  patch() {
5923
5547
  const self = this;
5924
5548
  const NewElementBuilder = this.NewElementBuilder;
5925
- const remoteStack = [];
5926
5549
  const componentStack = [];
5550
+ const enableModifierSupport = (0, _version.isInVersionSpecifier)('>3.28.0', _ember.VERSION);
5927
5551
  function createRef(value) {
5928
5552
  if (self.reference.createUnboundRef) {
5929
5553
  return self.reference.createUnboundRef(value);
@@ -5931,6 +5555,15 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5931
5555
  return value;
5932
5556
  }
5933
5557
  }
5558
+ function createArgs(args) {
5559
+ if (self.reference.createUnboundRef) {
5560
+ return args;
5561
+ } else {
5562
+ return {
5563
+ value: () => args
5564
+ };
5565
+ }
5566
+ }
5934
5567
  const appendChild = this.debugRenderTree.appendChild;
5935
5568
  this.debugRenderTree.appendChild = function (node, state) {
5936
5569
  if (node.type === 'component') {
@@ -5944,7 +5577,7 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5944
5577
  if (node?.type === 'component') {
5945
5578
  componentStack.pop();
5946
5579
  }
5947
- exit.call(this, state);
5580
+ return exit.call(this, state);
5948
5581
  };
5949
5582
  const didAppendNode = NewElementBuilder.prototype.didAppendNode;
5950
5583
  NewElementBuilder.prototype.didAppendNode = function (...args) {
@@ -5956,11 +5589,79 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5956
5589
  pushElement.call(this, ...args);
5957
5590
  args[0].__emberInspectorParentNode = componentStack.at(-1);
5958
5591
  };
5592
+ const pushModifiers = NewElementBuilder.prototype.pushModifiers;
5593
+ if (enableModifierSupport) {
5594
+ NewElementBuilder.prototype.pushModifiers = function (modifiers) {
5595
+ const debugRenderTree = self.debugRenderTree;
5596
+ if (debugRenderTree) {
5597
+ modifiers = modifiers || [];
5598
+ const modifier = modifiers[0];
5599
+ let element = null;
5600
+ if (modifiers.length) {
5601
+ element = modifier[1]?.element || modifier.state.element;
5602
+ }
5603
+ for (const modifier of modifiers) {
5604
+ const state = {};
5605
+ const modifierState = modifier.state?.instance || modifier.state || modifier[1];
5606
+ const instance = modifierState?.instance || modifierState?.delegate;
5607
+ let name = modifier.definition?.resolvedName || modifierState?.debugName || instance?.name;
5608
+ if (!name) {
5609
+ try {
5610
+ name = modifier.manager?.getDebugName?.();
5611
+ } catch (e) {
5612
+ // failed
5613
+ }
5614
+ name = name || 'unknown-modifier';
5615
+ }
5616
+ const args = {
5617
+ positional: [],
5618
+ named: {}
5619
+ };
5620
+ const positional = modifierState?.args?.positional?.references || modifierState?.args?.positional || [];
5621
+ for (const value of positional) {
5622
+ if (value && value[self.reference.REFERENCE]) {
5623
+ args.positional.push(value);
5624
+ } else {
5625
+ args.positional.push(createRef(value));
5626
+ }
5627
+ }
5628
+ let named = modifierState?.args?.named;
5629
+ if (!self.reference.createUnboundRef) {
5630
+ try {
5631
+ named = modifierState?.args?.named?.constructor;
5632
+ } catch (e) {
5633
+ //
5634
+ }
5635
+ try {
5636
+ named = named || modifierState?.args?.named?.map;
5637
+ } catch (e) {
5638
+ //
5639
+ }
5640
+ }
5641
+ for (const [key, value] of Object.entries(named || {})) {
5642
+ args.named[key] = createRef(value);
5643
+ }
5644
+ debugRenderTree?.create(state, {
5645
+ type: 'modifier',
5646
+ name,
5647
+ args: createArgs(args),
5648
+ instance: instance
5649
+ });
5650
+ debugRenderTree?.didRender(state, {
5651
+ parentElement: () => element.parentElement,
5652
+ firstNode: () => element,
5653
+ lastNode: () => element
5654
+ });
5655
+ self.registerDestructor(modifier.state, () => {
5656
+ debugRenderTree?.willDestroy(state);
5657
+ });
5658
+ }
5659
+ }
5660
+ return pushModifiers.call(this, modifiers);
5661
+ };
5662
+ }
5959
5663
  const pushRemoteElement = NewElementBuilder.prototype.pushRemoteElement;
5960
5664
  NewElementBuilder.prototype.pushRemoteElement = function (element, guid, insertBefore) {
5961
- remoteStack.push({
5962
- element
5963
- });
5964
5665
  const ref = createRef(element);
5965
5666
  const capturedArgs = {
5966
5667
  positional: [ref],
@@ -5969,16 +5670,24 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5969
5670
  if (insertBefore) {
5970
5671
  capturedArgs.named.insertBefore = insertBefore;
5971
5672
  }
5972
- const inElementArgs = self.reference.createUnboundRef ? capturedArgs : {
5973
- value() {
5974
- return capturedArgs;
5975
- }
5976
- };
5977
5673
  const debugRenderTree = self.debugRenderTree;
5978
- debugRenderTree?.create(remoteStack.at(-1), {
5674
+ const r = pushRemoteElement.call(this, element, guid, insertBefore);
5675
+ const block = this.blockStack.current;
5676
+ if (this.DESTROY) {
5677
+ const destructor = block[this.DESTROY];
5678
+ block[this.DESTROY] = function () {
5679
+ self.debugRenderTree?.willDestroy(block);
5680
+ destructor.call(this);
5681
+ };
5682
+ } else {
5683
+ self.registerDestructor?.(block, () => {
5684
+ self.debugRenderTree?.willDestroy(block);
5685
+ });
5686
+ }
5687
+ debugRenderTree?.create(block, {
5979
5688
  type: 'keyword',
5980
5689
  name: 'in-element',
5981
- args: inElementArgs,
5690
+ args: createArgs(capturedArgs),
5982
5691
  instance: {
5983
5692
  args: {
5984
5693
  named: {
@@ -5991,20 +5700,19 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
5991
5700
  }
5992
5701
  }
5993
5702
  });
5994
- return pushRemoteElement.call(this, element, guid, insertBefore);
5703
+ return r;
5995
5704
  };
5996
5705
  const popRemoteElement = NewElementBuilder.prototype.popRemoteElement;
5997
5706
  NewElementBuilder.prototype.popRemoteElement = function (...args) {
5998
- const element = this.element;
5707
+ const block = this.blockStack.current;
5999
5708
  popRemoteElement.call(this, ...args);
6000
5709
  const parentElement = this.element;
6001
5710
  const debugRenderTree = self.debugRenderTree;
6002
- debugRenderTree?.didRender(remoteStack.at(-1), {
5711
+ debugRenderTree?.didRender(block, {
6003
5712
  parentElement: () => parentElement,
6004
- firstNode: () => element,
6005
- lastNode: () => element
5713
+ firstNode: () => block.firstNode(),
5714
+ lastNode: () => block.lastNode()
6006
5715
  });
6007
- remoteStack.pop();
6008
5716
  };
6009
5717
  this.debugRenderTreeFunctions = {
6010
5718
  appendChild,
@@ -6014,7 +5722,8 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6014
5722
  pushElement,
6015
5723
  pushRemoteElement,
6016
5724
  popRemoteElement,
6017
- didAppendNode
5725
+ didAppendNode,
5726
+ pushModifiers
6018
5727
  };
6019
5728
  }
6020
5729
  teardown() {
@@ -6023,6 +5732,7 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6023
5732
  }
6024
5733
  Object.assign(this.debugRenderTree, this.debugRenderTreeFunctions);
6025
5734
  Object.assign(this.NewElementBuilder.prototype, this.NewElementBuilderFunctions);
5735
+ this.NewElementBuilderFunctions = null;
6026
5736
  }
6027
5737
  require(req) {
6028
5738
  return requireModule.has(req) ? requireModule(req) : _loader.EmberLoader.require(req);
@@ -6051,7 +5761,8 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6051
5761
  try {
6052
5762
  this.inElementSupport = new InElementSupportProvider(owner);
6053
5763
  } catch (e) {
6054
- console.error('failed to setup in element support', e);
5764
+ console.error('failed to setup in element support');
5765
+ console.error(e);
6055
5766
  // not supported
6056
5767
  }
6057
5768
 
@@ -6257,17 +5968,45 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6257
5968
  this.previouslyRetainedObjects = this.retainedObjects || new Map();
6258
5969
  this.retainedObjects = new Map();
6259
5970
  }
6260
- _createTemplateOnlyComponent(args) {
5971
+ _createSimpleInstance(name, args) {
6261
5972
  const obj = Object.create(null);
6262
5973
  obj.args = args;
6263
5974
  obj.constructor = {
6264
- name: 'TemplateOnlyComponent',
5975
+ name: name,
6265
5976
  comment: 'fake constructor'
6266
5977
  };
6267
5978
  return obj;
6268
5979
  }
5980
+ _insertHtmlElementNode(node, parentNode) {
5981
+ const element = node.bounds.firstNode;
5982
+ const htmlNode = {
5983
+ id: node.id + 'html-element',
5984
+ type: 'html-element',
5985
+ name: element.tagName.toLowerCase(),
5986
+ instance: element,
5987
+ template: null,
5988
+ bounds: {
5989
+ firstNode: element,
5990
+ lastNode: element,
5991
+ parentElement: element.parentElement
5992
+ },
5993
+ args: {
5994
+ named: {},
5995
+ positional: []
5996
+ },
5997
+ children: []
5998
+ };
5999
+ const idx = parentNode.children.indexOf(node);
6000
+ parentNode.children.splice(idx, 0, htmlNode);
6001
+ return this._serializeRenderNode(htmlNode, parentNode);
6002
+ }
6269
6003
  _serializeRenderNodes(nodes, parentNode = null) {
6270
- return nodes.map(node => this._serializeRenderNode(node, parentNode));
6004
+ const mapped = [];
6005
+ // nodes can be mutated during serialize, which is why we use indexing instead of .map
6006
+ for (let i = 0; i < nodes.length; i++) {
6007
+ mapped.push(this._serializeRenderNode(nodes[i], parentNode));
6008
+ }
6009
+ return mapped;
6271
6010
  }
6272
6011
  _serializeRenderNode(node, parentNode = null) {
6273
6012
  if (!node.id.startsWith(this.renderNodeIdPrefix)) {
@@ -6300,10 +6039,38 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6300
6039
  if (parentNode) {
6301
6040
  this.parentNodes[node.id] = parentNode;
6302
6041
  }
6042
+ if (node.type === 'html-element') {
6043
+ // show set attributes in inspector
6044
+ Array.from(node.instance.attributes).forEach(attr => {
6045
+ node.args.named[attr.nodeName] = attr.nodeValue;
6046
+ });
6047
+ // move modifiers and components into the element children
6048
+ parentNode.children.forEach(child => {
6049
+ if (child.bounds.parentElement === node.instance || child.type === 'modifier' && child.bounds.firstNode === node.instance) {
6050
+ node.children.push(child);
6051
+ }
6052
+ });
6053
+ node.children.forEach(child => {
6054
+ const idx = parentNode.children.indexOf(child);
6055
+ if (idx >= 0) {
6056
+ parentNode.children.splice(idx, 1);
6057
+ }
6058
+ });
6059
+ }
6060
+ if (node.type === 'component' && !node.instance) {
6061
+ node.instance = this._createSimpleInstance('TemplateOnlyComponent', node.args.named);
6062
+ }
6063
+ if (node.type === 'modifier') {
6064
+ node.instance = node.instance || this._createSimpleInstance(node.name, node.args);
6065
+ node.instance.toString = () => node.name;
6066
+ if (parentNode.instance !== node.bounds.firstNode) {
6067
+ return this._insertHtmlElementNode(node, parentNode);
6068
+ }
6069
+ }
6303
6070
  this.serialized[node.id] = serialized = {
6304
6071
  ...node,
6305
6072
  args: this._serializeArgs(node.args),
6306
- instance: this._serializeItem(node.instance || (node.type === 'component' ? this._createTemplateOnlyComponent(node.args.named) : undefined)),
6073
+ instance: this._serializeItem(node.instance),
6307
6074
  bounds: this._serializeBounds(node.bounds),
6308
6075
  children: this._serializeRenderNodes(node.children, node)
6309
6076
  };
@@ -6360,7 +6127,9 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6360
6127
  }
6361
6128
  this.retainedObjects.set(object, id);
6362
6129
  return {
6363
- id
6130
+ id,
6131
+ type: typeof object,
6132
+ inspect: (0, _typeCheck.inspect)(object)
6364
6133
  };
6365
6134
  }
6366
6135
  _releaseStaleObjects() {
@@ -6403,7 +6172,12 @@ define("ember-debug/libs/render-tree", ["exports", "ember-debug/libs/capture-ren
6403
6172
  while (candidates.length > 0) {
6404
6173
  let candidate = candidates.shift();
6405
6174
  let range = this.getRange(candidate.id);
6406
- if (range && range.isPointInRange(dom, 0)) {
6175
+ const isAllowed = candidate.type !== 'modifier' && candidate.type !== 'html-element';
6176
+ if (!isAllowed) {
6177
+ candidates.push(...candidate.children);
6178
+ continue;
6179
+ }
6180
+ if (isAllowed && range && range.isPointInRange(dom, 0)) {
6407
6181
  // We may be able to find a more exact match in one of the children.
6408
6182
  return this._matchRenderNodes(candidate.children, dom, false) || candidate;
6409
6183
  } else if (!range || deep) {
@@ -6711,6 +6485,22 @@ define("ember-debug/libs/view-inspection", ["exports", "ember-debug/utils/classi
6711
6485
  color: rgb(168, 148, 166);
6712
6486
  }
6713
6487
 
6488
+ #${prefix}-tooltip-${id} .${prefix}-tooltip-detail-instance > .${prefix}-tooltip-token-tag {
6489
+ cursor: pointer;
6490
+ }
6491
+
6492
+ #${prefix}-tooltip-${id} .${prefix}-tooltip-detail-instance > .${prefix}-tooltip-token-tag:after {
6493
+ content: "\\1F517"
6494
+ }
6495
+
6496
+ #${prefix}-tooltip-${id} .${prefix}-tooltip-detail-controller > .${prefix}-tooltip-token-tag {
6497
+ cursor: pointer;
6498
+ }
6499
+
6500
+ #${prefix}-tooltip-${id} .${prefix}-tooltip-detail-controller > .${prefix}-tooltip-token-tag:after {
6501
+ content: "\\1F517"
6502
+ }
6503
+
6714
6504
  #${prefix}-tooltip-${id} .${prefix}-tooltip-token-name {
6715
6505
  /* https://github.com/ChromeDevTools/devtools-frontend/blob/103326238685ac582d3bf2a02f1627a80e3fce5f/front_end/ui/inspectorSyntaxHighlight.css#L60 */
6716
6506
  color: rgb(136, 18, 128);
@@ -7075,6 +6865,12 @@ define("ember-debug/libs/view-inspection", ["exports", "ember-debug/utils/classi
7075
6865
  } else {
7076
6866
  this._renderTooltipDetail(tbody, 'Instance', this._tokenizeItem(node.instance));
7077
6867
  }
6868
+ const detail = tbody.querySelector('.ember-inspector-tooltip-detail-instance > .ember-inspector-tooltip-token-tag') || tbody.querySelector('.ember-inspector-tooltip-detail-controller > .ember-inspector-tooltip-token-tag');
6869
+ if (detail) {
6870
+ detail.onclick = () => {
6871
+ this.objectInspector.sendToConsole(node.instance.id);
6872
+ };
6873
+ }
7078
6874
  }
7079
6875
  }
7080
6876
  _renderTooltipDetail(tbody, key, value) {
@@ -7770,7 +7566,7 @@ define("ember-debug/models/promise", ["exports", "ember-debug/utils/type-check",
7770
7566
  })), _class2));
7771
7567
  _exports.default = _class;
7772
7568
  });
7773
- define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "ember-debug/utils/bound-method", "ember-debug/utils/type-check", "ember-debug/utils/version", "ember-debug/utils/ember/debug", "ember-debug/utils/ember", "ember-debug/utils/ember/object/internals", "ember-debug/utils/ember/runloop", "ember-debug/utils/ember-object-names", "ember-debug/utils/get-object-name", "ember-debug/utils/ember/loader"], function (_exports, _debugPort, _boundMethod, _typeCheck, _version, _debug, _ember, _internals, _runloop, _emberObjectNames, _getObjectName, _loader) {
7569
+ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "ember-debug/utils/bound-method", "ember-debug/utils/type-check", "ember-debug/utils/version", "ember-debug/utils/ember", "ember-debug/utils/ember/object/internals", "ember-debug/utils/ember/runloop", "ember-debug/utils/ember-object-names", "ember-debug/utils/get-object-name", "ember-debug/utils/ember/loader"], function (_exports, _debugPort, _boundMethod, _typeCheck, _version, _ember, _internals, _runloop, _emberObjectNames, _getObjectName, _loader) {
7774
7570
  "use strict";
7775
7571
 
7776
7572
  Object.defineProperty(_exports, "__esModule", {
@@ -7780,12 +7576,6 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7780
7576
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7781
7577
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7782
7578
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /* eslint-disable ember/no-private-routing-service */
7783
- const {
7784
- meta: emberMeta,
7785
- VERSION,
7786
- CoreObject,
7787
- ObjectProxy
7788
- } = _ember.default;
7789
7579
  const GlimmerComponent = (() => {
7790
7580
  try {
7791
7581
  return _loader.EmberLoader.require('@glimmer/component').default;
@@ -7844,7 +7634,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7844
7634
  // ignore
7845
7635
  }
7846
7636
  const HAS_GLIMMER_TRACKING = tagValue && tagValidate && track && tagForProperty;
7847
- const keys = Object.keys || _ember.default.keys;
7637
+ const keys = Object.keys;
7848
7638
 
7849
7639
  /**
7850
7640
  * Determine the type and get the value of the passed property
@@ -7865,9 +7655,15 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7865
7655
 
7866
7656
  // TODO: this is not very clean. We should refactor calculateCP, etc, rather than passing computedValue
7867
7657
  if (computedValue !== undefined) {
7658
+ if (value instanceof HTMLElement) {
7659
+ return {
7660
+ type: 'type-object',
7661
+ inspect: `<${value.tagName.toLowerCase()}>`
7662
+ };
7663
+ }
7868
7664
  return {
7869
7665
  type: `type-${(0, _typeCheck.typeOf)(value)}`,
7870
- inspect: inspect(value)
7666
+ inspect: (0, _typeCheck.inspect)(value)
7871
7667
  };
7872
7668
  }
7873
7669
  if (value instanceof _ember.EmberObject) {
@@ -7881,94 +7677,30 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7881
7677
  type: 'type-descriptor',
7882
7678
  inspect: string
7883
7679
  };
7884
- } else if ((0, _typeCheck.isDescriptor)(value)) {
7680
+ } else if (value?.isDescriptor) {
7885
7681
  return {
7886
7682
  type: 'type-descriptor',
7887
7683
  inspect: value.toString()
7888
7684
  };
7685
+ } else if (value instanceof HTMLElement) {
7686
+ return {
7687
+ type: 'type-object',
7688
+ inspect: value.tagName.toLowerCase()
7689
+ };
7889
7690
  } else {
7890
7691
  return {
7891
7692
  type: `type-${(0, _typeCheck.typeOf)(value)}`,
7892
- inspect: inspect(value)
7693
+ inspect: (0, _typeCheck.inspect)(value)
7893
7694
  };
7894
7695
  }
7895
7696
  }
7896
- function inspect(value) {
7897
- if (typeof value === 'function') {
7898
- return 'function() { ... }';
7899
- } else if (value instanceof _ember.EmberObject) {
7900
- return value.toString();
7901
- } else if ((0, _typeCheck.typeOf)(value) === 'array') {
7902
- if (value.length === 0) {
7903
- return '[]';
7904
- } else if (value.length === 1) {
7905
- return `[ ${inspect(value[0])} ]`;
7906
- } else {
7907
- return `[ ${inspect(value[0])}, ... ]`;
7908
- }
7909
- } else if (value instanceof Error) {
7910
- return `Error: ${value.message}`;
7911
- } else if (value === null) {
7912
- return 'null';
7913
- } else if ((0, _typeCheck.typeOf)(value) === 'date') {
7914
- return value.toString();
7915
- } else if (typeof value === 'object') {
7916
- // `Ember.inspect` is able to handle this use case,
7917
- // but it is very slow as it loops over all props,
7918
- // so summarize to just first 2 props
7919
- // if it defines a toString, we use that instead
7920
- if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString && value.toString !== Function.prototype.toString) {
7921
- try {
7922
- return `<Object:${value.toString()}>`;
7923
- } catch (e) {
7924
- //
7925
- }
7926
- }
7927
- let ret = [];
7928
- let v;
7929
- let count = 0;
7930
- let broken = false;
7931
- for (let key in value) {
7932
- if (!('hasOwnProperty' in value) || value.hasOwnProperty(key)) {
7933
- if (count++ > 1) {
7934
- broken = true;
7935
- break;
7936
- }
7937
- v = value[key];
7938
- if (v === 'toString') {
7939
- continue;
7940
- } // ignore useless items
7941
- if ((0, _typeCheck.typeOf)(v).includes('function')) {
7942
- v = 'function() { ... }';
7943
- }
7944
- if ((0, _typeCheck.typeOf)(v) === 'array') {
7945
- v = `[Array : ${v.length}]`;
7946
- }
7947
- if ((0, _typeCheck.typeOf)(v) === 'object') {
7948
- v = '[Object]';
7949
- }
7950
- ret.push(`${key}: ${v}`);
7951
- }
7952
- }
7953
- let suffix = ' }';
7954
- if (broken) {
7955
- suffix = ' ...}';
7956
- }
7957
- return `{ ${ret.join(', ')}${suffix}`;
7958
- } else {
7959
- return (0, _debug.inspect)(value);
7960
- }
7961
- }
7962
7697
  function isMandatorySetter(descriptor) {
7963
- if (descriptor.set && descriptor.set === _ember.default.MANDATORY_SETTER_FUNCTION) {
7964
- return true;
7965
- }
7966
7698
  if (descriptor.set && Function.prototype.toString.call(descriptor.set).includes('You attempted to update')) {
7967
7699
  return true;
7968
7700
  }
7969
7701
  return false;
7970
7702
  }
7971
- function getTagTrackedProps(tag, ownTag, level = 0) {
7703
+ function getTagTrackedTags(tag, ownTag, level = 0) {
7972
7704
  const props = [];
7973
7705
  // do not include tracked properties from dependencies
7974
7706
  if (!tag || level > 1) {
@@ -7977,13 +7709,13 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7977
7709
  const subtags = tag.subtags || (Array.isArray(tag.subtag) ? tag.subtag : []);
7978
7710
  if (tag.subtag && !Array.isArray(tag.subtag)) {
7979
7711
  if (tag.subtag._propertyKey) props.push(tag.subtag);
7980
- props.push(...getTagTrackedProps(tag.subtag, ownTag, level + 1));
7712
+ props.push(...getTagTrackedTags(tag.subtag, ownTag, level + 1));
7981
7713
  }
7982
7714
  if (subtags) {
7983
7715
  subtags.forEach(t => {
7984
7716
  if (t === ownTag) return;
7985
7717
  if (t._propertyKey) props.push(t);
7986
- props.push(...getTagTrackedProps(t, ownTag, level + 1));
7718
+ props.push(...getTagTrackedTags(t, ownTag, level + 1));
7987
7719
  });
7988
7720
  }
7989
7721
  return props;
@@ -7992,45 +7724,68 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
7992
7724
  const tag = tagInfo.tag;
7993
7725
  const proto = Object.getPrototypeOf(object);
7994
7726
  if (!proto) return [];
7995
- const cpDesc = emberMeta(object).peekDescriptors(property);
7727
+ const cpDesc = (0, _ember.meta)(object).peekDescriptors(property);
7996
7728
  const dependentKeys = [];
7997
7729
  if (cpDesc) {
7998
- dependentKeys.push(...(cpDesc._dependentKeys || []));
7730
+ dependentKeys.push(...(cpDesc._dependentKeys || []).map(k => ({
7731
+ name: k
7732
+ })));
7999
7733
  }
8000
7734
  if (HAS_GLIMMER_TRACKING) {
8001
7735
  const ownTag = tagForProperty(object, property);
8002
- const props = getTagTrackedProps(tag, ownTag);
7736
+ const tags = getTagTrackedTags(tag, ownTag);
8003
7737
  const mapping = {};
8004
- let maxRevision = tagInfo.revision ?? 0;
8005
- let minRevision = Infinity;
8006
- props.forEach(t => {
7738
+ let maxRevision = tagValue(tag);
7739
+ tags.forEach(t => {
8007
7740
  const p = (t._object ? (0, _getObjectName.default)(t._object) + '.' : '') + t._propertyKey;
8008
- const [objName, ...props] = p.split('.');
7741
+ const [objName, prop] = p.split('.');
8009
7742
  mapping[objName] = mapping[objName] || new Set();
8010
- maxRevision = Math.max(maxRevision, t.revision);
8011
- minRevision = Math.min(minRevision, t.revision);
8012
- props.forEach(p => mapping[objName].add([p, t.revision]));
7743
+ const value = tagValue(t);
7744
+ if (prop) {
7745
+ mapping[objName].add([prop, value]);
7746
+ }
8013
7747
  });
8014
- const hasChange = maxRevision !== minRevision;
7748
+ const hasChange = tagInfo.revision && maxRevision !== tagInfo.revision || false;
7749
+ const names = new Set();
8015
7750
  Object.entries(mapping).forEach(([objName, props]) => {
7751
+ if (names.has(objName)) {
7752
+ return;
7753
+ }
7754
+ names.add(objName);
8016
7755
  if (props.size > 1) {
8017
- dependentKeys.push(objName);
7756
+ dependentKeys.push({
7757
+ name: objName
7758
+ });
8018
7759
  props.forEach(p => {
8019
- const changed = hasChange && p[1] >= maxRevision ? ' 🔸' : '';
8020
- dependentKeys.push(' • -- ' + p[0] + changed);
7760
+ const changed = hasChange && p[1] > tagInfo.revision;
7761
+ const obj = {
7762
+ child: p[0]
7763
+ };
7764
+ if (changed) {
7765
+ obj.changed = true;
7766
+ }
7767
+ dependentKeys.push(obj);
8021
7768
  });
8022
7769
  }
8023
7770
  if (props.size === 1) {
8024
7771
  const p = [...props][0];
8025
- const changed = hasChange && p[1] >= maxRevision ? ' 🔸' : '';
8026
- dependentKeys.push(objName + '.' + p[0] + changed);
7772
+ const changed = hasChange && p[1] > tagInfo.revision;
7773
+ const obj = {
7774
+ name: objName + '.' + p[0]
7775
+ };
7776
+ if (changed) {
7777
+ obj.changed = true;
7778
+ }
7779
+ dependentKeys.push(obj);
8027
7780
  }
8028
7781
  if (props.size === 0) {
8029
- dependentKeys.push(objName);
7782
+ dependentKeys.push({
7783
+ name: objName
7784
+ });
8030
7785
  }
8031
7786
  });
8032
7787
  }
8033
- return [...new Set([...dependentKeys])];
7788
+ return [...dependentKeys];
8034
7789
  }
8035
7790
  class _class extends _debugPort.default {
8036
7791
  constructor(...args) {
@@ -8041,7 +7796,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8041
7796
  _defineProperty(this, "objectPropertyValues", {});
8042
7797
  _defineProperty(this, "trackedTags", {});
8043
7798
  _defineProperty(this, "_errorsFor", {});
8044
- _defineProperty(this, "inspect", inspect);
7799
+ _defineProperty(this, "inspect", _typeCheck.inspect);
8045
7800
  _defineProperty(this, "inspectValue", inspectValue);
8046
7801
  }
8047
7802
  get adapter() {
@@ -8052,7 +7807,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8052
7807
  }
8053
7808
  updateCurrentObject() {
8054
7809
  Object.values(this.sentObjects).forEach(obj => {
8055
- if (obj instanceof CoreObject && obj.isDestroyed) {
7810
+ if (obj instanceof _ember.CoreObject && obj.isDestroyed) {
8056
7811
  this.dropObject((0, _internals.guidFor)(obj));
8057
7812
  }
8058
7813
  });
@@ -8145,6 +7900,26 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8145
7900
  }
8146
7901
  });
8147
7902
  }
7903
+ gotoSource(objectId, prop) {
7904
+ let object = this.sentObjects[objectId];
7905
+ let value;
7906
+ if (prop === null || prop === undefined) {
7907
+ value = this.sentObjects[objectId];
7908
+ } else {
7909
+ value = calculateCP(object, {
7910
+ name: prop
7911
+ }, {});
7912
+ }
7913
+ // for functions and classes we want to show the source
7914
+ if (typeof value === 'function') {
7915
+ this.adapter.inspectValue(value);
7916
+ }
7917
+ // use typeOf to distinguish basic objects/classes and Date, Error etc.
7918
+ // objects like {...} have the constructor set to Object
7919
+ if ((0, _typeCheck.typeOf)(value) === 'object' && value.constructor !== Object) {
7920
+ this.adapter.inspectValue(value.constructor);
7921
+ }
7922
+ }
8148
7923
  sendToConsole(objectId, prop) {
8149
7924
  let object = this.sentObjects[objectId];
8150
7925
  let value;
@@ -8164,7 +7939,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8164
7939
  }
8165
7940
  let args = [value];
8166
7941
  if (value instanceof _ember.EmberObject) {
8167
- args.unshift(inspect(value));
7942
+ args.unshift((0, _typeCheck.inspect)(value));
8168
7943
  }
8169
7944
  this.adapter.log('Ember Inspector ($E): ', ...args);
8170
7945
  }
@@ -8200,7 +7975,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8200
7975
  });
8201
7976
  }
8202
7977
  retainObject(object) {
8203
- let meta = emberMeta(object);
7978
+ let meta = (0, _ember.meta)(object);
8204
7979
  let guid = (0, _internals.guidFor)(object);
8205
7980
  meta._debugReferences = meta._debugReferences || 0;
8206
7981
  meta._debugReferences++;
@@ -8212,7 +7987,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8212
7987
  if (!object) {
8213
7988
  return;
8214
7989
  }
8215
- let meta = emberMeta(object);
7990
+ let meta = (0, _ember.meta)(object);
8216
7991
  let guid = (0, _internals.guidFor)(object);
8217
7992
  meta._debugReferences--;
8218
7993
  if (meta._debugReferences === 0) {
@@ -8287,7 +8062,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8287
8062
 
8288
8063
  // insert ember mixins
8289
8064
  for (let mixin of own) {
8290
- let name = (mixin[_ember.default.NAME_KEY] || mixin.ownerConstructor || _emberObjectNames.default.get(mixin) || '').toString();
8065
+ let name = (mixin.ownerConstructor || _emberObjectNames.default.get(mixin) || '').toString();
8291
8066
  if (!name && typeof mixin.toString === 'function') {
8292
8067
  try {
8293
8068
  name = mixin.toString();
@@ -8313,10 +8088,10 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8313
8088
  return mixins;
8314
8089
  }
8315
8090
  mixinsForObject(object) {
8316
- if (object instanceof ObjectProxy && object.content && !object._showProxyDetails) {
8091
+ if (object instanceof _ember.ObjectProxy && object.content && !object._showProxyDetails) {
8317
8092
  object = object.content;
8318
8093
  }
8319
- if (object instanceof _ember.default.ArrayProxy && object.content && !object._showProxyDetails) {
8094
+ if (object instanceof _ember.ArrayProxy && object.content && !object._showProxyDetails) {
8320
8095
  object = object.slice(0, 101);
8321
8096
  }
8322
8097
  let mixinDetails = this.mixinDetailsForObject(object);
@@ -8407,6 +8182,9 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8407
8182
  sendToConsole(message) {
8408
8183
  this.sendToConsole(message.objectId, message.property);
8409
8184
  },
8185
+ gotoSource(message) {
8186
+ this.gotoSource(message.objectId, message.property);
8187
+ },
8410
8188
  sendControllerToConsole(message) {
8411
8189
  const container = this.namespace?.owner;
8412
8190
  this.sendValueToConsole(container.lookup(`controller:${message.name}`));
@@ -8431,7 +8209,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8431
8209
  // 3.9.0 removed intimate APIs from router
8432
8210
  // https://github.com/emberjs/ember.js/pull/17843
8433
8211
  // https://deprecations.emberjs.com/v3.x/#toc_remove-handler-infos
8434
- if ((0, _version.compareVersion)(VERSION, '3.9.0') !== -1) {
8212
+ if ((0, _version.compareVersion)(_ember.VERSION, '3.9.0') !== -1) {
8435
8213
  // Ember >= 3.9.0
8436
8214
  this.sendObject(routerLib.getRoute(message.name));
8437
8215
  } else {
@@ -8469,7 +8247,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8469
8247
  })();
8470
8248
  function ownMixins(object) {
8471
8249
  // TODO: We need to expose an API for getting _just_ the own mixins directly
8472
- let meta = emberMeta(object);
8250
+ let meta = (0, _ember.meta)(object);
8473
8251
  let parentMeta = meta.parent;
8474
8252
  let mixins = new Set();
8475
8253
 
@@ -8487,7 +8265,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8487
8265
  return mixins;
8488
8266
  }
8489
8267
  function ownProperties(object, ownMixins) {
8490
- let meta = emberMeta(object);
8268
+ let meta = (0, _ember.meta)(object);
8491
8269
  if (Array.isArray(object)) {
8492
8270
  // slice to max 101, for performance and so that the object inspector will show a `more items` indicator above 100
8493
8271
  object = object.slice(0, 101);
@@ -8576,7 +8354,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8576
8354
  }
8577
8355
  }
8578
8356
  if (!options.isService) {
8579
- options.isService = desc.value instanceof _ember.default.Service;
8357
+ options.isService = desc.value instanceof _ember.Service;
8580
8358
  }
8581
8359
  }
8582
8360
  if (options.isService) {
@@ -8708,7 +8486,8 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8708
8486
  if (cache !== undefined || !item.isExpensive) {
8709
8487
  let value;
8710
8488
  if (item.canTrack && HAS_GLIMMER_TRACKING) {
8711
- const tagInfo = tracked[item.name] = {};
8489
+ tracked[item.name] = tracked[item.name] || {};
8490
+ const tagInfo = tracked[item.name];
8712
8491
  tagInfo.tag = track(() => {
8713
8492
  value = calculateCP(object, item, errorsForObject);
8714
8493
  });
@@ -8846,7 +8625,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8846
8625
  let debugInfo = null;
8847
8626
  let objectDebugInfo = object._debugInfo;
8848
8627
  if (objectDebugInfo && typeof objectDebugInfo === 'function') {
8849
- if (object instanceof _ember.default.ObjectProxy && object.content) {
8628
+ if (object instanceof _ember.ObjectProxy && object.content) {
8850
8629
  object = object.content;
8851
8630
  }
8852
8631
  debugInfo = objectDebugInfo.call(object);
@@ -8857,7 +8636,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8857
8636
  skipProperties.push('isDestroyed', 'isDestroying', 'container');
8858
8637
  // 'currentState' and 'state' are un-observable private properties.
8859
8638
  // The rest are skipped to reduce noise in the inspector.
8860
- if (_ember.default.Component && object instanceof _ember.default.Component) {
8639
+ if (_ember.Component && object instanceof _ember.Component) {
8861
8640
  skipProperties.push('currentState', 'state', 'buffer', 'outletSource', 'lengthBeforeRender', 'lengthAfterRender', 'template', 'layout', 'templateData', 'domManager', 'states', 'element', 'targetObject');
8862
8641
  } else if (GlimmerComponent && object instanceof GlimmerComponent) {
8863
8642
  // These properties don't really exist on Glimmer Components, but
@@ -8876,7 +8655,7 @@ define("ember-debug/object-inspector", ["exports", "ember-debug/debug-port", "em
8876
8655
  const property = item.name;
8877
8656
  delete errorsForObject[property];
8878
8657
  try {
8879
- if (object instanceof _ember.default.ArrayProxy && property == parseInt(property)) {
8658
+ if (object instanceof _ember.ArrayProxy && property == parseInt(property)) {
8880
8659
  return object.objectAt(property);
8881
8660
  }
8882
8661
  return item.isGetter || property.includes?.('.') ? object[property] : object.get?.(property) || object[property]; // need to use `get` to be able to detect tracked props
@@ -9281,7 +9060,7 @@ define("ember-debug/render-debug", ["exports", "ember-debug/debug-port", "ember-
9281
9060
  });
9282
9061
  }
9283
9062
  });
9284
- define("ember-debug/route-debug", ["exports", "ember-debug/debug-port", "ember-debug/utils/version", "ember-debug/utils/classify", "ember-debug/utils/dasherize", "ember-debug/utils/ember", "ember-debug/utils/ember/runloop", "ember-debug/utils/bound-method"], function (_exports, _debugPort, _version, _classify, _dasherize, _ember, _runloop, _boundMethod) {
9063
+ define("ember-debug/route-debug", ["exports", "ember-debug/debug-port", "ember-debug/utils/version", "ember-debug/utils/ember", "ember-debug/utils/classify", "ember-debug/utils/dasherize", "ember-debug/utils/ember/runloop", "ember-debug/utils/bound-method"], function (_exports, _debugPort, _version, _ember, _classify, _dasherize, _runloop, _boundMethod) {
9285
9064
  "use strict";
9286
9065
 
9287
9066
  Object.defineProperty(_exports, "__esModule", {
@@ -9481,7 +9260,7 @@ define("ember-debug/route-debug", ["exports", "ember-debug/debug-port", "ember-d
9481
9260
  // 3.9.0 removed intimate APIs from router
9482
9261
  // https://github.com/emberjs/ember.js/pull/17843
9483
9262
  // https://deprecations.emberjs.com/v3.x/#toc_remove-handler-infos
9484
- if ((0, _version.compareVersion)(_ember.default.VERSION, '3.9.0') !== -1) {
9263
+ if ((0, _version.compareVersion)(_ember.VERSION, '3.9.0') !== -1) {
9485
9264
  // Ember >= 3.9.0
9486
9265
  routeHandler = routerLib.getRoute(handler);
9487
9266
  } else {
@@ -9799,7 +9578,7 @@ define("ember-debug/utils/ember", ["exports", "ember-debug/utils/ember/loader"],
9799
9578
  Object.defineProperty(_exports, "__esModule", {
9800
9579
  value: true
9801
9580
  });
9802
- _exports.set = _exports.meta = _exports.get = _exports.default = _exports.computed = _exports.VERSION = _exports.PromiseProxyMixin = _exports.Observable = _exports.NativeArray = _exports.Namespace = _exports.MutableEnumerable = _exports.MutableArray = _exports.Evented = _exports.EmberObject = _exports.CoreObject = _exports.ControllerMixin = _exports.ComputedProperty = _exports.Component = _exports.Application = _exports.ActionHandler = void 0;
9581
+ _exports.set = _exports.meta = _exports.getEnv = _exports.get = _exports.default = _exports.computed = _exports.captureRenderTree = _exports.VERSION = _exports.Service = _exports.PromiseProxyMixin = _exports.Observable = _exports.ObjectProxy = _exports.NativeArray = _exports.Namespace = _exports.MutableEnumerable = _exports.MutableArray = _exports.Evented = _exports.EmberObject = _exports.CoreObject = _exports.ControllerMixin = _exports.ComputedProperty = _exports.Component = _exports.ArrayProxy = _exports.Application = _exports.ActionHandler = void 0;
9803
9582
  let Ember;
9804
9583
  try {
9805
9584
  Ember = requireModule('ember').default;
@@ -9807,6 +9586,7 @@ define("ember-debug/utils/ember", ["exports", "ember-debug/utils/ember/loader"],
9807
9586
  Ember = window.Ember;
9808
9587
  }
9809
9588
  let {
9589
+ ArrayProxy,
9810
9590
  Namespace,
9811
9591
  ActionHandler,
9812
9592
  ControllerMixin,
@@ -9819,21 +9599,27 @@ define("ember-debug/utils/ember", ["exports", "ember-debug/utils/ember/loader"],
9819
9599
  Observable,
9820
9600
  Evented,
9821
9601
  PromiseProxyMixin,
9602
+ Service,
9822
9603
  Object: EmberObject,
9604
+ ObjectProxy,
9823
9605
  VERSION,
9824
9606
  ComputedProperty,
9825
9607
  meta,
9826
9608
  get,
9827
9609
  set,
9828
- computed
9610
+ computed,
9611
+ _captureRenderTree: captureRenderTree
9829
9612
  } = Ember || {};
9613
+ _exports.captureRenderTree = captureRenderTree;
9830
9614
  _exports.computed = computed;
9831
9615
  _exports.set = set;
9832
9616
  _exports.get = get;
9833
9617
  _exports.meta = meta;
9834
9618
  _exports.ComputedProperty = ComputedProperty;
9835
9619
  _exports.VERSION = VERSION;
9620
+ _exports.ObjectProxy = ObjectProxy;
9836
9621
  _exports.EmberObject = EmberObject;
9622
+ _exports.Service = Service;
9837
9623
  _exports.PromiseProxyMixin = PromiseProxyMixin;
9838
9624
  _exports.Evented = Evented;
9839
9625
  _exports.Observable = Observable;
@@ -9846,7 +9632,14 @@ define("ember-debug/utils/ember", ["exports", "ember-debug/utils/ember/loader"],
9846
9632
  _exports.ControllerMixin = ControllerMixin;
9847
9633
  _exports.ActionHandler = ActionHandler;
9848
9634
  _exports.Namespace = Namespace;
9635
+ _exports.ArrayProxy = ArrayProxy;
9636
+ let getEnv = () => Ember.ENV;
9637
+ _exports.getEnv = getEnv;
9849
9638
  if (!Ember) {
9639
+ _exports.captureRenderTree = captureRenderTree = (0, _loader.emberSafeRequire)('@ember/debug')?.captureRenderTree;
9640
+ _exports.getEnv = getEnv = (0, _loader.emberSafeRequire)('@ember/-internals/environment')?.getENV;
9641
+ _exports.ArrayProxy = ArrayProxy = (0, _loader.emberSafeRequire)('@ember/array/proxy')?.default;
9642
+ _exports.ObjectProxy = ObjectProxy = (0, _loader.emberSafeRequire)('@ember/object/proxy')?.default;
9850
9643
  _exports.MutableArray = MutableArray = (0, _loader.emberSafeRequire)('@ember/array/mutable')?.default;
9851
9644
  _exports.Namespace = Namespace = (0, _loader.emberSafeRequire)('@ember/application/namespace')?.default;
9852
9645
  _exports.MutableEnumerable = MutableEnumerable = (0, _loader.emberSafeRequire)('@ember/enumerable/mutable')?.default;
@@ -9858,6 +9651,7 @@ define("ember-debug/utils/ember", ["exports", "ember-debug/utils/ember/loader"],
9858
9651
  _exports.Observable = Observable = (0, _loader.emberSafeRequire)('@ember/object/observable')?.default;
9859
9652
  _exports.Evented = Evented = (0, _loader.emberSafeRequire)('@ember/object/evented')?.default;
9860
9653
  _exports.PromiseProxyMixin = PromiseProxyMixin = (0, _loader.emberSafeRequire)('@ember/object/promise-proxy-mixin')?.default;
9654
+ _exports.Service = Service = (0, _loader.emberSafeRequire)('@ember/service')?.default;
9861
9655
  _exports.EmberObject = EmberObject = (0, _loader.emberSafeRequire)('@ember/object')?.default;
9862
9656
  _exports.VERSION = VERSION = (0, _loader.emberSafeRequire)('ember/version')?.default;
9863
9657
  _exports.ComputedProperty = ComputedProperty = (0, _loader.emberSafeRequire)('@ember/-internals/metal')?.ComputedProperty;
@@ -10182,6 +9976,9 @@ define("ember-debug/utils/get-object-name", ["exports", "ember-debug/utils/ember
10182
9976
  function getObjectName(object) {
10183
9977
  let name = '';
10184
9978
  let className = object.constructor && (_emberObjectNames.default.get(object.constructor) || object.constructor.name) || '';
9979
+ if (object instanceof Function) {
9980
+ return 'Function ' + object.name;
9981
+ }
10185
9982
 
10186
9983
  // check if object is a primitive value
10187
9984
  if (object !== Object(object)) {
@@ -10246,7 +10043,7 @@ define("ember-debug/utils/name-functions", ["exports"], function (_exports) {
10246
10043
  name = model.toString();
10247
10044
  }
10248
10045
  if (name.length > 50) {
10249
- name = `${name.substr(0, 50)}...`;
10046
+ name = `${name.slice(0, 50)}...`;
10250
10047
  }
10251
10048
  return name;
10252
10049
  }
@@ -10394,8 +10191,8 @@ define("ember-debug/utils/type-check", ["exports", "ember-debug/utils/ember/debu
10394
10191
  value: true
10395
10192
  });
10396
10193
  _exports.getDescriptorFor = getDescriptorFor;
10194
+ _exports.inspect = inspect;
10397
10195
  _exports.isComputed = isComputed;
10398
- _exports.isDescriptor = isDescriptor;
10399
10196
  _exports.typeOf = typeOf;
10400
10197
  /**
10401
10198
  * Check if given key on the passed object is a computed property
@@ -10414,13 +10211,6 @@ define("ember-debug/utils/type-check", ["exports", "ember-debug/utils/ember/debu
10414
10211
  if (getDescriptorFor(object, key) instanceof _ember.ComputedProperty) {
10415
10212
  return true;
10416
10213
  }
10417
-
10418
- // Ember < 3.10
10419
- return object[key] instanceof _ember.ComputedProperty;
10420
- }
10421
- function isDescriptor(value) {
10422
- // Ember >= 1.11
10423
- return value && typeof value === 'object' && value.isDescriptor;
10424
10214
  }
10425
10215
 
10426
10216
  /**
@@ -10430,11 +10220,11 @@ define("ember-debug/utils/type-check", ["exports", "ember-debug/utils/ember/debu
10430
10220
  * @param {String} key The key for the property on the object
10431
10221
  */
10432
10222
  function getDescriptorFor(object, key) {
10433
- if (isDescriptor(object[key])) {
10223
+ if (object[key]?.isDescriptor) {
10434
10224
  return object[key];
10435
10225
  }
10436
10226
 
10437
- // exists longeer than ember 3.10
10227
+ // exists longer than ember 3.10
10438
10228
  if (_debug.default.isComputed) {
10439
10229
  const {
10440
10230
  descriptorForDecorator,
@@ -10447,6 +10237,74 @@ define("ember-debug/utils/type-check", ["exports", "ember-debug/utils/ember/debu
10447
10237
  function typeOf(obj) {
10448
10238
  return Object.prototype.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
10449
10239
  }
10240
+ function inspect(value) {
10241
+ if (typeof value === 'function') {
10242
+ return `${value.name || 'function'}() { ... }`;
10243
+ } else if (value instanceof _ember.EmberObject) {
10244
+ return value.toString();
10245
+ } else if (value instanceof HTMLElement) {
10246
+ return `<${value.tagName.toLowerCase()}>`;
10247
+ } else if (typeOf(value) === 'array') {
10248
+ if (value.length === 0) {
10249
+ return '[]';
10250
+ } else if (value.length === 1) {
10251
+ return `[ ${inspect(value[0])} ]`;
10252
+ } else {
10253
+ return `[ ${inspect(value[0])}, ... ]`;
10254
+ }
10255
+ } else if (value instanceof Error) {
10256
+ return `Error: ${value.message}`;
10257
+ } else if (value === null) {
10258
+ return 'null';
10259
+ } else if (typeOf(value) === 'date') {
10260
+ return value.toString();
10261
+ } else if (typeof value === 'object') {
10262
+ // `Ember.inspect` is able to handle this use case,
10263
+ // but it is very slow as it loops over all props,
10264
+ // so summarize to just first 2 props
10265
+ // if it defines a toString, we use that instead
10266
+ if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString && value.toString !== Function.prototype.toString) {
10267
+ try {
10268
+ return `<Object:${value.toString()}>`;
10269
+ } catch (e) {
10270
+ //
10271
+ }
10272
+ }
10273
+ let ret = [];
10274
+ let v;
10275
+ let count = 0;
10276
+ let broken = false;
10277
+ for (let key in value) {
10278
+ if (!('hasOwnProperty' in value) || value.hasOwnProperty(key)) {
10279
+ if (count++ > 1) {
10280
+ broken = true;
10281
+ break;
10282
+ }
10283
+ v = value[key];
10284
+ if (v === 'toString') {
10285
+ continue;
10286
+ } // ignore useless items
10287
+ if (typeOf(v).includes('function')) {
10288
+ v = `function ${v.name}() { ... }`;
10289
+ }
10290
+ if (typeOf(v) === 'array') {
10291
+ v = `[Array : ${v.length}]`;
10292
+ }
10293
+ if (typeOf(v) === 'object') {
10294
+ v = '[Object]';
10295
+ }
10296
+ ret.push(`${key}: ${v}`);
10297
+ }
10298
+ }
10299
+ let suffix = ' }';
10300
+ if (broken) {
10301
+ suffix = ' ...}';
10302
+ }
10303
+ return `{ ${ret.join(', ')}${suffix}`;
10304
+ } else {
10305
+ return (0, _debug.inspect)(value);
10306
+ }
10307
+ }
10450
10308
  });
10451
10309
  define("ember-debug/utils/version", ["exports"], function (_exports) {
10452
10310
  "use strict";
@@ -10455,6 +10313,7 @@ define("ember-debug/utils/version", ["exports"], function (_exports) {
10455
10313
  value: true
10456
10314
  });
10457
10315
  _exports.compareVersion = compareVersion;
10316
+ _exports.isInVersionSpecifier = isInVersionSpecifier;
10458
10317
  /**
10459
10318
  * Compares two Ember versions.
10460
10319
  *
@@ -10480,6 +10339,41 @@ define("ember-debug/utils/version", ["exports"], function (_exports) {
10480
10339
  return 0;
10481
10340
  }
10482
10341
 
10342
+ /**
10343
+ *
10344
+ * @param specifier e.g. ^5.12.0
10345
+ * @param version 5.13
10346
+ * @return {boolean}
10347
+ */
10348
+ function isInVersionSpecifier(specifier, version) {
10349
+ let compared, i, version2;
10350
+ let operator = specifier[0];
10351
+ if (Number.isNaN(+operator)) {
10352
+ specifier = specifier.slice(1);
10353
+ }
10354
+ specifier = cleanupVersion(specifier).split('.');
10355
+ version2 = cleanupVersion(version).split('.');
10356
+ if (operator === '~' && specifier[1] !== version2[1]) {
10357
+ return false;
10358
+ }
10359
+ if (operator === '^' && specifier[0] !== version2[0]) {
10360
+ return false;
10361
+ }
10362
+ if (operator === '>' && specifier[0] > version2[0]) {
10363
+ return false;
10364
+ }
10365
+ for (i = 0; i < 3; i++) {
10366
+ compared = compare(+specifier[i], +version2[i]);
10367
+ if (compared < 0) {
10368
+ return true;
10369
+ }
10370
+ if (compared > 0) {
10371
+ return false;
10372
+ }
10373
+ }
10374
+ return true;
10375
+ }
10376
+
10483
10377
  /**
10484
10378
  * Remove -alpha, -beta, etc from versions
10485
10379
  *
@@ -10587,7 +10481,7 @@ define("ember-debug/view-debug", ["exports", "ember-debug/debug-port", "ember-de
10587
10481
  * @param {Node} node The DOM node to inspect
10588
10482
  */
10589
10483
  inspectNode(node) {
10590
- this.adapter.inspectNode(node);
10484
+ this.adapter.inspectValue(node);
10591
10485
  }
10592
10486
  sendTree(immediate = false) {
10593
10487
  if (immediate) {