Complete TypeScript type definitions for @socketregistry/packageurl-js.
All types are exported from the main entry point for maximum accessibility.
Plain object representation of a Package URL.
type PackageURLObject = {
type?: string | undefined
namespace?: string | undefined
name?: string | undefined
version?: string | undefined
qualifiers?: QualifiersObject | undefined
subpath?: string | undefined
}Usage:
import type { PackageURLObject } from '@socketregistry/packageurl-js'
const obj: PackageURLObject = {
type: 'npm',
name: 'lodash',
version: '4.17.21',
}Returned by:
PackageURL.toObject()JSON.parse(purl.toJSON())
Union type for PURL component values.
type PackageURLComponentValue = string | QualifiersObject | undefinedUsage:
Used for dynamic property access on PackageURL instances.
Labeled tuple of parsed PURL components.
type ParsedPurlComponents = [
type: string | undefined,
namespace: string | undefined,
name: string | undefined,
version: string | undefined,
qualifiers: URLSearchParams | undefined,
subpath: string | undefined,
]Usage:
import type { ParsedPurlComponents } from '@socketregistry/packageurl-js'
const components: ParsedPurlComponents = PackageURL.parseString(
'pkg:npm/lodash@4.17.21',
)
const [type, namespace, name, version, qualifiers, subpath] = componentsReturned by:
PackageURL.parseString()
Components parsed from npm package specifier.
type NpmPackageComponents = {
namespace: string | undefined // Scope for scoped packages (e.g., '@babel')
name: string // Package name (required)
version: string | undefined // Version without range prefixes
}Usage:
import { parseNpmSpecifier } from '@socketregistry/packageurl-js'
import type { NpmPackageComponents } from '@socketregistry/packageurl-js'
const components: NpmPackageComponents = parseNpmSpecifier('lodash@4.17.21')
// -> { namespace: undefined, name: 'lodash', version: '4.17.21' }Features:
namespaceis populated for scoped packages (@scope/package)versionhas range prefixes stripped (^,~,>=, etc.)- Dist-tags are preserved as-is (
latest,next,beta)
Returned by:
parseNpmSpecifier()
Key-value pairs for PURL qualifiers.
type QualifiersObject = Record<string, QualifiersValue>Usage:
import type { QualifiersObject } from '@socketregistry/packageurl-js'
const qualifiers: QualifiersObject = {
arch: 'x86_64',
os: 'linux',
classifier: 'sources',
}Valid types for qualifier values.
type QualifiersValue = string | number | boolean | null | undefinedUsage:
const qualifiers: QualifiersObject = {
debug: true, // boolean
priority: 10, // number
tag: 'stable', // string
optional: null, // null
missing: undefined, // undefined
}Function type for encoding PURL components.
type ComponentEncoder = (value: unknown) => stringUsage:
import { PurlComponent } from '@socketregistry/packageurl-js'
import type { ComponentEncoder } from '@socketregistry/packageurl-js'
const encoder: ComponentEncoder = PurlComponent.name.encode
encoder('my-package') // -> 'my-package'Function type for normalizing PURL components.
type ComponentNormalizer = (value: string) => string | undefinedUsage:
import { PurlType } from '@socketregistry/packageurl-js'
import type { ComponentNormalizer } from '@socketregistry/packageurl-js'
const normalizer: ComponentNormalizer = PurlType.npm.normalizers.nameFunction type for validating PURL components.
type ComponentValidator = (value: unknown, throws: boolean) => booleanUsage:
import type { ComponentValidator } from '@socketregistry/packageurl-js'
const validator: ComponentValidator = (value, throws) => {
if (throws && !value) throw new Error('Invalid')
return Boolean(value)
}Repository URL conversion result.
interface RepositoryUrl {
type: 'git' | 'hg' | 'svn' | 'web'
url: string
}Usage:
import { UrlConverter } from '@socketregistry/packageurl-js'
import type { RepositoryUrl } from '@socketregistry/packageurl-js'
const repo: RepositoryUrl | null = UrlConverter.toRepositoryUrl(purl)
if (repo) {
console.log(`${repo.type}: ${repo.url}`)
}Returned by:
UrlConverter.toRepositoryUrl()
Download URL conversion result.
interface DownloadUrl {
type: 'tarball' | 'zip' | 'exe' | 'wheel' | 'jar' | 'gem' | 'other'
url: string
}Usage:
import { UrlConverter } from '@socketregistry/packageurl-js'
import type { DownloadUrl } from '@socketregistry/packageurl-js'
const download: DownloadUrl | null = UrlConverter.toDownloadUrl(purl)
if (download) {
console.log(`Download ${download.type} from ${download.url}`)
}Returned by:
UrlConverter.toDownloadUrl()
Discriminated union for functional error handling.
type Result<T, E = Error> = Ok<T> | Err<E>Usage:
import type { Result } from '@socketregistry/packageurl-js'
function parseConfig(): Result<Config, ValidationError> {
// ...
}
const result = parseConfig()
if (result.kind === 'ok') {
console.log(result.value) // Type: Config
} else {
console.error(result.error) // Type: ValidationError
}Successful result containing a value.
class Ok<T> {
readonly kind: 'ok'
readonly value: T
isOk(): this is Ok<T>
isErr(): false
unwrap(): T
unwrapOr(defaultValue: T): T
map<U>(fn: (value: T) => U): Result<U, never>
andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, F>
}Usage:
import { ok } from '@socketregistry/packageurl-js'
const result = ok('success')
result.isOk() // -> true
result.unwrap() // -> 'success'Error result containing an error.
class Err<E = Error> {
readonly kind: 'err'
readonly error: E
isOk(): false
isErr(): this is Err<E>
unwrap(): never // throws
unwrapOr<T>(defaultValue: T): T
mapErr<F>(fn: (error: E) => F): Result<never, F>
orElse<U>(fn: (error: E) => Result<U, never>): Result<U, never>
}Usage:
import { err } from '@socketregistry/packageurl-js'
const result = err(new Error('failed'))
result.isErr() // -> true
result.error.message // -> 'failed'Constants for standard PURL qualifier keys.
import { PurlQualifierNames } from '@socketregistry/packageurl-js'
const qualifiers = {
[PurlQualifierNames.Checksum]: 'sha256:abc123',
[PurlQualifierNames.DownloadUrl]: 'https://example.com/package.tar.gz',
}Available constants:
RepositoryUrl='repository_url'DownloadUrl='download_url'VcsUrl='vcs_url'FileName='file_name'Checksum='checksum'
All types can be imported from the main entry point:
import type {
// PURL types
PackageURLObject,
PackageURLComponentValue,
ParsedPurlComponents,
// Parser types
NpmPackageComponents,
// Component types
QualifiersObject,
QualifiersValue,
ComponentEncoder,
ComponentNormalizer,
ComponentValidator,
// URL types
RepositoryUrl,
DownloadUrl,
// Result types
Result,
} from '@socketregistry/packageurl-js'Constants (value imports):
import {
PurlQualifierNames,
PURL_Type,
PurlType,
PurlComponent,
} from '@socketregistry/packageurl-js'import type { Result } from '@socketregistry/packageurl-js'
function processResult<T, E>(result: Result<T, E>) {
if (result.isOk()) {
// TypeScript knows result is Ok<T>
console.log(result.value)
} else {
// TypeScript knows result is Err<E>
console.error(result.error)
}
// Using discriminated union
if (result.kind === 'ok') {
console.log(result.value)
} else {
console.error(result.error)
}
}import type { PackageURLObject, Result } from '@socketregistry/packageurl-js'
function validatePurl<T extends PackageURLObject>(
obj: T,
): Result<T, ValidationError> {
// ...
}import { parseNpmSpecifier } from '@socketregistry/packageurl-js'
// Type is inferred as NpmPackageComponents
const components = parseNpmSpecifier('lodash@4.17.21')
// Destructuring with type inference
const { namespace, name, version } = componentsimport type { Result, Ok, Err } from '@socketregistry/packageurl-js'
type ExtractValue<T> = T extends Ok<infer U> ? U : never
type ExtractError<T> = T extends Err<infer E> ? E : never- API Reference - Complete API documentation
- Package URL Specification - Official purl spec