diff --git a/README.md b/README.md index 8e61d787..004de12d 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,7 @@ Otherwise the plugin should work in watch mode. Make sure to run a normal build * TypeScript `2.4+` * Rollup `1.26.3+` -* Node `6.4.0+` (basic ES6 support) +* Node `12.2.0+` (to [support `createRequire`](https://nodejs.org/api/module.html#modulecreaterequirefilename)) ### Reporting bugs and Contributing diff --git a/package-lock.json b/package-lock.json index 0d5309cf..457c74a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,12 +19,13 @@ "@jest/globals": "^28.0.3", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-node-resolve": "13.2.1", + "@rollup/plugin-replace": "^5.0.0", "@types/find-cache-dir": "^2.0.0", "@types/fs-extra": "8.0.1", "@types/graphlib": "2.1.7", "@types/jest": "^27.5.0", "@types/lodash": "4.14.161", - "@types/node": "8.0.47", + "@types/node": "^20.4.2", "@types/object-hash": "1.3.3", "@types/semver": "7.3.12", "colors": "1.4.0", @@ -34,7 +35,6 @@ "object-hash": "3.0.0", "rimraf": "3.0.2", "rollup": "^2.70.2", - "rollup-plugin-re": "1.0.7", "rollup-plugin-typescript2": "0.35.0", "ts-jest": "^28.0.0", "tslint": "6.1.3", @@ -1354,9 +1354,43 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.0.tgz", + "integrity": "sha512-TiPmjMuBjQM+KLWK16O5TAM/eW4yXBYyQ17FbfeNzBC1t2kzX2aXoa8AlS9XTSmg6/2TNvkER1lMEEeN4Lhavw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "magic-string": "^0.26.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@rollup/pluginutils": { - "version": "4.1.2", - "license": "MIT", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -1506,9 +1540,10 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "8.0.47", - "dev": true, - "license": "MIT" + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==", + "dev": true }, "node_modules/@types/object-hash": { "version": "1.3.3", @@ -2138,11 +2173,6 @@ "node": ">=4" } }, - "node_modules/estree-walker": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5144,23 +5174,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-re": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "magic-string": "^0.16.0", - "rollup-pluginutils": "^2.0.1" - } - }, - "node_modules/rollup-plugin-re/node_modules/magic-string": { - "version": "0.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "vlq": "^0.2.1" - } - }, "node_modules/rollup-plugin-typescript2": { "version": "0.35.0", "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.35.0.tgz", @@ -5178,14 +5191,6 @@ "typescript": ">=2.4.0" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^0.6.1" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5645,11 +5650,6 @@ "node": ">=10.12.0" } }, - "node_modules/vlq": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -6781,8 +6781,31 @@ } } }, + "@rollup/plugin-replace": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.0.tgz", + "integrity": "sha512-TiPmjMuBjQM+KLWK16O5TAM/eW4yXBYyQ17FbfeNzBC1t2kzX2aXoa8AlS9XTSmg6/2TNvkER1lMEEeN4Lhavw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.1", + "magic-string": "^0.26.4" + }, + "dependencies": { + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, "@rollup/pluginutils": { - "version": "4.1.2", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "requires": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -6925,7 +6948,9 @@ "dev": true }, "@types/node": { - "version": "8.0.47", + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==", "dev": true }, "@types/object-hash": { @@ -7384,10 +7409,6 @@ "version": "4.0.1", "dev": true }, - "estree-walker": { - "version": "0.6.1", - "dev": true - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -9591,23 +9612,6 @@ "fsevents": "~2.3.2" } }, - "rollup-plugin-re": { - "version": "1.0.7", - "dev": true, - "requires": { - "magic-string": "^0.16.0", - "rollup-pluginutils": "^2.0.1" - }, - "dependencies": { - "magic-string": { - "version": "0.16.0", - "dev": true, - "requires": { - "vlq": "^0.2.1" - } - } - } - }, "rollup-plugin-typescript2": { "version": "0.35.0", "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.35.0.tgz", @@ -9621,13 +9625,6 @@ "tslib": "^2.4.0" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -9947,10 +9944,6 @@ "convert-source-map": "^1.6.0" } }, - "vlq": { - "version": "0.2.3", - "dev": true - }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", diff --git a/package.json b/package.json index 8fac4c71..c3df3830 100644 --- a/package.json +++ b/package.json @@ -22,15 +22,19 @@ "homepage": "https://github.com/ezolenko/rollup-plugin-typescript2", "author": "@ezolenko", "scripts": { - "prebuild": "rimraf dist/*", - "build": "rimraf dist/* && rollup -c", - "watch": "rollup -c rollup.config.self.js -w ", - "build-self": "rimraf dist/* && rollup -c rollup.config.self.js", + "prebuild": "rimraf dist/* build-self/*.ts build-self/*.*js", + "build": "rollup -c rollup.config.ts --configPlugin typescript2=\"{ tsconfigOverride: { compilerOptions: { resolveJsonModule: true } } }\"", + "_build-self": "rollup -c rollup.config.self.ts --configPlugin ./build-self/index.mjs=\"{ tsconfigOverride: { compilerOptions: { resolveJsonModule: true } } }\"", + "build-self": "rimraf dist/* && npm run _build-self", + "watch": "npm run _build-self -- -w ", "lint": "tslint -c ./tslint.json src/*.ts __tests__/*.ts ./*.js", "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage" }, + "engines": { + "node": ">=12.2.0" + }, "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", @@ -46,12 +50,13 @@ "@jest/globals": "^28.0.3", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-node-resolve": "13.2.1", + "@rollup/plugin-replace": "^5.0.0", "@types/find-cache-dir": "^2.0.0", "@types/fs-extra": "8.0.1", "@types/graphlib": "2.1.7", "@types/jest": "^27.5.0", "@types/lodash": "4.14.161", - "@types/node": "8.0.47", + "@types/node": "^20.4.2", "@types/object-hash": "1.3.3", "@types/semver": "7.3.12", "colors": "1.4.0", @@ -61,7 +66,6 @@ "object-hash": "3.0.0", "rimraf": "3.0.2", "rollup": "^2.70.2", - "rollup-plugin-re": "1.0.7", "rollup-plugin-typescript2": "0.35.0", "ts-jest": "^28.0.0", "tslint": "6.1.3", diff --git a/rollup.config.base.js b/rollup.config.base.ts similarity index 75% rename from rollup.config.base.js rename to rollup.config.base.ts index 2883294f..fae468d4 100644 --- a/rollup.config.base.js +++ b/rollup.config.base.ts @@ -1,8 +1,8 @@ +import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; -import replace from "rollup-plugin-re"; -const pkg = require("./package.json"); +import pkg from "./package.json"; export default { input: "src/index.ts", @@ -26,14 +26,16 @@ export default { plugins: [ replace ({ - replaces: + preventAssignment: true, // remove default warning + delimiters: ["", ""], // replace all instances + values: { "$TS_VERSION_RANGE": pkg.peerDependencies.typescript, "$ROLLUP_VERSION_RANGE": pkg.peerDependencies.rollup, "$RPT2_VERSION": pkg.version, }, }), - resolve({ jsnext: true, preferBuiltins: true, }), + resolve({ preferBuiltins: true, mainFields: ["module", "jsnext:main", "main"] }), commonjs ({ include: "node_modules/**", @@ -57,7 +59,7 @@ export default { }, { format: "es", - file: "build-self/" + pkg.module, + file: "build-self/index.mjs", sourcemap: true, banner: "/* eslint-disable */", exports: "auto", diff --git a/rollup.config.self.js b/rollup.config.self.ts similarity index 69% rename from rollup.config.self.js rename to rollup.config.self.ts index aed52490..d4275e46 100644 --- a/rollup.config.self.js +++ b/rollup.config.self.ts @@ -1,4 +1,4 @@ -import ts from "./build-self/dist/rollup-plugin-typescript2.es"; +import ts from "./build-self/index"; import config from "./rollup.config.base"; diff --git a/rollup.config.js b/rollup.config.ts similarity index 100% rename from rollup.config.js rename to rollup.config.ts diff --git a/src/index.ts b/src/index.ts index 694b15a2..f99555d2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ +import { createRequire } from "module"; import { relative, dirname, normalize as pathNormalize, resolve } from "path"; import * as tsTypes from "typescript"; import { PluginImpl, InputOptions, TransformResult, SourceMap, Plugin } from "rollup"; @@ -16,7 +17,9 @@ import { convertDiagnostic, printDiagnostics } from "./diagnostics"; import { TSLIB, TSLIB_VIRTUAL, tslibSource, tslibVersion } from "./tslib"; import { createFilter } from "./get-options-overrides"; -// these use globals during testing and are substituted by rollup-plugin-re during builds +const require = createRequire(import.meta.url); + +// these use globals during testing and are substituted by @rollup/plugin-replace during builds const TS_VERSION_RANGE = (global as any)?.rpt2__TS_VERSION_RANGE || "$TS_VERSION_RANGE"; const ROLLUP_VERSION_RANGE = (global as any)?.rpt2__ROLLUP_VERSION_RANGE || "$ROLLUP_VERSION_RANGE"; const RPT2_VERSION = (global as any)?.rpt2__ROLLUP_VERSION_RANGE || "$RPT2_VERSION"; diff --git a/src/rollingcache.ts b/src/rollingcache.ts index b24ed65a..7613ad2f 100644 --- a/src/rollingcache.ts +++ b/src/rollingcache.ts @@ -1,9 +1,11 @@ import { existsSync, readdirSync, renameSync } from "fs"; -import { emptyDirSync, ensureFileSync, readJsonSync, removeSync, writeJsonSync } from "fs-extra"; +import fsExtra from "fs-extra"; // TODO: replace with fs-extra/esm once we support node16+ moduleResolution import * as _ from "lodash"; import { ICache } from "./icache"; +const { emptyDirSync, ensureFileSync, readJsonSync, removeSync, writeJsonSync } = fsExtra; // TODO: per above, replace as named exports once we support node16+ moduleResolution + /** * Saves data in new cache folder or reads it from old one. * Avoids perpetually growing cache and situations when things need to consider changed and then reverted data to be changed. diff --git a/src/tslib.ts b/src/tslib.ts index 1c7f9362..2ed393c5 100644 --- a/src/tslib.ts +++ b/src/tslib.ts @@ -1,3 +1,4 @@ +import { createRequire } from "module"; import { readFileSync } from "fs"; // The injected id for helpers. @@ -6,6 +7,8 @@ export const TSLIB_VIRTUAL = "\0tslib.js"; export let tslibSource: string; export let tslibVersion: string; +const require = createRequire(import.meta.url); + try { // tslint:disable-next-line:no-string-literal no-var-requires