@vltpkg/types 0.0.0-16 → 0.0.0-18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +51 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +171 -3
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -2
package/dist/esm/index.d.ts
CHANGED
|
@@ -47,6 +47,24 @@ export type NormalizedFundingEntry = {
|
|
|
47
47
|
export type NormalizedFunding = NormalizedFundingEntry[];
|
|
48
48
|
/** Normalize funding information to a consistent format. */
|
|
49
49
|
export declare const normalizeFunding: (funding: unknown) => NormalizedFunding | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Normalize the version field in a manifest.
|
|
52
|
+
*/
|
|
53
|
+
export declare const normalizeVersion: (manifest: Manifest | ManifestRegistry) => Manifest | ManifestRegistry;
|
|
54
|
+
export declare const parsePerson: (author: unknown, writeAccess?: boolean, isPublisher?: boolean) => NormalizedContributor | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Represents a normalized contributor object.
|
|
57
|
+
*/
|
|
58
|
+
export type NormalizedContributor = {
|
|
59
|
+
email?: string;
|
|
60
|
+
name?: string;
|
|
61
|
+
writeAccess?: boolean;
|
|
62
|
+
isPublisher?: boolean;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Normalize contributors and maintainers from various formats
|
|
66
|
+
*/
|
|
67
|
+
export declare const normalizeContributors: (contributors: unknown, maintainers?: unknown) => NormalizedContributor[] | undefined;
|
|
50
68
|
export type Person = string | {
|
|
51
69
|
name: string;
|
|
52
70
|
url?: string;
|
|
@@ -60,6 +78,31 @@ export type Bugs = string | {
|
|
|
60
78
|
url?: string;
|
|
61
79
|
email?: string;
|
|
62
80
|
};
|
|
81
|
+
export type Keywords = string[] | string;
|
|
82
|
+
/**
|
|
83
|
+
* Normalized bugs entry - always an object with type and url/email
|
|
84
|
+
*/
|
|
85
|
+
export type NormalizedBugsEntry = {
|
|
86
|
+
type?: 'email' | 'link';
|
|
87
|
+
url?: string;
|
|
88
|
+
email?: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Normalized keywords - always an array of strings
|
|
92
|
+
*/
|
|
93
|
+
export type NormalizedKeywords = string[];
|
|
94
|
+
/**
|
|
95
|
+
* Normalized bugs - always an array of objects
|
|
96
|
+
*/
|
|
97
|
+
export type NormalizedBugs = NormalizedBugsEntry[];
|
|
98
|
+
/**
|
|
99
|
+
* Normalize bugs information to a {@link NormalizedBugs} consistent format.
|
|
100
|
+
*/
|
|
101
|
+
export declare const normalizeBugs: (bugs: unknown) => NormalizedBugs | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Normalize keywords information to a {@link NormalizedKeywords} consistent format.
|
|
104
|
+
*/
|
|
105
|
+
export declare const normalizeKeywords: (keywords: unknown) => NormalizedKeywords | undefined;
|
|
63
106
|
export type Manifest = {
|
|
64
107
|
/** The name of the package. optional because {} is a valid package.json */
|
|
65
108
|
name?: string;
|
|
@@ -103,7 +146,7 @@ export type Manifest = {
|
|
|
103
146
|
/** a short description of the package */
|
|
104
147
|
description?: string;
|
|
105
148
|
/** search keywords */
|
|
106
|
-
keywords?:
|
|
149
|
+
keywords?: Keywords;
|
|
107
150
|
/** where to go to file issues */
|
|
108
151
|
bugs?: Bugs;
|
|
109
152
|
/** where the development happens */
|
|
@@ -128,11 +171,13 @@ export type Manifest = {
|
|
|
128
171
|
/** the author of a package */
|
|
129
172
|
author?: Person;
|
|
130
173
|
/** contributors to the package */
|
|
131
|
-
contributors?:
|
|
174
|
+
contributors?: NormalizedContributor[];
|
|
132
175
|
/** the license of the package */
|
|
133
176
|
license?: string;
|
|
134
177
|
};
|
|
135
|
-
export type ManifestRegistry = Manifest & Required<Pick<Manifest, 'name' | 'version' | 'dist'
|
|
178
|
+
export type ManifestRegistry = Manifest & Required<Pick<Manifest, 'name' | 'version' | 'dist'>> & {
|
|
179
|
+
maintainers?: unknown;
|
|
180
|
+
};
|
|
136
181
|
export type Packument = {
|
|
137
182
|
name: string;
|
|
138
183
|
'dist-tags': Record<string, string>;
|
|
@@ -140,6 +185,8 @@ export type Packument = {
|
|
|
140
185
|
modified?: string;
|
|
141
186
|
time?: Record<string, string>;
|
|
142
187
|
readme?: string;
|
|
188
|
+
contributors?: Person[];
|
|
189
|
+
maintainers?: Person[];
|
|
143
190
|
};
|
|
144
191
|
export type RefType = 'branch' | 'head' | 'other' | 'pull' | 'tag';
|
|
145
192
|
/**
|
|
@@ -209,7 +256,7 @@ export declare const asManifest: (m: unknown, from?: (...a: unknown[]) => any) =
|
|
|
209
256
|
/**
|
|
210
257
|
* Returns a {@link Manifest} with normalized data.
|
|
211
258
|
*/
|
|
212
|
-
export declare const normalizeManifest: (manifest: Manifest) => Manifest;
|
|
259
|
+
export declare const normalizeManifest: (manifest: Manifest | ManifestRegistry) => Manifest;
|
|
213
260
|
export declare const asManifestRegistry: (m: unknown, from?: (...a: unknown[]) => any) => ManifestRegistry;
|
|
214
261
|
export declare const assertManifest: (m: unknown) => asserts m is Manifest;
|
|
215
262
|
export declare const assertManifestRegistry: (m: unknown) => asserts m is ManifestRegistry;
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
|
+
import { Version } from '@vltpkg/semver';
|
|
2
3
|
/** Normalize funding information to a consistent format. */
|
|
3
4
|
export const normalizeFunding = (funding) => {
|
|
4
5
|
if (funding === undefined || funding === null) {
|
|
@@ -54,6 +55,148 @@ export const normalizeFunding = (funding) => {
|
|
|
54
55
|
const sources = fundingArray.map(normalizeItem);
|
|
55
56
|
return sources;
|
|
56
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Normalize the version field in a manifest.
|
|
60
|
+
*/
|
|
61
|
+
export const normalizeVersion = (manifest) => {
|
|
62
|
+
if (!Object.hasOwn(manifest, 'version')) {
|
|
63
|
+
return manifest;
|
|
64
|
+
}
|
|
65
|
+
if (!manifest.version) {
|
|
66
|
+
throw error('version is empty', {
|
|
67
|
+
manifest,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const version = Version.parse(manifest.version);
|
|
71
|
+
manifest.version = version.toString();
|
|
72
|
+
return manifest;
|
|
73
|
+
};
|
|
74
|
+
/* Parse a string or object into a normalized contributor */
|
|
75
|
+
export const parsePerson = (author, writeAccess, isPublisher) => {
|
|
76
|
+
if (typeof author === 'string') {
|
|
77
|
+
const NAME_PATTERN = /^([^(<]+)/;
|
|
78
|
+
const EMAIL_PATTERN = /<([^<>]+)>/;
|
|
79
|
+
const name = NAME_PATTERN.exec(author)?.[0].trim() || '';
|
|
80
|
+
const email = EMAIL_PATTERN.exec(author)?.[1] || '';
|
|
81
|
+
if (!name && !email)
|
|
82
|
+
return undefined;
|
|
83
|
+
return {
|
|
84
|
+
name: name || undefined,
|
|
85
|
+
email: email || undefined,
|
|
86
|
+
writeAccess: writeAccess ?? false,
|
|
87
|
+
isPublisher: isPublisher ?? false,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else if (isObject(author)) {
|
|
91
|
+
const name = typeof author.name === 'string' ? author.name : undefined;
|
|
92
|
+
const email = typeof author.email === 'string' ? author.email
|
|
93
|
+
: typeof author.mail === 'string' ? author.mail
|
|
94
|
+
: undefined;
|
|
95
|
+
if (!name && !email)
|
|
96
|
+
return undefined;
|
|
97
|
+
return {
|
|
98
|
+
name,
|
|
99
|
+
email,
|
|
100
|
+
writeAccess: writeAccess ?? false,
|
|
101
|
+
isPublisher: isPublisher ?? false,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Normalize contributors and maintainers from various formats
|
|
108
|
+
*/
|
|
109
|
+
export const normalizeContributors = (contributors, maintainers) => {
|
|
110
|
+
if (!contributors && !maintainers) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const result = [];
|
|
114
|
+
// Parse regular contributors (if any)
|
|
115
|
+
if (contributors) {
|
|
116
|
+
const contributorsArray = Array.isArray(contributors) ? contributors : [contributors];
|
|
117
|
+
const parsedContributors = contributorsArray
|
|
118
|
+
.map(person => parsePerson(person))
|
|
119
|
+
.filter((c) => c !== undefined);
|
|
120
|
+
result.push(...parsedContributors);
|
|
121
|
+
}
|
|
122
|
+
// Parse maintainers with special flags
|
|
123
|
+
if (maintainers) {
|
|
124
|
+
const maintainersArray = Array.isArray(maintainers) ? maintainers : [maintainers];
|
|
125
|
+
const parsedMaintainers = maintainersArray
|
|
126
|
+
.map(person => parsePerson(person, true, true))
|
|
127
|
+
.filter((c) => c !== undefined);
|
|
128
|
+
result.push(...parsedMaintainers);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Normalize bugs information to a {@link NormalizedBugs} consistent format.
|
|
134
|
+
*/
|
|
135
|
+
export const normalizeBugs = (bugs) => {
|
|
136
|
+
if (bugs === undefined || bugs === null) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
if (typeof bugs === 'string') {
|
|
140
|
+
// Try to parse as URL first - if it succeeds, treat as link
|
|
141
|
+
try {
|
|
142
|
+
new URL(bugs);
|
|
143
|
+
return [{ type: 'link', url: bugs }];
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// TODO: need a more robust email validation, likely
|
|
147
|
+
// to be replaced with valibot / zod
|
|
148
|
+
// If URL parsing fails, check if it's a valid email
|
|
149
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
150
|
+
if (emailRegex.test(bugs)) {
|
|
151
|
+
return [{ type: 'email', email: bugs }];
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Default to link for plain strings like 'example.com'
|
|
155
|
+
return [{ type: 'link', url: bugs }];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (isObject(bugs)) {
|
|
160
|
+
const obj = bugs;
|
|
161
|
+
const result = [];
|
|
162
|
+
if (obj.url) {
|
|
163
|
+
result.push({ type: 'link', url: obj.url });
|
|
164
|
+
}
|
|
165
|
+
if (obj.email) {
|
|
166
|
+
result.push({ type: 'email', email: obj.email });
|
|
167
|
+
}
|
|
168
|
+
return result.length > 0 ? result : undefined;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Normalize keywords information to a {@link NormalizedKeywords} consistent format.
|
|
173
|
+
*/
|
|
174
|
+
export const normalizeKeywords = (keywords) => {
|
|
175
|
+
if (keywords === undefined || keywords === null) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
let keywordArray = [];
|
|
179
|
+
if (typeof keywords === 'string') {
|
|
180
|
+
// Handle comma-separated string values
|
|
181
|
+
keywordArray = keywords
|
|
182
|
+
.split(',')
|
|
183
|
+
.map(keyword => keyword.trim())
|
|
184
|
+
.filter(keyword => keyword.length > 0);
|
|
185
|
+
}
|
|
186
|
+
else if (Array.isArray(keywords)) {
|
|
187
|
+
// Handle array of strings, filter out empty/invalid entries
|
|
188
|
+
keywordArray = keywords
|
|
189
|
+
.filter((keyword) => typeof keyword === 'string')
|
|
190
|
+
.map(keyword => keyword.trim())
|
|
191
|
+
.filter(keyword => keyword.length > 0);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Invalid format, return undefined
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
// Return undefined if no valid keywords remain
|
|
198
|
+
return keywordArray.length > 0 ? keywordArray : undefined;
|
|
199
|
+
};
|
|
57
200
|
export const integrityRE = /^sha512-[a-zA-Z0-9/+]{86}==$/;
|
|
58
201
|
export const isIntegrity = (i) => typeof i === 'string' && integrityRE.test(i);
|
|
59
202
|
export const asIntegrity = (i) => {
|
|
@@ -145,17 +288,42 @@ export const asManifest = (m, from) => {
|
|
|
145
288
|
* Returns a {@link Manifest} with normalized data.
|
|
146
289
|
*/
|
|
147
290
|
export const normalizeManifest = (manifest) => {
|
|
148
|
-
|
|
291
|
+
manifest = normalizeVersion(manifest);
|
|
292
|
+
// checks for properties with specific normalization helper methods,
|
|
293
|
+
// if there's nothing to normalize then we just return the original manifest
|
|
294
|
+
if (manifest.funding === undefined &&
|
|
295
|
+
manifest.contributors === undefined &&
|
|
296
|
+
manifest.bugs === undefined &&
|
|
297
|
+
manifest.keywords === undefined &&
|
|
298
|
+
!('maintainers' in manifest)) {
|
|
149
299
|
return manifest;
|
|
150
300
|
}
|
|
151
301
|
const normalizedFunding = normalizeFunding(manifest.funding);
|
|
152
|
-
|
|
302
|
+
const normalizedContributors = normalizeContributors(manifest.contributors, manifest.maintainers);
|
|
303
|
+
const normalizedBugs = normalizeBugs(manifest.bugs);
|
|
304
|
+
const normalizedKeywords = normalizeKeywords(manifest.keywords);
|
|
305
|
+
// Create result with normalized data
|
|
306
|
+
const result = {
|
|
307
|
+
...manifest,
|
|
308
|
+
funding: normalizedFunding,
|
|
309
|
+
contributors: normalizedContributors,
|
|
310
|
+
bugs: normalizedBugs,
|
|
311
|
+
keywords: normalizedKeywords,
|
|
312
|
+
};
|
|
313
|
+
// Remove maintainers field if it exists in the raw manifest
|
|
314
|
+
if ('maintainers' in manifest && manifest.maintainers) {
|
|
315
|
+
// Return a new manifest without the maintainers field
|
|
316
|
+
const resultWithoutMaintainers = structuredClone(result);
|
|
317
|
+
delete resultWithoutMaintainers.maintainers;
|
|
318
|
+
return resultWithoutMaintainers;
|
|
319
|
+
}
|
|
320
|
+
return result;
|
|
153
321
|
};
|
|
154
322
|
export const asManifestRegistry = (m, from) => {
|
|
155
323
|
if (!isManifestRegistry(m)) {
|
|
156
324
|
throw error('invalid registry manifest', { found: m }, from ?? asManifestRegistry);
|
|
157
325
|
}
|
|
158
|
-
return m;
|
|
326
|
+
return normalizeManifest(m);
|
|
159
327
|
};
|
|
160
328
|
export const assertManifest = m => {
|
|
161
329
|
asManifest(m, assertManifest);
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\n\n/** anything that can be encoded in JSON */\nexport type JSONField =\n | JSONField[]\n | boolean\n | number\n | string\n | { [k: string]: JSONField }\n | null\n | undefined\n\n/** sha512 SRI string */\nexport type Integrity = `sha512-${string}`\n\n/** SHA256 key identifier */\nexport type KeyID = `SHA256:${string}`\n\n/** The Manifest['dist'] field present in registry manifests */\nexport type Dist = {\n integrity?: Integrity\n shasum?: string\n tarball?: string\n fileCount?: number\n unpackedSize?: number\n signatures?: {\n keyid: KeyID\n sig: string\n }[]\n}\n\n/** An object used to mark some peerDeps as optional */\nexport type PeerDependenciesMetaValue = {\n optional?: boolean\n}\n\n// Don't use Record here since TS cant do circular references with that\n// https://github.com/microsoft/TypeScript/issues/41164#issuecomment-1427073368\nexport type ConditionalValueObject = {\n [k: string]: ConditionalValue\n}\n\nexport type ConditionalValue =\n | ConditionalValue[]\n | ConditionalValueObject\n | string\n | null\n\nexport type ExportsSubpaths = {\n [path in '.' | `./${string}`]?: ConditionalValue\n}\n\nexport type Exports =\n | Exclude<ConditionalValue, null>\n | ExportsSubpaths\n\nexport type Imports = Record<`#${string}`, ConditionalValue>\n\nexport type FundingEntry =\n | string\n | { url: string; type?: string; [key: string]: JSONField }\nexport type Funding = FundingEntry | FundingEntry[]\n\n/** Normalized funding entry - always an object with url and optional additional properties */\nexport type NormalizedFundingEntry = {\n url: string\n type?: string\n [key: string]: JSONField\n}\n/** Normalized funding - always an array of objects */\nexport type NormalizedFunding = NormalizedFundingEntry[]\n\n/** Normalize funding information to a consistent format. */\nexport const normalizeFunding = (\n funding: unknown,\n): NormalizedFunding | undefined => {\n if (funding === undefined || funding === null) {\n return undefined\n }\n\n const normalizeItem = (item: unknown): NormalizedFundingEntry => {\n const getTypeFromUrl = (url: string): string => {\n try {\n const { hostname } = new URL(url)\n const domain =\n hostname.startsWith('www.') ? hostname.slice(4) : hostname\n if (domain === 'github.com') return 'github'\n if (domain === 'patreon.com') return 'patreon'\n if (domain === 'opencollective.com') return 'opencollective'\n return 'individual'\n } catch {\n return 'invalid'\n }\n }\n\n const validateType = (\n url: string,\n type?: string,\n ): string | undefined => {\n const urlType = getTypeFromUrl(url)\n if (\n !type ||\n ['github', 'patreon', 'opencollective'].includes(urlType)\n )\n return urlType\n if (urlType === 'invalid') return undefined\n return type\n }\n\n if (typeof item === 'string') {\n return { url: item, type: getTypeFromUrl(item) }\n }\n if (\n isObject(item) &&\n 'url' in item &&\n typeof item.url === 'string'\n ) {\n const obj = item\n const url = obj.url as string\n const validatedType = validateType(\n url,\n obj.type as string | undefined,\n )\n const result = { ...obj, url } as Record<string, unknown>\n if (validatedType) {\n result.type = validatedType\n } else {\n delete result.type\n }\n return result as NormalizedFundingEntry\n }\n return { url: '', type: 'individual' }\n }\n\n const fundingArray = Array.isArray(funding) ? funding : [funding]\n const sources = fundingArray.map(normalizeItem)\n return sources\n}\n\nexport type Person =\n | string\n | {\n name: string\n url?: string\n email?: string\n }\n\nexport type Repository =\n | string\n | {\n type: string\n url: string\n }\n\nexport type Bugs =\n | string\n | {\n url?: string\n email?: string\n }\n\nexport type Manifest = {\n /** The name of the package. optional because {} is a valid package.json */\n name?: string\n /** The version of the package. optional because {} is a valid package.json */\n version?: string\n /** production dependencies, name:specifier */\n dependencies?: Record<string, string>\n /** development dependencies, name:specifier */\n devDependencies?: Record<string, string>\n /** optional dependencies, name:specifier */\n optionalDependencies?: Record<string, string>\n /** peer dependencies, name:specifier */\n peerDependencies?: Record<string, string>\n /** peer dependencies marked as optional */\n peerDependenciesMeta?: Record<string, PeerDependenciesMetaValue>\n /** dependency ranges that are acceptable, but not forced */\n acceptDependencies?: Record<string, string>\n /** names of dependencies included in the package tarball */\n bundleDependencies?: string[]\n /** a message indicating that this is not to be used */\n deprecated?: string\n /** executable built and linked by this package */\n bin?: Record<string, string> | string\n /** run-script actions for this package */\n scripts?: Record<string, string>\n /** supported run-time platforms this package can run on */\n engines?: Record<string, string>\n /** supported operating systems this package can run on */\n os?: string[] | string\n /** supported CPU architectures this package can run on */\n cpu?: string[] | string\n /** URLs that can be visited to fund this project */\n funding?: Funding\n /** The homepage of the repository */\n homepage?: string\n /**\n * Only present in Manifests served by a registry. Contains information\n * about the artifact served for this package release.\n */\n dist?: Dist\n /** a short description of the package */\n description?: string\n /** search keywords */\n keywords?: string[]\n /** where to go to file issues */\n bugs?: Bugs\n /** where the development happens */\n repository?: Repository\n /** the main module, if exports['.'] is not set */\n main?: string\n /** named subpath exports */\n exports?: Exports\n /** named #identifier imports */\n imports?: Imports\n /**\n * the HEAD of the git repo this was published from\n * only present in published packages\n */\n gitHead?: string\n /** whether the package is private */\n private?: boolean\n /** whether this is ESM or CommonJS by default */\n type?: 'commonjs' | 'module'\n /** npm puts this on published manifests */\n gypfile?: boolean\n /** the author of a package */\n author?: Person\n /** contributors to the package */\n contributors?: Person[]\n /** the license of the package */\n license?: string\n}\n\nexport type ManifestRegistry = Manifest &\n Required<Pick<Manifest, 'name' | 'version' | 'dist'>>\n\nexport type Packument = {\n name: string\n 'dist-tags': Record<string, string>\n versions: Record<string, Manifest>\n modified?: string\n time?: Record<string, string>\n readme?: string\n}\n\nexport type RefType = 'branch' | 'head' | 'other' | 'pull' | 'tag'\n\n/**\n * A representation of a given remote ref in a {@link RevDoc} object.\n */\nexport type RevDocEntry = Omit<Manifest, 'type'> &\n Required<Pick<Manifest, 'version'>> & {\n /** sha this references */\n sha: string\n /** ref as passed git locally */\n ref: string\n /** canonical full ref, like `refs/tags/blahblah` */\n rawRef: string\n /** what type of ref this is: 'branch', 'tag', etc. */\n type: RefType\n }\n\n/**\n * An object kind of resembling a packument, but about a git repo.\n */\nexport type RevDoc = Omit<Packument, 'versions'> & {\n /** all semver-looking tags go in this record */\n versions: Record<string, RevDocEntry>\n /** all named things that can be cloned down remotely */\n refs: Record<string, RevDocEntry>\n /** all named shas referenced above */\n shas: Record<string, string[]>\n}\n\nexport const integrityRE = /^sha512-[a-zA-Z0-9/+]{86}==$/\nexport const isIntegrity = (i: unknown): i is Integrity =>\n typeof i === 'string' && integrityRE.test(i)\n\nexport const asIntegrity = (i: unknown): Integrity => {\n if (!isIntegrity(i)) {\n throw error(\n 'invalid integrity',\n {\n found: i,\n wanted: integrityRE,\n },\n asIntegrity,\n )\n }\n return i\n}\n\nexport const assertIntegrity: (\n i: unknown,\n) => asserts i is Integrity = i => {\n asIntegrity(i)\n}\n\nexport const keyIDRE = /^SHA256:[a-zA-Z0-9/+]{43}$/\nexport const isKeyID = (k: unknown): k is KeyID =>\n typeof k === 'string' && keyIDRE.test(k)\n\nexport const asKeyID = (k: unknown): KeyID => {\n if (!isKeyID(k)) {\n throw error(\n 'invalid key ID',\n {\n found: k,\n wanted: keyIDRE,\n },\n asKeyID,\n )\n }\n return k\n}\n\nexport const assertKeyID: (k: unknown) => asserts k is KeyID = k => {\n asKeyID(k)\n}\n\n/**\n * Convert an unknown value to an error.\n */\nexport const asError = (\n er: unknown,\n fallbackMessage = 'Unknown error',\n): Error =>\n er instanceof Error ? er : new Error(String(er) || fallbackMessage)\n\n/**\n * Check if a value is an error.\n */\nexport const isError = (er: unknown): er is Error =>\n er instanceof Error\n\n/**\n * Check if an error has a cause property.\n */\nexport const isErrorWithCause = (\n er: unknown,\n): er is Error & { cause: unknown } => isError(er) && 'cause' in er\n\n/**\n * Check if an unknown value is a plain object.\n */\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n !!v &&\n typeof v === 'object' &&\n (v.constructor === Object ||\n (v.constructor as unknown) === undefined)\n\nexport const maybeRecordStringString = (\n o: unknown,\n): o is Record<string, string> | undefined =>\n o === undefined || isRecordStringString(o)\n\nexport const isRecordStringString = (\n o: unknown,\n): o is Record<string, string> =>\n isRecordStringT<string>(o, s => typeof s === 'string')\n\nexport const assertRecordStringString: (o: unknown) => void = (\n o: unknown,\n): asserts o is Record<string, string> =>\n assertRecordStringT<string>(\n o,\n s => typeof s === 'string',\n 'Record<string, string>',\n )\n\nexport const isRecordStringT = <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n): o is Record<string, T> =>\n isObject(o) &&\n Object.entries(o).every(\n ([k, v]) => typeof k === 'string' && check(v),\n )\n\nexport const assertRecordStringT: <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n wanted: string,\n) => asserts o is Record<string, T> = <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n /** a type description, like 'Record<string, Record<string, string>>' */\n wanted: string,\n): asserts o is Record<string, T> => {\n if (!isRecordStringT(o, check)) {\n throw error('Invalid record', {\n found: o,\n wanted,\n })\n }\n}\n\nexport const isRecordStringManifest = (\n o: unknown,\n): o is Record<string, Manifest> =>\n isRecordStringT<Manifest>(o, v => isManifest(v))\n\nexport const maybePeerDependenciesMetaSet = (\n o: unknown,\n): o is Record<string, PeerDependenciesMetaValue> | undefined =>\n o === undefined ||\n isRecordStringT<PeerDependenciesMetaValue>(o, v =>\n isPeerDependenciesMetaValue(v),\n )\n\nexport const maybeBoolean = (o: unknown): o is boolean =>\n o === undefined || typeof o === 'boolean'\n\nexport const isPeerDependenciesMetaValue = (\n o: unknown,\n): o is PeerDependenciesMetaValue =>\n isObject(o) && maybeBoolean(o.optional)\n\nexport const maybeString = (a: unknown): a is string | undefined =>\n a === undefined || typeof a === 'string'\n\nexport const maybeDist = (a: unknown): a is Manifest['dist'] =>\n a === undefined || (isObject(a) && maybeString(a.tarball))\n\nexport const isManifest = (m: unknown): m is Manifest =>\n isObject(m) &&\n !Array.isArray(m) &&\n maybeString(m.name) &&\n maybeString(m.version) &&\n maybeRecordStringString(m.dependencies) &&\n maybeRecordStringString(m.devDependencies) &&\n maybeRecordStringString(m.optionalDependencies) &&\n maybeRecordStringString(m.peerDependencies) &&\n maybeRecordStringString(m.acceptDependencies) &&\n maybePeerDependenciesMetaSet(m.peerDependenciesMeta) &&\n maybeDist(m.dist)\n\nexport const isManifestRegistry = (\n m: unknown,\n): m is ManifestRegistry =>\n isManifest(m) && !!m.dist && !!m.name && !!m.version\n\nexport const asManifest = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): Manifest => {\n if (!isManifest(m)) {\n throw error('invalid manifest', { found: m }, from ?? asManifest)\n }\n return normalizeManifest(m)\n}\n\n/**\n * Returns a {@link Manifest} with normalized data.\n */\nexport const normalizeManifest = (manifest: Manifest): Manifest => {\n if (manifest.funding === undefined) {\n return manifest\n }\n\n const normalizedFunding = normalizeFunding(manifest.funding)\n\n return { ...manifest, funding: normalizedFunding as Funding }\n}\n\nexport const asManifestRegistry = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): ManifestRegistry => {\n if (!isManifestRegistry(m)) {\n throw error(\n 'invalid registry manifest',\n { found: m },\n from ?? asManifestRegistry,\n )\n }\n return m\n}\n\nexport const assertManifest: (\n m: unknown,\n) => asserts m is Manifest = m => {\n asManifest(m, assertManifest)\n}\nexport const assertManifestRegistry: (\n m: unknown,\n) => asserts m is ManifestRegistry = m => {\n asManifestRegistry(m, assertManifestRegistry)\n}\n\nexport const isPackument = (p: unknown): p is Packument => {\n if (!isObject(p) || typeof p.name !== 'string') return false\n const { versions, 'dist-tags': distTags, time } = p\n return (\n isRecordStringString(distTags) &&\n isRecordStringManifest(versions) &&\n maybeRecordStringString(time) &&\n Object.values(distTags).every(v => versions[v]?.name == p.name)\n )\n}\n\nexport const asPackument = (\n p: unknown,\n from?: (...a: unknown[]) => any,\n): Packument => {\n if (!isPackument(p)) {\n throw error(\n 'invalid packument',\n { found: p },\n from ?? asPackument,\n )\n }\n return p\n}\n\nexport const assertPackument: (\n m: unknown,\n) => asserts m is Packument = m => {\n asPackument(m)\n}\n\n/**\n * Name of the package.json keys used to define different types of dependencies.\n */\nexport type DependencyTypeLong =\n | 'dependencies'\n | 'devDependencies'\n | 'optionalDependencies'\n | 'peerDependencies'\n\n/**\n * Unique keys that define different types of dependencies relationship.\n */\nexport type DependencyTypeShort =\n | 'dev'\n | 'optional'\n | 'peer'\n | 'peerOptional'\n | 'prod'\n\n/**\n * Unique keys that indicate how a new or updated dependency should be saved\n * back to a manifest.\n *\n * `'implicit'` is used to indicate that a dependency should be saved as\n * whatever type it already exists as. If the dependency does not exist,\n * then `'implicit'` is equivalent to `'prod'`, as that is the default\n * save type.\n */\nexport type DependencySaveType = DependencyTypeShort | 'implicit'\n\n/**\n * A set of the possible long dependency type names,\n * as used in `package.json` files.\n */\nexport const longDependencyTypes = new Set<DependencyTypeLong>([\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n])\n\n/**\n * A set of the short type keys used to represent dependency relationships.\n */\nexport const shortDependencyTypes = new Set<DependencyTypeShort>([\n 'prod',\n 'dev',\n 'peer',\n 'optional',\n 'peerOptional',\n])\n\n/**\n * Maps between long form names usually used in `package.json` files\n * to a corresponding short form name, used in lockfiles.\n */\nexport const dependencyTypes = new Map<\n DependencyTypeLong,\n DependencyTypeShort\n>([\n ['dependencies', 'prod'],\n ['devDependencies', 'dev'],\n ['peerDependencies', 'peer'],\n ['optionalDependencies', 'optional'],\n])\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { Version } from '@vltpkg/semver'\n\n/** anything that can be encoded in JSON */\nexport type JSONField =\n | JSONField[]\n | boolean\n | number\n | string\n | { [k: string]: JSONField }\n | null\n | undefined\n\n/** sha512 SRI string */\nexport type Integrity = `sha512-${string}`\n\n/** SHA256 key identifier */\nexport type KeyID = `SHA256:${string}`\n\n/** The Manifest['dist'] field present in registry manifests */\nexport type Dist = {\n integrity?: Integrity\n shasum?: string\n tarball?: string\n fileCount?: number\n unpackedSize?: number\n signatures?: {\n keyid: KeyID\n sig: string\n }[]\n}\n\n/** An object used to mark some peerDeps as optional */\nexport type PeerDependenciesMetaValue = {\n optional?: boolean\n}\n\n// Don't use Record here since TS cant do circular references with that\n// https://github.com/microsoft/TypeScript/issues/41164#issuecomment-1427073368\nexport type ConditionalValueObject = {\n [k: string]: ConditionalValue\n}\n\nexport type ConditionalValue =\n | ConditionalValue[]\n | ConditionalValueObject\n | string\n | null\n\nexport type ExportsSubpaths = {\n [path in '.' | `./${string}`]?: ConditionalValue\n}\n\nexport type Exports =\n | Exclude<ConditionalValue, null>\n | ExportsSubpaths\n\nexport type Imports = Record<`#${string}`, ConditionalValue>\n\nexport type FundingEntry =\n | string\n | { url: string; type?: string; [key: string]: JSONField }\nexport type Funding = FundingEntry | FundingEntry[]\n\n/** Normalized funding entry - always an object with url and optional additional properties */\nexport type NormalizedFundingEntry = {\n url: string\n type?: string\n [key: string]: JSONField\n}\n/** Normalized funding - always an array of objects */\nexport type NormalizedFunding = NormalizedFundingEntry[]\n\n/** Normalize funding information to a consistent format. */\nexport const normalizeFunding = (\n funding: unknown,\n): NormalizedFunding | undefined => {\n if (funding === undefined || funding === null) {\n return undefined\n }\n\n const normalizeItem = (item: unknown): NormalizedFundingEntry => {\n const getTypeFromUrl = (url: string): string => {\n try {\n const { hostname } = new URL(url)\n const domain =\n hostname.startsWith('www.') ? hostname.slice(4) : hostname\n if (domain === 'github.com') return 'github'\n if (domain === 'patreon.com') return 'patreon'\n if (domain === 'opencollective.com') return 'opencollective'\n return 'individual'\n } catch {\n return 'invalid'\n }\n }\n\n const validateType = (\n url: string,\n type?: string,\n ): string | undefined => {\n const urlType = getTypeFromUrl(url)\n if (\n !type ||\n ['github', 'patreon', 'opencollective'].includes(urlType)\n )\n return urlType\n if (urlType === 'invalid') return undefined\n return type\n }\n\n if (typeof item === 'string') {\n return { url: item, type: getTypeFromUrl(item) }\n }\n if (\n isObject(item) &&\n 'url' in item &&\n typeof item.url === 'string'\n ) {\n const obj = item\n const url = obj.url as string\n const validatedType = validateType(\n url,\n obj.type as string | undefined,\n )\n const result = { ...obj, url } as Record<string, unknown>\n if (validatedType) {\n result.type = validatedType\n } else {\n delete result.type\n }\n return result as NormalizedFundingEntry\n }\n return { url: '', type: 'individual' }\n }\n\n const fundingArray = Array.isArray(funding) ? funding : [funding]\n const sources = fundingArray.map(normalizeItem)\n return sources\n}\n\n/**\n * Normalize the version field in a manifest.\n */\nexport const normalizeVersion = (\n manifest: Manifest | ManifestRegistry,\n): Manifest | ManifestRegistry => {\n if (!Object.hasOwn(manifest, 'version')) {\n return manifest\n }\n if (!manifest.version) {\n throw error('version is empty', {\n manifest,\n })\n }\n const version = Version.parse(manifest.version)\n manifest.version = version.toString()\n return manifest\n}\n\n/* Parse a string or object into a normalized contributor */\nexport const parsePerson = (\n author: unknown,\n writeAccess?: boolean,\n isPublisher?: boolean,\n): NormalizedContributor | undefined => {\n if (typeof author === 'string') {\n const NAME_PATTERN = /^([^(<]+)/\n const EMAIL_PATTERN = /<([^<>]+)>/\n const name = NAME_PATTERN.exec(author)?.[0].trim() || ''\n const email = EMAIL_PATTERN.exec(author)?.[1] || ''\n if (!name && !email) return undefined\n return {\n name: name || undefined,\n email: email || undefined,\n writeAccess: writeAccess ?? false,\n isPublisher: isPublisher ?? false,\n }\n } else if (isObject(author)) {\n const name =\n typeof author.name === 'string' ? author.name : undefined\n const email =\n typeof author.email === 'string' ? author.email\n : typeof author.mail === 'string' ? author.mail\n : undefined\n\n if (!name && !email) return undefined\n\n return {\n name,\n email,\n writeAccess: writeAccess ?? false,\n isPublisher: isPublisher ?? false,\n }\n }\n return undefined\n}\n\n/**\n * Represents a normalized contributor object.\n */\nexport type NormalizedContributor = {\n email?: string\n name?: string\n writeAccess?: boolean\n isPublisher?: boolean\n}\n\n/**\n * Normalize contributors and maintainers from various formats\n */\nexport const normalizeContributors = (\n contributors: unknown,\n maintainers?: unknown,\n): NormalizedContributor[] | undefined => {\n if (!contributors && !maintainers) {\n return undefined\n }\n\n const result: NormalizedContributor[] = []\n\n // Parse regular contributors (if any)\n if (contributors) {\n const contributorsArray: unknown[] =\n Array.isArray(contributors) ? contributors : [contributors]\n const parsedContributors = contributorsArray\n .map(person => parsePerson(person))\n .filter((c): c is NormalizedContributor => c !== undefined)\n result.push(...parsedContributors)\n }\n\n // Parse maintainers with special flags\n if (maintainers) {\n const maintainersArray: unknown[] =\n Array.isArray(maintainers) ? maintainers : [maintainers]\n const parsedMaintainers = maintainersArray\n .map(person => parsePerson(person, true, true))\n .filter((c): c is NormalizedContributor => c !== undefined)\n result.push(...parsedMaintainers)\n }\n\n return result\n}\n\nexport type Person =\n | string\n | {\n name: string\n url?: string\n email?: string\n }\n\nexport type Repository =\n | string\n | {\n type: string\n url: string\n }\n\nexport type Bugs =\n | string\n | {\n url?: string\n email?: string\n }\n\nexport type Keywords = string[] | string\n\n/**\n * Normalized bugs entry - always an object with type and url/email\n */\nexport type NormalizedBugsEntry = {\n type?: 'email' | 'link'\n url?: string\n email?: string\n}\n\n/**\n * Normalized keywords - always an array of strings\n */\nexport type NormalizedKeywords = string[]\n\n/**\n * Normalized bugs - always an array of objects\n */\nexport type NormalizedBugs = NormalizedBugsEntry[]\n\n/**\n * Normalize bugs information to a {@link NormalizedBugs} consistent format.\n */\nexport const normalizeBugs = (\n bugs: unknown,\n): NormalizedBugs | undefined => {\n if (bugs === undefined || bugs === null) {\n return undefined\n }\n\n if (typeof bugs === 'string') {\n // Try to parse as URL first - if it succeeds, treat as link\n try {\n new URL(bugs)\n return [{ type: 'link', url: bugs }]\n } catch {\n // TODO: need a more robust email validation, likely\n // to be replaced with valibot / zod\n // If URL parsing fails, check if it's a valid email\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n if (emailRegex.test(bugs)) {\n return [{ type: 'email', email: bugs }]\n } else {\n // Default to link for plain strings like 'example.com'\n return [{ type: 'link', url: bugs }]\n }\n }\n }\n\n if (isObject(bugs)) {\n const obj = bugs as { url?: string; email?: string }\n const result: NormalizedBugsEntry[] = []\n\n if (obj.url) {\n result.push({ type: 'link', url: obj.url })\n }\n if (obj.email) {\n result.push({ type: 'email', email: obj.email })\n }\n\n return result.length > 0 ? result : undefined\n }\n}\n\n/**\n * Normalize keywords information to a {@link NormalizedKeywords} consistent format.\n */\nexport const normalizeKeywords = (\n keywords: unknown,\n): NormalizedKeywords | undefined => {\n if (keywords === undefined || keywords === null) {\n return undefined\n }\n\n let keywordArray: string[] = []\n\n if (typeof keywords === 'string') {\n // Handle comma-separated string values\n keywordArray = keywords\n .split(',')\n .map(keyword => keyword.trim())\n .filter(keyword => keyword.length > 0)\n } else if (Array.isArray(keywords)) {\n // Handle array of strings, filter out empty/invalid entries\n keywordArray = keywords\n .filter(\n (keyword): keyword is string => typeof keyword === 'string',\n )\n .map(keyword => keyword.trim())\n .filter(keyword => keyword.length > 0)\n } else {\n // Invalid format, return undefined\n return undefined\n }\n\n // Return undefined if no valid keywords remain\n return keywordArray.length > 0 ? keywordArray : undefined\n}\n\nexport type Manifest = {\n /** The name of the package. optional because {} is a valid package.json */\n name?: string\n /** The version of the package. optional because {} is a valid package.json */\n version?: string\n /** production dependencies, name:specifier */\n dependencies?: Record<string, string>\n /** development dependencies, name:specifier */\n devDependencies?: Record<string, string>\n /** optional dependencies, name:specifier */\n optionalDependencies?: Record<string, string>\n /** peer dependencies, name:specifier */\n peerDependencies?: Record<string, string>\n /** peer dependencies marked as optional */\n peerDependenciesMeta?: Record<string, PeerDependenciesMetaValue>\n /** dependency ranges that are acceptable, but not forced */\n acceptDependencies?: Record<string, string>\n /** names of dependencies included in the package tarball */\n bundleDependencies?: string[]\n /** a message indicating that this is not to be used */\n deprecated?: string\n /** executable built and linked by this package */\n bin?: Record<string, string> | string\n /** run-script actions for this package */\n scripts?: Record<string, string>\n /** supported run-time platforms this package can run on */\n engines?: Record<string, string>\n /** supported operating systems this package can run on */\n os?: string[] | string\n /** supported CPU architectures this package can run on */\n cpu?: string[] | string\n /** URLs that can be visited to fund this project */\n funding?: Funding\n /** The homepage of the repository */\n homepage?: string\n /**\n * Only present in Manifests served by a registry. Contains information\n * about the artifact served for this package release.\n */\n dist?: Dist\n /** a short description of the package */\n description?: string\n /** search keywords */\n keywords?: Keywords\n /** where to go to file issues */\n bugs?: Bugs\n /** where the development happens */\n repository?: Repository\n /** the main module, if exports['.'] is not set */\n main?: string\n /** named subpath exports */\n exports?: Exports\n /** named #identifier imports */\n imports?: Imports\n /**\n * the HEAD of the git repo this was published from\n * only present in published packages\n */\n gitHead?: string\n /** whether the package is private */\n private?: boolean\n /** whether this is ESM or CommonJS by default */\n type?: 'commonjs' | 'module'\n /** npm puts this on published manifests */\n gypfile?: boolean\n /** the author of a package */\n author?: Person\n /** contributors to the package */\n contributors?: NormalizedContributor[]\n /** the license of the package */\n license?: string\n}\n\nexport type ManifestRegistry = Manifest &\n Required<Pick<Manifest, 'name' | 'version' | 'dist'>> & {\n maintainers?: unknown\n }\n\nexport type Packument = {\n name: string\n 'dist-tags': Record<string, string>\n versions: Record<string, Manifest>\n modified?: string\n time?: Record<string, string>\n readme?: string\n contributors?: Person[]\n maintainers?: Person[]\n}\n\nexport type RefType = 'branch' | 'head' | 'other' | 'pull' | 'tag'\n\n/**\n * A representation of a given remote ref in a {@link RevDoc} object.\n */\nexport type RevDocEntry = Omit<Manifest, 'type'> &\n Required<Pick<Manifest, 'version'>> & {\n /** sha this references */\n sha: string\n /** ref as passed git locally */\n ref: string\n /** canonical full ref, like `refs/tags/blahblah` */\n rawRef: string\n /** what type of ref this is: 'branch', 'tag', etc. */\n type: RefType\n }\n\n/**\n * An object kind of resembling a packument, but about a git repo.\n */\nexport type RevDoc = Omit<Packument, 'versions'> & {\n /** all semver-looking tags go in this record */\n versions: Record<string, RevDocEntry>\n /** all named things that can be cloned down remotely */\n refs: Record<string, RevDocEntry>\n /** all named shas referenced above */\n shas: Record<string, string[]>\n}\n\nexport const integrityRE = /^sha512-[a-zA-Z0-9/+]{86}==$/\nexport const isIntegrity = (i: unknown): i is Integrity =>\n typeof i === 'string' && integrityRE.test(i)\n\nexport const asIntegrity = (i: unknown): Integrity => {\n if (!isIntegrity(i)) {\n throw error(\n 'invalid integrity',\n {\n found: i,\n wanted: integrityRE,\n },\n asIntegrity,\n )\n }\n return i\n}\n\nexport const assertIntegrity: (\n i: unknown,\n) => asserts i is Integrity = i => {\n asIntegrity(i)\n}\n\nexport const keyIDRE = /^SHA256:[a-zA-Z0-9/+]{43}$/\nexport const isKeyID = (k: unknown): k is KeyID =>\n typeof k === 'string' && keyIDRE.test(k)\n\nexport const asKeyID = (k: unknown): KeyID => {\n if (!isKeyID(k)) {\n throw error(\n 'invalid key ID',\n {\n found: k,\n wanted: keyIDRE,\n },\n asKeyID,\n )\n }\n return k\n}\n\nexport const assertKeyID: (k: unknown) => asserts k is KeyID = k => {\n asKeyID(k)\n}\n\n/**\n * Convert an unknown value to an error.\n */\nexport const asError = (\n er: unknown,\n fallbackMessage = 'Unknown error',\n): Error =>\n er instanceof Error ? er : new Error(String(er) || fallbackMessage)\n\n/**\n * Check if a value is an error.\n */\nexport const isError = (er: unknown): er is Error =>\n er instanceof Error\n\n/**\n * Check if an error has a cause property.\n */\nexport const isErrorWithCause = (\n er: unknown,\n): er is Error & { cause: unknown } => isError(er) && 'cause' in er\n\n/**\n * Check if an unknown value is a plain object.\n */\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n !!v &&\n typeof v === 'object' &&\n (v.constructor === Object ||\n (v.constructor as unknown) === undefined)\n\nexport const maybeRecordStringString = (\n o: unknown,\n): o is Record<string, string> | undefined =>\n o === undefined || isRecordStringString(o)\n\nexport const isRecordStringString = (\n o: unknown,\n): o is Record<string, string> =>\n isRecordStringT<string>(o, s => typeof s === 'string')\n\nexport const assertRecordStringString: (o: unknown) => void = (\n o: unknown,\n): asserts o is Record<string, string> =>\n assertRecordStringT<string>(\n o,\n s => typeof s === 'string',\n 'Record<string, string>',\n )\n\nexport const isRecordStringT = <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n): o is Record<string, T> =>\n isObject(o) &&\n Object.entries(o).every(\n ([k, v]) => typeof k === 'string' && check(v),\n )\n\nexport const assertRecordStringT: <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n wanted: string,\n) => asserts o is Record<string, T> = <T>(\n o: unknown,\n check: (o: unknown) => o is T,\n /** a type description, like 'Record<string, Record<string, string>>' */\n wanted: string,\n): asserts o is Record<string, T> => {\n if (!isRecordStringT(o, check)) {\n throw error('Invalid record', {\n found: o,\n wanted,\n })\n }\n}\n\nexport const isRecordStringManifest = (\n o: unknown,\n): o is Record<string, Manifest> =>\n isRecordStringT<Manifest>(o, v => isManifest(v))\n\nexport const maybePeerDependenciesMetaSet = (\n o: unknown,\n): o is Record<string, PeerDependenciesMetaValue> | undefined =>\n o === undefined ||\n isRecordStringT<PeerDependenciesMetaValue>(o, v =>\n isPeerDependenciesMetaValue(v),\n )\n\nexport const maybeBoolean = (o: unknown): o is boolean =>\n o === undefined || typeof o === 'boolean'\n\nexport const isPeerDependenciesMetaValue = (\n o: unknown,\n): o is PeerDependenciesMetaValue =>\n isObject(o) && maybeBoolean(o.optional)\n\nexport const maybeString = (a: unknown): a is string | undefined =>\n a === undefined || typeof a === 'string'\n\nexport const maybeDist = (a: unknown): a is Manifest['dist'] =>\n a === undefined || (isObject(a) && maybeString(a.tarball))\n\nexport const isManifest = (m: unknown): m is Manifest =>\n isObject(m) &&\n !Array.isArray(m) &&\n maybeString(m.name) &&\n maybeString(m.version) &&\n maybeRecordStringString(m.dependencies) &&\n maybeRecordStringString(m.devDependencies) &&\n maybeRecordStringString(m.optionalDependencies) &&\n maybeRecordStringString(m.peerDependencies) &&\n maybeRecordStringString(m.acceptDependencies) &&\n maybePeerDependenciesMetaSet(m.peerDependenciesMeta) &&\n maybeDist(m.dist)\n\nexport const isManifestRegistry = (\n m: unknown,\n): m is ManifestRegistry =>\n isManifest(m) && !!m.dist && !!m.name && !!m.version\n\nexport const asManifest = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): Manifest => {\n if (!isManifest(m)) {\n throw error('invalid manifest', { found: m }, from ?? asManifest)\n }\n return normalizeManifest(m)\n}\n\n/**\n * Returns a {@link Manifest} with normalized data.\n */\nexport const normalizeManifest = (\n manifest: Manifest | ManifestRegistry,\n): Manifest => {\n manifest = normalizeVersion(manifest)\n\n // checks for properties with specific normalization helper methods,\n // if there's nothing to normalize then we just return the original manifest\n if (\n manifest.funding === undefined &&\n manifest.contributors === undefined &&\n manifest.bugs === undefined &&\n manifest.keywords === undefined &&\n !('maintainers' in manifest)\n ) {\n return manifest\n }\n\n const normalizedFunding = normalizeFunding(manifest.funding)\n const normalizedContributors = normalizeContributors(\n manifest.contributors,\n (manifest as ManifestRegistry).maintainers,\n )\n const normalizedBugs = normalizeBugs(manifest.bugs)\n const normalizedKeywords = normalizeKeywords(manifest.keywords)\n\n // Create result with normalized data\n const result: Manifest = {\n ...manifest,\n funding: normalizedFunding as Funding,\n contributors: normalizedContributors,\n bugs: normalizedBugs as Bugs,\n keywords: normalizedKeywords as Keywords,\n }\n\n // Remove maintainers field if it exists in the raw manifest\n if ('maintainers' in manifest && manifest.maintainers) {\n // Return a new manifest without the maintainers field\n const resultWithoutMaintainers: Record<string, unknown> =\n structuredClone(result)\n delete resultWithoutMaintainers.maintainers\n return resultWithoutMaintainers as Manifest\n }\n\n return result\n}\n\nexport const asManifestRegistry = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): ManifestRegistry => {\n if (!isManifestRegistry(m)) {\n throw error(\n 'invalid registry manifest',\n { found: m },\n from ?? asManifestRegistry,\n )\n }\n return normalizeManifest(m) as ManifestRegistry\n}\n\nexport const assertManifest: (\n m: unknown,\n) => asserts m is Manifest = m => {\n asManifest(m, assertManifest)\n}\nexport const assertManifestRegistry: (\n m: unknown,\n) => asserts m is ManifestRegistry = m => {\n asManifestRegistry(m, assertManifestRegistry)\n}\n\nexport const isPackument = (p: unknown): p is Packument => {\n if (!isObject(p) || typeof p.name !== 'string') return false\n const { versions, 'dist-tags': distTags, time } = p\n return (\n isRecordStringString(distTags) &&\n isRecordStringManifest(versions) &&\n maybeRecordStringString(time) &&\n Object.values(distTags).every(v => versions[v]?.name == p.name)\n )\n}\n\nexport const asPackument = (\n p: unknown,\n from?: (...a: unknown[]) => any,\n): Packument => {\n if (!isPackument(p)) {\n throw error(\n 'invalid packument',\n { found: p },\n from ?? asPackument,\n )\n }\n return p\n}\n\nexport const assertPackument: (\n m: unknown,\n) => asserts m is Packument = m => {\n asPackument(m)\n}\n\n/**\n * Name of the package.json keys used to define different types of dependencies.\n */\nexport type DependencyTypeLong =\n | 'dependencies'\n | 'devDependencies'\n | 'optionalDependencies'\n | 'peerDependencies'\n\n/**\n * Unique keys that define different types of dependencies relationship.\n */\nexport type DependencyTypeShort =\n | 'dev'\n | 'optional'\n | 'peer'\n | 'peerOptional'\n | 'prod'\n\n/**\n * Unique keys that indicate how a new or updated dependency should be saved\n * back to a manifest.\n *\n * `'implicit'` is used to indicate that a dependency should be saved as\n * whatever type it already exists as. If the dependency does not exist,\n * then `'implicit'` is equivalent to `'prod'`, as that is the default\n * save type.\n */\nexport type DependencySaveType = DependencyTypeShort | 'implicit'\n\n/**\n * A set of the possible long dependency type names,\n * as used in `package.json` files.\n */\nexport const longDependencyTypes = new Set<DependencyTypeLong>([\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n])\n\n/**\n * A set of the short type keys used to represent dependency relationships.\n */\nexport const shortDependencyTypes = new Set<DependencyTypeShort>([\n 'prod',\n 'dev',\n 'peer',\n 'optional',\n 'peerOptional',\n])\n\n/**\n * Maps between long form names usually used in `package.json` files\n * to a corresponding short form name, used in lockfiles.\n */\nexport const dependencyTypes = new Map<\n DependencyTypeLong,\n DependencyTypeShort\n>([\n ['dependencies', 'prod'],\n ['devDependencies', 'dev'],\n ['peerDependencies', 'peer'],\n ['optionalDependencies', 'optional'],\n])\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vltpkg/types",
|
|
3
3
|
"description": "definitions for some of vlt's core types",
|
|
4
|
-
"version": "0.0.0-
|
|
4
|
+
"version": "0.0.0-18",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/vltpkg/vltpkg.git",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@vltpkg/error-cause": "0.0.0-
|
|
22
|
+
"@vltpkg/error-cause": "0.0.0-18",
|
|
23
|
+
"@vltpkg/semver": "0.0.0-18"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@eslint/js": "^9.28.0",
|