Skip to content

Commit

Permalink
fix: allow deep imports (#13795)
Browse files Browse the repository at this point in the history
* fix: allow deep imports

* fix: fix export declarations

* test: fix deep-exports test

Co-authored-by: Rik Smale <13023439+WikiRik@users.noreply.github.com>
  • Loading branch information
ephys and WikiRik committed Dec 21, 2021
1 parent 8acc14f commit 1ecdaf9
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 9 deletions.
9 changes: 7 additions & 2 deletions package.json
Expand Up @@ -20,8 +20,13 @@
"types": "./dist",
"type": "commonjs",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.js"
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.js"
},
"./lib/*": "./dist/lib/*.js",
"./lib/errors": "./dist/lib/errors/index.js",
"./*": "./*"
},
"engines": {
"node": ">=10.0.0"
Expand Down
17 changes: 14 additions & 3 deletions test/registerEsbuild.js
Expand Up @@ -5,9 +5,20 @@ const esbuild = require('esbuild');
const moduleAlias = require('module-alias');
const sourceMapSupport = require('source-map-support');

const distDir = path.join(__dirname, '../dist');
// make imports from `sequelize/` go to `../dist/`
moduleAlias.addAlias('sequelize', distDir);
const nodeMajorVersion = Number(process.version.match(/(?<=^v)\d+/));

// for node >= 12, we use the package.json "export" property to
// map imports to dist (except package.json)
// so "sequelize/lib/errors" is actually mapped to "sequelize/dist/errors/index.js"
// (see package.json).
if (nodeMajorVersion < 12) {
const jsonFile = path.join(__dirname, '..', 'package.json');
moduleAlias.addAlias('sequelize/package.json', jsonFile);

const distDir = path.join(__dirname, '../dist');
// make imports from `sequelize/` go to `../dist/`
moduleAlias.addAlias('sequelize', distDir);
}

const maps = {};

Expand Down
30 changes: 30 additions & 0 deletions test/unit/deep-exports.test.js
@@ -0,0 +1,30 @@
const chai = require('chai'),
expect = chai.expect;

/**
* Tests whether users can import files deeper than "sequelize" (eg. "sequelize/package.json").
* Context: https://github.com/sequelize/sequelize/issues/13787
*/

const nodeMajorVersion = Number(process.version.match(/(?<=^v)\d+/));

describe('exports', () => {
it('exposes /package.json', async () => {
// TODO: uncomment test once https://nodejs.org/api/esm.html#json-modules are stable
// if (nodeMajorVersion >= 16) {
// await import('sequelize/package.json', {
// assert: { type: 'json' }
// });
// }

require('sequelize/package.json');
});

it('exposes lib files', async () => {
if (nodeMajorVersion >= 12) {
await import('sequelize/lib/model');
}

require('sequelize/lib/model');
});
});
2 changes: 1 addition & 1 deletion test/unit/dialects/abstract/query.test.js
@@ -1,7 +1,7 @@
'use strict';

const path = require('path');
const Query = require('sequelize/lib/dialects/abstract/query.js');
const Query = require('sequelize/lib/dialects/abstract/query');
const Support = require(path.join(__dirname, './../../support'));
const chai = require('chai');
const { stub, match } = require('sinon');
Expand Down
2 changes: 1 addition & 1 deletion test/unit/dialects/mssql/query.test.js
@@ -1,7 +1,7 @@
'use strict';

const path = require('path');
const Query = require('sequelize/lib/dialects/mssql/query.js');
const Query = require('sequelize/lib/dialects/mssql/query');
const Support = require('../../support');
const dialect = Support.getTestDialect();
const sequelize = Support.sequelize;
Expand Down
2 changes: 1 addition & 1 deletion test/unit/dialects/mysql/query.test.js
@@ -1,7 +1,7 @@
'use strict';

const path = require('path');
const Query = require('sequelize/lib/dialects/mysql/query.js');
const Query = require('sequelize/lib/dialects/mysql/query');
const Support = require(path.join(__dirname, './../../support'));
const chai = require('chai');
const sinon = require('sinon');
Expand Down
2 changes: 1 addition & 1 deletion test/unit/dialects/snowflake/query.test.js
@@ -1,7 +1,7 @@
'use strict';

const path = require('path');
const Query = require('sequelize/lib/dialects/snowflake/query.js');
const Query = require('sequelize/lib/dialects/snowflake/query');
const Support = require(path.join(__dirname, './../../support'));
const chai = require('chai');
const sinon = require('sinon');
Expand Down

0 comments on commit 1ecdaf9

Please sign in to comment.