@grove-dev/core 0.7.0 → 0.9.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/dist/audit.d.ts +3 -3
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +25 -6
- package/dist/audit.js.map +1 -1
- package/dist/awesome-readme.d.ts.map +1 -1
- package/dist/awesome-readme.js +31 -31
- package/dist/awesome-readme.js.map +1 -1
- package/dist/build-data.d.ts +1 -1
- package/dist/build-data.d.ts.map +1 -1
- package/dist/build-data.js +110 -80
- package/dist/build-data.js.map +1 -1
- package/dist/candidate.d.ts +34 -0
- package/dist/candidate.d.ts.map +1 -0
- package/dist/candidate.js +128 -0
- package/dist/candidate.js.map +1 -0
- package/dist/collections-io.d.ts +1 -1
- package/dist/collections-io.js +8 -8
- package/dist/collections-io.js.map +1 -1
- package/dist/collections.d.ts +2 -2
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +8 -9
- package/dist/collections.js.map +1 -1
- package/dist/collector.d.ts +1 -1
- package/dist/collector.d.ts.map +1 -1
- package/dist/collector.js +2 -2
- package/dist/collector.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/content-body.d.ts.map +1 -1
- package/dist/content-body.js +22 -22
- package/dist/content-body.js.map +1 -1
- package/dist/contributors.d.ts.map +1 -1
- package/dist/contributors.js +22 -23
- package/dist/contributors.js.map +1 -1
- package/dist/decisions.d.ts +1 -1
- package/dist/decisions.d.ts.map +1 -1
- package/dist/decisions.js +18 -20
- package/dist/decisions.js.map +1 -1
- package/dist/directory-client.d.ts +6 -4
- package/dist/directory-client.d.ts.map +1 -1
- package/dist/directory-client.js +9 -4
- package/dist/directory-client.js.map +1 -1
- package/dist/directory-facets.d.ts +1 -1
- package/dist/directory-facets.d.ts.map +1 -1
- package/dist/directory-facets.js +35 -17
- package/dist/directory-facets.js.map +1 -1
- package/dist/directory-filter-keys.d.ts +53 -0
- package/dist/directory-filter-keys.d.ts.map +1 -0
- package/dist/directory-filter-keys.js +66 -0
- package/dist/directory-filter-keys.js.map +1 -0
- package/dist/directory-format.d.ts.map +1 -1
- package/dist/directory-format.js +15 -15
- package/dist/directory-format.js.map +1 -1
- package/dist/directory-lenses.d.ts +1 -1
- package/dist/directory-lenses.d.ts.map +1 -1
- package/dist/directory-lenses.js +66 -61
- package/dist/directory-lenses.js.map +1 -1
- package/dist/directory-repo.js +2 -2
- package/dist/directory-scores.d.ts.map +1 -1
- package/dist/directory-scores.js +25 -25
- package/dist/directory-scores.js.map +1 -1
- package/dist/directory-search.d.ts +4 -4
- package/dist/directory-search.d.ts.map +1 -1
- package/dist/directory-search.js +129 -110
- package/dist/directory-search.js.map +1 -1
- package/dist/directory-taxonomy.d.ts +1 -1
- package/dist/directory-taxonomy.d.ts.map +1 -1
- package/dist/directory-taxonomy.js +2 -2
- package/dist/directory-taxonomy.js.map +1 -1
- package/dist/enrich.d.ts.map +1 -1
- package/dist/enrich.js +15 -12
- package/dist/enrich.js.map +1 -1
- package/dist/evidence.d.ts +33 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +181 -0
- package/dist/evidence.js.map +1 -0
- package/dist/github-client.js +6 -6
- package/dist/github.d.ts +9 -1
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +40 -13
- package/dist/github.js.map +1 -1
- package/dist/health.d.ts +1 -1
- package/dist/health.js +44 -44
- package/dist/host.js +2 -2
- package/dist/import-types.d.ts +24 -0
- package/dist/import-types.d.ts.map +1 -0
- package/dist/import-types.js +2 -0
- package/dist/import-types.js.map +1 -0
- package/dist/import-write.d.ts +12 -0
- package/dist/import-write.d.ts.map +1 -0
- package/dist/import-write.js +39 -0
- package/dist/import-write.js.map +1 -0
- package/dist/importer.d.ts +5 -3
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +4 -2
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +74 -63
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -75
- package/dist/index.js.map +1 -1
- package/dist/io.js +8 -8
- package/dist/llms.d.ts +1 -1
- package/dist/llms.d.ts.map +1 -1
- package/dist/llms.js +65 -64
- package/dist/llms.js.map +1 -1
- package/dist/markdown.d.ts +3 -33
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +2 -39
- package/dist/markdown.js.map +1 -1
- package/dist/og-image.d.ts +8 -8
- package/dist/og-image.d.ts.map +1 -1
- package/dist/og-image.js +91 -84
- package/dist/og-image.js.map +1 -1
- package/dist/page-document.d.ts +8 -8
- package/dist/page-document.d.ts.map +1 -1
- package/dist/page-document.js +48 -54
- package/dist/page-document.js.map +1 -1
- package/dist/parseReadme.d.ts.map +1 -1
- package/dist/parseReadme.js +9 -11
- package/dist/parseReadme.js.map +1 -1
- package/dist/prepare.d.ts +5 -5
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +32 -38
- package/dist/prepare.js.map +1 -1
- package/dist/readme-health.d.ts +33 -0
- package/dist/readme-health.d.ts.map +1 -0
- package/dist/readme-health.js +88 -0
- package/dist/readme-health.js.map +1 -0
- package/dist/related.d.ts +1 -1
- package/dist/repository-health.d.ts +11 -0
- package/dist/repository-health.d.ts.map +1 -0
- package/dist/repository-health.js +94 -0
- package/dist/repository-health.js.map +1 -0
- package/dist/schema.d.ts +72 -30
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +156 -144
- package/dist/schema.js.map +1 -1
- package/dist/site-artifacts.js +1 -1
- package/dist/sitemap.d.ts +2 -2
- package/dist/sitemap.d.ts.map +1 -1
- package/dist/sitemap.js +39 -39
- package/dist/sitemap.js.map +1 -1
- package/dist/slug.js +4 -4
- package/dist/sync-icons.js +15 -15
- package/dist/taxonomy-inference.d.ts +27 -0
- package/dist/taxonomy-inference.d.ts.map +1 -0
- package/dist/taxonomy-inference.js +38 -0
- package/dist/taxonomy-inference.js.map +1 -0
- package/dist/validate.d.ts +3 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +73 -62
- package/dist/validate.js.map +1 -1
- package/dist/yaml.d.ts +47 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +56 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { extractCandidates } from './candidate.js';
|
|
2
|
+
import { canonicalRepoKey, inspectRepositories } from './evidence.js';
|
|
3
|
+
import { parseGithubRepoUrl } from './github.js';
|
|
4
|
+
import { classifyRepositoryHealth } from './repository-health.js';
|
|
5
|
+
export async function runReadmeHealthCheck(markdown, options = {}) {
|
|
6
|
+
const candidates = extractCandidates(markdown, {
|
|
7
|
+
...(options.file ? { file: options.file } : {}),
|
|
8
|
+
...(options.sourceUrl ? { sourceUrl: options.sourceUrl } : {}),
|
|
9
|
+
});
|
|
10
|
+
const repositoryUrls = candidates.map((candidate) => candidate.links.find((link) => link.kind === 'repository')?.url);
|
|
11
|
+
const urlsToInspect = repositoryUrls.filter((url) => Boolean(url));
|
|
12
|
+
const evidenceList = urlsToInspect.length > 0
|
|
13
|
+
? await inspectRepositories(urlsToInspect, {
|
|
14
|
+
...(options.token ? { token: options.token } : {}),
|
|
15
|
+
...(options.concurrency !== undefined ? { concurrency: options.concurrency } : {}),
|
|
16
|
+
})
|
|
17
|
+
: [];
|
|
18
|
+
const evidenceByUrl = new Map(urlsToInspect.map((url, index) => [url, evidenceList[index]]));
|
|
19
|
+
const seenRepoKeys = new Set();
|
|
20
|
+
const entries = candidates.map((candidate, index) => {
|
|
21
|
+
const repositoryUrl = repositoryUrls[index];
|
|
22
|
+
if (!repositoryUrl) {
|
|
23
|
+
return { candidate, isDuplicate: false };
|
|
24
|
+
}
|
|
25
|
+
const evidence = evidenceByUrl.get(repositoryUrl);
|
|
26
|
+
const identity = parseGithubRepoUrl(repositoryUrl);
|
|
27
|
+
const key = identity ? canonicalRepoKey(identity.owner, identity.repo) : repositoryUrl;
|
|
28
|
+
const isDuplicate = seenRepoKeys.has(key);
|
|
29
|
+
seenRepoKeys.add(key);
|
|
30
|
+
return {
|
|
31
|
+
candidate,
|
|
32
|
+
repositoryUrl,
|
|
33
|
+
isDuplicate,
|
|
34
|
+
...(evidence ? { evidence, health: classifyRepositoryHealth(evidence) } : {}),
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
return { entries, summary: summarize(entries) };
|
|
38
|
+
}
|
|
39
|
+
function summarize(entries) {
|
|
40
|
+
let repositoriesResolved = 0;
|
|
41
|
+
let archived = 0;
|
|
42
|
+
let unavailable = 0;
|
|
43
|
+
let moved = 0;
|
|
44
|
+
let duplicates = 0;
|
|
45
|
+
let likelyStale = 0;
|
|
46
|
+
let unresolved = 0;
|
|
47
|
+
let healthyCount = 0;
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
if (entry.evidence?.status === 'ok')
|
|
50
|
+
repositoriesResolved++;
|
|
51
|
+
if (entry.evidence?.redirected)
|
|
52
|
+
moved++;
|
|
53
|
+
if (entry.isDuplicate)
|
|
54
|
+
duplicates++;
|
|
55
|
+
switch (entry.health?.status) {
|
|
56
|
+
case 'archived':
|
|
57
|
+
archived++;
|
|
58
|
+
break;
|
|
59
|
+
case 'broken':
|
|
60
|
+
unavailable++;
|
|
61
|
+
break;
|
|
62
|
+
case 'likely-stale':
|
|
63
|
+
likelyStale++;
|
|
64
|
+
break;
|
|
65
|
+
case 'active':
|
|
66
|
+
case 'maintained':
|
|
67
|
+
case 'stable':
|
|
68
|
+
healthyCount++;
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
if (!entry.repositoryUrl || entry.health?.status === 'unknown')
|
|
74
|
+
unresolved++;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
entriesDetected: entries.length,
|
|
78
|
+
repositoriesResolved,
|
|
79
|
+
archived,
|
|
80
|
+
unavailable,
|
|
81
|
+
moved,
|
|
82
|
+
duplicates,
|
|
83
|
+
likelyStale,
|
|
84
|
+
unresolved,
|
|
85
|
+
healthyPercent: repositoriesResolved > 0 ? Math.round((100 * healthyCount) / repositoriesResolved) : 0,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=readme-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme-health.js","sourceRoot":"","sources":["../src/readme-health.ts"],"names":[],"mappings":"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"}
|
package/dist/related.d.ts
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RepositoryEvidence } from './evidence.js';
|
|
2
|
+
export type RepositoryHealthStatus = 'active' | 'maintained' | 'stable' | 'likely-stale' | 'archived' | 'broken' | 'unknown';
|
|
3
|
+
export type RepositoryHealthConfidence = 'high' | 'medium' | 'low';
|
|
4
|
+
export interface RepositoryHealthResult {
|
|
5
|
+
status: RepositoryHealthStatus;
|
|
6
|
+
confidence: RepositoryHealthConfidence;
|
|
7
|
+
evidence: string[];
|
|
8
|
+
counterEvidence: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function classifyRepositoryHealth(evidence: RepositoryEvidence): RepositoryHealthResult;
|
|
11
|
+
//# sourceMappingURL=repository-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-health.d.ts","sourceRoot":"","sources":["../src/repository-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,0BAA0B,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAwBD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,CAgF7F"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
function daysSince(value) {
|
|
2
|
+
if (!value)
|
|
3
|
+
return Infinity;
|
|
4
|
+
const date = new Date(value);
|
|
5
|
+
if (Number.isNaN(date.valueOf()))
|
|
6
|
+
return Infinity;
|
|
7
|
+
return (Date.now() - date.valueOf()) / 86_400_000;
|
|
8
|
+
}
|
|
9
|
+
function unknown(reason) {
|
|
10
|
+
return { status: 'unknown', confidence: 'low', evidence: [reason], counterEvidence: [] };
|
|
11
|
+
}
|
|
12
|
+
// Thresholds intentionally match `classifyHealth` (health.ts) so "stale" means
|
|
13
|
+
// the same thing everywhere in Grove. Not imported — health.test.ts documents
|
|
14
|
+
// that these cutoffs are deliberately burned into the function that uses them
|
|
15
|
+
// rather than shared, so a future change forces a visible diff at the call
|
|
16
|
+
// site instead of drifting silently through a shared constant.
|
|
17
|
+
const ACTIVE_WITHIN_DAYS = 183;
|
|
18
|
+
const STABLE_WITHIN_DAYS = 548;
|
|
19
|
+
const CONFIDENT_STALE_WITHIN_DAYS = 730;
|
|
20
|
+
const RECENT_RELEASE_WITHIN_DAYS = 365;
|
|
21
|
+
const POPULAR_STARS = 500;
|
|
22
|
+
export function classifyRepositoryHealth(evidence) {
|
|
23
|
+
if (evidence.status === 'not-found') {
|
|
24
|
+
return {
|
|
25
|
+
status: 'broken',
|
|
26
|
+
confidence: 'high',
|
|
27
|
+
evidence: ['Repository not found on GitHub (404)'],
|
|
28
|
+
counterEvidence: [],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (evidence.status === 'invalid-url') {
|
|
32
|
+
return unknown('Link is not a recognizable GitHub repository URL');
|
|
33
|
+
}
|
|
34
|
+
if (evidence.status === 'rate-limited') {
|
|
35
|
+
return unknown('GitHub lookup was rate-limited before evidence could be gathered');
|
|
36
|
+
}
|
|
37
|
+
if (evidence.status === 'error') {
|
|
38
|
+
return unknown(`Lookup failed: ${evidence.error ?? 'unknown error'}`);
|
|
39
|
+
}
|
|
40
|
+
const github = evidence.github;
|
|
41
|
+
if (!github) {
|
|
42
|
+
return unknown('No repository metadata available');
|
|
43
|
+
}
|
|
44
|
+
if (github.archived) {
|
|
45
|
+
return {
|
|
46
|
+
status: 'archived',
|
|
47
|
+
confidence: 'high',
|
|
48
|
+
evidence: ['Repository is archived on GitHub'],
|
|
49
|
+
counterEvidence: [],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (evidence.source === 'html') {
|
|
53
|
+
return unknown('Only partial evidence available (GitHub API was rate-limited; activity signals unknown)');
|
|
54
|
+
}
|
|
55
|
+
const pushedDays = daysSince(github.pushedAt);
|
|
56
|
+
const releaseDays = daysSince(github.latestReleaseAt);
|
|
57
|
+
const hasRecentRelease = releaseDays <= RECENT_RELEASE_WITHIN_DAYS;
|
|
58
|
+
const popular = github.stars >= POPULAR_STARS;
|
|
59
|
+
const months = (days) => Math.round(days / 30);
|
|
60
|
+
if (pushedDays <= ACTIVE_WITHIN_DAYS) {
|
|
61
|
+
const evidenceLines = [`Pushed to within the last ${Math.round(pushedDays)} days`];
|
|
62
|
+
if (hasRecentRelease || popular) {
|
|
63
|
+
evidenceLines.push(hasRecentRelease ? 'Recent release found' : 'Strong community adoption (star count)');
|
|
64
|
+
return {
|
|
65
|
+
status: 'maintained',
|
|
66
|
+
confidence: 'high',
|
|
67
|
+
evidence: evidenceLines,
|
|
68
|
+
counterEvidence: [],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { status: 'active', confidence: 'high', evidence: evidenceLines, counterEvidence: [] };
|
|
72
|
+
}
|
|
73
|
+
if (pushedDays <= STABLE_WITHIN_DAYS) {
|
|
74
|
+
const counterEvidence = [];
|
|
75
|
+
if (hasRecentRelease)
|
|
76
|
+
counterEvidence.push('A release was published within the last year');
|
|
77
|
+
return {
|
|
78
|
+
status: 'stable',
|
|
79
|
+
confidence: 'high',
|
|
80
|
+
evidence: [`No push in ${Math.round(pushedDays)} days (~${months(pushedDays)} months)`],
|
|
81
|
+
counterEvidence,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const counterEvidence = [];
|
|
85
|
+
if (hasRecentRelease)
|
|
86
|
+
counterEvidence.push('A release was published within the last year');
|
|
87
|
+
return {
|
|
88
|
+
status: 'likely-stale',
|
|
89
|
+
confidence: pushedDays <= CONFIDENT_STALE_WITHIN_DAYS ? 'medium' : 'low',
|
|
90
|
+
evidence: [`No push in ${Math.round(pushedDays)} days (~${months(pushedDays)} months)`],
|
|
91
|
+
counterEvidence,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=repository-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-health.js","sourceRoot":"","sources":["../src/repository-health.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
/**
|
|
3
3
|
* A blueprint defines the shape and behavior of a Grove site.
|
|
4
4
|
*
|
|
@@ -521,6 +521,7 @@ export declare const overridesFileSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodO
|
|
|
521
521
|
}, z.core.$strip>]>;
|
|
522
522
|
export declare const projectRecordSchema: z.ZodObject<{
|
|
523
523
|
slug: z.ZodString;
|
|
524
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
524
525
|
description: z.ZodDefault<z.ZodString>;
|
|
525
526
|
summary: z.ZodOptional<z.ZodString>;
|
|
526
527
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -576,6 +577,10 @@ export declare const projectRecordSchema: z.ZodObject<{
|
|
|
576
577
|
highlight: "highlight";
|
|
577
578
|
keep: "keep";
|
|
578
579
|
}>>;
|
|
580
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
581
|
+
title: z.ZodOptional<z.ZodString>;
|
|
582
|
+
description: z.ZodOptional<z.ZodString>;
|
|
583
|
+
}, z.core.$strip>>;
|
|
579
584
|
kind: z.ZodLiteral<"project">;
|
|
580
585
|
name: z.ZodString;
|
|
581
586
|
projectType: z.ZodOptional<z.ZodEnum<{
|
|
@@ -662,10 +667,7 @@ export declare const projectRecordSchema: z.ZodObject<{
|
|
|
662
667
|
pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
663
668
|
}, z.core.$loose>>;
|
|
664
669
|
languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
665
|
-
latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
666
670
|
activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
667
|
-
files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
668
|
-
labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
669
671
|
sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
670
672
|
}, z.core.$loose>>;
|
|
671
673
|
health: z.ZodOptional<z.ZodObject<{
|
|
@@ -714,6 +716,7 @@ export declare const projectRecordSchema: z.ZodObject<{
|
|
|
714
716
|
export type ProjectRecord = z.infer<typeof projectRecordSchema>;
|
|
715
717
|
export declare const resourceRecordSchema: z.ZodObject<{
|
|
716
718
|
slug: z.ZodString;
|
|
719
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
717
720
|
description: z.ZodDefault<z.ZodString>;
|
|
718
721
|
summary: z.ZodOptional<z.ZodString>;
|
|
719
722
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -769,6 +772,10 @@ export declare const resourceRecordSchema: z.ZodObject<{
|
|
|
769
772
|
highlight: "highlight";
|
|
770
773
|
keep: "keep";
|
|
771
774
|
}>>;
|
|
775
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
776
|
+
title: z.ZodOptional<z.ZodString>;
|
|
777
|
+
description: z.ZodOptional<z.ZodString>;
|
|
778
|
+
}, z.core.$strip>>;
|
|
772
779
|
kind: z.ZodLiteral<"resource">;
|
|
773
780
|
title: z.ZodString;
|
|
774
781
|
type: z.ZodEnum<{
|
|
@@ -792,6 +799,7 @@ export declare const resourceRecordSchema: z.ZodObject<{
|
|
|
792
799
|
export type ResourceRecord = z.infer<typeof resourceRecordSchema>;
|
|
793
800
|
export declare const entityRecordSchema: z.ZodObject<{
|
|
794
801
|
slug: z.ZodString;
|
|
802
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
795
803
|
description: z.ZodDefault<z.ZodString>;
|
|
796
804
|
summary: z.ZodOptional<z.ZodString>;
|
|
797
805
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -847,6 +855,10 @@ export declare const entityRecordSchema: z.ZodObject<{
|
|
|
847
855
|
highlight: "highlight";
|
|
848
856
|
keep: "keep";
|
|
849
857
|
}>>;
|
|
858
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
859
|
+
title: z.ZodOptional<z.ZodString>;
|
|
860
|
+
description: z.ZodOptional<z.ZodString>;
|
|
861
|
+
}, z.core.$strip>>;
|
|
850
862
|
kind: z.ZodLiteral<"entity">;
|
|
851
863
|
name: z.ZodString;
|
|
852
864
|
type: z.ZodEnum<{
|
|
@@ -870,6 +882,7 @@ export declare const entityRecordSchema: z.ZodObject<{
|
|
|
870
882
|
export type EntityRecord = z.infer<typeof entityRecordSchema>;
|
|
871
883
|
export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
872
884
|
slug: z.ZodString;
|
|
885
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
873
886
|
description: z.ZodDefault<z.ZodString>;
|
|
874
887
|
summary: z.ZodOptional<z.ZodString>;
|
|
875
888
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -925,6 +938,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
925
938
|
highlight: "highlight";
|
|
926
939
|
keep: "keep";
|
|
927
940
|
}>>;
|
|
941
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
942
|
+
title: z.ZodOptional<z.ZodString>;
|
|
943
|
+
description: z.ZodOptional<z.ZodString>;
|
|
944
|
+
}, z.core.$strip>>;
|
|
928
945
|
kind: z.ZodLiteral<"project">;
|
|
929
946
|
name: z.ZodString;
|
|
930
947
|
projectType: z.ZodOptional<z.ZodEnum<{
|
|
@@ -1011,10 +1028,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1011
1028
|
pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1012
1029
|
}, z.core.$loose>>;
|
|
1013
1030
|
languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
1014
|
-
latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1015
1031
|
activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1016
|
-
files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
1017
|
-
labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1018
1032
|
sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1019
1033
|
}, z.core.$loose>>;
|
|
1020
1034
|
health: z.ZodOptional<z.ZodObject<{
|
|
@@ -1061,6 +1075,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1061
1075
|
}, z.core.$strip>>;
|
|
1062
1076
|
}, z.core.$strip>, z.ZodObject<{
|
|
1063
1077
|
slug: z.ZodString;
|
|
1078
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
1064
1079
|
description: z.ZodDefault<z.ZodString>;
|
|
1065
1080
|
summary: z.ZodOptional<z.ZodString>;
|
|
1066
1081
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -1116,6 +1131,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1116
1131
|
highlight: "highlight";
|
|
1117
1132
|
keep: "keep";
|
|
1118
1133
|
}>>;
|
|
1134
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
1135
|
+
title: z.ZodOptional<z.ZodString>;
|
|
1136
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1137
|
+
}, z.core.$strip>>;
|
|
1119
1138
|
kind: z.ZodLiteral<"resource">;
|
|
1120
1139
|
title: z.ZodString;
|
|
1121
1140
|
type: z.ZodEnum<{
|
|
@@ -1137,6 +1156,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1137
1156
|
author: z.ZodOptional<z.ZodString>;
|
|
1138
1157
|
}, z.core.$strip>, z.ZodObject<{
|
|
1139
1158
|
slug: z.ZodString;
|
|
1159
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
1140
1160
|
description: z.ZodDefault<z.ZodString>;
|
|
1141
1161
|
summary: z.ZodOptional<z.ZodString>;
|
|
1142
1162
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -1192,6 +1212,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1192
1212
|
highlight: "highlight";
|
|
1193
1213
|
keep: "keep";
|
|
1194
1214
|
}>>;
|
|
1215
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
1216
|
+
title: z.ZodOptional<z.ZodString>;
|
|
1217
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1218
|
+
}, z.core.$strip>>;
|
|
1195
1219
|
kind: z.ZodLiteral<"entity">;
|
|
1196
1220
|
name: z.ZodString;
|
|
1197
1221
|
type: z.ZodEnum<{
|
|
@@ -1215,6 +1239,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1215
1239
|
export type Resource = z.infer<typeof resourceSchema>;
|
|
1216
1240
|
export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1217
1241
|
slug: z.ZodString;
|
|
1242
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
1218
1243
|
description: z.ZodDefault<z.ZodString>;
|
|
1219
1244
|
summary: z.ZodOptional<z.ZodString>;
|
|
1220
1245
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -1270,6 +1295,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1270
1295
|
highlight: "highlight";
|
|
1271
1296
|
keep: "keep";
|
|
1272
1297
|
}>>;
|
|
1298
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
1299
|
+
title: z.ZodOptional<z.ZodString>;
|
|
1300
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1301
|
+
}, z.core.$strip>>;
|
|
1273
1302
|
kind: z.ZodLiteral<"project">;
|
|
1274
1303
|
name: z.ZodString;
|
|
1275
1304
|
projectType: z.ZodOptional<z.ZodEnum<{
|
|
@@ -1356,10 +1385,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1356
1385
|
pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1357
1386
|
}, z.core.$loose>>;
|
|
1358
1387
|
languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
1359
|
-
latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1360
1388
|
activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1361
|
-
files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
1362
|
-
labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1363
1389
|
sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1364
1390
|
}, z.core.$loose>>;
|
|
1365
1391
|
health: z.ZodOptional<z.ZodObject<{
|
|
@@ -1406,6 +1432,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1406
1432
|
}, z.core.$strip>>;
|
|
1407
1433
|
}, z.core.$strip>, z.ZodObject<{
|
|
1408
1434
|
slug: z.ZodString;
|
|
1435
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
1409
1436
|
description: z.ZodDefault<z.ZodString>;
|
|
1410
1437
|
summary: z.ZodOptional<z.ZodString>;
|
|
1411
1438
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -1461,6 +1488,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1461
1488
|
highlight: "highlight";
|
|
1462
1489
|
keep: "keep";
|
|
1463
1490
|
}>>;
|
|
1491
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
1492
|
+
title: z.ZodOptional<z.ZodString>;
|
|
1493
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1494
|
+
}, z.core.$strip>>;
|
|
1464
1495
|
kind: z.ZodLiteral<"resource">;
|
|
1465
1496
|
title: z.ZodString;
|
|
1466
1497
|
type: z.ZodEnum<{
|
|
@@ -1482,6 +1513,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1482
1513
|
author: z.ZodOptional<z.ZodString>;
|
|
1483
1514
|
}, z.core.$strip>, z.ZodObject<{
|
|
1484
1515
|
slug: z.ZodString;
|
|
1516
|
+
addedAt: z.ZodOptional<z.ZodString>;
|
|
1485
1517
|
description: z.ZodDefault<z.ZodString>;
|
|
1486
1518
|
summary: z.ZodOptional<z.ZodString>;
|
|
1487
1519
|
sourceDescription: z.ZodOptional<z.ZodString>;
|
|
@@ -1537,6 +1569,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1537
1569
|
highlight: "highlight";
|
|
1538
1570
|
keep: "keep";
|
|
1539
1571
|
}>>;
|
|
1572
|
+
seo: z.ZodOptional<z.ZodObject<{
|
|
1573
|
+
title: z.ZodOptional<z.ZodString>;
|
|
1574
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1575
|
+
}, z.core.$strip>>;
|
|
1540
1576
|
kind: z.ZodLiteral<"entity">;
|
|
1541
1577
|
name: z.ZodString;
|
|
1542
1578
|
type: z.ZodEnum<{
|
|
@@ -1831,6 +1867,8 @@ export declare function getOwnerRepoFromUrl(repoUrl: string | undefined | null):
|
|
|
1831
1867
|
export interface IndexBase {
|
|
1832
1868
|
slug: string;
|
|
1833
1869
|
kind: ResourceKind;
|
|
1870
|
+
/** When the record joined the directory. See `resourceBaseSchema.addedAt`. */
|
|
1871
|
+
addedAt?: string | undefined;
|
|
1834
1872
|
category: string;
|
|
1835
1873
|
tags: string[];
|
|
1836
1874
|
links: Links;
|
|
@@ -1842,11 +1880,15 @@ export interface IndexBase {
|
|
|
1842
1880
|
* can write their own `summary` without overwriting it. */
|
|
1843
1881
|
sourceDescription?: string | undefined;
|
|
1844
1882
|
content?: string | undefined;
|
|
1845
|
-
curation: ProjectRecord[
|
|
1883
|
+
curation: ProjectRecord['curation'];
|
|
1846
1884
|
licenses: string[];
|
|
1847
1885
|
}
|
|
1848
1886
|
export interface IndexGithubSummary {
|
|
1849
1887
|
fullName: string | undefined;
|
|
1888
|
+
/** Repository creation date, straight from the GitHub API. The
|
|
1889
|
+
* honest source for JSON-LD `dateCreated`, and the last-resort
|
|
1890
|
+
* fallback for the `recently-added` sort. */
|
|
1891
|
+
createdAt: string | null;
|
|
1850
1892
|
stars: number;
|
|
1851
1893
|
forks: number;
|
|
1852
1894
|
openIssues: number;
|
|
@@ -1857,45 +1899,45 @@ export interface IndexGithubSummary {
|
|
|
1857
1899
|
topics: string[];
|
|
1858
1900
|
}
|
|
1859
1901
|
export interface IndexProjectRecord extends IndexBase {
|
|
1860
|
-
kind:
|
|
1902
|
+
kind: 'project';
|
|
1861
1903
|
name: string;
|
|
1862
|
-
stack: ProjectRecord[
|
|
1904
|
+
stack: ProjectRecord['stack'];
|
|
1863
1905
|
stacks: string[];
|
|
1864
1906
|
platforms: string[];
|
|
1865
1907
|
licenses: string[];
|
|
1866
|
-
projectType: ProjectRecord[
|
|
1867
|
-
repoUrl: ProjectRecord[
|
|
1868
|
-
logoUrl: ProjectRecord[
|
|
1869
|
-
screenshots: ProjectRecord[
|
|
1870
|
-
difficulty: ProjectRecord[
|
|
1871
|
-
codebaseSize: ProjectRecord[
|
|
1908
|
+
projectType: ProjectRecord['projectType'];
|
|
1909
|
+
repoUrl: ProjectRecord['repoUrl'];
|
|
1910
|
+
logoUrl: ProjectRecord['logoUrl'];
|
|
1911
|
+
screenshots: ProjectRecord['screenshots'];
|
|
1912
|
+
difficulty: ProjectRecord['difficulty'];
|
|
1913
|
+
codebaseSize: ProjectRecord['codebaseSize'];
|
|
1872
1914
|
bestFor: string[];
|
|
1873
1915
|
whyListed: string[];
|
|
1874
1916
|
caveats: string[];
|
|
1875
|
-
health: ProjectRecord[
|
|
1917
|
+
health: ProjectRecord['health'];
|
|
1876
1918
|
/** Effective visibility — decisions.yml overrides win over health. */
|
|
1877
1919
|
visibility: DecisionVisibility;
|
|
1878
1920
|
github: IndexGithubSummary | undefined;
|
|
1879
1921
|
}
|
|
1880
1922
|
export interface IndexResourceRecord extends IndexBase {
|
|
1881
|
-
kind:
|
|
1923
|
+
kind: 'resource';
|
|
1882
1924
|
title: string;
|
|
1883
|
-
type: ResourceRecord[
|
|
1925
|
+
type: ResourceRecord['type'];
|
|
1884
1926
|
topic: string;
|
|
1885
1927
|
related: string[];
|
|
1886
|
-
publishedAt: ResourceRecord[
|
|
1887
|
-
author: ResourceRecord[
|
|
1928
|
+
publishedAt: ResourceRecord['publishedAt'];
|
|
1929
|
+
author: ResourceRecord['author'];
|
|
1888
1930
|
/** Effective visibility — decisions.yml overrides win over the record default. */
|
|
1889
1931
|
visibility: DecisionVisibility;
|
|
1890
1932
|
}
|
|
1891
1933
|
export interface IndexEntityRecord extends IndexBase {
|
|
1892
|
-
kind:
|
|
1934
|
+
kind: 'entity';
|
|
1893
1935
|
name: string;
|
|
1894
|
-
type: EntityRecord[
|
|
1895
|
-
founded: EntityRecord[
|
|
1896
|
-
location: EntityRecord[
|
|
1897
|
-
members: EntityRecord[
|
|
1898
|
-
parent: EntityRecord[
|
|
1936
|
+
type: EntityRecord['type'];
|
|
1937
|
+
founded: EntityRecord['founded'];
|
|
1938
|
+
location: EntityRecord['location'];
|
|
1939
|
+
members: EntityRecord['members'];
|
|
1940
|
+
parent: EntityRecord['parent'];
|
|
1899
1941
|
/** Effective visibility — decisions.yml overrides win over the record default. */
|
|
1900
1942
|
visibility: DecisionVisibility;
|
|
1901
1943
|
}
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;EAAiE,CAAC;AAE9F,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;EAA4C,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAIzD,CAAC;AAMF,eAAO,MAAM,kBAAkB;;;;;;;;;;;EAW7B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;EAOnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,gBAAgB;;;;;EAA0D,CAAC;AAMxF,eAAO,MAAM,iBAAiB;;;;;;;;;EAS5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAY7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAY3B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;EAA+C,CAAC;AAE3E,eAAO,MAAM,WAAW;;;;;;;iBAOtB,CAAC;AAMH,eAAO,MAAM,WAAW;;;;;kCAQV,CAAC;AAMf,eAAO,MAAM,mBAAmB;;;;;mBASnB,CAAC;AAEd,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BnB,CAAC;AAEjB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+B/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG3B,CAAC;AAMH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;iBAQzB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG9B,CAAC;AAMH,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;mBAG9B,CAAC;AAgGH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsE9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAM9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAiBtD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAiB,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,eAAO,MAAM,aAAa;;;iBAGxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;iBAE9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAG7B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;kBAYmB,CAAC;AAE7C,eAAO,MAAM,gBAAgB;;;;;;kBAQM,CAAC;AAEpC,eAAO,MAAM,uBAAuB;;;;mBAOlC,CAAC;AAEH,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,SAAS,GACzD,sBAAsB,CASxB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;iBAatB,CAAC;AA2BH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;iBAGtB,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAU7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkL5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAM9D,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAE7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,CAEhE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,CAEhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAM3E;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GACjC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQxC;AAgBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;uEACmE;IACnE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;gEAC4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;kDAE8C;IAC9C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC1C,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC1C,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,sEAAsE;IACtE,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjC,kFAAkF;IAClF,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,kFAAkF;IAClF,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEvF,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,kBAAkB,CAEtE;AACD,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,mBAAmB,CAExE;AACD,wBAAgB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,iBAAiB,CAEpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CA2F3D"}
|