Skip to content

Commit

Permalink
Fix types ESM module resolution (#170)
Browse files Browse the repository at this point in the history
* Fix types ESM module resolution

* Retain .js extension

---------

Co-authored-by: 101arrowz <arjunbarrett@gmail.com>
  • Loading branch information
Methuselah96 and 101arrowz committed Sep 3, 2023
1 parent 1a7a484 commit c36d658
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 17 deletions.
43 changes: 32 additions & 11 deletions package.json
Expand Up @@ -12,23 +12,44 @@
},
"exports": {
".": {
"types": "./lib/index.d.ts",
"node": {
"import": "./esm/index.mjs",
"require": "./lib/node.cjs"
"import": {
"types": "./esm/index.d.mts",
"default": "./esm/index.mjs"
},
"require": {
"types": "./lib/node.d.cts",
"default": "./lib/node.cjs"
}
},
"import": "./esm/browser.js",
"require": "./lib/index.cjs"
"import": {
"types": "./esm/browser.d.ts",
"default": "./esm/browser.js"
},
"require": {
"types": "./lib/browser.d.cts",
"default": "./lib/browser.cjs"
}
},
"./node": {
"types": "./lib/index.d.ts",
"import": "./esm/index.mjs",
"require": "./lib/node.cjs"
"import": {
"types": "./esm/index.d.mts",
"default": "./esm/index.mjs"
},
"require": {
"types": "./lib/node.d.cts",
"default": "./lib/node.cjs"
}
},
"./browser": {
"types": "./lib/index.d.ts",
"import": "./esm/browser.js",
"require": "./lib/browser.cjs"
"import": {
"types": "./esm/browser.d.ts",
"default": "./esm/browser.js"
},
"require": {
"types": "./lib/browser.d.cts",
"default": "./lib/browser.cjs"
}
}
},
"targets": {
Expand Down
18 changes: 12 additions & 6 deletions scripts/rewriteBuilds.ts
@@ -1,13 +1,14 @@
import { readFileSync, writeFileSync, unlinkSync, renameSync } from 'fs';
import { readFileSync, writeFileSync, unlinkSync } from 'fs';
import { join } from 'path';
const atClass = /\/\*\* \@class \*\//g, pure = '/*#__PURE__*/';
const esModule = /exports.__esModule = true;\n/;
const esModule = /exports\.__esModule = true;\n/;
const libDir = join(__dirname, '..', 'lib');
const libIndex = join(libDir, 'index.js');
const lib = readFileSync(libIndex, 'utf-8')
.replace(atClass, pure)
.replace(esModule, '')
.replace(/exports\.(.*) = void 0;\n/, '');
const libTypes = readFileSync(join(libDir, 'index.d.ts'), 'utf-8');

writeFileSync(libIndex, lib);
const esmDir = join(__dirname, '..', 'esm');
Expand All @@ -22,18 +23,23 @@ const wk = readFileSync(esmWK, 'utf-8'),
writeFileSync(join(libDir, 'worker.cjs'), readFileSync(join(libDir, 'worker.js'), 'utf-8').replace(esModule, ''));
writeFileSync(join(libDir, 'node-worker.cjs'), readFileSync(join(libDir, 'node-worker.js'), 'utf-8').replace(esModule, ''));
unlinkSync(esmIndex), unlinkSync(esmWK), unlinkSync(esmNWK), unlinkSync(libIndex), unlinkSync(libWK), unlinkSync(libNWK);
unlinkSync(join(libDir, 'worker.d.ts')), unlinkSync(join(libDir, 'node-worker.d.ts'));
const workerImport = /import (.*) from '\.\/node-worker';/;
const workerRequire = /var (.*) = require\("\.\/node-worker"\);/;
unlinkSync(join(libDir, 'index.d.ts')), unlinkSync(join(libDir, 'worker.d.ts')), unlinkSync(join(libDir, 'node-worker.d.ts'));
const workerImport = /import (.*?) from '\.\/node-worker';/;
const workerRequire = /var (.*?) = require\("\.\/node-worker"\);/;
const defaultExport = /export default/;
writeFileSync(join(esmDir, 'index.mjs'), "import { createRequire } from 'module';\nvar require = createRequire('/');\n" + esm.replace(workerImport, name => nwk.replace(defaultExport, `var ${name.slice(7, name.indexOf(' ', 8))} =`)));
writeFileSync(join(esmDir, 'index.d.mts'), libTypes);
writeFileSync(join(esmDir, 'browser.js'), esm.replace(workerImport, name => wk.replace(defaultExport, `var ${name.slice(7, name.indexOf(' ', 8))} =`)));
writeFileSync(join(esmDir, 'browser.d.ts'), libTypes);
writeFileSync(join(libDir, 'node.cjs'), lib.replace(workerRequire, name => {
name = name.slice(4, name.indexOf(' ', 5));
return nwk.replace(defaultExport, `var ${name} = {};\n${name}["default"] =`)
}));
writeFileSync(join(libDir, 'node.d.cts'), libTypes);
writeFileSync(join(libDir, 'browser.cjs'), lib.replace(workerRequire, name => {
name = name.slice(4, name.indexOf(' ', 5));
return wk.replace(defaultExport, `var ${name} = {};\n${name}["default"] =`)
}));
writeFileSync(join(libDir, 'index.cjs'), lib.replace(workerRequire, name => `var ${name.slice(4, name.indexOf(' ', 5))} = require("./node-worker.cjs");`));
writeFileSync(join(libDir, 'browser.d.cts'), libTypes);
writeFileSync(join(libDir, 'index.cjs'), lib.replace(workerRequire, name => `var ${name.slice(4, name.indexOf(' ', 5))} = require("./node-worker.cjs");`));
writeFileSync(join(libDir, 'index.d.ts'), libTypes);

0 comments on commit c36d658

Please sign in to comment.