@svta/cml-structured-field-values 1.1.6 → 1.1.7
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/index.d.ts +223 -223
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -66
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DECIMAL: string","INTEGER: string","STRING_REGEX: RegExp","parameters: SfParameters | undefined","innerList: SfItem[]","value: SfDictionary","member: SfItem | SfInnerList","value: SfMember[]","list: SfItem[] | SfBareItem[]","parts: string[]"],"sources":["../src/SfItem.ts","../src/utils/DICT.ts","../src/parse/ParsedValue.ts","../src/utils/throwError.ts","../src/parse/parseError.ts","../src/utils/INNER.ts","../src/utils/BARE_ITEM.ts","../src/utils/BOOLEAN.ts","../src/parse/parseBoolean.ts","../src/utils/BYTES.ts","../src/parse/parseByteSequence.ts","../src/utils/DATE.ts","../src/utils/DECIMAL.ts","../src/utils/INTEGER.ts","../src/utils/isInvalidInt.ts","../src/parse/parseIntegerOrDecimal.ts","../src/parse/parseDate.ts","../src/utils/STRING.ts","../src/utils/STRING_REGEX.ts","../src/parse/parseString.ts","../src/SfToken.ts","../src/utils/TOKEN.ts","../src/parse/parseToken.ts","../src/parse/parseBareItem.ts","../src/utils/KEY.ts","../src/parse/parseKey.ts","../src/parse/parseParameters.ts","../src/parse/parseItem.ts","../src/parse/parseInnerList.ts","../src/parse/parseItemOrInnerList.ts","../src/parse/parseDict.ts","../src/decodeSfDict.ts","../src/utils/ITEM.ts","../src/decodeSfItem.ts","../src/utils/LIST.ts","../src/parse/parseList.ts","../src/decodeSfList.ts","../src/serialize/serializeError.ts","../src/serialize/serializeBoolean.ts","../src/serialize/serializeByteSequence.ts","../src/serialize/serializeInteger.ts","../src/serialize/serializeDate.ts","../src/serialize/serializeDecimal.ts","../src/serialize/serializeString.ts","../src/utils/symbolToStr.ts","../src/serialize/serializeToken.ts","../src/serialize/serializeBareItem.ts","../src/serialize/serializeKey.ts","../src/serialize/serializeParams.ts","../src/serialize/serializeItem.ts","../src/serialize/serializeInnerList.ts","../src/serialize/serializeDictMember.ts","../src/serialize/serializeDict.ts","../src/encodeSfDict.ts","../src/encodeSfItem.ts","../src/serialize/serializeMember.ts","../src/serialize/serializeList.ts","../src/encodeSfList.ts"],"sourcesContent":["import type { SfBareItem } from './SfBareItem.ts'\n\n/**\n * Structured Field Item\n *\n * @public\n */\nexport class SfItem<\n\tV extends SfBareItem = SfBareItem,\n\tP = Record<string, any>\n> {\n\n\t/**\n\t * The value of the item.\n\t */\n\tvalue: V\n\n\t/**\n\t * The parameters of the item.\n\t */\n\tparams?: P\n\n\t/**\n\t * Creates a new structured field item.\n\t *\n\t * @param value - The value of the item.\n\t * @param params - The parameters of the item.\n\t */\n\tconstructor(value: any, params?: P) {\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue = value.map((v) => (v instanceof SfItem) ? v : new SfItem(v))\n\t\t}\n\n\t\tthis.value = value\n\t\tthis.params = params\n\t}\n}\n","export const DICT = 'Dict'\n","/**\n * @internal\n */\nexport type ParsedValue<T> = {\n\tvalue: T;\n\tsrc: string;\n};\n\n/**\n * @internal\n */\nexport function parsedValue<T>(value: T, src: string): ParsedValue<T> {\n\treturn { value, src }\n}\n","function format(value: any) {\n\tif (Array.isArray(value)) {\n\t\treturn JSON.stringify(value)\n\t}\n\tif (value instanceof Map) {\n\t\treturn 'Map{}'\n\t}\n\tif (value instanceof Set) {\n\t\treturn 'Set{}'\n\t}\n\tif (typeof value === 'object') {\n\t\treturn JSON.stringify(value)\n\t}\n\treturn String(value)\n}\n\nexport function throwError(action: string, src: any, type: string, cause?: any): Error {\n\treturn new Error(`failed to ${action} \"${format(src)}\" as ${type}`, { cause })\n}\n","import { throwError } from '../utils/throwError.ts'\n\n/**\n * @internal\n */\nexport function parseError(src: any, type: string, cause?: any): Error {\n\treturn throwError('parse', src, type, cause)\n}\n","export const INNER = 'Inner List'\n","export const BARE_ITEM = 'Bare Item'\n","export const BOOLEAN = 'Boolean'\n","import { BOOLEAN } from '../utils/BOOLEAN.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.8. Parsing a Boolean\n//\n// Given an ASCII string as input_string, return a Boolean. input_string\n// is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \"?\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. If the first character of input_string matches \"1\", discard the\n// first character, and return true.\n//\n// 4. If the first character of input_string matches \"0\", discard the\n// first character, and return false.\n//\n// 5. No value has matched; fail parsing.\n/**\n * @internal\n */\nexport function parseBoolean(src: string): ParsedValue<boolean> {\n\tlet i = 0\n\tif (src[i] !== '?') {\n\t\tthrow parseError(src, BOOLEAN)\n\t}\n\n\ti++\n\n\tif (src[i] === '1') {\n\t\treturn parsedValue(true, src.substring(++i))\n\t}\n\n\tif (src[i] === '0') {\n\t\treturn parsedValue(false, src.substring(++i))\n\t}\n\n\tthrow parseError(src, BOOLEAN)\n}\n","export const BYTES = 'Byte Sequence'\n","import { decodeBase64 } from '@svta/cml-utils'\nimport { BYTES } from '../utils/BYTES.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.7. Parsing a Byte Sequence\n//\n// Given an ASCII string as input_string, return a Byte Sequence.\n// input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \":\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. If there is not a \":\" character before the end of input_string,\n// fail parsing.\n//\n// 4. Let b64_content be the result of consuming content of\n// input_string up to but not including the first instance of the\n// character \":\".\n//\n// 5. Consume the \":\" character at the beginning of input_string.\n//\n// 6. If b64_content contains a character not included in ALPHA, DIGIT,\n// \"+\", \"/\" and \"=\", fail parsing.\n//\n// 7. Let binary_content be the result of Base 64 Decoding [RFC4648]\n// b64_content, synthesizing padding if necessary (note the\n// requirements about recipient behavior below).\n//\n// 8. Return binary_content.\n//\n// Because some implementations of base64 do not allow rejection of\n// encoded data that is not properly \"=\" padded (see [RFC4648],\n// Section 3.2), parsers SHOULD NOT fail when \"=\" padding is not\n// present, unless they cannot be configured to do so.\n//\n// Because some implementations of base64 do not allow rejection of\n// encoded data that has non-zero pad bits (see [RFC4648], Section 3.5),\n// parsers SHOULD NOT fail when non-zero pad bits are present, unless\n// they cannot be configured to do so.\n//\n// This specification does not relax the requirements in [RFC4648],\n// Section 3.1 and 3.3; therefore, parsers MUST fail on characters\n// outside the base64 alphabet, and on line feeds in encoded data.\n/**\n * @internal\n */\nexport function parseByteSequence(src: string): ParsedValue<Uint8Array> {\n\tif (src[0] !== ':') {\n\t\tthrow parseError(src, BYTES)\n\t}\n\n\tsrc = src.substring(1)\n\tif (src.includes(':') === false) {\n\t\tthrow parseError(src, BYTES)\n\t}\n\n\tconst re = /(^.*?)(:)/g\n\tconst b64_content = (re.exec(src) as any)[1]\n\tsrc = src.substring(re.lastIndex)\n\n\t// pass b64_content char check step 6\n\treturn parsedValue(\n\t\tdecodeBase64(b64_content),\n\t\tsrc,\n\t)\n}\n","export const DATE = 'Date'\n","export const DECIMAL: string = 'Decimal'\n","export const INTEGER: string = 'Integer'\n","export function isInvalidInt(value: number): boolean {\n\treturn value < -999999999999999 || 999999999999999 < value\n}\n","import { DECIMAL } from '../utils/DECIMAL.ts'\nimport { INTEGER } from '../utils/INTEGER.ts'\nimport { isInvalidInt } from '../utils/isInvalidInt.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\nfunction integerOrDecimalError(src: string): Error {\n\treturn parseError(src, `${INTEGER} or ${DECIMAL}`)\n}\n\n// 4.2.4. Parsing an Integer or Decimal\n//\n// Given an ASCII string as input_string, return an Integer or Decimal.\n// input_string is modified to remove the parsed value.\n//\n// NOTE: This algorithm parses both Integers (Section 3.3.1) and\n// Decimals (Section 3.3.2), and returns the corresponding structure.\n//\n// 1. Let type be \"integer\".\n//\n// 2. Let sign be 1.\n//\n// 3. Let input_number be an empty string.\n//\n// 4. If the first character of input_string is \"-\", consume it and\n// set sign to -1.\n//\n// 5. If input_string is empty, there is an empty integer; fail\n// parsing.\n//\n// 6. If the first character of input_string is not a DIGIT, fail\n// parsing.\n//\n// 7. While input_string is not empty:\n//\n// 1. Let char be the result of consuming the first character of\n// input_string.\n//\n// 2. If char is a DIGIT, append it to input_number.\n//\n// 3. Else, if type is \"integer\" and char is \".\":\n//\n// 1. If input_number contains more than 12 characters, fail\n// parsing.\n//\n// 2. Otherwise, append char to input_number and set type to\n// \"decimal\".\n//\n// 4. Otherwise, prepend char to input_string, and exit the loop.\n//\n// 5. If type is \"integer\" and input_number contains more than 15\n// characters, fail parsing.\n//\n// 6. If type is \"decimal\" and input_number contains more than 16\n// characters, fail parsing.\n//\n// 8. If type is \"integer\":\n//\n// 1. Parse input_number as an integer and let output_number be\n// the product of the result and sign.\n//\n// 2. If output_number is outside the range -999,999,999,999,999\n// to 999,999,999,999,999 inclusive, fail parsing.\n//\n// 9. Otherwise:\n//\n// 1. If the final character of input_number is \".\", fail parsing.\n//\n// 2. If the number of characters after \".\" in input_number is\n// greater than three, fail parsing.\n//\n// 3. Parse input_number as a decimal number and let output_number\n// be the product of the result and sign.\n//\n// 10. Return output_number.\n/**\n * @internal\n */\nexport function parseIntegerOrDecimal(src: string): ParsedValue<number> {\n\tconst orig = src\n\tlet sign = 1\n\tlet num = ''\n\tlet value\n\tconst i = 0\n\n\tif (src[i] === '-') {\n\t\tsign = -1\n\t\tsrc = src.substring(1)\n\t}\n\n\tif (src.length <= 0) {\n\t\tthrow integerOrDecimalError(orig)\n\t}\n\n\tconst re_integer = /^(\\d+)?/g\n\tconst result_integer = re_integer.exec(src) as any\n\tif (result_integer[0].length === 0) {\n\t\tthrow integerOrDecimalError(orig)\n\t}\n\tnum += result_integer[1]\n\tsrc = src.substring(re_integer.lastIndex)\n\n\tif (src[0] === '.') {\n\t\t// decimal\n\t\tif (num.length > 12) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tconst re_decimal = /^(\\.\\d+)?/g\n\t\tconst result_decimal = re_decimal.exec(src) as any\n\t\tsrc = src.substring(re_decimal.lastIndex)\n\t\t// 9.2. If the number of characters after \".\" in input_number is greater than three, fail parsing.\n\t\tif (result_decimal[0].length === 0 || result_decimal[1].length > 4) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tnum += result_decimal[1]\n\t\t// 7.6. If type is \"decimal\" and input_number contains more than 16 characters, fail parsing.\n\t\tif (num.length > 16) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tvalue = parseFloat(num) * sign\n\t}\n\telse {\n\t\t// integer\n\t\t// 7.5. If type is \"integer\" and input_number contains more than 15 characters, fail parsing.\n\t\tif (num.length > 15) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tvalue = parseInt(num) * sign\n\t\tif (isInvalidInt(value)) {\n\t\t\tthrow integerOrDecimalError(num)\n\t\t}\n\t}\n\n\treturn parsedValue(value, src)\n}\n","import { DATE } from '../utils/DATE.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseIntegerOrDecimal } from './parseIntegerOrDecimal.ts'\n\n// 4.2.9. Parsing a Date\n//\n// Given an ASCII string as input_string, return a Date. input_string is\n// modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \"@\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. Let output_date be the result of running Parsing an Integer or\n// Decimal (Section 4.2.4) with input_string.\n//\n// 4. If output_date is a Decimal, fail parsing.\n//\n// 5. Return output_date.\n/**\n * @internal\n */\nexport function parseDate(src: string): ParsedValue<Date> {\n\tlet i = 0\n\tif (src[i] !== '@') {\n\t\tthrow parseError(src, DATE)\n\t}\n\n\ti++\n\tconst date = parseIntegerOrDecimal(src.substring(i))\n\n\tif (Number.isInteger(date.value) === false) {\n\t\tthrow parseError(src, DATE)\n\t}\n\n\treturn parsedValue(\n\t\tnew Date(date.value * 1000),\n\t\tdate.src,\n\t)\n}\n","export const STRING = 'String'\n","// eslint-disable-next-line no-control-regex\nexport const STRING_REGEX: RegExp = /[\\x00-\\x1f\\x7f]+/\n","import { STRING } from '../utils/STRING.ts'\nimport { STRING_REGEX } from '../utils/STRING_REGEX.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.5. Parsing a String\n//\n// Given an ASCII string as input_string, return an unquoted String.\n// input_string is modified to remove the parsed value.\n//\n// 1. Let output_string be an empty string.\n//\n// 2. If the first character of input_string is not DQUOTE, fail\n// parsing.\n//\n// 3. Discard the first character of input_string.\n//\n// 4. While input_string is not empty:\n//\n// 1. Let char be the result of consuming the first character of\n// input_string.\n//\n// 2. If char is a backslash (\"\\\"):\n//\n// 1. If input_string is now empty, fail parsing.\n//\n// 2. Let next_char be the result of consuming the first\n// character of input_string.\n//\n// 3. If next_char is not DQUOTE or \"\\\", fail parsing.\n//\n// 4. Append next_char to output_string.\n//\n// 3. Else, if char is DQUOTE, return output_string.\n//\n// 4. Else, if char is in the range %x00-1f or %x7f (that is, is not\n// in VCHAR or SP), fail parsing.\n//\n// 5. Else, append char to output_string.\n//\n// 5. Reached the end of input_string without finding a closing DQUOTE;\n// fail parsing.\n/**\n * @internal\n */\nexport function parseString(src: string): ParsedValue<string> {\n\tlet output = ''\n\tlet i = 0\n\n\tif (src[i] !== `\"`) {\n\t\tthrow parseError(src, STRING)\n\t}\n\n\ti++\n\n\twhile (src.length > i) {\n\t\tif (src[i] === `\\\\`) {\n\t\t\tif (src.length <= i + 1) {\n\t\t\t\tthrow parseError(src, STRING)\n\t\t\t}\n\n\t\t\ti++\n\n\t\t\tif (src[i] !== `\"` && src[i] !== `\\\\`) {\n\t\t\t\tthrow parseError(src, STRING)\n\t\t\t}\n\n\t\t\toutput += src[i]\n\t\t}\n\t\telse if (src[i] === `\"`) {\n\t\t\treturn parsedValue(output, src.substring(++i))\n\t\t}\n\t\telse if (STRING_REGEX.test(src[i])) {\n\t\t\tthrow parseError(src, STRING)\n\t\t}\n\t\telse {\n\t\t\toutput += src[i]\n\t\t}\n\n\t\ti++\n\t}\n\n\tthrow parseError(src, STRING)\n}\n","/**\n * A class to represent structured field tokens when `Symbol` is not available.\n *\n * @public\n */\nexport class SfToken {\n\tdescription: string\n\n\tconstructor(description: string) {\n\t\tthis.description = description\n\t}\n}\n","export const TOKEN = 'Token'\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { SfToken } from '../SfToken.ts'\nimport { TOKEN } from '../utils/TOKEN.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.6. Parsing a Token\n//\n// Given an ASCII string as input_string, return a Token. input_string\n// is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not ALPHA or \"*\", fail\n// parsing.\n//\n// 2. Let output_string be an empty string.\n//\n// 3. While input_string is not empty:\n//\n// 1. If the first character of input_string is not in tchar, \":\"\n// or \"/\", return output_string.\n//\n// 2. Let char be the result of consuming the first character of\n// input_string.\n//\n// 3. Append char to output_string.\n//\n// 4. Return output_string.\n/**\n * @internal\n */\nexport function parseToken(src: string, options?: SfDecodeOptions): ParsedValue<symbol | SfToken> {\n\tif (/^[a-zA-Z*]$/.test(src[0]) === false) {\n\t\tthrow parseError(src, TOKEN)\n\t}\n\n\tconst re = /^([!#$%&'*+\\-.^_`|~\\w:/]+)/g\n\tconst value = (re.exec(src) as any)[1]\n\tsrc = src.substring(re.lastIndex)\n\n\treturn parsedValue(\n\t\toptions?.useSymbol === false ? new SfToken(value) : Symbol.for(value),\n\t\tsrc,\n\t)\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { BARE_ITEM } from '../utils/BARE_ITEM.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parseBoolean } from './parseBoolean.ts'\nimport { parseByteSequence } from './parseByteSequence.ts'\nimport { parseDate } from './parseDate.ts'\nimport { parseError } from './parseError.ts'\nimport { parseIntegerOrDecimal } from './parseIntegerOrDecimal.ts'\nimport { parseString } from './parseString.ts'\nimport { parseToken } from './parseToken.ts'\n\n// 4.2.3.1. Parsing a Bare Item\n//\n// Given an ASCII string as input_string, return a bare Item.\n// input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is a \"-\" or a DIGIT,\n// return the result of running Parsing an Integer or Decimal\n// (Section 4.2.4) with input_string.\n//\n// 2. If the first character of input_string is a DQUOTE, return the\n// result of running Parsing a String (Section 4.2.5) with\n// input_string.\n//\n// 3. If the first character of input_string is \":\", return the result\n// of running Parsing a Byte Sequence (Section 4.2.7) with\n// input_string.\n//\n// 4. If the first character of input_string is \"?\", return the result\n// of running Parsing a Boolean (Section 4.2.8) with input_string.\n//\n// 5. If the first character of input_string is an ALPHA or \"*\", return\n// the result of running Parsing a Token (Section 4.2.6) with\n// input_string.\n//\n// 6. If the first character of input_string is \"@\", return the result\n// of running Parsing a Date (Section 4.2.9) with input_string.\n//\n// 7. Otherwise, the item type is unrecognized; fail parsing.\n/**\n * @internal\n */\nexport function parseBareItem(src: string, options?: SfDecodeOptions): ParsedValue<SfBareItem> {\n\tconst first = src[0]\n\tif (first === `\"`) {\n\t\treturn parseString(src)\n\t}\n\tif (/^[-0-9]/.test(first)) {\n\t\treturn parseIntegerOrDecimal(src)\n\t}\n\tif (first === `?`) {\n\t\treturn parseBoolean(src)\n\t}\n\tif (first === `:`) {\n\t\treturn parseByteSequence(src)\n\t}\n\tif (/^[a-zA-Z*]/.test(first)) {\n\t\treturn parseToken(src, options)\n\t}\n\tif (first === `@`) {\n\t\treturn parseDate(src)\n\t}\n\tthrow parseError(src, BARE_ITEM)\n}\n","export const KEY = 'Key'\n","import { KEY } from '../utils/KEY.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.3.3. Parsing a Key\n//\n// Given an ASCII string as input_string, return a key. input_string is\n// modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not lcalpha or \"*\",\n// fail parsing.\n//\n// 2. Let output_string be an empty string.\n//\n// 3. While input_string is not empty:\n//\n// 1. If the first character of input_string is not one of lcalpha,\n// DIGIT, \"_\", \"-\", \".\", or \"*\", return output_string.\n//\n// 2. Let char be the result of consuming the first character of\n// input_string.\n//\n// 3. Append char to output_string.\n//\n// 4. Return output_string.\n/**\n * @internal\n */\nexport function parseKey(src: string): ParsedValue<string> {\n\tlet i = 0\n\tif (/^[a-z*]$/.test(src[i]) === false) {\n\t\tthrow parseError(src, KEY)\n\t}\n\n\tlet value = ''\n\n\twhile (src.length > i) {\n\t\tif (/^[a-z0-9_\\-.*]$/.test(src[i]) === false) {\n\t\t\treturn parsedValue(value, src.substring(i))\n\t\t}\n\n\t\tvalue += src[i]\n\t\ti++\n\t}\n\n\treturn parsedValue(value, src.substring(i))\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfParameters } from '../SfParameters.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseBareItem } from './parseBareItem.ts'\nimport { parseKey } from './parseKey.ts'\n\n// 4.2.3.2. Parsing Parameters\n//\n// Given an ASCII string as input_string, return an ordered map whose\n// values are bare Items. input_string is modified to remove the parsed\n// value.\n//\n// 1. Let parameters be an empty, ordered map.\n//\n// 2. While input_string is not empty:\n//\n// 1. If the first character of input_string is not \";\", exit the\n// loop.\n//\n// 2. Consume a \";\" character from the beginning of input_string.\n//\n// 3. Discard any leading SP characters from input_string.\n//\n// 4. let param_name be the result of running Parsing a Key\n// (Section 4.2.3.3) with input_string.\n//\n// 5. Let param_value be Boolean true.\n//\n// 6. If the first character of input_string is \"=\":\n//\n// 1. Consume the \"=\" character at the beginning of\n// input_string.\n//\n// 2. Let param_value be the result of running Parsing a Bare\n// Item (Section 4.2.3.1) with input_string.\n//\n// 7. Append key param_name with value param_value to parameters.\n// If parameters already contains a name param_name (comparing\n// character-for-character), overwrite its value.\n//\n// 3. Return parameters.\n//\n// Note that when duplicate Parameter keys are encountered, this has the\n// effect of ignoring all but the last instance.\n/**\n * @internal\n */\nexport function parseParameters(src: string, options?: SfDecodeOptions): ParsedValue<SfParameters | undefined> {\n\tlet parameters: SfParameters | undefined = undefined\n\twhile (src.length > 0) {\n\t\tif (src[0] !== ';') {\n\t\t\tbreak\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tconst parsedKey = parseKey(src)\n\t\tconst key = parsedKey.value\n\t\tlet value = true\n\t\tsrc = parsedKey.src\n\n\t\tif (src[0] === '=') {\n\t\t\tsrc = src.substring(1)\n\t\t\tconst parsedBareItem = parseBareItem(src, options)\n\t\t\tvalue = parsedBareItem.value as any\n\t\t\tsrc = parsedBareItem.src\n\t\t}\n\n\t\t// initialize as object when params exists\n\t\tif (parameters == null) {\n\t\t\tparameters = {}\n\t\t}\n\n\t\t// override if param_name exists\n\t\tparameters[key] = value\n\t}\n\treturn parsedValue(parameters, src)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { SfItem } from '../SfItem.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseBareItem } from './parseBareItem.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.3. Parsing an Item\n//\n// Given an ASCII string as input_string, return a (bare_item,\n// parameters) tuple. input_string is modified to remove the parsed\n// value.\n//\n// 1. Let bare_item be the result of running Parsing a Bare Item\n// (Section 4.2.3.1) with input_string.\n//\n// 2. Let parameters be the result of running Parsing Parameters\n// (Section 4.2.3.2) with input_string.\n//\n// 3. Return the tuple (bare_item, parameters).\n/**\n * @internal\n */\nexport function parseItem(src: string, options?: SfDecodeOptions): ParsedValue<SfItem> {\n\tconst parsedBareItem = parseBareItem(src, options)\n\tsrc = parsedBareItem.src\n\n\tconst parsedParameters = parseParameters(src, options)\n\tsrc = parsedParameters.src\n\n\treturn parsedValue(\n\t\tnew SfItem(parsedBareItem.value, parsedParameters.value),\n\t\tsrc,\n\t)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { INNER } from '../utils/INNER.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItem } from './parseItem.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.1.2. Parsing an Inner List\n//\n// Given an ASCII string as input_string, return the tuple (inner_list,\n// parameters), where inner_list is an array of (bare_item, parameters)\n// tuples. input_string is modified to remove the parsed value.\n//\n// 1. Consume the first character of input_string; if it is not \"(\",\n// fail parsing.\n//\n// 2. Let inner_list be an empty array.\n//\n// 3. While input_string is not empty:\n//\n// 1. Discard any leading SP characters from input_string.\n//\n// 2. If the first character of input_string is \")\":\n//\n// 1. Consume the first character of input_string.\n//\n// 2. Let parameters be the result of running Parsing\n// Parameters (Section 4.2.3.2) with input_string.\n//\n// 3. Return the tuple (inner_list, parameters).\n//\n// 3. Let item be the result of running Parsing an Item\n// (Section 4.2.3) with input_string.\n//\n// 4. Append item to inner_list.\n//\n// 5. If the first character of input_string is not SP or \")\", fail\n// parsing.\n//\n// 4. The end of the inner list was not found; fail parsing.\n/**\n * @internal\n */\nexport function parseInnerList(src: string, options?: SfDecodeOptions): ParsedValue<SfInnerList> {\n\tif (src[0] !== '(') {\n\t\tthrow parseError(src, INNER)\n\t}\n\n\tsrc = src.substring(1)\n\tconst innerList: SfItem[] = []\n\twhile (src.length > 0) {\n\t\tsrc = src.trim()\n\t\tif (src[0] === ')') {\n\t\t\tsrc = src.substring(1)\n\t\t\tconst parsedParameters = parseParameters(src, options)\n\n\t\t\treturn parsedValue(\n\t\t\t\tnew SfItem(innerList, parsedParameters.value) as any,\n\t\t\t\tparsedParameters.src,\n\t\t\t)\n\t\t}\n\n\t\tconst parsedItem = parseItem(src, options)\n\t\tinnerList.push(parsedItem.value)\n\t\tsrc = parsedItem.src\n\n\t\tif (src[0] !== ' ' && src[0] !== ')') {\n\t\t\tthrow parseError(src, INNER)\n\t\t}\n\t}\n\n\tthrow parseError(src, INNER)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport type { SfItem } from '../SfItem.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parseInnerList } from './parseInnerList.ts'\nimport { parseItem } from './parseItem.ts'\n\n// 4.2.1.1. Parsing an Item or Inner List\n//\n// Given an ASCII string as input_string, return the tuple\n// (item_or_inner_list, parameters), where item_or_inner_list can be\n// either a single bare item, or an array of (bare_item, parameters)\n// tuples. input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is \"(\", return the result\n// of running Parsing an Inner List (Section 4.2.1.2) with\n// input_string.\n//\n// 2. Return the result of running Parsing an Item (Section 4.2.3) with\n// input_string.\n/**\n * @internal\n */\nexport function parseItemOrInnerList(src: string, options?: SfDecodeOptions): ParsedValue<SfItem | SfInnerList> {\n\tif (src[0] === '(') {\n\t\treturn parseInnerList(src, options)\n\t}\n\n\treturn parseItem(src, options)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfDictionary } from '../SfDictionary.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { DICT } from '../utils/DICT.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItemOrInnerList } from './parseItemOrInnerList.ts'\nimport { parseKey } from './parseKey.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.2. Parsing a Dictionary\n//\n// Given an ASCII string as input_string, return an ordered map whose\n// values are (item_or_inner_list, parameters) tuples. input_string is\n// modified to remove the parsed value.\n//\n// 1. Let dictionary be an empty, ordered map.\n//\n// 2. While input_string is not empty:\n//\n// 1. Let this_key be the result of running Parsing a Key\n// (Section 4.2.3.3) with input_string.\n//\n// 2. If the first character of input_string is \"=\":\n//\n// 1. Consume the first character of input_string.\n//\n// 2. Let member be the result of running Parsing an Item or\n// Inner List (Section 4.2.1.1) with input_string.\n//\n// 3. Otherwise:\n//\n// 1. Let value be Boolean true.\n//\n// 2. Let parameters be the result of running Parsing\n// Parameters Section 4.2.3.2 with input_string.\n//\n// 3. Let member be the tuple (value, parameters).\n//\n// 4. Add name this_key with value member to dictionary. If\n// dictionary already contains a name this_key (comparing\n// character-for-character), overwrite its value.\n//\n// 5. Discard any leading OWS characters from input_string.\n//\n// 6. If input_string is empty, return dictionary.\n//\n// 7. Consume the first character of input_string; if it is not\n// \",\", fail parsing.\n//\n// 8. Discard any leading OWS characters from input_string.\n//\n// 9. If input_string is empty, there is a trailing comma; fail\n// parsing.\n//\n// 3. No structured data has been found; return dictionary (which is\n// empty).\n//\n// Note that when duplicate Dictionary keys are encountered, this has\n// the effect of ignoring all but the last instance.\n/**\n * @internal\n */\nexport function parseDict(src: string, options?: SfDecodeOptions): ParsedValue<SfDictionary> {\n\tconst value: SfDictionary = {}\n\n\twhile (src.length > 0) {\n\t\tlet member: SfItem | SfInnerList\n\t\tconst parsedKey = parseKey(src)\n\t\tconst key = parsedKey.value\n\t\tsrc = parsedKey.src\n\n\t\tif (src[0] === '=') {\n\t\t\tconst parsedItemOrInnerList = parseItemOrInnerList(src.substring(1), options)\n\t\t\tmember = parsedItemOrInnerList.value\n\t\t\tsrc = parsedItemOrInnerList.src\n\t\t}\n\t\telse {\n\t\t\tconst parsedParameters = parseParameters(src, options)\n\t\t\tmember = new SfItem(true, parsedParameters.value)\n\t\t\tsrc = parsedParameters.src\n\t\t}\n\n\t\tvalue[key] = member\n\n\t\tsrc = src.trim()\n\t\tif (src.length === 0) {\n\t\t\treturn parsedValue(value, src)\n\t\t}\n\n\t\tif (src[0] !== ',') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tif (src.length === 0 || src[0] === ',') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\t}\n\n\treturn parsedValue(value, src)\n}\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfDictionary } from './SfDictionary.ts'\nimport { parseDict } from './parse/parseDict.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { DICT } from './utils/DICT.ts'\n\n/**\n * Decode a structured field string into a structured field dictionary\n *\n * @param input - The structured field string to decode\n * @returns The structured field dictionary\n *\n * @public\n */\nexport function decodeSfDict(input: string, options?: SfDecodeOptions): SfDictionary {\n\ttry {\n\t\tconst { src, value } = parseDict(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, DICT, cause)\n\t}\n}\n","export const ITEM = 'Item'\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfItem } from './SfItem.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { parseItem } from './parse/parseItem.ts'\nimport { ITEM } from './utils/ITEM.ts'\n\n// 4.2. Parsing Structured Fields\n//\n// 1. Convert input_bytes into an ASCII string input_string; if\n// conversion fails, fail parsing.\n//\n// 2. Discard any leading SP characters from input_string.\n//\n// 3. If field_type is \"list\", let output be the result of running\n// Parsing a List (Section 4.2.1) with input_string.\n//\n// 4. If field_type is \"dictionary\", let output be the result of\n// running Parsing a Dictionary (Section 4.2.2) with input_string.\n//\n// 5. If field_type is \"item\", let output be the result of running\n// Parsing an Item (Section 4.2.3) with input_string.\n//\n// 6. Discard any leading SP characters from input_string.\n//\n// 7. If input_string is not empty, fail parsing.\n//\n// 8. Otherwise, return output.\n/**\n * Decode a structured field string into a structured field item\n *\n * @param input - The structured field string to decode\n * @returns The structured field item\n *\n * @public\n */\nexport function decodeSfItem(input: string, options?: SfDecodeOptions): SfItem {\n\ttry {\n\t\tconst { src, value } = parseItem(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, ITEM)\n\t\t}\n\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, ITEM, cause)\n\t}\n}\n","export const LIST = 'List'\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { LIST } from '../utils/LIST.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItemOrInnerList } from './parseItemOrInnerList.ts'\n\n// 4.2.1. Parsing a List\n//\n// Given an ASCII string as input_string, return an array of\n// (item_or_inner_list, parameters) tuples. input_string is modified to\n// remove the parsed value.\n//\n// 1. Let members be an empty array.\n//\n// 2. While input_string is not empty:\n//\n// 1. Append the result of running Parsing an Item or Inner List\n// (Section 4.2.1.1) with input_string to members.\n//\n// 2. Discard any leading OWS characters from input_string.\n//\n// 3. If input_string is empty, return members.\n//\n// 4. Consume the first character of input_string; if it is not\n// \",\", fail parsing.\n//\n// 5. Discard any leading OWS characters from input_string.\n//\n// 6. If input_string is empty, there is a trailing comma; fail\n// parsing.\n//\n// 3. No structured data has been found; return members (which is\n// empty).\n/**\n * @internal\n */\nexport function parseList(src: string, options?: SfDecodeOptions): ParsedValue<SfMember[]> {\n\tconst value: SfMember[] = []\n\twhile (src.length > 0) {\n\t\tconst parsedItemOrInnerList = parseItemOrInnerList(src, options)\n\t\tvalue.push(parsedItemOrInnerList.value)\n\n\t\tsrc = parsedItemOrInnerList.src.trim()\n\t\tif (src.length === 0) {\n\t\t\treturn parsedValue(value, src)\n\t\t}\n\n\t\tif (src[0] !== ',') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tif (src.length === 0 || src[0] === ',') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\t}\n\treturn parsedValue(value, src)\n}\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfMember } from './SfMember.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { parseList } from './parse/parseList.ts'\nimport { LIST } from './utils/LIST.ts'\n\n/**\n * Decode a structured field string into a structured field list\n *\n * @param input - The structured field string to decode\n * @returns The structured field list\n *\n * @public\n */\nexport function decodeSfList(input: string, options?: SfDecodeOptions): SfMember[] {\n\ttry {\n\t\tconst { src, value } = parseList(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, LIST, cause)\n\t}\n}\n","import { throwError } from '../utils/throwError.ts'\n\n/**\n * @internal\n */\nexport function serializeError(src: any, type: string, cause?: any): Error {\n\treturn throwError('serialize', src, type, cause)\n}\n","import { BOOLEAN } from '../utils/BOOLEAN.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.9. Serializing a Boolean\n//\n// Given a Boolean as input_boolean, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. If input_boolean is not a boolean, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \"?\" to output.\n//\n// 4. If input_boolean is true, append \"1\" to output.\n//\n// 5. If input_boolean is false, append \"0\" to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeBoolean(value: boolean): string {\n\tif (typeof value !== 'boolean') {\n\t\tthrow serializeError(value, BOOLEAN)\n\t}\n\treturn value ? '?1' : '?0'\n}\n","import { encodeBase64 } from '@svta/cml-utils'\nimport { BYTES } from '../utils/BYTES.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.8. Serializing a Byte Sequence\n//\n// Given a Byte Sequence as input_bytes, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_bytes is not a sequence of bytes, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \":\" to output.\n//\n// 4. Append the result of base64-encoding input_bytes as per\n// [RFC4648], Section 4, taking account of the requirements below.\n//\n// 5. Append \":\" to output.\n//\n// 6. Return output.\n//\n// The encoded data is required to be padded with \"=\", as per [RFC4648],\n// Section 3.2.\n//\n// Likewise, encoded data SHOULD have pad bits set to zero, as per\n// [RFC4648], Section 3.5, unless it is not possible to do so due to\n// implementation constraints.\n/**\n * @internal\n */\nexport function serializeByteSequence(value: Uint8Array) {\n\tif (ArrayBuffer.isView(value) === false) {\n\t\tthrow serializeError(value, BYTES)\n\t}\n\treturn `:${encodeBase64(value)}:`\n}\n","import { INTEGER } from '../utils/INTEGER.ts'\nimport { isInvalidInt } from '../utils/isInvalidInt.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.4. Serializing an Integer\n//\n// Given an Integer as input_integer, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_integer is not an integer in the range of\n// -999,999,999,999,999 to 999,999,999,999,999 inclusive, fail\n// serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. If input_integer is less than (but not equal to) 0, append \"-\" to\n// output.\n//\n// 4. Append input_integer's numeric value represented in base 10 using\n// only decimal digits to output.\n//\n// 5. Return output.\n/**\n * @internal\n */\nexport function serializeInteger(value: number): string {\n\tif (isInvalidInt(value)) {\n\t\tthrow serializeError(value, INTEGER)\n\t}\n\n\treturn value.toString()\n}\n","import { serializeInteger } from './serializeInteger.ts'\n\n// 4.1.10. Serializing a Date\n//\n// Given a Date as input_integer, return an ASCII string suitable for\n// use in an HTTP field value.\n// 1. Let output be \"@\".\n// 2. Append to output the result of running Serializing an Integer\n// with input_date (Section 4.1.4).\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeDate(value: Date) {\n\treturn `@${serializeInteger(value.getTime() / 1000)}`\n}\n","import { roundToEven } from '@svta/cml-utils'\nimport { DECIMAL } from '../utils/DECIMAL.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.5. Serializing a Decimal\n//\n// Given a decimal number as input_decimal, return an ASCII string\n// suitable for use in a HTTP field value.\n//\n// 1. If input_decimal is not a decimal number, fail serialization.\n//\n// 2. If input_decimal has more than three significant digits to the\n// right of the decimal point, round it to three decimal places,\n// rounding the final digit to the nearest value, or to the even\n// value if it is equidistant.\n//\n// 3. If input_decimal has more than 12 significant digits to the left\n// of the decimal point after rounding, fail serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. If input_decimal is less than (but not equal to) 0, append \"-\"\n// to output.\n//\n// 6. Append input_decimal's integer component represented in base 10\n// (using only decimal digits) to output; if it is zero, append\n// \"0\".\n//\n// 7. Append \".\" to output.\n//\n// 8. If input_decimal's fractional component is zero, append \"0\" to\n// output.\n//\n// 9. Otherwise, append the significant digits of input_decimal's\n// fractional component represented in base 10 (using only decimal\n// digits) to output.\n//\n// 10. Return output.\n/**\n * @internal\n */\nexport function serializeDecimal(value: number): string {\n\tconst roundedValue = roundToEven(value, 3) // round to 3 decimal places\n\tif (Math.abs(roundedValue) >= 1e12) {\n\t\tthrow serializeError(value, DECIMAL)\n\t}\n\tconst stringValue = roundedValue.toString()\n\treturn stringValue.includes('.') ? stringValue : `${stringValue}.0`\n}\n","import { STRING } from '../utils/STRING.ts'\nimport { STRING_REGEX } from '../utils/STRING_REGEX.ts'\nimport { serializeError } from './serializeError.ts'\n\n// Control characters that fail serialization, and the two characters that need an escape.\n// eslint-disable-next-line no-control-regex\nconst ESCAPE_OR_CONTROL_REGEX = /[\\x00-\\x1f\\x7f\"\\\\]/\nconst BACKSLASH_REGEX = /\\\\/g\nconst DQUOTE_REGEX = /\"/g\n\n// 4.1.6. Serializing a String\n//\n// Given a String as input_string, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Convert input_string into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_string contains characters in the range %x00-1f or %x7f\n// (that is, not in VCHAR or SP), fail serialization.\n//\n// 3. Let output be the string DQUOTE.\n//\n// 4. For each character char in input_string:\n//\n// 1. If char is \"\\\" or DQUOTE:\n//\n// 1. Append \"\\\" to output.\n//\n// 2. Append char to output.\n//\n// 5. Append DQUOTE to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeString(value: string): string {\n\tif (ESCAPE_OR_CONTROL_REGEX.test(value) === false) {\n\t\treturn `\"${value}\"`\n\t}\n\n\tif (STRING_REGEX.test(value)) {\n\t\tthrow serializeError(value, STRING)\n\t}\n\n\treturn `\"${value.replace(BACKSLASH_REGEX, '\\\\\\\\').replace(DQUOTE_REGEX, '\\\\\"')}\"`\n}\n","import type { SfToken } from '../SfToken.ts'\n\n/**\n * Converts a symbol to a string.\n *\n * @param symbol - The symbol to convert.\n *\n * @returns The string representation of the symbol.\n *\n * @public\n */\nexport function symbolToStr(symbol: symbol | SfToken): string {\n\treturn symbol.description || symbol.toString().slice(7, -1)\n}\n","import type { SfToken } from '../SfToken.ts'\nimport { symbolToStr } from '../utils/symbolToStr.ts'\nimport { TOKEN } from '../utils/TOKEN.ts'\nimport { serializeError } from './serializeError.ts'\n\nconst TOKEN_REGEX = /^[a-zA-Z*][!#$%&'*+\\-.^_`|~\\w:/]*$/\n\n// 4.1.7. Serializing a Token\n//\n// Given a Token as input_token, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. Convert input_token into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If the first character of input_token is not ALPHA or \"*\", or the\n// remaining portion contains a character not in tchar, \":\" or \"/\",\n// fail serialization.\n//\n// 3. Let output be an empty string.\n//\n// 4. Append input_token to output.\n//\n// 5. Return output.\n\n/**\n * @internal\n */\nexport function serializeToken(token: symbol | SfToken): string {\n\tconst value = symbolToStr(token)\n\tif (TOKEN_REGEX.test(value) === false) {\n\t\tthrow serializeError(value, TOKEN)\n\t}\n\treturn value\n}\n","import { SfToken } from '../SfToken.ts'\nimport { BARE_ITEM } from '../utils/BARE_ITEM.ts'\nimport { serializeBoolean } from './serializeBoolean.ts'\nimport { serializeByteSequence } from './serializeByteSequence.ts'\nimport { serializeDate } from './serializeDate.ts'\nimport { serializeDecimal } from './serializeDecimal.ts'\nimport { serializeError } from './serializeError.ts'\nimport { serializeInteger } from './serializeInteger.ts'\nimport { serializeString } from './serializeString.ts'\nimport { serializeToken } from './serializeToken.ts'\n\n// 4.1.3.1. Serializing a Bare Item\n//\n// Given an Item as input_item, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. If input_item is an Integer, return the result of running\n// Serializing an Integer (Section 4.1.4) with input_item.\n//\n// 2. If input_item is a Decimal, return the result of running\n// Serializing a Decimal (Section 4.1.5) with input_item.\n//\n// 3. If input_item is a String, return the result of running\n// Serializing a String (Section 4.1.6) with input_item.\n//\n// 4. If input_item is a Token, return the result of running\n// Serializing a Token (Section 4.1.7) with input_item.\n//\n// 5. If input_item is a Boolean, return the result of running\n// Serializing a Boolean (Section 4.1.9) with input_item.\n//\n// 6. If input_item is a Byte Sequence, return the result of running\n// Serializing a Byte Sequence (Section 4.1.8) with input_item.\n//\n// 7. If input_item is a Date, return the result of running Serializing\n// a Date (Section 4.1.10) with input_item.\n//\n// 8. Otherwise, fail serialization.\n/**\n * @internal\n */\nexport function serializeBareItem(value: any): string {\n\tswitch (typeof value) {\n\t\tcase 'number':\n\t\t\tif (!Number.isFinite(value)) {\n\t\t\t\tthrow serializeError(value, BARE_ITEM)\n\t\t\t}\n\n\t\t\tif (Number.isInteger(value)) {\n\t\t\t\treturn serializeInteger(value)\n\t\t\t}\n\t\t\treturn serializeDecimal(value)\n\n\t\tcase 'string':\n\t\t\treturn serializeString(value)\n\n\t\tcase 'symbol':\n\t\t\treturn serializeToken(value)\n\n\t\tcase 'boolean':\n\t\t\treturn serializeBoolean(value)\n\n\t\tcase 'object':\n\t\t\tif (value instanceof Date) {\n\t\t\t\treturn serializeDate(value)\n\t\t\t}\n\t\t\tif (value instanceof Uint8Array) {\n\t\t\t\treturn serializeByteSequence(value)\n\t\t\t}\n\t\t\tif (value instanceof SfToken) {\n\t\t\t\treturn serializeToken(value)\n\t\t\t}\n\n\t\t// eslint-disable-next-line no-fallthrough\n\t\tdefault:\n\t\t\t// fail\n\t\t\tthrow serializeError(value, BARE_ITEM)\n\t}\n}\n","import { KEY } from '../utils/KEY.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.1.3. Serializing a Key\n//\n// Given a key as input_key, return an ASCII string suitable for use in\n// a HTTP field value.\n//\n// 1. Convert input_key into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_key contains characters not in lcalpha, DIGIT, \"_\", \"-\",\n// \".\", or \"*\" fail serialization.\n//\n// 3. If the first character of input_key is not lcalpha or \"*\", fail\n// serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. Append input_key to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeKey(value: string): string {\n\tif (typeof value !== 'string' || value.length === 0) {\n\t\tthrow serializeError(value, KEY)\n\t}\n\n\t// lcalpha / \"*\"\n\tlet code = value.charCodeAt(0)\n\tif ((code < 0x61 || code > 0x7a) && code !== 0x2a) {\n\t\tthrow serializeError(value, KEY)\n\t}\n\n\t// lcalpha / DIGIT / \"_\" / \"-\" / \".\" / \"*\"\n\tfor (let i = 1; i < value.length; i++) {\n\t\tcode = value.charCodeAt(i)\n\t\tif ((code < 0x61 || code > 0x7a) && (code < 0x30 || code > 0x39) && code !== 0x5f && code !== 0x2d && code !== 0x2e && code !== 0x2a) {\n\t\t\tthrow serializeError(value, KEY)\n\t\t}\n\t}\n\n\treturn value\n}\n","import { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeKey } from './serializeKey.ts'\n\n// 4.1.1.2. Serializing Parameters\n//\n// Given an ordered Dictionary as input_parameters (each member having a\n// param_name and a param_value), return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each param_name with a value of param_value in\n// input_parameters:\n//\n// 1. Append \";\" to output.\n//\n// 2. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with param_name to output.\n//\n// 3. If param_value is not Boolean true:\n//\n// 1. Append \"=\" to output.\n//\n// 2. Append the result of running Serializing a bare Item\n// (Section 4.1.3.1) with param_value to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeParams(params?: Record<string, any>): string {\n\tif (params == null) {\n\t\treturn ''\n\t}\n\n\tlet output = ''\n\n\tfor (const key of Object.keys(params)) {\n\t\tconst value = params[key]\n\t\toutput += `;${serializeKey(key)}`\n\n\t\tif (value !== true) { // omit true\n\t\t\toutput += `=${serializeBareItem(value)}`\n\t\t}\n\t}\n\n\treturn output\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n// 4.1.3. Serializing an Item\n//\n// Given an Item as bare_item and Parameters as item_parameters, return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. Append the result of running Serializing a Bare Item\n// Section 4.1.3.1 with bare_item to output.\n//\n// 3. Append the result of running Serializing Parameters\n// Section 4.1.1.2 with item_parameters to output.\n//\n// 4. Return output.\n/**\n * @internal\n */\nexport function serializeItem(value: SfItem | SfBareItem): string {\n\tif (value instanceof SfItem) {\n\t\treturn `${serializeBareItem(value.value)}${serializeParams(value.params)}`\n\t}\n\telse {\n\t\treturn serializeBareItem(value)\n\t}\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport type { SfItem } from '../SfItem.ts'\nimport type { SfParameters } from '../SfParameters.ts'\nimport { serializeItem } from './serializeItem.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n// 4.1.1.1. Serializing an Inner List\n//\n// Given an array of (member_value, parameters) tuples as inner_list,\n// and parameters as list_parameters, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. Let output be the string \"(\".\n//\n// 2. For each (member_value, parameters) of inner_list:\n//\n// 1. Append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 2. If more values remain in inner_list, append a single SP to\n// output.\n//\n// 3. Append \")\" to output.\n//\n// 4. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with list_parameters to output.\n//\n// 5. Return output.\n/**\n * @internal\n */\nexport function serializeInnerList(value: SfInnerList): string;\n\n/**\n * @internal\n */\nexport function serializeInnerList(value: SfItem[] | SfBareItem[], params?: SfParameters): string;\n\nexport function serializeInnerList(value: SfInnerList | SfItem[] | SfBareItem[], params?: SfParameters): string {\n\tlet list: SfItem[] | SfBareItem[]\n\n\tif (Array.isArray(value)) {\n\t\tlist = value\n\t}\n\telse {\n\t\tlist = value.value\n\t\tparams = value.params\n\t}\n\n\tlet output = '('\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tif (i > 0) {\n\t\t\toutput += ' '\n\t\t}\n\t\toutput += serializeItem(list[i])\n\t}\n\n\treturn `${output})${serializeParams(params)}`\n}\n","import { SfItem } from '../SfItem.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeInnerList } from './serializeInnerList.ts'\nimport { serializeKey } from './serializeKey.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n/**\n * Serialize one dictionary member: the key, then the parameters alone for a `true` value, otherwise `=` and the member.\n *\n * @internal\n */\nexport function serializeDictMember(key: string, member: SfMember): string {\n\tconst output = serializeKey(key)\n\n\tif (member instanceof SfItem) {\n\t\tconst { value, params } = member\n\n\t\tif (value === true) {\n\t\t\treturn `${output}${serializeParams(params)}`\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn `${output}=${serializeInnerList(value, params)}`\n\t\t}\n\n\t\treturn `${output}=${serializeBareItem(value)}${serializeParams(params)}`\n\t}\n\n\tif (member === true) {\n\t\treturn output\n\t}\n\n\tif (Array.isArray(member)) {\n\t\treturn `${output}=${serializeInnerList(member)}`\n\t}\n\n\treturn `${output}=${serializeBareItem(member)}`\n}\n","import type { SfEncodeOptions } from '../SfEncodeOptions.ts'\nimport { DICT } from '../utils/DICT.ts'\nimport { serializeDictMember } from './serializeDictMember.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.2. Serializing a Dictionary\n//\n// Given an ordered Dictionary as input_dictionary (each member having a\n// member_name and a tuple value of (member_value, parameters)), return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each member_name with a value of (member_value, parameters)\n// in input_dictionary:\n//\n// 1. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with member's member_name to output.\n//\n// 2. If member_value is Boolean true:\n//\n// 1. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with parameters to output.\n//\n// 3. Otherwise:\n//\n// 1. Append \"=\" to output.\n//\n// 2. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 3. Otherwise, append the result of running Serializing an\n// Item (Section 4.1.3) with (member_value, parameters) to\n// output.\n//\n// 4. If more members remain in input_dictionary:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeDict(dict: Record<string, any> | Map<string, any>, options?: SfEncodeOptions): string {\n\tif (typeof dict !== 'object' || dict == null) {\n\t\tthrow serializeError(dict, DICT)\n\t}\n\n\tconst parts: string[] = []\n\n\tif (dict instanceof Map) {\n\t\tdict.forEach((member, key) => parts.push(serializeDictMember(key, member)))\n\t}\n\telse {\n\t\tfor (const key of Object.keys(dict)) {\n\t\t\tparts.push(serializeDictMember(key, dict[key]))\n\t\t}\n\t}\n\n\treturn parts.join(options?.whitespace === false ? ',' : ', ')\n}\n","import type { SfEncodeOptions } from './SfEncodeOptions.ts'\nimport { serializeDict } from './serialize/serializeDict.ts'\n\n/**\n * Encode a structured field dictionary to a string\n *\n * @param value - The structured field dictionary to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfDict(value: Record<string, any> | Map<string, any>, options?: SfEncodeOptions): string {\n\treturn serializeDict(value, options)\n}\n","import type { SfBareItem } from './SfBareItem.ts'\nimport { SfItem } from './SfItem.ts'\nimport type { SfParameters } from './SfParameters.ts'\nimport { serializeBareItem } from './serialize/serializeBareItem.ts'\nimport { serializeItem } from './serialize/serializeItem.ts'\nimport { serializeParams } from './serialize/serializeParams.ts'\n\n/**\n * Encode a structured field item to a string\n *\n * @param value - The structured field item to encode\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfItem(value: SfItem): string;\n\n/**\n * Encode a structured field value to a string with optional parameters.\n *\n * @param value - The structured field value to encode\n * @param params - The structured field parameters\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfItem(value: SfBareItem, params?: SfParameters): string;\n\nexport function encodeSfItem(value: SfItem | SfBareItem, params?: SfParameters): string {\n\tif (value instanceof SfItem) {\n\t\treturn serializeItem(value)\n\t}\n\n\treturn `${serializeBareItem(value)}${serializeParams(params)}`\n}\n","import { SfItem } from '../SfItem.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeInnerList } from './serializeInnerList.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n/**\n * Serialize a list member: an inner list when the value is an array, an item otherwise.\n *\n * @internal\n */\nexport function serializeMember(member: SfMember): string {\n\tif (member instanceof SfItem) {\n\t\tconst { value, params } = member\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn serializeInnerList(value, params)\n\t\t}\n\n\t\treturn `${serializeBareItem(value)}${serializeParams(params)}`\n\t}\n\n\tif (Array.isArray(member)) {\n\t\treturn serializeInnerList(member)\n\t}\n\n\treturn serializeBareItem(member)\n}\n","import type { SfEncodeOptions } from '../SfEncodeOptions.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { LIST } from '../utils/LIST.ts'\nimport { serializeError } from './serializeError.ts'\nimport { serializeMember } from './serializeMember.ts'\n\n// 4.1.1. Serializing a List\n//\n// Given an array of (member_value, parameters) tuples as input_list,\n// return an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each (member_value, parameters) of input_list:\n//\n// 1. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 2. Otherwise, append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 3. If more member_values remain in input_list:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeList(list: SfMember[], options?: SfEncodeOptions): string {\n\tif (Array.isArray(list) === false) {\n\t\tthrow serializeError(list, LIST)\n\t}\n\n\tconst separator = options?.whitespace === false ? ',' : ', '\n\tlet output = ''\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tif (i > 0) {\n\t\t\toutput += separator\n\t\t}\n\t\toutput += serializeMember(list[i])\n\t}\n\n\treturn output\n}\n","import type { SfEncodeOptions } from './SfEncodeOptions.ts'\nimport type { SfMember } from './SfMember.ts'\nimport { serializeList } from './serialize/serializeList.ts'\n\n/**\n * Encode a structured field list to a string\n *\n * @param value - The structured field list to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfList(value: SfMember[], options?: SfEncodeOptions): string {\n\treturn serializeList(value, options)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/SfItem.ts","../src/utils/DICT.ts","../src/parse/ParsedValue.ts","../src/utils/throwError.ts","../src/parse/parseError.ts","../src/utils/INNER.ts","../src/utils/BARE_ITEM.ts","../src/utils/BOOLEAN.ts","../src/parse/parseBoolean.ts","../src/utils/BYTES.ts","../src/parse/parseByteSequence.ts","../src/utils/DATE.ts","../src/utils/DECIMAL.ts","../src/utils/INTEGER.ts","../src/utils/isInvalidInt.ts","../src/parse/parseIntegerOrDecimal.ts","../src/parse/parseDate.ts","../src/utils/STRING.ts","../src/utils/STRING_REGEX.ts","../src/parse/parseString.ts","../src/SfToken.ts","../src/utils/TOKEN.ts","../src/parse/parseToken.ts","../src/parse/parseBareItem.ts","../src/parse/parseKey.ts","../src/parse/parseParameters.ts","../src/parse/parseItem.ts","../src/parse/parseInnerList.ts","../src/parse/parseItemOrInnerList.ts","../src/parse/parseDict.ts","../src/decodeSfDict.ts","../src/utils/ITEM.ts","../src/decodeSfItem.ts","../src/utils/LIST.ts","../src/parse/parseList.ts","../src/decodeSfList.ts","../src/serialize/serializeError.ts","../src/serialize/serializeBoolean.ts","../src/serialize/serializeByteSequence.ts","../src/serialize/serializeInteger.ts","../src/serialize/serializeDate.ts","../src/serialize/serializeDecimal.ts","../src/serialize/serializeString.ts","../src/utils/symbolToStr.ts","../src/serialize/serializeToken.ts","../src/serialize/serializeBareItem.ts","../src/serialize/serializeKey.ts","../src/serialize/serializeParams.ts","../src/serialize/serializeItem.ts","../src/serialize/serializeInnerList.ts","../src/serialize/serializeDictMember.ts","../src/serialize/serializeDict.ts","../src/encodeSfDict.ts","../src/encodeSfItem.ts","../src/serialize/serializeMember.ts","../src/serialize/serializeList.ts","../src/encodeSfList.ts"],"sourcesContent":["import type { SfBareItem } from './SfBareItem.ts'\n\n/**\n * Structured Field Item\n *\n * @public\n */\nexport class SfItem<\n\tV extends SfBareItem = SfBareItem,\n\tP = Record<string, any>\n> {\n\n\t/**\n\t * The value of the item.\n\t */\n\tvalue: V\n\n\t/**\n\t * The parameters of the item.\n\t */\n\tparams?: P\n\n\t/**\n\t * Creates a new structured field item.\n\t *\n\t * @param value - The value of the item.\n\t * @param params - The parameters of the item.\n\t */\n\tconstructor(value: any, params?: P) {\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue = value.map((v) => (v instanceof SfItem) ? v : new SfItem(v))\n\t\t}\n\n\t\tthis.value = value\n\t\tthis.params = params\n\t}\n}\n","export const DICT = 'Dict'\n","/**\n * @internal\n */\nexport type ParsedValue<T> = {\n\tvalue: T;\n\tsrc: string;\n};\n\n/**\n * @internal\n */\nexport function parsedValue<T>(value: T, src: string): ParsedValue<T> {\n\treturn { value, src }\n}\n","function format(value: any) {\n\tif (Array.isArray(value)) {\n\t\treturn JSON.stringify(value)\n\t}\n\tif (value instanceof Map) {\n\t\treturn 'Map{}'\n\t}\n\tif (value instanceof Set) {\n\t\treturn 'Set{}'\n\t}\n\tif (typeof value === 'object') {\n\t\treturn JSON.stringify(value)\n\t}\n\treturn String(value)\n}\n\nexport function throwError(action: string, src: any, type: string, cause?: any): Error {\n\treturn new Error(`failed to ${action} \"${format(src)}\" as ${type}`, { cause })\n}\n","import { throwError } from '../utils/throwError.ts'\n\n/**\n * @internal\n */\nexport function parseError(src: any, type: string, cause?: any): Error {\n\treturn throwError('parse', src, type, cause)\n}\n","export const INNER = 'Inner List'\n","export const BARE_ITEM = 'Bare Item'\n","export const BOOLEAN = 'Boolean'\n","import { BOOLEAN } from '../utils/BOOLEAN.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.8. Parsing a Boolean\n//\n// Given an ASCII string as input_string, return a Boolean. input_string\n// is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \"?\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. If the first character of input_string matches \"1\", discard the\n// first character, and return true.\n//\n// 4. If the first character of input_string matches \"0\", discard the\n// first character, and return false.\n//\n// 5. No value has matched; fail parsing.\n/**\n * @internal\n */\nexport function parseBoolean(src: string): ParsedValue<boolean> {\n\tlet i = 0\n\tif (src[i] !== '?') {\n\t\tthrow parseError(src, BOOLEAN)\n\t}\n\n\ti++\n\n\tif (src[i] === '1') {\n\t\treturn parsedValue(true, src.substring(++i))\n\t}\n\n\tif (src[i] === '0') {\n\t\treturn parsedValue(false, src.substring(++i))\n\t}\n\n\tthrow parseError(src, BOOLEAN)\n}\n","export const BYTES = 'Byte Sequence'\n","import { decodeBase64 } from '@svta/cml-utils'\nimport { BYTES } from '../utils/BYTES.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.7. Parsing a Byte Sequence\n//\n// Given an ASCII string as input_string, return a Byte Sequence.\n// input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \":\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. If there is not a \":\" character before the end of input_string,\n// fail parsing.\n//\n// 4. Let b64_content be the result of consuming content of\n// input_string up to but not including the first instance of the\n// character \":\".\n//\n// 5. Consume the \":\" character at the beginning of input_string.\n//\n// 6. If b64_content contains a character not included in ALPHA, DIGIT,\n// \"+\", \"/\" and \"=\", fail parsing.\n//\n// 7. Let binary_content be the result of Base 64 Decoding [RFC4648]\n// b64_content, synthesizing padding if necessary (note the\n// requirements about recipient behavior below).\n//\n// 8. Return binary_content.\n//\n// Because some implementations of base64 do not allow rejection of\n// encoded data that is not properly \"=\" padded (see [RFC4648],\n// Section 3.2), parsers SHOULD NOT fail when \"=\" padding is not\n// present, unless they cannot be configured to do so.\n//\n// Because some implementations of base64 do not allow rejection of\n// encoded data that has non-zero pad bits (see [RFC4648], Section 3.5),\n// parsers SHOULD NOT fail when non-zero pad bits are present, unless\n// they cannot be configured to do so.\n//\n// This specification does not relax the requirements in [RFC4648],\n// Section 3.1 and 3.3; therefore, parsers MUST fail on characters\n// outside the base64 alphabet, and on line feeds in encoded data.\n/**\n * @internal\n */\nexport function parseByteSequence(src: string): ParsedValue<Uint8Array> {\n\tif (src[0] !== ':') {\n\t\tthrow parseError(src, BYTES)\n\t}\n\n\tsrc = src.substring(1)\n\tif (src.includes(':') === false) {\n\t\tthrow parseError(src, BYTES)\n\t}\n\n\tconst re = /(^.*?)(:)/g\n\tconst b64_content = (re.exec(src) as any)[1]\n\tsrc = src.substring(re.lastIndex)\n\n\t// pass b64_content char check step 6\n\treturn parsedValue(\n\t\tdecodeBase64(b64_content),\n\t\tsrc,\n\t)\n}\n","export const DATE = 'Date'\n","export const DECIMAL: string = 'Decimal'\n","export const INTEGER: string = 'Integer'\n","export function isInvalidInt(value: number): boolean {\n\treturn value < -999999999999999 || 999999999999999 < value\n}\n","import { DECIMAL } from '../utils/DECIMAL.ts'\nimport { INTEGER } from '../utils/INTEGER.ts'\nimport { isInvalidInt } from '../utils/isInvalidInt.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\nfunction integerOrDecimalError(src: string): Error {\n\treturn parseError(src, `${INTEGER} or ${DECIMAL}`)\n}\n\n// 4.2.4. Parsing an Integer or Decimal\n//\n// Given an ASCII string as input_string, return an Integer or Decimal.\n// input_string is modified to remove the parsed value.\n//\n// NOTE: This algorithm parses both Integers (Section 3.3.1) and\n// Decimals (Section 3.3.2), and returns the corresponding structure.\n//\n// 1. Let type be \"integer\".\n//\n// 2. Let sign be 1.\n//\n// 3. Let input_number be an empty string.\n//\n// 4. If the first character of input_string is \"-\", consume it and\n// set sign to -1.\n//\n// 5. If input_string is empty, there is an empty integer; fail\n// parsing.\n//\n// 6. If the first character of input_string is not a DIGIT, fail\n// parsing.\n//\n// 7. While input_string is not empty:\n//\n// 1. Let char be the result of consuming the first character of\n// input_string.\n//\n// 2. If char is a DIGIT, append it to input_number.\n//\n// 3. Else, if type is \"integer\" and char is \".\":\n//\n// 1. If input_number contains more than 12 characters, fail\n// parsing.\n//\n// 2. Otherwise, append char to input_number and set type to\n// \"decimal\".\n//\n// 4. Otherwise, prepend char to input_string, and exit the loop.\n//\n// 5. If type is \"integer\" and input_number contains more than 15\n// characters, fail parsing.\n//\n// 6. If type is \"decimal\" and input_number contains more than 16\n// characters, fail parsing.\n//\n// 8. If type is \"integer\":\n//\n// 1. Parse input_number as an integer and let output_number be\n// the product of the result and sign.\n//\n// 2. If output_number is outside the range -999,999,999,999,999\n// to 999,999,999,999,999 inclusive, fail parsing.\n//\n// 9. Otherwise:\n//\n// 1. If the final character of input_number is \".\", fail parsing.\n//\n// 2. If the number of characters after \".\" in input_number is\n// greater than three, fail parsing.\n//\n// 3. Parse input_number as a decimal number and let output_number\n// be the product of the result and sign.\n//\n// 10. Return output_number.\n/**\n * @internal\n */\nexport function parseIntegerOrDecimal(src: string): ParsedValue<number> {\n\tconst orig = src\n\tlet sign = 1\n\tlet num = ''\n\tlet value\n\tconst i = 0\n\n\tif (src[i] === '-') {\n\t\tsign = -1\n\t\tsrc = src.substring(1)\n\t}\n\n\tif (src.length <= 0) {\n\t\tthrow integerOrDecimalError(orig)\n\t}\n\n\tconst re_integer = /^(\\d+)?/g\n\tconst result_integer = re_integer.exec(src) as any\n\tif (result_integer[0].length === 0) {\n\t\tthrow integerOrDecimalError(orig)\n\t}\n\tnum += result_integer[1]\n\tsrc = src.substring(re_integer.lastIndex)\n\n\tif (src[0] === '.') {\n\t\t// decimal\n\t\tif (num.length > 12) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tconst re_decimal = /^(\\.\\d+)?/g\n\t\tconst result_decimal = re_decimal.exec(src) as any\n\t\tsrc = src.substring(re_decimal.lastIndex)\n\t\t// 9.2. If the number of characters after \".\" in input_number is greater than three, fail parsing.\n\t\tif (result_decimal[0].length === 0 || result_decimal[1].length > 4) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tnum += result_decimal[1]\n\t\t// 7.6. If type is \"decimal\" and input_number contains more than 16 characters, fail parsing.\n\t\tif (num.length > 16) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tvalue = parseFloat(num) * sign\n\t}\n\telse {\n\t\t// integer\n\t\t// 7.5. If type is \"integer\" and input_number contains more than 15 characters, fail parsing.\n\t\tif (num.length > 15) {\n\t\t\tthrow integerOrDecimalError(orig)\n\t\t}\n\n\t\tvalue = parseInt(num) * sign\n\t\tif (isInvalidInt(value)) {\n\t\t\tthrow integerOrDecimalError(num)\n\t\t}\n\t}\n\n\treturn parsedValue(value, src)\n}\n","import { DATE } from '../utils/DATE.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseIntegerOrDecimal } from './parseIntegerOrDecimal.ts'\n\n// 4.2.9. Parsing a Date\n//\n// Given an ASCII string as input_string, return a Date. input_string is\n// modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not \"@\", fail parsing.\n//\n// 2. Discard the first character of input_string.\n//\n// 3. Let output_date be the result of running Parsing an Integer or\n// Decimal (Section 4.2.4) with input_string.\n//\n// 4. If output_date is a Decimal, fail parsing.\n//\n// 5. Return output_date.\n/**\n * @internal\n */\nexport function parseDate(src: string): ParsedValue<Date> {\n\tlet i = 0\n\tif (src[i] !== '@') {\n\t\tthrow parseError(src, DATE)\n\t}\n\n\ti++\n\tconst date = parseIntegerOrDecimal(src.substring(i))\n\n\tif (Number.isInteger(date.value) === false) {\n\t\tthrow parseError(src, DATE)\n\t}\n\n\treturn parsedValue(\n\t\tnew Date(date.value * 1000),\n\t\tdate.src,\n\t)\n}\n","export const STRING = 'String'\n","// eslint-disable-next-line no-control-regex\nexport const STRING_REGEX: RegExp = /[\\x00-\\x1f\\x7f]+/\n","import { STRING } from '../utils/STRING.ts'\nimport { STRING_REGEX } from '../utils/STRING_REGEX.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.5. Parsing a String\n//\n// Given an ASCII string as input_string, return an unquoted String.\n// input_string is modified to remove the parsed value.\n//\n// 1. Let output_string be an empty string.\n//\n// 2. If the first character of input_string is not DQUOTE, fail\n// parsing.\n//\n// 3. Discard the first character of input_string.\n//\n// 4. While input_string is not empty:\n//\n// 1. Let char be the result of consuming the first character of\n// input_string.\n//\n// 2. If char is a backslash (\"\\\"):\n//\n// 1. If input_string is now empty, fail parsing.\n//\n// 2. Let next_char be the result of consuming the first\n// character of input_string.\n//\n// 3. If next_char is not DQUOTE or \"\\\", fail parsing.\n//\n// 4. Append next_char to output_string.\n//\n// 3. Else, if char is DQUOTE, return output_string.\n//\n// 4. Else, if char is in the range %x00-1f or %x7f (that is, is not\n// in VCHAR or SP), fail parsing.\n//\n// 5. Else, append char to output_string.\n//\n// 5. Reached the end of input_string without finding a closing DQUOTE;\n// fail parsing.\n/**\n * @internal\n */\nexport function parseString(src: string): ParsedValue<string> {\n\tlet output = ''\n\tlet i = 0\n\n\tif (src[i] !== `\"`) {\n\t\tthrow parseError(src, STRING)\n\t}\n\n\ti++\n\n\twhile (src.length > i) {\n\t\tif (src[i] === `\\\\`) {\n\t\t\tif (src.length <= i + 1) {\n\t\t\t\tthrow parseError(src, STRING)\n\t\t\t}\n\n\t\t\ti++\n\n\t\t\tif (src[i] !== `\"` && src[i] !== `\\\\`) {\n\t\t\t\tthrow parseError(src, STRING)\n\t\t\t}\n\n\t\t\toutput += src[i]\n\t\t}\n\t\telse if (src[i] === `\"`) {\n\t\t\treturn parsedValue(output, src.substring(++i))\n\t\t}\n\t\telse if (STRING_REGEX.test(src[i])) {\n\t\t\tthrow parseError(src, STRING)\n\t\t}\n\t\telse {\n\t\t\toutput += src[i]\n\t\t}\n\n\t\ti++\n\t}\n\n\tthrow parseError(src, STRING)\n}\n","/**\n * A class to represent structured field tokens when `Symbol` is not available.\n *\n * @public\n */\nexport class SfToken {\n\tdescription: string\n\n\tconstructor(description: string) {\n\t\tthis.description = description\n\t}\n}\n","export const TOKEN = 'Token'\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { SfToken } from '../SfToken.ts'\nimport { TOKEN } from '../utils/TOKEN.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.6. Parsing a Token\n//\n// Given an ASCII string as input_string, return a Token. input_string\n// is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not ALPHA or \"*\", fail\n// parsing.\n//\n// 2. Let output_string be an empty string.\n//\n// 3. While input_string is not empty:\n//\n// 1. If the first character of input_string is not in tchar, \":\"\n// or \"/\", return output_string.\n//\n// 2. Let char be the result of consuming the first character of\n// input_string.\n//\n// 3. Append char to output_string.\n//\n// 4. Return output_string.\n/**\n * @internal\n */\nexport function parseToken(src: string, options?: SfDecodeOptions): ParsedValue<symbol | SfToken> {\n\tif (/^[a-zA-Z*]$/.test(src[0]) === false) {\n\t\tthrow parseError(src, TOKEN)\n\t}\n\n\tconst re = /^([!#$%&'*+\\-.^_`|~\\w:/]+)/g\n\tconst value = (re.exec(src) as any)[1]\n\tsrc = src.substring(re.lastIndex)\n\n\treturn parsedValue(\n\t\toptions?.useSymbol === false ? new SfToken(value) : Symbol.for(value),\n\t\tsrc,\n\t)\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { BARE_ITEM } from '../utils/BARE_ITEM.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parseBoolean } from './parseBoolean.ts'\nimport { parseByteSequence } from './parseByteSequence.ts'\nimport { parseDate } from './parseDate.ts'\nimport { parseError } from './parseError.ts'\nimport { parseIntegerOrDecimal } from './parseIntegerOrDecimal.ts'\nimport { parseString } from './parseString.ts'\nimport { parseToken } from './parseToken.ts'\n\n// 4.2.3.1. Parsing a Bare Item\n//\n// Given an ASCII string as input_string, return a bare Item.\n// input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is a \"-\" or a DIGIT,\n// return the result of running Parsing an Integer or Decimal\n// (Section 4.2.4) with input_string.\n//\n// 2. If the first character of input_string is a DQUOTE, return the\n// result of running Parsing a String (Section 4.2.5) with\n// input_string.\n//\n// 3. If the first character of input_string is \":\", return the result\n// of running Parsing a Byte Sequence (Section 4.2.7) with\n// input_string.\n//\n// 4. If the first character of input_string is \"?\", return the result\n// of running Parsing a Boolean (Section 4.2.8) with input_string.\n//\n// 5. If the first character of input_string is an ALPHA or \"*\", return\n// the result of running Parsing a Token (Section 4.2.6) with\n// input_string.\n//\n// 6. If the first character of input_string is \"@\", return the result\n// of running Parsing a Date (Section 4.2.9) with input_string.\n//\n// 7. Otherwise, the item type is unrecognized; fail parsing.\n/**\n * @internal\n */\nexport function parseBareItem(src: string, options?: SfDecodeOptions): ParsedValue<SfBareItem> {\n\tconst first = src[0]\n\tif (first === `\"`) {\n\t\treturn parseString(src)\n\t}\n\tif (/^[-0-9]/.test(first)) {\n\t\treturn parseIntegerOrDecimal(src)\n\t}\n\tif (first === `?`) {\n\t\treturn parseBoolean(src)\n\t}\n\tif (first === `:`) {\n\t\treturn parseByteSequence(src)\n\t}\n\tif (/^[a-zA-Z*]/.test(first)) {\n\t\treturn parseToken(src, options)\n\t}\n\tif (first === `@`) {\n\t\treturn parseDate(src)\n\t}\n\tthrow parseError(src, BARE_ITEM)\n}\n","import { KEY } from '../utils/KEY.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\n\n// 4.2.3.3. Parsing a Key\n//\n// Given an ASCII string as input_string, return a key. input_string is\n// modified to remove the parsed value.\n//\n// 1. If the first character of input_string is not lcalpha or \"*\",\n// fail parsing.\n//\n// 2. Let output_string be an empty string.\n//\n// 3. While input_string is not empty:\n//\n// 1. If the first character of input_string is not one of lcalpha,\n// DIGIT, \"_\", \"-\", \".\", or \"*\", return output_string.\n//\n// 2. Let char be the result of consuming the first character of\n// input_string.\n//\n// 3. Append char to output_string.\n//\n// 4. Return output_string.\n/**\n * @internal\n */\nexport function parseKey(src: string): ParsedValue<string> {\n\tlet i = 0\n\tif (/^[a-z*]$/.test(src[i]) === false) {\n\t\tthrow parseError(src, KEY)\n\t}\n\n\tlet value = ''\n\n\twhile (src.length > i) {\n\t\tif (/^[a-z0-9_\\-.*]$/.test(src[i]) === false) {\n\t\t\treturn parsedValue(value, src.substring(i))\n\t\t}\n\n\t\tvalue += src[i]\n\t\ti++\n\t}\n\n\treturn parsedValue(value, src.substring(i))\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfParameters } from '../SfParameters.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseBareItem } from './parseBareItem.ts'\nimport { parseKey } from './parseKey.ts'\n\n// 4.2.3.2. Parsing Parameters\n//\n// Given an ASCII string as input_string, return an ordered map whose\n// values are bare Items. input_string is modified to remove the parsed\n// value.\n//\n// 1. Let parameters be an empty, ordered map.\n//\n// 2. While input_string is not empty:\n//\n// 1. If the first character of input_string is not \";\", exit the\n// loop.\n//\n// 2. Consume a \";\" character from the beginning of input_string.\n//\n// 3. Discard any leading SP characters from input_string.\n//\n// 4. let param_name be the result of running Parsing a Key\n// (Section 4.2.3.3) with input_string.\n//\n// 5. Let param_value be Boolean true.\n//\n// 6. If the first character of input_string is \"=\":\n//\n// 1. Consume the \"=\" character at the beginning of\n// input_string.\n//\n// 2. Let param_value be the result of running Parsing a Bare\n// Item (Section 4.2.3.1) with input_string.\n//\n// 7. Append key param_name with value param_value to parameters.\n// If parameters already contains a name param_name (comparing\n// character-for-character), overwrite its value.\n//\n// 3. Return parameters.\n//\n// Note that when duplicate Parameter keys are encountered, this has the\n// effect of ignoring all but the last instance.\n/**\n * @internal\n */\nexport function parseParameters(src: string, options?: SfDecodeOptions): ParsedValue<SfParameters | undefined> {\n\tlet parameters: SfParameters | undefined = undefined\n\twhile (src.length > 0) {\n\t\tif (src[0] !== ';') {\n\t\t\tbreak\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tconst parsedKey = parseKey(src)\n\t\tconst key = parsedKey.value\n\t\tlet value = true\n\t\tsrc = parsedKey.src\n\n\t\tif (src[0] === '=') {\n\t\t\tsrc = src.substring(1)\n\t\t\tconst parsedBareItem = parseBareItem(src, options)\n\t\t\tvalue = parsedBareItem.value as any\n\t\t\tsrc = parsedBareItem.src\n\t\t}\n\n\t\t// initialize as object when params exists\n\t\tif (parameters == null) {\n\t\t\tparameters = {}\n\t\t}\n\n\t\t// override if param_name exists\n\t\tparameters[key] = value\n\t}\n\treturn parsedValue(parameters, src)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport { SfItem } from '../SfItem.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseBareItem } from './parseBareItem.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.3. Parsing an Item\n//\n// Given an ASCII string as input_string, return a (bare_item,\n// parameters) tuple. input_string is modified to remove the parsed\n// value.\n//\n// 1. Let bare_item be the result of running Parsing a Bare Item\n// (Section 4.2.3.1) with input_string.\n//\n// 2. Let parameters be the result of running Parsing Parameters\n// (Section 4.2.3.2) with input_string.\n//\n// 3. Return the tuple (bare_item, parameters).\n/**\n * @internal\n */\nexport function parseItem(src: string, options?: SfDecodeOptions): ParsedValue<SfItem> {\n\tconst parsedBareItem = parseBareItem(src, options)\n\tsrc = parsedBareItem.src\n\n\tconst parsedParameters = parseParameters(src, options)\n\tsrc = parsedParameters.src\n\n\treturn parsedValue(\n\t\tnew SfItem(parsedBareItem.value, parsedParameters.value),\n\t\tsrc,\n\t)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { INNER } from '../utils/INNER.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItem } from './parseItem.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.1.2. Parsing an Inner List\n//\n// Given an ASCII string as input_string, return the tuple (inner_list,\n// parameters), where inner_list is an array of (bare_item, parameters)\n// tuples. input_string is modified to remove the parsed value.\n//\n// 1. Consume the first character of input_string; if it is not \"(\",\n// fail parsing.\n//\n// 2. Let inner_list be an empty array.\n//\n// 3. While input_string is not empty:\n//\n// 1. Discard any leading SP characters from input_string.\n//\n// 2. If the first character of input_string is \")\":\n//\n// 1. Consume the first character of input_string.\n//\n// 2. Let parameters be the result of running Parsing\n// Parameters (Section 4.2.3.2) with input_string.\n//\n// 3. Return the tuple (inner_list, parameters).\n//\n// 3. Let item be the result of running Parsing an Item\n// (Section 4.2.3) with input_string.\n//\n// 4. Append item to inner_list.\n//\n// 5. If the first character of input_string is not SP or \")\", fail\n// parsing.\n//\n// 4. The end of the inner list was not found; fail parsing.\n/**\n * @internal\n */\nexport function parseInnerList(src: string, options?: SfDecodeOptions): ParsedValue<SfInnerList> {\n\tif (src[0] !== '(') {\n\t\tthrow parseError(src, INNER)\n\t}\n\n\tsrc = src.substring(1)\n\tconst innerList: SfItem[] = []\n\twhile (src.length > 0) {\n\t\tsrc = src.trim()\n\t\tif (src[0] === ')') {\n\t\t\tsrc = src.substring(1)\n\t\t\tconst parsedParameters = parseParameters(src, options)\n\n\t\t\treturn parsedValue(\n\t\t\t\tnew SfItem(innerList, parsedParameters.value) as any,\n\t\t\t\tparsedParameters.src,\n\t\t\t)\n\t\t}\n\n\t\tconst parsedItem = parseItem(src, options)\n\t\tinnerList.push(parsedItem.value)\n\t\tsrc = parsedItem.src\n\n\t\tif (src[0] !== ' ' && src[0] !== ')') {\n\t\t\tthrow parseError(src, INNER)\n\t\t}\n\t}\n\n\tthrow parseError(src, INNER)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport type { SfItem } from '../SfItem.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parseInnerList } from './parseInnerList.ts'\nimport { parseItem } from './parseItem.ts'\n\n// 4.2.1.1. Parsing an Item or Inner List\n//\n// Given an ASCII string as input_string, return the tuple\n// (item_or_inner_list, parameters), where item_or_inner_list can be\n// either a single bare item, or an array of (bare_item, parameters)\n// tuples. input_string is modified to remove the parsed value.\n//\n// 1. If the first character of input_string is \"(\", return the result\n// of running Parsing an Inner List (Section 4.2.1.2) with\n// input_string.\n//\n// 2. Return the result of running Parsing an Item (Section 4.2.3) with\n// input_string.\n/**\n * @internal\n */\nexport function parseItemOrInnerList(src: string, options?: SfDecodeOptions): ParsedValue<SfItem | SfInnerList> {\n\tif (src[0] === '(') {\n\t\treturn parseInnerList(src, options)\n\t}\n\n\treturn parseItem(src, options)\n}\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfDictionary } from '../SfDictionary.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { DICT } from '../utils/DICT.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItemOrInnerList } from './parseItemOrInnerList.ts'\nimport { parseKey } from './parseKey.ts'\nimport { parseParameters } from './parseParameters.ts'\n\n// 4.2.2. Parsing a Dictionary\n//\n// Given an ASCII string as input_string, return an ordered map whose\n// values are (item_or_inner_list, parameters) tuples. input_string is\n// modified to remove the parsed value.\n//\n// 1. Let dictionary be an empty, ordered map.\n//\n// 2. While input_string is not empty:\n//\n// 1. Let this_key be the result of running Parsing a Key\n// (Section 4.2.3.3) with input_string.\n//\n// 2. If the first character of input_string is \"=\":\n//\n// 1. Consume the first character of input_string.\n//\n// 2. Let member be the result of running Parsing an Item or\n// Inner List (Section 4.2.1.1) with input_string.\n//\n// 3. Otherwise:\n//\n// 1. Let value be Boolean true.\n//\n// 2. Let parameters be the result of running Parsing\n// Parameters Section 4.2.3.2 with input_string.\n//\n// 3. Let member be the tuple (value, parameters).\n//\n// 4. Add name this_key with value member to dictionary. If\n// dictionary already contains a name this_key (comparing\n// character-for-character), overwrite its value.\n//\n// 5. Discard any leading OWS characters from input_string.\n//\n// 6. If input_string is empty, return dictionary.\n//\n// 7. Consume the first character of input_string; if it is not\n// \",\", fail parsing.\n//\n// 8. Discard any leading OWS characters from input_string.\n//\n// 9. If input_string is empty, there is a trailing comma; fail\n// parsing.\n//\n// 3. No structured data has been found; return dictionary (which is\n// empty).\n//\n// Note that when duplicate Dictionary keys are encountered, this has\n// the effect of ignoring all but the last instance.\n/**\n * @internal\n */\nexport function parseDict(src: string, options?: SfDecodeOptions): ParsedValue<SfDictionary> {\n\tconst value: SfDictionary = {}\n\n\twhile (src.length > 0) {\n\t\tlet member: SfItem | SfInnerList\n\t\tconst parsedKey = parseKey(src)\n\t\tconst key = parsedKey.value\n\t\tsrc = parsedKey.src\n\n\t\tif (src[0] === '=') {\n\t\t\tconst parsedItemOrInnerList = parseItemOrInnerList(src.substring(1), options)\n\t\t\tmember = parsedItemOrInnerList.value\n\t\t\tsrc = parsedItemOrInnerList.src\n\t\t}\n\t\telse {\n\t\t\tconst parsedParameters = parseParameters(src, options)\n\t\t\tmember = new SfItem(true, parsedParameters.value)\n\t\t\tsrc = parsedParameters.src\n\t\t}\n\n\t\tvalue[key] = member\n\n\t\tsrc = src.trim()\n\t\tif (src.length === 0) {\n\t\t\treturn parsedValue(value, src)\n\t\t}\n\n\t\tif (src[0] !== ',') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tif (src.length === 0 || src[0] === ',') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\t}\n\n\treturn parsedValue(value, src)\n}\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfDictionary } from './SfDictionary.ts'\nimport { parseDict } from './parse/parseDict.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { DICT } from './utils/DICT.ts'\n\n/**\n * Decode a structured field string into a structured field dictionary\n *\n * @param input - The structured field string to decode\n * @returns The structured field dictionary\n *\n * @public\n */\nexport function decodeSfDict(input: string, options?: SfDecodeOptions): SfDictionary {\n\ttry {\n\t\tconst { src, value } = parseDict(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, DICT)\n\t\t}\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, DICT, cause)\n\t}\n}\n","export const ITEM = 'Item'\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfItem } from './SfItem.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { parseItem } from './parse/parseItem.ts'\nimport { ITEM } from './utils/ITEM.ts'\n\n// 4.2. Parsing Structured Fields\n//\n// 1. Convert input_bytes into an ASCII string input_string; if\n// conversion fails, fail parsing.\n//\n// 2. Discard any leading SP characters from input_string.\n//\n// 3. If field_type is \"list\", let output be the result of running\n// Parsing a List (Section 4.2.1) with input_string.\n//\n// 4. If field_type is \"dictionary\", let output be the result of\n// running Parsing a Dictionary (Section 4.2.2) with input_string.\n//\n// 5. If field_type is \"item\", let output be the result of running\n// Parsing an Item (Section 4.2.3) with input_string.\n//\n// 6. Discard any leading SP characters from input_string.\n//\n// 7. If input_string is not empty, fail parsing.\n//\n// 8. Otherwise, return output.\n/**\n * Decode a structured field string into a structured field item\n *\n * @param input - The structured field string to decode\n * @returns The structured field item\n *\n * @public\n */\nexport function decodeSfItem(input: string, options?: SfDecodeOptions): SfItem {\n\ttry {\n\t\tconst { src, value } = parseItem(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, ITEM)\n\t\t}\n\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, ITEM, cause)\n\t}\n}\n","export const LIST = 'List'\n","import type { SfDecodeOptions } from '../SfDecodeOptions.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { LIST } from '../utils/LIST.ts'\nimport type { ParsedValue } from './ParsedValue.ts'\nimport { parsedValue } from './ParsedValue.ts'\nimport { parseError } from './parseError.ts'\nimport { parseItemOrInnerList } from './parseItemOrInnerList.ts'\n\n// 4.2.1. Parsing a List\n//\n// Given an ASCII string as input_string, return an array of\n// (item_or_inner_list, parameters) tuples. input_string is modified to\n// remove the parsed value.\n//\n// 1. Let members be an empty array.\n//\n// 2. While input_string is not empty:\n//\n// 1. Append the result of running Parsing an Item or Inner List\n// (Section 4.2.1.1) with input_string to members.\n//\n// 2. Discard any leading OWS characters from input_string.\n//\n// 3. If input_string is empty, return members.\n//\n// 4. Consume the first character of input_string; if it is not\n// \",\", fail parsing.\n//\n// 5. Discard any leading OWS characters from input_string.\n//\n// 6. If input_string is empty, there is a trailing comma; fail\n// parsing.\n//\n// 3. No structured data has been found; return members (which is\n// empty).\n/**\n * @internal\n */\nexport function parseList(src: string, options?: SfDecodeOptions): ParsedValue<SfMember[]> {\n\tconst value: SfMember[] = []\n\twhile (src.length > 0) {\n\t\tconst parsedItemOrInnerList = parseItemOrInnerList(src, options)\n\t\tvalue.push(parsedItemOrInnerList.value)\n\n\t\tsrc = parsedItemOrInnerList.src.trim()\n\t\tif (src.length === 0) {\n\t\t\treturn parsedValue(value, src)\n\t\t}\n\n\t\tif (src[0] !== ',') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\n\t\tsrc = src.substring(1).trim()\n\t\tif (src.length === 0 || src[0] === ',') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\t}\n\treturn parsedValue(value, src)\n}\n","import type { SfDecodeOptions } from './SfDecodeOptions.ts'\nimport type { SfMember } from './SfMember.ts'\nimport { parseError } from './parse/parseError.ts'\nimport { parseList } from './parse/parseList.ts'\nimport { LIST } from './utils/LIST.ts'\n\n/**\n * Decode a structured field string into a structured field list\n *\n * @param input - The structured field string to decode\n * @returns The structured field list\n *\n * @public\n */\nexport function decodeSfList(input: string, options?: SfDecodeOptions): SfMember[] {\n\ttry {\n\t\tconst { src, value } = parseList(input.trim(), options)\n\t\tif (src !== '') {\n\t\t\tthrow parseError(src, LIST)\n\t\t}\n\t\treturn value\n\t}\n\tcatch (cause) {\n\t\tthrow parseError(input, LIST, cause)\n\t}\n}\n","import { throwError } from '../utils/throwError.ts'\n\n/**\n * @internal\n */\nexport function serializeError(src: any, type: string, cause?: any): Error {\n\treturn throwError('serialize', src, type, cause)\n}\n","import { BOOLEAN } from '../utils/BOOLEAN.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.9. Serializing a Boolean\n//\n// Given a Boolean as input_boolean, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. If input_boolean is not a boolean, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \"?\" to output.\n//\n// 4. If input_boolean is true, append \"1\" to output.\n//\n// 5. If input_boolean is false, append \"0\" to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeBoolean(value: boolean): string {\n\tif (typeof value !== 'boolean') {\n\t\tthrow serializeError(value, BOOLEAN)\n\t}\n\treturn value ? '?1' : '?0'\n}\n","import { encodeBase64 } from '@svta/cml-utils'\nimport { BYTES } from '../utils/BYTES.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.8. Serializing a Byte Sequence\n//\n// Given a Byte Sequence as input_bytes, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_bytes is not a sequence of bytes, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \":\" to output.\n//\n// 4. Append the result of base64-encoding input_bytes as per\n// [RFC4648], Section 4, taking account of the requirements below.\n//\n// 5. Append \":\" to output.\n//\n// 6. Return output.\n//\n// The encoded data is required to be padded with \"=\", as per [RFC4648],\n// Section 3.2.\n//\n// Likewise, encoded data SHOULD have pad bits set to zero, as per\n// [RFC4648], Section 3.5, unless it is not possible to do so due to\n// implementation constraints.\n/**\n * @internal\n */\nexport function serializeByteSequence(value: Uint8Array) {\n\tif (ArrayBuffer.isView(value) === false) {\n\t\tthrow serializeError(value, BYTES)\n\t}\n\treturn `:${encodeBase64(value)}:`\n}\n","import { INTEGER } from '../utils/INTEGER.ts'\nimport { isInvalidInt } from '../utils/isInvalidInt.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.4. Serializing an Integer\n//\n// Given an Integer as input_integer, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_integer is not an integer in the range of\n// -999,999,999,999,999 to 999,999,999,999,999 inclusive, fail\n// serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. If input_integer is less than (but not equal to) 0, append \"-\" to\n// output.\n//\n// 4. Append input_integer's numeric value represented in base 10 using\n// only decimal digits to output.\n//\n// 5. Return output.\n/**\n * @internal\n */\nexport function serializeInteger(value: number): string {\n\tif (isInvalidInt(value)) {\n\t\tthrow serializeError(value, INTEGER)\n\t}\n\n\treturn value.toString()\n}\n","import { serializeInteger } from './serializeInteger.ts'\n\n// 4.1.10. Serializing a Date\n//\n// Given a Date as input_integer, return an ASCII string suitable for\n// use in an HTTP field value.\n// 1. Let output be \"@\".\n// 2. Append to output the result of running Serializing an Integer\n// with input_date (Section 4.1.4).\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeDate(value: Date) {\n\treturn `@${serializeInteger(value.getTime() / 1000)}`\n}\n","import { roundToEven } from '@svta/cml-utils'\nimport { DECIMAL } from '../utils/DECIMAL.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.5. Serializing a Decimal\n//\n// Given a decimal number as input_decimal, return an ASCII string\n// suitable for use in a HTTP field value.\n//\n// 1. If input_decimal is not a decimal number, fail serialization.\n//\n// 2. If input_decimal has more than three significant digits to the\n// right of the decimal point, round it to three decimal places,\n// rounding the final digit to the nearest value, or to the even\n// value if it is equidistant.\n//\n// 3. If input_decimal has more than 12 significant digits to the left\n// of the decimal point after rounding, fail serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. If input_decimal is less than (but not equal to) 0, append \"-\"\n// to output.\n//\n// 6. Append input_decimal's integer component represented in base 10\n// (using only decimal digits) to output; if it is zero, append\n// \"0\".\n//\n// 7. Append \".\" to output.\n//\n// 8. If input_decimal's fractional component is zero, append \"0\" to\n// output.\n//\n// 9. Otherwise, append the significant digits of input_decimal's\n// fractional component represented in base 10 (using only decimal\n// digits) to output.\n//\n// 10. Return output.\n/**\n * @internal\n */\nexport function serializeDecimal(value: number): string {\n\tconst roundedValue = roundToEven(value, 3) // round to 3 decimal places\n\tif (Math.abs(roundedValue) >= 1e12) {\n\t\tthrow serializeError(value, DECIMAL)\n\t}\n\tconst stringValue = roundedValue.toString()\n\treturn stringValue.includes('.') ? stringValue : `${stringValue}.0`\n}\n","import { STRING } from '../utils/STRING.ts'\nimport { STRING_REGEX } from '../utils/STRING_REGEX.ts'\nimport { serializeError } from './serializeError.ts'\n\n// Control characters that fail serialization, and the two characters that need an escape.\n// eslint-disable-next-line no-control-regex\nconst ESCAPE_OR_CONTROL_REGEX = /[\\x00-\\x1f\\x7f\"\\\\]/\nconst BACKSLASH_REGEX = /\\\\/g\nconst DQUOTE_REGEX = /\"/g\n\n// 4.1.6. Serializing a String\n//\n// Given a String as input_string, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Convert input_string into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_string contains characters in the range %x00-1f or %x7f\n// (that is, not in VCHAR or SP), fail serialization.\n//\n// 3. Let output be the string DQUOTE.\n//\n// 4. For each character char in input_string:\n//\n// 1. If char is \"\\\" or DQUOTE:\n//\n// 1. Append \"\\\" to output.\n//\n// 2. Append char to output.\n//\n// 5. Append DQUOTE to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeString(value: string): string {\n\tif (ESCAPE_OR_CONTROL_REGEX.test(value) === false) {\n\t\treturn `\"${value}\"`\n\t}\n\n\tif (STRING_REGEX.test(value)) {\n\t\tthrow serializeError(value, STRING)\n\t}\n\n\treturn `\"${value.replace(BACKSLASH_REGEX, '\\\\\\\\').replace(DQUOTE_REGEX, '\\\\\"')}\"`\n}\n","import type { SfToken } from '../SfToken.ts'\n\n/**\n * Converts a symbol to a string.\n *\n * @param symbol - The symbol to convert.\n *\n * @returns The string representation of the symbol.\n *\n * @public\n */\nexport function symbolToStr(symbol: symbol | SfToken): string {\n\treturn symbol.description || symbol.toString().slice(7, -1)\n}\n","import type { SfToken } from '../SfToken.ts'\nimport { symbolToStr } from '../utils/symbolToStr.ts'\nimport { TOKEN } from '../utils/TOKEN.ts'\nimport { serializeError } from './serializeError.ts'\n\nconst TOKEN_REGEX = /^[a-zA-Z*][!#$%&'*+\\-.^_`|~\\w:/]*$/\n\n// 4.1.7. Serializing a Token\n//\n// Given a Token as input_token, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. Convert input_token into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If the first character of input_token is not ALPHA or \"*\", or the\n// remaining portion contains a character not in tchar, \":\" or \"/\",\n// fail serialization.\n//\n// 3. Let output be an empty string.\n//\n// 4. Append input_token to output.\n//\n// 5. Return output.\n\n/**\n * @internal\n */\nexport function serializeToken(token: symbol | SfToken): string {\n\tconst value = symbolToStr(token)\n\tif (TOKEN_REGEX.test(value) === false) {\n\t\tthrow serializeError(value, TOKEN)\n\t}\n\treturn value\n}\n","import { SfToken } from '../SfToken.ts'\nimport { BARE_ITEM } from '../utils/BARE_ITEM.ts'\nimport { serializeBoolean } from './serializeBoolean.ts'\nimport { serializeByteSequence } from './serializeByteSequence.ts'\nimport { serializeDate } from './serializeDate.ts'\nimport { serializeDecimal } from './serializeDecimal.ts'\nimport { serializeError } from './serializeError.ts'\nimport { serializeInteger } from './serializeInteger.ts'\nimport { serializeString } from './serializeString.ts'\nimport { serializeToken } from './serializeToken.ts'\n\n// 4.1.3.1. Serializing a Bare Item\n//\n// Given an Item as input_item, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. If input_item is an Integer, return the result of running\n// Serializing an Integer (Section 4.1.4) with input_item.\n//\n// 2. If input_item is a Decimal, return the result of running\n// Serializing a Decimal (Section 4.1.5) with input_item.\n//\n// 3. If input_item is a String, return the result of running\n// Serializing a String (Section 4.1.6) with input_item.\n//\n// 4. If input_item is a Token, return the result of running\n// Serializing a Token (Section 4.1.7) with input_item.\n//\n// 5. If input_item is a Boolean, return the result of running\n// Serializing a Boolean (Section 4.1.9) with input_item.\n//\n// 6. If input_item is a Byte Sequence, return the result of running\n// Serializing a Byte Sequence (Section 4.1.8) with input_item.\n//\n// 7. If input_item is a Date, return the result of running Serializing\n// a Date (Section 4.1.10) with input_item.\n//\n// 8. Otherwise, fail serialization.\n/**\n * @internal\n */\nexport function serializeBareItem(value: any): string {\n\tswitch (typeof value) {\n\t\tcase 'number':\n\t\t\tif (!Number.isFinite(value)) {\n\t\t\t\tthrow serializeError(value, BARE_ITEM)\n\t\t\t}\n\n\t\t\tif (Number.isInteger(value)) {\n\t\t\t\treturn serializeInteger(value)\n\t\t\t}\n\t\t\treturn serializeDecimal(value)\n\n\t\tcase 'string':\n\t\t\treturn serializeString(value)\n\n\t\tcase 'symbol':\n\t\t\treturn serializeToken(value)\n\n\t\tcase 'boolean':\n\t\t\treturn serializeBoolean(value)\n\n\t\tcase 'object':\n\t\t\tif (value instanceof Date) {\n\t\t\t\treturn serializeDate(value)\n\t\t\t}\n\t\t\tif (value instanceof Uint8Array) {\n\t\t\t\treturn serializeByteSequence(value)\n\t\t\t}\n\t\t\tif (value instanceof SfToken) {\n\t\t\t\treturn serializeToken(value)\n\t\t\t}\n\n\t\t// eslint-disable-next-line no-fallthrough\n\t\tdefault:\n\t\t\t// fail\n\t\t\tthrow serializeError(value, BARE_ITEM)\n\t}\n}\n","import { KEY } from '../utils/KEY.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.1.3. Serializing a Key\n//\n// Given a key as input_key, return an ASCII string suitable for use in\n// a HTTP field value.\n//\n// 1. Convert input_key into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_key contains characters not in lcalpha, DIGIT, \"_\", \"-\",\n// \".\", or \"*\" fail serialization.\n//\n// 3. If the first character of input_key is not lcalpha or \"*\", fail\n// serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. Append input_key to output.\n//\n// 6. Return output.\n/**\n * @internal\n */\nexport function serializeKey(value: string): string {\n\tif (typeof value !== 'string' || value.length === 0) {\n\t\tthrow serializeError(value, KEY)\n\t}\n\n\t// lcalpha / \"*\"\n\tlet code = value.charCodeAt(0)\n\tif ((code < 0x61 || code > 0x7a) && code !== 0x2a) {\n\t\tthrow serializeError(value, KEY)\n\t}\n\n\t// lcalpha / DIGIT / \"_\" / \"-\" / \".\" / \"*\"\n\tfor (let i = 1; i < value.length; i++) {\n\t\tcode = value.charCodeAt(i)\n\t\tif ((code < 0x61 || code > 0x7a) && (code < 0x30 || code > 0x39) && code !== 0x5f && code !== 0x2d && code !== 0x2e && code !== 0x2a) {\n\t\t\tthrow serializeError(value, KEY)\n\t\t}\n\t}\n\n\treturn value\n}\n","import { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeKey } from './serializeKey.ts'\n\n// 4.1.1.2. Serializing Parameters\n//\n// Given an ordered Dictionary as input_parameters (each member having a\n// param_name and a param_value), return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each param_name with a value of param_value in\n// input_parameters:\n//\n// 1. Append \";\" to output.\n//\n// 2. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with param_name to output.\n//\n// 3. If param_value is not Boolean true:\n//\n// 1. Append \"=\" to output.\n//\n// 2. Append the result of running Serializing a bare Item\n// (Section 4.1.3.1) with param_value to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeParams(params?: Record<string, any>): string {\n\tif (params == null) {\n\t\treturn ''\n\t}\n\n\tlet output = ''\n\n\tfor (const key of Object.keys(params)) {\n\t\tconst value = params[key]\n\t\toutput += `;${serializeKey(key)}`\n\n\t\tif (value !== true) { // omit true\n\t\t\toutput += `=${serializeBareItem(value)}`\n\t\t}\n\t}\n\n\treturn output\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport { SfItem } from '../SfItem.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n// 4.1.3. Serializing an Item\n//\n// Given an Item as bare_item and Parameters as item_parameters, return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. Append the result of running Serializing a Bare Item\n// Section 4.1.3.1 with bare_item to output.\n//\n// 3. Append the result of running Serializing Parameters\n// Section 4.1.1.2 with item_parameters to output.\n//\n// 4. Return output.\n/**\n * @internal\n */\nexport function serializeItem(value: SfItem | SfBareItem): string {\n\tif (value instanceof SfItem) {\n\t\treturn `${serializeBareItem(value.value)}${serializeParams(value.params)}`\n\t}\n\telse {\n\t\treturn serializeBareItem(value)\n\t}\n}\n","import type { SfBareItem } from '../SfBareItem.ts'\nimport type { SfInnerList } from '../SfInnerList.ts'\nimport type { SfItem } from '../SfItem.ts'\nimport type { SfParameters } from '../SfParameters.ts'\nimport { serializeItem } from './serializeItem.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n// 4.1.1.1. Serializing an Inner List\n//\n// Given an array of (member_value, parameters) tuples as inner_list,\n// and parameters as list_parameters, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. Let output be the string \"(\".\n//\n// 2. For each (member_value, parameters) of inner_list:\n//\n// 1. Append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 2. If more values remain in inner_list, append a single SP to\n// output.\n//\n// 3. Append \")\" to output.\n//\n// 4. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with list_parameters to output.\n//\n// 5. Return output.\n/**\n * @internal\n */\nexport function serializeInnerList(value: SfInnerList): string;\n\n/**\n * @internal\n */\nexport function serializeInnerList(value: SfItem[] | SfBareItem[], params?: SfParameters): string;\n\nexport function serializeInnerList(value: SfInnerList | SfItem[] | SfBareItem[], params?: SfParameters): string {\n\tlet list: SfItem[] | SfBareItem[]\n\n\tif (Array.isArray(value)) {\n\t\tlist = value\n\t}\n\telse {\n\t\tlist = value.value\n\t\tparams = value.params\n\t}\n\n\tlet output = '('\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tif (i > 0) {\n\t\t\toutput += ' '\n\t\t}\n\t\toutput += serializeItem(list[i])\n\t}\n\n\treturn `${output})${serializeParams(params)}`\n}\n","import { SfItem } from '../SfItem.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeInnerList } from './serializeInnerList.ts'\nimport { serializeKey } from './serializeKey.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n/**\n * Serialize one dictionary member: the key, then the parameters alone for a `true` value, otherwise `=` and the member.\n *\n * @internal\n */\nexport function serializeDictMember(key: string, member: SfMember): string {\n\tconst output = serializeKey(key)\n\n\tif (member instanceof SfItem) {\n\t\tconst { value, params } = member\n\n\t\tif (value === true) {\n\t\t\treturn `${output}${serializeParams(params)}`\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn `${output}=${serializeInnerList(value, params)}`\n\t\t}\n\n\t\treturn `${output}=${serializeBareItem(value)}${serializeParams(params)}`\n\t}\n\n\tif (member === true) {\n\t\treturn output\n\t}\n\n\tif (Array.isArray(member)) {\n\t\treturn `${output}=${serializeInnerList(member)}`\n\t}\n\n\treturn `${output}=${serializeBareItem(member)}`\n}\n","import type { SfEncodeOptions } from '../SfEncodeOptions.ts'\nimport { DICT } from '../utils/DICT.ts'\nimport { serializeDictMember } from './serializeDictMember.ts'\nimport { serializeError } from './serializeError.ts'\n\n// 4.1.2. Serializing a Dictionary\n//\n// Given an ordered Dictionary as input_dictionary (each member having a\n// member_name and a tuple value of (member_value, parameters)), return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each member_name with a value of (member_value, parameters)\n// in input_dictionary:\n//\n// 1. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with member's member_name to output.\n//\n// 2. If member_value is Boolean true:\n//\n// 1. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with parameters to output.\n//\n// 3. Otherwise:\n//\n// 1. Append \"=\" to output.\n//\n// 2. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 3. Otherwise, append the result of running Serializing an\n// Item (Section 4.1.3) with (member_value, parameters) to\n// output.\n//\n// 4. If more members remain in input_dictionary:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeDict(dict: Record<string, any> | Map<string, any>, options?: SfEncodeOptions): string {\n\tif (typeof dict !== 'object' || dict == null) {\n\t\tthrow serializeError(dict, DICT)\n\t}\n\n\tconst parts: string[] = []\n\n\tif (dict instanceof Map) {\n\t\tdict.forEach((member, key) => parts.push(serializeDictMember(key, member)))\n\t}\n\telse {\n\t\tfor (const key of Object.keys(dict)) {\n\t\t\tparts.push(serializeDictMember(key, dict[key]))\n\t\t}\n\t}\n\n\treturn parts.join(options?.whitespace === false ? ',' : ', ')\n}\n","import type { SfEncodeOptions } from './SfEncodeOptions.ts'\nimport { serializeDict } from './serialize/serializeDict.ts'\n\n/**\n * Encode a structured field dictionary to a string\n *\n * @param value - The structured field dictionary to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfDict(value: Record<string, any> | Map<string, any>, options?: SfEncodeOptions): string {\n\treturn serializeDict(value, options)\n}\n","import type { SfBareItem } from './SfBareItem.ts'\nimport { SfItem } from './SfItem.ts'\nimport type { SfParameters } from './SfParameters.ts'\nimport { serializeBareItem } from './serialize/serializeBareItem.ts'\nimport { serializeItem } from './serialize/serializeItem.ts'\nimport { serializeParams } from './serialize/serializeParams.ts'\n\n/**\n * Encode a structured field item to a string\n *\n * @param value - The structured field item to encode\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfItem(value: SfItem): string;\n\n/**\n * Encode a structured field value to a string with optional parameters.\n *\n * @param value - The structured field value to encode\n * @param params - The structured field parameters\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfItem(value: SfBareItem, params?: SfParameters): string;\n\nexport function encodeSfItem(value: SfItem | SfBareItem, params?: SfParameters): string {\n\tif (value instanceof SfItem) {\n\t\treturn serializeItem(value)\n\t}\n\n\treturn `${serializeBareItem(value)}${serializeParams(params)}`\n}\n","import { SfItem } from '../SfItem.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { serializeBareItem } from './serializeBareItem.ts'\nimport { serializeInnerList } from './serializeInnerList.ts'\nimport { serializeParams } from './serializeParams.ts'\n\n/**\n * Serialize a list member: an inner list when the value is an array, an item otherwise.\n *\n * @internal\n */\nexport function serializeMember(member: SfMember): string {\n\tif (member instanceof SfItem) {\n\t\tconst { value, params } = member\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn serializeInnerList(value, params)\n\t\t}\n\n\t\treturn `${serializeBareItem(value)}${serializeParams(params)}`\n\t}\n\n\tif (Array.isArray(member)) {\n\t\treturn serializeInnerList(member)\n\t}\n\n\treturn serializeBareItem(member)\n}\n","import type { SfEncodeOptions } from '../SfEncodeOptions.ts'\nimport type { SfMember } from '../SfMember.ts'\nimport { LIST } from '../utils/LIST.ts'\nimport { serializeError } from './serializeError.ts'\nimport { serializeMember } from './serializeMember.ts'\n\n// 4.1.1. Serializing a List\n//\n// Given an array of (member_value, parameters) tuples as input_list,\n// return an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each (member_value, parameters) of input_list:\n//\n// 1. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 2. Otherwise, append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 3. If more member_values remain in input_list:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\n/**\n * @internal\n */\nexport function serializeList(list: SfMember[], options?: SfEncodeOptions): string {\n\tif (Array.isArray(list) === false) {\n\t\tthrow serializeError(list, LIST)\n\t}\n\n\tconst separator = options?.whitespace === false ? ',' : ', '\n\tlet output = ''\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tif (i > 0) {\n\t\t\toutput += separator\n\t\t}\n\t\toutput += serializeMember(list[i])\n\t}\n\n\treturn output\n}\n","import type { SfEncodeOptions } from './SfEncodeOptions.ts'\nimport type { SfMember } from './SfMember.ts'\nimport { serializeList } from './serialize/serializeList.ts'\n\n/**\n * Encode a structured field list to a string\n *\n * @param value - The structured field list to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @public\n */\nexport function encodeSfList(value: SfMember[], options?: SfEncodeOptions): string {\n\treturn serializeList(value, options)\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svta/cml-structured-field-values",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
4
4
|
"description": "RFC8941 Structured Field Values implementation",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -52,6 +52,6 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"@svta/cml-utils": "1.6.
|
|
55
|
+
"@svta/cml-utils": "^1.6.2"
|
|
56
56
|
}
|
|
57
57
|
}
|