@svta/cml-webvtt
Advanced tools
+24
-47
@@ -8,4 +8,3 @@ import { TypedResult, ValueOf } from "@svta/cml-utils"; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -27,4 +26,3 @@ type WebVttRegion = { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -55,4 +53,3 @@ type WebVttCue = { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -68,4 +65,3 @@ declare function createWebVttCue(): WebVttCue; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -78,4 +74,3 @@ declare function createWebVttRegion(): WebVttRegion; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -95,4 +90,3 @@ declare class WebVttParsingError extends Error { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -122,4 +116,3 @@ type WebVttParseResult = { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -132,4 +125,3 @@ type WebVttCueFactory = () => WebVttCue; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -142,4 +134,3 @@ type WebVttRegionFactory = () => WebVttRegion; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -187,5 +178,4 @@ type WebVttParserOptions = { | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @example | ||
@@ -203,5 +193,4 @@ * {@includeCode ../test/parseWebVtt.test.ts#example} | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue | VTTCue} | ||
@@ -218,5 +207,4 @@ */ | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion | VTTRegion} | ||
@@ -230,5 +218,4 @@ */ | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @see {@link https://datatracker.ietf.org/doc/html/rfc8216#section-3.5 | RFC 8216} | ||
@@ -245,5 +232,4 @@ */ | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @example | ||
@@ -314,4 +300,3 @@ * {@includeCode ../test/WebVttParser.test.ts#example} | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -324,4 +309,3 @@ type WebVttCueResult = TypedResult<"cue", WebVttCue>; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -334,4 +318,3 @@ type WebVttErrorResult = TypedResult<"error", WebVttParsingError>; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -344,4 +327,3 @@ type WebVttRegionResult = TypedResult<"region", WebVttRegion>; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -354,4 +336,3 @@ type WebVttStyleResult = TypedResult<"style", string>; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -364,4 +345,3 @@ type WebVttTimestampMapResult = TypedResult<"timestampmap", TimestampMap>; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -374,4 +354,3 @@ type WebVttResult = WebVttCueResult | WebVttRegionResult | WebVttTimestampMapResult | WebVttStyleResult | WebVttErrorResult; | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -405,4 +384,3 @@ declare class WebVttTransformer { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -417,5 +395,4 @@ declare class WebVttTransformStream extends TransformStream<string, WebVttResult> { | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @enum | ||
@@ -431,3 +408,3 @@ */ | ||
| /** | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -434,0 +411,0 @@ type WebVttResultType = ValueOf<typeof WebVttResultType>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/WebVttRegion.ts","../src/WebVttCue.ts","../src/createWebVttCue.ts","../src/createWebVttRegion.ts","../src/WebVttParsingError.ts","../src/WebVttParseResult.ts","../src/WebVttCueFactory.ts","../src/WebVttRegionFactory.ts","../src/WebVttParserOptions.ts","../src/parseWebVtt.ts","../src/toVttCue.ts","../src/toVttRegion.ts","../src/TimestampMap.ts","../src/WebVttParser.ts","../src/WebVttCueResult.ts","../src/WebVttErrorResult.ts","../src/WebVttRegionResult.ts","../src/WebVttStyleResult.ts","../src/WebVttTimestampMapResult.ts","../src/WebVttResult.ts","../src/WebVttTransformer.ts","../src/WebVttTransformStream.ts","../src/WebVttResultType.ts"],"sourcesContent":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/WebVttRegion.ts","../src/WebVttCue.ts","../src/createWebVttCue.ts","../src/createWebVttRegion.ts","../src/WebVttParsingError.ts","../src/WebVttParseResult.ts","../src/WebVttCueFactory.ts","../src/WebVttRegionFactory.ts","../src/WebVttParserOptions.ts","../src/parseWebVtt.ts","../src/toVttCue.ts","../src/toVttRegion.ts","../src/TimestampMap.ts","../src/WebVttParser.ts","../src/WebVttCueResult.ts","../src/WebVttErrorResult.ts","../src/WebVttRegionResult.ts","../src/WebVttStyleResult.ts","../src/WebVttTimestampMapResult.ts","../src/WebVttResult.ts","../src/WebVttTransformer.ts","../src/WebVttTransformStream.ts","../src/WebVttResultType.ts"],"sourcesContent":[],"mappings":"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"} |
+10
-20
@@ -8,4 +8,3 @@ //#region src/createWebVttCue.ts | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -39,4 +38,3 @@ function createWebVttCue() { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -61,4 +59,3 @@ function createWebVttRegion() { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -272,5 +269,4 @@ var WebVttParsingError = class extends Error { | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @example | ||
@@ -526,5 +522,4 @@ * {@includeCode ../test/WebVttParser.test.ts#example} | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @example | ||
@@ -561,5 +556,4 @@ * {@includeCode ../test/parseWebVtt.test.ts#example} | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue | VTTCue} | ||
@@ -595,5 +589,4 @@ */ | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion | VTTRegion} | ||
@@ -619,5 +612,4 @@ */ | ||
| * | ||
| * @public | ||
| * | ||
| * @beta | ||
| * | ||
| * @enum | ||
@@ -638,4 +630,3 @@ */ | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -708,4 +699,3 @@ var WebVttTransformer = class { | ||
| * | ||
| * | ||
| * @beta | ||
| * @public | ||
| */ | ||
@@ -712,0 +702,0 @@ var WebVttTransformStream = class extends TransformStream { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":["input","cue","line!: string","cues: WebVttCue[]","regions: WebVttRegion[]","styles: string[]","errors: WebVttParsingError[]"],"sources":["../src/createWebVttCue.ts","../src/createWebVttRegion.ts","../src/WebVttParsingError.ts","../src/parse/parseOptions.ts","../src/parse/parseTimestamp.ts","../src/parse/Settings.ts","../src/parse/parseCue.ts","../src/parse/WebVttParserState.ts","../src/WebVttParser.ts","../src/parseWebVtt.ts","../src/toVttCue.ts","../src/toVttRegion.ts","../src/WebVttResultType.ts","../src/WebVttTransformer.ts","../src/WebVttTransformStream.ts"],"sourcesContent":["import type { WebVttCue } from './WebVttCue.ts'\n\n/**\n * Create a generic WebVttCue object with default values\n * that match the DOM VTTCue interface.\n *\n * @returns A WebVttCue object with default values\n *\n *\n * @beta\n */\nexport function createWebVttCue(): WebVttCue {\n\treturn {\n\t\tid: '',\n\t\tstartTime: 0,\n\t\tendTime: 0,\n\t\tregion: null,\n\t\tsnapToLines: true,\n\t\tline: 'auto',\n\t\tlineAlign: 'start',\n\t\tposition: 'auto',\n\t\tpositionAlign: 'auto',\n\t\tsize: 100,\n\t\talign: 'center',\n\t\tvertical: '',\n\t\tpauseOnExit: false,\n\t\ttext: '',\n\t}\n}\n","import type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Create a generic WebVttRegion object with default values\n * that match the DOM VTTRegion interface.\n *\n * @returns A WebVttRegion object with default values\n *\n *\n * @beta\n */\nexport function createWebVttRegion(): WebVttRegion {\n\treturn {\n\t\tid: '',\n\t\twidth: 100,\n\t\tlines: 3,\n\t\tregionAnchorX: 0,\n\t\tregionAnchorY: 100,\n\t\tviewportAnchorX: 0,\n\t\tviewportAnchorY: 100,\n\t\tscroll: '',\n\t}\n}\n","/**\n * A WebVTT parsing error.\n *\n *\n * @beta\n */\nexport class WebVttParsingError extends Error {\n\n\t/**\n\t * Create a new WebVTT parsing error.\n\t *\n\t * @param message - The message of the error.\n\t */\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t\tthis.name = 'WebVttParsingError'\n\t}\n}\n","// Helper function to parse input into groups separated by 'groupDelim', and\n// interpet each group as a key/value pair separated by 'keyValueDelim'.\nexport function parseOptions(input: string, callback: (k: string, v: string) => void, keyValueDelim: string | RegExp, groupDelim?: string | RegExp): void {\n\t// TODO: Optimize parsing to avoid creating new arrays and strings.\n\tconst groups = groupDelim ? input.split(groupDelim) : [input]\n\n\tfor (const i in groups) {\n\t\tif (typeof groups[i] !== 'string') {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst kv = groups[i].split(keyValueDelim)\n\t\tif (kv.length !== 2) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst k = kv[0]\n\t\tconst v = kv[1].trim()\n\n\t\t// TODO: Return a value instead of using a callback.\n\t\tcallback(k, v)\n\t}\n}\n","function computeSeconds(h: number, m: number, s: number, f: number): number {\n\treturn (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000\n}\n\n// Try to parse input as a time stamp.\nexport function parseTimeStamp(input: string): number | null {\n\t// TODO: Optimize parsing to avoid creating new arrays and strings.\n\tconst m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/)\n\n\tif (!m) {\n\t\treturn null\n\t}\n\n\tconst first = parseInt(m[1])\n\tconst second = parseInt(m[2])\n\tconst third = parseInt(m[3]?.replace(':', '') || '0')\n\tconst fourth = parseInt(m[4])\n\n\tif (m[3]) {\n\t\t// Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n\t\treturn computeSeconds(first, second, third, fourth)\n\t}\n\telse if (first > 59) {\n\t\t// Timestamp takes the form of [hours]:[minutes].[milliseconds]\n\t\t// First position is hours as it's over 59.\n\t\treturn computeSeconds(first, second, 0, fourth)\n\t}\n\telse {\n\t\t// Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n\t\treturn computeSeconds(0, first, second, fourth)\n\t}\n}\n","import type { WebVttRegion } from '../WebVttRegion.ts'\n\nexport type SettingsValue = WebVttRegion | string | number | boolean | null;\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nexport class Settings {\n\tprivate values: Record<string, SettingsValue>\n\n\tconstructor() {\n\t\tthis.values = Object.create(null)\n\t}\n\n\t// Only accept the first assignment to any key.\n\tset(k: string, v: SettingsValue): void {\n\t\tif (this.get(k) || v === '') {\n\t\t\treturn\n\t\t}\n\n\t\tthis.values[k] = v\n\t}\n\n\t// Return the value for a key, or a default value.\n\t// If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n\t// a number of possible default values as properties where 'defaultKey' is\n\t// the key of the property that will be chosen; otherwise it's assumed to be\n\t// a single value.\n\tget<T = SettingsValue>(k: string, dflt?: T): T {\n\t\tif (this.has(k)) {\n\t\t\treturn this.values[k] as T\n\t\t}\n\n\t\treturn dflt as T\n\t}\n\n\t// Check whether we have a value for a key.\n\thas(k: string): boolean {\n\t\treturn k in this.values\n\t}\n\n\t// Accept a setting if its one of the given alternatives.\n\talt(k: string, v: string, a: string[]): void {\n\t\tfor (const n of a) {\n\t\t\tif (v === n) {\n\t\t\t\tthis.set(k, v)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Accept a setting if its a valid (signed) integer.\n\tinteger(k: string, v: string): void {\n\t\tif (/^-?\\d+$/.test(v)) { // integer\n\t\t\tthis.set(k, parseInt(v, 10))\n\t\t}\n\t}\n\n\t// Accept a setting if its a valid percentage.\n\tpercent(k: string, v: string): boolean {\n\t\tif (v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/)) {\n\t\t\tconst value = parseFloat(v)\n\t\t\tif (value >= 0 && value <= 100) {\n\t\t\t\tthis.set(k, value)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n}\n","import type { WebVttCue } from '../WebVttCue.ts'\nimport { WebVttParsingError } from '../WebVttParsingError.ts'\nimport type { WebVttRegion } from '../WebVttRegion.ts'\nimport { parseOptions } from './parseOptions.ts'\nimport { parseTimeStamp } from './parseTimestamp.ts'\nimport { Settings } from './Settings.ts'\n\nconst BAD_TIMESTAMP = 'Malformed time stamp.'\n\nexport function parseCue(input: string, cue: WebVttCue, regionList: WebVttRegion[]): void {\n\t// Remember the original input if we need to throw an error.\n\tconst oInput = input\n\t// 4.1 WebVTT timestamp\n\tfunction consumeTimeStamp() {\n\t\tconst ts = parseTimeStamp(input)\n\t\tif (ts === null) {\n\t\t\tthrow new WebVttParsingError(BAD_TIMESTAMP + oInput)\n\t\t}\n\t\t// Remove time stamp from input.\n\t\tinput = input.replace(/^[^\\sa-zA-Z-]+/, '')\n\t\treturn ts\n\t}\n\n\t// 4.4.2 WebVTT cue settings\n\tfunction consumeCueSettings(input: string, cue: WebVttCue): void {\n\t\tconst settings = new Settings()\n\n\t\tparseOptions(input, function (k, v) {\n\t\t\tswitch (k) {\n\t\t\t\tcase 'region': {\n\t\t\t\t\t// Find the last region we parsed with the same region id.\n\t\t\t\t\tfor (let i = regionList.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (regionList[i].id === v) {\n\t\t\t\t\t\t\tsettings.set(k, regionList[i])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'vertical': {\n\t\t\t\t\tsettings.alt(k, v, ['rl', 'lr'])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'line': {\n\t\t\t\t\tconst vals = v.split(',')\n\t\t\t\t\tconst vals0 = vals[0]\n\t\t\t\t\tsettings.integer(k, vals0)\n\t\t\t\t\tif (settings.percent(k, vals0)) {\n\t\t\t\t\t\tsettings.set('snapToLines', false)\n\t\t\t\t\t}\n\t\t\t\t\tsettings.alt(k, vals0, ['auto'])\n\t\t\t\t\tif (vals.length === 2) {\n\t\t\t\t\t\tsettings.alt('lineAlign', vals[1], ['start', 'center', 'end'])\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'position': {\n\t\t\t\t\tconst vals = v.split(',')\n\t\t\t\t\tsettings.percent(k, vals[0])\n\t\t\t\t\tif (vals.length === 2) {\n\t\t\t\t\t\tsettings.alt('positionAlign', vals[1], ['line-left', 'center', 'line-right', 'auto'])\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'size': {\n\t\t\t\t\tsettings.percent(k, v)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'align': {\n\t\t\t\t\tsettings.alt(k, v, ['start', 'center', 'end', 'left', 'right'])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}, /:/, /\\s/)\n\n\t\t// Apply default values for any missing fields.\n\t\tcue.region = settings.get('region', null)\n\t\tcue.vertical = settings.get('vertical', '')\n\t\ttry {\n\t\t\tcue.line = settings.get('line', 'auto')\n\t\t}\n\t\tcatch (e) {\n\t\t\t// eslint-ignore-line\n\t\t}\n\t\tcue.lineAlign = settings.get('lineAlign', 'start')\n\t\tcue.snapToLines = settings.get('snapToLines', true)\n\t\tcue.size = settings.get('size', 100)\n\t\t// Safari still uses the old middle value and won't accept center\n\t\ttry {\n\t\t\tcue.align = settings.get('align', 'center')\n\t\t}\n\t\tcatch (e) {\n\t\t\tcue.align = settings.get('align', 'middle' as AlignSetting)\n\t\t}\n\t\ttry {\n\t\t\tcue.position = settings.get('position', 'auto')\n\t\t}\n\t\tcatch (e) {\n\t\t\tconst positions = {\n\t\t\t\tstart: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tcenter: 50,\n\t\t\t\tmiddle: 50,\n\t\t\t\tend: 100,\n\t\t\t\tright: 100,\n\t\t\t}\n\n\t\t\tcue.position = settings.get('position', positions[cue.align])\n\t\t}\n\n\t\tcue.positionAlign = settings.get('positionAlign', 'auto')\n\t}\n\n\tfunction skipWhitespace() {\n\t\tinput = input.replace(/^\\s+/, '')\n\t}\n\n\t// 4.1 WebVTT cue timings.\n\tskipWhitespace()\n\tcue.startTime = consumeTimeStamp() // (1) collect cue start time\n\tskipWhitespace()\n\tif (input.substr(0, 3) !== '-->') { // (3) next characters must match \"-->\"\n\t\tthrow new WebVttParsingError(BAD_TIMESTAMP + \" (time stamps must be separated by '-->'): \")\n\t}\n\tinput = input.substr(3)\n\tskipWhitespace()\n\tcue.endTime = consumeTimeStamp() // (5) collect cue end time\n\n\t// 4.1 WebVTT cue settings list.\n\tskipWhitespace()\n\tconsumeCueSettings(input, cue)\n}\n","import type { ValueOf } from '@svta/cml-utils'\n\nexport const WebVttParserState = {\n\tINITIAL: 'INITIAL',\n\tHEADER: 'HEADER',\n\tREGION: 'REGION',\n\tSTYLE: 'STYLE',\n\tNOTE: 'NOTE',\n\tBLOCKS: 'BLOCKS',\n\tID: 'ID',\n\tCUE: 'CUE',\n\tCUE_TEXT: 'CUE_EXT',\n\tBAD_CUE: 'BAD_CUE',\n\tBAD_WEBVTT: 'BAD_WEBVTT',\n} as const\n\nexport type WebVttParserState = ValueOf<typeof WebVttParserState>;\n","import { createWebVttCue } from './createWebVttCue.ts'\nimport { createWebVttRegion } from './createWebVttRegion.ts'\nimport { parseCue } from './parse/parseCue.ts'\nimport { parseOptions } from './parse/parseOptions.ts'\nimport { parseTimeStamp } from './parse/parseTimestamp.ts'\nimport { Settings } from './parse/Settings.ts'\nimport { WebVttParserState } from './parse/WebVttParserState.ts'\nimport type { TimestampMap } from './TimestampMap.ts'\nimport type { WebVttCue } from './WebVttCue.ts'\nimport type { WebVttCueFactory } from './WebVttCueFactory.ts'\nimport type { WebVttParserOptions } from './WebVttParserOptions.ts'\nimport { WebVttParsingError } from './WebVttParsingError.ts'\nimport type { WebVttRegion } from './WebVttRegion.ts'\nimport type { WebVttRegionFactory } from './WebVttRegionFactory.ts'\n\nconst BAD_SIGNATURE = 'Malformed WebVTT signature.'\nconst createCue = (): WebVttCue => typeof VTTCue !== 'undefined' ? new VTTCue(0, 0, '') : createWebVttCue()\nconst createRegion = (): WebVttRegion => typeof VTTRegion !== 'undefined' ? new VTTRegion() : createWebVttRegion()\n\n/**\n * A WebVTT parser.\n *\n *\n * @beta\n *\n * @example\n * {@includeCode ../test/WebVttParser.test.ts#example}\n *\n * @see {@link https://www.w3.org/TR/webvtt1/ | WebVTT Specification}\n */\nexport class WebVttParser {\n\tprivate state: WebVttParserState\n\tprivate buffer: string\n\tprivate regionList: WebVttRegion[]\n\tprivate regionSettings: Settings | null = null\n\tprivate style: string\n\tprivate cue: WebVttCue | null = null\n\tprivate createCue: WebVttCueFactory\n\tprivate createRegion: WebVttRegionFactory\n\n\t/**\n\t * A callback function that is called when a parsing error occurs.\n\t */\n\tonparsingerror?: (error: WebVttParsingError) => void\n\n\t/**\n\t * A callback function that is called when a region is parsed.\n\t */\n\tonregion?: (region: WebVttRegion) => void\n\n\t/**\n\t * A callback function that is called when a timestamp map is parsed.\n\t */\n\tontimestampmap?: (timestampMap: TimestampMap) => void\n\n\t/**\n\t * A callback function that is called when a cue is parsed.\n\t */\n\toncue?: (cue: WebVttCue) => void\n\n\t/**\n\t * A callback function that is called when a style is parsed.\n\t */\n\tonstyle?: (style: string) => void\n\n\t/**\n\t * A callback function that is called when the parser is flushed.\n\t */\n\tonflush?: () => void\n\n\t/**\n\t * Create a new WebVTT parser.\n\t *\n\t * @param options - The options to use for the parser.\n\t */\n\tconstructor(options: WebVttParserOptions = {}) {\n\t\tconst useDomTypes = options.useDomTypes ?? true\n\t\tthis.createCue = options.createCue || useDomTypes ? createCue : createWebVttCue\n\t\tthis.createRegion = options.createRegion || useDomTypes ? createRegion : createWebVttRegion\n\n\t\tthis.state = WebVttParserState.INITIAL\n\t\tthis.buffer = ''\n\t\tthis.style = ''\n\t\tthis.regionList = []\n\t}\n\n\t/**\n\t * Parse the given data.\n\t *\n\t * @param data - The data to parse.\n\t * @param reuseCue - Whether to reuse the cue.\n\t * @returns The parser.\n\t */\n\tparse(data?: string, reuseCue: boolean = false): WebVttParser {\n\t\t// If there is no data then we will just try to parse whatever is in buffer already.\n\t\t// This may occur in circumstances, for example when flush() is called.\n\t\tif (data) {\n\t\t\tthis.buffer += data\n\t\t}\n\n\t\tconst collectNextLine = (): string => {\n\t\t\tconst buffer = this.buffer\n\t\t\tlet pos = 0\n\t\t\twhile (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tconst line = buffer.substr(0, pos)\n\t\t\t// Advance the buffer early in case we fail below.\n\t\t\tif (buffer[pos] === '\\r') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tif (buffer[pos] === '\\n') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tthis.buffer = buffer.substr(pos)\n\t\t\treturn line\n\t\t}\n\n\t\t// draft-pantos-http-live-streaming-20\n\t\t// https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n\t\t// 3.5 WebVTT\n\t\tconst parseTimestampMap = (input: string): void => {\n\t\t\tconst settings = new Settings()\n\n\t\t\tparseOptions(input, (k: string, v: string): void => {\n\t\t\t\tswitch (k) {\n\t\t\t\t\tcase 'MPEGT':\n\t\t\t\t\t\tsettings.integer(k + 'S', v)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'LOCA':\n\t\t\t\t\t\tsettings.set(k + 'L', parseTimeStamp(v))\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}, /[^\\d]:/, /,/)\n\n\t\t\tthis.ontimestampmap?.({\n\t\t\t\t'MPEGTS': settings.get('MPEGTS'),\n\t\t\t\t'LOCAL': settings.get('LOCAL'),\n\t\t\t})\n\t\t}\n\n\t\t// 3.2 WebVtt metadata header syntax\n\t\tconst parseHeader = (input: string): void => {\n\t\t\tif (input.match(/X-TIMESTAMP-MAP/)) {\n\t\t\t\t// This line contains HLS X-TIMESTAMP-MAP metadata\n\t\t\t\tparseOptions(input, (k: string, v: string): void => {\n\t\t\t\t\tswitch (k) {\n\t\t\t\t\t\tcase 'X-TIMESTAMP-MAP':\n\t\t\t\t\t\t\tparseTimestampMap(v)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}, /=/)\n\t\t\t}\n\t\t}\n\n\t\t// 6.1 WebVTT file parsing.\n\t\ttry {\n\t\t\tlet line!: string\n\n\t\t\tif (this.state === WebVttParserState.INITIAL) {\n\t\t\t\t// We can't start parsing until we have the first line.\n\t\t\t\tif (!/\\r\\n|\\n/.test(this.buffer)) {\n\t\t\t\t\treturn this\n\t\t\t\t}\n\n\t\t\t\tline = collectNextLine()\n\n\t\t\t\t// Remove the UTF-8 BOM if it exists.\n\t\t\t\tif (line.charCodeAt(0) === 0xFEFF) {\n\t\t\t\t\tline = line.slice(1)\n\t\t\t\t}\n\n\t\t\t\tconst m = line.match(/^WEBVTT([ \\t].*)?$/)\n\t\t\t\tif (!m || !m[0]) {\n\t\t\t\t\tthrow new WebVttParsingError(BAD_SIGNATURE)\n\t\t\t\t}\n\n\t\t\t\tthis.state = WebVttParserState.HEADER\n\t\t\t}\n\n\t\t\tlet alreadyCollectedLine = false\n\t\t\tlet sawCue = reuseCue\n\n\t\t\tif (!reuseCue) {\n\t\t\t\tthis.cue = null\n\t\t\t\tthis.regionSettings = null\n\t\t\t}\n\n\t\t\twhile (this.buffer) {\n\t\t\t\t// We can't parse a line until we have the full line.\n\t\t\t\tif (!/\\r\\n|\\n/.test(this.buffer)) {\n\t\t\t\t\treturn this\n\t\t\t\t}\n\n\t\t\t\tif (!alreadyCollectedLine) {\n\t\t\t\t\tline = collectNextLine()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\talreadyCollectedLine = false\n\t\t\t\t}\n\n\t\t\t\tswitch (this.state) {\n\t\t\t\t\tcase WebVttParserState.HEADER:\n\t\t\t\t\t\t// 13-18 - Allow a header (metadata) under the WEBVTT line.\n\t\t\t\t\t\tif (/:/.test(line)) {\n\t\t\t\t\t\t\tparseHeader(line)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!line) {\n\t\t\t\t\t\t\t// An empty line terminates the header and blocks section.\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.REGION:\n\t\t\t\t\t\tif (!line && this.regionSettings) {\n\t\t\t\t\t\t\t// create the region\n\t\t\t\t\t\t\tconst region = this.createRegion()\n\t\t\t\t\t\t\tregion.id = this.regionSettings.get('id', '')\n\t\t\t\t\t\t\tregion.width = this.regionSettings.get('width', 100)\n\t\t\t\t\t\t\tregion.lines = this.regionSettings.get('lines', 3)\n\t\t\t\t\t\t\tregion.regionAnchorX = this.regionSettings.get('regionanchorX', 0)\n\t\t\t\t\t\t\tregion.regionAnchorY = this.regionSettings.get('regionanchorY', 100)\n\t\t\t\t\t\t\tregion.viewportAnchorX = this.regionSettings.get('viewportanchorX', 0)\n\t\t\t\t\t\t\tregion.viewportAnchorY = this.regionSettings.get('viewportanchorY', 100)\n\t\t\t\t\t\t\tregion.scroll = this.regionSettings.get('scroll', '')\n\n\t\t\t\t\t\t\t// Register the region.\n\t\t\t\t\t\t\tthis.onregion?.(region)\n\n\t\t\t\t\t\t\t// Remember the VTTRegion for later in case we parse any VTTCues that reference it.\n\t\t\t\t\t\t\tthis.regionList.push(region)\n\n\t\t\t\t\t\t\t// An empty line terminates the REGION block\n\t\t\t\t\t\t\tthis.regionSettings = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if it's a new region block, create a new VTTRegion\n\t\t\t\t\t\tif (this.regionSettings === null) {\n\t\t\t\t\t\t\tthis.regionSettings = new Settings()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst regionSettings = this.regionSettings\n\n\t\t\t\t\t\t// parse region options and set it as appropriate on the region\n\t\t\t\t\t\tparseOptions(line, (k, v) => {\n\t\t\t\t\t\t\tswitch (k) {\n\t\t\t\t\t\t\t\tcase 'id':\n\t\t\t\t\t\t\t\t\tregionSettings.set(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'width':\n\t\t\t\t\t\t\t\t\tregionSettings.percent(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\t\t\t\tregionSettings.integer(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'regionanchor':\n\t\t\t\t\t\t\t\tcase 'viewportanchor':\n\t\t\t\t\t\t\t\t\tconst xy = v.split(',')\n\t\t\t\t\t\t\t\t\tif (xy.length !== 2) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// We have to make sure both x and y parse, so use a temporary\n\t\t\t\t\t\t\t\t\t// settings object here.\n\t\t\t\t\t\t\t\t\tconst anchor = new Settings()\n\t\t\t\t\t\t\t\t\tanchor.percent('x', xy[0])\n\t\t\t\t\t\t\t\t\tanchor.percent('y', xy[1])\n\t\t\t\t\t\t\t\t\tif (!anchor.has('x') || !anchor.has('y')) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tregionSettings.set(k + 'X', anchor.get('x'))\n\t\t\t\t\t\t\t\t\tregionSettings.set(k + 'Y', anchor.get('y'))\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'scroll':\n\t\t\t\t\t\t\t\t\tregionSettings.alt(k, v, ['up'])\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, /:/, /\\s/)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.STYLE:\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.onstyle?.(this.style)\n\t\t\t\t\t\t\tthis.style = ''\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.style += line + '\\n'\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.NOTE:\n\t\t\t\t\t\t// Ignore NOTE blocks.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.BLOCKS:\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a NOTE blocks\n\t\t\t\t\t\tif (/^NOTE($[ \\t])/.test(line)) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.NOTE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a REGION blocks\n\t\t\t\t\t\tif (/^REGION/.test(line) && !sawCue) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.REGION\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a STYLE blocks\n\t\t\t\t\t\tif (/^STYLE/.test(line) && !sawCue) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.STYLE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t// Process line as an ID.\n\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase WebVttParserState.ID:\n\t\t\t\t\t\t// Check for the start of NOTE blocks.\n\t\t\t\t\t\tif (/^NOTE($|[ \\t])/.test(line)) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.NOTE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 19-29 - Allow any number of line terminators, then initialize new cue values.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsawCue = true\n\n\t\t\t\t\t\tthis.cue = this.createCue()\n\t\t\t\t\t\tthis.cue.text ??= ''\n\n\t\t\t\t\t\tthis.state = WebVttParserState.CUE\n\t\t\t\t\t\t// 30-39 - Check if this line contains an optional identifier or timing data.\n\t\t\t\t\t\tif (line.indexOf('-->') === -1) {\n\t\t\t\t\t\t\tthis.cue.id = line\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t// Process line as start of a cue.\n\t\t\t\t\t/*falls through*/\n\t\t\t\t\tcase WebVttParserState.CUE:\n\t\t\t\t\t\t// 40 - Collect cue timings and settings.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tparseCue(line, this.cue!, this.regionList)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tthis.reportOrThrowError(e)\n\t\t\t\t\t\t\t// In case of an error ignore rest of the cue.\n\t\t\t\t\t\t\tthis.cue = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BAD_CUE\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.state = WebVttParserState.CUE_TEXT\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.CUE_TEXT:\n\t\t\t\t\t\tconst hasSubstring = line.indexOf('-->') !== -1\n\n\t\t\t\t\t\t// 34 - If we have an empty line then report the cue.\n\t\t\t\t\t\t// 35 - If we have the special substring '-->' then report the cue,\n\t\t\t\t\t\t// but do not collect the line as we need to process the current\n\t\t\t\t\t\t// one as a new cue.\n\t\t\t\t\t\tif (!line || hasSubstring && (alreadyCollectedLine = true)) {\n\t\t\t\t\t\t\t// We are done parsing this cue.\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis.oncue?.(this.cue!)\n\t\t\t\t\t\t\tthis.cue = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.cue?.text) {\n\t\t\t\t\t\t\tthis.cue.text += '\\n'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\tthis.cue!.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n')\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.BAD_CUE: // BADCUE\n\t\t\t\t\t\t// 54-62 - Collect and discard the remaining cue.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\tthis.reportOrThrowError(e)\n\n\t\t\t// If we are currently parsing a cue, report what we have.\n\t\t\tif (this.state === WebVttParserState.CUE_TEXT && this.cue && this.oncue) {\n\t\t\t\tthis.oncue(this.cue)\n\t\t\t}\n\t\t\tthis.cue = null\n\t\t\tthis.regionSettings = null\n\n\t\t\t// Enter BADWEBVTT state if header was not parsed correctly otherwise\n\t\t\t// another exception occurred so enter BADCUE state.\n\t\t\tthis.state = this.state === WebVttParserState.INITIAL ? WebVttParserState.BAD_WEBVTT : WebVttParserState.BAD_CUE\n\t\t}\n\t\treturn this\n\t}\n\n\t/**\n\t * Flush the parser.\n\t *\n\t * @returns The parser.\n\t */\n\tflush(): WebVttParser {\n\t\ttry {\n\t\t\t// Finish parsing the stream.\n\t\t\tthis.buffer += ''\n\t\t\t// Synthesize the end of the current cue or region.\n\t\t\tif (this.cue || this.state === WebVttParserState.HEADER) {\n\t\t\t\tthis.buffer += '\\n\\n'\n\t\t\t\tthis.parse(undefined, true)\n\t\t\t}\n\t\t\t// If we've flushed, parsed, and we're still on the INITIAL state then\n\t\t\t// that means we don't have enough of the stream to parse the first\n\t\t\t// line.\n\t\t\tif (this.state === WebVttParserState.INITIAL) {\n\t\t\t\tthrow new WebVttParsingError(BAD_SIGNATURE)\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\tthis.reportOrThrowError(e)\n\t\t}\n\n\t\tthis.onflush?.()\n\n\t\treturn this\n\t}\n\n\t// If the error is a ParsingError then report it to the consumer if\n\t// possible. If it's not a ParsingError then throw it like normal.\n\tprivate reportOrThrowError(error: any): void {\n\t\tif (error instanceof WebVttParsingError) {\n\t\t\tthis.onparsingerror?.(error)\n\t\t}\n\t\telse {\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import type { WebVttCue } from './WebVttCue.ts'\nimport { WebVttParser } from './WebVttParser.ts'\nimport type { WebVttParseResult } from './WebVttParseResult.ts'\nimport type { WebVttParserOptions } from './WebVttParserOptions.ts'\nimport type { WebVttParsingError } from './WebVttParsingError.ts'\nimport type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Parse a WebVTT string into a WebVttParseResult.\n *\n * @param text - The WebVTT string to parse.\n * @param options - The options to use for the parser.\n * @returns The parsed WebVttParseResult.\n *\n *\n * @beta\n *\n * @example\n * {@includeCode ../test/parseWebVtt.test.ts#example}\n */\nexport async function parseWebVtt(text: string, options?: WebVttParserOptions): Promise<WebVttParseResult> {\n\tconst parser = new WebVttParser(options)\n\tconst cues: WebVttCue[] = []\n\tconst regions: WebVttRegion[] = []\n\tconst styles: string[] = []\n\tconst errors: WebVttParsingError[] = []\n\tparser.oncue = cue => cues.push(cue)\n\tparser.onregion = region => regions.push(region)\n\tparser.onstyle = style => styles.push(style)\n\tparser.onparsingerror = error => errors.push(error)\n\tparser.parse(text)\n\tparser.flush()\n\n\treturn { cues, regions, styles, errors }\n}\n","import type { WebVttCue } from './WebVttCue.ts'\n\n/**\n * Convert a generic WebVTT cue to a VTTCue.\n *\n * @param cue - The WebVTT cue to convert.\n * @returns The converted VTTCue.\n *\n *\n * @beta\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue | VTTCue}\n */\nexport function toVttCue(cue: WebVttCue): VTTCue {\n\tconst vttCue = new VTTCue(cue.startTime, cue.endTime, cue.text)\n\tvttCue.id = cue.id\n\tvttCue.region = cue.region\n\tvttCue.vertical = cue.vertical\n\tvttCue.snapToLines = cue.snapToLines\n\tvttCue.line = cue.line\n\tvttCue.lineAlign = cue.lineAlign\n\tvttCue.position = cue.position\n\tvttCue.positionAlign = cue.positionAlign\n\tvttCue.size = cue.size\n\tvttCue.pauseOnExit = cue.pauseOnExit\n\n\t// Safari still uses the old middle value and won't accept center\n\ttry {\n\t\tvttCue.align = 'center'\n\t}\n\tcatch (e) {\n\t\tvttCue.align = 'middle' as AlignSetting\n\t}\n\n\treturn vttCue\n}\n","import type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Convert a WebVTT region to a VTTRegion.\n *\n * @param region - The WebVTT region to convert.\n * @returns The converted VTTRegion.\n *\n *\n * @beta\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion | VTTRegion}\n */\nexport function toVttRegion(region: WebVttRegion): VTTRegion {\n\tconst vttRegion = new VTTRegion()\n\tvttRegion.id = region.id\n\tvttRegion.width = region.width\n\tvttRegion.lines = region.lines\n\tvttRegion.regionAnchorX = region.regionAnchorX\n\tvttRegion.regionAnchorY = region.regionAnchorY\n\tvttRegion.viewportAnchorX = region.viewportAnchorX\n\tvttRegion.viewportAnchorY = region.viewportAnchorY\n\tvttRegion.scroll = region.scroll\n\n\treturn vttRegion\n}\n","import type { ValueOf } from '@svta/cml-utils'\n\n/**\n * WebVTT result types.\n *\n *\n * @beta\n *\n * @enum\n */\nexport const WebVttResultType = {\n\tCUE: 'cue',\n\tREGION: 'region',\n\tTIMESTAMP_MAP: 'timestampmap',\n\tSTYLE: 'style',\n\tERROR: 'error',\n} as const\n\n/**\n * @beta\n */\nexport type WebVttResultType = ValueOf<typeof WebVttResultType>;\n","import { WebVttParser } from './WebVttParser.ts'\nimport type { WebVttResult } from './WebVttResult.ts'\nimport { WebVttResultType } from './WebVttResultType.ts'\n\n/**\n * WebVTT transform stream transformer.\n *\n *\n * @beta\n */\nexport class WebVttTransformer {\n\tprivate readonly parser: WebVttParser\n\tprivate results: WebVttResult[] = []\n\n\t/**\n\t * Creates a new WebVTT transformer.\n\t */\n\tconstructor() {\n\t\tthis.parser = new WebVttParser()\n\t\tthis.parser.oncue = cue => this.results.push({ type: WebVttResultType.CUE, data: cue })\n\t\tthis.parser.onregion = region => this.results.push({ type: WebVttResultType.REGION, data: region })\n\t\tthis.parser.onstyle = style => this.results.push({ type: WebVttResultType.STYLE, data: style })\n\t\tthis.parser.ontimestampmap = timestampmap => this.results.push({ type: WebVttResultType.TIMESTAMP_MAP, data: timestampmap })\n\t\tthis.parser.onparsingerror = error => this.results.push({ type: WebVttResultType.ERROR, data: error })\n\t}\n\n\tprivate enqueueResults(controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\t// TODO: Should parse errors throw?\n\t\tfor (const result of this.results) {\n\t\t\tcontroller.enqueue(result)\n\t\t}\n\n\t\tthis.results = []\n\t}\n\n\t/**\n\t * Transforms a chunk of WebVTT data.\n\t *\n\t * @param chunk - The chunk of WebVTT data to transform.\n\t * @param controller - The controller to enqueue the results to.\n\t */\n\ttransform(chunk: string, controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\ttry {\n\t\t\tthis.parser.parse(chunk)\n\t\t\tthis.enqueueResults(controller)\n\t\t}\n\t\tcatch (error) {\n\t\t\tcontroller.error(error)\n\t\t}\n\t}\n\n\t/**\n\t * Flushes the transformer.\n\t *\n\t * @param controller - The controller to enqueue the results to.\n\t */\n\tflush(controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\ttry {\n\t\t\tthis.parser.flush()\n\t\t\tthis.enqueueResults(controller)\n\t\t}\n\t\tcatch (error) {\n\t\t\tcontroller.error(error)\n\t\t}\n\t}\n}\n","import type { WebVttResult } from './WebVttResult.ts'\nimport { WebVttTransformer } from './WebVttTransformer.ts'\n\n/**\n * WebVTT transform stream.\n *\n *\n * @beta\n */\nexport class WebVttTransformStream extends TransformStream<string, WebVttResult> {\n\tconstructor(writableStrategy?: QueuingStrategy<string>, readableStrategy?: QueuingStrategy<WebVttResult>) {\n\t\tsuper(new WebVttTransformer(), writableStrategy, readableStrategy)\n\t}\n}\n"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","names":["input","cue","line!: string","cues: WebVttCue[]","regions: WebVttRegion[]","styles: string[]","errors: WebVttParsingError[]"],"sources":["../src/createWebVttCue.ts","../src/createWebVttRegion.ts","../src/WebVttParsingError.ts","../src/parse/parseOptions.ts","../src/parse/parseTimestamp.ts","../src/parse/Settings.ts","../src/parse/parseCue.ts","../src/parse/WebVttParserState.ts","../src/WebVttParser.ts","../src/parseWebVtt.ts","../src/toVttCue.ts","../src/toVttRegion.ts","../src/WebVttResultType.ts","../src/WebVttTransformer.ts","../src/WebVttTransformStream.ts"],"sourcesContent":["import type { WebVttCue } from './WebVttCue.ts'\n\n/**\n * Create a generic WebVttCue object with default values\n * that match the DOM VTTCue interface.\n *\n * @returns A WebVttCue object with default values\n *\n * @public\n */\nexport function createWebVttCue(): WebVttCue {\n\treturn {\n\t\tid: '',\n\t\tstartTime: 0,\n\t\tendTime: 0,\n\t\tregion: null,\n\t\tsnapToLines: true,\n\t\tline: 'auto',\n\t\tlineAlign: 'start',\n\t\tposition: 'auto',\n\t\tpositionAlign: 'auto',\n\t\tsize: 100,\n\t\talign: 'center',\n\t\tvertical: '',\n\t\tpauseOnExit: false,\n\t\ttext: '',\n\t}\n}\n","import type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Create a generic WebVttRegion object with default values\n * that match the DOM VTTRegion interface.\n *\n * @returns A WebVttRegion object with default values\n *\n * @public\n */\nexport function createWebVttRegion(): WebVttRegion {\n\treturn {\n\t\tid: '',\n\t\twidth: 100,\n\t\tlines: 3,\n\t\tregionAnchorX: 0,\n\t\tregionAnchorY: 100,\n\t\tviewportAnchorX: 0,\n\t\tviewportAnchorY: 100,\n\t\tscroll: '',\n\t}\n}\n","/**\n * A WebVTT parsing error.\n *\n * @public\n */\nexport class WebVttParsingError extends Error {\n\n\t/**\n\t * Create a new WebVTT parsing error.\n\t *\n\t * @param message - The message of the error.\n\t */\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t\tthis.name = 'WebVttParsingError'\n\t}\n}\n","// Helper function to parse input into groups separated by 'groupDelim', and\n// interpet each group as a key/value pair separated by 'keyValueDelim'.\nexport function parseOptions(input: string, callback: (k: string, v: string) => void, keyValueDelim: string | RegExp, groupDelim?: string | RegExp): void {\n\t// TODO: Optimize parsing to avoid creating new arrays and strings.\n\tconst groups = groupDelim ? input.split(groupDelim) : [input]\n\n\tfor (const i in groups) {\n\t\tif (typeof groups[i] !== 'string') {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst kv = groups[i].split(keyValueDelim)\n\t\tif (kv.length !== 2) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst k = kv[0]\n\t\tconst v = kv[1].trim()\n\n\t\t// TODO: Return a value instead of using a callback.\n\t\tcallback(k, v)\n\t}\n}\n","function computeSeconds(h: number, m: number, s: number, f: number): number {\n\treturn (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000\n}\n\n// Try to parse input as a time stamp.\nexport function parseTimeStamp(input: string): number | null {\n\t// TODO: Optimize parsing to avoid creating new arrays and strings.\n\tconst m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/)\n\n\tif (!m) {\n\t\treturn null\n\t}\n\n\tconst first = parseInt(m[1])\n\tconst second = parseInt(m[2])\n\tconst third = parseInt(m[3]?.replace(':', '') || '0')\n\tconst fourth = parseInt(m[4])\n\n\tif (m[3]) {\n\t\t// Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n\t\treturn computeSeconds(first, second, third, fourth)\n\t}\n\telse if (first > 59) {\n\t\t// Timestamp takes the form of [hours]:[minutes].[milliseconds]\n\t\t// First position is hours as it's over 59.\n\t\treturn computeSeconds(first, second, 0, fourth)\n\t}\n\telse {\n\t\t// Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n\t\treturn computeSeconds(0, first, second, fourth)\n\t}\n}\n","import type { WebVttRegion } from '../WebVttRegion.ts'\n\nexport type SettingsValue = WebVttRegion | string | number | boolean | null;\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nexport class Settings {\n\tprivate values: Record<string, SettingsValue>\n\n\tconstructor() {\n\t\tthis.values = Object.create(null)\n\t}\n\n\t// Only accept the first assignment to any key.\n\tset(k: string, v: SettingsValue): void {\n\t\tif (this.get(k) || v === '') {\n\t\t\treturn\n\t\t}\n\n\t\tthis.values[k] = v\n\t}\n\n\t// Return the value for a key, or a default value.\n\t// If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n\t// a number of possible default values as properties where 'defaultKey' is\n\t// the key of the property that will be chosen; otherwise it's assumed to be\n\t// a single value.\n\tget<T = SettingsValue>(k: string, dflt?: T): T {\n\t\tif (this.has(k)) {\n\t\t\treturn this.values[k] as T\n\t\t}\n\n\t\treturn dflt as T\n\t}\n\n\t// Check whether we have a value for a key.\n\thas(k: string): boolean {\n\t\treturn k in this.values\n\t}\n\n\t// Accept a setting if its one of the given alternatives.\n\talt(k: string, v: string, a: string[]): void {\n\t\tfor (const n of a) {\n\t\t\tif (v === n) {\n\t\t\t\tthis.set(k, v)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Accept a setting if its a valid (signed) integer.\n\tinteger(k: string, v: string): void {\n\t\tif (/^-?\\d+$/.test(v)) { // integer\n\t\t\tthis.set(k, parseInt(v, 10))\n\t\t}\n\t}\n\n\t// Accept a setting if its a valid percentage.\n\tpercent(k: string, v: string): boolean {\n\t\tif (v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/)) {\n\t\t\tconst value = parseFloat(v)\n\t\t\tif (value >= 0 && value <= 100) {\n\t\t\t\tthis.set(k, value)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n}\n","import type { WebVttCue } from '../WebVttCue.ts'\nimport { WebVttParsingError } from '../WebVttParsingError.ts'\nimport type { WebVttRegion } from '../WebVttRegion.ts'\nimport { parseOptions } from './parseOptions.ts'\nimport { parseTimeStamp } from './parseTimestamp.ts'\nimport { Settings } from './Settings.ts'\n\nconst BAD_TIMESTAMP = 'Malformed time stamp.'\n\nexport function parseCue(input: string, cue: WebVttCue, regionList: WebVttRegion[]): void {\n\t// Remember the original input if we need to throw an error.\n\tconst oInput = input\n\t// 4.1 WebVTT timestamp\n\tfunction consumeTimeStamp() {\n\t\tconst ts = parseTimeStamp(input)\n\t\tif (ts === null) {\n\t\t\tthrow new WebVttParsingError(BAD_TIMESTAMP + oInput)\n\t\t}\n\t\t// Remove time stamp from input.\n\t\tinput = input.replace(/^[^\\sa-zA-Z-]+/, '')\n\t\treturn ts\n\t}\n\n\t// 4.4.2 WebVTT cue settings\n\tfunction consumeCueSettings(input: string, cue: WebVttCue): void {\n\t\tconst settings = new Settings()\n\n\t\tparseOptions(input, function (k, v) {\n\t\t\tswitch (k) {\n\t\t\t\tcase 'region': {\n\t\t\t\t\t// Find the last region we parsed with the same region id.\n\t\t\t\t\tfor (let i = regionList.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (regionList[i].id === v) {\n\t\t\t\t\t\t\tsettings.set(k, regionList[i])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'vertical': {\n\t\t\t\t\tsettings.alt(k, v, ['rl', 'lr'])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'line': {\n\t\t\t\t\tconst vals = v.split(',')\n\t\t\t\t\tconst vals0 = vals[0]\n\t\t\t\t\tsettings.integer(k, vals0)\n\t\t\t\t\tif (settings.percent(k, vals0)) {\n\t\t\t\t\t\tsettings.set('snapToLines', false)\n\t\t\t\t\t}\n\t\t\t\t\tsettings.alt(k, vals0, ['auto'])\n\t\t\t\t\tif (vals.length === 2) {\n\t\t\t\t\t\tsettings.alt('lineAlign', vals[1], ['start', 'center', 'end'])\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'position': {\n\t\t\t\t\tconst vals = v.split(',')\n\t\t\t\t\tsettings.percent(k, vals[0])\n\t\t\t\t\tif (vals.length === 2) {\n\t\t\t\t\t\tsettings.alt('positionAlign', vals[1], ['line-left', 'center', 'line-right', 'auto'])\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'size': {\n\t\t\t\t\tsettings.percent(k, v)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'align': {\n\t\t\t\t\tsettings.alt(k, v, ['start', 'center', 'end', 'left', 'right'])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}, /:/, /\\s/)\n\n\t\t// Apply default values for any missing fields.\n\t\tcue.region = settings.get('region', null)\n\t\tcue.vertical = settings.get('vertical', '')\n\t\ttry {\n\t\t\tcue.line = settings.get('line', 'auto')\n\t\t}\n\t\tcatch (e) {\n\t\t\t// eslint-ignore-line\n\t\t}\n\t\tcue.lineAlign = settings.get('lineAlign', 'start')\n\t\tcue.snapToLines = settings.get('snapToLines', true)\n\t\tcue.size = settings.get('size', 100)\n\t\t// Safari still uses the old middle value and won't accept center\n\t\ttry {\n\t\t\tcue.align = settings.get('align', 'center')\n\t\t}\n\t\tcatch (e) {\n\t\t\tcue.align = settings.get('align', 'middle' as AlignSetting)\n\t\t}\n\t\ttry {\n\t\t\tcue.position = settings.get('position', 'auto')\n\t\t}\n\t\tcatch (e) {\n\t\t\tconst positions = {\n\t\t\t\tstart: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tcenter: 50,\n\t\t\t\tmiddle: 50,\n\t\t\t\tend: 100,\n\t\t\t\tright: 100,\n\t\t\t}\n\n\t\t\tcue.position = settings.get('position', positions[cue.align])\n\t\t}\n\n\t\tcue.positionAlign = settings.get('positionAlign', 'auto')\n\t}\n\n\tfunction skipWhitespace() {\n\t\tinput = input.replace(/^\\s+/, '')\n\t}\n\n\t// 4.1 WebVTT cue timings.\n\tskipWhitespace()\n\tcue.startTime = consumeTimeStamp() // (1) collect cue start time\n\tskipWhitespace()\n\tif (input.substr(0, 3) !== '-->') { // (3) next characters must match \"-->\"\n\t\tthrow new WebVttParsingError(BAD_TIMESTAMP + \" (time stamps must be separated by '-->'): \")\n\t}\n\tinput = input.substr(3)\n\tskipWhitespace()\n\tcue.endTime = consumeTimeStamp() // (5) collect cue end time\n\n\t// 4.1 WebVTT cue settings list.\n\tskipWhitespace()\n\tconsumeCueSettings(input, cue)\n}\n","import type { ValueOf } from '@svta/cml-utils'\n\nexport const WebVttParserState = {\n\tINITIAL: 'INITIAL',\n\tHEADER: 'HEADER',\n\tREGION: 'REGION',\n\tSTYLE: 'STYLE',\n\tNOTE: 'NOTE',\n\tBLOCKS: 'BLOCKS',\n\tID: 'ID',\n\tCUE: 'CUE',\n\tCUE_TEXT: 'CUE_EXT',\n\tBAD_CUE: 'BAD_CUE',\n\tBAD_WEBVTT: 'BAD_WEBVTT',\n} as const\n\nexport type WebVttParserState = ValueOf<typeof WebVttParserState>;\n","import { createWebVttCue } from './createWebVttCue.ts'\nimport { createWebVttRegion } from './createWebVttRegion.ts'\nimport { parseCue } from './parse/parseCue.ts'\nimport { parseOptions } from './parse/parseOptions.ts'\nimport { parseTimeStamp } from './parse/parseTimestamp.ts'\nimport { Settings } from './parse/Settings.ts'\nimport { WebVttParserState } from './parse/WebVttParserState.ts'\nimport type { TimestampMap } from './TimestampMap.ts'\nimport type { WebVttCue } from './WebVttCue.ts'\nimport type { WebVttCueFactory } from './WebVttCueFactory.ts'\nimport type { WebVttParserOptions } from './WebVttParserOptions.ts'\nimport { WebVttParsingError } from './WebVttParsingError.ts'\nimport type { WebVttRegion } from './WebVttRegion.ts'\nimport type { WebVttRegionFactory } from './WebVttRegionFactory.ts'\n\nconst BAD_SIGNATURE = 'Malformed WebVTT signature.'\nconst createCue = (): WebVttCue => typeof VTTCue !== 'undefined' ? new VTTCue(0, 0, '') : createWebVttCue()\nconst createRegion = (): WebVttRegion => typeof VTTRegion !== 'undefined' ? new VTTRegion() : createWebVttRegion()\n\n/**\n * A WebVTT parser.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/WebVttParser.test.ts#example}\n *\n * @see {@link https://www.w3.org/TR/webvtt1/ | WebVTT Specification}\n */\nexport class WebVttParser {\n\tprivate state: WebVttParserState\n\tprivate buffer: string\n\tprivate regionList: WebVttRegion[]\n\tprivate regionSettings: Settings | null = null\n\tprivate style: string\n\tprivate cue: WebVttCue | null = null\n\tprivate createCue: WebVttCueFactory\n\tprivate createRegion: WebVttRegionFactory\n\n\t/**\n\t * A callback function that is called when a parsing error occurs.\n\t */\n\tonparsingerror?: (error: WebVttParsingError) => void\n\n\t/**\n\t * A callback function that is called when a region is parsed.\n\t */\n\tonregion?: (region: WebVttRegion) => void\n\n\t/**\n\t * A callback function that is called when a timestamp map is parsed.\n\t */\n\tontimestampmap?: (timestampMap: TimestampMap) => void\n\n\t/**\n\t * A callback function that is called when a cue is parsed.\n\t */\n\toncue?: (cue: WebVttCue) => void\n\n\t/**\n\t * A callback function that is called when a style is parsed.\n\t */\n\tonstyle?: (style: string) => void\n\n\t/**\n\t * A callback function that is called when the parser is flushed.\n\t */\n\tonflush?: () => void\n\n\t/**\n\t * Create a new WebVTT parser.\n\t *\n\t * @param options - The options to use for the parser.\n\t */\n\tconstructor(options: WebVttParserOptions = {}) {\n\t\tconst useDomTypes = options.useDomTypes ?? true\n\t\tthis.createCue = options.createCue || useDomTypes ? createCue : createWebVttCue\n\t\tthis.createRegion = options.createRegion || useDomTypes ? createRegion : createWebVttRegion\n\n\t\tthis.state = WebVttParserState.INITIAL\n\t\tthis.buffer = ''\n\t\tthis.style = ''\n\t\tthis.regionList = []\n\t}\n\n\t/**\n\t * Parse the given data.\n\t *\n\t * @param data - The data to parse.\n\t * @param reuseCue - Whether to reuse the cue.\n\t * @returns The parser.\n\t */\n\tparse(data?: string, reuseCue: boolean = false): WebVttParser {\n\t\t// If there is no data then we will just try to parse whatever is in buffer already.\n\t\t// This may occur in circumstances, for example when flush() is called.\n\t\tif (data) {\n\t\t\tthis.buffer += data\n\t\t}\n\n\t\tconst collectNextLine = (): string => {\n\t\t\tconst buffer = this.buffer\n\t\t\tlet pos = 0\n\t\t\twhile (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tconst line = buffer.substr(0, pos)\n\t\t\t// Advance the buffer early in case we fail below.\n\t\t\tif (buffer[pos] === '\\r') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tif (buffer[pos] === '\\n') {\n\t\t\t\t++pos\n\t\t\t}\n\t\t\tthis.buffer = buffer.substr(pos)\n\t\t\treturn line\n\t\t}\n\n\t\t// draft-pantos-http-live-streaming-20\n\t\t// https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n\t\t// 3.5 WebVTT\n\t\tconst parseTimestampMap = (input: string): void => {\n\t\t\tconst settings = new Settings()\n\n\t\t\tparseOptions(input, (k: string, v: string): void => {\n\t\t\t\tswitch (k) {\n\t\t\t\t\tcase 'MPEGT':\n\t\t\t\t\t\tsettings.integer(k + 'S', v)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'LOCA':\n\t\t\t\t\t\tsettings.set(k + 'L', parseTimeStamp(v))\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}, /[^\\d]:/, /,/)\n\n\t\t\tthis.ontimestampmap?.({\n\t\t\t\t'MPEGTS': settings.get('MPEGTS'),\n\t\t\t\t'LOCAL': settings.get('LOCAL'),\n\t\t\t})\n\t\t}\n\n\t\t// 3.2 WebVtt metadata header syntax\n\t\tconst parseHeader = (input: string): void => {\n\t\t\tif (input.match(/X-TIMESTAMP-MAP/)) {\n\t\t\t\t// This line contains HLS X-TIMESTAMP-MAP metadata\n\t\t\t\tparseOptions(input, (k: string, v: string): void => {\n\t\t\t\t\tswitch (k) {\n\t\t\t\t\t\tcase 'X-TIMESTAMP-MAP':\n\t\t\t\t\t\t\tparseTimestampMap(v)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}, /=/)\n\t\t\t}\n\t\t}\n\n\t\t// 6.1 WebVTT file parsing.\n\t\ttry {\n\t\t\tlet line!: string\n\n\t\t\tif (this.state === WebVttParserState.INITIAL) {\n\t\t\t\t// We can't start parsing until we have the first line.\n\t\t\t\tif (!/\\r\\n|\\n/.test(this.buffer)) {\n\t\t\t\t\treturn this\n\t\t\t\t}\n\n\t\t\t\tline = collectNextLine()\n\n\t\t\t\t// Remove the UTF-8 BOM if it exists.\n\t\t\t\tif (line.charCodeAt(0) === 0xFEFF) {\n\t\t\t\t\tline = line.slice(1)\n\t\t\t\t}\n\n\t\t\t\tconst m = line.match(/^WEBVTT([ \\t].*)?$/)\n\t\t\t\tif (!m || !m[0]) {\n\t\t\t\t\tthrow new WebVttParsingError(BAD_SIGNATURE)\n\t\t\t\t}\n\n\t\t\t\tthis.state = WebVttParserState.HEADER\n\t\t\t}\n\n\t\t\tlet alreadyCollectedLine = false\n\t\t\tlet sawCue = reuseCue\n\n\t\t\tif (!reuseCue) {\n\t\t\t\tthis.cue = null\n\t\t\t\tthis.regionSettings = null\n\t\t\t}\n\n\t\t\twhile (this.buffer) {\n\t\t\t\t// We can't parse a line until we have the full line.\n\t\t\t\tif (!/\\r\\n|\\n/.test(this.buffer)) {\n\t\t\t\t\treturn this\n\t\t\t\t}\n\n\t\t\t\tif (!alreadyCollectedLine) {\n\t\t\t\t\tline = collectNextLine()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\talreadyCollectedLine = false\n\t\t\t\t}\n\n\t\t\t\tswitch (this.state) {\n\t\t\t\t\tcase WebVttParserState.HEADER:\n\t\t\t\t\t\t// 13-18 - Allow a header (metadata) under the WEBVTT line.\n\t\t\t\t\t\tif (/:/.test(line)) {\n\t\t\t\t\t\t\tparseHeader(line)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!line) {\n\t\t\t\t\t\t\t// An empty line terminates the header and blocks section.\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.REGION:\n\t\t\t\t\t\tif (!line && this.regionSettings) {\n\t\t\t\t\t\t\t// create the region\n\t\t\t\t\t\t\tconst region = this.createRegion()\n\t\t\t\t\t\t\tregion.id = this.regionSettings.get('id', '')\n\t\t\t\t\t\t\tregion.width = this.regionSettings.get('width', 100)\n\t\t\t\t\t\t\tregion.lines = this.regionSettings.get('lines', 3)\n\t\t\t\t\t\t\tregion.regionAnchorX = this.regionSettings.get('regionanchorX', 0)\n\t\t\t\t\t\t\tregion.regionAnchorY = this.regionSettings.get('regionanchorY', 100)\n\t\t\t\t\t\t\tregion.viewportAnchorX = this.regionSettings.get('viewportanchorX', 0)\n\t\t\t\t\t\t\tregion.viewportAnchorY = this.regionSettings.get('viewportanchorY', 100)\n\t\t\t\t\t\t\tregion.scroll = this.regionSettings.get('scroll', '')\n\n\t\t\t\t\t\t\t// Register the region.\n\t\t\t\t\t\t\tthis.onregion?.(region)\n\n\t\t\t\t\t\t\t// Remember the VTTRegion for later in case we parse any VTTCues that reference it.\n\t\t\t\t\t\t\tthis.regionList.push(region)\n\n\t\t\t\t\t\t\t// An empty line terminates the REGION block\n\t\t\t\t\t\t\tthis.regionSettings = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if it's a new region block, create a new VTTRegion\n\t\t\t\t\t\tif (this.regionSettings === null) {\n\t\t\t\t\t\t\tthis.regionSettings = new Settings()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst regionSettings = this.regionSettings\n\n\t\t\t\t\t\t// parse region options and set it as appropriate on the region\n\t\t\t\t\t\tparseOptions(line, (k, v) => {\n\t\t\t\t\t\t\tswitch (k) {\n\t\t\t\t\t\t\t\tcase 'id':\n\t\t\t\t\t\t\t\t\tregionSettings.set(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'width':\n\t\t\t\t\t\t\t\t\tregionSettings.percent(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\t\t\t\tregionSettings.integer(k, v)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'regionanchor':\n\t\t\t\t\t\t\t\tcase 'viewportanchor':\n\t\t\t\t\t\t\t\t\tconst xy = v.split(',')\n\t\t\t\t\t\t\t\t\tif (xy.length !== 2) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// We have to make sure both x and y parse, so use a temporary\n\t\t\t\t\t\t\t\t\t// settings object here.\n\t\t\t\t\t\t\t\t\tconst anchor = new Settings()\n\t\t\t\t\t\t\t\t\tanchor.percent('x', xy[0])\n\t\t\t\t\t\t\t\t\tanchor.percent('y', xy[1])\n\t\t\t\t\t\t\t\t\tif (!anchor.has('x') || !anchor.has('y')) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tregionSettings.set(k + 'X', anchor.get('x'))\n\t\t\t\t\t\t\t\t\tregionSettings.set(k + 'Y', anchor.get('y'))\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\tcase 'scroll':\n\t\t\t\t\t\t\t\t\tregionSettings.alt(k, v, ['up'])\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, /:/, /\\s/)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.STYLE:\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.onstyle?.(this.style)\n\t\t\t\t\t\t\tthis.style = ''\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BLOCKS\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.style += line + '\\n'\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.NOTE:\n\t\t\t\t\t\t// Ignore NOTE blocks.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.BLOCKS:\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a NOTE blocks\n\t\t\t\t\t\tif (/^NOTE($[ \\t])/.test(line)) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.NOTE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a REGION blocks\n\t\t\t\t\t\tif (/^REGION/.test(line) && !sawCue) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.REGION\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for the start of a STYLE blocks\n\t\t\t\t\t\tif (/^STYLE/.test(line) && !sawCue) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.STYLE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t// Process line as an ID.\n\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase WebVttParserState.ID:\n\t\t\t\t\t\t// Check for the start of NOTE blocks.\n\t\t\t\t\t\tif (/^NOTE($|[ \\t])/.test(line)) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.NOTE\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 19-29 - Allow any number of line terminators, then initialize new cue values.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsawCue = true\n\n\t\t\t\t\t\tthis.cue = this.createCue()\n\t\t\t\t\t\tthis.cue.text ??= ''\n\n\t\t\t\t\t\tthis.state = WebVttParserState.CUE\n\t\t\t\t\t\t// 30-39 - Check if this line contains an optional identifier or timing data.\n\t\t\t\t\t\tif (line.indexOf('-->') === -1) {\n\t\t\t\t\t\t\tthis.cue.id = line\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t// Process line as start of a cue.\n\t\t\t\t\t/*falls through*/\n\t\t\t\t\tcase WebVttParserState.CUE:\n\t\t\t\t\t\t// 40 - Collect cue timings and settings.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tparseCue(line, this.cue!, this.regionList)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tthis.reportOrThrowError(e)\n\t\t\t\t\t\t\t// In case of an error ignore rest of the cue.\n\t\t\t\t\t\t\tthis.cue = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.BAD_CUE\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.state = WebVttParserState.CUE_TEXT\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.CUE_TEXT:\n\t\t\t\t\t\tconst hasSubstring = line.indexOf('-->') !== -1\n\n\t\t\t\t\t\t// 34 - If we have an empty line then report the cue.\n\t\t\t\t\t\t// 35 - If we have the special substring '-->' then report the cue,\n\t\t\t\t\t\t// but do not collect the line as we need to process the current\n\t\t\t\t\t\t// one as a new cue.\n\t\t\t\t\t\tif (!line || hasSubstring && (alreadyCollectedLine = true)) {\n\t\t\t\t\t\t\t// We are done parsing this cue.\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis.oncue?.(this.cue!)\n\t\t\t\t\t\t\tthis.cue = null\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.cue?.text) {\n\t\t\t\t\t\t\tthis.cue.text += '\\n'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\tthis.cue!.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n')\n\t\t\t\t\t\tcontinue\n\n\t\t\t\t\tcase WebVttParserState.BAD_CUE: // BADCUE\n\t\t\t\t\t\t// 54-62 - Collect and discard the remaining cue.\n\t\t\t\t\t\tif (!line) {\n\t\t\t\t\t\t\tthis.state = WebVttParserState.ID\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\tthis.reportOrThrowError(e)\n\n\t\t\t// If we are currently parsing a cue, report what we have.\n\t\t\tif (this.state === WebVttParserState.CUE_TEXT && this.cue && this.oncue) {\n\t\t\t\tthis.oncue(this.cue)\n\t\t\t}\n\t\t\tthis.cue = null\n\t\t\tthis.regionSettings = null\n\n\t\t\t// Enter BADWEBVTT state if header was not parsed correctly otherwise\n\t\t\t// another exception occurred so enter BADCUE state.\n\t\t\tthis.state = this.state === WebVttParserState.INITIAL ? WebVttParserState.BAD_WEBVTT : WebVttParserState.BAD_CUE\n\t\t}\n\t\treturn this\n\t}\n\n\t/**\n\t * Flush the parser.\n\t *\n\t * @returns The parser.\n\t */\n\tflush(): WebVttParser {\n\t\ttry {\n\t\t\t// Finish parsing the stream.\n\t\t\tthis.buffer += ''\n\t\t\t// Synthesize the end of the current cue or region.\n\t\t\tif (this.cue || this.state === WebVttParserState.HEADER) {\n\t\t\t\tthis.buffer += '\\n\\n'\n\t\t\t\tthis.parse(undefined, true)\n\t\t\t}\n\t\t\t// If we've flushed, parsed, and we're still on the INITIAL state then\n\t\t\t// that means we don't have enough of the stream to parse the first\n\t\t\t// line.\n\t\t\tif (this.state === WebVttParserState.INITIAL) {\n\t\t\t\tthrow new WebVttParsingError(BAD_SIGNATURE)\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\tthis.reportOrThrowError(e)\n\t\t}\n\n\t\tthis.onflush?.()\n\n\t\treturn this\n\t}\n\n\t// If the error is a ParsingError then report it to the consumer if\n\t// possible. If it's not a ParsingError then throw it like normal.\n\tprivate reportOrThrowError(error: any): void {\n\t\tif (error instanceof WebVttParsingError) {\n\t\t\tthis.onparsingerror?.(error)\n\t\t}\n\t\telse {\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import type { WebVttCue } from './WebVttCue.ts'\nimport { WebVttParser } from './WebVttParser.ts'\nimport type { WebVttParseResult } from './WebVttParseResult.ts'\nimport type { WebVttParserOptions } from './WebVttParserOptions.ts'\nimport type { WebVttParsingError } from './WebVttParsingError.ts'\nimport type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Parse a WebVTT string into a WebVttParseResult.\n *\n * @param text - The WebVTT string to parse.\n * @param options - The options to use for the parser.\n * @returns The parsed WebVttParseResult.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/parseWebVtt.test.ts#example}\n */\nexport async function parseWebVtt(text: string, options?: WebVttParserOptions): Promise<WebVttParseResult> {\n\tconst parser = new WebVttParser(options)\n\tconst cues: WebVttCue[] = []\n\tconst regions: WebVttRegion[] = []\n\tconst styles: string[] = []\n\tconst errors: WebVttParsingError[] = []\n\tparser.oncue = cue => cues.push(cue)\n\tparser.onregion = region => regions.push(region)\n\tparser.onstyle = style => styles.push(style)\n\tparser.onparsingerror = error => errors.push(error)\n\tparser.parse(text)\n\tparser.flush()\n\n\treturn { cues, regions, styles, errors }\n}\n","import type { WebVttCue } from './WebVttCue.ts'\n\n/**\n * Convert a generic WebVTT cue to a VTTCue.\n *\n * @param cue - The WebVTT cue to convert.\n * @returns The converted VTTCue.\n *\n * @public\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTCue | VTTCue}\n */\nexport function toVttCue(cue: WebVttCue): VTTCue {\n\tconst vttCue = new VTTCue(cue.startTime, cue.endTime, cue.text)\n\tvttCue.id = cue.id\n\tvttCue.region = cue.region\n\tvttCue.vertical = cue.vertical\n\tvttCue.snapToLines = cue.snapToLines\n\tvttCue.line = cue.line\n\tvttCue.lineAlign = cue.lineAlign\n\tvttCue.position = cue.position\n\tvttCue.positionAlign = cue.positionAlign\n\tvttCue.size = cue.size\n\tvttCue.pauseOnExit = cue.pauseOnExit\n\n\t// Safari still uses the old middle value and won't accept center\n\ttry {\n\t\tvttCue.align = 'center'\n\t}\n\tcatch (e) {\n\t\tvttCue.align = 'middle' as AlignSetting\n\t}\n\n\treturn vttCue\n}\n","import type { WebVttRegion } from './WebVttRegion.ts'\n\n/**\n * Convert a WebVTT region to a VTTRegion.\n *\n * @param region - The WebVTT region to convert.\n * @returns The converted VTTRegion.\n *\n * @public\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion | VTTRegion}\n */\nexport function toVttRegion(region: WebVttRegion): VTTRegion {\n\tconst vttRegion = new VTTRegion()\n\tvttRegion.id = region.id\n\tvttRegion.width = region.width\n\tvttRegion.lines = region.lines\n\tvttRegion.regionAnchorX = region.regionAnchorX\n\tvttRegion.regionAnchorY = region.regionAnchorY\n\tvttRegion.viewportAnchorX = region.viewportAnchorX\n\tvttRegion.viewportAnchorY = region.viewportAnchorY\n\tvttRegion.scroll = region.scroll\n\n\treturn vttRegion\n}\n","import type { ValueOf } from '@svta/cml-utils'\n\n/**\n * WebVTT result types.\n *\n * @public\n *\n * @enum\n */\nexport const WebVttResultType = {\n\tCUE: 'cue',\n\tREGION: 'region',\n\tTIMESTAMP_MAP: 'timestampmap',\n\tSTYLE: 'style',\n\tERROR: 'error',\n} as const\n\n/**\n * @public\n */\nexport type WebVttResultType = ValueOf<typeof WebVttResultType>;\n","import { WebVttParser } from './WebVttParser.ts'\nimport type { WebVttResult } from './WebVttResult.ts'\nimport { WebVttResultType } from './WebVttResultType.ts'\n\n/**\n * WebVTT transform stream transformer.\n *\n * @public\n */\nexport class WebVttTransformer {\n\tprivate readonly parser: WebVttParser\n\tprivate results: WebVttResult[] = []\n\n\t/**\n\t * Creates a new WebVTT transformer.\n\t */\n\tconstructor() {\n\t\tthis.parser = new WebVttParser()\n\t\tthis.parser.oncue = cue => this.results.push({ type: WebVttResultType.CUE, data: cue })\n\t\tthis.parser.onregion = region => this.results.push({ type: WebVttResultType.REGION, data: region })\n\t\tthis.parser.onstyle = style => this.results.push({ type: WebVttResultType.STYLE, data: style })\n\t\tthis.parser.ontimestampmap = timestampmap => this.results.push({ type: WebVttResultType.TIMESTAMP_MAP, data: timestampmap })\n\t\tthis.parser.onparsingerror = error => this.results.push({ type: WebVttResultType.ERROR, data: error })\n\t}\n\n\tprivate enqueueResults(controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\t// TODO: Should parse errors throw?\n\t\tfor (const result of this.results) {\n\t\t\tcontroller.enqueue(result)\n\t\t}\n\n\t\tthis.results = []\n\t}\n\n\t/**\n\t * Transforms a chunk of WebVTT data.\n\t *\n\t * @param chunk - The chunk of WebVTT data to transform.\n\t * @param controller - The controller to enqueue the results to.\n\t */\n\ttransform(chunk: string, controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\ttry {\n\t\t\tthis.parser.parse(chunk)\n\t\t\tthis.enqueueResults(controller)\n\t\t}\n\t\tcatch (error) {\n\t\t\tcontroller.error(error)\n\t\t}\n\t}\n\n\t/**\n\t * Flushes the transformer.\n\t *\n\t * @param controller - The controller to enqueue the results to.\n\t */\n\tflush(controller: TransformStreamDefaultController<WebVttResult>): void {\n\t\ttry {\n\t\t\tthis.parser.flush()\n\t\t\tthis.enqueueResults(controller)\n\t\t}\n\t\tcatch (error) {\n\t\t\tcontroller.error(error)\n\t\t}\n\t}\n}\n","import type { WebVttResult } from './WebVttResult.ts'\nimport { WebVttTransformer } from './WebVttTransformer.ts'\n\n/**\n * WebVTT transform stream.\n *\n * @public\n */\nexport class WebVttTransformStream extends TransformStream<string, WebVttResult> {\n\tconstructor(writableStrategy?: QueuingStrategy<string>, readableStrategy?: QueuingStrategy<WebVttResult>) {\n\t\tsuper(new WebVttTransformer(), writableStrategy, readableStrategy)\n\t}\n}\n"],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@svta/cml-webvtt", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "description": "WebVTT parsing and rendering functionality", | ||
@@ -56,4 +56,4 @@ "license": "Apache-2.0", | ||
| "peerDependencies": { | ||
| "@svta/cml-utils": "1.0.1" | ||
| "@svta/cml-utils": "1.1.0" | ||
| } | ||
| } |
86318
-0.04%1083
-2.96%