@inventreedb/ui 0.0.2 → 0.0.3

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/README.md +18 -7
  3. package/dist/.vite/manifest.json +125 -0
  4. package/dist/_virtual/errors.js +5 -0
  5. package/dist/_virtual/errors.js.map +1 -0
  6. package/dist/_virtual/index.js +6 -0
  7. package/dist/_virtual/index.js.map +1 -0
  8. package/dist/_virtual/index2.js +5 -0
  9. package/dist/_virtual/index2.js.map +1 -0
  10. package/dist/_virtual/lexer.js +5 -0
  11. package/dist/_virtual/lexer.js.map +1 -0
  12. package/dist/_virtual/moo.js +5 -0
  13. package/dist/_virtual/moo.js.map +1 -0
  14. package/dist/_virtual/parser.js +6 -0
  15. package/dist/_virtual/parser.js.map +1 -0
  16. package/dist/_virtual/parser2.js +5 -0
  17. package/dist/_virtual/parser2.js.map +1 -0
  18. package/dist/enums/ModelInformation.d.ts +20 -0
  19. package/dist/enums/ModelInformation.js +590 -0
  20. package/dist/enums/ModelInformation.js.map +1 -0
  21. package/dist/functions/Events.d.ts +1 -0
  22. package/dist/functions/Events.js +10 -0
  23. package/dist/functions/Events.js.map +1 -0
  24. package/dist/functions/Navigation.d.ts +8 -0
  25. package/dist/functions/Navigation.js +38 -0
  26. package/dist/functions/Navigation.js.map +1 -0
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +5 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/node_modules/@lingui/core/dist/index.js +405 -0
  31. package/dist/node_modules/@lingui/core/dist/index.js.map +1 -0
  32. package/dist/node_modules/@lingui/message-utils/dist/compileMessage.js +326 -0
  33. package/dist/node_modules/@lingui/message-utils/dist/compileMessage.js.map +1 -0
  34. package/dist/node_modules/@messageformat/parser/lib/lexer.js +74 -0
  35. package/dist/node_modules/@messageformat/parser/lib/lexer.js.map +1 -0
  36. package/dist/node_modules/@messageformat/parser/lib/parser.js +223 -0
  37. package/dist/node_modules/@messageformat/parser/lib/parser.js.map +1 -0
  38. package/dist/node_modules/moo/moo.js +539 -0
  39. package/dist/node_modules/moo/moo.js.map +1 -0
  40. package/dist/node_modules/unraw/dist/errors.js +39 -0
  41. package/dist/node_modules/unraw/dist/errors.js.map +1 -0
  42. package/dist/node_modules/unraw/dist/index.js +112 -0
  43. package/dist/node_modules/unraw/dist/index.js.map +1 -0
  44. package/dist/types/Icons.d.ts +5 -0
  45. package/dist/types/Plugins.js +1 -1
  46. package/lib/enums/ModelInformation.tsx +279 -0
  47. package/lib/functions/Events.tsx +6 -0
  48. package/lib/functions/Navigation.tsx +58 -0
  49. package/lib/index.ts +6 -0
  50. package/lib/types/Icons.tsx +9 -0
  51. package/package.json +1 -1
@@ -0,0 +1,326 @@
1
+ import { p as parserExports } from "../../../../_virtual/parser.js";
2
+ class DateFormatError extends Error {
3
+ /** @internal */
4
+ constructor(msg, token, type) {
5
+ super(msg);
6
+ this.token = token;
7
+ this.type = type || "error";
8
+ }
9
+ }
10
+ const alpha = (width) => width < 4 ? "short" : width === 4 ? "long" : "narrow";
11
+ const numeric = (width) => width % 2 === 0 ? "2-digit" : "numeric";
12
+ function yearOptions(token, onError) {
13
+ switch (token.char) {
14
+ case "y":
15
+ return { year: numeric(token.width) };
16
+ case "r":
17
+ return { calendar: "gregory", year: "numeric" };
18
+ case "u":
19
+ case "U":
20
+ case "Y":
21
+ default:
22
+ onError(`${token.desc} is not supported; falling back to year:numeric`, DateFormatError.WARNING);
23
+ return { year: "numeric" };
24
+ }
25
+ }
26
+ function monthStyle(token, onError) {
27
+ switch (token.width) {
28
+ case 1:
29
+ return "numeric";
30
+ case 2:
31
+ return "2-digit";
32
+ case 3:
33
+ return "short";
34
+ case 4:
35
+ return "long";
36
+ case 5:
37
+ return "narrow";
38
+ default:
39
+ onError(`${token.desc} is not supported with width ${token.width}`);
40
+ return void 0;
41
+ }
42
+ }
43
+ function dayStyle(token, onError) {
44
+ const { char, desc, width } = token;
45
+ if (char === "d") {
46
+ return numeric(width);
47
+ } else {
48
+ onError(`${desc} is not supported`);
49
+ return void 0;
50
+ }
51
+ }
52
+ function weekdayStyle(token, onError) {
53
+ const { char, desc, width } = token;
54
+ if ((char === "c" || char === "e") && width < 3) {
55
+ const msg = `Numeric value is not supported for ${desc}; falling back to weekday:short`;
56
+ onError(msg, DateFormatError.WARNING);
57
+ }
58
+ return alpha(width);
59
+ }
60
+ function hourOptions(token) {
61
+ const hour = numeric(token.width);
62
+ let hourCycle;
63
+ switch (token.char) {
64
+ case "h":
65
+ hourCycle = "h12";
66
+ break;
67
+ case "H":
68
+ hourCycle = "h23";
69
+ break;
70
+ case "k":
71
+ hourCycle = "h24";
72
+ break;
73
+ case "K":
74
+ hourCycle = "h11";
75
+ break;
76
+ }
77
+ return hourCycle ? { hour, hourCycle } : { hour };
78
+ }
79
+ function timeZoneNameStyle(token, onError) {
80
+ const { char, desc, width } = token;
81
+ switch (char) {
82
+ case "v":
83
+ case "z":
84
+ return width === 4 ? "long" : "short";
85
+ case "V":
86
+ if (width === 4)
87
+ return "long";
88
+ onError(`${desc} is not supported with width ${width}`);
89
+ return void 0;
90
+ case "X":
91
+ onError(`${desc} is not supported`);
92
+ return void 0;
93
+ }
94
+ return "short";
95
+ }
96
+ function compileOptions(token, onError) {
97
+ switch (token.field) {
98
+ case "era":
99
+ return { era: alpha(token.width) };
100
+ case "year":
101
+ return yearOptions(token, onError);
102
+ case "month":
103
+ return { month: monthStyle(token, onError) };
104
+ case "day":
105
+ return { day: dayStyle(token, onError) };
106
+ case "weekday":
107
+ return { weekday: weekdayStyle(token, onError) };
108
+ case "period":
109
+ return void 0;
110
+ case "hour":
111
+ return hourOptions(token);
112
+ case "min":
113
+ return { minute: numeric(token.width) };
114
+ case "sec":
115
+ return { second: numeric(token.width) };
116
+ case "tz":
117
+ return { timeZoneName: timeZoneNameStyle(token, onError) };
118
+ case "quarter":
119
+ case "week":
120
+ case "sec-frac":
121
+ case "ms":
122
+ onError(`${token.desc} is not supported`);
123
+ }
124
+ return void 0;
125
+ }
126
+ function getDateFormatOptions(tokens, timeZone, onError = (error) => {
127
+ throw error;
128
+ }) {
129
+ const options = {
130
+ timeZone
131
+ };
132
+ const fields2 = [];
133
+ for (const token of tokens) {
134
+ const { error, field, str } = token;
135
+ if (error) {
136
+ const dte = new DateFormatError(error.message, token);
137
+ dte.stack = error.stack;
138
+ onError(dte);
139
+ }
140
+ if (str) {
141
+ const msg = `Ignoring string part: ${str}`;
142
+ onError(new DateFormatError(msg, token, DateFormatError.WARNING));
143
+ }
144
+ if (field) {
145
+ if (fields2.indexOf(field) === -1)
146
+ fields2.push(field);
147
+ else
148
+ onError(new DateFormatError(`Duplicate ${field} token`, token));
149
+ }
150
+ const opt = compileOptions(token, (msg, isWarning) => onError(new DateFormatError(msg, token, isWarning)));
151
+ if (opt)
152
+ Object.assign(options, opt);
153
+ }
154
+ return options;
155
+ }
156
+ const fields = {
157
+ G: { field: "era", desc: "Era" },
158
+ y: { field: "year", desc: "Year" },
159
+ Y: { field: "year", desc: 'Year of "Week of Year"' },
160
+ u: { field: "year", desc: "Extended year" },
161
+ U: { field: "year", desc: "Cyclic year name" },
162
+ r: { field: "year", desc: "Related Gregorian year" },
163
+ Q: { field: "quarter", desc: "Quarter" },
164
+ q: { field: "quarter", desc: "Stand-alone quarter" },
165
+ M: { field: "month", desc: "Month in year" },
166
+ L: { field: "month", desc: "Stand-alone month in year" },
167
+ w: { field: "week", desc: "Week of year" },
168
+ W: { field: "week", desc: "Week of month" },
169
+ d: { field: "day", desc: "Day in month" },
170
+ D: { field: "day", desc: "Day of year" },
171
+ F: { field: "day", desc: "Day of week in month" },
172
+ g: { field: "day", desc: "Modified julian day" },
173
+ E: { field: "weekday", desc: "Day of week" },
174
+ e: { field: "weekday", desc: "Local day of week" },
175
+ c: { field: "weekday", desc: "Stand-alone local day of week" },
176
+ a: { field: "period", desc: "AM/PM marker" },
177
+ b: { field: "period", desc: "AM/PM/noon/midnight marker" },
178
+ B: { field: "period", desc: "Flexible day period" },
179
+ h: { field: "hour", desc: "Hour in AM/PM (1~12)" },
180
+ H: { field: "hour", desc: "Hour in day (0~23)" },
181
+ k: { field: "hour", desc: "Hour in day (1~24)" },
182
+ K: { field: "hour", desc: "Hour in AM/PM (0~11)" },
183
+ j: { field: "hour", desc: "Hour in preferred cycle" },
184
+ J: { field: "hour", desc: "Hour in preferred cycle without marker" },
185
+ C: { field: "hour", desc: "Hour in preferred cycle with flexible marker" },
186
+ m: { field: "min", desc: "Minute in hour" },
187
+ s: { field: "sec", desc: "Second in minute" },
188
+ S: { field: "sec-frac", desc: "Fractional second" },
189
+ A: { field: "ms", desc: "Milliseconds in day" },
190
+ z: { field: "tz", desc: "Time Zone: specific non-location" },
191
+ Z: { field: "tz", desc: "Time Zone" },
192
+ O: { field: "tz", desc: "Time Zone: localized" },
193
+ v: { field: "tz", desc: "Time Zone: generic non-location" },
194
+ V: { field: "tz", desc: "Time Zone: ID" },
195
+ X: { field: "tz", desc: "Time Zone: ISO8601 with Z" },
196
+ x: { field: "tz", desc: "Time Zone: ISO8601" }
197
+ };
198
+ const isLetter = (char) => char >= "A" && char <= "Z" || char >= "a" && char <= "z";
199
+ function readFieldToken(src, pos) {
200
+ const char = src[pos];
201
+ let width = 1;
202
+ while (src[++pos] === char)
203
+ ++width;
204
+ const field = fields[char];
205
+ if (!field) {
206
+ const msg = `The letter ${char} is not a valid field identifier`;
207
+ return { char, error: new Error(msg), width };
208
+ }
209
+ return { char, field: field.field, desc: field.desc, width };
210
+ }
211
+ function readQuotedToken(src, pos) {
212
+ let str = src[++pos];
213
+ let width = 2;
214
+ if (str === "'")
215
+ return { char: "'", str, width };
216
+ while (true) {
217
+ const next = src[++pos];
218
+ ++width;
219
+ if (next === void 0) {
220
+ const msg = `Unterminated quoted literal in pattern: ${str || src}`;
221
+ return { char: "'", error: new Error(msg), str, width };
222
+ } else if (next === "'") {
223
+ if (src[++pos] !== "'")
224
+ return { char: "'", str, width };
225
+ else
226
+ ++width;
227
+ }
228
+ str += next;
229
+ }
230
+ }
231
+ function readToken(src, pos) {
232
+ const char = src[pos];
233
+ if (!char)
234
+ return null;
235
+ if (isLetter(char))
236
+ return readFieldToken(src, pos);
237
+ if (char === "'")
238
+ return readQuotedToken(src, pos);
239
+ let str = char;
240
+ let width = 1;
241
+ while (true) {
242
+ const next = src[++pos];
243
+ if (!next || isLetter(next) || next === "'")
244
+ return { char, str, width };
245
+ str += next;
246
+ width += 1;
247
+ }
248
+ }
249
+ function parseDateTokens(src) {
250
+ const tokens = [];
251
+ let pos = 0;
252
+ while (true) {
253
+ const token = readToken(src, pos);
254
+ if (!token)
255
+ return tokens;
256
+ tokens.push(token);
257
+ pos += token.width;
258
+ }
259
+ }
260
+ function processTokens(tokens, mapText) {
261
+ if (!tokens.filter((token) => token.type !== "content").length) {
262
+ return tokens.map((token) => mapText(token.value));
263
+ }
264
+ return tokens.map((token) => {
265
+ var _a;
266
+ if (token.type === "content") {
267
+ return mapText(token.value);
268
+ } else if (token.type === "octothorpe") {
269
+ return "#";
270
+ } else if (token.type === "argument") {
271
+ return [token.arg];
272
+ } else if (token.type === "function") {
273
+ const _param = (_a = token == null ? void 0 : token.param) == null ? void 0 : _a[0];
274
+ if (token.key === "date" && _param) {
275
+ const opts = compileDateExpression(_param.value.trim(), (e) => {
276
+ throw new Error(`Unable to compile date expression: ${e.message}`);
277
+ });
278
+ return [token.arg, token.key, opts];
279
+ }
280
+ if (_param) {
281
+ return [token.arg, token.key, _param.value.trim()];
282
+ } else {
283
+ return [token.arg, token.key];
284
+ }
285
+ }
286
+ const offset = token.pluralOffset;
287
+ const formatProps = {};
288
+ token.cases.forEach(({ key, tokens: tokens2 }) => {
289
+ const prop = key[0] === "=" ? key.slice(1) : key;
290
+ formatProps[prop] = processTokens(tokens2, mapText);
291
+ });
292
+ return [
293
+ token.arg,
294
+ token.type,
295
+ {
296
+ offset,
297
+ ...formatProps
298
+ }
299
+ ];
300
+ });
301
+ }
302
+ function compileDateExpression(format, onError) {
303
+ if (/^::/.test(format)) {
304
+ const tokens = parseDateTokens(format.substring(2));
305
+ return getDateFormatOptions(tokens, void 0, onError);
306
+ }
307
+ return format;
308
+ }
309
+ function compileMessageOrThrow(message, mapText = (v) => v) {
310
+ return processTokens(parserExports.parse(message), mapText);
311
+ }
312
+ function compileMessage(message, mapText = (v) => v) {
313
+ try {
314
+ return compileMessageOrThrow(message, mapText);
315
+ } catch (e) {
316
+ console.error(`${e.message}
317
+
318
+ Message: ${message}`);
319
+ return [message];
320
+ }
321
+ }
322
+ export {
323
+ compileMessage,
324
+ compileMessageOrThrow
325
+ };
326
+ //# sourceMappingURL=compileMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compileMessage.js","sources":["../../../../../node_modules/@lingui/message-utils/dist/compileMessage.mjs"],"sourcesContent":["import { parse } from '@messageformat/parser';\n\n/**\n * Parent class for errors.\n *\n * @remarks\n * Errors with `type: \"warning\"` do not necessarily indicate that the parser\n * encountered an error. In addition to a human-friendly `message`, may also\n * includes the `token` at which the error was encountered.\n *\n * @public\n */\nclass DateFormatError extends Error {\n /** @internal */\n constructor(msg, token, type) {\n super(msg);\n this.token = token;\n this.type = type || 'error';\n }\n}\nconst alpha = (width) => width < 4 ? 'short' : width === 4 ? 'long' : 'narrow';\nconst numeric = (width) => (width % 2 === 0 ? '2-digit' : 'numeric');\nfunction yearOptions(token, onError) {\n switch (token.char) {\n case 'y':\n return { year: numeric(token.width) };\n case 'r':\n return { calendar: 'gregory', year: 'numeric' };\n case 'u':\n case 'U':\n case 'Y':\n default:\n onError(`${token.desc} is not supported; falling back to year:numeric`, DateFormatError.WARNING);\n return { year: 'numeric' };\n }\n}\nfunction monthStyle(token, onError) {\n switch (token.width) {\n case 1:\n return 'numeric';\n case 2:\n return '2-digit';\n case 3:\n return 'short';\n case 4:\n return 'long';\n case 5:\n return 'narrow';\n default:\n onError(`${token.desc} is not supported with width ${token.width}`);\n return undefined;\n }\n}\nfunction dayStyle(token, onError) {\n const { char, desc, width } = token;\n if (char === 'd') {\n return numeric(width);\n }\n else {\n onError(`${desc} is not supported`);\n return undefined;\n }\n}\nfunction weekdayStyle(token, onError) {\n const { char, desc, width } = token;\n if ((char === 'c' || char === 'e') && width < 3) {\n // ignoring stand-alone-ness\n const msg = `Numeric value is not supported for ${desc}; falling back to weekday:short`;\n onError(msg, DateFormatError.WARNING);\n }\n // merging narrow styles\n return alpha(width);\n}\nfunction hourOptions(token) {\n const hour = numeric(token.width);\n let hourCycle;\n switch (token.char) {\n case 'h':\n hourCycle = 'h12';\n break;\n case 'H':\n hourCycle = 'h23';\n break;\n case 'k':\n hourCycle = 'h24';\n break;\n case 'K':\n hourCycle = 'h11';\n break;\n }\n return hourCycle ? { hour, hourCycle } : { hour };\n}\nfunction timeZoneNameStyle(token, onError) {\n // so much fallback behaviour here\n const { char, desc, width } = token;\n switch (char) {\n case 'v':\n case 'z':\n return width === 4 ? 'long' : 'short';\n case 'V':\n if (width === 4)\n return 'long';\n onError(`${desc} is not supported with width ${width}`);\n return undefined;\n case 'X':\n onError(`${desc} is not supported`);\n return undefined;\n }\n return 'short';\n}\nfunction compileOptions(token, onError) {\n switch (token.field) {\n case 'era':\n return { era: alpha(token.width) };\n case 'year':\n return yearOptions(token, onError);\n case 'month':\n return { month: monthStyle(token, onError) };\n case 'day':\n return { day: dayStyle(token, onError) };\n case 'weekday':\n return { weekday: weekdayStyle(token, onError) };\n case 'period':\n return undefined;\n case 'hour':\n return hourOptions(token);\n case 'min':\n return { minute: numeric(token.width) };\n case 'sec':\n return { second: numeric(token.width) };\n case 'tz':\n return { timeZoneName: timeZoneNameStyle(token, onError) };\n case 'quarter':\n case 'week':\n case 'sec-frac':\n case 'ms':\n onError(`${token.desc} is not supported`);\n }\n return undefined;\n}\nfunction getDateFormatOptions(tokens, timeZone, onError = error => {\n throw error;\n}) {\n const options = {\n timeZone\n };\n const fields = [];\n for (const token of tokens) {\n const { error, field, str } = token;\n if (error) {\n const dte = new DateFormatError(error.message, token);\n dte.stack = error.stack;\n onError(dte);\n }\n if (str) {\n const msg = `Ignoring string part: ${str}`;\n onError(new DateFormatError(msg, token, DateFormatError.WARNING));\n }\n if (field) {\n if (fields.indexOf(field) === -1)\n fields.push(field);\n else\n onError(new DateFormatError(`Duplicate ${field} token`, token));\n }\n const opt = compileOptions(token, (msg, isWarning) => onError(new DateFormatError(msg, token, isWarning)));\n if (opt)\n Object.assign(options, opt);\n }\n return options;\n}\n\nconst fields = {\n G: { field: 'era', desc: 'Era' },\n y: { field: 'year', desc: 'Year' },\n Y: { field: 'year', desc: 'Year of \"Week of Year\"' },\n u: { field: 'year', desc: 'Extended year' },\n U: { field: 'year', desc: 'Cyclic year name' },\n r: { field: 'year', desc: 'Related Gregorian year' },\n Q: { field: 'quarter', desc: 'Quarter' },\n q: { field: 'quarter', desc: 'Stand-alone quarter' },\n M: { field: 'month', desc: 'Month in year' },\n L: { field: 'month', desc: 'Stand-alone month in year' },\n w: { field: 'week', desc: 'Week of year' },\n W: { field: 'week', desc: 'Week of month' },\n d: { field: 'day', desc: 'Day in month' },\n D: { field: 'day', desc: 'Day of year' },\n F: { field: 'day', desc: 'Day of week in month' },\n g: { field: 'day', desc: 'Modified julian day' },\n E: { field: 'weekday', desc: 'Day of week' },\n e: { field: 'weekday', desc: 'Local day of week' },\n c: { field: 'weekday', desc: 'Stand-alone local day of week' },\n a: { field: 'period', desc: 'AM/PM marker' },\n b: { field: 'period', desc: 'AM/PM/noon/midnight marker' },\n B: { field: 'period', desc: 'Flexible day period' },\n h: { field: 'hour', desc: 'Hour in AM/PM (1~12)' },\n H: { field: 'hour', desc: 'Hour in day (0~23)' },\n k: { field: 'hour', desc: 'Hour in day (1~24)' },\n K: { field: 'hour', desc: 'Hour in AM/PM (0~11)' },\n j: { field: 'hour', desc: 'Hour in preferred cycle' },\n J: { field: 'hour', desc: 'Hour in preferred cycle without marker' },\n C: { field: 'hour', desc: 'Hour in preferred cycle with flexible marker' },\n m: { field: 'min', desc: 'Minute in hour' },\n s: { field: 'sec', desc: 'Second in minute' },\n S: { field: 'sec-frac', desc: 'Fractional second' },\n A: { field: 'ms', desc: 'Milliseconds in day' },\n z: { field: 'tz', desc: 'Time Zone: specific non-location' },\n Z: { field: 'tz', desc: 'Time Zone' },\n O: { field: 'tz', desc: 'Time Zone: localized' },\n v: { field: 'tz', desc: 'Time Zone: generic non-location' },\n V: { field: 'tz', desc: 'Time Zone: ID' },\n X: { field: 'tz', desc: 'Time Zone: ISO8601 with Z' },\n x: { field: 'tz', desc: 'Time Zone: ISO8601' }\n};\nconst isLetter = (char) => (char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z');\nfunction readFieldToken(src, pos) {\n const char = src[pos];\n let width = 1;\n while (src[++pos] === char)\n ++width;\n const field = fields[char];\n if (!field) {\n const msg = `The letter ${char} is not a valid field identifier`;\n return { char, error: new Error(msg), width };\n }\n return { char, field: field.field, desc: field.desc, width };\n}\nfunction readQuotedToken(src, pos) {\n let str = src[++pos];\n let width = 2;\n if (str === \"'\")\n return { char: \"'\", str, width };\n while (true) {\n const next = src[++pos];\n ++width;\n if (next === undefined) {\n const msg = `Unterminated quoted literal in pattern: ${str || src}`;\n return { char: \"'\", error: new Error(msg), str, width };\n }\n else if (next === \"'\") {\n if (src[++pos] !== \"'\")\n return { char: \"'\", str, width };\n else\n ++width;\n }\n str += next;\n }\n}\nfunction readToken(src, pos) {\n const char = src[pos];\n if (!char)\n return null;\n if (isLetter(char))\n return readFieldToken(src, pos);\n if (char === \"'\")\n return readQuotedToken(src, pos);\n let str = char;\n let width = 1;\n while (true) {\n const next = src[++pos];\n if (!next || isLetter(next) || next === \"'\")\n return { char, str, width };\n str += next;\n width += 1;\n }\n}\n/**\n * Parse an {@link http://userguide.icu-project.org/formatparse/datetime | ICU\n * DateFormat skeleton} string into a {@link DateToken} array.\n *\n * @remarks\n * Errors will not be thrown, but if encountered are included as the relevant\n * token's `error` value.\n *\n * @public\n * @param src - The skeleton string\n *\n * @example\n * ```js\n * import { parseDateTokens } from '@messageformat/date-skeleton'\n *\n * parseDateTokens('GrMMMdd', console.error)\n * // [\n * // { char: 'G', field: 'era', desc: 'Era', width: 1 },\n * // { char: 'r', field: 'year', desc: 'Related Gregorian year', width: 1 },\n * // { char: 'M', field: 'month', desc: 'Month in year', width: 3 },\n * // { char: 'd', field: 'day', desc: 'Day in month', width: 2 }\n * // ]\n * ```\n */\nfunction parseDateTokens(src) {\n const tokens = [];\n let pos = 0;\n while (true) {\n const token = readToken(src, pos);\n if (!token)\n return tokens;\n tokens.push(token);\n pos += token.width;\n }\n}\n\nfunction processTokens(tokens, mapText) {\n if (!tokens.filter((token) => token.type !== \"content\").length) {\n return tokens.map((token) => mapText(token.value));\n }\n return tokens.map((token) => {\n if (token.type === \"content\") {\n return mapText(token.value);\n } else if (token.type === \"octothorpe\") {\n return \"#\";\n } else if (token.type === \"argument\") {\n return [token.arg];\n } else if (token.type === \"function\") {\n const _param = token?.param?.[0];\n if (token.key === \"date\" && _param) {\n const opts = compileDateExpression(_param.value.trim(), (e) => {\n throw new Error(`Unable to compile date expression: ${e.message}`);\n });\n return [token.arg, token.key, opts];\n }\n if (_param) {\n return [token.arg, token.key, _param.value.trim()];\n } else {\n return [token.arg, token.key];\n }\n }\n const offset = token.pluralOffset;\n const formatProps = {};\n token.cases.forEach(({ key, tokens: tokens2 }) => {\n const prop = key[0] === \"=\" ? key.slice(1) : key;\n formatProps[prop] = processTokens(tokens2, mapText);\n });\n return [\n token.arg,\n token.type,\n {\n offset,\n ...formatProps\n }\n ];\n });\n}\nfunction compileDateExpression(format, onError) {\n if (/^::/.test(format)) {\n const tokens = parseDateTokens(format.substring(2));\n return getDateFormatOptions(tokens, void 0, onError);\n }\n return format;\n}\nfunction compileMessageOrThrow(message, mapText = (v) => v) {\n return processTokens(parse(message), mapText);\n}\nfunction compileMessage(message, mapText = (v) => v) {\n try {\n return compileMessageOrThrow(message, mapText);\n } catch (e) {\n console.error(`${e.message} \n\nMessage: ${message}`);\n return [message];\n }\n}\n\nexport { compileMessage, compileMessageOrThrow };\n"],"names":["fields","parse"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,74 @@
1
+ import { __exports as lexer } from "../../../../_virtual/lexer.js";
2
+ import { __require as requireMoo } from "../../../moo/moo.js";
3
+ var hasRequiredLexer;
4
+ function requireLexer() {
5
+ if (hasRequiredLexer) return lexer;
6
+ hasRequiredLexer = 1;
7
+ (function(exports) {
8
+ var __importDefault = lexer && lexer.__importDefault || function(mod) {
9
+ return mod && mod.__esModule ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.lexer = exports.states = void 0;
13
+ const moo_1 = __importDefault(requireMoo());
14
+ exports.states = {
15
+ body: {
16
+ doubleapos: { match: "''", value: () => "'" },
17
+ quoted: {
18
+ lineBreaks: true,
19
+ match: /'[{}#](?:[^]*?[^'])?'(?!')/u,
20
+ value: (src) => src.slice(1, -1).replace(/''/g, "'")
21
+ },
22
+ argument: {
23
+ lineBreaks: true,
24
+ match: /\{\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*/u,
25
+ push: "arg",
26
+ value: (src) => src.substring(1).trim()
27
+ },
28
+ octothorpe: "#",
29
+ end: { match: "}", pop: 1 },
30
+ content: { lineBreaks: true, match: /[^][^{}#']*/u }
31
+ },
32
+ arg: {
33
+ select: {
34
+ lineBreaks: true,
35
+ match: /,\s*(?:plural|select|selectordinal)\s*,\s*/u,
36
+ next: "select",
37
+ value: (src) => src.split(",")[1].trim()
38
+ },
39
+ "func-args": {
40
+ lineBreaks: true,
41
+ match: /,\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*,/u,
42
+ next: "body",
43
+ value: (src) => src.split(",")[1].trim()
44
+ },
45
+ "func-simple": {
46
+ lineBreaks: true,
47
+ match: /,\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*/u,
48
+ value: (src) => src.substring(1).trim()
49
+ },
50
+ end: { match: "}", pop: 1 }
51
+ },
52
+ select: {
53
+ offset: {
54
+ lineBreaks: true,
55
+ match: /\s*offset\s*:\s*\d+\s*/u,
56
+ value: (src) => src.split(":")[1].trim()
57
+ },
58
+ case: {
59
+ lineBreaks: true,
60
+ match: /\s*(?:=\d+|[^\p{Pat_Syn}\p{Pat_WS}]+)\s*\{/u,
61
+ push: "body",
62
+ value: (src) => src.substring(0, src.indexOf("{")).trim()
63
+ },
64
+ end: { match: /\s*\}/u, pop: 1 }
65
+ }
66
+ };
67
+ exports.lexer = moo_1.default.states(exports.states);
68
+ })(lexer);
69
+ return lexer;
70
+ }
71
+ export {
72
+ requireLexer as __require
73
+ };
74
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sources":["../../../../../node_modules/@messageformat/parser/lib/lexer.js"],"sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lexer = exports.states = void 0;\nconst moo_1 = __importDefault(require(\"moo\"));\nexports.states = {\n body: {\n doubleapos: { match: \"''\", value: () => \"'\" },\n quoted: {\n lineBreaks: true,\n match: /'[{}#](?:[^]*?[^'])?'(?!')/u,\n value: src => src.slice(1, -1).replace(/''/g, \"'\")\n },\n argument: {\n lineBreaks: true,\n match: /\\{\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*/u,\n push: 'arg',\n value: src => src.substring(1).trim()\n },\n octothorpe: '#',\n end: { match: '}', pop: 1 },\n content: { lineBreaks: true, match: /[^][^{}#']*/u }\n },\n arg: {\n select: {\n lineBreaks: true,\n match: /,\\s*(?:plural|select|selectordinal)\\s*,\\s*/u,\n next: 'select',\n value: src => src.split(',')[1].trim()\n },\n 'func-args': {\n lineBreaks: true,\n match: /,\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*,/u,\n next: 'body',\n value: src => src.split(',')[1].trim()\n },\n 'func-simple': {\n lineBreaks: true,\n match: /,\\s*[^\\p{Pat_Syn}\\p{Pat_WS}]+\\s*/u,\n value: src => src.substring(1).trim()\n },\n end: { match: '}', pop: 1 }\n },\n select: {\n offset: {\n lineBreaks: true,\n match: /\\s*offset\\s*:\\s*\\d+\\s*/u,\n value: src => src.split(':')[1].trim()\n },\n case: {\n lineBreaks: true,\n match: /\\s*(?:=\\d+|[^\\p{Pat_Syn}\\p{Pat_WS}]+)\\s*\\{/u,\n push: 'body',\n value: src => src.substring(0, src.indexOf('{')).trim()\n },\n end: { match: /\\s*\\}/u, pop: 1 }\n }\n};\nexports.lexer = moo_1.default.states(exports.states);\n"],"names":["this","require$$0"],"mappings":";;;;;;;AACA,QAAI,kBAAmBA,SAAQA,MAAK,mBAAoB,SAAU,KAAK;AACnE,aAAQ,OAAO,IAAI,aAAc,MAAM,EAAE,WAAW,IAAK;AAAA,IAC5D;AACD,WAAO,eAAc,SAAU,cAAc,EAAE,OAAO,MAAM;AAC5D,YAAgB,QAAA,QAAA,SAAiB;AACjC,UAAM,QAAQ,gBAAgBC,YAAc;AAC5C,YAAiB,SAAA;AAAA,MACb,MAAM;AAAA,QACF,YAAY,EAAE,OAAO,MAAM,OAAO,MAAM,IAAK;AAAA,QAC7C,QAAQ;AAAA,UACJ,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,OAAO,SAAO,IAAI,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAO,GAAG;AAAA,QACpD;AAAA,QACD,UAAU;AAAA,UACN,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO,SAAO,IAAI,UAAU,CAAC,EAAE,KAAI;AAAA,QACtC;AAAA,QACD,YAAY;AAAA,QACZ,KAAK,EAAE,OAAO,KAAK,KAAK,EAAG;AAAA,QAC3B,SAAS,EAAE,YAAY,MAAM,OAAO,eAAc;AAAA,MACrD;AAAA,MACD,KAAK;AAAA,QACD,QAAQ;AAAA,UACJ,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO,SAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAI;AAAA,QACvC;AAAA,QACD,aAAa;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO,SAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAI;AAAA,QACvC;AAAA,QACD,eAAe;AAAA,UACX,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,OAAO,SAAO,IAAI,UAAU,CAAC,EAAE,KAAI;AAAA,QACtC;AAAA,QACD,KAAK,EAAE,OAAO,KAAK,KAAK,EAAC;AAAA,MAC5B;AAAA,MACD,QAAQ;AAAA,QACJ,QAAQ;AAAA,UACJ,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,OAAO,SAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAI;AAAA,QACvC;AAAA,QACD,MAAM;AAAA,UACF,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO,SAAO,IAAI,UAAU,GAAG,IAAI,QAAQ,GAAG,CAAC,EAAE,KAAI;AAAA,QACxD;AAAA,QACD,KAAK,EAAE,OAAO,UAAU,KAAK,EAAC;AAAA,MACtC;AAAA,IACC;AACD,YAAgB,QAAA,MAAM,QAAQ,OAAO,QAAQ,MAAM;AAAA;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,223 @@
1
+ import { __exports as parser } from "../../../../_virtual/parser2.js";
2
+ import { __require as requireLexer } from "./lexer.js";
3
+ var hasRequiredParser;
4
+ function requireParser() {
5
+ if (hasRequiredParser) return parser;
6
+ hasRequiredParser = 1;
7
+ Object.defineProperty(parser, "__esModule", { value: true });
8
+ parser.parse = parser.ParseError = void 0;
9
+ const lexer_js_1 = requireLexer();
10
+ const getContext = (lt) => ({
11
+ offset: lt.offset,
12
+ line: lt.line,
13
+ col: lt.col,
14
+ text: lt.text,
15
+ lineBreaks: lt.lineBreaks
16
+ });
17
+ const isSelectType = (type) => type === "plural" || type === "select" || type === "selectordinal";
18
+ function strictArgStyleParam(lt, param) {
19
+ let value = "";
20
+ let text = "";
21
+ for (const p of param) {
22
+ const pText = p.ctx.text;
23
+ text += pText;
24
+ switch (p.type) {
25
+ case "content":
26
+ value += p.value;
27
+ break;
28
+ case "argument":
29
+ case "function":
30
+ case "octothorpe":
31
+ value += pText;
32
+ break;
33
+ default:
34
+ throw new ParseError(lt, `Unsupported part in strict mode function arg style: ${pText}`);
35
+ }
36
+ }
37
+ const c = {
38
+ type: "content",
39
+ value: value.trim(),
40
+ ctx: Object.assign({}, param[0].ctx, { text })
41
+ };
42
+ return [c];
43
+ }
44
+ const strictArgTypes = [
45
+ "number",
46
+ "date",
47
+ "time",
48
+ "spellout",
49
+ "ordinal",
50
+ "duration"
51
+ ];
52
+ const defaultPluralKeys = ["zero", "one", "two", "few", "many", "other"];
53
+ class ParseError extends Error {
54
+ /** @internal */
55
+ constructor(lt, msg) {
56
+ super(lexer_js_1.lexer.formatError(lt, msg));
57
+ }
58
+ }
59
+ parser.ParseError = ParseError;
60
+ class Parser {
61
+ constructor(src, opt) {
62
+ var _a, _b, _c, _d;
63
+ this.lexer = lexer_js_1.lexer.reset(src);
64
+ this.cardinalKeys = (_a = opt === null || opt === void 0 ? void 0 : opt.cardinal) !== null && _a !== void 0 ? _a : defaultPluralKeys;
65
+ this.ordinalKeys = (_b = opt === null || opt === void 0 ? void 0 : opt.ordinal) !== null && _b !== void 0 ? _b : defaultPluralKeys;
66
+ this.strict = (_c = opt === null || opt === void 0 ? void 0 : opt.strict) !== null && _c !== void 0 ? _c : false;
67
+ this.strictPluralKeys = (_d = opt === null || opt === void 0 ? void 0 : opt.strictPluralKeys) !== null && _d !== void 0 ? _d : true;
68
+ }
69
+ parse() {
70
+ return this.parseBody(false, true);
71
+ }
72
+ checkSelectKey(lt, type, key) {
73
+ if (key[0] === "=") {
74
+ if (type === "select")
75
+ throw new ParseError(lt, `The case ${key} is not valid with select`);
76
+ } else if (type !== "select") {
77
+ const keys = type === "plural" ? this.cardinalKeys : this.ordinalKeys;
78
+ if (this.strictPluralKeys && keys.length > 0 && !keys.includes(key)) {
79
+ const msg = `The ${type} case ${key} is not valid in this locale`;
80
+ throw new ParseError(lt, msg);
81
+ }
82
+ }
83
+ }
84
+ parseSelect({ value: arg }, inPlural, ctx, type) {
85
+ const sel = { type, arg, cases: [], ctx };
86
+ if (type === "plural" || type === "selectordinal")
87
+ inPlural = true;
88
+ else if (this.strict)
89
+ inPlural = false;
90
+ for (const lt of this.lexer) {
91
+ switch (lt.type) {
92
+ case "offset":
93
+ if (type === "select")
94
+ throw new ParseError(lt, "Unexpected plural offset for select");
95
+ if (sel.cases.length > 0)
96
+ throw new ParseError(lt, "Plural offset must be set before cases");
97
+ sel.pluralOffset = Number(lt.value);
98
+ ctx.text += lt.text;
99
+ ctx.lineBreaks += lt.lineBreaks;
100
+ break;
101
+ case "case": {
102
+ this.checkSelectKey(lt, type, lt.value);
103
+ sel.cases.push({
104
+ key: lt.value,
105
+ tokens: this.parseBody(inPlural),
106
+ ctx: getContext(lt)
107
+ });
108
+ break;
109
+ }
110
+ case "end":
111
+ return sel;
112
+ /* istanbul ignore next: never happens */
113
+ default:
114
+ throw new ParseError(lt, `Unexpected lexer token: ${lt.type}`);
115
+ }
116
+ }
117
+ throw new ParseError(null, "Unexpected message end");
118
+ }
119
+ parseArgToken(lt, inPlural) {
120
+ const ctx = getContext(lt);
121
+ const argType = this.lexer.next();
122
+ if (!argType)
123
+ throw new ParseError(null, "Unexpected message end");
124
+ ctx.text += argType.text;
125
+ ctx.lineBreaks += argType.lineBreaks;
126
+ if (this.strict && (argType.type === "func-simple" || argType.type === "func-args") && !strictArgTypes.includes(argType.value)) {
127
+ const msg = `Invalid strict mode function arg type: ${argType.value}`;
128
+ throw new ParseError(lt, msg);
129
+ }
130
+ switch (argType.type) {
131
+ case "end":
132
+ return { type: "argument", arg: lt.value, ctx };
133
+ case "func-simple": {
134
+ const end = this.lexer.next();
135
+ if (!end)
136
+ throw new ParseError(null, "Unexpected message end");
137
+ if (end.type !== "end")
138
+ throw new ParseError(end, `Unexpected lexer token: ${end.type}`);
139
+ ctx.text += end.text;
140
+ if (isSelectType(argType.value.toLowerCase()))
141
+ throw new ParseError(argType, `Invalid type identifier: ${argType.value}`);
142
+ return {
143
+ type: "function",
144
+ arg: lt.value,
145
+ key: argType.value,
146
+ ctx
147
+ };
148
+ }
149
+ case "func-args": {
150
+ if (isSelectType(argType.value.toLowerCase())) {
151
+ const msg = `Invalid type identifier: ${argType.value}`;
152
+ throw new ParseError(argType, msg);
153
+ }
154
+ let param = this.parseBody(this.strict ? false : inPlural);
155
+ if (this.strict && param.length > 0)
156
+ param = strictArgStyleParam(lt, param);
157
+ return {
158
+ type: "function",
159
+ arg: lt.value,
160
+ key: argType.value,
161
+ param,
162
+ ctx
163
+ };
164
+ }
165
+ case "select":
166
+ if (isSelectType(argType.value))
167
+ return this.parseSelect(lt, inPlural, ctx, argType.value);
168
+ else
169
+ throw new ParseError(argType, `Unexpected select type ${argType.value}`);
170
+ /* istanbul ignore next: never happens */
171
+ default:
172
+ throw new ParseError(argType, `Unexpected lexer token: ${argType.type}`);
173
+ }
174
+ }
175
+ parseBody(inPlural, atRoot) {
176
+ const tokens = [];
177
+ let content = null;
178
+ for (const lt of this.lexer) {
179
+ if (lt.type === "argument") {
180
+ if (content)
181
+ content = null;
182
+ tokens.push(this.parseArgToken(lt, inPlural));
183
+ } else if (lt.type === "octothorpe" && inPlural) {
184
+ if (content)
185
+ content = null;
186
+ tokens.push({ type: "octothorpe", ctx: getContext(lt) });
187
+ } else if (lt.type === "end" && !atRoot) {
188
+ return tokens;
189
+ } else {
190
+ let value = lt.value;
191
+ if (!inPlural && lt.type === "quoted" && value[0] === "#") {
192
+ if (value.includes("{")) {
193
+ const errMsg = `Unsupported escape pattern: ${value}`;
194
+ throw new ParseError(lt, errMsg);
195
+ }
196
+ value = lt.text;
197
+ }
198
+ if (content) {
199
+ content.value += value;
200
+ content.ctx.text += lt.text;
201
+ content.ctx.lineBreaks += lt.lineBreaks;
202
+ } else {
203
+ content = { type: "content", value, ctx: getContext(lt) };
204
+ tokens.push(content);
205
+ }
206
+ }
207
+ }
208
+ if (atRoot)
209
+ return tokens;
210
+ throw new ParseError(null, "Unexpected message end");
211
+ }
212
+ }
213
+ function parse(src, options = {}) {
214
+ const parser2 = new Parser(src, options);
215
+ return parser2.parse();
216
+ }
217
+ parser.parse = parse;
218
+ return parser;
219
+ }
220
+ export {
221
+ requireParser as __require
222
+ };
223
+ //# sourceMappingURL=parser.js.map