@kensio/colophon 2.2.0 → 2.3.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 +560 -24
- package/dist/cli/args.d.ts +14 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +67 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config.d.ts +12 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +43 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +35 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.js +34 -6
- package/dist/cli.js.map +1 -1
- package/dist/config/defaults.d.ts +64 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +64 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +22 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +52 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/resolve.d.ts +24 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +66 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/size.d.ts +20 -0
- package/dist/config/size.d.ts.map +1 -0
- package/dist/config/size.js +46 -0
- package/dist/config/size.js.map +1 -0
- package/dist/config.d.ts +27 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +78 -2
- package/dist/config.js.map +1 -1
- package/dist/content/index.d.ts +5 -51
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -115
- package/dist/content/index.js.map +1 -1
- package/dist/content/props.d.ts +15 -0
- package/dist/content/props.d.ts.map +1 -0
- package/dist/content/props.js +71 -0
- package/dist/content/props.js.map +1 -0
- package/dist/content/slug.d.ts +23 -0
- package/dist/content/slug.d.ts.map +1 -0
- package/dist/content/slug.js +52 -0
- package/dist/content/slug.js.map +1 -0
- package/dist/content/walk.d.ts +17 -0
- package/dist/content/walk.d.ts.map +1 -0
- package/dist/content/walk.js +57 -0
- package/dist/content/walk.js.map +1 -0
- package/dist/fonts/index.d.ts +10 -0
- package/dist/fonts/index.d.ts.map +1 -0
- package/dist/fonts/index.js +11 -0
- package/dist/fonts/index.js.map +1 -0
- package/dist/fonts/materialise.d.ts +7 -0
- package/dist/fonts/materialise.d.ts.map +1 -0
- package/dist/fonts/materialise.js +47 -0
- package/dist/fonts/materialise.js.map +1 -0
- package/dist/fonts/resolve.d.ts +7 -0
- package/dist/fonts/resolve.d.ts.map +1 -0
- package/dist/fonts/resolve.js +50 -0
- package/dist/fonts/resolve.js.map +1 -0
- package/dist/fonts.d.ts +18 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +102 -0
- package/dist/fonts.js.map +1 -0
- package/dist/generate/extra.d.ts +16 -0
- package/dist/generate/extra.d.ts.map +1 -0
- package/dist/generate/extra.js +60 -0
- package/dist/generate/extra.js.map +1 -0
- package/dist/generate/index.d.ts +19 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +46 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/job.d.ts +35 -0
- package/dist/generate/job.d.ts.map +1 -0
- package/dist/generate/job.js +2 -0
- package/dist/generate/job.js.map +1 -0
- package/dist/generate/options.d.ts +56 -0
- package/dist/generate/options.d.ts.map +1 -0
- package/dist/generate/options.js +17 -0
- package/dist/generate/options.js.map +1 -0
- package/dist/generate/output-path.d.ts +12 -0
- package/dist/generate/output-path.d.ts.map +1 -0
- package/dist/generate/output-path.js +18 -0
- package/dist/generate/output-path.js.map +1 -0
- package/dist/generate/outputs.d.ts +28 -0
- package/dist/generate/outputs.d.ts.map +1 -0
- package/dist/generate/outputs.js +71 -0
- package/dist/generate/outputs.js.map +1 -0
- package/dist/generate/plan.d.ts +21 -0
- package/dist/generate/plan.d.ts.map +1 -0
- package/dist/generate/plan.js +72 -0
- package/dist/generate/plan.js.map +1 -0
- package/dist/generate/render-image.d.ts +11 -0
- package/dist/generate/render-image.d.ts.map +1 -0
- package/dist/generate/render-image.js +27 -0
- package/dist/generate/render-image.js.map +1 -0
- package/dist/generate.d.ts +27 -6
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +69 -15
- package/dist/generate.js.map +1 -1
- package/dist/highlight/color.d.ts +9 -0
- package/dist/highlight/color.d.ts.map +1 -0
- package/dist/highlight/color.js +15 -0
- package/dist/highlight/color.js.map +1 -0
- package/dist/highlight/grid.d.ts +14 -0
- package/dist/highlight/grid.d.ts.map +1 -0
- package/dist/highlight/grid.js +36 -0
- package/dist/highlight/grid.js.map +1 -0
- package/dist/highlight/index.d.ts +12 -0
- package/dist/highlight/index.d.ts.map +1 -0
- package/dist/highlight/index.js +31 -0
- package/dist/highlight/index.js.map +1 -0
- package/dist/highlight/language.d.ts +14 -0
- package/dist/highlight/language.d.ts.map +1 -0
- package/dist/highlight/language.js +42 -0
- package/dist/highlight/language.js.map +1 -0
- package/dist/highlight/normalise.d.ts +17 -0
- package/dist/highlight/normalise.d.ts.map +1 -0
- package/dist/highlight/normalise.js +37 -0
- package/dist/highlight/normalise.js.map +1 -0
- package/dist/highlight/types.d.ts +40 -0
- package/dist/highlight/types.d.ts.map +1 -0
- package/dist/highlight/types.js +2 -0
- package/dist/highlight/types.js.map +1 -0
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/manifest/build.d.ts +14 -0
- package/dist/manifest/build.d.ts.map +1 -0
- package/dist/manifest/build.js +43 -0
- package/dist/manifest/build.js.map +1 -0
- package/dist/manifest/index.d.ts +27 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +31 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/order.d.ts +12 -0
- package/dist/manifest/order.d.ts.map +1 -0
- package/dist/manifest/order.js +17 -0
- package/dist/manifest/order.js.map +1 -0
- package/dist/manifest/page.d.ts +24 -0
- package/dist/manifest/page.d.ts.map +1 -0
- package/dist/manifest/page.js +55 -0
- package/dist/manifest/page.js.map +1 -0
- package/dist/meta/html.d.ts +14 -0
- package/dist/meta/html.d.ts.map +1 -0
- package/dist/meta/html.js +24 -0
- package/dist/meta/html.js.map +1 -0
- package/dist/meta/index.d.ts +11 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +11 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/meta/tags.d.ts +21 -0
- package/dist/meta/tags.d.ts.map +1 -0
- package/dist/meta/tags.js +72 -0
- package/dist/meta/tags.js.map +1 -0
- package/dist/meta/url.d.ts +15 -0
- package/dist/meta/url.d.ts.map +1 -0
- package/dist/meta/url.js +34 -0
- package/dist/meta/url.js.map +1 -0
- package/dist/placement/check.d.ts +16 -0
- package/dist/placement/check.d.ts.map +1 -0
- package/dist/placement/check.js +40 -0
- package/dist/placement/check.js.map +1 -0
- package/dist/placement/index.d.ts +29 -0
- package/dist/placement/index.d.ts.map +1 -0
- package/dist/placement/index.js +61 -0
- package/dist/placement/index.js.map +1 -0
- package/dist/placement/relative.d.ts +31 -0
- package/dist/placement/relative.d.ts.map +1 -0
- package/dist/placement/relative.js +53 -0
- package/dist/placement/relative.js.map +1 -0
- package/dist/pool.d.ts +18 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +56 -0
- package/dist/pool.js.map +1 -0
- package/dist/render/index.d.ts +10 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +27 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/png.d.ts +10 -0
- package/dist/render/png.d.ts.map +1 -0
- package/dist/render/png.js +30 -0
- package/dist/render/png.js.map +1 -0
- package/dist/render/svg.d.ts +10 -0
- package/dist/render/svg.d.ts.map +1 -0
- package/dist/render/svg.js +20 -0
- package/dist/render/svg.js.map +1 -0
- package/dist/render/template.d.ts +9 -0
- package/dist/render/template.d.ts.map +1 -0
- package/dist/render/template.js +17 -0
- package/dist/render/template.js.map +1 -0
- package/dist/render.d.ts +6 -2
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +31 -10
- package/dist/render.js.map +1 -1
- package/dist/stamp/chunk.d.ts +16 -0
- package/dist/stamp/chunk.d.ts.map +1 -0
- package/dist/stamp/chunk.js +46 -0
- package/dist/stamp/chunk.js.map +1 -0
- package/dist/stamp/config-digest.d.ts +11 -0
- package/dist/stamp/config-digest.d.ts.map +1 -0
- package/dist/stamp/config-digest.js +43 -0
- package/dist/stamp/config-digest.js.map +1 -0
- package/dist/stamp/digest.d.ts +8 -0
- package/dist/stamp/digest.d.ts.map +1 -0
- package/dist/stamp/digest.js +20 -0
- package/dist/stamp/digest.js.map +1 -0
- package/dist/stamp/index.d.ts +20 -0
- package/dist/stamp/index.d.ts.map +1 -0
- package/dist/stamp/index.js +40 -0
- package/dist/stamp/index.js.map +1 -0
- package/dist/stamp/read.d.ts +7 -0
- package/dist/stamp/read.d.ts.map +1 -0
- package/dist/stamp/read.js +62 -0
- package/dist/stamp/read.js.map +1 -0
- package/dist/stamp.d.ts +29 -0
- package/dist/stamp.d.ts.map +1 -0
- package/dist/stamp.js +198 -0
- package/dist/stamp.js.map +1 -0
- package/dist/templates/banner/badge.d.ts +7 -0
- package/dist/templates/banner/badge.d.ts.map +1 -0
- package/dist/templates/banner/badge.js +24 -0
- package/dist/templates/banner/badge.js.map +1 -0
- package/dist/templates/banner/index.d.ts +9 -0
- package/dist/templates/banner/index.d.ts.map +1 -0
- package/dist/templates/banner/index.js +66 -0
- package/dist/templates/banner/index.js.map +1 -0
- package/dist/templates/banner/lines.d.ts +27 -0
- package/dist/templates/banner/lines.d.ts.map +1 -0
- package/dist/templates/banner/lines.js +46 -0
- package/dist/templates/banner/lines.js.map +1 -0
- package/dist/templates/card/index.d.ts +7 -0
- package/dist/templates/card/index.d.ts.map +1 -0
- package/dist/templates/card/index.js +43 -0
- package/dist/templates/card/index.js.map +1 -0
- package/dist/templates/card/lines.d.ts +17 -0
- package/dist/templates/card/lines.d.ts.map +1 -0
- package/dist/templates/card/lines.js +32 -0
- package/dist/templates/card/lines.js.map +1 -0
- package/dist/templates/code/chrome.d.ts +9 -0
- package/dist/templates/code/chrome.d.ts.map +1 -0
- package/dist/templates/code/chrome.js +32 -0
- package/dist/templates/code/chrome.js.map +1 -0
- package/dist/templates/code/clip.d.ts +18 -0
- package/dist/templates/code/clip.d.ts.map +1 -0
- package/dist/templates/code/clip.js +44 -0
- package/dist/templates/code/clip.js.map +1 -0
- package/dist/templates/code/ellipsis.d.ts +3 -0
- package/dist/templates/code/ellipsis.d.ts.map +1 -0
- package/dist/templates/code/ellipsis.js +3 -0
- package/dist/templates/code/ellipsis.js.map +1 -0
- package/dist/templates/code/fit.d.ts +27 -0
- package/dist/templates/code/fit.d.ts.map +1 -0
- package/dist/templates/code/fit.js +59 -0
- package/dist/templates/code/fit.js.map +1 -0
- package/dist/templates/code/index.d.ts +12 -0
- package/dist/templates/code/index.d.ts.map +1 -0
- package/dist/templates/code/index.js +64 -0
- package/dist/templates/code/index.js.map +1 -0
- package/dist/templates/code/layout.d.ts +21 -0
- package/dist/templates/code/layout.d.ts.map +1 -0
- package/dist/templates/code/layout.js +21 -0
- package/dist/templates/code/layout.js.map +1 -0
- package/dist/templates/code/panel.d.ts +17 -0
- package/dist/templates/code/panel.d.ts.map +1 -0
- package/dist/templates/code/panel.js +20 -0
- package/dist/templates/code/panel.js.map +1 -0
- package/dist/templates/code/plate.d.ts +15 -0
- package/dist/templates/code/plate.d.ts.map +1 -0
- package/dist/templates/code/plate.js +32 -0
- package/dist/templates/code/plate.js.map +1 -0
- package/dist/templates/code/spans.d.ts +19 -0
- package/dist/templates/code/spans.d.ts.map +1 -0
- package/dist/templates/code/spans.js +36 -0
- package/dist/templates/code/spans.js.map +1 -0
- package/dist/templates/code/warn.d.ts +11 -0
- package/dist/templates/code/warn.d.ts.map +1 -0
- package/dist/templates/code/warn.js +24 -0
- package/dist/templates/code/warn.js.map +1 -0
- package/dist/templates/footer.d.ts +21 -0
- package/dist/templates/footer.d.ts.map +1 -0
- package/dist/templates/footer.js +25 -0
- package/dist/templates/footer.js.map +1 -0
- package/dist/templates/index.d.ts +3 -3
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +6 -6
- package/dist/templates/index.js.map +1 -1
- package/dist/text/element.d.ts +18 -0
- package/dist/text/element.d.ts.map +1 -0
- package/dist/text/element.js +19 -0
- package/dist/text/element.js.map +1 -0
- package/dist/text/escape.d.ts +5 -0
- package/dist/text/escape.d.ts.map +1 -0
- package/dist/text/escape.js +12 -0
- package/dist/text/escape.js.map +1 -0
- package/dist/text/index.d.ts +7 -0
- package/dist/text/index.d.ts.map +1 -0
- package/dist/text/index.js +5 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/stack.d.ts +24 -0
- package/dist/text/stack.d.ts.map +1 -0
- package/dist/text/stack.js +18 -0
- package/dist/text/stack.js.map +1 -0
- package/dist/text/wrap.d.ts +12 -0
- package/dist/text/wrap.d.ts.map +1 -0
- package/dist/text/wrap.js +33 -0
- package/dist/text/wrap.js.map +1 -0
- package/dist/types.d.ts +326 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/validate/check.d.ts +13 -0
- package/dist/validate/check.d.ts.map +1 -0
- package/dist/validate/check.js +34 -0
- package/dist/validate/check.js.map +1 -0
- package/dist/validate/index.d.ts +15 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +41 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/keys.d.ts +58 -0
- package/dist/validate/keys.d.ts.map +1 -0
- package/dist/validate/keys.js +166 -0
- package/dist/validate/keys.js.map +1 -0
- package/dist/validate/overrides.d.ts +5 -0
- package/dist/validate/overrides.d.ts.map +1 -0
- package/dist/validate/overrides.js +43 -0
- package/dist/validate/overrides.js.map +1 -0
- package/dist/validate/placement.d.ts +10 -0
- package/dist/validate/placement.d.ts.map +1 -0
- package/dist/validate/placement.js +38 -0
- package/dist/validate/placement.js.map +1 -0
- package/dist/validate/sizes.d.ts +9 -0
- package/dist/validate/sizes.d.ts.map +1 -0
- package/dist/validate/sizes.js +27 -0
- package/dist/validate/sizes.js.map +1 -0
- package/dist/validate/suggest.d.ts +10 -0
- package/dist/validate/suggest.d.ts.map +1 -0
- package/dist/validate/suggest.js +55 -0
- package/dist/validate/suggest.js.map +1 -0
- package/dist/validate/values.d.ts +21 -0
- package/dist/validate/values.d.ts.map +1 -0
- package/dist/validate/values.js +57 -0
- package/dist/validate/values.js.map +1 -0
- package/dist/validate.d.ts +15 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +300 -0
- package/dist/validate.js.map +1 -0
- package/package.json +13 -6
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Whether a value is a plain object, and so has keys worth checking. */
|
|
2
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
3
|
+
/** Whether a value is a list, and so has entries worth checking. */
|
|
4
|
+
export declare function isList(value: unknown): value is readonly unknown[];
|
|
5
|
+
/**
|
|
6
|
+
* Report every key of one config object that is not a known option. Anything
|
|
7
|
+
* that is not an object is left alone: the shape of a value is the type
|
|
8
|
+
* checker's business, and there are no keys to judge either way.
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkKeys(value: unknown, path: string, known: readonly string[], problems: string[]): void;
|
|
11
|
+
/** Check every entry of a list, naming each by its index. */
|
|
12
|
+
export declare function checkEach(values: unknown, path: string, known: readonly string[], problems: string[]): void;
|
|
13
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/validate/check.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE,CAElE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAYN;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAQN"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describeUnknownOption } from "./suggest.js";
|
|
2
|
+
/** Whether a value is a plain object, and so has keys worth checking. */
|
|
3
|
+
export function isRecord(value) {
|
|
4
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
/** Whether a value is a list, and so has entries worth checking. */
|
|
7
|
+
export function isList(value) {
|
|
8
|
+
return Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Report every key of one config object that is not a known option. Anything
|
|
12
|
+
* that is not an object is left alone: the shape of a value is the type
|
|
13
|
+
* checker's business, and there are no keys to judge either way.
|
|
14
|
+
*/
|
|
15
|
+
export function checkKeys(value, path, known, problems) {
|
|
16
|
+
if (!isRecord(value)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (const key of Object.keys(value)) {
|
|
20
|
+
if (!known.includes(key)) {
|
|
21
|
+
problems.push(describeUnknownOption(path === "" ? key : `${path}.${key}`, key, known));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Check every entry of a list, naming each by its index. */
|
|
26
|
+
export function checkEach(values, path, known, problems) {
|
|
27
|
+
if (!isList(values)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const [index, value] of values.entries()) {
|
|
31
|
+
checkKeys(value, `${path}[${String(index)}]`, known, problems);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/validate/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAAc,EACd,IAAY,EACZ,KAAwB,EACxB,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CACX,qBAAqB,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,IAAY,EACZ,KAAwB,EACxB,QAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ColophonConfig } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reject a config carrying options Colophon does not know.
|
|
4
|
+
*
|
|
5
|
+
* An unrecognised key is otherwise ignored in silence: the build succeeds, the
|
|
6
|
+
* option does nothing, and the images come out with the defaults in its place.
|
|
7
|
+
* That is at its worst across an upgrade, where a config that still reads
|
|
8
|
+
* correctly is describing images nobody is rendering.
|
|
9
|
+
*
|
|
10
|
+
* Only the closed parts of the config are checked. The names in `templates`
|
|
11
|
+
* are the project's own, and a post's props are open by design — a template
|
|
12
|
+
* reads whatever fields it understands.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateConfig(config: ColophonConfig): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAsC3D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { checkEach, checkKeys } from "./check.js";
|
|
2
|
+
import { badgeKeys, codeKeys, colorKeys, configKeys, contentKeys, fontKeys, } from "./keys.js";
|
|
3
|
+
import { checkExtras, checkSizes } from "./overrides.js";
|
|
4
|
+
import { checkPlacement } from "./placement.js";
|
|
5
|
+
import { checkBackground, checkSlugStrategy } from "./values.js";
|
|
6
|
+
/**
|
|
7
|
+
* Reject a config carrying options Colophon does not know.
|
|
8
|
+
*
|
|
9
|
+
* An unrecognised key is otherwise ignored in silence: the build succeeds, the
|
|
10
|
+
* option does nothing, and the images come out with the defaults in its place.
|
|
11
|
+
* That is at its worst across an upgrade, where a config that still reads
|
|
12
|
+
* correctly is describing images nobody is rendering.
|
|
13
|
+
*
|
|
14
|
+
* Only the closed parts of the config are checked. The names in `templates`
|
|
15
|
+
* are the project's own, and a post's props are open by design — a template
|
|
16
|
+
* reads whatever fields it understands.
|
|
17
|
+
*/
|
|
18
|
+
export function validateConfig(config) {
|
|
19
|
+
// The types say what should be here; validation exists for when it is not.
|
|
20
|
+
const raw = config;
|
|
21
|
+
const problems = [];
|
|
22
|
+
checkKeys(config, "", configKeys, problems);
|
|
23
|
+
checkKeys(raw.colors, "colors", colorKeys, problems);
|
|
24
|
+
checkKeys(raw.badge, "badge", badgeKeys, problems);
|
|
25
|
+
checkKeys(raw.code, "code", codeKeys, problems);
|
|
26
|
+
checkKeys(raw.content, "content", contentKeys, problems);
|
|
27
|
+
checkSlugStrategy(raw.content, problems);
|
|
28
|
+
checkSizes(raw.sizes, problems);
|
|
29
|
+
checkExtras(raw.extra, problems);
|
|
30
|
+
checkEach(raw.fonts, "fonts", fontKeys, problems);
|
|
31
|
+
checkBackground(raw.background, "background", problems);
|
|
32
|
+
checkPlacement(raw.placement, problems);
|
|
33
|
+
const [first, ...rest] = problems;
|
|
34
|
+
if (first === undefined) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
throw new Error(rest.length === 0
|
|
38
|
+
? first
|
|
39
|
+
: `Invalid config:\n${problems.map((problem) => ` - ${problem}`).join("\n")}`);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,2EAA2E;IAC3E,MAAM,GAAG,GAAG,MAUX,CAAC;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACxD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAExC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IAElC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,MAAM,KAAK,CAAC;QACf,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Top-level config options. */
|
|
2
|
+
export declare const configKeys: readonly string[];
|
|
3
|
+
/** Keys of a placement that writes each image beside its post. */
|
|
4
|
+
export declare const besideContentKeys: readonly string[];
|
|
5
|
+
/** Keys of a placement that gathers images into one directory. */
|
|
6
|
+
export declare const publicDirKeys: readonly string[];
|
|
7
|
+
/** Keys of a placement that works both halves out for itself. */
|
|
8
|
+
export declare const customPlacementKeys: readonly string[];
|
|
9
|
+
/**
|
|
10
|
+
* The placement strategies, for the same reason as {@link backgroundTypes}: a
|
|
11
|
+
* mistyped one would otherwise be reported as an unknown key on whichever
|
|
12
|
+
* variant it was guessed to be.
|
|
13
|
+
*
|
|
14
|
+
* Two of the names are hyphenated because they are values a user writes in a
|
|
15
|
+
* config, not identifiers — the casing rule is about the latter. Keeping them
|
|
16
|
+
* as keys is what keeps the list exhaustive, which is the whole point of it.
|
|
17
|
+
*/
|
|
18
|
+
export declare const placementStrategies: readonly string[];
|
|
19
|
+
/** One ad hoc image declared in config. */
|
|
20
|
+
export declare const extraKeys: readonly string[];
|
|
21
|
+
/** Options for reading a project's own frontmatter. */
|
|
22
|
+
export declare const contentKeys: readonly string[];
|
|
23
|
+
/** Brand palette shades. */
|
|
24
|
+
export declare const colorKeys: readonly string[];
|
|
25
|
+
/** Corner-badge options. */
|
|
26
|
+
export declare const badgeKeys: readonly string[];
|
|
27
|
+
/** `code` template styling options. */
|
|
28
|
+
export declare const codeKeys: readonly string[];
|
|
29
|
+
/** One output size, including the overrides it may carry. */
|
|
30
|
+
export declare const sizeKeys: readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* Both font variants at once. Which of `path` and `data` a font may carry is
|
|
33
|
+
* `fonts/resolve.ts`'s ruling to make, and it has a better message for it than
|
|
34
|
+
* a list of keys could.
|
|
35
|
+
*/
|
|
36
|
+
export declare const fontKeys: string[];
|
|
37
|
+
/** Keys of a solid background. */
|
|
38
|
+
export declare const solidBackgroundKeys: readonly string[];
|
|
39
|
+
/** Keys of a gradient background. */
|
|
40
|
+
export declare const gradientBackgroundKeys: readonly string[];
|
|
41
|
+
/** Keys of one gradient stop. */
|
|
42
|
+
export declare const gradientStopKeys: readonly string[];
|
|
43
|
+
/** Keys of a gradient's `from` and `to` points. */
|
|
44
|
+
export declare const gradientPointKeys: readonly string[];
|
|
45
|
+
/**
|
|
46
|
+
* The background variants, as values to check a declared `type` against. Typed
|
|
47
|
+
* against the union for the same reason the key lists are: a variant added to
|
|
48
|
+
* `Background` and not listed here would otherwise be reported as an unknown
|
|
49
|
+
* type, rejecting a config that is perfectly valid.
|
|
50
|
+
*/
|
|
51
|
+
export declare const backgroundTypes: readonly string[];
|
|
52
|
+
/**
|
|
53
|
+
* The slug strategies, for the same reason as {@link backgroundTypes}:
|
|
54
|
+
* `slugFromPath` treats anything that is not `basename` as a route, so a
|
|
55
|
+
* mistyped `rout` would quietly re-slug a whole site rather than complain.
|
|
56
|
+
*/
|
|
57
|
+
export declare const slugStrategies: readonly string[];
|
|
58
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/validate/keys.ts"],"names":[],"mappings":"AA0CA,gCAAgC;AAChC,eAAO,MAAM,UAAU,mBAgBrB,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,mBAI5B,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,aAAa,mBAKxB,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,mBAI9B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,mBAQ9B,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,SAAS,mBAIpB,CAAC;AAEH,uDAAuD;AACvD,eAAO,MAAM,WAAW,mBAQtB,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,SAAS,mBAKpB,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,SAAS,mBAIpB,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,QAAQ,mBASnB,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,mBAUnB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,UAKpB,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,mBAAmB,mBAG9B,CAAC;AAEH,qCAAqC;AACrC,eAAO,MAAM,sBAAsB,mBAKjC,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,mBAG3B,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,mBAAiD,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,mBAG1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,mBAGzB,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The keys of one config object, as a list to check incoming keys against.
|
|
3
|
+
*
|
|
4
|
+
* Taking a `Record<keyof T, true>` rather than a plain array of strings is
|
|
5
|
+
* what keeps the list honest: adding an option to `types.ts` without listing
|
|
6
|
+
* it here fails the build, which is much better than the new option quietly
|
|
7
|
+
* becoming an unknown one.
|
|
8
|
+
*/
|
|
9
|
+
function knownKeys(shape) {
|
|
10
|
+
return Object.keys(shape);
|
|
11
|
+
}
|
|
12
|
+
/** Top-level config options. */
|
|
13
|
+
export const configKeys = knownKeys({
|
|
14
|
+
colors: true,
|
|
15
|
+
background: true,
|
|
16
|
+
fonts: true,
|
|
17
|
+
systemFonts: true,
|
|
18
|
+
fontFamily: true,
|
|
19
|
+
footer: true,
|
|
20
|
+
badge: true,
|
|
21
|
+
code: true,
|
|
22
|
+
onWarning: true,
|
|
23
|
+
sizes: true,
|
|
24
|
+
templates: true,
|
|
25
|
+
content: true,
|
|
26
|
+
placement: true,
|
|
27
|
+
manifest: true,
|
|
28
|
+
extra: true,
|
|
29
|
+
});
|
|
30
|
+
/** Keys of a placement that writes each image beside its post. */
|
|
31
|
+
export const besideContentKeys = knownKeys({
|
|
32
|
+
strategy: true,
|
|
33
|
+
urlBase: true,
|
|
34
|
+
hash: true,
|
|
35
|
+
});
|
|
36
|
+
/** Keys of a placement that gathers images into one directory. */
|
|
37
|
+
export const publicDirKeys = knownKeys({
|
|
38
|
+
strategy: true,
|
|
39
|
+
dir: true,
|
|
40
|
+
urlBase: true,
|
|
41
|
+
hash: true,
|
|
42
|
+
});
|
|
43
|
+
/** Keys of a placement that works both halves out for itself. */
|
|
44
|
+
export const customPlacementKeys = knownKeys({
|
|
45
|
+
strategy: true,
|
|
46
|
+
path: true,
|
|
47
|
+
url: true,
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* The placement strategies, for the same reason as {@link backgroundTypes}: a
|
|
51
|
+
* mistyped one would otherwise be reported as an unknown key on whichever
|
|
52
|
+
* variant it was guessed to be.
|
|
53
|
+
*
|
|
54
|
+
* Two of the names are hyphenated because they are values a user writes in a
|
|
55
|
+
* config, not identifiers — the casing rule is about the latter. Keeping them
|
|
56
|
+
* as keys is what keeps the list exhaustive, which is the whole point of it.
|
|
57
|
+
*/
|
|
58
|
+
export const placementStrategies = knownKeys({
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
60
|
+
"beside-content": true,
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
62
|
+
"public-dir": true,
|
|
63
|
+
custom: true,
|
|
64
|
+
});
|
|
65
|
+
/** One ad hoc image declared in config. */
|
|
66
|
+
export const extraKeys = knownKeys({
|
|
67
|
+
props: true,
|
|
68
|
+
output: true,
|
|
69
|
+
size: true,
|
|
70
|
+
});
|
|
71
|
+
/** Options for reading a project's own frontmatter. */
|
|
72
|
+
export const contentKeys = knownKeys({
|
|
73
|
+
propsKey: true,
|
|
74
|
+
templateField: true,
|
|
75
|
+
defaultTemplate: true,
|
|
76
|
+
props: true,
|
|
77
|
+
slugField: true,
|
|
78
|
+
slugStrategy: true,
|
|
79
|
+
extensions: true,
|
|
80
|
+
});
|
|
81
|
+
/** Brand palette shades. */
|
|
82
|
+
export const colorKeys = knownKeys({
|
|
83
|
+
brand: true,
|
|
84
|
+
brandDark: true,
|
|
85
|
+
brandWarm: true,
|
|
86
|
+
foreground: true,
|
|
87
|
+
});
|
|
88
|
+
/** Corner-badge options. */
|
|
89
|
+
export const badgeKeys = knownKeys({
|
|
90
|
+
text: true,
|
|
91
|
+
color: true,
|
|
92
|
+
background: true,
|
|
93
|
+
});
|
|
94
|
+
/** `code` template styling options. */
|
|
95
|
+
export const codeKeys = knownKeys({
|
|
96
|
+
theme: true,
|
|
97
|
+
fontFamily: true,
|
|
98
|
+
charWidthRatio: true,
|
|
99
|
+
lineHeight: true,
|
|
100
|
+
tabSize: true,
|
|
101
|
+
cornerScale: true,
|
|
102
|
+
maxFontScale: true,
|
|
103
|
+
minFontScale: true,
|
|
104
|
+
});
|
|
105
|
+
/** One output size, including the overrides it may carry. */
|
|
106
|
+
export const sizeKeys = knownKeys({
|
|
107
|
+
name: true,
|
|
108
|
+
width: true,
|
|
109
|
+
height: true,
|
|
110
|
+
colors: true,
|
|
111
|
+
background: true,
|
|
112
|
+
fontFamily: true,
|
|
113
|
+
footer: true,
|
|
114
|
+
badge: true,
|
|
115
|
+
code: true,
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* Both font variants at once. Which of `path` and `data` a font may carry is
|
|
119
|
+
* `fonts/resolve.ts`'s ruling to make, and it has a better message for it than
|
|
120
|
+
* a list of keys could.
|
|
121
|
+
*/
|
|
122
|
+
export const fontKeys = [
|
|
123
|
+
...new Set([
|
|
124
|
+
...knownKeys({ family: true, path: true }),
|
|
125
|
+
...knownKeys({ family: true, data: true }),
|
|
126
|
+
]),
|
|
127
|
+
];
|
|
128
|
+
/** Keys of a solid background. */
|
|
129
|
+
export const solidBackgroundKeys = knownKeys({
|
|
130
|
+
type: true,
|
|
131
|
+
color: true,
|
|
132
|
+
});
|
|
133
|
+
/** Keys of a gradient background. */
|
|
134
|
+
export const gradientBackgroundKeys = knownKeys({
|
|
135
|
+
type: true,
|
|
136
|
+
stops: true,
|
|
137
|
+
from: true,
|
|
138
|
+
to: true,
|
|
139
|
+
});
|
|
140
|
+
/** Keys of one gradient stop. */
|
|
141
|
+
export const gradientStopKeys = knownKeys({
|
|
142
|
+
offset: true,
|
|
143
|
+
color: true,
|
|
144
|
+
});
|
|
145
|
+
/** Keys of a gradient's `from` and `to` points. */
|
|
146
|
+
export const gradientPointKeys = knownKeys({ x: true, y: true });
|
|
147
|
+
/**
|
|
148
|
+
* The background variants, as values to check a declared `type` against. Typed
|
|
149
|
+
* against the union for the same reason the key lists are: a variant added to
|
|
150
|
+
* `Background` and not listed here would otherwise be reported as an unknown
|
|
151
|
+
* type, rejecting a config that is perfectly valid.
|
|
152
|
+
*/
|
|
153
|
+
export const backgroundTypes = knownKeys({
|
|
154
|
+
solid: true,
|
|
155
|
+
gradient: true,
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* The slug strategies, for the same reason as {@link backgroundTypes}:
|
|
159
|
+
* `slugFromPath` treats anything that is not `basename` as a route, so a
|
|
160
|
+
* mistyped `rout` would quietly re-slug a whole site rather than complain.
|
|
161
|
+
*/
|
|
162
|
+
export const slugStrategies = knownKeys({
|
|
163
|
+
basename: true,
|
|
164
|
+
route: true,
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/validate/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Check each output size, and the overrides it carries. */
|
|
2
|
+
export declare function checkSizes(sizes: unknown, problems: string[]): void;
|
|
3
|
+
/** Check each extra image, and the size it renders at. */
|
|
4
|
+
export declare function checkExtras(extras: unknown, problems: string[]): void;
|
|
5
|
+
//# sourceMappingURL=overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAwBA,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAQnE;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAarE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { checkKeys, isList, isRecord } from "./check.js";
|
|
2
|
+
import { badgeKeys, codeKeys, colorKeys, extraKeys, sizeKeys } from "./keys.js";
|
|
3
|
+
import { checkBackground } from "./values.js";
|
|
4
|
+
/**
|
|
5
|
+
* Check one output size, and the overrides it carries.
|
|
6
|
+
*
|
|
7
|
+
* A size is the one place the same option names appear twice over, so the paths
|
|
8
|
+
* matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
|
|
9
|
+
* which size it is talking about to be worth reading at all.
|
|
10
|
+
*/
|
|
11
|
+
function checkSize(size, path, problems) {
|
|
12
|
+
checkKeys(size, path, sizeKeys, problems);
|
|
13
|
+
if (!isRecord(size)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
checkKeys(size["colors"], `${path}.colors`, colorKeys, problems);
|
|
17
|
+
checkKeys(size["badge"], `${path}.badge`, badgeKeys, problems);
|
|
18
|
+
checkKeys(size["code"], `${path}.code`, codeKeys, problems);
|
|
19
|
+
checkBackground(size["background"], `${path}.background`, problems);
|
|
20
|
+
}
|
|
21
|
+
/** Check each output size, and the overrides it carries. */
|
|
22
|
+
export function checkSizes(sizes, problems) {
|
|
23
|
+
if (!isList(sizes)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const [index, size] of sizes.entries()) {
|
|
27
|
+
checkSize(size, `sizes[${String(index)}]`, problems);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Check each extra image, and the size it renders at. */
|
|
31
|
+
export function checkExtras(extras, problems) {
|
|
32
|
+
if (!isList(extras)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
for (const [index, extra] of extras.entries()) {
|
|
36
|
+
const path = `extra[${String(index)}]`;
|
|
37
|
+
checkKeys(extra, path, extraKeys, problems);
|
|
38
|
+
if (isRecord(extra)) {
|
|
39
|
+
checkSize(extra["size"], `${path}.size`, problems);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAa,EAAE,IAAY,EAAE,QAAkB;IAChE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,QAAkB;IAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,QAAkB;IAC7D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check a placement against the keys of whichever strategy it declares.
|
|
3
|
+
*
|
|
4
|
+
* The strategy is required, unlike a background's `type`: a background with
|
|
5
|
+
* none still looks like the gradient it is rendered as, where a placement with
|
|
6
|
+
* none is a `dir` and a `urlBase` read by nobody and images written somewhere
|
|
7
|
+
* else entirely.
|
|
8
|
+
*/
|
|
9
|
+
export declare function checkPlacement(placement: unknown, problems: string[]): void;
|
|
10
|
+
//# sourceMappingURL=placement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../src/validate/placement.ts"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CA6B3E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { checkKeys, isRecord } from "./check.js";
|
|
2
|
+
import { besideContentKeys, customPlacementKeys, placementStrategies, publicDirKeys, } from "./keys.js";
|
|
3
|
+
import { describeUnknownValue } from "./values.js";
|
|
4
|
+
/** The keys one placement strategy accepts, or nothing if it names none. */
|
|
5
|
+
function placementKeys(strategy) {
|
|
6
|
+
if (strategy === "beside-content") {
|
|
7
|
+
return besideContentKeys;
|
|
8
|
+
}
|
|
9
|
+
if (strategy === "public-dir") {
|
|
10
|
+
return publicDirKeys;
|
|
11
|
+
}
|
|
12
|
+
return strategy === "custom" ? customPlacementKeys : undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check a placement against the keys of whichever strategy it declares.
|
|
16
|
+
*
|
|
17
|
+
* The strategy is required, unlike a background's `type`: a background with
|
|
18
|
+
* none still looks like the gradient it is rendered as, where a placement with
|
|
19
|
+
* none is a `dir` and a `urlBase` read by nobody and images written somewhere
|
|
20
|
+
* else entirely.
|
|
21
|
+
*/
|
|
22
|
+
export function checkPlacement(placement, problems) {
|
|
23
|
+
if (!isRecord(placement)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const strategy = placement["strategy"];
|
|
27
|
+
if (typeof strategy !== "string") {
|
|
28
|
+
problems.push(`placement needs a "strategy": ${placementStrategies.join(", ")}.`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const keys = placementKeys(strategy);
|
|
32
|
+
if (keys === undefined) {
|
|
33
|
+
problems.push(describeUnknownValue("placement strategy", "strategies", strategy, placementStrategies));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
checkKeys(placement, "placement", keys, problems);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/validate/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,4EAA4E;AAC5E,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkB,EAAE,QAAkB;IACnE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CACX,iCAAiC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CACX,oBAAoB,CAClB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,mBAAmB,CACpB,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check each output size, and the overrides it carries.
|
|
3
|
+
*
|
|
4
|
+
* A size is the one place the same option names appear twice over, so the paths
|
|
5
|
+
* matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
|
|
6
|
+
* which size it is talking about to be worth reading at all.
|
|
7
|
+
*/
|
|
8
|
+
export declare function checkSizes(sizes: unknown, problems: string[]): void;
|
|
9
|
+
//# sourceMappingURL=sizes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizes.d.ts","sourceRoot":"","sources":["../../src/validate/sizes.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAkBnE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { checkKeys, isList, isRecord } from "./check.js";
|
|
2
|
+
import { badgeKeys, codeKeys, colorKeys, sizeKeys } from "./keys.js";
|
|
3
|
+
import { checkBackground } from "./values.js";
|
|
4
|
+
/**
|
|
5
|
+
* Check each output size, and the overrides it carries.
|
|
6
|
+
*
|
|
7
|
+
* A size is the one place the same option names appear twice over, so the paths
|
|
8
|
+
* matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
|
|
9
|
+
* which size it is talking about to be worth reading at all.
|
|
10
|
+
*/
|
|
11
|
+
export function checkSizes(sizes, problems) {
|
|
12
|
+
if (!isList(sizes)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
for (const [index, size] of sizes.entries()) {
|
|
16
|
+
const path = `sizes[${String(index)}]`;
|
|
17
|
+
checkKeys(size, path, sizeKeys, problems);
|
|
18
|
+
if (!isRecord(size)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
checkKeys(size["colors"], `${path}.colors`, colorKeys, problems);
|
|
22
|
+
checkKeys(size["badge"], `${path}.badge`, badgeKeys, problems);
|
|
23
|
+
checkKeys(size["code"], `${path}.code`, codeKeys, problems);
|
|
24
|
+
checkBackground(size["background"], `${path}.background`, problems);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sizes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizes.js","sourceRoot":"","sources":["../../src/validate/sizes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,QAAkB;IAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The known name a mistyped one was most likely meant to be, or `undefined`
|
|
3
|
+
* when nothing is close enough. A confident suggestion of something unrelated
|
|
4
|
+
* is worse than none, so the tolerance stays under the length of the name:
|
|
5
|
+
* a slip of a key or two earns a suggestion, a different word does not.
|
|
6
|
+
*/
|
|
7
|
+
export declare function nearestName(name: string, known: readonly string[]): string | undefined;
|
|
8
|
+
/** Report one unknown option, naming the likeliest thing it was meant to be. */
|
|
9
|
+
export declare function describeUnknownOption(path: string, key: string, known: readonly string[]): string;
|
|
10
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/validate/suggest.ts"],"names":[],"mappings":"AAsCA;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,GAAG,SAAS,CAmBpB;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,CAQR"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options that have been renamed, keyed by where the old name turns up.
|
|
3
|
+
* Edit distance cannot connect a rename that changed the word — `dimensions`
|
|
4
|
+
* became `sizes` — and a config carried over from an older version is exactly
|
|
5
|
+
* where a bare "unknown option" helps least.
|
|
6
|
+
*/
|
|
7
|
+
const renamedOptions = new Map([["dimensions", "sizes"]]);
|
|
8
|
+
/**
|
|
9
|
+
* Levenshtein distance between two strings, used to work out which option a
|
|
10
|
+
* typo was aiming at. Both strings are option names and the lists are a
|
|
11
|
+
* handful of entries long, so the plain two-row dynamic program is ample.
|
|
12
|
+
*/
|
|
13
|
+
function editDistance(a, b) {
|
|
14
|
+
let previous = Array.from({ length: b.length + 1 }, (_, index) => index);
|
|
15
|
+
for (let row = 1; row <= a.length; row += 1) {
|
|
16
|
+
const current = [row];
|
|
17
|
+
for (let column = 1; column <= b.length; column += 1) {
|
|
18
|
+
const cost = a[row - 1] === b[column - 1] ? 0 : 1;
|
|
19
|
+
// Every index here is within the row by construction; the fallbacks are
|
|
20
|
+
// there for `noUncheckedIndexedAccess` rather than for any real case.
|
|
21
|
+
current.push(Math.min((previous[column - 1] ?? 0) + cost, (previous[column] ?? 0) + 1, (current[column - 1] ?? 0) + 1));
|
|
22
|
+
}
|
|
23
|
+
previous = current;
|
|
24
|
+
}
|
|
25
|
+
return previous[b.length] ?? 0;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The known name a mistyped one was most likely meant to be, or `undefined`
|
|
29
|
+
* when nothing is close enough. A confident suggestion of something unrelated
|
|
30
|
+
* is worse than none, so the tolerance stays under the length of the name:
|
|
31
|
+
* a slip of a key or two earns a suggestion, a different word does not.
|
|
32
|
+
*/
|
|
33
|
+
export function nearestName(name, known) {
|
|
34
|
+
const tolerance = Math.min(name.length - 1, Math.max(2, Math.ceil(name.length / 4)));
|
|
35
|
+
let nearest;
|
|
36
|
+
let shortest = Infinity;
|
|
37
|
+
for (const candidate of known) {
|
|
38
|
+
// Case-insensitive: `tabsize` for `tabSize` is the same slip as a typo.
|
|
39
|
+
const distance = editDistance(name.toLowerCase(), candidate.toLowerCase());
|
|
40
|
+
if (distance < shortest) {
|
|
41
|
+
nearest = candidate;
|
|
42
|
+
shortest = distance;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return shortest <= tolerance ? nearest : undefined;
|
|
46
|
+
}
|
|
47
|
+
/** Report one unknown option, naming the likeliest thing it was meant to be. */
|
|
48
|
+
export function describeUnknownOption(path, key, known) {
|
|
49
|
+
const suggestion = renamedOptions.get(path) ?? nearestName(key, known);
|
|
50
|
+
if (suggestion !== undefined) {
|
|
51
|
+
return `Unknown option "${path}". Did you mean "${suggestion}"?`;
|
|
52
|
+
}
|
|
53
|
+
return `Unknown option "${path}". Valid options here: ${known.join(", ")}.`;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/validate/suggest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1E;;;;GAIG;AACH,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAEzE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,wEAAwE;YACxE,sEAAsE;YACtE,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,GAAG,CACN,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAClC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAC3B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC/B,CACF,CAAC;QACJ,CAAC;QAED,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,KAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACxC,CAAC;IACF,IAAI,OAA2B,CAAC;IAChC,IAAI,QAAQ,GAAG,QAAQ,CAAC;IAExB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,wEAAwE;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAE3E,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACxB,OAAO,GAAG,SAAS,CAAC;YACpB,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,GAAW,EACX,KAAwB;IAExB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEvE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,mBAAmB,IAAI,oBAAoB,UAAU,IAAI,CAAC;IACnE,CAAC;IAED,OAAO,mBAAmB,IAAI,0BAA0B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report a value that is not one of the names a field accepts. `noun` names
|
|
3
|
+
* the field, `plural` heads the list of what it does accept.
|
|
4
|
+
*/
|
|
5
|
+
export declare function describeUnknownValue(noun: string, plural: string, value: string, known: readonly string[]): string;
|
|
6
|
+
/**
|
|
7
|
+
* Check a background against the keys of whichever variant it declares.
|
|
8
|
+
*
|
|
9
|
+
* A misspelt `type` is worth reporting on its own: `backgroundSvg` treats
|
|
10
|
+
* anything that is not `solid` as a gradient, so `gradiant` silently becomes
|
|
11
|
+
* one and then falls over on the stops it does not have. A background with no
|
|
12
|
+
* `type` at all is left alone — the type is what says which keys apply, and
|
|
13
|
+
* guessing would report the keys rather than the omission.
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkBackground(background: unknown, path: string, problems: string[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Check the slug strategy names a real one. Only a string can be a strategy;
|
|
18
|
+
* anything else is a shape the type checker already covers, as elsewhere here.
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkSlugStrategy(content: unknown, problems: string[]): void;
|
|
21
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/validate/values.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAyBN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAmB5E"}
|