From 852b0d1f8bcf3a887e3f6bf271b4b71584fd921d Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 17:46:16 +0800 Subject: [PATCH 1/7] chore: update --- e2e/cases/alias/__snapshots__/index.test.ts.snap | 2 +- e2e/cases/syntax/__snapshots__/index.test.ts.snap | 10 +++++----- e2e/package.json | 3 ++- e2e/setupVitestTests.ts | 10 +++++++++- pnpm-lock.yaml | 8 ++++++++ 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/e2e/cases/alias/__snapshots__/index.test.ts.snap b/e2e/cases/alias/__snapshots__/index.test.ts.snap index ec282d3e4..fbe091e53 100644 --- a/e2e/cases/alias/__snapshots__/index.test.ts.snap +++ b/e2e/cases/alias/__snapshots__/index.test.ts.snap @@ -13,7 +13,7 @@ console.info(a); `; exports[`source.alias 2`] = ` -""use strict"; +"\\"use strict\\"; var __webpack_exports__ = {}; ;// CONCATENATED MODULE: ./src/a.ts diff --git a/e2e/cases/syntax/__snapshots__/index.test.ts.snap b/e2e/cases/syntax/__snapshots__/index.test.ts.snap index 7931dc64c..496fc9deb 100644 --- a/e2e/cases/syntax/__snapshots__/index.test.ts.snap +++ b/e2e/cases/syntax/__snapshots__/index.test.ts.snap @@ -20,23 +20,23 @@ export { Foo }; exports[`should downgrade class private method with output.syntax config 1`] = ` " -;// CONCATENATED MODULE: ../../../../node_modules/.pnpm/@swc+helpers@0.5.11/node_modules/@swc/helpers/esm/_class_private_method_get.js +;// CONCATENATED MODULE: ../../../../node_modules//@swc/helpers/esm/_class_private_method_get.js function _class_private_method_get(receiver, privateSet, fn) { - if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance"); + if (!privateSet.has(receiver)) throw new TypeError(\\"attempted to get private field on non-instance\\"); return fn; } -;// CONCATENATED MODULE: ../../../../node_modules/.pnpm/@swc+helpers@0.5.11/node_modules/@swc/helpers/esm/_check_private_redeclaration.js +;// CONCATENATED MODULE: ../../../../node_modules//@swc/helpers/esm/_check_private_redeclaration.js function _check_private_redeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { - throw new TypeError("Cannot initialize the same private elements twice on an object"); + throw new TypeError(\\"Cannot initialize the same private elements twice on an object\\"); } } -;// CONCATENATED MODULE: ../../../../node_modules/.pnpm/@swc+helpers@0.5.11/node_modules/@swc/helpers/esm/_class_private_method_init.js +;// CONCATENATED MODULE: ../../../../node_modules//@swc/helpers/esm/_class_private_method_init.js function _class_private_method_init(obj, privateSet) { diff --git a/e2e/package.json b/e2e/package.json index 090b6587d..cde6c3eac 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -18,6 +18,7 @@ "@types/node": "~18.19.39", "@types/react": "^18.3.3", "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0" + "fs-extra": "^11.2.0", + "path-serializer": "0.0.5-beta.0" } } diff --git a/e2e/setupVitestTests.ts b/e2e/setupVitestTests.ts index c86233e3f..39e8d0824 100644 --- a/e2e/setupVitestTests.ts +++ b/e2e/setupVitestTests.ts @@ -1,8 +1,16 @@ +import path from 'node:path'; import process from 'node:process'; -import { beforeEach } from 'vitest'; +import { createSnapshotSerializer } from 'path-serializer'; +import { beforeEach, expect } from 'vitest'; beforeEach(() => { // since our NODE_ENV injection logic is via cli, we need to // delete "test" NODE_ENV to avoid affecting the default build config delete process.env.NODE_ENV; }); + +expect.addSnapshotSerializer( + createSnapshotSerializer({ + workspace: path.join(__dirname, '..'), + }), +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 432e421c9..8b8f46f7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,6 +93,9 @@ importers: fs-extra: specifier: ^11.2.0 version: 11.2.0 + path-serializer: + specifier: 0.0.5-beta.0 + version: 0.0.5-beta.0 e2e/cases/auto-extension/type-commonjs/default: {} @@ -2549,6 +2552,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-serializer@0.0.5-beta.0: + resolution: {integrity: sha512-qgiwUpCdyQ2SEzBhDcJHGsHzawTDa0A9IsC8aPETAzwUyKpdFgWbEnw6khul0nOnCM+DhhbYrRAcPnH+BQJnlw==} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -5549,6 +5555,8 @@ snapshots: path-parse@1.0.7: {} + path-serializer@0.0.5-beta.0: {} + path-to-regexp@0.1.7: {} path-type@4.0.0: {} From 3f7b451c91861657875c2e02adc7ea424e646640 Mon Sep 17 00:00:00 2001 From: SoonIter Date: Mon, 5 Aug 2024 20:07:52 +0800 Subject: [PATCH 2/7] ci: add windows test --- .github/workflows/test-ubuntu.yml | 4 + .github/workflows/test-windows.yml | 120 +++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 .github/workflows/test-windows.yml diff --git a/.github/workflows/test-ubuntu.yml b/.github/workflows/test-ubuntu.yml index b91d58acb..f1e529e0d 100644 --- a/.github/workflows/test-ubuntu.yml +++ b/.github/workflows/test-ubuntu.yml @@ -42,6 +42,8 @@ jobs: changed: - "!**/*.md" - "!**/*.mdx" + - "!**/_meta.json" + - "!**/dictionary.txt" - name: Setup Node.js ${{ matrix.node-version }} if: steps.changes.outputs.changed == 'true' @@ -83,6 +85,8 @@ jobs: changed: - "!**/*.md" - "!**/*.mdx" + - "!**/_meta.json" + - "!**/dictionary.txt" - name: Setup Node.js ${{ matrix.node-version }} if: steps.changes.outputs.changed == 'true' diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml new file mode 100644 index 000000000..61b4b4bac --- /dev/null +++ b/.github/workflows/test-windows.yml @@ -0,0 +1,120 @@ +name: Test (Windows) + +# Controls when the action will run. +on: + # Triggers the workflow on pull request events but only for the main branch + pull_request: + branches: [main] + + push: + branches: [main] + + merge_group: + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # ======== ut ======== + ut-windows: + runs-on: windows-latest + strategy: + matrix: + node-version: [18.x] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - name: Git config + shell: bash + run: | + git config --system core.longpaths true + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 10 + + - name: Install Pnpm + run: corepack enable + + - uses: dorny/paths-filter@v3 + id: changes + with: + predicate-quantifier: 'every' + filters: | + changed: + - "!**/*.md" + - "!**/*.mdx" + - "!**/_meta.json" + - "!**/dictionary.txt" + + - name: Setup Node.js ${{ matrix.node-version }} + if: steps.changes.outputs.changed == 'true' + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: Install Dependencies + if: steps.changes.outputs.changed == 'true' + run: pnpm install + + - name: Unit Test + if: steps.changes.outputs.changed == 'true' + run: pnpm run test:unit + + # # ======== e2e ======== + e2e-windows: + runs-on: windows-latest + strategy: + matrix: + node-version: [18.x] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - name: Git config + shell: bash + run: | + git config --system core.longpaths true + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 10 + + - name: Install Pnpm + run: corepack enable + + - uses: dorny/paths-filter@v3 + id: changes + with: + predicate-quantifier: 'every' + filters: | + changed: + - "!**/*.md" + - "!**/*.mdx" + - "!**/_meta.json" + - "!**/dictionary.txt" + + - name: Setup Node.js ${{ matrix.node-version }} + if: steps.changes.outputs.changed == 'true' + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: Install Dependencies + if: steps.changes.outputs.changed == 'true' + run: pnpm install && cd ./e2e && npx playwright install + + - name: E2E Test + if: steps.changes.outputs.changed == 'true' + run: | + pnpm run test:artifact + pnpm run test:e2e + + - name: Examples Test + if: steps.changes.outputs.changed == 'true' + run: | + pnpm run build:examples From 79d8963ac1b80d55a88cb8201099150f78a73e1d Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 18:15:54 +0800 Subject: [PATCH 3/7] chore: update --- packages/core/tests/lcp.test.ts | 61 +++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/packages/core/tests/lcp.test.ts b/packages/core/tests/lcp.test.ts index 97bdcc635..f22f1abc3 100644 --- a/packages/core/tests/lcp.test.ts +++ b/packages/core/tests/lcp.test.ts @@ -1,3 +1,4 @@ +import path from 'node:path'; import { vol } from 'memfs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { calcLongestCommonPath } from '../src/utils/helper'; @@ -19,35 +20,57 @@ describe('LCP calculate correctly', () => { it('correct 1', async () => { vol.fromJSON({ '/Users/Someone/project-a/src': null }); - const result = await calcLongestCommonPath([ - '/Users/Someone/project-a/src/helpers', - '/Users/Someone/project-a/src', - '/Users/Someone/project-a/src/utils', - ]); - expect(result).toBe('/Users/Someone/project-a/src'); + if (path.sep === '/') { + const result = await calcLongestCommonPath([ + '/Users/Someone/project-a/src/helpers', + '/Users/Someone/project-a/src', + '/Users/Someone/project-a/src/utils', + ]); + expect(result).toEqual('/Users/Someone/project-a/src'); + } else { + const result = await calcLongestCommonPath([ + 'D:\\Users\\Someone\\project-a\\src\\helpers', + 'D:\\Users\\Someone\\project-a\\src', + 'D:\\Users\\Someone\\project-a\\src\\utils', + ]); + expect(result).toEqual('D:\\Users\\Someone\\project-a\\src'); + } }); it('correct 2', async () => { vol.fromJSON({ '/Users/Someone/project-monorepo': null }); - const result = await calcLongestCommonPath([ - '/Users/Someone/project-monorepo/packages-a/src/index.ts', - '/Users/Someone/project-monorepo/packages-util/src/index.js', - '/Users/Someone/project-monorepo/script.js', - ]); - - expect(result).toBe('/Users/Someone/project-monorepo'); + if (path.sep === '/') { + const result = await calcLongestCommonPath([ + '/Users/Someone/project-monorepo/packages-a/src/index.ts', + '/Users/Someone/project-monorepo/packages-util/src/index.js', + '/Users/Someone/project-monorepo/script.js', + ]); + expect(result).toEqual('/Users/Someone/project-monorepo'); + } else { + const result = await calcLongestCommonPath([ + 'D:\\Users\\Someone\\project-monorepo\\packages-a\\src\\index.ts', + 'D:\\Users\\Someone\\project-monorepo\\packages-util\\src\\index.js', + 'D:\\Users\\Someone\\project-monorepo\\script.js', + ]); + expect(result).toEqual('D:\\Users\\Someone\\project-monorepo'); + } }); it('correct 3', async () => { vol.fromJSON({ '/Users/Someone/project/src/index.js': '', }); - - const result = await calcLongestCommonPath([ - '/Users/Someone/project/src/index.js', - ]); - - expect(result).toBe('/Users/Someone/project/src'); + if (path.sep === '/') { + const result = await calcLongestCommonPath([ + '/Users/Someone/project/src/index.js', + ]); + expect(result).toEqual('/Users/Someone/project/src'); + } else { + const result = await calcLongestCommonPath([ + 'D:\\Users\\Someone\\project\\src\\index.js', + ]); + expect(result).toEqual('D:\\Users\\Someone\\project\\src'); + } }); }); From 2d8b15a932e5a72b32e23ed1ea02940a4fbf526e Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 18:26:52 +0800 Subject: [PATCH 4/7] chore: update --- e2e/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/package.json b/e2e/package.json index cde6c3eac..4f223f006 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -19,6 +19,6 @@ "@types/react": "^18.3.3", "fast-glob": "^3.3.2", "fs-extra": "^11.2.0", - "path-serializer": "0.0.5-beta.0" + "path-serializer": "0.0.5" } } From b3db768d11d14c72ae6df0cd239a39a28bad822e Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 18:27:12 +0800 Subject: [PATCH 5/7] chore: update --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b8f46f7b..16c81c39c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,8 +94,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 path-serializer: - specifier: 0.0.5-beta.0 - version: 0.0.5-beta.0 + specifier: 0.0.5 + version: 0.0.5 e2e/cases/auto-extension/type-commonjs/default: {} @@ -2552,8 +2552,8 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-serializer@0.0.5-beta.0: - resolution: {integrity: sha512-qgiwUpCdyQ2SEzBhDcJHGsHzawTDa0A9IsC8aPETAzwUyKpdFgWbEnw6khul0nOnCM+DhhbYrRAcPnH+BQJnlw==} + path-serializer@0.0.5: + resolution: {integrity: sha512-yK/jfDzO55k1mqk0O1UM1DUjysV6mhJcMjdO3xHcmuVkKsVjh8Npeo5E5Z9S0VUy6rz0vrpe6zsndnu9K5bOhw==} path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -5555,7 +5555,7 @@ snapshots: path-parse@1.0.7: {} - path-serializer@0.0.5-beta.0: {} + path-serializer@0.0.5: {} path-to-regexp@0.1.7: {} From c9f7f9b7b8e467b63c1e08778609876f8ef61cd8 Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 19:30:42 +0800 Subject: [PATCH 6/7] chore: update 0.0.6 --- e2e/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 4f223f006..8c8414dce 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -19,6 +19,6 @@ "@types/react": "^18.3.3", "fast-glob": "^3.3.2", "fs-extra": "^11.2.0", - "path-serializer": "0.0.5" + "path-serializer": "0.0.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16c81c39c..6aa301ba6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,8 +94,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 path-serializer: - specifier: 0.0.5 - version: 0.0.5 + specifier: 0.0.6 + version: 0.0.6 e2e/cases/auto-extension/type-commonjs/default: {} @@ -2552,8 +2552,8 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-serializer@0.0.5: - resolution: {integrity: sha512-yK/jfDzO55k1mqk0O1UM1DUjysV6mhJcMjdO3xHcmuVkKsVjh8Npeo5E5Z9S0VUy6rz0vrpe6zsndnu9K5bOhw==} + path-serializer@0.0.6: + resolution: {integrity: sha512-kBhnac4AnaKORPpadUFKsxdTOMDF+vNuYyZcmbmeWnjogEUIjdOgOMpKxdb8acv6i8ldVthtDV35EOXIt1DbJw==} path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -5555,7 +5555,7 @@ snapshots: path-parse@1.0.7: {} - path-serializer@0.0.5: {} + path-serializer@0.0.6: {} path-to-regexp@0.1.7: {} From 95c82378da708baf065570a465b96fc4fc825329 Mon Sep 17 00:00:00 2001 From: SoonIter Date: Fri, 9 Aug 2024 19:35:08 +0800 Subject: [PATCH 7/7] chore: update --- packages/core/tests/lcp.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/tests/lcp.test.ts b/packages/core/tests/lcp.test.ts index f22f1abc3..065a0f793 100644 --- a/packages/core/tests/lcp.test.ts +++ b/packages/core/tests/lcp.test.ts @@ -1,4 +1,4 @@ -import path from 'node:path'; +import os from 'node:os'; import { vol } from 'memfs'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { calcLongestCommonPath } from '../src/utils/helper'; @@ -20,7 +20,7 @@ describe('LCP calculate correctly', () => { it('correct 1', async () => { vol.fromJSON({ '/Users/Someone/project-a/src': null }); - if (path.sep === '/') { + if (os.platform() !== 'win32') { const result = await calcLongestCommonPath([ '/Users/Someone/project-a/src/helpers', '/Users/Someone/project-a/src', @@ -40,7 +40,7 @@ describe('LCP calculate correctly', () => { it('correct 2', async () => { vol.fromJSON({ '/Users/Someone/project-monorepo': null }); - if (path.sep === '/') { + if (os.platform() !== 'win32') { const result = await calcLongestCommonPath([ '/Users/Someone/project-monorepo/packages-a/src/index.ts', '/Users/Someone/project-monorepo/packages-util/src/index.js', @@ -61,7 +61,7 @@ describe('LCP calculate correctly', () => { vol.fromJSON({ '/Users/Someone/project/src/index.js': '', }); - if (path.sep === '/') { + if (os.platform() !== 'win32') { const result = await calcLongestCommonPath([ '/Users/Someone/project/src/index.js', ]);