@refrakt-md/media 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,93 @@
1
1
  import Markdoc from '@markdoc/markdoc';
2
2
  const { Tag } = Markdoc;
3
- import { createContentModelSchema, createComponentRenderable, asNodes, pageSectionProperties, RenderableNodeCursor, SplitLayoutModel, buildLayoutMetas, extractMediaImage } from '@refrakt-md/runes';
3
+ import { createContentModelSchema, createComponentRenderable, asNodes, pageSectionProperties, RenderableNodeCursor, SplitLayoutModel, buildLayoutMetas, extractMediaImage, } from '@refrakt-md/runes';
4
4
  import { parseDuration } from '../duration.js';
5
+ import { TYPE_IMPLICIT } from './track.js';
5
6
  const playlistType = ['album', 'podcast', 'audiobook', 'series', 'mix'];
7
+ /**
8
+ * The track kind a playlist gives a nested `{% track %}` that states none
9
+ * (WORK-572). The parent retypes its children; a child never declares its
10
+ * context (SPEC-130 D9), and Markdoc's bottom-up transform order means a child
11
+ * could not see its parent even if it wanted to.
12
+ */
13
+ const CHILD_KIND = {
14
+ album: 'song',
15
+ mix: 'song',
16
+ podcast: 'episode',
17
+ audiobook: 'chapter',
18
+ series: 'episode',
19
+ };
6
20
  const contentType = ['auto', 'lyrics', 'chapters'];
21
+ /**
22
+ * SPEC-130 / WORK-569 — the driving case, and the other half of BUG-013.
23
+ *
24
+ * `playlist` declared five kinds and published `MusicPlaylist` with
25
+ * `MusicRecording` items for every one of them, so `{% playlist type="podcast" %}`
26
+ * announced a podcast as a music playlist whose episodes were music recordings.
27
+ * The rune already knew what its content was and emitted the wrong schema anyway.
28
+ *
29
+ * | `type` | was | is |
30
+ * |-------------|-------------------------|--------------------------------|
31
+ * | `album` | `MusicPlaylist`/`track` | `MusicAlbum`/`track` |
32
+ * | `mix` | `MusicPlaylist`/`track` | unchanged |
33
+ * | `podcast` | `MusicPlaylist`/`track` | `PodcastSeries`/`hasPart` |
34
+ * | `audiobook` | `MusicPlaylist`/`track` | `Audiobook`/`hasPart` |
35
+ * | `series` | `MusicPlaylist`/`track` | `CreativeWorkSeries`/`hasPart` |
36
+ *
37
+ * **A child row is a type and a property map, not a type alone.** Retyping the
38
+ * item and leaving its stamps would put `byArtist` on a `PodcastEpisode`, which
39
+ * does not have that property — worse than the `MusicRecording` it replaced,
40
+ * which was at least coherently wrong. So the parent's map is the whole truth
41
+ * for a child it retypes, and the applier clears what it does not name.
42
+ *
43
+ * `Chapter` for an `Audiobook` and `CreativeWork` for a `CreativeWorkSeries` are
44
+ * the rows worth a second opinion. Nothing validates them (D5) — read them in
45
+ * `refrakt inspect playlist --type=all` and disagree there.
46
+ */
47
+ const MUSIC_ITEM = {
48
+ 'track-name': 'name',
49
+ 'track-artist': 'byArtist',
50
+ duration: 'duration',
51
+ 'track-meta': 'datePublished',
52
+ url: 'url',
53
+ position: 'position',
54
+ };
55
+ // Everything but the artist: `byArtist` is a `MusicRecording` property, and a
56
+ // series carries its publisher rather than each item doing so.
57
+ const SPOKEN_ITEM = {
58
+ 'track-name': 'name',
59
+ duration: 'duration',
60
+ 'track-meta': 'datePublished',
61
+ url: 'url',
62
+ position: 'position',
63
+ };
64
+ const musicRow = (type) => ({
65
+ type,
66
+ properties: { headline: 'name', mediaImage: 'image', artist: 'byArtist' },
67
+ lists: ['track'],
68
+ children: { track: { type: 'MusicRecording', property: 'track', properties: MUSIC_ITEM } },
69
+ });
70
+ const spokenRow = (type, itemType) => ({
71
+ type,
72
+ // No `byArtist` here either, for the same reason it is absent from the item.
73
+ properties: { headline: 'name', mediaImage: 'image' },
74
+ lists: ['hasPart'],
75
+ children: { track: { type: itemType, property: 'hasPart', properties: SPOKEN_ITEM } },
76
+ });
77
+ export const playlistSchema = {
78
+ by: 'type',
79
+ rows: {
80
+ album: musicRow('MusicAlbum'),
81
+ mix: musicRow('MusicPlaylist'),
82
+ podcast: spokenRow('PodcastSeries', 'PodcastEpisode'),
83
+ audiobook: spokenRow('Audiobook', 'Chapter'),
84
+ series: spokenRow('CreativeWorkSeries', 'CreativeWork'),
85
+ },
86
+ // The attribute defaults to `album` in the transform, so the absent case is
87
+ // an album — and `MusicAlbum`, a subtype of `MusicPlaylist`, has been
88
+ // available and unused the whole time.
89
+ fallback: musicRow('MusicAlbum'),
90
+ };
7
91
  // SPEC-125 Phase 2 — join tables the rune declares about itself. Referenced
8
92
  // from the theme config rather than owned by it: a theme may not redefine
9
93
  // what a section *is* (ADR-028).
@@ -12,19 +96,48 @@ const contentType = ['auto', 'lyrics', 'chapters'];
12
96
  // both structurally the body and genuinely prose-bearing. The track list stays
13
97
  // unroled: it is structured content the rune reinterprets, and mapping it to
14
98
  // `body` would invent a `datatable`-shaped overload where none exists.
15
- export const playlistSections = { preamble: 'preamble', headline: 'title', blurb: 'description', media: 'media', body: 'body' };
99
+ export const playlistSections = {
100
+ preamble: 'preamble',
101
+ headline: 'title',
102
+ blurb: 'description',
103
+ media: 'media',
104
+ body: 'body',
105
+ };
16
106
  export const playlistMediaSlots = { media: 'cover' };
17
107
  export const playlist = createContentModelSchema({
108
+ schema: playlistSchema,
18
109
  sections: playlistSections,
19
110
  provides: ['prose'],
20
111
  mediaSlots: playlistMediaSlots,
21
112
  base: SplitLayoutModel,
22
113
  attributes: {
23
- type: { type: String, required: false, matches: playlistType.slice(), description: 'Collection format: album, podcast, audiobook, series, or mix.' },
24
- artist: { type: String, required: false, description: 'Default artist applied to tracks that omit their own.' },
25
- player: { type: Boolean, required: false, description: 'Enable/disable an embedded audio player for the playlist.' },
26
- content: { type: String, required: false, matches: contentType.slice(), description: 'How nested lists are interpreted: auto-detect, lyrics, or chapters.' },
27
- id: { type: String, required: false, description: 'Unique identifier used to link an audio rune to this playlist.' },
114
+ type: {
115
+ type: String,
116
+ required: false,
117
+ matches: playlistType.slice(),
118
+ description: 'Collection format: album, podcast, audiobook, series, or mix.',
119
+ },
120
+ artist: {
121
+ type: String,
122
+ required: false,
123
+ description: 'Default artist applied to tracks that omit their own.',
124
+ },
125
+ player: {
126
+ type: Boolean,
127
+ required: false,
128
+ description: 'Enable/disable an embedded audio player for the playlist.',
129
+ },
130
+ content: {
131
+ type: String,
132
+ required: false,
133
+ matches: contentType.slice(),
134
+ description: 'How nested lists are interpreted: auto-detect, lyrics, or chapters.',
135
+ },
136
+ id: {
137
+ type: String,
138
+ required: false,
139
+ description: 'Unique identifier used to link an audio rune to this playlist.',
140
+ },
28
141
  },
29
142
  contentModel: {
30
143
  type: 'delimited',
@@ -35,22 +148,36 @@ export const playlist = createContentModelSchema({
35
148
  {
36
149
  name: 'media',
37
150
  type: 'sequence',
38
- fields: [
39
- { name: 'media', match: 'any', optional: true, greedy: true },
40
- ],
151
+ fields: [{ name: 'media', match: 'any', optional: true, greedy: true }],
41
152
  },
42
153
  {
43
154
  name: 'content',
44
155
  primary: true,
45
156
  type: 'sequence',
46
157
  fields: [
47
- { name: 'headline', match: 'heading', optional: false,
48
- template: '# Playlist Name', description: 'Playlist title' },
49
- { name: 'blurb', match: 'paragraph', optional: true,
50
- template: 'A description of this playlist.', description: 'Playlist description' },
51
158
  {
159
+ name: 'headline',
160
+ match: 'heading',
161
+ optional: false,
162
+ template: '# Playlist Name',
163
+ description: 'Playlist title',
164
+ },
165
+ {
166
+ name: 'blurb',
167
+ match: 'paragraph',
168
+ optional: true,
169
+ template: 'A description of this playlist.',
170
+ description: 'Playlist description',
171
+ },
172
+ {
173
+ // WORK-572 — `tag:track` alongside `list` so the composition the
174
+ // docs promise works. Greedy because the two forms may alternate,
175
+ // and greedy collection is *consecutive*: prose between two tracks
176
+ // ends the run and pushes the rest to `body`. Documented on the
177
+ // rune page rather than left for an author to discover.
52
178
  name: 'tracks',
53
- match: 'list',
179
+ match: 'list|tag:track',
180
+ greedy: true,
54
181
  optional: false,
55
182
  description: 'Track listing',
56
183
  template: '- **Track Name** (3:45)\n- **Another Track** (4:20)',
@@ -59,10 +186,13 @@ export const playlist = createContentModelSchema({
59
186
  { name: 'name', match: 'strong', optional: false },
60
187
  { name: 'src', match: 'link', optional: true, extract: 'href' },
61
188
  { name: 'artist', match: 'em', optional: true },
62
- { name: 'duration', match: 'text', optional: true,
63
- pattern: /\((\d+:\d+(?::\d+)?)\)/ },
64
- { name: 'date', match: 'text', optional: true,
65
- pattern: /—\s*(.+)$/ },
189
+ {
190
+ name: 'duration',
191
+ match: 'text',
192
+ optional: true,
193
+ pattern: /\((\d+:\d+(?::\d+)?)\)/,
194
+ },
195
+ { name: 'date', match: 'text', optional: true, pattern: /—\s*(.+)$/ },
66
196
  { name: 'description', match: 'paragraph', optional: true, greedy: true },
67
197
  {
68
198
  name: 'cuePoints',
@@ -70,8 +200,12 @@ export const playlist = createContentModelSchema({
70
200
  optional: true,
71
201
  itemModel: {
72
202
  fields: [
73
- { name: 'time', match: 'text', optional: true,
74
- pattern: /\(?(\d+:\d+(?::\d+)?)\)?/ },
203
+ {
204
+ name: 'time',
205
+ match: 'text',
206
+ optional: true,
207
+ pattern: /\(?(\d+:\d+(?::\d+)?)\)?/,
208
+ },
75
209
  { name: 'label', match: 'strong', optional: true },
76
210
  { name: 'text', match: 'text', pattern: 'remainder', optional: false },
77
211
  { name: 'description', match: 'paragraph', optional: true, greedy: true },
@@ -95,10 +229,7 @@ export const playlist = createContentModelSchema({
95
229
  const contentMode = attrs.content ?? 'auto';
96
230
  const idValue = attrs.id ?? '';
97
231
  // Collect header AST nodes (title, description) and transform together
98
- const headerAstNodes = [
99
- contentZone.headline,
100
- contentZone.blurb,
101
- ].filter(Boolean);
232
+ const headerAstNodes = [contentZone.headline, contentZone.blurb].filter(Boolean);
102
233
  const header = new RenderableNodeCursor(Markdoc.transform(headerAstNodes, config));
103
234
  // Transform media zone
104
235
  const mediaAstNodes = (Array.isArray(mediaZone.media) ? mediaZone.media : []);
@@ -112,18 +243,26 @@ export const playlist = createContentModelSchema({
112
243
  const duration = track.duration ?? '';
113
244
  const date = track.date?.trim() ?? '';
114
245
  const cuePoints = track.cuePoints ?? [];
115
- const trackNameTag = new Tag('span', { 'data-name': 'track-name', property: 'name' }, [name]);
246
+ // WORK-569 — no `property=` here any more: `playlistSchema`'s child row
247
+ // stamps both populations, so the list form and a nested `{% track %}`
248
+ // take the same mapping instead of one being declared and one written
249
+ // out by hand.
250
+ const trackNameTag = new Tag('span', { 'data-name': 'track-name' }, [name]);
116
251
  const trackChildrenArr = [trackNameTag];
117
252
  if (artist) {
118
- trackChildrenArr.push(new Tag('span', { 'data-name': 'track-artist', property: 'byArtist' }, [artist]));
253
+ trackChildrenArr.push(new Tag('span', { 'data-name': 'track-artist' }, [artist]));
119
254
  }
120
255
  if (duration) {
121
256
  trackChildrenArr.push(new Tag('span', { 'data-name': 'track-duration' }, [duration]));
122
257
  const durationSeconds = parseDuration(duration);
123
- trackChildrenArr.push(new Tag('meta', { property: 'duration', content: `PT${durationSeconds}S` }));
258
+ // Named `duration`, matching what `{% track %}` calls its ISO carrier,
259
+ // so one source reaches both forms. `track-duration` beside it is the
260
+ // *rendered* value ("3:45") and stays unmapped — publishing that as a
261
+ // schema.org duration is what naming them apart prevents.
262
+ trackChildrenArr.push(new Tag('meta', { 'data-name': 'duration', content: `PT${durationSeconds}S` }));
124
263
  }
125
264
  if (date) {
126
- trackChildrenArr.push(new Tag('span', { 'data-name': 'track-meta', property: 'datePublished' }, [date]));
265
+ trackChildrenArr.push(new Tag('span', { 'data-name': 'track-meta' }, [date]));
127
266
  }
128
267
  // Build cue point elements
129
268
  if (cuePoints.length > 0) {
@@ -131,16 +270,55 @@ export const playlist = createContentModelSchema({
131
270
  if (cueListTag)
132
271
  trackChildrenArr.push(cueListTag);
133
272
  }
134
- const trackAttrs = { typeof: 'MusicRecording' };
273
+ // No `typeof` either — the child row types these. A list item states no
274
+ // kind of its own, so the parent is the only authority on what it is.
275
+ const trackAttrs = {};
135
276
  if (src)
136
277
  trackAttrs['data-src'] = src;
137
278
  return new Tag('li', trackAttrs, trackChildrenArr);
138
279
  });
139
- const tracksOl = new Tag('ol', { 'data-name': 'tracks' }, trackChildren);
280
+ // WORK-572 / BUG-016 — merge nested `{% track %}` children with the list
281
+ // items, in document order.
282
+ //
283
+ // `resolved.tracks` holds the matched nodes in source order; `tracksData`
284
+ // is the flat itemModel extraction across every list among them. Walking
285
+ // the nodes and consuming `tracksData` by list length is what keeps the two
286
+ // forms interleaved correctly, rather than appending one block after the
287
+ // other.
288
+ //
289
+ // Before this, a `{% track %}` inside a `{% playlist %}` fell through to the
290
+ // greedy `body` field: it rendered as an `<li>` outside any list and floated
291
+ // up as a detached top-level entity, while the docs recommended the
292
+ // composition.
293
+ const trackNodes = (contentZone.tracks ?? []);
294
+ const childKind = CHILD_KIND[playlistTypeValue] ?? 'song';
295
+ const orderedTracks = [];
296
+ let listCursor = 0;
297
+ for (const node of Array.isArray(trackNodes) ? trackNodes : [trackNodes]) {
298
+ if (!node || typeof node !== 'object')
299
+ continue;
300
+ if (node.type === 'list') {
301
+ const count = (node.children ?? []).length;
302
+ orderedTracks.push(...trackChildren.slice(listCursor, listCursor + count));
303
+ listCursor += count;
304
+ continue;
305
+ }
306
+ const transformed = new RenderableNodeCursor(Markdoc.transform([node], config))
307
+ .tag('li')
308
+ .toArray();
309
+ for (const li of transformed) {
310
+ orderedTracks.push(adoptNestedTrack(li, childKind, artistValue));
311
+ }
312
+ }
313
+ // Any list items a node walk missed (defensive: a shape the resolver
314
+ // collected but this loop did not recognise) still belong in the listing.
315
+ if (listCursor < trackChildren.length)
316
+ orderedTracks.push(...trackChildren.slice(listCursor));
317
+ const tracksOl = new Tag('ol', { 'data-name': 'tracks' }, orderedTracks);
140
318
  // Build player element (when player attribute is set)
141
319
  let playerEl = null;
142
320
  if (hasPlayer) {
143
- const playerData = tracksData.map(track => {
321
+ const playerData = tracksData.map((track) => {
144
322
  const item = {
145
323
  name: track.name ?? '',
146
324
  };
@@ -161,7 +339,7 @@ export const playlist = createContentModelSchema({
161
339
  }
162
340
  // Layout meta tags
163
341
  const { metas: layoutMetas, children: layoutChildren } = buildLayoutMetas(attrs);
164
- const { mediaPosition: mediaPositionMeta, mediaRatio: mediaRatioMeta, valign: valignMeta, collapse: collapseMeta } = layoutMetas;
342
+ const { mediaPosition: mediaPositionMeta, mediaRatio: mediaRatioMeta, valign: valignMeta, collapse: collapseMeta, } = layoutMetas;
165
343
  // Meta tags for identity transform modifiers
166
344
  const typeMeta = new Tag('meta', { content: playlistTypeValue });
167
345
  const hasPlayerMeta = hasPlayer ? new Tag('meta', { content: 'true' }) : null;
@@ -181,17 +359,12 @@ export const playlist = createContentModelSchema({
181
359
  }
182
360
  // Unwrap paragraph-wrapped images in the media zone
183
361
  const mediaImgTag = extractMediaImage(side);
184
- const mediaCursor = mediaImgTag
185
- ? new RenderableNodeCursor([mediaImgTag])
186
- : side;
362
+ const mediaCursor = mediaImgTag ? new RenderableNodeCursor([mediaImgTag]) : side;
187
363
  const mediaDiv = mediaCursor.wrap('div');
188
364
  const hasMedia = mediaCursor.toArray().length > 0;
189
365
  // Use the unwrapped image for SEO structured data
190
366
  const seoImage = mediaImgTag;
191
- const children = [
192
- typeMeta,
193
- ...layoutChildren,
194
- ];
367
+ const children = [typeMeta, ...layoutChildren];
195
368
  if (hasPlayerMeta)
196
369
  children.push(hasPlayerMeta);
197
370
  if (artistMeta)
@@ -207,8 +380,12 @@ export const playlist = createContentModelSchema({
207
380
  children.push(tracksOl);
208
381
  if (bodyDiv)
209
382
  children.push(bodyDiv.next());
210
- const trackItems = new RenderableNodeCursor(trackChildren);
211
- return createComponentRenderable({ rune: 'playlist', schemaOrgType: 'MusicPlaylist',
383
+ // WORK-572 — the merged, ordered set, not just the list items: this is the
384
+ // cursor `schema: { track }` stamps `property="track"` onto, and an unstamped
385
+ // child floats up as a detached top-level entity (BUG-016 symptom 2).
386
+ const trackItems = new RenderableNodeCursor(orderedTracks);
387
+ return createComponentRenderable({
388
+ rune: 'playlist',
212
389
  tag: 'section',
213
390
  property: 'contentSection',
214
391
  properties: {
@@ -225,17 +402,85 @@ export const playlist = createContentModelSchema({
225
402
  ...sectionProps,
226
403
  ...(bodyDiv ? { body: bodyDiv } : {}),
227
404
  media: mediaDiv,
228
- },
229
- schema: {
230
- name: sectionProps.headline,
231
- ...(seoImage ? { image: seoImage } : {}),
232
- ...(artistMeta ? { byArtist: artistMeta } : {}),
233
- track: trackItems,
405
+ // WORK-561 — see the note on `recipe`: `image` is taken by
406
+ // `sectionProps`, so the media slot's image is `mediaImage`.
407
+ ...(seoImage ? { mediaImage: seoImage } : {}),
234
408
  },
235
409
  children,
236
410
  });
237
411
  },
238
412
  });
413
+ /**
414
+ * Adopt a nested `{% track %}` into its playlist (WORK-572).
415
+ *
416
+ * Two channels, and they behave differently (SPEC-130 D9):
417
+ *
418
+ * - **`typeof` — what the child *is* — is the child's when stated, else the
419
+ * parent's child-row default.** The `TYPE_IMPLICIT` marker is how the parent
420
+ * tells those apart; without it an absent `type` and an explicit
421
+ * `type="song"` are the same value by transform time.
422
+ * - **`property` — which collection it joins — is always the parent's**, and it
423
+ * is stamped by `createComponentRenderable`'s `schema:` map further down, not
424
+ * here. `collectJsonLd` nests a typed node only when it carries both `typeof`
425
+ * and `property`, so a child the parent never stamps floats free whatever type
426
+ * it has.
427
+ *
428
+ * The artist default rides along for the same reason the type does: the list
429
+ * form does `track.artist ?? playlistArtist`, so without it the two forms would
430
+ * disagree on `byArtist` and the equivalence would be false.
431
+ */
432
+ function adoptNestedTrack(li, childKind, playlistArtist) {
433
+ if (!li || typeof li !== 'object')
434
+ return li;
435
+ if (!li[TYPE_IMPLICIT]) {
436
+ // The marker means "the author stated this type" (WORK-569), so its absence
437
+ // is what licenses adoption. The schema type is the applier's to set from
438
+ // `playlistSchema`'s child row, and the marker stays on the node for it to
439
+ // read; what is left here is the *rendered* modifier, so a podcast's nested
440
+ // track does not present itself as a song.
441
+ const raw = li.attributes['data-rune-fields'];
442
+ if (typeof raw === 'string') {
443
+ try {
444
+ const bag = JSON.parse(raw);
445
+ bag.type = childKind;
446
+ li.attributes['data-rune-fields'] = JSON.stringify(bag);
447
+ }
448
+ catch {
449
+ // A malformed bag is not this function's to repair.
450
+ }
451
+ }
452
+ for (const child of li.children ?? []) {
453
+ if (child?.name === 'meta' && child.attributes?.['data-field'] === 'type') {
454
+ child.attributes.content = childKind;
455
+ }
456
+ }
457
+ }
458
+ if (playlistArtist && !hasArtist(li)) {
459
+ // Named rather than stamped, so the child row decides whether a playlist's
460
+ // artist reaches the item at all — on a podcast or an audiobook it does
461
+ // not, because the series carries its publisher.
462
+ const artistMeta = new Markdoc.Tag('meta', {
463
+ content: playlistArtist,
464
+ 'data-name': 'track-artist',
465
+ });
466
+ li.children = [...(li.children ?? []), artistMeta];
467
+ }
468
+ return li;
469
+ }
470
+ /** Whether a track already carries its own artist. */
471
+ function hasArtist(li) {
472
+ const raw = li.attributes?.['data-rune-fields'];
473
+ if (typeof raw === 'string') {
474
+ try {
475
+ if (JSON.parse(raw).artist)
476
+ return true;
477
+ }
478
+ catch {
479
+ // fall through to the node scan
480
+ }
481
+ }
482
+ return (li.children ?? []).some((c) => c?.attributes?.property === 'byArtist' || c?.attributes?.['data-name'] === 'track-artist');
483
+ }
239
484
  /**
240
485
  * Build cue point list (chapters or lyrics) from extracted itemModel data.
241
486
  */
@@ -243,9 +488,11 @@ function buildCuePoints(cuePoints, contentMode) {
243
488
  if (cuePoints.length === 0)
244
489
  return null;
245
490
  // Detect content type: lyrics have timestamp at start with short text
246
- const isLyrics = contentMode === 'lyrics' || (contentMode === 'auto' && cuePoints.every(cp => cp.time && typeof cp.text === 'string' && cp.text.length < 100));
491
+ const isLyrics = contentMode === 'lyrics' ||
492
+ (contentMode === 'auto' &&
493
+ cuePoints.every((cp) => cp.time && typeof cp.text === 'string' && cp.text.length < 100));
247
494
  if (isLyrics) {
248
- const lyricItems = cuePoints.map(cp => {
495
+ const lyricItems = cuePoints.map((cp) => {
249
496
  const attrs = {};
250
497
  if (cp.time)
251
498
  attrs['data-time'] = String(parseDuration(cp.time));
@@ -256,7 +503,7 @@ function buildCuePoints(cuePoints, contentMode) {
256
503
  return new Tag('ol', { 'data-name': 'lyrics' }, lyricItems);
257
504
  }
258
505
  // Chapters
259
- const chapterItems = cuePoints.map(cp => {
506
+ const chapterItems = cuePoints.map((cp) => {
260
507
  const attrs = {};
261
508
  if (cp.time)
262
509
  attrs['data-time'] = String(parseDuration(cp.time));
@@ -1 +1 @@
1
- {"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/tags/playlist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/tags/playlist.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,83 @@
1
1
  import Markdoc from '@markdoc/markdoc';
2
+ /**
3
+ * Marks a track whose `type` the author **did** state (WORK-572 / WORK-569).
4
+ *
5
+ * WORK-572 introduced this the other way round, as "the author stated nothing",
6
+ * because `playlist` was the only reader and adoption was the special case.
7
+ * WORK-569 moved it into the applier and inverted it: D9's default is that a
8
+ * parent retypes its children, so what needs marking is the exception — a type
9
+ * the author wrote, which no parent may overrule.
10
+ *
11
+ * Re-exported under the old name because `playlist` also reads it to decide
12
+ * whether to adopt the *rendered* kind, which is not a schema concern.
13
+ */
14
+ export declare const TYPE_IMPLICIT: symbol;
15
+ export declare const trackSchema: {
16
+ by: string;
17
+ rows: {
18
+ song: {
19
+ type: string;
20
+ properties: {
21
+ artist: string;
22
+ name: "name";
23
+ duration: "duration";
24
+ url: "url";
25
+ position: "position";
26
+ datePublished: "datePublished";
27
+ };
28
+ };
29
+ episode: {
30
+ type: string;
31
+ properties: {
32
+ readonly name: "name";
33
+ readonly duration: "duration";
34
+ readonly url: "url";
35
+ readonly position: "position";
36
+ readonly datePublished: "datePublished";
37
+ };
38
+ };
39
+ chapter: {
40
+ type: string;
41
+ properties: {
42
+ readonly name: "name";
43
+ readonly duration: "duration";
44
+ readonly url: "url";
45
+ readonly position: "position";
46
+ readonly datePublished: "datePublished";
47
+ };
48
+ };
49
+ talk: {
50
+ type: string;
51
+ properties: {
52
+ readonly name: "name";
53
+ readonly duration: "duration";
54
+ readonly url: "url";
55
+ readonly position: "position";
56
+ readonly datePublished: "datePublished";
57
+ };
58
+ };
59
+ video: {
60
+ type: string;
61
+ properties: {
62
+ readonly name: "name";
63
+ readonly duration: "duration";
64
+ readonly url: "url";
65
+ readonly position: "position";
66
+ readonly datePublished: "datePublished";
67
+ };
68
+ };
69
+ };
70
+ fallback: {
71
+ type: string;
72
+ properties: {
73
+ artist: string;
74
+ name: "name";
75
+ duration: "duration";
76
+ url: "url";
77
+ position: "position";
78
+ datePublished: "datePublished";
79
+ };
80
+ };
81
+ };
2
82
  export declare const track: Markdoc.Schema;
3
83
  //# sourceMappingURL=track.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/tags/track.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAQvC,eAAO,MAAM,KAAK,gBA6GhB,CAAC"}
1
+ {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/tags/track.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAcvC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,QAAuB,CAAC;AA+BlD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAavB,CAAC;AAEF,eAAO,MAAM,KAAK,gBA4JhB,CAAC"}