Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
'use strict';

module.exports = require('./src/version-checker');
export { default } from './src/version-checker.js';
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"license": "MIT",
"author": "Robert Jackson <me@rwjblue.com>",
"main": "index.js",
"type": "module",
"directories": {
"test": "tests"
},
Expand Down
14 changes: 6 additions & 8 deletions src/dependency-version-checker.js
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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
Expand All @@ -25,7 +25,7 @@ function getVersionFromJSONFile(filePath) {
/**
* DependencyVersionChecker
*/
class DependencyVersionChecker {
export default class DependencyVersionChecker {
constructor(parent, name) {
this._parent = parent;
this.name = name;
Expand Down Expand Up @@ -83,5 +83,3 @@ for (let method of ['gt', 'lt', 'gte', 'lte', 'eq', 'neq', 'satisfies']) {
return semver[method](this.version, range);
};
}

module.exports = DependencyVersionChecker;
4 changes: 1 addition & 3 deletions src/get-project.js
Original file line number Diff line number Diff line change
@@ -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') {
Expand Down
13 changes: 6 additions & 7 deletions src/project-wide-dependency-checker.js
Original file line number Diff line number Diff line change
@@ -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 ||
Expand Down
8 changes: 2 additions & 6 deletions src/utils/single-implementation.js
Original file line number Diff line number Diff line change
@@ -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());
}
Expand All @@ -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;
}
Expand Down
8 changes: 3 additions & 5 deletions src/version-checker.js
Original file line number Diff line number Diff line change
@@ -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;
}
Expand Down
10 changes: 4 additions & 6 deletions tests/for-project-tests.js
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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();
Expand All @@ -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');

Expand Down
8 changes: 3 additions & 5 deletions tests/index-tests.js
Original file line number Diff line number Diff line change
@@ -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 () {
Expand Down
10 changes: 0 additions & 10 deletions tests/utils/addon.js

This file was deleted.

90 changes: 0 additions & 90 deletions tests/utils/has-a-fixture.js

This file was deleted.

104 changes: 101 additions & 3 deletions tests/utils/project.js
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
4 changes: 1 addition & 3 deletions tests/utils/skip-window.js
Original file line number Diff line number Diff line change
@@ -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;
8 changes: 4 additions & 4 deletions tests/utils/version-checker-bin.js
Original file line number Diff line number Diff line change
@@ -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]);
Expand Down
Loading