document-model 1.4.0 → 1.5.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.
- package/dist/browser/cjs/document-model.js +2 -2
- package/dist/browser/cjs/document.js +2 -2
- package/dist/browser/cjs/index.js +2 -2
- package/dist/browser/cjs/internal/{index-DdOJi6Ua.js → index-BoiSedJ2.js} +2 -2
- package/dist/browser/cjs/internal/{index-DdOJi6Ua.js.map → index-BoiSedJ2.js.map} +1 -1
- package/dist/{node/cjs/internal/index-DxD7Ha1j.js → browser/cjs/internal/index-frw-qprx.js} +2 -2
- package/dist/browser/cjs/internal/index-frw-qprx.js.map +1 -0
- package/dist/browser/cjs/internal/{object-CRlmL8Nt.js → object-DldjPOTT.js} +127 -124
- package/dist/browser/cjs/internal/object-DldjPOTT.js.map +1 -0
- package/dist/browser/es/document-model.js +2 -2
- package/dist/browser/es/document.js +2 -2
- package/dist/browser/es/index.js +2 -2
- package/dist/browser/es/internal/{index-C1HKYMZA.js → index-B7idSyw8.js} +2 -2
- package/dist/browser/es/internal/{index-C1HKYMZA.js.map → index-B7idSyw8.js.map} +1 -1
- package/dist/browser/es/internal/{index-BsGRYydP.js → index-D2kKzCXD.js} +2 -2
- package/dist/browser/es/internal/index-D2kKzCXD.js.map +1 -0
- package/dist/browser/es/internal/{object-B562qKhQ.js → object-I6vKsK3r.js} +127 -124
- package/dist/browser/{cjs/internal/object-CRlmL8Nt.js.map → es/internal/object-I6vKsK3r.js.map} +1 -1
- package/dist/node/cjs/document-model.js +2 -2
- package/dist/node/cjs/document.js +2 -2
- package/dist/node/cjs/index.js +2 -2
- package/dist/{browser/cjs/internal/index-pAtJQrtD.js → node/cjs/internal/index-RX6RcsNg.js} +2 -2
- package/dist/node/cjs/internal/index-RX6RcsNg.js.map +1 -0
- package/dist/node/cjs/internal/{index-BWc0K1Dk.js → index-WVYoLyly.js} +2 -2
- package/dist/node/cjs/internal/{index-BWc0K1Dk.js.map → index-WVYoLyly.js.map} +1 -1
- package/dist/node/cjs/internal/{object-_zq9luMS.js → object-7GplcYr4.js} +128 -125
- package/dist/node/cjs/internal/object-7GplcYr4.js.map +1 -0
- package/dist/node/es/document-model.js +2 -2
- package/dist/node/es/document.js +2 -2
- package/dist/node/es/index.js +2 -2
- package/dist/node/es/internal/{index-D8WTToX1.js → index-BFRJ-0Rp.js} +2 -2
- package/dist/node/es/internal/{index-D8WTToX1.js.map → index-BFRJ-0Rp.js.map} +1 -1
- package/dist/node/es/internal/{index-DkkBVgni.js → index-NWZKlhKu.js} +2 -2
- package/dist/node/es/internal/index-NWZKlhKu.js.map +1 -0
- package/dist/node/es/internal/{object-D3jjs7tr.js → object-Cu2Dz-iF.js} +128 -125
- package/dist/node/es/internal/object-Cu2Dz-iF.js.map +1 -0
- package/package.json +1 -1
- package/dist/browser/cjs/internal/index-pAtJQrtD.js.map +0 -1
- package/dist/browser/es/internal/index-BsGRYydP.js.map +0 -1
- package/dist/browser/es/internal/object-B562qKhQ.js.map +0 -1
- package/dist/node/cjs/internal/index-DxD7Ha1j.js.map +0 -1
- package/dist/node/cjs/internal/object-_zq9luMS.js.map +0 -1
- package/dist/node/es/internal/index-DkkBVgni.js.map +0 -1
- package/dist/node/es/internal/object-D3jjs7tr.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-B562qKhQ.js","sources":["../../../../src/document/schema/zod.ts","../../../../node_modules/.pnpm/safe-stable-stringify@2.4.3/node_modules/safe-stable-stringify/index.js","../../../../node_modules/.pnpm/safe-stable-stringify@2.4.3/node_modules/safe-stable-stringify/esm/wrapper.js","../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/v4.js","../../../../src/document/actions/index.ts","../../../../src/document/actions/types.ts","../../../../node_modules/.pnpm/mime@4.0.3/node_modules/mime/dist/types/standard.js","../../../../node_modules/.pnpm/mime@4.0.3/node_modules/mime/dist/src/Mime.js","../../../../node_modules/.pnpm/mime@4.0.3/node_modules/mime/dist/src/index_lite.js","../../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js","../../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js","../../../../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js","../../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js","../../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js","../../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha256.js","../../../../src/document/utils/browser.ts","../../../../src/document/utils/validation.ts","../../../../src/document/utils/file.ts","../../../../src/document/utils/document-helpers.ts","../../../../src/document/reducer.ts","../../../../src/document/utils/base.ts","../../../../src/document/actions/creators.ts","../../../../src/document/object.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n Action,\n DocumentFile,\n Load_State,\n LoadStateAction,\n LoadStateActionInput,\n LoadStateActionStateInput,\n Operation,\n Prune,\n PruneAction,\n PruneActionInput,\n Redo,\n RedoAction,\n Set_Name,\n SetNameAction,\n SetNameOperation,\n Undo,\n UndoAction,\n} from '.';\nimport { OperationScope } from '../types';\n\ntype Properties<T> = Required<{\n [K in keyof T]: z.ZodType<T[K], any, T[K]>;\n}>;\n\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype definedNonNullAny = {};\n\nexport const isDefinedNonNullAny = (v: any): v is definedNonNullAny =>\n v !== undefined && v !== null;\n\nexport const definedNonNullAnySchema = z\n .any()\n .refine(v => isDefinedNonNullAny(v));\n\nexport const Load_StateSchema = z.enum(['LOAD_STATE']);\n\nexport const PruneSchema = z.enum(['PRUNE']);\n\nexport const RedoSchema = z.enum(['REDO']);\n\nexport const Set_NameSchema = z.enum(['SET_NAME']);\n\nexport const UndoSchema = z.enum(['UNDO']);\n\nexport function ActionSchema(): z.ZodObject<Properties<Action>> {\n return z.object({\n __typename: z.literal('Action').optional(),\n type: z.string(),\n });\n}\n\nexport function OperationScopeSchema(): z.ZodType<OperationScope> {\n return z.literal('global').or(z.literal('local'));\n}\n\nexport function BaseActionSchema() {\n return z.union([\n LoadStateActionSchema(),\n PruneActionSchema(),\n RedoActionSchema(),\n SetNameActionSchema(),\n UndoActionSchema(),\n ]);\n}\n\nexport function DocumentFileSchema(): z.ZodObject<Properties<DocumentFile>> {\n return z.object({\n __typename: z.literal('DocumentFile').optional(),\n data: z.string(),\n extension: z.string().nullable(),\n fileName: z.string().nullable(),\n mimeType: z.string(),\n });\n}\n\nexport function LoadStateActionSchema(): z.ZodObject<\n Properties<LoadStateAction>\n> {\n return z.object({\n input: z.lazy(() => LoadStateActionInputSchema()),\n type: Load_StateSchema,\n scope: OperationScopeSchema(),\n });\n}\n\nexport function LoadStateActionInputSchema(): z.ZodObject<\n Properties<LoadStateActionInput>\n> {\n return z.object({\n operations: z.number(),\n state: z.lazy(() => LoadStateActionStateInputSchema()),\n });\n}\n\nexport function LoadStateActionStateInputSchema(): z.ZodObject<\n Properties<LoadStateActionStateInput>\n> {\n return z.object({\n data: z.unknown().nullish(),\n name: z.string(),\n });\n}\n\nexport function OperationSchema(): z.ZodObject<Properties<Operation>> {\n return z.object({\n __typename: z.literal('Operation').optional(),\n hash: z.string(),\n index: z.number(),\n timestamp: z.string().datetime(),\n type: z.string(),\n });\n}\n\nexport function PruneActionSchema(): z.ZodObject<Properties<PruneAction>> {\n return z.object({\n input: z.lazy(() => PruneActionInputSchema()),\n type: PruneSchema,\n scope: OperationScopeSchema(),\n });\n}\n\nexport function PruneActionInputSchema(): z.ZodObject<\n Properties<PruneActionInput>\n> {\n return z.object({\n end: z.number().nullish(),\n start: z.number().nullish(),\n });\n}\n\nexport const RedoActionInputSchema = z.number;\n\nexport function RedoActionSchema(): z.ZodObject<Properties<RedoAction>> {\n return z.object({\n input: RedoActionInputSchema(),\n type: RedoSchema,\n scope: OperationScopeSchema(),\n });\n}\n\nexport const SetNameActionInputSchema = z.string;\n\nexport function SetNameActionSchema(): z.ZodObject<Properties<SetNameAction>> {\n return z.object({\n input: SetNameActionInputSchema(),\n type: Set_NameSchema,\n scope: z.literal('global'),\n });\n}\n\nexport function SetNameOperationSchema(): z.ZodObject<\n Properties<SetNameOperation>\n> {\n return z.object({\n __typename: z.literal('SetNameOperation').optional(),\n hash: z.string(),\n index: z.number(),\n input: z.string(),\n timestamp: z.string().datetime(),\n type: z.string(),\n });\n}\n\nexport const UndoActionInputSchema = z.number;\n\nexport function UndoActionSchema(): z.ZodObject<Properties<UndoAction>> {\n return z.object({\n input: UndoActionInputSchema(),\n type: UndoSchema,\n scope: OperationScopeSchema(),\n });\n}\n","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?:[^\\ud800-\\udbff]|^)[\\udc00-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction insertSort (array) {\n // Insertion sort is very efficient for small input sizes but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2) {\n return array.sort()\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getBooleanOption(options, 'deterministic')\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = insertSort(keys)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = insertSort(keys)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = insertSort(keys)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n","import cjsModule from '../index.js'\n\nexport const configure = cjsModule.configure\n\nexport const stringify = cjsModule\nexport default cjsModule\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import { castDraft, create } from 'mutative';\nimport {\n Action,\n Document,\n ImmutableStateReducer,\n Operation,\n PruneAction,\n RedoAction,\n State,\n UndoAction,\n UndoRedoProcessResult,\n} from '../types';\nimport { hashDocument, replayOperations } from '../utils/base';\nimport { loadState, noop } from './creators';\n\n// updates the name of the document\nexport function setNameOperation<T>(document: T, name: string): T {\n return { ...document, name };\n}\n\nexport function noopOperation<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: Partial<Operation>,\n skip: number,\n) {\n const defaultValues = {\n skip,\n document,\n };\n\n const { scope } = action;\n\n if (!scope) return defaultValues;\n if (action.skip === undefined) return defaultValues;\n\n return create(defaultValues, draft => {\n const lastOperation = draft.document.operations[scope].at(-1);\n\n if (action.skip && action.skip > 0) {\n draft.skip = action.skip;\n }\n\n if (\n lastOperation &&\n lastOperation.type === 'NOOP' &&\n action.index === lastOperation.index &&\n draft.skip > lastOperation.skip\n ) {\n draft.document.operations[scope].pop();\n }\n });\n}\n\nexport function undoOperation<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: UndoAction,\n skip: number,\n): UndoRedoProcessResult<T, A, L> {\n // const scope = action.scope;\n const { scope, input } = action;\n\n const defaultResult: UndoRedoProcessResult<T, A, L> = {\n document,\n action,\n skip,\n };\n\n return create(defaultResult, draft => {\n if (draft.document.operations[scope].length < 1) {\n throw new Error(\n `Cannot undo: no operations in history for scope \"${scope}\"`,\n );\n }\n\n if (input < 1) {\n throw new Error(\n `Invalid UNDO action: input value must be greater than 0`,\n );\n }\n\n if (draft.skip > 0) {\n throw new Error(\n `Cannot undo: skip value from reducer cannot be used with UNDO action`,\n );\n }\n\n const lastOperation = draft.document.operations[scope].at(-1);\n\n const isLatestOpNOOP =\n lastOperation &&\n lastOperation.type === 'NOOP' &&\n lastOperation.skip > 0;\n\n draft.skip += input;\n\n if (isLatestOpNOOP) {\n draft.skip += lastOperation.skip;\n\n const preLastOperation =\n draft.document.operations[scope][\n draft.document.operations[scope].length - 2\n ];\n if (\n preLastOperation &&\n lastOperation.index - preLastOperation.index === 1\n ) {\n draft.document.operations[scope].pop();\n }\n }\n\n if (draft.document.operations[scope].length < draft.skip) {\n throw new Error(\n `Cannot undo: you can't undo more operations than the ones in the scope history`,\n );\n }\n\n const operationsLastIndex = draft.document.operations[scope].length - 1;\n let skippedOpsLeft = input;\n let index = isLatestOpNOOP\n ? operationsLastIndex - lastOperation.skip\n : operationsLastIndex;\n\n while (skippedOpsLeft > 0 && index >= 0) {\n const op = draft.document.operations[scope][index];\n\n if (!op) {\n skippedOpsLeft--;\n index--;\n continue;\n }\n\n if (op.type === 'NOOP' && op.skip > 0) {\n index = index - (op.skip + 1);\n draft.skip += op.skip + 1;\n } else {\n draft.document.clipboard.push({ ...op });\n skippedOpsLeft--;\n index--;\n }\n }\n\n draft.action = noop(scope);\n });\n}\n\nexport function redoOperation<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: RedoAction,\n skip: number,\n): UndoRedoProcessResult<T, A, L> {\n const { scope, input } = action;\n\n const defaultResult: UndoRedoProcessResult<T, A, L> = {\n document,\n action,\n skip,\n };\n\n return create(defaultResult, draft => {\n if (draft.skip > 0) {\n throw new Error(\n `Cannot redo: skip value from reducer cannot be used with REDO action`,\n );\n }\n\n if (input > 1) {\n throw new Error(\n `Cannot redo: you can only redo one operation at a time`,\n );\n }\n\n if (input < 1) {\n throw new Error(`Invalid REDO action: invalid redo input value`);\n }\n\n if (draft.document.clipboard.length < 1) {\n throw new Error(`Cannot redo: no operations in the clipboard`);\n }\n\n const operationIndex = draft.document.clipboard.findLastIndex(\n op => op.scope === scope,\n );\n if (operationIndex < 0) {\n throw new Error(\n `Cannot redo: no operations in clipboard for scope \"${scope}\"`,\n );\n }\n\n const operation = draft.document.clipboard.splice(operationIndex, 1)[0];\n\n draft.action = castDraft({\n type: operation.type,\n scope: operation.scope,\n input: operation.input,\n } as A);\n });\n}\n\nexport function pruneOperation<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: PruneAction,\n wrappedReducer: ImmutableStateReducer<T, A, L>,\n): Document<T, A, L> {\n const { scope } = action;\n const operations = document.operations[scope];\n\n let {\n input: { start, end },\n } = action;\n start = start || 0;\n end = end || operations.length;\n\n const actionsToPrune = operations.slice(start, end);\n const actionsToKeepStart = operations.slice(0, start);\n const actionsToKeepEnd = operations.slice(end);\n\n // runs all operations from the initial state to\n // the end of prune to get name and data\n const newDocument = replayOperations(\n document.initialState,\n {\n ...document.operations,\n [scope]: actionsToKeepStart.concat(actionsToPrune),\n },\n wrappedReducer,\n );\n\n const { name, state: newState } = newDocument;\n\n // the new operation has the index of the first pruned operation\n const loadStateIndex = actionsToKeepStart.length;\n\n // if and operation is pruned then reuses the timestamp of the last operation\n // if not then assigns the timestamp of the following unpruned operation\n const loadStateTimestamp = actionsToKeepStart.length\n ? actionsToKeepStart[actionsToKeepStart.length - 1].timestamp\n : actionsToKeepEnd.length\n ? actionsToKeepEnd[0].timestamp\n : new Date().toISOString();\n\n // replaces pruned operations with LOAD_STATE\n return replayOperations(\n document.initialState,\n {\n ...document.operations,\n [scope]: [\n ...actionsToKeepStart,\n {\n ...loadState(\n { name, state: newState },\n actionsToPrune.length,\n ),\n timestamp: loadStateTimestamp,\n index: loadStateIndex,\n hash: hashDocument({ state: newState }, 'global'),\n },\n ...actionsToKeepEnd\n // updates the index for all the following operations\n .map((action, index) => ({\n ...action,\n index: loadStateIndex + index + 1,\n })),\n ],\n },\n wrappedReducer,\n );\n}\n\nexport function loadStateOperation<T, A extends Action, L>(\n oldDocument: Document<T, A, L>,\n newDocument: { name: string; state?: State<T, L> },\n): Document<T, A, L> {\n return {\n ...oldDocument,\n name: newDocument.name,\n state: newDocument.state ?? ({ global: {}, local: {} } as State<T, L>),\n };\n}\n\nexport * from './creators';\n","import type { Action } from '../types';\nimport type {\n LoadStateActionInput,\n PruneActionInput,\n RedoAction as _RedoAction,\n SetNameAction as _SetNameAction,\n UndoAction as _UndoAction,\n} from '../schema/types';\n\nexport const SET_NAME = 'SET_NAME';\nexport const UNDO = 'UNDO';\nexport const REDO = 'REDO';\nexport const PRUNE = 'PRUNE';\nexport const LOAD_STATE = 'LOAD_STATE';\nexport const NOOP = 'NOOP';\n\nexport type LoadStateAction = Action<'LOAD_STATE', LoadStateActionInput>;\nexport type PruneAction = Action<'PRUNE', PruneActionInput>;\nexport type RedoAction = Action<'REDO', _RedoAction['input']>;\nexport type SetNameAction = Action<'SET_NAME', _SetNameAction['input']>;\nexport type UndoAction = Action<'UNDO', _UndoAction['input']>;\nexport type NOOPAction = Action<'NOOP'>;\n\nexport type BaseAction =\n | LoadStateAction\n | PruneAction\n | RedoAction\n | SetNameAction\n | UndoAction\n | NOOPAction;\n","const types = { \"application/andrew-inset\": [\"ez\"], \"application/appinstaller\": [\"appinstaller\"], \"application/applixware\": [\"aw\"], \"application/appx\": [\"appx\"], \"application/appxbundle\": [\"appxbundle\"], \"application/atom+xml\": [\"atom\"], \"application/atomcat+xml\": [\"atomcat\"], \"application/atomdeleted+xml\": [\"atomdeleted\"], \"application/atomsvc+xml\": [\"atomsvc\"], \"application/atsc-dwd+xml\": [\"dwd\"], \"application/atsc-held+xml\": [\"held\"], \"application/atsc-rsat+xml\": [\"rsat\"], \"application/automationml-aml+xml\": [\"aml\"], \"application/automationml-amlx+zip\": [\"amlx\"], \"application/bdoc\": [\"bdoc\"], \"application/calendar+xml\": [\"xcs\"], \"application/ccxml+xml\": [\"ccxml\"], \"application/cdfx+xml\": [\"cdfx\"], \"application/cdmi-capability\": [\"cdmia\"], \"application/cdmi-container\": [\"cdmic\"], \"application/cdmi-domain\": [\"cdmid\"], \"application/cdmi-object\": [\"cdmio\"], \"application/cdmi-queue\": [\"cdmiq\"], \"application/cpl+xml\": [\"cpl\"], \"application/cu-seeme\": [\"cu\"], \"application/cwl\": [\"cwl\"], \"application/dash+xml\": [\"mpd\"], \"application/dash-patch+xml\": [\"mpp\"], \"application/davmount+xml\": [\"davmount\"], \"application/docbook+xml\": [\"dbk\"], \"application/dssc+der\": [\"dssc\"], \"application/dssc+xml\": [\"xdssc\"], \"application/ecmascript\": [\"ecma\"], \"application/emma+xml\": [\"emma\"], \"application/emotionml+xml\": [\"emotionml\"], \"application/epub+zip\": [\"epub\"], \"application/exi\": [\"exi\"], \"application/express\": [\"exp\"], \"application/fdf\": [\"fdf\"], \"application/fdt+xml\": [\"fdt\"], \"application/font-tdpfr\": [\"pfr\"], \"application/geo+json\": [\"geojson\"], \"application/gml+xml\": [\"gml\"], \"application/gpx+xml\": [\"gpx\"], \"application/gxf\": [\"gxf\"], \"application/gzip\": [\"gz\"], \"application/hjson\": [\"hjson\"], \"application/hyperstudio\": [\"stk\"], \"application/inkml+xml\": [\"ink\", \"inkml\"], \"application/ipfix\": [\"ipfix\"], \"application/its+xml\": [\"its\"], \"application/java-archive\": [\"jar\", \"war\", \"ear\"], \"application/java-serialized-object\": [\"ser\"], \"application/java-vm\": [\"class\"], \"application/javascript\": [\"*js\"], \"application/json\": [\"json\", \"map\"], \"application/json5\": [\"json5\"], \"application/jsonml+json\": [\"jsonml\"], \"application/ld+json\": [\"jsonld\"], \"application/lgr+xml\": [\"lgr\"], \"application/lost+xml\": [\"lostxml\"], \"application/mac-binhex40\": [\"hqx\"], \"application/mac-compactpro\": [\"cpt\"], \"application/mads+xml\": [\"mads\"], \"application/manifest+json\": [\"webmanifest\"], \"application/marc\": [\"mrc\"], \"application/marcxml+xml\": [\"mrcx\"], \"application/mathematica\": [\"ma\", \"nb\", \"mb\"], \"application/mathml+xml\": [\"mathml\"], \"application/mbox\": [\"mbox\"], \"application/media-policy-dataset+xml\": [\"mpf\"], \"application/mediaservercontrol+xml\": [\"mscml\"], \"application/metalink+xml\": [\"metalink\"], \"application/metalink4+xml\": [\"meta4\"], \"application/mets+xml\": [\"mets\"], \"application/mmt-aei+xml\": [\"maei\"], \"application/mmt-usd+xml\": [\"musd\"], \"application/mods+xml\": [\"mods\"], \"application/mp21\": [\"m21\", \"mp21\"], \"application/mp4\": [\"*mp4\", \"*mpg4\", \"mp4s\", \"m4p\"], \"application/msix\": [\"msix\"], \"application/msixbundle\": [\"msixbundle\"], \"application/msword\": [\"doc\", \"dot\"], \"application/mxf\": [\"mxf\"], \"application/n-quads\": [\"nq\"], \"application/n-triples\": [\"nt\"], \"application/node\": [\"cjs\"], \"application/octet-stream\": [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"], \"application/oda\": [\"oda\"], \"application/oebps-package+xml\": [\"opf\"], \"application/ogg\": [\"ogx\"], \"application/omdoc+xml\": [\"omdoc\"], \"application/onenote\": [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"], \"application/oxps\": [\"oxps\"], \"application/p2p-overlay+xml\": [\"relo\"], \"application/patch-ops-error+xml\": [\"xer\"], \"application/pdf\": [\"pdf\"], \"application/pgp-encrypted\": [\"pgp\"], \"application/pgp-keys\": [\"asc\"], \"application/pgp-signature\": [\"sig\", \"*asc\"], \"application/pics-rules\": [\"prf\"], \"application/pkcs10\": [\"p10\"], \"application/pkcs7-mime\": [\"p7m\", \"p7c\"], \"application/pkcs7-signature\": [\"p7s\"], \"application/pkcs8\": [\"p8\"], \"application/pkix-attr-cert\": [\"ac\"], \"application/pkix-cert\": [\"cer\"], \"application/pkix-crl\": [\"crl\"], \"application/pkix-pkipath\": [\"pkipath\"], \"application/pkixcmp\": [\"pki\"], \"application/pls+xml\": [\"pls\"], \"application/postscript\": [\"ai\", \"eps\", \"ps\"], \"application/provenance+xml\": [\"provx\"], \"application/pskc+xml\": [\"pskcxml\"], \"application/raml+yaml\": [\"raml\"], \"application/rdf+xml\": [\"rdf\", \"owl\"], \"application/reginfo+xml\": [\"rif\"], \"application/relax-ng-compact-syntax\": [\"rnc\"], \"application/resource-lists+xml\": [\"rl\"], \"application/resource-lists-diff+xml\": [\"rld\"], \"application/rls-services+xml\": [\"rs\"], \"application/route-apd+xml\": [\"rapd\"], \"application/route-s-tsid+xml\": [\"sls\"], \"application/route-usd+xml\": [\"rusd\"], \"application/rpki-ghostbusters\": [\"gbr\"], \"application/rpki-manifest\": [\"mft\"], \"application/rpki-roa\": [\"roa\"], \"application/rsd+xml\": [\"rsd\"], \"application/rss+xml\": [\"rss\"], \"application/rtf\": [\"rtf\"], \"application/sbml+xml\": [\"sbml\"], \"application/scvp-cv-request\": [\"scq\"], \"application/scvp-cv-response\": [\"scs\"], \"application/scvp-vp-request\": [\"spq\"], \"application/scvp-vp-response\": [\"spp\"], \"application/sdp\": [\"sdp\"], \"application/senml+xml\": [\"senmlx\"], \"application/sensml+xml\": [\"sensmlx\"], \"application/set-payment-initiation\": [\"setpay\"], \"application/set-registration-initiation\": [\"setreg\"], \"application/shf+xml\": [\"shf\"], \"application/sieve\": [\"siv\", \"sieve\"], \"application/smil+xml\": [\"smi\", \"smil\"], \"application/sparql-query\": [\"rq\"], \"application/sparql-results+xml\": [\"srx\"], \"application/sql\": [\"sql\"], \"application/srgs\": [\"gram\"], \"application/srgs+xml\": [\"grxml\"], \"application/sru+xml\": [\"sru\"], \"application/ssdl+xml\": [\"ssdl\"], \"application/ssml+xml\": [\"ssml\"], \"application/swid+xml\": [\"swidtag\"], \"application/tei+xml\": [\"tei\", \"teicorpus\"], \"application/thraud+xml\": [\"tfi\"], \"application/timestamped-data\": [\"tsd\"], \"application/toml\": [\"toml\"], \"application/trig\": [\"trig\"], \"application/ttml+xml\": [\"ttml\"], \"application/ubjson\": [\"ubj\"], \"application/urc-ressheet+xml\": [\"rsheet\"], \"application/urc-targetdesc+xml\": [\"td\"], \"application/voicexml+xml\": [\"vxml\"], \"application/wasm\": [\"wasm\"], \"application/watcherinfo+xml\": [\"wif\"], \"application/widget\": [\"wgt\"], \"application/winhlp\": [\"hlp\"], \"application/wsdl+xml\": [\"wsdl\"], \"application/wspolicy+xml\": [\"wspolicy\"], \"application/xaml+xml\": [\"xaml\"], \"application/xcap-att+xml\": [\"xav\"], \"application/xcap-caps+xml\": [\"xca\"], \"application/xcap-diff+xml\": [\"xdf\"], \"application/xcap-el+xml\": [\"xel\"], \"application/xcap-ns+xml\": [\"xns\"], \"application/xenc+xml\": [\"xenc\"], \"application/xfdf\": [\"xfdf\"], \"application/xhtml+xml\": [\"xhtml\", \"xht\"], \"application/xliff+xml\": [\"xlf\"], \"application/xml\": [\"xml\", \"xsl\", \"xsd\", \"rng\"], \"application/xml-dtd\": [\"dtd\"], \"application/xop+xml\": [\"xop\"], \"application/xproc+xml\": [\"xpl\"], \"application/xslt+xml\": [\"*xsl\", \"xslt\"], \"application/xspf+xml\": [\"xspf\"], \"application/xv+xml\": [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"], \"application/yang\": [\"yang\"], \"application/yin+xml\": [\"yin\"], \"application/zip\": [\"zip\"], \"audio/3gpp\": [\"*3gpp\"], \"audio/aac\": [\"adts\", \"aac\"], \"audio/adpcm\": [\"adp\"], \"audio/amr\": [\"amr\"], \"audio/basic\": [\"au\", \"snd\"], \"audio/midi\": [\"mid\", \"midi\", \"kar\", \"rmi\"], \"audio/mobile-xmf\": [\"mxmf\"], \"audio/mp3\": [\"*mp3\"], \"audio/mp4\": [\"m4a\", \"mp4a\"], \"audio/mpeg\": [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"], \"audio/ogg\": [\"oga\", \"ogg\", \"spx\", \"opus\"], \"audio/s3m\": [\"s3m\"], \"audio/silk\": [\"sil\"], \"audio/wav\": [\"wav\"], \"audio/wave\": [\"*wav\"], \"audio/webm\": [\"weba\"], \"audio/xm\": [\"xm\"], \"font/collection\": [\"ttc\"], \"font/otf\": [\"otf\"], \"font/ttf\": [\"ttf\"], \"font/woff\": [\"woff\"], \"font/woff2\": [\"woff2\"], \"image/aces\": [\"exr\"], \"image/apng\": [\"apng\"], \"image/avci\": [\"avci\"], \"image/avcs\": [\"avcs\"], \"image/avif\": [\"avif\"], \"image/bmp\": [\"bmp\", \"dib\"], \"image/cgm\": [\"cgm\"], \"image/dicom-rle\": [\"drle\"], \"image/dpx\": [\"dpx\"], \"image/emf\": [\"emf\"], \"image/fits\": [\"fits\"], \"image/g3fax\": [\"g3\"], \"image/gif\": [\"gif\"], \"image/heic\": [\"heic\"], \"image/heic-sequence\": [\"heics\"], \"image/heif\": [\"heif\"], \"image/heif-sequence\": [\"heifs\"], \"image/hej2k\": [\"hej2\"], \"image/hsj2\": [\"hsj2\"], \"image/ief\": [\"ief\"], \"image/jls\": [\"jls\"], \"image/jp2\": [\"jp2\", \"jpg2\"], \"image/jpeg\": [\"jpeg\", \"jpg\", \"jpe\"], \"image/jph\": [\"jph\"], \"image/jphc\": [\"jhc\"], \"image/jpm\": [\"jpm\", \"jpgm\"], \"image/jpx\": [\"jpx\", \"jpf\"], \"image/jxr\": [\"jxr\"], \"image/jxra\": [\"jxra\"], \"image/jxrs\": [\"jxrs\"], \"image/jxs\": [\"jxs\"], \"image/jxsc\": [\"jxsc\"], \"image/jxsi\": [\"jxsi\"], \"image/jxss\": [\"jxss\"], \"image/ktx\": [\"ktx\"], \"image/ktx2\": [\"ktx2\"], \"image/png\": [\"png\"], \"image/sgi\": [\"sgi\"], \"image/svg+xml\": [\"svg\", \"svgz\"], \"image/t38\": [\"t38\"], \"image/tiff\": [\"tif\", \"tiff\"], \"image/tiff-fx\": [\"tfx\"], \"image/webp\": [\"webp\"], \"image/wmf\": [\"wmf\"], \"message/disposition-notification\": [\"disposition-notification\"], \"message/global\": [\"u8msg\"], \"message/global-delivery-status\": [\"u8dsn\"], \"message/global-disposition-notification\": [\"u8mdn\"], \"message/global-headers\": [\"u8hdr\"], \"message/rfc822\": [\"eml\", \"mime\"], \"model/3mf\": [\"3mf\"], \"model/gltf+json\": [\"gltf\"], \"model/gltf-binary\": [\"glb\"], \"model/iges\": [\"igs\", \"iges\"], \"model/jt\": [\"jt\"], \"model/mesh\": [\"msh\", \"mesh\", \"silo\"], \"model/mtl\": [\"mtl\"], \"model/obj\": [\"obj\"], \"model/prc\": [\"prc\"], \"model/step+xml\": [\"stpx\"], \"model/step+zip\": [\"stpz\"], \"model/step-xml+zip\": [\"stpxz\"], \"model/stl\": [\"stl\"], \"model/u3d\": [\"u3d\"], \"model/vrml\": [\"wrl\", \"vrml\"], \"model/x3d+binary\": [\"*x3db\", \"x3dbz\"], \"model/x3d+fastinfoset\": [\"x3db\"], \"model/x3d+vrml\": [\"*x3dv\", \"x3dvz\"], \"model/x3d+xml\": [\"x3d\", \"x3dz\"], \"model/x3d-vrml\": [\"x3dv\"], \"text/cache-manifest\": [\"appcache\", \"manifest\"], \"text/calendar\": [\"ics\", \"ifb\"], \"text/coffeescript\": [\"coffee\", \"litcoffee\"], \"text/css\": [\"css\"], \"text/csv\": [\"csv\"], \"text/html\": [\"html\", \"htm\", \"shtml\"], \"text/jade\": [\"jade\"], \"text/javascript\": [\"js\", \"mjs\"], \"text/jsx\": [\"jsx\"], \"text/less\": [\"less\"], \"text/markdown\": [\"md\", \"markdown\"], \"text/mathml\": [\"mml\"], \"text/mdx\": [\"mdx\"], \"text/n3\": [\"n3\"], \"text/plain\": [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"], \"text/richtext\": [\"rtx\"], \"text/rtf\": [\"*rtf\"], \"text/sgml\": [\"sgml\", \"sgm\"], \"text/shex\": [\"shex\"], \"text/slim\": [\"slim\", \"slm\"], \"text/spdx\": [\"spdx\"], \"text/stylus\": [\"stylus\", \"styl\"], \"text/tab-separated-values\": [\"tsv\"], \"text/troff\": [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"], \"text/turtle\": [\"ttl\"], \"text/uri-list\": [\"uri\", \"uris\", \"urls\"], \"text/vcard\": [\"vcard\"], \"text/vtt\": [\"vtt\"], \"text/wgsl\": [\"wgsl\"], \"text/xml\": [\"*xml\"], \"text/yaml\": [\"yaml\", \"yml\"], \"video/3gpp\": [\"3gp\", \"3gpp\"], \"video/3gpp2\": [\"3g2\"], \"video/h261\": [\"h261\"], \"video/h263\": [\"h263\"], \"video/h264\": [\"h264\"], \"video/iso.segment\": [\"m4s\"], \"video/jpeg\": [\"jpgv\"], \"video/jpm\": [\"*jpm\", \"*jpgm\"], \"video/mj2\": [\"mj2\", \"mjp2\"], \"video/mp2t\": [\"ts\"], \"video/mp4\": [\"mp4\", \"mp4v\", \"mpg4\"], \"video/mpeg\": [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"], \"video/ogg\": [\"ogv\"], \"video/quicktime\": [\"qt\", \"mov\"], \"video/webm\": [\"webm\"] };\nObject.freeze(types);\nexport default types;\n//# sourceMappingURL=standard.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n const ext = last.replace(/^.*\\./, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n//# sourceMappingURL=Mime.js.map","import standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes)._freeze();\n//# sourceMappingURL=index_lite.js.map","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","import type { Buffer } from 'buffer';\nimport Sha1 from 'sha.js/sha1';\nimport Sha256 from 'sha.js/sha256';\n\nconst FileSystemError = new Error('File system not available.');\n\nexport function writeFile(\n path: string,\n name: string,\n stream: Uint8Array,\n): Promise<string> {\n throw FileSystemError;\n}\n\nexport function readFile(path: string) {\n throw FileSystemError;\n}\n\nexport function fetchFile(\n url: string,\n): Promise<{ data: Buffer; mimeType?: string }> {\n throw FileSystemError;\n}\n\nexport const getFile = async (file: string) => {\n return readFile(file);\n};\n\nconst hashAlgorithms = {\n sha1: Sha1,\n sha256: Sha256,\n} as const;\n\nexport const hash = (data: string, algorithm = 'sha1') => {\n if (!['sha1', 'sha256'].includes(algorithm)) {\n throw new Error('Hashing algorithm not supported: Available: sha1, sha256');\n }\n\n const Algorithm = hashAlgorithms[algorithm as keyof typeof hashAlgorithms];\n const sha = new Algorithm();\n\n return sha.update(data).digest('base64');\n};\n","import {\n DocumentOperations,\n Action,\n ValidationError,\n OperationScope,\n} from '../types';\n\nexport function validateOperations<A extends Action>(\n operations: DocumentOperations<A>,\n) {\n const errors: ValidationError[] = [];\n const scopes = Object.keys(operations) as OperationScope[];\n\n for (const scope of scopes) {\n const ops = operations[scope].sort((a, b) => a.index - b.index);\n\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].index !== i) {\n errors.push({\n message: `Invalid operation index ${ops[i].index} at position ${i}`,\n details: {\n position: i,\n operation: ops[i],\n scope: ops[i].scope,\n },\n });\n }\n }\n }\n\n return errors;\n}\n","import JSZip from 'jszip';\nimport mime from 'mime/lite';\nimport type {\n Action,\n Attachment,\n AttachmentInput,\n Document,\n DocumentHeader,\n DocumentOperations,\n ExtendedState,\n Reducer,\n} from '../types';\nimport { fetchFile, getFile, hash, readFile, writeFile } from './node';\nimport { replayDocument, ReplayDocumentOptions } from './base';\nimport { validateOperations } from './validation';\n\nexport type FileInput = string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport const createZip = async (document: Document) => {\n // create zip file\n const zip = new JSZip();\n\n const { name, revision, documentType, created, lastModified } = document;\n const header: DocumentHeader = {\n name,\n revision,\n documentType,\n created,\n lastModified,\n };\n zip.file('header.json', JSON.stringify(header, null, 2));\n zip.file(\n 'state.json',\n JSON.stringify(document.initialState || {}, null, 2),\n );\n zip.file('operations.json', JSON.stringify(document.operations, null, 2));\n\n if (document.attachments) {\n const attachments = Object.keys(document.attachments);\n attachments.forEach(key => {\n const { data, ...attributes } = document.attachments[key];\n zip.file(key, data, {\n base64: true,\n createFolders: true,\n comment: JSON.stringify(attributes),\n });\n });\n }\n\n return zip;\n};\n\n/**\n * Saves a document to a ZIP file.\n *\n * @remarks\n * This function creates a ZIP file containing the document's state, operations,\n * and file attachments. The file is saved to the specified path.\n *\n * @param document - The document to save to the file.\n * @param path - The path to save the file to.\n * @param extension - The extension to use for the file.\n * @returns A promise that resolves to the path of the saved file.\n */\nexport const saveToFile = async (\n document: Document,\n path: string,\n extension: string,\n name?: string,\n): Promise<string> => {\n // create zip file\n const zip = await createZip(document);\n const file = await zip.generateAsync({\n type: 'uint8array',\n streamFiles: true,\n });\n const fileName = name ?? document.name;\n const fileExtension = `.${extension}.zip`;\n\n return writeFile(\n path,\n fileName.endsWith(fileExtension)\n ? fileName\n : `${fileName}${fileExtension}`,\n file,\n );\n};\n\nexport const saveToFileHandle = async (\n document: Document,\n input: FileSystemFileHandle,\n) => {\n const zip = await createZip(document);\n const blob = await zip.generateAsync({ type: 'blob' });\n const writable = await input.createWritable();\n await writable.write(blob);\n await writable.close();\n};\n\n/**\n * Loads a document from a ZIP file.\n *\n * @remarks\n * This function reads a ZIP file and returns the document state after\n * applying all the operations. The reducer is used to apply the operations.\n *\n * @typeParam S - The type of the state object.\n * @typeParam A - The type of the actions that can be applied to the state object.\n *\n * @param path - The path to the ZIP file.\n * @param reducer - The reducer to apply the operations to the state object.\n * @returns A promise that resolves to the document state after applying all the operations.\n * @throws An error if the initial state or the operations history is not found in the ZIP file.\n */\nexport const loadFromFile = async <S, A extends Action, L>(\n path: string,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) => {\n const file = readFile(path);\n return loadFromInput(file, reducer, options);\n};\n\nexport const loadFromInput = async <S, A extends Action, L>(\n input: FileInput,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) => {\n const zip = new JSZip();\n await zip.loadAsync(input);\n return loadFromZip(zip, reducer, options);\n};\n\nasync function loadFromZip<S, A extends Action, L>(\n zip: JSZip,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) {\n const initialStateZip = zip.file('state.json');\n if (!initialStateZip) {\n throw new Error('Initial state not found');\n }\n const initialStateStr = await initialStateZip.async('string');\n const initialState = JSON.parse(initialStateStr) as ExtendedState<S, L>;\n\n const headerZip = zip.file('header.json');\n let header: DocumentHeader | undefined = undefined;\n if (headerZip) {\n header = JSON.parse(await headerZip.async('string')) as DocumentHeader;\n }\n\n const operationsZip = zip.file('operations.json');\n if (!operationsZip) {\n throw new Error('Operations history not found');\n }\n\n const operations = JSON.parse(\n await operationsZip.async('string'),\n ) as DocumentOperations<A>;\n\n const operationsError = validateOperations(operations);\n if (operationsError.length) {\n const errorMessages = operationsError.map(err => err.message);\n throw new Error(errorMessages.join('\\n'));\n }\n\n let result = replayDocument(\n initialState,\n operations,\n reducer,\n undefined,\n header,\n {},\n options,\n );\n if (header) {\n result = {\n ...result,\n ...header,\n };\n }\n return result;\n}\n\nfunction getFileAttributes(\n file: string,\n): Omit<Attachment, 'data' | 'mimeType'> {\n const extension = file.replace(/^.*\\./, '') || undefined;\n const fileName = file.replace(/^.*[/\\\\]/, '') || undefined;\n return { extension, fileName };\n}\n\n/**\n * Fetches an attachment from a URL and returns its base64-encoded data and MIME type.\n * @param url - The URL of the attachment to fetch.\n * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.\n */\nexport async function getRemoteFile(url: string): Promise<AttachmentInput> {\n const { buffer, mimeType = 'application/octet-stream' } =\n await fetchFile(url);\n const attributes = getFileAttributes(url);\n const data = buffer.toString('base64');\n return {\n data,\n hash: hash(data),\n mimeType,\n ...attributes,\n };\n}\n\n/**\n * Reads an attachment from a file and returns its base64-encoded data and MIME type.\n * @param path - The path of the attachment file to read.\n * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.\n */\nexport async function getLocalFile(path: string): Promise<AttachmentInput> {\n const buffer = await getFile(path);\n const mimeType = mime.getType(path) || 'application/octet-stream';\n const attributes = getFileAttributes(path);\n const data = buffer.toString('base64');\n return { data, hash: hash(data), mimeType, ...attributes };\n}\n","import {\n Operation,\n OperationScope,\n Action,\n DocumentOperations,\n} from '../types';\nimport stringify from 'safe-stable-stringify';\n\nexport type OperationIndex = {\n index: number;\n skip: number;\n};\n\nexport enum IntegrityIssueType {\n UNEXPECTED_INDEX = 'UNEXPECTED_INDEX',\n}\n\nexport enum IntegrityIssueSubType {\n DUPLICATED_INDEX = 'DUPLICATED_INDEX',\n MISSING_INDEX = 'MISSING_INDEX',\n}\n\ntype IntegrityIssue = {\n operation: OperationIndex;\n issue: IntegrityIssueType;\n category: IntegrityIssueSubType;\n message: string;\n};\n\ntype Reshuffle = (\n startIndex: OperationIndex,\n opsA: Operation[],\n opsB: Operation[],\n) => Operation[];\n\nexport function checkCleanedOperationsIntegrity(\n sortedOperations: Operation[],\n): IntegrityIssue[] {\n const result: IntegrityIssue[] = [];\n\n // 1:1 1\n // 0:0 0 -> 1:0 1 -> 2:0 -> 3:0 -> 4:0 -> 5:0\n // 0:0 0 -> 2:1 1 -> 3:0 -> 4:0 -> 5:0\n // 0:0 0 -> 3:2 1 -> 4:0 -> 5:0\n // 0:0 0 -> 3:2 1 -> 5:1\n\n // 0:3 (expected 0, got -3)\n // 1:2 (expected 0, got -1)\n // 0:0 -> 1:1\n // 0:0 -> 2:2\n // 0:0 -> 3:2 -> 5:2\n\n let currentIndex = -1;\n for (const nextOperation of sortedOperations) {\n const nextIndex = nextOperation.index - nextOperation.skip;\n\n if (nextIndex !== currentIndex + 1) {\n result.push({\n operation: {\n index: nextOperation.index,\n skip: nextOperation.skip,\n },\n issue: IntegrityIssueType.UNEXPECTED_INDEX,\n category:\n nextIndex > currentIndex + 1\n ? IntegrityIssueSubType.MISSING_INDEX\n : IntegrityIssueSubType.DUPLICATED_INDEX,\n message: `Expected index ${currentIndex + 1} with skip 0 or equivalent, got index ${nextOperation.index} with skip ${nextOperation.skip}`,\n });\n }\n\n currentIndex = nextOperation.index;\n }\n\n return result;\n}\n\n// [] -> []\n// [0:0] -> [0:0]\n\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:1 2:0 => 1:1 2:0, removals 1, no issues\n\n// 0:0 1:1 2:0 3:1 => 1:1 3:1, removals 2, no issues\n// 0:0 1:1 2:0 3:3 => 3:3\n\n// 1:1 2:0 3:0 => 1:1 2:0 3:0, removals 0, no issues\n// 1:0 0:0 2:0 => 2:0, removals 2, issues [UNEXPECTED_INDEX, INDEX_OUT_OF_ORDER]\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n\nexport function garbageCollect<A extends OperationIndex>(\n sortedOperations: A[],\n): A[] {\n const result: A[] = [];\n\n let i = sortedOperations.length - 1;\n\n while (i > -1) {\n result.unshift(sortedOperations[i]);\n const skipUntil =\n (sortedOperations[i]?.index || 0) -\n (sortedOperations[i]?.skip || 0) -\n 1;\n\n let j = i - 1;\n while (j > -1 && (sortedOperations[j]?.index || 0) > skipUntil) {\n j--;\n }\n\n i = j;\n }\n\n return result;\n}\n\nexport function addUndo(sortedOperations: Operation[]): Operation[] {\n const operationsCopy = [...sortedOperations];\n const latestOperation = operationsCopy[operationsCopy.length - 1];\n\n if (!latestOperation) return operationsCopy;\n\n if (latestOperation.type === 'NOOP') {\n operationsCopy.push({\n ...latestOperation,\n index: latestOperation.index,\n type: 'NOOP',\n skip: nextSkipNumber(sortedOperations),\n });\n } else {\n operationsCopy.push({\n type: 'NOOP',\n index: latestOperation.index + 1,\n timestamp: new Date().toISOString(),\n input: {},\n skip: 1,\n scope: latestOperation.scope,\n hash: latestOperation.hash,\n });\n }\n\n return operationsCopy;\n}\n\n// [0:0 2:0 1:0 3:3 3:1] => [0:0 1:0 2:0 3:1 3:3]\n// Sort by index _and_ skip number\nexport function sortOperations<A extends OperationIndex>(operations: A[]): A[] {\n return operations\n .slice()\n .sort((a, b) => a.skip - b.skip)\n .sort((a, b) => a.index - b.index);\n}\n\n// [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, 2:0, B3:0, B4:2, B5:0]\n// GC => [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, B4:2, B5:0]\n// Split => [0:0, 1:0] + [2:0, A3:0, A4:0, A5:0] + [B4:2, B5:0]\n// Reshuffle(6:4) => [6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\n// merge => [0:0, 1:0, 6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\nexport const reshuffleByTimestamp: Reshuffle = (startIndex, opsA, opsB) => {\n return [...opsA, ...opsB]\n .sort(\n (a, b) =>\n new Date(a.timestamp).getTime() -\n new Date(b.timestamp).getTime(),\n )\n .map((op, i) => ({\n ...op,\n index: startIndex.index + i,\n skip: i === 0 ? startIndex.skip : 0,\n }));\n};\n\nexport const reshuffleByTimestampAndIndex: Reshuffle = (\n startIndex,\n opsA,\n opsB,\n) => {\n return [...opsA, ...opsB]\n .sort(\n (a, b) =>\n new Date(a.timestamp).getTime() -\n new Date(b.timestamp).getTime(),\n )\n .sort((a, b) => a.index - b.index)\n .map((op, i) => ({\n ...op,\n index: startIndex.index + i,\n skip: i === 0 ? startIndex.skip : 0,\n }));\n};\n\n// TODO: implement better operation equality function\nexport function operationsAreEqual(op1: Operation, op2: Operation) {\n return stringify(op1) === stringify(op2);\n}\n\n// [T0:0 T1:0 T2:0 T3:0] + [B4:0 B5:0] = [T0:0 T1:0 T2:0 T3:0 B4:0 B5:0]\n// [T0:0 T1:0 T2:0 T3:0] + [B3:0 B4:0] = [T0:0 T1:0 T2:0 B3:0 B4:0]\n// [T0:0 T1:0 T2:0 T3:0] + [B2:0 B3:0] = [T0:0 T1:0 B2:0 B3:0]\n\n// [T0:0 T1:0 T2:0 T3:0] + [B4:0 B4:2] = [T0:0 T1:0 T2:0 T3:0 B4:0 B4:2]\n// [T0:0 T1:0 T2:0 T3:0] + [B3:0 B3:2] = [T0:0 T1:0 T2:0 B3:0 B3:2]\n// [T0:0 T1:0 T2:0 T3:0] + [B2:3 B3:0] = [T0:0 T1:0 B2:3 B3:0]\n\nexport function attachBranch(\n trunk: Operation[],\n newBranch: Operation[],\n): [Operation[], Operation[]] {\n const trunkCopy = garbageCollect(sortOperations(trunk.slice()));\n const newOperations = garbageCollect(sortOperations(newBranch.slice()));\n if (trunkCopy.length < 1) {\n return [newOperations, []];\n }\n\n const result: Operation[] = [];\n let enteredBranch = false;\n\n while (newOperations.length > 0) {\n const newOperationCandidate = newOperations[0];\n\n let nextTrunkOperation = trunkCopy.shift();\n while (\n nextTrunkOperation &&\n precedes(nextTrunkOperation, newOperationCandidate)\n ) {\n result.push(nextTrunkOperation);\n nextTrunkOperation = trunkCopy.shift();\n }\n\n if (!nextTrunkOperation) {\n enteredBranch = true;\n } else if (!enteredBranch) {\n if (operationsAreEqual(nextTrunkOperation, newOperationCandidate)) {\n newOperations.shift();\n result.push(nextTrunkOperation);\n } else {\n trunkCopy.unshift(nextTrunkOperation);\n enteredBranch = true;\n }\n }\n\n if (enteredBranch) {\n let nextAppend = newOperations.shift();\n while (nextAppend) {\n result.push(nextAppend);\n nextAppend = newOperations.shift();\n }\n }\n }\n\n if (!enteredBranch) {\n let nextAppend = trunkCopy.shift();\n while (nextAppend) {\n result.push(nextAppend);\n nextAppend = trunkCopy.shift();\n }\n }\n\n return [garbageCollect(result), trunkCopy];\n}\n\nexport function precedes(op1: Operation, op2: Operation) {\n return (\n op1.index < op2.index ||\n (op1.index === op2.index && op1.id === op2.id && op1.skip < op2.skip)\n );\n}\n\nexport function split(\n sortedTargetOperations: Operation[],\n sortedMergeOperations: Operation[],\n): [Operation[], Operation[], Operation[]] {\n const commonOperations: Operation[] = [];\n const targetDiffOperations: Operation[] = [];\n const mergeDiffOperations: Operation[] = [];\n\n // get bigger array length\n const maxLength = Math.max(\n sortedTargetOperations.length,\n sortedMergeOperations.length,\n );\n\n let splitHappened = false;\n for (let i = 0; i < maxLength; i++) {\n const targetOperation = sortedTargetOperations[i];\n const mergeOperation = sortedMergeOperations[i];\n\n if (targetOperation && mergeOperation) {\n if (\n !splitHappened &&\n operationsAreEqual(targetOperation, mergeOperation)\n ) {\n commonOperations.push(targetOperation);\n } else {\n splitHappened = true;\n targetDiffOperations.push(targetOperation);\n mergeDiffOperations.push(mergeOperation);\n }\n } else if (targetOperation) {\n targetDiffOperations.push(targetOperation);\n } else if (mergeOperation) {\n mergeDiffOperations.push(mergeOperation);\n }\n }\n\n return [commonOperations, targetDiffOperations, mergeDiffOperations];\n}\n\n// [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, 2:0, B3:0, B4:2, B5:0]\n// GC => [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, B4:2, B5:0]\n// Split => [0:0, 1:0] + [2:0, A3:0, A4:0, A5:0] + [B4:2, B5:0]\n// Reshuffle(6:4) => [6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\n// merge => [0:0, 1:0, 6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\nexport function merge(\n sortedTargetOperations: Operation[],\n sortedMergeOperations: Operation[],\n reshuffle: Reshuffle,\n): Operation[] {\n const [_commonOperations, _targetOperations, _mergeOperations] = split(\n garbageCollect(sortedTargetOperations),\n garbageCollect(sortedMergeOperations),\n );\n\n const maxCommonIndex = getMaxIndex(_commonOperations);\n const nextIndex =\n 1 +\n Math.max(\n maxCommonIndex,\n getMaxIndex(_targetOperations),\n getMaxIndex(_mergeOperations),\n );\n\n const filteredMergeOperations = filterDuplicatedOperations(\n _mergeOperations,\n _targetOperations,\n );\n\n const newOperationHistory = reshuffle(\n {\n index: nextIndex,\n skip: nextIndex - (maxCommonIndex + 1),\n },\n _targetOperations,\n filteredMergeOperations,\n );\n\n return _commonOperations.concat(newOperationHistory);\n}\n\nfunction getMaxIndex(sortedOperations: Operation[]) {\n const lastElement = sortedOperations[sortedOperations.length - 1];\n if (!lastElement) {\n return -1;\n }\n\n return lastElement.index;\n}\n\n// [] => -1\n// [0:0] => -1\n// [0:0 1:0] => 1\n// [0:0 1:1] => -1\n// [1:1] => -1\n// [0:0 1:0 2:0] => 1\n// [0:0 1:0 2:0 2:1] => 2\n// [0:0 1:0 2:0 2:1 2:2] => -1\n// [0:0 1:1 2:0] => 2\n// [0:0 1:1 2:2] => -1\n// [0:0 1:1 2:0 3:0] => 1\n// [0:0 1:1 2:0 3:1] => 3\n// [0:0 1:1 2:0 3:3] => -1\n// [50:50 100:50 150:50 151:0 152:0 153:0 154:3] => 53\n\nexport function nextSkipNumber<A extends OperationIndex>(\n sortedOperations: A[],\n): number {\n if (sortedOperations.length < 1) {\n return -1;\n }\n\n const cleanedOperations = garbageCollect(sortedOperations);\n\n let nextSkip =\n (cleanedOperations[cleanedOperations.length - 1]?.skip || 0) + 1;\n\n if (cleanedOperations.length > 1) {\n nextSkip += cleanedOperations[cleanedOperations.length - 2]?.skip || 0;\n }\n\n return (cleanedOperations[cleanedOperations.length - 1]?.index || -1) <\n nextSkip\n ? -1\n : nextSkip;\n}\n\nexport const checkOperationsIntegrity = (\n operations: Operation[],\n): IntegrityIssue[] => {\n return checkCleanedOperationsIntegrity(\n garbageCollect(sortOperations(operations)),\n );\n};\n\nexport type OperationsByScope = Partial<Record<OperationScope, Operation[]>>;\n\nexport const groupOperationsByScope = (\n operations: Operation[],\n): OperationsByScope => {\n const result = operations.reduce<OperationsByScope>((acc, operation) => {\n if (!acc[operation.scope]) {\n acc[operation.scope] = [];\n }\n\n acc[operation.scope]?.push(operation);\n\n return acc;\n }, {});\n\n return result;\n};\n\ntype PrepareOperationsResult = {\n validOperations: Operation[];\n invalidOperations: Operation[];\n duplicatedOperations: Operation[];\n integrityIssues: IntegrityIssue[];\n};\n\nexport const prepareOperations = (\n operationsHistory: Operation[],\n newOperations: Operation[],\n): PrepareOperationsResult => {\n const result: PrepareOperationsResult = {\n integrityIssues: [],\n validOperations: [],\n invalidOperations: [],\n duplicatedOperations: [],\n };\n\n const sortedOperationsHistory = sortOperations(operationsHistory);\n const sortedOperations = sortOperations(newOperations);\n\n const integrityErrors = checkCleanedOperationsIntegrity([\n ...sortedOperationsHistory,\n ...sortedOperations,\n ]);\n\n const missingIndexErrors = integrityErrors.filter(\n integrityIssue =>\n integrityIssue.category === IntegrityIssueSubType.MISSING_INDEX,\n );\n\n // get the integrity error with the lowest index operation\n const firstMissingIndexOperation = [...missingIndexErrors]\n .sort((a, b) => b.operation.index - a.operation.index)\n .pop()?.operation;\n\n for (const newOperation of sortedOperations) {\n // Operation is missing index or it follows an operation that is missing index\n if (\n firstMissingIndexOperation &&\n newOperation.index >= firstMissingIndexOperation.index\n ) {\n result.invalidOperations.push(newOperation);\n continue;\n }\n\n // check if operation is duplicated\n const isDuplicatedOperation = integrityErrors.some(integrityError => {\n return (\n integrityError.operation.index === newOperation.index &&\n integrityError.operation.skip === newOperation.skip &&\n integrityError.category ===\n IntegrityIssueSubType.DUPLICATED_INDEX\n );\n });\n\n // add to duplicated operations if it is duplicated\n if (isDuplicatedOperation) {\n result.duplicatedOperations.push(newOperation);\n continue;\n }\n\n // otherwise, add to valid operations\n result.validOperations.push(newOperation);\n }\n\n result.integrityIssues.push(...integrityErrors);\n return result;\n};\n\nexport function removeExistingOperations(\n newOperations: Operation[],\n operationsHistory: Operation[],\n): Operation[] {\n return newOperations.filter(newOperation => {\n return !operationsHistory.some(historyOperation => {\n return (\n (newOperation.type === 'NOOP' &&\n newOperation.skip === 0 &&\n newOperation.index === historyOperation.index) ||\n (newOperation.index === historyOperation.index &&\n newOperation.skip === historyOperation.skip &&\n newOperation.scope === historyOperation.scope &&\n newOperation.hash === historyOperation.hash &&\n newOperation.type === historyOperation.type)\n );\n });\n });\n}\n\nexport type SkipHeaderOperationIndex = Partial<Pick<OperationIndex, 'index'>> &\n Pick<OperationIndex, 'skip'>;\n\n/**\n * Skips header operations and returns the remaining operations.\n *\n * @param operations - The array of operations.\n * @param skipHeaderOperation - The skip header operation index.\n * @returns The remaining operations after skipping header operations.\n */\nexport function skipHeaderOperations<A extends OperationIndex>(\n operations: A[],\n skipHeaderOperation: SkipHeaderOperationIndex,\n): A[] {\n const [lastOperation] = sortOperations(operations).slice(-1);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const lastIndex = lastOperation?.index ?? -1;\n const nextIndex = lastIndex + 1;\n\n const skipOperationIndex = {\n ...skipHeaderOperation,\n index: skipHeaderOperation.index ?? nextIndex,\n };\n\n if (skipOperationIndex.index < lastIndex) {\n throw new Error(\n `The skip header operation index must be greater than or equal to ${lastIndex}`,\n );\n }\n\n const clearedOperations = garbageCollect(\n sortOperations([...operations, skipOperationIndex]),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (clearedOperations || []).slice(0, -1) as A[];\n}\n\nexport function garbageCollectDocumentOperations<A extends Action>(\n documentOperations: DocumentOperations<A>,\n): DocumentOperations<A> {\n const clearedOperations = Object.entries(documentOperations).reduce(\n (acc, entry) => {\n const [scope, ops] = entry;\n\n return {\n ...acc,\n [scope as OperationScope]: garbageCollect(sortOperations(ops)),\n };\n },\n {} as DocumentOperations<A>,\n );\n\n return {\n ...clearedOperations,\n };\n}\n\n/**\n * Filters out duplicated operations from the target operations array based on their IDs.\n * If an operation has an ID, it is considered duplicated if there is another operation in the source operations array with the same ID.\n * If an operation does not have an ID, it is considered unique and will not be filtered out.\n * @param targetOperations - The array of target operations to filter.\n * @param sourceOperations - The array of source operations to compare against.\n * @returns An array of operations with duplicates filtered out.\n */\nexport function filterDuplicatedOperations(\n targetOperations: Operation[],\n sourceOperations: Operation[],\n): Operation[] {\n return targetOperations.filter(op => {\n if (op.id) {\n return !sourceOperations.some(targetOp => targetOp.id === op.id);\n }\n\n return true;\n });\n}\n","import { create, castDraft, Draft, unsafe } from 'mutative';\nimport { v4 as uuid } from 'uuid';\nimport {\n loadStateOperation,\n pruneOperation,\n redoOperation,\n setNameOperation,\n undoOperation,\n} from './actions';\nimport {\n BaseAction,\n LOAD_STATE,\n PRUNE,\n REDO,\n SET_NAME,\n UNDO,\n} from './actions/types';\nimport { UndoRedoAction, z } from './schema';\nimport {\n Action,\n Document,\n ImmutableStateReducer,\n Operation,\n ReducerOptions,\n State,\n} from './types';\nimport { isBaseAction, hashDocument, replayOperations } from './utils/base';\nimport { SignalDispatch } from './signal';\nimport { documentHelpers, parseResultingState } from './utils';\n\n/**\n * Gets the next revision number based on the provided action.\n *\n * @param state The current state of the document.\n * @param action The action being applied to the document.\n * @returns The next revision number.\n */\nfunction getNextRevision(\n document: Document,\n action: Action | Operation,\n): number {\n let latestOperation: Operation | undefined;\n\n if ('index' in action) {\n latestOperation = { ...action };\n } else {\n latestOperation = document.operations[action.scope].at(-1);\n }\n\n return (latestOperation?.index ?? -1) + 1;\n}\n\n/**\n * Updates the document header with the latest revision number and\n * date of last modification.\n *\n * @param state The current state of the document.\n * @param action The action being applied to the document.\n * @returns The updated document state.\n */\nexport function updateHeader<T extends Document>(\n document: T,\n action: Action,\n): T {\n return {\n ...document,\n revision: {\n ...document.revision,\n [action.scope]: getNextRevision(document, action),\n },\n lastModified: new Date().toISOString(),\n };\n}\n\n/**\n * Updates the operations history of the document based on the provided action.\n *\n * @param state The current state of the document.\n * @param action The action being applied to the document.\n * @returns The updated document state.\n */\nfunction updateOperations<T extends Document>(\n document: T,\n action: Action | Operation,\n skip = 0,\n): T {\n // UNDO, REDO and PRUNE are meta operations\n // that alter the operations history themselves\n if ([UNDO, REDO, PRUNE].includes(action.type)) {\n return document;\n }\n\n const { scope } = action;\n const operations = document.operations[scope].slice();\n let operationId: string | undefined;\n\n const latestOperation = operations.at(-1);\n let nextIndex = (latestOperation?.index ?? -1) + 1;\n\n if ('index' in action) {\n if (action.index - skip > nextIndex) {\n throw new Error(\n `Missing operations: expected ${nextIndex} with skip 0 or equivalent, got index ${action.index} with skip ${skip}`,\n );\n }\n\n nextIndex = action.index;\n operationId = action.id;\n } else {\n operationId = uuid();\n }\n\n operations.push({\n ...action,\n id: operationId,\n index: nextIndex,\n timestamp: new Date().toISOString(),\n hash: '',\n scope,\n skip,\n error: undefined,\n });\n\n // adds the action to the operations history with\n // the latest index and current timestamp\n return {\n ...document,\n operations: { ...document.operations, [scope]: operations },\n };\n}\n\n/**\n * Updates the document state based on the provided action.\n *\n * @param state The current state of the document.\n * @param action The action being applied to the document.\n * @returns The updated document state.\n */\nexport function updateDocument<T extends Document>(\n document: T,\n action: Action,\n skip = 0,\n) {\n let newDocument = updateOperations(document, action, skip);\n newDocument = updateHeader(newDocument, action);\n return newDocument;\n}\n\n/**\n * The base document reducer function that wraps a custom reducer function.\n *\n * @param state The current state of the document.\n * @param action The action being applied to the document.\n * @param wrappedReducer The custom reducer function being wrapped by the base reducer.\n * @returns The updated document state.\n */\nfunction _baseReducer<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: BaseAction,\n wrappedReducer: ImmutableStateReducer<T, A, L>,\n): Document<T, A, L> {\n // throws if action is not valid base action\n z.BaseActionSchema().parse(action);\n\n switch (action.type) {\n case SET_NAME:\n return setNameOperation(document, action.input);\n case PRUNE:\n return pruneOperation(document, action, wrappedReducer);\n case LOAD_STATE:\n return loadStateOperation(document, action.input.state);\n default:\n return document;\n }\n}\n\ntype UndoRedoProcessResult<T, A extends Action, L> = {\n document: Document<T, A, L>;\n action: A | BaseAction;\n skip: number;\n};\n\n/**\n * Processes an UNDO or REDO action.\n *\n * @param document The current state of the document.\n * @param action The action being applied to the document.\n * @param skip The number of operations to skip before applying the action.\n * @returns The updated document, calculated skip value and transformed action (if apply).\n */\nexport function processUndoRedo<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: UndoRedoAction,\n skip: number,\n): UndoRedoProcessResult<T, A, L> {\n switch (action.type) {\n case UNDO:\n return undoOperation(document, action, skip);\n case REDO:\n return redoOperation(document, action, skip);\n default:\n return { document, action, skip };\n }\n}\n\n/**\n * Processes a skip operation on a document.\n *\n * @template T - The type of the document state.\n * @template A - The type of the document actions.\n * @template L - The type of the document labels.\n * @param {Document<T, A, L>} document - The document to process the skip operation on.\n * @param {A | BaseAction | Operation} action - The action or operation to process.\n * @param {ImmutableStateReducer<T, A, L>} customReducer - The custom reducer function for the document state.\n * @param {number} skipValue - The value to skip.\n * @returns {Document<T, A, L>} - The updated document after processing the skip operation.\n */\nfunction processSkipOperation<\n T,\n A extends Action,\n L,\n D extends Document<T, A, L>,\n>(\n document: D,\n action: A | BaseAction | Operation,\n customReducer: ImmutableStateReducer<T, A, L>,\n skipValue: number,\n reuseOperationResultingState = false,\n resultingStateParser = parseResultingState,\n): D {\n const scope = action.scope;\n\n const latestOperation = document.operations[scope].at(-1);\n\n if (!latestOperation) return document;\n\n const documentOperations = documentHelpers.garbageCollectDocumentOperations(\n {\n ...document.operations,\n [scope]: documentHelpers.skipHeaderOperations(\n document.operations[scope],\n latestOperation,\n ),\n },\n );\n\n let scopeState: T | L | undefined = undefined;\n const lastRemainingOperation = documentOperations[scope].at(-1);\n\n // if the last operation has the resulting state and\n // reuseOperationResultingState is true then reuses it\n // instead of replaying the operations from the beginning\n if (\n reuseOperationResultingState &&\n lastRemainingOperation?.resultingState\n ) {\n scopeState = resultingStateParser(\n lastRemainingOperation.resultingState,\n ) as T | L;\n } else {\n const { state } = replayOperations(\n document.initialState,\n documentOperations,\n customReducer,\n undefined,\n undefined,\n undefined,\n undefined,\n {\n reuseHash: true,\n reuseOperationResultingState,\n operationResultingStateParser: resultingStateParser,\n },\n );\n scopeState = state[scope];\n }\n\n return {\n ...document,\n state: {\n ...document.state,\n [scope]: scopeState,\n },\n operations: documentHelpers.garbageCollectDocumentOperations({\n ...document.operations,\n }),\n };\n}\n\n/**\n * Base document reducer that wraps a custom document reducer and handles\n * document-level actions such as undo, redo, prune, and set name.\n *\n * @template T - The type of the state of the custom reducer.\n * @template A - The type of the actions of the custom reducer.\n * @param state - The current state of the document.\n * @param action - The action object to apply to the state.\n * @param customReducer - The custom reducer that implements the application logic\n * specific to the document's state.\n * @returns The new state of the document.\n */\nexport function baseReducer<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: A | BaseAction | Operation,\n customReducer: ImmutableStateReducer<T, A, L>,\n dispatch?: SignalDispatch,\n options: ReducerOptions = {},\n) {\n const {\n skip,\n ignoreSkipOperations = false,\n reuseHash = false,\n reuseOperationResultingState = false,\n operationResultingStateParser,\n } = options;\n\n const _action = { ...action };\n const skipValue = skip || 0;\n let newDocument: Document<T, A, L> = { ...document };\n // let clipboard = [...document.clipboard];\n\n const shouldProcessSkipOperation =\n !ignoreSkipOperations &&\n (skipValue > 0 || ('index' in _action && _action.skip > 0));\n\n // ignore undo redo for now\n\n // if (isUndoRedo(_action)) {\n // const {\n // skip: calculatedSkip,\n // action: transformedAction,\n // document: processedDocument,\n // } = processUndoRedo(document, _action, skipValue);\n\n // _action = transformedAction;\n // skipValue = calculatedSkip;\n // newDocument = processedDocument;\n // clipboard = [...newDocument.clipboard];\n // }\n\n // if the action is one the base document actions (SET_NAME, UNDO, REDO, PRUNE)\n // then runs the base reducer first\n if (isBaseAction(_action)) {\n newDocument = _baseReducer(newDocument, _action, customReducer);\n }\n\n // updates the document revision number, last modified date\n // and operation history\n newDocument = updateDocument(newDocument, _action, skipValue);\n\n if (shouldProcessSkipOperation) {\n newDocument = processSkipOperation(\n newDocument,\n _action,\n customReducer,\n skipValue,\n reuseOperationResultingState,\n operationResultingStateParser,\n );\n }\n\n // wraps the custom reducer with Mutative to avoid\n // mutation bugs and allow writing reducers with\n // mutating code\n newDocument = create(newDocument, draft => {\n // the reducer runs on a immutable version of\n // provided state\n try {\n const newState = customReducer(draft.state, _action as A, dispatch);\n\n // const clipboardValue = isUndoRedo(action) ? [...clipboard] : [];\n\n // if the reducer creates a new state object instead\n // of mutating the draft then returns the new state\n if (newState) {\n // Object.assign(draft.state, newState);\n unsafe(() => {\n // casts new state as draft to comply with typescript\n draft.state = castDraft(newState);\n // clipboard: [...clipboardValue],\n });\n } else {\n // unsafe(() => {\n // draft.clipboard = castDraft([...clipboardValue]);\n // });\n }\n } catch (error) {\n // if the reducer throws an error then we should keep the previous state (before replayOperations)\n // and remove skip number from action/operation\n const lastOperationIndex =\n newDocument.operations[_action.scope].length - 1;\n draft.operations[_action.scope][lastOperationIndex].error = (\n error as Error\n ).message;\n\n draft.operations[_action.scope][lastOperationIndex].skip = 0;\n\n if (shouldProcessSkipOperation) {\n draft.state = castDraft<State<T, L>>({ ...document.state });\n draft.operations = castDraft({\n ...document.operations,\n [_action.scope]: [\n ...document.operations[_action.scope],\n {\n ...draft.operations[_action.scope][\n lastOperationIndex\n ],\n },\n ],\n });\n }\n }\n });\n // updates the document history\n // meta operations are not added to the operations history\n if ([UNDO, REDO, PRUNE].includes(_action.type)) {\n return newDocument;\n }\n\n // if reuseHash is true, checks if the action has\n // an hash and uses it instead of generating it\n const scope = _action.scope || 'global';\n const hash =\n reuseHash && Object.prototype.hasOwnProperty.call(_action, 'hash')\n ? (_action as Operation).hash\n : hashDocument(newDocument, scope);\n\n // updates the last operation with the hash of the resulting state\n const lastOperation = newDocument.operations[scope].at(-1);\n if (lastOperation) {\n lastOperation.hash = hash;\n\n if (reuseOperationResultingState) {\n lastOperation.resultingState = newDocument.state[scope];\n }\n\n // if the action has attachments then adds them to the document\n if (!isBaseAction(_action) && _action.attachments) {\n _action.attachments.forEach(attachment => {\n const { hash, ...file } = attachment;\n newDocument.attachments[hash] = {\n ...file,\n };\n });\n }\n }\n\n return newDocument;\n}\n\n/**\n * Base document reducer that wraps a custom document reducer and handles\n * document-level actions such as undo, redo, prune, and set name.\n *\n * @template T - The type of the state of the custom reducer.\n * @template A - The type of the actions of the custom reducer.\n * @param state - The current state of the document.\n * @param action - The action object to apply to the state.\n * @param customReducer - The custom reducer that implements the application logic\n * specific to the document's state.\n * @returns The new state of the document.\n */\nexport function mutableBaseReducer<T, A extends Action, L>(\n document: Document<T, A, L>,\n action: A | BaseAction | Operation,\n customReducer: ImmutableStateReducer<T, A, L>,\n dispatch?: SignalDispatch,\n options: ReducerOptions = {},\n) {\n const {\n skip,\n ignoreSkipOperations = false,\n reuseHash = false,\n reuseOperationResultingState = false,\n operationResultingStateParser,\n } = options;\n\n const _action = { ...action };\n const skipValue = skip || 0;\n let newDocument: Document<T, A, L> = { ...document };\n // let clipboard = [...document.clipboard];\n\n const shouldProcessSkipOperation =\n !ignoreSkipOperations &&\n (skipValue > 0 || ('index' in _action && _action.skip > 0));\n\n // if the action is one the base document actions (SET_NAME, UNDO, REDO, PRUNE)\n // then runs the base reducer first\n if (isBaseAction(_action)) {\n newDocument = _baseReducer(newDocument, _action, customReducer);\n }\n\n // updates the document revision number, last modified date\n // and operation history\n newDocument = updateDocument(newDocument, _action, skipValue);\n\n if (shouldProcessSkipOperation) {\n newDocument = processSkipOperation(\n newDocument,\n _action,\n customReducer,\n skipValue,\n reuseOperationResultingState,\n operationResultingStateParser,\n );\n }\n\n try {\n const newState = customReducer(\n newDocument.state as Draft<State<T, L>>,\n _action as A,\n dispatch,\n );\n if (newState) {\n newDocument.state = newState;\n }\n } catch (error) {\n // if the reducer throws an error then we should keep the previous state (before replayOperations)\n // and remove skip number from action/operation\n const lastOperationIndex =\n newDocument.operations[_action.scope].length - 1;\n newDocument.operations[_action.scope][lastOperationIndex].error = (\n error as Error\n ).message;\n newDocument.operations[_action.scope][lastOperationIndex].skip = 0;\n\n if (shouldProcessSkipOperation) {\n newDocument.state = { ...document.state };\n newDocument.operations = {\n ...document.operations,\n [_action.scope]: [\n ...document.operations[_action.scope],\n {\n ...newDocument.operations[_action.scope][\n lastOperationIndex\n ],\n },\n ],\n };\n }\n }\n\n if ([UNDO, REDO, PRUNE].includes(_action.type)) {\n return newDocument;\n }\n\n // if reuseHash is true, checks if the action has\n // an hash and uses it instead of generating it\n const scope = _action.scope || 'global';\n const hash =\n reuseHash && Object.prototype.hasOwnProperty.call(_action, 'hash')\n ? (_action as Operation).hash\n : hashDocument(newDocument, scope);\n\n // updates the last operation with the hash of the resulting state\n const lastOperation = newDocument.operations[scope].at(-1);\n if (lastOperation) {\n lastOperation.hash = hash;\n\n if (reuseOperationResultingState) {\n lastOperation.resultingState = newDocument.state[scope];\n }\n\n // if the action has attachments then adds them to the document\n if (!isBaseAction(_action) && _action.attachments) {\n _action.attachments.forEach(attachment => {\n const { hash, ...file } = attachment;\n newDocument.attachments[hash] = {\n ...file,\n };\n });\n }\n }\n return newDocument;\n}\n","import stringifyJson from 'safe-stable-stringify';\nimport { baseReducer, mutableBaseReducer, updateHeader } from '../reducer';\nimport {\n Action,\n BaseAction,\n UndoRedoAction,\n Document,\n ExtendedState,\n ImmutableStateReducer,\n Reducer,\n OperationScope,\n State,\n CreateState,\n PartialState,\n DocumentOperations,\n DocumentHeader,\n DocumentOperationsIgnoreMap,\n Operation,\n MappedOperation,\n ReducerOptions,\n} from '../types';\nimport { hash } from './node';\nimport {\n LOAD_STATE,\n PRUNE,\n REDO,\n SET_NAME,\n UNDO,\n NOOP,\n} from '../actions/types';\nimport { SignalDispatch } from '../signal';\n\nexport function isNoopOperation(op: Partial<Operation>): boolean {\n return (\n op.type === NOOP &&\n op.skip !== undefined &&\n op.skip > 0 &&\n op.hash !== undefined\n );\n}\n\nexport function isUndoRedo(action: Action): action is UndoRedoAction {\n return [UNDO, REDO].includes(action.type);\n}\n\nexport function isBaseAction(action: Action): action is BaseAction {\n return [SET_NAME, UNDO, REDO, PRUNE, LOAD_STATE].includes(action.type);\n}\n\n/**\n * Helper function to be used by action creators.\n *\n * @remarks\n * Creates an action with the given type and input properties. The input\n * properties default to an empty object.\n *\n * @typeParam A - Type of the action to be returned.\n *\n * @param type - The type of the action.\n * @param input - The input properties of the action.\n * @param attachments - The attachments included in the action.\n * @param validator - The validator to use for the input properties.\n * @param scope - The scope of the action, can either be 'global' or 'local'.\n * @param skip - The number of operations to skip before this new action is applied.\n *\n * @throws Error if the type is empty or not a string.\n *\n * @returns The new action.\n */\nexport function createAction<A extends Action>(\n type: A['type'],\n input?: A['input'],\n attachments?: Action['attachments'],\n validator?: () => { parse(v: unknown): A['input'] },\n scope: OperationScope = 'global',\n): A {\n if (!type) {\n throw new Error('Empty action type');\n }\n\n if (typeof type !== 'string') {\n throw new Error(`Invalid action type: ${JSON.stringify(type)}`);\n }\n\n const action: Action = { type, input, scope };\n\n if (attachments) {\n action.attachments = attachments;\n }\n\n try {\n validator?.().parse(action.input);\n } catch (error) {\n throw new Error(`Invalid action input: ${error}`);\n }\n\n return action as A;\n}\n\n/**\n * Helper function to create a document model reducer.\n *\n * @remarks\n * This function creates a new reducer that wraps the provided `reducer` with\n * `documentReducer`, adding support for document actions:\n * - `SET_NAME`\n * - `UNDO`\n * - `REDO`\n * - `PRUNE`\n *\n * It also updates the document-related attributes on every operation.\n *\n * @param reducer - The custom reducer to wrap.\n * @param documentReducer - The document reducer to use.\n *\n * @returns The new reducer.\n */\nexport function createReducer<\n S = unknown,\n A extends Action = Action,\n L = unknown,\n>(\n reducer: ImmutableStateReducer<S, A, L>,\n documentReducer = baseReducer,\n): Reducer<S, A, L> {\n return (document, action, dispatch, options) => {\n return documentReducer(document, action, reducer, dispatch, options);\n };\n}\n\nexport function createUnsafeReducer<\n S = unknown,\n A extends Action = Action,\n L = unknown,\n>(\n reducer: ImmutableStateReducer<S, A, L>,\n documentReducer = mutableBaseReducer,\n): Reducer<S, A, L> {\n return (document, action, dispatch, options) => {\n return documentReducer(document, action, reducer, dispatch, options);\n };\n}\n\nexport const createExtendedState = <S, L>(\n initialState?: Partial<ExtendedState<PartialState<S>, PartialState<L>>>,\n createState?: CreateState<S, L>,\n): ExtendedState<S, L> => {\n return {\n name: '',\n documentType: '',\n revision: {\n global: 0,\n local: 0,\n },\n created: new Date().toISOString(),\n lastModified: new Date().toISOString(),\n attachments: {},\n ...initialState,\n state:\n createState?.(initialState?.state) ??\n ((initialState?.state ?? { global: {}, local: {} }) as State<S, L>),\n };\n};\n\n/**\n * Builds the initial document state from the provided data.\n *\n * @typeParam T - The type of the data.\n * @typeParam A - The type of the actions.\n *\n * @param initialState - The initial state of the document. The `data` property\n * is required, but all other properties are optional.\n *\n * @returns The new document state.\n */\nexport const createDocument = <S, A extends Action, L = unknown>(\n initialState?: Partial<ExtendedState<PartialState<S>, PartialState<L>>>,\n createState?: (\n state?: Partial<State<PartialState<S>, PartialState<L>>>,\n ) => State<S, L>,\n): Document<S, A, L> => {\n const state: ExtendedState<S, L> = createExtendedState(\n initialState,\n createState,\n );\n return {\n ...state,\n initialState: state,\n operations: { global: [], local: [] },\n clipboard: [],\n };\n};\n\n// export const stringifyJson = configureStringify\n\nexport const hashDocument = (\n document: Pick<Document, 'state'>,\n scope: OperationScope = 'global',\n) => {\n return hash(stringifyJson(document.state[scope] || ''));\n};\n\nexport const hashKey = (date?: Date, randomLimit = 1000) => {\n const random = Math.random() * randomLimit;\n return hash(`${(date ?? new Date()).toISOString()}${random}`);\n};\n\nexport function readOnly<T>(value: T): Readonly<T> {\n return Object.freeze(value);\n}\n\n/**\n * Maps skipped operations in an array of operations.\n * Skipped operations are operations that are ignored during processing.\n * @param operations - The array of operations to map.\n * @param skippedHeadOperations - The number of operations to skip at the head of the array of operations.\n * @returns An array of mapped operations with ignore flag indicating if the operation is skipped.\n * @throws Error if the operation index is invalid and there are missing operations.\n */\nexport function mapSkippedOperations<A extends Action>(\n operations: Operation<BaseAction | A>[],\n skippedHeadOperations?: number,\n): MappedOperation<A>[] {\n const ops = [...operations];\n\n let skipped = skippedHeadOperations || 0;\n let latestOpIndex = ops.length > 0 ? ops[ops.length - 1].index : 0;\n\n const scopeOpsWithIgnore = [] as MappedOperation<A>[];\n\n for (const operation of ops.reverse()) {\n if (skipped > 0) {\n const operationsDiff = latestOpIndex - operation.index;\n skipped -= operationsDiff;\n }\n\n if (skipped < 0) {\n throw new Error('Invalid operation index, missing operations');\n }\n\n const mappedOp = {\n ignore: skipped > 0,\n operation,\n };\n\n // here we add 1 to the skip number because we want to get the number of\n // operations that we want to move the pointer back to get the latest valid operation\n // operation.skip = 1 means that we want to move the pointer back 2 operations to get to the latest valid operation\n const operationSkip = operation.skip > 0 ? operation.skip + 1 : 0;\n\n if (operationSkip > 0 && operationSkip > skipped) {\n const skipDiff = operationSkip - skipped;\n skipped = skipped + skipDiff;\n }\n\n latestOpIndex = operation.index;\n scopeOpsWithIgnore.push(mappedOp);\n }\n\n return scopeOpsWithIgnore.reverse();\n}\n\nexport function calculateSkipsLeft<A extends Action>(\n operations: Operation<BaseAction | A>[],\n currentIndex: number,\n skip: number,\n): number {\n const sortedOperations = operations\n .slice()\n .sort((a, b) => a.skip - b.skip)\n .sort((a, b) => a.index - b.index);\n\n let skipsLeft = skip;\n let skipsToPerform = 0;\n let lastIndex = currentIndex;\n\n for (const operation of sortedOperations.reverse()) {\n const distance = lastIndex - operation.index;\n\n skipsLeft = skipsLeft - distance;\n\n if (skipsLeft > -1) {\n skipsToPerform++;\n lastIndex = operation.index;\n } else {\n break;\n }\n }\n\n return skipsToPerform;\n}\n\n// Flattens the operations from all scopes into\n// a single array and sorts them by timestamp\nexport function sortOperations<A extends Action>(\n operations: DocumentOperations<A>,\n) {\n return Object.values(operations)\n .flatMap(array => array)\n .sort(\n (a, b) =>\n new Date(a.timestamp).getTime() -\n new Date(b.timestamp).getTime(),\n );\n}\n\n// Flattens the mapped operations (with ignore flag) from all scopes into\n// a single array and sorts them by timestamp\nexport function sortMappedOperations<A extends Action>(\n operations: DocumentOperationsIgnoreMap<A>,\n) {\n return Object.values(operations)\n .flatMap(array => array)\n .sort(\n (a, b) =>\n new Date(a.operation.timestamp).getTime() -\n new Date(b.operation.timestamp).getTime(),\n );\n}\n\n// Runs the operations on the initial data using the\n// provided reducer, wrapped with the document reducer.\n// This rebuilds the document according to the provided actions.\nexport function replayOperations<T, A extends Action, L>(\n initialState: ExtendedState<T, L>,\n clearedOperations: DocumentOperations<A>,\n reducer: ImmutableStateReducer<T, A, L>,\n dispatch?: SignalDispatch,\n header?: DocumentHeader,\n documentReducer = baseReducer,\n skipHeaderOperations: SkipHeaderOperations = {},\n options?: ReducerOptions,\n): Document<T, A, L> {\n // wraps the provided custom reducer with the\n // base document reducer\n const wrappedReducer = createReducer(reducer, documentReducer);\n\n return replayDocument(\n initialState,\n clearedOperations,\n wrappedReducer,\n dispatch,\n header,\n skipHeaderOperations,\n options,\n );\n}\n\nexport type SkipHeaderOperations = Partial<Record<OperationScope, number>>;\n\nexport type ReplayDocumentOptions = {\n // if false then reuses the hash from the operations\n // and only checks the final hash of each scope\n checkHashes?: boolean;\n // if true then looks for the latest operation with\n // a resulting state and uses it as a starting point\n reuseOperationResultingState?: boolean;\n // Optional parser for the operation resulting state, uses JSON.parse by default\n operationResultingStateParser?: (state: unknown) => object;\n};\n\n// Runs the operations on the initial data using the\n// provided document reducer.\n// This rebuilds the document according to the provided actions.\nexport function replayDocument<T, A extends Action, L>(\n initialState: ExtendedState<T, L>,\n operations: DocumentOperations<A>,\n reducer: Reducer<T, A, L>,\n dispatch?: SignalDispatch,\n header?: DocumentHeader,\n skipHeaderOperations: SkipHeaderOperations = {},\n options?: ReplayDocumentOptions,\n): Document<T, A, L> {\n const {\n checkHashes = true,\n reuseOperationResultingState,\n operationResultingStateParser = parseResultingState,\n } = options || {};\n\n let documentState = initialState;\n const operationsToReplay = [] as Operation<A | BaseAction>[];\n const initialOperations: DocumentOperations<A> = {\n global: [],\n local: [],\n };\n\n // if operation resulting state is to be used then\n // looks for the last operation with state of each\n // scope to use it as the starting point and only\n // replay operations that follow it\n if (reuseOperationResultingState) {\n for (const [scope, scopeOperations] of Object.entries(operations)) {\n const index = scopeOperations.findLastIndex(\n s => !!s.resultingState,\n );\n if (index < 0) {\n operationsToReplay.push(...scopeOperations);\n continue;\n }\n const opWithState = scopeOperations[index];\n try {\n const scopeState = operationResultingStateParser(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n opWithState.resultingState!,\n );\n documentState = {\n ...documentState,\n state: {\n ...documentState.state,\n // TODO how to deal with attachments?\n [scope]: scopeState,\n },\n };\n initialOperations[scope as keyof DocumentOperations<A>].push(\n ...scopeOperations.slice(0, index + 1),\n );\n operationsToReplay.push(...scopeOperations.slice(index + 1));\n } catch {\n /* if parsing fails then keeps replays all scope operations */\n operationsToReplay.push(...scopeOperations);\n }\n }\n } else {\n operationsToReplay.push(...Object.values(operations).flat());\n }\n\n // builds a new document from the initial data\n const document = createDocument<T, A, L>(documentState);\n document.initialState = initialState;\n document.operations = initialOperations;\n\n let result = document;\n // if there are operations left without resulting state\n // then replays them\n if (operationsToReplay.length) {\n result = operationsToReplay.reduce((document, operation) => {\n const doc = reducer(document, operation, dispatch, {\n skip: operation.skip,\n ignoreSkipOperations: true,\n reuseHash: !checkHashes,\n });\n\n return doc;\n }, document);\n }\n // if not then updates the document header according\n // to the latest operation of each scope\n else {\n for (const scopeOperations of Object.values(initialOperations)) {\n const lastOperation = scopeOperations.at(-1);\n if (lastOperation) {\n result = updateHeader(result, lastOperation);\n }\n }\n }\n\n // if hash generation was skipped then checks if the hash\n // of each scope matches the hash of last operation\n if (!checkHashes) {\n for (const scope of Object.keys(result.state)) {\n for (let i = operationsToReplay.length - 1; i >= 0; i--) {\n const operation = operationsToReplay[i];\n\n if (operation.scope !== scope) {\n continue;\n }\n if (operation.hash !== hashDocument(result, scope)) {\n throw new Error(`Hash mismatch for scope ${scope}`);\n } else {\n break;\n }\n }\n }\n }\n\n // reuses operation timestamp if provided\n const resultOperations: DocumentOperations<A> = Object.keys(\n result.operations,\n ).reduce(\n (acc, key) => {\n const scope = key as keyof DocumentOperations<A>;\n return {\n ...acc,\n [scope]: [\n ...result.operations[scope].map((operation, index) => {\n return {\n ...operation,\n timestamp:\n operations[scope][index]?.timestamp ??\n operation.timestamp,\n };\n }),\n ],\n };\n },\n { global: [], local: [] },\n );\n // gets the last modified timestamp from the latest operation\n const lastModified = Object.values(resultOperations).reduce((acc, curr) => {\n const operation = curr[curr.length - 1];\n if (operation?.timestamp > acc) {\n acc = operation.timestamp;\n }\n return acc;\n }, initialState.lastModified);\n\n return { ...result, operations: resultOperations, lastModified };\n}\n\nexport function isSameDocument(documentA: Document, documentB: Document) {\n return stringifyJson(documentA) === stringifyJson(documentB);\n}\n\nexport function parseResultingState(state: unknown) {\n const stateType = typeof state;\n if (stateType === 'string') {\n return JSON.parse(state as string) as object;\n } else if (stateType === 'object') {\n return state as object;\n } else {\n throw new Error(`Providing resulting state is of type: ${stateType}`);\n }\n}\n","import { ExtendedState, OperationScope, z } from '../types';\nimport { createAction } from '../utils/base';\nimport {\n LoadStateAction,\n PruneAction,\n RedoAction,\n SetNameAction,\n UndoAction,\n NOOPAction,\n} from './types';\n\n/**\n * Changes the name of the document.\n *\n * @param name - The name to be set in the document.\n * @category Actions\n */\nexport const setName = (name: string) =>\n createAction<SetNameAction>(\n 'SET_NAME',\n name,\n undefined,\n z.SetNameActionInputSchema,\n undefined,\n );\n\n/**\n * Cancels the last `count` operations.\n *\n * @param count - Number of operations to cancel\n * @category Actions\n */\nexport const undo = (skip = 1, scope: OperationScope = 'global') =>\n createAction<UndoAction>(\n 'UNDO',\n skip,\n undefined,\n z.UndoActionInputSchema,\n scope,\n );\n\n/**\n * Cancels the last `count` {@link undo | UNDO} operations.\n *\n * @param count - Number of UNDO operations to cancel\n * @category Actions\n */\nexport const redo = (count = 1, scope: OperationScope = 'global') =>\n createAction<RedoAction>(\n 'REDO',\n count,\n undefined,\n z.RedoActionInputSchema,\n scope,\n );\n\n/**\n * Joins multiple operations into a single {@link loadState | LOAD_STATE} operation.\n *\n * @remarks\n * Useful to keep operations history smaller. Operations to prune are selected by index,\n * similar to the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | slice} method in Arrays.\n *\n * @param start - Index of the first operation to prune\n * @param end - Index of the last operation to prune\n * @category Actions\n */\nexport const prune = (\n start?: number | undefined,\n end?: number | undefined,\n scope: OperationScope = 'global',\n) =>\n createAction<PruneAction>(\n 'PRUNE',\n { start, end },\n undefined,\n z.PruneActionInputSchema,\n scope,\n );\n\n/**\n * Replaces the state of the document.\n *\n * @remarks\n * This action shouldn't be used directly. It is dispatched by the {@link prune} action.\n *\n * @param state - State to be set in the document.\n * @param operations - Number of operations that were removed from the previous state.\n * @category Actions\n */\nexport const loadState = <S, T>(\n state: Pick<ExtendedState<S, T>, 'state' | 'name'>,\n operations: number,\n) =>\n createAction<LoadStateAction>(\n 'LOAD_STATE',\n { state, operations },\n undefined,\n z.LoadStateActionInputSchema,\n );\n\nexport const noop = (scope: OperationScope = 'global') =>\n createAction<NOOPAction>('NOOP', {}, undefined, undefined, scope);\n","import { loadState, prune, redo, setName, undo } from './actions';\nimport type { BaseAction } from './actions/types';\nimport type { SignalDispatch } from './signal';\nimport type {\n Action,\n AttachmentRef,\n Document,\n ExtendedState,\n OperationScope,\n Reducer,\n ReducerOptions,\n} from './types';\nimport { loadFromFile, readOnly, saveToFile } from './utils';\n\n/**\n * This is an abstract class representing a document and provides methods\n * for creating and manipulating documents.\n * @typeparam T - The type of data stored in the document.\n * @typeparam A - The type of action the document can take.\n */\nexport abstract class BaseDocument<T, A extends Action, L = unknown> {\n protected _document: Document<T, A, L>;\n private _reducer: Reducer<T, A, L>;\n private _signalDispatch?: SignalDispatch;\n\n /**\n * Constructs a BaseDocument instance with an initial state.\n * @param reducer - The reducer function that updates the state.\n * @param document - The initial state of the document.\n */\n constructor(\n reducer: Reducer<T, A, L>,\n document: Document<T, A, L>,\n signalDispatch?: SignalDispatch,\n ) {\n this._reducer = reducer;\n this._document = document;\n this._signalDispatch = signalDispatch;\n }\n\n /**\n * Dispatches an action to update the state of the document.\n * @param action - The action to dispatch.\n * @returns The Document instance.\n */\n protected dispatch(action: A | BaseAction, options?: ReducerOptions) {\n this._document = this._reducer(\n this._document,\n action,\n this._signalDispatch,\n options,\n );\n return this;\n }\n\n /**\n * Saves the state of the document to a file.\n * @param path - The file path where the state should be saved.\n * @param extension - The file extension to use when saving the state.\n * @returns The file path where the state was saved.\n */\n protected saveToFile(path: string, extension: string, name?: string) {\n return saveToFile(this._document, path, extension, name);\n }\n\n /**\n * Loads the state of the document from a file.\n * @param path - The file path where the state is stored.\n */\n async loadFromFile(path: string) {\n this._document = await loadFromFile<T, A, L>(path, this._reducer);\n }\n\n /**\n * Loads the state of the document from a file and returns it.\n * @param path - The file path where the state is stored.\n * @param reducer - The reducer function that updates the state.\n * @returns The state of the document.\n */\n protected static async stateFromFile<T, A extends Action, L>(\n path: string,\n reducer: Reducer<T, A, L>,\n ) {\n const state = await loadFromFile<T, A, L>(path, reducer);\n return state;\n }\n\n /**\n * Gets the current state of the document.\n */\n get state() {\n return readOnly(this._document.state);\n }\n\n /**\n * Gets the list of operations performed on the document.\n */\n get operations() {\n return readOnly(this._document.operations);\n }\n\n /**\n * Gets the name of the document.\n */\n get name() {\n return this._document.name;\n }\n\n /**\n * Gets the type of document.\n */\n get documentType() {\n return this._document.documentType;\n }\n\n /**\n * Gets the timestamp of the date the document was created.\n */\n get created() {\n return this._document.created;\n }\n\n /**\n * Gets the timestamp of the date the document was last modified.\n */\n get lastModified() {\n return this._document.lastModified;\n }\n\n /**\n * Gets the global revision number of the document.\n */\n get revision() {\n return this._document.revision.global;\n }\n\n getRevision(scope: OperationScope) {\n return this._document.revision[scope];\n }\n\n /**\n * Gets the initial state of the document.\n */\n get initialState() {\n return readOnly(this._document.initialState);\n }\n\n /**\n * Returns the current document as an object\n */\n public toDocument() {\n return readOnly(this._document);\n }\n\n /**\n * Gets the attachment associated with the given key.\n * @param attachment - The key of the attachment to retrieve.\n */\n public getAttachment(attachment: AttachmentRef) {\n return this._document.attachments[attachment];\n }\n\n /**\n * Sets the name of the document.\n * @param name - The new name of the document.\n */\n public setName(name: string) {\n this.dispatch(setName(name));\n return this;\n }\n\n /**\n * Reverts a number of actions from the document.\n * @param count - The number of actions to revert.\n */\n public undo(count: number) {\n this.dispatch(undo(count));\n return this;\n }\n\n /**\n * Reapplies a number of actions to the document.\n * @param count - The number of actions to reapply.\n */\n public redo(count: number) {\n this.dispatch(redo(count));\n return this;\n }\n /**\n * Removes a range of operations from the document.\n * @param start - The starting index of the range to remove.\n * @param end - The ending index of the range to remove.\n */\n public prune(start?: number | undefined, end?: number | undefined) {\n this.dispatch(prune(start, end));\n return this;\n }\n\n /**\n * Loads a document state and a set of operations.\n * @param state - The state to load.\n * @param operations - The operations to apply to the document.\n */\n public loadState(\n state: Pick<ExtendedState<T, L>, 'state' | 'name'>,\n operations: number,\n ) {\n this.dispatch(loadState(state, operations));\n return this;\n }\n}\n/**\n * Applies multiple mixins to a base class.\n * Used to have separate mixins to group methods by actions.\n *\n * @remarks\n * {@link https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern}\n *\n * @param derivedCtor - The class to apply the mixins to.\n * @param constructors - The constructors of the mixins.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function applyMixins(derivedCtor: any, constructors: any[]) {\n constructors.forEach(baseCtor => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {\n Object.defineProperty(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n derivedCtor.prototype,\n name,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n}\n"],"names":["value","tmp","key","res","join","stringify","action","standardTypes","inherits_browserModule","inherits","buffer","require$$0","ieee754","require$$1","Buffer","byteLength","i","code","Hash","hash","require$$2","K","W","z","Sha1","Sha256","IntegrityIssueType","IntegrityIssueSubType","sortOperations","uuid","z.BaseActionSchema","documentHelpers.garbageCollectDocumentOperations","documentHelpers.skipHeaderOperations","stringifyJson","skipHeaderOperations","document","z.SetNameActionInputSchema","z.UndoActionInputSchema","z.RedoActionInputSchema","z.PruneActionInputSchema","z.LoadStateActionInputSchema"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19]}
|