aliaset
Version:
twind monorepo
39 lines (32 loc) • 1.08 kB
text/typescript
import { SemverRange } from 'sver'
import type { Manifest } from './types'
export function withVersion(specifier: string, manifest: Manifest) {
const match = specifier.match(/^((?:@[^/]+\/)?[^/@]+)(?:@([^/]+))?(\/.+)?$/)
if (match) {
const { 1: id, 2: version, 3: path = '' } = match
// check if versions satifies importMap version and use importMap resolution
const manifestVersion = manifest.packages[id]
if (!version || (manifestVersion && SemverRange.match(version, manifestVersion))) {
return {
found: true,
input: { id, version, path },
output: { id, version: manifestVersion, path },
specifier: `${id}@${manifestVersion}${path}`,
} as const
}
if (version) {
return {
found: false,
input: { id, version, path },
output: { id, version, path },
specifier,
} as const
}
}
return {
found: false,
input: { id: specifier, version: undefined, path: '' },
output: { id: specifier, version: undefined, path: '' },
specifier,
} as const
}