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 357ccb7c..d02dca1f 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"