@shapio/schema 0.5.9 → 0.5.11

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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as isEmptyRichText, i as RichTextResult, n as RichTextNode, o as richTextMediaIds, r as RichTextProblem, s as validateRichText, t as RichTextDocument } from "./validate-Oyo0GJ9j.js";
2
- import { S as SeoFieldKey, _ as SEO_FIELD_IDS, a as EMPTY_SEO_DEFAULTS, b as SEO_TITLE_TEMPLATE_PATTERN, c as seoDefaultsForLocale, d as SeoLocaleDefaults, f as SeoLocaleDefaultsSchema, g as SEO_EDITOR_ID, h as SEO_DESCRIPTION_SOFT_MAX, i as resolveSeo, l as SeoDefaults, m as SEO_COMPONENT_ID, n as ResolveSeoContext, o as applyTitleTemplate, p as SEO_COMPONENT_API_KEY, r as SeoKeys, s as isValidTitleTemplate, t as DEFAULT_SEO_KEYS, u as SeoDefaultsSchema, v as SEO_TITLE_PLACEHOLDER, x as SEO_TWITTER_HANDLE_PATTERN, y as SEO_TITLE_SOFT_MAX } from "./resolve-7-z9VQqw.js";
2
+ import { S as SeoFieldKey, _ as SEO_FIELD_IDS, a as EMPTY_SEO_DEFAULTS, b as SEO_TITLE_TEMPLATE_PATTERN, c as seoDefaultsForLocale, d as SeoLocaleDefaults, f as SeoLocaleDefaultsSchema, g as SEO_EDITOR_ID, h as SEO_DESCRIPTION_SOFT_MAX, i as resolveSeo, l as SeoDefaults, m as SEO_COMPONENT_ID, n as ResolveSeoContext, o as applyTitleTemplate, p as SEO_COMPONENT_API_KEY, r as SeoKeys, s as isValidTitleTemplate, t as DEFAULT_SEO_KEYS, u as SeoDefaultsSchema, v as SEO_TITLE_PLACEHOLDER, x as SEO_TWITTER_HANDLE_PATTERN, y as SEO_TITLE_SOFT_MAX } from "./resolve-DlXILdG3.js";
3
3
  import { Static, TSchema, Type } from "typebox";
4
4
  //#region src/ids.d.ts
5
5
  /**
@@ -660,28 +660,28 @@ export declare const UID_PATTERN: RegExp;
660
660
  export declare const RICHTEXT_FORMAT = "shapio-richtext";
661
661
  export declare const RICHTEXT_FORMAT_VERSION = 1;
662
662
  //#endregion
663
- //#region src/editors/catalogue.d.ts
663
+ //#region src/editors/catalog.d.ts
664
664
  /**
665
665
  * Built-in editors (ADR 0009): which data types each can edit and the schema of its options. The server
666
- * validates every field's editor choice against this catalogue, so selecting and configuring an editor is
666
+ * validates every field's editor choice against this catalog, so selecting and configuring an editor is
667
667
  * runtime metadata. Custom editors (loaded at runtime from the project) use namespaced IDs containing a dot,
668
668
  * e.g. `acme.colorWheel`; their options are free-form JSON here because their schema lives in the project.
669
669
  */
670
- export type EditorCatalogueEntry = {
670
+ export type EditorCatalogEntry = {
671
671
  id: string;
672
672
  dataTypes: readonly DataType[];
673
673
  optionsSchema: TSchema;
674
674
  /** Extra compatibility rule beyond the data type (e.g. radio buttons only for single-value enums). */
675
675
  supports?: (field: FieldDefinition) => boolean;
676
676
  };
677
- export declare const EDITOR_CATALOGUE: ReadonlyMap<string, EditorCatalogueEntry>;
677
+ export declare const EDITOR_CATALOG: ReadonlyMap<string, EditorCatalogEntry>;
678
678
  /** The editor a field gets when its definition names none. */
679
679
  export declare const DEFAULT_EDITORS: Readonly<Record<DataType, string>>;
680
680
  /** `vendor.name` (letters, digits, `_`, `-`), e.g. `acme.colorWheel`. Built-in IDs never contain a dot. */
681
681
  export declare const CUSTOM_EDITOR_ID_PATTERN: RegExp;
682
682
  export declare const isCustomEditorId: (id: string) => boolean;
683
683
  /** Built-in editors that can edit this field (for the admin's editor picker). */
684
- export declare const listCompatibleEditors: (field: FieldDefinition) => EditorCatalogueEntry[];
684
+ export declare const listCompatibleEditors: (field: FieldDefinition) => EditorCatalogEntry[];
685
685
  //#endregion
686
686
  //#region src/display/layout.d.ts
687
687
  /**
@@ -746,6 +746,11 @@ export declare const effectiveLayout: (model: ModelDefinition) => DocumentLayout
746
746
  export declare const stripFieldsOf: (layout: DocumentLayout, hasValue: (field: FieldDefinition) => boolean, limit?: number) => FieldDefinition[];
747
747
  /** How the model's entries open (`display.layout`): `document` unless set to `form`. */
748
748
  export declare const entryLayoutOf: (model: ModelDefinition) => EntryLayout;
749
+ /**
750
+ * How `layout` is stored on a model (`display.layout`). Document is the default, so a model that extends
751
+ * nothing leaves it unset. A model that extends another spells it out: unset would inherit the parent's.
752
+ */
753
+ export declare const storedEntryLayout: (model: Pick<ModelDefinition, "extends">, layout: EntryLayout | undefined) => EntryLayout | undefined;
749
754
  /**
750
755
  * One section of a form-layout entry: a `display.groups` group (its `id` and `label`), or a run of
751
756
  * consecutive ungrouped fields (`label` undefined). A run's `id` is `ungrouped-<ID of its first field>`:
@@ -762,7 +767,7 @@ export type FormLayout = {
762
767
  /**
763
768
  * The entry form's layout (`display.layout: 'form'`): every live field, the title included, in sections.
764
769
  * Field order decides everything: a group's section sits where its first field appears, with its fields in
765
- * field order, and every run of consecutive ungrouped fields is an unlabelled section of its own at its
770
+ * field order, and every run of consecutive ungrouped fields is an unlabeled section of its own at its
766
771
  * place. So name, price, sku, description with a Pricing group (price, sku) reads [name], Pricing [price,
767
772
  * sku], [description]. Unknown and deprecated ids are skipped. Pure: no values, no I/O.
768
773
  */
@@ -898,8 +903,9 @@ export type DefinitionInputWithIds = (WithIds<ModelDefinitionInput> & {
898
903
  * Applies defaults so that two definitions meaning the same thing are byte-identical once serialized
899
904
  * canonically: a hand-written file that omits `public` hashes the same as one that says `public: true`.
900
905
  * Empty optional strings and arrays are dropped, and so are the defaults of keys added after definitions
901
- * were first hashed (`width: 'full'`, `display.layout: 'document'`). A collection without a plural API ID
902
- * gets the suggested one (`suggestPlural`), so files and definitions from before plural API IDs keep working.
906
+ * were first hashed (`width: 'full'`, and `display.layout: 'document'` on a model that extends nothing). A
907
+ * collection without a plural API ID gets the suggested one (`suggestPlural`), so files and definitions from
908
+ * before plural API IDs keep working.
903
909
  */
904
910
  export declare const normalizeDefinition: (input: DefinitionInputWithIds) => SchemaDefinition;
905
911
  /** Normalizes a definition that is already normalized-shaped (e.g. read back from the database). */
@@ -1476,11 +1482,11 @@ export declare const THEME_KEY_PATTERN: RegExp;
1476
1482
  export declare const BUILT_IN_THEME_KEYS: readonly ["shapio", "classic", "murdered-out", "forest", "snowed", "butter"];
1477
1483
  export type BuiltInThemeKey = (typeof BUILT_IN_THEME_KEYS)[number];
1478
1484
  /**
1479
- * A token value an extension may use: a hex colour or a colour function whose arguments are numbers, units
1485
+ * A token value an extension may use: a hex color or a color function whose arguments are numbers, units
1480
1486
  * and separators only (no `;`, quotes, braces or nested functions such as `url()` or `var()`), so a value
1481
1487
  * can never escape its declaration.
1482
1488
  */
1483
- export declare const THEME_COLOUR_PATTERN: RegExp;
1489
+ export declare const THEME_COLOR_PATTERN: RegExp;
1484
1490
  //#endregion
1485
1491
  //#region src/themes/contrast.d.ts
1486
1492
  /**
@@ -1497,14 +1503,14 @@ export declare const THEME_UI_PAIRS: readonly ContrastPair[];
1497
1503
  * passes, and other selected surfaces hold no controls.
1498
1504
  */
1499
1505
  export declare const THEME_DARK_UI_PAIRS: readonly ContrastPair[];
1500
- /** The WCAG contrast ratio of two `#rrggbb` colours. */
1506
+ /** The WCAG contrast ratio of two `#rrggbb` colors. */
1501
1507
  export declare const contrastRatio: (a: string, b: string) => number;
1502
1508
  export type ContrastCheck = {
1503
1509
  foreground: string;
1504
1510
  background: string;
1505
1511
  /** 4.5 for text, 3 for controls. */
1506
1512
  required: number;
1507
- /** Undefined when a value is not a `#rrggbb` colour (functions such as `oklch()` are not checked). */
1513
+ /** Undefined when a value is not a `#rrggbb` color (functions such as `oklch()` are not checked). */
1508
1514
  ratio: number | undefined;
1509
1515
  };
1510
1516
  /** Every pair the variant must meet, with its ratio. Missing tokens report an undefined ratio. */
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { _ as STABLE_ID_PATTERN, a as MAX_RICHTEXT_DEPTH, c as BIGINTEGER_PATTERN, d as DECIMAL_PATTERN, f as RICHTEXT_FORMAT, g as UID_PATTERN, h as TIME_PATTERN, i as MARK_RULES, l as DATETIME_PATTERN, m as SLUG_PATTERN, n as richTextMediaIds, o as NODE_RULES, p as RICHTEXT_FORMAT_VERSION, r as validateRichText, s as SAFE_LINK_PATTERN, t as isEmptyRichText, u as DATE_PATTERN, v as createStableId, y as isStableId } from "./validate-BQGutaBo.js";
2
- import { a as isValidTitleTemplate, c as SEO_COMPONENT_ID, d as SEO_FIELD_IDS, f as SEO_TITLE_PLACEHOLDER, h as SEO_TWITTER_HANDLE_PATTERN, i as applyTitleTemplate, l as SEO_DESCRIPTION_SOFT_MAX, m as SEO_TITLE_TEMPLATE_PATTERN, n as resolveSeo, o as seoDefaultsForLocale, p as SEO_TITLE_SOFT_MAX, r as EMPTY_SEO_DEFAULTS, s as SEO_COMPONENT_API_KEY, t as DEFAULT_SEO_KEYS, u as SEO_EDITOR_ID } from "./resolve-viddCEYd.js";
2
+ import { a as isValidTitleTemplate, c as SEO_COMPONENT_ID, d as SEO_FIELD_IDS, f as SEO_TITLE_PLACEHOLDER, h as SEO_TWITTER_HANDLE_PATTERN, i as applyTitleTemplate, l as SEO_DESCRIPTION_SOFT_MAX, m as SEO_TITLE_TEMPLATE_PATTERN, n as resolveSeo, o as seoDefaultsForLocale, p as SEO_TITLE_SOFT_MAX, r as EMPTY_SEO_DEFAULTS, s as SEO_COMPONENT_API_KEY, t as DEFAULT_SEO_KEYS, u as SEO_EDITOR_ID } from "./resolve-Csjpkpue.js";
3
3
  import { Type } from "typebox";
4
4
  import pluralize from "pluralize";
5
5
  import { Value } from "typebox/value";
@@ -414,7 +414,7 @@ const SETTINGS_SCHEMAS = {
414
414
  /** Whether a field holds the built-in SEO component (by stable ID, whatever its API ID or editor). */
415
415
  const isSeoField = (field) => field.type === "component" && field.settings.component === "f3905a00-d2a3-4c62-899a-c894bfd6cb9b" && !field.settings.repeatable;
416
416
  //#endregion
417
- //#region src/editors/catalogue.ts
417
+ //#region src/editors/catalog.ts
418
418
  const closed$1 = { additionalProperties: false };
419
419
  const Placeholder = Type.Optional(Type.String({ maxLength: 200 }));
420
420
  const isMultipleEnum = (field) => field.type === "enum" && field.settings.multiple;
@@ -568,7 +568,7 @@ const entries = [
568
568
  optionsSchema: Type.Object({ collapsed: Type.Optional(Type.Boolean()) }, closed$1)
569
569
  }
570
570
  ];
571
- const EDITOR_CATALOGUE = new Map(entries.map((entry) => [entry.id, entry]));
571
+ const EDITOR_CATALOG = new Map(entries.map((entry) => [entry.id, entry]));
572
572
  /** The editor a field gets when its definition names none. */
573
573
  const DEFAULT_EDITORS = {
574
574
  string: "textInput",
@@ -728,6 +728,11 @@ const effectiveLayout = (model) => {
728
728
  const stripFieldsOf = (layout, hasValue, limit = 5) => layout.strip ?? layout.properties.filter(hasValue).slice(0, limit);
729
729
  /** How the model's entries open (`display.layout`): `document` unless set to `form`. */
730
730
  const entryLayoutOf = (model) => model.display.layout ?? "document";
731
+ /**
732
+ * How `layout` is stored on a model (`display.layout`). Document is the default, so a model that extends
733
+ * nothing leaves it unset. A model that extends another spells it out: unset would inherit the parent's.
734
+ */
735
+ const storedEntryLayout = (model, layout) => layout === "document" && !model.extends ? void 0 : layout;
731
736
  const ungroupedSectionId = (first, groupIds) => {
732
737
  let candidate = `ungrouped-${first.id}`;
733
738
  while (groupIds.has(candidate)) candidate = `~${candidate}`;
@@ -736,7 +741,7 @@ const ungroupedSectionId = (first, groupIds) => {
736
741
  /**
737
742
  * The entry form's layout (`display.layout: 'form'`): every live field, the title included, in sections.
738
743
  * Field order decides everything: a group's section sits where its first field appears, with its fields in
739
- * field order, and every run of consecutive ungrouped fields is an unlabelled section of its own at its
744
+ * field order, and every run of consecutive ungrouped fields is an unlabeled section of its own at its
740
745
  * place. So name, price, sku, description with a Pricing group (price, sku) reads [name], Pricing [price,
741
746
  * sku], [description]. Unknown and deprecated ids are skipped. Pure: no values, no I/O.
742
747
  */
@@ -1278,17 +1283,18 @@ const normalizeField = (field) => {
1278
1283
  };
1279
1284
  return withoutEmpty(normalized);
1280
1285
  };
1281
- const normalizeModelDisplay = (display) => withoutEmpty({
1286
+ const normalizeModelDisplay = (display, extendsId) => withoutEmpty({
1282
1287
  ...display,
1283
- layout: display?.layout === "document" ? void 0 : display?.layout
1288
+ layout: storedEntryLayout({ extends: extendsId }, display?.layout)
1284
1289
  });
1285
1290
  const normalizeComponentDisplay = (display) => withoutEmpty({ ...display });
1286
1291
  /**
1287
1292
  * Applies defaults so that two definitions meaning the same thing are byte-identical once serialized
1288
1293
  * canonically: a hand-written file that omits `public` hashes the same as one that says `public: true`.
1289
1294
  * Empty optional strings and arrays are dropped, and so are the defaults of keys added after definitions
1290
- * were first hashed (`width: 'full'`, `display.layout: 'document'`). A collection without a plural API ID
1291
- * gets the suggested one (`suggestPlural`), so files and definitions from before plural API IDs keep working.
1295
+ * were first hashed (`width: 'full'`, and `display.layout: 'document'` on a model that extends nothing). A
1296
+ * collection without a plural API ID gets the suggested one (`suggestPlural`), so files and definitions from
1297
+ * before plural API IDs keep working.
1292
1298
  */
1293
1299
  const normalizeDefinition = (input) => {
1294
1300
  const fields = input.fields.map(normalizeField);
@@ -1314,7 +1320,7 @@ const normalizeDefinition = (input) => {
1314
1320
  draftAndPublish: input.draftAndPublish ?? true,
1315
1321
  extends: input.extends,
1316
1322
  fields,
1317
- display: normalizeModelDisplay(input.display)
1323
+ display: normalizeModelDisplay(input.display, input.extends)
1318
1324
  });
1319
1325
  };
1320
1326
  /** Normalizes a definition that is already normalized-shaped (e.g. read back from the database). */
@@ -1555,7 +1561,7 @@ const checkFlags = (field, path, isComponent) => {
1555
1561
  const checkEditor = (field, path) => {
1556
1562
  const { id, options } = field.editor;
1557
1563
  if (isCustomEditorId(id)) return [];
1558
- const entry = EDITOR_CATALOGUE.get(id);
1564
+ const entry = EDITOR_CATALOG.get(id);
1559
1565
  if (!entry) return [issue(`${path}/editor/id`, "UNKNOWN_EDITOR", `"${id}" is not a built-in editor (custom editors use a vendor.name ID)`)];
1560
1566
  if (!entry.dataTypes.includes(field.type) || !(entry.supports?.(field) ?? true)) return [issue(`${path}/editor/id`, "INCOMPATIBLE_EDITOR", `the ${id} editor cannot edit this ${field.type} field`)];
1561
1567
  return collectSchemaErrors(entry.optionsSchema, options, `${path}/editor/options`).map((error) => issue(error.path, "INVALID_EDITOR_OPTIONS", error.message));
@@ -2996,11 +3002,11 @@ const BUILT_IN_THEME_KEYS = [
2996
3002
  "butter"
2997
3003
  ];
2998
3004
  /**
2999
- * A token value an extension may use: a hex colour or a colour function whose arguments are numbers, units
3005
+ * A token value an extension may use: a hex color or a color function whose arguments are numbers, units
3000
3006
  * and separators only (no `;`, quotes, braces or nested functions such as `url()` or `var()`), so a value
3001
3007
  * can never escape its declaration.
3002
3008
  */
3003
- const THEME_COLOUR_PATTERN = /^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:rgba?|hsla?|oklch|oklab)\([0-9a-z.,%\s/+-]{1,80}\))$/;
3009
+ const THEME_COLOR_PATTERN = /^(?:#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|(?:rgba?|hsla?|oklch|oklab)\([0-9a-z.,%\s/+-]{1,80}\))$/;
3004
3010
  //#endregion
3005
3011
  //#region src/themes/contrast.ts
3006
3012
  const SURFACES = [
@@ -3085,7 +3091,7 @@ const luminance = (hex) => {
3085
3091
  ].map((index) => channel(parseInt(hex.slice(index, index + 2), 16)));
3086
3092
  return .2126 * (r ?? 0) + .7152 * (g ?? 0) + .0722 * (b ?? 0);
3087
3093
  };
3088
- /** The WCAG contrast ratio of two `#rrggbb` colours. */
3094
+ /** The WCAG contrast ratio of two `#rrggbb` colors. */
3089
3095
  const contrastRatio = (a, b) => {
3090
3096
  const [high = 0, low = 0] = [luminance(a), luminance(b)].sort((x, y) => y - x);
3091
3097
  return (high + .05) / (low + .05);
@@ -3189,6 +3195,6 @@ const SeoDefaultsSchema = Type.Object({
3189
3195
  twitterHandle: Type.Union([Type.String({ pattern: SEO_TWITTER_HANDLE_PATTERN.source }), Type.Null()])
3190
3196
  }, closed);
3191
3197
  //#endregion
3192
- export { API_KEY_PATTERN, BIGINTEGER_PATTERN, BUILT_IN_THEME_KEYS, CANVAS_ELIGIBLE, CHANGE_KINDS, CODE_LANGUAGES, COMPONENT_TYPE_SUFFIXES, CUSTOM_EDITOR_ID_PATTERN, ComponentDefinitionInputSchema, ComponentDisplayInputSchema, DATA_TYPES, DATETIME_PATTERN, DATE_PATTERN, DECIMAL_PATTERN, DEFAULT_EDITORS, DEFAULT_SEO_KEYS, DEFINITION_KINDS, DefinitionInputSchema, EDITOR_CATALOGUE, EMPTY_SEO_DEFAULTS, ENTRY_LAYOUTS, EditorChoiceInputSchema, EnumValueSchema, FIELD_WIDTHS, FieldInputSchema, INLINE_TITLE_TYPES, INTERFACE_TYPE_SUFFIX, INVALID_TEXT_MESSAGE, LOCALE_CODE_PATTERN, LOCK_FILE_FORMAT_VERSION, LOCK_FILE_PATH, LocaleInputSchema, LockEntrySchema, LockFileError, LockFileSchema, MARK_RULES, MAX_API_KEY_LENGTH, MAX_COMPONENT_DEPTH, MAX_DESCRIPTION_LENGTH, MAX_FALLBACK_CHAIN, MAX_FIELDS_PER_DEFINITION, MAX_INHERITANCE_DEPTH, MAX_LABEL_LENGTH, MAX_RICHTEXT_DEPTH, MAX_ROUTE_KEY_LENGTH, MEDIA_KINDS, MODEL_KINDS, MODEL_TYPE_SUFFIXES, MUTATION_PREFIXES, ModelDefinitionInputSchema, ModelDisplayInputSchema, NODE_RULES, PLURAL_FALLBACK_SUFFIX, REFERENCE_DATA_TYPES, RELATION_CARDINALITIES, RESERVED_DEFINITION_API_KEYS, RESERVED_FIELD_API_KEYS, RESERVED_QUERY_NAMES, RESERVED_TYPE_NAMES, RICHTEXT_FORMAT, RICHTEXT_FORMAT_VERSION, ROUTE_KEY_PATTERN, SAFE_LINK_PATTERN, SCALAR_DATA_TYPES, SCHEMA_KIND_DIRECTORIES, SEO_COMPONENT_API_KEY, SEO_COMPONENT_ID, SEO_DESCRIPTION_SOFT_MAX, SEO_EDITOR_ID, SEO_FIELD_IDS, SEO_TITLE_PLACEHOLDER, SEO_TITLE_SOFT_MAX, SEO_TITLE_TEMPLATE_PATTERN, SEO_TWITTER_HANDLE_PATTERN, SETTINGS_SCHEMAS, SITES_DIRECTORY, SLUG_PATTERN, SORT_DIRECTIONS, STABLE_ID_PATTERN, STORAGE_FAMILY, STRIP_DEFAULT_COUNT, SchemaValidationError, SeoDefaultsSchema, SeoLocaleDefaultsSchema, TEXT_TITLE_FIELD_TYPES, THEME_BRAND_TOKENS, THEME_COLOUR_PATTERN, THEME_DARK_UI_PAIRS, THEME_KEY_PATTERN, THEME_SEMANTIC_TOKENS, THEME_TEXT_PAIRS, THEME_TOKENS, THEME_UI_PAIRS, THEME_VARIANTS, TIME_PATTERN, TITLE_FIELD_TYPES, UID_PATTERN, UNIQUE_CAPABLE_DATA_TYPES, ancestorChain, applyTitleTemplate, assignIds, canonicalJson, changeDropsValues, checkApiKeySyntax, checkDefaultValue, checkDisplay, checkInheritance, checkThemeContrast, classifyChange, classifyChanges, classifyLocaleChange, collectionQueryName, contrastRatio, createDefinitionIndex, createStableId, decideSync, diffDefinitions, effectiveFormLayout, effectiveLayout, effectiveTitleField, embeddedComponentIds, entryLayoutOf, escapeHtml, findChildDefinitions, findDependentModels, findInvalidText, findReferencingDefinitions, foldApiKey, generatedNames, hashDefinition, isApiKeySyntaxValid, isCanvasEligible, isComponentDefinition, isCoverEligible, isCustomEditorId, isDataType, isDocumentPlaceable, isEmptyRichText, isModelDefinition, isSeoField, isStableId, isValidText, isValidTitleTemplate, issue, listCompatibleEditors, lockCoversSite, lockEntriesForSite, mergeDisplay, mergePulledLock, normalizeDefinition, ownFields, parseDefinition, parseLockFile, plainTextToRichText, renderRichTextHtml, renormalizeDefinition, resolveModelDefinition, resolveSeo, richTextBodyOf, richTextMediaIds, richTextPlainText, richTextToPlainText, routeKeyOf, routePathOf, schemaFilePath, scopeDirectory, scopeOfSchemaFilePath, seoComponentDefinition, seoDefaultsForLocale, serializeDefinition, serializeLockFile, sha256, splitRoutePath, storageFamilyOf, stripFieldsOf, suggestPlural, summarizeChanges, toTypeName, typeChangeDropsValues, uniqueFieldsChangingLocalization, upgradeLockFile, validateDefinition, validateRichText, validateSchema, withDerivedPlural, withSiteCovered };
3198
+ export { API_KEY_PATTERN, BIGINTEGER_PATTERN, BUILT_IN_THEME_KEYS, CANVAS_ELIGIBLE, CHANGE_KINDS, CODE_LANGUAGES, COMPONENT_TYPE_SUFFIXES, CUSTOM_EDITOR_ID_PATTERN, ComponentDefinitionInputSchema, ComponentDisplayInputSchema, DATA_TYPES, DATETIME_PATTERN, DATE_PATTERN, DECIMAL_PATTERN, DEFAULT_EDITORS, DEFAULT_SEO_KEYS, DEFINITION_KINDS, DefinitionInputSchema, EDITOR_CATALOG, EMPTY_SEO_DEFAULTS, ENTRY_LAYOUTS, EditorChoiceInputSchema, EnumValueSchema, FIELD_WIDTHS, FieldInputSchema, INLINE_TITLE_TYPES, INTERFACE_TYPE_SUFFIX, INVALID_TEXT_MESSAGE, LOCALE_CODE_PATTERN, LOCK_FILE_FORMAT_VERSION, LOCK_FILE_PATH, LocaleInputSchema, LockEntrySchema, LockFileError, LockFileSchema, MARK_RULES, MAX_API_KEY_LENGTH, MAX_COMPONENT_DEPTH, MAX_DESCRIPTION_LENGTH, MAX_FALLBACK_CHAIN, MAX_FIELDS_PER_DEFINITION, MAX_INHERITANCE_DEPTH, MAX_LABEL_LENGTH, MAX_RICHTEXT_DEPTH, MAX_ROUTE_KEY_LENGTH, MEDIA_KINDS, MODEL_KINDS, MODEL_TYPE_SUFFIXES, MUTATION_PREFIXES, ModelDefinitionInputSchema, ModelDisplayInputSchema, NODE_RULES, PLURAL_FALLBACK_SUFFIX, REFERENCE_DATA_TYPES, RELATION_CARDINALITIES, RESERVED_DEFINITION_API_KEYS, RESERVED_FIELD_API_KEYS, RESERVED_QUERY_NAMES, RESERVED_TYPE_NAMES, RICHTEXT_FORMAT, RICHTEXT_FORMAT_VERSION, ROUTE_KEY_PATTERN, SAFE_LINK_PATTERN, SCALAR_DATA_TYPES, SCHEMA_KIND_DIRECTORIES, SEO_COMPONENT_API_KEY, SEO_COMPONENT_ID, SEO_DESCRIPTION_SOFT_MAX, SEO_EDITOR_ID, SEO_FIELD_IDS, SEO_TITLE_PLACEHOLDER, SEO_TITLE_SOFT_MAX, SEO_TITLE_TEMPLATE_PATTERN, SEO_TWITTER_HANDLE_PATTERN, SETTINGS_SCHEMAS, SITES_DIRECTORY, SLUG_PATTERN, SORT_DIRECTIONS, STABLE_ID_PATTERN, STORAGE_FAMILY, STRIP_DEFAULT_COUNT, SchemaValidationError, SeoDefaultsSchema, SeoLocaleDefaultsSchema, TEXT_TITLE_FIELD_TYPES, THEME_BRAND_TOKENS, THEME_COLOR_PATTERN, THEME_DARK_UI_PAIRS, THEME_KEY_PATTERN, THEME_SEMANTIC_TOKENS, THEME_TEXT_PAIRS, THEME_TOKENS, THEME_UI_PAIRS, THEME_VARIANTS, TIME_PATTERN, TITLE_FIELD_TYPES, UID_PATTERN, UNIQUE_CAPABLE_DATA_TYPES, ancestorChain, applyTitleTemplate, assignIds, canonicalJson, changeDropsValues, checkApiKeySyntax, checkDefaultValue, checkDisplay, checkInheritance, checkThemeContrast, classifyChange, classifyChanges, classifyLocaleChange, collectionQueryName, contrastRatio, createDefinitionIndex, createStableId, decideSync, diffDefinitions, effectiveFormLayout, effectiveLayout, effectiveTitleField, embeddedComponentIds, entryLayoutOf, escapeHtml, findChildDefinitions, findDependentModels, findInvalidText, findReferencingDefinitions, foldApiKey, generatedNames, hashDefinition, isApiKeySyntaxValid, isCanvasEligible, isComponentDefinition, isCoverEligible, isCustomEditorId, isDataType, isDocumentPlaceable, isEmptyRichText, isModelDefinition, isSeoField, isStableId, isValidText, isValidTitleTemplate, issue, listCompatibleEditors, lockCoversSite, lockEntriesForSite, mergeDisplay, mergePulledLock, normalizeDefinition, ownFields, parseDefinition, parseLockFile, plainTextToRichText, renderRichTextHtml, renormalizeDefinition, resolveModelDefinition, resolveSeo, richTextBodyOf, richTextMediaIds, richTextPlainText, richTextToPlainText, routeKeyOf, routePathOf, schemaFilePath, scopeDirectory, scopeOfSchemaFilePath, seoComponentDefinition, seoDefaultsForLocale, serializeDefinition, serializeLockFile, sha256, splitRoutePath, storageFamilyOf, storedEntryLayout, stripFieldsOf, suggestPlural, summarizeChanges, toTypeName, typeChangeDropsValues, uniqueFieldsChangingLocalization, upgradeLockFile, validateDefinition, validateRichText, validateSchema, withDerivedPlural, withSiteCovered };
3193
3199
 
3194
3200
  //# sourceMappingURL=index.js.map