Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ type StoryBlock =
| Definition
| InfoBox
| InfoPair
| AudioPlayer
```

`StoryBlock` nodes are things that can be inserted into an article body.
Expand Down Expand Up @@ -859,9 +860,59 @@ interface InfoPair extends Parent {
}
```

### AudioPlayer

```ts
type AudioPlayer = AudioPlayerV1 | AudioPlayerV2 | AudioPlayerV3

/**
* @sparkGenerateStoryblock true
* @support deprecated
*/
interface AudioPlayerV1 extends Node {
type: "audio-player"
version: 1
title: string
audioUrl: string
}

/**
* @sparkGenerateStoryblock true
* @sparkInsert true
* @support supported
*/
interface AudioPlayerV2 extends Node {
type: "audio-player"
version: 2
title: string
audioId: string
external audio: AudioSet
}

/**
* @sparkGenerateStoryblock true
* @support prerelease
*/
interface AudioPlayerV3 extends Node {
type: "audio-player"
version: 3
title: string
audioId: string
transcriptionId: string
external audio: AudioSet
external transcription: Transcription
}
```

```ts
/**
* Demo placeholders so the AudioPlayer versioning example compiles.
*/
interface AudioSet extends Node {
url: string
}

interface Transcription extends Node {
text: string
}
```
6 changes: 3 additions & 3 deletions build.bash
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/bin/bash
node tools/maketypes <SPEC.md> content-tree.ts
tsc -d content-tree.ts
typescript-json-schema --noExtraProps --required content-tree.ts ContentTree.full.Root > schemas/content-tree.schema.json
typescript-json-schema --noExtraProps --required content-tree.ts ContentTree.transit.Root > schemas/transit-tree.schema.json
typescript-json-schema --noExtraProps --required content-tree.ts ContentTree.transit.Body > schemas/body-tree.schema.json
typescript-json-schema --validationKeywords support sparkGenerateStoryblock --noExtraProps --required content-tree.ts ContentTree.full.Root > schemas/content-tree.schema.json
typescript-json-schema --validationKeywords support sparkGenerateStoryblock --noExtraProps --required content-tree.ts ContentTree.transit.Root > schemas/transit-tree.schema.json
typescript-json-schema --validationKeywords support sparkGenerateStoryblock --noExtraProps --required content-tree.ts ContentTree.transit.Body > schemas/body-tree.schema.json
rm content-tree.ts
rm content-tree.js
185 changes: 181 additions & 4 deletions content-tree.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export declare namespace ContentTree {
type: "blockquote";
children: (Paragraph | Phrasing)[];
}
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair | AudioPlayer;
interface Pullquote extends Node {
type: "pullquote";
text: string;
Expand Down Expand Up @@ -366,6 +366,51 @@ export declare namespace ContentTree {
title?: string;
children: [Card, Card];
}
type AudioPlayer = AudioPlayerV1 | AudioPlayerV2 | AudioPlayerV3;
/**
* @sparkGenerateStoryblock true
* @support deprecated
*/
interface AudioPlayerV1 extends Node {
type: "audio-player";
version: 1;
title: string;
audioUrl: string;
}
/**
* @sparkGenerateStoryblock true
* @sparkInsert true
* @support supported
*/
interface AudioPlayerV2 extends Node {
type: "audio-player";
version: 2;
title: string;
audioId: string;
audio: AudioSet;
}
/**
* @sparkGenerateStoryblock true
* @support prerelease
*/
interface AudioPlayerV3 extends Node {
type: "audio-player";
version: 3;
title: string;
audioId: string;
transcriptionId: string;
audio: AudioSet;
transcription: Transcription;
}
/**
* Demo placeholders so the AudioPlayer versioning example compiles.
*/
interface AudioSet extends Node {
url: string;
}
interface Transcription extends Node {
text: string;
}
namespace full {
type LayoutWidth = "auto" | "in-line" | "inset-left" | "inset-right" | "full-bleed" | "full-grid" | "mid-grid" | "full-width";
interface Node {
Expand Down Expand Up @@ -444,7 +489,7 @@ export declare namespace ContentTree {
type: "blockquote";
children: (Paragraph | Phrasing)[];
}
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair | AudioPlayer;
interface Pullquote extends Node {
type: "pullquote";
text: string;
Expand Down Expand Up @@ -734,6 +779,51 @@ export declare namespace ContentTree {
title?: string;
children: [Card, Card];
}
type AudioPlayer = AudioPlayerV1 | AudioPlayerV2 | AudioPlayerV3;
/**
* @sparkGenerateStoryblock true
* @support deprecated
*/
interface AudioPlayerV1 extends Node {
type: "audio-player";
version: 1;
title: string;
audioUrl: string;
}
/**
* @sparkGenerateStoryblock true
* @sparkInsert true
* @support supported
*/
interface AudioPlayerV2 extends Node {
type: "audio-player";
version: 2;
title: string;
audioId: string;
audio: AudioSet;
}
/**
* @sparkGenerateStoryblock true
* @support prerelease
*/
interface AudioPlayerV3 extends Node {
type: "audio-player";
version: 3;
title: string;
audioId: string;
transcriptionId: string;
audio: AudioSet;
transcription: Transcription;
}
/**
* Demo placeholders so the AudioPlayer versioning example compiles.
*/
interface AudioSet extends Node {
url: string;
}
interface Transcription extends Node {
text: string;
}
}
namespace transit {
type LayoutWidth = "auto" | "in-line" | "inset-left" | "inset-right" | "full-bleed" | "full-grid" | "mid-grid" | "full-width";
Expand Down Expand Up @@ -813,7 +903,7 @@ export declare namespace ContentTree {
type: "blockquote";
children: (Paragraph | Phrasing)[];
}
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair | AudioPlayer;
interface Pullquote extends Node {
type: "pullquote";
text: string;
Expand Down Expand Up @@ -1088,6 +1178,48 @@ export declare namespace ContentTree {
title?: string;
children: [Card, Card];
}
type AudioPlayer = AudioPlayerV1 | AudioPlayerV2 | AudioPlayerV3;
/**
* @sparkGenerateStoryblock true
* @support deprecated
*/
interface AudioPlayerV1 extends Node {
type: "audio-player";
version: 1;
title: string;
audioUrl: string;
}
/**
* @sparkGenerateStoryblock true
* @sparkInsert true
* @support supported
*/
interface AudioPlayerV2 extends Node {
type: "audio-player";
version: 2;
title: string;
audioId: string;
}
/**
* @sparkGenerateStoryblock true
* @support prerelease
*/
interface AudioPlayerV3 extends Node {
type: "audio-player";
version: 3;
title: string;
audioId: string;
transcriptionId: string;
}
/**
* Demo placeholders so the AudioPlayer versioning example compiles.
*/
interface AudioSet extends Node {
url: string;
}
interface Transcription extends Node {
text: string;
}
}
namespace loose {
type LayoutWidth = "auto" | "in-line" | "inset-left" | "inset-right" | "full-bleed" | "full-grid" | "mid-grid" | "full-width";
Expand Down Expand Up @@ -1167,7 +1299,7 @@ export declare namespace ContentTree {
type: "blockquote";
children: (Paragraph | Phrasing)[];
}
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair | AudioPlayer;
interface Pullquote extends Node {
type: "pullquote";
text: string;
Expand Down Expand Up @@ -1457,5 +1589,50 @@ export declare namespace ContentTree {
title?: string;
children: [Card, Card];
}
type AudioPlayer = AudioPlayerV1 | AudioPlayerV2 | AudioPlayerV3;
/**
* @sparkGenerateStoryblock true
* @support deprecated
*/
interface AudioPlayerV1 extends Node {
type: "audio-player";
version: 1;
title: string;
audioUrl: string;
}
/**
* @sparkGenerateStoryblock true
* @sparkInsert true
* @support supported
*/
interface AudioPlayerV2 extends Node {
type: "audio-player";
version: 2;
title: string;
audioId: string;
audio?: AudioSet;
}
/**
* @sparkGenerateStoryblock true
* @support prerelease
*/
interface AudioPlayerV3 extends Node {
type: "audio-player";
version: 3;
title: string;
audioId: string;
transcriptionId: string;
audio?: AudioSet;
transcription?: Transcription;
}
/**
* Demo placeholders so the AudioPlayer versioning example compiles.
*/
interface AudioSet extends Node {
url: string;
}
interface Transcription extends Node {
text: string;
}
}
}
Loading