@svta/cml-structured-field-values 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/index.d.ts +395 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +710 -13
- package/dist/index.js.map +1 -1
- package/package.json +5 -24
- package/NOTICE +0 -36
- package/dist/SfBareItem.d.ts +0 -9
- package/dist/SfBareItem.d.ts.map +0 -1
- package/dist/SfBareItem.js +0 -2
- package/dist/SfBareItem.js.map +0 -1
- package/dist/SfDecodeOptions.d.ts +0 -13
- package/dist/SfDecodeOptions.d.ts.map +0 -1
- package/dist/SfDecodeOptions.js +0 -2
- package/dist/SfDecodeOptions.js.map +0 -1
- package/dist/SfDictionary.d.ts +0 -9
- package/dist/SfDictionary.d.ts.map +0 -1
- package/dist/SfDictionary.js +0 -2
- package/dist/SfDictionary.js.map +0 -1
- package/dist/SfEncodeOptions.d.ts +0 -13
- package/dist/SfEncodeOptions.d.ts.map +0 -1
- package/dist/SfEncodeOptions.js +0 -2
- package/dist/SfEncodeOptions.js.map +0 -1
- package/dist/SfInnerList.d.ts +0 -14
- package/dist/SfInnerList.d.ts.map +0 -1
- package/dist/SfInnerList.js +0 -2
- package/dist/SfInnerList.js.map +0 -1
- package/dist/SfItem.d.ts +0 -14
- package/dist/SfItem.d.ts.map +0 -1
- package/dist/SfItem.js +0 -16
- package/dist/SfItem.js.map +0 -1
- package/dist/SfMember.d.ts +0 -11
- package/dist/SfMember.d.ts.map +0 -1
- package/dist/SfMember.js +0 -2
- package/dist/SfMember.js.map +0 -1
- package/dist/SfParameters.d.ts +0 -8
- package/dist/SfParameters.d.ts.map +0 -1
- package/dist/SfParameters.js +0 -2
- package/dist/SfParameters.js.map +0 -1
- package/dist/SfToken.d.ts +0 -11
- package/dist/SfToken.d.ts.map +0 -1
- package/dist/SfToken.js +0 -12
- package/dist/SfToken.js.map +0 -1
- package/dist/decodeSfDict.d.ts +0 -13
- package/dist/decodeSfDict.d.ts.map +0 -1
- package/dist/decodeSfDict.js +0 -25
- package/dist/decodeSfDict.js.map +0 -1
- package/dist/decodeSfItem.d.ts +0 -13
- package/dist/decodeSfItem.d.ts.map +0 -1
- package/dist/decodeSfItem.js +0 -46
- package/dist/decodeSfItem.js.map +0 -1
- package/dist/decodeSfList.d.ts +0 -13
- package/dist/decodeSfList.d.ts.map +0 -1
- package/dist/decodeSfList.js +0 -25
- package/dist/decodeSfList.js.map +0 -1
- package/dist/encodeSfDict.d.ts +0 -14
- package/dist/encodeSfDict.d.ts.map +0 -1
- package/dist/encodeSfDict.js +0 -16
- package/dist/encodeSfDict.js.map +0 -1
- package/dist/encodeSfItem.d.ts +0 -26
- package/dist/encodeSfItem.d.ts.map +0 -1
- package/dist/encodeSfItem.js +0 -9
- package/dist/encodeSfItem.js.map +0 -1
- package/dist/encodeSfList.d.ts +0 -15
- package/dist/encodeSfList.d.ts.map +0 -1
- package/dist/encodeSfList.js +0 -16
- package/dist/encodeSfList.js.map +0 -1
- package/dist/parse/ParsedValue.d.ts +0 -6
- package/dist/parse/ParsedValue.d.ts.map +0 -1
- package/dist/parse/ParsedValue.js +0 -4
- package/dist/parse/ParsedValue.js.map +0 -1
- package/dist/parse/index.d.ts +0 -22
- package/dist/parse/index.d.ts.map +0 -1
- package/dist/parse/index.js +0 -21
- package/dist/parse/index.js.map +0 -1
- package/dist/parse/parseBareItem.d.ts +0 -5
- package/dist/parse/parseBareItem.d.ts.map +0 -1
- package/dist/parse/parseBareItem.js +0 -59
- package/dist/parse/parseBareItem.js.map +0 -1
- package/dist/parse/parseBoolean.d.ts +0 -3
- package/dist/parse/parseBoolean.d.ts.map +0 -1
- package/dist/parse/parseBoolean.js +0 -34
- package/dist/parse/parseBoolean.js.map +0 -1
- package/dist/parse/parseByteSequence.d.ts +0 -3
- package/dist/parse/parseByteSequence.d.ts.map +0 -1
- package/dist/parse/parseByteSequence.js +0 -59
- package/dist/parse/parseByteSequence.js.map +0 -1
- package/dist/parse/parseDate.d.ts +0 -3
- package/dist/parse/parseDate.d.ts.map +0 -1
- package/dist/parse/parseDate.js +0 -32
- package/dist/parse/parseDate.js.map +0 -1
- package/dist/parse/parseDict.d.ts +0 -5
- package/dist/parse/parseDict.d.ts.map +0 -1
- package/dist/parse/parseDict.js +0 -90
- package/dist/parse/parseDict.js.map +0 -1
- package/dist/parse/parseError.d.ts +0 -2
- package/dist/parse/parseError.d.ts.map +0 -1
- package/dist/parse/parseError.js +0 -5
- package/dist/parse/parseError.js.map +0 -1
- package/dist/parse/parseInnerList.d.ts +0 -5
- package/dist/parse/parseInnerList.d.ts.map +0 -1
- package/dist/parse/parseInnerList.js +0 -62
- package/dist/parse/parseInnerList.js.map +0 -1
- package/dist/parse/parseIntegerOrDecimal.d.ts +0 -3
- package/dist/parse/parseIntegerOrDecimal.d.ts.map +0 -1
- package/dist/parse/parseIntegerOrDecimal.js +0 -123
- package/dist/parse/parseIntegerOrDecimal.js.map +0 -1
- package/dist/parse/parseItem.d.ts +0 -5
- package/dist/parse/parseItem.d.ts.map +0 -1
- package/dist/parse/parseItem.js +0 -25
- package/dist/parse/parseItem.js.map +0 -1
- package/dist/parse/parseItemOrInnerList.d.ts +0 -6
- package/dist/parse/parseItemOrInnerList.d.ts.map +0 -1
- package/dist/parse/parseItemOrInnerList.js +0 -22
- package/dist/parse/parseItemOrInnerList.js.map +0 -1
- package/dist/parse/parseKey.d.ts +0 -3
- package/dist/parse/parseKey.d.ts.map +0 -1
- package/dist/parse/parseKey.js +0 -40
- package/dist/parse/parseKey.js.map +0 -1
- package/dist/parse/parseList.d.ts +0 -5
- package/dist/parse/parseList.d.ts.map +0 -1
- package/dist/parse/parseList.js +0 -51
- package/dist/parse/parseList.js.map +0 -1
- package/dist/parse/parseParameters.d.ts +0 -5
- package/dist/parse/parseParameters.d.ts.map +0 -1
- package/dist/parse/parseParameters.js +0 -68
- package/dist/parse/parseParameters.js.map +0 -1
- package/dist/parse/parseString.d.ts +0 -3
- package/dist/parse/parseString.d.ts.map +0 -1
- package/dist/parse/parseString.js +0 -73
- package/dist/parse/parseString.js.map +0 -1
- package/dist/parse/parseToken.d.ts +0 -5
- package/dist/parse/parseToken.d.ts.map +0 -1
- package/dist/parse/parseToken.js +0 -35
- package/dist/parse/parseToken.js.map +0 -1
- package/dist/serialize/index.d.ts +0 -21
- package/dist/serialize/index.d.ts.map +0 -1
- package/dist/serialize/index.js +0 -21
- package/dist/serialize/index.js.map +0 -1
- package/dist/serialize/serializeBareItem.d.ts +0 -2
- package/dist/serialize/serializeBareItem.d.ts.map +0 -1
- package/dist/serialize/serializeBareItem.js +0 -69
- package/dist/serialize/serializeBareItem.js.map +0 -1
- package/dist/serialize/serializeBoolean.d.ts +0 -2
- package/dist/serialize/serializeBoolean.d.ts.map +0 -1
- package/dist/serialize/serializeBoolean.js +0 -25
- package/dist/serialize/serializeBoolean.js.map +0 -1
- package/dist/serialize/serializeByteSequence.d.ts +0 -2
- package/dist/serialize/serializeByteSequence.d.ts.map +0 -1
- package/dist/serialize/serializeByteSequence.js +0 -34
- package/dist/serialize/serializeByteSequence.js.map +0 -1
- package/dist/serialize/serializeDate.d.ts +0 -2
- package/dist/serialize/serializeDate.d.ts.map +0 -1
- package/dist/serialize/serializeDate.js +0 -13
- package/dist/serialize/serializeDate.js.map +0 -1
- package/dist/serialize/serializeDecimal.d.ts +0 -2
- package/dist/serialize/serializeDecimal.d.ts.map +0 -1
- package/dist/serialize/serializeDecimal.js +0 -46
- package/dist/serialize/serializeDecimal.js.map +0 -1
- package/dist/serialize/serializeDict.d.ts +0 -3
- package/dist/serialize/serializeDict.d.ts.map +0 -1
- package/dist/serialize/serializeDict.js +0 -74
- package/dist/serialize/serializeDict.js.map +0 -1
- package/dist/serialize/serializeError.d.ts +0 -2
- package/dist/serialize/serializeError.d.ts.map +0 -1
- package/dist/serialize/serializeError.js +0 -5
- package/dist/serialize/serializeError.js.map +0 -1
- package/dist/serialize/serializeInnerList.d.ts +0 -3
- package/dist/serialize/serializeInnerList.d.ts.map +0 -1
- package/dist/serialize/serializeInnerList.js +0 -28
- package/dist/serialize/serializeInnerList.js.map +0 -1
- package/dist/serialize/serializeInteger.d.ts +0 -2
- package/dist/serialize/serializeInteger.d.ts.map +0 -1
- package/dist/serialize/serializeInteger.js +0 -28
- package/dist/serialize/serializeInteger.js.map +0 -1
- package/dist/serialize/serializeItem.d.ts +0 -4
- package/dist/serialize/serializeItem.d.ts.map +0 -1
- package/dist/serialize/serializeItem.js +0 -26
- package/dist/serialize/serializeItem.js.map +0 -1
- package/dist/serialize/serializeKey.d.ts +0 -2
- package/dist/serialize/serializeKey.d.ts.map +0 -1
- package/dist/serialize/serializeKey.js +0 -28
- package/dist/serialize/serializeKey.js.map +0 -1
- package/dist/serialize/serializeList.d.ts +0 -4
- package/dist/serialize/serializeList.d.ts.map +0 -1
- package/dist/serialize/serializeList.js +0 -48
- package/dist/serialize/serializeList.js.map +0 -1
- package/dist/serialize/serializeParams.d.ts +0 -2
- package/dist/serialize/serializeParams.d.ts.map +0 -1
- package/dist/serialize/serializeParams.js +0 -40
- package/dist/serialize/serializeParams.js.map +0 -1
- package/dist/serialize/serializeString.d.ts +0 -2
- package/dist/serialize/serializeString.d.ts.map +0 -1
- package/dist/serialize/serializeString.js +0 -34
- package/dist/serialize/serializeString.js.map +0 -1
- package/dist/serialize/serializeToken.d.ts +0 -4
- package/dist/serialize/serializeToken.d.ts.map +0 -1
- package/dist/serialize/serializeToken.js +0 -11
- package/dist/serialize/serializeToken.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/BARE_ITEM.d.ts +0 -2
- package/dist/utils/BARE_ITEM.d.ts.map +0 -1
- package/dist/utils/BARE_ITEM.js +0 -2
- package/dist/utils/BARE_ITEM.js.map +0 -1
- package/dist/utils/BOOLEAN.d.ts +0 -2
- package/dist/utils/BOOLEAN.d.ts.map +0 -1
- package/dist/utils/BOOLEAN.js +0 -2
- package/dist/utils/BOOLEAN.js.map +0 -1
- package/dist/utils/BYTES.d.ts +0 -2
- package/dist/utils/BYTES.d.ts.map +0 -1
- package/dist/utils/BYTES.js +0 -2
- package/dist/utils/BYTES.js.map +0 -1
- package/dist/utils/DATE.d.ts +0 -2
- package/dist/utils/DATE.d.ts.map +0 -1
- package/dist/utils/DATE.js +0 -2
- package/dist/utils/DATE.js.map +0 -1
- package/dist/utils/DECIMAL.d.ts +0 -2
- package/dist/utils/DECIMAL.d.ts.map +0 -1
- package/dist/utils/DECIMAL.js +0 -2
- package/dist/utils/DECIMAL.js.map +0 -1
- package/dist/utils/DICT.d.ts +0 -2
- package/dist/utils/DICT.d.ts.map +0 -1
- package/dist/utils/DICT.js +0 -2
- package/dist/utils/DICT.js.map +0 -1
- package/dist/utils/INNER.d.ts +0 -2
- package/dist/utils/INNER.d.ts.map +0 -1
- package/dist/utils/INNER.js +0 -2
- package/dist/utils/INNER.js.map +0 -1
- package/dist/utils/INTEGER.d.ts +0 -2
- package/dist/utils/INTEGER.d.ts.map +0 -1
- package/dist/utils/INTEGER.js +0 -2
- package/dist/utils/INTEGER.js.map +0 -1
- package/dist/utils/INTEGER_DECIMAL.d.ts +0 -2
- package/dist/utils/INTEGER_DECIMAL.d.ts.map +0 -1
- package/dist/utils/INTEGER_DECIMAL.js +0 -4
- package/dist/utils/INTEGER_DECIMAL.js.map +0 -1
- package/dist/utils/ITEM.d.ts +0 -2
- package/dist/utils/ITEM.d.ts.map +0 -1
- package/dist/utils/ITEM.js +0 -2
- package/dist/utils/ITEM.js.map +0 -1
- package/dist/utils/KEY.d.ts +0 -2
- package/dist/utils/KEY.d.ts.map +0 -1
- package/dist/utils/KEY.js +0 -2
- package/dist/utils/KEY.js.map +0 -1
- package/dist/utils/LIST.d.ts +0 -2
- package/dist/utils/LIST.d.ts.map +0 -1
- package/dist/utils/LIST.js +0 -2
- package/dist/utils/LIST.js.map +0 -1
- package/dist/utils/STRING.d.ts +0 -2
- package/dist/utils/STRING.d.ts.map +0 -1
- package/dist/utils/STRING.js +0 -2
- package/dist/utils/STRING.js.map +0 -1
- package/dist/utils/STRING_REGEX.d.ts +0 -2
- package/dist/utils/STRING_REGEX.d.ts.map +0 -1
- package/dist/utils/STRING_REGEX.js +0 -2
- package/dist/utils/STRING_REGEX.js.map +0 -1
- package/dist/utils/TOKEN.d.ts +0 -2
- package/dist/utils/TOKEN.d.ts.map +0 -1
- package/dist/utils/TOKEN.js +0 -2
- package/dist/utils/TOKEN.js.map +0 -1
- package/dist/utils/index.d.ts +0 -10
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -10
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/isInvalidInt.d.ts +0 -2
- package/dist/utils/isInvalidInt.d.ts.map +0 -1
- package/dist/utils/isInvalidInt.js +0 -4
- package/dist/utils/isInvalidInt.js.map +0 -1
- package/dist/utils/symbolToStr.d.ts +0 -13
- package/dist/utils/symbolToStr.d.ts.map +0 -1
- package/dist/utils/symbolToStr.js +0 -14
- package/dist/utils/symbolToStr.js.map +0 -1
- package/dist/utils/throwError.d.ts +0 -2
- package/dist/utils/throwError.d.ts.map +0 -1
- package/dist/utils/throwError.js +0 -19
- package/dist/utils/throwError.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,15 +1,712 @@
|
|
|
1
|
+
import { decodeBase64, encodeBase64, roundToEven } from "@svta/cml-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/SfItem.ts
|
|
1
4
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
* Structured Field Item
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @beta
|
|
9
|
+
*/
|
|
10
|
+
var SfItem = class SfItem {
|
|
11
|
+
constructor(value, params) {
|
|
12
|
+
if (Array.isArray(value)) value = value.map((v) => v instanceof SfItem ? v : new SfItem(v));
|
|
13
|
+
this.value = value;
|
|
14
|
+
this.params = params;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/utils/DICT.ts
|
|
20
|
+
const DICT = "Dict";
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/parse/ParsedValue.ts
|
|
24
|
+
/**
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
function parsedValue(value, src) {
|
|
28
|
+
return {
|
|
29
|
+
value,
|
|
30
|
+
src
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/utils/throwError.ts
|
|
36
|
+
function format(value) {
|
|
37
|
+
if (Array.isArray(value)) return JSON.stringify(value);
|
|
38
|
+
if (value instanceof Map) return "Map{}";
|
|
39
|
+
if (value instanceof Set) return "Set{}";
|
|
40
|
+
if (typeof value === "object") return JSON.stringify(value);
|
|
41
|
+
return String(value);
|
|
42
|
+
}
|
|
43
|
+
function throwError(action, src, type, cause) {
|
|
44
|
+
return new Error(`failed to ${action} "${format(src)}" as ${type}`, { cause });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/parse/parseError.ts
|
|
49
|
+
/**
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
function parseError(src, type, cause) {
|
|
53
|
+
return throwError("parse", src, type, cause);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/utils/INNER.ts
|
|
58
|
+
const INNER = "Inner List";
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/utils/BARE_ITEM.ts
|
|
62
|
+
const BARE_ITEM = "Bare Item";
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
//#region src/utils/BOOLEAN.ts
|
|
66
|
+
const BOOLEAN = "Boolean";
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/parse/parseBoolean.ts
|
|
70
|
+
/**
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
function parseBoolean(src) {
|
|
74
|
+
let i = 0;
|
|
75
|
+
if (src[i] !== "?") throw parseError(src, BOOLEAN);
|
|
76
|
+
i++;
|
|
77
|
+
if (src[i] === "1") return parsedValue(true, src.substring(++i));
|
|
78
|
+
if (src[i] === "0") return parsedValue(false, src.substring(++i));
|
|
79
|
+
throw parseError(src, BOOLEAN);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/utils/BYTES.ts
|
|
84
|
+
const BYTES = "Byte Sequence";
|
|
85
|
+
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/parse/parseByteSequence.ts
|
|
88
|
+
/**
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
function parseByteSequence(src) {
|
|
92
|
+
if (src[0] !== ":") throw parseError(src, BYTES);
|
|
93
|
+
src = src.substring(1);
|
|
94
|
+
if (src.includes(":") === false) throw parseError(src, BYTES);
|
|
95
|
+
const re = /(^.*?)(:)/g;
|
|
96
|
+
const b64_content = re.exec(src)[1];
|
|
97
|
+
src = src.substring(re.lastIndex);
|
|
98
|
+
return parsedValue(decodeBase64(b64_content), src);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
//#endregion
|
|
102
|
+
//#region src/utils/DATE.ts
|
|
103
|
+
const DATE = "Date";
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region src/utils/DECIMAL.ts
|
|
107
|
+
const DECIMAL = "Decimal";
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/utils/INTEGER.ts
|
|
111
|
+
const INTEGER = "Integer";
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/utils/INTEGER_DECIMAL.ts
|
|
115
|
+
const INTEGER_DECIMAL = `${INTEGER} or ${DECIMAL}`;
|
|
116
|
+
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region src/utils/isInvalidInt.ts
|
|
119
|
+
function isInvalidInt(value) {
|
|
120
|
+
return value < -999999999999999 || 999999999999999 < value;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region src/parse/parseIntegerOrDecimal.ts
|
|
125
|
+
/**
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
128
|
+
function parseIntegerOrDecimal(src) {
|
|
129
|
+
const orig = src;
|
|
130
|
+
let sign = 1;
|
|
131
|
+
let num = "";
|
|
132
|
+
let value;
|
|
133
|
+
const i = 0;
|
|
134
|
+
const error = parseError(orig, INTEGER_DECIMAL);
|
|
135
|
+
if (src[i] === "-") {
|
|
136
|
+
sign = -1;
|
|
137
|
+
src = src.substring(1);
|
|
138
|
+
}
|
|
139
|
+
if (src.length <= 0) throw error;
|
|
140
|
+
const re_integer = /^(\d+)?/g;
|
|
141
|
+
const result_integer = re_integer.exec(src);
|
|
142
|
+
if (result_integer[0].length === 0) throw error;
|
|
143
|
+
num += result_integer[1];
|
|
144
|
+
src = src.substring(re_integer.lastIndex);
|
|
145
|
+
if (src[0] === ".") {
|
|
146
|
+
if (num.length > 12) throw error;
|
|
147
|
+
const re_decimal = /^(\.\d+)?/g;
|
|
148
|
+
const result_decimal = re_decimal.exec(src);
|
|
149
|
+
src = src.substring(re_decimal.lastIndex);
|
|
150
|
+
if (result_decimal[0].length === 0 || result_decimal[1].length > 4) throw error;
|
|
151
|
+
num += result_decimal[1];
|
|
152
|
+
if (num.length > 16) throw error;
|
|
153
|
+
value = parseFloat(num) * sign;
|
|
154
|
+
} else {
|
|
155
|
+
if (num.length > 15) throw error;
|
|
156
|
+
value = parseInt(num) * sign;
|
|
157
|
+
if (isInvalidInt(value)) throw parseError(num, INTEGER_DECIMAL);
|
|
158
|
+
}
|
|
159
|
+
return parsedValue(value, src);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/parse/parseDate.ts
|
|
164
|
+
/**
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
167
|
+
function parseDate(src) {
|
|
168
|
+
let i = 0;
|
|
169
|
+
if (src[i] !== "@") throw parseError(src, DATE);
|
|
170
|
+
i++;
|
|
171
|
+
const date = parseIntegerOrDecimal(src.substring(i));
|
|
172
|
+
if (Number.isInteger(date.value) === false) throw parseError(src, DATE);
|
|
173
|
+
return parsedValue(/* @__PURE__ */ new Date(date.value * 1e3), date.src);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
//#endregion
|
|
177
|
+
//#region src/utils/STRING.ts
|
|
178
|
+
const STRING = "String";
|
|
179
|
+
|
|
180
|
+
//#endregion
|
|
181
|
+
//#region src/utils/STRING_REGEX.ts
|
|
182
|
+
const STRING_REGEX = /[\x00-\x1f\x7f]+/;
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region src/parse/parseString.ts
|
|
186
|
+
/**
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
function parseString(src) {
|
|
190
|
+
let output = "";
|
|
191
|
+
let i = 0;
|
|
192
|
+
if (src[i] !== `"`) throw parseError(src, STRING);
|
|
193
|
+
i++;
|
|
194
|
+
while (src.length > i) {
|
|
195
|
+
if (src[i] === `\\`) {
|
|
196
|
+
if (src.length <= i + 1) throw parseError(src, STRING);
|
|
197
|
+
i++;
|
|
198
|
+
if (src[i] !== `"` && src[i] !== `\\`) throw parseError(src, STRING);
|
|
199
|
+
output += src[i];
|
|
200
|
+
} else if (src[i] === `"`) return parsedValue(output, src.substring(++i));
|
|
201
|
+
else if (STRING_REGEX.test(src[i])) throw parseError(src, STRING);
|
|
202
|
+
else output += src[i];
|
|
203
|
+
i++;
|
|
204
|
+
}
|
|
205
|
+
throw parseError(src, STRING);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
//#endregion
|
|
209
|
+
//#region src/SfToken.ts
|
|
210
|
+
/**
|
|
211
|
+
* A class to represent structured field tokens when `Symbol` is not available.
|
|
212
|
+
*
|
|
213
|
+
*
|
|
214
|
+
* @beta
|
|
215
|
+
*/
|
|
216
|
+
var SfToken = class {
|
|
217
|
+
constructor(description) {
|
|
218
|
+
this.description = description;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
//#endregion
|
|
223
|
+
//#region src/utils/TOKEN.ts
|
|
224
|
+
const TOKEN = "Token";
|
|
225
|
+
|
|
226
|
+
//#endregion
|
|
227
|
+
//#region src/parse/parseToken.ts
|
|
228
|
+
/**
|
|
229
|
+
* @internal
|
|
230
|
+
*/
|
|
231
|
+
function parseToken(src, options) {
|
|
232
|
+
if (/^[a-zA-Z*]$/.test(src[0]) === false) throw parseError(src, TOKEN);
|
|
233
|
+
const re = /^([!#$%&'*+\-.^_`|~\w:/]+)/g;
|
|
234
|
+
const value = re.exec(src)[1];
|
|
235
|
+
src = src.substring(re.lastIndex);
|
|
236
|
+
return parsedValue(options?.useSymbol === false ? new SfToken(value) : Symbol.for(value), src);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/parse/parseBareItem.ts
|
|
241
|
+
/**
|
|
242
|
+
* @internal
|
|
243
|
+
*/
|
|
244
|
+
function parseBareItem(src, options) {
|
|
245
|
+
const first = src[0];
|
|
246
|
+
if (first === `"`) return parseString(src);
|
|
247
|
+
if (/^[-0-9]/.test(first)) return parseIntegerOrDecimal(src);
|
|
248
|
+
if (first === `?`) return parseBoolean(src);
|
|
249
|
+
if (first === `:`) return parseByteSequence(src);
|
|
250
|
+
if (/^[a-zA-Z*]/.test(first)) return parseToken(src, options);
|
|
251
|
+
if (first === `@`) return parseDate(src);
|
|
252
|
+
throw parseError(src, BARE_ITEM);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region src/utils/KEY.ts
|
|
257
|
+
const KEY = "Key";
|
|
258
|
+
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region src/parse/parseKey.ts
|
|
261
|
+
/**
|
|
262
|
+
* @internal
|
|
263
|
+
*/
|
|
264
|
+
function parseKey(src) {
|
|
265
|
+
let i = 0;
|
|
266
|
+
if (/^[a-z*]$/.test(src[i]) === false) throw parseError(src, KEY);
|
|
267
|
+
let value = "";
|
|
268
|
+
while (src.length > i) {
|
|
269
|
+
if (/^[a-z0-9_\-.*]$/.test(src[i]) === false) return parsedValue(value, src.substring(i));
|
|
270
|
+
value += src[i];
|
|
271
|
+
i++;
|
|
272
|
+
}
|
|
273
|
+
return parsedValue(value, src.substring(i));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region src/parse/parseParameters.ts
|
|
278
|
+
/**
|
|
279
|
+
* @internal
|
|
280
|
+
*/
|
|
281
|
+
function parseParameters(src, options) {
|
|
282
|
+
let parameters = void 0;
|
|
283
|
+
while (src.length > 0) {
|
|
284
|
+
if (src[0] !== ";") break;
|
|
285
|
+
src = src.substring(1).trim();
|
|
286
|
+
const parsedKey = parseKey(src);
|
|
287
|
+
const key = parsedKey.value;
|
|
288
|
+
let value = true;
|
|
289
|
+
src = parsedKey.src;
|
|
290
|
+
if (src[0] === "=") {
|
|
291
|
+
src = src.substring(1);
|
|
292
|
+
const parsedBareItem = parseBareItem(src, options);
|
|
293
|
+
value = parsedBareItem.value;
|
|
294
|
+
src = parsedBareItem.src;
|
|
295
|
+
}
|
|
296
|
+
if (parameters == null) parameters = {};
|
|
297
|
+
parameters[key] = value;
|
|
298
|
+
}
|
|
299
|
+
return parsedValue(parameters, src);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
//#endregion
|
|
303
|
+
//#region src/parse/parseItem.ts
|
|
304
|
+
/**
|
|
305
|
+
* @internal
|
|
306
|
+
*/
|
|
307
|
+
function parseItem(src, options) {
|
|
308
|
+
const parsedBareItem = parseBareItem(src, options);
|
|
309
|
+
src = parsedBareItem.src;
|
|
310
|
+
const parsedParameters = parseParameters(src, options);
|
|
311
|
+
src = parsedParameters.src;
|
|
312
|
+
return parsedValue(new SfItem(parsedBareItem.value, parsedParameters.value), src);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
//#endregion
|
|
316
|
+
//#region src/parse/parseInnerList.ts
|
|
317
|
+
/**
|
|
318
|
+
* @internal
|
|
319
|
+
*/
|
|
320
|
+
function parseInnerList(src, options) {
|
|
321
|
+
if (src[0] !== "(") throw parseError(src, INNER);
|
|
322
|
+
src = src.substring(1);
|
|
323
|
+
const innerList = [];
|
|
324
|
+
while (src.length > 0) {
|
|
325
|
+
src = src.trim();
|
|
326
|
+
if (src[0] === ")") {
|
|
327
|
+
src = src.substring(1);
|
|
328
|
+
const parsedParameters = parseParameters(src, options);
|
|
329
|
+
return parsedValue(new SfItem(innerList, parsedParameters.value), parsedParameters.src);
|
|
330
|
+
}
|
|
331
|
+
const parsedItem = parseItem(src, options);
|
|
332
|
+
innerList.push(parsedItem.value);
|
|
333
|
+
src = parsedItem.src;
|
|
334
|
+
if (src[0] !== " " && src[0] !== ")") throw parseError(src, INNER);
|
|
335
|
+
}
|
|
336
|
+
throw parseError(src, INNER);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
//#endregion
|
|
340
|
+
//#region src/parse/parseItemOrInnerList.ts
|
|
341
|
+
/**
|
|
342
|
+
* @internal
|
|
343
|
+
*/
|
|
344
|
+
function parseItemOrInnerList(src, options) {
|
|
345
|
+
if (src[0] === "(") return parseInnerList(src, options);
|
|
346
|
+
return parseItem(src, options);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
//#endregion
|
|
350
|
+
//#region src/parse/parseDict.ts
|
|
351
|
+
/**
|
|
352
|
+
* @internal
|
|
353
|
+
*/
|
|
354
|
+
function parseDict(src, options) {
|
|
355
|
+
const value = {};
|
|
356
|
+
while (src.length > 0) {
|
|
357
|
+
let member;
|
|
358
|
+
const parsedKey = parseKey(src);
|
|
359
|
+
const key = parsedKey.value;
|
|
360
|
+
src = parsedKey.src;
|
|
361
|
+
if (src[0] === "=") {
|
|
362
|
+
const parsedItemOrInnerList = parseItemOrInnerList(src.substring(1), options);
|
|
363
|
+
member = parsedItemOrInnerList.value;
|
|
364
|
+
src = parsedItemOrInnerList.src;
|
|
365
|
+
} else {
|
|
366
|
+
const parsedParameters = parseParameters(src, options);
|
|
367
|
+
member = new SfItem(true, parsedParameters.value);
|
|
368
|
+
src = parsedParameters.src;
|
|
369
|
+
}
|
|
370
|
+
value[key] = member;
|
|
371
|
+
src = src.trim();
|
|
372
|
+
if (src.length === 0) return parsedValue(value, src);
|
|
373
|
+
if (src[0] !== ",") throw parseError(src, DICT);
|
|
374
|
+
src = src.substring(1).trim();
|
|
375
|
+
if (src.length === 0 || src[0] === ",") throw parseError(src, DICT);
|
|
376
|
+
}
|
|
377
|
+
return parsedValue(value, src);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
//#endregion
|
|
381
|
+
//#region src/decodeSfDict.ts
|
|
382
|
+
/**
|
|
383
|
+
* Decode a structured field string into a structured field dictionary
|
|
384
|
+
*
|
|
385
|
+
* @param input - The structured field string to decode
|
|
386
|
+
* @returns The structured field dictionary
|
|
387
|
+
*
|
|
388
|
+
*
|
|
389
|
+
* @beta
|
|
390
|
+
*/
|
|
391
|
+
function decodeSfDict(input, options) {
|
|
392
|
+
try {
|
|
393
|
+
const { src, value } = parseDict(input.trim(), options);
|
|
394
|
+
if (src !== "") throw parseError(src, DICT);
|
|
395
|
+
return value;
|
|
396
|
+
} catch (cause) {
|
|
397
|
+
throw parseError(input, DICT, cause);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
//#endregion
|
|
402
|
+
//#region src/utils/ITEM.ts
|
|
403
|
+
const ITEM = "Item";
|
|
404
|
+
|
|
405
|
+
//#endregion
|
|
406
|
+
//#region src/decodeSfItem.ts
|
|
407
|
+
/**
|
|
408
|
+
* Decode a structured field string into a structured field item
|
|
409
|
+
*
|
|
410
|
+
* @param input - The structured field string to decode
|
|
411
|
+
* @returns The structured field item
|
|
412
|
+
*
|
|
413
|
+
*
|
|
414
|
+
* @beta
|
|
415
|
+
*/
|
|
416
|
+
function decodeSfItem(input, options) {
|
|
417
|
+
try {
|
|
418
|
+
const { src, value } = parseItem(input.trim(), options);
|
|
419
|
+
if (src !== "") throw parseError(src, ITEM);
|
|
420
|
+
return value;
|
|
421
|
+
} catch (cause) {
|
|
422
|
+
throw parseError(input, ITEM, cause);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
//#endregion
|
|
427
|
+
//#region src/utils/LIST.ts
|
|
428
|
+
const LIST = "List";
|
|
429
|
+
|
|
430
|
+
//#endregion
|
|
431
|
+
//#region src/parse/parseList.ts
|
|
432
|
+
/**
|
|
433
|
+
* @internal
|
|
434
|
+
*/
|
|
435
|
+
function parseList(src, options) {
|
|
436
|
+
const value = [];
|
|
437
|
+
while (src.length > 0) {
|
|
438
|
+
const parsedItemOrInnerList = parseItemOrInnerList(src, options);
|
|
439
|
+
value.push(parsedItemOrInnerList.value);
|
|
440
|
+
src = parsedItemOrInnerList.src.trim();
|
|
441
|
+
if (src.length === 0) return parsedValue(value, src);
|
|
442
|
+
if (src[0] !== ",") throw parseError(src, LIST);
|
|
443
|
+
src = src.substring(1).trim();
|
|
444
|
+
if (src.length === 0 || src[0] === ",") throw parseError(src, LIST);
|
|
445
|
+
}
|
|
446
|
+
return parsedValue(value, src);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
//#endregion
|
|
450
|
+
//#region src/decodeSfList.ts
|
|
451
|
+
/**
|
|
452
|
+
* Decode a structured field string into a structured field list
|
|
453
|
+
*
|
|
454
|
+
* @param input - The structured field string to decode
|
|
455
|
+
* @returns The structured field list
|
|
456
|
+
*
|
|
457
|
+
*
|
|
458
|
+
* @beta
|
|
459
|
+
*/
|
|
460
|
+
function decodeSfList(input, options) {
|
|
461
|
+
try {
|
|
462
|
+
const { src, value } = parseList(input.trim(), options);
|
|
463
|
+
if (src !== "") throw parseError(src, LIST);
|
|
464
|
+
return value;
|
|
465
|
+
} catch (cause) {
|
|
466
|
+
throw parseError(input, LIST, cause);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
//#endregion
|
|
471
|
+
//#region src/serialize/serializeError.ts
|
|
472
|
+
/**
|
|
473
|
+
* @internal
|
|
474
|
+
*/
|
|
475
|
+
function serializeError(src, type, cause) {
|
|
476
|
+
return throwError("serialize", src, type, cause);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
//#endregion
|
|
480
|
+
//#region src/serialize/serializeBoolean.ts
|
|
481
|
+
/**
|
|
482
|
+
* @internal
|
|
483
|
+
*/
|
|
484
|
+
function serializeBoolean(value) {
|
|
485
|
+
if (typeof value !== "boolean") throw serializeError(value, BOOLEAN);
|
|
486
|
+
return value ? "?1" : "?0";
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/serialize/serializeByteSequence.ts
|
|
491
|
+
/**
|
|
492
|
+
* @internal
|
|
493
|
+
*/
|
|
494
|
+
function serializeByteSequence(value) {
|
|
495
|
+
if (ArrayBuffer.isView(value) === false) throw serializeError(value, BYTES);
|
|
496
|
+
return `:${encodeBase64(value)}:`;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
//#endregion
|
|
500
|
+
//#region src/serialize/serializeInteger.ts
|
|
501
|
+
/**
|
|
502
|
+
* @internal
|
|
503
|
+
*/
|
|
504
|
+
function serializeInteger(value) {
|
|
505
|
+
if (isInvalidInt(value)) throw serializeError(value, INTEGER);
|
|
506
|
+
return value.toString();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
//#endregion
|
|
510
|
+
//#region src/serialize/serializeDate.ts
|
|
511
|
+
/**
|
|
512
|
+
* @internal
|
|
513
|
+
*/
|
|
514
|
+
function serializeDate(value) {
|
|
515
|
+
return `@${serializeInteger(value.getTime() / 1e3)}`;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
//#endregion
|
|
519
|
+
//#region src/serialize/serializeDecimal.ts
|
|
520
|
+
/**
|
|
521
|
+
* @internal
|
|
522
|
+
*/
|
|
523
|
+
function serializeDecimal(value) {
|
|
524
|
+
const roundedValue = roundToEven(value, 3);
|
|
525
|
+
if (Math.floor(Math.abs(roundedValue)).toString().length > 12) throw serializeError(value, DECIMAL);
|
|
526
|
+
const stringValue = roundedValue.toString();
|
|
527
|
+
return stringValue.includes(".") ? stringValue : `${stringValue}.0`;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
//#endregion
|
|
531
|
+
//#region src/serialize/serializeString.ts
|
|
532
|
+
/**
|
|
533
|
+
* @internal
|
|
534
|
+
*/
|
|
535
|
+
function serializeString(value) {
|
|
536
|
+
if (STRING_REGEX.test(value)) throw serializeError(value, STRING);
|
|
537
|
+
return `"${value.replace(/\\/g, `\\\\`).replace(/"/g, `\\"`)}"`;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
//#endregion
|
|
541
|
+
//#region src/utils/symbolToStr.ts
|
|
542
|
+
/**
|
|
543
|
+
* Converts a symbol to a string.
|
|
544
|
+
*
|
|
545
|
+
* @param symbol - The symbol to convert.
|
|
546
|
+
*
|
|
547
|
+
* @returns The string representation of the symbol.
|
|
548
|
+
*
|
|
549
|
+
*
|
|
550
|
+
* @beta
|
|
551
|
+
*/
|
|
552
|
+
function symbolToStr(symbol) {
|
|
553
|
+
return symbol.description || symbol.toString().slice(7, -1);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
//#endregion
|
|
557
|
+
//#region src/serialize/serializeToken.ts
|
|
558
|
+
/**
|
|
559
|
+
* @internal
|
|
560
|
+
*/
|
|
561
|
+
function serializeToken(token) {
|
|
562
|
+
const value = symbolToStr(token);
|
|
563
|
+
if (/^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(value) === false) throw serializeError(value, TOKEN);
|
|
564
|
+
return value;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
//#endregion
|
|
568
|
+
//#region src/serialize/serializeBareItem.ts
|
|
569
|
+
/**
|
|
570
|
+
* @internal
|
|
571
|
+
*/
|
|
572
|
+
function serializeBareItem(value) {
|
|
573
|
+
switch (typeof value) {
|
|
574
|
+
case "number":
|
|
575
|
+
if (!Number.isFinite(value)) throw serializeError(value, BARE_ITEM);
|
|
576
|
+
if (Number.isInteger(value)) return serializeInteger(value);
|
|
577
|
+
return serializeDecimal(value);
|
|
578
|
+
case "string": return serializeString(value);
|
|
579
|
+
case "symbol": return serializeToken(value);
|
|
580
|
+
case "boolean": return serializeBoolean(value);
|
|
581
|
+
case "object":
|
|
582
|
+
if (value instanceof Date) return serializeDate(value);
|
|
583
|
+
if (value instanceof Uint8Array) return serializeByteSequence(value);
|
|
584
|
+
if (value instanceof SfToken) return serializeToken(value);
|
|
585
|
+
default: throw serializeError(value, BARE_ITEM);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
//#endregion
|
|
590
|
+
//#region src/serialize/serializeKey.ts
|
|
591
|
+
/**
|
|
592
|
+
* @internal
|
|
593
|
+
*/
|
|
594
|
+
function serializeKey(value) {
|
|
595
|
+
if (/^[a-z*][a-z0-9\-_.*]*$/.test(value) === false) throw serializeError(value, KEY);
|
|
596
|
+
return value;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
//#endregion
|
|
600
|
+
//#region src/serialize/serializeParams.ts
|
|
601
|
+
/**
|
|
602
|
+
* @internal
|
|
603
|
+
*/
|
|
604
|
+
function serializeParams(params) {
|
|
605
|
+
if (params == null) return "";
|
|
606
|
+
return Object.entries(params).map(([key, value]) => {
|
|
607
|
+
if (value === true) return `;${serializeKey(key)}`;
|
|
608
|
+
return `;${serializeKey(key)}=${serializeBareItem(value)}`;
|
|
609
|
+
}).join("");
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
//#endregion
|
|
613
|
+
//#region src/serialize/serializeItem.ts
|
|
614
|
+
/**
|
|
615
|
+
* @internal
|
|
616
|
+
*/
|
|
617
|
+
function serializeItem(value) {
|
|
618
|
+
if (value instanceof SfItem) return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;
|
|
619
|
+
else return serializeBareItem(value);
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
//#endregion
|
|
623
|
+
//#region src/serialize/serializeInnerList.ts
|
|
624
|
+
/**
|
|
625
|
+
* @internal
|
|
626
|
+
*/
|
|
627
|
+
function serializeInnerList(value) {
|
|
628
|
+
return `(${value.value.map(serializeItem).join(" ")})${serializeParams(value.params)}`;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
//#endregion
|
|
632
|
+
//#region src/serialize/serializeDict.ts
|
|
633
|
+
/**
|
|
634
|
+
* @internal
|
|
635
|
+
*/
|
|
636
|
+
function serializeDict(dict, options = { whitespace: true }) {
|
|
637
|
+
if (typeof dict !== "object" || dict == null) throw serializeError(dict, DICT);
|
|
638
|
+
const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);
|
|
639
|
+
const optionalWhiteSpace = options?.whitespace ? " " : "";
|
|
640
|
+
return Array.from(entries).map(([key, item]) => {
|
|
641
|
+
if (item instanceof SfItem === false) item = new SfItem(item);
|
|
642
|
+
let output = serializeKey(key);
|
|
643
|
+
if (item.value === true) output += serializeParams(item.params);
|
|
644
|
+
else {
|
|
645
|
+
output += "=";
|
|
646
|
+
if (Array.isArray(item.value)) output += serializeInnerList(item);
|
|
647
|
+
else output += serializeItem(item);
|
|
648
|
+
}
|
|
649
|
+
return output;
|
|
650
|
+
}).join(`,${optionalWhiteSpace}`);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
//#endregion
|
|
654
|
+
//#region src/encodeSfDict.ts
|
|
655
|
+
/**
|
|
656
|
+
* Encode an object into a structured field dictionary
|
|
657
|
+
*
|
|
658
|
+
* @param value - The structured field dictionary to encode
|
|
659
|
+
* @param options - Encoding options
|
|
660
|
+
*
|
|
661
|
+
* @returns The structured field string
|
|
662
|
+
*
|
|
663
|
+
*
|
|
664
|
+
* @beta
|
|
665
|
+
*/
|
|
666
|
+
function encodeSfDict(value, options) {
|
|
667
|
+
return serializeDict(value, options);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
//#endregion
|
|
671
|
+
//#region src/encodeSfItem.ts
|
|
672
|
+
function encodeSfItem(value, params) {
|
|
673
|
+
if (!(value instanceof SfItem)) value = new SfItem(value, params);
|
|
674
|
+
return serializeItem(value);
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
//#endregion
|
|
678
|
+
//#region src/serialize/serializeList.ts
|
|
679
|
+
/**
|
|
680
|
+
* @internal
|
|
681
|
+
*/
|
|
682
|
+
function serializeList(list, options = { whitespace: true }) {
|
|
683
|
+
if (Array.isArray(list) === false) throw serializeError(list, LIST);
|
|
684
|
+
const optionalWhiteSpace = options?.whitespace ? " " : "";
|
|
685
|
+
return list.map((item) => {
|
|
686
|
+
if (item instanceof SfItem === false) item = new SfItem(item);
|
|
687
|
+
const i = item;
|
|
688
|
+
if (Array.isArray(i.value)) return serializeInnerList(i);
|
|
689
|
+
return serializeItem(i);
|
|
690
|
+
}).join(`,${optionalWhiteSpace}`);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
//#endregion
|
|
694
|
+
//#region src/encodeSfList.ts
|
|
695
|
+
/**
|
|
696
|
+
* Encode a list into a structured field dictionary
|
|
697
|
+
*
|
|
698
|
+
* @param value - The structured field list to encode
|
|
699
|
+
* @param options - Encoding options
|
|
700
|
+
*
|
|
701
|
+
* @returns The structured field string
|
|
702
|
+
*
|
|
703
|
+
*
|
|
704
|
+
* @beta
|
|
705
|
+
*/
|
|
706
|
+
function encodeSfList(value, options) {
|
|
707
|
+
return serializeList(value, options);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
//#endregion
|
|
711
|
+
export { SfItem, SfToken, decodeSfDict, decodeSfItem, decodeSfList, encodeSfDict, encodeSfItem, encodeSfList, parseBareItem, parseBoolean, parseByteSequence, parseDate, parseDict, parseError, parseInnerList, parseIntegerOrDecimal, parseItem, parseItemOrInnerList, parseKey, parseList, parseParameters, parseString, parseToken, serializeBareItem, serializeBoolean, serializeByteSequence, serializeDate, serializeDecimal, serializeDict, serializeError, serializeInnerList, serializeInteger, serializeItem, serializeKey, serializeList, serializeParams, serializeString, serializeToken, symbolToStr };
|
|
15
712
|
//# sourceMappingURL=index.js.map
|