From 89a31f4409bca4e2fac1e42870bb240020f263de Mon Sep 17 00:00:00 2001 From: Chris Manson Date: Tue, 21 Jul 2026 12:40:10 +0100 Subject: [PATCH] convert to esm and set type: module in package.json --- index.js | 4 +- package.json | 1 + src/dependency-version-checker.js | 14 ++-- src/get-project.js | 4 +- src/project-wide-dependency-checker.js | 13 ++-- src/utils/single-implementation.js | 8 +- src/version-checker.js | 8 +- tests/for-project-tests.js | 10 +-- tests/index-tests.js | 8 +- tests/utils/addon.js | 10 --- tests/utils/has-a-fixture.js | 90 --------------------- tests/utils/project.js | 104 ++++++++++++++++++++++++- tests/utils/skip-window.js | 4 +- tests/utils/version-checker-bin.js | 8 +- tests/yarn-workspaces-test.js | 4 +- 15 files changed, 135 insertions(+), 155 deletions(-) delete mode 100644 tests/utils/addon.js delete mode 100644 tests/utils/has-a-fixture.js diff --git a/index.js b/index.js index a082fac..89963bb 100644 --- a/index.js +++ b/index.js @@ -1,3 +1 @@ -'use strict'; - -module.exports = require('./src/version-checker'); +export { default } from './src/version-checker.js'; diff --git a/package.json b/package.json index 890cd55..0a9fd37 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "license": "MIT", "author": "Robert Jackson ", "main": "index.js", + "type": "module", "directories": { "test": "tests" }, diff --git a/src/dependency-version-checker.js b/src/dependency-version-checker.js index f87f229..f3b6d2b 100644 --- a/src/dependency-version-checker.js +++ b/src/dependency-version-checker.js @@ -1,7 +1,7 @@ -'use strict'; -const semver = require('semver'); -const getProject = require('./get-project'); -const resolvePackagePath = require('resolve-package-path'); +import semver from 'semver'; +import getProject from './get-project.js'; +import resolvePackagePath from 'resolve-package-path'; +import { readFileSync } from 'node:fs'; /* * Retrieve the version field from the package.json file contents. @@ -10,7 +10,7 @@ const resolvePackagePath = require('resolve-package-path'); function getVersionFromJSONFile(filePath) { try { // Use the require cache to avoid file I/O after first call on a given path. - let pkg = require(filePath); + let pkg = JSON.parse(readFileSync(filePath, 'utf8')); // Note: the callers rely on the fact that pkg.version may be undefined, so // we must not be "smart" about setting the value to null here to stop any @@ -25,7 +25,7 @@ function getVersionFromJSONFile(filePath) { /** * DependencyVersionChecker */ -class DependencyVersionChecker { +export default class DependencyVersionChecker { constructor(parent, name) { this._parent = parent; this.name = name; @@ -83,5 +83,3 @@ for (let method of ['gt', 'lt', 'gte', 'lte', 'eq', 'neq', 'satisfies']) { return semver[method](this.version, range); }; } - -module.exports = DependencyVersionChecker; diff --git a/src/get-project.js b/src/get-project.js index a36fb5a..5d005cd 100644 --- a/src/get-project.js +++ b/src/get-project.js @@ -1,6 +1,4 @@ -'use strict'; - -module.exports = function (input) { +export default function getProject(input) { if (input.project) { return input.project; } else if (input.root && typeof input.isEmberCLIProject === 'function') { diff --git a/src/project-wide-dependency-checker.js b/src/project-wide-dependency-checker.js index 8cbfb3b..0dddeae 100644 --- a/src/project-wide-dependency-checker.js +++ b/src/project-wide-dependency-checker.js @@ -1,13 +1,12 @@ -'use strict'; -const { +import { hasSingleImplementation, allAddons, -} = require('./utils/single-implementation'); -const semver = require('semver'); -const SilentError = require('silent-error'); -const { EOL } = require('os'); +} from './utils/single-implementation.js'; +import semver from 'semver'; +import SilentError from 'silent-error'; +import { EOL } from 'os'; -module.exports = class ProjectWideDependencyChecker { +export default class ProjectWideDependencyChecker { constructor(project) { if ( !project || diff --git a/src/utils/single-implementation.js b/src/utils/single-implementation.js index 14bb5c7..9f2bf7c 100644 --- a/src/utils/single-implementation.js +++ b/src/utils/single-implementation.js @@ -1,13 +1,10 @@ -'use strict'; - const UNIQUE_ADDON_MAP = new WeakMap(); /** * Traverse the project's addons tree to determine singleton root, * cache the boolean result in project x addonName matrix */ -module.exports.hasSingleImplementation = hasSingleImplementation; -function hasSingleImplementation(targetName, project) { +export function hasSingleImplementation(targetName, project) { if (!UNIQUE_ADDON_MAP.has(project)) { UNIQUE_ADDON_MAP.set(project, new Map()); } @@ -33,8 +30,7 @@ function hasSingleImplementation(targetName, project) { return true; } -module.exports.allAddons = allAddons; -function* allAddons(current) { +export function* allAddons(current) { if (Array.isArray(current.addons) === false) { return; } diff --git a/src/version-checker.js b/src/version-checker.js index 1fa8ce9..5ae4796 100644 --- a/src/version-checker.js +++ b/src/version-checker.js @@ -1,9 +1,7 @@ -'use strict'; +import DependencyVersionChecker from './dependency-version-checker.js'; +import ProjectWideDependencyChecker from './project-wide-dependency-checker.js'; -const DependencyVersionChecker = require('./dependency-version-checker'); -const ProjectWideDependencyChecker = require('./project-wide-dependency-checker'); - -module.exports = class VersionChecker { +export default class VersionChecker { constructor(addon) { this._addon = addon; } diff --git a/tests/for-project-tests.js b/tests/for-project-tests.js index 88d92e9..cbe995c 100644 --- a/tests/for-project-tests.js +++ b/tests/for-project-tests.js @@ -1,8 +1,8 @@ -'use strict'; -const { EOL } = require('os'); +import { EOL } from 'os'; -const assert = require('assert'); -const VersionChecker = require('..'); +import assert from 'assert'; +import VersionChecker from '../index.js'; +import {Project as FakeProject} from './utils/project.js'; function isObject(x) { return typeof x === 'object' && x !== null; @@ -35,7 +35,6 @@ describe('ember-cli-version-checker', function () { let project; beforeEach(async function () { - const FakeProject = require('./utils/project'); project = new FakeProject('rsvp', '3.1.4'); project.addAddon('ember', '2.0.0'); await project.write(); @@ -45,7 +44,6 @@ describe('ember-cli-version-checker', function () { let checker; beforeEach(async function () { - const FakeProject = require('./utils/project'); project = new FakeProject('rsvp', '3.1.4'); project.addAddon('ember', '2.0.0'); diff --git a/tests/index-tests.js b/tests/index-tests.js index 0473d96..b31a6f9 100644 --- a/tests/index-tests.js +++ b/tests/index-tests.js @@ -1,8 +1,6 @@ -'use strict'; - -const assert = require('assert'); -const VersionChecker = require('..'); -const FakeProject = require('./utils/project'); +import assert from 'assert'; +import VersionChecker from '../index.js'; +import { Project as FakeProject } from './utils/project.js'; describe('ember-cli-version-checker', function () { describe('VersionChecker#forEmber', function () { diff --git a/tests/utils/addon.js b/tests/utils/addon.js deleted file mode 100644 index a712c43..0000000 --- a/tests/utils/addon.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = class Addon extends require('./has-a-fixture') { - constructor(name, version, project, fixture) { - super(name, version, fixture); - this.project = project; - - Object.freeze(this); - } -}; diff --git a/tests/utils/has-a-fixture.js b/tests/utils/has-a-fixture.js deleted file mode 100644 index f06ce6f..0000000 --- a/tests/utils/has-a-fixture.js +++ /dev/null @@ -1,90 +0,0 @@ -'use strict'; - -// Create a strict "fake" ember-cli addon -class FakeEmberAddon { - constructor(addon) { - this._addon = addon; - Object.freeze(this); - } - - get addons() { - return this._addon.addons; - } - - get name() { - return this._addon.name; - } - - get version() { - return this._addon.version; - } - - get pkg() { - return this._addon._fixture.pkg; - } - - get root() { - return this._addon.root; - } -} - -// abstract -module.exports = class HasAFixture { - constructor(name, version, fixture) { - this._fixture = fixture; - this.name = name; - this.version = version; - this.addons = []; - } - - get root() { - return this._fixture.baseDir; - } - - write(...args) { - return this._fixture.write(...args); - } - - readSync(...args) { - return this._fixture.readSync(...args); - } - - addDependency(...args) { - return this._fixture.addDependency(...args); - } - - addDevDependency(...args) { - return this._fixture.addDevDependency(...args); - } - - addAddon(name, version, cb) { - let addon; - this._fixture.addDependency(name, version, (fixture) => { - addon = new (require('./addon'))(name, version, this, fixture); - - if (typeof cb === 'function') { - cb(addon); - } - }); - - this.addons.push(new FakeEmberAddon(addon)); - - return addon; - } - - addDevAddon(name, version, cb) { - let addon; - this._fixture.addDevDependency(name, version, (fixture) => { - addon = new (require('./addon'))(name, version, this, fixture); - if (typeof cb === 'function') { - cb(addon); - } - }); - this.addons.push(new FakeEmberAddon(addon)); - return addon; - } - - dispose() { - this._fixture.dispose(); - } -}; diff --git a/tests/utils/project.js b/tests/utils/project.js index 5de3242..d24abd0 100644 --- a/tests/utils/project.js +++ b/tests/utils/project.js @@ -1,7 +1,105 @@ -'use strict'; +import { Project as FixturifyProject} from 'fixturify-project'; -const { Project: FixturifyProject } = require('fixturify-project'); -module.exports = class Project extends require('./has-a-fixture') { +// Create a strict "fake" ember-cli addon +class FakeEmberAddon { + constructor(addon) { + this._addon = addon; + Object.freeze(this); + } + + get addons() { + return this._addon.addons; + } + + get name() { + return this._addon.name; + } + + get version() { + return this._addon.version; + } + + get pkg() { + return this._addon._fixture.pkg; + } + + get root() { + return this._addon.root; + } +} + +// abstract +export class HasAFixture { + constructor(name, version, fixture) { + this._fixture = fixture; + this.name = name; + this.version = version; + this.addons = []; + } + + get root() { + return this._fixture.baseDir; + } + + write(...args) { + return this._fixture.write(...args); + } + + readSync(...args) { + return this._fixture.readSync(...args); + } + + addDependency(...args) { + return this._fixture.addDependency(...args); + } + + addDevDependency(...args) { + return this._fixture.addDevDependency(...args); + } + + addAddon(name, version, cb) { + let addon; + this._fixture.addDependency(name, version, (fixture) => { + addon = new Addon(name, version, this, fixture); + + if (typeof cb === 'function') { + cb(addon); + } + }); + + this.addons.push(new FakeEmberAddon(addon)); + + return addon; + } + + addDevAddon(name, version, cb) { + let addon; + this._fixture.addDevDependency(name, version, (fixture) => { + addon = new (require('./addon'))(name, version, this, fixture); + if (typeof cb === 'function') { + cb(addon); + } + }); + this.addons.push(new FakeEmberAddon(addon)); + return addon; + } + + dispose() { + this._fixture.dispose(); + } +}; + + +export class Addon extends HasAFixture { + constructor(name, version, project, fixture) { + super(name, version, fixture); + this.project = project; + + Object.freeze(this); + } +}; + +export class Project extends HasAFixture { constructor(name, version) { super(name, version, new FixturifyProject(name, version)); this.version = version; diff --git a/tests/utils/skip-window.js b/tests/utils/skip-window.js index 72a54bc..b3b01c2 100644 --- a/tests/utils/skip-window.js +++ b/tests/utils/skip-window.js @@ -1,5 +1,3 @@ -'use strict'; - // There are some issues with PNP + workspaces on windows that will require debugging // https://github.com/ember-cli/ember-cli-version-checker/issues/100 -module.exports = process.platform.includes('win32') ? describe.skip : describe; +export default process.platform.includes('win32') ? describe.skip : describe; diff --git a/tests/utils/version-checker-bin.js b/tests/utils/version-checker-bin.js index 5bcd65e..7210e29 100644 --- a/tests/utils/version-checker-bin.js +++ b/tests/utils/version-checker-bin.js @@ -1,8 +1,8 @@ -'use strict'; - -module.exports = function buildVersionCheckerBin(addon) { +export default function buildVersionCheckerBin(addon) { return ` - const VersionChecker = require('ember-cli-version-checker'); + import VersionChecker from 'ember-cli-version-checker'; + + debugger const checker = new VersionChecker(${addon}); const dep = checker.for(process.argv[2]); diff --git a/tests/yarn-workspaces-test.js b/tests/yarn-workspaces-test.js index 3ccf432..143dbac 100644 --- a/tests/yarn-workspaces-test.js +++ b/tests/yarn-workspaces-test.js @@ -15,7 +15,7 @@ skipWindows('with yarn workspace', function () { project.workspaces = ['app', 'addon']; project.addDependency('bar', '2.0.0'); - project.addDependency('ember-cli-version-checker', `link:${__dirname}/../`); + project.linkDevDependency('ember-cli-version-checker', `link:${import.meta.dirname}/../`); project.files['index.js'] = buildVersionCheckerBin(`{ root: process.cwd(), isEmberCLIProject() {}, @@ -29,7 +29,7 @@ skipWindows('with yarn workspace', function () { }; const theAddon = new Project('the-addon', '0.0.0'); - theAddon.addDependency('bar', `link:${__dirname}/../`); + theAddon.addDependency('bar', `link:${import.meta.dirname}/../`); theAddon.files['dummy.js'] = buildVersionCheckerBin(`{ project: { root: '${project.baseDir}/addon',