From 0dd2bd35968d80629d8605649e16e8246ce6b63e Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:17:40 +0700 Subject: [PATCH 01/10] Update dependencies and modernize --- .github/workflows/ci.yml | 8 ++-- .github/workflows/esm-lint.yml | 38 ++++++++++------- globals.d.ts | 10 ++--- index.ts | 77 ++++++++++++---------------------- package.json | 32 +++++++------- 5 files changed, 74 insertions(+), 91 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d181bb..2132400 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,8 @@ jobs: Lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 16 - name: install @@ -25,7 +25,7 @@ jobs: Test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: install run: npm ci || npm install - name: build @@ -36,7 +36,7 @@ jobs: Build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: install run: npm ci || npm install - name: build diff --git a/.github/workflows/esm-lint.yml b/.github/workflows/esm-lint.yml index 0205cd9..177737c 100644 --- a/.github/workflows/esm-lint.yml +++ b/.github/workflows/esm-lint.yml @@ -18,19 +18,19 @@ jobs: Pack: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - run: npm install - run: npm run build --if-present - run: npm pack --dry-run - run: npm pack | tail -1 | xargs -n1 tar -xzf - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: path: package Webpack: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 - run: npm install ./artifact - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - run: webpack --entry ./index.js @@ -39,35 +39,45 @@ jobs: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 - run: npm install ./artifact - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - - run: npx parcel build index.js + - run: npx parcel@2 build index.js - run: cat dist/index.js Rollup: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 - run: npm install ./artifact rollup@2 @rollup/plugin-node-resolve - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - run: npx rollup -p node-resolve index.js - Snowpack: + Vite: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 + - run: npm install ./artifact + - run: >- + echo '' > index.html + - run: npx vite build + - run: cat dist/assets/* + esbuild: + runs-on: ubuntu-latest + needs: Pack + steps: + - uses: actions/download-artifact@v3 - run: echo '{}' > package.json - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - run: npm install ./artifact - - run: npx snowpack@2 build - - run: cat build/web_modules/$NPM_MODULE_NAME.js + - run: npx esbuild --bundle index.js TypeScript: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 - - run: npm install ./artifact + - uses: actions/download-artifact@v3 + - run: npm install ./artifact && npm install -g @types/estree - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.ts - run: tsc index.ts - run: cat index.js @@ -75,8 +85,8 @@ jobs: runs-on: ubuntu-latest needs: Pack steps: - - uses: actions/download-artifact@v2 - - uses: actions/setup-node@v1 + - uses: actions/download-artifact@v3 + - uses: actions/setup-node@v3 with: node-version: 14.x - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.mjs diff --git a/globals.d.ts b/globals.d.ts index 5db4dca..6b388a1 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -1,18 +1,14 @@ -declare module 'dom-form-serializer/lib/serialize' { +declare module 'dom-form-serializer/dist/dom-form-serializer.mjs' { import {JsonObject} from 'type-fest'; - export default function serialize( + export function serialize( element: HTMLFormElement, options: { include?: string[]; } ): JSONValue; -} - -declare module 'dom-form-serializer/lib/deserialize' { - import {JsonObject} from 'type-fest'; - export default function deserialize( + export function deserialize( element: HTMLFormElement, serializedData: JsonObject, options?: { diff --git a/index.ts b/index.ts index 3d1d18d..5ff05b2 100644 --- a/index.ts +++ b/index.ts @@ -1,34 +1,25 @@ import {debounce} from 'throttle-debounce'; -import serialize from 'dom-form-serializer/lib/serialize'; -import deserialize from 'dom-form-serializer/lib/deserialize'; +import chromeP from 'webext-polyfill-kinda'; import {isBackground} from 'webext-detect-page'; +import {serialize, deserialize} from 'dom-form-serializer/dist/dom-form-serializer.mjs'; import {compressToEncodedURIComponent, decompressFromEncodedURIComponent} from 'lz-string'; async function shouldRunMigrations(): Promise { + const self = await chromeP.management?.getSelf(); + + // Always run migrations during development #25 + if (self?.installType === 'development') { + return true; + } + return new Promise(resolve => { - const callback = (installType: string): void => { - // Always run migrations during development #25 - if (installType === 'development') { - resolve(true); - return; - } + // Run migrations when the extension is installed or updated + chrome.runtime.onInstalled.addListener(() => { + resolve(true); + }); - // Run migrations when the extension is installed or updated - chrome.runtime.onInstalled.addListener(() => { - resolve(true); - }); - - // If `onInstalled` isn't fired, then migrations should not be run - setTimeout(resolve, 500, false); - }; - - if (chrome.management?.getSelf) { - chrome.management.getSelf(({installType}) => { - callback(installType); - }); - } else { - callback('unknown'); - } + // If `onInstalled` isn't fired, then migrations should not be run + setTimeout(resolve, 500, false); }); } @@ -113,8 +104,6 @@ class OptionsSync { this.storageName = storageName; this.defaults = defaults; this.storageType = storageType; - this._handleFormInput = debounce(300, this._handleFormInput.bind(this)); - this._handleStorageChangeOnForm = this._handleStorageChangeOnForm.bind(this); if (!logging) { this._log = () => {}; @@ -123,8 +112,8 @@ class OptionsSync { this._migrations = this._runMigrations(migrations); } - get storage(): chrome.storage.StorageArea { - return chrome.storage[this.storageType]; + get storage(): chromeP.storage.StorageArea { + return chromeP.storage[this.storageType]; } /** @@ -198,29 +187,14 @@ class OptionsSync { } private async _getAll(): Promise { - return new Promise((resolve, reject) => { - this.storage.get(this.storageName, result => { - if (chrome.runtime.lastError) { - reject(chrome.runtime.lastError); - } else { - resolve(this._decode(result[this.storageName])); - } - }); - }); + const result = await this.storage.get(this.storageName); + return this._decode(result[this.storageName]); } private async _setAll(newOptions: UserOptions): Promise { this._log('log', 'Saving options', newOptions); - return new Promise((resolve, reject) => { - this.storage.set({ - [this.storageName]: this._encode(newOptions), - }, () => { - if (chrome.runtime.lastError) { - reject(chrome.runtime.lastError); - } else { - resolve(); - } - }); + await this.storage.set({ + [this.storageName]: this._encode(newOptions), }); } @@ -266,7 +240,8 @@ class OptionsSync { } } - private async _handleFormInput({target}: Event): Promise { + // eslint-disable-next-line @typescript-eslint/member-ordering -- Needs to be near _handleFormSubmit + private readonly _handleFormInput = debounce(300, async ({target}: Event): Promise => { const field = target as HTMLInputElement; if (!field.name) { return; @@ -276,7 +251,7 @@ class OptionsSync { field.form!.dispatchEvent(new CustomEvent('options-sync:form-synced', { bubbles: true, })); - } + }); private _handleFormSubmit(event: Event): void { event.preventDefault(); @@ -312,7 +287,7 @@ class OptionsSync { return serialize(form, {include}); } - private _handleStorageChangeOnForm(changes: Record, areaName: string): void { + private readonly _handleStorageChangeOnForm = (changes: Record, areaName: string): void => { if ( areaName === this.storageType && changes[this.storageName] @@ -320,7 +295,7 @@ class OptionsSync { ) { this._updateForm(this._form!, this._decode(changes[this.storageName].newValue)); } - } + }; } export default OptionsSync; diff --git a/package.json b/package.json index 0bd4910..b3b974b 100644 --- a/package.json +++ b/package.json @@ -46,28 +46,30 @@ } }, "dependencies": { - "webext-detect-page": "^4.0.0" + "webext-detect-page": "^4.0.1", + "webext-polyfill-kinda": "^0.10.0" }, "devDependencies": { - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.1.3", - "@rollup/plugin-typescript": "^8.3.0", - "@sindresorhus/tsconfig": "^2.0.0", - "@types/chrome": "0.0.176", - "@types/estree": "^0.0.50", + "@rollup/plugin-commonjs": "^22.0.1", + "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-typescript": "^8.3.4", + "@sindresorhus/tsconfig": "^3.0.1", + "@types/chrome": "0.0.193", + "@types/firefox-webext-browser": "^94.0.1", "@types/lz-string": "^1.3.34", - "@types/throttle-debounce": "^2.1.0", - "ava": "^4.0.1", + "@types/throttle-debounce": "^5.0.0", + "ava": "^4.3.1", "dom-form-serializer": "^2.0.0", "lz-string": "^1.4.4", "npm-run-all": "^4.1.5", - "rollup": "^2.63.0", + "rollup": "^2.77.2", "rollup-plugin-terser": "^7.0.2", - "sinon": "^12.0.1", + "sinon": "^14.0.0", "sinon-chrome": "^3.0.1", - "throttle-debounce": "^3.0.1", - "type-fest": "^2.9.0", - "typescript": "^4.5.4", - "xo": "^0.47.0" + "throttle-debounce": "^5.0.0", + "tslib": "^2.4.0", + "type-fest": "^2.17.0", + "typescript": "^4.7.4", + "xo": "^0.51.0" } } From 07031fe427a0818d8fe8010dd3cb057c8db22749 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:27:41 +0700 Subject: [PATCH 02/10] c'mon typescript --- .github/workflows/esm-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/esm-lint.yml b/.github/workflows/esm-lint.yml index 177737c..db511e3 100644 --- a/.github/workflows/esm-lint.yml +++ b/.github/workflows/esm-lint.yml @@ -77,7 +77,7 @@ jobs: needs: Pack steps: - uses: actions/download-artifact@v3 - - run: npm install ./artifact && npm install -g @types/estree + - run: npm install ./artifact && npm install @types/estree - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.ts - run: tsc index.ts - run: cat index.js From f88a8493c54b5db33934d532dd3b0675ed930ddd Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:28:30 +0700 Subject: [PATCH 03/10] Stop bundling most dependencies --- package.json | 4 ++-- rollup.config.js | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b3b974b..0f16b32 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,8 @@ } }, "dependencies": { + "dom-form-serializer": "^2.0.0", + "throttle-debounce": "^5.0.0", "webext-detect-page": "^4.0.1", "webext-polyfill-kinda": "^0.10.0" }, @@ -59,14 +61,12 @@ "@types/lz-string": "^1.3.34", "@types/throttle-debounce": "^5.0.0", "ava": "^4.3.1", - "dom-form-serializer": "^2.0.0", "lz-string": "^1.4.4", "npm-run-all": "^4.1.5", "rollup": "^2.77.2", "rollup-plugin-terser": "^7.0.2", "sinon": "^14.0.0", "sinon-chrome": "^3.0.1", - "throttle-debounce": "^5.0.0", "tslib": "^2.4.0", "type-fest": "^2.17.0", "typescript": "^4.7.4", diff --git a/rollup.config.js b/rollup.config.js index e1238a2..592d867 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -12,6 +12,8 @@ const config = { external: [ // These are `type: module` packages so they don't need to be bundled 'webext-detect-page', + 'dom-form-serializer', + 'throttle-debounce', ], plugins: [ resolve(), From 7b7d6f479e473f86722002261f4bb990c533265d Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:33:07 +0700 Subject: [PATCH 04/10] c'mon rollup --- rollup.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index 592d867..89ca06a 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -12,7 +12,7 @@ const config = { external: [ // These are `type: module` packages so they don't need to be bundled 'webext-detect-page', - 'dom-form-serializer', + 'dom-form-serializer/dist/dom-form-serializer.mjs', 'throttle-debounce', ], plugins: [ From e6863070888d3d829a2ba0f6cfc507a4b9e1ed3f Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:34:58 +0700 Subject: [PATCH 05/10] Drop Terser (it only saves 1KB out of 26) --- package.json | 1 - rollup.config.js | 15 --------------- 2 files changed, 16 deletions(-) diff --git a/package.json b/package.json index 0f16b32..2ff521f 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "lz-string": "^1.4.4", "npm-run-all": "^4.1.5", "rollup": "^2.77.2", - "rollup-plugin-terser": "^7.0.2", "sinon": "^14.0.0", "sinon-chrome": "^3.0.1", "tslib": "^2.4.0", diff --git a/rollup.config.js b/rollup.config.js index 89ca06a..2e5e8b0 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,5 +1,4 @@ import typescript from '@rollup/plugin-typescript'; -import {terser} from 'rollup-plugin-terser'; import commonjs from '@rollup/plugin-commonjs'; import resolve from '@rollup/plugin-node-resolve'; @@ -21,20 +20,6 @@ const config = { typescript({ outDir: '.', }), - terser({ - toplevel: true, - output: { - comments: false, - beautify: true, - }, - mangle: false, - compress: { - join_vars: false, // eslint-disable-line camelcase - booleans: false, - expression: false, - sequences: false, - }, - }), ], }; From 38fa80fa9f9cb1eb7cb1f32a39ef538be2fa1a1b Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:40:46 +0700 Subject: [PATCH 06/10] Lint cleanup --- package.json | 12 ++++++------ test/{_fixtures.js => _env.js} | 0 test/index.js | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) rename test/{_fixtures.js => _env.js} (100%) diff --git a/package.json b/package.json index 2ff521f..4bd36c7 100644 --- a/package.json +++ b/package.json @@ -35,16 +35,16 @@ "webextensions" ], "rules": { - "@typescript-eslint/no-unsafe-call": "off", "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-duplicate-imports": "off", "@typescript-eslint/no-dynamic-delete": "off", - "@typescript-eslint/no-empty-function": "off", - "import/no-duplicates": "off", - "import/no-unassigned-import": "off" + "@typescript-eslint/no-empty-function": "off" } }, + "ava": { + "require": [ + "./test/_env.js" + ] + }, "dependencies": { "dom-form-serializer": "^2.0.0", "throttle-debounce": "^5.0.0", diff --git a/test/_fixtures.js b/test/_env.js similarity index 100% rename from test/_fixtures.js rename to test/_env.js diff --git a/test/index.js b/test/index.js index 50d5750..c8315e8 100644 --- a/test/index.js +++ b/test/index.js @@ -1,4 +1,3 @@ -import './_fixtures.js'; import test from 'ava'; import lzString from 'lz-string'; import OptionsSync from '../index.js'; From 175f2891e329a507cac66dcae312cf90f2ce0b62 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:53:47 +0700 Subject: [PATCH 07/10] =?UTF-8?q?Do=20we=20need=20rollup=20at=20all=3F=20?= =?UTF-8?q?=F0=9F=A4=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollup.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/rollup.config.js b/rollup.config.js index 2e5e8b0..ada52a4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -13,6 +13,7 @@ const config = { 'webext-detect-page', 'dom-form-serializer/dist/dom-form-serializer.mjs', 'throttle-debounce', + 'lz-string', ], plugins: [ resolve(), From 56c968519b20d0f117b39ad40dc262d151986c27 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:56:50 +0700 Subject: [PATCH 08/10] /2 --- index.ts | 5 ++++- package.json | 2 +- tsconfig.json | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/index.ts b/index.ts index 5ff05b2..3ae4dcf 100644 --- a/index.ts +++ b/index.ts @@ -2,7 +2,10 @@ import {debounce} from 'throttle-debounce'; import chromeP from 'webext-polyfill-kinda'; import {isBackground} from 'webext-detect-page'; import {serialize, deserialize} from 'dom-form-serializer/dist/dom-form-serializer.mjs'; -import {compressToEncodedURIComponent, decompressFromEncodedURIComponent} from 'lz-string'; +import LZString from 'lz-string'; + +// eslint-disable-next-line @typescript-eslint/naming-convention -- CJS in ESM imports +const {compressToEncodedURIComponent, decompressFromEncodedURIComponent} = LZString; async function shouldRunMigrations(): Promise { const self = await chromeP.management?.getSelf(); diff --git a/package.json b/package.json index 4bd36c7..3430165 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "index.d.ts" ], "scripts": { - "build": "rollup -c", + "build": "tsc", "prepack": "rollup -c", "test": "run-p build ava xo", "watch": "rollup -c --watch", diff --git a/tsconfig.json b/tsconfig.json index 47a7f4d..6680c65 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "@sindresorhus/tsconfig/tsconfig.json", "compilerOptions": { - "target": "es2020" + "target": "es2020", + "outDir": "." }, "files": [ "globals.d.ts", From 0518efa57796c15304d5ae06666340b8ca4f2977 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 13:58:30 +0700 Subject: [PATCH 09/10] Drop rollup properly --- package.json | 12 +++--------- rollup.config.js | 27 --------------------------- 2 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 rollup.config.js diff --git a/package.json b/package.json index 3430165..308d324 100644 --- a/package.json +++ b/package.json @@ -16,16 +16,15 @@ "author": "Federico Brigante (https://fregante.com)", "type": "module", "main": "index.js", - "module": "index.js", "files": [ "index.js", "index.d.ts" ], "scripts": { "build": "tsc", - "prepack": "rollup -c", + "prepack": "tsc", "test": "run-p build ava xo", - "watch": "rollup -c --watch", + "watch": "tsc --watch", "ava": "ava", "xo": "xo" }, @@ -47,26 +46,21 @@ }, "dependencies": { "dom-form-serializer": "^2.0.0", + "lz-string": "^1.4.4", "throttle-debounce": "^5.0.0", "webext-detect-page": "^4.0.1", "webext-polyfill-kinda": "^0.10.0" }, "devDependencies": { - "@rollup/plugin-commonjs": "^22.0.1", - "@rollup/plugin-node-resolve": "^13.3.0", - "@rollup/plugin-typescript": "^8.3.4", "@sindresorhus/tsconfig": "^3.0.1", "@types/chrome": "0.0.193", "@types/firefox-webext-browser": "^94.0.1", "@types/lz-string": "^1.3.34", "@types/throttle-debounce": "^5.0.0", "ava": "^4.3.1", - "lz-string": "^1.4.4", "npm-run-all": "^4.1.5", - "rollup": "^2.77.2", "sinon": "^14.0.0", "sinon-chrome": "^3.0.1", - "tslib": "^2.4.0", "type-fest": "^2.17.0", "typescript": "^4.7.4", "xo": "^0.51.0" diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index ada52a4..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,27 +0,0 @@ -import typescript from '@rollup/plugin-typescript'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; - -const config = { - input: 'index.ts', - output: { - format: 'esm', - dir: '.', - }, - external: [ - // These are `type: module` packages so they don't need to be bundled - 'webext-detect-page', - 'dom-form-serializer/dist/dom-form-serializer.mjs', - 'throttle-debounce', - 'lz-string', - ], - plugins: [ - resolve(), - commonjs(), - typescript({ - outDir: '.', - }), - ], -}; - -export default config; From f567108e33e0ba9a7520b7c347204545dc17a8bf Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 28 Jul 2022 14:01:37 +0700 Subject: [PATCH 10/10] We break pure Rollup; Exclude rollup from testing --- .github/workflows/esm-lint.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/esm-lint.yml b/.github/workflows/esm-lint.yml index db511e3..f5802fd 100644 --- a/.github/workflows/esm-lint.yml +++ b/.github/workflows/esm-lint.yml @@ -4,6 +4,7 @@ env: # FILE GENERATED WITH: npx ghat fregante/ghatemplates/esm-lint # SOURCE: https://github.com/fregante/ghatemplates +# OPTIONS: {"exclude":["jobs.Rollup"]} name: ESM on: @@ -44,14 +45,6 @@ jobs: - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - run: npx parcel@2 build index.js - run: cat dist/index.js - Rollup: - runs-on: ubuntu-latest - needs: Pack - steps: - - uses: actions/download-artifact@v3 - - run: npm install ./artifact rollup@2 @rollup/plugin-node-resolve - - run: echo "${{ env.IMPORT_TEXT }} '${{ env.NPM_MODULE_NAME }}'" > index.js - - run: npx rollup -p node-resolve index.js Vite: runs-on: ubuntu-latest needs: Pack