@buildinternet/releases-api-types 0.59.0 → 0.60.0
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/README.md +14 -6
- package/dist/api-types.d.ts +1168 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +134 -0
- package/dist/schemas/account-profile.d.ts +29 -0
- package/dist/schemas/account-profile.d.ts.map +1 -0
- package/dist/schemas/account-profile.js +24 -0
- package/dist/schemas/ai-models.d.ts +67 -0
- package/dist/schemas/ai-models.d.ts.map +1 -0
- package/{src/schemas/ai-models.ts → dist/schemas/ai-models.js} +25 -31
- package/dist/schemas/api-keys.d.ts +71 -0
- package/dist/schemas/api-keys.d.ts.map +1 -0
- package/dist/schemas/api-keys.js +32 -0
- package/dist/schemas/classifications.d.ts +134 -0
- package/dist/schemas/classifications.d.ts.map +1 -0
- package/dist/schemas/classifications.js +96 -0
- package/dist/schemas/collections.d.ts +605 -0
- package/dist/schemas/collections.d.ts.map +1 -0
- package/dist/schemas/collections.js +320 -0
- package/dist/schemas/datasets.d.ts +34 -0
- package/dist/schemas/datasets.d.ts.map +1 -0
- package/dist/schemas/datasets.js +11 -0
- package/dist/schemas/errors.d.ts +43 -0
- package/dist/schemas/errors.d.ts.map +1 -0
- package/dist/schemas/errors.js +61 -0
- package/dist/schemas/feedback.d.ts +134 -0
- package/dist/schemas/feedback.d.ts.map +1 -0
- package/dist/schemas/feedback.js +76 -0
- package/dist/schemas/follows.d.ts +154 -0
- package/dist/schemas/follows.d.ts.map +1 -0
- package/dist/schemas/follows.js +42 -0
- package/dist/schemas/listing.d.ts +374 -0
- package/dist/schemas/listing.d.ts.map +1 -0
- package/dist/schemas/listing.js +175 -0
- package/dist/schemas/lookups.d.ts +285 -0
- package/dist/schemas/lookups.d.ts.map +1 -0
- package/{src/schemas/lookups.ts → dist/schemas/lookups.js} +67 -80
- package/dist/schemas/marketing-classifier.d.ts +32 -0
- package/dist/schemas/marketing-classifier.d.ts.map +1 -0
- package/{src/schemas/marketing-classifier.ts → dist/schemas/marketing-classifier.js} +14 -18
- package/dist/schemas/orgs.d.ts +950 -0
- package/dist/schemas/orgs.d.ts.map +1 -0
- package/dist/schemas/orgs.js +473 -0
- package/dist/schemas/overviews.d.ts +205 -0
- package/dist/schemas/overviews.d.ts.map +1 -0
- package/{src/schemas/overviews.ts → dist/schemas/overviews.js} +41 -54
- package/dist/schemas/products.d.ts +595 -0
- package/dist/schemas/products.d.ts.map +1 -0
- package/{src/schemas/products.ts → dist/schemas/products.js} +113 -136
- package/dist/schemas/publish-tokens.d.ts +55 -0
- package/dist/schemas/publish-tokens.d.ts.map +1 -0
- package/{src/schemas/publish-tokens.ts → dist/schemas/publish-tokens.js} +18 -29
- package/dist/schemas/recommendations.d.ts +52 -0
- package/dist/schemas/recommendations.d.ts.map +1 -0
- package/dist/schemas/recommendations.js +58 -0
- package/dist/schemas/related.d.ts +331 -0
- package/dist/schemas/related.d.ts.map +1 -0
- package/dist/schemas/related.js +115 -0
- package/dist/schemas/releases.d.ts +623 -0
- package/dist/schemas/releases.d.ts.map +1 -0
- package/dist/schemas/releases.js +414 -0
- package/dist/schemas/resolve.d.ts +259 -0
- package/dist/schemas/resolve.d.ts.map +1 -0
- package/{src/schemas/resolve.ts → dist/schemas/resolve.js} +2 -5
- package/dist/schemas/search.d.ts +475 -0
- package/dist/schemas/search.d.ts.map +1 -0
- package/dist/schemas/search.js +258 -0
- package/dist/schemas/semantic-alert-summary.d.ts +54 -0
- package/dist/schemas/semantic-alert-summary.d.ts.map +1 -0
- package/dist/schemas/semantic-alert-summary.js +57 -0
- package/dist/schemas/semantic-alerts.d.ts +41 -0
- package/dist/schemas/semantic-alerts.d.ts.map +1 -0
- package/dist/schemas/semantic-alerts.js +42 -0
- package/dist/schemas/shared.d.ts +247 -0
- package/dist/schemas/shared.d.ts.map +1 -0
- package/dist/schemas/shared.js +248 -0
- package/dist/schemas/site-notice.d.ts +35 -0
- package/dist/schemas/site-notice.d.ts.map +1 -0
- package/{src/schemas/site-notice.ts → dist/schemas/site-notice.js} +14 -18
- package/dist/schemas/sitemap.d.ts +97 -0
- package/dist/schemas/sitemap.d.ts.map +1 -0
- package/dist/schemas/sitemap.js +107 -0
- package/dist/schemas/sources.d.ts +1145 -0
- package/dist/schemas/sources.d.ts.map +1 -0
- package/dist/schemas/sources.js +645 -0
- package/dist/schemas/stats.d.ts +82 -0
- package/dist/schemas/stats.d.ts.map +1 -0
- package/dist/schemas/stats.js +59 -0
- package/dist/schemas/taxonomy.d.ts +344 -0
- package/dist/schemas/taxonomy.d.ts.map +1 -0
- package/{src/schemas/taxonomy.ts → dist/schemas/taxonomy.js} +47 -58
- package/dist/schemas/webhooks.d.ts +618 -0
- package/dist/schemas/webhooks.d.ts.map +1 -0
- package/dist/schemas/webhooks.js +191 -0
- package/dist/schemas/well-known.d.ts +302 -0
- package/dist/schemas/well-known.d.ts.map +1 -0
- package/dist/schemas/well-known.js +192 -0
- package/dist/schemas/workspace-integrations.d.ts +27 -0
- package/dist/schemas/workspace-integrations.d.ts.map +1 -0
- package/dist/schemas/workspace-integrations.js +22 -0
- package/package.json +16 -5
- package/src/api-types.ts +0 -2229
- package/src/schemas/account-profile.ts +0 -28
- package/src/schemas/ai-models.test.ts +0 -29
- package/src/schemas/classifications.ts +0 -109
- package/src/schemas/collections.ts +0 -346
- package/src/schemas/datasets.ts +0 -31
- package/src/schemas/errors.test.ts +0 -55
- package/src/schemas/errors.ts +0 -81
- package/src/schemas/feedback.ts +0 -56
- package/src/schemas/listing.ts +0 -226
- package/src/schemas/orgs.ts +0 -533
- package/src/schemas/recommendations.ts +0 -39
- package/src/schemas/related.ts +0 -126
- package/src/schemas/releases.ts +0 -449
- package/src/schemas/search.ts +0 -274
- package/src/schemas/semantic-alert-summary.ts +0 -65
- package/src/schemas/shared.notice.test.ts +0 -36
- package/src/schemas/shared.ts +0 -267
- package/src/schemas/site-notice.test.ts +0 -67
- package/src/schemas/sitemap.ts +0 -117
- package/src/schemas/sources.ts +0 -674
- package/src/schemas/stats.ts +0 -62
- package/src/schemas/well-known.test.ts +0 -264
- package/src/schemas/well-known.ts +0 -252
- package/src/schemas/workspace-integrations.ts +0 -26
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Per-source activity row in `GET /v1/stats`. `orgName` is nullable because
|
|
4
|
+
* the source-to-org JOIN is left-joined (legacy orphan sources still exist).
|
|
5
|
+
*/
|
|
6
|
+
export declare const StatsSourceActivitySchema: z.ZodObject<{
|
|
7
|
+
sourceName: z.ZodString;
|
|
8
|
+
sourceSlug: z.ZodString;
|
|
9
|
+
sourceType: z.ZodString;
|
|
10
|
+
orgName: z.ZodNullable<z.ZodString>;
|
|
11
|
+
lastFetchedAt: z.ZodNullable<z.ZodString>;
|
|
12
|
+
totalReleases: z.ZodNumber;
|
|
13
|
+
recentReleases: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
/**
|
|
16
|
+
* Recent fetch-log row, joined with source + org for display. `durationMs`
|
|
17
|
+
* and `error` are nullable on the underlying table; `orgName` is nullable
|
|
18
|
+
* for the same orphan-source reason as above.
|
|
19
|
+
*/
|
|
20
|
+
export declare const StatsRecentActivitySchema: z.ZodObject<{
|
|
21
|
+
sourceName: z.ZodString;
|
|
22
|
+
sourceSlug: z.ZodString;
|
|
23
|
+
orgName: z.ZodNullable<z.ZodString>;
|
|
24
|
+
releasesFound: z.ZodNumber;
|
|
25
|
+
releasesInserted: z.ZodNumber;
|
|
26
|
+
totalReleases: z.ZodNumber;
|
|
27
|
+
status: z.ZodString;
|
|
28
|
+
durationMs: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
error: z.ZodNullable<z.ZodString>;
|
|
30
|
+
createdAt: z.ZodString;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
/**
|
|
33
|
+
* Response shape for `GET /v1/stats`. The handler returns a hybrid payload —
|
|
34
|
+
* the flat `Stats` counts (legacy `orgs/sources/releases/products` fields used
|
|
35
|
+
* by the web homepage banner) merged with the richer `StatsSummary` shape
|
|
36
|
+
* (period window + totals + sourceHealth + sourceActivity + recentActivity).
|
|
37
|
+
* Modelled with `z.object` over the union of both shapes; consumers may
|
|
38
|
+
* pick either subset.
|
|
39
|
+
*/
|
|
40
|
+
export declare const StatsResponseSchema: z.ZodObject<{
|
|
41
|
+
orgs: z.ZodNumber;
|
|
42
|
+
sources: z.ZodNumber;
|
|
43
|
+
releases: z.ZodNumber;
|
|
44
|
+
products: z.ZodNumber;
|
|
45
|
+
period: z.ZodObject<{
|
|
46
|
+
days: z.ZodNumber;
|
|
47
|
+
cutoff: z.ZodString;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
totals: z.ZodObject<{
|
|
50
|
+
organizations: z.ZodNumber;
|
|
51
|
+
sources: z.ZodNumber;
|
|
52
|
+
releases: z.ZodNumber;
|
|
53
|
+
releasesInPeriod: z.ZodNumber;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
sourceHealth: z.ZodObject<{
|
|
56
|
+
upToDate: z.ZodNumber;
|
|
57
|
+
stale: z.ZodNumber;
|
|
58
|
+
neverFetched: z.ZodNumber;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
sourceActivity: z.ZodArray<z.ZodObject<{
|
|
61
|
+
sourceName: z.ZodString;
|
|
62
|
+
sourceSlug: z.ZodString;
|
|
63
|
+
sourceType: z.ZodString;
|
|
64
|
+
orgName: z.ZodNullable<z.ZodString>;
|
|
65
|
+
lastFetchedAt: z.ZodNullable<z.ZodString>;
|
|
66
|
+
totalReleases: z.ZodNumber;
|
|
67
|
+
recentReleases: z.ZodNumber;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
recentActivity: z.ZodArray<z.ZodObject<{
|
|
70
|
+
sourceName: z.ZodString;
|
|
71
|
+
sourceSlug: z.ZodString;
|
|
72
|
+
orgName: z.ZodNullable<z.ZodString>;
|
|
73
|
+
releasesFound: z.ZodNumber;
|
|
74
|
+
releasesInserted: z.ZodNumber;
|
|
75
|
+
totalReleases: z.ZodNumber;
|
|
76
|
+
status: z.ZodString;
|
|
77
|
+
durationMs: z.ZodNullable<z.ZodNumber>;
|
|
78
|
+
error: z.ZodNullable<z.ZodString>;
|
|
79
|
+
createdAt: z.ZodString;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;iBAQpC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAWpC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB9B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { StatsSchema } from "./shared.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-source activity row in `GET /v1/stats`. `orgName` is nullable because
|
|
5
|
+
* the source-to-org JOIN is left-joined (legacy orphan sources still exist).
|
|
6
|
+
*/
|
|
7
|
+
export const StatsSourceActivitySchema = z.object({
|
|
8
|
+
sourceName: z.string(),
|
|
9
|
+
sourceSlug: z.string(),
|
|
10
|
+
sourceType: z.string(),
|
|
11
|
+
orgName: z.string().nullable(),
|
|
12
|
+
lastFetchedAt: z.string().nullable(),
|
|
13
|
+
totalReleases: z.number(),
|
|
14
|
+
recentReleases: z.number(),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Recent fetch-log row, joined with source + org for display. `durationMs`
|
|
18
|
+
* and `error` are nullable on the underlying table; `orgName` is nullable
|
|
19
|
+
* for the same orphan-source reason as above.
|
|
20
|
+
*/
|
|
21
|
+
export const StatsRecentActivitySchema = z.object({
|
|
22
|
+
sourceName: z.string(),
|
|
23
|
+
sourceSlug: z.string(),
|
|
24
|
+
orgName: z.string().nullable(),
|
|
25
|
+
releasesFound: z.number(),
|
|
26
|
+
releasesInserted: z.number(),
|
|
27
|
+
totalReleases: z.number(),
|
|
28
|
+
status: z.string(),
|
|
29
|
+
durationMs: z.number().nullable(),
|
|
30
|
+
error: z.string().nullable(),
|
|
31
|
+
createdAt: z.string(),
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Response shape for `GET /v1/stats`. The handler returns a hybrid payload —
|
|
35
|
+
* the flat `Stats` counts (legacy `orgs/sources/releases/products` fields used
|
|
36
|
+
* by the web homepage banner) merged with the richer `StatsSummary` shape
|
|
37
|
+
* (period window + totals + sourceHealth + sourceActivity + recentActivity).
|
|
38
|
+
* Modelled with `z.object` over the union of both shapes; consumers may
|
|
39
|
+
* pick either subset.
|
|
40
|
+
*/
|
|
41
|
+
export const StatsResponseSchema = StatsSchema.extend({
|
|
42
|
+
period: z.object({
|
|
43
|
+
days: z.number().int().min(1),
|
|
44
|
+
cutoff: z.string(),
|
|
45
|
+
}),
|
|
46
|
+
totals: z.object({
|
|
47
|
+
organizations: z.number().int().min(0),
|
|
48
|
+
sources: z.number().int().min(0),
|
|
49
|
+
releases: z.number().int().min(0),
|
|
50
|
+
releasesInPeriod: z.number().int().min(0),
|
|
51
|
+
}),
|
|
52
|
+
sourceHealth: z.object({
|
|
53
|
+
upToDate: z.number().int().min(0),
|
|
54
|
+
stale: z.number().int().min(0),
|
|
55
|
+
neverFetched: z.number().int().min(0),
|
|
56
|
+
}),
|
|
57
|
+
sourceActivity: z.array(StatsSourceActivitySchema),
|
|
58
|
+
recentActivity: z.array(StatsRecentActivitySchema),
|
|
59
|
+
});
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Org rollup row shared by category and tag detail responses. Slim by
|
|
4
|
+
* design — taxonomy pages link out to the full org detail page rather
|
|
5
|
+
* than embedding it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TaxonomyOrgSchema: z.ZodObject<{
|
|
8
|
+
slug: z.ZodString;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
11
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
/** Product rollup row, paired with `TaxonomyOrg`. */
|
|
14
|
+
export declare const TaxonomyProductSchema: z.ZodObject<{
|
|
15
|
+
slug: z.ZodString;
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
description: z.ZodNullable<z.ZodString>;
|
|
18
|
+
orgSlug: z.ZodString;
|
|
19
|
+
orgName: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
/**
|
|
22
|
+
* Per-category row on `GET /v1/categories`. Categories are a fixed
|
|
23
|
+
* taxonomy (`CATEGORIES` in `@buildinternet/releases-core/categories`),
|
|
24
|
+
* so the response always includes every slug, including ones with zero
|
|
25
|
+
* members. `name` / `description` / `aliases` come from the optional
|
|
26
|
+
* `categories` metadata overlay; `description` is null when no override
|
|
27
|
+
* has been set.
|
|
28
|
+
*/
|
|
29
|
+
export declare const CategoryListItemSchema: z.ZodObject<{
|
|
30
|
+
slug: z.ZodEnum<{
|
|
31
|
+
ai: "ai";
|
|
32
|
+
cloud: "cloud";
|
|
33
|
+
commerce: "commerce";
|
|
34
|
+
crm: "crm";
|
|
35
|
+
database: "database";
|
|
36
|
+
design: "design";
|
|
37
|
+
"developer-tools": "developer-tools";
|
|
38
|
+
devops: "devops";
|
|
39
|
+
finance: "finance";
|
|
40
|
+
framework: "framework";
|
|
41
|
+
infrastructure: "infrastructure";
|
|
42
|
+
observability: "observability";
|
|
43
|
+
productivity: "productivity";
|
|
44
|
+
security: "security";
|
|
45
|
+
}>;
|
|
46
|
+
name: z.ZodString;
|
|
47
|
+
description: z.ZodNullable<z.ZodString>;
|
|
48
|
+
aliases: z.ZodArray<z.ZodString>;
|
|
49
|
+
orgCount: z.ZodNumber;
|
|
50
|
+
productCount: z.ZodNumber;
|
|
51
|
+
previewMembers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
52
|
+
slug: z.ZodString;
|
|
53
|
+
name: z.ZodString;
|
|
54
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
55
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
56
|
+
githubHandle: z.ZodNullable<z.ZodString>;
|
|
57
|
+
description: z.ZodNullable<z.ZodString>;
|
|
58
|
+
kind: z.ZodLiteral<"org">;
|
|
59
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
60
|
+
slug: z.ZodString;
|
|
61
|
+
name: z.ZodString;
|
|
62
|
+
description: z.ZodNullable<z.ZodString>;
|
|
63
|
+
org: z.ZodObject<{
|
|
64
|
+
slug: z.ZodString;
|
|
65
|
+
name: z.ZodString;
|
|
66
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
67
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
68
|
+
githubHandle: z.ZodNullable<z.ZodString>;
|
|
69
|
+
}, z.core.$strip>;
|
|
70
|
+
kind: z.ZodLiteral<"product">;
|
|
71
|
+
}, z.core.$strip>], "kind">>>;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
export declare const CategoryListResponseSchema: z.ZodArray<z.ZodObject<{
|
|
74
|
+
slug: z.ZodEnum<{
|
|
75
|
+
ai: "ai";
|
|
76
|
+
cloud: "cloud";
|
|
77
|
+
commerce: "commerce";
|
|
78
|
+
crm: "crm";
|
|
79
|
+
database: "database";
|
|
80
|
+
design: "design";
|
|
81
|
+
"developer-tools": "developer-tools";
|
|
82
|
+
devops: "devops";
|
|
83
|
+
finance: "finance";
|
|
84
|
+
framework: "framework";
|
|
85
|
+
infrastructure: "infrastructure";
|
|
86
|
+
observability: "observability";
|
|
87
|
+
productivity: "productivity";
|
|
88
|
+
security: "security";
|
|
89
|
+
}>;
|
|
90
|
+
name: z.ZodString;
|
|
91
|
+
description: z.ZodNullable<z.ZodString>;
|
|
92
|
+
aliases: z.ZodArray<z.ZodString>;
|
|
93
|
+
orgCount: z.ZodNumber;
|
|
94
|
+
productCount: z.ZodNumber;
|
|
95
|
+
previewMembers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
96
|
+
slug: z.ZodString;
|
|
97
|
+
name: z.ZodString;
|
|
98
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
99
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
100
|
+
githubHandle: z.ZodNullable<z.ZodString>;
|
|
101
|
+
description: z.ZodNullable<z.ZodString>;
|
|
102
|
+
kind: z.ZodLiteral<"org">;
|
|
103
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
104
|
+
slug: z.ZodString;
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
description: z.ZodNullable<z.ZodString>;
|
|
107
|
+
org: z.ZodObject<{
|
|
108
|
+
slug: z.ZodString;
|
|
109
|
+
name: z.ZodString;
|
|
110
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
111
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
112
|
+
githubHandle: z.ZodNullable<z.ZodString>;
|
|
113
|
+
}, z.core.$strip>;
|
|
114
|
+
kind: z.ZodLiteral<"product">;
|
|
115
|
+
}, z.core.$strip>], "kind">>>;
|
|
116
|
+
}, z.core.$strip>>;
|
|
117
|
+
/** Returned by `GET /v1/categories/:slug` for the canonical slug. */
|
|
118
|
+
export declare const CategoryDetailSchema: z.ZodObject<{
|
|
119
|
+
slug: z.ZodEnum<{
|
|
120
|
+
ai: "ai";
|
|
121
|
+
cloud: "cloud";
|
|
122
|
+
commerce: "commerce";
|
|
123
|
+
crm: "crm";
|
|
124
|
+
database: "database";
|
|
125
|
+
design: "design";
|
|
126
|
+
"developer-tools": "developer-tools";
|
|
127
|
+
devops: "devops";
|
|
128
|
+
finance: "finance";
|
|
129
|
+
framework: "framework";
|
|
130
|
+
infrastructure: "infrastructure";
|
|
131
|
+
observability: "observability";
|
|
132
|
+
productivity: "productivity";
|
|
133
|
+
security: "security";
|
|
134
|
+
}>;
|
|
135
|
+
name: z.ZodString;
|
|
136
|
+
description: z.ZodNullable<z.ZodString>;
|
|
137
|
+
aliases: z.ZodArray<z.ZodString>;
|
|
138
|
+
orgs: z.ZodArray<z.ZodObject<{
|
|
139
|
+
slug: z.ZodString;
|
|
140
|
+
name: z.ZodString;
|
|
141
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
142
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
143
|
+
}, z.core.$strip>>;
|
|
144
|
+
products: z.ZodArray<z.ZodObject<{
|
|
145
|
+
slug: z.ZodString;
|
|
146
|
+
name: z.ZodString;
|
|
147
|
+
description: z.ZodNullable<z.ZodString>;
|
|
148
|
+
orgSlug: z.ZodString;
|
|
149
|
+
orgName: z.ZodString;
|
|
150
|
+
}, z.core.$strip>>;
|
|
151
|
+
}, z.core.$strip>;
|
|
152
|
+
/**
|
|
153
|
+
* Body accepted by `PATCH /v1/categories/:slug`. All fields are optional,
|
|
154
|
+
* but the body must set at least one of them — an empty body is rejected.
|
|
155
|
+
* `name` and `description` accept `null` to clear the overlay value;
|
|
156
|
+
* `aliases` replaces the full set (pass `[]` to clear). The row is
|
|
157
|
+
* upserted — categories that have never been customized have no row.
|
|
158
|
+
*
|
|
159
|
+
* `name` is bounded at 200 chars and `description` at 2000. Alias element
|
|
160
|
+
* shape (kebab-case, not a canonical slug, not claimed by another row) is
|
|
161
|
+
* enforced in the handler after the strings are trimmed + lowercased, since
|
|
162
|
+
* those checks depend on runtime state and case-folding.
|
|
163
|
+
*/
|
|
164
|
+
export declare const UpdateCategoryRequestSchema: z.ZodObject<{
|
|
165
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
166
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
167
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
168
|
+
}, z.core.$strip>;
|
|
169
|
+
/** Response from `PATCH /v1/categories/:slug` — the resolved overlay values. */
|
|
170
|
+
export declare const UpdateCategoryResponseSchema: z.ZodObject<{
|
|
171
|
+
slug: z.ZodEnum<{
|
|
172
|
+
ai: "ai";
|
|
173
|
+
cloud: "cloud";
|
|
174
|
+
commerce: "commerce";
|
|
175
|
+
crm: "crm";
|
|
176
|
+
database: "database";
|
|
177
|
+
design: "design";
|
|
178
|
+
"developer-tools": "developer-tools";
|
|
179
|
+
devops: "devops";
|
|
180
|
+
finance: "finance";
|
|
181
|
+
framework: "framework";
|
|
182
|
+
infrastructure: "infrastructure";
|
|
183
|
+
observability: "observability";
|
|
184
|
+
productivity: "productivity";
|
|
185
|
+
security: "security";
|
|
186
|
+
}>;
|
|
187
|
+
name: z.ZodString;
|
|
188
|
+
description: z.ZodNullable<z.ZodString>;
|
|
189
|
+
aliases: z.ZodArray<z.ZodString>;
|
|
190
|
+
}, z.core.$strip>;
|
|
191
|
+
/**
|
|
192
|
+
* Aggregated release row on `GET /v1/categories/:slug/releases`. Same wire
|
|
193
|
+
* shape as `CollectionReleaseItem` — both surfaces aggregate across orgs and
|
|
194
|
+
* use `formatAggregateReleaseRow` in `apps/api/src/utils.ts` for the
|
|
195
|
+
* formatting. Re-exported here so the two endpoints describe one schema
|
|
196
|
+
* instead of two drifting copies.
|
|
197
|
+
*/
|
|
198
|
+
export declare const CategoryReleaseItemSchema: z.ZodObject<{
|
|
199
|
+
version: z.ZodNullable<z.ZodString>;
|
|
200
|
+
title: z.ZodString;
|
|
201
|
+
summary: z.ZodString;
|
|
202
|
+
content: z.ZodOptional<z.ZodString>;
|
|
203
|
+
publishedAt: z.ZodNullable<z.ZodString>;
|
|
204
|
+
fetchedAt: z.ZodOptional<z.ZodString>;
|
|
205
|
+
url: z.ZodNullable<z.ZodString>;
|
|
206
|
+
media: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
207
|
+
type: z.ZodEnum<{
|
|
208
|
+
gif: "gif";
|
|
209
|
+
image: "image";
|
|
210
|
+
video: "video";
|
|
211
|
+
}>;
|
|
212
|
+
url: z.ZodString;
|
|
213
|
+
alt: z.ZodOptional<z.ZodString>;
|
|
214
|
+
r2Key: z.ZodOptional<z.ZodString>;
|
|
215
|
+
r2Url: z.ZodOptional<z.ZodString>;
|
|
216
|
+
linkUrl: z.ZodOptional<z.ZodString>;
|
|
217
|
+
}, z.core.$strip>>>;
|
|
218
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
219
|
+
feature: "feature";
|
|
220
|
+
rollup: "rollup";
|
|
221
|
+
}>>;
|
|
222
|
+
prerelease: z.ZodOptional<z.ZodBoolean>;
|
|
223
|
+
titleGenerated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
224
|
+
titleShort: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
225
|
+
breaking: z.ZodOptional<z.ZodEnum<{
|
|
226
|
+
major: "major";
|
|
227
|
+
minor: "minor";
|
|
228
|
+
none: "none";
|
|
229
|
+
unknown: "unknown";
|
|
230
|
+
}>>;
|
|
231
|
+
importance: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
232
|
+
coverageCount: z.ZodOptional<z.ZodNumber>;
|
|
233
|
+
contentChars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
234
|
+
contentTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
235
|
+
composition: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
236
|
+
bugs: z.ZodNumber;
|
|
237
|
+
features: z.ZodNumber;
|
|
238
|
+
enhancements: z.ZodNumber;
|
|
239
|
+
}, z.core.$strip>>>;
|
|
240
|
+
id: z.ZodString;
|
|
241
|
+
source: z.ZodObject<{
|
|
242
|
+
slug: z.ZodString;
|
|
243
|
+
name: z.ZodString;
|
|
244
|
+
type: z.ZodString;
|
|
245
|
+
}, z.core.$strip>;
|
|
246
|
+
org: z.ZodObject<{
|
|
247
|
+
slug: z.ZodString;
|
|
248
|
+
name: z.ZodString;
|
|
249
|
+
}, z.core.$strip>;
|
|
250
|
+
product: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
251
|
+
slug: z.ZodString;
|
|
252
|
+
name: z.ZodString;
|
|
253
|
+
}, z.core.$strip>>>;
|
|
254
|
+
groupSlug: z.ZodOptional<z.ZodString>;
|
|
255
|
+
groupName: z.ZodOptional<z.ZodString>;
|
|
256
|
+
}, z.core.$strip>;
|
|
257
|
+
export declare const CategoryFeedPaginationSchema: z.ZodObject<{
|
|
258
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
259
|
+
limit: z.ZodNumber;
|
|
260
|
+
}, z.core.$strip>;
|
|
261
|
+
export declare const CategoryReleasesResponseSchema: z.ZodObject<{
|
|
262
|
+
releases: z.ZodArray<z.ZodObject<{
|
|
263
|
+
version: z.ZodNullable<z.ZodString>;
|
|
264
|
+
title: z.ZodString;
|
|
265
|
+
summary: z.ZodString;
|
|
266
|
+
content: z.ZodOptional<z.ZodString>;
|
|
267
|
+
publishedAt: z.ZodNullable<z.ZodString>;
|
|
268
|
+
fetchedAt: z.ZodOptional<z.ZodString>;
|
|
269
|
+
url: z.ZodNullable<z.ZodString>;
|
|
270
|
+
media: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
271
|
+
type: z.ZodEnum<{
|
|
272
|
+
gif: "gif";
|
|
273
|
+
image: "image";
|
|
274
|
+
video: "video";
|
|
275
|
+
}>;
|
|
276
|
+
url: z.ZodString;
|
|
277
|
+
alt: z.ZodOptional<z.ZodString>;
|
|
278
|
+
r2Key: z.ZodOptional<z.ZodString>;
|
|
279
|
+
r2Url: z.ZodOptional<z.ZodString>;
|
|
280
|
+
linkUrl: z.ZodOptional<z.ZodString>;
|
|
281
|
+
}, z.core.$strip>>>;
|
|
282
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
283
|
+
feature: "feature";
|
|
284
|
+
rollup: "rollup";
|
|
285
|
+
}>>;
|
|
286
|
+
prerelease: z.ZodOptional<z.ZodBoolean>;
|
|
287
|
+
titleGenerated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
288
|
+
titleShort: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
289
|
+
breaking: z.ZodOptional<z.ZodEnum<{
|
|
290
|
+
major: "major";
|
|
291
|
+
minor: "minor";
|
|
292
|
+
none: "none";
|
|
293
|
+
unknown: "unknown";
|
|
294
|
+
}>>;
|
|
295
|
+
importance: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
296
|
+
coverageCount: z.ZodOptional<z.ZodNumber>;
|
|
297
|
+
contentChars: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
298
|
+
contentTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
299
|
+
composition: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
300
|
+
bugs: z.ZodNumber;
|
|
301
|
+
features: z.ZodNumber;
|
|
302
|
+
enhancements: z.ZodNumber;
|
|
303
|
+
}, z.core.$strip>>>;
|
|
304
|
+
id: z.ZodString;
|
|
305
|
+
source: z.ZodObject<{
|
|
306
|
+
slug: z.ZodString;
|
|
307
|
+
name: z.ZodString;
|
|
308
|
+
type: z.ZodString;
|
|
309
|
+
}, z.core.$strip>;
|
|
310
|
+
org: z.ZodObject<{
|
|
311
|
+
slug: z.ZodString;
|
|
312
|
+
name: z.ZodString;
|
|
313
|
+
}, z.core.$strip>;
|
|
314
|
+
product: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
315
|
+
slug: z.ZodString;
|
|
316
|
+
name: z.ZodString;
|
|
317
|
+
}, z.core.$strip>>>;
|
|
318
|
+
groupSlug: z.ZodOptional<z.ZodString>;
|
|
319
|
+
groupName: z.ZodOptional<z.ZodString>;
|
|
320
|
+
}, z.core.$strip>>;
|
|
321
|
+
pagination: z.ZodObject<{
|
|
322
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
323
|
+
limit: z.ZodNumber;
|
|
324
|
+
}, z.core.$strip>;
|
|
325
|
+
}, z.core.$strip>;
|
|
326
|
+
/** Returned by `GET /v1/tags/:slug`. */
|
|
327
|
+
export declare const TagDetailSchema: z.ZodObject<{
|
|
328
|
+
slug: z.ZodString;
|
|
329
|
+
name: z.ZodString;
|
|
330
|
+
orgs: z.ZodArray<z.ZodObject<{
|
|
331
|
+
slug: z.ZodString;
|
|
332
|
+
name: z.ZodString;
|
|
333
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
334
|
+
avatarUrl: z.ZodNullable<z.ZodString>;
|
|
335
|
+
}, z.core.$strip>>;
|
|
336
|
+
products: z.ZodArray<z.ZodObject<{
|
|
337
|
+
slug: z.ZodString;
|
|
338
|
+
name: z.ZodString;
|
|
339
|
+
description: z.ZodNullable<z.ZodString>;
|
|
340
|
+
orgSlug: z.ZodString;
|
|
341
|
+
orgName: z.ZodString;
|
|
342
|
+
}, z.core.$strip>>;
|
|
343
|
+
}, z.core.$strip>;
|
|
344
|
+
//# sourceMappingURL=taxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/schemas/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBjC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAkC,CAAC;AAE1E,qEAAqE;AACrE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO/B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B;;;;iBAQpC,CAAC;AAEL,gFAAgF;AAChF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;iBAKvC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8B,CAAC;AAErE,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGzC,CAAC;AAEH,wCAAwC;AACxC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;iBAK1B,CAAC"}
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CategorySchema } from "./shared.js";
|
|
3
3
|
import { CollectionMemberSchema, CollectionReleaseItemSchema } from "./collections.js";
|
|
4
|
-
|
|
5
4
|
/**
|
|
6
5
|
* Org rollup row shared by category and tag detail responses. Slim by
|
|
7
6
|
* design — taxonomy pages link out to the full org detail page rather
|
|
8
7
|
* than embedding it.
|
|
9
8
|
*/
|
|
10
9
|
export const TaxonomyOrgSchema = z.object({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
slug: z.string(),
|
|
11
|
+
name: z.string(),
|
|
12
|
+
domain: z.string().nullable(),
|
|
13
|
+
avatarUrl: z.string().nullable(),
|
|
15
14
|
});
|
|
16
|
-
|
|
17
15
|
/** Product rollup row, paired with `TaxonomyOrg`. */
|
|
18
16
|
export const TaxonomyProductSchema = z.object({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
slug: z.string(),
|
|
18
|
+
name: z.string(),
|
|
19
|
+
description: z.string().nullable(),
|
|
20
|
+
orgSlug: z.string(),
|
|
21
|
+
orgName: z.string(),
|
|
24
22
|
});
|
|
25
|
-
|
|
26
23
|
/**
|
|
27
24
|
* Per-category row on `GET /v1/categories`. Categories are a fixed
|
|
28
25
|
* taxonomy (`CATEGORIES` in `@buildinternet/releases-core/categories`),
|
|
@@ -32,36 +29,33 @@ export const TaxonomyProductSchema = z.object({
|
|
|
32
29
|
* has been set.
|
|
33
30
|
*/
|
|
34
31
|
export const CategoryListItemSchema = z.object({
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
slug: CategorySchema,
|
|
33
|
+
name: z.string(),
|
|
34
|
+
description: z.string().nullable(),
|
|
35
|
+
aliases: z.array(z.string()),
|
|
36
|
+
orgCount: z.number().int().min(0),
|
|
37
|
+
productCount: z.number().int().min(0),
|
|
38
|
+
/**
|
|
39
|
+
* A small mixed-kind preview (capped at 3) of the orgs and products in this
|
|
40
|
+
* category, so the list page can render an inline avatar facepile without a
|
|
41
|
+
* second round trip — same shape and intent as a collection's
|
|
42
|
+
* `previewMembers`. Org entries are surfaced first (they carry the avatar);
|
|
43
|
+
* product entries fill any remaining slots and dedupe against orgs already
|
|
44
|
+
* shown. The list page derives "+N more" from `orgCount + productCount`.
|
|
45
|
+
* Optional on the wire so older workers mid-rollout don't trip the schema.
|
|
46
|
+
*/
|
|
47
|
+
previewMembers: z.array(CollectionMemberSchema).optional(),
|
|
51
48
|
});
|
|
52
|
-
|
|
53
49
|
export const CategoryListResponseSchema = z.array(CategoryListItemSchema);
|
|
54
|
-
|
|
55
50
|
/** Returned by `GET /v1/categories/:slug` for the canonical slug. */
|
|
56
51
|
export const CategoryDetailSchema = z.object({
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
slug: CategorySchema,
|
|
53
|
+
name: z.string(),
|
|
54
|
+
description: z.string().nullable(),
|
|
55
|
+
aliases: z.array(z.string()),
|
|
56
|
+
orgs: z.array(TaxonomyOrgSchema),
|
|
57
|
+
products: z.array(TaxonomyProductSchema),
|
|
63
58
|
});
|
|
64
|
-
|
|
65
59
|
/**
|
|
66
60
|
* Body accepted by `PATCH /v1/categories/:slug`. All fields are optional,
|
|
67
61
|
* but the body must set at least one of them — an empty body is rejected.
|
|
@@ -75,23 +69,21 @@ export const CategoryDetailSchema = z.object({
|
|
|
75
69
|
* those checks depend on runtime state and case-folding.
|
|
76
70
|
*/
|
|
77
71
|
export const UpdateCategoryRequestSchema = z
|
|
78
|
-
|
|
72
|
+
.object({
|
|
79
73
|
name: z.string().max(200).nullable().optional(),
|
|
80
74
|
description: z.string().max(2000).nullable().optional(),
|
|
81
75
|
aliases: z.array(z.string()).optional(),
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
})
|
|
77
|
+
.refine((b) => b.name !== undefined || b.description !== undefined || b.aliases !== undefined, {
|
|
84
78
|
message: "Body must set at least one of `name`, `description`, or `aliases`",
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
});
|
|
87
80
|
/** Response from `PATCH /v1/categories/:slug` — the resolved overlay values. */
|
|
88
81
|
export const UpdateCategoryResponseSchema = z.object({
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
82
|
+
slug: CategorySchema,
|
|
83
|
+
name: z.string(),
|
|
84
|
+
description: z.string().nullable(),
|
|
85
|
+
aliases: z.array(z.string()),
|
|
93
86
|
});
|
|
94
|
-
|
|
95
87
|
/**
|
|
96
88
|
* Aggregated release row on `GET /v1/categories/:slug/releases`. Same wire
|
|
97
89
|
* shape as `CollectionReleaseItem` — both surfaces aggregate across orgs and
|
|
@@ -100,21 +92,18 @@ export const UpdateCategoryResponseSchema = z.object({
|
|
|
100
92
|
* instead of two drifting copies.
|
|
101
93
|
*/
|
|
102
94
|
export const CategoryReleaseItemSchema = CollectionReleaseItemSchema;
|
|
103
|
-
|
|
104
95
|
export const CategoryFeedPaginationSchema = z.object({
|
|
105
|
-
|
|
106
|
-
|
|
96
|
+
nextCursor: z.string().nullable(),
|
|
97
|
+
limit: z.number().int().min(1),
|
|
107
98
|
});
|
|
108
|
-
|
|
109
99
|
export const CategoryReleasesResponseSchema = z.object({
|
|
110
|
-
|
|
111
|
-
|
|
100
|
+
releases: z.array(CategoryReleaseItemSchema),
|
|
101
|
+
pagination: CategoryFeedPaginationSchema,
|
|
112
102
|
});
|
|
113
|
-
|
|
114
103
|
/** Returned by `GET /v1/tags/:slug`. */
|
|
115
104
|
export const TagDetailSchema = z.object({
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
105
|
+
slug: z.string(),
|
|
106
|
+
name: z.string(),
|
|
107
|
+
orgs: z.array(TaxonomyOrgSchema),
|
|
108
|
+
products: z.array(TaxonomyProductSchema),
|
|
120
109
|
});
|