From da5751f191752e54cff54e10dc2a305fd483fc54 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 10 Aug 2026 19:20:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(M06-R):=20=E4=BF=AE=E5=A4=8D=E9=9D=99?= =?UTF-8?q?=E6=80=81=E6=A3=80=E6=9F=A5=E8=B7=AF=E5=BE=84=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/check-admin-m08-b.mjs | 3 +- scripts/check-admin-m08-d.mjs | 3 +- scripts/check-miniapp-m08-a.mjs | 3 +- scripts/check-miniapp-m08-c.mjs | 3 +- scripts/check-script-path-portability.mjs | 55 +++++++++++++++++++++++ 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 scripts/check-script-path-portability.mjs diff --git a/scripts/check-admin-m08-b.mjs b/scripts/check-admin-m08-b.mjs index 3ecc76c..23ba329 100644 --- a/scripts/check-admin-m08-b.mjs +++ b/scripts/check-admin-m08-b.mjs @@ -1,8 +1,9 @@ import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = new URL('..', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); +const root = fileURLToPath(new URL('..', import.meta.url)); const read = (path) => readFileSync(join(root, path), 'utf8'); const packageJson = JSON.parse(read('admin/package.json')); diff --git a/scripts/check-admin-m08-d.mjs b/scripts/check-admin-m08-d.mjs index bc0e60d..7d13f04 100644 --- a/scripts/check-admin-m08-d.mjs +++ b/scripts/check-admin-m08-d.mjs @@ -1,8 +1,9 @@ import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = new URL('..', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); +const root = fileURLToPath(new URL('..', import.meta.url)); const read = (path) => readFileSync(join(root, path), 'utf8'); const app = read('admin/src/App.vue'); diff --git a/scripts/check-miniapp-m08-a.mjs b/scripts/check-miniapp-m08-a.mjs index 58a4720..9bc5fd7 100644 --- a/scripts/check-miniapp-m08-a.mjs +++ b/scripts/check-miniapp-m08-a.mjs @@ -1,8 +1,9 @@ import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = new URL('..', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); +const root = fileURLToPath(new URL('..', import.meta.url)); const read = (path) => readFileSync(join(root, path), 'utf8'); const appJson = JSON.parse(read('miniapp/app.json')); diff --git a/scripts/check-miniapp-m08-c.mjs b/scripts/check-miniapp-m08-c.mjs index 72a0521..b662a24 100644 --- a/scripts/check-miniapp-m08-c.mjs +++ b/scripts/check-miniapp-m08-c.mjs @@ -1,8 +1,9 @@ import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = new URL('..', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); +const root = fileURLToPath(new URL('..', import.meta.url)); const read = (path) => readFileSync(join(root, path), 'utf8'); const appJson = JSON.parse(read('miniapp/app.json')); diff --git a/scripts/check-script-path-portability.mjs b/scripts/check-script-path-portability.mjs new file mode 100644 index 0000000..50ff55a --- /dev/null +++ b/scripts/check-script-path-portability.mjs @@ -0,0 +1,55 @@ +import assert from 'node:assert/strict'; +import { + cpSync, + mkdtempSync, + mkdirSync, + rmSync +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { basename, join } from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; + +const root = fileURLToPath(new URL('..', import.meta.url)); +const temporaryRoot = mkdtempSync(join(tmpdir(), '棋牌 路径回归 ')); +const checks = [ + 'check-miniapp-m08-a.mjs', + 'check-miniapp-m08-c.mjs', + 'check-admin-m08-b.mjs', + 'check-admin-m08-d.mjs' +]; + +const copySource = (name) => { + const source = join(root, name); + const target = join(temporaryRoot, name); + cpSync(source, target, { + recursive: true, + filter: (entry) => { + const part = basename(entry); + return part !== 'node_modules' && part !== 'dist'; + } + }); +}; + +try { + copySource('admin'); + copySource('backend'); + copySource('database'); + copySource('miniapp'); + mkdirSync(join(temporaryRoot, 'scripts')); + for (const check of checks) { + cpSync(join(root, 'scripts', check), join(temporaryRoot, 'scripts', check)); + const result = spawnSync(process.execPath, [join(temporaryRoot, 'scripts', check)], { + cwd: temporaryRoot, + encoding: 'utf8' + }); + assert.equal( + result.status, + 0, + `${check} failed in ${temporaryRoot}\n${result.stdout}${result.stderr}` + ); + } + console.log(`PASS: four static checks support a Unicode/space repository path (${temporaryRoot}).`); +} finally { + rmSync(temporaryRoot, { recursive: true, force: true }); +}