Skip to content

Commit 1ecdaf9

Browse files
ephysWikiRik
andauthored
fix: allow deep imports (#13795)
* fix: allow deep imports * fix: fix export declarations * test: fix deep-exports test Co-authored-by: Rik Smale <[email protected]>
1 parent 8acc14f commit 1ecdaf9

7 files changed

Lines changed: 55 additions & 9 deletions

File tree

package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@
2020
"types": "./dist",
2121
"type": "commonjs",
2222
"exports": {
23-
"import": "./dist/index.mjs",
24-
"require": "./dist/index.js"
23+
".": {
24+
"import": "./dist/index.mjs",
25+
"require": "./dist/index.js"
26+
},
27+
"./lib/*": "./dist/lib/*.js",
28+
"./lib/errors": "./dist/lib/errors/index.js",
29+
"./*": "./*"
2530
},
2631
"engines": {
2732
"node": ">=10.0.0"

test/registerEsbuild.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,20 @@ const esbuild = require('esbuild');
55
const moduleAlias = require('module-alias');
66
const sourceMapSupport = require('source-map-support');
77

8-
const distDir = path.join(__dirname, '../dist');
9-
// make imports from `sequelize/` go to `../dist/`
10-
moduleAlias.addAlias('sequelize', distDir);
8+
const nodeMajorVersion = Number(process.version.match(/(?<=^v)\d+/));
9+
10+
// for node >= 12, we use the package.json "export" property to
11+
// map imports to dist (except package.json)
12+
// so "sequelize/lib/errors" is actually mapped to "sequelize/dist/errors/index.js"
13+
// (see package.json).
14+
if (nodeMajorVersion < 12) {
15+
const jsonFile = path.join(__dirname, '..', 'package.json');
16+
moduleAlias.addAlias('sequelize/package.json', jsonFile);
17+
18+
const distDir = path.join(__dirname, '../dist');
19+
// make imports from `sequelize/` go to `../dist/`
20+
moduleAlias.addAlias('sequelize', distDir);
21+
}
1122

1223
const maps = {};
1324

test/unit/deep-exports.test.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const chai = require('chai'),
2+
expect = chai.expect;
3+
4+
/**
5+
* Tests whether users can import files deeper than "sequelize" (eg. "sequelize/package.json").
6+
* Context: https://github.com/sequelize/sequelize/issues/13787
7+
*/
8+
9+
const nodeMajorVersion = Number(process.version.match(/(?<=^v)\d+/));
10+
11+
describe('exports', () => {
12+
it('exposes /package.json', async () => {
13+
// TODO: uncomment test once https://nodejs.org/api/esm.html#json-modules are stable
14+
// if (nodeMajorVersion >= 16) {
15+
// await import('sequelize/package.json', {
16+
// assert: { type: 'json' }
17+
// });
18+
// }
19+
20+
require('sequelize/package.json');
21+
});
22+
23+
it('exposes lib files', async () => {
24+
if (nodeMajorVersion >= 12) {
25+
await import('sequelize/lib/model');
26+
}
27+
28+
require('sequelize/lib/model');
29+
});
30+
});

test/unit/dialects/abstract/query.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const path = require('path');
4-
const Query = require('sequelize/lib/dialects/abstract/query.js');
4+
const Query = require('sequelize/lib/dialects/abstract/query');
55
const Support = require(path.join(__dirname, './../../support'));
66
const chai = require('chai');
77
const { stub, match } = require('sinon');

test/unit/dialects/mssql/query.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const path = require('path');
4-
const Query = require('sequelize/lib/dialects/mssql/query.js');
4+
const Query = require('sequelize/lib/dialects/mssql/query');
55
const Support = require('../../support');
66
const dialect = Support.getTestDialect();
77
const sequelize = Support.sequelize;

test/unit/dialects/mysql/query.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const path = require('path');
4-
const Query = require('sequelize/lib/dialects/mysql/query.js');
4+
const Query = require('sequelize/lib/dialects/mysql/query');
55
const Support = require(path.join(__dirname, './../../support'));
66
const chai = require('chai');
77
const sinon = require('sinon');

test/unit/dialects/snowflake/query.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const path = require('path');
4-
const Query = require('sequelize/lib/dialects/snowflake/query.js');
4+
const Query = require('sequelize/lib/dialects/snowflake/query');
55
const Support = require(path.join(__dirname, './../../support'));
66
const chai = require('chai');
77
const sinon = require('sinon');

0 commit comments

Comments
 (0)