@cloudcannon/configuration-types 0.0.37 → 0.0.38

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.
Files changed (44) hide show
  1. package/dist/cloudcannon-config.latest.schema.json +9352 -10957
  2. package/dist/cloudcannon-config.legacy-eleventy.schema.json +9476 -11075
  3. package/dist/cloudcannon-config.legacy-hugo.schema.json +9424 -11028
  4. package/dist/cloudcannon-config.legacy-jekyll.schema.json +9476 -11075
  5. package/dist/cloudcannon-config.legacy-reader.schema.json +5882 -7489
  6. package/package.json +19 -21
  7. package/src/build-coupled.ts +295 -0
  8. package/src/cascade.ts +38 -0
  9. package/src/configuration.ts +421 -0
  10. package/src/documentation.ts +22 -0
  11. package/src/editables.ts +243 -0
  12. package/src/icon.ts +3597 -0
  13. package/src/image-options.ts +72 -0
  14. package/src/index.ts +40 -0
  15. package/src/inputs.ts +993 -0
  16. package/src/markdown.ts +97 -0
  17. package/src/mimetype.ts +445 -0
  18. package/src/paths.ts +43 -0
  19. package/src/preview.ts +125 -0
  20. package/src/select-values.ts +26 -0
  21. package/src/snippets.ts +113 -0
  22. package/src/source-editor.ts +68 -0
  23. package/src/structures.ts +120 -0
  24. package/src/syntax.ts +183 -0
  25. package/src/timezone.ts +607 -0
  26. package/src/build-coupled.d.ts +0 -315
  27. package/src/cascade.d.ts +0 -37
  28. package/src/cloudcannon-config.schema.json +0 -79
  29. package/src/configuration.d.ts +0 -750
  30. package/src/documentation.d.ts +0 -18
  31. package/src/editables.d.ts +0 -252
  32. package/src/icon.d.ts +0 -3585
  33. package/src/image-resizeable.d.ts +0 -65
  34. package/src/index.d.ts +0 -36
  35. package/src/inputs.d.ts +0 -1647
  36. package/src/javascript-api.d.ts +0 -204
  37. package/src/markdown.d.ts +0 -103
  38. package/src/paths.d.ts +0 -44
  39. package/src/preview.d.ts +0 -110
  40. package/src/select-values.d.ts +0 -6
  41. package/src/snippets.d.ts +0 -227
  42. package/src/source-editor.d.ts +0 -92
  43. package/src/structures.d.ts +0 -113
  44. package/src/timezone.d.ts +0 -596
package/src/preview.ts ADDED
@@ -0,0 +1,125 @@
1
+ import * as z from 'zod';
2
+
3
+ const PreviewKeyEntrySchema = z.object({
4
+ key: z.string().meta({
5
+ description: 'The key used to access the value used for the preview.',
6
+ }),
7
+ });
8
+
9
+ const PreviewTemplateEntrySchema = z.object({
10
+ template: z.string().meta({
11
+ description:
12
+ 'A template string containing various placeholders for the value used in the preview.',
13
+ }),
14
+ });
15
+
16
+ const PreviewEntrySchema = z
17
+ .union([
18
+ z.array(z.union([PreviewKeyEntrySchema, PreviewTemplateEntrySchema, z.string(), z.boolean()])),
19
+ z.string(),
20
+ z.boolean(),
21
+ ])
22
+ .meta({
23
+ id: 'PreviewEntry',
24
+ });
25
+
26
+ const TextPreviewSchema = PreviewEntrySchema.meta({
27
+ id: 'preview.text',
28
+ description: 'Controls the main text shown per item.',
29
+ });
30
+
31
+ const ImagePreviewSchema = PreviewEntrySchema.meta({
32
+ id: 'preview.image',
33
+ description: 'Controls the image shown per item.',
34
+ });
35
+
36
+ const IconPreviewSchema = PreviewEntrySchema.meta({
37
+ id: 'preview.icon',
38
+ description: 'Controls the icon shown per item. Must result in a Material Symbol name.',
39
+ });
40
+
41
+ export const IconColorSchema = PreviewEntrySchema.meta({
42
+ id: 'preview.icon_color',
43
+ description: 'Controls the color of the icon.',
44
+ });
45
+
46
+ export const IconBackgroundColorSchema = PreviewEntrySchema.meta({
47
+ id: 'preview.icon_background_color',
48
+ description: 'Controls the background color of the icon.',
49
+ });
50
+
51
+ export const PreviewGallerySchema = z
52
+ .object({
53
+ text: TextPreviewSchema.optional(),
54
+ image: ImagePreviewSchema.optional(),
55
+ icon: IconPreviewSchema.optional(),
56
+ icon_color: IconColorSchema.optional(),
57
+ icon_background_color: IconBackgroundColorSchema.optional(),
58
+ fit: z.enum(['padded', 'cover', 'contain', 'cover-top']).default('padded').optional().meta({
59
+ description: 'Controls how the gallery image is positioned within the gallery.',
60
+ }),
61
+ background_color: PreviewEntrySchema.optional().meta({
62
+ description: 'Controls the background color gallery area.',
63
+ }),
64
+ })
65
+ .meta({
66
+ id: 'preview.gallery',
67
+ title: 'Preview Gallery',
68
+ description: 'Configuration for gallery-style previews.',
69
+ });
70
+
71
+ export const PreviewMetadataSchema = z
72
+ .object({
73
+ text: TextPreviewSchema.optional(),
74
+ image: ImagePreviewSchema.optional(),
75
+ icon: IconPreviewSchema.optional(),
76
+ icon_color: IconColorSchema.optional(),
77
+ icon_background_color: IconBackgroundColorSchema.optional(),
78
+ })
79
+ .meta({
80
+ id: 'preview.metadata',
81
+ title: 'Preview Metadata',
82
+ description:
83
+ 'Metadata configuration for preview items including text, image, and icon options.',
84
+ });
85
+
86
+ export const PreviewSchema = z
87
+ .object({
88
+ text: TextPreviewSchema.optional(),
89
+ subtext: PreviewEntrySchema.optional().meta({
90
+ description: 'Controls the supporting text shown per item.',
91
+ }),
92
+ image: ImagePreviewSchema.optional(),
93
+ icon: IconPreviewSchema.optional(),
94
+ icon_color: IconColorSchema.optional(),
95
+ icon_background_color: IconBackgroundColorSchema.optional(),
96
+ metadata: z.array(PreviewMetadataSchema).optional().meta({
97
+ description: 'Defines a list of items that can contain an image, icon, and text.',
98
+ }),
99
+ gallery: PreviewGallerySchema.optional().meta({
100
+ description: 'Details for large image/icon preview per item.',
101
+ }),
102
+ })
103
+ .meta({
104
+ id: 'preview',
105
+ title: 'Preview',
106
+ description:
107
+ 'Configuration for how content items are visually previewed in the CloudCannon interface.',
108
+ });
109
+
110
+ export const PickerPreviewSchema = z
111
+ .object({
112
+ // This needs to extend it this way, rather than calling PreviewSchema.meta({}).
113
+ // Otherwise, it seems to override in a way that does not allow us to remove `"id": "preview"`
114
+ // during JSONSchema generate.
115
+ ...PreviewSchema.shape,
116
+ })
117
+ .meta({
118
+ id: 'picker_preview',
119
+ title: 'Picker Preview',
120
+ description: 'Changes the way items are previewed in the CMS while being chosen.',
121
+ });
122
+
123
+ export type PreviewGallery = z.infer<typeof PreviewGallerySchema>;
124
+ export type PreviewMetadata = z.infer<typeof PreviewMetadataSchema>;
125
+ export type Preview = z.infer<typeof PreviewSchema>;
@@ -0,0 +1,26 @@
1
+ import * as z from 'zod';
2
+
3
+ export const SelectDataValuesSchema = z
4
+ .union([
5
+ z.array(z.string()),
6
+ z.array(z.record(z.string(), z.string())),
7
+ z.record(z.string(), z.string()),
8
+ z.array(z.record(z.string(), z.unknown())),
9
+ z.record(z.string(), z.unknown()),
10
+ ])
11
+ .meta({
12
+ id: 'SelectDataValues',
13
+ title: 'Select Data Values',
14
+ description:
15
+ 'Data formats for populating select and multiselect input options, supporting arrays and objects.',
16
+ });
17
+
18
+ export const SelectDataSchema = z.record(z.string(), SelectDataValuesSchema).meta({
19
+ id: '_select_data',
20
+ title: 'Select Data',
21
+ description:
22
+ 'Fixed datasets that can be referenced by the _Values_ configuration for _Select_ and _Multiselect_ inputs.',
23
+ });
24
+
25
+ export type SelectDataValues = z.infer<typeof SelectDataValuesSchema>;
26
+ export type SelectData = z.infer<typeof SelectDataSchema>;
@@ -0,0 +1,113 @@
1
+ import * as z from 'zod';
2
+ import { ReducedCascadeSchema } from './cascade';
3
+ import { PickerPreviewSchema, PreviewSchema } from './preview';
4
+
5
+ export const SnippetConfigSchema = z
6
+ .object({
7
+ ...ReducedCascadeSchema.shape,
8
+ preview: PreviewSchema.optional(),
9
+ picker_preview: PickerPreviewSchema.optional(),
10
+ })
11
+ .extend({
12
+ snippet: z.string().optional().meta({
13
+ description: 'Name of the snippet.',
14
+ }),
15
+ template: z.string().optional().meta({
16
+ description:
17
+ 'The template that this snippet should inherit, out of the available Shortcode Templates.',
18
+ }),
19
+ inline: z.boolean().optional().meta({
20
+ description:
21
+ 'Whether this snippet can appear inline (within a sentence). Defaults to false, which will treat this snippet as a block-level element in the content editor.',
22
+ }),
23
+ view: z.enum(['card', 'inline', 'gallery']).optional().meta({
24
+ description:
25
+ "Controls how selected items are rendered. Defaults to 'card', or 'inline' if `inline` is true.",
26
+ }),
27
+ strict_whitespace: z.boolean().optional().meta({
28
+ description: 'Whether this snippet treats whitespace as-is or not.',
29
+ }),
30
+ definitions: z.record(z.string(), z.unknown()).optional().meta({
31
+ description: 'The variables required for the selected template.',
32
+ }),
33
+ get alternate_formats() {
34
+ return z.array(SnippetConfigSchema).optional().meta({
35
+ description: 'Alternate configurations for this snippet.',
36
+ });
37
+ },
38
+ params: z.record(z.string(), z.unknown()).optional().meta({
39
+ description: 'The parameters of this snippet.',
40
+ }),
41
+ })
42
+ .meta({
43
+ id: 'SnippetConfig',
44
+ title: 'Snippet Configuration',
45
+ description: 'A snippet configuration.',
46
+ });
47
+
48
+ const SnippetImportSchema = z
49
+ .union([
50
+ z.boolean(),
51
+ z.object({
52
+ exclude: z.array(z.string()).meta({
53
+ description:
54
+ 'The list of excluded snippets. If unset, all snippets are excluded unless defined in `include`.',
55
+ }),
56
+ }),
57
+ z.object({
58
+ include: z.array(z.string()).meta({
59
+ description:
60
+ 'The list of included snippets. If unset, all snippets are included unless defined in `exclude`.',
61
+ }),
62
+ }),
63
+ ])
64
+ .meta({
65
+ id: 'SnippetImport',
66
+ title: 'Snippet Import',
67
+ description: 'Controls what snippets are available to import.',
68
+ });
69
+
70
+ export const SnippetsImportsSchema = z
71
+ .object({
72
+ hugo: SnippetImportSchema.optional().meta({
73
+ description: 'Default snippets for Hugo SSG.',
74
+ uniqueItems: true,
75
+ }),
76
+ jekyll: SnippetImportSchema.optional().meta({
77
+ description: 'Default snippets for Jekyll SSG.',
78
+ uniqueItems: true,
79
+ }),
80
+ mdx: SnippetImportSchema.optional().meta({
81
+ description: 'Default snippets for MDX-based content.',
82
+ uniqueItems: true,
83
+ }),
84
+ eleventy_liquid: SnippetImportSchema.optional().meta({
85
+ description: 'Default snippets for Eleventy SSG Liquid files.',
86
+ uniqueItems: true,
87
+ }),
88
+ eleventy_nunjucks: SnippetImportSchema.optional().meta({
89
+ description: 'Default snippets for Eleventy SSG Nunjucks files.',
90
+ uniqueItems: true,
91
+ }),
92
+ markdoc: SnippetImportSchema.optional().meta({
93
+ description: 'Default snippets for Markdoc-based content.',
94
+ uniqueItems: true,
95
+ }),
96
+ python_markdown_extensions: SnippetImportSchema.optional().meta({
97
+ description: 'Default snippets for content using Python markdown extensions.',
98
+ uniqueItems: true,
99
+ }),
100
+ docusaurus_mdx: SnippetImportSchema.optional().meta({
101
+ description: 'Default snippets for Docusaurus SSG.',
102
+ uniqueItems: true,
103
+ }),
104
+ })
105
+ .meta({
106
+ id: '_snippets_imports',
107
+ title: 'Snippets Imports',
108
+ description:
109
+ 'Provides control over which snippets are available to use and/or extend within `_snippets`.',
110
+ });
111
+
112
+ export type SnippetConfig = z.infer<typeof SnippetConfigSchema>;
113
+ export type SnippetsImports = z.infer<typeof SnippetsImportsSchema>;
@@ -0,0 +1,68 @@
1
+ import * as z from 'zod';
2
+
3
+ export const ThemeSchema = z
4
+ .enum([
5
+ 'ambiance',
6
+ 'chaos',
7
+ 'chrome',
8
+ 'clouds',
9
+ 'clouds_midnight',
10
+ 'cobalt',
11
+ 'crimson_editor',
12
+ 'dawn',
13
+ 'dracula',
14
+ 'dreamweaver',
15
+ 'eclipse',
16
+ 'github',
17
+ 'gob',
18
+ 'gruvbox',
19
+ 'idle_fingers',
20
+ 'iplastic',
21
+ 'katzenmilch',
22
+ 'kr_theme',
23
+ 'kuroir',
24
+ 'merbivore',
25
+ 'merbivore_soft',
26
+ 'mono_industrial',
27
+ 'monokai',
28
+ 'nord_dark',
29
+ 'pastel_on_dark',
30
+ 'solarized_dark',
31
+ 'solarized_light',
32
+ 'sqlserver',
33
+ 'terminal',
34
+ 'textmate',
35
+ 'tomorrow',
36
+ 'tomorrow_night',
37
+ 'tomorrow_night_blue',
38
+ 'tomorrow_night_bright',
39
+ 'tomorrow_night_eighties',
40
+ 'twilight',
41
+ 'vibrant_ink',
42
+ 'xcode',
43
+ ])
44
+ .meta({
45
+ id: 'Theme',
46
+ });
47
+
48
+ export const SourceEditorSchema = z.object({
49
+ tab_size: z.number().default(2).optional().meta({
50
+ description:
51
+ 'This key defines the auto-indentation of each line and how many spaces a tab indentation counts as.\n\nBy default, this key is `2`.\n\nhttps://cloudcannon.com/documentation/articles/the-source-editor/#source_editor.tab_size',
52
+ }),
53
+ theme: ThemeSchema.default('monokai').optional().meta({
54
+ title: 'Theme',
55
+ description:
56
+ 'This key defines the color theme for syntax highlighting.\n\nBy default, this key is `monokai`.\n\nhttps://cloudcannon.com/documentation/articles/the-source-editor/#source_editor.theme',
57
+ }),
58
+ show_gutter: z.boolean().default(true).optional().meta({
59
+ description:
60
+ 'This key toggles the gutter on the left of the editing interface, displaying line numbers and code folding controls.\n\nBy default, this key is `true`.\n\nhttps://cloudcannon.com/documentation/articles/the-source-editor/#source_editor.show_gutter',
61
+ }),
62
+ soft_wrap: z.boolean().default(false).optional().meta({
63
+ description: 'Enables soft wrapping of the code.',
64
+ }),
65
+ });
66
+
67
+ export type Theme = z.infer<typeof ThemeSchema>;
68
+ export type SourceEditor = z.infer<typeof SourceEditorSchema>;
@@ -0,0 +1,120 @@
1
+ import * as z from 'zod';
2
+ import { DocumentationSchema } from './documentation';
3
+ import { IconSchema } from './icon';
4
+ import { InputsSchema, ObjectInputGroupSchema } from './inputs';
5
+ import { PickerPreviewSchema, PreviewSchema } from './preview';
6
+ import { SelectDataSchema } from './select-values';
7
+
8
+ const StructureBaseSchema = z.object({
9
+ reorder_inputs: z.boolean().default(true).optional().meta({
10
+ description:
11
+ 'If true, inputs are sorted to match when editing. Extra inputs are ordered after expected inputs, unless `remove_extra_inputs` is true. Defaults to true.',
12
+ }),
13
+ hide_extra_inputs: z.boolean().default(false).optional().meta({
14
+ description:
15
+ 'Hides unexpected inputs when editing. Has no effect if `remove_extra_inputs` is true. Defaults to false.',
16
+ }),
17
+ remove_empty_inputs: z.boolean().default(false).optional().meta({
18
+ description:
19
+ 'If checked, empty inputs are removed from the source file on save. Removed inputs will be available for editing again, provided they are in the matching schema/structure. Defaults to false.',
20
+ }),
21
+ remove_extra_inputs: z.boolean().default(true).optional().meta({
22
+ description: 'If checked, extra inputs are removed when editing. Defaults to true.',
23
+ }),
24
+ });
25
+
26
+ export const StructureValueSchema = StructureBaseSchema.extend({
27
+ preview: PreviewSchema.optional(),
28
+ picker_preview: PickerPreviewSchema.optional(),
29
+
30
+ // This is the ReducedCascadeSchema - can't seem to reuse it due to Zod's limitations.
31
+ get _inputs() {
32
+ return InputsSchema.optional();
33
+ },
34
+ _select_data: SelectDataSchema.optional(),
35
+ get _structures() {
36
+ return StructuresSchema.optional();
37
+ },
38
+
39
+ id: z.string().optional().meta({
40
+ description:
41
+ "A unique reference value used when referring to this structure value from the Object input's assigned_structures option.",
42
+ }),
43
+ default: z.boolean().default(false).optional().meta({
44
+ description:
45
+ 'If set to true, this item will be considered the default type for this structure. If the type of a value within a structure cannot be inferred based on its id_key or matching fields, then it will fall back to this item. If multiple items have default set to true, only the first item will be used.',
46
+ }),
47
+ icon: IconSchema.optional().meta({
48
+ description:
49
+ 'An icon used when displaying the structure (defaults to either format_list_bulleted for items in arrays, or notes otherwise).',
50
+ }),
51
+ image: z.string().optional().meta({
52
+ description:
53
+ 'Path to an image in your source files used when displaying the structure. Can be either a source (has priority) or output path.',
54
+ }),
55
+ label: z.string().optional().meta({
56
+ description: 'Used as the main text in the interface for this value.',
57
+ }),
58
+ tags: z.array(z.string()).optional().meta({
59
+ description: 'Used to group and filter items when selecting from a modal.',
60
+ }),
61
+ get groups() {
62
+ return z.array(ObjectInputGroupSchema).optional().meta({
63
+ description:
64
+ 'Allows you to group the inputs inside this object together without changing the data structure.',
65
+ });
66
+ },
67
+ place_groups_below: z.boolean().default(false).optional().meta({
68
+ description: 'Controls which order input groups and ungrouped inputs appear in.',
69
+ }),
70
+ tabbed: z.boolean().default(false).optional().meta({
71
+ description: 'Show nested objects as tabs. Requires all top-level keys to be objects.',
72
+ }),
73
+ value: z.unknown().meta({
74
+ description: 'The actual value used when items are added after selection.',
75
+ }),
76
+ comment: z.string().optional().meta({
77
+ description:
78
+ 'Provides short descriptive text for editors shown in the Data Editor for expanded values matching this Structure value. Has no default. Supports a limited set of Markdown: links, bold, italic, subscript, superscript, and inline code elements are allowed.',
79
+ }),
80
+ documentation: DocumentationSchema.optional().meta({
81
+ description:
82
+ 'Provides a custom link for documentation for editors shown in the Data Editor for expanded values matching this Structure value. Has no default.',
83
+ }),
84
+ }).meta({
85
+ title: 'Structure Value',
86
+ description:
87
+ 'A single value option within a structure, defining the data format and appearance for content editors.',
88
+ });
89
+
90
+ export const StructureSchema = z
91
+ .object({
92
+ ...StructureBaseSchema.shape,
93
+ values: z.array(StructureValueSchema).meta({
94
+ description: 'Defines what values are available to add when using this structure.',
95
+ }),
96
+ id_key: z.string().default('_type').optional().meta({
97
+ description:
98
+ 'Defines what key should be used to detect which structure an item is. If this key is not found in the existing structure, a comparison of key names is used. Defaults to "_type".',
99
+ }),
100
+ style: z.enum(['select', 'modal']).default('select').optional().meta({
101
+ description:
102
+ 'Defines whether options are shown to your editors in a select menu (select, default) or a modal pop up window (modal) when adding a new item.',
103
+ }),
104
+ })
105
+ .meta({
106
+ id: 'Structure',
107
+ title: 'Structure',
108
+ description:
109
+ 'Provides data formats when adding new items to arrays and objects, with options for how editors choose from available values.',
110
+ });
111
+
112
+ export const StructuresSchema = z.record(z.string(), StructureSchema).meta({
113
+ id: '_structures',
114
+ title: 'Structures',
115
+ description:
116
+ 'Structured values for editors adding new items to arrays and objects. Entries here can be referenced in the configuration for `array` or `object` inputs.',
117
+ });
118
+
119
+ export type StructureValue = z.infer<typeof StructureValueSchema>;
120
+ export type Structure = z.infer<typeof StructureSchema>;
package/src/syntax.ts ADDED
@@ -0,0 +1,183 @@
1
+ import * as z from 'zod';
2
+
3
+ export const SyntaxSchema = z
4
+ .enum([
5
+ 'abap',
6
+ 'abc',
7
+ 'actionscript',
8
+ 'ada',
9
+ 'alda',
10
+ 'apache_conf',
11
+ 'apex',
12
+ 'applescript',
13
+ 'aql',
14
+ 'asciidoc',
15
+ 'asl',
16
+ 'assembly_x86',
17
+ 'autohotkey',
18
+ 'batchfile',
19
+ 'c9search',
20
+ 'c_cpp',
21
+ 'cirru',
22
+ 'clojure',
23
+ 'cobol',
24
+ 'coffee',
25
+ 'coldfusion',
26
+ 'crystal',
27
+ 'csharp',
28
+ 'csound_document',
29
+ 'csound_orchestra',
30
+ 'csound_score',
31
+ 'csp',
32
+ 'css',
33
+ 'curly',
34
+ 'd',
35
+ 'dart',
36
+ 'diff',
37
+ 'django',
38
+ 'dockerfile',
39
+ 'dot',
40
+ 'drools',
41
+ 'edifact',
42
+ 'eiffel',
43
+ 'ejs',
44
+ 'elixir',
45
+ 'elm',
46
+ 'erlang',
47
+ 'forth',
48
+ 'fortran',
49
+ 'fsharp',
50
+ 'fsl',
51
+ 'ftl',
52
+ 'gcode',
53
+ 'gherkin',
54
+ 'gitignore',
55
+ 'glsl',
56
+ 'gobstones',
57
+ 'golang',
58
+ 'graphqlschema',
59
+ 'groovy',
60
+ 'haml',
61
+ 'handlebars',
62
+ 'haskell',
63
+ 'haskell_cabal',
64
+ 'haxe',
65
+ 'hjson',
66
+ 'html',
67
+ 'html_elixir',
68
+ 'html_ruby',
69
+ 'ini',
70
+ 'io',
71
+ 'jack',
72
+ 'jade',
73
+ 'java',
74
+ 'javascript',
75
+ 'json5',
76
+ 'json',
77
+ 'jsoniq',
78
+ 'jsp',
79
+ 'jssm',
80
+ 'jsx',
81
+ 'julia',
82
+ 'kotlin',
83
+ 'latex',
84
+ 'less',
85
+ 'liquid',
86
+ 'lisp',
87
+ 'livescript',
88
+ 'logiql',
89
+ 'logtalk',
90
+ 'lsl',
91
+ 'lua',
92
+ 'luapage',
93
+ 'lucene',
94
+ 'makefile',
95
+ 'markdown',
96
+ 'mask',
97
+ 'matlab',
98
+ 'maze',
99
+ 'mediawiki',
100
+ 'mel',
101
+ 'mixal',
102
+ 'mushcode',
103
+ 'mysql',
104
+ 'nginx',
105
+ 'nim',
106
+ 'nix',
107
+ 'nsis',
108
+ 'nunjucks',
109
+ 'objectivec',
110
+ 'ocaml',
111
+ 'pascal',
112
+ 'perl6',
113
+ 'perl',
114
+ 'pgsql',
115
+ 'php',
116
+ 'php_laravel_blade',
117
+ 'pig',
118
+ 'plain_text',
119
+ 'powershell',
120
+ 'praat',
121
+ 'prisma',
122
+ 'prolog',
123
+ 'properties',
124
+ 'protobuf',
125
+ 'puppet',
126
+ 'python',
127
+ 'qml',
128
+ 'r',
129
+ 'razor',
130
+ 'rdoc',
131
+ 'red',
132
+ 'redshift',
133
+ 'rhtml',
134
+ 'rst',
135
+ 'ruby',
136
+ 'rust',
137
+ 'sass',
138
+ 'scad',
139
+ 'scala',
140
+ 'scheme',
141
+ 'scss',
142
+ 'sh',
143
+ 'sjs',
144
+ 'slim',
145
+ 'smarty',
146
+ 'snippets',
147
+ 'soy_template',
148
+ 'space',
149
+ 'sparql',
150
+ 'sql',
151
+ 'sqlserver',
152
+ 'stylus',
153
+ 'svg',
154
+ 'swift',
155
+ 'tcl',
156
+ 'terraform',
157
+ 'tex',
158
+ 'text',
159
+ 'textile',
160
+ 'toml',
161
+ 'tsx',
162
+ 'turtle',
163
+ 'twig',
164
+ 'typescript',
165
+ 'vala',
166
+ 'vbscript',
167
+ 'velocity',
168
+ 'verilog',
169
+ 'vhdl',
170
+ 'visualforce',
171
+ 'wollok',
172
+ 'xml',
173
+ 'xquery',
174
+ 'yaml',
175
+ 'zeek',
176
+ ])
177
+ .meta({
178
+ id: 'Syntax',
179
+ title: 'Syntax',
180
+ description: 'Available syntax highlighting languages for code editors in CloudCannon.',
181
+ });
182
+
183
+ export type Schema = z.infer<typeof SyntaxSchema>;