diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 918c94c..f724094 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,8 +21,21 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - cache: yarn - cache-dependency-path: yarn.lock + + - name: Enable pinned Yarn + run: | + corepack enable + corepack install + yarn --version + + - name: Cache Yarn Berry artifacts + uses: actions/cache@v4 + with: + path: ~/.yarn/berry/cache + key: ${{ runner.os }}-yarn4-${{ hashFiles('yarn.lock', '.yarnrc.yml', 'package.json') }} + + - name: Install dependencies + run: yarn install --immutable - name: Bootstrap run: | diff --git a/modules/dev-tools/package.json b/modules/dev-tools/package.json index 6f6bdbd..a6f873b 100644 --- a/modules/dev-tools/package.json +++ b/modules/dev-tools/package.json @@ -48,12 +48,11 @@ "@vitest/browser-playwright": "^4.0.18", "@vitest/coverage-v8": "^4.0.18", "deepmerge": "^4.2.2", - "esbuild": "^0.16.7", + "esbuild": "^0.28.1", "esbuild-plugin-external-global": "^1.0.1", "glob": "^7.1.4", "lerna": "^8.1.0", "minimatch": "^3.0.0", - "playwright": "^1.58.0", "semver": "^7.6.0", "ts-node": "~10.9.0", "ts-patch": "^3.1.2", @@ -62,6 +61,9 @@ "vite": "^7.3.1", "vitest": "^4.0.18" }, + "peerDependencies": { + "playwright": "^1.58.0" + }, "engines": { "node": ">= 22" } diff --git a/modules/dev-tools/src/configuration/biome.jsonc b/modules/dev-tools/src/configuration/biome.jsonc index affe78f..35647ba 100644 --- a/modules/dev-tools/src/configuration/biome.jsonc +++ b/modules/dev-tools/src/configuration/biome.jsonc @@ -7,17 +7,7 @@ "useIgnoreFile": true }, "files": { - "ignoreUnknown": true, - "includes": [ - "**/*.js", - "**/*.jsx", - "**/*.mjs", - "**/*.cjs", - "**/*.ts", - "**/*.tsx", - "**/*.mts", - "**/*.cts" - ] + "ignoreUnknown": true }, "formatter": { "enabled": true, @@ -31,19 +21,12 @@ "recommended": true, "correctness": { "noUnusedImports": "error", - "noUnusedVariables": "error", - "useIsNan": "error" + "noUnusedVariables": "error" }, "style": { "noInferrableTypes": "off", "noNonNullAssertion": "off", - "useConst": "off", - "useNamingConvention": { - "level": "warn", - "options": { - "strictCase": false - } - } + "useConst": "off" }, "suspicious": { "noConsole": "error", @@ -63,8 +46,7 @@ "quoteStyle": "single", "semicolons": "always", "trailingCommas": "none" - }, - "globals": ["__VERSION__"] + } }, "assist": { "enabled": false, diff --git a/modules/dev-tools/src/configuration/get-vitest-config.ts b/modules/dev-tools/src/configuration/get-vitest-config.ts index 5fcf075..58cd5db 100644 --- a/modules/dev-tools/src/configuration/get-vitest-config.ts +++ b/modules/dev-tools/src/configuration/get-vitest-config.ts @@ -191,12 +191,6 @@ function getTsconfigAliases(tsconfigProjects: string[]) { }); } else { const replacement = path.resolve(configDirectory, baseUrl, firstTarget).replace(/\\/g, '/'); - // TypeScript treats an exact package path as the base for subpath imports too. - aliases.push({ - key: `${aliasPattern}/*`, - find: new RegExp(`^${escapeRegExp(aliasPattern)}/(.+)$`), - replacement: `${replacement}/$1` - }); aliases.push({ key: aliasPattern, find: aliasPattern, diff --git a/modules/dev-tools/test/configuration.spec.ts b/modules/dev-tools/test/configuration.spec.ts index 2a361a4..3977335 100644 --- a/modules/dev-tools/test/configuration.spec.ts +++ b/modules/dev-tools/test/configuration.spec.ts @@ -1,6 +1,8 @@ import {expect, test} from 'vitest'; import type {TestProjectInlineConfiguration} from 'vitest/config'; import {getOcularConfig, getVitestConfig} from '@vis.gl/dev-tools'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; test('dev-tools#getConfig', () => { expect(getOcularConfig).toBeTypeOf('function'); @@ -53,3 +55,17 @@ test('dev-tools#getVitestConfig supports legacy project overrides', () => { include: ['test/legacy.spec.ts'] }); }); + +test('dev-tools#getVitestConfig resolves explicit wildcard aliases to their wildcard target', () => { + const fixturePath = fileURLToPath(new URL('./fixtures/tsconfig-aliases.json', import.meta.url)); + const config = getVitestConfig({tsconfigProjects: [fixturePath]}); + const aliases = config.resolve?.alias as Array<{find: string | RegExp; replacement: string}>; + const subpath = '@example/package/feature'; + const matchingAlias = aliases.find(({find}) => + typeof find === 'string' ? find === subpath : find.test(subpath) + ); + + expect(matchingAlias?.replacement).toBe( + path.resolve(path.dirname(fixturePath), 'src/$1').replace(/\\/g, '/') + ); +}); diff --git a/modules/dev-tools/test/fixtures/tsconfig-aliases.json b/modules/dev-tools/test/fixtures/tsconfig-aliases.json new file mode 100644 index 0000000..ded9b21 --- /dev/null +++ b/modules/dev-tools/test/fixtures/tsconfig-aliases.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@example/package": ["./src/index.ts"], + "@example/package/*": ["./src/*"] + } + } +} diff --git a/package.json b/package.json index bdb17ac..ebe53b4 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "modules/*" ], "scripts": { - "bootstrap": "yarn && ocular-bootstrap && npm run build", - "build": "ocular-clean && tspc -b modules/dev-tools/tsconfig.json && ocular-build", + "bootstrap": "ocular-bootstrap && npm run build", + "build": "ocular-clean && yarn workspace @vis.gl/dev-tools exec tspc -b tsconfig.json && ocular-build", "cover": "ocular-test node --coverage", "lint": "ocular-lint", "test": "ocular-test node headless", @@ -16,15 +16,16 @@ "test-headless": "ocular-test headless", "publish-beta": "npm run build && ocular-publish beta", "publish-prod": "npm run build && ocular-publish prod", - "pre-commit": "yarn lint", - "pre-push": "ocular-lint pre-commit && ocular-test node" + "pre-commit": "ocular-lint && ocular-test node" }, "devDependencies": { "@luma.gl/constants": "^9.0.0-beta", + "@vis.gl/dev-tools": "workspace:*", + "playwright": "^1.58.0", "pre-commit": "^1.2.2", "pre-push": "^0.1.1", "ts-morph": "^21.0.0" }, "pre-commit": "pre-commit", - "pre-push": "pre-push" + "packageManager": "yarn@4.18.0+sha512.fcb8716fe7cd0eece141ffc18b92193a9df9204c1ba83189c288835223fc0bbe64af473bab0d5e9927a7daeb5caf2bb07eb2787cc9338ca040ea125f2a1f2f7e" } diff --git a/yarn.lock b/yarn.lock index 431f9fb..dd78c9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2566,13 +2566,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-arm64@npm:0.16.17" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/android-arm64@npm:0.28.1" @@ -2580,13 +2573,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-arm@npm:0.16.17" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/android-arm@npm:0.28.1" @@ -2594,13 +2580,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-x64@npm:0.16.17" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/android-x64@npm:0.28.1" @@ -2608,13 +2587,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/darwin-arm64@npm:0.16.17" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/darwin-arm64@npm:0.28.1" @@ -2622,13 +2594,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/darwin-x64@npm:0.16.17" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/darwin-x64@npm:0.28.1" @@ -2636,13 +2601,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/freebsd-arm64@npm:0.16.17" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/freebsd-arm64@npm:0.28.1" @@ -2650,13 +2608,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/freebsd-x64@npm:0.16.17" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/freebsd-x64@npm:0.28.1" @@ -2664,13 +2615,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-arm64@npm:0.16.17" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-arm64@npm:0.28.1" @@ -2678,13 +2622,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-arm@npm:0.16.17" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-arm@npm:0.28.1" @@ -2692,13 +2629,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-ia32@npm:0.16.17" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-ia32@npm:0.28.1" @@ -2706,13 +2636,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-loong64@npm:0.16.17" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-loong64@npm:0.28.1" @@ -2720,13 +2643,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-mips64el@npm:0.16.17" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-mips64el@npm:0.28.1" @@ -2734,13 +2650,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-ppc64@npm:0.16.17" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-ppc64@npm:0.28.1" @@ -2748,13 +2657,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-riscv64@npm:0.16.17" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-riscv64@npm:0.28.1" @@ -2762,13 +2664,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-s390x@npm:0.16.17" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-s390x@npm:0.28.1" @@ -2776,13 +2671,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-x64@npm:0.16.17" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/linux-x64@npm:0.28.1" @@ -2797,13 +2685,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/netbsd-x64@npm:0.16.17" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/netbsd-x64@npm:0.28.1" @@ -2818,13 +2699,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/openbsd-x64@npm:0.16.17" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/openbsd-x64@npm:0.28.1" @@ -2839,13 +2713,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/sunos-x64@npm:0.16.17" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/sunos-x64@npm:0.28.1" @@ -2853,13 +2720,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-arm64@npm:0.16.17" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/win32-arm64@npm:0.28.1" @@ -2867,13 +2727,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-ia32@npm:0.16.17" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/win32-ia32@npm:0.28.1" @@ -2881,13 +2734,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-x64@npm:0.16.17" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.28.1": version: 0.28.1 resolution: "@esbuild/win32-x64@npm:0.28.1" @@ -4783,7 +4629,7 @@ __metadata: languageName: node linkType: hard -"@vis.gl/dev-tools@workspace:modules/dev-tools": +"@vis.gl/dev-tools@workspace:*, @vis.gl/dev-tools@workspace:modules/dev-tools": version: 0.0.0-use.local resolution: "@vis.gl/dev-tools@workspace:modules/dev-tools" dependencies: @@ -4792,12 +4638,11 @@ __metadata: "@vitest/browser-playwright": "npm:^4.0.18" "@vitest/coverage-v8": "npm:^4.0.18" deepmerge: "npm:^4.2.2" - esbuild: "npm:^0.16.7" + esbuild: "npm:^0.28.1" esbuild-plugin-external-global: "npm:^1.0.1" glob: "npm:^7.1.4" lerna: "npm:^8.1.0" minimatch: "npm:^3.0.0" - playwright: "npm:^1.58.0" semver: "npm:^7.6.0" ts-node: "npm:~10.9.0" ts-patch: "npm:^3.1.2" @@ -4805,6 +4650,8 @@ __metadata: typescript: "npm:^5.2.2" vite: "npm:^7.3.1" vitest: "npm:^4.0.18" + peerDependencies: + playwright: ^1.58.0 bin: ocular-bootstrap: ./scripts/bootstrap.js ocular-build: ./scripts/build.js @@ -7864,84 +7711,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.16.7": - version: 0.16.17 - resolution: "esbuild@npm:0.16.17" - dependencies: - "@esbuild/android-arm": "npm:0.16.17" - "@esbuild/android-arm64": "npm:0.16.17" - "@esbuild/android-x64": "npm:0.16.17" - "@esbuild/darwin-arm64": "npm:0.16.17" - "@esbuild/darwin-x64": "npm:0.16.17" - "@esbuild/freebsd-arm64": "npm:0.16.17" - "@esbuild/freebsd-x64": "npm:0.16.17" - "@esbuild/linux-arm": "npm:0.16.17" - "@esbuild/linux-arm64": "npm:0.16.17" - "@esbuild/linux-ia32": "npm:0.16.17" - "@esbuild/linux-loong64": "npm:0.16.17" - "@esbuild/linux-mips64el": "npm:0.16.17" - "@esbuild/linux-ppc64": "npm:0.16.17" - "@esbuild/linux-riscv64": "npm:0.16.17" - "@esbuild/linux-s390x": "npm:0.16.17" - "@esbuild/linux-x64": "npm:0.16.17" - "@esbuild/netbsd-x64": "npm:0.16.17" - "@esbuild/openbsd-x64": "npm:0.16.17" - "@esbuild/sunos-x64": "npm:0.16.17" - "@esbuild/win32-arm64": "npm:0.16.17" - "@esbuild/win32-ia32": "npm:0.16.17" - "@esbuild/win32-x64": "npm:0.16.17" - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c2aaef0d2369349b2ef40c0115c2d2030ed7d7341cc91d26af3e243218ecec972f8f1243d5ce8e9a4c80b29439b89dff44c658e57c696d3b07e9074a77878b49 - languageName: node - linkType: hard - -"esbuild@npm:^0.27.0 || ^0.28.0": +"esbuild@npm:^0.27.0 || ^0.28.0, esbuild@npm:^0.28.1": version: 0.28.1 resolution: "esbuild@npm:0.28.1" dependencies: @@ -13058,6 +12828,8 @@ __metadata: resolution: "ocular-monorepo@workspace:." dependencies: "@luma.gl/constants": "npm:^9.0.0-beta" + "@vis.gl/dev-tools": "workspace:*" + playwright: "npm:^1.58.0" pre-commit: "npm:^1.2.2" pre-push: "npm:^0.1.1" ts-morph: "npm:^21.0.0"