@vltpkg/spec
Advanced tools
@@ -6,2 +6,3 @@ import type { Range } from '@vltpkg/semver'; | ||
| export declare const defaultRegistry = "https://registry.npmjs.org/"; | ||
| export declare const defaultRegistryName = "npm"; | ||
| export declare const defaultRegistries: { | ||
@@ -56,2 +57,7 @@ npm: string; | ||
| /** | ||
| * Retrieves the short configured name of the default registry if one | ||
| * is available. | ||
| */ | ||
| export declare const currentDefaultRegistryName: (registry: string, options: SpecOptions) => string | undefined; | ||
| /** | ||
| * The base, isomorphic Spec implementation. | ||
@@ -58,0 +64,0 @@ */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"} |
+19
-7
@@ -6,2 +6,3 @@ import { error, typeError } from '@vltpkg/error-cause'; | ||
| export const defaultRegistry = 'https://registry.npmjs.org/'; | ||
| export const defaultRegistryName = 'npm'; | ||
| export const defaultRegistries = { | ||
@@ -57,3 +58,6 @@ npm: defaultRegistry, | ||
| : defaultGitHosts, | ||
| registries: options?.registries ?? {}, | ||
| registries: { | ||
| ...(options?.registries ?? {}), | ||
| ...defaultRegistries, | ||
| }, | ||
| 'git-host-archives': options?.['git-host-archives'] ? | ||
@@ -89,2 +93,3 @@ { | ||
| spec.startsWith('npm:') || | ||
| spec.startsWith('jsr:') || | ||
| spec.startsWith('gh:') || | ||
@@ -123,2 +128,15 @@ // anything that starts with a known git host key, or a | ||
| /** | ||
| * Retrieves the short configured name of the default registry if one | ||
| * is available. | ||
| */ | ||
| export const currentDefaultRegistryName = (registry, options) => { | ||
| for (const [name, url] of Object.entries(options.registries /* c8 ignore next */ ?? {})) { | ||
| const specRegURL = registry.endsWith('/') ? registry : registry + '/'; | ||
| const knownRegURL = url.endsWith('/') ? url : url + '/'; | ||
| if (specRegURL === knownRegURL) { | ||
| return name; | ||
| } | ||
| } | ||
| }; | ||
| /** | ||
| * The base, isomorphic Spec implementation. | ||
@@ -379,8 +397,2 @@ */ | ||
| const regs = Object.entries(this.options.registries); | ||
| if (!this.options.registries.npm) { | ||
| regs.push(['npm', this.options.registry]); | ||
| } | ||
| if (!this.options.registries.gh) { | ||
| regs.push(['gh', defaultRegistries.gh]); | ||
| } | ||
| if (this.bareSpec.startsWith('registry:')) { | ||
@@ -387,0 +399,0 @@ const reg = this.bareSpec.substring('registry:'.length); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ErrorCauseOptions } from '@vltpkg/error-cause'\nimport { error, typeError } from '@vltpkg/error-cause'\nimport type { Range } from '@vltpkg/semver'\nimport { parseRange } from '@vltpkg/semver'\nimport type {\n GitSelectorParsed,\n Scope,\n SpecLike,\n SpecOptions,\n SpecOptionsFilled,\n SpecType,\n} from './types.ts'\nexport * from './types.ts'\n\nexport const kCustomInspect = Symbol.for('nodejs.util.inspect.custom')\n\nexport const defaultRegistry = 'https://registry.npmjs.org/'\n\nexport const defaultRegistries = {\n npm: defaultRegistry,\n gh: 'https://npm.pkg.github.com/',\n}\n\nexport const defaultJsrRegistries = { jsr: 'https://npm.jsr.io/' }\n\nexport const defaultGitHosts = {\n github: 'git+ssh://git@github.com:$1/$2.git',\n bitbucket: 'git+ssh://git@bitbucket.org:$1/$2.git',\n gitlab: 'git+ssh://git@gitlab.com:$1/$2.git',\n gist: 'git+ssh://git@gist.github.com/$1.git',\n}\n\nexport const defaultGitHostArchives = {\n github: 'https://api.github.com/repos/$1/$2/tarball/$committish',\n bitbucket: 'https://bitbucket.org/$1/$2/get/$committish.tar.gz',\n gist: 'https://codeload.github.com/gist/$1/tar.gz/$committish',\n gitlab:\n 'https://gitlab.com/$1/$2/repository/archive.tar.gz?ref=$committish',\n}\n\n/**\n * These are just for legacy support of urls that are supported by npm\n * and observed in the wild.\n *\n * Not configurable, because no more will be added. If you wish to define\n * custom git hosts, use it with the `'git-hosts'` and `'git-host-archives'`\n * options.\n */\nexport const gitHostWebsites = {\n github: 'https://github.com/',\n bitbucket: 'https://bitbucket.org/',\n gist: 'https://gist.github.com/',\n gitlab: 'https://gitlab.com/',\n}\n\nexport const defaultScopeRegistries = {\n '@jsr': 'https://npm.jsr.io/',\n}\n\nexport const getOptions = (\n options?: SpecOptions,\n): SpecOptionsFilled => ({\n catalog: {},\n catalogs: {},\n ...options,\n 'jsr-registries': {\n ...(options?.['jsr-registries'] ?? {}),\n ...defaultJsrRegistries,\n },\n registry: options?.registry ?? defaultRegistry,\n 'scope-registries': options?.['scope-registries'] ?? {},\n 'git-hosts':\n options?.['git-hosts'] ?\n {\n ...defaultGitHosts,\n ...options['git-hosts'],\n }\n : defaultGitHosts,\n registries: options?.registries ?? {},\n 'git-host-archives':\n options?.['git-host-archives'] ?\n {\n ...defaultGitHostArchives,\n ...options['git-host-archives'],\n }\n : defaultGitHostArchives,\n})\n\n/**\n * Various nameless scenarios that are handled in the\n * standard spec parsing and should return an unknown name.\n *\n * Returns `true` if the name can not be inferred, `false` otherwise.\n */\nconst startsWithSpecIdentifier = (\n spec: string,\n options: SpecOptionsFilled,\n): boolean =>\n spec.startsWith('/') ||\n spec.startsWith('./') ||\n spec.startsWith('../') ||\n spec.startsWith('file:') ||\n spec.startsWith('http:') ||\n spec.startsWith('https:') ||\n spec.startsWith('workspace:') ||\n spec.startsWith('catalog:') ||\n spec.startsWith('git@') ||\n spec.startsWith('git://') ||\n spec.startsWith('git+ssh://') ||\n spec.startsWith('git+http://') ||\n spec.startsWith('git+https://') ||\n spec.startsWith('git+file://') ||\n spec.startsWith('git@github.com') ||\n spec.startsWith('registry:') ||\n spec.startsWith('npm:') ||\n spec.startsWith('gh:') ||\n // anything that starts with a known git host key, or a\n // custom registered registry protocol e.g: `github:`, `custom:`\n [\n ...Object.keys(options['git-hosts']),\n ...Object.keys(options.registries),\n ...Object.keys(options['jsr-registries']),\n ].some(key => spec.startsWith(`${key}:`))\n\n/**\n * Returns the location in which the first `@` value is found in a given\n * string, also takes into account that a string starting with @ is\n * using a scoped-name.\n */\nconst findFirstAt = (spec: string, hasScope: boolean) =>\n spec.indexOf('@', hasScope ? 1 : 0)\n\n/**\n * Return `true` if a given spec string is likely to be a git spec.\n */\nconst findGitIdentifier = (spec: string): boolean =>\n spec.indexOf('#') > 2\n\n/**\n * Return `true` if a given spec string is likely to be a file spec.\n */\nconst findFileIdentifier = (spec: string): boolean =>\n spec.includes('/')\n\n/**\n * Injects the Node.js dependencies into the Spec class.\n */\nexport type NodeJSDependenciesOptions = {\n homedir: typeof import('os').homedir\n isAbsolute: typeof import('node:path').isAbsolute\n join: typeof import('node:path').join\n resolve: typeof import('node:path').resolve\n winPath: typeof import('node:path').win32\n}\n\nexport const isSpec = (spec: unknown): spec is Spec =>\n typeof spec === 'object' &&\n spec !== null &&\n 'spec' in spec &&\n 'bareSpec' in spec &&\n 'name' in spec &&\n 'type' in spec &&\n 'options' in spec &&\n typeof (spec as Spec).spec === 'string' &&\n typeof (spec as Spec).bareSpec === 'string' &&\n typeof (spec as Spec).name === 'string'\n\n/**\n * The base, isomorphic Spec implementation.\n */\nexport class Spec implements SpecLike<Spec> {\n /**\n * Create a Spec object from a full spec, name+bareSpec, or Spec object\n *\n * Note: If a Spec object is provided, it is returned as-is, without\n * investigating whether the options match.\n */\n static parse(\n name: string,\n bareSpec: string,\n options?: SpecOptions,\n ): Spec\n static parse(spec: string, options?: SpecOptions): Spec\n static parse(spec: Spec, options?: SpecOptions): Spec\n static parse(\n spec: Spec | string,\n bareOrOptions?: SpecOptions | string,\n options?: SpecOptions,\n ): Spec {\n return typeof spec === 'object' ? spec : (\n new this(spec, bareOrOptions, options)\n )\n }\n\n static parseArgs(specOrBareSpec: string, opts?: SpecOptions): Spec {\n const options = getOptions(opts ?? {})\n\n if (startsWithSpecIdentifier(specOrBareSpec, options)) {\n const parsed = this.parse('(unknown)', specOrBareSpec, options)\n // try to look into a potential parsed subspec for a name\n if (parsed.subspec) {\n const { namedJsrRegistry: jsrHost } = parsed\n if (!jsrHost) {\n parsed.name = parsed.subspec.name\n }\n parsed.spec = `${parsed.name}@${parsed.bareSpec}`\n }\n return parsed\n } else {\n const hasScope = specOrBareSpec.startsWith('@')\n const at = findFirstAt(specOrBareSpec, hasScope)\n if (at > -1) {\n return this.parse(\n specOrBareSpec.substring(0, at),\n specOrBareSpec.substring(at + 1),\n options,\n )\n } else if (\n findGitIdentifier(specOrBareSpec) ||\n (!hasScope && findFileIdentifier(specOrBareSpec))\n ) {\n return this.parse('(unknown)', specOrBareSpec, options)\n } else {\n // doesn't have an @, so it's just a name with no version\n return this.parse(`${specOrBareSpec}@`, options)\n }\n }\n }\n\n static nodejsDependencies?: NodeJSDependenciesOptions\n\n type: SpecType\n spec: string\n options: SpecOptionsFilled\n name: string\n scope?: Scope\n scopeRegistry?: string\n bareSpec: string\n gitRemote?: string\n gitSelector?: string\n gitSelectorParsed?: GitSelectorParsed\n gitCommittish?: string\n namedGitHost?: string\n namedGitHostPath?: string\n workspaceSpec?: string\n workspace?: string\n namedRegistry?: string\n namedJsrRegistry?: string\n registry?: string\n registrySpec?: string\n conventionalRegistryTarball?: string\n semver?: string\n range?: Range\n distTag?: string\n remoteURL?: string\n file?: string\n catalog?: string\n subspec?: Spec\n overridden = false\n #final?: Spec & { type: Exclude<SpecType, 'catalog'> }\n #toString?: string\n\n /**\n * Return the final entry in the chain of subspecs\n * When deciding which thing to actually fetch, spec.final is the thing\n * to look at.\n */\n get final(): Spec & { type: Exclude<SpecType, 'catalog'> } {\n if (this.#final) return this.#final\n const final = this.subspec ? this.subspec.final : this\n /* c8 ignore start - impossible */\n if (final.type === 'catalog') {\n throw error('invalid Spec.final value, type is \"catalog\"')\n }\n /* c8 ignore stop */\n return (this.#final = final as this & {\n type: Exclude<SpecType, 'catalog'>\n })\n }\n\n /**\n * Normally, the string value of a Spec is just the string passed in to\n * be parsed. However, in the case of a chain of subspecs, like\n * `foo@npm:bar@npm:baz@npm:quux@latest`, this simplifies out the middle\n * parts of the chain, returning just `foo@npm:quux@latest`\n */\n toString() {\n if (this.#toString !== undefined) return this.#toString\n let sub: Spec = this\n // we want the SECOND from the last in the chain\n while (sub.subspec?.subspec) sub = sub.subspec\n if (sub.subspec && sub.subspec.type !== 'registry')\n sub = sub.subspec\n return (this.#toString = this.name + '@' + sub.bareSpec)\n }\n\n declare ['constructor']: typeof Spec\n\n constructor(name: string, bareSpec: string, options?: SpecOptions)\n constructor(spec: string, options?: SpecOptions)\n constructor(\n spec: Spec | string,\n bareOrOptions?: SpecOptions | string,\n options?: SpecOptions,\n )\n constructor(\n spec: string,\n bareOrOptions?: SpecOptions | string,\n options: SpecOptions = {},\n ) {\n if (bareOrOptions && typeof bareOrOptions === 'object') {\n options = bareOrOptions\n bareOrOptions = undefined\n }\n this.options = getOptions(options)\n\n if (typeof bareOrOptions === 'string') {\n this.name = spec\n this.#parseScope(spec)\n this.bareSpec = bareOrOptions\n this.spec = `${this.name}@${bareOrOptions}`\n } else {\n this.spec = spec\n // Check if this spec starts with a known registry identifier\n // but exclude git specs like 'git@github:a/b'\n if (\n !spec.startsWith('git@') &&\n startsWithSpecIdentifier(spec, this.options) &&\n spec.includes(':') &&\n [\n ...Object.keys(this.options.registries),\n ...Object.keys(defaultRegistries),\n ].some(key => spec.startsWith(`${key}:`))\n ) {\n // For specs like 'gh:@octocat/hello-world@1.0.0', don't split at the @\n // Instead, set a temporary name and let the registry logic handle it\n this.name = spec\n this.bareSpec = spec\n } else {\n const hasScope = spec.startsWith('@')\n let at = findFirstAt(spec, hasScope)\n if (at === -1) {\n // assume that an unadorned spec is just a name at the default\n // registry\n at = spec.length\n spec += '@'\n }\n this.name = spec.substring(0, at)\n if (hasScope) this.#parseScope(this.name)\n this.bareSpec = spec.substring(at + 1)\n }\n }\n\n if (this.bareSpec.startsWith('catalog:')) {\n this.catalog = this.bareSpec.substring('catalog:'.length)\n const catalog =\n this.catalog ?\n this.options.catalogs?.[this.catalog]\n : this.options.catalog\n if (!catalog) {\n throw this.#error('Named catalog not found', {\n name: this.catalog,\n validOptions:\n this.options.catalogs &&\n Object.keys(this.options.catalogs),\n })\n }\n const sub = catalog[this.name]\n if (!sub) {\n throw this.#error('Name not found in catalog', {\n name: this.name,\n validOptions: Object.keys(catalog),\n })\n }\n this.subspec = Spec.parse(this.name, sub)\n this.type = 'catalog'\n return\n }\n\n // legacy affordance: allow project urls like\n // 'https://github.com/user/project#commitish' because npm suports it and\n // this pattern is observed in the wild.\n if (this.bareSpec.startsWith('https://')) {\n for (const [name, origin] of Object.entries(gitHostWebsites)) {\n if (this.bareSpec.startsWith(origin)) {\n const parsed = new URL(this.bareSpec)\n const [user, project] = parsed.pathname\n .replace(/\\.git$/, '')\n .replace(/\\/+/g, ' ')\n .trim()\n .split(' ')\n if (user && project) {\n this.bareSpec = `${name}:${user}/${project}${parsed.hash}`\n this.spec = `${this.name}@${this.bareSpec}`\n break\n }\n }\n }\n }\n\n if (this.bareSpec.startsWith('workspace:')) {\n this.type = 'workspace'\n const ws = this.bareSpec.substring('workspace:'.length).trim()\n const w = ws.lastIndexOf('@')\n if (w === -1) {\n this.workspace = this.name\n } else {\n const wsName = ws.substring(0, w)\n if (\n !wsName ||\n wsName === '*' ||\n wsName === '~' ||\n wsName === '^' ||\n (wsName.startsWith('@') ?\n wsName.split('/').length !== 2 ||\n wsName.substring(1).includes('@')\n : wsName.includes('@'))\n ) {\n throw this.#error(\n 'workspace: name must be a path or valid package name',\n { found: wsName },\n )\n }\n this.workspace = wsName\n }\n // workspace: is the same as workspace:*\n const wss = w === -1 ? ws : ws.substring(w + 1) || '*'\n const range = wss === '*' ? undefined : parseRange(wss)\n if (wss !== '*' && wss !== '~' && wss !== '^' && !range) {\n throw this.#error(\n 'workspace: spec must be one of *, ~, or ^, or a valid semver range',\n {\n found: wss,\n wanted: `'*'|'~'|'^'|SemverRange`,\n },\n )\n }\n this.workspaceSpec = wss\n if (range) {\n this.semver = wss\n this.range = range\n }\n return\n }\n\n if (\n this.bareSpec.startsWith('git://') ||\n this.bareSpec.startsWith('git+ssh://') ||\n this.bareSpec.startsWith('git+http://') ||\n this.bareSpec.startsWith('git+https://') ||\n this.bareSpec.startsWith('git+file://') ||\n // legacy affordance\n this.bareSpec.startsWith('git@github.com')\n ) {\n if (this.bareSpec.startsWith('git@')) {\n this.bareSpec = `git+ssh://${this.bareSpec}`\n this.spec = `${this.name}@${this.bareSpec}`\n }\n this.type = 'git'\n // see if it's one of the known named hosts, and if so, prefer\n // the shorter syntax.\n for (const [name, host] of Object.entries(\n this.options['git-hosts'],\n )) {\n const s = host.indexOf('$')\n if (s > 0 && this.bareSpec.startsWith(host.substring(0, s))) {\n const p = this.bareSpec\n .substring(s)\n .replace(/\\.git(#.*)?$/, '$1')\n this.bareSpec = `${name}:${p}`\n this.spec = `${this.name}@${this.bareSpec}`\n this.#parseHostedGit(name, host)\n this.type = 'git'\n return\n }\n }\n this.#parseGitSelector(this.bareSpec)\n return\n }\n\n // Check registries before git hosts to avoid conflicts\n const regs = Object.entries(this.options.registries)\n if (!this.options.registries.npm) {\n regs.push(['npm', this.options.registry])\n }\n if (!this.options.registries.gh) {\n regs.push(['gh', defaultRegistries.gh])\n }\n if (this.bareSpec.startsWith('registry:')) {\n const reg = this.bareSpec.substring('registry:'.length)\n const h = reg.indexOf('#')\n if (h === -1) {\n throw this.#error('registry: must include name/version')\n }\n this.type = 'registry'\n let url = reg.substring(0, h)\n if (!url.endsWith('/')) url += '/'\n const regSpec = reg.substring(h + 1)\n for (let [name, u] of regs) {\n if (!u.endsWith('/')) {\n u += '/'\n this.options.registries[name] = u\n }\n if (u === url) this.namedRegistry = name\n }\n this.#parseRegistrySpec(regSpec, url)\n this.#guessRegistryTarball()\n return\n }\n\n for (const [host, url] of regs) {\n const h = `${host}:`\n if (this.bareSpec.startsWith(h)) {\n this.type = 'registry'\n this.namedRegistry = host\n this.#parseRegistrySpec(\n this.bareSpec.substring(h.length),\n url,\n ).namedRegistry ??= host\n\n // If we parsed a spec identifier, update the name and spec format\n if (this.subspec && this.name === this.bareSpec) {\n this.name = this.subspec.name\n this.spec = `${this.name}@${this.bareSpec}`\n }\n\n this.#guessRegistryTarball()\n return\n }\n }\n\n // spooky\n const ghosts = Object.entries(this.options['git-hosts'])\n for (const [name, template] of ghosts) {\n if (this.#parseHostedGit(name, template)) {\n this.type = 'git'\n return\n }\n }\n\n const jsrs = Object.entries(this.options['jsr-registries'])\n for (const [host, url] of jsrs) {\n const h = `${host}:`\n if (this.bareSpec.startsWith(h)) {\n this.type = 'registry'\n this.namedJsrRegistry = host\n this.#parseJsrRegistrySpec(\n this.bareSpec.substring(h.length),\n url,\n ).namedJsrRegistry ??= host\n return\n }\n }\n\n if (\n this.bareSpec.startsWith('https://') ||\n this.bareSpec.startsWith('http://')\n ) {\n this.remoteURL = this.bareSpec\n this.type = 'remote'\n return\n }\n\n // explicit file: url\n if (this.bareSpec.startsWith('file:')) {\n this.type = 'file'\n const [path, uri] = getNormalizeFile(\n this.constructor.nodejsDependencies,\n )(this.bareSpec, this)\n this.file = path\n this.bareSpec = uri.replace(/\\/+$/, '')\n this.spec = `${this.name}@${this.bareSpec}`\n return\n }\n\n // legacy! once upon a time, `user/project` was a shorthand for pulling\n // packages from github, instead of the more verbose and explicit\n // `github:user/project`.\n if (\n !this.bareSpec.startsWith('./') &&\n !this.bareSpec.startsWith('../') &&\n this.options['git-hosts'].github\n ) {\n const hash = this.bareSpec.indexOf('#')\n const up =\n hash === -1 ? this.bareSpec : this.bareSpec.substring(0, hash)\n if (up.split('/').length === 2) {\n this.bareSpec = `github:${this.bareSpec}`\n this.spec = `${this.name}@${this.bareSpec}`\n this.#parseHostedGit(\n 'github',\n this.options['git-hosts'].github,\n )\n this.type = 'git'\n return\n }\n }\n\n // if it contains a / and isn't picked up in the github shorthand,\n // then convert to file: specifier\n if (\n this.bareSpec.includes('/') ||\n this.bareSpec === '.' ||\n this.bareSpec === '..'\n ) {\n this.type = 'file'\n const [file, uri] = getNormalizeFile(\n this.constructor.nodejsDependencies,\n )(`file:${this.bareSpec}`, this)\n this.bareSpec = uri\n this.spec = `${this.name}@${this.bareSpec}`\n this.file = file\n return\n }\n\n // at this point, must be either semver range or dist-tag\n this.type = 'registry'\n const range = parseRange(this.bareSpec)\n if (range) {\n this.semver = this.bareSpec.trim()\n this.range = range\n } else {\n this.distTag = this.bareSpec\n }\n this.registrySpec = this.bareSpec\n const { 'scope-registries': scopeRegs, registry } = this.options\n const scopeReg = this.scope && scopeRegs[this.scope]\n this.registry = scopeReg ?? registry\n // no guessing the tarball for JSR registries\n for (const r of Object.values(this.options['jsr-registries'])) {\n if (this.registry === r) return\n }\n this.#guessRegistryTarball()\n }\n\n #parseScope(name: string) {\n if (!name.startsWith('@')) return\n const s = name.indexOf('/')\n if (s > 1 && s < name.length - 1) {\n const scope = name.substring(0, s) as Scope\n this.registry = this.scopeRegistry =\n this.options['scope-registries'][scope]\n this.scope = scope\n }\n }\n\n #parseHostedGit(name: string, template: string) {\n if (this.bareSpec.startsWith(`${name}:`)) {\n const h = this.bareSpec.indexOf('#')\n const bare =\n h === -1 ? this.bareSpec : this.bareSpec.substring(0, h)\n const hash = h === -1 ? '' : this.bareSpec.substring(h)\n const hostPath = bare.substring(name.length + 1)\n if (!hostPath) {\n throw this.#error('invalid named git host specifier')\n }\n const split = hostPath.split('/')\n let t = template\n for (let i = 0; i < split.length; i++) {\n t = t.split(`$${i + 1}`).join(split[i])\n }\n t += hash\n this.namedGitHost = name\n this.namedGitHostPath = hostPath\n this.#parseGitSelector(t)\n if (this.gitCommittish && !this.gitSelectorParsed?.path) {\n const archiveHost = this.options['git-host-archives'][name]\n if (\n name === 'github' &&\n this.gitCommittish.startsWith('pull/') &&\n this.gitCommittish.match(/\\//g)?.length === 1\n ) {\n this.gitCommittish += '/head'\n }\n if (archiveHost) {\n this.type = 'remote'\n let t = archiveHost\n t = t.split('$committish').join(this.gitCommittish)\n for (let i = 0; i < split.length; i++) {\n t = t.split(`$${i + 1}`).join(split[i])\n }\n this.remoteURL = t\n }\n }\n return true\n }\n return false\n }\n\n /* c8 ignore start */\n [kCustomInspect](): string {\n return `@vltpkg/spec.Spec ${String(this)}`\n }\n /* c8 ignore stop */\n\n #guessRegistryTarball() {\n // only try to guess if it's a single comparator for a single version\n const { name, registry, range } = this.final\n if (!registry || !range?.isSingle) return\n const stripScope = /^@[^/]+\\//\n this.conventionalRegistryTarball = String(\n new URL(\n `/${name}/-/${name.replace(stripScope, '')}-${range}.tgz`,\n registry,\n ),\n )\n }\n\n #parseRegistrySpec(s: string, url: string) {\n // note: this takes priority over the scoped registry, if set\n this.registry = url\n this.subspec = this.constructor.parse(s, {\n ...this.options,\n registry: url,\n })\n return this.subspec\n }\n\n #parseJsrRegistrySpec(s: string, url: string) {\n this.registry = url\n // @luca/cases@jsr:1.x\n if (!s.startsWith('@')) s = `${this.name}@${s}`\n const name = `@jsr/${s.replace(/^@/, '').replace(/\\//, '__')}`\n this.subspec = this.constructor.parse(name, {\n ...this.options,\n 'scope-registries': {\n ...this.options['scope-registries'],\n '@jsr': url,\n },\n })\n if (this.name === '(unknown)') {\n const nextAt = s.indexOf('@', 1)\n if (nextAt === -1) {\n this.name = s\n } else {\n this.name = s.substring(0, s.indexOf('@', 1))\n }\n }\n const reg = `${this.namedJsrRegistry}:`\n const n = `${reg}${this.name}`\n if (this.bareSpec.startsWith(n + '@')) {\n this.bareSpec = reg + this.bareSpec.substring(n.length + 1)\n } else if (this.bareSpec === n) {\n this.bareSpec = reg\n }\n this.spec = this.name + '@' + this.bareSpec\n return this.subspec\n }\n\n #error(message: string, extra: ErrorCauseOptions = {}) {\n return error(message, { spec: this.spec, ...extra }, this.#error)\n }\n\n #parseGitSelector(s: string) {\n const h = s.indexOf('#')\n if (h === -1) {\n this.gitRemote = s\n return\n }\n this.gitRemote = s.substring(0, h)\n this.gitSelector = s.substring(h + 1)\n const [selectorParsed, committish, range] =\n this.constructor.parseGitSelector(this.gitSelector, this)\n this.range = range\n this.gitCommittish = committish\n this.gitSelectorParsed = selectorParsed\n }\n\n /**\n * Should only ever be called with the bit that comes AFTER the #\n * in the git remote url.\n */\n static parseGitSelector(\n selector: string,\n spec?: Spec,\n ): [parsed: GitSelectorParsed, committish?: string, range?: Range] {\n if (!selector) return [{}]\n const split = selector.split('::')\n const first = split[0]\n let committish: string | undefined = undefined\n let range: Range | undefined = undefined\n const parsed: GitSelectorParsed = {}\n\n /* c8 ignore start - for TS's benefit */\n if (typeof first !== 'string') {\n throw typeError('impossible', {\n found: first,\n wanted: String,\n })\n }\n /* c8 ignore stop */\n if (!first.includes(':')) {\n committish = first\n split.shift()\n }\n for (const kv of split) {\n const c = kv.indexOf(':')\n /* c8 ignore next */\n if (c === -1) continue\n const k = kv.substring(0, c)\n const v = kv.substring(c + 1)\n if (k === 'semver') {\n if (committish) {\n throw error(\n 'Cannot specify a semver range and committish value',\n { spec },\n )\n }\n range = parseRange(v)\n if (!range) {\n throw error(`Invalid git tag semver range: ${v}`, { spec })\n }\n }\n if (k === 'semver' || k === 'path') {\n if (k === 'path') {\n if (\n /* c8 ignore next */ this.nodejsDependencies?.isAbsolute(\n v,\n ) ||\n /(^|\\/|\\\\)\\.\\.($|\\\\|\\/)/.test(v)\n ) {\n throw error('Invalid path in git selector', { spec })\n }\n // normalize\n /* c8 ignore start */\n parsed.path = (\n this.nodejsDependencies ?\n this.nodejsDependencies.join('/', v).substring(1)\n : v).replace(/\\\\/g, '/')\n /* c8 ignore stop */\n } else {\n parsed[k] = v\n }\n }\n }\n return [parsed, committish, range]\n }\n}\n\n// normalize our kinda-sorta spec compliant `file:` specifiers\n//\n// For historical reasons, we need to support a lot of non-spec-compliant\n// behaviors, but this massages the result into a *slightly* less offensive\n// shape.\n//\n// The result will be either a fully compliant `file://` with an absolute path,\n// or a `file:` with a relative path starting with `~`, `./`, or `../`.\nexport const getNormalizeFile =\n (opts?: NodeJSDependenciesOptions) =>\n (bareSpec: string, spec: Spec): [path: string, uri: string] => {\n const slashes = bareSpec.substring(\n 'file:'.length,\n 'file://'.length,\n )\n const pref = `file:${slashes === '//' ? slashes : ''}`\n const rest = bareSpec.substring(pref.length)\n\n // default to '/' because eol == '/' for parsing purposes\n const [a = '', b = '/', c = '/', d = '/'] = rest.split('', 4)\n\n if (!a) {\n // file:// => file:.\n // file: => file:.\n return ['.', 'file:.']\n }\n\n if (\n (a === '/' && b === '~' && c !== '/') ||\n (a === '~' && b !== '/')\n ) {\n throw error(\n `invalid file: specifier. '~username' not supported`,\n { spec },\n )\n }\n\n if (a === '~') {\n // file://~ => file:~\n // file://~/x => file:~/x\n return /* c8 ignore start */ opts ?\n [\n opts.resolve(opts.homedir(), rest.substring(2)),\n `file:${rest}`,\n ]\n : [rest, `file:${rest}`]\n }\n\n if (a === '/' && b === '~') {\n // file:///~ => file:~\n // file:/~/x => file:~/x\n /* c8 ignore start - tested in test/index.ts */\n return opts ?\n [\n opts.resolve(opts.homedir(), rest.substring(3)),\n `file:${rest.substring(1)}`,\n ]\n : /* c8 ignore stop */\n [rest.substring(1), `file:${rest.substring(1)}`]\n }\n\n if (\n a === '/' &&\n b === '.' &&\n (c === '/' || (c === '.' && d === '/'))\n ) {\n // file:/./x => file:./x\n // file:///./x => file:./x\n // file:/../x => file:../x\n // file://../x => file:../x\n return [rest.substring(1), `file:${rest.substring(1)}`]\n }\n\n if (a === '.' && (b === '/' || (b === '.' && c === '/'))) {\n // file://. => file:.\n // file://./x => file:./x\n // file://../x => file:../x\n return [rest, `file:${rest}`]\n }\n\n if (slashes === '//') {\n // must be valid URI, since we ruled out relative and homedir above\n\n // not relative, but note that file://host/share is\n // windows-specific and does not work on darwin, so disallow it.\n try {\n const parsed = new URL(bareSpec)\n if (parsed.host) {\n if (parsed.host !== 'localhost') {\n throw error(\n `invalid file:// specifier. host must be empty or 'localhost'`,\n {\n spec,\n found: parsed.host,\n validOptions: ['', 'localhost'],\n },\n )\n }\n }\n // normalize blank authority\n // file://X:/foo => file:///X:/foo\n // file://localhost/x => file:///x\n // interpret a `file:///D:/x` as `D:/x` though\n return [\n parsed.pathname.replace(/^\\/([a-zA-Z]:\\/)/, '$1'),\n `file://${parsed.pathname}`,\n ]\n } catch (er) {\n // invalid URI for other reasons, eg file://x\\u0000y/z\n throw error('invalid file:// specifier', {\n spec,\n cause: er,\n })\n }\n }\n\n // no //, no authority, be ungovernable\n\n /* c8 ignore start */\n if (opts?.winPath.isAbsolute(rest)) {\n // file:/absolute => file:///absolute\n // file:/D:/foo => file:///D:/foo\n return [rest, `file://${rest}`]\n }\n /* c8 ignore stop */\n\n // file:x => file:./x\n return [`./${rest}`, `file:./${rest}`]\n }\n"]} | ||
| {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ErrorCauseOptions } from '@vltpkg/error-cause'\nimport { error, typeError } from '@vltpkg/error-cause'\nimport type { Range } from '@vltpkg/semver'\nimport { parseRange } from '@vltpkg/semver'\nimport type {\n GitSelectorParsed,\n Scope,\n SpecLike,\n SpecOptions,\n SpecOptionsFilled,\n SpecType,\n} from './types.ts'\nexport * from './types.ts'\n\nexport const kCustomInspect = Symbol.for('nodejs.util.inspect.custom')\n\nexport const defaultRegistry = 'https://registry.npmjs.org/'\nexport const defaultRegistryName = 'npm'\n\nexport const defaultRegistries = {\n npm: defaultRegistry,\n gh: 'https://npm.pkg.github.com/',\n}\n\nexport const defaultJsrRegistries = { jsr: 'https://npm.jsr.io/' }\n\nexport const defaultGitHosts = {\n github: 'git+ssh://git@github.com:$1/$2.git',\n bitbucket: 'git+ssh://git@bitbucket.org:$1/$2.git',\n gitlab: 'git+ssh://git@gitlab.com:$1/$2.git',\n gist: 'git+ssh://git@gist.github.com/$1.git',\n}\n\nexport const defaultGitHostArchives = {\n github: 'https://api.github.com/repos/$1/$2/tarball/$committish',\n bitbucket: 'https://bitbucket.org/$1/$2/get/$committish.tar.gz',\n gist: 'https://codeload.github.com/gist/$1/tar.gz/$committish',\n gitlab:\n 'https://gitlab.com/$1/$2/repository/archive.tar.gz?ref=$committish',\n}\n\n/**\n * These are just for legacy support of urls that are supported by npm\n * and observed in the wild.\n *\n * Not configurable, because no more will be added. If you wish to define\n * custom git hosts, use it with the `'git-hosts'` and `'git-host-archives'`\n * options.\n */\nexport const gitHostWebsites = {\n github: 'https://github.com/',\n bitbucket: 'https://bitbucket.org/',\n gist: 'https://gist.github.com/',\n gitlab: 'https://gitlab.com/',\n}\n\nexport const defaultScopeRegistries = {\n '@jsr': 'https://npm.jsr.io/',\n}\n\nexport const getOptions = (\n options?: SpecOptions,\n): SpecOptionsFilled => ({\n catalog: {},\n catalogs: {},\n ...options,\n 'jsr-registries': {\n ...(options?.['jsr-registries'] ?? {}),\n ...defaultJsrRegistries,\n },\n registry: options?.registry ?? defaultRegistry,\n 'scope-registries': options?.['scope-registries'] ?? {},\n 'git-hosts':\n options?.['git-hosts'] ?\n {\n ...defaultGitHosts,\n ...options['git-hosts'],\n }\n : defaultGitHosts,\n registries: {\n ...(options?.registries ?? {}),\n ...defaultRegistries,\n },\n 'git-host-archives':\n options?.['git-host-archives'] ?\n {\n ...defaultGitHostArchives,\n ...options['git-host-archives'],\n }\n : defaultGitHostArchives,\n})\n\n/**\n * Various nameless scenarios that are handled in the\n * standard spec parsing and should return an unknown name.\n *\n * Returns `true` if the name can not be inferred, `false` otherwise.\n */\nconst startsWithSpecIdentifier = (\n spec: string,\n options: SpecOptionsFilled,\n): boolean =>\n spec.startsWith('/') ||\n spec.startsWith('./') ||\n spec.startsWith('../') ||\n spec.startsWith('file:') ||\n spec.startsWith('http:') ||\n spec.startsWith('https:') ||\n spec.startsWith('workspace:') ||\n spec.startsWith('catalog:') ||\n spec.startsWith('git@') ||\n spec.startsWith('git://') ||\n spec.startsWith('git+ssh://') ||\n spec.startsWith('git+http://') ||\n spec.startsWith('git+https://') ||\n spec.startsWith('git+file://') ||\n spec.startsWith('git@github.com') ||\n spec.startsWith('registry:') ||\n spec.startsWith('npm:') ||\n spec.startsWith('jsr:') ||\n spec.startsWith('gh:') ||\n // anything that starts with a known git host key, or a\n // custom registered registry protocol e.g: `github:`, `custom:`\n [\n ...Object.keys(options['git-hosts']),\n ...Object.keys(options.registries),\n ...Object.keys(options['jsr-registries']),\n ].some(key => spec.startsWith(`${key}:`))\n\n/**\n * Returns the location in which the first `@` value is found in a given\n * string, also takes into account that a string starting with @ is\n * using a scoped-name.\n */\nconst findFirstAt = (spec: string, hasScope: boolean) =>\n spec.indexOf('@', hasScope ? 1 : 0)\n\n/**\n * Return `true` if a given spec string is likely to be a git spec.\n */\nconst findGitIdentifier = (spec: string): boolean =>\n spec.indexOf('#') > 2\n\n/**\n * Return `true` if a given spec string is likely to be a file spec.\n */\nconst findFileIdentifier = (spec: string): boolean =>\n spec.includes('/')\n\n/**\n * Injects the Node.js dependencies into the Spec class.\n */\nexport type NodeJSDependenciesOptions = {\n homedir: typeof import('os').homedir\n isAbsolute: typeof import('node:path').isAbsolute\n join: typeof import('node:path').join\n resolve: typeof import('node:path').resolve\n winPath: typeof import('node:path').win32\n}\n\nexport const isSpec = (spec: unknown): spec is Spec =>\n typeof spec === 'object' &&\n spec !== null &&\n 'spec' in spec &&\n 'bareSpec' in spec &&\n 'name' in spec &&\n 'type' in spec &&\n 'options' in spec &&\n typeof (spec as Spec).spec === 'string' &&\n typeof (spec as Spec).bareSpec === 'string' &&\n typeof (spec as Spec).name === 'string'\n\n/**\n * Retrieves the short configured name of the default registry if one\n * is available.\n */\nexport const currentDefaultRegistryName = (\n registry: string,\n options: SpecOptions,\n): string | undefined => {\n for (const [name, url] of Object.entries(\n options.registries /* c8 ignore next */ ?? {},\n )) {\n const specRegURL =\n registry.endsWith('/') ? registry : registry + '/'\n const knownRegURL = url.endsWith('/') ? url : url + '/'\n if (specRegURL === knownRegURL) {\n return name\n }\n }\n}\n\n/**\n * The base, isomorphic Spec implementation.\n */\nexport class Spec implements SpecLike<Spec> {\n /**\n * Create a Spec object from a full spec, name+bareSpec, or Spec object\n *\n * Note: If a Spec object is provided, it is returned as-is, without\n * investigating whether the options match.\n */\n static parse(\n name: string,\n bareSpec: string,\n options?: SpecOptions,\n ): Spec\n static parse(spec: string, options?: SpecOptions): Spec\n static parse(spec: Spec, options?: SpecOptions): Spec\n static parse(\n spec: Spec | string,\n bareOrOptions?: SpecOptions | string,\n options?: SpecOptions,\n ): Spec {\n return typeof spec === 'object' ? spec : (\n new this(spec, bareOrOptions, options)\n )\n }\n\n static parseArgs(specOrBareSpec: string, opts?: SpecOptions): Spec {\n const options = getOptions(opts ?? {})\n\n if (startsWithSpecIdentifier(specOrBareSpec, options)) {\n const parsed = this.parse('(unknown)', specOrBareSpec, options)\n // try to look into a potential parsed subspec for a name\n if (parsed.subspec) {\n const { namedJsrRegistry: jsrHost } = parsed\n if (!jsrHost) {\n parsed.name = parsed.subspec.name\n }\n parsed.spec = `${parsed.name}@${parsed.bareSpec}`\n }\n return parsed\n } else {\n const hasScope = specOrBareSpec.startsWith('@')\n const at = findFirstAt(specOrBareSpec, hasScope)\n if (at > -1) {\n return this.parse(\n specOrBareSpec.substring(0, at),\n specOrBareSpec.substring(at + 1),\n options,\n )\n } else if (\n findGitIdentifier(specOrBareSpec) ||\n (!hasScope && findFileIdentifier(specOrBareSpec))\n ) {\n return this.parse('(unknown)', specOrBareSpec, options)\n } else {\n // doesn't have an @, so it's just a name with no version\n return this.parse(`${specOrBareSpec}@`, options)\n }\n }\n }\n\n static nodejsDependencies?: NodeJSDependenciesOptions\n\n type: SpecType\n spec: string\n options: SpecOptionsFilled\n name: string\n scope?: Scope\n scopeRegistry?: string\n bareSpec: string\n gitRemote?: string\n gitSelector?: string\n gitSelectorParsed?: GitSelectorParsed\n gitCommittish?: string\n namedGitHost?: string\n namedGitHostPath?: string\n workspaceSpec?: string\n workspace?: string\n namedRegistry?: string\n namedJsrRegistry?: string\n registry?: string\n registrySpec?: string\n conventionalRegistryTarball?: string\n semver?: string\n range?: Range\n distTag?: string\n remoteURL?: string\n file?: string\n catalog?: string\n subspec?: Spec\n overridden = false\n #final?: Spec & { type: Exclude<SpecType, 'catalog'> }\n #toString?: string\n\n /**\n * Return the final entry in the chain of subspecs\n * When deciding which thing to actually fetch, spec.final is the thing\n * to look at.\n */\n get final(): Spec & { type: Exclude<SpecType, 'catalog'> } {\n if (this.#final) return this.#final\n const final = this.subspec ? this.subspec.final : this\n /* c8 ignore start - impossible */\n if (final.type === 'catalog') {\n throw error('invalid Spec.final value, type is \"catalog\"')\n }\n /* c8 ignore stop */\n return (this.#final = final as this & {\n type: Exclude<SpecType, 'catalog'>\n })\n }\n\n /**\n * Normally, the string value of a Spec is just the string passed in to\n * be parsed. However, in the case of a chain of subspecs, like\n * `foo@npm:bar@npm:baz@npm:quux@latest`, this simplifies out the middle\n * parts of the chain, returning just `foo@npm:quux@latest`\n */\n toString() {\n if (this.#toString !== undefined) return this.#toString\n let sub: Spec = this\n // we want the SECOND from the last in the chain\n while (sub.subspec?.subspec) sub = sub.subspec\n if (sub.subspec && sub.subspec.type !== 'registry')\n sub = sub.subspec\n return (this.#toString = this.name + '@' + sub.bareSpec)\n }\n\n declare ['constructor']: typeof Spec\n\n constructor(name: string, bareSpec: string, options?: SpecOptions)\n constructor(spec: string, options?: SpecOptions)\n constructor(\n spec: Spec | string,\n bareOrOptions?: SpecOptions | string,\n options?: SpecOptions,\n )\n constructor(\n spec: string,\n bareOrOptions?: SpecOptions | string,\n options: SpecOptions = {},\n ) {\n if (bareOrOptions && typeof bareOrOptions === 'object') {\n options = bareOrOptions\n bareOrOptions = undefined\n }\n this.options = getOptions(options)\n\n if (typeof bareOrOptions === 'string') {\n this.name = spec\n this.#parseScope(spec)\n this.bareSpec = bareOrOptions\n this.spec = `${this.name}@${bareOrOptions}`\n } else {\n this.spec = spec\n // Check if this spec starts with a known registry identifier\n // but exclude git specs like 'git@github:a/b'\n if (\n !spec.startsWith('git@') &&\n startsWithSpecIdentifier(spec, this.options) &&\n spec.includes(':') &&\n [\n ...Object.keys(this.options.registries),\n ...Object.keys(defaultRegistries),\n ].some(key => spec.startsWith(`${key}:`))\n ) {\n // For specs like 'gh:@octocat/hello-world@1.0.0', don't split at the @\n // Instead, set a temporary name and let the registry logic handle it\n this.name = spec\n this.bareSpec = spec\n } else {\n const hasScope = spec.startsWith('@')\n let at = findFirstAt(spec, hasScope)\n if (at === -1) {\n // assume that an unadorned spec is just a name at the default\n // registry\n at = spec.length\n spec += '@'\n }\n this.name = spec.substring(0, at)\n if (hasScope) this.#parseScope(this.name)\n this.bareSpec = spec.substring(at + 1)\n }\n }\n\n if (this.bareSpec.startsWith('catalog:')) {\n this.catalog = this.bareSpec.substring('catalog:'.length)\n const catalog =\n this.catalog ?\n this.options.catalogs?.[this.catalog]\n : this.options.catalog\n if (!catalog) {\n throw this.#error('Named catalog not found', {\n name: this.catalog,\n validOptions:\n this.options.catalogs &&\n Object.keys(this.options.catalogs),\n })\n }\n const sub = catalog[this.name]\n if (!sub) {\n throw this.#error('Name not found in catalog', {\n name: this.name,\n validOptions: Object.keys(catalog),\n })\n }\n this.subspec = Spec.parse(this.name, sub)\n this.type = 'catalog'\n return\n }\n\n // legacy affordance: allow project urls like\n // 'https://github.com/user/project#commitish' because npm suports it and\n // this pattern is observed in the wild.\n if (this.bareSpec.startsWith('https://')) {\n for (const [name, origin] of Object.entries(gitHostWebsites)) {\n if (this.bareSpec.startsWith(origin)) {\n const parsed = new URL(this.bareSpec)\n const [user, project] = parsed.pathname\n .replace(/\\.git$/, '')\n .replace(/\\/+/g, ' ')\n .trim()\n .split(' ')\n if (user && project) {\n this.bareSpec = `${name}:${user}/${project}${parsed.hash}`\n this.spec = `${this.name}@${this.bareSpec}`\n break\n }\n }\n }\n }\n\n if (this.bareSpec.startsWith('workspace:')) {\n this.type = 'workspace'\n const ws = this.bareSpec.substring('workspace:'.length).trim()\n const w = ws.lastIndexOf('@')\n if (w === -1) {\n this.workspace = this.name\n } else {\n const wsName = ws.substring(0, w)\n if (\n !wsName ||\n wsName === '*' ||\n wsName === '~' ||\n wsName === '^' ||\n (wsName.startsWith('@') ?\n wsName.split('/').length !== 2 ||\n wsName.substring(1).includes('@')\n : wsName.includes('@'))\n ) {\n throw this.#error(\n 'workspace: name must be a path or valid package name',\n { found: wsName },\n )\n }\n this.workspace = wsName\n }\n // workspace: is the same as workspace:*\n const wss = w === -1 ? ws : ws.substring(w + 1) || '*'\n const range = wss === '*' ? undefined : parseRange(wss)\n if (wss !== '*' && wss !== '~' && wss !== '^' && !range) {\n throw this.#error(\n 'workspace: spec must be one of *, ~, or ^, or a valid semver range',\n {\n found: wss,\n wanted: `'*'|'~'|'^'|SemverRange`,\n },\n )\n }\n this.workspaceSpec = wss\n if (range) {\n this.semver = wss\n this.range = range\n }\n return\n }\n\n if (\n this.bareSpec.startsWith('git://') ||\n this.bareSpec.startsWith('git+ssh://') ||\n this.bareSpec.startsWith('git+http://') ||\n this.bareSpec.startsWith('git+https://') ||\n this.bareSpec.startsWith('git+file://') ||\n // legacy affordance\n this.bareSpec.startsWith('git@github.com')\n ) {\n if (this.bareSpec.startsWith('git@')) {\n this.bareSpec = `git+ssh://${this.bareSpec}`\n this.spec = `${this.name}@${this.bareSpec}`\n }\n this.type = 'git'\n // see if it's one of the known named hosts, and if so, prefer\n // the shorter syntax.\n for (const [name, host] of Object.entries(\n this.options['git-hosts'],\n )) {\n const s = host.indexOf('$')\n if (s > 0 && this.bareSpec.startsWith(host.substring(0, s))) {\n const p = this.bareSpec\n .substring(s)\n .replace(/\\.git(#.*)?$/, '$1')\n this.bareSpec = `${name}:${p}`\n this.spec = `${this.name}@${this.bareSpec}`\n this.#parseHostedGit(name, host)\n this.type = 'git'\n return\n }\n }\n this.#parseGitSelector(this.bareSpec)\n return\n }\n\n // Check registries before git hosts to avoid conflicts\n const regs = Object.entries(this.options.registries)\n if (this.bareSpec.startsWith('registry:')) {\n const reg = this.bareSpec.substring('registry:'.length)\n const h = reg.indexOf('#')\n if (h === -1) {\n throw this.#error('registry: must include name/version')\n }\n this.type = 'registry'\n let url = reg.substring(0, h)\n if (!url.endsWith('/')) url += '/'\n const regSpec = reg.substring(h + 1)\n for (let [name, u] of regs) {\n if (!u.endsWith('/')) {\n u += '/'\n this.options.registries[name] = u\n }\n if (u === url) this.namedRegistry = name\n }\n this.#parseRegistrySpec(regSpec, url)\n this.#guessRegistryTarball()\n return\n }\n\n for (const [host, url] of regs) {\n const h = `${host}:`\n if (this.bareSpec.startsWith(h)) {\n this.type = 'registry'\n this.namedRegistry = host\n this.#parseRegistrySpec(\n this.bareSpec.substring(h.length),\n url,\n ).namedRegistry ??= host\n\n // If we parsed a spec identifier, update the name and spec format\n if (this.subspec && this.name === this.bareSpec) {\n this.name = this.subspec.name\n this.spec = `${this.name}@${this.bareSpec}`\n }\n\n this.#guessRegistryTarball()\n return\n }\n }\n\n // spooky\n const ghosts = Object.entries(this.options['git-hosts'])\n for (const [name, template] of ghosts) {\n if (this.#parseHostedGit(name, template)) {\n this.type = 'git'\n return\n }\n }\n\n const jsrs = Object.entries(this.options['jsr-registries'])\n for (const [host, url] of jsrs) {\n const h = `${host}:`\n if (this.bareSpec.startsWith(h)) {\n this.type = 'registry'\n this.namedJsrRegistry = host\n this.#parseJsrRegistrySpec(\n this.bareSpec.substring(h.length),\n url,\n ).namedJsrRegistry ??= host\n return\n }\n }\n\n if (\n this.bareSpec.startsWith('https://') ||\n this.bareSpec.startsWith('http://')\n ) {\n this.remoteURL = this.bareSpec\n this.type = 'remote'\n return\n }\n\n // explicit file: url\n if (this.bareSpec.startsWith('file:')) {\n this.type = 'file'\n const [path, uri] = getNormalizeFile(\n this.constructor.nodejsDependencies,\n )(this.bareSpec, this)\n this.file = path\n this.bareSpec = uri.replace(/\\/+$/, '')\n this.spec = `${this.name}@${this.bareSpec}`\n return\n }\n\n // legacy! once upon a time, `user/project` was a shorthand for pulling\n // packages from github, instead of the more verbose and explicit\n // `github:user/project`.\n if (\n !this.bareSpec.startsWith('./') &&\n !this.bareSpec.startsWith('../') &&\n this.options['git-hosts'].github\n ) {\n const hash = this.bareSpec.indexOf('#')\n const up =\n hash === -1 ? this.bareSpec : this.bareSpec.substring(0, hash)\n if (up.split('/').length === 2) {\n this.bareSpec = `github:${this.bareSpec}`\n this.spec = `${this.name}@${this.bareSpec}`\n this.#parseHostedGit(\n 'github',\n this.options['git-hosts'].github,\n )\n this.type = 'git'\n return\n }\n }\n\n // if it contains a / and isn't picked up in the github shorthand,\n // then convert to file: specifier\n if (\n this.bareSpec.includes('/') ||\n this.bareSpec === '.' ||\n this.bareSpec === '..'\n ) {\n this.type = 'file'\n const [file, uri] = getNormalizeFile(\n this.constructor.nodejsDependencies,\n )(`file:${this.bareSpec}`, this)\n this.bareSpec = uri\n this.spec = `${this.name}@${this.bareSpec}`\n this.file = file\n return\n }\n\n // at this point, must be either semver range or dist-tag\n this.type = 'registry'\n const range = parseRange(this.bareSpec)\n if (range) {\n this.semver = this.bareSpec.trim()\n this.range = range\n } else {\n this.distTag = this.bareSpec\n }\n this.registrySpec = this.bareSpec\n const { 'scope-registries': scopeRegs, registry } = this.options\n const scopeReg = this.scope && scopeRegs[this.scope]\n this.registry = scopeReg ?? registry\n // no guessing the tarball for JSR registries\n for (const r of Object.values(this.options['jsr-registries'])) {\n if (this.registry === r) return\n }\n this.#guessRegistryTarball()\n }\n\n #parseScope(name: string) {\n if (!name.startsWith('@')) return\n const s = name.indexOf('/')\n if (s > 1 && s < name.length - 1) {\n const scope = name.substring(0, s) as Scope\n this.registry = this.scopeRegistry =\n this.options['scope-registries'][scope]\n this.scope = scope\n }\n }\n\n #parseHostedGit(name: string, template: string) {\n if (this.bareSpec.startsWith(`${name}:`)) {\n const h = this.bareSpec.indexOf('#')\n const bare =\n h === -1 ? this.bareSpec : this.bareSpec.substring(0, h)\n const hash = h === -1 ? '' : this.bareSpec.substring(h)\n const hostPath = bare.substring(name.length + 1)\n if (!hostPath) {\n throw this.#error('invalid named git host specifier')\n }\n const split = hostPath.split('/')\n let t = template\n for (let i = 0; i < split.length; i++) {\n t = t.split(`$${i + 1}`).join(split[i])\n }\n t += hash\n this.namedGitHost = name\n this.namedGitHostPath = hostPath\n this.#parseGitSelector(t)\n if (this.gitCommittish && !this.gitSelectorParsed?.path) {\n const archiveHost = this.options['git-host-archives'][name]\n if (\n name === 'github' &&\n this.gitCommittish.startsWith('pull/') &&\n this.gitCommittish.match(/\\//g)?.length === 1\n ) {\n this.gitCommittish += '/head'\n }\n if (archiveHost) {\n this.type = 'remote'\n let t = archiveHost\n t = t.split('$committish').join(this.gitCommittish)\n for (let i = 0; i < split.length; i++) {\n t = t.split(`$${i + 1}`).join(split[i])\n }\n this.remoteURL = t\n }\n }\n return true\n }\n return false\n }\n\n /* c8 ignore start */\n [kCustomInspect](): string {\n return `@vltpkg/spec.Spec ${String(this)}`\n }\n /* c8 ignore stop */\n\n #guessRegistryTarball() {\n // only try to guess if it's a single comparator for a single version\n const { name, registry, range } = this.final\n if (!registry || !range?.isSingle) return\n const stripScope = /^@[^/]+\\//\n this.conventionalRegistryTarball = String(\n new URL(\n `/${name}/-/${name.replace(stripScope, '')}-${range}.tgz`,\n registry,\n ),\n )\n }\n\n #parseRegistrySpec(s: string, url: string) {\n // note: this takes priority over the scoped registry, if set\n this.registry = url\n this.subspec = this.constructor.parse(s, {\n ...this.options,\n registry: url,\n })\n return this.subspec\n }\n\n #parseJsrRegistrySpec(s: string, url: string) {\n this.registry = url\n // @luca/cases@jsr:1.x\n if (!s.startsWith('@')) s = `${this.name}@${s}`\n const name = `@jsr/${s.replace(/^@/, '').replace(/\\//, '__')}`\n this.subspec = this.constructor.parse(name, {\n ...this.options,\n 'scope-registries': {\n ...this.options['scope-registries'],\n '@jsr': url,\n },\n })\n if (this.name === '(unknown)') {\n const nextAt = s.indexOf('@', 1)\n if (nextAt === -1) {\n this.name = s\n } else {\n this.name = s.substring(0, s.indexOf('@', 1))\n }\n }\n const reg = `${this.namedJsrRegistry}:`\n const n = `${reg}${this.name}`\n if (this.bareSpec.startsWith(n + '@')) {\n this.bareSpec = reg + this.bareSpec.substring(n.length + 1)\n } else if (this.bareSpec === n) {\n this.bareSpec = reg\n }\n this.spec = this.name + '@' + this.bareSpec\n return this.subspec\n }\n\n #error(message: string, extra: ErrorCauseOptions = {}) {\n return error(message, { spec: this.spec, ...extra }, this.#error)\n }\n\n #parseGitSelector(s: string) {\n const h = s.indexOf('#')\n if (h === -1) {\n this.gitRemote = s\n return\n }\n this.gitRemote = s.substring(0, h)\n this.gitSelector = s.substring(h + 1)\n const [selectorParsed, committish, range] =\n this.constructor.parseGitSelector(this.gitSelector, this)\n this.range = range\n this.gitCommittish = committish\n this.gitSelectorParsed = selectorParsed\n }\n\n /**\n * Should only ever be called with the bit that comes AFTER the #\n * in the git remote url.\n */\n static parseGitSelector(\n selector: string,\n spec?: Spec,\n ): [parsed: GitSelectorParsed, committish?: string, range?: Range] {\n if (!selector) return [{}]\n const split = selector.split('::')\n const first = split[0]\n let committish: string | undefined = undefined\n let range: Range | undefined = undefined\n const parsed: GitSelectorParsed = {}\n\n /* c8 ignore start - for TS's benefit */\n if (typeof first !== 'string') {\n throw typeError('impossible', {\n found: first,\n wanted: String,\n })\n }\n /* c8 ignore stop */\n if (!first.includes(':')) {\n committish = first\n split.shift()\n }\n for (const kv of split) {\n const c = kv.indexOf(':')\n /* c8 ignore next */\n if (c === -1) continue\n const k = kv.substring(0, c)\n const v = kv.substring(c + 1)\n if (k === 'semver') {\n if (committish) {\n throw error(\n 'Cannot specify a semver range and committish value',\n { spec },\n )\n }\n range = parseRange(v)\n if (!range) {\n throw error(`Invalid git tag semver range: ${v}`, { spec })\n }\n }\n if (k === 'semver' || k === 'path') {\n if (k === 'path') {\n if (\n /* c8 ignore next */ this.nodejsDependencies?.isAbsolute(\n v,\n ) ||\n /(^|\\/|\\\\)\\.\\.($|\\\\|\\/)/.test(v)\n ) {\n throw error('Invalid path in git selector', { spec })\n }\n // normalize\n /* c8 ignore start */\n parsed.path = (\n this.nodejsDependencies ?\n this.nodejsDependencies.join('/', v).substring(1)\n : v).replace(/\\\\/g, '/')\n /* c8 ignore stop */\n } else {\n parsed[k] = v\n }\n }\n }\n return [parsed, committish, range]\n }\n}\n\n// normalize our kinda-sorta spec compliant `file:` specifiers\n//\n// For historical reasons, we need to support a lot of non-spec-compliant\n// behaviors, but this massages the result into a *slightly* less offensive\n// shape.\n//\n// The result will be either a fully compliant `file://` with an absolute path,\n// or a `file:` with a relative path starting with `~`, `./`, or `../`.\nexport const getNormalizeFile =\n (opts?: NodeJSDependenciesOptions) =>\n (bareSpec: string, spec: Spec): [path: string, uri: string] => {\n const slashes = bareSpec.substring(\n 'file:'.length,\n 'file://'.length,\n )\n const pref = `file:${slashes === '//' ? slashes : ''}`\n const rest = bareSpec.substring(pref.length)\n\n // default to '/' because eol == '/' for parsing purposes\n const [a = '', b = '/', c = '/', d = '/'] = rest.split('', 4)\n\n if (!a) {\n // file:// => file:.\n // file: => file:.\n return ['.', 'file:.']\n }\n\n if (\n (a === '/' && b === '~' && c !== '/') ||\n (a === '~' && b !== '/')\n ) {\n throw error(\n `invalid file: specifier. '~username' not supported`,\n { spec },\n )\n }\n\n if (a === '~') {\n // file://~ => file:~\n // file://~/x => file:~/x\n return /* c8 ignore start */ opts ?\n [\n opts.resolve(opts.homedir(), rest.substring(2)),\n `file:${rest}`,\n ]\n : [rest, `file:${rest}`]\n }\n\n if (a === '/' && b === '~') {\n // file:///~ => file:~\n // file:/~/x => file:~/x\n /* c8 ignore start - tested in test/index.ts */\n return opts ?\n [\n opts.resolve(opts.homedir(), rest.substring(3)),\n `file:${rest.substring(1)}`,\n ]\n : /* c8 ignore stop */\n [rest.substring(1), `file:${rest.substring(1)}`]\n }\n\n if (\n a === '/' &&\n b === '.' &&\n (c === '/' || (c === '.' && d === '/'))\n ) {\n // file:/./x => file:./x\n // file:///./x => file:./x\n // file:/../x => file:../x\n // file://../x => file:../x\n return [rest.substring(1), `file:${rest.substring(1)}`]\n }\n\n if (a === '.' && (b === '/' || (b === '.' && c === '/'))) {\n // file://. => file:.\n // file://./x => file:./x\n // file://../x => file:../x\n return [rest, `file:${rest}`]\n }\n\n if (slashes === '//') {\n // must be valid URI, since we ruled out relative and homedir above\n\n // not relative, but note that file://host/share is\n // windows-specific and does not work on darwin, so disallow it.\n try {\n const parsed = new URL(bareSpec)\n if (parsed.host) {\n if (parsed.host !== 'localhost') {\n throw error(\n `invalid file:// specifier. host must be empty or 'localhost'`,\n {\n spec,\n found: parsed.host,\n validOptions: ['', 'localhost'],\n },\n )\n }\n }\n // normalize blank authority\n // file://X:/foo => file:///X:/foo\n // file://localhost/x => file:///x\n // interpret a `file:///D:/x` as `D:/x` though\n return [\n parsed.pathname.replace(/^\\/([a-zA-Z]:\\/)/, '$1'),\n `file://${parsed.pathname}`,\n ]\n } catch (er) {\n // invalid URI for other reasons, eg file://x\\u0000y/z\n throw error('invalid file:// specifier', {\n spec,\n cause: er,\n })\n }\n }\n\n // no //, no authority, be ungovernable\n\n /* c8 ignore start */\n if (opts?.winPath.isAbsolute(rest)) {\n // file:/absolute => file:///absolute\n // file:/D:/foo => file:///D:/foo\n return [rest, `file://${rest}`]\n }\n /* c8 ignore stop */\n\n // file:x => file:./x\n return [`./${rest}`, `file:./${rest}`]\n }\n"]} |
+3
-3
| { | ||
| "name": "@vltpkg/spec", | ||
| "description": "Package specifier library", | ||
| "version": "1.0.0-rc.8", | ||
| "version": "1.0.0-rc.9", | ||
| "repository": { | ||
@@ -24,4 +24,4 @@ "type": "git", | ||
| "dependencies": { | ||
| "@vltpkg/semver": "1.0.0-rc.8", | ||
| "@vltpkg/error-cause": "1.0.0-rc.8" | ||
| "@vltpkg/error-cause": "1.0.0-rc.9", | ||
| "@vltpkg/semver": "1.0.0-rc.9" | ||
| }, | ||
@@ -28,0 +28,0 @@ "devDependencies": { |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
122482
1.29%1074
1.7%+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
Updated