1 |
|
2 | import { PackageJson as PackageJson4 } from "zod-package-json";
|
3 |
|
4 |
|
5 | import QuickLRU from "quick-lru";
|
6 | var cache = new QuickLRU({
|
7 |
|
8 | maxSize: 100,
|
9 |
|
10 | maxAge: 5 * 60 * 1e3
|
11 | });
|
12 |
|
13 |
|
14 | import { z } from "zod";
|
15 | var DownloadPeriod = z.union([
|
16 | z.literal("last-day"),
|
17 | z.literal("last-week"),
|
18 | z.literal("last-month"),
|
19 | z.literal("last-year"),
|
20 | z.string().regex(/^\d{4}-\d{2}-\d{2}(:\d{4}-\d{2}-\d{2})?$/)
|
21 | ]);
|
22 |
|
23 |
|
24 | import urlJoin2 from "url-join";
|
25 | import { z as z4 } from "zod";
|
26 |
|
27 |
|
28 | import validatePackageName from "validate-npm-package-name";
|
29 | var assertValidPackageName = (name) => {
|
30 | const { validForOldPackages, validForNewPackages, warnings, errors } = validatePackageName(name);
|
31 | const isValid = validForOldPackages || validForNewPackages;
|
32 | if (!isValid) {
|
33 | throw new Error("invalid package name", { cause: { name, warnings, errors } });
|
34 | }
|
35 | };
|
36 |
|
37 |
|
38 | import { z as z2 } from "zod";
|
39 | var DistTags = z2.object({
|
40 |
|
41 | latest: z2.string(),
|
42 |
|
43 |
|
44 | next: z2.string().optional(),
|
45 | alpha: z2.string().optional(),
|
46 | beta: z2.string().optional(),
|
47 | rc: z2.string().optional(),
|
48 | canary: z2.string().optional(),
|
49 | dev: z2.string().optional()
|
50 | }).catchall(z2.string());
|
51 |
|
52 |
|
53 | var fetchData = async (schema, url, headers) => {
|
54 | const cacheKey = JSON.stringify({ url, headers });
|
55 | const cachedJson = cache.get(cacheKey);
|
56 | if (cachedJson) {
|
57 | return schema.parse(cachedJson);
|
58 | }
|
59 | const response = await fetch(url, { headers });
|
60 | const json = await response.json();
|
61 | cache.set(cacheKey, json);
|
62 | return schema.parse(json);
|
63 | };
|
64 |
|
65 |
|
66 | import urlJoin from "url-join";
|
67 | import { z as z3 } from "zod";
|
68 | import { PackageJson } from "zod-package-json";
|
69 |
|
70 |
|
71 | var npmRegistryUrl = "https://registry.npmjs.org";
|
72 | var npmRegistryDownloadsApiUrl = "https://api.npmjs.org";
|
73 |
|
74 |
|
75 | var Dist = z3.object({
|
76 |
|
77 | tarball: z3.string(),
|
78 |
|
79 | shasum: z3.string(),
|
80 |
|
81 | integrity: z3.string().optional(),
|
82 |
|
83 | fileCount: z3.number().optional(),
|
84 |
|
85 | unpackedSize: z3.number().optional(),
|
86 | |
87 |
|
88 |
|
89 |
|
90 | "npm-signature": z3.string().optional(),
|
91 | |
92 |
|
93 |
|
94 |
|
95 | signatures: z3.array(
|
96 | z3.object({
|
97 | keyid: z3.string(),
|
98 | sig: z3.string()
|
99 | })
|
100 | ).optional()
|
101 | });
|
102 | var PackageManifest = PackageJson.extend({
|
103 |
|
104 | _id: z3.string(),
|
105 |
|
106 | dist: Dist,
|
107 |
|
108 | readme: z3.string().optional(),
|
109 |
|
110 | readmeFilename: z3.string().optional(),
|
111 |
|
112 | gitHead: z3.string().optional(),
|
113 |
|
114 | _hasShrinkwrap: z3.boolean().optional(),
|
115 |
|
116 | _nodeVersion: z3.string().optional(),
|
117 |
|
118 | _npmVersion: z3.string().optional(),
|
119 |
|
120 | _npmUser: PackageJson.shape.author.optional(),
|
121 |
|
122 | _npmOperationalInternal: z3.object({
|
123 | host: z3.string().optional(),
|
124 | tmp: z3.string().optional()
|
125 | }).optional(),
|
126 | |
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 | engines: z3.record(z3.string()).optional().catch(void 0),
|
134 | |
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 | license: z3.string().optional().catch(void 0),
|
142 | |
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 | homepage: z3.string().optional().catch(void 0),
|
150 | |
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 | deprecated: z3.union([z3.string(), z3.boolean()]).optional()
|
158 | });
|
159 | var getPackageManifest = async (name, versionOrTag = "latest", registry = npmRegistryUrl) => {
|
160 | assertValidPackageName(name);
|
161 | return fetchData(PackageManifest, urlJoin(registry, name, versionOrTag));
|
162 | };
|
163 |
|
164 |
|
165 | var AbbreviatedPackument = z4.object({
|
166 |
|
167 | name: z4.string(),
|
168 |
|
169 | modified: z4.string(),
|
170 |
|
171 | "dist-tags": DistTags,
|
172 |
|
173 | versions: z4.record(
|
174 | z4.string(),
|
175 | PackageManifest.pick({
|
176 | name: true,
|
177 | version: true,
|
178 | dist: true,
|
179 | deprecated: true,
|
180 | dependencies: true,
|
181 | optionalDependencies: true,
|
182 | devDependencies: true,
|
183 | bundleDependencies: true,
|
184 | peerDependencies: true,
|
185 | peerDependenciesMeta: true,
|
186 | bin: true,
|
187 | directories: true,
|
188 | engines: true,
|
189 | cpu: true,
|
190 | os: true,
|
191 | _hasShrinkwrap: true
|
192 | }).extend({
|
193 |
|
194 | hasInstallScript: z4.boolean().optional()
|
195 | })
|
196 | )
|
197 | });
|
198 | var getAbbreviatedPackument = async (name, registry = npmRegistryUrl) => {
|
199 | assertValidPackageName(name);
|
200 | return fetchData(AbbreviatedPackument, urlJoin2(registry, name), {
|
201 | Accept: "application/vnd.npm.install-v1+json"
|
202 | });
|
203 | };
|
204 |
|
205 |
|
206 | import urlJoin5 from "url-join";
|
207 | import { z as z7 } from "zod";
|
208 |
|
209 |
|
210 | import urlJoin4 from "url-join";
|
211 | import { z as z6 } from "zod";
|
212 |
|
213 |
|
214 | import urlJoin3 from "url-join";
|
215 | import { z as z5 } from "zod";
|
216 | var DailyRegistryDownloads = z5.object({
|
217 |
|
218 | start: z5.string(),
|
219 |
|
220 | end: z5.string(),
|
221 |
|
222 | downloads: z5.array(
|
223 | z5.object({
|
224 |
|
225 | downloads: z5.number(),
|
226 |
|
227 | day: z5.string()
|
228 | })
|
229 | )
|
230 | });
|
231 | var getDailyRegistryDownloads = async (period, registry = npmRegistryDownloadsApiUrl) => fetchData(DailyRegistryDownloads, urlJoin3(registry, `/downloads/range/${period}`));
|
232 |
|
233 |
|
234 | var DailyPackageDownloads = DailyRegistryDownloads.extend({
|
235 |
|
236 | package: z6.string()
|
237 | });
|
238 | var getDailyPackageDownloads = async (name, period, registry = npmRegistryDownloadsApiUrl) => {
|
239 | assertValidPackageName(name);
|
240 | return fetchData(DailyPackageDownloads, urlJoin4(registry, `/downloads/range/${period}/${name}`));
|
241 | };
|
242 |
|
243 |
|
244 | var BulkDailyPackageDownloads = z7.record(z7.union([z7.null(), DailyPackageDownloads]));
|
245 | var getBulkDailyPackageDownloads = async (names, period, registry = npmRegistryDownloadsApiUrl) => {
|
246 | for (const name of names) {
|
247 | assertValidPackageName(name);
|
248 | }
|
249 | return fetchData(
|
250 | BulkDailyPackageDownloads,
|
251 | urlJoin5(registry, `/downloads/range/${period}/${names.join(",")}`)
|
252 | );
|
253 | };
|
254 |
|
255 |
|
256 | import urlJoin8 from "url-join";
|
257 | import { z as z10 } from "zod";
|
258 |
|
259 |
|
260 | import urlJoin7 from "url-join";
|
261 | import { z as z9 } from "zod";
|
262 |
|
263 |
|
264 | import urlJoin6 from "url-join";
|
265 | import { z as z8 } from "zod";
|
266 | var RegistryDownloads = z8.object({
|
267 |
|
268 | downloads: z8.number(),
|
269 |
|
270 | start: z8.string(),
|
271 |
|
272 | end: z8.string()
|
273 | });
|
274 | var getRegistryDownloads = async (period, registry = npmRegistryDownloadsApiUrl) => fetchData(RegistryDownloads, urlJoin6(registry, `/downloads/point/${period}`));
|
275 |
|
276 |
|
277 | var PackageDownloads = RegistryDownloads.extend({
|
278 |
|
279 | package: z9.string()
|
280 | });
|
281 | var getPackageDownloads = async (name, period, registry = npmRegistryDownloadsApiUrl) => {
|
282 | assertValidPackageName(name);
|
283 | return fetchData(PackageDownloads, urlJoin7(registry, `/downloads/point/${period}/${name}`));
|
284 | };
|
285 |
|
286 |
|
287 | var BulkPackageDownloads = z10.record(z10.union([z10.null(), PackageDownloads]));
|
288 | var getBulkPackageDownloads = async (names, period, registry = npmRegistryDownloadsApiUrl) => {
|
289 | for (const name of names) {
|
290 | assertValidPackageName(name);
|
291 | }
|
292 | return fetchData(
|
293 | BulkPackageDownloads,
|
294 | urlJoin8(registry, `/downloads/point/${period}/${names.join(",")}`)
|
295 | );
|
296 | };
|
297 |
|
298 |
|
299 | import urlJoin9 from "url-join";
|
300 | import { z as z11 } from "zod";
|
301 | var PackageVersionsDownloads = z11.object({
|
302 |
|
303 | package: z11.string(),
|
304 |
|
305 | downloads: z11.record(z11.number())
|
306 | });
|
307 | var getPackageVersionsDownloads = async (name, registry = npmRegistryDownloadsApiUrl) => {
|
308 | assertValidPackageName(name);
|
309 | return fetchData(
|
310 | PackageVersionsDownloads,
|
311 | urlJoin9(registry, `/versions/${encodeURIComponent(name)}/last-week`)
|
312 | );
|
313 | };
|
314 |
|
315 |
|
316 | import urlJoin10 from "url-join";
|
317 | import { z as z12 } from "zod";
|
318 | import { PackageJson as PackageJson2 } from "zod-package-json";
|
319 | var Time = z12.object({
|
320 |
|
321 | created: z12.string(),
|
322 |
|
323 | modified: z12.string()
|
324 | }).catchall(z12.string());
|
325 | var Packument = PackageJson2.pick({
|
326 | author: true,
|
327 | bugs: true,
|
328 | contributors: true,
|
329 | description: true,
|
330 | homepage: true,
|
331 | keywords: true,
|
332 | license: true,
|
333 | maintainers: true,
|
334 | repository: true
|
335 | }).extend({
|
336 |
|
337 | _id: z12.string(),
|
338 |
|
339 | name: z12.string(),
|
340 |
|
341 | "dist-tags": DistTags,
|
342 | |
343 |
|
344 |
|
345 |
|
346 |
|
347 | time: Time,
|
348 | |
349 |
|
350 |
|
351 |
|
352 | versions: z12.record(PackageManifest),
|
353 |
|
354 | _rev: z12.coerce.string().optional(),
|
355 |
|
356 | users: z12.record(z12.boolean()).optional(),
|
357 |
|
358 | readme: z12.string().optional(),
|
359 |
|
360 | readmeFilename: z12.string().optional()
|
361 | });
|
362 | var getPackument = async (name, registry = npmRegistryUrl) => {
|
363 | assertValidPackageName(name);
|
364 | return fetchData(Packument, urlJoin10(registry, name));
|
365 | };
|
366 |
|
367 |
|
368 | import { z as z13 } from "zod";
|
369 | var RegistryMetadata = z13.object({
|
370 |
|
371 | db_name: z13.string().optional(),
|
372 | doc_count: z13.number().optional(),
|
373 | doc_del_count: z13.number().optional(),
|
374 | update_seq: z13.number().optional(),
|
375 | purge_seq: z13.number().optional(),
|
376 | compact_running: z13.boolean().optional(),
|
377 | disk_size: z13.number().optional(),
|
378 | data_size: z13.number().optional(),
|
379 | instance_start_time: z13.string().optional(),
|
380 | disk_format_version: z13.number().optional(),
|
381 | committed_update_seq: z13.number().optional(),
|
382 | compacted_seq: z13.number().optional(),
|
383 | uuid: z13.string().optional(),
|
384 | other: z13.object({ data_size: z13.number().optional() }).optional(),
|
385 | sizes: z13.object({
|
386 | file: z13.number().optional(),
|
387 | active: z13.number().optional(),
|
388 | external: z13.number().optional()
|
389 | }).optional()
|
390 | });
|
391 | var getRegistryMetadata = async (registry = npmRegistryUrl) => fetchData(RegistryMetadata, registry);
|
392 |
|
393 |
|
394 | import urlJoin11 from "url-join";
|
395 | import { z as z14 } from "zod";
|
396 | var RegistrySigningKeys = z14.object({
|
397 | keys: z14.array(
|
398 | z14.object({
|
399 | |
400 |
|
401 |
|
402 |
|
403 | expires: z14.string().nullable(),
|
404 |
|
405 | keyid: z14.string(),
|
406 |
|
407 | keytype: z14.string(),
|
408 |
|
409 | scheme: z14.string(),
|
410 |
|
411 | key: z14.string()
|
412 | })
|
413 | )
|
414 | });
|
415 | var getRegistrySigningKeys = async (registry = npmRegistryUrl) => fetchData(RegistrySigningKeys, urlJoin11(registry, "-/npm/v1/keys"));
|
416 |
|
417 |
|
418 | import queryString from "query-string";
|
419 | import urlJoin12 from "url-join";
|
420 | import { z as z15 } from "zod";
|
421 | import { PackageJson as PackageJson3 } from "zod-package-json";
|
422 | var SearchCriteria = z15.object({
|
423 | |
424 |
|
425 |
|
426 |
|
427 |
|
428 |
|
429 |
|
430 |
|
431 |
|
432 |
|
433 |
|
434 |
|
435 |
|
436 |
|
437 |
|
438 |
|
439 | text: z15.string().optional(),
|
440 |
|
441 | size: z15.number().optional(),
|
442 |
|
443 | from: z15.number().optional(),
|
444 |
|
445 | quality: z15.number().optional(),
|
446 |
|
447 | popularity: z15.number().optional(),
|
448 |
|
449 | maintenance: z15.number().optional()
|
450 | });
|
451 | var SearchResult = z15.object({
|
452 |
|
453 | package: PackageJson3.pick({
|
454 | name: true,
|
455 | version: true,
|
456 | description: true,
|
457 | keywords: true
|
458 | }).extend({
|
459 | |
460 |
|
461 |
|
462 |
|
463 | scope: z15.string(),
|
464 | |
465 |
|
466 |
|
467 |
|
468 | date: z15.string(),
|
469 |
|
470 | author: z15.object({
|
471 | username: z15.string().optional(),
|
472 | name: z15.string().optional(),
|
473 | email: z15.string().optional(),
|
474 | url: z15.string().optional()
|
475 | }).optional(),
|
476 |
|
477 | publisher: z15.object({
|
478 | username: z15.string(),
|
479 | email: z15.string()
|
480 | }),
|
481 |
|
482 | maintainers: z15.array(
|
483 | z15.object({
|
484 | username: z15.string(),
|
485 | email: z15.string()
|
486 | })
|
487 | ),
|
488 |
|
489 | links: z15.object({
|
490 |
|
491 | npm: z15.string().optional(),
|
492 |
|
493 | homepage: z15.string().optional(),
|
494 |
|
495 | repository: z15.string().optional(),
|
496 |
|
497 | bugs: z15.string().optional()
|
498 | })
|
499 | }),
|
500 |
|
501 | score: z15.object({
|
502 |
|
503 | final: z15.number(),
|
504 |
|
505 | detail: z15.object({
|
506 |
|
507 | quality: z15.number(),
|
508 |
|
509 | popularity: z15.number(),
|
510 |
|
511 | maintenance: z15.number()
|
512 | })
|
513 | }),
|
514 |
|
515 | searchScore: z15.number(),
|
516 |
|
517 | flags: z15.object({
|
518 |
|
519 | unstable: z15.coerce.boolean().optional(),
|
520 |
|
521 | insecure: z15.coerce.boolean().optional()
|
522 | }).optional()
|
523 | });
|
524 | var SearchResults = z15.object({
|
525 | objects: z15.array(SearchResult),
|
526 | |
527 |
|
528 |
|
529 |
|
530 | total: z15.number(),
|
531 |
|
532 | time: z15.string()
|
533 | });
|
534 | var searchPackages = async (criteria, registry = npmRegistryUrl) => fetchData(SearchResults, urlJoin12(registry, "-/v1/search", `?${queryString.stringify(criteria)}`));
|
535 | export {
|
536 | AbbreviatedPackument,
|
537 | BulkDailyPackageDownloads,
|
538 | BulkPackageDownloads,
|
539 | DailyPackageDownloads,
|
540 | DailyRegistryDownloads,
|
541 | DownloadPeriod,
|
542 | PackageDownloads,
|
543 | PackageJson4 as PackageJson,
|
544 | PackageManifest,
|
545 | PackageVersionsDownloads,
|
546 | Packument,
|
547 | RegistryDownloads,
|
548 | RegistryMetadata,
|
549 | RegistrySigningKeys,
|
550 | SearchCriteria,
|
551 | SearchResults,
|
552 | cache,
|
553 | getAbbreviatedPackument,
|
554 | getBulkDailyPackageDownloads,
|
555 | getBulkPackageDownloads,
|
556 | getDailyPackageDownloads,
|
557 | getDailyRegistryDownloads,
|
558 | getPackageDownloads,
|
559 | getPackageManifest,
|
560 | getPackageVersionsDownloads,
|
561 | getPackument,
|
562 | getRegistryDownloads,
|
563 | getRegistryMetadata,
|
564 | getRegistrySigningKeys,
|
565 | npmRegistryDownloadsApiUrl,
|
566 | npmRegistryUrl,
|
567 | searchPackages
|
568 | };
|