diff --git a/package.json b/package.json index adca8c59..03b96ffc 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "glob-promise": "^3.4.0", "is-glob": "^4.0.1", "json-schema-ref-parser": "^9.0.9", - "json-stringify-safe": "^5.0.1", "lodash": "^4.17.20", "minimist": "^1.2.5", "mkdirp": "^1.0.4", diff --git a/src/generator.ts b/src/generator.ts index 077cc5a4..b4ef1931 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -1,4 +1,4 @@ -import {omit} from 'lodash' +import {memoize, omit} from 'lodash' import {DEFAULT_OPTIONS, Options} from './index' import { AST, @@ -156,7 +156,7 @@ function declareNamedTypes(ast: AST, options: Options, rootASTName: string, proc return type } -function generateType(ast: AST, options: Options): string { +function generateTypeUnmemoized(ast: AST, options: Options): string { const type = generateRawType(ast, options) if (options.strictIndexSignatures && ast.keyName === '[k: string]') { @@ -165,6 +165,7 @@ function generateType(ast: AST, options: Options): string { return type } +export const generateType = memoize(generateTypeUnmemoized) function generateRawType(ast: AST, options: Options): string { log('magenta', 'generator', ast) diff --git a/src/index.ts b/src/index.ts index cacc4118..632b7e9e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -157,7 +157,7 @@ export async function compile(schema: JSONSchema4, name: string, options: Partia const parsed = parse(normalized, _options) log('blue', 'parser', time(), '✅ Result:', parsed) - const optimized = optimize(parsed) + const optimized = optimize(parsed, _options) if (process.env.VERBOSE) { if (isDeepStrictEqual(parsed, optimized)) { log('cyan', 'optimizer', time(), '✅ No change') diff --git a/src/optimizer.ts b/src/optimizer.ts index b96f8a73..b7ccc628 100644 --- a/src/optimizer.ts +++ b/src/optimizer.ts @@ -1,11 +1,10 @@ -import stringify = require('json-stringify-safe') import {uniqBy} from 'lodash' +import {Options} from '.' +import {generateType} from './generator' import {AST, T_ANY, T_UNKNOWN} from './types/AST' import {log} from './utils' -export function optimize(ast: AST, processed = new Set()): AST { - log('cyan', 'optimizer', ast, processed.has(ast) ? '(FROM CACHE)' : '') - +export function optimize(ast: AST, options: Options, processed = new Set()): AST { if (processed.has(ast)) { return ast } @@ -15,7 +14,7 @@ export function optimize(ast: AST, processed = new Set()): AST { switch (ast.type) { case 'INTERFACE': return Object.assign(ast, { - params: ast.params.map(_ => Object.assign(_, {ast: optimize(_.ast, processed)})) + params: ast.params.map(_ => Object.assign(_, {ast: optimize(_.ast, options, processed)})) }) case 'INTERSECTION': case 'UNION': @@ -31,25 +30,40 @@ export function optimize(ast: AST, processed = new Set()): AST { return T_UNKNOWN } + // [A (named), A] -> [A (named)] + if ( + ast.params.every(_ => { + const a = generateType(omitStandaloneName(_), options) + const b = generateType(omitStandaloneName(ast.params[0]), options) + return a === b + }) && + ast.params.some(_ => _.standaloneName !== undefined) + ) { + log('cyan', 'optimizer', '[A, B, B] -> [A, B]', ast) + ast.params = ast.params.filter(_ => _.standaloneName !== undefined) + } + // [A, B, B] -> [A, B] - const shouldTakeStandaloneNameIntoAccount = ast.params.filter(_ => _.standaloneName).length > 1 - const params = uniqBy( - ast.params, - _ => ` - ${_.type}- - ${shouldTakeStandaloneNameIntoAccount ? _.standaloneName : ''}- - ${stringify((_ as any).params)} - ` - ) + const params = uniqBy(ast.params, _ => `${_.standaloneName}:${generateType(_, options)}`) if (params.length !== ast.params.length) { log('cyan', 'optimizer', '[A, B, B] -> [A, B]', ast) ast.params = params } return Object.assign(ast, { - params: ast.params.map(_ => optimize(_, processed)) + params: ast.params.map(_ => optimize(_, options, processed)) }) default: return ast } } + +// TODO: More clearly disambiguate standalone names vs. aliased names instead. +function omitStandaloneName(ast: A): A { + switch (ast.type) { + case 'ENUM': + return ast + default: + return {...ast, standaloneName: undefined} + } +} diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 6c644cd9..57fc6bad 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -4,6 +4,25 @@ The actual snapshot is saved in `test.ts.snap`. Generated by [AVA](https://avajs.dev). +## optimize.2.js + +> Expected output to match snapshot for e2e test: optimize.2.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type Bar = string;␊ + ␊ + export interface OptimizableSchema2 {␊ + foo: Bar;␊ + [k: string]: unknown;␊ + }␊ + ` + ## JSONSchema.js > Expected output to match snapshot for e2e test: JSONSchema.js @@ -1087,9 +1106,17 @@ Generated by [AVA](https://avajs.dev). | {␊ [k: string]: unknown;␊ }␊ - | {␊ + | ({␊ [k: string]: unknown;␊ - };␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + });␊ /**␊ * Parameter location␊ */␊ @@ -5837,9 +5864,17 @@ Generated by [AVA](https://avajs.dev). | {␊ [k: string]: unknown;␊ }␊ - | {␊ + | ({␊ [k: string]: unknown;␊ - };␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + } & {␊ + [k: string]: unknown;␊ + });␊ /**␊ * Parameter location␊ */␊ @@ -6315,6 +6350,2884 @@ Generated by [AVA](https://avajs.dev). }␊ ` +## realWorld.payloadCMS.js + +> Expected output to match snapshot for e2e test: realWorld.payloadCMS.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface RealWorld {}␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "mainMenu".␊ + */␊ + export interface MainMenu {␊ + items?: {␊ + type?: "link" | "subMenu";␊ + label: string;␊ + subMenu?: {␊ + column1?: (␊ + | {␊ + appearance?: "primary" | "secondary" | "arrow";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuLink";␊ + }␊ + | {␊ + content: string;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuDescription";␊ + }␊ + | {␊ + media: string | Media;␊ + headline: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuFeature";␊ + }␊ + )[];␊ + enableColumn2?: boolean;␊ + column2?: (␊ + | {␊ + appearance?: "primary" | "secondary" | "arrow";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuLink";␊ + }␊ + | {␊ + content: string;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuDescription";␊ + }␊ + | {␊ + media: string | Media;␊ + headline: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuFeature";␊ + }␊ + )[];␊ + };␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + secondaryItems?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "pages".␊ + */␊ + export interface Page {␊ + breadcrumbs?: {␊ + doc?: string | Page;␊ + url?: string;␊ + label?: string;␊ + id?: string;␊ + }[];␊ + title: string;␊ + showBreadcrumbs?: boolean;␊ + hero?: {␊ + type:␊ + | "basic"␊ + | "content"␊ + | "contentMedia"␊ + | "contentMedia2"␊ + | "contentSidebar"␊ + | "columnsBelow"␊ + | "quickNav"␊ + | "fullscreenBackground"␊ + | "fullscreenSlider";␊ + basic?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + content?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + contentMedia?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + media: string | Media;␊ + };␊ + contentMedia2?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + media: string | Media;␊ + };␊ + contentSidebar?: {␊ + mainContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + sidebarContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + };␊ + columnsBelow?: {␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + columns?: {␊ + heading: string;␊ + description: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + fullscreenBackground?: {␊ + invertColors?: boolean;␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + quickNav?: {␊ + invertColors?: boolean;␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + columns?: {␊ + heading: string;␊ + description: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + fullscreenSlider?: {␊ + useStaticContent?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + slides?: {␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + };␊ + };␊ + layout?: (␊ + | {␊ + appearance?: "default" | "condensed";␊ + sections?: {␊ + label: string;␊ + openOnInit?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "accordion";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "blackbaudForm";␊ + }␊ + | {␊ + invertColors?: boolean;␊ + backgroundMedia?: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "callToAction";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + cards?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media?: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardSlider";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + media1?: string | Media;␊ + media2?: string | Media;␊ + media3?: string | Media;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "careerSearch";␊ + }␊ + | {␊ + enableGrayBackground?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "content";␊ + }␊ + | {␊ + cellWidth?: "two" | "three";␊ + invertColors?: boolean;␊ + enableCellNumbers?: boolean;␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cells?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentSlider";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "housingMap";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "housingList";␊ + }␊ + | {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + form: string | Form;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "embeddedForm";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + locations?: (string | Location)[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "locations";␊ + }␊ + | {␊ + media: string | Media;␊ + useVimeo?: boolean;␊ + vimeoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + size?: "normal" | "wide" | "fullscreen";␊ + caption?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "media";␊ + }␊ + | {␊ + collage?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaCollage";␊ + }␊ + | {␊ + alignment: "contentOnLeft" | "contentOnRight";␊ + overlap?: boolean;␊ + invertColors?: boolean;␊ + richText: {␊ + [k: string]: unknown;␊ + }[];␊ + media: string | Media;␊ + embeddedVideo?: {␊ + embed?: boolean;␊ + poster?: string | Media;␊ + platform?: "youtube" | "vimeo";␊ + videoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + };␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaContent";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaSlider";␊ + }␊ + | {␊ + items?: {␊ + label: string;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "stickyList";␊ + }␊ + | {␊ + id?: string;␊ + blockName?: string;␊ + blockType: "divider";␊ + }␊ + )[];␊ + fullTitle?: string;␊ + excerpt?: string;␊ + meta?: {␊ + title?: string;␊ + description?: string;␊ + keywords?: string;␊ + image?: string | Media;␊ + };␊ + status?: "published" | "draft";␊ + slug?: string;␊ + parent?: string | Page;␊ + subsite?: string | Subsite;␊ + color?: "green" | "blue" | "red" | "purple";␊ + author?: string | User;␊ + preview?: string;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "posts".␊ + */␊ + export interface Post {␊ + title: string;␊ + hero?: {␊ + type:␊ + | "basic"␊ + | "content"␊ + | "contentMedia"␊ + | "contentMedia2"␊ + | "contentSidebar"␊ + | "columnsBelow"␊ + | "quickNav"␊ + | "fullscreenBackground"␊ + | "fullscreenSlider";␊ + basic?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + content?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + contentMedia?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + media: string | Media;␊ + };␊ + contentMedia2?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + media: string | Media;␊ + };␊ + contentSidebar?: {␊ + mainContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + sidebarContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + };␊ + columnsBelow?: {␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + columns?: {␊ + heading: string;␊ + description: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + fullscreenBackground?: {␊ + invertColors?: boolean;␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + quickNav?: {␊ + invertColors?: boolean;␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + columns?: {␊ + heading: string;␊ + description: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + };␊ + fullscreenSlider?: {␊ + useStaticContent?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + slides?: {␊ + backgroundMedia: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + };␊ + };␊ + layout?: (␊ + | {␊ + appearance?: "default" | "condensed";␊ + sections?: {␊ + label: string;␊ + openOnInit?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "accordion";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "blackbaudForm";␊ + }␊ + | {␊ + invertColors?: boolean;␊ + backgroundMedia?: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "callToAction";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + cards?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media?: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardSlider";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + media1?: string | Media;␊ + media2?: string | Media;␊ + media3?: string | Media;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "careerSearch";␊ + }␊ + | {␊ + enableGrayBackground?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "content";␊ + }␊ + | {␊ + cellWidth?: "two" | "three";␊ + invertColors?: boolean;␊ + enableCellNumbers?: boolean;␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cells?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentSlider";␊ + }␊ + | {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + form: string | Form;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "embeddedForm";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "housingMap";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "housingList";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + locations?: (string | Location)[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "locations";␊ + }␊ + | {␊ + media: string | Media;␊ + useVimeo?: boolean;␊ + vimeoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + size?: "normal" | "wide" | "fullscreen";␊ + caption?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "media";␊ + }␊ + | {␊ + collage?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaCollage";␊ + }␊ + | {␊ + alignment: "contentOnLeft" | "contentOnRight";␊ + overlap?: boolean;␊ + invertColors?: boolean;␊ + richText: {␊ + [k: string]: unknown;␊ + }[];␊ + media: string | Media;␊ + embeddedVideo?: {␊ + embed?: boolean;␊ + poster?: string | Media;␊ + platform?: "youtube" | "vimeo";␊ + videoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + };␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaContent";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaSlider";␊ + }␊ + | {␊ + items?: {␊ + label: string;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "stickyList";␊ + }␊ + | {␊ + id?: string;␊ + blockName?: string;␊ + blockType: "divider";␊ + }␊ + )[];␊ + slug?: string;␊ + category: string | PostCategory;␊ + subsite?: string | Subsite;␊ + meta?: {␊ + title?: string;␊ + description?: string;␊ + keywords?: string;␊ + image?: string | Media;␊ + };␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "housing".␊ + */␊ + export interface Housing {␊ + title: string;␊ + address?: {␊ + line1?: string;␊ + line2?: string;␊ + city?: string;␊ + state?:␊ + | "None"␊ + | "Alabama"␊ + | "Alaska"␊ + | "Arizona"␊ + | "Arkansas"␊ + | "California"␊ + | "Colorado"␊ + | "Connecticut"␊ + | "Delaware"␊ + | "Florida"␊ + | "Georgia"␊ + | "Hawaii"␊ + | "Idaho"␊ + | "Illinois"␊ + | "Indiana"␊ + | "Iowa"␊ + | "Kansas"␊ + | "Kentucky"␊ + | "Louisiana"␊ + | "Maine"␊ + | "Maryland"␊ + | "Massachusetts"␊ + | "Michigan"␊ + | "Minnesota"␊ + | "Mississippi"␊ + | "Missouri"␊ + | "Montana"␊ + | "Nebraska"␊ + | "Nevada"␊ + | "New Hampshire"␊ + | "New Jersey"␊ + | "New Mexico"␊ + | "New York"␊ + | "North Carolina"␊ + | "North Dakota"␊ + | "Ohio"␊ + | "Oklahoma"␊ + | "Oregon"␊ + | "Pennsylvania"␊ + | "Rhode Island"␊ + | "South Carolina"␊ + | "South Dakota"␊ + | "Tennessee"␊ + | "Texas"␊ + | "Utah"␊ + | "Vermont"␊ + | "Virginia"␊ + | "Washington"␊ + | "West Virginia"␊ + | "Wisconsin"␊ + | "Wyoming";␊ + zip?: string;␊ + coords?: {␊ + lat?: number;␊ + lng?: number;␊ + };␊ + };␊ + contacts?: {␊ + type?: "mailto" | "tel" | "fax";␊ + label?: string;␊ + value?: string;␊ + id?: string;␊ + }[];␊ + layout?: (␊ + | {␊ + appearance?: "default" | "condensed";␊ + sections?: {␊ + label: string;␊ + openOnInit?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "accordion";␊ + }␊ + | {␊ + invertColors?: boolean;␊ + backgroundMedia?: string | Media;␊ + useOverlay?: boolean;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "callToAction";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + cards?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media?: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + cardStyle: "fullBG" | "insetImage" | "noImage";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + media: string | Media;␊ + useOverlay?: boolean;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "cardSlider";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + media1?: string | Media;␊ + media2?: string | Media;␊ + media3?: string | Media;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "careerSearch";␊ + }␊ + | {␊ + enableGrayBackground?: boolean;␊ + columns?: {␊ + width: "oneThird" | "half" | "twoThirds" | "full";␊ + alignment: "left" | "center" | "right";␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "content";␊ + }␊ + | {␊ + cellWidth?: "two" | "three";␊ + invertColors?: boolean;␊ + enableCellNumbers?: boolean;␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + cells?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentGrid";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "contentSlider";␊ + }␊ + | {␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + form: string | Form;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "embeddedForm";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + locations?: (string | Location)[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "locations";␊ + }␊ + | {␊ + media: string | Media;␊ + useVimeo?: boolean;␊ + vimeoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + size?: "normal" | "wide" | "fullscreen";␊ + caption?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "media";␊ + }␊ + | {␊ + collage?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaCollage";␊ + }␊ + | {␊ + alignment: "contentOnLeft" | "contentOnRight";␊ + overlap?: boolean;␊ + invertColors?: boolean;␊ + richText: {␊ + [k: string]: unknown;␊ + }[];␊ + media: string | Media;␊ + embeddedVideo?: {␊ + embed?: boolean;␊ + poster?: string | Media;␊ + platform?: "youtube" | "vimeo";␊ + videoID: string;␊ + aspectRatio?: "56.25" | "75";␊ + };␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaContent";␊ + }␊ + | {␊ + introContent?: {␊ + [k: string]: unknown;␊ + }[];␊ + backgroundType?: "light" | "color";␊ + slides?: {␊ + media: string | Media;␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "mediaSlider";␊ + }␊ + | {␊ + items?: {␊ + label: string;␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + enableLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "stickyList";␊ + }␊ + )[];␊ + meta?: {␊ + title?: string;␊ + description?: string;␊ + keywords?: string;␊ + image?: string | Media;␊ + };␊ + slug?: string;␊ + categories?: (string | HousingCategory)[];␊ + subsite?: string | Subsite;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "media".␊ + */␊ + export interface Media {␊ + url?: string;␊ + filename?: string;␊ + mimeType?: string;␊ + filesize?: number;␊ + width?: number;␊ + height?: number;␊ + sizes?: {␊ + thumbnail?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + card?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + portrait?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + square?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + feature?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + meta?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + hero?: {␊ + url?: string;␊ + width?: number;␊ + height?: number;␊ + mimeType?: string;␊ + filesize?: number;␊ + filename?: string;␊ + };␊ + };␊ + alt: string;␊ + fallback?: string | Media;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "forms".␊ + */␊ + export interface Form {␊ + title: string;␊ + emailTo?: string;␊ + successMessage?: {␊ + [k: string]: unknown;␊ + }[];␊ + redirect?: string;␊ + submitButtonLabel?: string;␊ + fields?: (␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + defaultValue?: string;␊ + required?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "text";␊ + }␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + defaultValue?: string;␊ + options?: {␊ + label: string;␊ + value: string;␊ + id?: string;␊ + }[];␊ + required?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "select";␊ + }␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + required?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "email";␊ + }␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + required?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "state";␊ + }␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + required?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "country";␊ + }␊ + | {␊ + name: string;␊ + label: string;␊ + width?: number;␊ + required?: boolean;␊ + defaultValue?: boolean;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "checkbox";␊ + }␊ + | {␊ + message?: {␊ + [k: string]: unknown;␊ + }[];␊ + id?: string;␊ + blockName?: string;␊ + blockType: "message";␊ + }␊ + )[];␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "locations".␊ + */␊ + export interface Location {␊ + name: string;␊ + address?: {␊ + line1?: string;␊ + line2?: string;␊ + city?: string;␊ + state?:␊ + | "None"␊ + | "Alabama"␊ + | "Alaska"␊ + | "Arizona"␊ + | "Arkansas"␊ + | "California"␊ + | "Colorado"␊ + | "Connecticut"␊ + | "Delaware"␊ + | "Florida"␊ + | "Georgia"␊ + | "Hawaii"␊ + | "Idaho"␊ + | "Illinois"␊ + | "Indiana"␊ + | "Iowa"␊ + | "Kansas"␊ + | "Kentucky"␊ + | "Louisiana"␊ + | "Maine"␊ + | "Maryland"␊ + | "Massachusetts"␊ + | "Michigan"␊ + | "Minnesota"␊ + | "Mississippi"␊ + | "Missouri"␊ + | "Montana"␊ + | "Nebraska"␊ + | "Nevada"␊ + | "New Hampshire"␊ + | "New Jersey"␊ + | "New Mexico"␊ + | "New York"␊ + | "North Carolina"␊ + | "North Dakota"␊ + | "Ohio"␊ + | "Oklahoma"␊ + | "Oregon"␊ + | "Pennsylvania"␊ + | "Rhode Island"␊ + | "South Carolina"␊ + | "South Dakota"␊ + | "Tennessee"␊ + | "Texas"␊ + | "Utah"␊ + | "Vermont"␊ + | "Virginia"␊ + | "Washington"␊ + | "West Virginia"␊ + | "Wisconsin"␊ + | "Wyoming";␊ + zip?: string;␊ + coords?: {␊ + lat?: number;␊ + lng?: number;␊ + };␊ + };␊ + contacts?: {␊ + type?: "mailto" | "tel" | "fax";␊ + label?: string;␊ + value?: string;␊ + id?: string;␊ + }[];␊ + meta?: {␊ + title?: string;␊ + description?: string;␊ + keywords?: string;␊ + image?: string | Media;␊ + };␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "housing-categories".␊ + */␊ + export interface HousingCategory {␊ + title: string;␊ + slug?: string;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "subsites".␊ + */␊ + export interface Subsite {␊ + title: string;␊ + menuItems?: {␊ + type?: "link" | "subMenu";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + label: string;␊ + subMenu?: {␊ + column1?: (␊ + | {␊ + appearance?: "primary" | "secondary" | "arrow";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuLink";␊ + }␊ + | {␊ + content: string;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuDescription";␊ + }␊ + | {␊ + media: string | Media;␊ + headline: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuFeature";␊ + }␊ + )[];␊ + enableColumn2?: boolean;␊ + column2?: (␊ + | {␊ + appearance?: "primary" | "secondary" | "arrow";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuLink";␊ + }␊ + | {␊ + content: string;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuDescription";␊ + }␊ + | {␊ + media: string | Media;␊ + headline: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuFeature";␊ + }␊ + )[];␊ + enableColumn3?: boolean;␊ + column3?: (␊ + | {␊ + appearance?: "primary" | "secondary" | "arrow";␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuLink";␊ + }␊ + | {␊ + content: string;␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuDescription";␊ + }␊ + | {␊ + media: string | Media;␊ + headline: string;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + blockName?: string;␊ + blockType: "menuFeature";␊ + }␊ + )[];␊ + };␊ + id?: string;␊ + }[];␊ + slug?: string;␊ + color?: "green" | "blue" | "red" | "purple";␊ + home: string | Page;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "post-categories".␊ + */␊ + export interface PostCategory {␊ + title: string;␊ + color?: "green" | "blue" | "red" | "purple";␊ + slug?: string;␊ + subsite?: string | Subsite;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "users".␊ + */␊ + export interface User {␊ + email?: string;␊ + resetPasswordToken?: string;␊ + resetPasswordExpiration?: string;␊ + loginAttempts?: number;␊ + lockUntil?: string;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "footer".␊ + */␊ + export interface Footer {␊ + column1?: {␊ + appearance?: "primary" | "secondary" | "tertiary";␊ + label?: string;␊ + useLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + column2?: {␊ + appearance?: "secondary" | "tertiary";␊ + label?: string;␊ + useLink?: boolean;␊ + link?: {␊ + type?: "reference" | "custom";␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "meta".␊ + */␊ + export interface Meta {␊ + socialMediaLinks?: {␊ + type: "facebook" | "vimeo" | "twitter" | "linkedin" | "instagram";␊ + url: string;␊ + id?: string;␊ + }[];␊ + legalLinks?: {␊ + link?: {␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + locations?: (string | Location)[];␊ + phone?: string;␊ + nationalPhone?: string;␊ + fax?: string;␊ + popularSearchTerms?: {␊ + term: string;␊ + id?: string;␊ + }[];␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "alerts".␊ + */␊ + export interface Alert {␊ + placement: "global" | "subsite";␊ + subsites: (string | Subsite)[];␊ + backgroundColor?: "matchTheme" | "green" | "blue" | "red" | "purple";␊ + content: {␊ + [k: string]: unknown;␊ + }[];␊ + links?: {␊ + link?: {␊ + appearance?: "text" | "primaryButton" | "secondaryButton";␊ + type?: "reference" | "custom";␊ + label: string;␊ + reference:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + };␊ + url: string;␊ + };␊ + id?: string;␊ + }[];␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "search".␊ + */␊ + export interface SearchResult {␊ + title: string;␊ + description?: string;␊ + keywords?: string;␊ + slug: string;␊ + media?: string | Media;␊ + doc:␊ + | {␊ + value: string | Page;␊ + relationTo: "pages";␊ + }␊ + | {␊ + value: string | Post;␊ + relationTo: "posts";␊ + }␊ + | {␊ + value: string | Housing;␊ + relationTo: "housing";␊ + }␊ + | {␊ + value: string | Person;␊ + relationTo: "people";␊ + }␊ + | {␊ + value: string | Location;␊ + relationTo: "locations";␊ + };␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "people".␊ + */␊ + export interface Person {␊ + name: string;␊ + position?: string;␊ + contacts?: {␊ + type?: "mailto" | "tel" | "fax";␊ + label?: string;␊ + value?: string;␊ + id?: string;␊ + }[];␊ + socialMediaLinks?: {␊ + type: "facebook" | "vimeo" | "twitter" | "linkedin" | "instagram";␊ + url: string;␊ + id?: string;␊ + }[];␊ + richText?: {␊ + [k: string]: unknown;␊ + }[];␊ + meta?: {␊ + title?: string;␊ + description?: string;␊ + keywords?: string;␊ + image?: string | Media;␊ + };␊ + slug?: string;␊ + home?: string | Page;␊ + }␊ + /**␊ + * This interface was referenced by `RealWorld`'s JSON-Schema␊ + * via the `definition` "form-submissions".␊ + */␊ + export interface FormSubmission {␊ + form: string | Form;␊ + submissionData?: {␊ + field: string;␊ + value: string;␊ + id?: string;␊ + }[];␊ + }␊ + ` + ## realWorld.schemaStore.1.js > Expected output to match snapshot for e2e test: realWorld.schemaStore.1.js diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index 1f9ebbcd..a2299595 100644 Binary files a/test/__snapshots__/test/test.ts.snap and b/test/__snapshots__/test/test.ts.snap differ diff --git a/test/e2e/optimize.2.ts b/test/e2e/optimize.2.ts new file mode 100644 index 00000000..4abfc413 --- /dev/null +++ b/test/e2e/optimize.2.ts @@ -0,0 +1,16 @@ +export const input = { + definitions: { + bar: { + type: 'string', + additionalProperties: false + } + }, + properties: { + foo: { + anyOf: [{type: 'string', additionalProperties: false}, {$ref: '#/definitions/bar'}] + } + }, + required: ['foo'], + title: 'Optimizable Schema 2', + type: 'object' +} diff --git a/test/e2e/realWorld.payloadCMS.ts b/test/e2e/realWorld.payloadCMS.ts new file mode 100644 index 00000000..eb978c7a --- /dev/null +++ b/test/e2e/realWorld.payloadCMS.ts @@ -0,0 +1,10935 @@ +/** + * @see https://github.com/bcherny/json-schema-to-typescript/issues/422 + */ +export const input = { + definitions: { + mainMenu: { + title: 'Main Menu', + type: 'object', + additionalProperties: false, + properties: { + items: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['link', 'subMenu'] + }, + label: { + type: 'string' + }, + subMenu: { + type: 'object', + additionalProperties: false, + properties: { + column1: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'arrow'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuLink' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + content: { + type: 'string' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuDescription' + } + }, + required: ['blockType', 'content'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + headline: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuFeature' + } + }, + required: ['blockType', 'media', 'headline'] + } + ] + } + }, + enableColumn2: { + type: 'boolean' + }, + column2: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'arrow'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuLink' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + content: { + type: 'string' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuDescription' + } + }, + required: ['blockType', 'content'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + headline: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuFeature' + } + }, + required: ['blockType', 'media', 'headline'] + } + ] + } + } + }, + required: [] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + secondaryItems: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + footer: { + title: 'Footer', + type: 'object', + additionalProperties: false, + properties: { + column1: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'tertiary'] + }, + label: { + type: 'string' + }, + useLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + column2: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['secondary', 'tertiary'] + }, + label: { + type: 'string' + }, + useLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + meta: { + title: 'Meta', + type: 'object', + additionalProperties: false, + properties: { + socialMediaLinks: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['facebook', 'vimeo', 'twitter', 'linkedin', 'instagram'] + }, + url: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: ['type', 'url'] + } + }, + legalLinks: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + locations: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/locations' + } + ] + } + }, + phone: { + type: 'string' + }, + nationalPhone: { + type: 'string' + }, + fax: { + type: 'string' + }, + popularSearchTerms: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + term: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: ['term'] + } + } + }, + required: [] + }, + pages: { + title: 'Page', + type: 'object', + additionalProperties: false, + properties: { + breadcrumbs: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + doc: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + url: { + type: 'string' + }, + label: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + title: { + type: 'string' + }, + showBreadcrumbs: { + type: 'boolean' + }, + hero: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: [ + 'basic', + 'content', + 'contentMedia', + 'contentMedia2', + 'contentSidebar', + 'columnsBelow', + 'quickNav', + 'fullscreenBackground', + 'fullscreenSlider' + ] + }, + basic: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + content: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + contentMedia: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: ['media'] + }, + contentMedia2: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: ['media'] + }, + contentSidebar: { + type: 'object', + additionalProperties: false, + properties: { + mainContent: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + sidebarContent: { + type: 'array', + items: { + type: 'object' + } + } + }, + required: [] + }, + columnsBelow: { + type: 'object', + additionalProperties: false, + properties: { + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + heading: { + type: 'string' + }, + description: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['heading', 'description'] + } + } + }, + required: ['backgroundMedia'] + }, + fullscreenBackground: { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: ['backgroundMedia'] + }, + quickNav: { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + heading: { + type: 'string' + }, + description: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['heading', 'description'] + } + } + }, + required: ['backgroundMedia'] + }, + fullscreenSlider: { + type: 'object', + additionalProperties: false, + properties: { + useStaticContent: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['backgroundMedia'] + } + } + }, + required: [] + } + }, + required: ['type'] + }, + layout: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['default', 'condensed'] + }, + sections: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + openOnInit: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'accordion' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'blackbaudForm' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'callToAction' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + cards: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardGrid' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardSlider' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + media1: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media2: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media3: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'careerSearch' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + enableGrayBackground: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'content' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + cellWidth: { + type: 'string', + enum: ['two', 'three'] + }, + invertColors: { + type: 'boolean' + }, + enableCellNumbers: { + type: 'boolean' + }, + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cells: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentGrid' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'housingMap' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'housingList' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + form: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/forms' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'embeddedForm' + } + }, + required: ['blockType', 'form'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + locations: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/locations' + } + ] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'locations' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useVimeo: { + type: 'boolean' + }, + vimeoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + }, + size: { + type: 'string', + enum: ['normal', 'wide', 'fullscreen'] + }, + caption: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'media' + } + }, + required: ['blockType', 'media', 'vimeoID'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + collage: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaCollage' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + alignment: { + type: 'string', + enum: ['contentOnLeft', 'contentOnRight'] + }, + overlap: { + type: 'boolean' + }, + invertColors: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + embeddedVideo: { + type: 'object', + additionalProperties: false, + properties: { + embed: { + type: 'boolean' + }, + poster: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + platform: { + type: 'string', + enum: ['youtube', 'vimeo'] + }, + videoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + } + }, + required: ['videoID'] + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaContent' + } + }, + required: ['blockType', 'alignment', 'richText', 'media'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + items: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'stickyList' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'divider' + } + }, + required: ['blockType'] + } + ] + } + }, + fullTitle: { + type: 'string' + }, + excerpt: { + type: 'string' + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + image: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: [] + }, + status: { + type: 'string', + enum: ['published', 'draft'] + }, + slug: { + type: 'string' + }, + parent: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + subsite: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/subsites' + } + ] + }, + color: { + type: 'string', + enum: ['green', 'blue', 'red', 'purple'] + }, + author: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/users' + } + ] + }, + preview: { + type: 'string' + } + }, + required: ['title'] + }, + posts: { + title: 'Post', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + hero: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: [ + 'basic', + 'content', + 'contentMedia', + 'contentMedia2', + 'contentSidebar', + 'columnsBelow', + 'quickNav', + 'fullscreenBackground', + 'fullscreenSlider' + ] + }, + basic: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + content: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: [] + }, + contentMedia: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: ['media'] + }, + contentMedia2: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: ['media'] + }, + contentSidebar: { + type: 'object', + additionalProperties: false, + properties: { + mainContent: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + sidebarContent: { + type: 'array', + items: { + type: 'object' + } + } + }, + required: [] + }, + columnsBelow: { + type: 'object', + additionalProperties: false, + properties: { + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + heading: { + type: 'string' + }, + description: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['heading', 'description'] + } + } + }, + required: ['backgroundMedia'] + }, + fullscreenBackground: { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: ['backgroundMedia'] + }, + quickNav: { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + heading: { + type: 'string' + }, + description: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['heading', 'description'] + } + } + }, + required: ['backgroundMedia'] + }, + fullscreenSlider: { + type: 'object', + additionalProperties: false, + properties: { + useStaticContent: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['backgroundMedia'] + } + } + }, + required: [] + } + }, + required: ['type'] + }, + layout: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['default', 'condensed'] + }, + sections: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + openOnInit: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'accordion' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'blackbaudForm' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'callToAction' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + cards: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardGrid' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardSlider' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + media1: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media2: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media3: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'careerSearch' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + enableGrayBackground: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'content' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + cellWidth: { + type: 'string', + enum: ['two', 'three'] + }, + invertColors: { + type: 'boolean' + }, + enableCellNumbers: { + type: 'boolean' + }, + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cells: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentGrid' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + form: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/forms' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'embeddedForm' + } + }, + required: ['blockType', 'form'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'housingMap' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'housingList' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + locations: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/locations' + } + ] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'locations' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useVimeo: { + type: 'boolean' + }, + vimeoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + }, + size: { + type: 'string', + enum: ['normal', 'wide', 'fullscreen'] + }, + caption: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'media' + } + }, + required: ['blockType', 'media', 'vimeoID'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + collage: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaCollage' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + alignment: { + type: 'string', + enum: ['contentOnLeft', 'contentOnRight'] + }, + overlap: { + type: 'boolean' + }, + invertColors: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + embeddedVideo: { + type: 'object', + additionalProperties: false, + properties: { + embed: { + type: 'boolean' + }, + poster: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + platform: { + type: 'string', + enum: ['youtube', 'vimeo'] + }, + videoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + } + }, + required: ['videoID'] + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaContent' + } + }, + required: ['blockType', 'alignment', 'richText', 'media'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + items: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'stickyList' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'divider' + } + }, + required: ['blockType'] + } + ] + } + }, + slug: { + type: 'string' + }, + category: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/post-categories' + } + ] + }, + subsite: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/subsites' + } + ] + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + image: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: [] + } + }, + required: ['title', 'category'] + }, + 'post-categories': { + title: 'Post Category', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + color: { + type: 'string', + enum: ['green', 'blue', 'red', 'purple'] + }, + slug: { + type: 'string' + }, + subsite: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/subsites' + } + ] + } + }, + required: ['title'] + }, + housing: { + title: 'Housing', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + address: { + type: 'object', + additionalProperties: false, + properties: { + line1: { + type: 'string' + }, + line2: { + type: 'string' + }, + city: { + type: 'string' + }, + state: { + type: 'string', + enum: [ + 'None', + 'Alabama', + 'Alaska', + 'Arizona', + 'Arkansas', + 'California', + 'Colorado', + 'Connecticut', + 'Delaware', + 'Florida', + 'Georgia', + 'Hawaii', + 'Idaho', + 'Illinois', + 'Indiana', + 'Iowa', + 'Kansas', + 'Kentucky', + 'Louisiana', + 'Maine', + 'Maryland', + 'Massachusetts', + 'Michigan', + 'Minnesota', + 'Mississippi', + 'Missouri', + 'Montana', + 'Nebraska', + 'Nevada', + 'New Hampshire', + 'New Jersey', + 'New Mexico', + 'New York', + 'North Carolina', + 'North Dakota', + 'Ohio', + 'Oklahoma', + 'Oregon', + 'Pennsylvania', + 'Rhode Island', + 'South Carolina', + 'South Dakota', + 'Tennessee', + 'Texas', + 'Utah', + 'Vermont', + 'Virginia', + 'Washington', + 'West Virginia', + 'Wisconsin', + 'Wyoming' + ] + }, + zip: { + type: 'string' + }, + coords: { + type: 'object', + additionalProperties: false, + properties: { + lat: { + type: 'number' + }, + lng: { + type: 'number' + } + }, + required: [] + } + }, + required: [] + }, + contacts: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['mailto', 'tel', 'fax'] + }, + label: { + type: 'string' + }, + value: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + layout: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['default', 'condensed'] + }, + sections: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + openOnInit: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'accordion' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + invertColors: { + type: 'boolean' + }, + backgroundMedia: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'callToAction' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + cards: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardGrid' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + cardStyle: { + type: 'string', + enum: ['fullBG', 'insetImage', 'noImage'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useOverlay: { + type: 'boolean' + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'cardSlider' + } + }, + required: ['blockType', 'cardStyle'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + media1: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media2: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + media3: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'careerSearch' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + enableGrayBackground: { + type: 'boolean' + }, + columns: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + width: { + type: 'string', + enum: ['oneThird', 'half', 'twoThirds', 'full'] + }, + alignment: { + type: 'string', + enum: ['left', 'center', 'right'] + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + } + }, + required: ['width', 'alignment'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'content' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + cellWidth: { + type: 'string', + enum: ['two', 'three'] + }, + invertColors: { + type: 'boolean' + }, + enableCellNumbers: { + type: 'boolean' + }, + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + cells: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentGrid' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'contentSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + richText: { + type: 'array', + items: { + type: 'object' + } + }, + form: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/forms' + } + ] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'embeddedForm' + } + }, + required: ['blockType', 'form'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + locations: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/locations' + } + ] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'locations' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + useVimeo: { + type: 'boolean' + }, + vimeoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + }, + size: { + type: 'string', + enum: ['normal', 'wide', 'fullscreen'] + }, + caption: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'media' + } + }, + required: ['blockType', 'media', 'vimeoID'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + collage: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaCollage' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + alignment: { + type: 'string', + enum: ['contentOnLeft', 'contentOnRight'] + }, + overlap: { + type: 'boolean' + }, + invertColors: { + type: 'boolean' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + embeddedVideo: { + type: 'object', + additionalProperties: false, + properties: { + embed: { + type: 'boolean' + }, + poster: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + platform: { + type: 'string', + enum: ['youtube', 'vimeo'] + }, + videoID: { + type: 'string' + }, + aspectRatio: { + type: 'string', + enum: ['56.25', '75'] + } + }, + required: ['videoID'] + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaContent' + } + }, + required: ['blockType', 'alignment', 'richText', 'media'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + introContent: { + type: 'array', + items: { + type: 'object' + } + }, + backgroundType: { + type: 'string', + enum: ['light', 'color'] + }, + slides: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + id: { + type: 'string' + } + }, + required: ['media'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'mediaSlider' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + items: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + enableLink: { + type: 'boolean' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'stickyList' + } + }, + required: ['blockType'] + } + ] + } + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + image: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: [] + }, + slug: { + type: 'string' + }, + categories: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing-categories' + } + ] + } + }, + subsite: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/subsites' + } + ] + } + }, + required: ['title'] + }, + 'housing-categories': { + title: 'Housing Category', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + slug: { + type: 'string' + } + }, + required: ['title'] + }, + locations: { + title: 'Location', + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + address: { + type: 'object', + additionalProperties: false, + properties: { + line1: { + type: 'string' + }, + line2: { + type: 'string' + }, + city: { + type: 'string' + }, + state: { + type: 'string', + enum: [ + 'None', + 'Alabama', + 'Alaska', + 'Arizona', + 'Arkansas', + 'California', + 'Colorado', + 'Connecticut', + 'Delaware', + 'Florida', + 'Georgia', + 'Hawaii', + 'Idaho', + 'Illinois', + 'Indiana', + 'Iowa', + 'Kansas', + 'Kentucky', + 'Louisiana', + 'Maine', + 'Maryland', + 'Massachusetts', + 'Michigan', + 'Minnesota', + 'Mississippi', + 'Missouri', + 'Montana', + 'Nebraska', + 'Nevada', + 'New Hampshire', + 'New Jersey', + 'New Mexico', + 'New York', + 'North Carolina', + 'North Dakota', + 'Ohio', + 'Oklahoma', + 'Oregon', + 'Pennsylvania', + 'Rhode Island', + 'South Carolina', + 'South Dakota', + 'Tennessee', + 'Texas', + 'Utah', + 'Vermont', + 'Virginia', + 'Washington', + 'West Virginia', + 'Wisconsin', + 'Wyoming' + ] + }, + zip: { + type: 'string' + }, + coords: { + type: 'object', + additionalProperties: false, + properties: { + lat: { + type: 'number' + }, + lng: { + type: 'number' + } + }, + required: [] + } + }, + required: [] + }, + contacts: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['mailto', 'tel', 'fax'] + }, + label: { + type: 'string' + }, + value: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + image: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: [] + } + }, + required: ['name'] + }, + subsites: { + title: 'Subsite', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + menuItems: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['link', 'subMenu'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + label: { + type: 'string' + }, + subMenu: { + type: 'object', + additionalProperties: false, + properties: { + column1: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'arrow'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuLink' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + content: { + type: 'string' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuDescription' + } + }, + required: ['blockType', 'content'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + headline: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuFeature' + } + }, + required: ['blockType', 'media', 'headline'] + } + ] + } + }, + enableColumn2: { + type: 'boolean' + }, + column2: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'arrow'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuLink' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + content: { + type: 'string' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuDescription' + } + }, + required: ['blockType', 'content'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + headline: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuFeature' + } + }, + required: ['blockType', 'media', 'headline'] + } + ] + } + }, + enableColumn3: { + type: 'boolean' + }, + column3: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['primary', 'secondary', 'arrow'] + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuLink' + } + }, + required: ['blockType'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + content: { + type: 'string' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuDescription' + } + }, + required: ['blockType', 'content'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + headline: { + type: 'string' + }, + link: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['reference', 'url'] + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'menuFeature' + } + }, + required: ['blockType', 'media', 'headline'] + } + ] + } + } + }, + required: [] + }, + id: { + type: 'string' + } + }, + required: ['label'] + } + }, + slug: { + type: 'string' + }, + color: { + type: 'string', + enum: ['green', 'blue', 'red', 'purple'] + }, + home: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + } + }, + required: ['title', 'home'] + }, + alerts: { + title: 'Alert', + type: 'object', + additionalProperties: false, + properties: { + placement: { + type: 'string', + enum: ['global', 'subsite'] + }, + subsites: { + type: 'array', + items: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/subsites' + } + ] + } + }, + backgroundColor: { + type: 'string', + enum: ['matchTheme', 'green', 'blue', 'red', 'purple'] + }, + content: { + type: 'array', + items: { + type: 'object' + } + }, + links: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + link: { + type: 'object', + additionalProperties: false, + properties: { + appearance: { + type: 'string', + enum: ['text', 'primaryButton', 'secondaryButton'] + }, + type: { + type: 'string', + enum: ['reference', 'custom'] + }, + label: { + type: 'string' + }, + reference: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + } + ] + }, + url: { + type: 'string' + } + }, + required: ['label', 'reference', 'url'] + }, + id: { + type: 'string' + } + }, + required: [] + } + } + }, + required: ['placement', 'subsites', 'content'] + }, + search: { + title: 'Search Result', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + slug: { + type: 'string' + }, + media: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + }, + doc: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + }, + relationTo: { + const: 'pages' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/posts' + } + ] + }, + relationTo: { + const: 'posts' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/housing' + } + ] + }, + relationTo: { + const: 'housing' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/people' + } + ] + }, + relationTo: { + const: 'people' + } + }, + required: ['value', 'relationTo'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + value: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/locations' + } + ] + }, + relationTo: { + const: 'locations' + } + }, + required: ['value', 'relationTo'] + } + ] + } + }, + required: ['title', 'slug', 'doc'] + }, + media: { + title: 'Media', + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + filename: { + type: 'string' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + sizes: { + type: 'object', + additionalProperties: false, + properties: { + thumbnail: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + card: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + portrait: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + square: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + feature: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + }, + hero: { + type: 'object', + additionalProperties: false, + properties: { + url: { + type: 'string' + }, + width: { + type: 'number' + }, + height: { + type: 'number' + }, + mimeType: { + type: 'string' + }, + filesize: { + type: 'number' + }, + filename: { + type: 'string' + } + }, + required: [] + } + }, + required: [] + }, + alt: { + type: 'string' + }, + fallback: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: ['alt'] + }, + people: { + title: 'Person', + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + position: { + type: 'string' + }, + contacts: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['mailto', 'tel', 'fax'] + }, + label: { + type: 'string' + }, + value: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: [] + } + }, + socialMediaLinks: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + type: { + type: 'string', + enum: ['facebook', 'vimeo', 'twitter', 'linkedin', 'instagram'] + }, + url: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: ['type', 'url'] + } + }, + richText: { + type: 'array', + items: { + type: 'object' + } + }, + meta: { + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + description: { + type: 'string' + }, + keywords: { + type: 'string' + }, + image: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/media' + } + ] + } + }, + required: [] + }, + slug: { + type: 'string' + }, + home: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/pages' + } + ] + } + }, + required: ['name'] + }, + forms: { + title: 'Form', + type: 'object', + additionalProperties: false, + properties: { + title: { + type: 'string' + }, + emailTo: { + type: 'string' + }, + successMessage: { + type: 'array', + items: { + type: 'object' + } + }, + redirect: { + type: 'string' + }, + submitButtonLabel: { + type: 'string' + }, + fields: { + type: 'array', + items: { + oneOf: [ + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + defaultValue: { + type: 'string' + }, + required: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'text' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + defaultValue: { + type: 'string' + }, + options: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + label: { + type: 'string' + }, + value: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: ['label', 'value'] + } + }, + required: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'select' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + required: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'email' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + required: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'state' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + required: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'country' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + name: { + type: 'string' + }, + label: { + type: 'string' + }, + width: { + type: 'number' + }, + required: { + type: 'boolean' + }, + defaultValue: { + type: 'boolean' + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'checkbox' + } + }, + required: ['blockType', 'name', 'label'] + }, + { + type: 'object', + additionalProperties: false, + properties: { + message: { + type: 'array', + items: { + type: 'object' + } + }, + id: { + type: 'string' + }, + blockName: { + type: 'string' + }, + blockType: { + const: 'message' + } + }, + required: ['blockType'] + } + ] + } + } + }, + required: ['title'] + }, + 'form-submissions': { + title: 'Form Submission', + type: 'object', + additionalProperties: false, + properties: { + form: { + oneOf: [ + { + type: 'string' + }, + { + $ref: '#/definitions/forms' + } + ] + }, + submissionData: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + properties: { + field: { + type: 'string' + }, + value: { + type: 'string' + }, + id: { + type: 'string' + } + }, + required: ['field', 'value'] + } + } + }, + required: ['form'] + }, + users: { + title: 'User', + type: 'object', + additionalProperties: false, + properties: { + email: { + type: 'string' + }, + resetPasswordToken: { + type: 'string' + }, + resetPasswordExpiration: { + type: 'string' + }, + loginAttempts: { + type: 'number' + }, + lockUntil: { + type: 'string' + } + }, + required: [] + } + }, + additionalProperties: false +} + +export const options = { + unreachableDefinitions: true +} diff --git a/types/fast-diff.d.ts b/types/fast-diff.d.ts deleted file mode 100644 index 3990fac9..00000000 --- a/types/fast-diff.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare module 'fast-diff' { - export = diff - namespace diff { - export const INSERT = 1 - export const EQUAL = 0 - export const DELETE = -1 - - export type DeleteEdit = [-1, string] - export type EqualEdit = [0, string] - export type InsertEdit = [1, string] - export type Edit = DeleteEdit | EqualEdit | InsertEdit - } - - function diff(a: string, b: string): diff.Edit[] -} diff --git a/types/json-stringify-safe.d.ts b/types/json-stringify-safe.d.ts deleted file mode 100644 index 11e33026..00000000 --- a/types/json-stringify-safe.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module 'json-stringify-safe' { - export = stringify - function stringify( - value: any, - replacer?: (key: string, value: any) => any, - space?: string | number, - cycleReplacer?: (key: string, value: any) => string - ): string | undefined -} diff --git a/yarn.lock b/yarn.lock index 74d51b0e..2f3ccb9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2367,11 +2367,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"