From 394ecb02b4ea0beae6af65003fb7c9c7e1cd9c52 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Tue, 28 May 2024 14:29:08 -0400 Subject: [PATCH 1/3] Fix ownerOfFile bug on windows https://github.com/embroider-build/embroider/pull/1762 only fixed the bug on unix. On windows the bug is still lurking. --- .../shared-internals/src/package-cache.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/shared-internals/src/package-cache.ts b/packages/shared-internals/src/package-cache.ts index c81bc8ea6..d33bec34f 100644 --- a/packages/shared-internals/src/package-cache.ts +++ b/packages/shared-internals/src/package-cache.ts @@ -2,7 +2,7 @@ import Package from './package'; import { existsSync, realpathSync } from 'fs'; import { getOrCreate } from './get-or-create'; import resolvePackagePath from 'resolve-package-path'; -import { dirname, sep } from 'path'; +import { basename, dirname, join, resolve } from 'path'; const realpathSyncCache = new Map(); @@ -67,25 +67,29 @@ export default class PackageCache { } ownerOfFile(filename: string): Package | undefined { - let segments = filename.split(sep); + let candidate = filename; // first we look through our cached packages for any that are rooted right // at or above the file. - for (let length = segments.length; length >= 0; length--) { - if (segments[length - 1] === 'node_modules' || segments[length - 1] === '') { - // once we hit a node_modules or the filesystem root, we're leaving the + while (true) { + if (basename(candidate) === 'node_modules') { + // once we hit a node_modules, we're leaving the // package we were in, so any higher caches don't apply to us break; } - let usedSegments = segments.slice(0, length); - let candidate = usedSegments.join(sep); if (this.rootCache.has(candidate)) { return this.rootCache.get(candidate); } - if (getCachedExists([...usedSegments, 'package.json'].join(sep))) { + if (getCachedExists(join(candidate, 'package.json'))) { return this.get(candidate); } + let nextCandidate = resolve(candidate, '..'); + if (nextCandidate === candidate) { + // got to the top + break; + } + candidate = nextCandidate; } } From 4c573fdaf0ab0c68307e8db199de9cd216301485 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Tue, 28 May 2024 21:11:16 -0400 Subject: [PATCH 2/3] test against our copy of shared-internals --- package.json | 5 +++-- pnpm-lock.yaml | 58 ++++++++++++++++++++++---------------------------- 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index f2dade2fa..3f6e5d985 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "browserslist": "^4.14.0", "graceful-fs": "^4.0.0", "@types/eslint": "^8.37.0", - "babel-plugin-module-resolver@5.0.1": "5.0.0" + "babel-plugin-module-resolver@5.0.1": "5.0.0", + "@embroider/shared-internals": "workspace:*" } }, "devDependencies": { @@ -66,4 +67,4 @@ }, "wildcardLabel": "unlabeled" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b318e6e06..3951e6aa8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,7 @@ overrides: graceful-fs: ^4.0.0 '@types/eslint': ^8.37.0 babel-plugin-module-resolver@5.0.1: 5.0.0 + '@embroider/shared-internals': workspace:* importers: @@ -112,7 +113,7 @@ importers: packages/addon-shim: dependencies: '@embroider/shared-internals': - specifier: workspace:^ + specifier: workspace:* version: link:../shared-internals broccoli-funnel: specifier: ^3.0.8 @@ -1709,7 +1710,7 @@ importers: version: /ember-source@4.4.5(@babel/core@7.24.5) ember-source-beta: specifier: npm:ember-source@beta - version: /ember-source@5.9.0-beta.1(@babel/core@7.24.5) + version: /ember-source@5.9.0-beta.2(@babel/core@7.24.5) ember-source-latest: specifier: npm:ember-source@latest version: /ember-source@5.8.0(@babel/core@7.24.5) @@ -4574,7 +4575,7 @@ packages: resolution: {integrity: sha512-JGOQNRj3UR0NdWEg8MsM2eqPLncEwSB1IX+rwntIj22TEKj8biqx7GDgSbeH+ZedijmCh354Hf2c5rthrdzUAw==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@embroider/shared-internals': 2.6.0 + '@embroider/shared-internals': link:packages/shared-internals broccoli-funnel: 3.0.8 semver: 7.6.1 transitivePeerDependencies: @@ -4590,7 +4591,7 @@ packages: '@glint/template': optional: true dependencies: - '@embroider/shared-internals': 2.6.0 + '@embroider/shared-internals': link:packages/shared-internals '@glint/template': 1.4.0 assert-never: 1.2.1 babel-import-util: 2.1.1 @@ -4602,23 +4603,6 @@ packages: transitivePeerDependencies: - supports-color - /@embroider/shared-internals@2.6.0: - resolution: {integrity: sha512-A2BYQkhotdKOXuTaxvo9dqOIMbk+2LqFyqvfaaePkZcFJvtCkvTaD31/sSzqvRF6rdeBHjdMwU9Z2baPZ55fEQ==} - engines: {node: 12.* || 14.* || >= 16} - dependencies: - babel-import-util: 2.1.1 - debug: 4.3.4(supports-color@8.1.1) - ember-rfc176-data: 0.3.18 - fs-extra: 9.1.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - minimatch: 3.1.2 - resolve-package-path: 4.0.3 - semver: 7.6.1 - typescript-memoize: 1.1.1 - transitivePeerDependencies: - - supports-color - /@embroider/util@1.13.1(@glint/environment-ember-loose@1.4.0)(@glint/template@1.4.0)(ember-source@4.6.0): resolution: {integrity: sha512-MRbs2FPO4doQ31YHIYk+QKChEs7k15aTsMk8QmO4eKiuQq9OT0sr1oasObZyGB8cVVbr29WWRWmsNirxzQtHIg==} engines: {node: 12.* || 14.* || >= 16} @@ -7404,6 +7388,7 @@ packages: /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: delegates: 1.0.0 readable-stream: 3.6.2 @@ -10082,7 +10067,7 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} /cookie-signature@1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} @@ -10662,7 +10647,7 @@ packages: semver: 6.3.1 /ee-first@1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} /electron-to-chromium@1.4.758: resolution: {integrity: sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==} @@ -10691,7 +10676,7 @@ packages: '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.5) '@babel/preset-env': 7.24.5(@babel/core@7.24.5)(supports-color@8.1.1) '@embroider/macros': 1.16.1(@glint/template@1.4.0) - '@embroider/shared-internals': 2.6.0 + '@embroider/shared-internals': link:packages/shared-internals babel-loader: 8.3.0(@babel/core@7.24.5)(webpack@5.91.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-htmlbars-inline-precompile: 5.3.1 @@ -10733,7 +10718,7 @@ packages: '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) '@babel/preset-env': 7.24.5(@babel/core@7.24.5)(supports-color@8.1.1) '@embroider/macros': 1.16.1(@glint/template@1.4.0) - '@embroider/shared-internals': 2.6.0 + '@embroider/shared-internals': link:packages/shared-internals babel-loader: 8.3.0(@babel/core@7.24.5)(webpack@5.91.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-ember-template-compilation: 2.2.3 @@ -10776,7 +10761,7 @@ packages: '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) '@babel/preset-env': 7.24.5(@babel/core@7.24.5)(supports-color@8.1.1) '@embroider/macros': 1.16.1(@glint/template@1.4.0) - '@embroider/shared-internals': 2.6.0 + '@embroider/shared-internals': link:packages/shared-internals babel-loader: 8.3.0(@babel/core@7.24.5)(webpack@5.91.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-ember-template-compilation: 2.2.3 @@ -13656,8 +13641,8 @@ packages: - webpack dev: true - /ember-source@5.9.0-beta.1(@babel/core@7.24.5): - resolution: {integrity: sha512-+Kbbf7Db65fBOwxjwjlOcdmTpCSpmNm1adoz+NWoA8JBV+Pz/aJ8jIw4PCZwsNbc8eflF72Qm8LVnt88/392XQ==} + /ember-source@5.9.0-beta.2(@babel/core@7.24.5): + resolution: {integrity: sha512-3476KQBR7zlq9ITbgeG+P7oYpmtpMF6+/aKH+Sx7iLKjAlw3QRR2UEOboH0joAlbU+1/cLtDdK0txnefK43ViQ==} engines: {node: '>= 16.*'} dependencies: '@babel/helper-module-imports': 7.24.3 @@ -15673,6 +15658,7 @@ packages: /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -15824,6 +15810,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -15835,6 +15822,7 @@ packages: /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -16409,6 +16397,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -16809,7 +16798,7 @@ packages: has-symbols: 1.0.3 /is-type@0.0.1: - resolution: {integrity: sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=} + resolution: {integrity: sha512-YwJh/zBVrcJ90aAnPBM0CbHvm7lG9ao7lIFeqTZ1UQj4iFLpM5CikdaU+dGGesrMJwxLqPGmjjrUrQ6Kn3Zh+w==} dependencies: core-util-is: 1.0.3 @@ -18191,7 +18180,7 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} /media-typer@0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} /mem@5.1.1: @@ -18232,7 +18221,7 @@ packages: dev: true /merge-descriptors@1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -18801,6 +18790,7 @@ packages: /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 @@ -19010,6 +19000,7 @@ packages: /osenv@0.1.5: resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} + deprecated: This package is no longer supported. dependencies: os-homedir: 1.0.2 os-tmpdir: 1.0.2 @@ -20127,6 +20118,7 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -21044,7 +21036,7 @@ packages: dev: true /styled_string@0.0.1: - resolution: {integrity: sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=} + resolution: {integrity: sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==} /stylelint-config-recommended@12.0.0(stylelint@15.11.0): resolution: {integrity: sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==} @@ -21953,7 +21945,7 @@ packages: resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true peerDependencies: - browserslist: ^4.14.0 + browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 escalade: 3.1.2 From 5c9a87f42df26ebbf8ee5dcf4cd4cc446f9fce52 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Tue, 28 May 2024 22:26:53 -0400 Subject: [PATCH 3/3] adjust tests --- test-packages/support/suite-setup-util.ts | 2 +- tests/scenarios/util-test.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/test-packages/support/suite-setup-util.ts b/test-packages/support/suite-setup-util.ts index 96f2f5c71..a0ec8a2ce 100644 --- a/test-packages/support/suite-setup-util.ts +++ b/test-packages/support/suite-setup-util.ts @@ -10,7 +10,7 @@ async function githubMatrix() { let dir = resolve(__dirname, '..', '..', 'tests', 'scenarios'); let { stdout } = await execa( 'scenario-tester', - ['list', '--require', 'ts-node/register', '--files', '*-test.ts', '--matrix', 'pnpm run test --filter %s'], + ['list', '--require', 'ts-node/register', '--files', '*-test.ts', '--matrix', 'pnpm run test --filter "/^%s/"'], { cwd: dir, preferLocal: true, diff --git a/tests/scenarios/util-test.ts b/tests/scenarios/util-test.ts index 78ceba48f..b308a76a1 100644 --- a/tests/scenarios/util-test.ts +++ b/tests/scenarios/util-test.ts @@ -14,8 +14,6 @@ supportMatrix(Scenarios.fromDir(dirname(require.resolve('@embroider/util/package 'test.js': ` const { module: QModule, test } = require("qunit"); const semver = require("semver"); - const { PackageCache } = require("@embroider/shared-internals"); - QModule("shared-internals", function () { test("testing on node 12", function (assert) { assert.ok(