@tinacms/schema-tools 0.0.0-d08af95-20241024210716 → 0.0.0-d4c653b-20251027224657

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.
@@ -1,4 +1,8 @@
1
- /**
2
-
3
- */
4
- export declare function addNamespaceToSchema<T extends object | string>(maybeNode: T, namespace?: string[]): T;
1
+ type Node = {
2
+ name?: string;
3
+ value?: string;
4
+ namespace?: string[];
5
+ [key: string]: any;
6
+ };
7
+ export declare function addNamespaceToSchema<T extends Node | string>(maybeNode: T, namespace?: string[]): T;
8
+ export {};
@@ -1,5 +1,23 @@
1
1
  import type { FC } from 'react';
2
2
  import type React from 'react';
3
+ export declare const CONTENT_FORMATS: readonly ["mdx", "md", "markdown", "json", "yaml", "yml", "toml"];
4
+ export type ContentFormat = (typeof CONTENT_FORMATS)[number];
5
+ export type ContentFrontmatterFormat = 'yaml' | 'toml' | 'json';
6
+ export type Parser = {
7
+ type: 'mdx';
8
+ } | {
9
+ type: 'markdown';
10
+ /**
11
+ * Tina will escape entities like `<` and `[` by default. You can choose to turn
12
+ * off all escaping, or specify HTML, so `<div>` will not be turned into `\<div>`
13
+ */
14
+ skipEscaping?: 'all' | 'html' | 'none';
15
+ } | {
16
+ /**
17
+ * Experimental: Returns the native Slate.js document as JSON. Ideal to retain the pure editor content structure.
18
+ */
19
+ type: 'slatejson';
20
+ };
3
21
  type Meta = {
4
22
  active?: boolean;
5
23
  dirty?: boolean;
@@ -111,6 +129,11 @@ export type UIField<Type, List extends boolean> = {
111
129
  type FieldGeneric<Type, List extends boolean | undefined, ExtraFieldUIProps = {}> = List extends true ? {
112
130
  list: true;
113
131
  ui?: UIField<Type, true> & ExtraFieldUIProps;
132
+ /**
133
+ * Defines where new items will be added in the list.
134
+ * If not specified, defaults to `append`.
135
+ */
136
+ addItemBehavior?: 'append' | 'prepend';
114
137
  } : List extends false ? {
115
138
  list?: false;
116
139
  ui?: UIField<Type, false> & ExtraFieldUIProps;
@@ -185,7 +208,7 @@ export type ReferenceField = (FieldGeneric<string, undefined, ReferenceFieldOpti
185
208
  export type PasswordField = (FieldGeneric<string, undefined> | FieldGeneric<string, false>) & BaseField & {
186
209
  type: 'password';
187
210
  };
188
- type toolbarItemName = 'heading' | 'link' | 'image' | 'quote' | 'ul' | 'ol' | 'code' | 'codeBlock' | 'bold' | 'italic' | 'raw' | 'embed' | 'mermaid';
211
+ type ToolbarOverrideType = 'heading' | 'link' | 'image' | 'quote' | 'ul' | 'ol' | 'code' | 'codeBlock' | 'bold' | 'italic' | 'raw' | 'embed' | 'mermaid' | 'table';
189
212
  type RichTextAst = {
190
213
  type: 'root';
191
214
  children: Record<string, unknown>[];
@@ -198,24 +221,21 @@ export type RichTextField<WithNamespace extends boolean = false> = (FieldGeneric
198
221
  * will be stored as frontmatter
199
222
  */
200
223
  isBody?: boolean;
201
- toolbarOverride?: toolbarItemName[];
224
+ /**@deprecated use overrides.toolbar */
225
+ toolbarOverride?: ToolbarOverrideType[];
202
226
  templates?: RichTextTemplate<WithNamespace>[];
227
+ overrides?: {
228
+ toolbar?: ToolbarOverrideType[];
229
+ /**Default set to true */
230
+ showFloatingToolbar?: boolean;
231
+ };
203
232
  /**
204
233
  * By default, Tina parses markdown with MDX, this is a more strict parser
205
234
  * that allows you to use structured content inside markdown (via `templates`).
206
235
  *
207
236
  * Specify `"markdown"` if you're having problems with Tina parsing your content.
208
237
  */
209
- parser?: {
210
- type: 'markdown';
211
- /**
212
- * Tina will escape entities like `<` and `[` by default. You can choose to turn
213
- * off all escaping, or specify HTML, so `<div>` will not be turned into `\<div>`
214
- */
215
- skipEscaping?: 'all' | 'html' | 'none';
216
- } | {
217
- type: 'mdx';
218
- };
238
+ parser?: Parser;
219
239
  };
220
240
  export type RichTextTemplate<WithNamespace extends boolean = false> = Template<WithNamespace> & {
221
241
  inline?: boolean;
@@ -371,7 +391,7 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
371
391
  /**
372
392
  * The Schema is used to define the shape of the content.
373
393
  *
374
- * https://tina.io/docs/reference/schema/
394
+ * https://tina.io/docs/r/the-config-file/
375
395
  */
376
396
  schema: Schema;
377
397
  /**
@@ -394,7 +414,7 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
394
414
  token?: string | null;
395
415
  ui?: {
396
416
  /**
397
- * When using Tina Cloud's branching feature, provide the URL for your given branch
417
+ * When using TinaCloud's branching feature, provide the URL for your given branch
398
418
  *
399
419
  * Eg. If you're deplying to Vercel, and your repo name is 'my-app',
400
420
  * Vercel's preview URL would be based on the branch:
@@ -408,11 +428,17 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
408
428
  * ```
409
429
  * [more info](https://vercel.com/docs/concepts/deployments/generated-urls#url-with-git-branch)
410
430
  */
411
- previewUrl: (context: {
431
+ previewUrl?: (context: {
412
432
  branch: string;
413
433
  }) => {
414
434
  url: string;
415
435
  };
436
+ /**
437
+ * Opt out of update checks - this will prevent the CMS for checking for new versions
438
+ * If true, the CMS will not check for updates.
439
+ * Defaults to false if not specified.
440
+ */
441
+ optOutOfUpdateCheck?: boolean;
416
442
  };
417
443
  /**
418
444
  * Configurations for the autogenerated GraphQL HTTP client
@@ -492,7 +518,7 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
492
518
  } | {
493
519
  /**
494
520
  * Use Git-backed assets for media, these values will
495
- * [Learn more](https://tina.io/docs/reference/media/repo-based/)
521
+ * [Learn more](https://tina.io/docs/r/repo-based-media/)
496
522
  */
497
523
  tina: {
498
524
  /**
@@ -521,7 +547,7 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
521
547
  } | {
522
548
  searchClient?: never;
523
549
  /**
524
- * Use the Tina Cloud search index
550
+ * Use the TinaCloud search index
525
551
  */
526
552
  tina: {
527
553
  /**
@@ -548,7 +574,7 @@ export interface Config<CMSCallback = undefined, FormifyCallback = undefined, Do
548
574
  maxSearchIndexFieldLength?: number;
549
575
  };
550
576
  /**
551
- * Used to override the default Tina Cloud API URL
577
+ * Used to override the default TinaCloud API URL
552
578
  *
553
579
  * [mostly for internal use only]
554
580
  */
@@ -567,7 +593,7 @@ export interface Schema<WithNamespace extends boolean = false> {
567
593
  /**
568
594
  * Collections represent a type of content (EX, blog post, page, author, etc). We recommend using singular naming in a collection (Ex: use post and not posts).
569
595
  *
570
- * https://tina.io/docs/reference/collections/
596
+ * https://tina.io/docs/r/content-modelling-collections/
571
597
  */
572
598
  collections: Collection<WithNamespace>[];
573
599
  /**
@@ -581,7 +607,7 @@ interface BaseCollection {
581
607
  name: string;
582
608
  path: string;
583
609
  indexes?: IndexType[];
584
- format?: 'json' | 'md' | 'markdown' | 'mdx' | 'yaml' | 'yml' | 'toml';
610
+ format?: ContentFormat;
585
611
  ui?: UICollection;
586
612
  /**
587
613
  * @deprecated - use `ui.defaultItem` on the each `template` instead
@@ -590,7 +616,7 @@ interface BaseCollection {
590
616
  /**
591
617
  * This format will be used to parse the markdown frontmatter
592
618
  */
593
- frontmatterFormat?: 'yaml' | 'toml' | 'json';
619
+ frontmatterFormat?: ContentFrontmatterFormat;
594
620
  /**
595
621
  * The delimiters used to parse the frontmatter.
596
622
  */
@@ -606,7 +632,7 @@ type TemplateCollection<WithNamespace extends boolean = false> = {
606
632
  /**
607
633
  * In most cases, just using fields is enough, however templates can be used when there are multiple variants of the same collection or object. For example in a "page" collection there might be a need for a marketing page template and a content page template, both under the collection "page".
608
634
  *
609
- * https://tina.io/docs/reference/templates/
635
+ * https://tina.io/docs/r/content-modelling-templates/
610
636
  */
611
637
  templates: Template<WithNamespace>[];
612
638
  fields?: undefined;
@@ -615,7 +641,7 @@ type FieldCollection<WithNamespace extends boolean = false> = {
615
641
  /**
616
642
  * Fields define the shape of the content and the user input.
617
643
  *
618
- * https://tina.io/docs/reference/fields/
644
+ * https://tina.io/docs/r/string-fields/
619
645
  */
620
646
  fields: TinaField<WithNamespace>[];
621
647
  templates?: undefined;
@@ -630,6 +656,7 @@ type Document = {
630
656
  relativePath: string;
631
657
  filename: string;
632
658
  extension: string;
659
+ hasReferences?: boolean;
633
660
  };
634
661
  };
635
662
  export interface UICollection<Form = any, CMS = any, TinaForm = any> {
@@ -1 +1,9 @@
1
1
  export declare const normalizePath: (filepath: string) => string;
2
+ /**
3
+ * Returns the given path such that:
4
+ * - The path separator is converted from '\' to '/' if necessary.
5
+ * - Duplicate '/' are removed
6
+ * - Leading and trailing '/' are cleared
7
+ * @param filepath Filepath to convert to its canonical form
8
+ */
9
+ export declare const canonicalPath: (filepath: string) => string;
@@ -1,6 +1,3 @@
1
- /**
2
-
3
- */
4
1
  import { z } from 'zod';
5
2
  import type { TinaField as TinaFieldType } from '../types/index';
6
3
  export declare const TinaFieldZod: z.ZodType<TinaFieldType>;
@@ -1,26 +1,23 @@
1
- /**
2
-
3
- */
4
1
  import { z } from 'zod';
5
2
  export declare const CollectionBaseSchema: z.ZodObject<{
6
3
  label: z.ZodOptional<z.ZodString>;
7
4
  name: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
8
5
  path: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
9
- format: z.ZodOptional<z.ZodEnum<["json", "md", "markdown", "mdx", "toml", "yaml", "yml"]>>;
6
+ format: z.ZodOptional<z.ZodEnum<["mdx", "md", "markdown", "json", "yaml", "yml", "toml"]>>;
10
7
  isAuthCollection: z.ZodOptional<z.ZodBoolean>;
11
8
  isDetached: z.ZodOptional<z.ZodBoolean>;
12
9
  }, "strip", z.ZodTypeAny, {
13
10
  name?: string;
14
11
  label?: string;
15
12
  path?: string;
16
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
13
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
17
14
  isDetached?: boolean;
18
15
  isAuthCollection?: boolean;
19
16
  }, {
20
17
  name?: string;
21
18
  label?: string;
22
19
  path?: string;
23
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
20
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
24
21
  isDetached?: boolean;
25
22
  isAuthCollection?: boolean;
26
23
  }>;
@@ -29,90 +26,90 @@ export declare const TinaCloudSchemaZod: z.ZodEffects<z.ZodObject<{
29
26
  label: z.ZodOptional<z.ZodString>;
30
27
  name: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
31
28
  path: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
32
- format: z.ZodOptional<z.ZodEnum<["json", "md", "markdown", "mdx", "toml", "yaml", "yml"]>>;
29
+ format: z.ZodOptional<z.ZodEnum<["mdx", "md", "markdown", "json", "yaml", "yml", "toml"]>>;
33
30
  isAuthCollection: z.ZodOptional<z.ZodBoolean>;
34
31
  isDetached: z.ZodOptional<z.ZodBoolean>;
35
32
  }, {
36
- fields: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodOptional<z.ZodArray<z.ZodType<import("..").TinaField, z.ZodTypeDef, import("..").TinaField>, "many">>, import("..").TinaField[], import("..").TinaField[]>, import("..").TinaField[], import("..").TinaField[]>, import("..").TinaField[], import("..").TinaField[]>, import("..").TinaField[], import("..").TinaField[]>;
33
+ fields: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodOptional<z.ZodArray<z.ZodType<import("../types/index").TinaField, z.ZodTypeDef, import("../types/index").TinaField>, "many">>, import("../types/index").TinaField[], import("../types/index").TinaField[]>, import("../types/index").TinaField[], import("../types/index").TinaField[]>, import("../types/index").TinaField[], import("../types/index").TinaField[]>, import("../types/index").TinaField[], import("../types/index").TinaField[]>;
37
34
  templates: z.ZodEffects<z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
38
35
  label: z.ZodString;
39
36
  name: z.ZodEffects<z.ZodString, string, string>;
40
- fields: z.ZodArray<z.ZodType<import("..").TinaField, z.ZodTypeDef, import("..").TinaField>, "many">;
37
+ fields: z.ZodArray<z.ZodType<import("../types/index").TinaField, z.ZodTypeDef, import("../types/index").TinaField>, "many">;
41
38
  }, "strip", z.ZodTypeAny, {
42
39
  name?: string;
43
- fields?: import("..").TinaField[];
40
+ fields?: import("../types/index").TinaField[];
44
41
  label?: string;
45
42
  }, {
46
43
  name?: string;
47
- fields?: import("..").TinaField[];
44
+ fields?: import("../types/index").TinaField[];
48
45
  label?: string;
49
46
  }>, {
50
47
  name?: string;
51
- fields?: import("..").TinaField[];
48
+ fields?: import("../types/index").TinaField[];
52
49
  label?: string;
53
50
  }, {
54
51
  name?: string;
55
- fields?: import("..").TinaField[];
52
+ fields?: import("../types/index").TinaField[];
56
53
  label?: string;
57
54
  }>, "many">>, {
58
55
  name?: string;
59
- fields?: import("..").TinaField[];
56
+ fields?: import("../types/index").TinaField[];
60
57
  label?: string;
61
58
  }[], {
62
59
  name?: string;
63
- fields?: import("..").TinaField[];
60
+ fields?: import("../types/index").TinaField[];
64
61
  label?: string;
65
62
  }[]>;
66
63
  }>, "strip", z.ZodTypeAny, {
67
64
  name?: string;
68
65
  templates?: {
69
66
  name?: string;
70
- fields?: import("..").TinaField[];
67
+ fields?: import("../types/index").TinaField[];
71
68
  label?: string;
72
69
  }[];
73
- fields?: import("..").TinaField[];
70
+ fields?: import("../types/index").TinaField[];
74
71
  label?: string;
75
72
  path?: string;
76
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
73
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
77
74
  isDetached?: boolean;
78
75
  isAuthCollection?: boolean;
79
76
  }, {
80
77
  name?: string;
81
78
  templates?: {
82
79
  name?: string;
83
- fields?: import("..").TinaField[];
80
+ fields?: import("../types/index").TinaField[];
84
81
  label?: string;
85
82
  }[];
86
- fields?: import("..").TinaField[];
83
+ fields?: import("../types/index").TinaField[];
87
84
  label?: string;
88
85
  path?: string;
89
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
86
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
90
87
  isDetached?: boolean;
91
88
  isAuthCollection?: boolean;
92
89
  }>, {
93
90
  name?: string;
94
91
  templates?: {
95
92
  name?: string;
96
- fields?: import("..").TinaField[];
93
+ fields?: import("../types/index").TinaField[];
97
94
  label?: string;
98
95
  }[];
99
- fields?: import("..").TinaField[];
96
+ fields?: import("../types/index").TinaField[];
100
97
  label?: string;
101
98
  path?: string;
102
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
99
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
103
100
  isDetached?: boolean;
104
101
  isAuthCollection?: boolean;
105
102
  }, {
106
103
  name?: string;
107
104
  templates?: {
108
105
  name?: string;
109
- fields?: import("..").TinaField[];
106
+ fields?: import("../types/index").TinaField[];
110
107
  label?: string;
111
108
  }[];
112
- fields?: import("..").TinaField[];
109
+ fields?: import("../types/index").TinaField[];
113
110
  label?: string;
114
111
  path?: string;
115
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
112
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
116
113
  isDetached?: boolean;
117
114
  isAuthCollection?: boolean;
118
115
  }>, "many">;
@@ -240,13 +237,13 @@ export declare const TinaCloudSchemaZod: z.ZodEffects<z.ZodObject<{
240
237
  name?: string;
241
238
  templates?: {
242
239
  name?: string;
243
- fields?: import("..").TinaField[];
240
+ fields?: import("../types/index").TinaField[];
244
241
  label?: string;
245
242
  }[];
246
- fields?: import("..").TinaField[];
243
+ fields?: import("../types/index").TinaField[];
247
244
  label?: string;
248
245
  path?: string;
249
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
246
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
250
247
  isDetached?: boolean;
251
248
  isAuthCollection?: boolean;
252
249
  }[];
@@ -278,13 +275,13 @@ export declare const TinaCloudSchemaZod: z.ZodEffects<z.ZodObject<{
278
275
  name?: string;
279
276
  templates?: {
280
277
  name?: string;
281
- fields?: import("..").TinaField[];
278
+ fields?: import("../types/index").TinaField[];
282
279
  label?: string;
283
280
  }[];
284
- fields?: import("..").TinaField[];
281
+ fields?: import("../types/index").TinaField[];
285
282
  label?: string;
286
283
  path?: string;
287
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
284
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
288
285
  isDetached?: boolean;
289
286
  isAuthCollection?: boolean;
290
287
  }[];
@@ -316,13 +313,13 @@ export declare const TinaCloudSchemaZod: z.ZodEffects<z.ZodObject<{
316
313
  name?: string;
317
314
  templates?: {
318
315
  name?: string;
319
- fields?: import("..").TinaField[];
316
+ fields?: import("../types/index").TinaField[];
320
317
  label?: string;
321
318
  }[];
322
- fields?: import("..").TinaField[];
319
+ fields?: import("../types/index").TinaField[];
323
320
  label?: string;
324
321
  path?: string;
325
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
322
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
326
323
  isDetached?: boolean;
327
324
  isAuthCollection?: boolean;
328
325
  }[];
@@ -354,13 +351,13 @@ export declare const TinaCloudSchemaZod: z.ZodEffects<z.ZodObject<{
354
351
  name?: string;
355
352
  templates?: {
356
353
  name?: string;
357
- fields?: import("..").TinaField[];
354
+ fields?: import("../types/index").TinaField[];
358
355
  label?: string;
359
356
  }[];
360
- fields?: import("..").TinaField[];
357
+ fields?: import("../types/index").TinaField[];
361
358
  label?: string;
362
359
  path?: string;
363
- format?: "markdown" | "mdx" | "json" | "md" | "yaml" | "yml" | "toml";
360
+ format?: "mdx" | "md" | "markdown" | "json" | "yaml" | "yml" | "toml";
364
361
  isDetached?: boolean;
365
362
  isAuthCollection?: boolean;
366
363
  }[];
@@ -0,0 +1,3 @@
1
+ export declare const duplicateFieldErrorMessage: (fields: string) => string;
2
+ export declare const duplicateTemplateErrorMessage: (templates: string) => string;
3
+ export declare const duplicateCollectionErrorMessage: (collection: string) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinacms/schema-tools",
3
- "version": "0.0.0-d08af95-20241024210716",
3
+ "version": "0.0.0-d4c653b-20251027224657",
4
4
  "main": "dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "exports": {
@@ -23,16 +23,16 @@
23
23
  ]
24
24
  },
25
25
  "devDependencies": {
26
- "@types/jest": "^29.5.13",
26
+ "@types/jest": "^29.5.14",
27
27
  "@types/micromatch": "^4.0.9",
28
- "@types/react": "^18.3.10",
28
+ "@types/react": "^18.3.18",
29
29
  "@types/yup": "^0.29.14",
30
30
  "jest": "^29.7.0",
31
31
  "react": "^18.3.1",
32
32
  "ts-jest": "^29.2.5",
33
- "typescript": "^5.6.2",
33
+ "typescript": "^5.7.3",
34
34
  "yup": "^0.32.11",
35
- "@tinacms/scripts": "1.3.0"
35
+ "@tinacms/scripts": "0.0.0-d4c653b-20251027224657"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": ">=16.14.0",
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "picomatch-browser": "2.2.6",
50
50
  "url-pattern": "^1.0.3",
51
- "zod": "^3.23.8"
51
+ "zod": "^3.24.2"
52
52
  },
53
53
  "scripts": {
54
54
  "build": "tinacms-scripts build",