From 9a1b19250cb8627ee424ae233ee701f49859a62f Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:01:06 -0400 Subject: [PATCH] Remove environment configuration --- lib/index.js | 1 - package.json | 1 - .../-internals/glimmer/lib/environment.ts | 119 +-------- .../glimmer/lib/helpers/each-in-wrapper.ts | 3 + .../-internals/glimmer/lib/helpers/each-in.ts | 5 +- .../@ember/-internals/glimmer/lib/renderer.ts | 2 +- .../-internals/glimmer/lib/utils/iterator.ts | 2 +- packages/@ember/-internals/package.json | 4 +- .../integration-tests/package.json | 2 +- .../integration-tests/test/package.json | 1 - .../test/style-warnings-test.ts | 23 +- packages/@glimmer/debug-util/index.ts | 2 +- packages/@glimmer/debug-util/lib/assert.ts | 7 + packages/@glimmer/debug-util/package.json | 6 +- packages/@glimmer/destroyable/index.ts | 14 +- packages/@glimmer/destroyable/package.json | 1 - .../@glimmer/destroyable/test/package.json | 1 - packages/@glimmer/global-context/.npmignore | 1 - packages/@glimmer/global-context/index.ts | 250 ------------------ packages/@glimmer/global-context/package.json | 42 --- packages/@glimmer/manager/lib/internal/api.ts | 3 +- .../@glimmer/manager/lib/public/helper.ts | 2 +- .../@glimmer/manager/lib/public/modifier.ts | 3 +- packages/@glimmer/manager/package.json | 1 - packages/@glimmer/reference/lib/iterable.ts | 3 +- packages/@glimmer/reference/lib/reference.ts | 4 +- packages/@glimmer/reference/package.json | 2 +- packages/@glimmer/reference/test/package.json | 1 - .../reference/test/references-test.ts | 62 +---- .../lib/compiled/opcodes/expressions.ts | 4 +- .../runtime/lib/compiled/opcodes/vm.ts | 2 +- packages/@glimmer/runtime/lib/helpers/get.ts | 2 +- packages/@glimmer/runtime/lib/vm/append.ts | 6 - .../runtime/lib/vm/attributes/dynamic.ts | 12 +- packages/@glimmer/runtime/package.json | 3 +- packages/@glimmer/validator/index.ts | 1 + packages/@glimmer/validator/lib/debug.ts | 4 +- packages/@glimmer/validator/lib/validators.ts | 5 +- packages/@glimmer/validator/package.json | 2 +- packages/@glimmer/validator/test/package.json | 1 - .../validator/test/validators-test.ts | 20 -- pnpm-lock.yaml | 70 ++--- rollup.config.mjs | 5 + 43 files changed, 108 insertions(+), 597 deletions(-) create mode 100644 packages/@ember/-internals/glimmer/lib/helpers/each-in-wrapper.ts delete mode 100644 packages/@glimmer/global-context/.npmignore delete mode 100644 packages/@glimmer/global-context/index.ts delete mode 100644 packages/@glimmer/global-context/package.json diff --git a/lib/index.js b/lib/index.js index 36c496c739d..4f74dbe7698 100644 --- a/lib/index.js +++ b/lib/index.js @@ -137,7 +137,6 @@ const shim = addonV1Shim(path.join(__dirname, '..'), { './dist/dev/packages/@glimmer/destroyable/index.js', './dist/dev/packages/@glimmer/encoder/index.js', './dist/dev/packages/@glimmer/env/index.js', - './dist/dev/packages/@glimmer/global-context/index.js', './dist/dev/packages/@glimmer/manager/index.js', './dist/dev/packages/@glimmer/node/index.js', './dist/dev/packages/@glimmer/opcode-compiler/index.js', diff --git a/package.json b/package.json index 008724da9c5..92f87f0557b 100644 --- a/package.json +++ b/package.json @@ -319,7 +319,6 @@ "@glimmer/destroyable/index.js": "ember-source/@glimmer/destroyable/index.js", "@glimmer/encoder/index.js": "ember-source/@glimmer/encoder/index.js", "@glimmer/env/index.js": "ember-source/@glimmer/env/index.js", - "@glimmer/global-context/index.js": "ember-source/@glimmer/global-context/index.js", "@glimmer/manager/index.js": "ember-source/@glimmer/manager/index.js", "@glimmer/node/index.js": "ember-source/@glimmer/node/index.js", "@glimmer/opcode-compiler/index.js": "ember-source/@glimmer/opcode-compiler/index.js", diff --git a/packages/@ember/-internals/glimmer/lib/environment.ts b/packages/@ember/-internals/glimmer/lib/environment.ts index 2ebcbdea8e5..c38aba2acf8 100644 --- a/packages/@ember/-internals/glimmer/lib/environment.ts +++ b/packages/@ember/-internals/glimmer/lib/environment.ts @@ -1,91 +1,16 @@ import { ENV } from '@ember/-internals/environment'; -import { get, set, _getProp, _setProp } from '@ember/-internals/metal'; -import type { InternalOwner } from '@ember/-internals/owner'; import { getDebugName } from '@ember/-internals/utils'; -import { constructStyleDeprecationMessage } from '@ember/-internals/views'; -import { assert, deprecate, warn } from '@ember/debug'; -import type { DeprecationOptions } from '@ember/debug'; import { schedule, _backburner } from '@ember/runloop'; +import { setDestructionSchedulers } from '@glimmer/destroyable'; import { DEBUG } from '@glimmer/env'; -import setGlobalContext from '@glimmer/global-context'; import type { EnvironmentDelegate } from '@glimmer/runtime'; -import { debug } from '@glimmer/validator'; -import toIterator from './utils/iterator'; -import { isHTMLSafe } from './utils/string'; -import toBool from './utils/to-bool'; +import { debug, setScheduleRevalidate } from '@glimmer/validator'; -/////////// - -// Setup global context - -setGlobalContext({ - scheduleRevalidate() { - _backburner.ensureInstance(); - }, - - toBool, - toIterator, - - getProp: _getProp, - setProp: _setProp, - getPath: get, - setPath: set, - - scheduleDestroy(destroyable, destructor) { - schedule('actions', null, destructor, destroyable); - }, - - scheduleDestroyed(finalizeDestructor) { - schedule('destroy', null, finalizeDestructor); - }, - - warnIfStyleNotTrusted(value: unknown) { - warn( - constructStyleDeprecationMessage(String(value)), - (() => { - if (value === null || value === undefined || isHTMLSafe(value)) { - return true; - } - return false; - })(), - { id: 'ember-htmlbars.style-xss-warning' } - ); - }, - - assert(test: unknown, msg: string, options?: { id: string }) { - if (DEBUG) { - let id = options?.id; - - let override = VM_ASSERTION_OVERRIDES.filter((o) => o.id === id)[0]; - - assert(override?.message ?? msg, test); - } - }, - - deprecate(msg: string, test: unknown, options: { id: string }) { - if (DEBUG) { - let { id } = options; - - if (id === 'argument-less-helper-paren-less-invocation') { - throw new Error( - `A resolved helper cannot be passed as a named argument as the syntax is ` + - `ambiguously a pass-by-reference or invocation. Use the ` + - `\`{{helper 'foo-helper}}\` helper to pass by reference or explicitly ` + - `invoke the helper with parens: \`{{(fooHelper)}}\`.` - ); - } - - let override = VM_DEPRECATION_OVERRIDES.filter((o) => o.id === id)[0]; - - if (!override) throw new Error(`deprecation override for ${id} not found`); - - // allow deprecations to be disabled in the VM_DEPRECATION_OVERRIDES array below - if (!override.disabled) { - deprecate(override.message ?? msg, Boolean(test), override); - } - } - }, -}); +setScheduleRevalidate(() => _backburner.ensureInstance()); +setDestructionSchedulers( + (destroyable, destructor) => schedule('actions', null, destructor, destroyable), + (finalizer) => schedule('destroy', null, finalizer) +); if (DEBUG) { debug?.setTrackingTransactionEnv?.({ @@ -99,38 +24,10 @@ if (DEBUG) { }); } -/////////// - -// VM Assertion/Deprecation overrides - -const VM_DEPRECATION_OVERRIDES: (DeprecationOptions & { - disabled?: boolean; - message?: string; -})[] = [ - { - id: 'setting-on-hash', - until: '4.4.0', - for: 'ember-source', - since: { - available: '3.28.0', - enabled: '3.28.0', - }, - }, -]; - -const VM_ASSERTION_OVERRIDES: { id: string; message: string }[] = []; - -/////////// - -// Define environment delegate - export class EmberEnvironmentDelegate implements EnvironmentDelegate { public enableDebugTooling: boolean = ENV._DEBUG_RENDER_TREE; - constructor( - public owner: InternalOwner, - public isInteractive: boolean - ) {} + constructor(public isInteractive: boolean) {} onTransactionCommit(): void {} } diff --git a/packages/@ember/-internals/glimmer/lib/helpers/each-in-wrapper.ts b/packages/@ember/-internals/glimmer/lib/helpers/each-in-wrapper.ts new file mode 100644 index 00000000000..3cd669ffe44 --- /dev/null +++ b/packages/@ember/-internals/glimmer/lib/helpers/each-in-wrapper.ts @@ -0,0 +1,3 @@ +export class EachInWrapper { + constructor(public inner: unknown) {} +} diff --git a/packages/@ember/-internals/glimmer/lib/helpers/each-in.ts b/packages/@ember/-internals/glimmer/lib/helpers/each-in.ts index 682d71b7c8a..1ad6a8d966c 100644 --- a/packages/@ember/-internals/glimmer/lib/helpers/each-in.ts +++ b/packages/@ember/-internals/glimmer/lib/helpers/each-in.ts @@ -8,6 +8,7 @@ import { assert } from '@ember/debug'; import type { CapturedArguments } from '@glimmer/interfaces'; import { createComputeRef, valueForRef } from '@glimmer/reference'; import { consumeTag } from '@glimmer/validator'; +import { EachInWrapper } from './each-in-wrapper'; import { internalHelper } from './internal-helper'; /** @@ -163,10 +164,6 @@ import { internalHelper } from './internal-helper'; @public @since 2.1.0 */ -export class EachInWrapper { - constructor(public inner: unknown) {} -} - export default internalHelper(({ positional }: CapturedArguments) => { const inner = positional[0]; assert('expected at least one positional arg', inner); diff --git a/packages/@ember/-internals/glimmer/lib/renderer.ts b/packages/@ember/-internals/glimmer/lib/renderer.ts index cfc74e0e423..dc90f86fe9c 100644 --- a/packages/@ember/-internals/glimmer/lib/renderer.ts +++ b/packages/@ember/-internals/glimmer/lib/renderer.ts @@ -750,7 +750,7 @@ class BaseRenderer { * But for actual ember apps, you *need* to implement everything * an app needs (which will actually change and become less over time) */ - let env = new EmberEnvironmentDelegate(owner as InternalOwner, envOptions.isInteractive); + let env = new EmberEnvironmentDelegate(envOptions.isInteractive); let options = runtimeOptions({ document }, env, sharedArtifacts, resolver); let context = new EvaluationContextImpl( sharedArtifacts, diff --git a/packages/@ember/-internals/glimmer/lib/utils/iterator.ts b/packages/@ember/-internals/glimmer/lib/utils/iterator.ts index 34e3c512d64..5a305657889 100644 --- a/packages/@ember/-internals/glimmer/lib/utils/iterator.ts +++ b/packages/@ember/-internals/glimmer/lib/utils/iterator.ts @@ -5,7 +5,7 @@ import { isObject } from '@ember/-internals/utils'; import type { Nullable } from '@ember/-internals/utility-types'; import type { IteratorDelegate } from '@glimmer/reference'; import { consumeTag, isTracking, tagFor } from '@glimmer/validator'; -import { EachInWrapper } from '../helpers/each-in'; +import { EachInWrapper } from '../helpers/each-in-wrapper'; import type { NativeArray } from '@ember/array'; export default function toIterator(iterable: unknown): Nullable { diff --git a/packages/@ember/-internals/package.json b/packages/@ember/-internals/package.json index cc947bbb6b5..d7eeb9a99d9 100644 --- a/packages/@ember/-internals/package.json +++ b/packages/@ember/-internals/package.json @@ -12,6 +12,9 @@ "./error-handling": "./error-handling/index.ts", "./glimmer": "./glimmer/index.ts", "./glimmer/lib/components/internal": "./glimmer/lib/components/internal.ts", + "./glimmer/lib/utils/iterator": "./glimmer/lib/utils/iterator.ts", + "./glimmer/lib/utils/string": "./glimmer/lib/utils/string.ts", + "./glimmer/lib/utils/to-bool": "./glimmer/lib/utils/to-bool.ts", "./meta": "./meta/index.ts", "./metal": "./metal/index.ts", "./owner": "./owner/index.ts", @@ -48,7 +51,6 @@ "@glimmer/component": "workspace:*", "@glimmer/destroyable": "workspace:*", "@glimmer/env": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/manager": "workspace:*", "@glimmer/node": "workspace:*", diff --git a/packages/@glimmer-workspace/integration-tests/package.json b/packages/@glimmer-workspace/integration-tests/package.json index c303372f5d5..574b6931445 100644 --- a/packages/@glimmer-workspace/integration-tests/package.json +++ b/packages/@glimmer-workspace/integration-tests/package.json @@ -14,10 +14,10 @@ }, "scripts": {}, "dependencies": { + "@ember/debug": "workspace:*", "@glimmer-workspace/test-utils": "workspace:*", "@glimmer/compiler": "workspace:*", "@glimmer/destroyable": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/manager": "workspace:*", "@glimmer/node": "workspace:*", diff --git a/packages/@glimmer-workspace/integration-tests/test/package.json b/packages/@glimmer-workspace/integration-tests/test/package.json index 3db79747f72..c628d44609f 100644 --- a/packages/@glimmer-workspace/integration-tests/test/package.json +++ b/packages/@glimmer-workspace/integration-tests/test/package.json @@ -10,7 +10,6 @@ "@glimmer/constants": "workspace:*", "@glimmer/debug-util": "workspace:*", "@glimmer/destroyable": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/local-debug-flags": "workspace:*", "@glimmer/manager": "workspace:*", "@glimmer/opcode-compiler": "workspace:*", diff --git a/packages/@glimmer-workspace/integration-tests/test/style-warnings-test.ts b/packages/@glimmer-workspace/integration-tests/test/style-warnings-test.ts index 82029008e4e..bc53eb6d869 100644 --- a/packages/@glimmer-workspace/integration-tests/test/style-warnings-test.ts +++ b/packages/@glimmer-workspace/integration-tests/test/style-warnings-test.ts @@ -1,33 +1,28 @@ /* eslint-disable @typescript-eslint/no-extraneous-class */ -import type { GlobalContext } from '@glimmer/global-context'; -import { testOverrideGlobalContext } from '@glimmer/global-context'; +import { registerWarnHandler } from '@ember/debug'; import { jitSuite, RenderTest, test } from '@glimmer-workspace/integration-tests'; import { assert } from './support'; import { DEBUG } from '@glimmer/env'; let warnings = 0; -let originalContext: GlobalContext | null; class StyleWarningsTest extends RenderTest { static suiteName = 'Style attributes'; beforeEach() { warnings = 0; - originalContext = - testOverrideGlobalContext?.({ - warnIfStyleNotTrusted() { - warnings++; - }, - - getProp(obj, key) { - return (obj as Record)[key]; - }, - }) ?? null; + registerWarnHandler((_message, options, next) => { + if (options?.id === 'ember-htmlbars.style-xss-warning') { + warnings++; + } else { + next(_message, options); + } + }); } afterEach() { - testOverrideGlobalContext?.(originalContext); + registerWarnHandler((message, options, next) => next(message, options)); } @test diff --git a/packages/@glimmer/debug-util/index.ts b/packages/@glimmer/debug-util/index.ts index 6934aef8ba3..012f3668853 100644 --- a/packages/@glimmer/debug-util/index.ts +++ b/packages/@glimmer/debug-util/index.ts @@ -1,4 +1,4 @@ -export { assertNever, deprecate, default as assert } from './lib/assert'; +export { assertNever, debugAssert, deprecate, default as assert } from './lib/assert'; export * from './lib/debug-brand'; export { default as debugToString } from './lib/debug-to-string'; export * from './lib/platform-utils'; diff --git a/packages/@glimmer/debug-util/lib/assert.ts b/packages/@glimmer/debug-util/lib/assert.ts index 56159703abe..0cfa24c00d7 100644 --- a/packages/@glimmer/debug-util/lib/assert.ts +++ b/packages/@glimmer/debug-util/lib/assert.ts @@ -1,5 +1,6 @@ // import Logger from './logger'; +import { DEBUG } from '@glimmer/env'; import { LOCAL_DEBUG } from '@glimmer/local-debug-flags'; export default function assert(test: unknown, msg: string): asserts test { @@ -10,6 +11,12 @@ export default function assert(test: unknown, msg: string): asserts test { } } +export function debugAssert(test: unknown, msg: string | (() => string)): asserts test { + if (DEBUG && !test) { + throw new Error(typeof msg === 'string' ? msg : msg()); + } +} + export function deprecate(desc: string) { if (LOCAL_DEBUG) { LOCAL_LOGGER.warn(`DEPRECATION: ${desc}`); diff --git a/packages/@glimmer/debug-util/package.json b/packages/@glimmer/debug-util/package.json index e6cb231a474..8ed1967e8cc 100644 --- a/packages/@glimmer/debug-util/package.json +++ b/packages/@glimmer/debug-util/package.json @@ -8,11 +8,11 @@ "exports": "./index.ts", "scripts": {}, "dependencies": { - "@glimmer/interfaces": "workspace:*" + "@glimmer/env": "workspace:*", + "@glimmer/interfaces": "workspace:*", + "@glimmer/local-debug-flags": "workspace:*" }, "devDependencies": { - "@glimmer/env": "workspace:*", - "@glimmer/local-debug-flags": "workspace:*", "eslint": "^9.20.1", "typescript": "^5.7.3" } diff --git a/packages/@glimmer/destroyable/index.ts b/packages/@glimmer/destroyable/index.ts index 5f9c6293614..038c7186e9a 100644 --- a/packages/@glimmer/destroyable/index.ts +++ b/packages/@glimmer/destroyable/index.ts @@ -1,7 +1,19 @@ import { DEBUG } from '@glimmer/env'; import type { Destroyable, Destructor } from '@glimmer/interfaces'; import { debugToString } from '@glimmer/debug-util'; -import { scheduleDestroy, scheduleDestroyed } from '@glimmer/global-context'; + +export let scheduleDestroy: ( + destroyable: T, + destructor: Destructor +) => void = () => {}; +export let scheduleDestroyed: (finalizer: () => void) => void = () => {}; +export function setDestructionSchedulers( + destroy: typeof scheduleDestroy, + destroyed: typeof scheduleDestroyed +): void { + scheduleDestroy = destroy; + scheduleDestroyed = destroyed; +} const LIVE_STATE = 0; const DESTROYING_STATE = 1; diff --git a/packages/@glimmer/destroyable/package.json b/packages/@glimmer/destroyable/package.json index a0e9a057caf..ec583abfc3b 100644 --- a/packages/@glimmer/destroyable/package.json +++ b/packages/@glimmer/destroyable/package.json @@ -34,7 +34,6 @@ "test:publint": "publint" }, "dependencies": { - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*" }, "devDependencies": { diff --git a/packages/@glimmer/destroyable/test/package.json b/packages/@glimmer/destroyable/test/package.json index 97adbbaa985..71b53a90b24 100644 --- a/packages/@glimmer/destroyable/test/package.json +++ b/packages/@glimmer/destroyable/test/package.json @@ -5,7 +5,6 @@ "scripts": {}, "dependencies": { "@glimmer/destroyable": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/util": "workspace:*" }, "devDependencies": { diff --git a/packages/@glimmer/global-context/.npmignore b/packages/@glimmer/global-context/.npmignore deleted file mode 100644 index 1e21beece36..00000000000 --- a/packages/@glimmer/global-context/.npmignore +++ /dev/null @@ -1 +0,0 @@ -index.ts diff --git a/packages/@glimmer/global-context/index.ts b/packages/@glimmer/global-context/index.ts deleted file mode 100644 index 5d49f20e8b3..00000000000 --- a/packages/@glimmer/global-context/index.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { DEBUG } from '@glimmer/env'; -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/** - * This package contains global context functions for Glimmer. These functions - * are set by the embedding environment and must be set before initial render. - * - * These functions should meet the following criteria: - * - * - Must be provided by the embedder, due to having framework specific - * behaviors (e.g. interop with classic Ember behaviors that should not be - * upstreamed) or to being out of scope for the VM (e.g. scheduling a - * revalidation) - * - Never differ between render roots - * - Never change over time - * - */ - -////////// - -/** - * Interfaces - * - * TODO: Move these into @glimmer/interfaces, move @glimmer/interfaces to - * @glimmer/internal-interfaces. - */ -interface IteratorDelegate { - isEmpty(): boolean; - next(): { value: unknown; memo: unknown } | null; -} - -export type Destroyable = object; -export type Destructor = (destroyable: T) => void; - -////////// - -/** - * Schedules a VM revalidation. - * - * Note: this has a default value so that tags can warm themselves when first loaded. - */ -export let scheduleRevalidate: () => void = () => {}; - -/** - * Schedules a destructor to run - * - * @param destroyable The destroyable being destroyed - * @param destructor The destructor being scheduled - */ -export let scheduleDestroy: ( - destroyable: T, - destructor: Destructor -) => void; - -/** - * Finalizes destruction - * - * @param finalizer finalizer function - */ -export let scheduleDestroyed: (finalizer: () => void) => void; - -/** - * Hook to provide iterators for `{{each}}` loops - * - * @param value The value to create an iterator for - */ -export let toIterator: (value: unknown) => IteratorDelegate | null; - -/** - * Hook to specify truthiness within Glimmer templates - * - * @param value The value to convert to a boolean - */ -export let toBool: (value: unknown) => boolean; - -/** - * Hook for specifying how Glimmer should access properties in cases where it - * needs to. For instance, accessing an object's values in templates. - * - * @param obj The object provided to get a value from - * @param path The path to get the value from - */ -export let getProp: (obj: object, path: string) => unknown; - -/** - * Hook for specifying how Glimmer should update props in cases where it needs - * to. For instance, when updating a template reference (e.g. 2-way-binding) - * - * @param obj The object provided to get a value from - * @param prop The prop to set the value at - * @param value The value to set the value to - */ -export let setProp: (obj: object, prop: string, value: unknown) => void; - -/** - * Hook for specifying how Glimmer should access paths in cases where it needs - * to. For instance, the `key` value of `{{each}}` loops. - * - * @param obj The object provided to get a value from - * @param path The path to get the value from - */ -export let getPath: (obj: object, path: string) => unknown; - -/** - * Hook for specifying how Glimmer should update paths in cases where it needs - * to. For instance, when updating a template reference (e.g. 2-way-binding) - * - * @param obj The object provided to get a value from - * @param path The path to get the value from - */ -export let setPath: (obj: object, path: string, value: unknown) => unknown; - -/** - * Hook to warn if a style binding string or value was not marked as trusted - * (e.g. HTMLSafe) - */ -export let warnIfStyleNotTrusted: (value: unknown) => void; - -/** - * Hook to customize assertion messages in the VM. Usages can be stripped out - * by using the @glimmer/vm-babel-plugins package. - */ -export let assert: (test: unknown, msg: string, options?: { id: string }) => asserts test; - -export function debugAssert( - test: unknown, - msg: string | (() => string), - options?: { id: string } -): asserts test { - if (DEBUG && assert) { - assert(test, typeof msg === 'string' ? msg : msg(), options); - } -} - -/** - * Hook to customize deprecation messages in the VM. Usages can be stripped out - * by using the @glimmer/vm-babel-plugins package. - */ -export let deprecate: ( - msg: string, - test: unknown, - options: { - id: string; - } -) => void; - -////////// - -export interface GlobalContext { - scheduleRevalidate: () => void; - scheduleDestroy: (destroyable: T, destructor: Destructor) => void; - scheduleDestroyed: (finalizer: () => void) => void; - toIterator: (value: unknown) => IteratorDelegate | null; - toBool: (value: unknown) => boolean; - getProp: (obj: object, path: string) => unknown; - setProp: (obj: object, prop: string, value: unknown) => void; - getPath: (obj: object, path: string) => unknown; - setPath: (obj: object, prop: string, value: unknown) => void; - warnIfStyleNotTrusted: (value: unknown) => void; - assert: (test: unknown, msg: string, options?: { id: string }) => asserts test; - deprecate: ( - msg: string, - test: unknown, - options: { - id: string; - } - ) => void; -} - -let globalContextWasSet = false; - -export default function setGlobalContext(context: GlobalContext) { - if (DEBUG) { - if (globalContextWasSet) { - throw new Error('Attempted to set the global context twice. This should only be set once.'); - } - - globalContextWasSet = true; - } - - scheduleRevalidate = context.scheduleRevalidate; - scheduleDestroy = context.scheduleDestroy; - scheduleDestroyed = context.scheduleDestroyed; - toIterator = context.toIterator; - toBool = context.toBool; - getProp = context.getProp; - setProp = context.setProp; - getPath = context.getPath; - setPath = context.setPath; - warnIfStyleNotTrusted = context.warnIfStyleNotTrusted; - assert = context.assert; - deprecate = context.deprecate; -} - -export let assertGlobalContextWasSet: (() => void) | undefined; -export let testOverrideGlobalContext: - | ((context: Partial | null) => GlobalContext | null) - | undefined; - -if (DEBUG) { - assertGlobalContextWasSet = () => { - if (!globalContextWasSet) { - throw new Error( - 'The global context for Glimmer VM was not set. You must set these global context functions to let Glimmer VM know how to accomplish certain operations. You can do this by importing `setGlobalContext` from `@glimmer/global-context`' - ); - } - }; - - testOverrideGlobalContext = (context: Partial | null) => { - let originalGlobalContext = globalContextWasSet - ? { - scheduleRevalidate, - scheduleDestroy, - scheduleDestroyed, - toIterator, - toBool, - getProp, - setProp, - getPath, - setPath, - warnIfStyleNotTrusted, - assert, - deprecate, - } - : null; - - if (context === null) { - globalContextWasSet = false; - } else { - globalContextWasSet = true; - } - - // We use `undefined as any` here to unset the values when resetting the - // context at the end of a test. - scheduleRevalidate = context?.scheduleRevalidate || (undefined as any); - scheduleDestroy = context?.scheduleDestroy || (undefined as any); - scheduleDestroyed = context?.scheduleDestroyed || (undefined as any); - toIterator = context?.toIterator || (undefined as any); - toBool = context?.toBool || (undefined as any); - getProp = context?.getProp || (undefined as any); - setProp = context?.setProp || (undefined as any); - getPath = context?.getPath || (undefined as any); - setPath = context?.setPath || (undefined as any); - warnIfStyleNotTrusted = context?.warnIfStyleNotTrusted || (undefined as any); - assert = context?.assert || (undefined as any); - deprecate = context?.deprecate || (undefined as any); - - return originalGlobalContext; - }; -} diff --git a/packages/@glimmer/global-context/package.json b/packages/@glimmer/global-context/package.json deleted file mode 100644 index 22675197f0c..00000000000 --- a/packages/@glimmer/global-context/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@glimmer/global-context", - "version": "0.93.4", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/glimmerjs/glimmer-vm.git", - "directory": "packages/@glimmer/global-context" - }, - "type": "module", - "exports": "./index.ts", - "publishConfig": { - "access": "public", - "exports": { - ".": { - "development": { - "types": "./dist/dev/index.d.ts", - "default": "./dist/dev/index.js" - }, - "default": { - "types": "./dist/prod/index.d.ts", - "default": "./dist/prod/index.js" - } - } - }, - "types": "dist/dev/index.d.ts" - }, - "files": [ - "dist" - ], - "scripts": { - "prepack": "rollup -c rollup.config.mjs", - "test:publint": "publint" - }, - "devDependencies": { - "@glimmer/env": "workspace:*", - "eslint": "^9.20.1", - "publint": "^0.3.2", - "rollup": "^4.57.1", - "typescript": "^5.7.3" - } -} diff --git a/packages/@glimmer/manager/lib/internal/api.ts b/packages/@glimmer/manager/lib/internal/api.ts index 96a1daa7703..538227bb0ac 100644 --- a/packages/@glimmer/manager/lib/internal/api.ts +++ b/packages/@glimmer/manager/lib/internal/api.ts @@ -5,8 +5,7 @@ import type { InternalModifierManager, Owner, } from '@glimmer/interfaces'; -import { debugToString } from '@glimmer/debug-util'; -import { debugAssert } from '@glimmer/global-context'; +import { debugAssert, debugToString } from '@glimmer/debug-util'; import { CustomHelperManager } from '../public/helper'; import { FunctionHelperManager } from './defaults'; diff --git a/packages/@glimmer/manager/lib/public/helper.ts b/packages/@glimmer/manager/lib/public/helper.ts index 5413ce473bc..652567ca644 100644 --- a/packages/@glimmer/manager/lib/public/helper.ts +++ b/packages/@glimmer/manager/lib/public/helper.ts @@ -10,8 +10,8 @@ import type { InternalHelperManager, Owner, } from '@glimmer/interfaces'; +import { debugAssert } from '@glimmer/debug-util'; import { associateDestroyableChild } from '@glimmer/destroyable'; -import { debugAssert } from '@glimmer/global-context'; import { createComputeRef, createConstRef, UNDEFINED_REFERENCE } from '@glimmer/reference'; import type { ManagerFactory } from './index'; diff --git a/packages/@glimmer/manager/lib/public/modifier.ts b/packages/@glimmer/manager/lib/public/modifier.ts index ef5b74b5b08..70715e19959 100644 --- a/packages/@glimmer/manager/lib/public/modifier.ts +++ b/packages/@glimmer/manager/lib/public/modifier.ts @@ -10,9 +10,8 @@ import type { SimpleElement, UpdatableTag, } from '@glimmer/interfaces'; -import { castToBrowser } from '@glimmer/debug-util'; +import { castToBrowser, debugAssert } from '@glimmer/debug-util'; import { registerDestructor } from '@glimmer/destroyable'; -import { debugAssert } from '@glimmer/global-context'; import { valueForRef } from '@glimmer/reference'; import { dict } from '@glimmer/util'; import { createUpdatableTag, untrack } from '@glimmer/validator'; diff --git a/packages/@glimmer/manager/package.json b/packages/@glimmer/manager/package.json index 8f9e7f69272..fcbb50f10ef 100644 --- a/packages/@glimmer/manager/package.json +++ b/packages/@glimmer/manager/package.json @@ -34,7 +34,6 @@ }, "dependencies": { "@glimmer/destroyable": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/reference": "workspace:*", "@glimmer/util": "workspace:*", diff --git a/packages/@glimmer/reference/lib/iterable.ts b/packages/@glimmer/reference/lib/iterable.ts index 4fd2135659a..ae8df1541fb 100644 --- a/packages/@glimmer/reference/lib/iterable.ts +++ b/packages/@glimmer/reference/lib/iterable.ts @@ -1,6 +1,7 @@ +import { get as getPath } from '@ember/-internals/metal'; +import toIterator from '@ember/-internals/glimmer/lib/utils/iterator'; import { DEBUG } from '@glimmer/env'; import type { Dict, Nullable } from '@glimmer/interfaces'; -import { getPath, toIterator } from '@glimmer/global-context'; import { EMPTY_ARRAY, isIndexable } from '@glimmer/util'; import { consumeTag, createTag, dirtyTag } from '@glimmer/validator'; diff --git a/packages/@glimmer/reference/lib/reference.ts b/packages/@glimmer/reference/lib/reference.ts index e58fb46cf8a..5db49f51f1e 100644 --- a/packages/@glimmer/reference/lib/reference.ts +++ b/packages/@glimmer/reference/lib/reference.ts @@ -10,8 +10,8 @@ import type { UnboundReference, } from '@glimmer/interfaces'; import type { Revision, Tag } from '@glimmer/validator'; +import { _getProp as getProp, _setProp as setProp } from '@ember/-internals/metal'; import { expect } from '@glimmer/debug-util'; -import { getProp, setProp } from '@glimmer/global-context'; import { isDict } from '@glimmer/util'; import { CONSTANT_TAG, @@ -233,7 +233,7 @@ export function childRefFor(_parentRef: Reference, path: string): Reference { const parent = valueForRef(parentRef); if (isDict(parent)) { - return setProp(parent, path, val); + setProp(parent, path, val); } } ); diff --git a/packages/@glimmer/reference/package.json b/packages/@glimmer/reference/package.json index 94bbf910c25..6d6b2a731e4 100644 --- a/packages/@glimmer/reference/package.json +++ b/packages/@glimmer/reference/package.json @@ -34,7 +34,7 @@ "test:publint": "publint" }, "dependencies": { - "@glimmer/global-context": "workspace:*", + "@ember/-internals": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/util": "workspace:*", "@glimmer/validator": "workspace:*" diff --git a/packages/@glimmer/reference/test/package.json b/packages/@glimmer/reference/test/package.json index 2e4a5b8e507..e4935b073ef 100644 --- a/packages/@glimmer/reference/test/package.json +++ b/packages/@glimmer/reference/test/package.json @@ -4,7 +4,6 @@ "version": "0.92.0", "scripts": {}, "dependencies": { - "@glimmer/global-context": "workspace:*", "@glimmer/reference": "workspace:*", "@glimmer/util": "workspace:*", "@glimmer/validator": "workspace:*" diff --git a/packages/@glimmer/reference/test/references-test.ts b/packages/@glimmer/reference/test/references-test.ts index 7d46ac70c5d..70f85e2db7b 100644 --- a/packages/@glimmer/reference/test/references-test.ts +++ b/packages/@glimmer/reference/test/references-test.ts @@ -1,7 +1,5 @@ import { DEBUG } from '@glimmer/env'; -import type { GlobalContext } from '@glimmer/global-context'; import { unwrap } from '@glimmer/debug-util'; -import { testOverrideGlobalContext } from '@glimmer/global-context'; import { childRefFor, createComputeRef, @@ -37,36 +35,7 @@ class TrackedDict { } } if (DEBUG) { - module('References', (hooks) => { - let originalContext: GlobalContext | null; - let getCount = 0; - let setCount = 0; - - hooks.beforeEach(() => { - originalContext = unwrap(testOverrideGlobalContext)({ - getProp(obj: object, key: string): unknown { - getCount++; - return (obj as Record)[key]; - }, - - setProp(obj: object, key: string, value: unknown) { - setCount++; - (obj as Record)[key] = value; - }, - - scheduleRevalidate() {}, - }); - }); - - hooks.afterEach(() => { - unwrap(testOverrideGlobalContext)(originalContext); - }); - - hooks.beforeEach(() => { - getCount = 0; - setCount = 0; - }); - + module('References', () => { module('const ref', () => { test('it works', (assert) => { let value = {}; @@ -88,21 +57,17 @@ if (DEBUG) { assert.strictEqual(valueForRef(childRef), 123, 'value is correct'); assert.strictEqual(valueForRef(childRef), 123, 'value is correct'); - assert.strictEqual(getCount, 1, 'get called correct number of times'); parent.child = 456; assert.strictEqual(valueForRef(childRef), 456, 'value updated correctly'); assert.strictEqual(valueForRef(childRef), 456, 'value is correct'); - assert.strictEqual(getCount, 2, 'get called correct number of times'); assert.true(isUpdatableRef(childRef), 'childRef is updatable'); updateRef(childRef, 789); assert.strictEqual(valueForRef(childRef), 789, 'value updated correctly'); - assert.strictEqual(getCount, 3, 'get called correct number of times'); - assert.strictEqual(setCount, 1, 'set called correct number of times'); }); }); @@ -134,21 +99,13 @@ if (DEBUG) { assert.strictEqual(count, 2, 'computed'); - dict.set('baz', 'bat'); - - assert.strictEqual(valueForRef(ref), 'BAR'); - assert.strictEqual(valueForRef(ref), 'BAR'); - assert.strictEqual(valueForRef(ref), 'BAR'); - - assert.strictEqual(count, 3, 'computed'); - dict.set('foo', 'bar'); assert.strictEqual(valueForRef(ref), 'bar'); assert.strictEqual(valueForRef(ref), 'bar'); assert.strictEqual(valueForRef(ref), 'bar'); - assert.strictEqual(count, 4, 'computed'); + assert.strictEqual(count, 3, 'computed'); }); test('compute refs cache nested computation correctly', (assert) => { @@ -206,21 +163,17 @@ if (DEBUG) { assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); - assert.strictEqual(getCount, 1, 'get called correct number of times'); parent.child.value = 456; assert.strictEqual(valueForRef(valueRef), 456, 'value updated correctly'); assert.strictEqual(valueForRef(valueRef), 456, 'value is correct'); - assert.strictEqual(getCount, 2, 'get called correct number of times'); assert.true(isUpdatableRef(valueRef), 'childRef is updatable'); updateRef(valueRef, 789); assert.strictEqual(valueForRef(valueRef), 789, 'value updated correctly'); - assert.strictEqual(getCount, 3, 'get called correct number of times'); - assert.strictEqual(setCount, 1, 'set called correct number of times'); parent.child = new Child(); @@ -229,7 +182,6 @@ if (DEBUG) { 123, 'value updated correctly when parent changes' ); - assert.strictEqual(getCount, 4, 'get called correct number of times'); }); }); @@ -292,21 +244,17 @@ if (DEBUG) { assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); - assert.strictEqual(getCount, 1, 'get called correct number of times'); parent.child.value = 456; assert.strictEqual(valueForRef(valueRef), 456, 'value updated correctly'); assert.strictEqual(valueForRef(valueRef), 456, 'value is correct'); - assert.strictEqual(getCount, 2, 'get called correct number of times'); assert.true(isUpdatableRef(valueRef), 'childRef is updatable'); updateRef(valueRef, 789); assert.strictEqual(valueForRef(valueRef), 789, 'value updated correctly'); - assert.strictEqual(getCount, 3, 'get called correct number of times'); - assert.strictEqual(setCount, 1, 'set called correct number of times'); parent.child = new Child(); @@ -315,7 +263,6 @@ if (DEBUG) { 123, 'value updated correctly when parent changes' ); - assert.strictEqual(getCount, 4, 'get called correct number of times'); }); }); @@ -358,21 +305,17 @@ if (DEBUG) { assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); assert.strictEqual(valueForRef(valueRef), 123, 'value is correct'); - assert.strictEqual(getCount, 1, 'get called correct number of times'); parent.child.value = 456; assert.strictEqual(valueForRef(valueRef), 456, 'value updated correctly'); assert.strictEqual(valueForRef(valueRef), 456, 'value is correct'); - assert.strictEqual(getCount, 2, 'get called correct number of times'); assert.true(isUpdatableRef(valueRef), 'childRef is updatable'); updateRef(valueRef, 789); assert.strictEqual(valueForRef(valueRef), 789, 'value updated correctly'); - assert.strictEqual(getCount, 3, 'get called correct number of times'); - assert.strictEqual(setCount, 1, 'set called correct number of times'); parent.child = new Child(); @@ -381,7 +324,6 @@ if (DEBUG) { 123, 'value updated correctly when parent changes' ); - assert.strictEqual(getCount, 4, 'get called correct number of times'); }); }); diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/expressions.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/expressions.ts index bac07c70aba..a5d8534e073 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/expressions.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/expressions.ts @@ -37,9 +37,9 @@ import { CheckNullable, CheckOr, } from '@glimmer/debug'; -import { debugToString, assert } from '@glimmer/debug-util'; +import toBool from '@ember/-internals/glimmer/lib/utils/to-bool'; +import { debugAssert, debugToString, assert } from '@glimmer/debug-util'; import { _hasDestroyableChildren, associateDestroyableChild, destroy } from '@glimmer/destroyable'; -import { debugAssert, toBool } from '@glimmer/global-context'; import { getInternalHelperManager } from '@glimmer/manager'; import { childRefFor, diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/vm.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/vm.ts index c020d26dae7..023d2b4deaf 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/vm.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/vm.ts @@ -41,8 +41,8 @@ import { CheckRegister, CheckSyscallRegister, } from '@glimmer/debug'; +import toBool from '@ember/-internals/glimmer/lib/utils/to-bool'; import { expect, assert, unwrap } from '@glimmer/debug-util'; -import { toBool } from '@glimmer/global-context'; import { createComputeRef, createConstRef, diff --git a/packages/@glimmer/runtime/lib/helpers/get.ts b/packages/@glimmer/runtime/lib/helpers/get.ts index 99fd8d30793..b6dfdb2101f 100644 --- a/packages/@glimmer/runtime/lib/helpers/get.ts +++ b/packages/@glimmer/runtime/lib/helpers/get.ts @@ -1,5 +1,5 @@ +import { get as getPath, set as setPath } from '@ember/-internals/metal'; import type { CapturedArguments } from '@glimmer/interfaces'; -import { getPath, setPath } from '@glimmer/global-context'; import { createComputeRef, UNDEFINED_REFERENCE, valueForRef } from '@glimmer/reference'; import { isDict } from '@glimmer/util'; diff --git a/packages/@glimmer/runtime/lib/vm/append.ts b/packages/@glimmer/runtime/lib/vm/append.ts index 5d43072ccf5..98ca8ffe28e 100644 --- a/packages/@glimmer/runtime/lib/vm/append.ts +++ b/packages/@glimmer/runtime/lib/vm/append.ts @@ -24,7 +24,6 @@ import type { OpaqueIterationItem, OpaqueIterator, Reference } from '@glimmer/re import type { MachineRegister, Register, SyscallRegister } from '@glimmer/vm'; import { dev, expect, unwrapHandle } from '@glimmer/debug-util'; import { associateDestroyableChild } from '@glimmer/destroyable'; -import { assertGlobalContextWasSet } from '@glimmer/global-context'; import { LOCAL_DEBUG, LOCAL_TRACE_LOGGING } from '@glimmer/local-debug-flags'; import { createIteratorItemRef, UNDEFINED_REFERENCE } from '@glimmer/reference'; import { LOCAL_LOGGER, reverse, Stack } from '@glimmer/util'; @@ -223,11 +222,6 @@ export class VM { context: EvaluationContext, tree: TreeBuilder ) { - if (DEBUG) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme - assertGlobalContextWasSet!(); - } - let evalStack = EvaluationStackImpl.restore(stack, pc); this.#tree = tree; diff --git a/packages/@glimmer/runtime/lib/vm/attributes/dynamic.ts b/packages/@glimmer/runtime/lib/vm/attributes/dynamic.ts index 2771ad973d3..1d8f74a795b 100644 --- a/packages/@glimmer/runtime/lib/vm/attributes/dynamic.ts +++ b/packages/@glimmer/runtime/lib/vm/attributes/dynamic.ts @@ -1,3 +1,6 @@ +import { isHTMLSafe } from '@ember/-internals/glimmer/lib/utils/string'; +import { constructStyleDeprecationMessage } from '@ember/-internals/views'; +import { warn } from '@ember/debug'; import { DEBUG } from '@glimmer/env'; import type { AttributeCursor, @@ -11,7 +14,14 @@ import type { } from '@glimmer/interfaces'; import { NS_SVG } from '@glimmer/constants'; import { castToBrowser } from '@glimmer/debug-util'; -import { warnIfStyleNotTrusted } from '@glimmer/global-context'; + +function warnIfStyleNotTrusted(value: unknown): void { + warn( + constructStyleDeprecationMessage(String(value)), + value === null || value === undefined || isHTMLSafe(value), + { id: 'ember-htmlbars.style-xss-warning' } + ); +} import type { MutableKey } from '../element-builder'; diff --git a/packages/@glimmer/runtime/package.json b/packages/@glimmer/runtime/package.json index 02fb70c80a7..76ce0b6adbc 100644 --- a/packages/@glimmer/runtime/package.json +++ b/packages/@glimmer/runtime/package.json @@ -34,8 +34,9 @@ "test:publint": "publint" }, "dependencies": { + "@ember/-internals": "workspace:*", + "@ember/debug": "workspace:*", "@glimmer/destroyable": "workspace:*", - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/manager": "workspace:*", "@glimmer/owner": "workspace:*", diff --git a/packages/@glimmer/validator/index.ts b/packages/@glimmer/validator/index.ts index a3abcaa5007..10a57b4a6c2 100644 --- a/packages/@glimmer/validator/index.ts +++ b/packages/@glimmer/validator/index.ts @@ -50,6 +50,7 @@ export { UPDATE_TAG as updateTag, validateTag, valueForTag, + setScheduleRevalidate, VOLATILE, VOLATILE_TAG, VolatileTag, diff --git a/packages/@glimmer/validator/lib/debug.ts b/packages/@glimmer/validator/lib/debug.ts index 3578a060562..53c12b5d9aa 100644 --- a/packages/@glimmer/validator/lib/debug.ts +++ b/packages/@glimmer/validator/lib/debug.ts @@ -2,7 +2,7 @@ import { DEBUG } from '@glimmer/env'; /* eslint-disable @typescript-eslint/no-non-null-assertion -- @fixme */ import type { Tag } from '@glimmer/interfaces'; import { asPresentArray, getLast } from '@glimmer/debug-util'; -import { assert } from '@glimmer/global-context'; +import { assert } from '@ember/debug'; interface DebugTransaction { beginTrackingTransaction?: @@ -207,7 +207,7 @@ if (DEBUG) { // few lines of the stack trace and let users know where the actual error // occurred. try { - assert(false, makeTrackingErrorMessage(transaction, obj, keyName)); + assert(makeTrackingErrorMessage(transaction, obj, keyName), false); } catch (e) { if (hasStack(e)) { let updateStackBegin = e.stack.indexOf('Stack trace for the update:'); diff --git a/packages/@glimmer/validator/lib/validators.ts b/packages/@glimmer/validator/lib/validators.ts index a701a133e53..c2593b97e5b 100644 --- a/packages/@glimmer/validator/lib/validators.ts +++ b/packages/@glimmer/validator/lib/validators.ts @@ -14,7 +14,10 @@ import type { UpdatableTag, VOLATILE_TAG_ID as IVOLATILE_TAG_ID, } from '@glimmer/interfaces'; -import { scheduleRevalidate } from '@glimmer/global-context'; +export let scheduleRevalidate: () => void = () => {}; +export function setScheduleRevalidate(fn: () => void): void { + scheduleRevalidate = fn; +} import { debug } from './debug'; import { unwrap } from './utils'; diff --git a/packages/@glimmer/validator/package.json b/packages/@glimmer/validator/package.json index 647ea1e3650..f05e28b611b 100644 --- a/packages/@glimmer/validator/package.json +++ b/packages/@glimmer/validator/package.json @@ -34,7 +34,7 @@ "test:publint": "publint" }, "dependencies": { - "@glimmer/global-context": "workspace:*", + "@ember/debug": "workspace:*", "@glimmer/interfaces": "workspace:*" }, "devDependencies": { diff --git a/packages/@glimmer/validator/test/package.json b/packages/@glimmer/validator/test/package.json index f7f0977584d..edb7ae809ac 100644 --- a/packages/@glimmer/validator/test/package.json +++ b/packages/@glimmer/validator/test/package.json @@ -7,7 +7,6 @@ "version": "0.92.0", "scripts": {}, "dependencies": { - "@glimmer/global-context": "workspace:*", "@glimmer/interfaces": "workspace:*", "@glimmer/validator": "workspace:*", "expect-type": "^1.1.0" diff --git a/packages/@glimmer/validator/test/validators-test.ts b/packages/@glimmer/validator/test/validators-test.ts index 35d17a23e7c..972bb0f287b 100644 --- a/packages/@glimmer/validator/test/validators-test.ts +++ b/packages/@glimmer/validator/test/validators-test.ts @@ -1,6 +1,5 @@ import { DEBUG } from '@glimmer/env'; import type { UpdatableTag } from '@glimmer/interfaces'; -import { testOverrideGlobalContext } from '@glimmer/global-context'; import { ALLOW_CYCLES, bump, @@ -42,25 +41,6 @@ module('@glimmer/validator: validators', () => { }); if (DEBUG) { - test('it calls scheduleRevalidate', (assert) => { - let originalContext = unwrap(testOverrideGlobalContext)({ - scheduleRevalidate() { - assert.step('scheduleRevalidate'); - assert.ok(true, 'called'); - }, - }); - - try { - let tag = createTag(); - - dirtyTag(tag); - } finally { - unwrap(testOverrideGlobalContext)(originalContext); - } - - assert.verifySteps(['scheduleRevalidate']); - }); - test('it cannot be updated', (assert) => { let tag = createTag(); let subtag = createTag(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb109a206f1..33c33247d47 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -330,9 +330,6 @@ importers: '@glimmer/env': specifier: workspace:* version: link:../../@glimmer/env - '@glimmer/global-context': - specifier: workspace:* - version: link:../../@glimmer/global-context '@glimmer/interfaces': specifier: workspace:* version: link:../../@glimmer/interfaces @@ -1312,6 +1309,9 @@ importers: packages/@glimmer-workspace/integration-tests: dependencies: + '@ember/debug': + specifier: workspace:* + version: link:../../@ember/debug '@glimmer-workspace/test-utils': specifier: workspace:* version: link:../test-utils @@ -1321,9 +1321,6 @@ importers: '@glimmer/destroyable': specifier: workspace:* version: link:../../@glimmer/destroyable - '@glimmer/global-context': - specifier: workspace:* - version: link:../../@glimmer/global-context '@glimmer/interfaces': specifier: workspace:* version: link:../../@glimmer/interfaces @@ -1439,9 +1436,6 @@ importers: '@glimmer/destroyable': specifier: workspace:* version: link:../../../@glimmer/destroyable - '@glimmer/global-context': - specifier: workspace:* - version: link:../../../@glimmer/global-context '@glimmer/local-debug-flags': specifier: workspace:* version: link:../../../@glimmer/local-debug-flags @@ -1650,16 +1644,16 @@ importers: packages/@glimmer/debug-util: dependencies: - '@glimmer/interfaces': - specifier: workspace:* - version: link:../interfaces - devDependencies: '@glimmer/env': specifier: workspace:* version: link:../env + '@glimmer/interfaces': + specifier: workspace:* + version: link:../interfaces '@glimmer/local-debug-flags': specifier: workspace:* version: link:../local-debug-flags + devDependencies: eslint: specifier: ^9.20.1 version: 9.39.4 @@ -1688,9 +1682,6 @@ importers: packages/@glimmer/destroyable: dependencies: - '@glimmer/global-context': - specifier: workspace:* - version: link:../global-context '@glimmer/interfaces': specifier: workspace:* version: link:../interfaces @@ -1722,9 +1713,6 @@ importers: '@glimmer/destroyable': specifier: workspace:* version: link:.. - '@glimmer/global-context': - specifier: workspace:* - version: link:../../global-context '@glimmer/util': specifier: workspace:* version: link:../../util @@ -1760,24 +1748,6 @@ importers: packages/@glimmer/env: {} - packages/@glimmer/global-context: - devDependencies: - '@glimmer/env': - specifier: workspace:* - version: link:../env - eslint: - specifier: ^9.20.1 - version: 9.39.4 - publint: - specifier: ^0.3.2 - version: 0.3.18 - rollup: - specifier: ^4.2.0 - version: 4.60.0 - typescript: - specifier: ^5.7.3 - version: 5.9.3 - packages/@glimmer/interfaces: dependencies: '@simple-dom/interface': @@ -1810,9 +1780,6 @@ importers: '@glimmer/destroyable': specifier: workspace:* version: link:../destroyable - '@glimmer/global-context': - specifier: workspace:* - version: link:../global-context '@glimmer/interfaces': specifier: workspace:* version: link:../interfaces @@ -2027,9 +1994,9 @@ importers: packages/@glimmer/reference: dependencies: - '@glimmer/global-context': + '@ember/-internals': specifier: workspace:* - version: link:../global-context + version: link:../../@ember/-internals '@glimmer/interfaces': specifier: workspace:* version: link:../interfaces @@ -2064,9 +2031,6 @@ importers: packages/@glimmer/reference/test: dependencies: - '@glimmer/global-context': - specifier: workspace:* - version: link:../../global-context '@glimmer/reference': specifier: workspace:* version: link:.. @@ -2083,12 +2047,15 @@ importers: packages/@glimmer/runtime: dependencies: + '@ember/-internals': + specifier: workspace:* + version: link:../../@ember/-internals + '@ember/debug': + specifier: workspace:* + version: link:../../@ember/debug '@glimmer/destroyable': specifier: workspace:* version: link:../destroyable - '@glimmer/global-context': - specifier: workspace:* - version: link:../global-context '@glimmer/interfaces': specifier: workspace:* version: link:../interfaces @@ -2246,9 +2213,9 @@ importers: packages/@glimmer/validator: dependencies: - '@glimmer/global-context': + '@ember/debug': specifier: workspace:* - version: link:../global-context + version: link:../../@ember/debug '@glimmer/interfaces': specifier: workspace:* version: link:../interfaces @@ -2277,9 +2244,6 @@ importers: packages/@glimmer/validator/test: dependencies: - '@glimmer/global-context': - specifier: workspace:* - version: link:../../global-context '@glimmer/interfaces': specifier: workspace:* version: link:../../interfaces diff --git a/rollup.config.mjs b/rollup.config.mjs index ceee7e37ab1..fb5d6a4a20d 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -539,6 +539,11 @@ const allowedCycles = [ // external and not causing problems 'node_modules/rsvp/lib/rsvp', + // @glimmer/reference imports get/set/_getProp/_setProp directly from + // @ember/-internals/metal, which closes the cycle metal -> @glimmer/manager + // -> @glimmer/reference -> metal. + 'packages/@glimmer/reference', + // TODO: these would be good to fix once they're in this repo 'packages/@glimmer/debug', 'packages/@glimmer/runtime',