From d026b997dcdd0ba0c5c940ff4725c27e34a4c134 Mon Sep 17 00:00:00 2001 From: Aaron Chambers Date: Tue, 14 Nov 2023 09:04:40 +0000 Subject: [PATCH 1/3] Add ember-try CI timeout --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dd378472..61f48f72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,6 +94,7 @@ jobs: runs-on: ubuntu-latest continue-on-error: ${{ matrix.allow-failure }} needs: test + timeout-minutes: 10 strategy: fail-fast: true @@ -187,4 +188,4 @@ jobs: run: yarn install --no-lockfile --non-interactive - name: Test - run: yarn test:ember --launch ${{ matrix.browser }} \ No newline at end of file + run: yarn test:ember --launch ${{ matrix.browser }} From 965d76d60826b39fb0e33538560439765e789f1e Mon Sep 17 00:00:00 2001 From: Aaron Chambers Date: Tue, 14 Nov 2023 10:13:29 +0000 Subject: [PATCH 2/3] Replace `require` with `importSync` to play nice with Embroider (#486) * Add ember-data-model-fragments as an optional peer depdendency * Introduce @embroider/macros * Replace require with importSync to make it Embroider friendly --- addon/builder/fixture-builder-factory.js | 25 +++++------ addon/converter/fixture-converter.js | 28 ++++++------ addon/factory-guy.js | 13 +++--- package.json | 17 ++++++++ yarn.lock | 55 +++++++++++++++++++++++- 5 files changed, 105 insertions(+), 33 deletions(-) diff --git a/addon/builder/fixture-builder-factory.js b/addon/builder/fixture-builder-factory.js index 87876544..5c4ff76c 100644 --- a/addon/builder/fixture-builder-factory.js +++ b/addon/builder/fixture-builder-factory.js @@ -1,26 +1,27 @@ import JSONSerializer from '@ember-data/serializer/json'; import RESTSerializer from '@ember-data/serializer/rest'; import JSONAPISerializer from '@ember-data/serializer/json-api'; -import require from 'require'; import JSONAPIFixtureBuilder from './jsonapi-fixture-builder'; import RESTFixtureBuilder from './rest-fixture-builder'; import JSONFixtureBuilder from './json-fixture-builder'; import DRFFixtureBuilder from './drf-fixture-builder'; import ActiveModelFixtureBuilder from './active-model-fixture-builder'; +import { + macroCondition, + dependencySatisfies, + importSync, +} from '@embroider/macros'; -let ActiveModelSerializer, DjangoSerializer; -try { - let activeModel = require('active-model-adapter'); - ActiveModelSerializer = activeModel.ActiveModelSerializer; -} catch (e) { - // do nothing +let ActiveModelSerializer; +if (macroCondition(dependencySatisfies('active-model-adapter', '*'))) { + ActiveModelSerializer = importSync( + 'active-model-adapter' + ).ActiveModelSerializer; } -try { - let drf = require('ember-django-adapter/serializers/drf'); - DjangoSerializer = drf && drf.default; -} catch (e) { - // do nothing +let DjangoSerializer; +if (macroCondition(dependencySatisfies('ember-django-adapter', '*'))) { + DjangoSerializer = importSync('ember-django-adapter/serializers/drf').default; } export default class { diff --git a/addon/converter/fixture-converter.js b/addon/converter/fixture-converter.js index b1f1a4fe..17428ab7 100644 --- a/addon/converter/fixture-converter.js +++ b/addon/converter/fixture-converter.js @@ -3,19 +3,19 @@ import { entries } from '../utils/helper-functions'; import { typeOf } from '@ember/utils'; import { getOwner } from '@ember/application'; import { camelize } from '@ember/string'; -import require from 'require'; +import { + macroCondition, + dependencySatisfies, + importSync, +} from '@embroider/macros'; let Fragment; let FragmentArray; -try { - let MF = require('ember-data-model-fragments/fragment'); - let MFA = require('ember-data-model-fragments/array/fragment'); - Fragment = MF && MF.default; - FragmentArray = MFA && MFA.default; -} catch (e) { - // create empty constructors - Fragment = function Fragment() {}; - FragmentArray = function FragmentArray() {}; +if (macroCondition(dependencySatisfies('ember-data-model-fragments', '*'))) { + Fragment = importSync('ember-data-model-fragments/fragment').default; + FragmentArray = importSync( + 'ember-data-model-fragments/array/fragment' + ).default; } /** @@ -203,8 +203,8 @@ export default class FixtureConverter { // If passed Fragments or FragmentArrays we must transform them to their serialized form before we can push them into the Store if ( - attributeValueInFixture instanceof Fragment || - attributeValueInFixture instanceof FragmentArray + (Fragment && attributeValueInFixture instanceof Fragment) || + (FragmentArray && attributeValueInFixture instanceof FragmentArray) ) { fixture[attributeKey] = this.normalizeModelFragments( attributeValueInFixture @@ -230,13 +230,13 @@ export default class FixtureConverter { } normalizeModelFragments(attributeValueInFixture) { - if (attributeValueInFixture instanceof Fragment) { + if (Fragment && attributeValueInFixture instanceof Fragment) { return this.store.normalize( attributeValueInFixture.constructor.modelName, attributeValueInFixture.serialize() ).data.attributes; } - if (attributeValueInFixture instanceof FragmentArray) { + if (FragmentArray && attributeValueInFixture instanceof FragmentArray) { return attributeValueInFixture .serialize() .map( diff --git a/addon/factory-guy.js b/addon/factory-guy.js index eaca5833..98f9a17f 100644 --- a/addon/factory-guy.js +++ b/addon/factory-guy.js @@ -3,19 +3,20 @@ import { assert } from '@ember/debug'; import { isPresent, typeOf } from '@ember/utils'; import { join } from '@ember/runloop'; import { A } from '@ember/array'; -import require from 'require'; import ModelDefinition from './model-definition'; import FixtureBuilderFactory from './builder/fixture-builder-factory'; import RequestManager from './mocks/request-manager'; +import { + macroCondition, + dependencySatisfies, + importSync, +} from '@embroider/macros'; let modelDefinitions = {}; let Fragment; -try { - let MF = require('ember-data-model-fragments'); - Fragment = MF && MF.default.Fragment; -} catch (e) { - // do nothing +if (macroCondition(dependencySatisfies('ember-data-model-fragments', '*'))) { + Fragment = importSync('ember-data-model-fragments').default.Fragment; } class FactoryGuy { diff --git a/package.json b/package.json index ce6b3d92..9bb792e0 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "license": "MIT", "dependencies": { + "@embroider/macros": "^1.13.3", "broccoli-funnel": "^3.0.4", "broccoli-merge-trees": "^4.2.0", "ember-auto-import": "^1.11.3", @@ -85,6 +86,22 @@ "release-it": "^14.2.1", "release-it-lerna-changelog": "^3.1.0" }, + "peerDependencies": { + "ember-data-model-fragments": "*", + "ember-django-adapter": "*", + "active-model-adapter": "*" + }, + "peerDependenciesMeta": { + "ember-data-model-fragments": { + "optional": true + }, + "ember-django-adapter": { + "optional": true + }, + "active-model-adapter": { + "optional": true + } + }, "resolutions": { "ember-data": "3.24.2" }, diff --git a/yarn.lock b/yarn.lock index b52d8eed..119d1d9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1973,6 +1973,35 @@ resolve "^1.8.1" semver "^7.3.2" +"@embroider/macros@^1.13.3": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.13.3.tgz#e1ff584e01bcdebb9fa9f6982ecc2ea89886867f" + integrity sha512-JUC1aHRLIN2LNy1l+gz7gWkw9JmnsE20GL3LduCzNvCAnEQpMTJhW5BUbEWqdCnAWBPte/M2ofckqBXyTZioTQ== + dependencies: + "@embroider/shared-internals" "2.5.1" + assert-never "^1.2.1" + babel-import-util "^2.0.0" + ember-cli-babel "^7.26.6" + find-up "^5.0.0" + lodash "^4.17.21" + resolve "^1.20.0" + semver "^7.3.2" + +"@embroider/shared-internals@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-2.5.1.tgz#a4d8c057cbff293ef6eb29ee6537f263d206b444" + integrity sha512-b+TWDBisH1p6HeTbJIO8pgu1WzfTP0ZSAlZBqjXwOyrS0ZxP1qNYRrEX+IxyzIibEFjXBxeLakiejz3DJvZX5A== + dependencies: + babel-import-util "^2.0.0" + debug "^4.3.2" + ember-rfc176-data "^0.3.17" + fs-extra "^9.1.0" + js-string-escape "^1.0.1" + lodash "^4.17.21" + resolve-package-path "^4.0.1" + semver "^7.3.5" + typescript-memoize "^1.0.1" + "@embroider/test-setup@^0.43.5": version "0.43.5" resolved "https://registry.yarnpkg.com/@embroider/test-setup/-/test-setup-0.43.5.tgz#79944cb50038802cc71d50aa0d5d7a0955ee6349" @@ -3143,7 +3172,7 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -assert-never@^1.1.0: +assert-never@^1.1.0, assert-never@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== @@ -3417,6 +3446,11 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-import-util@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-2.0.1.tgz#263a2963ee9208428c04f05326c6ea32b2206ac6" + integrity sha512-N1ZfNprtf/37x0R05J0QCW/9pCAcuI+bjZIK9tlu0JEkwEST7ssdD++gxHRbD58AiG5QE5OuNYhRoEFsc1wESw== + babel-loader@^8.0.6: version "8.2.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" @@ -5759,6 +5793,13 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.1.1: dependencies: ms "^2.1.1" +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -12135,6 +12176,13 @@ resolve-package-path@^3.1.0: path-root "^0.1.1" resolve "^1.17.0" +resolve-package-path@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-4.0.3.tgz#31dab6897236ea6613c72b83658d88898a9040aa" + integrity sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA== + dependencies: + path-root "^0.1.1" + resolve-path@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" @@ -13570,6 +13618,11 @@ typescript-memoize@^1.0.0-alpha.3: resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.1.tgz#0a8199aa28f6fe18517f6e9308ef7bfbe9a98d59" integrity sha512-oJNge1qUrOK37d5Y6Ly2txKeuelYVsFtNF6U9kXIN7juudcQaHJQg2MxLOy0CqtkW65rVDYuTCOjnSIVPd8z3w== +typescript-memoize@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" + integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" From 2b97b2b4a7bb96921e86f86e8166e351aff9961d Mon Sep 17 00:00:00 2001 From: Aaron Chambers Date: Tue, 14 Nov 2023 09:00:08 +0000 Subject: [PATCH 3/3] Add Embroider ember-try scenarios --- .github/workflows/ci.yml | 2 ++ config/ember-try.js | 3 +++ ember-cli-build.js | 3 ++- package.json | 2 +- yarn.lock | 8 ++++---- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61f48f72..bc04e8bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -104,6 +104,8 @@ jobs: ember-lts-3.24, ember-default-with-jquery, ember-classic, + embroider-safe, + embroider-optimized, ] allow-failure: [false] include: diff --git a/config/ember-try.js b/config/ember-try.js index 383125c9..251746d0 100644 --- a/config/ember-try.js +++ b/config/ember-try.js @@ -1,6 +1,7 @@ 'use strict'; const getChannelURL = require('ember-source-channel-url'); +const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup'); module.exports = async function () { return { @@ -76,6 +77,8 @@ module.exports = async function () { }, }, }, + embroiderSafe(), + embroiderOptimized(), ], }; }; diff --git a/ember-cli-build.js b/ember-cli-build.js index cf13b9a5..27518d3f 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -1,4 +1,5 @@ const EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); +const { maybeEmbroider } = require('@embroider/test-setup'); module.exports = function (defaults) { let app = new EmberAddon(defaults, { @@ -14,5 +15,5 @@ module.exports = function (defaults) { behave. You most likely want to be modifying `./index.js` or app's build file */ - return app.toTree(); + return maybeEmbroider(app); }; diff --git a/package.json b/package.json index 9bb792e0..c9630cb0 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@ember/optional-features": "^2.0.0", "@ember/test-helpers": "^2.4.2", - "@embroider/test-setup": "^0.43.5", + "@embroider/test-setup": "^3.0.3", "@glimmer/component": "^1.0.4", "@glimmer/tracking": "^1.0.4", "active-model-adapter": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index 119d1d9e..85b00538 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2002,10 +2002,10 @@ semver "^7.3.5" typescript-memoize "^1.0.1" -"@embroider/test-setup@^0.43.5": - version "0.43.5" - resolved "https://registry.yarnpkg.com/@embroider/test-setup/-/test-setup-0.43.5.tgz#79944cb50038802cc71d50aa0d5d7a0955ee6349" - integrity sha512-ke+5B0VR2343ZrOqV9Ok2LyA4m2q2ApM1Oy1RC8+3+OI5lDVg8UgZG9n/G2e77KPMFxnK3eVpXcPdLcdOxW6+w== +"@embroider/test-setup@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@embroider/test-setup/-/test-setup-3.0.3.tgz#938f36db1578ad70f357a09ef4ebd16fca0434f9" + integrity sha512-3K5KSyTdnxAkZQill6+TdC/XTRr6226LNwZMsrhRbBM0FFZXw2D8qmJSHPvZLheQx3A1jnF9t1lyrAzrKlg6Yw== dependencies: lodash "^4.17.21" resolve "^1.20.0"