diff --git a/.eslintrc.js b/.eslintrc.js index 6e749b1..d440a60 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,11 +1,9 @@ -'use strict'; - module.exports = { root: true, parserOptions: { - ecmaVersion: 2018, - sourceType: 'script', + ecmaVersion: 2021, + sourceType: 'module', }, plugins: ['prettier'], extends: ['plugin:prettier/recommended'], diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3f8250..ab1d9d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,6 +66,8 @@ jobs: cache: yarn - run: yarn install --frozen-lockfile --ignore-engines - run: yarn add broccoli@${{matrix.broccoli-version}} --ignore-engines + - run: node -v + - run: yarn tsc -v - run: yarn test windows-test: diff --git a/package.json b/package.json index 3c20cf9..be96d70 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "keywords": [ "broccoli-plugin" ], + "type": "module", "repository": { "type": "git", "url": "https://github.com/broccolijs/broccoli-plugin" @@ -39,7 +40,7 @@ "@types/chai": "^4.2.15", "@types/glob": "^8.0.0", "@types/mocha": "^8.2.1", - "@types/node": "^14.14.33", + "@types/node": "^20.0.0", "@types/symlink-or-copy": "^1.2.0", "@typescript-eslint/eslint-plugin": "^4.17.0", "@typescript-eslint/parser": "^4.17.0", @@ -56,7 +57,7 @@ "mocha": "^8.3.1", "prettier": "^2.2.1", "release-plan": "^0.17.4", - "typescript": "^4.2.3" + "typescript": "^5.9.3" }, "packageManager": "pnpm@10.30.1+sha256.bc8bb877378eab6a8a83114eeb6a31ef88528db4ab5570299baba8fa54da2375", "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1aeb725..6dd98de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,17 +40,17 @@ importers: specifier: ^8.2.1 version: 8.2.3 '@types/node': - specifier: ^14.14.33 - version: 14.18.63 + specifier: ^20.0.0 + version: 20.19.33 '@types/symlink-or-copy': specifier: ^1.2.0 version: 1.2.2 '@typescript-eslint/eslint-plugin': specifier: ^4.17.0 - version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5) + version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.9.3))(eslint@7.32.0)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^4.17.0 - version: 4.33.0(eslint@7.32.0)(typescript@4.9.5) + version: 4.33.0(eslint@7.32.0)(typescript@5.9.3) broccoli: specifier: ^4.0.0 version: 4.0.0 @@ -91,8 +91,8 @@ importers: specifier: ^0.17.4 version: 0.17.4 typescript: - specifier: ^4.2.3 - version: 4.9.5 + specifier: ^5.9.3 + version: 5.9.3 packages: @@ -282,8 +282,8 @@ packages: '@types/mocha@8.2.3': resolution: {integrity: sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==} - '@types/node@14.18.63': - resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + '@types/node@20.19.33': + resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==} '@types/rimraf@2.0.5': resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} @@ -2093,9 +2093,9 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} hasBin: true uglify-js@3.19.3: @@ -2106,6 +2106,9 @@ packages: underscore.string@3.3.6: resolution: {integrity: sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -2451,12 +2454,12 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 14.18.63 + '@types/node': 20.19.33 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 14.18.63 + '@types/node': 20.19.33 '@types/json-schema@7.0.15': {} @@ -2466,19 +2469,21 @@ snapshots: '@types/mocha@8.2.3': {} - '@types/node@14.18.63': {} + '@types/node@20.19.33': + dependencies: + undici-types: 6.21.0 '@types/rimraf@2.0.5': dependencies: '@types/glob': 8.1.0 - '@types/node': 14.18.63 + '@types/node': 20.19.33 '@types/symlink-or-copy@1.2.2': {} - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5))(eslint@7.32.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.9.3))(eslint@7.32.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5) - '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@5.9.3) + '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 4.33.0 debug: 4.4.3 eslint: 7.32.0 @@ -2486,18 +2491,18 @@ snapshots: ignore: 5.3.2 regexpp: 3.2.0 semver: 7.7.4 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.9.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@4.9.5)': + '@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@5.9.3)': dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.9.3) eslint: 7.32.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@7.32.0) @@ -2505,15 +2510,15 @@ snapshots: - supports-color - typescript - '@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@4.9.5)': + '@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.9.3) debug: 4.4.3 eslint: 7.32.0 optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2524,7 +2529,7 @@ snapshots: '@typescript-eslint/types@4.33.0': {} - '@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@4.33.0(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 @@ -2532,9 +2537,9 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.4 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.9.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -4404,10 +4409,10 @@ snapshots: tslib@1.14.1: {} - tsutils@3.21.0(typescript@4.9.5): + tsutils@3.21.0(typescript@5.9.3): dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 5.9.3 type-check@0.4.0: dependencies: @@ -4417,7 +4422,7 @@ snapshots: type-fest@0.20.2: {} - typescript@4.9.5: {} + typescript@5.9.3: {} uglify-js@3.19.3: optional: true @@ -4427,6 +4432,8 @@ snapshots: sprintf-js: 1.1.3 util-deprecate: 1.0.2 + undici-types@6.21.0: {} + unicorn-magic@0.3.0: {} unique-filename@1.1.1: diff --git a/prettier.config.js b/prettier.config.js index 978b4d5..658367d 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports = { singleQuote: true, trailingComma: 'es5', diff --git a/src/index.ts b/src/index.ts index 76731e3..8a8e82a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,12 +6,15 @@ import { CallbackObject, } from 'broccoli-node-api'; -import { MapSeriesIterator, PluginOptions } from './interfaces'; +import type { MapSeriesIterator, PluginOptions } from './interfaces'; -import ReadCompat from './read_compat'; +import ReadCompat from './read_compat.js'; import { FSOutput } from 'broccoli-output-wrapper'; -import buildOutputWrapper = require('broccoli-output-wrapper'); -import FSMerger = require('fs-merger'); + +// @ts-expect-error the types are declared wrong upstream here +import buildOutputWrapper from 'broccoli-output-wrapper'; +// @ts-expect-error the types are declared wrong upstream here +import FSMerger from 'fs-merger'; const BROCCOLI_FEATURES = Object.freeze({ persistentOutputFlag: true, @@ -54,7 +57,7 @@ function _checkBuilderFeatures(builderFeatures: FeatureSet) { } } -class Plugin implements TransformNode { +export default class Plugin implements TransformNode { private _name: string; private _annotation?: string; private _baseConstructorCalled: boolean; @@ -317,5 +320,3 @@ class Plugin implements TransformNode { this._readCompat = new ReadCompat(this); } } - -export = Plugin; diff --git a/src/read_compat.ts b/src/read_compat.ts index eebc4ab..0a81a1f 100644 --- a/src/read_compat.ts +++ b/src/read_compat.ts @@ -1,15 +1,15 @@ -import Plugin = require('./index'); -import fs = require('fs'); -import path = require('path'); -import quickTemp = require('quick-temp'); -import mapSeries = require('promise-map-series'); -import symlinkOrCopy = require('symlink-or-copy'); +import Plugin from './index'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as quickTemp from 'quick-temp'; +import mapSeries from 'promise-map-series'; +import * as symlinkOrCopy from 'symlink-or-copy'; const symlinkOrCopySync = symlinkOrCopy.sync; import { InputNode, TransformNodeInfo, CallbackObject } from 'broccoli-node-api'; import { MapSeriesIterator } from './interfaces'; -interface PluginWithDescription extends Plugin { +export interface PluginWithDescription extends Omit { description?: string; } diff --git a/test/integration_test.js b/test/integration_test.js index d3cf5e3..3361ae4 100644 --- a/test/integration_test.js +++ b/test/integration_test.js @@ -1,18 +1,22 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const fixturify = require('fixturify'); -const Fixturify = require('broccoli-fixturify'); -const Plugin = require('../dist/index'); -const chai = require('chai'), - expect = chai.expect; -const chaiAsPromised = require('chai-as-promised'); -chai.use(chaiAsPromised); -const broccoli = require('broccoli'); +import fs from 'fs'; +import path from 'path'; +import fixturify from 'fixturify'; +import Fixturify from 'broccoli-fixturify'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import broccoli from 'broccoli'; +import quickTemp from 'quick-temp'; +import symlinkOrCopy from 'symlink-or-copy'; + +import Plugin from '../dist/index.js'; + +// this is to avoid having to update eslint to support import attributes to import a json file +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); const broccoliPkg = require('broccoli/package.json'); -const quickTemp = require('quick-temp'); -const symlinkOrCopy = require('symlink-or-copy'); + +const expect = chai.expect; +chai.use(chaiAsPromised); const broccoliVersion = broccoliPkg.version; diff --git a/test/unit_test.js b/test/unit_test.js index 658c2a1..94812a3 100644 --- a/test/unit_test.js +++ b/test/unit_test.js @@ -1,9 +1,9 @@ -'use strict'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; -const Plugin = require('../dist/index'); -const chai = require('chai'), - expect = chai.expect; -const chaiAsPromised = require('chai-as-promised'); +import Plugin from '../dist/index.js'; + +const expect = chai.expect; chai.use(chaiAsPromised); class NoopPlugin extends Plugin { diff --git a/tsconfig.json b/tsconfig.json index 8fa652e..eb406a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "declaration": true, "strict": true, "moduleResolution": "node", - "module": "commonjs", + "module": "es2022", "sourceMap": true, "target": "es2017", "baseUrl": ".", diff --git a/types/promise-map-series.d.ts b/types/promise-map-series.d.ts index 70f1492..40e1ac5 100644 --- a/types/promise-map-series.d.ts +++ b/types/promise-map-series.d.ts @@ -1,9 +1,7 @@ import { MapSeriesIterator } from '../src/interfaces'; -declare function mapSeries( +export default function mapSeries( array: T[], interator: MapSeriesIterator, thisArg?: unknown ): Promise; - -export = mapSeries; diff --git a/yarn.lock b/yarn.lock index 1c51655..f8dbcdf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -353,11 +353,18 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.1.tgz#f3f3ae4590c5386fc7c543aae9b78d4cf30ffee9" integrity sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ== -"@types/node@*", "@types/node@^14.14.33": +"@types/node@*": version "14.14.33" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g== +"@types/node@^20.0.0": + version "20.19.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.33.tgz#ac8364c623b72d43125f0e7dd722bbe968f0c65e" + integrity sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw== + dependencies: + undici-types "~6.21.0" + "@types/rimraf@^2.0.3": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46" @@ -3682,10 +3689,10 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typescript@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4: version "3.19.3" @@ -3708,6 +3715,11 @@ underscore.string@~3.3.4: sprintf-js "^1.0.3" util-deprecate "^1.0.2" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + unicorn-magic@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104"