Skip to content

Commit 08fc143

Browse files
committed
fix: add fallback if import.meta.resolve is not present
1 parent 3a54215 commit 08fc143

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as fs from 'node:fs'
2+
import { fileURLToPath } from 'node:url'
3+
4+
import * as assert from '@remix-run/assert'
5+
import { describe, it } from '@remix-run/test'
6+
7+
import { resolveInjectedPackageJsonUrl } from './injected-packages.ts'
8+
9+
describe('resolveInjectedPackageJsonUrl', () => {
10+
it('uses an explicit resolver when provided', () => {
11+
let expectedUrl = 'file:///tmp/example/package.json'
12+
let resolved = resolveInjectedPackageJsonUrl('@oxc-project/runtime', () => expectedUrl)
13+
14+
assert.equal(resolved, expectedUrl)
15+
})
16+
17+
it('falls back to createRequire when import.meta.resolve is unavailable', () => {
18+
let resolved = resolveInjectedPackageJsonUrl('@oxc-project/runtime', undefined)
19+
let resolvedPath = fileURLToPath(resolved)
20+
21+
assert.ok(resolved.startsWith('file:'))
22+
assert.ok(resolvedPath.endsWith('package.json'))
23+
assert.ok(fs.existsSync(resolvedPath))
24+
})
25+
})

packages/assets/src/lib/injected-packages.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as fs from 'node:fs'
2-
import { fileURLToPath } from 'node:url'
2+
import { createRequire } from 'node:module'
3+
import { fileURLToPath, pathToFileURL } from 'node:url'
34

45
import { getFilePathDirectory, normalizeFilePath } from './paths.ts'
56

@@ -90,7 +91,7 @@ function getResolvedInjectedPackage(packageName: string): ResolvedInjectedPackag
9091
let existing = resolvedInjectedPackages.get(packageName)
9192
if (existing) return existing
9293

93-
let packageJsonUrl = import.meta.resolve(`${packageName}/package.json`)
94+
let packageJsonUrl = resolveInjectedPackageJsonUrl(packageName)
9495
let packageJsonPath = normalizeFilePath(fs.realpathSync(fileURLToPath(packageJsonUrl)))
9596

9697
let resolvedInjectedPackage = {
@@ -102,6 +103,18 @@ function getResolvedInjectedPackage(packageName: string): ResolvedInjectedPackag
102103
return resolvedInjectedPackage
103104
}
104105

106+
export function resolveInjectedPackageJsonUrl(
107+
packageName: string,
108+
resolve: ((specifier: string) => string) | undefined = import.meta.resolve,
109+
): string {
110+
if (typeof resolve === 'function') {
111+
return resolve(`${packageName}/package.json`)
112+
}
113+
114+
let require = createRequire(import.meta.url)
115+
return pathToFileURL(require.resolve(`${packageName}/package.json`)).href
116+
}
117+
105118
function getInjectedPackageRoutePattern(packageName: string): string {
106119
return `${injectedPackagesBasePath}/${packageName}/*path`
107120
}

0 commit comments

Comments
 (0)