From c1c5e3dbce2e454ebe3ff6cc39fa06721c6f4338 Mon Sep 17 00:00:00 2001 From: "Willow (GHOST)" Date: Fri, 6 Feb 2026 19:55:03 +0000 Subject: [PATCH] wip: unpublished handling --- packages/validate/src/packument.ts | 6 +++++ .../.packuments/@adam_baldwin/pingback.json | 22 +++++++++++++++++++ packages/validate/test/packument.test.ts | 7 +++--- 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 packages/validate/test/.packuments/@adam_baldwin/pingback.json diff --git a/packages/validate/src/packument.ts b/packages/validate/src/packument.ts index a0cbd1c..bf885b4 100644 --- a/packages/validate/src/packument.ts +++ b/packages/validate/src/packument.ts @@ -127,6 +127,12 @@ export const PackumentSchema = v.looseObject({ { created: Date, modified: Date, + unpublished: v.optional( + v.strictObject({ + time: Date, + versions: v.array(v.string()), + }), + ), }, Date, ), diff --git a/packages/validate/test/.packuments/@adam_baldwin/pingback.json b/packages/validate/test/.packuments/@adam_baldwin/pingback.json new file mode 100644 index 0000000..6f5ac6e --- /dev/null +++ b/packages/validate/test/.packuments/@adam_baldwin/pingback.json @@ -0,0 +1,22 @@ +{ + "_id": "@adam_baldwin/pingback", + "_rev": "4-064aade4d7dc8584429aaea24dd37fd7", + "name": "@adam_baldwin/pingback", + "time": { + "created": "2020-01-28T17:48:40.697Z", + "1.0.0": "2020-01-28T17:48:40.894Z", + "modified": "2022-06-01T09:26:56.416Z", + "unpublished": { + "time": "2022-06-01T09:26:53.516Z", + "versions": [ + "1.0.0" + ] + } + }, + "maintainers": [ + { + "email": "npm@npmjs.com", + "name": "npm" + } + ] +} \ No newline at end of file diff --git a/packages/validate/test/packument.test.ts b/packages/validate/test/packument.test.ts index bcd57e4..8313430 100644 --- a/packages/validate/test/packument.test.ts +++ b/packages/validate/test/packument.test.ts @@ -1,12 +1,12 @@ -import { readFile, writeFile } from 'node:fs/promises'; +import { mkdir, readFile, writeFile } from 'node:fs/promises'; import { PackumentSchema } from '../src/packument.ts'; import { describe, expect, test } from 'vitest'; +import { dirname, join } from 'node:path'; import { existsSync } from 'node:fs'; -import { join } from 'node:path'; import * as v from 'valibot'; const PACKUMENTS_PATH = join(import.meta.dirname, './.packuments'); -const PACKUMENTS = ['g']; +const PACKUMENTS = ['g', '@adam_baldwin/pingback']; type PackumentInput = v.InferInput; @@ -20,6 +20,7 @@ async function fetchPackument(name: string): Promise { const response = await fetch(`https://registry.npmjs.org/${name}`); const data = (await response.json()) as PackumentInput; + await mkdir(dirname(path), { recursive: true }); await writeFile(path, JSON.stringify(data, null, 2), 'utf-8'); return data; }