-
+
-
- {{svg-jar "sidebar-toggle" width="16" height="16"}}
-
+ {{#unless this.layout.inspectorExpanded}}
+
{{!-- Spacer to shift the toggle to the end of the header --}}
+
+ {{/unless}}
@@ -64,16 +60,22 @@
- {{#if this.inspectorExpanded}}
+ {{#if this.layout.inspectorExpanded}}
+
+
+
+
{{/if}}
diff --git a/app/templates/component-tree.hbs b/app/templates/component-tree.hbs
index 903e5d9e8f..ae407d0f84 100644
--- a/app/templates/component-tree.hbs
+++ b/app/templates/component-tree.hbs
@@ -5,6 +5,9 @@
@expandAll={{this.expandAll}}
@isInspecting={{this.isInspecting}}
@query={{this.query}}
+ @pinned={{this.pinned}}
+ @toggleParentsOnly={{this.toggleParentsOnly}}
+ @showParentsOnly={{this.showParentsOnly}}
@toggleInspect={{this.toggleInspect}}
/>
{{/in-element}}
diff --git a/ember-cli-build.js b/ember-cli-build.js
index b0d88fa66f..8724264523 100644
--- a/ember-cli-build.js
+++ b/ember-cli-build.js
@@ -9,7 +9,12 @@ const writeFile = require('broccoli-file-creator');
const replace = require('broccoli-string-replace');
const Funnel = require('broccoli-funnel');
const packageJson = require('./package.json');
-const { map, mv } = stew;
+const { mv } = stew;
+
+const {
+ EMBER_VERSIONS_SUPPORTED,
+ PREVIOUS_EMBER_VERSIONS_SUPPORTED,
+} = require('ember-debug/versions');
const options = {
autoImport: {
@@ -84,95 +89,30 @@ module.exports = function (defaults) {
app.import('node_modules/compare-versions/index.js');
app.import('node_modules/normalize.css/normalize.css');
- let emberDebug = 'ember_debug/dist';
-
- emberDebug = new Funnel(emberDebug, {
- destDir: 'ember-debug',
- include: ['**/*.js'],
- });
-
- const previousEmberVersionsSupportedString = `[${packageJson.previousEmberVersionsSupported
- .map(function (item) {
- return `'${item}'`;
- })
- .join(',')}]`;
- const emberVersionsSupportedString = `[${packageJson.emberVersionsSupported
- .map(function (item) {
- return `'${item}'`;
- })
- .join(',')}]`;
-
- let startupWrapper = new Funnel('ember_debug', {
- srcDir: 'vendor',
- files: ['startup-wrapper.js'],
- });
-
- startupWrapper = replace(startupWrapper, {
- files: ['startup-wrapper.js'],
- patterns: [
- {
- match: /{{EMBER_VERSIONS_SUPPORTED}}/,
- replacement: emberVersionsSupportedString,
- },
- ],
- });
-
- const loader = new Funnel('ember_debug', {
- srcDir: 'vendor',
- files: ['loader.js'],
- });
-
- emberDebug = mergeTrees([startupWrapper, emberDebug, loader]);
-
- emberDebug = concatFiles(emberDebug, {
- headerFiles: ['loader.js'],
- inputFiles: ['**/*.js'],
- outputFile: '/ember_debug.js',
- sourceMapConfig: { enabled: false },
- });
-
- function wrapWithLoader(content) {
- return `(function loadEmberDebugInWebpage() {
- const waitForEmberLoad = new Promise((resolve) => {
- if (window.requireModule) {
- const has =
- window.requireModule.has ||
- function has(id) {
- return !!(
- window.requireModule.entries[id] ||
- window.requireModule.entries[id + '/index']
- );
- };
- if (has('ember')) {
- return resolve();
- }
- }
-
- /**
- * NOTE: if the above (for some reason) fails and the consuming app has
- * deprecation-workflow's throwOnUnhandled: true
- * or set \`ember-global\`'s handler to 'throw'
- * and is using at least \`ember-source@3.27\`
- *
- * this will throw an exception in the consuming project
- */
- if (window.Ember) return resolve();
-
- window.addEventListener('Ember', resolve, { once: true });
- });
- waitForEmberLoad.then(() => ${content});
- })()
- `;
- }
+ const previousEmberVersionsSupportedString = JSON.stringify(
+ PREVIOUS_EMBER_VERSIONS_SUPPORTED,
+ );
+ const emberVersionsSupportedString = JSON.stringify(EMBER_VERSIONS_SUPPORTED);
const emberDebugs = [];
+
['basic', 'chrome', 'firefox', 'bookmarklet', 'websocket'].forEach(
function (dist) {
- emberDebugs[dist] = map(emberDebug, '**/*.js', function (content) {
- return wrapWithLoader(
- `(function(adapter, env) {\n${content}\n}('${dist}', '${env}'))`,
- );
- });
+ let emberDebug = 'ember_debug/dist';
+
+ let entryPoint = concatFiles(
+ new Funnel(emberDebug, {
+ destDir: 'ember-debug',
+ include: [`${dist}-debug.js`],
+ }),
+ {
+ inputFiles: ['**/*.js'],
+ outputFile: '/ember_debug.js',
+ sourceMapConfig: { enabled: false },
+ },
+ );
+
+ emberDebugs[dist] = mergeTrees([emberDebug, entryPoint]);
},
);
@@ -190,10 +130,7 @@ module.exports = function (defaults) {
patterns: emberInspectorVersionPattern,
});
- const minimumVersion = packageJson.emberVersionsSupported[0].replace(
- /\./g,
- '-',
- );
+ const minimumVersion = EMBER_VERSIONS_SUPPORTED[0].replace(/\./g, '-');
const webExtensionRoot = `panes-${minimumVersion}`;
let tabLabel;
@@ -264,7 +201,7 @@ module.exports = function (defaults) {
skeletonBookmarklet,
]);
- packageJson.previousEmberVersionsSupported.forEach(function (version) {
+ PREVIOUS_EMBER_VERSIONS_SUPPORTED.forEach(function (version) {
version = version.replace(/\./g, '-');
if (env === 'production') {
const prevDist = `dist_prev/${env}`;
diff --git a/ember_debug/adapters/basic.js b/ember_debug/adapters/basic.js
index 89493c288b..43ce512e3d 100644
--- a/ember_debug/adapters/basic.js
+++ b/ember_debug/adapters/basic.js
@@ -1,6 +1,6 @@
/* eslint no-console: 0 */
-import { onReady } from 'ember-debug/utils/on-ready';
-import BaseObject from '../utils/base-object';
+import { onReady } from '../utils/on-ready';
+import BaseObject from '../utils/base-object.js';
export default class BasicAdapter extends BaseObject {
// eslint-disable-next-line ember/classic-decorator-hooks
@@ -12,21 +12,6 @@ export default class BasicAdapter extends BaseObject {
this._messageCallbacks = [];
}
- /**
- * Uses the current build's config module to determine
- * the environment.
- *
- * @property environment
- * @type {String}
- */
- get environment() {
- if (!this.__environment) {
- this.__environment =
- requireModule('ember-debug/config')['default'].environment;
- }
- return this.__environment;
- }
-
debug() {
return console.debug(...arguments);
}
@@ -94,19 +79,14 @@ export default class BasicAdapter extends BaseObject {
* @param {Error} error
*/
handleError(error) {
- if (this.environment === 'production') {
- if (error && error instanceof Error) {
- error = `Error message: ${error.message}\nStack trace: ${error.stack}`;
- }
- this.warn(
- `Ember Inspector has errored.\n` +
- `This is likely a bug in the inspector itself.\n` +
- `You can report bugs at https://github.com/emberjs/ember-inspector.\n${error}`,
- );
- } else {
- this.warn('EmberDebug has errored:');
- throw error;
+ if (error && error instanceof Error) {
+ error = `Error message: ${error.message}\nStack trace: ${error.stack}`;
}
+ this.warn(
+ `Ember Inspector has errored.\n` +
+ `This is likely a bug in the inspector itself.\n` +
+ `You can report bugs at https://github.com/emberjs/ember-inspector.\n${error}`,
+ );
}
/**
diff --git a/ember_debug/adapters/web-extension.js b/ember_debug/adapters/web-extension.js
index b2d4de7422..c5003aa228 100644
--- a/ember_debug/adapters/web-extension.js
+++ b/ember_debug/adapters/web-extension.js
@@ -1,8 +1,8 @@
import BasicAdapter from './basic';
-import { typeOf } from 'ember-debug/utils/type-check';
+import { typeOf } from '../utils/type-check';
-import Ember from 'ember-debug/utils/ember';
-import { run } from 'ember-debug/utils/ember/runloop';
+import { getEnv } from '../utils/ember';
+import { run } from '../utils/ember/runloop';
const { isArray } = Array;
const { keys } = Object;
@@ -106,7 +106,7 @@ export default class extends BasicAdapter {
// adapter later. See GH #1114.
const HAS_ARRAY_PROTOTYPE_EXTENSIONS = (() => {
try {
- return Ember.ENV.EXTEND_PROTOTYPES.Array === true;
+ return getEnv().EXTEND_PROTOTYPES.Array === true;
} catch {
return false;
}
diff --git a/ember_debug/adapters/websocket.js b/ember_debug/adapters/websocket.js
index 10aa5a6d90..9c7b5675e2 100644
--- a/ember_debug/adapters/websocket.js
+++ b/ember_debug/adapters/websocket.js
@@ -1,6 +1,6 @@
import BasicAdapter from './basic';
-import { onReady } from 'ember-debug/utils/on-ready';
-import { run } from 'ember-debug/utils/ember/runloop';
+import { onReady } from '../utils/on-ready';
+import { run } from '../utils/ember/runloop';
export default class extends BasicAdapter {
sendMessage(options = {}) {
diff --git a/ember_debug/container-debug.js b/ember_debug/container-debug.js
index a1f607bbe7..b8f9a35e86 100644
--- a/ember_debug/container-debug.js
+++ b/ember_debug/container-debug.js
@@ -1,4 +1,4 @@
-import DebugPort from './debug-port';
+import DebugPort from './debug-port.js';
export default class extends DebugPort {
get objectInspector() {
diff --git a/ember_debug/data-debug.js b/ember_debug/data-debug.js
index 84bc989296..73aa750694 100644
--- a/ember_debug/data-debug.js
+++ b/ember_debug/data-debug.js
@@ -1,5 +1,5 @@
-import DebugPort from './debug-port';
-import { guidFor } from 'ember-debug/utils/ember/object/internals';
+import DebugPort from './debug-port.js';
+import { guidFor } from './utils/ember/object/internals';
export default class extends DebugPort {
// eslint-disable-next-line ember/classic-decorator-hooks
diff --git a/ember_debug/debug-port.js b/ember_debug/debug-port.js
index 872ce3d260..4aad6287dd 100644
--- a/ember_debug/debug-port.js
+++ b/ember_debug/debug-port.js
@@ -1,4 +1,4 @@
-import BaseObject from 'ember-debug/utils/base-object';
+import BaseObject from './utils/base-object';
export default class extends BaseObject {
port = null;
diff --git a/ember_debug/deprecation-debug.js b/ember_debug/deprecation-debug.js
index 16fcac9dc5..900559c08a 100644
--- a/ember_debug/deprecation-debug.js
+++ b/ember_debug/deprecation-debug.js
@@ -1,9 +1,9 @@
-import DebugPort from './debug-port';
-import SourceMap from 'ember-debug/libs/source-map';
+import DebugPort from './debug-port.js';
+import SourceMap from './libs/source-map';
-import { registerDeprecationHandler } from 'ember-debug/utils/ember/debug';
-import { guidFor } from 'ember-debug/utils/ember/object/internals';
-import { cancel, debounce } from 'ember-debug/utils/ember/runloop';
+import { Debug } from './utils/ember';
+import { guidFor } from './utils/ember/object/internals';
+import { cancel, debounce } from './utils/ember/runloop';
export default class extends DebugPort {
static {
@@ -194,7 +194,7 @@ export default class extends DebugPort {
}
handleDeprecations() {
- registerDeprecationHandler((message, options, next) => {
+ Debug.registerDeprecationHandler((message, options, next) => {
if (!this.adapter) {
next(message, options);
return;
diff --git a/ember_debug/entrypoints/basic-debug.js b/ember_debug/entrypoints/basic-debug.js
new file mode 100644
index 0000000000..9de315586f
--- /dev/null
+++ b/ember_debug/entrypoints/basic-debug.js
@@ -0,0 +1,6 @@
+import loadEmberDebugInWebpage from '../lib/load-ember-debug-in-webpage';
+import { onEmberReady, startInspector } from '../lib/start-inspector';
+
+import adapter from '../adapters/basic';
+
+loadEmberDebugInWebpage(() => onEmberReady(startInspector(adapter)));
diff --git a/ember_debug/entrypoints/bookmarklet-debug.js b/ember_debug/entrypoints/bookmarklet-debug.js
new file mode 100644
index 0000000000..484d83571c
--- /dev/null
+++ b/ember_debug/entrypoints/bookmarklet-debug.js
@@ -0,0 +1,6 @@
+import loadEmberDebugInWebpage from '../lib/load-ember-debug-in-webpage';
+import { onEmberReady, startInspector } from '../lib/start-inspector';
+
+import adapter from '../adapters/bookmarklet';
+
+loadEmberDebugInWebpage(() => onEmberReady(startInspector(adapter)));
diff --git a/ember_debug/entrypoints/chrome-debug.js b/ember_debug/entrypoints/chrome-debug.js
new file mode 100644
index 0000000000..b4e64fede2
--- /dev/null
+++ b/ember_debug/entrypoints/chrome-debug.js
@@ -0,0 +1,6 @@
+import loadEmberDebugInWebpage from '../lib/load-ember-debug-in-webpage';
+import { onEmberReady, startInspector } from '../lib/start-inspector';
+
+import adapter from '../adapters/chrome';
+
+loadEmberDebugInWebpage(() => onEmberReady(startInspector(adapter)));
diff --git a/ember_debug/entrypoints/firefox-debug.js b/ember_debug/entrypoints/firefox-debug.js
new file mode 100644
index 0000000000..42e922d4cd
--- /dev/null
+++ b/ember_debug/entrypoints/firefox-debug.js
@@ -0,0 +1,6 @@
+import loadEmberDebugInWebpage from '../lib/load-ember-debug-in-webpage';
+import { onEmberReady, startInspector } from '../lib/start-inspector';
+
+import adapter from '../adapters/firefox';
+
+loadEmberDebugInWebpage(() => onEmberReady(startInspector(adapter)));
diff --git a/ember_debug/entrypoints/websocket-debug.js b/ember_debug/entrypoints/websocket-debug.js
new file mode 100644
index 0000000000..5ec3f2ea3c
--- /dev/null
+++ b/ember_debug/entrypoints/websocket-debug.js
@@ -0,0 +1,6 @@
+import loadEmberDebugInWebpage from '../lib/load-ember-debug-in-webpage';
+import { onEmberReady, startInspector } from '../lib/start-inspector';
+
+import adapter from '../adapters/websocket';
+
+loadEmberDebugInWebpage(() => onEmberReady(startInspector(adapter)));
diff --git a/ember_debug/general-debug.js b/ember_debug/general-debug.js
index 7b113c4390..8eddc2bba3 100644
--- a/ember_debug/general-debug.js
+++ b/ember_debug/general-debug.js
@@ -1,7 +1,7 @@
/* eslint no-empty:0 */
-import DebugPort from './debug-port';
+import DebugPort from './debug-port.js';
-import Ember from 'ember-debug/utils/ember';
+import { libraries } from './utils/ember';
/**
* Class that handles gathering general information of the inspected app.
@@ -88,7 +88,7 @@ export default class extends DebugPort {
*/
getLibraries() {
this.sendMessage('libraries', {
- libraries: Ember.libraries?._registry,
+ libraries: libraries?._registry,
});
},
diff --git a/ember_debug/lib/boot-ember-inspector.js b/ember_debug/lib/boot-ember-inspector.js
new file mode 100644
index 0000000000..238875ba60
--- /dev/null
+++ b/ember_debug/lib/boot-ember-inspector.js
@@ -0,0 +1,9 @@
+export default function bootEmberInspector(appInstance) {
+ appInstance.application.__inspector__booted = true;
+ appInstance.__inspector__booted = true;
+
+ // Boot the inspector (or re-boot if already booted, for example in tests)
+ window.EmberInspector._application = appInstance.application;
+ window.EmberInspector.owner = appInstance;
+ window.EmberInspector.start(true);
+}
diff --git a/ember_debug/lib/get-applications.js b/ember_debug/lib/get-applications.js
new file mode 100644
index 0000000000..989d8240e8
--- /dev/null
+++ b/ember_debug/lib/get-applications.js
@@ -0,0 +1,28 @@
+import { Application, Namespace, guidFor } from '../utils/ember';
+
+/**
+ * Get all the Ember.Application instances from Ember.Namespace.NAMESPACES
+ * and add our own applicationId and applicationName to them
+ * @return {*}
+ */
+export default function getApplications() {
+ var namespaces = Namespace.NAMESPACES;
+
+ var apps = namespaces.filter(function (namespace) {
+ return namespace instanceof Application;
+ });
+
+ return apps.map(function (app) {
+ // Add applicationId and applicationName to the app
+ var applicationId = guidFor(app);
+ var applicationName =
+ app.name || app.modulePrefix || `(unknown app - ${applicationId})`;
+
+ Object.assign(app, {
+ applicationId,
+ applicationName,
+ });
+
+ return app;
+ });
+}
diff --git a/ember_debug/lib/load-ember-debug-in-webpage.js b/ember_debug/lib/load-ember-debug-in-webpage.js
new file mode 100644
index 0000000000..45331c0e41
--- /dev/null
+++ b/ember_debug/lib/load-ember-debug-in-webpage.js
@@ -0,0 +1,32 @@
+export default function loadEmberDebugInWebpage(callback) {
+ const waitForEmberLoad = new Promise((resolve) => {
+ if (window.requireModule) {
+ const has =
+ window.requireModule.has ||
+ function has(id) {
+ return !!(
+ window.requireModule.entries[id] ||
+ window.requireModule.entries[id + '/index']
+ );
+ };
+ if (has('ember')) {
+ return resolve();
+ }
+ }
+
+ /**
+ * NOTE: if the above (for some reason) fails and the consuming app has
+ * deprecation-workflow's throwOnUnhandled: true
+ * or set \`ember-global\`'s handler to 'throw'
+ * and is using at least \`ember-source@3.27\`
+ *
+ * this will throw an exception in the consuming project
+ */
+ if (window.Ember) return resolve();
+
+ if (globalThis.emberInspectorApps) return resolve();
+
+ window.addEventListener('Ember', resolve, { once: true });
+ });
+ waitForEmberLoad.then(callback);
+}
diff --git a/ember_debug/lib/send-apps.js b/ember_debug/lib/send-apps.js
new file mode 100644
index 0000000000..eb79287c9f
--- /dev/null
+++ b/ember_debug/lib/send-apps.js
@@ -0,0 +1,14 @@
+export default function sendApps(adapter, apps) {
+ const serializedApps = apps.map((app) => {
+ return {
+ applicationName: app.applicationName,
+ applicationId: app.applicationId,
+ };
+ });
+
+ adapter.sendMessage({
+ type: 'apps-loaded',
+ apps: serializedApps,
+ from: 'inspectedWindow',
+ });
+}
diff --git a/ember_debug/lib/send-version-miss.js b/ember_debug/lib/send-version-miss.js
new file mode 100644
index 0000000000..51fa62f630
--- /dev/null
+++ b/ember_debug/lib/send-version-miss.js
@@ -0,0 +1,38 @@
+let channel = new MessageChannel();
+let port = channel.port1;
+window.postMessage('debugger-client', '*', [channel.port2]);
+
+let registeredMiss = false;
+
+/**
+ * This function is called if the app's Ember version
+ * is not supported by this version of the inspector.
+ *
+ * It sends a message to the inspector app to redirect
+ * to an inspector version that supports this Ember version.
+ */
+export default function sendVersionMiss(VERSION) {
+ if (registeredMiss) {
+ return;
+ }
+
+ registeredMiss = true;
+
+ port.addEventListener('message', (message) => {
+ if (message.type === 'check-version') {
+ sendVersionMismatch();
+ }
+ });
+
+ sendVersionMismatch();
+
+ port.start();
+
+ function sendVersionMismatch() {
+ port.postMessage({
+ name: 'version-mismatch',
+ version: VERSION,
+ from: 'inspectedWindow',
+ });
+ }
+}
diff --git a/ember_debug/lib/setup-instance-initializer.js b/ember_debug/lib/setup-instance-initializer.js
new file mode 100644
index 0000000000..4cff83fd5f
--- /dev/null
+++ b/ember_debug/lib/setup-instance-initializer.js
@@ -0,0 +1,17 @@
+import { guidFor } from '../utils/ember';
+
+export default function setupInstanceInitializer(app, callback) {
+ if (!app.__inspector__setup) {
+ app.__inspector__setup = true;
+
+ // We include the app's guid in the initializer name because in Ember versions < 3
+ // registering an instance initializer with the same name, even if on a different app,
+ // triggers an error because instance initializers seem to be global instead of per app.
+ app.instanceInitializer({
+ name: 'ember-inspector-app-instance-booted-' + guidFor(app),
+ initialize: function (instance) {
+ callback(instance);
+ },
+ });
+ }
+}
diff --git a/ember_debug/lib/start-inspector.js b/ember_debug/lib/start-inspector.js
new file mode 100644
index 0000000000..b77953634a
--- /dev/null
+++ b/ember_debug/lib/start-inspector.js
@@ -0,0 +1,195 @@
+/* eslint-disable ember/no-test-import-export */
+import versionTest from './version-test';
+import { EMBER_VERSIONS_SUPPORTED } from './versions';
+import sendApps from './send-apps';
+import getApplications from './get-applications';
+import bootEmberInspector from './boot-ember-inspector';
+import setupInstanceInitializer from './setup-instance-initializer';
+import sendVersionMiss from './send-version-miss';
+import { guidFor, Application, VERSION } from '../utils/ember';
+
+function onReady(callback) {
+ if (
+ document.readyState === 'complete' ||
+ document.readyState === 'interactive'
+ ) {
+ setTimeout(completed);
+ } else {
+ document.addEventListener('DOMContentLoaded', completed, false);
+ // For some reason DOMContentLoaded doesn't always work
+ window.addEventListener('load', completed, false);
+ }
+
+ function completed() {
+ document.removeEventListener('DOMContentLoaded', completed, false);
+ window.removeEventListener('load', completed, false);
+ callback();
+ }
+}
+
+export function onEmberReady(callback) {
+ var triggered = false;
+ var triggerOnce = function () {
+ if (triggered) {
+ return;
+ }
+
+ triggered = true;
+ callback();
+ };
+
+ // Newest Ember versions >= 1.10
+
+ const later = () => setTimeout(triggerOnce, 0);
+ window.addEventListener('Ember', later, { once: true });
+ // Oldest Ember versions or if this was injected after Ember has loaded.
+ onReady(triggerOnce);
+}
+
+export function startInspector(adapter) {
+ // There's probably a better way
+ // to determine when the application starts
+ // but this definitely works
+ function onApplicationStart(callback) {
+ const adapterInstance = new adapter();
+
+ adapterInstance.onMessageReceived(function (message) {
+ if (message.type === 'app-picker-loaded') {
+ sendApps(adapterInstance, getApplications());
+ }
+
+ if (message.type === 'app-selected') {
+ let current = window.EmberInspector._application;
+ let selected = getApplications().find(
+ (app) => guidFor(app) === message.applicationId,
+ );
+
+ if (
+ selected &&
+ current !== selected &&
+ selected.__deprecatedInstance__
+ ) {
+ bootEmberInspector(selected.__deprecatedInstance__);
+ }
+ }
+ });
+
+ var apps = getApplications();
+
+ sendApps(adapterInstance, apps);
+
+ function loadInstance(app) {
+ const applicationInstances = app._applicationInstances && [
+ ...app._applicationInstances,
+ ];
+ let instance = app.__deprecatedInstance__ || applicationInstances[0];
+ if (instance) {
+ // App started
+ setupInstanceInitializer(app, callback);
+ callback(instance);
+ return true;
+ }
+ }
+
+ var app;
+ for (var i = 0, l = apps.length; i < l; i++) {
+ app = apps[i];
+ // We check for the existance of an application instance because
+ // in Ember > 3 tests don't destroy the app when they're done but the app has no booted instances.
+ if (app._readinessDeferrals === 0) {
+ if (loadInstance(app)) {
+ break;
+ }
+ }
+
+ // app already run initializers, but no instance, use _bootPromise and didBecomeReady
+ if (app._bootPromise) {
+ app._bootPromise.then((app) => {
+ loadInstance(app);
+ });
+ }
+
+ app.reopen({
+ didBecomeReady() {
+ this._super.apply(this, arguments);
+ setTimeout(() => loadInstance(app), 0);
+ },
+ });
+ }
+ Application.initializer({
+ name: 'ember-inspector-booted',
+ initialize: function (app) {
+ setupInstanceInitializer(app, callback);
+ },
+ });
+ }
+
+ return async function startInspector() {
+ // global to prevent injection
+ if (window.NO_EMBER_DEBUG) {
+ return;
+ }
+
+ /**
+ * If we don't have a way to know the Ember version at this point
+ * because the Ember app has not loaded and provided it somehow,
+ * we can't continue (we need the version to know what version of
+ * the Inspector to load).
+ */
+ if (!VERSION) {
+ return;
+ }
+
+ /**
+ * This is used to redirect to an old snapshot of the Inspector if the
+ * inspected app uses an older Ember version than supported versions.
+ * The code fits the Inspector supporting Ember back to 3.16: any version
+ * before 3.16 is necessarily a classic Ember app with Ember defined.
+ */
+ if ((VERSION, !versionTest(VERSION, EMBER_VERSIONS_SUPPORTED))) {
+ // Wrong inspector version. Redirect to the correct version.
+ sendVersionMiss(VERSION);
+ return;
+ }
+
+ // prevent from injecting twice
+ if (!window.EmberInspector) {
+ let emberDebugMainModule = (await import('../main')).default;
+ if (!emberDebugMainModule) {
+ return;
+ }
+ window.EmberInspector = emberDebugMainModule;
+ window.EmberInspector.Adapter = adapter;
+
+ onApplicationStart(function appStarted(instance) {
+ let app = instance.application;
+ if (!('__inspector__booted' in app)) {
+ // Watch for app reset/destroy
+ app.reopen({
+ reset: function () {
+ this.__inspector__booted = false;
+ this._super.apply(this, arguments);
+ },
+ });
+ }
+
+ if (instance && !('__inspector__booted' in instance)) {
+ instance.reopen({
+ // Clean up on instance destruction
+ willDestroy() {
+ if (window.EmberInspector.owner === instance) {
+ window.EmberInspector.destroyContainer();
+ window.EmberInspector.clear();
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ if (!window.EmberInspector._application) {
+ setTimeout(() => bootEmberInspector(instance), 0);
+ }
+ }
+ });
+ }
+ };
+}
diff --git a/ember_debug/lib/version-test.js b/ember_debug/lib/version-test.js
new file mode 100644
index 0000000000..30b7fdec62
--- /dev/null
+++ b/ember_debug/lib/version-test.js
@@ -0,0 +1,73 @@
+/* eslint-disable ember/no-test-import-export */
+
+/**
+ * @method compare
+ * @param {Number} val
+ * @param {Number} number
+ * @return {Number}
+ * 0: same
+ * -1: <
+ * 1: >
+ */
+function compare(val, number) {
+ if (val === number) {
+ return 0;
+ } else if (val < number) {
+ return -1;
+ } else if (val > number) {
+ return 1;
+ }
+}
+
+/**
+ * Remove -alpha, -beta, etc from versions
+ *
+ * @param {String} version
+ * @return {String} The cleaned up version
+ */
+function cleanupVersion(version) {
+ return version.replace(/-.*/g, '');
+}
+
+/**
+ * Compares two Ember versions.
+ *
+ * Returns:
+ * `-1` if version1 < version
+ * 0 if version1 == version2
+ * 1 if version1 > version2
+ *
+ * @param {String} version1
+ * @param {String} version2
+ * @return {Boolean} result of the comparison
+ */
+function compareVersion(version1, version2) {
+ let compared, i;
+ version1 = cleanupVersion(version1).split('.');
+ version2 = cleanupVersion(version2).split('.');
+ for (i = 0; i < 3; i++) {
+ compared = compare(+version1[i], +version2[i]);
+ if (compared !== 0) {
+ return compared;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Checks if a version is between two different versions.
+ * version should be >= left side, < right side
+ *
+ * @param {String} version1
+ * @param {String} version2
+ * @return {Boolean}
+ */
+export default function versionTest(version, between) {
+ var fromVersion = between[0];
+ var toVersion = between[1];
+
+ if (compareVersion(version, fromVersion) === -1) {
+ return false;
+ }
+ return !toVersion || compareVersion(version, toVersion) === -1;
+}
diff --git a/ember_debug/lib/versions.js b/ember_debug/lib/versions.js
new file mode 100644
index 0000000000..236afa6817
--- /dev/null
+++ b/ember_debug/lib/versions.js
@@ -0,0 +1,3 @@
+export const EMBER_VERSIONS_SUPPORTED = ['3.16.0', ''];
+
+export const PREVIOUS_EMBER_VERSIONS_SUPPORTED = ['0.0.0', '2.7.0', '3.4.0'];
diff --git a/ember_debug/libs/capture-render-tree.js b/ember_debug/libs/capture-render-tree.js
index b07c10c6cd..e84afaafd4 100644
--- a/ember_debug/libs/capture-render-tree.js
+++ b/ember_debug/libs/capture-render-tree.js
@@ -1,4 +1,4 @@
-import { captureRenderTree, getEnv } from 'ember-debug/utils/ember';
+import { captureRenderTree, getEnv } from '../utils/ember';
let capture = captureRenderTree;
// Ember 3.14+ comes with debug render tree, but the version in 3.14.0/3.14.1 is buggy
diff --git a/ember_debug/libs/promise-assembler.js b/ember_debug/libs/promise-assembler.js
index 6085c3b587..63a055ff92 100644
--- a/ember_debug/libs/promise-assembler.js
+++ b/ember_debug/libs/promise-assembler.js
@@ -5,10 +5,10 @@
and Yapp Labs (@yapplabs).
*/
-import Promise from 'ember-debug/models/promise';
-import RSVP from 'ember-debug/utils/rsvp';
-import BaseObject from 'ember-debug/utils/base-object';
-import Evented from 'ember-debug/utils/evented';
+import Promise from '../models/promise';
+import { RSVP } from '../utils/ember';
+import BaseObject from '../utils/base-object';
+import Evented from '../utils/evented';
class PromiseAssembler extends BaseObject {
// RSVP lib to debug
diff --git a/ember_debug/libs/render-tree.js b/ember_debug/libs/render-tree.js
index 876c0e0b0c..e30cce1ef8 100644
--- a/ember_debug/libs/render-tree.js
+++ b/ember_debug/libs/render-tree.js
@@ -1,36 +1,31 @@
-import captureRenderTree from './capture-render-tree';
-import { guidFor } from 'ember-debug/utils/ember/object/internals';
-import { EmberLoader, emberSafeRequire } from 'ember-debug/utils/ember/loader';
-import { inspect } from 'ember-debug/utils/type-check';
-import { isInVersionSpecifier } from 'ember-debug/utils/version';
-import { VERSION } from 'ember-debug/utils/ember';
+import captureRenderTree from './capture-render-tree.js';
+import { guidFor } from '../utils/ember/object/internals';
+import { inspect } from '../utils/type-check';
+import { isInVersionSpecifier } from '../utils/version';
+import {
+ VERSION,
+ EmberDestroyable,
+ GlimmerManager,
+ GlimmerReference,
+ GlimmerRuntime,
+ GlimmerUtil,
+} from '../utils/ember';
class InElementSupportProvider {
constructor(owner) {
this.nodeMap = new Map();
this.remoteRoots = [];
- this.runtime = this.require('@glimmer/runtime');
- this.reference = this.require('@glimmer/reference');
- try {
- this.Wormhole = requireModule('ember-wormhole/components/ember-wormhole');
- } catch {
- // nope
- }
+ this.runtime = GlimmerRuntime;
+ this.reference = GlimmerReference;
- try {
- requireModule(
- '@glimmer/manager',
- ).CustomModifierManager.prototype.getDebugInstance = (args) =>
- args.modifier || args.delegate;
- } catch {
- // nope
+ if (GlimmerManager) {
+ GlimmerManager.CustomModifierManager.prototype.getDebugInstance = (
+ args,
+ ) => args.modifier || args.delegate;
}
- this.DESTROY = emberSafeRequire('@glimmer/util')?.DESTROY;
- this.registerDestructor =
- emberSafeRequire('@glimmer/destroyable')?.registerDestructor ||
- emberSafeRequire('@ember/destroyable')?.registerDestructor ||
- emberSafeRequire('@ember/runtime')?.registerDestructor;
+ this.DESTROY = GlimmerUtil?.DESTROY;
+ this.registerDestructor = EmberDestroyable?.registerDestructor;
this.debugRenderTree =
owner.lookup('renderer:-dom')?.debugRenderTree ||
@@ -290,12 +285,6 @@ class InElementSupportProvider {
);
this.NewElementBuilderFunctions = null;
}
-
- require(req) {
- return requireModule.has(req)
- ? requireModule(req)
- : EmberLoader.require(req);
- }
}
export default class RenderTree {
@@ -613,9 +602,11 @@ export default class RenderTree {
this.inElementSupport?.remoteRoots.push(node);
}
+ // EmberWormhole component from ember-wormhole was used to provide
+ // rendering into a given DOM element prior to built-in in-element.
if (
- this.inElementSupport?.Wormhole &&
- node.instance instanceof this.inElementSupport.Wormhole.default
+ node.template ===
+ 'ember-wormhole/templates/components/ember-wormhole.hbs'
) {
this.inElementSupport?.remoteRoots.push(node);
const bounds = node.bounds;
@@ -643,10 +634,11 @@ export default class RenderTree {
node.args.named[attr.nodeName] = attr.nodeValue;
});
// move modifiers and components into the element children
+
parentNode.children.forEach((child) => {
if (
- child.bounds.parentElement === node.instance ||
- child.meta?.parentElement === node.instance ||
+ node.instance.contains(child.bounds.parentElement) ||
+ node.instance.contains(child.meta?.parentElement) ||
(child.type === 'modifier' &&
child.bounds.firstNode === node.instance)
) {
diff --git a/ember_debug/libs/source-map.js b/ember_debug/libs/source-map.js
index 64f7c46916..ac89a42625 100644
--- a/ember_debug/libs/source-map.js
+++ b/ember_debug/libs/source-map.js
@@ -1,4 +1,4 @@
-import BaseObject from 'ember-debug/utils/base-object';
+import BaseObject from '../utils/base-object';
import * as SourceMap from 'source-map-js';
const notFoundError = new Error('Source map url not found');
diff --git a/ember_debug/libs/view-inspection.js b/ember_debug/libs/view-inspection.js
index 35e9b82764..d18b42c89a 100644
--- a/ember_debug/libs/view-inspection.js
+++ b/ember_debug/libs/view-inspection.js
@@ -1,6 +1,6 @@
-import classify from 'ember-debug/utils/classify';
-import bound from 'ember-debug/utils/bound-method';
-import getObjectName from '../utils/get-object-name';
+import classify from '../utils/classify';
+import bound from '../utils/bound-method';
+import getObjectName from '../utils/get-object-name.js';
function makeHighlight(id) {
return `
`;
@@ -317,7 +317,11 @@ export default class ViewInspection {
onMouseMove(event) {
event.preventDefault();
event.stopPropagation();
- this.inspectNearest(event.target, false);
+ let target = event.target;
+ if (target.shadowRoot) {
+ target = target.shadowRoot.elementFromPoint(event.x, event.y) || target;
+ }
+ this.inspectNearest(target, false);
}
onKeyDown(event) {
@@ -342,7 +346,11 @@ export default class ViewInspection {
} else if (this.isInspecting && event.button === 0) {
event.preventDefault();
event.stopPropagation();
- this.inspectNearest(event.target, true);
+ let target = event.target;
+ if (target.shadowRoot) {
+ target = target.shadowRoot.elementFromPoint(event.x, event.y) || target;
+ }
+ this.inspectNearest(target, true);
this.stop(false);
}
}
diff --git a/ember_debug/main.js b/ember_debug/main.js
index 74160e45d0..7401869c58 100644
--- a/ember_debug/main.js
+++ b/ember_debug/main.js
@@ -1,23 +1,20 @@
-import BasicAdapter from 'ember-debug/adapters/basic';
-import Port from 'ember-debug/port';
-import ObjectInspector from 'ember-debug/object-inspector';
-import GeneralDebug from 'ember-debug/general-debug';
-import RenderDebug from 'ember-debug/render-debug';
-import ViewDebug from 'ember-debug/view-debug';
-import RouteDebug from 'ember-debug/route-debug';
-import DataDebug from 'ember-debug/data-debug';
-import PromiseDebug from 'ember-debug/promise-debug';
-import ContainerDebug from 'ember-debug/container-debug';
-import DeprecationDebug from 'ember-debug/deprecation-debug';
-import Session from 'ember-debug/services/session';
-
-import { Application, Namespace } from 'ember-debug/utils/ember';
-import {
- guidFor,
- setGuidPrefix,
-} from 'ember-debug/utils/ember/object/internals';
-import { run } from 'ember-debug/utils/ember/runloop';
-import BaseObject from 'ember-debug/utils/base-object';
+import BasicAdapter from './adapters/basic';
+import Port from './port';
+import ObjectInspector from './object-inspector';
+import GeneralDebug from './general-debug';
+import RenderDebug from './render-debug';
+import ViewDebug from './view-debug';
+import RouteDebug from './route-debug';
+import DataDebug from './data-debug';
+import PromiseDebug from './promise-debug';
+import ContainerDebug from './container-debug';
+import DeprecationDebug from './deprecation-debug';
+import Session from './services/session';
+
+import { Application, Namespace } from './utils/ember';
+import { guidFor, setGuidPrefix } from './utils/ember/object/internals';
+import { run } from './utils/ember/runloop';
+import BaseObject from './utils/base-object';
class EmberDebug extends BaseObject {
/**
diff --git a/ember_debug/models/profile-manager.js b/ember_debug/models/profile-manager.js
index 24ab4a6e1d..e77009abdd 100644
--- a/ember_debug/models/profile-manager.js
+++ b/ember_debug/models/profile-manager.js
@@ -1,8 +1,8 @@
-import ProfileNode from './profile-node';
-import Ember from 'ember-debug/utils/ember';
-import { compareVersion } from 'ember-debug/utils/version';
+import ProfileNode from './profile-node.js';
+import { VERSION } from '../utils/ember';
+import { compareVersion } from '../utils/version';
-import { later, scheduleOnce, cancel } from 'ember-debug/utils/ember/runloop';
+import { later, scheduleOnce, cancel } from '../utils/ember/runloop';
function getEdges(first, last, closest) {
let start = null;
@@ -75,8 +75,7 @@ export default class ProfileManager {
this.stylesheet = insertStylesheet();
// keep track of all the active highlights
this.highlights = [];
- // eslint-disable-next-line ember/new-module-imports
- this.isHighlightEnabled = compareVersion(Ember?.VERSION, '3.20.0') !== -1;
+ this.isHighlightEnabled = compareVersion(VERSION, '3.20.0') !== -1;
}
began(timestamp, payload, now) {
diff --git a/ember_debug/models/profile-node.js b/ember_debug/models/profile-node.js
index 58b0869809..7f391008a7 100644
--- a/ember_debug/models/profile-node.js
+++ b/ember_debug/models/profile-node.js
@@ -3,7 +3,7 @@
@class ProfileNode
**/
-import { guidFor } from 'ember-debug/utils/ember/object/internals';
+import { guidFor } from '../utils/ember/object/internals';
function get(obj, key) {
return obj.get ? obj.get(key) : obj[key];
diff --git a/ember_debug/models/promise.js b/ember_debug/models/promise.js
index bd86531038..b80256dd06 100644
--- a/ember_debug/models/promise.js
+++ b/ember_debug/models/promise.js
@@ -1,5 +1,5 @@
-import { typeOf } from 'ember-debug/utils/type-check';
-import BaseObject from 'ember-debug/utils/base-object';
+import { typeOf } from '../utils/type-check';
+import BaseObject from '../utils/base-object';
const dateComputed = function () {
return function (target, propertyKey) {
diff --git a/ember_debug/object-inspector.js b/ember_debug/object-inspector.js
index c0f4f8a8f1..3d8fd8790d 100644
--- a/ember_debug/object-inspector.js
+++ b/ember_debug/object-inspector.js
@@ -1,13 +1,13 @@
/* eslint-disable ember/no-private-routing-service */
-import DebugPort from './debug-port';
-import bound from 'ember-debug/utils/bound-method';
+import DebugPort from './debug-port.js';
+import bound from './utils/bound-method';
import {
isComputed,
getDescriptorFor,
typeOf,
inspect,
-} from 'ember-debug/utils/type-check';
-import { compareVersion } from 'ember-debug/utils/version';
+} from './utils/type-check';
+import { compareVersion } from './utils/version';
import {
EmberObject,
meta as emberMeta,
@@ -16,28 +16,30 @@ import {
ObjectProxy,
ArrayProxy,
Service,
+ InternalsMetal,
Component,
-} from 'ember-debug/utils/ember';
-import { cacheFor, guidFor } from 'ember-debug/utils/ember/object/internals';
-import { _backburner, join } from 'ember-debug/utils/ember/runloop';
-import emberNames from './utils/ember-object-names';
-import getObjectName from './utils/get-object-name';
-import { EmberLoader } from 'ember-debug/utils/ember/loader';
-
-const GlimmerComponent = (() => {
- try {
- return EmberLoader.require('@glimmer/component').default;
- } catch {
- // ignore, return undefined
- }
-})();
+ GlimmerComponent,
+ GlimmerReference,
+ GlimmerValidator,
+ getOwner,
+} from './utils/ember';
+import { cacheFor, guidFor } from './utils/ember/object/internals';
+import { _backburner, join } from './utils/ember/runloop';
+import emberNames from './utils/ember-object-names.js';
+import getObjectName from './utils/get-object-name.js';
let tagValue, tagValidate, track, tagForProperty;
-try {
- // Try to load the most recent library
- let GlimmerValidator = EmberLoader.require('@glimmer/validator');
+const GlimmerDebugComponent = (() => GlimmerComponent?.default)();
+
+const OWNER_SYMBOL = '__owner__'; // can't use actual symbol because it can't be cloned
+// Try to use the most recent library (GlimmerValidator), else
+// fallback on the previous implementation (GlimmerReference).
+// The global checks if the inspected app is Vite, in that case
+// we can't execute that block because the properties it tries to
+// assign are readonly.
+if (GlimmerValidator && !globalThis.emberInspectorApps) {
tagValue = GlimmerValidator.value || GlimmerValidator.valueForTag;
tagValidate = GlimmerValidator.validate || GlimmerValidator.validateTag;
track = GlimmerValidator.track;
@@ -70,26 +72,15 @@ try {
}
return r;
};
-} catch {
- try {
- // Fallback to the previous implementation
- let GlimmerReference = EmberLoader.require('@glimmer/reference');
-
- tagValue = GlimmerReference.value;
- tagValidate = GlimmerReference.validate;
- } catch {
- // ignore
- }
+} else if (GlimmerReference) {
+ tagValue = GlimmerReference.value;
+ tagValidate = GlimmerReference.validate;
}
-try {
- let metal = EmberLoader.require('@ember/-internals/metal');
-
- tagForProperty = metal.tagForProperty;
+if (InternalsMetal) {
+ tagForProperty = InternalsMetal.tagForProperty;
// If track was not already loaded, use metal's version (the previous version)
- track = track || metal.track;
-} catch {
- // ignore
+ track = track || InternalsMetal.track;
}
const HAS_GLIMMER_TRACKING = tagValue && tagValidate && track && tagForProperty;
@@ -506,6 +497,8 @@ export default class extends DebugPort {
if (prop === null || prop === undefined) {
value = this.sentObjects[objectId];
+ } else if (prop === OWNER_SYMBOL) {
+ value = getOwner(this.sentObjects[objectId]);
} else {
value = calculateCP(object, { name: prop }, {});
}
@@ -630,6 +623,7 @@ export default class extends DebugPort {
* - Bar
* - Foo
* - EmberObject
+ * - Owner (Container)
* ```
*
* The "mixins" returned by this function directly represent these things too.
@@ -749,6 +743,27 @@ export default class extends DebugPort {
tracked,
);
+ const owner = getOwner(object);
+ const ownerId = guidFor(owner);
+
+ if (owner && !mixinDetails.find((mixin) => mixin.id === ownerId)) {
+ mixinDetails.push({
+ name: 'Container',
+ id: ownerId,
+ expand: false,
+ properties: [
+ {
+ name: OWNER_SYMBOL,
+ value: {
+ inspect: `
`,
+ type: 'type-owner',
+ objectId: ownerId,
+ },
+ },
+ ],
+ });
+ }
+
this.currentObject = { object, mixinDetails, objectId };
let errors = errorsToSend(errorsForObject);
@@ -914,18 +929,7 @@ function addProperties(properties, hash) {
let options = { isMandatorySetter: isMandatorySetter(desc) };
if (typeof hash[prop] === 'object' && hash[prop] !== null) {
- options.isService =
- !('type' in hash[prop]) && hash[prop].type === 'service';
-
- if (!options.isService) {
- if (hash[prop].constructor) {
- options.isService = hash[prop].constructor.isServiceFactory;
- }
- }
-
- if (!options.isService) {
- options.isService = desc.value instanceof Service;
- }
+ options.isService = desc.value instanceof Service;
}
if (options.isService) {
replaceProperty(properties, prop, inspectValue(hash, prop), options);
@@ -1127,6 +1131,9 @@ function calculateCPs(
item.code = '';
}
}
+ if (value instanceof Service) {
+ item.isService = true;
+ }
}
}
});
@@ -1285,7 +1292,7 @@ function getDebugInfo(object) {
'element',
'targetObject',
);
- } else if (GlimmerComponent && object instanceof GlimmerComponent) {
+ } else if (GlimmerDebugComponent && object instanceof GlimmerDebugComponent) {
// These properties don't really exist on Glimmer Components, but
// reading their values trigger a development mode assertion. The
// more correct long term fix is to make getters lazy (shows "..."
@@ -1307,6 +1314,7 @@ function calculateCP(object, item, errorsForObject) {
if (object instanceof ArrayProxy && property == parseInt(property)) {
return object.at(property);
}
+
return item.isGetter || property.includes?.('.')
? object[property]
: object.get?.(property) || object[property]; // need to use `get` to be able to detect tracked props
diff --git a/ember_debug/package.json b/ember_debug/package.json
index a1afe6ac65..a9ea65be0a 100644
--- a/ember_debug/package.json
+++ b/ember_debug/package.json
@@ -1,5 +1,6 @@
{
"name": "ember-debug",
+ "version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
@@ -17,9 +18,10 @@
"backburner.js": "^2.8.0",
"glob": "^11.0.2",
"rollup": "^4.39.0",
+ "rollup-plugin-delete": "^3.0.1",
"source-map-js": "^1.2.1"
},
"exports": {
- "./*": "./*.js"
+ "./*": "./dist/*.js"
}
}
diff --git a/ember_debug/port.js b/ember_debug/port.js
index eca24f2a2e..e6cf16ed2e 100644
--- a/ember_debug/port.js
+++ b/ember_debug/port.js
@@ -1,7 +1,7 @@
-import { guidFor } from 'ember-debug/utils/ember/object/internals';
-import { run } from 'ember-debug/utils/ember/runloop';
-import BaseObject from 'ember-debug/utils/base-object';
-import Evented from 'ember-debug/utils/evented';
+import { guidFor } from './utils/ember/object/internals';
+import { run } from './utils/ember/runloop';
+import BaseObject from './utils/base-object';
+import Evented from './utils/evented';
export default class extends BaseObject {
constructor(data) {
diff --git a/ember_debug/promise-debug.js b/ember_debug/promise-debug.js
index c414794ab0..9a5ab6f319 100644
--- a/ember_debug/promise-debug.js
+++ b/ember_debug/promise-debug.js
@@ -1,7 +1,7 @@
-import DebugPort from './debug-port';
-import PromiseAssembler from 'ember-debug/libs/promise-assembler';
-import { debounce } from 'ember-debug/utils/ember/runloop';
-import RSVP from 'ember-debug/utils/rsvp';
+import DebugPort from './debug-port.js';
+import PromiseAssembler from './libs/promise-assembler';
+import { debounce } from './utils/ember/runloop';
+import { RSVP } from './utils/ember';
export default class extends DebugPort {
get objectInspector() {
diff --git a/ember_debug/render-debug.js b/ember_debug/render-debug.js
index 955e300b1f..8288ad8f6d 100644
--- a/ember_debug/render-debug.js
+++ b/ember_debug/render-debug.js
@@ -1,9 +1,9 @@
-import DebugPort from './debug-port';
-import ProfileManager from './models/profile-manager';
+import DebugPort from './debug-port.js';
+import ProfileManager from './models/profile-manager.js';
-import { subscribe } from 'ember-debug/utils/ember/instrumentation';
-import { _backburner } from 'ember-debug/utils/ember/runloop';
-import bound from 'ember-debug/utils/bound-method';
+import { subscribe } from './utils/ember';
+import { _backburner } from './utils/ember/runloop';
+import bound from './utils/bound-method';
// Initial setup, that has to occur before the EmberObject init for some reason
let profileManager = new ProfileManager();
diff --git a/ember_debug/rollup.config.js b/ember_debug/rollup.config.js
index 472c1363fb..b7799a8bd0 100644
--- a/ember_debug/rollup.config.js
+++ b/ember_debug/rollup.config.js
@@ -2,25 +2,22 @@ import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import { babel } from '@rollup/plugin-babel';
import { globSync } from 'glob';
+import del from 'rollup-plugin-delete';
export default {
input: [
'main.js',
- ...globSync('adapters/**/*.js'),
'utils/version.js',
+ 'utils/type-check.js',
'port.js',
'utils/ember.js',
+ 'utils/type-check',
'models/profile-node.js',
'libs/promise-assembler.js',
+ 'lib/versions.js',
+ ...globSync('entrypoints/*.js'),
],
output: {
- format: 'amd',
- amd: {
- autoId: true,
- // id: 'ember-debug/[name]',
- basePath: 'ember-debug',
- },
- chunkFileNames: '[name].js',
dir: 'dist',
},
@@ -28,21 +25,7 @@ export default {
babel(),
nodeResolve(),
commonjs(),
- /**
- * this plugin forces each of the intenral dependencies for each of the chunks to be prefixed with ember-debug
- */
- {
- name: 'rollup-plugin-name-amd-modules',
- renderChunk(code) {
- let splitCode = code.split('\n');
-
- splitCode[0] = splitCode[0].replaceAll(
- /'\.\/([^']*)'/g,
- `'ember-debug/$1'`,
- );
-
- return splitCode.join('\n');
- },
- },
- ],
+ // eslint-disable-next-line no-undef
+ process.env.NO_DEL_DIST && del({ targets: 'dist' }),
+ ].filter(Boolean),
};
diff --git a/ember_debug/route-debug.js b/ember_debug/route-debug.js
index 149d511b68..58077038ea 100644
--- a/ember_debug/route-debug.js
+++ b/ember_debug/route-debug.js
@@ -1,11 +1,11 @@
/* eslint-disable ember/no-private-routing-service */
-import DebugPort from './debug-port';
-import { compareVersion } from 'ember-debug/utils/version';
-import { VERSION } from 'ember-debug/utils/ember';
-import classify from 'ember-debug/utils/classify';
-import dasherize from 'ember-debug/utils/dasherize';
-import { _backburner, later } from 'ember-debug/utils/ember/runloop';
-import bound from 'ember-debug/utils/bound-method';
+import DebugPort from './debug-port.js';
+import { compareVersion } from './utils/version';
+import { VERSION } from './utils/ember';
+import classify from './utils/classify';
+import dasherize from './utils/dasherize';
+import { _backburner, later } from './utils/ember/runloop';
+import bound from './utils/bound-method';
const { hasOwnProperty } = Object.prototype;
diff --git a/ember_debug/services/session.js b/ember_debug/services/session.js
index c51b954966..e401c01fba 100644
--- a/ember_debug/services/session.js
+++ b/ember_debug/services/session.js
@@ -1,4 +1,4 @@
-import BaseObject from 'ember-debug/utils/base-object';
+import BaseObject from '../utils/base-object';
class Session extends BaseObject {
setItem(/*key, val*/) {}
diff --git a/ember_debug/utils/ember-object-names.js b/ember_debug/utils/ember-object-names.js
index 52140eaf3b..615b094cc3 100644
--- a/ember_debug/utils/ember-object-names.js
+++ b/ember_debug/utils/ember-object-names.js
@@ -1,5 +1,4 @@
-import { compareVersion } from 'ember-debug/utils/version';
-import { emberSafeRequire } from 'ember-debug/utils/ember/loader';
+import { compareVersion } from '../utils/version';
import {
VERSION,
ActionHandler,
@@ -10,10 +9,12 @@ import {
MutableArray,
Component,
Evented,
+ InternalsRuntime,
+ InternalsViews,
PromiseProxyMixin,
EmberObject,
Observable,
-} from 'ember-debug/utils/ember';
+} from '../utils/ember';
/**
* Add Known Ember Mixins and Classes so we can label them correctly in the inspector
@@ -26,21 +27,22 @@ const emberNames = new Map([
[NativeArray, 'NativeArray Mixin'],
[Observable, 'Observable Mixin'],
[ControllerMixin, 'Controller Mixin'],
- [ActionHandler, 'ActionHandler Mixin'],
[CoreObject, 'CoreObject'],
[EmberObject, 'EmberObject'],
[Component, 'Component'],
]);
+if (ActionHandler) {
+ emberNames.set(ActionHandler, 'ActionHandler Mixin');
+}
+
if (compareVersion(VERSION, '3.27.0') === -1) {
- const TargetActionSupport = emberSafeRequire(
- '@ember/-internals/runtime',
- )?.TargetActionSupport;
+ const TargetActionSupport = InternalsRuntime?.TargetActionSupport;
emberNames.set(TargetActionSupport, 'TargetActionSupport Mixin');
}
try {
- const Views = emberSafeRequire('@ember/-internals/views') || {};
+ const Views = InternalsViews || {};
emberNames.set(Views.ViewStateSupport, 'ViewStateSupport Mixin');
emberNames.set(Views.ViewMixin, 'View Mixin');
emberNames.set(Views.ActionSupport, 'ActionSupport Mixin');
diff --git a/ember_debug/utils/ember.js b/ember_debug/utils/ember.js
index c6f0565ecb..70f8c64908 100644
--- a/ember_debug/utils/ember.js
+++ b/ember_debug/utils/ember.js
@@ -1,6 +1,4 @@
/* eslint-disable ember/new-module-imports */
-import { emberSafeRequire } from 'ember-debug/utils/ember/loader';
-
let Ember;
try {
@@ -15,72 +13,227 @@ try {
Ember = window.Ember;
}
-let ArrayProxy = Ember.ArrayProxy;
-let Namespace = Ember.Namespace;
-let ActionHandler = Ember.ActionHandler;
-let ControllerMixin = Ember.ControllerMixin;
-let CoreObject = Ember.CoreObject;
-let Application = Ember.Application;
-let MutableArray = Ember.MutableArray;
-let MutableEnumerable = Ember.MutableEnumerable;
-let NativeArray = Ember.NativeArray;
-let Component = Ember.Component;
-let Observable = Ember.Observable;
-let Evented = Ember.Evented;
-let PromiseProxyMixin = Ember.PromiseProxyMixin;
-let Service = Ember.Service;
-let ObjectProxy = Ember.ObjectProxy;
-let VERSION = Ember.VERSION;
-let ComputedProperty = Ember.ComputedProperty;
-let meta = Ember.meta;
-let get = Ember.get;
-let set = Ember.set;
-let computed = Ember.computed;
-let EmberObject = Ember.Object;
-let captureRenderTree = Ember._captureRenderTree;
+const wrappedRequire = function (id) {
+ try {
+ return Ember.__loader.require(id);
+ } catch {
+ return requireModule(id);
+ }
+};
+
+export function emberSafeRequire(id) {
+ try {
+ return wrappedRequire(id);
+ } catch {
+ return undefined;
+ }
+}
+
+let Application,
+ ApplicationModule,
+ Namespace,
+ ActionHandler,
+ ControllerMixin,
+ CoreObject,
+ Debug,
+ MutableEnumerable,
+ NativeArray,
+ ArrayProxy,
+ MutableArray,
+ Component,
+ Observable,
+ Evented,
+ PromiseProxyMixin,
+ Service,
+ ObjectProxy,
+ InternalsMetal,
+ InternalsRuntime,
+ InternalsUtils,
+ InternalsViews,
+ EmberDestroyable,
+ ObjectInternals,
+ Instrumentation,
+ Runloop,
+ GlimmerComponent,
+ GlimmerManager,
+ GlimmerReference,
+ GlimmerRuntime,
+ GlimmerUtil,
+ GlimmerValidator,
+ RSVP,
+ VERSION,
+ ComputedProperty,
+ meta,
+ get,
+ set,
+ computed,
+ EmberObject,
+ Owner,
+ captureRenderTree,
+ getEnv,
+ getOwner;
+
+// This global is defined in Embroider to bring Vite support to the Inspector.
+// Having it defined is enough to assert the inspected app runs with Vite.
+if (globalThis.emberInspectorApps) {
+ // emberInspectorApps has been implemented as an array to support multiple
+ // apps in the future. So far, the inspector has supported only one app, so
+ // we rely on the first item in the array to keep the current behavior.
+ const appLoader = globalThis.emberInspectorApps[0];
+ const internalEmberModules = await appLoader.loadCompatInspector();
+
+ Application = internalEmberModules.Application.default;
+ ApplicationModule = internalEmberModules.Application;
+ Namespace = internalEmberModules.ApplicationNamespace.default;
+ NativeArray = internalEmberModules.Array.NativeArray;
+ MutableArray = internalEmberModules.ArrayMutable.default;
+ ArrayProxy = internalEmberModules.ArrayProxy.default;
+ Component = internalEmberModules.Component.default;
+ ControllerMixin = internalEmberModules.Controller.ControllerMixin;
+ Debug = internalEmberModules.Debug;
+ CoreObject = internalEmberModules.ObjectCore.default;
+ MutableEnumerable = internalEmberModules.EnumerableMutable.default;
+ getEnv = internalEmberModules.InternalsEnvironment?.getENV;
+ meta = internalEmberModules.InternalsMeta?.meta;
+ InternalsMetal = internalEmberModules.InternalsMetal;
+ ComputedProperty = InternalsMetal?.ComputedProperty;
+ InternalsRuntime = internalEmberModules.InternalsRuntime;
+ InternalsUtils = internalEmberModules.InternalsUtils;
+ InternalsViews = internalEmberModules.InternalsViews;
+ ObjectInternals = internalEmberModules.ObjectInternals;
+ Instrumentation = internalEmberModules.Instrumentation;
+ captureRenderTree = internalEmberModules.Debug.captureRenderTree;
+ ObjectProxy = internalEmberModules.ObjectProxy.default;
+ Observable = internalEmberModules.ObjectObservable.default;
+ Evented = internalEmberModules.ObjectEvented.default;
+ PromiseProxyMixin = internalEmberModules.ObjectPromiseProxyMixin.default;
+ Runloop = internalEmberModules.Runloop;
+ Service = internalEmberModules.Service.default;
+ EmberDestroyable = internalEmberModules.EmberDestroyable;
+ EmberObject = internalEmberModules.Object.default;
+ VERSION = internalEmberModules.VERSION.default;
+ set = internalEmberModules.Object.set;
+ get = internalEmberModules.Object.get;
+ RSVP = internalEmberModules.RSVP;
+ GlimmerComponent = internalEmberModules.GlimmerComponent;
+ GlimmerManager = internalEmberModules.GlimmerManager;
+ GlimmerReference = internalEmberModules.GlimmerReference;
+ GlimmerRuntime = internalEmberModules.GlimmerRuntime;
+ GlimmerUtil = internalEmberModules.GlimmerUtil;
+ GlimmerValidator = internalEmberModules.GlimmerValidator;
+ // owner was not available in all versions of ember that we support
+ Owner = internalEmberModules.Owner;
+}
+
+Debug = Debug ?? emberSafeRequire('@ember/debug');
+InternalsMetal = InternalsMetal ?? emberSafeRequire('@ember/-internals/metal');
+InternalsRuntime =
+ InternalsRuntime ?? emberSafeRequire('@ember/-internals/runtime');
+InternalsUtils = InternalsUtils ?? emberSafeRequire('@ember/-internals/utils');
+InternalsViews = InternalsViews ?? emberSafeRequire('@ember/-internals/views');
+EmberDestroyable = EmberDestroyable ?? emberSafeRequire('@ember/destroyable');
+ObjectInternals =
+ ObjectInternals ?? emberSafeRequire('@ember/object/internals');
+Instrumentation = Instrumentation ?? emberSafeRequire('@ember/instrumentation');
+Runloop = Runloop ?? emberSafeRequire('@ember/runloop');
+RSVP = RSVP ?? emberSafeRequire('rsvp');
+GlimmerComponent = GlimmerComponent ?? emberSafeRequire('@glimmer/component');
+GlimmerManager = GlimmerManager ?? emberSafeRequire('@glimmer/manager');
+GlimmerReference = GlimmerReference ?? emberSafeRequire('@glimmer/reference');
+GlimmerRuntime = GlimmerRuntime ?? emberSafeRequire('@glimmer/runtime');
+GlimmerUtil = GlimmerUtil ?? emberSafeRequire('@glimmer/util');
+GlimmerValidator = GlimmerValidator ?? emberSafeRequire('@glimmer/validator');
+Owner = Owner ?? emberSafeRequire('@ember/owner');
+ApplicationModule = ApplicationModule ?? emberSafeRequire('@ember/application');
-let getEnv = () => Ember.ENV;
+let inspect = Debug?.inspect || InternalsUtils?.inspect;
+let subscribe = Instrumentation?.subscribe;
+let cacheFor = ObjectInternals?.cacheFor;
+let guidFor = ObjectInternals?.guidFor;
+let libraries = InternalsMetal?.libraries;
-let Debug = emberSafeRequire('@ember/debug')?.default;
-let InternalsUtils = emberSafeRequire('@ember/-internals/utils')?.default;
-let ObjectInternals = emberSafeRequire('@ember/object/internals')?.default;
-let Instrumentation = emberSafeRequire('@ember/instrumentation')?.default;
-let RSVP = emberSafeRequire('rsvp')?.default;
-let Runloop = emberSafeRequire('@ember/runloop')?.default;
+if (Ember) {
+ Application = Ember.Application;
+ Namespace = Ember.Namespace;
+ ArrayProxy = Ember.ArrayProxy;
+ MutableArray = Ember.MutableArray;
+ MutableEnumerable = Ember.MutableEnumerable;
+ NativeArray = Ember.NativeArray;
+ ControllerMixin = Ember.ControllerMixin;
+ CoreObject = Ember.CoreObject;
+ Component = Ember.Component;
+ Observable = Ember.Observable;
+ Evented = Ember.Evented;
+ PromiseProxyMixin = Ember.PromiseProxyMixin;
+ Service = Ember.Service;
+ ObjectProxy = Ember.ObjectProxy;
+ VERSION = Ember.VERSION;
+ ComputedProperty = Ember.ComputedProperty;
+ meta = Ember.meta;
+ get = Ember.get;
+ set = Ember.set;
+ computed = Ember.computed;
+ EmberObject = Ember.Object;
+ captureRenderTree = Ember._captureRenderTree;
+ getEnv = () => Ember.ENV;
+ ActionHandler = Ember.ActionHandler;
+ Debug = Debug ?? Ember.Debug;
+ inspect = inspect ?? Ember.inspect;
+ Instrumentation = Instrumentation ?? Ember.Instrumentation;
+ subscribe = subscribe ?? Ember.subscribe;
+ RSVP = RSVP ?? Ember.RSVP;
+ Runloop = Runloop ?? Ember.run;
+ cacheFor = cacheFor ?? Ember.cacheFor;
+ guidFor = guidFor ?? Ember.guidFor;
+ libraries = libraries ?? Ember.libraries;
+} else {
+ captureRenderTree =
+ captureRenderTree ?? emberSafeRequire('@ember/debug')?.captureRenderTree;
+ getEnv = getEnv ?? emberSafeRequire('@ember/-internals/environment')?.getENV;
+ ArrayProxy = ArrayProxy ?? emberSafeRequire('@ember/array/proxy')?.default;
+ ObjectProxy = ObjectProxy ?? emberSafeRequire('@ember/object/proxy')?.default;
+ MutableArray =
+ MutableArray ?? emberSafeRequire('@ember/array/mutable')?.default;
+ Namespace =
+ Namespace ?? emberSafeRequire('@ember/application/namespace')?.default;
+ MutableEnumerable =
+ MutableEnumerable ?? emberSafeRequire('@ember/enumerable/mutable')?.default;
+ NativeArray = NativeArray ?? emberSafeRequire('@ember/array')?.NativeArray;
+ ControllerMixin =
+ ControllerMixin ?? emberSafeRequire('@ember/controller')?.ControllerMixin;
+ CoreObject = CoreObject ?? emberSafeRequire('@ember/object/core')?.default;
+ Application = Application ?? emberSafeRequire('@ember/application')?.default;
+ Component = Component ?? emberSafeRequire('@ember/component')?.default;
+ Observable =
+ Observable ?? emberSafeRequire('@ember/object/observable')?.default;
+ Evented = Evented ?? emberSafeRequire('@ember/object/evented')?.default;
+ PromiseProxyMixin =
+ PromiseProxyMixin ??
+ emberSafeRequire('@ember/object/promise-proxy-mixin')?.default;
+ Service = Service ?? emberSafeRequire('@ember/service')?.default;
+ EmberObject = EmberObject ?? emberSafeRequire('@ember/object')?.default;
+ VERSION = VERSION ?? emberSafeRequire('ember/version')?.default;
+ ComputedProperty =
+ ComputedProperty ??
+ emberSafeRequire('@ember/-internals/metal')?.ComputedProperty;
+ meta = meta ?? emberSafeRequire('@ember/-internals/meta')?.meta;
+ set = set ?? emberSafeRequire('@ember/object')?.set;
+ get = get ?? emberSafeRequire('@ember/object')?.get;
+}
-if (!Ember) {
- captureRenderTree = emberSafeRequire('@ember/debug')?.captureRenderTree;
- getEnv = emberSafeRequire('@ember/-internals/environment')?.getENV;
- ArrayProxy = emberSafeRequire('@ember/array/proxy')?.default;
- ObjectProxy = emberSafeRequire('@ember/object/proxy')?.default;
- MutableArray = emberSafeRequire('@ember/array/mutable')?.default;
- Namespace = emberSafeRequire('@ember/application/namespace')?.default;
- MutableEnumerable = emberSafeRequire('@ember/enumerable/mutable')?.default;
- NativeArray = emberSafeRequire('@ember/array')?.NativeArray;
- ControllerMixin = emberSafeRequire('@ember/controller')?.ControllerMixin;
- CoreObject = emberSafeRequire('@ember/object/core')?.default;
- Application = emberSafeRequire('@ember/application')?.default;
- Component = emberSafeRequire('@ember/component')?.default;
- Observable = emberSafeRequire('@ember/object/observable')?.default;
- Evented = emberSafeRequire('@ember/object/evented')?.default;
- PromiseProxyMixin = emberSafeRequire(
- '@ember/object/promise-proxy-mixin',
- )?.default;
- Service = emberSafeRequire('@ember/service')?.default;
- EmberObject = emberSafeRequire('@ember/object')?.default;
- VERSION = emberSafeRequire('ember/version')?.default;
- ComputedProperty = emberSafeRequire(
- '@ember/-internals/metal',
- )?.ComputedProperty;
- meta = emberSafeRequire('@ember/-internals/meta')?.meta;
- set = emberSafeRequire('@ember/object')?.set;
- get = emberSafeRequire('@ember/object')?.get;
+if (Owner) {
+ getOwner = Owner.getOwner;
+} else {
+ getOwner = ApplicationModule.getOwner;
}
export {
Runloop,
Debug,
+ InternalsMetal,
+ InternalsRuntime,
InternalsUtils,
+ InternalsViews,
ObjectInternals,
Instrumentation,
RSVP,
@@ -99,6 +252,7 @@ export {
Evented,
Service,
PromiseProxyMixin,
+ EmberDestroyable,
EmberObject,
VERSION,
ComputedProperty,
@@ -108,6 +262,16 @@ export {
set,
captureRenderTree,
getEnv,
+ inspect,
+ subscribe,
+ cacheFor,
+ guidFor,
+ libraries,
+ GlimmerComponent,
+ GlimmerManager,
+ GlimmerReference,
+ GlimmerRuntime,
+ GlimmerUtil,
+ GlimmerValidator,
+ getOwner,
};
-
-export default Ember;
diff --git a/ember_debug/utils/ember/debug.js b/ember_debug/utils/ember/debug.js
deleted file mode 100644
index 91dd56189a..0000000000
--- a/ember_debug/utils/ember/debug.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import Ember, { Debug, InternalsUtils } from '../ember';
-
-let module;
-export let inspect;
-
-if (Debug) {
- module = Debug;
- inspect = Debug.inspect || InternalsUtils.inspect;
-} else {
- module = Ember.Debug;
- // eslint-disable-next-line ember/new-module-imports
- inspect = Ember.inspect;
-}
-
-if (!inspect) {
- // eslint-disable-next-line ember/new-module-imports
- inspect = Ember.inspect;
-}
-
-export let { registerDeprecationHandler } = module;
-export default module;
diff --git a/ember_debug/utils/ember/instrumentation.js b/ember_debug/utils/ember/instrumentation.js
deleted file mode 100644
index 3e734f5074..0000000000
--- a/ember_debug/utils/ember/instrumentation.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Ember, { Instrumentation } from '../ember';
-
-let module;
-
-if (Instrumentation) {
- module = Instrumentation;
-} else {
- module = Ember;
-}
-
-export let { subscribe } = module;
diff --git a/ember_debug/utils/ember/loader.js b/ember_debug/utils/ember/loader.js
deleted file mode 100644
index a81f59bab3..0000000000
--- a/ember_debug/utils/ember/loader.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Ember from '../ember';
-
-const require = function (id) {
- try {
- return Ember.__loader.require(id);
- } catch {
- return requireModule(id);
- }
-};
-
-export function emberSafeRequire(id) {
- try {
- return require(id);
- } catch {
- return undefined;
- }
-}
-
-export let EmberLoader = {
- require,
- requireModule: require,
-};
diff --git a/ember_debug/utils/ember/object/internals.js b/ember_debug/utils/ember/object/internals.js
index 8ff66804ab..209147010d 100644
--- a/ember_debug/utils/ember/object/internals.js
+++ b/ember_debug/utils/ember/object/internals.js
@@ -1,14 +1,4 @@
-import Ember, { ObjectInternals } from '../../ember';
-
-let module;
-
-if (ObjectInternals) {
- module = ObjectInternals;
-} else {
- module = Ember;
-}
-
-let { cacheFor, guidFor: emberGuidFor } = module;
+import { cacheFor, guidFor as emberGuidFor } from '../../ember.js';
// it can happen that different ember apps/iframes have the same id for different objects
// since the implementation is just a counter, so we add a prefix per iframe & app
diff --git a/ember_debug/utils/ember/runloop.js b/ember_debug/utils/ember/runloop.js
index e5828f8790..9e43c6fd3f 100644
--- a/ember_debug/utils/ember/runloop.js
+++ b/ember_debug/utils/ember/runloop.js
@@ -1,5 +1,5 @@
-import Ember, { Runloop as EmberRunloop } from '../ember';
-import * as runloop from './own-runloop';
+import { Runloop as EmberRunloop } from '../ember.js';
+import * as runloop from './own-runloop.js';
// it could happen that runloop is available but _backburner is not exported (dead code)
// then we need to use our own.
@@ -10,12 +10,7 @@ const keys = ['cancel', 'debounce', 'join', 'later', 'scheduleOnce'];
if (EmberRunloop) {
module = EmberRunloop;
- _backburner = EmberRunloop._backburner;
-} else {
- // eslint-disable-next-line ember/new-module-imports
- module = Ember?.run || module;
- // eslint-disable-next-line ember/new-module-imports
- _backburner = Ember?.run?.backburner || _backburner;
+ _backburner = EmberRunloop._backburner || EmberRunloop.backburner;
}
if (!keys.every((k) => k in module)) {
diff --git a/ember_debug/utils/get-object-name.js b/ember_debug/utils/get-object-name.js
index 577f8f9df0..0b452cdf5d 100644
--- a/ember_debug/utils/get-object-name.js
+++ b/ember_debug/utils/get-object-name.js
@@ -1,4 +1,4 @@
-import emberNames from './ember-object-names';
+import emberNames from './ember-object-names.js';
export default function getObjectName(object) {
let name = '';
diff --git a/ember_debug/utils/rsvp.js b/ember_debug/utils/rsvp.js
deleted file mode 100644
index 4cc76baf8b..0000000000
--- a/ember_debug/utils/rsvp.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Ember, { RSVP as emberRSVP } from './ember';
-
-let module;
-
-if (emberRSVP) {
- module = emberRSVP;
-} else {
- // eslint-disable-next-line ember/new-module-imports
- module = Ember.RSVP;
-}
-
-export let { Promise, all, resolve } = module;
-
-export default module;
diff --git a/ember_debug/utils/type-check.js b/ember_debug/utils/type-check.js
index 3ffeab8f12..2b3b543d68 100644
--- a/ember_debug/utils/type-check.js
+++ b/ember_debug/utils/type-check.js
@@ -1,10 +1,10 @@
-import Debug, { inspect as emberInspect } from 'ember-debug/utils/ember/debug';
+import { Debug, inspect as emberInspect } from '../utils/ember';
import {
ComputedProperty,
EmberObject,
meta as emberMeta,
-} from 'ember-debug/utils/ember';
-import { emberSafeRequire } from 'ember-debug/utils/ember/loader';
+ InternalsMetal,
+} from '../utils/ember';
/**
* Check if given key on the passed object is a computed property
@@ -41,7 +41,7 @@ export function getDescriptorFor(object, key) {
// exists longer than ember 3.10
if (Debug.isComputed) {
const { descriptorForDecorator, descriptorForProperty } =
- emberSafeRequire('@ember/-internals/metal') || {};
+ InternalsMetal || {};
return (
descriptorForDecorator?.(object[key]) ||
descriptorForProperty?.(object, key)
diff --git a/ember_debug/utils/version.js b/ember_debug/utils/version.js
index d07b125267..12a6030d37 100644
--- a/ember_debug/utils/version.js
+++ b/ember_debug/utils/version.js
@@ -34,6 +34,8 @@ export function isInVersionSpecifier(specifier, version) {
let operator = specifier[0];
if (Number.isNaN(+operator)) {
specifier = specifier.slice(1);
+ } else {
+ return specifier === version;
}
specifier = cleanupVersion(specifier).split('.');
version2 = cleanupVersion(version).split('.');
diff --git a/ember_debug/vendor/loader.js b/ember_debug/vendor/loader.js
deleted file mode 100644
index 06f32aa8fd..0000000000
--- a/ember_debug/vendor/loader.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* eslint-disable */
-let define = window.define && ((...args) => window.define(...args)),
- exports = undefined,
- module = undefined,
- require = window.requireModule,
- requireModule = window.requireModule;
-/* eslint-enable */
-if (typeof define !== 'function' || typeof requireModule !== 'function') {
- (function () {
- let registry = {},
- seen = {};
-
- define = function (name, deps, callback) {
- if (arguments.length < 3) {
- callback = deps;
- deps = [];
- }
- registry[name] = { deps, callback };
- };
-
- requireModule = function (name) {
- if (seen[name]) {
- return seen[name];
- }
-
- let mod = registry[name];
- if (!mod) {
- throw new Error(`Module: '${name}' not found.`);
- }
-
- seen[name] = {};
-
- let deps = mod.deps;
- let callback = mod.callback;
- let reified = [];
- let exports;
-
- for (let i = 0, l = deps.length; i < l; i++) {
- if (deps[i] === 'exports') {
- reified.push((exports = {}));
- } else {
- reified.push(requireModule(deps[i]));
- }
- }
-
- let value = callback.apply(this, reified);
- seen[name] = exports || value;
- return seen[name];
- };
-
- define.registry = registry;
- define.seen = seen;
- })();
-}
diff --git a/ember_debug/vendor/startup-wrapper.js b/ember_debug/vendor/startup-wrapper.js
deleted file mode 100644
index baa0de81f5..0000000000
--- a/ember_debug/vendor/startup-wrapper.js
+++ /dev/null
@@ -1,402 +0,0 @@
-let Ember;
-
-/* eslint camelcase:0 */
-/**
- This is a wrapper for `ember-debug.js`
- Wraps the script in a function,
- and ensures that the script is executed
- only after the dom is ready
- and the application has initialized.
-
- Also responsible for sending the first tree.
- **/
-/*eslint prefer-spread: 0 */
-/* globals adapter, env */
-var currentAdapter = 'basic';
-if (typeof adapter !== 'undefined') {
- currentAdapter = adapter;
-}
-var currentEnv = 'production';
-if (typeof env !== 'undefined') {
- currentEnv = env;
-}
-
-// @formatter:off
-var EMBER_VERSIONS_SUPPORTED = {{EMBER_VERSIONS_SUPPORTED}};
-// @formatter:on
-
-(function(adapter) {
- onEmberReady(function() {
- // global to prevent injection
- if (window.NO_EMBER_DEBUG) {
- return;
- }
-
- // If Ember doesn't exist, we should stop here to avoid issues with accessing `Ember.VERSION`
- if (!Ember) {
- return;
- }
-
- if (!versionTest(Ember.VERSION, EMBER_VERSIONS_SUPPORTED)) {
- // Wrong inspector version. Redirect to the correct version.
- sendVersionMiss();
- return;
- }
-
- // prevent from injecting twice
- if (!window.EmberInspector) {
- // Make sure we only work for the supported version
- define('ember-debug/config', function() {
- return {
- default: {
- environment: currentEnv
- }
- };
- });
-
- let emberDebugMainModule = requireModule('ember-debug/main');
- if (!emberDebugMainModule) {
- return;
- }
- window.EmberInspector = emberDebugMainModule;
- window.EmberInspector.Adapter = requireModule('ember-debug/' + adapter);
-
- onApplicationStart(function appStarted(instance) {
- let app = instance.application;
- if (!('__inspector__booted' in app)) {
- // Watch for app reset/destroy
- app.reopen({
- reset: function() {
- this.__inspector__booted = false;
- this._super.apply(this, arguments);
- }
- });
- }
-
- if (instance && !('__inspector__booted' in instance)) {
- instance.reopen({
- // Clean up on instance destruction
- willDestroy() {
- if (window.EmberInspector.owner === instance) {
- window.EmberInspector.destroyContainer();
- window.EmberInspector.clear();
- }
- return this._super.apply(this, arguments);
- }
- });
-
- if (!window.EmberInspector._application) {
- setTimeout(() => bootEmberInspector(instance), 0);
- }
- }
- });
- }
- });
-
- function bootEmberInspector(appInstance) {
- appInstance.application.__inspector__booted = true;
- appInstance.__inspector__booted = true;
-
- // Boot the inspector (or re-boot if already booted, for example in tests)
- window.EmberInspector._application = appInstance.application;
- window.EmberInspector.owner = appInstance;
- window.EmberInspector.start(true);
- }
-
- function onEmberReady(callback) {
- var triggered = false;
- var triggerOnce = function(string) {
- if (triggered) {
- return;
- }
-
- if (!Ember) {
- try {
- Ember = requireModule('ember/barrel')['default'];
- } catch {}
- try {
- Ember = Ember || requireModule('ember')['default'];
- } catch {
- Ember = window.Ember;
- }
- }
-
- if (!Ember) {
- return;
- }
- // `Ember.Application` load hook triggers before all of Ember is ready.
- // In this case we ignore and wait for the `Ember` load hook.
- if (!Ember.RSVP) {
- return;
- }
- triggered = true;
- callback();
- };
-
- // Newest Ember versions >= 1.10
-
- const later = () => setTimeout(triggerOnce, 0);
- window.addEventListener('Ember', later, { once: true });
- // Oldest Ember versions or if this was injected after Ember has loaded.
- onReady(triggerOnce);
- }
-
- // There's probably a better way
- // to determine when the application starts
- // but this definitely works
- function onApplicationStart(callback) {
- if (typeof Ember === 'undefined') {
- return;
- }
-
- const adapterInstance = new (requireModule('ember-debug/' + currentAdapter));
-
- adapterInstance.onMessageReceived(function(message) {
- if (message.type === 'app-picker-loaded') {
- sendApps(adapterInstance, getApplications());
- }
-
- if (message.type === 'app-selected') {
- let current = window.EmberInspector._application;
- let selected = getApplications().find(app => Ember.guidFor(app) === message.applicationId);
-
- if (selected && current !== selected && selected.__deprecatedInstance__) {
- bootEmberInspector(selected.__deprecatedInstance__);
- }
- }
- });
-
- var apps = getApplications();
-
- sendApps(adapterInstance, apps);
-
- function loadInstance(app) {
- const applicationInstances = app._applicationInstances && [...app._applicationInstances]
- let instance = app.__deprecatedInstance__ || applicationInstances[0];
- if (instance) {
- // App started
- setupInstanceInitializer(app, callback);
- callback(instance);
- return true
- }
- }
-
- var app;
- for (var i = 0, l = apps.length; i < l; i++) {
- app = apps[i];
- // We check for the existance of an application instance because
- // in Ember > 3 tests don't destroy the app when they're done but the app has no booted instances.
- if (app._readinessDeferrals === 0) {
- if (loadInstance(app)) {
- break;
- }
- }
-
- // app already run initializers, but no instance, use _bootPromise and didBecomeReady
- if(app._bootPromise) {
- app._bootPromise.then((app) => {
- loadInstance(app);
- });
- }
-
- app.reopen({
- didBecomeReady() {
- this._super.apply(this, arguments);
- setTimeout(() => loadInstance(app), 0)
- }
- });
-
- }
- Ember.Application.initializer({
- name: 'ember-inspector-booted',
- initialize: function(app) {
- setupInstanceInitializer(app, callback);
- }
- });
- }
-
- function setupInstanceInitializer(app, callback) {
- if (!app.__inspector__setup) {
- app.__inspector__setup = true;
-
- // We include the app's guid in the initializer name because in Ember versions < 3
- // registering an instance initializer with the same name, even if on a different app,
- // triggers an error because instance initializers seem to be global instead of per app.
- app.instanceInitializer({
- name: 'ember-inspector-app-instance-booted-' + Ember.guidFor(app),
- initialize: function(instance) {
- callback(instance);
- }
- });
- }
- }
-
- /**
- * Get all the Ember.Application instances from Ember.Namespace.NAMESPACES
- * and add our own applicationId and applicationName to them
- * @return {*}
- */
- function getApplications() {
- var namespaces = Ember.A(Ember.Namespace.NAMESPACES);
-
- var apps = namespaces.filter(function(namespace) {
- return namespace instanceof Ember.Application;
- });
-
- return apps.map(function(app) {
- // Add applicationId and applicationName to the app
- var applicationId = Ember.guidFor(app);
- var applicationName = app.name || app.modulePrefix || `(unknown app - ${applicationId})`;
-
- Object.assign(app, {
- applicationId,
- applicationName
- });
-
- return app;
- });
- }
-
- let channel = new MessageChannel();
- let port = channel.port1;
- window.postMessage('debugger-client', '*', [channel.port2]);
-
- let registeredMiss = false;
-
- /**
- * This function is called if the app's Ember version
- * is not supported by this version of the inspector.
- *
- * It sends a message to the inspector app to redirect
- * to an inspector version that supports this Ember version.
- */
- function sendVersionMiss() {
- if (registeredMiss) {
- return;
- }
-
- registeredMiss = true;
-
- port.addEventListener('message', message => {
- if (message.type === 'check-version') {
- sendVersionMismatch();
- }
- });
-
- sendVersionMismatch();
-
- port.start();
-
- function sendVersionMismatch() {
- port.postMessage({
- name: 'version-mismatch',
- version: Ember.VERSION,
- from: 'inspectedWindow'
- });
- }
- }
-
- function sendApps(adapter, apps) {
- const serializedApps = apps.map(app => {
- return {
- applicationName: app.applicationName,
- applicationId: app.applicationId
- }
- });
-
- adapter.sendMessage({
- type: 'apps-loaded',
- apps: serializedApps,
- from: 'inspectedWindow'
- });
- }
-
- /**
- * Checks if a version is between two different versions.
- * version should be >= left side, < right side
- *
- * @param {String} version1
- * @param {String} version2
- * @return {Boolean}
- */
- function versionTest(version, between) {
- var fromVersion = between[0];
- var toVersion = between[1];
-
- if (compareVersion(version, fromVersion) === -1) {
- return false;
- }
- return !toVersion || compareVersion(version, toVersion) === -1;
- }
-
- function onReady(callback) {
- if (document.readyState === 'complete' || document.readyState === 'interactive') {
- setTimeout(completed);
- } else {
- document.addEventListener("DOMContentLoaded", completed, false);
- // For some reason DOMContentLoaded doesn't always work
- window.addEventListener("load", completed, false);
- }
-
- function completed() {
- document.removeEventListener("DOMContentLoaded", completed, false);
- window.removeEventListener("load", completed, false);
- callback();
- }
- }
-
- /**
- * Compares two Ember versions.
- *
- * Returns:
- * `-1` if version1 < version
- * 0 if version1 == version2
- * 1 if version1 > version2
- *
- * @param {String} version1
- * @param {String} version2
- * @return {Boolean} result of the comparison
- */
- function compareVersion(version1, version2) {
- let compared, i;
- version1 = cleanupVersion(version1).split('.');
- version2 = cleanupVersion(version2).split('.');
- for (i = 0; i < 3; i++) {
- compared = compare(+version1[i], +version2[i]);
- if (compared !== 0) {
- return compared;
- }
- }
- return 0;
- }
-
- /**
- * Remove -alpha, -beta, etc from versions
- *
- * @param {String} version
- * @return {String} The cleaned up version
- */
- function cleanupVersion(version) {
- return version.replace(/-.*/g, '');
- }
-
- /**
- * @method compare
- * @param {Number} val
- * @param {Number} number
- * @return {Number}
- * 0: same
- * -1: <
- * 1: >
- */
- function compare(val, number) {
- if (val === number) {
- return 0;
- } else if (val < number) {
- return -1;
- } else if (val > number) {
- return 1;
- }
- }
-
-}(currentAdapter));
diff --git a/ember_debug/view-debug.js b/ember_debug/view-debug.js
index 747c288c2d..1a550e685a 100644
--- a/ember_debug/view-debug.js
+++ b/ember_debug/view-debug.js
@@ -1,8 +1,8 @@
/* eslint no-cond-assign:0 */
-import DebugPort from './debug-port';
-import RenderTree from 'ember-debug/libs/render-tree';
-import ViewInspection from 'ember-debug/libs/view-inspection';
-import bound from 'ember-debug/utils/bound-method';
+import DebugPort from './debug-port.js';
+import RenderTree from './libs/render-tree';
+import ViewInspection from './libs/view-inspection';
+import bound from './utils/bound-method';
export default class extends DebugPort {
get adapter() {
@@ -103,6 +103,11 @@ export default class extends DebugPort {
onRightClick(event) {
if (event.button === 2) {
this.lastRightClicked = event.target;
+ if (event.target.shadowRoot) {
+ this.lastRightClicked =
+ event.target.shadowRoot.elementFromPoint(event.x, event.y) ||
+ event.target;
+ }
}
}
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 5aed6b609e..8546720f338 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -62,6 +62,10 @@ export default ts.config(
'dist/',
'ember_debug/dist/',
'node_modules/',
+ 'test-apps/classic/node_modules/',
+ 'test-apps/classic/dist/',
+ 'test-apps/classic/public/',
+ 'test-apps/tests/helpers/index.ts',
'coverage/',
'!**/.*',
'vendor/',
@@ -93,6 +97,7 @@ export default ts.config(
...globals.browser,
basicContext: false,
requireModule: false,
+ chrome: true,
},
},
},
@@ -113,10 +118,21 @@ export default ts.config(
},
},
{
- files: ['tests/**/*-test.{js,gjs,ts,gts}'],
+ files: [
+ 'tests/**/*-test.{js,gjs,ts,gts}',
+ 'test-apps/classic/tests/**/*-test.{js,gjs,ts,gts}',
+ ],
plugins: {
qunit,
},
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ basicContext: false,
+ requireModule: false,
+ chrome: true,
+ },
+ },
},
/**
* CJS node files
@@ -125,15 +141,18 @@ export default ts.config(
files: [
'**/*.cjs',
'config/**/*.js',
+ 'test-apps/classic/config/**/*.js',
'lib/*/index.js',
'scripts/**/*.js',
'testem.js',
+ 'test-apps/classic/testem.js',
'testem*.js',
'.prettierrc.js',
'.stylelintrc.js',
'.template-lintrc.js',
'babel.config.js',
'ember-cli-build.js',
+ 'test-apps/classic/ember-cli-build.js',
'gulpfile.js',
],
plugins: {
diff --git a/lib/ui/addon/styles/_object-inspector-toggle.scss b/lib/ui/addon/styles/_object-inspector-toggle.scss
deleted file mode 100644
index fc89357e62..0000000000
--- a/lib/ui/addon/styles/_object-inspector-toggle.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-.object-inspector-toggle.toolbar-icon-button {
- margin-right: 0; // .toolbar-icon-button override
- max-height: var(--toolbar-height);
- padding-right: 6px; // .toolbar-icon-button override
- padding-left: 6px; // .toolbar-icon-button override
- transform: scaleX(-1);
-
- // use .toolbar-icon-button active style AND flip horizontally
- &:active {
- transform: translate(1px, 1px) scaleX(-1);
- }
-}
diff --git a/lib/ui/app/components/ui/disclosure-triangle.js b/lib/ui/app/components/ui/disclosure-triangle.js
deleted file mode 100644
index fd481480c5..0000000000
--- a/lib/ui/app/components/ui/disclosure-triangle.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/disclosure-triangle';
diff --git a/lib/ui/app/components/ui/disclosure.js b/lib/ui/app/components/ui/disclosure.js
deleted file mode 100644
index 3ebabc944b..0000000000
--- a/lib/ui/app/components/ui/disclosure.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/disclosure';
diff --git a/lib/ui/app/components/ui/drag-handle.js b/lib/ui/app/components/ui/drag-handle.js
deleted file mode 100644
index 09a1a7561a..0000000000
--- a/lib/ui/app/components/ui/drag-handle.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/drag-handle';
diff --git a/lib/ui/app/components/ui/draggable-column.js b/lib/ui/app/components/ui/draggable-column.js
deleted file mode 100644
index 1600f8a152..0000000000
--- a/lib/ui/app/components/ui/draggable-column.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/draggable-column';
diff --git a/lib/ui/app/components/ui/empty-message.js b/lib/ui/app/components/ui/empty-message.js
deleted file mode 100644
index 1590070cd5..0000000000
--- a/lib/ui/app/components/ui/empty-message.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/empty-message';
diff --git a/lib/ui/app/components/ui/error-page.js b/lib/ui/app/components/ui/error-page.js
deleted file mode 100644
index 6a9e77b952..0000000000
--- a/lib/ui/app/components/ui/error-page.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/error-page';
diff --git a/lib/ui/app/components/ui/open-links-in-new-window.js b/lib/ui/app/components/ui/open-links-in-new-window.js
deleted file mode 100644
index c845ac828d..0000000000
--- a/lib/ui/app/components/ui/open-links-in-new-window.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/open-links-in-new-window';
diff --git a/lib/ui/app/components/ui/resizable-column.js b/lib/ui/app/components/ui/resizable-column.js
deleted file mode 100644
index 902ce877a6..0000000000
--- a/lib/ui/app/components/ui/resizable-column.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/resizable-column';
diff --git a/lib/ui/app/components/ui/send-to-console.js b/lib/ui/app/components/ui/send-to-console.js
deleted file mode 100644
index a44390369d..0000000000
--- a/lib/ui/app/components/ui/send-to-console.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/send-to-console';
diff --git a/lib/ui/app/components/ui/toolbar-clear-button.js b/lib/ui/app/components/ui/toolbar-clear-button.js
deleted file mode 100644
index 97a2929f07..0000000000
--- a/lib/ui/app/components/ui/toolbar-clear-button.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/toolbar-clear-button';
diff --git a/lib/ui/app/components/ui/toolbar-divider.js b/lib/ui/app/components/ui/toolbar-divider.js
deleted file mode 100644
index 4730a1f92c..0000000000
--- a/lib/ui/app/components/ui/toolbar-divider.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/toolbar-divider';
diff --git a/lib/ui/app/components/ui/toolbar-reload-button.js b/lib/ui/app/components/ui/toolbar-reload-button.js
deleted file mode 100644
index d784ebddf6..0000000000
--- a/lib/ui/app/components/ui/toolbar-reload-button.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/toolbar-reload-button';
diff --git a/lib/ui/app/components/ui/toolbar-search-field.js b/lib/ui/app/components/ui/toolbar-search-field.js
deleted file mode 100644
index e5368bee2c..0000000000
--- a/lib/ui/app/components/ui/toolbar-search-field.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/toolbar-search-field';
diff --git a/lib/ui/app/components/ui/warning-message.js b/lib/ui/app/components/ui/warning-message.js
deleted file mode 100644
index 7388fbf6e2..0000000000
--- a/lib/ui/app/components/ui/warning-message.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from 'ui/components/warning-message';
diff --git a/lib/ui/index.js b/lib/ui/index.js
deleted file mode 100644
index 44d6b13dbd..0000000000
--- a/lib/ui/index.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const VersionChecker = require('ember-cli-version-checker');
-
-module.exports = {
- name: require('./package').name,
-
- // When running ember-try on Ember < 3.13, colocation support is
- // disabled in ember-cli-htmlbars and causes a build error. When
- // running ember-try, we actually don't care about the "app" side
- // at all – all we do is run the ember_debug tests (via a --filter
- // option to ember test in the ember-try config). The only reason
- // we are even building the app is to get the test harness (qunit
- // and friends) to work. In the long run, we should split up the
- // build and not run the app build in ember-try, but in the mean
- // time, this drops all the addon files (since we don't need them)
- // to avoid the problem. The app will of course not work correctly
- // at runtime, but it was never meant to work on old ember versions
- // in the first place.
- treeForAddon() {
- let checker = new VersionChecker(this.project);
- let emberChecker = checker.for('ember-source');
-
- if (emberChecker.gte('3.13.0')) {
- return this._super.treeForAddon.apply(this, arguments);
- } else {
- return null;
- }
- },
-
- isDevelopingAddon() {
- return true;
- },
-};
diff --git a/lib/ui/package.json b/lib/ui/package.json
deleted file mode 100644
index 0fa7a2f734..0000000000
--- a/lib/ui/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "ui",
- "keywords": [
- "ember-addon"
- ],
- "dependencies": {
- "ember-cli-babel": "*",
- "ember-cli-htmlbars": "*",
- "ember-cli-sass": "*",
- "ember-cli-version-checker": "*",
- "ember-svg-jar": "*"
- }
-}
diff --git a/package.json b/package.json
index 0bef39d6e0..a8e2ca987e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ember-inspector",
- "version": "4.13.1",
+ "version": "4.14.0",
"description": "Extends developer tools to allow you to better inspect your Ember.js apps.",
"repository": "https://github.com/emberjs/ember-inspector",
"license": "MIT",
@@ -10,8 +10,9 @@
"test": "tests"
},
"scripts": {
- "build": "ember build",
- "build:production": "EMBER_ENV=production node scripts/download-panes.js && ember build --environment production && gulp compress:chrome && gulp compress:firefox && gulp clean-tmp",
+ "build": "pnpm build:ember-debug && ember build",
+ "build:ember-debug": "pnpm --filter ember-debug build",
+ "build:production": "pnpm build:ember-debug && EMBER_ENV=production node scripts/download-panes.js && ember build --environment production && gulp compress:chrome && gulp compress:firefox && gulp clean-tmp",
"changelog": "github_changelog_generator -u emberjs -p ember-inspector --since-tag v3.8.0",
"compress:panes": "gulp compress:chrome-pane && gulp compress:firefox-pane && gulp compress:bookmarklet-pane",
"lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\" --prefixColors auto",
@@ -28,8 +29,15 @@
"serve:bookmarklet": "ember serve --port 9191",
"start": "ember serve",
"test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\" --prefixColors auto",
- "test:ember": "COVERAGE=true ember test",
- "watch": "ember build --watch"
+ "test:ember": "pnpm build:ember-debug && COVERAGE=true ember test",
+ "watch-test": "pnpm '/watch-test:/'",
+ "watch-test:ember-debug": "pnpm --filter ember-debug watch",
+ "watch-test:inspector-ui": "ember test --serv",
+ "watch": "export DEL_RUN_ONCE=true; pnpm build:ember-debug && pnpm '/watch:/'",
+ "watch:inspector-ui": "ember build --watch",
+ "watch:ember-debug": "pnpm --filter ember-debug watch",
+ "ember-debug:try:one": "pnpm --filter '*' ember:try:one",
+ "ember-debug:test": "pnpm --filter '*' ember-debug-test"
},
"dependencies": {
"got": "^11.8.6",
@@ -84,6 +92,7 @@
"ember-cli-babel": "^8.2.0",
"ember-cli-clean-css": "^3.0.0",
"ember-cli-code-coverage": "^1.0.3",
+ "ember-cli-cors": "^0.0.2",
"ember-cli-dependency-checker": "^3.3.3",
"ember-cli-deprecation-workflow": "^2.2.0",
"ember-cli-htmlbars": "^6.3.0",
@@ -93,6 +102,7 @@
"ember-cli-typescript": "^5.3.0",
"ember-cli-version-checker": "^5.1.2",
"ember-concurrency": "^3.1.1",
+ "ember-debug": "workspace:*",
"ember-decorators": "^6.1.1",
"ember-event-helpers": "^0.1.1",
"ember-fetch": "^8.1.2",
@@ -136,7 +146,7 @@
"qunit-dom": "^3.4.0",
"release-it": "^15.11.0",
"release-it-lerna-changelog": "^5.0.0",
- "release-plan": "^0.16.0",
+ "release-plan": "^0.17.0",
"sass": "^1.79.4",
"source-map-js": "^1.2.1",
"stylelint": "^16.13.2",
@@ -150,24 +160,24 @@
},
"packageManager": "pnpm@9.12.1",
"engines": {
- "node": ">= 18",
+ "node": ">= 22",
"pnpm": "^9.0.0"
},
"volta": {
- "node": "18.20.4",
+ "node": "22.17.1",
"pnpm": "9.12.1"
},
"publishConfig": {
"registry": "https://registry.npmjs.org"
},
+ "pnpm": {
+ "patchedDependencies": {
+ "ember-cli-inject-live-reload": "patches/ember-cli-inject-live-reload.patch"
+ }
+ },
"ember": {
"edition": "octane"
},
- "ember-addon": {
- "paths": [
- "lib/ui"
- ]
- },
"emberVersionsSupported": [
"3.16.0",
""
diff --git a/patches/ember-cli-inject-live-reload.patch b/patches/ember-cli-inject-live-reload.patch
new file mode 100644
index 0000000000..bf7e3bafc9
--- /dev/null
+++ b/patches/ember-cli-inject-live-reload.patch
@@ -0,0 +1,16 @@
+diff --git a/CHANGELOG.md b/CHANGELOG.md
+deleted file mode 100644
+index 6b246174165e3519b57dbb1fdd16a05731175763..0000000000000000000000000000000000000000
+diff --git a/lib/index.js b/lib/index.js
+index f28830e01df9778fcef712ccd546566bfc34a0cc..cd38a87d6b90ebe0d7154d6a8d5a27d011098a64 100644
+--- a/lib/index.js
++++ b/lib/index.js
+@@ -48,7 +48,7 @@ module.exports = {
+
+ let self = this;
+ // maintaining `baseURL` for backwards compatibility. See: http://emberjs.com/blog/2016/04/28/baseURL.html
+- let baseURL = options.liveReloadBaseUrl || options.rootURL || options.baseURL;
++ let baseURL = options.liveReloadBaseUrl || options.rootURL;
+ if (this.parent) {
+ let checker = new VersionChecker(this.parent);
+ let depedency = checker.for('ember-cli');
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d0dffd580f..888e96730e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,6 +4,11 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
+patchedDependencies:
+ ember-cli-inject-live-reload:
+ hash: enhtbujp77hfcye7o4pfeqcdua
+ path: patches/ember-cli-inject-live-reload.patch
+
importers:
.:
@@ -159,6 +164,9 @@ importers:
ember-cli-code-coverage:
specifier: ^1.0.3
version: 1.0.3
+ ember-cli-cors:
+ specifier: ^0.0.2
+ version: 0.0.2
ember-cli-dependency-checker:
specifier: ^3.3.3
version: 3.3.3(ember-cli@6.1.0(handlebars@4.7.8)(underscore@1.13.7))
@@ -170,7 +178,7 @@ importers:
version: 6.3.0
ember-cli-inject-live-reload:
specifier: ^2.1.0
- version: 2.1.0
+ version: 2.1.0(patch_hash=enhtbujp77hfcye7o4pfeqcdua)
ember-cli-sass:
specifier: ^11.0.1
version: 11.0.1
@@ -186,6 +194,9 @@ importers:
ember-concurrency:
specifier: ^3.1.1
version: 3.1.1(@babel/core@7.26.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ ember-debug:
+ specifier: workspace:*
+ version: link:ember_debug
ember-decorators:
specifier: ^6.1.1
version: 6.1.1
@@ -316,8 +327,8 @@ importers:
specifier: ^5.0.0
version: 5.0.0(release-it@15.11.0(encoding@0.1.13))
release-plan:
- specifier: ^0.16.0
- version: 0.16.0
+ specifier: ^0.17.0
+ version: 0.17.2
sass:
specifier: ^1.79.4
version: 1.79.4
@@ -378,10 +389,136 @@ importers:
rollup:
specifier: ^4.39.0
version: 4.41.1
+ rollup-plugin-delete:
+ specifier: ^3.0.1
+ version: 3.0.1(rollup@4.41.1)
source-map-js:
specifier: ^1.2.1
version: 1.2.1
+ test-apps/classic:
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.26.0
+ version: 7.26.0
+ '@babel/eslint-parser':
+ specifier: ^7.25.9
+ version: 7.26.5(@babel/core@7.26.0)(eslint@9.18.0)
+ '@babel/plugin-proposal-decorators':
+ specifier: ^7.25.9
+ version: 7.25.9(@babel/core@7.26.0)
+ '@ember/optional-features':
+ specifier: ^2.2.0
+ version: 2.2.0
+ '@ember/render-modifiers':
+ specifier: ^3.0.0
+ version: 3.0.0(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ '@ember/string':
+ specifier: ^4.0.0
+ version: 4.0.0
+ '@ember/test-helpers':
+ specifier: ^4.0.4
+ version: 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ '@eslint/js':
+ specifier: ^9.17.0
+ version: 9.18.0
+ '@glimmer/component':
+ specifier: ^1.1.2
+ version: 1.1.2(@babel/core@7.26.0)
+ '@glimmer/tracking':
+ specifier: ^1.1.2
+ version: 1.1.2
+ broccoli-asset-rev:
+ specifier: ^3.0.0
+ version: 3.0.0
+ concurrently:
+ specifier: ^9.1.0
+ version: 9.1.2
+ ember-auto-import:
+ specifier: ^2.10.0
+ version: 2.10.0(@glint/template@1.5.1)(webpack@5.97.1)
+ ember-cli:
+ specifier: ~6.1.0
+ version: 6.1.0(handlebars@4.7.8)(underscore@1.13.7)
+ ember-cli-babel:
+ specifier: ^8.2.0
+ version: 8.2.0(@babel/core@7.26.0)
+ ember-cli-clean-css:
+ specifier: ^3.0.0
+ version: 3.0.0
+ ember-cli-dependency-checker:
+ specifier: ^3.3.3
+ version: 3.3.3(ember-cli@6.1.0(handlebars@4.7.8)(underscore@1.13.7))
+ ember-cli-htmlbars:
+ specifier: ^6.3.0
+ version: 6.3.0
+ ember-cli-inject-live-reload:
+ specifier: ^2.1.0
+ version: 2.1.0(patch_hash=enhtbujp77hfcye7o4pfeqcdua)
+ ember-cli-sri:
+ specifier: ^2.1.1
+ version: 2.1.1
+ ember-cli-terser:
+ specifier: ^4.0.2
+ version: 4.0.2
+ ember-debug:
+ specifier: workspace:*
+ version: link:../../ember_debug
+ ember-fetch:
+ specifier: ^8.1.2
+ version: 8.1.2(encoding@0.1.13)
+ ember-in-element-polyfill:
+ specifier: ^1.0.1
+ version: 1.0.1
+ ember-load-initializers:
+ specifier: ^3.0.1
+ version: 3.0.1(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ ember-modifier:
+ specifier: ^4.2.0
+ version: 4.2.0(@babel/core@7.26.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ ember-page-title:
+ specifier: ^8.2.3
+ version: 8.2.4(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ ember-qunit:
+ specifier: ^8.1.1
+ version: 8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)))(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))(qunit@2.24.1)
+ ember-resolver:
+ specifier: ^13.1.0
+ version: 13.1.0(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ ember-sinon-qunit:
+ specifier: ^7.5.0
+ version: 7.5.0(@babel/core@7.26.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))(qunit@2.24.1)(sinon@15.2.0)
+ ember-source:
+ specifier: ^5.0.0
+ version: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)
+ ember-template-lint:
+ specifier: ^6.0.0
+ version: 6.0.0
+ ember-try:
+ specifier: ^3.0.0
+ version: 3.0.0(encoding@0.1.13)
+ ember-welcome-page:
+ specifier: ^7.0.2
+ version: 7.0.2
+ ember-wormhole:
+ specifier: ^0.6.0
+ version: 0.6.0
+ loader.js:
+ specifier: ^4.7.0
+ version: 4.7.0
+ qunit:
+ specifier: ^2.24.1
+ version: 2.24.1
+ qunit-dom:
+ specifier: ^3.4.0
+ version: 3.4.0
+ tracked-built-ins:
+ specifier: ^3.4.0
+ version: 3.4.0(@babel/core@7.26.0)
+ webpack:
+ specifier: ^5.97.1
+ version: 5.97.1
+
packages:
'@ampproject/remapping@2.3.0':
@@ -1206,6 +1343,16 @@ packages:
'@glint/template':
optional: true
+ '@ember/render-modifiers@3.0.0':
+ resolution: {integrity: sha512-gJztS8dI7Jt8ohFQptEDJAgpl9DG84IpqwQoR1JDpVIBy2uLbf8KFD6S3h3LfyMsgJce6G38cOvyQv6BDgcnsA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@glint/template': ^1.0.2
+ ember-source: '>= 4.0.0'
+ peerDependenciesMeta:
+ '@glint/template':
+ optional: true
+
'@ember/string@3.1.1':
resolution: {integrity: sha512-UbXJ+k3QOrYN4SRPHgXCqYIJ+yWWUg1+vr0H4DhdQPTy8LJfyqwZ2tc5uqpSSnEXE+/1KopHBE5J8GDagAg5cg==}
engines: {node: 12.* || 14.* || >= 16}
@@ -2246,6 +2393,13 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ align-text@0.1.4:
+ resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==}
+ engines: {node: '>=0.10.0'}
+
+ alter@0.2.0:
+ resolution: {integrity: sha512-Wuss6JIZ6h4j2+NgU2t+9mSwS7gBSZJbU4Dg8xETguAD2veJUSuCrvTIiC78QgZE7/zX7h6OnXw2PiiCBirEGw==}
+
amd-name-resolver@1.3.1:
resolution: {integrity: sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -2445,6 +2599,9 @@ packages:
resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
engines: {node: '>=0.10.0'}
+ ast-traverse@0.1.1:
+ resolution: {integrity: sha512-CPuE4BWIhJjsNMvFkrzjiBgOl56NJTuBPBkBqyRyfq/nZtx1Z1f5I+qx7G/Zt+FAOS+ABhghkEuWJrfW9Njjog==}
+
ast-types@0.13.3:
resolution: {integrity: sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==}
engines: {node: '>=4'}
@@ -2453,6 +2610,18 @@ packages:
resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
engines: {node: '>=4'}
+ ast-types@0.8.12:
+ resolution: {integrity: sha512-rWhsoD0aHKpx+aKIP0Sf92bai1HC5iZcB1n/HCnkIMR8Bhx0gYRQySo062Y65ND4oRgcuxpLcPrcco09I1shpg==}
+ engines: {node: '>= 0.8'}
+
+ ast-types@0.8.15:
+ resolution: {integrity: sha512-8WsusRFHT6D2CpPTCLLLeIp4dN4pMEgmVX/jaSBsbMFObktStNdGOE1ZW4x8V/RABr1VtqruQgpabZyvzrrrww==}
+ engines: {node: '>= 0.8'}
+
+ ast-types@0.9.6:
+ resolution: {integrity: sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==}
+ engines: {node: '>= 0.8'}
+
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
@@ -2515,6 +2684,9 @@ packages:
babel-code-frame@6.26.0:
resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==}
+ babel-core@5.8.38:
+ resolution: {integrity: sha512-aVoPuaEiJJ/vqFpYuGp3kHOrKeKciCkjDE/e9va3VoSPAe37Qc0+9AZ+gBgIMTu8V8reCt2lW809e8k1KJQdaQ==}
+
babel-import-util@0.2.0:
resolution: {integrity: sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==}
engines: {node: '>= 12.*'}
@@ -2537,6 +2709,14 @@ packages:
babel-messages@6.23.0:
resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==}
+ babel-plugin-constant-folding@1.0.1:
+ resolution: {integrity: sha512-Rvhz9+o8/Bbqq6qTCO7FUPYxhrzqd/XkIY482DdYrXpFbhhqDu/xZZUd5/vYHV3oEE1poW+M10pjRZELDepwyQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-dead-code-elimination@1.0.2:
+ resolution: {integrity: sha512-wbVXBByKqaaIL3+3a9bRSLAL0GYhQWYmQCWTaGTXOsqqe1Jhi+qaj8/H+yQ5GMiJhvYEQiawzOCjCS1dmjvE5g==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-plugin-debug-macros@0.2.0:
resolution: {integrity: sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==}
engines: {node: '>=4'}
@@ -2561,14 +2741,30 @@ packages:
resolution: {integrity: sha512-4ZrKVSqdw5PxEKRbqfOpPhrrNBDG3mFPhyT6N1Oyyem81ZIkCvNo7TPKvlTHeFxqb6HtUvCACP/pzFpZ74J4pg==}
engines: {node: '>= 12.*'}
+ babel-plugin-eval@1.0.1:
+ resolution: {integrity: sha512-Yu9H5PbQKGVp/O/BFXUUbHVIUzBeZtEL+Yk+Io8ND4NobQYW8eg/ztToMkn+1/dQrQjaOeFtiBKtkYBwWLvFhw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-plugin-htmlbars-inline-precompile@5.3.1:
resolution: {integrity: sha512-QWjjFgSKtSRIcsBhJmEwS2laIdrA6na8HAlc/pEAhjHgQsah/gMiBFRZvbQTy//hWxR4BMwV7/Mya7q5H8uHeA==}
engines: {node: 10.* || >= 12.*}
+ babel-plugin-inline-environment-variables@1.0.1:
+ resolution: {integrity: sha512-upNlt2GMmPkLMtJEQEqJB+Y1OeNs78W5+toLTYD/zotypPg0K2w79fFfmiee34ehvLwOZL7khxtkPU54IS1Kvw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
engines: {node: '>=8'}
+ babel-plugin-jscript@1.0.4:
+ resolution: {integrity: sha512-eMT10ilWqWvBtGL70fFVciexOcjfPaeOHsyfp5OuumTFPSxla2kJTZuDzIpTbKspHVFyzCGxY6NpGJolfVywgQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-member-expression-literals@1.0.1:
+ resolution: {integrity: sha512-Ql/UCGOaA0nQP/9H0MfhFSn2U1m2mLsJFo76NDVBQry5uCDbF8++Uv4VyAtyQ8s6UHcoIKxepzRbZGl//X569w==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-plugin-module-resolver@3.2.0:
resolution: {integrity: sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==}
engines: {node: '>= 6.0.0'}
@@ -2595,6 +2791,34 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ babel-plugin-property-literals@1.0.1:
+ resolution: {integrity: sha512-ZS1JuVJuo0j8IW2RRk8xA6MR/i14KIAhmDNHkipFn51uXe1S/hCH6u+V7TweF9aroT07F9PoxtENmuhFfVvq4g==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-proto-to-assign@1.0.4:
+ resolution: {integrity: sha512-VY0VnODP15n5ORbJNFIQ0lzewhf+XqkcwbA5UpeeJ96/wIFmbvHK8fNAJoddHUuxl6b5hZtygVdSs3qwPAa/0A==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-react-constant-elements@1.0.3:
+ resolution: {integrity: sha512-5vv5DJ8NB5kKzjD5tqnkbm0znmKBzDDKFz82zJKn4hFxs1Vwk3WolLN8RypRzlDsddNQPLuDS/0xHq/u/J6i7w==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-react-display-name@1.0.3:
+ resolution: {integrity: sha512-IMO+IEvFKzZgLbmO+lGcoPKeD+pBg48T9p+ZgMbKkXyFvHk1pKeHsnhjV45GRxVBQC+SLYkmG7EHbXDWxfThOA==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-remove-console@1.0.1:
+ resolution: {integrity: sha512-dNNqqYeRa0HpJbL+bXgSXeNnkgHbpLuU9o3040iyQjzHoTrIRUwltRWy1ZZgluuw/P0j1ukUOZsiudLLVRCmKw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-remove-debugger@1.0.1:
+ resolution: {integrity: sha512-/rGQc8sgCVpTEeWQhHZShzQjANqWxpwxPlY3RkG9keK5+NKdA2U6ukfC/cySoSa1XmFwM6NBO67QWuOGR/DHrg==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ babel-plugin-runtime@1.0.7:
+ resolution: {integrity: sha512-tDVsSImhImOPIszO/6O4FhGW+o+PirMt53fkuBQ/plT41i2SRzTSnGvisrKtV/2jaAVSRnCiFwhN7v8dQ1Ymag==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-plugin-syntax-dynamic-import@6.18.0:
resolution: {integrity: sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA==}
@@ -2612,6 +2836,13 @@ packages:
babel-plugin-transform-strict-mode@6.24.1:
resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==}
+ babel-plugin-undeclared-variables-check@1.0.2:
+ resolution: {integrity: sha512-NytRjvfh0DMsjUNaxOIROntf5c03PktIBQlTK6texdQZR7KhpeFxc2W8wGfF5LoJY13bHr2WnRY5xLZp6JXKOg==}
+
+ babel-plugin-undefined-to-void@1.1.6:
+ resolution: {integrity: sha512-YAi+mWX+Al08e6Isbv8g2UigZUoVnZuuF/JFmG5uAZKQ+6EYILBCFmS28BedM7Ts4QbAIpSqwXdMBzej+9tHUg==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
babel-remove-types@1.0.0:
resolution: {integrity: sha512-Kg+NZLwfe1E+LoGrkX9I9nFDM1FVBoiIdyW4bjNGGvrqWhvgcdauqijOFn5/WYkdoGXpUEDRWvU4X100ghVx4A==}
@@ -2630,6 +2861,9 @@ packages:
babel6-plugin-strip-class-callcheck@6.0.0:
resolution: {integrity: sha512-biNFJ7JAK4+9BwswDGL0dmYpvXHvswOFR/iKg3Q/f+pNxPEa5bWZkLHI1fW4spPytkHGMe7f/XtYyhzml9hiWg==}
+ babylon@5.8.38:
+ resolution: {integrity: sha512-jtLAtIWCbI17buqCVN4/DtuHf3N1w9ZvbwrTWIae+EBSu2N3sVGCwSJeiZdAkTH4KRwinfMQIyoovP/xZtRwXQ==}
+
babylon@6.18.0:
resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==}
hasBin: true
@@ -2713,6 +2947,9 @@ packages:
blank-object@1.0.2:
resolution: {integrity: sha512-kXQ19Xhoghiyw66CUiGypnuRpWlbHAzY/+NyvqTEdTfhfQGH1/dbEMYiXju7fYKIFePpzp/y9dsu5Cu/PkmawQ==}
+ bluebird@2.11.0:
+ resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==}
+
bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
@@ -2748,12 +2985,18 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ breakable@1.0.0:
+ resolution: {integrity: sha512-+ityJqcjhozQNrezzTd2dtH/lkIXmE52HL+FohK2TOLQDl3QURTNkim+2C0xcso4Zehq/HM4Wkumcdz7Ue+XmA==}
+
broccoli-asset-rev@3.0.0:
resolution: {integrity: sha512-gAHQZnwvtl74tGevUqGuWoyOdJUdMMv0TjGSMzbdyGImr9fZcnM6xmggDA8bUawrMto9NFi00ZtNUgA4dQiUBw==}
broccoli-asset-rewrite@2.0.0:
resolution: {integrity: sha512-dqhxdQpooNi7LHe8J9Jdxp6o3YPFWl4vQmint6zrsn2sVbOo+wpyiX3erUSt0IBtjNkAxqJjuvS375o2cLBHTA==}
+ broccoli-babel-transpiler@5.7.4:
+ resolution: {integrity: sha512-gI14Pqc4qbmn5RW4SuAmybLiOoYW59D+HzQyhY6WdaGMAjikKBwJN0p17phyvafQ+kvG0mUiMd83lgHLeATnEA==}
+
broccoli-babel-transpiler@7.8.1:
resolution: {integrity: sha512-6IXBgfRt7HZ61g67ssBc6lBb3Smw3DPZ9dEYirgtvXWpRZ2A9M22nxy6opEwJDgDJzlu/bB7ToppW33OFkA1gA==}
engines: {node: '>= 6'}
@@ -2768,6 +3011,9 @@ packages:
resolution: {integrity: sha512-YoUHeKnPi4xIGZ2XDVN9oHNA9k3xF5f5vlA+1wvrxIIDXqQU97gp2FxVAF503Zxdtt0C5CRB5n+47k2hlkaBzA==}
engines: {node: '>= 0.10.0'}
+ broccoli-caching-writer@2.3.1:
+ resolution: {integrity: sha512-lfoDx98VaU8tG4mUXCxKdKyw2Lr+iSIGUjCgV83KC2zRC07SzYTGuSsMqpXFiOQlOGuoJxG3NRoyniBa1BWOqA==}
+
broccoli-caching-writer@3.0.3:
resolution: {integrity: sha512-g644Kb5uBPsy+6e2DvO3sOc+/cXZQQNgQt64QQzjA9TSdP0dl5qvetpoNIx4sy/XIjrPYG1smEidq9Z9r61INw==}
@@ -2805,6 +3051,9 @@ packages:
resolution: {integrity: sha512-ng4eIhPYiXqMw6SyGoxPHR3YAwEd2lr9FgBI1CyTbspl4txZovOsmzFkMkGAlu88xyvYXJqHiM2crfLa65T1BQ==}
engines: {node: 10.* || >= 12.*}
+ broccoli-kitchen-sink-helpers@0.2.9:
+ resolution: {integrity: sha512-C+oEqivDofZv/h80rgN4WJkbZkbfwkrIeu8vFn4bb4m4jPd3ICNNplhkXGl3ps439pzc2yjZ1qIwz0yy8uHcQg==}
+
broccoli-kitchen-sink-helpers@0.3.1:
resolution: {integrity: sha512-gqYnKSJxBSjj/uJqeuRAzYVbmjWhG0mOZ8jrp6+fnUIOgLN6MvI7XxBECDHkYMIFPJ8Smf4xaI066Q2FqQDnXg==}
@@ -2849,6 +3098,9 @@ packages:
resolution: {integrity: sha512-Q+8iezprZzL9voaBsDY3rQVl7c7H5h+bvv8SpzCZXPZgfBFCbx7KFQ2c3rZR6lW5k4Kwoqt7jG+rZMUg67Gwxw==}
engines: {node: 10.* || >= 12.*}
+ broccoli-plugin@1.1.0:
+ resolution: {integrity: sha512-dY1QsA20of9wWEto8yhN7JQjpfjySmgeIMsvnQ9aBAv1wEJJCe04B0ekdgq7Bduyx9yWXdoC5CngGy81swmp2w==}
+
broccoli-plugin@1.3.1:
resolution: {integrity: sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==}
@@ -2886,6 +3138,9 @@ packages:
resolution: {integrity: sha512-ZbGVQjivWi0k220fEeIUioN6Y68xjMy0xiLAc0LdieHI99gw+tafU8w0CggBDYVNsJMKUr006AZaM7gNEwCxEg==}
engines: {node: 8.* || 10.* || >= 12.*}
+ broccoli-sri-hash@2.1.2:
+ resolution: {integrity: sha512-toLD/v7ut2ajcH8JsdCMG2Bpq2qkwTcKM6CMzVMSAJjaz/KpK69fR+gSqe1dsjh+QTdxG0yVvkq3Sij/XMzV6A==}
+
broccoli-stew@3.0.0:
resolution: {integrity: sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg==}
engines: {node: 8.* || >= 10.*}
@@ -2991,6 +3246,10 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ camelcase@1.2.1:
+ resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==}
+ engines: {node: '>=0.10.0'}
+
camelcase@3.0.0:
resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==}
engines: {node: '>=0.10.0'}
@@ -3024,6 +3283,10 @@ packages:
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
+ center-align@0.1.3:
+ resolution: {integrity: sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==}
+ engines: {node: '>=0.10.0'}
+
chalk@1.1.3:
resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
engines: {node: '>=0.10.0'}
@@ -3150,6 +3413,9 @@ packages:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
+ cliui@2.1.0:
+ resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==}
+
cliui@3.2.0:
resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
@@ -3173,6 +3439,9 @@ packages:
clone-stats@1.0.0:
resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
+ clone@0.2.0:
+ resolution: {integrity: sha512-g62n3Kb9cszeZvmvBUqP/dsEJD/+80pDA8u8KqHnAPrVnQ2Je9rVV6opxkhuWCd1kCn2gOibzDKxCtBvD3q5kA==}
+
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
@@ -3267,6 +3536,11 @@ packages:
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+ commoner@0.10.8:
+ resolution: {integrity: sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==}
+ engines: {node: '>= 0.8'}
+ hasBin: true
+
compare-versions@4.1.4:
resolution: {integrity: sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==}
@@ -3525,6 +3799,10 @@ packages:
core-js-compat@3.38.1:
resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
+ core-js@1.2.7:
+ resolution: {integrity: sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==}
+ deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
+
core-js@2.6.12:
resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
@@ -3773,6 +4051,13 @@ packages:
resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
engines: {node: '>=0.10.0'}
+ defined@1.0.1:
+ resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
+
+ defs@1.1.1:
+ resolution: {integrity: sha512-KgGV1vmSa2UPKeDXaWE5FiXjix8BOtYMgiPGpYhd/42wxiC6YGwtscj/zU9gD5/xk4K2iLDpyGhGA5puZxaeMg==}
+ hasBin: true
+
degenerator@4.0.4:
resolution: {integrity: sha512-MTZdZsuNxSBL92rsjx3VFWe57OpRlikyLbcx2B5Dmdv6oScqpMrvpY7zHLMymrUxo3U5+suPUMsNgW/+SZB1lg==}
engines: {node: '>= 14'}
@@ -3781,6 +4066,10 @@ packages:
resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
engines: {node: '>=10'}
+ del@8.0.0:
+ resolution: {integrity: sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==}
+ engines: {node: '>=18'}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -3811,6 +4100,11 @@ packages:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
engines: {node: '>=0.10.0'}
+ detect-indent@3.0.1:
+ resolution: {integrity: sha512-xo3WP66SNbr1Eim85s/qyH0ZL8PQUwp86HWm0S1l8WnJ/zjT6T3w1nwNA0yOZeuvOemupEYvpvF6BIdYRuERJQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
@@ -3819,6 +4113,9 @@ packages:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
+ detective@4.7.1:
+ resolution: {integrity: sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==}
+
diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
@@ -3914,6 +4211,11 @@ packages:
resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==}
engines: {node: 6.* || 8.* || >= 10.*}
+ ember-cli-babel@5.2.8:
+ resolution: {integrity: sha512-Mt9OOB5RaZwjde+LYef8EgwNVCAzsYDv4ktshblaXxr4m/Xm5/7/rxEu42RNrYkoy/qWpT9uhaD+JKK4riMf+w==}
+ engines: {node: '>= 0.12'}
+ deprecated: ember-cli-babel 5.x has been deprecated. Please upgrade to at least ember-cli-babel 6.6.
+
ember-cli-babel@7.26.11:
resolution: {integrity: sha512-JJYeYjiz/JTn34q7F5DSOjkkZqy8qwFOOxXfE6pe9yEJqWGu4qErKxlz8I22JoVEQ/aBUO+OcKTpmctvykM9YA==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -3932,6 +4234,10 @@ packages:
resolution: {integrity: sha512-tyWeQ22vxpDmfhIrRCMqZPq9Coppefg19hBgME4yb9Na2qslxCNK0USThigZhesb7hfw2ZgdrKJCrmCVNwkq7g==}
engines: {node: 10.* || >= 12}
+ ember-cli-cors@0.0.2:
+ resolution: {integrity: sha512-9WHjk2rXw5fZqZXQKZ51tD3kWRntbmBnayqJ1osZQEJDHD7uwfixklkb1rfeZVxOpjwApklSwLoLkvaun6j2fw==}
+ engines: {node: '>= 0.10.0'}
+
ember-cli-dependency-checker@3.3.3:
resolution: {integrity: sha512-mvp+HrE0M5Zhc2oW8cqs8wdhtqq0CfQXAYzaIstOzHJJn/U01NZEGu3hz7J7zl/+jxZkyygylzcS57QqmPXMuQ==}
engines: {node: '>= 6'}
@@ -3992,6 +4298,10 @@ packages:
resolution: {integrity: sha512-RMlFPMK4kaB+67seF/IIoY3EC4rRd+L58q+lyElrxB3FcQTgph/qmGwtqf9Up7m3SDbPiA7cccCOSmgReMgCXA==}
engines: {node: '>= 10.*'}
+ ember-cli-sri@2.1.1:
+ resolution: {integrity: sha512-YG/lojDxkur9Bnskt7xB6gUOtJ6aPl/+JyGYm9HNDk3GECVHB3SMN3rlGhDKHa1ndS5NK2W2TSLb9bzRbGlMdg==}
+ engines: {node: '>= 0.10.0'}
+
ember-cli-string-utils@1.1.0:
resolution: {integrity: sha512-PlJt4fUDyBrC/0X+4cOpaGCiMawaaB//qD85AXmDRikxhxVzfVdpuoec02HSiTGTTB85qCIzWBIh8lDOiMyyFg==}
@@ -4018,6 +4328,9 @@ packages:
resolution: {integrity: sha512-gFA+ZwmsvvFwo2Jz/B9GMduEn+fPoGb69qWGP0Tp3+Tu5xypDtIKVSZ5086I3Cr19cLXD4HkrOR3YQvdUKzAkQ==}
engines: {node: '>= 12.*'}
+ ember-cli-version-checker@1.3.1:
+ resolution: {integrity: sha512-mu1Apdd19ZuDsy9WAHheFhltaJx+0ardFNM8Hb/AeRO9RokOK/bdUq/Jc1oeg0/Hl18tnxg8STG9TyJ6HgE3+g==}
+
ember-cli-version-checker@2.2.0:
resolution: {integrity: sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==}
engines: {node: '>= 4'}
@@ -4113,6 +4426,12 @@ packages:
resolution: {integrity: sha512-Pz7muUcwzgAVGQ3ZNCdY/KMKtmvtJk5DWetuvx2MVHZCRpVzSRvkVa2tKXcp4tmz/COYUysneJxAR4tmwAyH9Q==}
engines: {node: 12.* || 14.* || >= 16}
+ ember-page-title@8.2.4:
+ resolution: {integrity: sha512-ZZ912IRItIEfD5+35w65DT9TmqppK+suXJeaJenD5OSuvujUnYl6KxBpyAbfjw4mYtURwJO/TmSe+4GGJbsJ0w==}
+ engines: {node: 16.* || >= 18}
+ peerDependencies:
+ ember-source: '>= 3.28.0'
+
ember-qunit@8.1.1:
resolution: {integrity: sha512-nT+6s74j3BKNn+QQY/hINC3Xw3kn0NF0cU9zlgVQmCBWoyis1J24xWrY2LFOMThPmF6lHqcrUb5JwvBD4BXEXg==}
peerDependencies:
@@ -4214,6 +4533,10 @@ packages:
resolution: {integrity: sha512-ZYVKYWMnrHSD3vywo7rV76kPCOC9ATIEnGGG/PEKfCcFE0lB26jltRDnOrhORfLKq0JFp62fFxC/4940U+MwRQ==}
engines: {node: 16.* || >= 18.*}
+ ember-welcome-page@7.0.2:
+ resolution: {integrity: sha512-TyaKxFIRXhODW5BTbqD/by0Gu8Z9B9AA1ki3Bzzm6fOj2b30Qlprtt+XUG52kS0zVNmxYj/WWoT0TsKiU61VOw==}
+ engines: {node: 14.* || 16.* || >= 18}
+
ember-wormhole@0.6.0:
resolution: {integrity: sha512-b7RrRxkwCBEJxM2zR34dEzIET81BOZWTcYNJtkidLycLQvdbxPys5QJEjJ/IfDikT/z5HuQBdZRKBhXI0vZNXQ==}
engines: {node: 10.* || >= 12}
@@ -4473,11 +4796,26 @@ packages:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ esprima-fb@15001.1001.0-dev-harmony-fb:
+ resolution: {integrity: sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ esprima@2.7.3:
+ resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
esprima@3.0.0:
resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==}
engines: {node: '>=0.10.0'}
hasBin: true
+ esprima@3.1.3:
+ resolution: {integrity: sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -4913,6 +5251,9 @@ packages:
resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==}
engines: {node: '>= 0.10'}
+ fs-readdir-recursive@0.1.2:
+ resolution: {integrity: sha512-//yfxmYAazrsyb/rgeYDNFXFTuPYTGYirp5QHFSH8h/LaNUoP5bQAa2ikstdK1PR/bFd1CIlQLpUq6/u6UVfSw==}
+
fs-tree-diff@0.5.9:
resolution: {integrity: sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==}
@@ -4981,6 +5322,10 @@ packages:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
+ get-stdin@4.0.1:
+ resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==}
+ engines: {node: '>=0.10.0'}
+
get-stdin@9.0.0:
resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==}
engines: {node: '>=12'}
@@ -5032,8 +5377,8 @@ packages:
git-url-parse@13.1.0:
resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==}
- github-changelog@2.0.0:
- resolution: {integrity: sha512-JdAwddNCvHkZY/pTMqpoaLEfksaWiTc+beDjBkPEnr7iVlKfu8SeyCT8Sef+KsonRgIj6pl3SiWDPSefWmeicw==}
+ github-changelog@2.1.2:
+ resolution: {integrity: sha512-psDEGxwD5fWDLOW+BOORg1JgZOnbCuMhNLevsD/nP7QVXEVExUGnXBP6MmrFm0hAao9LgBLSBKfcNzGuwecRDA==}
engines: {node: 18.* || 20.* || >= 22}
hasBin: true
@@ -5117,6 +5462,10 @@ packages:
resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==}
engines: {node: '>=18'}
+ globals@6.4.1:
+ resolution: {integrity: sha512-Lh7H0bYRNBMc2CapY+TYsCzcSM4HWHGFoQORuEcePk3y3IhpaZmFSJDirhNYSwq8QeHvaCqV/tHI2bdUhYryuw==}
+ engines: {node: '>=0.10.0'}
+
globals@9.18.0:
resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==}
engines: {node: '>=0.10.0'}
@@ -5305,6 +5654,10 @@ packages:
highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
+ home-or-tmp@1.0.0:
+ resolution: {integrity: sha512-6LKQZpR6gk8uJ3mXbBkyOumsA24BUk9CH/79ivZ8Kk1urzlXNGZBoAMuieC/YzwCyGBVqq+uCNUpA1JS6glrxg==}
+ engines: {node: '>=0.10.0'}
+
homedir-polyfill@1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
engines: {node: '>=0.10.0'}
@@ -5609,6 +5962,10 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
+ is-finite@1.1.0:
+ resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
+ engines: {node: '>=0.10.0'}
+
is-fullwidth-code-point@1.0.0:
resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
engines: {node: '>=0.10.0'}
@@ -5642,6 +5999,9 @@ packages:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
engines: {node: '>=10'}
+ is-integer@1.0.7:
+ resolution: {integrity: sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==}
+
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -5699,10 +6059,18 @@ packages:
resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
engines: {node: '>=6'}
+ is-path-cwd@3.0.0:
+ resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
+ is-path-inside@4.0.0:
+ resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
+ engines: {node: '>=12'}
+
is-plain-obj@2.1.0:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'}
@@ -5903,6 +6271,9 @@ packages:
resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
engines: {node: '>= 0.8'}
+ js-tokens@1.0.1:
+ resolution: {integrity: sha512-WKqed1YxjsT7sGqM2IdbkJHnA3rXHqFqN+4xUy973UeYNjSXZCKM3G/zUmPNYut/6D9QCUbqegDmUCQRdm0lnQ==}
+
js-tokens@3.0.2:
resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==}
@@ -5923,6 +6294,10 @@ packages:
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+ jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+
jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
@@ -5960,6 +6335,10 @@ packages:
json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ json5@0.4.0:
+ resolution: {integrity: sha512-5EEuuI7oad0d6c2PcrTRLoLH2JNuI/aJxHsVT2hVFK6fKHu+MXONdhzzzNAlb3JXMeuN1o+kDU78fV1YH6VmKQ==}
+ hasBin: true
+
json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@@ -6046,6 +6425,10 @@ packages:
resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==}
engines: {node: '>=18'}
+ lazy-cache@1.0.4:
+ resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==}
+ engines: {node: '>=0.10.0'}
+
lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
engines: {node: '>= 0.6.3'}
@@ -6070,6 +6453,11 @@ packages:
engines: {node: 12.* || 14.* || >= 16}
hasBin: true
+ leven@1.0.2:
+ resolution: {integrity: sha512-U3eIzC2mMAOMOuoJ25sA3eyraoBwndpQyYgBq5dyqrMTpvMg9l9X/ucFHxv622YcCg179WWqleoF7rSzfYrV+Q==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
levn@0.3.0:
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
engines: {node: '>= 0.8.0'}
@@ -6210,6 +6598,9 @@ packages:
lodash.uniqby@4.7.0:
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
+ lodash@3.10.1:
+ resolution: {integrity: sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==}
+
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -6225,6 +6616,10 @@ packages:
resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
engines: {node: '>=12'}
+ longest@1.0.1:
+ resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==}
+ engines: {node: '>=0.10.0'}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -6504,6 +6899,10 @@ packages:
resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
engines: {node: 20 || >=22}
+ minimatch@2.0.10:
+ resolution: {integrity: sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==}
+ deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -6920,6 +7319,9 @@ packages:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
+ output-file-sync@1.1.2:
+ resolution: {integrity: sha512-uQLlclru4xpCi+tfs80l3QF24KL81X57ELNMy7W/dox+JTtxUf1bLyQ8968fFCmSqqbokjW0kn+WBIlO+rSkNg==}
+
p-cancelable@1.1.0:
resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
engines: {node: '>=6'}
@@ -6996,6 +7398,10 @@ packages:
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
engines: {node: '>=10'}
+ p-map@7.0.3:
+ resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==}
+ engines: {node: '>=18'}
+
p-try@1.0.0:
resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
engines: {node: '>=4'}
@@ -7100,6 +7506,10 @@ packages:
path-dirname@1.0.2:
resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
+ path-exists@1.0.0:
+ resolution: {integrity: sha512-BD2vrQBPFI3VkVKzTrOmaG2WtPQoduNXu1A5tLYMOW8RN6G9CdhdSkmw+ljxUkJcj4pbXQGw0lzl7MFLnhba9Q==}
+ engines: {node: '>=0.10.0'}
+
path-exists@2.1.0:
resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
engines: {node: '>=0.10.0'}
@@ -7434,6 +7844,7 @@ packages:
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
deprecated: |-
You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
qs@6.13.0:
@@ -7465,6 +7876,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ qunit@2.24.1:
+ resolution: {integrity: sha512-Eu0k/5JDjx0QnqxsE1WavnDNDgL1zgMZKsMw/AoAxnsl9p4RgyLODyo2N7abZY7CEAnvl5YUqFZdkImzbgXzSg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
@@ -7510,6 +7926,18 @@ packages:
resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
engines: {node: '>= 14.16.0'}
+ recast@0.10.33:
+ resolution: {integrity: sha512-RxAVgvgWGzfFYsdc3PB6TM4/cq8HMgBH8PC9r+SkO7j1MeHZvIMxLSVlUhin3sv9wbAy8CMAPXSGSGkWPovyKQ==}
+ engines: {node: '>= 0.8'}
+
+ recast@0.10.43:
+ resolution: {integrity: sha512-GC1g4P336t8WOpzVGFOo83m14xQfHbVqe+eDus+4oubobkWb/kONwMWSG6+K3BUtBOoUdUU+GT9kmNCSOBv9+g==}
+ engines: {node: '>= 0.8'}
+
+ recast@0.11.23:
+ resolution: {integrity: sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==}
+ engines: {node: '>= 0.8'}
+
recast@0.18.10:
resolution: {integrity: sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==}
engines: {node: '>= 4'}
@@ -7540,6 +7968,11 @@ packages:
regenerator-transform@0.15.2:
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+ regenerator@0.8.40:
+ resolution: {integrity: sha512-NsE91xz22nl5JsAwE5kZNmaMaK6g4HipZaGhrQJeVo8DsTwYYONx0TYEm8+7kFIODeuLNQpRsomV1CChmEY5Yg==}
+ engines: {node: '>= 0.6'}
+ hasBin: true
+
regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
engines: {node: '>=0.10.0'}
@@ -7552,6 +7985,10 @@ packages:
resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==}
engines: {node: '>=4'}
+ regexpu@1.3.0:
+ resolution: {integrity: sha512-OqpQCTCcVM6k9IbzxLjNN6TRj3NV7qF4L8zUqsNoeAmmIZp8wH1tdZnn0vNXE2tGNU4ho0xTZWk3FmahOtyMRA==}
+ hasBin: true
+
registry-auth-token@4.2.2:
resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==}
engines: {node: '>=6.0.0'}
@@ -7568,9 +8005,16 @@ packages:
resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==}
engines: {node: '>=12'}
+ regjsgen@0.2.0:
+ resolution: {integrity: sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==}
+
regjsgen@0.8.0:
resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+ regjsparser@0.1.5:
+ resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==}
+ hasBin: true
+
regjsparser@0.11.1:
resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==}
hasBin: true
@@ -7587,8 +8031,8 @@ packages:
engines: {node: '>=14.9'}
hasBin: true
- release-plan@0.16.0:
- resolution: {integrity: sha512-S2hrXACiy39LenrdvPAhSY7PcitS4A4fAxlzoPgYyCiS2OU6Ed+cUKvN4h9/uRyZ/B3AMGywZUIPtIhCUIjTng==}
+ release-plan@0.17.2:
+ resolution: {integrity: sha512-LgE/3CU8sFZt28uJR886xvWdw/CL0g5g5YSFTAJUvUy5qdERZdcc1pu317nKpYFs/yEDjiUasLj3rxnXBJf1zA==}
hasBin: true
remote-git-tags@3.0.0:
@@ -7617,6 +8061,11 @@ packages:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
+ repeating@1.1.3:
+ resolution: {integrity: sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
replace-ext@1.0.1:
resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
engines: {node: '>= 0.10'}
@@ -7747,6 +8196,10 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ right-align@0.1.3:
+ resolution: {integrity: sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==}
+ engines: {node: '>=0.10.0'}
+
rimraf@2.6.3:
resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
deprecated: Rimraf versions prior to v4 are no longer supported
@@ -7766,6 +8219,12 @@ packages:
resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
hasBin: true
+ rollup-plugin-delete@3.0.1:
+ resolution: {integrity: sha512-4tyijMQFwSDLA04DAHwbI2TrRwPiRwAqBQ17dxyr9CgHeHXLdgk8IDVWHFWPrL3UZJWrAmHohQ2MgmVghQDrlg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ rollup: '*'
+
rollup-pluginutils@2.8.2:
resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
@@ -7991,13 +8450,23 @@ packages:
silent-error@1.1.1:
resolution: {integrity: sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==}
+ simple-fmt@0.1.0:
+ resolution: {integrity: sha512-9a3zTDDh9LXbTR37qBhACWIQ/mP/ry5xtmbE98BJM8GR02sanCkfMzp7AdCTqYhkBZggK/w7hJtc8Pb9nmo16A==}
+
simple-html-tokenizer@0.5.11:
resolution: {integrity: sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==}
+ simple-is@0.2.0:
+ resolution: {integrity: sha512-GJXhv3r5vdj5tGWO+rcrWgjU2azLB+fb7Ehh3SmZpXE0o4KrrFLti0w4mdDCbR29X/z0Ls20ApjZitlpAXhAeg==}
+
sinon@15.2.0:
resolution: {integrity: sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==}
deprecated: 16.1.1
+ slash@1.0.0:
+ resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==}
+ engines: {node: '>=0.10.0'}
+
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -8071,6 +8540,9 @@ packages:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+ source-map-support@0.2.10:
+ resolution: {integrity: sha512-gGKOSat73z0V8wBKo9AGxZZyekczBireh1hHktbt+kb9acsCB5OfVCF2DCWlztcQ3r5oNN7f2BL0B2xOcoJ/DQ==}
+
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
@@ -8082,6 +8554,10 @@ packages:
resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
deprecated: See https://github.com/lydell/source-map-url#deprecated
+ source-map@0.1.32:
+ resolution: {integrity: sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==}
+ engines: {node: '>=0.8.0'}
+
source-map@0.4.4:
resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==}
engines: {node: '>=0.8.0'}
@@ -8127,6 +8603,10 @@ packages:
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+ sri-toolbox@0.2.0:
+ resolution: {integrity: sha512-DQIMWCAr/M7phwo+d3bEfXwSBEwuaJL+SJx9cuqt1Ty7K96ZFoHpYnSbhrQZEr0+0/GtmpKECP8X/R4RyeTAfw==}
+ engines: {node: '>= 0.10.4'}
+
sshpk@1.18.0:
resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
engines: {node: '>=0.10.0'}
@@ -8220,6 +8700,12 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ stringmap@0.2.2:
+ resolution: {integrity: sha512-mR1LEHDw6TsHa+LwJeeBc9ZqZqEOm7bHidgxMmDg8HB/rbA1HhDeT08gS67CCCG/xrgIfQx5tW42pd8vFpLUow==}
+
+ stringset@0.2.1:
+ resolution: {integrity: sha512-km3jeiRpmySChl1oLiBE2ESdG5k/4+6tjENVL6BB3mdmKBiUikI5ks4paad2WAKsxzpNiBqBBbXCC12QqlpLWA==}
+
strip-ansi@3.0.1:
resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
engines: {node: '>=0.10.0'}
@@ -8561,6 +9047,17 @@ packages:
resolution: {integrity: sha512-OLWW+Nd99NOM53aZ8ilT/YpEiOo6mXD3F4/wLbARqybSZ3Jb8IxHK5UGVbZaae0wtXAyQshVV+SeqVBik+Fbmw==}
engines: {node: '>=8'}
+ trim-right@1.0.1:
+ resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==}
+ engines: {node: '>=0.10.0'}
+
+ try-resolve@1.0.1:
+ resolution: {integrity: sha512-yHeaPjCBzVaXwWl5IMUapTaTC2rn/eBYg2fsG2L+CvJd+ttFbk0ylDnpTO3wVhosmE1tQEvcebbBeKLCwScQSQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ tryor@0.1.2:
+ resolution: {integrity: sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==}
+
ts-api-utils@2.0.0:
resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==}
engines: {node: '>=18.12'}
@@ -8805,6 +9302,11 @@ packages:
resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
engines: {node: '>=0.10.0'}
+ user-home@1.1.1:
+ resolution: {integrity: sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
username-sync@1.0.3:
resolution: {integrity: sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==}
@@ -8883,6 +9385,9 @@ packages:
deprecated: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.
hasBin: true
+ walk-sync@0.2.7:
+ resolution: {integrity: sha512-OH8GdRMowEFr0XSHQeX5fGweO6zSVHo7bG/0yJQx6LAj9Oukz0C8heI3/FYectT66gY0IPGe89kOvU410/UNpg==}
+
walk-sync@0.3.4:
resolution: {integrity: sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==}
@@ -8991,6 +9496,11 @@ packages:
wildcard-match@5.1.2:
resolution: {integrity: sha512-qNXwI591Z88c8bWxp+yjV60Ch4F8Riawe3iGxbzquhy8Xs9m+0+SLFBGb/0yCTIDElawtaImC37fYZ+dr32KqQ==}
+ window-size@0.1.4:
+ resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+
windows-release@5.1.1:
resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8999,9 +9509,16 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wordwrap@0.0.2:
+ resolution: {integrity: sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==}
+ engines: {node: '>=0.4.0'}
+
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ workerpool@2.3.4:
+ resolution: {integrity: sha512-c2EWrgB9IKHi1jbf4LG9sxKgHYOY+Ej5li6siEGtFecCXWG7eQOqATPEJ0rg1KFETXROEkErc1t5XiNrLG666Q==}
+
workerpool@3.1.2:
resolution: {integrity: sha512-WJFA0dGqIK7qj7xPTqciWBH5DlJQzoPjsANvc3Y4hNB0SScT+Emjvt0jPPkDBUjBNngX1q9hHgt1Gfwytu6pug==}
@@ -9107,6 +9624,9 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yargs@3.27.0:
+ resolution: {integrity: sha512-6atYjGACjX/OYWico7LwdBx9eiGlkMnIw6OwqfBb+uJQpaT82tQ7oI+BI6Dvq62qZvSbzGzQCVLQdMd59tR2eA==}
+
yargs@7.1.2:
resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==}
@@ -10183,6 +10703,18 @@ snapshots:
- '@babel/core'
- supports-color
+ '@ember/render-modifiers@3.0.0(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@embroider/macros': 1.16.9(@glint/template@1.5.1)
+ ember-cli-babel: 8.2.0(@babel/core@7.26.0)
+ ember-modifier-manager-polyfill: 1.2.0(@babel/core@7.26.0)
+ ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)
+ optionalDependencies:
+ '@glint/template': 1.5.1
+ transitivePeerDependencies:
+ - supports-color
+
'@ember/string@3.1.1':
dependencies:
ember-cli-babel: 7.26.11
@@ -11430,6 +11962,16 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ align-text@0.1.4:
+ dependencies:
+ kind-of: 3.2.2
+ longest: 1.0.1
+ repeat-string: 1.6.1
+
+ alter@0.2.0:
+ dependencies:
+ stable: 0.1.8
+
amd-name-resolver@1.3.1:
dependencies:
ensure-posix-path: 1.1.1
@@ -11608,12 +12150,20 @@ snapshots:
assign-symbols@1.0.0: {}
+ ast-traverse@0.1.1: {}
+
ast-types@0.13.3: {}
ast-types@0.13.4:
dependencies:
tslib: 2.7.0
+ ast-types@0.8.12: {}
+
+ ast-types@0.8.15: {}
+
+ ast-types@0.9.6: {}
+
astral-regex@2.0.0: {}
async-disk-cache@1.3.5:
@@ -11692,6 +12242,57 @@ snapshots:
esutils: 2.0.3
js-tokens: 3.0.2
+ babel-core@5.8.38:
+ dependencies:
+ babel-plugin-constant-folding: 1.0.1
+ babel-plugin-dead-code-elimination: 1.0.2
+ babel-plugin-eval: 1.0.1
+ babel-plugin-inline-environment-variables: 1.0.1
+ babel-plugin-jscript: 1.0.4
+ babel-plugin-member-expression-literals: 1.0.1
+ babel-plugin-property-literals: 1.0.1
+ babel-plugin-proto-to-assign: 1.0.4
+ babel-plugin-react-constant-elements: 1.0.3
+ babel-plugin-react-display-name: 1.0.3
+ babel-plugin-remove-console: 1.0.1
+ babel-plugin-remove-debugger: 1.0.1
+ babel-plugin-runtime: 1.0.7
+ babel-plugin-undeclared-variables-check: 1.0.2
+ babel-plugin-undefined-to-void: 1.1.6
+ babylon: 5.8.38
+ bluebird: 2.11.0
+ chalk: 1.1.3
+ convert-source-map: 1.9.0
+ core-js: 1.2.7
+ debug: 2.6.9
+ detect-indent: 3.0.1
+ esutils: 2.0.3
+ fs-readdir-recursive: 0.1.2
+ globals: 6.4.1
+ home-or-tmp: 1.0.0
+ is-integer: 1.0.7
+ js-tokens: 1.0.1
+ json5: 0.4.0
+ lodash: 3.10.1
+ minimatch: 2.0.10
+ output-file-sync: 1.1.2
+ path-exists: 1.0.0
+ path-is-absolute: 1.0.1
+ private: 0.1.8
+ regenerator: 0.8.40
+ regexpu: 1.3.0
+ repeating: 1.1.3
+ resolve: 1.22.8
+ shebang-regex: 1.0.0
+ slash: 1.0.0
+ source-map: 0.5.7
+ source-map-support: 0.2.10
+ to-fast-properties: 1.0.3
+ trim-right: 1.0.1
+ try-resolve: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
babel-import-util@0.2.0: {}
babel-import-util@2.1.1: {}
@@ -11711,6 +12312,10 @@ snapshots:
dependencies:
babel-runtime: 6.26.0
+ babel-plugin-constant-folding@1.0.1: {}
+
+ babel-plugin-dead-code-elimination@1.0.2: {}
+
babel-plugin-debug-macros@0.2.0(@babel/core@7.26.0):
dependencies:
'@babel/core': 7.26.0
@@ -11734,6 +12339,8 @@ snapshots:
'@glimmer/syntax': 0.84.3
babel-import-util: 3.0.0
+ babel-plugin-eval@1.0.1: {}
+
babel-plugin-htmlbars-inline-precompile@5.3.1:
dependencies:
babel-plugin-ember-modules-api-polyfill: 3.5.0
@@ -11742,6 +12349,8 @@ snapshots:
parse-static-imports: 1.1.0
string.prototype.matchall: 4.0.11
+ babel-plugin-inline-environment-variables@1.0.1: {}
+
babel-plugin-istanbul@6.1.1:
dependencies:
'@babel/helper-plugin-utils': 7.26.5
@@ -11752,6 +12361,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-jscript@1.0.4: {}
+
+ babel-plugin-member-expression-literals@1.0.1: {}
+
babel-plugin-module-resolver@3.2.0:
dependencies:
find-babel-config: 1.2.2
@@ -11800,6 +12413,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-property-literals@1.0.1: {}
+
+ babel-plugin-proto-to-assign@1.0.4:
+ dependencies:
+ lodash: 3.10.1
+
+ babel-plugin-react-constant-elements@1.0.3: {}
+
+ babel-plugin-react-display-name@1.0.3: {}
+
+ babel-plugin-remove-console@1.0.1: {}
+
+ babel-plugin-remove-debugger@1.0.1: {}
+
+ babel-plugin-runtime@1.0.7: {}
+
babel-plugin-syntax-dynamic-import@6.18.0: {}
babel-plugin-transform-commonjs@1.1.6(@babel/core@7.26.0):
@@ -11829,6 +12458,12 @@ snapshots:
babel-runtime: 6.26.0
babel-types: 6.26.0
+ babel-plugin-undeclared-variables-check@1.0.2:
+ dependencies:
+ leven: 1.0.2
+
+ babel-plugin-undefined-to-void@1.1.6: {}
+
babel-remove-types@1.0.0:
dependencies:
'@babel/core': 7.26.0
@@ -11876,6 +12511,8 @@ snapshots:
babel6-plugin-strip-class-callcheck@6.0.0: {}
+ babylon@5.8.38: {}
+
babylon@6.18.0: {}
bach@1.2.0:
@@ -11961,6 +12598,8 @@ snapshots:
blank-object@1.0.2: {}
+ bluebird@2.11.0: {}
+
bluebird@3.7.2: {}
body-parser@1.20.3:
@@ -11993,7 +12632,7 @@ snapshots:
dependencies:
ansi-align: 3.0.1
camelcase: 7.0.1
- chalk: 5.3.0
+ chalk: 5.4.1
cli-boxes: 3.0.0
string-width: 5.1.2
type-fest: 2.19.0
@@ -12032,6 +12671,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ breakable@1.0.0: {}
+
broccoli-asset-rev@3.0.0:
dependencies:
broccoli-asset-rewrite: 2.0.0
@@ -12049,6 +12690,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ broccoli-babel-transpiler@5.7.4:
+ dependencies:
+ babel-core: 5.8.38
+ broccoli-funnel: 1.2.0
+ broccoli-merge-trees: 1.2.4
+ broccoli-persistent-filter: 1.4.6
+ clone: 0.2.0
+ hash-for-dep: 1.5.1
+ heimdalljs-logger: 0.1.10
+ json-stable-stringify: 1.1.1
+ rsvp: 3.6.2
+ workerpool: 2.3.4
+ transitivePeerDependencies:
+ - supports-color
+
broccoli-babel-transpiler@7.8.1:
dependencies:
'@babel/core': 7.26.0
@@ -12092,6 +12748,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ broccoli-caching-writer@2.3.1:
+ dependencies:
+ broccoli-kitchen-sink-helpers: 0.2.9
+ broccoli-plugin: 1.1.0
+ debug: 2.6.9
+ rimraf: 2.7.1
+ rsvp: 3.6.2
+ walk-sync: 0.2.7
+ transitivePeerDependencies:
+ - supports-color
+
broccoli-caching-writer@3.0.3:
dependencies:
broccoli-kitchen-sink-helpers: 0.3.1
@@ -12215,6 +12882,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ broccoli-kitchen-sink-helpers@0.2.9:
+ dependencies:
+ glob: 5.0.15
+ mkdirp: 0.5.6
+
broccoli-kitchen-sink-helpers@0.3.1:
dependencies:
glob: 5.0.15
@@ -12321,6 +12993,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ broccoli-plugin@1.1.0:
+ dependencies:
+ promise-map-series: 0.2.3
+ quick-temp: 0.1.8
+ rimraf: 2.7.1
+ symlink-or-copy: 1.3.1
+
broccoli-plugin@1.3.1:
dependencies:
promise-map-series: 0.2.3
@@ -12397,6 +13076,16 @@ snapshots:
dependencies:
broccoli-node-api: 1.7.0
+ broccoli-sri-hash@2.1.2:
+ dependencies:
+ broccoli-caching-writer: 2.3.1
+ mkdirp: 0.5.6
+ rsvp: 3.6.2
+ sri-toolbox: 0.2.0
+ symlink-or-copy: 1.3.1
+ transitivePeerDependencies:
+ - supports-color
+
broccoli-stew@3.0.0:
dependencies:
broccoli-debug: 0.6.5
@@ -12610,6 +13299,8 @@ snapshots:
callsites@3.1.0: {}
+ camelcase@1.2.1: {}
+
camelcase@3.0.0: {}
camelcase@5.3.1: {}
@@ -12640,6 +13331,11 @@ snapshots:
caseless@0.12.0: {}
+ center-align@0.1.3:
+ dependencies:
+ align-text: 0.1.4
+ lazy-cache: 1.0.4
+
chalk@1.1.3:
dependencies:
ansi-styles: 2.2.1
@@ -12784,6 +13480,12 @@ snapshots:
cli-width@4.1.0: {}
+ cliui@2.1.0:
+ dependencies:
+ center-align: 0.1.3
+ right-align: 0.1.3
+ wordwrap: 0.0.2
+
cliui@3.2.0:
dependencies:
string-width: 1.0.2
@@ -12816,6 +13518,8 @@ snapshots:
clone-stats@1.0.0: {}
+ clone@0.2.0: {}
+
clone@1.0.4: {}
clone@2.1.2: {}
@@ -12894,6 +13598,18 @@ snapshots:
commondir@1.0.1: {}
+ commoner@0.10.8:
+ dependencies:
+ commander: 2.20.3
+ detective: 4.7.1
+ glob: 5.0.15
+ graceful-fs: 4.2.11
+ iconv-lite: 0.4.24
+ mkdirp: 0.5.6
+ private: 0.1.8
+ q: 1.5.1
+ recast: 0.11.23
+
compare-versions@4.1.4: {}
component-emitter@1.3.1: {}
@@ -13016,6 +13732,8 @@ snapshots:
dependencies:
browserslist: 4.24.0
+ core-js@1.2.7: {}
+
core-js@2.6.12: {}
core-object@3.1.5:
@@ -13266,6 +13984,21 @@ snapshots:
is-descriptor: 1.0.3
isobject: 3.0.1
+ defined@1.0.1: {}
+
+ defs@1.1.1:
+ dependencies:
+ alter: 0.2.0
+ ast-traverse: 0.1.1
+ breakable: 1.0.0
+ esprima-fb: 15001.1001.0-dev-harmony-fb
+ simple-fmt: 0.1.0
+ simple-is: 0.2.0
+ stringmap: 0.2.2
+ stringset: 0.2.1
+ tryor: 0.1.2
+ yargs: 3.27.0
+
degenerator@4.0.4:
dependencies:
ast-types: 0.13.4
@@ -13284,6 +14017,15 @@ snapshots:
rimraf: 3.0.2
slash: 3.0.0
+ del@8.0.0:
+ dependencies:
+ globby: 14.0.2
+ is-glob: 4.0.3
+ is-path-cwd: 3.0.0
+ is-path-inside: 4.0.0
+ p-map: 7.0.3
+ slash: 5.1.0
+
delayed-stream@1.0.0: {}
delegates@1.0.0: {}
@@ -13300,10 +14042,21 @@ snapshots:
detect-file@1.0.0: {}
+ detect-indent@3.0.1:
+ dependencies:
+ get-stdin: 4.0.1
+ minimist: 1.2.8
+ repeating: 1.1.3
+
detect-indent@6.1.0: {}
detect-newline@3.1.0: {}
+ detective@4.7.1:
+ dependencies:
+ acorn: 5.7.4
+ defined: 1.0.1
+
diff@5.2.0: {}
dir-glob@3.0.1:
@@ -13463,6 +14216,16 @@ snapshots:
ember-cli-babel-plugin-helpers@1.1.1: {}
+ ember-cli-babel@5.2.8:
+ dependencies:
+ broccoli-babel-transpiler: 5.7.4
+ broccoli-funnel: 1.2.0
+ clone: 2.1.2
+ ember-cli-version-checker: 1.3.1
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+
ember-cli-babel@7.26.11:
dependencies:
'@babel/core': 7.26.0
@@ -13553,6 +14316,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ember-cli-cors@0.0.2:
+ dependencies:
+ ember-cli-babel: 5.2.8
+ transitivePeerDependencies:
+ - supports-color
+
ember-cli-dependency-checker@3.3.3(ember-cli@6.1.0(handlebars@4.7.8)(underscore@1.13.7)):
dependencies:
chalk: 2.4.2
@@ -13613,7 +14382,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ember-cli-inject-live-reload@2.1.0:
+ ember-cli-inject-live-reload@2.1.0(patch_hash=enhtbujp77hfcye7o4pfeqcdua):
dependencies:
clean-base-url: 1.0.0
ember-cli-version-checker: 3.1.3
@@ -13667,6 +14436,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ember-cli-sri@2.1.1:
+ dependencies:
+ broccoli-sri-hash: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
ember-cli-string-utils@1.1.0: {}
ember-cli-terser@4.0.2:
@@ -13735,6 +14510,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ember-cli-version-checker@1.3.1:
+ dependencies:
+ semver: 5.7.2
+
ember-cli-version-checker@2.2.0:
dependencies:
resolve: 1.22.8
@@ -14058,6 +14837,14 @@ snapshots:
- '@babel/core'
- supports-color
+ ember-page-title@8.2.4(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)):
+ dependencies:
+ '@embroider/addon-shim': 1.8.9
+ '@simple-dom/document': 1.4.0
+ ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)
+ transitivePeerDependencies:
+ - supports-color
+
ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)))(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))(qunit@2.24.0):
dependencies:
'@ember/test-helpers': 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
@@ -14071,6 +14858,19 @@ snapshots:
- '@glint/template'
- supports-color
+ ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)))(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))(qunit@2.24.1):
+ dependencies:
+ '@ember/test-helpers': 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))
+ '@embroider/addon-shim': 1.8.9
+ '@embroider/macros': 1.16.9(@glint/template@1.5.1)
+ ember-cli-test-loader: 3.1.0
+ ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)
+ qunit: 2.24.1
+ qunit-theme-ember: 1.0.0
+ transitivePeerDependencies:
+ - '@glint/template'
+ - supports-color
+
ember-raf-scheduler@0.3.0:
dependencies:
ember-cli-babel: 7.26.11
@@ -14136,6 +14936,18 @@ snapshots:
- '@babel/core'
- supports-color
+ ember-sinon-qunit@7.5.0(@babel/core@7.26.0)(ember-source@5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1))(qunit@2.24.1)(sinon@15.2.0):
+ dependencies:
+ '@embroider/addon-shim': 1.8.9
+ '@types/sinon': 17.0.3
+ decorator-transforms: 2.2.2(@babel/core@7.26.0)
+ ember-source: 5.12.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.1)(rsvp@4.8.5)(webpack@5.97.1)
+ qunit: 2.24.1
+ sinon: 15.2.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
ember-source-channel-url@3.0.0(encoding@0.1.13):
dependencies:
node-fetch: 2.7.0(encoding@0.1.13)
@@ -14340,6 +15152,12 @@ snapshots:
- encoding
- supports-color
+ ember-welcome-page@7.0.2:
+ dependencies:
+ '@embroider/addon-shim': 1.8.9
+ transitivePeerDependencies:
+ - supports-color
+
ember-wormhole@0.6.0:
dependencies:
ember-cli-babel: 7.26.11
@@ -14697,8 +15515,14 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.2.0
+ esprima-fb@15001.1001.0-dev-harmony-fb: {}
+
+ esprima@2.7.3: {}
+
esprima@3.0.0: {}
+ esprima@3.1.3: {}
+
esprima@4.0.1: {}
esquery@1.6.0:
@@ -15305,6 +16129,8 @@ snapshots:
graceful-fs: 4.2.11
through2: 2.0.5
+ fs-readdir-recursive@0.1.2: {}
+
fs-tree-diff@0.5.9:
dependencies:
heimdalljs-logger: 0.1.10
@@ -15392,6 +16218,8 @@ snapshots:
get-package-type@0.1.0: {}
+ get-stdin@4.0.1: {}
+
get-stdin@9.0.0: {}
get-stream@4.1.0:
@@ -15447,7 +16275,7 @@ snapshots:
dependencies:
git-up: 7.0.0
- github-changelog@2.0.0:
+ github-changelog@2.1.2:
dependencies:
'@manypkg/get-packages': 2.2.2
chalk: 4.1.2
@@ -15586,6 +16414,8 @@ snapshots:
globals@15.14.0: {}
+ globals@6.4.1: {}
+
globals@9.18.0: {}
globalthis@1.0.4:
@@ -15851,6 +16681,11 @@ snapshots:
highlight.js@10.7.3: {}
+ home-or-tmp@1.0.0:
+ dependencies:
+ os-tmpdir: 1.0.2
+ user-home: 1.1.1
+
homedir-polyfill@1.0.3:
dependencies:
parse-passwd: 1.0.0
@@ -16186,6 +17021,8 @@ snapshots:
is-extglob@2.1.1: {}
+ is-finite@1.1.0: {}
+
is-fullwidth-code-point@1.0.0:
dependencies:
number-is-nan: 1.0.1
@@ -16213,6 +17050,10 @@ snapshots:
global-dirs: 3.0.1
is-path-inside: 3.0.3
+ is-integer@1.0.7:
+ dependencies:
+ is-finite: 1.1.0
+
is-interactive@1.0.0: {}
is-interactive@2.0.0: {}
@@ -16249,8 +17090,12 @@ snapshots:
is-path-cwd@2.2.0: {}
+ is-path-cwd@3.0.0: {}
+
is-path-inside@3.0.3: {}
+ is-path-inside@4.0.0: {}
+
is-plain-obj@2.1.0: {}
is-plain-obj@4.1.0: {}
@@ -16432,6 +17277,8 @@ snapshots:
js-string-escape@1.0.1: {}
+ js-tokens@1.0.1: {}
+
js-tokens@3.0.2: {}
js-tokens@4.0.0: {}
@@ -16449,6 +17296,8 @@ snapshots:
jsbn@1.1.0: {}
+ jsesc@0.5.0: {}
+
jsesc@3.0.2: {}
json-buffer@3.0.0: {}
@@ -16476,6 +17325,8 @@ snapshots:
json-stringify-safe@5.0.1: {}
+ json5@0.4.0: {}
+
json5@1.0.2:
dependencies:
minimist: 1.2.8
@@ -16558,6 +17409,8 @@ snapshots:
dependencies:
package-json: 10.0.1
+ lazy-cache@1.0.4: {}
+
lazystream@1.0.1:
dependencies:
readable-stream: 2.3.8
@@ -16590,6 +17443,8 @@ snapshots:
- bluebird
- supports-color
+ leven@1.0.2: {}
+
levn@0.3.0:
dependencies:
prelude-ls: 1.1.2
@@ -16731,6 +17586,8 @@ snapshots:
lodash.uniqby@4.7.0: {}
+ lodash@3.10.1: {}
+
lodash@4.17.21: {}
log-symbols@2.2.0:
@@ -16744,9 +17601,11 @@ snapshots:
log-symbols@5.1.0:
dependencies:
- chalk: 5.3.0
+ chalk: 5.4.1
is-unicode-supported: 1.3.0
+ longest@1.0.1: {}
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -17121,6 +17980,10 @@ snapshots:
dependencies:
brace-expansion: 2.0.1
+ minimatch@2.0.10:
+ dependencies:
+ brace-expansion: 1.1.11
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
@@ -17577,6 +18440,12 @@ snapshots:
os-tmpdir@1.0.2: {}
+ output-file-sync@1.1.2:
+ dependencies:
+ graceful-fs: 4.2.11
+ mkdirp: 0.5.6
+ object-assign: 4.1.1
+
p-cancelable@1.1.0: {}
p-cancelable@2.1.1: {}
@@ -17637,6 +18506,8 @@ snapshots:
dependencies:
aggregate-error: 3.1.0
+ p-map@7.0.3: {}
+
p-try@1.0.0: {}
p-try@2.2.0: {}
@@ -17750,6 +18621,8 @@ snapshots:
path-dirname@1.0.2: {}
+ path-exists@1.0.0: {}
+
path-exists@2.1.0:
dependencies:
pinkie-promise: 2.0.1
@@ -18067,6 +18940,12 @@ snapshots:
node-watch: 0.7.3
tiny-glob: 0.2.9
+ qunit@2.24.1:
+ dependencies:
+ commander: 7.2.0
+ node-watch: 0.7.3
+ tiny-glob: 0.2.9
+
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
@@ -18136,6 +19015,27 @@ snapshots:
readdirp@4.0.2: {}
+ recast@0.10.33:
+ dependencies:
+ ast-types: 0.8.12
+ esprima-fb: 15001.1001.0-dev-harmony-fb
+ private: 0.1.8
+ source-map: 0.5.7
+
+ recast@0.10.43:
+ dependencies:
+ ast-types: 0.8.15
+ esprima-fb: 15001.1001.0-dev-harmony-fb
+ private: 0.1.8
+ source-map: 0.5.7
+
+ recast@0.11.23:
+ dependencies:
+ ast-types: 0.9.6
+ esprima: 3.1.3
+ private: 0.1.8
+ source-map: 0.5.7
+
recast@0.18.10:
dependencies:
ast-types: 0.13.3
@@ -18167,6 +19067,15 @@ snapshots:
dependencies:
'@babel/runtime': 7.25.7
+ regenerator@0.8.40:
+ dependencies:
+ commoner: 0.10.8
+ defs: 1.1.1
+ esprima-fb: 15001.1001.0-dev-harmony-fb
+ private: 0.1.8
+ recast: 0.10.33
+ through: 2.3.8
+
regex-not@1.0.2:
dependencies:
extend-shallow: 3.0.2
@@ -18188,6 +19097,14 @@ snapshots:
unicode-match-property-ecmascript: 2.0.0
unicode-match-property-value-ecmascript: 2.2.0
+ regexpu@1.3.0:
+ dependencies:
+ esprima: 2.7.3
+ recast: 0.10.43
+ regenerate: 1.4.2
+ regjsgen: 0.2.0
+ regjsparser: 0.1.5
+
registry-auth-token@4.2.2:
dependencies:
rc: 1.2.8
@@ -18204,8 +19121,14 @@ snapshots:
dependencies:
rc: 1.2.8
+ regjsgen@0.2.0: {}
+
regjsgen@0.8.0: {}
+ regjsparser@0.1.5:
+ dependencies:
+ jsesc: 0.5.0
+
regjsparser@0.11.1:
dependencies:
jsesc: 3.0.2
@@ -18257,7 +19180,7 @@ snapshots:
- encoding
- supports-color
- release-plan@0.16.0:
+ release-plan@0.17.2:
dependencies:
'@manypkg/get-packages': 2.2.2
'@npmcli/package-json': 6.2.0
@@ -18267,7 +19190,7 @@ snapshots:
cli-highlight: 2.1.11
execa: 9.6.0
fs-extra: 11.2.0
- github-changelog: 2.0.0
+ github-changelog: 2.1.2
js-yaml: 4.1.0
latest-version: 9.0.0
parse-github-repo-url: 1.4.1
@@ -18305,6 +19228,10 @@ snapshots:
repeat-string@1.6.1: {}
+ repeating@1.1.3:
+ dependencies:
+ is-finite: 1.1.0
+
replace-ext@1.0.1: {}
replace-homedir@1.0.0:
@@ -18438,6 +19365,10 @@ snapshots:
reusify@1.0.4: {}
+ right-align@0.1.3:
+ dependencies:
+ align-text: 0.1.4
+
rimraf@2.6.3:
dependencies:
glob: 7.2.3
@@ -18454,6 +19385,11 @@ snapshots:
dependencies:
glob: 10.4.5
+ rollup-plugin-delete@3.0.1(rollup@4.41.1):
+ dependencies:
+ del: 8.0.0
+ rollup: 4.41.1
+
rollup-pluginutils@2.8.2:
dependencies:
estree-walker: 0.6.1
@@ -18741,8 +19677,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ simple-fmt@0.1.0: {}
+
simple-html-tokenizer@0.5.11: {}
+ simple-is@0.2.0: {}
+
sinon@15.2.0:
dependencies:
'@sinonjs/commons': 3.0.1
@@ -18752,6 +19692,8 @@ snapshots:
nise: 5.1.9
supports-color: 7.2.0
+ slash@1.0.0: {}
+
slash@3.0.0: {}
slash@4.0.0: {}
@@ -18866,6 +19808,10 @@ snapshots:
source-map-url: 0.4.1
urix: 0.1.0
+ source-map-support@0.2.10:
+ dependencies:
+ source-map: 0.1.32
+
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2
@@ -18875,6 +19821,10 @@ snapshots:
source-map-url@0.4.1: {}
+ source-map@0.1.32:
+ dependencies:
+ amdefine: 1.0.1
+
source-map@0.4.4:
dependencies:
amdefine: 1.0.1
@@ -18911,6 +19861,8 @@ snapshots:
sprintf-js@1.1.3: {}
+ sri-toolbox@0.2.0: {}
+
sshpk@1.18.0:
dependencies:
asn1: 0.2.6
@@ -19033,6 +19985,10 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ stringmap@0.2.2: {}
+
+ stringset@0.2.1: {}
+
strip-ansi@3.0.1:
dependencies:
ansi-regex: 2.1.1
@@ -19524,6 +20480,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ trim-right@1.0.1: {}
+
+ try-resolve@1.0.1: {}
+
+ tryor@0.1.2: {}
+
ts-api-utils@2.0.0(typescript@5.7.3):
dependencies:
typescript: 5.7.3
@@ -19764,6 +20726,8 @@ snapshots:
use@3.1.1: {}
+ user-home@1.1.1: {}
+
username-sync@1.0.3: {}
util-deprecate@1.0.2: {}
@@ -19865,6 +20829,11 @@ snapshots:
acorn: 8.12.1
acorn-walk: 8.3.4
+ walk-sync@0.2.7:
+ dependencies:
+ ensure-posix-path: 1.1.1
+ matcher-collection: 1.1.2
+
walk-sync@0.3.4:
dependencies:
ensure-posix-path: 1.1.1
@@ -20010,14 +20979,22 @@ snapshots:
wildcard-match@5.1.2: {}
+ window-size@0.1.4: {}
+
windows-release@5.1.1:
dependencies:
execa: 5.1.1
word-wrap@1.2.5: {}
+ wordwrap@0.0.2: {}
+
wordwrap@1.0.0: {}
+ workerpool@2.3.4:
+ dependencies:
+ object-assign: 4.1.1
+
workerpool@3.1.2:
dependencies:
'@babel/core': 7.26.0
@@ -20142,6 +21119,15 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yargs@3.27.0:
+ dependencies:
+ camelcase: 1.2.1
+ cliui: 2.1.0
+ decamelize: 1.2.0
+ os-locale: 1.4.0
+ window-size: 0.1.4
+ y18n: 3.2.2
+
yargs@7.1.2:
dependencies:
camelcase: 3.0.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index a694fdd9da..ecdf393257 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,4 @@
packages:
- .
- ember_debug
+ - test-apps/*
diff --git a/public/assets/fonts/Inter-Bold.woff b/public/assets/fonts/Inter-Bold.woff
deleted file mode 100644
index e38455587f..0000000000
Binary files a/public/assets/fonts/Inter-Bold.woff and /dev/null differ
diff --git a/public/assets/fonts/Inter-Bold.woff2 b/public/assets/fonts/Inter-Bold.woff2
deleted file mode 100644
index 835dd4977a..0000000000
Binary files a/public/assets/fonts/Inter-Bold.woff2 and /dev/null differ
diff --git a/public/assets/fonts/Inter-Regular.woff b/public/assets/fonts/Inter-Regular.woff
deleted file mode 100644
index fa7715d120..0000000000
Binary files a/public/assets/fonts/Inter-Regular.woff and /dev/null differ
diff --git a/public/assets/fonts/Inter-Regular.woff2 b/public/assets/fonts/Inter-Regular.woff2
deleted file mode 100644
index b52dd0a0b7..0000000000
Binary files a/public/assets/fonts/Inter-Regular.woff2 and /dev/null differ
diff --git a/public/assets/svg/focus-point-round.svg b/public/assets/svg/focus-point-round.svg
new file mode 100644
index 0000000000..7a7e1c28aa
--- /dev/null
+++ b/public/assets/svg/focus-point-round.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/public/assets/svg/sidebar-toggle-trailing.svg b/public/assets/svg/sidebar-toggle-trailing.svg
new file mode 100644
index 0000000000..d3928a25a9
--- /dev/null
+++ b/public/assets/svg/sidebar-toggle-trailing.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/skeletons/bookmarklet/load_inspector.js b/skeletons/bookmarklet/load_inspector.js
index 4b5ffc6261..3e73a3989c 100644
--- a/skeletons/bookmarklet/load_inspector.js
+++ b/skeletons/bookmarklet/load_inspector.js
@@ -72,6 +72,7 @@
function injectEmberDebug(fileName) {
var script = document.createElement('script');
+ script.type = 'module';
script.src = url + '/' + fileName;
document.body.appendChild(script);
}
diff --git a/skeletons/web-extension/content-script.js b/skeletons/web-extension/content-script.js
index 1f5bfb50f7..c273c84baf 100644
--- a/skeletons/web-extension/content-script.js
+++ b/skeletons/web-extension/content-script.js
@@ -90,6 +90,7 @@
if (!injected) {
// cannot use eval here, as the context is limited to the content script-
const elem = document.createElement('script');
+ elem.type = 'module';
elem.src = message.value;
document.head.appendChild(elem);
injected = true;
diff --git a/skeletons/web-extension/manifest.json b/skeletons/web-extension/manifest.json
index 13cfdf72f6..09349fb105 100644
--- a/skeletons/web-extension/manifest.json
+++ b/skeletons/web-extension/manifest.json
@@ -65,7 +65,7 @@
{
"resources": [
"scripts/in-page-script.js",
- "panes-*/ember_debug.js"
+ "panes-*/*.js"
],
"matches": [
"*://*/*"
diff --git a/test-apps/classic/.ember-cli b/test-apps/classic/.ember-cli
new file mode 100644
index 0000000000..4defd284ec
--- /dev/null
+++ b/test-apps/classic/.ember-cli
@@ -0,0 +1,7 @@
+{
+ /**
+ Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
+ rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
+ */
+ "isTypeScriptProject": true
+}
diff --git a/test-apps/classic/app/app.js b/test-apps/classic/app/app.js
new file mode 100644
index 0000000000..19f2ce27d7
--- /dev/null
+++ b/test-apps/classic/app/app.js
@@ -0,0 +1,14 @@
+import Application from '@ember/application';
+import Resolver from 'ember-resolver';
+import loadInitializers from 'ember-load-initializers';
+import config from 'test-app/config/environment';
+
+export default class App extends Application {
+ modulePrefix = config.modulePrefix;
+ podModulePrefix = config.podModulePrefix;
+ Resolver = Resolver;
+}
+
+console.log('test app');
+
+loadInitializers(App, config.modulePrefix);
diff --git a/test-apps/classic/app/components/.gitkeep b/test-apps/classic/app/components/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test-apps/classic/app/controllers/.gitkeep b/test-apps/classic/app/controllers/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test-apps/classic/app/helpers/.gitkeep b/test-apps/classic/app/helpers/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test-apps/classic/app/index.html b/test-apps/classic/app/index.html
new file mode 100644
index 0000000000..90cb9a37c0
--- /dev/null
+++ b/test-apps/classic/app/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+ TestApp
+
+
+
+ {{content-for "head"}}
+
+
+
+
+ {{content-for "head-footer"}}
+
+
+ {{content-for "body"}}
+
+
+
+
+ {{content-for "body-footer"}}
+
+
diff --git a/test-apps/classic/app/models/.gitkeep b/test-apps/classic/app/models/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test-apps/classic/app/router.js b/test-apps/classic/app/router.js
new file mode 100644
index 0000000000..38a0b80a63
--- /dev/null
+++ b/test-apps/classic/app/router.js
@@ -0,0 +1,9 @@
+import EmberRouter from '@ember/routing/router';
+import config from 'test-app/config/environment';
+
+export default class Router extends EmberRouter {
+ location = config.locationType;
+ rootURL = config.rootURL;
+}
+
+Router.map(function () {});
diff --git a/test-apps/classic/app/routes/.gitkeep b/test-apps/classic/app/routes/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test-apps/classic/app/services/adapters/basic.js b/test-apps/classic/app/services/adapters/basic.js
new file mode 100644
index 0000000000..9fa13c3a9b
--- /dev/null
+++ b/test-apps/classic/app/services/adapters/basic.js
@@ -0,0 +1,156 @@
+/**
+ * The adapter stores logic specific to each environment.
+ * Extend this object with env specific code (such as chrome/firefox/test),
+ * then set the application's `adapter` property to the name of this adapter.
+ *
+ * example:
+ *
+ * ```javascript
+ * const EmberInspector = App.Create({
+ * adapter: 'chrome'
+ * });
+ * ```
+ */
+import Service from '@ember/service';
+import { action } from '@ember/object';
+import { tracked } from '@glimmer/tracking';
+
+const config = {};
+
+export default class Basic extends Service {
+ _messageCallbacks;
+ name = 'basic';
+
+ @tracked canOpenResource = false;
+
+ /**
+ * Called when the adapter is created (when
+ * the inspector app boots).
+ */
+ constructor() {
+ super(...arguments);
+
+ this._messageCallbacks = [];
+ this._checkVersion();
+ }
+
+ /**
+ * Listens to Ember Inspector message about
+ * Ember version mismatch. If a mismatch message is received
+ * it means the current inspector app does not support the current
+ * Ember version and needs to switch to an inspector version
+ * that does.
+ *
+ * @private
+ */
+ _checkVersion() {
+ this.onMessageReceived((message) => {
+ const { name, version } = message;
+ if (name === 'version-mismatch') {
+ const previousVersions = config.previousEmberVersionsSupported;
+ const [fromVersion, tillVersion] = config.emberVersionsSupported;
+ let neededVersion;
+
+ if (compareVersion(version, fromVersion) === -1) {
+ neededVersion = previousVersions[previousVersions.length - 1];
+ } else if (tillVersion && compareVersion(version, tillVersion) !== -1) {
+ neededVersion = tillVersion;
+ } else {
+ return;
+ }
+ this.onVersionMismatch(neededVersion);
+ }
+ });
+ this.sendMessage({ type: 'check-version', from: 'devtools' });
+ }
+
+ /**
+ * Hook called when the Ember version is not
+ * supported by the current inspector version.
+ *
+ * Each adapter should implement this hook
+ * to switch to an older/new inspector version
+ * that supports this Ember version.
+ *
+ * @param _neededVersion (The version to go to)
+ */
+ onVersionMismatch() {}
+
+ /**
+ Used to send messages to EmberDebug
+
+ @param _message the message to send
+ **/
+ sendMessage() {}
+
+ /**
+ Register functions to be called
+ when a message from EmberDebug is received
+ **/
+ onMessageReceived(callback) {
+ this._messageCallbacks.push(callback);
+ }
+
+ _messageReceived(...args) {
+ this._messageCallbacks.forEach((callback) => {
+ callback(...args);
+ });
+ }
+
+ reloadTab() {}
+ // Called when the "Reload" is clicked by the user
+ willReload() {}
+ openResource() {}
+
+ @action
+ refreshPage() {
+ // If the adapter defined a `reloadTab` method, it means
+ // they prefer to handle the reload themselves
+ if (typeof this.reloadTab === 'function') {
+ this.reloadTab();
+ } else {
+ // inject ember_debug as quickly as possible in chrome
+ // so that promises created on dom ready are caught
+ this.port.send('general:refresh');
+ this.willReload();
+ }
+ }
+}
+
+/**
+ * Compares two Ember versions.
+ *
+ * Returns:
+ * `-1` if version < version
+ * 0 if version1 == version2
+ * 1 if version1 > version2
+ *
+ * @return result of the comparison
+ */
+function compareVersion(version1, version2) {
+ const v1 = cleanupVersion(version1).split('.');
+ const v2 = cleanupVersion(version2).split('.');
+ for (let i = 0; i < 3; i++) {
+ // @ts-expect-error TODO: refactor this to make TS happy
+ const compared = compare(+v1[i], +v2[i]);
+ if (compared !== 0) {
+ return compared;
+ }
+ }
+ return 0;
+}
+
+/* Remove -alpha, -beta, etc from versions */
+function cleanupVersion(version) {
+ return version.replace(/-.*/g, '');
+}
+
+function compare(val, number) {
+ if (val === number) {
+ return 0;
+ } else if (val < number) {
+ return -1;
+ } else if (val > number) {
+ return 1;
+ }
+}
diff --git a/test-apps/classic/app/services/adapters/web-extension.js b/test-apps/classic/app/services/adapters/web-extension.js
new file mode 100644
index 0000000000..e1d888fbbf
--- /dev/null
+++ b/test-apps/classic/app/services/adapters/web-extension.js
@@ -0,0 +1,163 @@
+import { tracked } from '@glimmer/tracking';
+
+import BasicAdapter from './basic';
+
+let emberDebug = null;
+let config = {
+ emberVersionsSupported: ['3.16.0'],
+};
+
+export default class WebExtension extends BasicAdapter {
+ @tracked canOpenResource = false;
+ name = 'web-extension';
+
+ /**
+ * Called when the adapter is created.
+ */
+ constructor(...args) {
+ super(...args);
+
+ this._connect();
+ this._handleReload();
+ this._setThemeColors();
+
+ void Promise.resolve().then(() => this._sendEmberDebug());
+ }
+
+ sendMessage(message) {
+ this._chromePort.postMessage(message ?? {});
+ }
+
+ _sendEmberDebug() {
+ const minimumVersion = config.emberVersionsSupported[0].replace(/\./g, '-');
+ const url = chrome.runtime.getURL(
+ `/panes-${minimumVersion}/ember_debug.js`,
+ );
+ // first send to all frames in current tab
+ this.sendMessage({
+ from: 'devtools',
+ tabId: chrome.devtools.inspectedWindow.tabId,
+ type: 'inject-ember-debug',
+ value: url,
+ });
+ this.onMessageReceived((message, sender) => {
+ if (message === 'ember-content-script-ready') {
+ this.sendMessage({
+ frameId: sender.frameId,
+ from: 'devtools',
+ tabId: chrome.devtools.inspectedWindow.tabId,
+ type: 'inject-ember-debug',
+ value: url,
+ });
+ }
+ });
+ }
+
+ get _chromePort() {
+ return chrome.runtime.connect();
+ }
+
+ _connect() {
+ const chromePort = this._chromePort;
+ chromePort.postMessage({ appId: chrome.devtools.inspectedWindow.tabId });
+
+ chromePort.onMessage.addListener((...args) => {
+ this._messageReceived(...args);
+ });
+
+ chromePort.onDisconnect.addListener(() => {
+ this._connect();
+ });
+ }
+
+ _handleReload() {
+ chrome.devtools.network.onNavigated.addListener(() => {
+ this._injectDebugger();
+ location.reload();
+ });
+ }
+
+ _injectDebugger() {
+ void loadEmberDebug().then((emberDebug) => {
+ chrome.devtools.inspectedWindow.eval(emberDebug, (success, error) => {
+ if (success === undefined && error) {
+ throw error;
+ }
+ });
+ });
+ }
+
+ _setThemeColors() {
+ // Remove old theme colors to ensure switching themes works
+ document.body.classList.remove('theme-light', 'theme-dark');
+
+ let theme = 'theme-light';
+ if (chrome.devtools.panels.themeName === 'dark') {
+ theme = 'theme-dark';
+ }
+ document.body.classList.add(theme);
+ }
+
+ willReload() {
+ this._injectDebugger();
+ }
+
+ /**
+ * Open the devtools "Elements" or "Sources" tab and select a specific DOM node or function.
+ */
+ inspectJSValue(name) {
+ chrome.devtools.inspectedWindow.eval(`
+ inspect(window[${JSON.stringify(name)}]);
+ delete window[${JSON.stringify(name)}];
+ `);
+ }
+
+ /**
+ * Redirect to the correct inspector version.
+ */
+ onVersionMismatch(goToVersion) {
+ window.location.href = `../panes-${goToVersion.replace(
+ /\./g,
+ '-',
+ )}/index.html`;
+ }
+
+ /**
+ We handle the reload here so we can inject
+ scripts as soon as possible into the new page.
+ */
+ reloadTab() {
+ void loadEmberDebug().then((emberDebug) => {
+ chrome.devtools.inspectedWindow.reload({
+ injectedScript: emberDebug,
+ });
+ });
+ }
+}
+
+function loadEmberDebug() {
+ const minimumVersion = config.emberVersionsSupported[0].replace(/\./g, '-');
+ let xhr;
+
+ return new Promise((resolve) => {
+ if (!emberDebug) {
+ xhr = new XMLHttpRequest();
+ xhr.open(
+ 'GET',
+ chrome.runtime.getURL(`/panes-${minimumVersion}/ember_debug.js`),
+ );
+ xhr.onload = function () {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ emberDebug = xhr.responseText;
+ resolve(emberDebug);
+ }
+ }
+ };
+
+ xhr.send();
+ } else {
+ resolve(emberDebug);
+ }
+ });
+}
diff --git a/test-apps/classic/app/styles/app.css b/test-apps/classic/app/styles/app.css
new file mode 100644
index 0000000000..2763afa4cf
--- /dev/null
+++ b/test-apps/classic/app/styles/app.css
@@ -0,0 +1 @@
+/* Ember supports plain CSS out of the box. More info: https://cli.emberjs.com/release/advanced-use/stylesheets/ */
diff --git a/test-apps/classic/app/templates/application.hbs b/test-apps/classic/app/templates/application.hbs
new file mode 100644
index 0000000000..d6565bbd6b
--- /dev/null
+++ b/test-apps/classic/app/templates/application.hbs
@@ -0,0 +1,7 @@
+{{page-title "TestApp"}}
+
+{{outlet}}
+
+{{! The following component displays Ember's default welcome message. }}
+
+{{! Feel free to remove this! }}
\ No newline at end of file
diff --git a/test-apps/classic/config/ember-cli-update.json b/test-apps/classic/config/ember-cli-update.json
new file mode 100644
index 0000000000..5dc0d1493e
--- /dev/null
+++ b/test-apps/classic/config/ember-cli-update.json
@@ -0,0 +1,20 @@
+{
+ "schemaVersion": "1.0.0",
+ "packages": [
+ {
+ "name": "ember-cli",
+ "version": "6.1.0",
+ "blueprints": [
+ {
+ "name": "app",
+ "outputRepo": "https://github.com/ember-cli/ember-new-output",
+ "codemodsSource": "ember-app-codemods-manifest@1",
+ "isBaseBlueprint": true,
+ "options": [
+ "--ci-provider=github"
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/config/ember-try.js b/test-apps/classic/config/ember-try.js
similarity index 94%
rename from config/ember-try.js
rename to test-apps/classic/config/ember-try.js
index 4471528f9f..5cae0d8085 100644
--- a/config/ember-try.js
+++ b/test-apps/classic/config/ember-try.js
@@ -12,7 +12,6 @@ module.exports = async function () {
devDependencies: {
'@ember/test-helpers': '^2.4.0',
'ember-cli': '^3.28.0',
- 'ember-cli-app-version': '^5.0.0',
'ember-source': '~3.16.0',
'ember-resolver': '^11.0.1',
'ember-qunit': '^5.1.5',
@@ -25,7 +24,6 @@ module.exports = async function () {
devDependencies: {
'@ember/test-helpers': '^2.4.0',
'ember-cli': '^3.28.0',
- 'ember-cli-app-version': '^5.0.0',
'ember-source': '~3.20.5',
'ember-resolver': '^11.0.1',
'ember-qunit': '^5.1.5',
@@ -38,7 +36,6 @@ module.exports = async function () {
devDependencies: {
'@ember/test-helpers': '^2.4.0',
'ember-cli': '^3.28.0',
- 'ember-cli-app-version': '^5.0.0',
'ember-source': '~3.24.0',
'ember-resolver': '^11.0.1',
'ember-qunit': '^5.1.5',
@@ -51,7 +48,6 @@ module.exports = async function () {
devDependencies: {
'@ember/test-helpers': '^2.4.0',
'ember-cli': '^3.28.0',
- 'ember-cli-app-version': '^6.0.0',
'ember-source': '~3.28.0',
'ember-resolver': '^11.0.1',
'ember-qunit': '^5.1.5',
diff --git a/test-apps/classic/config/environment.js b/test-apps/classic/config/environment.js
new file mode 100644
index 0000000000..113d30aeb0
--- /dev/null
+++ b/test-apps/classic/config/environment.js
@@ -0,0 +1,48 @@
+'use strict';
+
+module.exports = function (environment) {
+ const ENV = {
+ modulePrefix: 'test-app',
+ environment,
+ rootURL: '/',
+ locationType: 'history',
+ EmberENV: {
+ EXTEND_PROTOTYPES: false,
+ FEATURES: {
+ // Here you can enable experimental features on an ember canary build
+ // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true
+ },
+ },
+
+ APP: {
+ // Here you can pass flags/options to your application instance
+ // when it is created
+ },
+ };
+
+ if (environment === 'development') {
+ // ENV.APP.LOG_RESOLVER = true;
+ // ENV.APP.LOG_ACTIVE_GENERATION = true;
+ // ENV.APP.LOG_TRANSITIONS = true;
+ // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
+ // ENV.APP.LOG_VIEW_LOOKUPS = true;
+ }
+
+ if (environment === 'test') {
+ // Testem prefers this...
+ ENV.locationType = 'none';
+
+ // keep test console output quieter
+ ENV.APP.LOG_ACTIVE_GENERATION = false;
+ ENV.APP.LOG_VIEW_LOOKUPS = false;
+
+ ENV.APP.rootElement = '#ember-testing';
+ ENV.APP.autoboot = false;
+ }
+
+ if (environment === 'production') {
+ // here you can enable a production-specific feature
+ }
+
+ return ENV;
+};
diff --git a/test-apps/classic/config/optional-features.json b/test-apps/classic/config/optional-features.json
new file mode 100644
index 0000000000..5329dd9913
--- /dev/null
+++ b/test-apps/classic/config/optional-features.json
@@ -0,0 +1,7 @@
+{
+ "application-template-wrapper": false,
+ "default-async-observers": true,
+ "jquery-integration": false,
+ "template-only-glimmer-components": true,
+ "no-implicit-route-model": true
+}
diff --git a/test-apps/classic/config/targets.js b/test-apps/classic/config/targets.js
new file mode 100644
index 0000000000..1e48e0599f
--- /dev/null
+++ b/test-apps/classic/config/targets.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const browsers = [
+ 'last 1 Chrome versions',
+ 'last 1 Firefox versions',
+ 'last 1 Safari versions',
+];
+
+module.exports = {
+ browsers,
+};
diff --git a/test-apps/classic/ember-cli-build.js b/test-apps/classic/ember-cli-build.js
new file mode 100644
index 0000000000..c11fc2e743
--- /dev/null
+++ b/test-apps/classic/ember-cli-build.js
@@ -0,0 +1,25 @@
+'use strict';
+
+const EmberApp = require('ember-cli/lib/broccoli/ember-app');
+const path = require('path');
+const fs = require('fs');
+const { Funnel } = require('broccoli-funnel');
+
+const testingDir = path.resolve(__dirname, '../../dist/testing');
+const distDir = path.resolve(__dirname, '../../dist');
+const testingFolderExists = fs.existsSync(testingDir);
+
+module.exports = function (defaults) {
+ defaults.project.name = () => 'test-app';
+ const app = new EmberApp(defaults, {
+ 'ember-cli-babel': { enableTypeScriptTransform: true },
+ trees: {
+ tests: new Funnel(path.resolve(__dirname, '../tests')),
+ public: new Funnel(testingFolderExists ? testingDir : distDir, {
+ files: ['background.js', 'content-script.js', 'panes-3-16-0'],
+ }),
+ },
+ });
+
+ return app.toTree();
+};
diff --git a/test-apps/classic/package.json b/test-apps/classic/package.json
new file mode 100644
index 0000000000..47edbf9b23
--- /dev/null
+++ b/test-apps/classic/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "classic-test-app",
+ "version": "0.0.0",
+ "private": true,
+ "description": "Small description for test-app goes here",
+ "repository": "",
+ "license": "MIT",
+ "author": "",
+ "directories": {
+ "doc": "doc",
+ "test": "tests"
+ },
+ "scripts": {
+ "build": "ember build --environment=testing",
+ "test": "EMBER_ENV=test ember test",
+ "ember-debug-test": "pnpm test",
+ "ember:try:one": "ember try:one",
+ "test-server:ember": "ember test --serve --watcher node --launch="
+ },
+ "devDependencies": {
+ "@babel/core": "^7.26.0",
+ "@babel/eslint-parser": "^7.25.9",
+ "@babel/plugin-proposal-decorators": "^7.25.9",
+ "@ember/optional-features": "^2.2.0",
+ "@ember/string": "^4.0.0",
+ "@ember/test-helpers": "^4.0.4",
+ "@eslint/js": "^9.17.0",
+ "@glimmer/component": "^1.1.2",
+ "@glimmer/tracking": "^1.1.2",
+ "broccoli-asset-rev": "^3.0.0",
+ "concurrently": "^9.1.0",
+ "ember-auto-import": "^2.10.0",
+ "ember-cli": "~6.1.0",
+ "ember-cli-babel": "^8.2.0",
+ "ember-cli-clean-css": "^3.0.0",
+ "ember-cli-dependency-checker": "^3.3.3",
+ "ember-cli-htmlbars": "^6.3.0",
+ "ember-cli-inject-live-reload": "^2.1.0",
+ "ember-cli-sri": "^2.1.1",
+ "ember-cli-terser": "^4.0.2",
+ "ember-fetch": "^8.1.2",
+ "ember-load-initializers": "^3.0.1",
+ "ember-modifier": "^4.2.0",
+ "ember-page-title": "^8.2.3",
+ "ember-qunit": "^8.1.1",
+ "@ember/render-modifiers": "^3.0.0",
+ "qunit": "^2.24.1",
+ "qunit-dom": "^3.4.0",
+ "ember-sinon-qunit": "^7.5.0",
+ "ember-resolver": "^13.1.0",
+ "ember-source": "^5.0.0",
+ "ember-template-lint": "^6.0.0",
+ "ember-welcome-page": "^7.0.2",
+ "ember-wormhole": "^0.6.0",
+ "ember-try": "^3.0.0",
+ "loader.js": "^4.7.0",
+ "tracked-built-ins": "^3.4.0",
+ "ember-in-element-polyfill": "^1.0.1",
+ "webpack": "^5.97.1",
+ "ember-debug": "workspace:*"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "ember": {
+ "edition": "octane"
+ }
+}
diff --git a/test-apps/classic/testem.js b/test-apps/classic/testem.js
new file mode 100644
index 0000000000..ed2f37124a
--- /dev/null
+++ b/test-apps/classic/testem.js
@@ -0,0 +1,23 @@
+'use strict';
+
+module.exports = {
+ test_page: 'tests/index.html?hidepassed',
+ disable_watching: true,
+ launch_in_ci: ['Chrome'],
+ launch_in_dev: ['Chrome'],
+ browser_start_timeout: 120,
+ browser_args: {
+ Chrome: {
+ ci: [
+ // --no-sandbox is needed when running Chrome inside a container
+ process.env.CI ? '--no-sandbox' : null,
+ '--headless',
+ '--disable-dev-shm-usage',
+ '--disable-software-rasterizer',
+ '--mute-audio',
+ '--remote-debugging-port=0',
+ '--window-size=1440,900',
+ ].filter(Boolean),
+ },
+ },
+};
diff --git a/test-apps/embroider-static-source/tests b/test-apps/embroider-static-source/tests
new file mode 120000
index 0000000000..6dd24e02b5
--- /dev/null
+++ b/test-apps/embroider-static-source/tests
@@ -0,0 +1 @@
+../tests
\ No newline at end of file
diff --git a/tests/ember_debug/container-debug-test.js b/test-apps/tests/ember_debug/container-debug-test.js
similarity index 89%
rename from tests/ember_debug/container-debug-test.js
rename to test-apps/tests/ember_debug/container-debug-test.js
index 8c57fdf3ea..3f5a1147f2 100644
--- a/tests/ember_debug/container-debug-test.js
+++ b/test-apps/tests/ember_debug/container-debug-test.js
@@ -3,22 +3,13 @@ import { settled, visit, waitUntil } from '@ember/test-helpers';
import { A as emberA } from '@ember/array';
import EmberDebug from 'ember-debug/main';
-import Port from 'ember-debug/port';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
// TODO: Figure out why these tests are flaky and enable them again
module('Ember Debug - Container', function (hooks) {
let name, message;
- setupEmberDebugTest(hooks, {
- Port: class extends Port {
- init() {}
- send(n, m) {
- name = n;
- message = m;
- }
- },
- });
+ setupEmberDebugTest(hooks);
skip('#getTypes', async function t(assert) {
await visit('/simple');
diff --git a/tests/ember_debug/deprecation-debug-test.js b/test-apps/tests/ember_debug/deprecation-debug-test.js
similarity index 95%
rename from tests/ember_debug/deprecation-debug-test.js
rename to test-apps/tests/ember_debug/deprecation-debug-test.js
index 4e8c656848..4cb58ca3a2 100644
--- a/tests/ember_debug/deprecation-debug-test.js
+++ b/test-apps/tests/ember_debug/deprecation-debug-test.js
@@ -4,10 +4,16 @@ import Route from '@ember/routing/route';
import RSVP from 'rsvp';
import { run } from '@ember/runloop';
import { module, test } from 'qunit';
-import EmberDebug from 'ember-debug/main';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
+import EmberDebugImport from 'ember-debug/main';
+let EmberDebug;
+
module('Ember Debug - Deprecation', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ });
+
setupEmberDebugTest(hooks);
hooks.beforeEach(async function () {
diff --git a/tests/ember_debug/ember-data-test.js b/test-apps/tests/ember_debug/ember-data-test.js
similarity index 83%
rename from tests/ember_debug/ember-data-test.js
rename to test-apps/tests/ember_debug/ember-data-test.js
index bb06649bdf..982d00d66b 100644
--- a/tests/ember_debug/ember-data-test.js
+++ b/test-apps/tests/ember_debug/ember-data-test.js
@@ -1,8 +1,10 @@
import { module, test } from 'qunit';
-import EmberDebug from 'ember-debug/main';
import { setupApplicationTest } from 'ember-qunit';
import EmberObject from '@ember/object';
+import EmberDebugImport from 'ember-debug/main';
+let EmberDebug = EmberDebugImport;
+
class Adapter extends EmberObject {
watchModelTypes() {}
}
@@ -10,6 +12,10 @@ class Adapter extends EmberObject {
module('Ember Debug - Data', function (hooks) {
setupApplicationTest(hooks);
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebug).default;
+ });
+
hooks.beforeEach(function () {
this.owner.register('data-adapter:main', Adapter);
EmberDebug.isTesting = true;
diff --git a/tests/ember_debug/ember-debug-test.js b/test-apps/tests/ember_debug/ember-debug-test.js
similarity index 86%
rename from tests/ember_debug/ember-debug-test.js
rename to test-apps/tests/ember_debug/ember-debug-test.js
index a23e370186..1cfbc4540c 100644
--- a/tests/ember_debug/ember-debug-test.js
+++ b/test-apps/tests/ember_debug/ember-debug-test.js
@@ -1,24 +1,27 @@
import EmberObject from '@ember/object';
import { module, test } from 'qunit';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
-import EmberDebug from 'ember-debug/main';
-import Port from 'ember-debug/port';
import { settled } from '@ember/test-helpers';
+import EmberDebugImport from 'ember-debug/main';
+let EmberDebug;
+
module('Ember Debug', function (hooks) {
let name, adapter;
- setupEmberDebugTest(hooks, {
- Port: class extends Port {
- init() {}
- send(n) {
- name = n;
- }
- },
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
});
+ setupEmberDebugTest(hooks);
+
hooks.beforeEach(async function () {
adapter = EmberDebug.port.adapter;
+ EmberDebug.port.reopen({
+ send(n) {
+ name = n;
+ },
+ });
});
function cantSend(obj, assert) {
diff --git a/tests/ember_debug/object-inspector-test.js b/test-apps/tests/ember_debug/object-inspector-test.js
similarity index 94%
rename from tests/ember_debug/object-inspector-test.js
rename to test-apps/tests/ember_debug/object-inspector-test.js
index 4ae1d4b0f5..d44a9a443e 100644
--- a/tests/ember_debug/object-inspector-test.js
+++ b/test-apps/tests/ember_debug/object-inspector-test.js
@@ -11,7 +11,7 @@ import EmberObject, { computed } from '@ember/object';
import MutableArray from '@ember/array/mutable';
import ArrayProxy from '@ember/array/proxy';
import ObjectProxy from '@ember/object/proxy';
-import Service from '@ember/service';
+import Service, { inject as service } from '@ember/service';
import { VERSION } from '@ember/version';
import { tracked } from '@glimmer/tracking';
import { module, skip, test } from 'qunit';
@@ -19,10 +19,13 @@ import { hbs } from 'ember-cli-htmlbars';
import require from 'require';
import hasEmberVersion from '@ember/test-helpers/has-ember-version';
import { compareVersion } from 'ember-debug/version';
-import EmberDebug from 'ember-debug/main';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
import EmberRoute from '@ember/routing/route';
import Controller from '@ember/controller';
+import { setOwner } from '@ember/application';
+
+import EmberDebugImport from 'ember-debug/main';
+let EmberDebug = EmberDebugImport;
const GlimmerComponent = (function () {
try {
@@ -76,6 +79,10 @@ async function inspectObject(object) {
}
module('Ember Debug - Object Inspector', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ });
+
setupEmberDebugTest(hooks, {
routes() {
this.route('simple');
@@ -902,17 +909,22 @@ module('Ember Debug - Object Inspector', function (hooks) {
fooBoo() {
return true;
},
- }).create();
+ });
+
+ this.owner.register('service:test-inspect-service', inspectedService);
let inspected = EmberObject.extend({
- service: inspectedService,
- }).create();
+ service: inspectedService.create(),
+ service2: service('test-inspect-service'),
+ }).create(this);
let message = await inspectObject(inspected);
let serializedServiceProperty = message.details[1].properties[0];
+ let serializedService2Property = message.details[1].properties[1];
assert.true(serializedServiceProperty.isService);
+ assert.true(serializedService2Property.isService);
});
test('Proxy Service should be successfully tagged as service on serialization', async function (assert) {
@@ -1219,6 +1231,59 @@ module('Ember Debug - Object Inspector', function (hooks) {
'inspector: updateProperty',
]);
});
+
+ test('Inspected objects pass along their owner they have one', async function (assert) {
+ class Owner {}
+ class Foo {
+ bar = 'baz';
+ }
+
+ let owner = new Owner();
+ let inspected = new Foo();
+ let message = await inspectObject(inspected);
+ let ownerId = guidFor(owner);
+
+ assert.false(
+ message.details.some(({ name }) => name === 'Container'),
+ "Objects without an owner don't report an undefined owner in their last details object",
+ );
+ assert.strictEqual(message.details.length, 2);
+
+ setOwner(inspected, owner);
+
+ message = await inspectObject(inspected);
+
+ assert.strictEqual(
+ message.details.length,
+ 3,
+ 'Object with owner have an additional details object',
+ );
+
+ assert.strictEqual(
+ message.details.filter(({ name }) => name === 'Container').length,
+ 1,
+ 'Objects with an owner have exactly one container item in their details',
+ );
+ assert.deepEqual(
+ message.details.at(-1),
+ {
+ id: ownerId,
+ name: 'Container',
+ expand: false,
+ properties: [
+ {
+ name: '__owner__',
+ value: {
+ inspect: ``,
+ objectId: ownerId,
+ type: 'type-owner',
+ },
+ },
+ ],
+ },
+ 'the container is the last mixin in the list',
+ );
+ });
}
// @glimmer/component 1.0 doesn't seem to support 3.4, even though it has the manager API
diff --git a/tests/ember_debug/profile-manager-test.js b/test-apps/tests/ember_debug/profile-manager-test.js
similarity index 97%
rename from tests/ember_debug/profile-manager-test.js
rename to test-apps/tests/ember_debug/profile-manager-test.js
index 32b7beb2d0..2b04f757f7 100644
--- a/tests/ember_debug/profile-manager-test.js
+++ b/test-apps/tests/ember_debug/profile-manager-test.js
@@ -7,16 +7,18 @@ import EmberRoute from '@ember/routing/route';
import Controller from '@ember/controller';
import { module, test } from 'qunit';
import { hbs } from 'ember-cli-htmlbars';
-import EmberDebug from 'ember-debug/main';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
import { run } from '@ember/runloop';
-import Ember from 'ember-debug/ember';
+
+import EmberDebugImport from 'ember-debug/main';
+import EmberImport from 'ember-debug/ember';
+
import { compareVersion } from 'ember-debug/version';
import { setComponentTemplate } from '@ember/component';
-const { VERSION } = Ember;
+let EmberDebug;
-const isComponentHighlightSupported = compareVersion(VERSION, '3.20.0') !== -1;
+let isComponentHighlightSupported;
const getRounded = (value) => {
let data = value;
@@ -386,6 +388,12 @@ async function highlightsPromise(testedRoute, isGlimmerComponent) {
}
module('Ember Debug - profile manager component highlight', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ let VERSION = (await EmberImport).VERSION;
+ isComponentHighlightSupported = compareVersion(VERSION, '3.20.0') !== -1;
+ });
+
setupEmberDebugTest(hooks, {
routes() {
this.route('home');
diff --git a/tests/ember_debug/profile-node-test.js b/test-apps/tests/ember_debug/profile-node-test.js
similarity index 93%
rename from tests/ember_debug/profile-node-test.js
rename to test-apps/tests/ember_debug/profile-node-test.js
index 338b4cc012..a96845f8ef 100644
--- a/tests/ember_debug/profile-node-test.js
+++ b/test-apps/tests/ember_debug/profile-node-test.js
@@ -1,7 +1,11 @@
import { module, test } from 'qunit';
-import ProfileNode from 'ember-debug/profile-node';
+import ProfileNodeImport from 'ember-debug/profile-node';
+let ProfileNode;
-module('Ember Debug - ProfileNode', function () {
+module('Ember Debug - ProfileNode', function (hooks) {
+ hooks.before(async function () {
+ ProfileNode = (await ProfileNodeImport).default;
+ });
test('It can create a ProfileNode', function (assert) {
let p = new ProfileNode(1001, { template: 'application' });
diff --git a/tests/ember_debug/promise-assembler-test.js b/test-apps/tests/ember_debug/promise-assembler-test.js
similarity index 97%
rename from tests/ember_debug/promise-assembler-test.js
rename to test-apps/tests/ember_debug/promise-assembler-test.js
index 2d0d4e256d..048c0c1eaa 100644
--- a/tests/ember_debug/promise-assembler-test.js
+++ b/test-apps/tests/ember_debug/promise-assembler-test.js
@@ -2,7 +2,8 @@ import { run } from '@ember/runloop';
import Evented from '@ember/object/evented';
import EmberObject from '@ember/object';
import { module, test } from 'qunit';
-import PromiseAssembler from 'ember-debug/promise-assembler';
+import PromiseAssemblerImport from 'ember-debug/promise-assembler';
+let PromiseAssembler;
let assembler;
@@ -21,6 +22,10 @@ function startAssembler() {
}
module('Ember Debug - PromiseAssembler', function (hooks) {
+ hooks.before(async () => {
+ PromiseAssembler = (await PromiseAssemblerImport).default;
+ });
+
hooks.beforeEach(() => {
stubRSVP();
// eslint-disable-next-line ember/no-runloop
diff --git a/tests/ember_debug/promise-debug-test.js b/test-apps/tests/ember_debug/promise-debug-test.js
similarity index 95%
rename from tests/ember_debug/promise-debug-test.js
rename to test-apps/tests/ember_debug/promise-debug-test.js
index 01ecac4535..5647ae0332 100644
--- a/tests/ember_debug/promise-debug-test.js
+++ b/test-apps/tests/ember_debug/promise-debug-test.js
@@ -5,9 +5,11 @@ import { A as emberA } from '@ember/array';
import RSVP from 'rsvp';
import { module, skip, test } from 'qunit';
import { settled } from '@ember/test-helpers';
-import EmberDebug from 'ember-debug/main';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
-import Port from 'ember-debug/port';
+
+import EmberDebugImport from 'ember-debug/main';
+
+let EmberDebug;
// RSVP instrumentation is out of band (50 ms delay)
async function rsvpDelay() {
@@ -18,17 +20,20 @@ async function rsvpDelay() {
module('Ember Debug - Promise Debug', function (hooks) {
let name, message;
- setupEmberDebugTest(hooks, {
- Port: class extends Port {
- init() {}
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ });
+
+ setupEmberDebugTest(hooks);
+
+ hooks.beforeEach(async function () {
+ EmberDebug.port.reopen({
send(n, m) {
name = n;
message = m;
- }
- },
- });
+ },
+ });
- hooks.beforeEach(async function () {
EmberDebug.promiseDebug.reopen({
delay: 5,
session: {
diff --git a/tests/ember_debug/render-debug-test.js b/test-apps/tests/ember_debug/render-debug-test.js
similarity index 89%
rename from tests/ember_debug/render-debug-test.js
rename to test-apps/tests/ember_debug/render-debug-test.js
index 81742b202e..4902d0e5a7 100644
--- a/tests/ember_debug/render-debug-test.js
+++ b/test-apps/tests/ember_debug/render-debug-test.js
@@ -1,9 +1,16 @@
import { settled, visit } from '@ember/test-helpers';
import { module, test } from 'qunit';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
-import EmberDebug from 'ember-debug/main';
+
+import EmberDebugImport from 'ember-debug/main';
+
+let EmberDebug;
module('Ember Debug - Render Debug', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ });
+
setupEmberDebugTest(hooks, {
routes: function () {
this.route('simple');
diff --git a/tests/ember_debug/route-debug-test.js b/test-apps/tests/ember_debug/route-debug-test.js
similarity index 96%
rename from tests/ember_debug/route-debug-test.js
rename to test-apps/tests/ember_debug/route-debug-test.js
index 1baa7d3048..0998295caf 100644
--- a/tests/ember_debug/route-debug-test.js
+++ b/test-apps/tests/ember_debug/route-debug-test.js
@@ -4,13 +4,18 @@ import { run } from '@ember/runloop';
import Route from '@ember/routing/route';
import { module, test } from 'qunit';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
-import EmberDebug from 'ember-debug/main';
+import EmberDebugImport from 'ember-debug/main';
+let EmberDebug;
function getChildrenProperty(route, prop) {
return route.children.map((item) => get(item.value, prop));
}
module('Ember Debug - Route Tree', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ });
+
setupEmberDebugTest(hooks, {
routes() {
this.route('simple');
diff --git a/tests/ember_debug/view-debug-test.js b/test-apps/tests/ember_debug/view-debug-test.js
similarity index 91%
rename from tests/ember_debug/view-debug-test.js
rename to test-apps/tests/ember_debug/view-debug-test.js
index ddc05108a2..97aea6239d 100644
--- a/tests/ember_debug/view-debug-test.js
+++ b/test-apps/tests/ember_debug/view-debug-test.js
@@ -18,10 +18,16 @@ import Controller from '@ember/controller';
import didInsert from '@ember/render-modifiers/modifiers/did-insert';
import QUnit, { module, test } from 'qunit';
import { hbs } from 'ember-cli-htmlbars';
-import EmberDebug from 'ember-debug/main';
import setupEmberDebugTest from '../helpers/setup-ember-debug-test';
import { isInVersionSpecifier } from 'ember-debug/version';
-import { VERSION } from 'ember-debug/ember';
+import GlimmerComponent from '@glimmer/component';
+import { tracked } from '@glimmer/tracking';
+
+import EmberImport from 'ember-debug/ember';
+import EmberDebugImport from 'ember-debug/main';
+
+let EmberDebug;
+let VERSION;
let templateOnlyComponent = null;
try {
@@ -366,6 +372,11 @@ function findInspectorElement(kind) {
}
module('Ember Debug - View', function (hooks) {
+ hooks.before(async function () {
+ EmberDebug = (await EmberDebugImport).default;
+ VERSION = (await EmberImport).VERSION;
+ });
+
setupEmberDebugTest(hooks, {
routes() {
this.route('simple');
@@ -373,6 +384,7 @@ module('Ember Debug - View', function (hooks) {
this.route('test-component-in-in-element');
this.route('wormhole');
this.route('inputs');
+ this.route('component-in-shadow-dom');
this.route('comments', { resetNamespace: true }, function () {});
this.route('posts', { resetNamespace: true });
},
@@ -499,6 +511,31 @@ module('Ember Debug - View', function (hooks) {
}),
);
+ this.owner.register(
+ 'component:shadow-dom',
+ setComponentTemplate(
+ hbs(
+ `
+ {{#if this.shadow}}
+ {{#in-element this.shadow}}
+ {{yield}}
+ {{/in-element}}
+ {{/if}}
+ `,
+ {
+ moduleName: 'my-app/components/shadow-dom.hbs',
+ },
+ ),
+ class extends GlimmerComponent {
+ @tracked shadow;
+ setupRoot = (element) => {
+ this.shadow = element.attachShadow({ mode: 'open' });
+ window.testShadow = this.shadow;
+ };
+ },
+ ),
+ );
+
this.owner.register(
'component:test-foo',
setComponentTemplate(
@@ -596,7 +633,9 @@ module('Ember Debug - View', function (hooks) {
hbs(
`
- Simple {{test-foo}} {{test-bar value=(hash x=123 [x.y]=456)}} {{#in-element this.elementTarget}}
{{/in-element}}
+
+ Simple {{test-foo}} {{test-bar value=(hash x=123 [x.y]=456)}} {{#in-element this.elementTarget}} {{/in-element}}
+
`,
{
@@ -635,6 +674,13 @@ module('Ember Debug - View', function (hooks) {
}),
);
+ this.owner.register(
+ 'template:component-in-shadow-dom',
+ hbs(' ', {
+ moduleName: 'my-app/templates/component-in-shadow-dom.hbs',
+ }),
+ );
+
this.owner.register(
'template:comments/index',
hbs('{{#each this.comments as |comment|}}{{comment}}{{/each}}', {
@@ -1200,5 +1246,45 @@ module('Ember Debug - View', function (hooks) {
.dom('.ember-inspector-tooltip-detail-instance', tooltip)
.hasText(/ember-wormhole/);
});
+
+ test('component inside shadow dom', async function (assert) {
+ if (isInVersionSpecifier('^5.8.0', VERSION)) {
+ assert.expect(2);
+ return;
+ }
+ await visit('component-in-shadow-dom');
+ await rerender();
+ await getRenderTree();
+
+ const inShadow = window.testShadow.querySelector('.simple-component');
+
+ await click(window.testShadow.host, {
+ clientX: inShadow.getBoundingClientRect().x,
+ clientY: inShadow.getBoundingClientRect().y,
+ });
+
+ assert
+ .dom('.ember-inspector-tooltip-header', tooltip)
+ .hasText('');
+
+ let actual = highlight.getBoundingClientRect();
+ let expected = inShadow.getBoundingClientRect();
+
+ assert.ok(isVisible(tooltip), 'tooltip is visible');
+ assert.ok(isVisible(highlight), 'highlight is visible');
+
+ assert.deepEqual(actual.x, expected.x, 'same x as component');
+ assert.deepEqual(actual.y, expected.y, 'same y as component');
+ assert.deepEqual(actual.width, expected.width, 'same width as component');
+ assert.deepEqual(
+ actual.height,
+ expected.height,
+ 'same height as component',
+ );
+
+ assert
+ .dom('.ember-inspector-tooltip-detail-instance', tooltip)
+ .hasText('App.TestFooComponent');
+ });
});
});
diff --git a/test-apps/tests/helpers/index.ts b/test-apps/tests/helpers/index.ts
new file mode 100644
index 0000000000..e190f567ed
--- /dev/null
+++ b/test-apps/tests/helpers/index.ts
@@ -0,0 +1,43 @@
+import {
+ setupApplicationTest as upstreamSetupApplicationTest,
+ setupRenderingTest as upstreamSetupRenderingTest,
+ setupTest as upstreamSetupTest,
+ type SetupTestOptions,
+} from 'ember-qunit';
+
+// This file exists to provide wrappers around ember-qunit's
+// test setup functions. This way, you can easily extend the setup that is
+// needed per test type.
+
+function setupApplicationTest(hooks: NestedHooks, options?: SetupTestOptions) {
+ upstreamSetupApplicationTest(hooks, options);
+
+ // Additional setup for application tests can be done here.
+ //
+ // For example, if you need an authenticated session for each
+ // application test, you could do:
+ //
+ // hooks.beforeEach(async function () {
+ // await authenticateSession(); // ember-simple-auth
+ // });
+ //
+ // This is also a good place to call test setup functions coming
+ // from other addons:
+ //
+ // setupIntl(hooks, 'en-us'); // ember-intl
+ // setupMirage(hooks); // ember-cli-mirage
+}
+
+function setupRenderingTest(hooks: NestedHooks, options?: SetupTestOptions) {
+ upstreamSetupRenderingTest(hooks, options);
+
+ // Additional setup for rendering tests can be done here.
+}
+
+function setupTest(hooks: NestedHooks, options?: SetupTestOptions) {
+ upstreamSetupTest(hooks, options);
+
+ // Additional setup for unit tests can be done here.
+}
+
+export { setupApplicationTest, setupRenderingTest, setupTest };
diff --git a/tests/helpers/setup-ember-debug-test.js b/test-apps/tests/helpers/setup-ember-debug-test.js
similarity index 64%
rename from tests/helpers/setup-ember-debug-test.js
rename to test-apps/tests/helpers/setup-ember-debug-test.js
index 831ec4d3fc..37eb22d746 100644
--- a/tests/helpers/setup-ember-debug-test.js
+++ b/test-apps/tests/helpers/setup-ember-debug-test.js
@@ -10,18 +10,21 @@ import {
teardownContext,
} from '@ember/test-helpers';
import { run } from '@ember/runloop';
-import Route from '@ember/routing/route';
-import Controller from '@ember/controller';
-import BasicAdapter from 'ember-inspector/services/adapters/basic';
-import config from 'ember-inspector/config/environment';
-import EmberDebug from 'ember-debug/main';
+import config from 'test-app/config/environment';
import { hbs } from 'ember-cli-htmlbars';
-import Port from 'ember-debug/port';
+
+import EmberDebugImport from 'ember-debug/main';
+import PortImport from 'ember-debug/port';
+
+let Port;
+let EmberDebug;
export default function setupEmberDebugTest(hooks, options = {}) {
let app, originalApp, originalPort, originalIgnoreDeprecations;
hooks.beforeEach(async function () {
+ Port = (await PortImport).default;
+ EmberDebug = (await EmberDebugImport).default;
originalPort = EmberDebug.Port;
originalApp = getApplication();
originalIgnoreDeprecations = EmberDebug.IGNORE_DEPRECATIONS;
@@ -52,17 +55,6 @@ export default function setupEmberDebugTest(hooks, options = {}) {
}
this.owner.register('router:main', Router);
- this.owner.register('service:adapter', BasicAdapter);
- /**
- * preferably, ember debug tests should use their own test app
- * but currently its mangled with the inspector ui app, which is not compatible with all ember versions being tested.
- * we do filter the tests to only run the ember_debug tests, but that does not prevent the app merging.
- * The application route/controller/template of inspector ui was being indirectly used in ember_debug tests,
- * which is not required and broke older lts tests
- */
- this.owner.register('route:application', class extends Route {});
- this.owner.register('controller:application', class extends Controller {});
- this.owner.register('template:application', hbs('{{outlet}}'));
run(() => {
EmberDebug.isTesting = true;
diff --git a/test-apps/tests/index.html b/test-apps/tests/index.html
new file mode 100644
index 0000000000..21b1db8db9
--- /dev/null
+++ b/test-apps/tests/index.html
@@ -0,0 +1,64 @@
+
+
+
+
+ EmberInspector Tests
+
+
+
+
+
+ {{content-for "head"}}
+ {{content-for "test-head"}}
+
+
+
+
+
+ {{content-for "head-footer"}}
+ {{content-for "test-head-footer"}}
+
+
+
+ {{content-for "body"}}
+ {{content-for "test-body"}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{content-for "body-footer"}}
+ {{content-for "test-body-footer"}}
+
+
diff --git a/tests/integration/injection-test.js b/test-apps/tests/integration/injection-test.js
similarity index 78%
rename from tests/integration/injection-test.js
rename to test-apps/tests/integration/injection-test.js
index f638671b54..8112d32277 100644
--- a/tests/integration/injection-test.js
+++ b/test-apps/tests/integration/injection-test.js
@@ -135,7 +135,7 @@ class ChromeApi {
if (url.startsWith('/')) {
url = url.slice(1);
}
- return '/testing/' + url;
+ return '/' + url;
},
connect() {
const other = self.connectToOther;
@@ -162,65 +162,6 @@ class ChromeApi {
}
}
-let loaderInstance = {};
-function getLoader(def, req) {
- let { define, requireModule } = loaderInstance;
- if (typeof define !== 'function' || typeof requireModule !== 'function') {
- (function () {
- let registry = {},
- seen = {};
-
- define = function (name, deps, callback) {
- if (arguments.length < 3) {
- callback = deps;
- deps = [];
- }
- registry[name] = { deps, callback };
- };
-
- requireModule = function (name) {
- if (!name.startsWith('ember-debug')) {
- return req(name);
- }
- if (seen[name]) {
- return seen[name];
- }
-
- let mod = registry[name];
- if (!mod) {
- throw new Error(`Module: '${name}' not found.`);
- }
-
- seen[name] = {};
-
- let deps = mod.deps;
- let callback = mod.callback;
- let reified = [];
- let exports;
-
- for (let i = 0, l = deps.length; i < l; i++) {
- if (deps[i] === 'exports') {
- reified.push((exports = {}));
- } else {
- reified.push(requireModule(deps[i]));
- }
- }
-
- let value = callback.apply(this, reified);
- seen[name] = exports || value;
- return seen[name];
- };
-
- requireModule.has = req.has;
-
- define.registry = registry;
- define.seen = seen;
- })();
- }
- loaderInstance = { define, requireModule };
- return loaderInstance;
-}
-
module('Integration | Injection', function (hooks) {
setupApplicationTest(hooks);
@@ -250,14 +191,6 @@ module('Integration | Injection', function (hooks) {
let windowMessages = 0;
- // setup global loader for ember-debug, will be reset after test
-
- const { define, requireModule } = getLoader(
- window.define,
- window.requireModule,
- );
- window.define = define;
- window.requireModule = requireModule;
{
// eslint-disable-next-line no-unused-vars
const chrome = contentChromeApi;
@@ -317,8 +250,8 @@ module('Integration | Injection', function (hooks) {
test('inject ember debug via content and background scripts', async function (assert) {
await inject(this.owner, assert);
- const { requireModule } = getLoader(window.define, window.requireModule);
- const emberDebug = requireModule('ember-debug/main');
+ const emberDebug = globalThis.EmberInspector;
+
assert.notStrictEqual(
emberDebug,
undefined,
@@ -338,7 +271,7 @@ module('Integration | Injection', function (hooks) {
await inject(this.owner, assert);
assert.timeout(100);
- const emberDebug = requireModule('ember-debug/main');
+ const emberDebug = globalThis.EmberInspector;
const viewInspection = emberDebug.viewDebug.viewInspection;
const inspectNearestCalled = new Promise((resolve) => {
diff --git a/test-apps/tests/test-adapter.js b/test-apps/tests/test-adapter.js
new file mode 100644
index 0000000000..283b5204b4
--- /dev/null
+++ b/test-apps/tests/test-adapter.js
@@ -0,0 +1,348 @@
+import QUnit from 'qunit';
+import { next } from '@ember/runloop';
+import BasicAdapter from 'test-app/services/adapters/basic';
+import { settled } from '@ember/test-helpers';
+
+let adapter = null;
+let resourcesEnabled = false;
+let resources = [];
+let responders = [];
+
+export function setupTestAdapter(hooks) {
+ // Some default responders that are part of the normal application boot cycle
+ hooks.beforeEach(function () {
+ respondWith('check-version', false, { isDefault: true });
+
+ respondWith(
+ 'general:applicationBooted',
+ {
+ type: 'general:applicationBooted',
+ applicationId: 'my-app',
+ applicationName: 'My App',
+ booted: true,
+ },
+ { isDefault: true },
+ );
+
+ respondWith(
+ 'app-picker-loaded',
+ {
+ type: 'apps-loaded',
+ applicationId: null,
+ applicationName: null,
+ apps: [
+ {
+ applicationId: 'my-app',
+ applicationName: 'My App',
+ },
+ ],
+ },
+ { isDefault: true },
+ );
+
+ respondWith('app-selected', false, { isDefault: true });
+
+ respondWith(
+ 'deprecation:getCount',
+ ({ applicationId, applicationName }) => ({
+ type: 'deprecation:count',
+ applicationId,
+ applicationName,
+ count: 0,
+ }),
+ { isDefault: true },
+ );
+ });
+
+ // Ensure all expectations are met and reset the global states
+ hooks.afterEach(function (assert) {
+ for (let { file, line, actual, expected, reject } of resources) {
+ if (!isNaN(expected) && actual !== expected) {
+ assert.strictEqual(
+ actual,
+ expected,
+ `Expceting resouce ${file}:${line} to be opened ${expected} time(s)`,
+ );
+ reject(
+ `Expceting resouce ${file}:${line} to be opened ${expected} time(s), was opened ${actual} time(s)`,
+ );
+ }
+ }
+
+ for (let { type, isDefault, actual, expected, reject } of responders) {
+ if (!isDefault && !isNaN(expected) && actual !== expected) {
+ assert.strictEqual(
+ actual,
+ expected,
+ `The correct amount of ${type} messages are sent`,
+ );
+ reject(`Expecting ${expected} ${type} messages, got ${actual}`);
+ }
+ }
+
+ adapter = null;
+ resourcesEnabled = false;
+ resources.length = 0;
+ responders.length = 0;
+ });
+}
+
+/**
+ * Allow `openResouce` to be called on the adapter.
+ *
+ * @method enableOpenResource
+ */
+export function enableOpenResource() {
+ resourcesEnabled = true;
+}
+
+/**
+ * Expect `openResouce` to be called on the adapter with a specific filename and
+ * line number. Must call `enableOpenResource` first.
+ *
+ * @method expectOpenResource
+ * @param {String} file The filename.
+ * @param {number} line The line number.
+ * @param {Object} options
+ * - {number | false} count How many calls to allow. `false` for unlimited.
+ * Defaults to 1.
+ * @return {Promise} Resolves when all the expected calls are made, or
+ * rejects at the end of the current test if not called
+ * enough times.
+ */
+export function expectOpenResource(file, line, options = {}) {
+ if (!resourcesEnabled) {
+ throw new Error('call enableOpenResource first');
+ }
+
+ return new Promise((resolve, reject) => {
+ let { count } = { count: 1, ...options };
+ resources.push({
+ file,
+ line,
+ actual: 0,
+ expected: count === false ? NaN : count,
+ resolve,
+ reject,
+ });
+ });
+}
+
+/**
+ * Send a message to the adapter.
+ *
+ * @method expectOpenResource
+ * @param {Object} message The message.
+ * @return {Promise} Resolves when the message is delivered.
+ */
+export async function sendMessage(message) {
+ if (adapter === null) {
+ throw new Error('Cannot call sendMessage outside of a test');
+ }
+
+ const msg = await new Promise((resolve, reject) => {
+ // eslint-disable-next-line ember/no-runloop
+ next(async () => {
+ let normalized = {
+ applicationId: 'my-app',
+ applicationName: 'My App',
+ ...message,
+ from: 'inspectedWindow',
+ };
+ try {
+ adapter._messageReceived(normalized);
+ } catch (e) {
+ return reject(e);
+ }
+
+ resolve(normalized);
+ });
+ });
+
+ await settled();
+ return msg;
+}
+
+/**
+ * Expect a message from the adapter of the given type, and respond to the message
+ * with the given payload.
+ *
+ * @method respondWith
+ * @param {String} type The incoming message type.
+ * @param { false | Object | Function } payload The payload.
+ * - Pass `false` to acknoledge the message but don't send a response.
+ * - Pass an object to send a response (`message` parameter of `sendMessage`).
+ * - Pass a callback to dynamically respond with one of the above, or `undefined`,
+ * in which case the incoming messages is considered unhandled and the remaining
+ * responders will be tried instead. The callback is given the incoming message
+ * as an argument.
+ * @param {Object} options
+ * - {number | false} count How many calls to allow. `false` for unlimited.
+ * Defaults to 1.
+ * @return {Promise} Resolves when all the expected calls are made, or
+ * rejects at the end of the current test if not called
+ * enough times.
+ */
+export function respondWith(type, payload, options = {}) {
+ return new Promise((resolve, reject) => {
+ let { count, isDefault } = { count: 1, isDefault: false, ...options };
+ let callback = typeof payload === 'function' ? payload : () => payload;
+
+ responders.push({
+ type,
+ isDefault,
+ callback,
+ actual: 0,
+ expected: count === false ? NaN : count,
+ resolve,
+ reject,
+ });
+ });
+}
+
+/**
+ * Disable the default responder for the given type.
+ *
+ * @method disableDefaultResponseFor
+ */
+export function disableDefaultResponseFor(type) {
+ for (let [i, responder] of responders.entries()) {
+ if (responder.type === type && responder.isDefault) {
+ if (responder.actual > 0) {
+ throw new Error(
+ `Cannot remove default responder for ${type}: a response has already been sent!`,
+ );
+ }
+
+ responders.splice(i, 1);
+ return;
+ }
+ }
+
+ throw new Error(
+ `Cannot remove default responder for ${type}: no such responder!`,
+ );
+}
+
+export default class TestAdapter extends BasicAdapter {
+ constructor() {
+ super(...arguments);
+ adapter = this;
+ }
+
+ get name() {
+ return 'test';
+ }
+
+ get canOpenResource() {
+ return resourcesEnabled;
+ }
+
+ openResource(file, line) {
+ if (!resourcesEnabled) {
+ throw new Error('openResource called unexpectedly');
+ }
+
+ console.debug('Opening resource', { file, line });
+
+ if (!file) {
+ QUnit.assert.ok(
+ file,
+ `resource has valid "file" field: ${JSON.stringify(file)}`,
+ );
+ return;
+ }
+
+ if (!line) {
+ QUnit.assert.ok(
+ file,
+ `resource has valid "line" field: ${JSON.stringify(line)}`,
+ );
+ return;
+ }
+
+ for (let resource of resources) {
+ let { actual, expected, resolve } = resource;
+
+ if (actual === expected) {
+ continue;
+ }
+
+ if (file === resource.file && line === resource.line) {
+ console.debug('Opened resource', { file, line });
+ resource.actual = ++actual;
+ resolve();
+ return;
+ }
+ }
+
+ console.error('Unknown resource', { file, line });
+
+ QUnit.assert.deepEqual({ file, line }, {}, 'Unknown resource');
+ }
+
+ sendMessage(message) {
+ console.debug('Sending message (devtools -> inspectedWindow)', message);
+
+ if (!message.type) {
+ QUnit.assert.ok(
+ false,
+ `message has valid "type" field: ${JSON.stringify(message)}`,
+ );
+ return;
+ }
+
+ if (message.from !== 'devtools') {
+ QUnit.assert.strictEqual(
+ message.from,
+ 'devtools',
+ `message has valid "from" field: ${JSON.stringify(message)}`,
+ );
+ return;
+ }
+
+ for (let responder of responders) {
+ let { type, callback, actual, expected, resolve } = responder;
+
+ if (actual === expected) {
+ continue;
+ }
+
+ if (type === message.type) {
+ let response = callback(message);
+
+ if (response !== undefined) {
+ responder.actual = ++actual;
+ }
+
+ let didRespond;
+
+ if (response) {
+ console.debug(
+ 'Received response (inspectedWindow -> devtools)',
+ response,
+ );
+ didRespond = sendMessage(response);
+ } else if (response === false) {
+ console.debug(
+ 'Ignoreing message (devtools -> inspectedWindow)',
+ message,
+ );
+ didRespond = Promise.resolve();
+ }
+
+ if (didRespond) {
+ if (actual === expected) {
+ didRespond.then(resolve);
+ }
+
+ return;
+ }
+ }
+ }
+
+ console.error('Unexpected message', message);
+
+ QUnit.assert.deepEqual(message, {}, 'Unexpected message');
+ }
+}
diff --git a/test-apps/tests/test-helper.js b/test-apps/tests/test-helper.js
new file mode 100644
index 0000000000..b278026a1e
--- /dev/null
+++ b/test-apps/tests/test-helper.js
@@ -0,0 +1,31 @@
+import Application from 'test-app/app';
+import config from 'test-app/config/environment';
+import * as QUnit from 'qunit';
+import { setApplication } from '@ember/test-helpers';
+import { setup } from 'qunit-dom';
+import { start } from 'ember-qunit';
+import TestAdapter from './test-adapter';
+import setupSinon from 'ember-sinon-qunit';
+
+/**
+ * we need to override the adapter that is set up in initializers/setup.js
+ * for that we suffix the name of setup initializer with `-2` so that
+ * this initializer comes right after it
+ */
+Application.initializer({
+ name: `setup-2-override-adapter`,
+ initialize(app) {
+ app.register('service:adapter', TestAdapter);
+ },
+});
+
+setApplication(Application.create(config.APP));
+
+setupSinon();
+
+window.NO_EMBER_DEBUG = true;
+QUnit.config.testTimeout = 60000;
+
+setup(QUnit.assert);
+
+start();
diff --git a/test-apps/tests/unit/.gitkeep b/test-apps/tests/unit/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/unit/utils/type-check-test.js b/test-apps/tests/unit/utils/type-check-test.js
similarity index 68%
rename from tests/unit/utils/type-check-test.js
rename to test-apps/tests/unit/utils/type-check-test.js
index 8586e31def..45733e7e04 100644
--- a/tests/unit/utils/type-check-test.js
+++ b/test-apps/tests/unit/utils/type-check-test.js
@@ -1,7 +1,12 @@
-import { inspect } from 'ember-debug/type-check';
import { module, test } from 'qunit';
+import TypeCheckImport from 'ember-debug/type-check';
+let inspect;
+
+module('Unit | Utility | type-check', function (hooks) {
+ hooks.before(async function () {
+ inspect = (await TypeCheckImport).inspect;
+ });
-module('Unit | Utility | type-check', function () {
test('inspect | An POJO with Symbols is correctly transformed into preview', async function (assert) {
let symbol = Symbol('test');
let symbolValue = Symbol('value');
diff --git a/tests/acceptance/component-tree-test.js b/tests/acceptance/component-tree-test.js
index 35e4ed3ab8..4cb62b5519 100644
--- a/tests/acceptance/component-tree-test.js
+++ b/tests/acceptance/component-tree-test.js
@@ -337,6 +337,59 @@ module('Component Tab', function (hooks) {
);
});
+ test('it should only show parents and children of selected item in focus mode', async function (assert) {
+ await visit('/component-tree');
+
+ function findTreeItem(children, id) {
+ for (const child of children) {
+ if (child.id.includes(`render-node:${id}`)) {
+ return child;
+ }
+ const found = findTreeItem(child.children, id);
+ if (found) {
+ return found;
+ }
+ }
+ }
+
+ function getCustomRenderTree() {
+ const tree = getRenderTree({ withChildren: true });
+ const subtask = findTreeItem(tree, 6);
+ const todo = findTreeItem(tree, 3);
+ subtask.children.push(Component({ id: 7, name: 'sub-task-child' }));
+ subtask.children.push(Component({ id: 8, name: 'sub-task-child' }));
+ todo.children.push(Component({ id: 9, name: 'todo-list-2' }));
+ return tree;
+ }
+
+ await sendMessage({
+ type: 'view:renderTree',
+ tree: getCustomRenderTree(),
+ });
+
+ await rerender();
+
+ let treeNodes = findAll('.component-tree-item');
+ assert.strictEqual(treeNodes.length, 5, 'expected all tree nodes');
+
+ let expanders = findAll('.component-tree-item-expand');
+ let expanderEl = expanders[expanders.length - 1];
+ await click(expanderEl);
+
+ treeNodes = findAll('.component-tree-item');
+ const subTask = treeNodes
+ .filter((t) => t.textContent.toLowerCase().includes('subtask'))
+ .at(-1);
+
+ respondWith('view:showInspection', false, { count: 1 });
+ await click(subTask);
+
+ await click('[data-test-toggle-focus]');
+
+ treeNodes = findAll('.component-tree-item');
+ assert.strictEqual(treeNodes.length, 6, 'expected all tree nodes');
+ });
+
test('It should clear the search filter when the clear button is clicked', async function (assert) {
await visit('/component-tree');
diff --git a/tests/index.html b/tests/index.html
index daf58d259a..6fe4ea4efb 100644
--- a/tests/index.html
+++ b/tests/index.html
@@ -26,12 +26,11 @@
-
{{content-for "head-footer"}}
{{content-for "test-head-footer"}}
-
+
{{content-for "body"}}
{{content-for "test-body"}}
@@ -47,7 +46,6 @@
-
{{content-for "body-footer"}}
diff --git a/tests/test-helper.js b/tests/test-helper.js
index 4cc381f3a8..c68be9dab0 100644
--- a/tests/test-helper.js
+++ b/tests/test-helper.js
@@ -8,9 +8,6 @@ import TestAdapter from './test-adapter';
import setupSinon from 'ember-sinon-qunit';
import registerWaiter from 'ember-raf-scheduler/test-support/register-waiter';
-// ensure ember-debug is required
-import 'ember-debug/main';
-
registerWaiter();
/**
diff --git a/tsconfig.json b/tsconfig.json
index 1c159c047d..32ce044bec 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -19,5 +19,5 @@
},
"types": ["chrome", "./node_modules/ember-source/types/stable"]
},
- "include": ["app/**/*", "tests/**/*", "types/**/*", "lib/ui/**/*"]
+ "include": ["app/**/*", "test-apps/**/*", "tests/**/*", "types/**/*", "lib/ui/**/*"]
}