From 1733f96ea6a0951063997d1bc3221fcb4967a3aa Mon Sep 17 00:00:00 2001 From: Chris Krycho Date: Tue, 21 Feb 2023 08:32:13 -0700 Subject: [PATCH] [CLEANUP] Remove deprecated `assign` polyfill - Remove the polyfill itself. - Remove the entire `@ember/polyfills` package, which is now empty. - Remove the `Ember.platform` API, which has loooong been unused. --- ember-cli-build.js | 1 - packages/@ember/polyfills/index.ts | 3 - packages/@ember/polyfills/lib/assign.ts | 49 ---------------- .../@ember/polyfills/tests/assign_test.js | 57 ------------------- .../polyfills/type-tests/assign.test.ts | 14 ----- packages/ember/index.ts | 10 ---- packages/ember/tests/reexports_test.js | 7 --- tests/docs/expected.js | 1 - type-tests/@ember/polyfills-tests.ts | 26 --------- type-tests/ember/ember-module-tests.ts | 5 -- type-tests/ember/utils.ts | 26 --------- types/preview/@ember/polyfills/index.d.ts | 23 -------- types/preview/@ember/polyfills/types.d.ts | 6 -- types/preview/ember/index.d.ts | 12 ---- types/preview/index.d.ts | 3 - types/publish.mjs | 2 - 16 files changed, 245 deletions(-) delete mode 100644 packages/@ember/polyfills/index.ts delete mode 100644 packages/@ember/polyfills/lib/assign.ts delete mode 100644 packages/@ember/polyfills/tests/assign_test.js delete mode 100644 packages/@ember/polyfills/type-tests/assign.test.ts delete mode 100644 type-tests/@ember/polyfills-tests.ts delete mode 100644 types/preview/@ember/polyfills/index.d.ts delete mode 100644 types/preview/@ember/polyfills/types.d.ts diff --git a/ember-cli-build.js b/ember-cli-build.js index 76932bd8232..dee32e4e406 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -221,7 +221,6 @@ function templateCompilerBundle(emberPackages, transpileTree) { '@ember/debug/**', '@ember/deprecated-features/**', '@ember/error/**', - '@ember/polyfills/**', 'ember/version.js', 'ember-babel.js', 'ember-template-compiler/**', diff --git a/packages/@ember/polyfills/index.ts b/packages/@ember/polyfills/index.ts deleted file mode 100644 index 9a45df979f9..00000000000 --- a/packages/@ember/polyfills/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { assign } from './lib/assign'; - -export const hasPropertyAccessors = true; diff --git a/packages/@ember/polyfills/lib/assign.ts b/packages/@ember/polyfills/lib/assign.ts deleted file mode 100644 index 11c9e99e5e2..00000000000 --- a/packages/@ember/polyfills/lib/assign.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { deprecate } from '@ember/debug'; - -/** - @module @ember/polyfills -*/ - -export function assign(target: T, source: U): T & U; -export function assign(target: T, source1: U, source2: V): T & U & V; -export function assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; -export function assign(target: object, ...sources: object[]): object; -/** - Copy properties from a source object to a target object. Source arguments remain unchanged. - - ```javascript - import { assign } from '@ember/polyfills'; - - var a = { first: 'Yehuda' }; - var b = { last: 'Katz' }; - var c = { company: 'Other Company' }; - var d = { company: 'Tilde Inc.' }; - assign(a, b, c, d); // a === { first: 'Yehuda', last: 'Katz', company: 'Tilde Inc.' }; - ``` - - @method assign - @for @ember/polyfills - @param {Object} target The object to assign into - @param {Object} ...args The objects to copy properties from - @return {Object} - @public - @static -*/ -export function assign(target: object, ...rest: object[]): object { - deprecate( - 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.', - false, - { - id: 'ember-polyfills.deprecate-assign', - until: '5.0.0', - url: 'https://deprecations.emberjs.com/v4.x/#toc_ember-polyfills-deprecate-assign', - for: 'ember-source', - since: { - available: '4.0.0', - enabled: '4.0.0', - }, - } - ); - - return Object.assign(target, ...rest); -} diff --git a/packages/@ember/polyfills/tests/assign_test.js b/packages/@ember/polyfills/tests/assign_test.js deleted file mode 100644 index d9c8510990e..00000000000 --- a/packages/@ember/polyfills/tests/assign_test.js +++ /dev/null @@ -1,57 +0,0 @@ -import { assign as assignPolyfill } from '..'; -import { moduleFor, AbstractTestCase as TestCase } from 'internal-test-helpers'; - -class AssignTests extends TestCase { - ['@test merging objects'](assert) { - let trgt = { a: 1 }; - let src1 = { b: 2 }; - let src2 = { c: 3 }; - this.assign(trgt, src1, src2); - - assert.deepEqual( - trgt, - { a: 1, b: 2, c: 3 }, - 'assign copies values from one or more source objects to a target object' - ); - assert.deepEqual(src1, { b: 2 }, 'assign does not change source object 1'); - assert.deepEqual(src2, { c: 3 }, 'assign does not change source object 2'); - } - - ['@test merging objects with same property'](assert) { - let trgt = { a: 1, b: 1 }; - let src1 = { a: 2, b: 2 }; - let src2 = { a: 3 }; - this.assign(trgt, src1, src2); - - assert.deepEqual( - trgt, - { a: 3, b: 2 }, - 'properties are overwritten by other objects that have the same properties later in the parameters order' - ); - } - - ['@test null'](assert) { - let trgt = { a: 1 }; - this.assign(trgt, null); - - assert.deepEqual(trgt, { a: 1 }, 'null as a source parameter is ignored'); - } - - ['@test undefined'](assert) { - let trgt = { a: 1 }; - this.assign(trgt, null); - - assert.deepEqual(trgt, { a: 1 }, 'undefined as a source parameter is ignored'); - } -} - -moduleFor( - 'Ember.assign (polyfill)', - class extends AssignTests { - assign() { - return expectDeprecation(() => { - assignPolyfill(...arguments); - }, 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.'); - } - } -); diff --git a/packages/@ember/polyfills/type-tests/assign.test.ts b/packages/@ember/polyfills/type-tests/assign.test.ts deleted file mode 100644 index 3d7f0484266..00000000000 --- a/packages/@ember/polyfills/type-tests/assign.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { assign } from '@ember/polyfills'; -import { expectTypeOf } from 'expect-type'; - -// NOTE: Actual types could be better, but this is deprecated. - -let a = { first: 'Yehuda' }; -let b = { last: 'Katz' }; -let c = { company: 'Other Company' }; -let d = { company: 'Tilde Inc.' }; -expectTypeOf(assign(a, b, c, d)).toEqualTypeOf<{ - first: string; - last: string; - company: string; -}>(); diff --git a/packages/ember/index.ts b/packages/ember/index.ts index 269f27c1c81..20aa7a1c279 100644 --- a/packages/ember/index.ts +++ b/packages/ember/index.ts @@ -92,7 +92,6 @@ import Observable from '@ember/object/observable'; import { addObserver, removeObserver } from '@ember/object/observers'; import ObjectProxy from '@ember/object/proxy'; import PromiseProxyMixin from '@ember/object/promise-proxy-mixin'; -import { assign } from '@ember/polyfills'; import HashLocation from '@ember/routing/hash-location'; import HistoryLocation from '@ember/routing/history-location'; import NoneLocation from '@ember/routing/none-location'; @@ -357,9 +356,6 @@ const PartialEmber = { // ****@ember/object/proxy**** ObjectProxy, - // ****@ember/polyfills**** - assign, - // ****@ember/routing/-internals**** RouterDSL, controllerFor, @@ -455,12 +451,6 @@ const PartialEmber = { // ****@ember/controller, @ember/service**** inject, - // Non-imported - platform: { - defineProperty: true, - hasPropertyAccessors: true, - }, - __loader: { require, define, diff --git a/packages/ember/tests/reexports_test.js b/packages/ember/tests/reexports_test.js index 376e6c606ca..b73596aa31a 100644 --- a/packages/ember/tests/reexports_test.js +++ b/packages/ember/tests/reexports_test.js @@ -260,10 +260,6 @@ let allExports = [ // @ember/object/proxy ['ObjectProxy', '@ember/object/proxy', 'default'], - // @ember/polyfills - ['assign', '@ember/polyfills', 'assign'], - ['platform.hasPropertyAccessors', '@ember/polyfills', 'hasPropertyAccessors'], - // @ember/routing/hash-location ['HashLocation', '@ember/routing/hash-location', 'default'], @@ -418,7 +414,4 @@ let allExports = [ [null, 'rsvp', 'race'], [null, 'rsvp', 'reject'], [null, 'rsvp', 'resolve'], - - // misc. - ['platform.defineProperty', null, { value: true }], ].filter(Boolean); diff --git a/tests/docs/expected.js b/tests/docs/expected.js index 74f52f6b0f8..d8a8bd9c7b4 100644 --- a/tests/docs/expected.js +++ b/tests/docs/expected.js @@ -77,7 +77,6 @@ module.exports = { 'array', 'assert', 'assertDestroyablesDestroyed', - 'assign', 'associateDestroyableChild', 'asyncEnd', 'asyncStart', diff --git a/type-tests/@ember/polyfills-tests.ts b/type-tests/@ember/polyfills-tests.ts deleted file mode 100644 index b15e22e10b2..00000000000 --- a/type-tests/@ember/polyfills-tests.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { assign } from '@ember/polyfills'; -import { expectTypeOf } from 'expect-type'; - -(() => { - /* assign */ - assign({}, { a: 'b' }); - expectTypeOf(assign({}, { a: 'b' }).a).toBeString(); - expectTypeOf(assign({ a: 6 }, { a: 'b' }).a).toBeString(); - expectTypeOf(assign({ a: 6 }, {}).a).toBeNumber(); - // @ts-expect-error - assign({ b: 6 }, {}).a; - expectTypeOf(assign({}, { b: 6 }, {}).b).toBeNumber(); - expectTypeOf(assign({ a: 'hello' }, { b: 6 }, {}).a).toBeString(); - expectTypeOf(assign({ a: 'hello' }, { b: 6 }, { a: true }).a).toBeBoolean(); - // @ts-expect-error - assign({ a: 'hello' }, '', { a: true }).a; - expectTypeOf( - assign({ d: ['gobias industries'] }, { a: 'hello' }, { b: 6 }, { a: true }).d - ).toEqualTypeOf(); - // @ts-expect-error - assign({}, { a: 0 }, { b: 1 }, { c: 2 }, { d: 3 }).a; - - // matches Object.assign - expectTypeOf(assign({}, null)).toBeNever(); - expectTypeOf(assign({}, undefined)).toBeNever(); -})(); diff --git a/type-tests/ember/ember-module-tests.ts b/type-tests/ember/ember-module-tests.ts index 23e1d61b446..c7ed2516c19 100644 --- a/type-tests/ember/ember-module-tests.ts +++ b/type-tests/ember/ember-module-tests.ts @@ -21,11 +21,6 @@ Ember.addObserver({ a: 'foo' }, 'a', {}, () => {}); // assert Ember.assert('2+2 should always be 4', 2 + 2 === 4); // assign -const o1 = Ember.assign({ a: 1 }, { b: 2 }); -expectTypeOf(o1.a).toBeNumber(); -expectTypeOf(o1.b).toBeNumber(); -// @ts-expect-error -o1.c; // Ember.bind // @ts-expect-error // cacheFor expectTypeOf(Ember.cacheFor({ a: 123 }, 'a')).toEqualTypeOf(); diff --git a/type-tests/ember/utils.ts b/type-tests/ember/utils.ts index d8535aab2df..c187d49eef0 100755 --- a/type-tests/ember/utils.ts +++ b/type-tests/ember/utils.ts @@ -44,14 +44,6 @@ function testIsNone() { Ember.isNone('', ''); } -function testAssign() { - expectTypeOf(Ember.assign({ first: 'Tom' }, { middle: 'M' }, { last: 'Dale' })).toEqualTypeOf<{ - first: string; - middle: string; - last: string; - }>(); -} - function testOnError() { Ember.onerror = (error) => { fetch('/report-error', { @@ -120,21 +112,3 @@ declare const fileList: FileList; expectTypeOf(Ember.typeOf(new Date() as RegExp | Date)).toEqualTypeOf<'regexp' | 'date'>(); expectTypeOf(Ember.typeOf({ randomObject: true })).toEqualTypeOf<'object'>(); })(); - -(() => { - /* assign */ - Ember.assign({}, { a: 'b' }); - expectTypeOf(Ember.assign({}, { a: 'b' }).a).toBeString(); - expectTypeOf(Ember.assign({ a: 6 }, { a: 'b' }).a).toBeString(); - expectTypeOf(Ember.assign({ a: 6 }, {}).a).toBeNumber(); - // @ts-expect-error - Ember.assign({ b: 6 }, {}).a; - expectTypeOf(Ember.assign({}, { b: 6 }, {}).b).toBeNumber(); - expectTypeOf(Ember.assign({ a: 'hello' }, { b: 6 }, {}).a).toBeString(); - expectTypeOf(Ember.assign({ a: 'hello' }, { b: 6 }, { a: true }).a).toBeBoolean(); - // @ts-expect-error - Ember.assign({ a: 'hello' }, '', { a: true }).a; - expectTypeOf( - Ember.assign({ d: ['gobias industries'] }, { a: 'hello' }, { b: 6 }, { a: true }).d - ).toEqualTypeOf(); -})(); diff --git a/types/preview/@ember/polyfills/index.d.ts b/types/preview/@ember/polyfills/index.d.ts deleted file mode 100644 index 4fbe04bcaa9..00000000000 --- a/types/preview/@ember/polyfills/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module '@ember/polyfills' { - import type { Mix, Mix3, Mix4 } from '@ember/polyfills/types'; - - /** - * Copy properties from a source object to a target object. - * @deprecated until v5.0. You should replace any calls to `Ember.assign` with - * `Object.assign` or use the object spread operator. - */ - export function assign(target: T, source: U): Mix; - export function assign( - target: T, - source1: U, - source2: V - ): Mix3; - export function assign( - target: T, - source1: U, - source2: V, - source3: W - ): Mix4; - export function assign(target: object, ...sources: object[]): unknown; - export function assign(target: object, final: undefined | null): never; -} diff --git a/types/preview/@ember/polyfills/types.d.ts b/types/preview/@ember/polyfills/types.d.ts deleted file mode 100644 index be2a75c4ccc..00000000000 --- a/types/preview/@ember/polyfills/types.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module '@ember/polyfills/types' { - export type Mix = B & Pick>; - export type Mix3 = Mix, C>; - export type Mix4 = Mix3, C, D>; - export default Mix; -} diff --git a/types/preview/ember/index.d.ts b/types/preview/ember/index.d.ts index 16e22326ce0..b70be3eb0b9 100755 --- a/types/preview/ember/index.d.ts +++ b/types/preview/ember/index.d.ts @@ -8,7 +8,6 @@ declare module 'ember' { import type * as EmberTemplateNs from '@ember/template'; import * as EmberTemplateHandlebarsNs from '@ember/template/-private/handlebars'; import type * as EmberServiceNs from '@ember/service'; - import type * as EmberPolyfillsNs from '@ember/polyfills'; import type * as EmberUtilsNs from '@ember/utils'; import type * as EmberRunloopNs from '@ember/runloop'; import * as EmberObjectNs from '@ember/object'; @@ -293,11 +292,6 @@ declare module 'ember' { interface Run extends RunFn, EmberRunloop {} const run: Run; - const platform: { - defineProperty: boolean; - hasPropertyAccessors: boolean; - }; - /** * `getEngineParent` retrieves an engine instance's parent instance. */ @@ -339,12 +333,6 @@ declare module 'ember' { */ const isEqual: typeof EmberUtilsNs.isEqual; const typeOf: typeof EmberUtilsNs.typeOf; - /** - * Copy properties from a source object to a target object. - * @deprecated until v5.0. You should replace any calls to `Ember.assign` - * with `Object.assign` or use the object spread operator. - */ - const assign: typeof EmberPolyfillsNs.assign; const guidFor: typeof EmberObjectInternalsNs.guidFor; /** diff --git a/types/preview/index.d.ts b/types/preview/index.d.ts index 4da1c30bef0..8786374ecdc 100644 --- a/types/preview/index.d.ts +++ b/types/preview/index.d.ts @@ -89,9 +89,6 @@ import './@ember/object/observers'; import './@ember/object/promise-proxy-mixin'; import './@ember/object/proxy'; -import './@ember/polyfills'; -import './@ember/polyfills/types'; - import './@ember/routing'; import './@ember/routing/-private/router-dsl'; import './@ember/routing/auto-location'; diff --git a/types/publish.mjs b/types/publish.mjs index 17e01cc4722..4018823c8c2 100755 --- a/types/publish.mjs +++ b/types/publish.mjs @@ -254,8 +254,6 @@ const PREVIEW_MODULES = [ '@ember/object/observers.d.ts', '@ember/object/promise-proxy-mixin.d.ts', '@ember/object/proxy.d.ts', - '@ember/polyfills/index.d.ts', - '@ember/polyfills/lib/assign.d.ts', '@ember/renderer/index.d.ts', '@ember/routing/-internals.d.ts', '@ember/routing/auto-location.d.ts',