@vltpkg/types 0.0.0-17 → 0.0.0-19
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 +171 -11
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +415 -97
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -2
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility type that overrides specific properties of type T with new types
|
|
3
|
+
* from R. Constrains override values to exclude undefined, ensuring that
|
|
4
|
+
* normalization cannot introduce undefined to fields that shouldn't have it.
|
|
5
|
+
*/
|
|
6
|
+
export type Override<T, R extends {
|
|
7
|
+
[K in keyof R]: R[K] extends undefined ? never : R[K];
|
|
8
|
+
}> = {
|
|
9
|
+
[K in keyof T]: K extends keyof R ? R[K] : T[K];
|
|
10
|
+
};
|
|
1
11
|
/** anything that can be encoded in JSON */
|
|
2
12
|
export type JSONField = JSONField[] | boolean | number | string | {
|
|
3
13
|
[k: string]: JSONField;
|
|
@@ -37,30 +47,69 @@ export type FundingEntry = string | {
|
|
|
37
47
|
[key: string]: JSONField;
|
|
38
48
|
};
|
|
39
49
|
export type Funding = FundingEntry | FundingEntry[];
|
|
40
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* An object with url and optional additional properties
|
|
52
|
+
*/
|
|
41
53
|
export type NormalizedFundingEntry = {
|
|
42
54
|
url: string;
|
|
43
55
|
type?: string;
|
|
44
56
|
[key: string]: JSONField;
|
|
45
57
|
};
|
|
46
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Normalized funding information, an array of {@link NormalizedFundingEntry}.
|
|
60
|
+
*/
|
|
47
61
|
export type NormalizedFunding = NormalizedFundingEntry[];
|
|
48
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Normalize funding information to a consistent format.
|
|
64
|
+
*/
|
|
49
65
|
export declare const normalizeFunding: (funding: unknown) => NormalizedFunding | undefined;
|
|
50
|
-
export declare const parsePerson: (author: unknown, writeAccess?: boolean, isPublisher?: boolean) => NormalizedContributor | undefined;
|
|
51
66
|
/**
|
|
52
|
-
*
|
|
67
|
+
* Type guard to check if a value is a {@link NormalizedFundingEntry}.
|
|
68
|
+
*/
|
|
69
|
+
export declare const isNormalizedFundingEntry: (o: unknown) => o is NormalizedFundingEntry;
|
|
70
|
+
/**
|
|
71
|
+
* Type guard to check if a value is a {@link NormalizedFunding}.
|
|
72
|
+
*/
|
|
73
|
+
export declare const isNormalizedFunding: (o: unknown) => o is NormalizedFunding;
|
|
74
|
+
/**
|
|
75
|
+
* Given a version Normalize the version field in a manifest.
|
|
76
|
+
*/
|
|
77
|
+
export declare const fixManifestVersion: <T extends Manifest | ManifestRegistry>(manifest: T) => T;
|
|
78
|
+
declare const kWriteAccess: unique symbol;
|
|
79
|
+
declare const kIsPublisher: unique symbol;
|
|
80
|
+
/**
|
|
81
|
+
* Parse a string or object into a normalized contributor.
|
|
82
|
+
*/
|
|
83
|
+
export declare const parsePerson: (person: unknown, writeAccess?: boolean, isPublisher?: boolean) => NormalizedContributorEntry | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Normalized contributors - always an array of {@link NormalizedContributorEntry}.
|
|
86
|
+
*/
|
|
87
|
+
export type NormalizedContributors = NormalizedContributorEntry[];
|
|
88
|
+
/**
|
|
89
|
+
* Represents a normalized contributor object. This is the type that is
|
|
90
|
+
* used in the {@link NormalizedManifest} and {@link NormalizedManifestRegistry}
|
|
91
|
+
* objects.
|
|
53
92
|
*/
|
|
54
|
-
export type
|
|
93
|
+
export type NormalizedContributorEntry = {
|
|
55
94
|
email?: string;
|
|
56
95
|
name?: string;
|
|
96
|
+
[kWriteAccess]?: boolean;
|
|
97
|
+
[kIsPublisher]?: boolean;
|
|
57
98
|
writeAccess?: boolean;
|
|
58
99
|
isPublisher?: boolean;
|
|
59
100
|
};
|
|
101
|
+
/**
|
|
102
|
+
* Type guard to check if a value is a normalized contributor entry.
|
|
103
|
+
*/
|
|
104
|
+
export declare const isNormalizedContributorEntry: (o: unknown) => o is NormalizedContributorEntry;
|
|
105
|
+
/**
|
|
106
|
+
* Type guard to check if a value is a {@link NormalizedContributors}.
|
|
107
|
+
*/
|
|
108
|
+
export declare const isNormalizedContributors: (o: unknown) => o is NormalizedContributors;
|
|
60
109
|
/**
|
|
61
110
|
* Normalize contributors and maintainers from various formats
|
|
62
111
|
*/
|
|
63
|
-
export declare const normalizeContributors: (contributors: unknown, maintainers?: unknown) =>
|
|
112
|
+
export declare const normalizeContributors: (contributors: unknown, maintainers?: unknown) => NormalizedContributorEntry[] | undefined;
|
|
64
113
|
export type Person = string | {
|
|
65
114
|
name: string;
|
|
66
115
|
url?: string;
|
|
@@ -74,6 +123,43 @@ export type Bugs = string | {
|
|
|
74
123
|
url?: string;
|
|
75
124
|
email?: string;
|
|
76
125
|
};
|
|
126
|
+
export type Keywords = string[] | string;
|
|
127
|
+
/**
|
|
128
|
+
* Normalized bugs entry - always an object with type and url/email
|
|
129
|
+
*/
|
|
130
|
+
export type NormalizedBugsEntry = {
|
|
131
|
+
type?: 'email' | 'link';
|
|
132
|
+
url?: string;
|
|
133
|
+
email?: string;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Normalized keywords - always an array of strings
|
|
137
|
+
*/
|
|
138
|
+
export type NormalizedKeywords = string[];
|
|
139
|
+
/**
|
|
140
|
+
* Normalized bugs - always an array of {@link NormalizedBugsEntry}
|
|
141
|
+
*/
|
|
142
|
+
export type NormalizedBugs = NormalizedBugsEntry[];
|
|
143
|
+
/**
|
|
144
|
+
* Normalize bugs information to a {@link NormalizedBugs} consistent format.
|
|
145
|
+
*/
|
|
146
|
+
export declare const normalizeBugs: (bugs: unknown) => NormalizedBugs | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Type guard to check if a value is a {@link NormalizedBugsEntry}.
|
|
149
|
+
*/
|
|
150
|
+
export declare const isNormalizedBugsEntry: (o: unknown) => o is NormalizedBugsEntry;
|
|
151
|
+
/**
|
|
152
|
+
* Type guard to check if a value is a {@link NormalizedBugs}.
|
|
153
|
+
*/
|
|
154
|
+
export declare const isNormalizedBugs: (o: unknown) => o is NormalizedBugs;
|
|
155
|
+
/**
|
|
156
|
+
* Normalize keywords information to a {@link NormalizedKeywords} consistent format.
|
|
157
|
+
*/
|
|
158
|
+
export declare const normalizeKeywords: (keywords: unknown) => NormalizedKeywords | undefined;
|
|
159
|
+
/**
|
|
160
|
+
* Type guard to check if a value is a {@link NormalizedKeywords}.
|
|
161
|
+
*/
|
|
162
|
+
export declare const isNormalizedKeywords: (o: unknown) => o is NormalizedKeywords;
|
|
77
163
|
export type Manifest = {
|
|
78
164
|
/** The name of the package. optional because {} is a valid package.json */
|
|
79
165
|
name?: string;
|
|
@@ -117,7 +203,7 @@ export type Manifest = {
|
|
|
117
203
|
/** a short description of the package */
|
|
118
204
|
description?: string;
|
|
119
205
|
/** search keywords */
|
|
120
|
-
keywords?:
|
|
206
|
+
keywords?: Keywords;
|
|
121
207
|
/** where to go to file issues */
|
|
122
208
|
bugs?: Bugs;
|
|
123
209
|
/** where the development happens */
|
|
@@ -142,13 +228,44 @@ export type Manifest = {
|
|
|
142
228
|
/** the author of a package */
|
|
143
229
|
author?: Person;
|
|
144
230
|
/** contributors to the package */
|
|
145
|
-
contributors?:
|
|
231
|
+
contributors?: Person[];
|
|
146
232
|
/** the license of the package */
|
|
147
233
|
license?: string;
|
|
148
234
|
};
|
|
235
|
+
export type NormalizedFields = {
|
|
236
|
+
bugs: NormalizedBugs | undefined;
|
|
237
|
+
author: NormalizedContributorEntry | undefined;
|
|
238
|
+
contributors: NormalizedContributors | undefined;
|
|
239
|
+
funding: NormalizedFunding | undefined;
|
|
240
|
+
keywords: NormalizedKeywords | undefined;
|
|
241
|
+
};
|
|
242
|
+
/**
|
|
243
|
+
* A {@link Manifest} object that contains normalized fields.
|
|
244
|
+
*/
|
|
245
|
+
export type NormalizedManifest = Override<Manifest, NormalizedFields>;
|
|
246
|
+
/**
|
|
247
|
+
* A {@link ManifestRegistry} object that contains normalized fields.
|
|
248
|
+
*/
|
|
249
|
+
export type NormalizedManifestRegistry = Override<ManifestRegistry, NormalizedFields>;
|
|
250
|
+
/**
|
|
251
|
+
* A specific type of {@link Manifest} that represents manifests that were
|
|
252
|
+
* retrieved from a registry, these will always have `name`, `version`
|
|
253
|
+
* and `dist` information along with an optional `maintainers` field.
|
|
254
|
+
*/
|
|
149
255
|
export type ManifestRegistry = Manifest & Required<Pick<Manifest, 'name' | 'version' | 'dist'>> & {
|
|
150
256
|
maintainers?: unknown;
|
|
151
257
|
};
|
|
258
|
+
/**
|
|
259
|
+
* Maps the manifest type to the equivalent normalized manifest type.
|
|
260
|
+
*/
|
|
261
|
+
export type SomeNormalizedManifest<T> = T extends ManifestRegistry ? NormalizedManifestRegistry : NormalizedManifest;
|
|
262
|
+
/**
|
|
263
|
+
* A document that represents available package versions in a given registry
|
|
264
|
+
* along with extra information, such as `dist-tags` and `maintainers` info.
|
|
265
|
+
* The `versions` field is key-value structure in which keys are the
|
|
266
|
+
* available versions of a given package and values are
|
|
267
|
+
* {@link ManifestRegistry} objects.
|
|
268
|
+
*/
|
|
152
269
|
export type Packument = {
|
|
153
270
|
name: string;
|
|
154
271
|
'dist-tags': Record<string, string>;
|
|
@@ -184,6 +301,10 @@ export type RevDoc = Omit<Packument, 'versions'> & {
|
|
|
184
301
|
/** all named shas referenced above */
|
|
185
302
|
shas: Record<string, string[]>;
|
|
186
303
|
};
|
|
304
|
+
/**
|
|
305
|
+
* A type guard to check if a value is a boolean.
|
|
306
|
+
*/
|
|
307
|
+
export declare const isBoolean: (value: unknown) => value is boolean;
|
|
187
308
|
export declare const integrityRE: RegExp;
|
|
188
309
|
export declare const isIntegrity: (i: unknown) => i is Integrity;
|
|
189
310
|
export declare const asIntegrity: (i: unknown) => Integrity;
|
|
@@ -221,14 +342,52 @@ export declare const maybeBoolean: (o: unknown) => o is boolean;
|
|
|
221
342
|
export declare const isPeerDependenciesMetaValue: (o: unknown) => o is PeerDependenciesMetaValue;
|
|
222
343
|
export declare const maybeString: (a: unknown) => a is string | undefined;
|
|
223
344
|
export declare const maybeDist: (a: unknown) => a is Manifest["dist"];
|
|
345
|
+
/**
|
|
346
|
+
* Is a given unknown value a valid {@link Manifest} object?
|
|
347
|
+
* Returns `true` if so.
|
|
348
|
+
*/
|
|
224
349
|
export declare const isManifest: (m: unknown) => m is Manifest;
|
|
350
|
+
/**
|
|
351
|
+
* A specific {@link Manifest} that is retrieved uniquely from reading
|
|
352
|
+
* registry packument and manifest endpoints, it has `dist`, `name` and
|
|
353
|
+
* `version` fields defined.
|
|
354
|
+
*/
|
|
225
355
|
export declare const isManifestRegistry: (m: unknown) => m is ManifestRegistry;
|
|
356
|
+
/**
|
|
357
|
+
* Given an unknown value, convert it to a {@link Manifest}.
|
|
358
|
+
*/
|
|
226
359
|
export declare const asManifest: (m: unknown, from?: (...a: unknown[]) => any) => Manifest;
|
|
227
360
|
/**
|
|
228
|
-
*
|
|
361
|
+
* Given a {@link Manifest} returns a {@link NormalizedManifest} that
|
|
362
|
+
* contains normalized author, bugs, funding, contributors, keywords and
|
|
363
|
+
* version fields.
|
|
364
|
+
*/
|
|
365
|
+
export declare const normalizeManifest: <T extends Manifest | ManifestRegistry>(manifest: T) => SomeNormalizedManifest<T>;
|
|
366
|
+
/**
|
|
367
|
+
* Type guard to check if a value is a {@link NormalizedManifest}.
|
|
368
|
+
*/
|
|
369
|
+
export declare const isNormalizedManifest: (o: unknown) => o is NormalizedManifest;
|
|
370
|
+
/**
|
|
371
|
+
* Given an unknown value, convert it to a {@link NormalizedManifest}.
|
|
372
|
+
*/
|
|
373
|
+
export declare const asNormalizedManifest: (m: unknown, from?: (...a: unknown[]) => any) => NormalizedManifest;
|
|
374
|
+
/**
|
|
375
|
+
* Given an unknown value, convert it to a {@link ManifestRegistry}.
|
|
229
376
|
*/
|
|
230
|
-
export declare const normalizeManifest: (manifest: Manifest | ManifestRegistry) => Manifest;
|
|
231
377
|
export declare const asManifestRegistry: (m: unknown, from?: (...a: unknown[]) => any) => ManifestRegistry;
|
|
378
|
+
/**
|
|
379
|
+
* Type guard to check if a value is a {@link NormalizedManifestRegistry}.
|
|
380
|
+
*/
|
|
381
|
+
export declare const isNormalizedManifestRegistry: (o: unknown) => o is NormalizedManifestRegistry;
|
|
382
|
+
/**
|
|
383
|
+
* Given an unknown value, convert it to a {@link NormalizedManifestRegistry}.
|
|
384
|
+
*/
|
|
385
|
+
export declare const asNormalizedManifestRegistry: (m: unknown, from?: (...a: unknown[]) => any) => NormalizedManifestRegistry;
|
|
386
|
+
/**
|
|
387
|
+
* Walks a normalized manifest and expands any symbols found
|
|
388
|
+
* in the `author` and `contributors` fields.
|
|
389
|
+
*/
|
|
390
|
+
export declare const expandNormalizedManifestSymbols: (m: NormalizedManifest) => NormalizedManifest;
|
|
232
391
|
export declare const assertManifest: (m: unknown) => asserts m is Manifest;
|
|
233
392
|
export declare const assertManifestRegistry: (m: unknown) => asserts m is ManifestRegistry;
|
|
234
393
|
export declare const isPackument: (p: unknown) => p is Packument;
|
|
@@ -266,4 +425,5 @@ export declare const shortDependencyTypes: Set<DependencyTypeShort>;
|
|
|
266
425
|
* to a corresponding short form name, used in lockfiles.
|
|
267
426
|
*/
|
|
268
427
|
export declare const dependencyTypes: Map<DependencyTypeLong, DependencyTypeShort>;
|
|
428
|
+
export {};
|
|
269
429
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAClB,CAAC,EACD,CAAC,SAAS;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,IACjE;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChD,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GACjB,SAAS,EAAE,GACX,OAAO,GACP,MAAM,GACN,MAAM,GACN;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC1B,IAAI,GACJ,SAAS,CAAA;AAEb,wBAAwB;AACxB,MAAM,MAAM,SAAS,GAAG,UAAU,MAAM,EAAE,CAAA;AAE1C,4BAA4B;AAC5B,MAAM,MAAM,KAAK,GAAG,UAAU,MAAM,EAAE,CAAA;AAEtC,+DAA+D;AAC/D,MAAM,MAAM,IAAI,GAAG;IACjB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,KAAK,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;KACZ,EAAE,CAAA;CACJ,CAAA;AAED,uDAAuD;AACvD,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,EAAE,GAClB,sBAAsB,GACtB,MAAM,GACN,IAAI,CAAA;AAER,MAAM,MAAM,eAAe,GAAG;KAC3B,IAAI,IAAI,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,EAAE,gBAAgB;CACjD,CAAA;AAED,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAC/B,eAAe,CAAA;AAEnB,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAA;AAE5D,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAC5D,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,YAAY,EAAE,CAAA;AAEnD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAA;AAkExD;;GAEG;AACH,eAAO,MAAM,gBAAgB,YAClB,OAAO,KACf,iBAAiB,GAAG,SAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,MAChC,OAAO,KACT,CAAC,IAAI,sBAYP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,MAC3B,OAAO,KACT,CAAC,IAAI,iBAMP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,CAAC,SAAS,QAAQ,GAAG,gBAAgB,YAE3B,CAAC,KACV,CAYF,CAAA;AAED,QAAA,MAAM,YAAY,eAA4B,CAAA;AAC9C,QAAA,MAAM,YAAY,eAA4B,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,WAAW,WACd,OAAO,gBACD,OAAO,gBACP,OAAO,KACpB,0BAA0B,GAAG,SAsC/B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,EAAE,CAAA;AAEjE;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IAGb,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAA;IACxB,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAA;IAGxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,MACpC,OAAO,KACT,CAAC,IAAI,0BAYP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,MAChC,OAAO,KACT,CAAC,IAAI,sBAMP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,iBAClB,OAAO,gBACP,OAAO,KACpB,0BAA0B,EAAE,GAAG,SA+CjC,CAAA;AAED,MAAM,MAAM,MAAM,GACd,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAEL,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAEL,MAAM,MAAM,IAAI,GACZ,MAAM,GACN;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAEL,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,GAAG,MAAM,CAAA;AAExC;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAA;AA0ClD;;GAEG;AACH,eAAO,MAAM,aAAa,SAClB,OAAO,KACZ,cAAc,GAAG,SAgBnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,MAC7B,OAAO,KACT,CAAC,IAAI,mBASP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,MAAO,OAAO,KAAG,CAAC,IAAI,cAIlD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,aAClB,OAAO,KAChB,kBAAkB,GAAG,SA6BvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,MAC5B,OAAO,KACT,CAAC,IAAI,kBAYP,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IAChE,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,0DAA0D;IAC1D,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACvB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,iCAAiC;IACjC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,oCAAoC;IACpC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iDAAiD;IACjD,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,cAAc,GAAG,SAAS,CAAA;IAChC,MAAM,EAAE,0BAA0B,GAAG,SAAS,CAAA;IAC9C,YAAY,EAAE,sBAAsB,GAAG,SAAS,CAAA;IAChD,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACtC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,CAAA;CACzC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAErE;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAC/C,gBAAgB,EAChB,gBAAgB,CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GACrC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG;IACtD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAEH;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAClC,CAAC,SAAS,gBAAgB,GAAG,0BAA0B,GACrD,kBAAkB,CAAA;AAEtB;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAC9C,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG;IACpC,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IACjD,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACrC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACjC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,KAAK,IAAI,OACxB,CAAA;AAE5B,eAAO,MAAM,WAAW,QAAiC,CAAA;AACzD,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,CAAC,IAAI,SACA,CAAA;AAE9C,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,SAYxC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,CAC5B,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,CAAC,IAAI,SAEjB,CAAA;AAED,eAAO,MAAM,OAAO,QAA+B,CAAA;AACnD,eAAO,MAAM,OAAO,MAAO,OAAO,KAAG,CAAC,IAAI,KACA,CAAA;AAE1C,eAAO,MAAM,OAAO,MAAO,OAAO,KAAG,KAYpC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,KAEtD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,OACd,OAAO,+BAEV,KACkE,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,OAAO,OAAQ,OAAO,KAAG,EAAE,IAAI,KACvB,CAAA;AAErB;;GAEG;AACH,eAAO,MAAM,gBAAgB,OACvB,OAAO,KACV,EAAE,IAAI,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAkC,CAAA;AAEnE;;GAEG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAIpB,CAAA;AAE7C,eAAO,MAAM,uBAAuB,MAC/B,OAAO,KACT,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SACW,CAAA;AAE5C,eAAO,MAAM,oBAAoB,MAC5B,OAAO,KACT,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAC2B,CAAA;AAExD,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAOpD,CAAA;AAEH,eAAO,MAAM,eAAe,GAAI,CAAC,KAC5B,OAAO,SACH,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAC5B,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAIrB,CAAA;AAEH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,EAClC,CAAC,EAAE,OAAO,EACV,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC7B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAYjC,CAAA;AAED,eAAO,MAAM,sBAAsB,MAC9B,OAAO,KACT,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CACmB,CAAA;AAElD,eAAO,MAAM,4BAA4B,MACpC,OAAO,KACT,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,GAAG,SAIjD,CAAA;AAEH,eAAO,MAAM,YAAY,MAAO,OAAO,KAAG,CAAC,IAAI,OACJ,CAAA;AAE3C,eAAO,MAAM,2BAA2B,MACnC,OAAO,KACT,CAAC,IAAI,yBACiC,CAAA;AAEzC,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,CAAC,IAAI,MAAM,GAAG,SACb,CAAA;AAE1C,eAAO,MAAM,SAAS,MAAO,OAAO,KAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CACC,CAAA;AAE5D;;;GAGG;AACH,eAAO,MAAM,UAAU,MAAO,OAAO,KAAG,CAAC,IAAI,QAW1B,CAAA;AAEnB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,MAC1B,OAAO,KACT,CAAC,IAAI,gBAC8C,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,UAAU,MAClB,OAAO,SACH,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,KAC9B,QAKF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,CAAC,SAAS,QAAQ,GAAG,gBAAgB,YAE3B,CAAC,KACV,sBAAsB,CAAC,CAAC,CAyD1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,MAC5B,OAAO,KACT,CAAC,IAAI,kBAaP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,MAC5B,OAAO,SACH,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,KAC9B,kBASF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,MAC1B,OAAO,SACH,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,KAC9B,gBASF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,MACpC,OAAO,KACT,CAAC,IAAI,0BAEP,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,MACpC,OAAO,SACH,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,KAC9B,0BASF,CAAA;AAgBD;;;GAGG;AACH,eAAO,MAAM,+BAA+B,MACvC,kBAAkB,KACpB,kBAcF,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,CAC3B,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,CAAC,IAAI,QAEjB,CAAA;AACD,eAAO,MAAM,sBAAsB,EAAE,CACnC,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,CAAC,IAAI,gBAEjB,CAAA;AAED,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,CAAC,IAAI,SAS7C,CAAA;AAED,eAAO,MAAM,WAAW,MACnB,OAAO,SACH,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,KAC9B,SASF,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,CAC5B,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,CAAC,IAAI,SAEjB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,iBAAiB,GACjB,sBAAsB,GACtB,kBAAkB,CAAA;AAEtB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,KAAK,GACL,UAAU,GACV,MAAM,GACN,cAAc,GACd,MAAM,CAAA;AAEV;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,UAAU,CAAA;AAEjE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yBAK9B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,0BAM/B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,8CAQ1B,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,102 +1,194 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return 'individual';
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return 'invalid';
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const validateType = (url, type) => {
|
|
25
|
-
const urlType = getTypeFromUrl(url);
|
|
26
|
-
if (!type ||
|
|
27
|
-
['github', 'patreon', 'opencollective'].includes(urlType))
|
|
28
|
-
return urlType;
|
|
29
|
-
if (urlType === 'invalid')
|
|
30
|
-
return undefined;
|
|
31
|
-
return type;
|
|
32
|
-
};
|
|
33
|
-
if (typeof item === 'string') {
|
|
34
|
-
return { url: item, type: getTypeFromUrl(item) };
|
|
2
|
+
import { Version } from '@vltpkg/semver';
|
|
3
|
+
/**
|
|
4
|
+
* Normalize a single funding entry to a consistent format.
|
|
5
|
+
*/
|
|
6
|
+
const normalizeFundingEntry = (item) => {
|
|
7
|
+
const getTypeFromUrl = (url) => {
|
|
8
|
+
try {
|
|
9
|
+
const { hostname } = new URL(url);
|
|
10
|
+
const domain = hostname.startsWith('www.') ? hostname.slice(4) : hostname;
|
|
11
|
+
if (domain === 'github.com')
|
|
12
|
+
return 'github';
|
|
13
|
+
if (domain === 'patreon.com')
|
|
14
|
+
return 'patreon';
|
|
15
|
+
if (domain === 'opencollective.com')
|
|
16
|
+
return 'opencollective';
|
|
17
|
+
return 'individual';
|
|
35
18
|
}
|
|
36
|
-
|
|
37
|
-
'
|
|
38
|
-
typeof item.url === 'string') {
|
|
39
|
-
const obj = item;
|
|
40
|
-
const url = obj.url;
|
|
41
|
-
const validatedType = validateType(url, obj.type);
|
|
42
|
-
const result = { ...obj, url };
|
|
43
|
-
if (validatedType) {
|
|
44
|
-
result.type = validatedType;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
delete result.type;
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
19
|
+
catch {
|
|
20
|
+
return 'invalid';
|
|
50
21
|
}
|
|
51
|
-
return { url: '', type: 'individual' };
|
|
52
22
|
};
|
|
23
|
+
const validateType = (url, type) => {
|
|
24
|
+
const urlType = getTypeFromUrl(url);
|
|
25
|
+
if (!type ||
|
|
26
|
+
['github', 'patreon', 'opencollective'].includes(urlType))
|
|
27
|
+
return urlType;
|
|
28
|
+
if (urlType === 'invalid')
|
|
29
|
+
return undefined;
|
|
30
|
+
return type;
|
|
31
|
+
};
|
|
32
|
+
if (typeof item === 'string') {
|
|
33
|
+
return { url: item, type: getTypeFromUrl(item) };
|
|
34
|
+
}
|
|
35
|
+
if (isObject(item) &&
|
|
36
|
+
'url' in item &&
|
|
37
|
+
typeof item.url === 'string') {
|
|
38
|
+
// If the item is already normalized, return it directly
|
|
39
|
+
if (isNormalizedFundingEntry(item)) {
|
|
40
|
+
return item;
|
|
41
|
+
}
|
|
42
|
+
const obj = item;
|
|
43
|
+
const url = obj.url;
|
|
44
|
+
const validatedType = validateType(url, obj.type);
|
|
45
|
+
const result = { ...obj, url };
|
|
46
|
+
if (validatedType) {
|
|
47
|
+
result.type = validatedType;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
delete result.type;
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
return { url: '', type: 'individual' };
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Normalize funding information to a consistent format.
|
|
58
|
+
*/
|
|
59
|
+
export const normalizeFunding = (funding) => {
|
|
60
|
+
if (!funding)
|
|
61
|
+
return;
|
|
53
62
|
const fundingArray = Array.isArray(funding) ? funding : [funding];
|
|
54
|
-
const sources = fundingArray.map(
|
|
55
|
-
return sources;
|
|
63
|
+
const sources = fundingArray.map(normalizeFundingEntry);
|
|
64
|
+
return sources.length > 0 ? sources : undefined;
|
|
56
65
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Type guard to check if a value is a {@link NormalizedFundingEntry}.
|
|
68
|
+
*/
|
|
69
|
+
export const isNormalizedFundingEntry = (o) => {
|
|
70
|
+
return (isObject(o) &&
|
|
71
|
+
'url' in o &&
|
|
72
|
+
typeof o.url === 'string' &&
|
|
73
|
+
!!o.url &&
|
|
74
|
+
'type' in o &&
|
|
75
|
+
typeof o.type === 'string' &&
|
|
76
|
+
['github', 'patreon', 'opencollective', 'individual'].includes(o.type));
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Type guard to check if a value is a {@link NormalizedFunding}.
|
|
80
|
+
*/
|
|
81
|
+
export const isNormalizedFunding = (o) => {
|
|
82
|
+
return (Array.isArray(o) &&
|
|
83
|
+
o.length > 0 &&
|
|
84
|
+
o.every(isNormalizedFundingEntry));
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Given a version Normalize the version field in a manifest.
|
|
88
|
+
*/
|
|
89
|
+
export const fixManifestVersion = (manifest) => {
|
|
90
|
+
if (!Object.hasOwn(manifest, 'version')) {
|
|
91
|
+
return manifest;
|
|
92
|
+
}
|
|
93
|
+
if (!manifest.version) {
|
|
94
|
+
throw error('version is empty', {
|
|
95
|
+
manifest,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const version = Version.parse(manifest.version);
|
|
99
|
+
manifest.version = version.toString();
|
|
100
|
+
return manifest;
|
|
101
|
+
};
|
|
102
|
+
const kWriteAccess = Symbol.for('writeAccess');
|
|
103
|
+
const kIsPublisher = Symbol.for('isPublisher');
|
|
104
|
+
/**
|
|
105
|
+
* Parse a string or object into a normalized contributor.
|
|
106
|
+
*/
|
|
107
|
+
export const parsePerson = (person, writeAccess, isPublisher) => {
|
|
108
|
+
if (!person)
|
|
109
|
+
return;
|
|
110
|
+
if (isObject(person)) {
|
|
111
|
+
// this is an already parsed object person, just return its value
|
|
112
|
+
if (isNormalizedContributorEntry(person)) {
|
|
113
|
+
return person;
|
|
114
|
+
}
|
|
115
|
+
const name = typeof person.name === 'string' ? person.name : undefined;
|
|
116
|
+
const email = typeof person.email === 'string' ? person.email
|
|
117
|
+
: typeof person.mail === 'string' ? person.mail
|
|
118
|
+
: undefined;
|
|
64
119
|
if (!name && !email)
|
|
65
120
|
return undefined;
|
|
66
121
|
return {
|
|
67
|
-
name
|
|
68
|
-
email
|
|
69
|
-
|
|
70
|
-
|
|
122
|
+
name,
|
|
123
|
+
email,
|
|
124
|
+
[kWriteAccess]: writeAccess ?? false,
|
|
125
|
+
[kIsPublisher]: isPublisher ?? false,
|
|
71
126
|
};
|
|
72
127
|
}
|
|
73
|
-
else if (
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
128
|
+
else if (typeof person === 'string') {
|
|
129
|
+
const NAME_PATTERN = /^([^(<]+)/;
|
|
130
|
+
const EMAIL_PATTERN = /<([^<>]+)>/;
|
|
131
|
+
const name = NAME_PATTERN.exec(person)?.[0].trim() || '';
|
|
132
|
+
const email = EMAIL_PATTERN.exec(person)?.[1] || '';
|
|
78
133
|
if (!name && !email)
|
|
79
134
|
return undefined;
|
|
80
135
|
return {
|
|
81
|
-
name,
|
|
82
|
-
email,
|
|
83
|
-
|
|
84
|
-
|
|
136
|
+
name: name || undefined,
|
|
137
|
+
email: email || undefined,
|
|
138
|
+
[kWriteAccess]: writeAccess ?? false,
|
|
139
|
+
[kIsPublisher]: isPublisher ?? false,
|
|
85
140
|
};
|
|
86
141
|
}
|
|
87
|
-
return
|
|
142
|
+
return;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Type guard to check if a value is a normalized contributor entry.
|
|
146
|
+
*/
|
|
147
|
+
export const isNormalizedContributorEntry = (o) => {
|
|
148
|
+
return (isObject(o) &&
|
|
149
|
+
typeof o.name === 'string' &&
|
|
150
|
+
!!o.name &&
|
|
151
|
+
typeof o.email === 'string' &&
|
|
152
|
+
!!o.email &&
|
|
153
|
+
(isBoolean(o[kWriteAccess]) ||
|
|
154
|
+
isBoolean(o.writeAccess)) &&
|
|
155
|
+
(isBoolean(o[kIsPublisher]) ||
|
|
156
|
+
isBoolean(o.isPublisher)));
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Type guard to check if a value is a {@link NormalizedContributors}.
|
|
160
|
+
*/
|
|
161
|
+
export const isNormalizedContributors = (o) => {
|
|
162
|
+
return (Array.isArray(o) &&
|
|
163
|
+
o.length > 0 &&
|
|
164
|
+
o.every(isNormalizedContributorEntry));
|
|
88
165
|
};
|
|
89
166
|
/**
|
|
90
167
|
* Normalize contributors and maintainers from various formats
|
|
91
168
|
*/
|
|
92
169
|
export const normalizeContributors = (contributors, maintainers) => {
|
|
93
|
-
if (!contributors && !maintainers)
|
|
94
|
-
return
|
|
95
|
-
}
|
|
170
|
+
if (!contributors && !maintainers)
|
|
171
|
+
return;
|
|
96
172
|
const result = [];
|
|
97
173
|
// Parse regular contributors (if any)
|
|
98
174
|
if (contributors) {
|
|
99
175
|
const contributorsArray = Array.isArray(contributors) ? contributors : [contributors];
|
|
176
|
+
const normalizedArray = contributorsArray.every(isNormalizedContributorEntry);
|
|
177
|
+
const noMaintainers = !maintainers ||
|
|
178
|
+
(Array.isArray(maintainers) && maintainers.length === 0);
|
|
179
|
+
// If all contributors are already normalized, and there are
|
|
180
|
+
// no maintainers, return the contributors directly
|
|
181
|
+
if (normalizedArray) {
|
|
182
|
+
if (noMaintainers) {
|
|
183
|
+
return contributorsArray.length > 0 ?
|
|
184
|
+
contributorsArray
|
|
185
|
+
: undefined;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
result.push(...contributorsArray);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Parse each contributor and filter out undefined values
|
|
100
192
|
const parsedContributors = contributorsArray
|
|
101
193
|
.map(person => parsePerson(person))
|
|
102
194
|
.filter((c) => c !== undefined);
|
|
@@ -110,8 +202,129 @@ export const normalizeContributors = (contributors, maintainers) => {
|
|
|
110
202
|
.filter((c) => c !== undefined);
|
|
111
203
|
result.push(...parsedMaintainers);
|
|
112
204
|
}
|
|
113
|
-
return result;
|
|
205
|
+
return result.length > 0 ? result : undefined;
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Helper function to normalize a single {@link Bugs} entry.
|
|
209
|
+
*/
|
|
210
|
+
const normalizeSingleBug = (bug) => {
|
|
211
|
+
const res = [];
|
|
212
|
+
if (typeof bug === 'string') {
|
|
213
|
+
// Try to parse as URL first - if it succeeds, treat as link
|
|
214
|
+
try {
|
|
215
|
+
new URL(bug);
|
|
216
|
+
res.push({ type: 'link', url: bug });
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// TODO: need a more robust email validation, likely
|
|
220
|
+
// to be replaced with valibot / zod
|
|
221
|
+
// If URL parsing fails, check if it's a valid email
|
|
222
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
223
|
+
if (emailRegex.test(bug)) {
|
|
224
|
+
res.push({ type: 'email', email: bug });
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// Default to link for plain strings like 'example.com'
|
|
228
|
+
res.push({ type: 'link', url: bug });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if (isObject(bug)) {
|
|
233
|
+
if (isNormalizedBugsEntry(bug)) {
|
|
234
|
+
res.push(bug);
|
|
235
|
+
}
|
|
236
|
+
const obj = bug;
|
|
237
|
+
if (obj.url) {
|
|
238
|
+
res.push({ type: 'link', url: obj.url });
|
|
239
|
+
}
|
|
240
|
+
if (obj.email) {
|
|
241
|
+
res.push({ type: 'email', email: obj.email });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return res.length > 0 ? res : [];
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Normalize bugs information to a {@link NormalizedBugs} consistent format.
|
|
248
|
+
*/
|
|
249
|
+
export const normalizeBugs = (bugs) => {
|
|
250
|
+
if (!bugs)
|
|
251
|
+
return;
|
|
252
|
+
const result = [];
|
|
253
|
+
// Handle array of bugs entries
|
|
254
|
+
if (Array.isArray(bugs)) {
|
|
255
|
+
for (const bug of bugs) {
|
|
256
|
+
result.push(...normalizeSingleBug(bug));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// Handle single bugs entry
|
|
261
|
+
result.push(...normalizeSingleBug(bugs));
|
|
262
|
+
}
|
|
263
|
+
return result.length > 0 ? result : undefined;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* Type guard to check if a value is a {@link NormalizedBugsEntry}.
|
|
267
|
+
*/
|
|
268
|
+
export const isNormalizedBugsEntry = (o) => {
|
|
269
|
+
return (isObject(o) &&
|
|
270
|
+
'type' in o &&
|
|
271
|
+
((o.type === 'email' &&
|
|
272
|
+
typeof o.email === 'string' &&
|
|
273
|
+
!!o.email) ||
|
|
274
|
+
(o.type === 'link' && typeof o.url === 'string' && !!o.url)));
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* Type guard to check if a value is a {@link NormalizedBugs}.
|
|
278
|
+
*/
|
|
279
|
+
export const isNormalizedBugs = (o) => {
|
|
280
|
+
return (Array.isArray(o) && o.length > 0 && o.every(isNormalizedBugsEntry));
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* Normalize keywords information to a {@link NormalizedKeywords} consistent format.
|
|
284
|
+
*/
|
|
285
|
+
export const normalizeKeywords = (keywords) => {
|
|
286
|
+
if (!keywords)
|
|
287
|
+
return;
|
|
288
|
+
let keywordArray = [];
|
|
289
|
+
if (typeof keywords === 'string') {
|
|
290
|
+
// Handle comma-separated string values
|
|
291
|
+
keywordArray = keywords
|
|
292
|
+
.split(',')
|
|
293
|
+
.map(keyword => keyword.trim())
|
|
294
|
+
.filter(keyword => keyword.length > 0);
|
|
295
|
+
}
|
|
296
|
+
else if (Array.isArray(keywords)) {
|
|
297
|
+
// If all keywords are already normalized, return them directly
|
|
298
|
+
if (isNormalizedKeywords(keywords)) {
|
|
299
|
+
return keywords;
|
|
300
|
+
}
|
|
301
|
+
// Handle array of strings, filter out empty/invalid entries
|
|
302
|
+
keywordArray = keywords
|
|
303
|
+
.filter((keyword) => typeof keyword === 'string')
|
|
304
|
+
.map(keyword => keyword.trim())
|
|
305
|
+
.filter(keyword => keyword.length > 0);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
// Invalid format
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
return keywordArray.length > 0 ? keywordArray : undefined;
|
|
114
312
|
};
|
|
313
|
+
/**
|
|
314
|
+
* Type guard to check if a value is a {@link NormalizedKeywords}.
|
|
315
|
+
*/
|
|
316
|
+
export const isNormalizedKeywords = (o) => {
|
|
317
|
+
return (Array.isArray(o) &&
|
|
318
|
+
o.length > 0 &&
|
|
319
|
+
o.every(keyword => typeof keyword === 'string' &&
|
|
320
|
+
!!keyword &&
|
|
321
|
+
!keyword.startsWith(' ') &&
|
|
322
|
+
!keyword.endsWith(' ')));
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* A type guard to check if a value is a boolean.
|
|
326
|
+
*/
|
|
327
|
+
export const isBoolean = (value) => typeof value === 'boolean';
|
|
115
328
|
export const integrityRE = /^sha512-[a-zA-Z0-9/+]{86}==$/;
|
|
116
329
|
export const isIntegrity = (i) => typeof i === 'string' && integrityRE.test(i);
|
|
117
330
|
export const asIntegrity = (i) => {
|
|
@@ -181,6 +394,10 @@ export const maybeBoolean = (o) => o === undefined || typeof o === 'boolean';
|
|
|
181
394
|
export const isPeerDependenciesMetaValue = (o) => isObject(o) && maybeBoolean(o.optional);
|
|
182
395
|
export const maybeString = (a) => a === undefined || typeof a === 'string';
|
|
183
396
|
export const maybeDist = (a) => a === undefined || (isObject(a) && maybeString(a.tarball));
|
|
397
|
+
/**
|
|
398
|
+
* Is a given unknown value a valid {@link Manifest} object?
|
|
399
|
+
* Returns `true` if so.
|
|
400
|
+
*/
|
|
184
401
|
export const isManifest = (m) => isObject(m) &&
|
|
185
402
|
!Array.isArray(m) &&
|
|
186
403
|
maybeString(m.name) &&
|
|
@@ -192,46 +409,147 @@ export const isManifest = (m) => isObject(m) &&
|
|
|
192
409
|
maybeRecordStringString(m.acceptDependencies) &&
|
|
193
410
|
maybePeerDependenciesMetaSet(m.peerDependenciesMeta) &&
|
|
194
411
|
maybeDist(m.dist);
|
|
412
|
+
/**
|
|
413
|
+
* A specific {@link Manifest} that is retrieved uniquely from reading
|
|
414
|
+
* registry packument and manifest endpoints, it has `dist`, `name` and
|
|
415
|
+
* `version` fields defined.
|
|
416
|
+
*/
|
|
195
417
|
export const isManifestRegistry = (m) => isManifest(m) && !!m.dist && !!m.name && !!m.version;
|
|
418
|
+
/**
|
|
419
|
+
* Given an unknown value, convert it to a {@link Manifest}.
|
|
420
|
+
*/
|
|
196
421
|
export const asManifest = (m, from) => {
|
|
197
422
|
if (!isManifest(m)) {
|
|
198
423
|
throw error('invalid manifest', { found: m }, from ?? asManifest);
|
|
199
424
|
}
|
|
200
|
-
return
|
|
425
|
+
return m;
|
|
201
426
|
};
|
|
202
427
|
/**
|
|
203
|
-
*
|
|
428
|
+
* Given a {@link Manifest} returns a {@link NormalizedManifest} that
|
|
429
|
+
* contains normalized author, bugs, funding, contributors, keywords and
|
|
430
|
+
* version fields.
|
|
204
431
|
*/
|
|
205
432
|
export const normalizeManifest = (manifest) => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (manifest.funding === undefined &&
|
|
209
|
-
manifest.contributors === undefined &&
|
|
210
|
-
!('maintainers' in manifest)) {
|
|
211
|
-
return manifest;
|
|
212
|
-
}
|
|
433
|
+
manifest = fixManifestVersion(manifest);
|
|
434
|
+
const normalizedAuthor = parsePerson(manifest.author);
|
|
213
435
|
const normalizedFunding = normalizeFunding(manifest.funding);
|
|
214
436
|
const normalizedContributors = normalizeContributors(manifest.contributors, manifest.maintainers);
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
437
|
+
const normalizedBugs = normalizeBugs(manifest.bugs);
|
|
438
|
+
const normalizedKeywords = normalizeKeywords(manifest.keywords);
|
|
439
|
+
// holds the same object reference but renames the variable here
|
|
440
|
+
// so that it's simpler to cast it to the normalized type
|
|
441
|
+
const normalizedManifest = manifest;
|
|
442
|
+
if (normalizedAuthor) {
|
|
443
|
+
normalizedManifest.author = normalizedAuthor;
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
delete normalizedManifest.author;
|
|
447
|
+
}
|
|
448
|
+
if (normalizedFunding) {
|
|
449
|
+
normalizedManifest.funding = normalizedFunding;
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
delete normalizedManifest.funding;
|
|
453
|
+
}
|
|
454
|
+
if (normalizedContributors) {
|
|
455
|
+
normalizedManifest.contributors = normalizedContributors;
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
delete normalizedManifest.contributors;
|
|
459
|
+
}
|
|
460
|
+
if (normalizedBugs) {
|
|
461
|
+
normalizedManifest.bugs = normalizedBugs;
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
delete normalizedManifest.bugs;
|
|
465
|
+
}
|
|
466
|
+
if (normalizedKeywords) {
|
|
467
|
+
normalizedManifest.keywords = normalizedKeywords;
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
delete normalizedManifest.keywords;
|
|
471
|
+
}
|
|
221
472
|
// Remove maintainers field if it exists in the raw manifest
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
delete
|
|
226
|
-
return
|
|
473
|
+
// this can only happen if the manifest is of ManifestRegistry type
|
|
474
|
+
if ('maintainers' in normalizedManifest &&
|
|
475
|
+
normalizedManifest.maintainers) {
|
|
476
|
+
delete normalizedManifest.maintainers;
|
|
477
|
+
return normalizedManifest;
|
|
478
|
+
}
|
|
479
|
+
return normalizedManifest;
|
|
480
|
+
};
|
|
481
|
+
/**
|
|
482
|
+
* Type guard to check if a value is a {@link NormalizedManifest}.
|
|
483
|
+
*/
|
|
484
|
+
export const isNormalizedManifest = (o) => {
|
|
485
|
+
return (isManifest(o) &&
|
|
486
|
+
// given that all these values are optional and potentially undefined
|
|
487
|
+
// we only check their value content if they are present
|
|
488
|
+
('author' in o ? isNormalizedContributorEntry(o.author) : true) &&
|
|
489
|
+
('contributors' in o ?
|
|
490
|
+
isNormalizedContributors(o.contributors)
|
|
491
|
+
: true) &&
|
|
492
|
+
('funding' in o ? isNormalizedFunding(o.funding) : true) &&
|
|
493
|
+
('bugs' in o ? isNormalizedBugs(o.bugs) : true) &&
|
|
494
|
+
('keywords' in o ? isNormalizedKeywords(o.keywords) : true));
|
|
495
|
+
};
|
|
496
|
+
/**
|
|
497
|
+
* Given an unknown value, convert it to a {@link NormalizedManifest}.
|
|
498
|
+
*/
|
|
499
|
+
export const asNormalizedManifest = (m, from) => {
|
|
500
|
+
if (!isNormalizedManifest(m)) {
|
|
501
|
+
throw error('invalid normalized manifest', { found: m }, from ?? asNormalizedManifest);
|
|
227
502
|
}
|
|
228
|
-
return
|
|
503
|
+
return m;
|
|
229
504
|
};
|
|
505
|
+
/**
|
|
506
|
+
* Given an unknown value, convert it to a {@link ManifestRegistry}.
|
|
507
|
+
*/
|
|
230
508
|
export const asManifestRegistry = (m, from) => {
|
|
231
509
|
if (!isManifestRegistry(m)) {
|
|
232
510
|
throw error('invalid registry manifest', { found: m }, from ?? asManifestRegistry);
|
|
233
511
|
}
|
|
234
|
-
return
|
|
512
|
+
return m;
|
|
513
|
+
};
|
|
514
|
+
/**
|
|
515
|
+
* Type guard to check if a value is a {@link NormalizedManifestRegistry}.
|
|
516
|
+
*/
|
|
517
|
+
export const isNormalizedManifestRegistry = (o) => {
|
|
518
|
+
return isNormalizedManifest(o) && isManifestRegistry(o);
|
|
519
|
+
};
|
|
520
|
+
/**
|
|
521
|
+
* Given an unknown value, convert it to a {@link NormalizedManifestRegistry}.
|
|
522
|
+
*/
|
|
523
|
+
export const asNormalizedManifestRegistry = (m, from) => {
|
|
524
|
+
if (!isNormalizedManifestRegistry(m)) {
|
|
525
|
+
throw error('invalid normalized manifest registry', { found: m }, from ?? asNormalizedManifestRegistry);
|
|
526
|
+
}
|
|
527
|
+
return m;
|
|
528
|
+
};
|
|
529
|
+
/**
|
|
530
|
+
* Expands a normalized contributor entry by converting the
|
|
531
|
+
* in-memory symbols to their plain values.
|
|
532
|
+
*/
|
|
533
|
+
const expandNormalizedContributorEntrySymbols = (c) => {
|
|
534
|
+
return {
|
|
535
|
+
...c,
|
|
536
|
+
writeAccess: c[kWriteAccess],
|
|
537
|
+
isPublisher: c[kIsPublisher],
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
/**
|
|
541
|
+
* Walks a normalized manifest and expands any symbols found
|
|
542
|
+
* in the `author` and `contributors` fields.
|
|
543
|
+
*/
|
|
544
|
+
export const expandNormalizedManifestSymbols = (m) => {
|
|
545
|
+
const res = { ...m };
|
|
546
|
+
if (isNormalizedContributorEntry(m.author)) {
|
|
547
|
+
res.author = expandNormalizedContributorEntrySymbols(m.author);
|
|
548
|
+
}
|
|
549
|
+
if (isNormalizedContributors(m.contributors)) {
|
|
550
|
+
res.contributors = m.contributors.map(expandNormalizedContributorEntrySymbols);
|
|
551
|
+
}
|
|
552
|
+
return res;
|
|
235
553
|
};
|
|
236
554
|
export const assertManifest = m => {
|
|
237
555
|
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\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 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?: 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 // 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 !('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\n // Create result with normalized data\n const result: Manifest = {\n ...manifest,\n funding: normalizedFunding as Funding,\n contributors: normalizedContributors,\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"]}
|
|
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/**\n * Utility type that overrides specific properties of type T with new types\n * from R. Constrains override values to exclude undefined, ensuring that\n * normalization cannot introduce undefined to fields that shouldn't have it.\n */\nexport type Override<\n T,\n R extends { [K in keyof R]: R[K] extends undefined ? never : R[K] },\n> = {\n [K in keyof T]: K extends keyof R ? R[K] : T[K]\n}\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/**\n * An object with url and optional additional properties\n */\nexport type NormalizedFundingEntry = {\n url: string\n type?: string\n [key: string]: JSONField\n}\n\n/**\n * Normalized funding information, an array of {@link NormalizedFundingEntry}.\n */\nexport type NormalizedFunding = NormalizedFundingEntry[]\n\n/**\n * Normalize a single funding entry to a consistent format.\n */\nconst normalizeFundingEntry = (\n item: unknown,\n): 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 // If the item is already normalized, return it directly\n if (isNormalizedFundingEntry(item)) {\n return item\n }\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/**\n * Normalize funding information to a consistent format.\n */\nexport const normalizeFunding = (\n funding: unknown,\n): NormalizedFunding | undefined => {\n if (!funding) return\n\n const fundingArray = Array.isArray(funding) ? funding : [funding]\n const sources = fundingArray.map(normalizeFundingEntry)\n return sources.length > 0 ? sources : undefined\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedFundingEntry}.\n */\nexport const isNormalizedFundingEntry = (\n o: unknown,\n): o is NormalizedFundingEntry => {\n return (\n isObject(o) &&\n 'url' in o &&\n typeof o.url === 'string' &&\n !!o.url &&\n 'type' in o &&\n typeof o.type === 'string' &&\n ['github', 'patreon', 'opencollective', 'individual'].includes(\n o.type,\n )\n )\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedFunding}.\n */\nexport const isNormalizedFunding = (\n o: unknown,\n): o is NormalizedFunding => {\n return (\n Array.isArray(o) &&\n o.length > 0 &&\n o.every(isNormalizedFundingEntry)\n )\n}\n\n/**\n * Given a version Normalize the version field in a manifest.\n */\nexport const fixManifestVersion = <\n T extends Manifest | ManifestRegistry,\n>(\n manifest: T,\n): T => {\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\nconst kWriteAccess = Symbol.for('writeAccess')\nconst kIsPublisher = Symbol.for('isPublisher')\n\n/**\n * Parse a string or object into a normalized contributor.\n */\nexport const parsePerson = (\n person: unknown,\n writeAccess?: boolean,\n isPublisher?: boolean,\n): NormalizedContributorEntry | undefined => {\n if (!person) return\n\n if (isObject(person)) {\n // this is an already parsed object person, just return its value\n if (isNormalizedContributorEntry(person)) {\n return person\n }\n\n const name =\n typeof person.name === 'string' ? person.name : undefined\n const email =\n typeof person.email === 'string' ? person.email\n : typeof person.mail === 'string' ? person.mail\n : undefined\n\n if (!name && !email) return undefined\n\n return {\n name,\n email,\n [kWriteAccess]: writeAccess ?? false,\n [kIsPublisher]: isPublisher ?? false,\n }\n } else if (typeof person === 'string') {\n const NAME_PATTERN = /^([^(<]+)/\n const EMAIL_PATTERN = /<([^<>]+)>/\n const name = NAME_PATTERN.exec(person)?.[0].trim() || ''\n const email = EMAIL_PATTERN.exec(person)?.[1] || ''\n if (!name && !email) return undefined\n return {\n name: name || undefined,\n email: email || undefined,\n [kWriteAccess]: writeAccess ?? false,\n [kIsPublisher]: isPublisher ?? false,\n }\n }\n return\n}\n\n/**\n * Normalized contributors - always an array of {@link NormalizedContributorEntry}.\n */\nexport type NormalizedContributors = NormalizedContributorEntry[]\n\n/**\n * Represents a normalized contributor object. This is the type that is\n * used in the {@link NormalizedManifest} and {@link NormalizedManifestRegistry}\n * objects.\n */\nexport type NormalizedContributorEntry = {\n email?: string\n name?: string\n // in-memory we store those keys as symbols so that they\n // don't get written to user-managed package.json files\n [kWriteAccess]?: boolean\n [kIsPublisher]?: boolean\n // we also have a plain version that is used in the\n // transfer data format and lockfiles\n writeAccess?: boolean\n isPublisher?: boolean\n}\n\n/**\n * Type guard to check if a value is a normalized contributor entry.\n */\nexport const isNormalizedContributorEntry = (\n o: unknown,\n): o is NormalizedContributorEntry => {\n return (\n isObject(o) &&\n typeof o.name === 'string' &&\n !!o.name &&\n typeof o.email === 'string' &&\n !!o.email &&\n (isBoolean((o as NormalizedContributorEntry)[kWriteAccess]) ||\n isBoolean(o.writeAccess)) &&\n (isBoolean((o as NormalizedContributorEntry)[kIsPublisher]) ||\n isBoolean(o.isPublisher))\n )\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedContributors}.\n */\nexport const isNormalizedContributors = (\n o: unknown,\n): o is NormalizedContributors => {\n return (\n Array.isArray(o) &&\n o.length > 0 &&\n o.every(isNormalizedContributorEntry)\n )\n}\n\n/**\n * Normalize contributors and maintainers from various formats\n */\nexport const normalizeContributors = (\n contributors: unknown,\n maintainers?: unknown,\n): NormalizedContributorEntry[] | undefined => {\n if (!contributors && !maintainers) return\n\n const result: NormalizedContributorEntry[] = []\n\n // Parse regular contributors (if any)\n if (contributors) {\n const contributorsArray: unknown[] =\n Array.isArray(contributors) ? contributors : [contributors]\n\n const normalizedArray = contributorsArray.every(\n isNormalizedContributorEntry,\n )\n const noMaintainers =\n !maintainers ||\n (Array.isArray(maintainers) && maintainers.length === 0)\n\n // If all contributors are already normalized, and there are\n // no maintainers, return the contributors directly\n if (normalizedArray) {\n if (noMaintainers) {\n return contributorsArray.length > 0 ?\n contributorsArray\n : undefined\n } else {\n result.push(...contributorsArray)\n }\n }\n\n // Parse each contributor and filter out undefined values\n const parsedContributors = contributorsArray\n .map(person => parsePerson(person))\n .filter((c): c is NormalizedContributorEntry => 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 NormalizedContributorEntry => c !== undefined)\n result.push(...parsedMaintainers)\n }\n\n return result.length > 0 ? result : undefined\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 {@link NormalizedBugsEntry}\n */\nexport type NormalizedBugs = NormalizedBugsEntry[]\n\n/**\n * Helper function to normalize a single {@link Bugs} entry.\n */\nconst normalizeSingleBug = (bug: unknown): NormalizedBugsEntry[] => {\n const res: NormalizedBugsEntry[] = []\n\n if (typeof bug === 'string') {\n // Try to parse as URL first - if it succeeds, treat as link\n try {\n new URL(bug)\n res.push({ type: 'link', url: bug })\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(bug)) {\n res.push({ type: 'email', email: bug })\n } else {\n // Default to link for plain strings like 'example.com'\n res.push({ type: 'link', url: bug })\n }\n }\n } else if (isObject(bug)) {\n if (isNormalizedBugsEntry(bug)) {\n res.push(bug)\n }\n const obj = bug as { url?: string; email?: string }\n\n if (obj.url) {\n res.push({ type: 'link', url: obj.url })\n }\n if (obj.email) {\n res.push({ type: 'email', email: obj.email })\n }\n }\n\n return res.length > 0 ? res : []\n}\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) return\n\n const result: NormalizedBugsEntry[] = []\n\n // Handle array of bugs entries\n if (Array.isArray(bugs)) {\n for (const bug of bugs) {\n result.push(...normalizeSingleBug(bug))\n }\n } else {\n // Handle single bugs entry\n result.push(...normalizeSingleBug(bugs))\n }\n\n return result.length > 0 ? result : undefined\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedBugsEntry}.\n */\nexport const isNormalizedBugsEntry = (\n o: unknown,\n): o is NormalizedBugsEntry => {\n return (\n isObject(o) &&\n 'type' in o &&\n ((o.type === 'email' &&\n typeof o.email === 'string' &&\n !!o.email) ||\n (o.type === 'link' && typeof o.url === 'string' && !!o.url))\n )\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedBugs}.\n */\nexport const isNormalizedBugs = (o: unknown): o is NormalizedBugs => {\n return (\n Array.isArray(o) && o.length > 0 && o.every(isNormalizedBugsEntry)\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) return\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 // If all keywords are already normalized, return them directly\n if (isNormalizedKeywords(keywords)) {\n return keywords as unknown as NormalizedKeywords\n }\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\n return\n }\n\n return keywordArray.length > 0 ? keywordArray : undefined\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedKeywords}.\n */\nexport const isNormalizedKeywords = (\n o: unknown,\n): o is NormalizedKeywords => {\n return (\n Array.isArray(o) &&\n o.length > 0 &&\n o.every(\n keyword =>\n typeof keyword === 'string' &&\n !!keyword &&\n !keyword.startsWith(' ') &&\n !keyword.endsWith(' '),\n )\n )\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?: Person[]\n /** the license of the package */\n license?: string\n}\n\nexport type NormalizedFields = {\n bugs: NormalizedBugs | undefined\n author: NormalizedContributorEntry | undefined\n contributors: NormalizedContributors | undefined\n funding: NormalizedFunding | undefined\n keywords: NormalizedKeywords | undefined\n}\n\n/**\n * A {@link Manifest} object that contains normalized fields.\n */\nexport type NormalizedManifest = Override<Manifest, NormalizedFields>\n\n/**\n * A {@link ManifestRegistry} object that contains normalized fields.\n */\nexport type NormalizedManifestRegistry = Override<\n ManifestRegistry,\n NormalizedFields\n>\n\n/**\n * A specific type of {@link Manifest} that represents manifests that were\n * retrieved from a registry, these will always have `name`, `version`\n * and `dist` information along with an optional `maintainers` field.\n */\nexport type ManifestRegistry = Manifest &\n Required<Pick<Manifest, 'name' | 'version' | 'dist'>> & {\n maintainers?: unknown\n }\n\n/**\n * Maps the manifest type to the equivalent normalized manifest type.\n */\nexport type SomeNormalizedManifest<T> =\n T extends ManifestRegistry ? NormalizedManifestRegistry\n : NormalizedManifest\n\n/**\n * A document that represents available package versions in a given registry\n * along with extra information, such as `dist-tags` and `maintainers` info.\n * The `versions` field is key-value structure in which keys are the\n * available versions of a given package and values are\n * {@link ManifestRegistry} objects.\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\n/**\n * A type guard to check if a value is a boolean.\n */\nexport const isBoolean = (value: unknown): value is boolean =>\n typeof value === 'boolean'\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\n/**\n * Is a given unknown value a valid {@link Manifest} object?\n * Returns `true` if so.\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\n/**\n * A specific {@link Manifest} that is retrieved uniquely from reading\n * registry packument and manifest endpoints, it has `dist`, `name` and\n * `version` fields defined.\n */\nexport const isManifestRegistry = (\n m: unknown,\n): m is ManifestRegistry =>\n isManifest(m) && !!m.dist && !!m.name && !!m.version\n\n/**\n * Given an unknown value, convert it to a {@link Manifest}.\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 m\n}\n\n/**\n * Given a {@link Manifest} returns a {@link NormalizedManifest} that\n * contains normalized author, bugs, funding, contributors, keywords and\n * version fields.\n */\nexport const normalizeManifest = <\n T extends Manifest | ManifestRegistry,\n>(\n manifest: T,\n): SomeNormalizedManifest<T> => {\n manifest = fixManifestVersion(manifest)\n\n const normalizedAuthor = parsePerson(manifest.author)\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 // holds the same object reference but renames the variable here\n // so that it's simpler to cast it to the normalized type\n const normalizedManifest = manifest as SomeNormalizedManifest<T>\n\n if (normalizedAuthor) {\n normalizedManifest.author = normalizedAuthor\n } else {\n delete normalizedManifest.author\n }\n\n if (normalizedFunding) {\n normalizedManifest.funding = normalizedFunding\n } else {\n delete normalizedManifest.funding\n }\n\n if (normalizedContributors) {\n normalizedManifest.contributors = normalizedContributors\n } else {\n delete normalizedManifest.contributors\n }\n\n if (normalizedBugs) {\n normalizedManifest.bugs = normalizedBugs\n } else {\n delete normalizedManifest.bugs\n }\n\n if (normalizedKeywords) {\n normalizedManifest.keywords = normalizedKeywords\n } else {\n delete normalizedManifest.keywords\n }\n\n // Remove maintainers field if it exists in the raw manifest\n // this can only happen if the manifest is of ManifestRegistry type\n if (\n 'maintainers' in normalizedManifest &&\n normalizedManifest.maintainers\n ) {\n delete normalizedManifest.maintainers\n return normalizedManifest\n }\n\n return normalizedManifest\n}\n\n/**\n * Type guard to check if a value is a {@link NormalizedManifest}.\n */\nexport const isNormalizedManifest = (\n o: unknown,\n): o is NormalizedManifest => {\n return (\n isManifest(o) &&\n // given that all these values are optional and potentially undefined\n // we only check their value content if they are present\n ('author' in o ? isNormalizedContributorEntry(o.author) : true) &&\n ('contributors' in o ?\n isNormalizedContributors(o.contributors)\n : true) &&\n ('funding' in o ? isNormalizedFunding(o.funding) : true) &&\n ('bugs' in o ? isNormalizedBugs(o.bugs) : true) &&\n ('keywords' in o ? isNormalizedKeywords(o.keywords) : true)\n )\n}\n\n/**\n * Given an unknown value, convert it to a {@link NormalizedManifest}.\n */\nexport const asNormalizedManifest = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): NormalizedManifest => {\n if (!isNormalizedManifest(m)) {\n throw error(\n 'invalid normalized manifest',\n { found: m },\n from ?? asNormalizedManifest,\n )\n }\n return m\n}\n\n/**\n * Given an unknown value, convert it to a {@link ManifestRegistry}.\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\n/**\n * Type guard to check if a value is a {@link NormalizedManifestRegistry}.\n */\nexport const isNormalizedManifestRegistry = (\n o: unknown,\n): o is NormalizedManifestRegistry => {\n return isNormalizedManifest(o) && isManifestRegistry(o)\n}\n\n/**\n * Given an unknown value, convert it to a {@link NormalizedManifestRegistry}.\n */\nexport const asNormalizedManifestRegistry = (\n m: unknown,\n from?: (...a: unknown[]) => any,\n): NormalizedManifestRegistry => {\n if (!isNormalizedManifestRegistry(m)) {\n throw error(\n 'invalid normalized manifest registry',\n { found: m },\n from ?? asNormalizedManifestRegistry,\n )\n }\n return m\n}\n\n/**\n * Expands a normalized contributor entry by converting the\n * in-memory symbols to their plain values.\n */\nconst expandNormalizedContributorEntrySymbols = (\n c: NormalizedContributorEntry,\n): NormalizedContributorEntry => {\n return {\n ...c,\n writeAccess: c[kWriteAccess],\n isPublisher: c[kIsPublisher],\n }\n}\n\n/**\n * Walks a normalized manifest and expands any symbols found\n * in the `author` and `contributors` fields.\n */\nexport const expandNormalizedManifestSymbols = (\n m: NormalizedManifest,\n): NormalizedManifest => {\n const res = { ...m }\n\n if (isNormalizedContributorEntry(m.author)) {\n res.author = expandNormalizedContributorEntrySymbols(m.author)\n }\n\n if (isNormalizedContributors(m.contributors)) {\n res.contributors = m.contributors.map(\n expandNormalizedContributorEntrySymbols,\n )\n }\n\n return res\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-19",
|
|
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-19",
|
|
23
|
+
"@vltpkg/semver": "0.0.0-19"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@eslint/js": "^9.28.0",
|