Skip to content

Commit

Permalink
Merge pull request #82 from cafreeman/fix-missing-version-bug
Browse files Browse the repository at this point in the history
throw if no version is specified in dependency's package.json
  • Loading branch information
ef4 committed Aug 3, 2023
2 parents 232804b + aa4eb99 commit 69d069e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,11 @@ export class Project {
let dependencies = this.depsToObject(this.dependencyProjects());
let devDependencies = this.depsToObject(this.devDependencyProjects());
for (let [name, { requestedRange }] of resolvedLinks) {
if (requestedRange === undefined) {
throw new Error(
`No version found for package ${name}. All dependencies must have both a name and version in their package.json.`
);
}
if (this.linkIsDevDependency.has(name)) {
devDependencies[name] = requestedRange;
} else {
Expand Down
32 changes: 32 additions & 0 deletions tests/index-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,38 @@ describe('Project', async () => {
expect(fs.existsSync(path.join(myApp.baseDir, 'node_modules', 'custom-addon', 'layered-extra.js'))).to.eql(true);
});

it('throws an error for linked deps when version is missing', async () => {
let template = new Project('template');
template.addDependency('local-lib', './local-lib');
template.mergeFiles({
'local-lib': {
'package.json': JSON.stringify({
name: 'local-lib',
main: 'index.js',
}),
'index.js': 'console.log("hello world");',
},
});

await template.write();

let localLibPkgPath = path.join(template.baseDir, 'node_modules', 'local-lib', 'package.json');

let localLibPkgJson = await fs.readJSON(localLibPkgPath);
// we have to manually remove the version from the package.json bc fixturify automatically adds it
// when calling `addDependency`
delete localLibPkgJson.version;
await fs.writeJSON(localLibPkgPath, localLibPkgJson);

let app = Project.fromDir(template.baseDir, { linkDeps: true });
await expect(app.write()).rejects.toThrowError(
'No version found for package local-lib. All dependencies must have both a name and version in their package.json.'
);

template.dispose();
app.dispose();
});

it('can read a project with linked dev dependencies', async () => {
// start with a template app
let appTemplate = new Project('stock-app');
Expand Down

0 comments on commit 69d069e

Please sign in to comment.