@zerolith/i18n 0.1.0-alpha.7 → 0.1.0-alpha.8
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 +4 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +13 -1
- package/dist/cli.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +36 -20
- package/dist/compile.js.map +1 -1
- package/dist/production/compile.js +167 -0
- package/dist/production/compile.js.map +1 -0
- package/dist/production/index.js +2 -0
- package/dist/production/index.js.map +1 -0
- package/package.json +9 -7
- package/src/cli.ts +17 -1
- package/src/compile.ts +42 -20
package/README.md
CHANGED
|
@@ -16,15 +16,15 @@ format.number(1234.5, { style: "currency", currency: "EUR" });
|
|
|
16
16
|
- `formatters` wraps `Intl.NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, and `PluralRules`, cached per locale and options, reading the locale signal when called.
|
|
17
17
|
- `zerolith-i18n` compiles MessageFormat 2 catalogs (`messages/en.json`) into one module per locale, with a function per message and typed arguments, so a locale is one chunk and no message runtime is loaded.
|
|
18
18
|
|
|
19
|
-
The guide is on the [docs site](https://
|
|
19
|
+
The guide is on the [docs site](https://zerolith.dev/guide/i18n/).
|
|
20
20
|
|
|
21
21
|
Status: alpha. Install with `npm install @zerolith/i18n@alpha`; the API may change before 1.0.
|
|
22
22
|
|
|
23
23
|
## Documentation
|
|
24
24
|
|
|
25
|
-
- The [internationalization guide](https://
|
|
26
|
-
- The [reference](https://
|
|
27
|
-
- New to zerolith? The [tutorial](https://
|
|
25
|
+
- The [internationalization guide](https://zerolith.dev/guide/i18n/) explains it with examples that run as tests.
|
|
26
|
+
- The [reference](https://zerolith.dev/reference/zerolith-i18n/) lists every export, generated from the source.
|
|
27
|
+
- New to zerolith? The [tutorial](https://zerolith.dev/learn/) builds an app step by step, and the [playground](https://zerolith.dev/playground/) runs code in the browser.
|
|
28
28
|
|
|
29
29
|
## License
|
|
30
30
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAwGA,2EAA2E;AAC3E,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8EnE"}
|
package/dist/cli.js
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
8
8
|
import { basename, join } from "node:path";
|
|
9
|
+
import { realpathSync } from "node:fs";
|
|
9
10
|
import process from "node:process";
|
|
11
|
+
import { pathToFileURL } from "node:url";
|
|
10
12
|
import { compileIndex, compileMessages, messageNames } from "./compile.js";
|
|
11
13
|
const USAGE = "usage: zerolith-i18n <folder> [--out <folder>] [--js] [--strict]\n";
|
|
12
14
|
/** The locale a catalog's file name gives, refusing a name that is not a BCP 47 language tag, such as `en_US.json`. */
|
|
@@ -133,7 +135,17 @@ export async function main(argv) {
|
|
|
133
135
|
process.stdout.write(`zerolith-i18n: ${catalogs.size} locale(s), ${all.size} message(s), written to ${out}\n`);
|
|
134
136
|
return missing > 0 && parsed.strict ? 1 : 0;
|
|
135
137
|
}
|
|
136
|
-
|
|
138
|
+
/** True when node started this module, directly or through the bin link npm installs, which it resolves the way node resolves its entry. */
|
|
139
|
+
function started() {
|
|
140
|
+
const entry = process.argv[1];
|
|
141
|
+
try {
|
|
142
|
+
return entry !== undefined && pathToFileURL(realpathSync(entry)).href === import.meta.url;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (started()) {
|
|
137
149
|
process.exitCode = await main(process.argv.slice(2));
|
|
138
150
|
}
|
|
139
151
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/compile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,wDAAwD;AACxD,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvD,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAE3B,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAE5B,mKAAmK;IACnK,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,wDAAwD;AACxD,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvD,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAE3B,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAE5B,mKAAmK;IACnK,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AA+5BD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,eAAe,CA+D/G;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAGvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAsB7F"}
|
package/dist/compile.js
CHANGED
|
@@ -281,11 +281,27 @@ const NUMBER_OPTIONS = {
|
|
|
281
281
|
};
|
|
282
282
|
/** Names a module cannot bind; a message named so is exported under its name from a binding of its own. */
|
|
283
283
|
const RESERVED = new Set(["arguments", "await", "break", "case", "catch", "class", "const", "continue", "debugger", "default", "delete", "do", "else", "enum", "eval", "export", "extends", "false", "finally", "for", "function", "if", "implements", "import", "in", "instanceof", "interface", "let", "new", "null", "package", "private", "protected", "public", "return", "static", "super", "switch", "this", "throw", "true", "try", "typeof", "var", "void", "while", "with", "yield"]);
|
|
284
|
+
/** Characters an HTML parser reads inside an inline script, and the line separators older engines refused in string literals. */
|
|
285
|
+
const SCRIPT_UNSAFE = new RegExp(`[<>${String.fromCodePoint(0x2028, 0x2029)}]`, "g");
|
|
286
|
+
/** The line breaks of a message's source, each starting a new line of its doc comment. */
|
|
287
|
+
const SOURCE_LINES = /\r\n|[\n\r\u2028\u2029]/;
|
|
288
|
+
/**
|
|
289
|
+
* A value written as JavaScript source: its JSON, with `<`, `>`, U+2028, and
|
|
290
|
+
* U+2029 escaped, so generated code stays inert even when a page inlines
|
|
291
|
+
* it in a script element.
|
|
292
|
+
*/
|
|
293
|
+
function jsLiteral(value) {
|
|
294
|
+
return JSON.stringify(value).replace(SCRIPT_UNSAFE, (character) => `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`);
|
|
295
|
+
}
|
|
296
|
+
/** Text for a `//` comment, kept on one line and with `<` written as `<`, so it can end neither the comment nor an inline script. */
|
|
297
|
+
function commentText(text) {
|
|
298
|
+
return text.split(SOURCE_LINES).join(" ").replaceAll("<", "<");
|
|
299
|
+
}
|
|
284
300
|
/** An argument or local name JavaScript can write as it is; MessageFormat also allows `-` and `.`, as in `$first-name`. */
|
|
285
301
|
const PLAIN_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
286
302
|
/** A property name as code: as it is when plain, quoted otherwise. */
|
|
287
303
|
function property(name) {
|
|
288
|
-
return PLAIN_NAME.test(name) ? name :
|
|
304
|
+
return PLAIN_NAME.test(name) ? name : jsLiteral(name);
|
|
289
305
|
}
|
|
290
306
|
function identifier(key) {
|
|
291
307
|
const words = key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(/[^A-Za-z0-9]+/).filter((word) => word !== "");
|
|
@@ -333,13 +349,13 @@ class Emitter {
|
|
|
333
349
|
else if (existing !== type && type !== "string") {
|
|
334
350
|
this.fail(`$${name} is used both as ${existing} and as ${type}`);
|
|
335
351
|
}
|
|
336
|
-
return PLAIN_NAME.test(name) ? `args.${name}` : `args[${
|
|
352
|
+
return PLAIN_NAME.test(name) ? `args.${name}` : `args[${jsLiteral(name)}]`;
|
|
337
353
|
}
|
|
338
354
|
optionValue(value) {
|
|
339
355
|
if (value === undefined) {
|
|
340
356
|
return undefined;
|
|
341
357
|
}
|
|
342
|
-
return value.kind === "literal" ?
|
|
358
|
+
return value.kind === "literal" ? jsLiteral(value.value) : `String(${this.argument(value.name, "string")})`;
|
|
343
359
|
}
|
|
344
360
|
numberOptions(expression) {
|
|
345
361
|
const entries = [];
|
|
@@ -365,7 +381,7 @@ class Emitter {
|
|
|
365
381
|
entries.push(`${mapped}: ${numeric ?? this.optionValue(value) ?? "undefined"}`);
|
|
366
382
|
}
|
|
367
383
|
else if (option === "useGrouping" && value.kind === "literal") {
|
|
368
|
-
entries.push(`useGrouping: ${value.value === "never" ? "false" : value.value === "always" ? "true" :
|
|
384
|
+
entries.push(`useGrouping: ${value.value === "never" ? "false" : value.value === "always" ? "true" : jsLiteral(value.value)}`);
|
|
369
385
|
}
|
|
370
386
|
else if (option === "fractionDigits" && value.kind === "literal" && /^[0-9]+$/.test(value.value)) {
|
|
371
387
|
entries.push(`minimumFractionDigits: ${value.value}`, `maximumFractionDigits: ${value.value}`);
|
|
@@ -382,15 +398,15 @@ class Emitter {
|
|
|
382
398
|
};
|
|
383
399
|
const length = literal(fn === "datetime" ? "dateLength" : "length") ?? (fn === "time" ? undefined : "medium");
|
|
384
400
|
if (length !== undefined && fn !== "time") {
|
|
385
|
-
entries.push(`dateStyle: ${
|
|
401
|
+
entries.push(`dateStyle: ${jsLiteral(length)}`);
|
|
386
402
|
}
|
|
387
403
|
const precision = literal(fn === "datetime" ? "timePrecision" : "precision") ?? (fn === "date" ? undefined : "minute");
|
|
388
404
|
if (precision !== undefined && fn !== "date") {
|
|
389
|
-
entries.push(`timeStyle: ${
|
|
405
|
+
entries.push(`timeStyle: ${jsLiteral(precision === "second" ? "medium" : "short")}`);
|
|
390
406
|
}
|
|
391
407
|
const zone = literal("timeZone");
|
|
392
408
|
if (zone !== undefined && zone !== "input") {
|
|
393
|
-
entries.push(`timeZone: ${
|
|
409
|
+
entries.push(`timeZone: ${jsLiteral(zone)}`);
|
|
394
410
|
}
|
|
395
411
|
const hour12 = literal("hour12");
|
|
396
412
|
if (hour12 !== undefined) {
|
|
@@ -398,7 +414,7 @@ class Emitter {
|
|
|
398
414
|
}
|
|
399
415
|
const style = literal("timeZoneStyle");
|
|
400
416
|
if (style !== undefined) {
|
|
401
|
-
entries.push(`timeZoneName: ${
|
|
417
|
+
entries.push(`timeZoneName: ${jsLiteral(style)}`);
|
|
402
418
|
}
|
|
403
419
|
return entries.length === 0 ? "{}" : `{ ${entries.join(", ")} }`;
|
|
404
420
|
}
|
|
@@ -444,7 +460,7 @@ class Emitter {
|
|
|
444
460
|
if (operand === undefined) {
|
|
445
461
|
this.fail(":string needs an operand");
|
|
446
462
|
}
|
|
447
|
-
return operand.kind === "literal" ?
|
|
463
|
+
return operand.kind === "literal" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, "string")})`;
|
|
448
464
|
}
|
|
449
465
|
if (NUMBER_FUNCTIONS.has(fn)) {
|
|
450
466
|
const value = this.numeric(expression);
|
|
@@ -461,7 +477,7 @@ class Emitter {
|
|
|
461
477
|
if (operand === undefined) {
|
|
462
478
|
this.fail(`:${fn} needs an operand`);
|
|
463
479
|
}
|
|
464
|
-
const value = operand.kind === "literal" ? `new Date(${
|
|
480
|
+
const value = operand.kind === "literal" ? `new Date(${jsLiteral(operand.value)})` : this.argument(operand.name, "date");
|
|
465
481
|
return `${this.shared(`new Intl.DateTimeFormat(locale, ${this.dateOptions(expression)})`)}().format(${value})`;
|
|
466
482
|
}
|
|
467
483
|
this.fail(`unknown function :${fn}`);
|
|
@@ -477,7 +493,7 @@ class Emitter {
|
|
|
477
493
|
if (mode === "exact") {
|
|
478
494
|
return `{ value: String(${value}), categories: [] }`;
|
|
479
495
|
}
|
|
480
|
-
const type =
|
|
496
|
+
const type = jsLiteral(mode === "ordinal" ? "ordinal" : "cardinal");
|
|
481
497
|
const reads = this.reads;
|
|
482
498
|
const options = this.numberOptions(expression);
|
|
483
499
|
if (this.reads === reads) {
|
|
@@ -491,7 +507,7 @@ class Emitter {
|
|
|
491
507
|
if (operand === undefined) {
|
|
492
508
|
this.fail("a selector needs an operand");
|
|
493
509
|
}
|
|
494
|
-
const value = operand.kind === "literal" ?
|
|
510
|
+
const value = operand.kind === "literal" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, "string")})`;
|
|
495
511
|
return `{ value: ${value}, categories: [] }`;
|
|
496
512
|
}
|
|
497
513
|
this.fail(`:${fn} cannot select`);
|
|
@@ -500,7 +516,7 @@ class Emitter {
|
|
|
500
516
|
if (parts.length === 0) {
|
|
501
517
|
return "\"\"";
|
|
502
518
|
}
|
|
503
|
-
return parts.map((part) => (typeof part === "string" ?
|
|
519
|
+
return parts.map((part) => (typeof part === "string" ? jsLiteral(part) : this.format(part))).join(" + ");
|
|
504
520
|
}
|
|
505
521
|
body() {
|
|
506
522
|
for (const [name, declaration] of this.message.declarations) {
|
|
@@ -515,7 +531,7 @@ class Emitter {
|
|
|
515
531
|
return this.pattern(this.message.pattern);
|
|
516
532
|
}
|
|
517
533
|
const selectors = this.message.selectors.map((selector) => this.selector(selector));
|
|
518
|
-
const variants = this.message.variants.map((variant) => `{ keys: ${
|
|
534
|
+
const variants = this.message.variants.map((variant) => `{ keys: ${jsLiteral(variant.keys)}, pattern: () => ${this.pattern(variant.pattern)} }`);
|
|
519
535
|
this.used.add("select");
|
|
520
536
|
return `$select([${selectors.join(", ")}], [${variants.join(", ")}])`;
|
|
521
537
|
}
|
|
@@ -727,11 +743,11 @@ function typeOf(type) {
|
|
|
727
743
|
export function compileMessages(locale, catalog, options = {}) {
|
|
728
744
|
const javascript = options.language === "js";
|
|
729
745
|
const out = [];
|
|
730
|
-
out.push(`// Generated by @zerolith/i18n from ${options.source ?? `the ${locale} catalog`}. Do not edit; regenerate instead.`);
|
|
746
|
+
out.push(`// Generated by @zerolith/i18n from ${commentText(options.source ?? `the ${locale} catalog`)}. Do not edit; regenerate instead.`);
|
|
731
747
|
if (javascript) {
|
|
732
748
|
out.push("// @ts-check");
|
|
733
749
|
}
|
|
734
|
-
out.push(`export const locale${javascript ? "" : ": string"} = ${
|
|
750
|
+
out.push(`export const locale${javascript ? "" : ": string"} = ${jsLiteral(locale)};`);
|
|
735
751
|
out.push("");
|
|
736
752
|
const head = out.length;
|
|
737
753
|
const formatters = new Map();
|
|
@@ -753,7 +769,7 @@ export function compileMessages(locale, catalog, options = {}) {
|
|
|
753
769
|
const emitter = new Emitter(key, message, formatters, used);
|
|
754
770
|
const body = emitter.body();
|
|
755
771
|
const args = [...emitter.arguments.entries()].toSorted(([a], [b]) => a.localeCompare(b));
|
|
756
|
-
const doc = source.replace(/\*\//g, "* /").split(
|
|
772
|
+
const doc = source.replace(/\*\//g, "* /").replaceAll("<", "<").split(SOURCE_LINES).map((line) => ` * ${line}`.trimEnd()).join("\n");
|
|
757
773
|
const argumentType = `{ ${args.map(([argument, type]) => `${property(argument)}: ${typeOf(type)}`).join("; ")} }`;
|
|
758
774
|
if (javascript) {
|
|
759
775
|
out.push(`/**\n${doc}${args.length > 0 ? `\n * @param {${argumentType}} args` : ""}\n * @returns {string}\n */`);
|
|
@@ -795,14 +811,14 @@ export function compileIndex(locales, options = {}) {
|
|
|
795
811
|
lines.push("// @ts-check");
|
|
796
812
|
}
|
|
797
813
|
if (!javascript) {
|
|
798
|
-
lines.push(`import type * as first from
|
|
814
|
+
lines.push(`import type * as first from ${jsLiteral(`./${locales[0] ?? "en"}.${extension}`)};`);
|
|
799
815
|
lines.push("");
|
|
800
816
|
}
|
|
801
|
-
lines.push(`export const locales${javascript ? "" : ": readonly string[]"} = ${
|
|
817
|
+
lines.push(`export const locales${javascript ? "" : ": readonly string[]"} = ${jsLiteral(locales)};`);
|
|
802
818
|
lines.push("");
|
|
803
819
|
lines.push(`/** Loads one locale's messages; each locale is its own module. */`);
|
|
804
820
|
lines.push(javascript ? "export const loaders = {" : "export const loaders: Readonly<Record<string, () => Promise<typeof first>>> = {");
|
|
805
|
-
lines.push(locales.map((locale) => ` ${
|
|
821
|
+
lines.push(locales.map((locale) => ` ${jsLiteral(locale)}: () => import(${jsLiteral(`./${locale}.${extension}`)})`).join(",\n"));
|
|
806
822
|
lines.push("};");
|
|
807
823
|
lines.push("");
|
|
808
824
|
return lines.join("\n");
|
package/dist/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
class e{index=0;text;key;constructor(e,t){this.text=e,this.key=t}fail(e){throw Error(`zerolith/i18n: message "${this.key}": ${e} at offset ${this.index}`)}peek(e=0){return this.text.charAt(this.index+e)}skipSpace(){for(;/[ \t\r\n ]/.test(this.peek());)this.index++}expect(e){this.text.startsWith(e,this.index)||this.fail(`expected ${JSON.stringify(e)}`),this.index+=e.length}name(){let e=/^[A-Za-z_][A-Za-z0-9_.-]*/.exec(this.text.slice(this.index));return e===null&&this.fail(`expected a name`),this.index+=e[0].length,e[0]}literal(){if(this.peek()===`|`){this.index++;let e=``;for(;this.index<this.text.length&&this.peek()!==`|`;)this.peek()===`\\`?(e+=this.peek(1),this.index+=2):(e+=this.peek(),this.index++);return this.expect(`|`),{kind:`literal`,value:e}}let e=/^[A-Za-z0-9_.+:@%-]+/.exec(this.text.slice(this.index));return e===null&&this.fail(`expected a literal`),this.index+=e[0].length,{kind:`literal`,value:e[0]}}variable(){return this.expect(`$`),{kind:`variable`,name:this.name()}}expression(){if(this.skipSpace(),this.peek()===`#`||this.peek()===`/`){for(;this.index<this.text.length&&this.peek()!==`}`;)this.index++;this.expect(`}`);return}let e;this.peek()===`$`?e=this.variable():this.peek()!==`:`&&(e=this.literal()),this.skipSpace();let t,n={};if(this.peek()===`:`)for(this.index++,t=this.name(),this.skipSpace();this.peek()!==`}`&&this.peek()!==`@`&&this.index<this.text.length;){let e=this.name();this.skipSpace(),this.expect(`=`),this.skipSpace(),n[e]=this.peek()===`$`?this.variable():this.literal(),this.skipSpace()}for(;this.peek()===`@`;)this.index++,this.name(),this.skipSpace(),this.peek()===`=`&&(this.index++,this.skipSpace(),this.peek()===`$`?this.variable():this.literal(),this.skipSpace());return this.expect(`}`),e===void 0&&t===void 0&&this.fail(`an expression needs an operand or a function`),{operand:e,fn:t,options:n}}pattern(e){let t=[],n=``;for(;this.index<this.text.length;){let r=this.peek();if(e&&r===`}`&&this.peek(1)===`}`)break;if(r===`\\`){let e=this.peek(1);e!==`{`&&e!==`}`&&e!==`\\`&&e!==`|`&&this.fail(`only \\{ \\} \\\\ and \\| can be escaped`),n+=e,this.index+=2}else if(r===`{`){n!==``&&(t.push(n),n=``),this.index++;let e=this.expression();e!==void 0&&t.push(e)}else r===`}`?this.fail(`a lone } must be escaped as \\}`):(n+=r,this.index++)}return n!==``&&t.push(n),t}quotedPattern(){this.expect(`{{`);let e=this.pattern(!0);return this.expect(`}}`),e}parse(){let e={declarations:new Map,pattern:void 0,selectors:[],variants:[]},t=this.text.trimStart();if(!t.startsWith(`.`)&&!t.startsWith(`{{`))return e.pattern=this.pattern(!1),e;for(this.skipSpace();this.text.startsWith(`.input`,this.index)||this.text.startsWith(`.local`,this.index);){let t=this.text.startsWith(`.local`,this.index);this.index+=6,this.skipSpace();let n;t?(n=this.variable().name,this.skipSpace(),this.expect(`=`),this.skipSpace()):n=``,this.expect(`{`);let r=this.expression();r===void 0&&this.fail(`a declaration cannot be markup`),t||(r.operand?.kind!==`variable`&&this.fail(`.input needs a variable operand`),n=r.operand.name),e.declarations.has(n)&&this.fail(`$${n} is declared twice`),e.declarations.set(n,{expression:r,local:t}),this.skipSpace()}if(this.text.startsWith(`.match`,this.index)){for(this.index+=6,this.skipSpace();this.peek()===`$`||this.peek()===`{`;){if(this.peek()===`{`){this.index++;let t=this.expression();t===void 0&&this.fail(`a selector cannot be markup`),e.selectors.push(t)}else e.selectors.push({operand:this.variable(),fn:void 0,options:{}});this.skipSpace()}for(e.selectors.length===0&&this.fail(`.match needs at least one selector`);this.index<this.text.length;){let t=[];for(;this.peek()!==`{`;)this.peek()===`*`?(this.index++,t.push(`*`)):t.push(this.literal().value),this.skipSpace();t.length!==e.selectors.length&&this.fail(`a variant needs ${e.selectors.length} key(s), found ${t.length}`),e.variants.push({keys:t,pattern:this.quotedPattern()}),this.skipSpace()}return e.variants.some(e=>e.keys.every(e=>e===`*`))||this.fail(`a matcher needs a variant whose keys are all *`),e}return e.pattern=this.quotedPattern(),this.skipSpace(),this.index<this.text.length&&this.fail(`unexpected text after the pattern`),e}}const t=new Set([`number`,`integer`,`percent`,`currency`,`offset`]),n=new Set([`date`,`time`,`datetime`]),r={minimumFractionDigits:`minimumFractionDigits`,maximumFractionDigits:`maximumFractionDigits`,minimumIntegerDigits:`minimumIntegerDigits`,minimumSignificantDigits:`minimumSignificantDigits`,maximumSignificantDigits:`maximumSignificantDigits`,signDisplay:`signDisplay`,trailingZeroDisplay:`trailingZeroDisplay`,roundingMode:`roundingMode`,roundingIncrement:`roundingIncrement`,roundingPriority:`roundingPriority`,currencyDisplay:`currencyDisplay`,currencySign:`currencySign`,numberingSystem:`numberingSystem`},i=new Set(`arguments.await.break.case.catch.class.const.continue.debugger.default.delete.do.else.enum.eval.export.extends.false.finally.for.function.if.implements.import.in.instanceof.interface.let.new.null.package.private.protected.public.return.static.super.switch.this.throw.true.try.typeof.var.void.while.with.yield`.split(`.`)),a=RegExp(`[<>${String.fromCodePoint(8232,8233)}]`,`g`),o=/\r\n|[\n\r\u2028\u2029]/;function s(e){return JSON.stringify(e).replace(a,e=>`\\u${e.charCodeAt(0).toString(16).padStart(4,`0`)}`)}function c(e){return e.split(o).join(` `).replaceAll(`<`,`<`)}const l=/^[A-Za-z_][A-Za-z0-9_]*$/;function u(e){return l.test(e)?e:s(e)}function d(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).split(/[^A-Za-z0-9]+/).filter(e=>e!==``).map((e,t)=>t===0?e.charAt(0).toLowerCase()+e.slice(1):e.charAt(0).toUpperCase()+e.slice(1)).join(``);return/^[0-9]/.test(t)?`_${t}`:t===``?`_`:t}class f{arguments=new Map;locals=new Map;prelude=[];key;message;formatters;used;reads=0;constructor(e,t,n,r){this.key=e,this.message=t,this.formatters=n,this.used=r}shared(e){this.used.add(`once`);let t=this.formatters.get(e);return t===void 0&&(t=`$f${this.formatters.size}`,this.formatters.set(e,t)),t}fail(e){throw Error(`zerolith/i18n: message "${this.key}": ${e}`)}argument(e,t){this.reads++;let n=this.locals.get(e);if(n!==void 0)return n;let r=this.arguments.get(e);return r===void 0||r===`string`?this.arguments.set(e,t):r!==t&&t!==`string`&&this.fail(`$${e} is used both as ${r} and as ${t}`),l.test(e)?`args.${e}`:`args[${s(e)}]`}optionValue(e){if(e!==void 0)return e.kind===`literal`?s(e.value):`String(${this.argument(e.name,`string`)})`}numberOptions(e){let t=[],n=e.fn??`number`;if(n===`integer`)t.push(`maximumFractionDigits: 0`);else if(n===`percent`)t.push(`style: "percent"`);else if(n===`currency`){let n=this.optionValue(e.options.currency);n===void 0&&this.fail(`:currency needs a currency option`),t.push(`style: "currency"`,`currency: ${n}`)}for(let[n,i]of Object.entries(e.options)){let e=r[n];if(e!==void 0){let n=i.kind===`literal`?i.value:void 0,r=n!==void 0&&/^[0-9]+$/.test(n)?n:void 0;t.push(`${e}: ${r??this.optionValue(i)??`undefined`}`)}else n===`useGrouping`&&i.kind===`literal`?t.push(`useGrouping: ${i.value===`never`?`false`:i.value===`always`?`true`:s(i.value)}`):n===`fractionDigits`&&i.kind===`literal`&&/^[0-9]+$/.test(i.value)&&t.push(`minimumFractionDigits: ${i.value}`,`maximumFractionDigits: ${i.value}`)}return t.length===0?`{}`:`{ ${t.join(`, `)} }`}dateOptions(e){let t=[],n=e.fn??`date`,r=t=>{let n=e.options[t];return n?.kind===`literal`?n.value:void 0},i=r(n===`datetime`?`dateLength`:`length`)??(n===`time`?void 0:`medium`);i!==void 0&&n!==`time`&&t.push(`dateStyle: ${s(i)}`);let a=r(n===`datetime`?`timePrecision`:`precision`)??(n===`date`?void 0:`minute`);a!==void 0&&n!==`date`&&t.push(`timeStyle: ${s(a===`second`?`medium`:`short`)}`);let o=r(`timeZone`);o!==void 0&&o!==`input`&&t.push(`timeZone: ${s(o)}`);let c=r(`hour12`);c!==void 0&&t.push(`hour12: ${c===`true`}`);let l=r(`timeZoneStyle`);return l!==void 0&&t.push(`timeZoneName: ${s(l)}`),t.length===0?`{}`:`{ ${t.join(`, `)} }`}numeric(e){let t=e.operand,n;if(t===void 0?this.fail(`:${e.fn??``} needs an operand`):n=t.kind===`literal`?Number.isFinite(Number(t.value))?String(Number(t.value)):this.fail(`${JSON.stringify(t.value)} is not a number`):this.argument(t.name,`number`),e.fn===`offset`){let t=this.optionValue(e.options.add),r=this.optionValue(e.options.subtract);t===void 0==(r===void 0)&&this.fail(`:offset needs exactly one of add or subtract`),n=`(${n} ${t===void 0?`-`:`+`} Number(${t??r??`0`}))`}return n}resolve(e,t=!1){if(e.fn===void 0&&e.operand?.kind===`variable`){let n=this.message.declarations.get(e.operand.name);if(n!==void 0&&(t||!n.local))return n.expression}return e}format(e){let r=this.resolve(e),i=r.fn;if(i===void 0||i===`string`){let e=r.operand;return e===void 0&&this.fail(`:string needs an operand`),e.kind===`literal`?s(e.value):`String(${this.argument(e.name,`string`)})`}if(t.has(i)){let e=this.numeric(r),t=this.reads,n=this.numberOptions(r);return this.reads===t?`${this.shared(`new Intl.NumberFormat(locale, ${n})`)}().format(${e})`:(this.used.add(`number`),`$number(${e}, ${n})`)}if(n.has(i)){let e=r.operand;e===void 0&&this.fail(`:${i} needs an operand`);let t=e.kind===`literal`?`new Date(${s(e.value)})`:this.argument(e.name,`date`);return`${this.shared(`new Intl.DateTimeFormat(locale, ${this.dateOptions(r)})`)}().format(${t})`}this.fail(`unknown function :${i}`)}selector(e){let n=this.resolve(e,!0),r=n.fn??`string`;if(t.has(r)){let e=n.options.select,t=e?.kind===`literal`?e.value:`plural`,i=r===`percent`?`(${this.numeric(n)}) * 100`:this.numeric(n);if(t===`exact`)return`{ value: String(${i}), categories: [] }`;let a=s(t===`ordinal`?`ordinal`:`cardinal`),o=this.reads,c=this.numberOptions(n);return this.reads===o?`{ value: String(${i}), categories: [${this.shared(`new Intl.PluralRules(locale, { ...new Intl.NumberFormat(locale, ${c}).resolvedOptions(), type: ${a} })`)}().select(${i})] }`:(this.used.add(`plural`),`{ value: String(${i}), categories: [$plural(${i}, ${a}, ${c})] }`)}if(r===`string`){let e=n.operand;return e===void 0&&this.fail(`a selector needs an operand`),`{ value: ${e.kind===`literal`?s(e.value):`String(${this.argument(e.name,`string`)})`}, categories: [] }`}this.fail(`:${r} cannot select`)}pattern(e){return e.length===0?`""`:e.map(e=>typeof e==`string`?s(e):this.format(e)).join(` + `)}body(){for(let[e,t]of this.message.declarations)if(t.local){let n=this.format(t.expression),r=l.test(e)?`local_${e}`:`local_${this.locals.size}`;this.locals.set(e,r),this.prelude.push(`const ${r} = ${n};`)}if(this.message.pattern!==void 0)return this.pattern(this.message.pattern);let e=this.message.selectors.map(e=>this.selector(e)),t=this.message.variants.map(e=>`{ keys: ${s(e.keys)}, pattern: () => ${this.pattern(e.pattern)} }`);return this.used.add(`select`),`$select([${e.join(`, `)}], [${t.join(`, `)}])`}}const p={cache:{js:`const $formats = new Map();
|
|
2
|
+
function $cached(kind, options, create)
|
|
3
|
+
{
|
|
4
|
+
const key = kind + JSON.stringify(options);
|
|
5
|
+
let instance = $formats.get(key);
|
|
6
|
+
if (instance === undefined)
|
|
7
|
+
{
|
|
8
|
+
instance = create();
|
|
9
|
+
$formats.set(key, instance);
|
|
10
|
+
}
|
|
11
|
+
return instance;
|
|
12
|
+
}`,ts:`const $formats: Map<string, unknown> = new Map();
|
|
13
|
+
function $cached<T>(kind: string, options: object, create: () => T): T
|
|
14
|
+
{
|
|
15
|
+
const key = kind + JSON.stringify(options);
|
|
16
|
+
let instance = $formats.get(key) as T | undefined;
|
|
17
|
+
if (instance === undefined)
|
|
18
|
+
{
|
|
19
|
+
instance = create();
|
|
20
|
+
$formats.set(key, instance);
|
|
21
|
+
}
|
|
22
|
+
return instance;
|
|
23
|
+
}`},once:{js:`function $once(create)
|
|
24
|
+
{
|
|
25
|
+
let instance;
|
|
26
|
+
return () => (instance ??= create());
|
|
27
|
+
}`,ts:`function $once<T>(create: () => T): () => T
|
|
28
|
+
{
|
|
29
|
+
let instance: T | undefined;
|
|
30
|
+
return () => (instance ??= create());
|
|
31
|
+
}`},number:{js:`function $number(value, options)
|
|
32
|
+
{
|
|
33
|
+
return $cached("n", options, () => new Intl.NumberFormat(locale, options)).format(value);
|
|
34
|
+
}`,ts:`function $number(value: number, options: Intl.NumberFormatOptions): string
|
|
35
|
+
{
|
|
36
|
+
return $cached("n", options, () => new Intl.NumberFormat(locale, options)).format(value);
|
|
37
|
+
}`},plural:{js:`function $plural(value, type, options)
|
|
38
|
+
{
|
|
39
|
+
return $cached("p" + type, options, () => new Intl.PluralRules(locale, { ...$cached("n", options, () => new Intl.NumberFormat(locale, options)).resolvedOptions(), type })).select(value);
|
|
40
|
+
}`,ts:`function $plural(value: number, type: "cardinal" | "ordinal", options: Intl.NumberFormatOptions): string
|
|
41
|
+
{
|
|
42
|
+
return $cached("p" + type, options, () => new Intl.PluralRules(locale, { ...$cached("n", options, () => new Intl.NumberFormat(locale, options)).resolvedOptions(), type })).select(value);
|
|
43
|
+
}`},select:{js:`function $select(selectors, variants)
|
|
44
|
+
{
|
|
45
|
+
let best;
|
|
46
|
+
let bestRank;
|
|
47
|
+
for (const variant of variants)
|
|
48
|
+
{
|
|
49
|
+
const rank = [];
|
|
50
|
+
let matches = true;
|
|
51
|
+
for (const [index, key] of variant.keys.entries())
|
|
52
|
+
{
|
|
53
|
+
const selector = selectors[index];
|
|
54
|
+
if (key === "*")
|
|
55
|
+
{
|
|
56
|
+
rank.push(0);
|
|
57
|
+
}
|
|
58
|
+
else if (key === selector.value)
|
|
59
|
+
{
|
|
60
|
+
rank.push(2);
|
|
61
|
+
}
|
|
62
|
+
else if (selector.categories.includes(key))
|
|
63
|
+
{
|
|
64
|
+
rank.push(1);
|
|
65
|
+
}
|
|
66
|
+
else
|
|
67
|
+
{
|
|
68
|
+
matches = false;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!matches)
|
|
73
|
+
{
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (matches && $better(rank, bestRank))
|
|
77
|
+
{
|
|
78
|
+
best = variant;
|
|
79
|
+
bestRank = rank;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return best === undefined ? "" : best.pattern();
|
|
83
|
+
}
|
|
84
|
+
function $better(rank, current)
|
|
85
|
+
{
|
|
86
|
+
if (current === undefined)
|
|
87
|
+
{
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
for (const [index, score] of rank.entries())
|
|
91
|
+
{
|
|
92
|
+
const other = current[index] ?? 0;
|
|
93
|
+
if (score !== other)
|
|
94
|
+
{
|
|
95
|
+
return score > other;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}`,ts:`interface Selector
|
|
100
|
+
{
|
|
101
|
+
value: string;
|
|
102
|
+
categories: string[];
|
|
103
|
+
}
|
|
104
|
+
interface Variant
|
|
105
|
+
{
|
|
106
|
+
keys: string[];
|
|
107
|
+
pattern: () => string;
|
|
108
|
+
}
|
|
109
|
+
function $better(rank: number[], current: number[] | undefined): boolean
|
|
110
|
+
{
|
|
111
|
+
if (current === undefined)
|
|
112
|
+
{
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
for (const [index, score] of rank.entries())
|
|
116
|
+
{
|
|
117
|
+
const other = current[index] ?? 0;
|
|
118
|
+
if (score !== other)
|
|
119
|
+
{
|
|
120
|
+
return score > other;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function $select(selectors: Selector[], variants: Variant[]): string
|
|
126
|
+
{
|
|
127
|
+
let best: Variant | undefined;
|
|
128
|
+
let bestRank: number[] | undefined;
|
|
129
|
+
for (const variant of variants)
|
|
130
|
+
{
|
|
131
|
+
const rank: number[] = [];
|
|
132
|
+
let matches = true;
|
|
133
|
+
for (const [index, key] of variant.keys.entries())
|
|
134
|
+
{
|
|
135
|
+
const selector = selectors[index];
|
|
136
|
+
if (key === "*")
|
|
137
|
+
{
|
|
138
|
+
rank.push(0);
|
|
139
|
+
}
|
|
140
|
+
else if (selector !== undefined && key === selector.value)
|
|
141
|
+
{
|
|
142
|
+
rank.push(2);
|
|
143
|
+
}
|
|
144
|
+
else if (selector !== undefined && selector.categories.includes(key))
|
|
145
|
+
{
|
|
146
|
+
rank.push(1);
|
|
147
|
+
}
|
|
148
|
+
else
|
|
149
|
+
{
|
|
150
|
+
matches = false;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (matches && $better(rank, bestRank))
|
|
155
|
+
{
|
|
156
|
+
best = variant;
|
|
157
|
+
bestRank = rank;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return best === undefined ? "" : best.pattern();
|
|
161
|
+
}`}};function m(e,t){let n=new Set(e);return(n.has(`number`)||n.has(`plural`))&&n.add(`cache`),Object.keys(p).filter(e=>n.has(e)).map(e=>p[e][t?`js`:`ts`]).join(`
|
|
162
|
+
`)}function h(e){return e===`number`?`number`:e===`date`?`Date | number`:`string | number`}export function compileMessages(t,n,r={}){let a=r.language===`js`,l=[];l.push(`// Generated by @zerolith/i18n from ${c(r.source??`the ${t} catalog`)}. Do not edit; regenerate instead.`),a&&l.push(`// @ts-check`),l.push(`export const locale${a?``:`: string`} = ${s(t)};`),l.push(``);let p=l.length,g=new Map,_=new Set,v=[],y=new Set;for(let[t,r]of Object.entries(n)){let n=d(t);if(y.has(n))throw Error(`zerolith/i18n: keys "${t}" and another one both become ${n}`);if(n===`locale`)throw Error(`zerolith/i18n: key "${t}" becomes locale, which every compiled module exports; rename the key`);let s=i.has(n)?`message_${n}`:n;y.add(n),v.push(n);let c=new e(r,t).parse(),p=new f(t,c,g,_),m=p.body(),b=[...p.arguments.entries()].toSorted(([e],[t])=>e.localeCompare(t)),x=r.replace(/\*\//g,`* /`).replaceAll(`<`,`<`).split(o).map(e=>` * ${e}`.trimEnd()).join(`
|
|
163
|
+
`),S=`{ ${b.map(([e,t])=>`${u(e)}: ${h(t)}`).join(`; `)} }`;a?(l.push(`/**\n${x}${b.length>0?`\n * @param {${S}} args`:``}\n * @returns {string}\n */`),l.push(`${s===n?`export `:``}function ${s}(${b.length>0?`args`:``})`)):(l.push(`/**\n${x}\n */`),l.push(`${s===n?`export `:``}function ${s}(${b.length>0?`args: ${S}`:``}): string`)),l.push(`{`);for(let e of p.prelude)l.push(` ${e}`);l.push(` return ${m};`),l.push(`}`),s!==n&&l.push(`export { ${s} as ${n} };`),l.push(``)}let b=m(_,a),x=Array.from(g,([e,t])=>`const ${t} = $once(() => ${e});`);return l.splice(p,0,...b===``?[]:[b,``],...x.length===0?[]:[...x,``]),{code:l.join(`
|
|
164
|
+
`),names:v}}export function messageNames(e){return Object.keys(e).map(d)}export function compileIndex(e,t={}){let n=t.language===`js`,r=n?`js`:`ts`,i=[`// Generated by @zerolith/i18n. Do not edit; regenerate instead.`];return n&&i.push(`// @ts-check`),n||(i.push(`import type * as first from ${s(`./${e[0]??`en`}.${r}`)};`),i.push(``)),i.push(`export const locales${n?``:`: readonly string[]`} = ${s(e)};`),i.push(``),i.push(`/** Loads one locale's messages; each locale is its own module. */`),i.push(n?`export const loaders = {`:`export const loaders: Readonly<Record<string, () => Promise<typeof first>>> = {`),i.push(e.map(e=>` ${s(e)}: () => import(${s(`./${e}.${r}`)})`).join(`,
|
|
165
|
+
`)),i.push(`};`),i.push(``),i.join(`
|
|
166
|
+
`)}
|
|
167
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sources":["../../src/compile.ts"],"sourcesContent":["/**\n * The message compiler: MessageFormat 2 catalogs in, one module per locale\n * out, with a plain function per message whose arguments are typed from\n * the placeholders. Formatting and plural selection call `Intl` in the\n * generated module, so no message runtime is shipped. The subset\n * implemented is the one catalogs use: text and placeholders, quoted and\n * unquoted literals, `.input` and `.local` declarations, `.match` with\n * numeric and string selectors, and the default functions `:string`,\n * `:number`, `:integer`, `:percent`, `:currency`, `:offset`, `:date`,\n * `:time`, and `:datetime`. Markup is accepted and formats to nothing.\n */\n\n/** A catalog: message key to MessageFormat 2 source. */\nexport type Catalog = Readonly<Record<string, string>>;\n\n/** Options for `compileMessages`. */\nexport interface CompileOptions\n{\n /** `ts` emits TypeScript (the default); `js` emits JavaScript with JSDoc types for buildless projects. */\n language?: \"ts\" | \"js\";\n /** Named in the generated header. */\n source?: string;\n}\n\n/** The result of compiling one catalog. */\nexport interface CompiledCatalog\n{\n /** The generated module's source, TypeScript or JavaScript as the `language` option chose; the `zerolith-i18n` CLI writes it to `<locale>.ts` or `<locale>.js`. */\n code: string;\n /** The message keys as function names, in source order. */\n names: string[];\n}\n\ntype ArgumentType = \"number\" | \"date\" | \"string\";\n\ninterface Literal\n{\n kind: \"literal\";\n value: string;\n}\n\ninterface Variable\n{\n kind: \"variable\";\n name: string;\n}\n\ninterface Expression\n{\n operand: Literal | Variable | undefined;\n fn: string | undefined;\n options: Record<string, Literal | Variable>;\n}\n\ntype Part = string | Expression;\n\ninterface Variant\n{\n keys: string[];\n pattern: Part[];\n}\n\ninterface Message\n{\n declarations: Map<string, { expression: Expression; local: boolean }>;\n pattern: Part[] | undefined;\n selectors: Expression[];\n variants: Variant[];\n}\n\nclass Parser\n{\n private index = 0;\n private readonly text: string;\n private readonly key: string;\n\n constructor(text: string, key: string)\n {\n this.text = text;\n this.key = key;\n }\n\n private fail(message: string): never\n {\n throw new Error(`zerolith/i18n: message \"${this.key}\": ${message} at offset ${this.index}`);\n }\n\n private peek(offset = 0): string\n {\n return this.text.charAt(this.index + offset);\n }\n\n private skipSpace(): void\n {\n while (/[ \\t\\r\\n ]/.test(this.peek()))\n {\n this.index++;\n }\n }\n\n private expect(token: string): void\n {\n if (!this.text.startsWith(token, this.index))\n {\n this.fail(`expected ${JSON.stringify(token)}`);\n }\n this.index += token.length;\n }\n\n private name(): string\n {\n const match = /^[A-Za-z_][A-Za-z0-9_.-]*/.exec(this.text.slice(this.index));\n if (match === null)\n {\n this.fail(\"expected a name\");\n }\n this.index += match[0].length;\n return match[0];\n }\n\n private literal(): Literal\n {\n if (this.peek() === \"|\")\n {\n this.index++;\n let value = \"\";\n while (this.index < this.text.length && this.peek() !== \"|\")\n {\n if (this.peek() === \"\\\\\")\n {\n value += this.peek(1);\n this.index += 2;\n }\n else\n {\n value += this.peek();\n this.index++;\n }\n }\n this.expect(\"|\");\n return { kind: \"literal\", value };\n }\n const match = /^[A-Za-z0-9_.+:@%-]+/.exec(this.text.slice(this.index));\n if (match === null)\n {\n this.fail(\"expected a literal\");\n }\n this.index += match[0].length;\n return { kind: \"literal\", value: match[0] };\n }\n\n private variable(): Variable\n {\n this.expect(\"$\");\n return { kind: \"variable\", name: this.name() };\n }\n\n /** Parses the inside of `{ ... }` after the opening brace. */\n private expression(): Expression | undefined\n {\n this.skipSpace();\n if (this.peek() === \"#\" || this.peek() === \"/\")\n {\n while (this.index < this.text.length && this.peek() !== \"}\")\n {\n this.index++;\n }\n this.expect(\"}\");\n return undefined;\n }\n let operand: Literal | Variable | undefined;\n if (this.peek() === \"$\")\n {\n operand = this.variable();\n }\n else if (this.peek() !== \":\")\n {\n operand = this.literal();\n }\n this.skipSpace();\n let fn: string | undefined;\n const options: Record<string, Literal | Variable> = {};\n if (this.peek() === \":\")\n {\n this.index++;\n fn = this.name();\n this.skipSpace();\n while (this.peek() !== \"}\" && this.peek() !== \"@\" && this.index < this.text.length)\n {\n const option = this.name();\n this.skipSpace();\n this.expect(\"=\");\n this.skipSpace();\n options[option] = this.peek() === \"$\" ? this.variable() : this.literal();\n this.skipSpace();\n }\n }\n while (this.peek() === \"@\")\n {\n this.index++;\n this.name();\n this.skipSpace();\n if (this.peek() === \"=\")\n {\n this.index++;\n this.skipSpace();\n if (this.peek() === \"$\")\n {\n this.variable();\n }\n else\n {\n this.literal();\n }\n this.skipSpace();\n }\n }\n this.expect(\"}\");\n if (operand === undefined && fn === undefined)\n {\n this.fail(\"an expression needs an operand or a function\");\n }\n return { operand, fn, options };\n }\n\n /** Parses pattern text up to `end` (`}}` for quoted patterns, the end of input for simple ones). */\n private pattern(quoted: boolean): Part[]\n {\n const parts: Part[] = [];\n let text = \"\";\n while (this.index < this.text.length)\n {\n const char = this.peek();\n if (quoted && char === \"}\" && this.peek(1) === \"}\")\n {\n break;\n }\n if (char === \"\\\\\")\n {\n const next = this.peek(1);\n if (next !== \"{\" && next !== \"}\" && next !== \"\\\\\" && next !== \"|\")\n {\n this.fail(\"only \\\\{ \\\\} \\\\\\\\ and \\\\| can be escaped\");\n }\n text += next;\n this.index += 2;\n }\n else if (char === \"{\")\n {\n if (text !== \"\")\n {\n parts.push(text);\n text = \"\";\n }\n this.index++;\n const expression = this.expression();\n if (expression !== undefined)\n {\n parts.push(expression);\n }\n }\n else if (char === \"}\")\n {\n this.fail(\"a lone } must be escaped as \\\\}\");\n }\n else\n {\n text += char;\n this.index++;\n }\n }\n if (text !== \"\")\n {\n parts.push(text);\n }\n return parts;\n }\n\n private quotedPattern(): Part[]\n {\n this.expect(\"{{\");\n const parts = this.pattern(true);\n this.expect(\"}}\");\n return parts;\n }\n\n parse(): Message\n {\n const message: Message = { declarations: new Map(), pattern: undefined, selectors: [], variants: [] };\n const trimmed = this.text.trimStart();\n if (!trimmed.startsWith(\".\") && !trimmed.startsWith(\"{{\"))\n {\n message.pattern = this.pattern(false);\n return message;\n }\n this.skipSpace();\n while (this.text.startsWith(\".input\", this.index) || this.text.startsWith(\".local\", this.index))\n {\n const local = this.text.startsWith(\".local\", this.index);\n this.index += 6;\n this.skipSpace();\n let name: string;\n if (local)\n {\n name = this.variable().name;\n this.skipSpace();\n this.expect(\"=\");\n this.skipSpace();\n }\n else\n {\n name = \"\";\n }\n this.expect(\"{\");\n const expression = this.expression();\n if (expression === undefined)\n {\n this.fail(\"a declaration cannot be markup\");\n }\n if (!local)\n {\n if (expression.operand?.kind !== \"variable\")\n {\n this.fail(\".input needs a variable operand\");\n }\n name = expression.operand.name;\n }\n if (message.declarations.has(name))\n {\n this.fail(`$${name} is declared twice`);\n }\n message.declarations.set(name, { expression, local });\n this.skipSpace();\n }\n if (this.text.startsWith(\".match\", this.index))\n {\n this.index += 6;\n this.skipSpace();\n while (this.peek() === \"$\" || this.peek() === \"{\")\n {\n if (this.peek() === \"{\")\n {\n this.index++;\n const expression = this.expression();\n if (expression === undefined)\n {\n this.fail(\"a selector cannot be markup\");\n }\n message.selectors.push(expression);\n }\n else\n {\n message.selectors.push({ operand: this.variable(), fn: undefined, options: {} });\n }\n this.skipSpace();\n }\n if (message.selectors.length === 0)\n {\n this.fail(\".match needs at least one selector\");\n }\n while (this.index < this.text.length)\n {\n const keys: string[] = [];\n while (this.peek() !== \"{\")\n {\n if (this.peek() === \"*\")\n {\n this.index++;\n keys.push(\"*\");\n }\n else\n {\n keys.push(this.literal().value);\n }\n this.skipSpace();\n }\n if (keys.length !== message.selectors.length)\n {\n this.fail(`a variant needs ${message.selectors.length} key(s), found ${keys.length}`);\n }\n message.variants.push({ keys, pattern: this.quotedPattern() });\n this.skipSpace();\n }\n if (!message.variants.some((variant) => variant.keys.every((key) => key === \"*\")))\n {\n this.fail(\"a matcher needs a variant whose keys are all *\");\n }\n return message;\n }\n message.pattern = this.quotedPattern();\n this.skipSpace();\n if (this.index < this.text.length)\n {\n this.fail(\"unexpected text after the pattern\");\n }\n return message;\n }\n}\n\nconst NUMBER_FUNCTIONS = new Set([\"number\", \"integer\", \"percent\", \"currency\", \"offset\"]);\nconst DATE_FUNCTIONS = new Set([\"date\", \"time\", \"datetime\"]);\nconst NUMBER_OPTIONS: Record<string, string> = {\n minimumFractionDigits: \"minimumFractionDigits\",\n maximumFractionDigits: \"maximumFractionDigits\",\n minimumIntegerDigits: \"minimumIntegerDigits\",\n minimumSignificantDigits: \"minimumSignificantDigits\",\n maximumSignificantDigits: \"maximumSignificantDigits\",\n signDisplay: \"signDisplay\",\n trailingZeroDisplay: \"trailingZeroDisplay\",\n roundingMode: \"roundingMode\",\n roundingIncrement: \"roundingIncrement\",\n roundingPriority: \"roundingPriority\",\n currencyDisplay: \"currencyDisplay\",\n currencySign: \"currencySign\",\n numberingSystem: \"numberingSystem\"\n};\n\n/** Names a module cannot bind; a message named so is exported under its name from a binding of its own. */\nconst RESERVED: ReadonlySet<string> = new Set([\"arguments\", \"await\", \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\", \"delete\", \"do\", \"else\", \"enum\", \"eval\", \"export\", \"extends\", \"false\", \"finally\", \"for\", \"function\", \"if\", \"implements\", \"import\", \"in\", \"instanceof\", \"interface\", \"let\", \"new\", \"null\", \"package\", \"private\", \"protected\", \"public\", \"return\", \"static\", \"super\", \"switch\", \"this\", \"throw\", \"true\", \"try\", \"typeof\", \"var\", \"void\", \"while\", \"with\", \"yield\"]);\n\n/** Characters an HTML parser reads inside an inline script, and the line separators older engines refused in string literals. */\nconst SCRIPT_UNSAFE = new RegExp(`[<>${String.fromCodePoint(0x2028, 0x2029)}]`, \"g\");\n\n/** The line breaks of a message's source, each starting a new line of its doc comment. */\nconst SOURCE_LINES = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * A value written as JavaScript source: its JSON, with `<`, `>`, U+2028, and\n * U+2029 escaped, so generated code stays inert even when a page inlines\n * it in a script element.\n */\nfunction jsLiteral(value: unknown): string\n{\n return JSON.stringify(value).replace(SCRIPT_UNSAFE, (character) => `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`);\n}\n\n/** Text for a `//` comment, kept on one line and with `<` written as `<`, so it can end neither the comment nor an inline script. */\nfunction commentText(text: string): string\n{\n return text.split(SOURCE_LINES).join(\" \").replaceAll(\"<\", \"<\");\n}\n\n/** An argument or local name JavaScript can write as it is; MessageFormat also allows `-` and `.`, as in `$first-name`. */\nconst PLAIN_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** A property name as code: as it is when plain, quoted otherwise. */\nfunction property(name: string): string\n{\n return PLAIN_NAME.test(name) ? name : jsLiteral(name);\n}\n\nfunction identifier(key: string): string\n{\n const words = key.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").split(/[^A-Za-z0-9]+/).filter((word) => word !== \"\");\n const name = words.map((word, index) => (index === 0 ? word.charAt(0).toLowerCase() + word.slice(1) : word.charAt(0).toUpperCase() + word.slice(1))).join(\"\");\n return /^[0-9]/.test(name) ? `_${name}` : name === \"\" ? \"_\" : name;\n}\n\nclass Emitter\n{\n readonly arguments: Map<string, ArgumentType> = new Map();\n readonly locals: Map<string, string> = new Map();\n readonly prelude: string[] = [];\n private readonly key: string;\n private readonly message: Message;\n private readonly formatters: Map<string, string>;\n private readonly used: Set<Helper>;\n private reads = 0;\n\n constructor(key: string, message: Message, formatters: Map<string, string>, used: Set<Helper>)\n {\n this.key = key;\n this.message = message;\n this.formatters = formatters;\n this.used = used;\n }\n\n /** The module-level binding of a formatter whose options are known at compile time, created on first use and shared by every message that creates it the same way. */\n private shared(create: string): string\n {\n this.used.add(\"once\");\n let binding = this.formatters.get(create);\n if (binding === undefined)\n {\n binding = `$f${this.formatters.size}`;\n this.formatters.set(create, binding);\n }\n return binding;\n }\n\n private fail(text: string): never\n {\n throw new Error(`zerolith/i18n: message \"${this.key}\": ${text}`);\n }\n\n private argument(name: string, type: ArgumentType): string\n {\n this.reads++;\n const local = this.locals.get(name);\n if (local !== undefined)\n {\n return local;\n }\n const existing = this.arguments.get(name);\n if (existing === undefined || existing === \"string\")\n {\n this.arguments.set(name, type);\n }\n else if (existing !== type && type !== \"string\")\n {\n this.fail(`$${name} is used both as ${existing} and as ${type}`);\n }\n return PLAIN_NAME.test(name) ? `args.${name}` : `args[${jsLiteral(name)}]`;\n }\n\n private optionValue(value: Literal | Variable | undefined): string | undefined\n {\n if (value === undefined)\n {\n return undefined;\n }\n return value.kind === \"literal\" ? jsLiteral(value.value) : `String(${this.argument(value.name, \"string\")})`;\n }\n\n private numberOptions(expression: Expression): string\n {\n const entries: string[] = [];\n const fn = expression.fn ?? \"number\";\n if (fn === \"integer\")\n {\n entries.push(\"maximumFractionDigits: 0\");\n }\n else if (fn === \"percent\")\n {\n entries.push(\"style: \\\"percent\\\"\");\n }\n else if (fn === \"currency\")\n {\n const currency = this.optionValue(expression.options[\"currency\"]);\n if (currency === undefined)\n {\n this.fail(\":currency needs a currency option\");\n }\n entries.push(\"style: \\\"currency\\\"\", `currency: ${currency}`);\n }\n for (const [option, value] of Object.entries(expression.options))\n {\n const mapped = NUMBER_OPTIONS[option];\n if (mapped !== undefined)\n {\n const literal = value.kind === \"literal\" ? value.value : undefined;\n const numeric = literal !== undefined && /^[0-9]+$/.test(literal) ? literal : undefined;\n entries.push(`${mapped}: ${numeric ?? this.optionValue(value) ?? \"undefined\"}`);\n }\n else if (option === \"useGrouping\" && value.kind === \"literal\")\n {\n entries.push(`useGrouping: ${value.value === \"never\" ? \"false\" : value.value === \"always\" ? \"true\" : jsLiteral(value.value)}`);\n }\n else if (option === \"fractionDigits\" && value.kind === \"literal\" && /^[0-9]+$/.test(value.value))\n {\n entries.push(`minimumFractionDigits: ${value.value}`, `maximumFractionDigits: ${value.value}`);\n }\n }\n return entries.length === 0 ? \"{}\" : `{ ${entries.join(\", \")} }`;\n }\n\n private dateOptions(expression: Expression): string\n {\n const entries: string[] = [];\n const fn = expression.fn ?? \"date\";\n const literal = (name: string): string | undefined =>\n {\n const value = expression.options[name];\n return value?.kind === \"literal\" ? value.value : undefined;\n };\n const length = literal(fn === \"datetime\" ? \"dateLength\" : \"length\") ?? (fn === \"time\" ? undefined : \"medium\");\n if (length !== undefined && fn !== \"time\")\n {\n entries.push(`dateStyle: ${jsLiteral(length)}`);\n }\n const precision = literal(fn === \"datetime\" ? \"timePrecision\" : \"precision\") ?? (fn === \"date\" ? undefined : \"minute\");\n if (precision !== undefined && fn !== \"date\")\n {\n entries.push(`timeStyle: ${jsLiteral(precision === \"second\" ? \"medium\" : \"short\")}`);\n }\n const zone = literal(\"timeZone\");\n if (zone !== undefined && zone !== \"input\")\n {\n entries.push(`timeZone: ${jsLiteral(zone)}`);\n }\n const hour12 = literal(\"hour12\");\n if (hour12 !== undefined)\n {\n entries.push(`hour12: ${hour12 === \"true\"}`);\n }\n const style = literal(\"timeZoneStyle\");\n if (style !== undefined)\n {\n entries.push(`timeZoneName: ${jsLiteral(style)}`);\n }\n return entries.length === 0 ? \"{}\" : `{ ${entries.join(\", \")} }`;\n }\n\n /** The JavaScript for an expression's numeric value, before formatting. */\n private numeric(expression: Expression): string\n {\n const operand = expression.operand;\n let value: string;\n if (operand === undefined)\n {\n this.fail(`:${expression.fn ?? \"\"} needs an operand`);\n }\n else if (operand.kind === \"literal\")\n {\n value = Number.isFinite(Number(operand.value)) ? String(Number(operand.value)) : this.fail(`${JSON.stringify(operand.value)} is not a number`);\n }\n else\n {\n value = this.argument(operand.name, \"number\");\n }\n if (expression.fn === \"offset\")\n {\n const add = this.optionValue(expression.options[\"add\"]);\n const subtract = this.optionValue(expression.options[\"subtract\"]);\n if ((add === undefined) === (subtract === undefined))\n {\n this.fail(\":offset needs exactly one of add or subtract\");\n }\n value = `(${value} ${add === undefined ? \"-\" : \"+\"} Number(${add ?? subtract ?? \"0\"}))`;\n }\n return value;\n }\n\n /** Resolves a plain `{$x}` to its `.input` declaration when one exists, or with `locals` to its `.local` one too, so a selector on a local selects as its expression does. */\n private resolve(expression: Expression, locals = false): Expression\n {\n if (expression.fn === undefined && expression.operand?.kind === \"variable\")\n {\n const declared = this.message.declarations.get(expression.operand.name);\n if (declared !== undefined && (locals || !declared.local))\n {\n return declared.expression;\n }\n }\n return expression;\n }\n\n /** The JavaScript producing the formatted string of an expression. */\n format(raw: Expression): string\n {\n const expression = this.resolve(raw);\n const fn = expression.fn;\n if (fn === undefined || fn === \"string\")\n {\n const operand = expression.operand;\n if (operand === undefined)\n {\n this.fail(\":string needs an operand\");\n }\n return operand.kind === \"literal\" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, \"string\")})`;\n }\n if (NUMBER_FUNCTIONS.has(fn))\n {\n const value = this.numeric(expression);\n const reads = this.reads;\n const options = this.numberOptions(expression);\n if (this.reads === reads)\n {\n return `${this.shared(`new Intl.NumberFormat(locale, ${options})`)}().format(${value})`;\n }\n this.used.add(\"number\");\n return `$number(${value}, ${options})`;\n }\n if (DATE_FUNCTIONS.has(fn))\n {\n const operand = expression.operand;\n if (operand === undefined)\n {\n this.fail(`:${fn} needs an operand`);\n }\n const value = operand.kind === \"literal\" ? `new Date(${jsLiteral(operand.value)})` : this.argument(operand.name, \"date\");\n return `${this.shared(`new Intl.DateTimeFormat(locale, ${this.dateOptions(expression)})`)}().format(${value})`;\n }\n this.fail(`unknown function :${fn}`);\n }\n\n /** The JavaScript for a selector: its comparable value and the categories it matches. */\n selector(raw: Expression): string\n {\n const expression = this.resolve(raw, true);\n const fn = expression.fn ?? \"string\";\n if (NUMBER_FUNCTIONS.has(fn))\n {\n const select = expression.options[\"select\"];\n const mode = select?.kind === \"literal\" ? select.value : \"plural\";\n const value = fn === \"percent\" ? `(${this.numeric(expression)}) * 100` : this.numeric(expression);\n if (mode === \"exact\")\n {\n return `{ value: String(${value}), categories: [] }`;\n }\n const type = jsLiteral(mode === \"ordinal\" ? \"ordinal\" : \"cardinal\");\n const reads = this.reads;\n const options = this.numberOptions(expression);\n if (this.reads === reads)\n {\n return `{ value: String(${value}), categories: [${this.shared(`new Intl.PluralRules(locale, { ...new Intl.NumberFormat(locale, ${options}).resolvedOptions(), type: ${type} })`)}().select(${value})] }`;\n }\n this.used.add(\"plural\");\n return `{ value: String(${value}), categories: [$plural(${value}, ${type}, ${options})] }`;\n }\n if (fn === \"string\")\n {\n const operand = expression.operand;\n if (operand === undefined)\n {\n this.fail(\"a selector needs an operand\");\n }\n const value = operand.kind === \"literal\" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, \"string\")})`;\n return `{ value: ${value}, categories: [] }`;\n }\n this.fail(`:${fn} cannot select`);\n }\n\n pattern(parts: Part[]): string\n {\n if (parts.length === 0)\n {\n return \"\\\"\\\"\";\n }\n return parts.map((part) => (typeof part === \"string\" ? jsLiteral(part) : this.format(part))).join(\" + \");\n }\n\n body(): string\n {\n for (const [name, declaration] of this.message.declarations)\n {\n if (declaration.local)\n {\n const value = this.format(declaration.expression);\n const binding = PLAIN_NAME.test(name) ? `local_${name}` : `local_${this.locals.size}`;\n this.locals.set(name, binding);\n this.prelude.push(`const ${binding} = ${value};`);\n }\n }\n if (this.message.pattern !== undefined)\n {\n return this.pattern(this.message.pattern);\n }\n const selectors = this.message.selectors.map((selector) => this.selector(selector));\n const variants = this.message.variants.map((variant) => `{ keys: ${jsLiteral(variant.keys)}, pattern: () => ${this.pattern(variant.pattern)} }`);\n this.used.add(\"select\");\n return `$select([${selectors.join(\", \")}], [${variants.join(\", \")}])`;\n }\n}\n\n/** A group of helpers a compiled module shares; each is written only when one of the module's messages uses it. */\ntype Helper = \"cache\" | \"once\" | \"number\" | \"plural\" | \"select\";\n\n/** The helpers in JavaScript and in TypeScript, in the order a module writes them. */\nconst HELPERS: Record<Helper, { js: string; ts: string }> = {\n cache: {\n js: `const $formats = new Map();\nfunction $cached(kind, options, create)\n{\n const key = kind + JSON.stringify(options);\n let instance = $formats.get(key);\n if (instance === undefined)\n {\n instance = create();\n $formats.set(key, instance);\n }\n return instance;\n}`,\n ts: `const $formats: Map<string, unknown> = new Map();\nfunction $cached<T>(kind: string, options: object, create: () => T): T\n{\n const key = kind + JSON.stringify(options);\n let instance = $formats.get(key) as T | undefined;\n if (instance === undefined)\n {\n instance = create();\n $formats.set(key, instance);\n }\n return instance;\n}`\n },\n once: {\n js: `function $once(create)\n{\n let instance;\n return () => (instance ??= create());\n}`,\n ts: `function $once<T>(create: () => T): () => T\n{\n let instance: T | undefined;\n return () => (instance ??= create());\n}`\n },\n number: {\n js: `function $number(value, options)\n{\n return $cached(\"n\", options, () => new Intl.NumberFormat(locale, options)).format(value);\n}`,\n ts: `function $number(value: number, options: Intl.NumberFormatOptions): string\n{\n return $cached(\"n\", options, () => new Intl.NumberFormat(locale, options)).format(value);\n}`\n },\n plural: {\n js: `function $plural(value, type, options)\n{\n return $cached(\"p\" + type, options, () => new Intl.PluralRules(locale, { ...$cached(\"n\", options, () => new Intl.NumberFormat(locale, options)).resolvedOptions(), type })).select(value);\n}`,\n ts: `function $plural(value: number, type: \"cardinal\" | \"ordinal\", options: Intl.NumberFormatOptions): string\n{\n return $cached(\"p\" + type, options, () => new Intl.PluralRules(locale, { ...$cached(\"n\", options, () => new Intl.NumberFormat(locale, options)).resolvedOptions(), type })).select(value);\n}`\n },\n select: {\n js: `function $select(selectors, variants)\n{\n let best;\n let bestRank;\n for (const variant of variants)\n {\n const rank = [];\n let matches = true;\n for (const [index, key] of variant.keys.entries())\n {\n const selector = selectors[index];\n if (key === \"*\")\n {\n rank.push(0);\n }\n else if (key === selector.value)\n {\n rank.push(2);\n }\n else if (selector.categories.includes(key))\n {\n rank.push(1);\n }\n else\n {\n matches = false;\n break;\n }\n }\n if (!matches)\n {\n continue;\n }\n if (matches && $better(rank, bestRank))\n {\n best = variant;\n bestRank = rank;\n }\n }\n return best === undefined ? \"\" : best.pattern();\n}\nfunction $better(rank, current)\n{\n if (current === undefined)\n {\n return true;\n }\n for (const [index, score] of rank.entries())\n {\n const other = current[index] ?? 0;\n if (score !== other)\n {\n return score > other;\n }\n }\n return false;\n}`,\n ts: `interface Selector\n{\n value: string;\n categories: string[];\n}\ninterface Variant\n{\n keys: string[];\n pattern: () => string;\n}\nfunction $better(rank: number[], current: number[] | undefined): boolean\n{\n if (current === undefined)\n {\n return true;\n }\n for (const [index, score] of rank.entries())\n {\n const other = current[index] ?? 0;\n if (score !== other)\n {\n return score > other;\n }\n }\n return false;\n}\nfunction $select(selectors: Selector[], variants: Variant[]): string\n{\n let best: Variant | undefined;\n let bestRank: number[] | undefined;\n for (const variant of variants)\n {\n const rank: number[] = [];\n let matches = true;\n for (const [index, key] of variant.keys.entries())\n {\n const selector = selectors[index];\n if (key === \"*\")\n {\n rank.push(0);\n }\n else if (selector !== undefined && key === selector.value)\n {\n rank.push(2);\n }\n else if (selector !== undefined && selector.categories.includes(key))\n {\n rank.push(1);\n }\n else\n {\n matches = false;\n break;\n }\n }\n if (matches && $better(rank, bestRank))\n {\n best = variant;\n bestRank = rank;\n }\n }\n return best === undefined ? \"\" : best.pattern();\n}`\n }\n};\n\n/** The helpers a module's messages use, with the cache that `$number` and `$plural` share. */\nfunction helpersFor(used: ReadonlySet<Helper>, javascript: boolean): string\n{\n const needed = new Set(used);\n if (needed.has(\"number\") || needed.has(\"plural\"))\n {\n needed.add(\"cache\");\n }\n return (Object.keys(HELPERS) as Helper[]).filter((name) => needed.has(name)).map((name) => HELPERS[name][javascript ? \"js\" : \"ts\"]).join(\"\\n\");\n}\n\nfunction typeOf(type: ArgumentType): string\n{\n return type === \"number\" ? \"number\" : type === \"date\" ? \"Date | number\" : \"string | number\";\n}\n\n/**\n * Compiles one locale's catalog into a module: `locale`, one exported\n * function per message named from its key, and the `Intl` helpers they\n * share. Each function takes an `args` object typed from the message's\n * placeholders, or nothing when the message has none. A formatter whose\n * options are all literals is a module-level binding created on first use\n * and shared by every message that formats the same way; options that read\n * an argument find their formatter in a cache keyed by the options. Only\n * the helpers the messages use are written.\n */\nexport function compileMessages(locale: string, catalog: Catalog, options: CompileOptions = {}): CompiledCatalog\n{\n const javascript = options.language === \"js\";\n const out: string[] = [];\n out.push(`// Generated by @zerolith/i18n from ${commentText(options.source ?? `the ${locale} catalog`)}. Do not edit; regenerate instead.`);\n if (javascript)\n {\n out.push(\"// @ts-check\");\n }\n out.push(`export const locale${javascript ? \"\" : \": string\"} = ${jsLiteral(locale)};`);\n out.push(\"\");\n const head = out.length;\n const formatters = new Map<string, string>();\n const used = new Set<Helper>();\n const names: string[] = [];\n const seen = new Set<string>();\n for (const [key, source] of Object.entries(catalog))\n {\n const name = identifier(key);\n if (seen.has(name))\n {\n throw new Error(`zerolith/i18n: keys \"${key}\" and another one both become ${name}`);\n }\n if (name === \"locale\")\n {\n throw new Error(`zerolith/i18n: key \"${key}\" becomes locale, which every compiled module exports; rename the key`);\n }\n const binding = RESERVED.has(name) ? `message_${name}` : name;\n seen.add(name);\n names.push(name);\n const message = new Parser(source, key).parse();\n const emitter = new Emitter(key, message, formatters, used);\n const body = emitter.body();\n const args = [...emitter.arguments.entries()].toSorted(([a], [b]) => a.localeCompare(b));\n const doc = source.replace(/\\*\\//g, \"* /\").replaceAll(\"<\", \"<\").split(SOURCE_LINES).map((line) => ` * ${line}`.trimEnd()).join(\"\\n\");\n const argumentType = `{ ${args.map(([argument, type]) => `${property(argument)}: ${typeOf(type)}`).join(\"; \")} }`;\n if (javascript)\n {\n out.push(`/**\\n${doc}${args.length > 0 ? `\\n * @param {${argumentType}} args` : \"\"}\\n * @returns {string}\\n */`);\n out.push(`${binding === name ? \"export \" : \"\"}function ${binding}(${args.length > 0 ? \"args\" : \"\"})`);\n }\n else\n {\n out.push(`/**\\n${doc}\\n */`);\n out.push(`${binding === name ? \"export \" : \"\"}function ${binding}(${args.length > 0 ? `args: ${argumentType}` : \"\"}): string`);\n }\n out.push(\"{\");\n for (const line of emitter.prelude)\n {\n out.push(` ${line}`);\n }\n out.push(` return ${body};`);\n out.push(\"}\");\n if (binding !== name)\n {\n out.push(`export { ${binding} as ${name} };`);\n }\n out.push(\"\");\n }\n const helpers = helpersFor(used, javascript);\n const shared = Array.from(formatters, ([create, binding]) => `const ${binding} = $once(() => ${create});`);\n out.splice(head, 0, ...(helpers === \"\" ? [] : [helpers, \"\"]), ...(shared.length === 0 ? [] : [...shared, \"\"]));\n return { code: out.join(\"\\n\"), names };\n}\n\n/** The keys of a catalog as function names, for comparing locales. */\nexport function messageNames(catalog: Catalog): string[]\n{\n return Object.keys(catalog).map(identifier);\n}\n\n/**\n * The index module for a set of locales: the list of locales and one lazy\n * loader per locale, so each locale is its own chunk.\n */\nexport function compileIndex(locales: readonly string[], options: CompileOptions = {}): string\n{\n const javascript = options.language === \"js\";\n const extension = javascript ? \"js\" : \"ts\";\n const lines = [`// Generated by @zerolith/i18n. Do not edit; regenerate instead.`];\n if (javascript)\n {\n lines.push(\"// @ts-check\");\n }\n if (!javascript)\n {\n lines.push(`import type * as first from ${jsLiteral(`./${locales[0] ?? \"en\"}.${extension}`)};`);\n lines.push(\"\");\n }\n lines.push(`export const locales${javascript ? \"\" : \": readonly string[]\"} = ${jsLiteral(locales)};`);\n lines.push(\"\");\n lines.push(`/** Loads one locale's messages; each locale is its own module. */`);\n lines.push(javascript ? \"export const loaders = {\" : \"export const loaders: Readonly<Record<string, () => Promise<typeof first>>> = {\");\n lines.push(locales.map((locale) => ` ${jsLiteral(locale)}: () => import(${jsLiteral(`./${locale}.${extension}`)})`).join(\",\\n\"));\n lines.push(\"};\");\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n"],"names":["Parser","text","key","message","offset","token","match","value","operand","fn","options","option","parts","char","quoted","next","expression","trimmed","local","name","keys","variant","NUMBER_FUNCTIONS","DATE_FUNCTIONS","NUMBER_OPTIONS","RESERVED","SCRIPT_UNSAFE","SOURCE_LINES","jsLiteral","character","commentText","PLAIN_NAME","property","identifier","word","index","Emitter","formatters","used","binding","create","existing","type","entries","currency","\"currency\"","mapped","literal","numeric","length","precision","zone","hour12","style","add","\"add\"","subtract","\"subtract\"","declared","locals","raw","reads","select","\"select\"","mode","part","declaration","selectors","selector","variants","HELPERS","helpersFor","needed","javascript","typeOf","out","locale","head","names","seen","source","catalog","emitter","body","args","a","b","doc","line","argumentType","argument","helpers","shared","extension","lines","locales"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{computed as e,effect as t,signal as n}from"zerolith";export function parseAcceptLanguage(e){if(e==null||e.trim()===``)return[];let t=[];for(let[n,r]of e.split(`,`).entries()){let[e=``,...i]=r.split(`;`),a=e.trim();if(a===``)continue;let o=1;for(let e of i){let[t=``,n=``]=e.split(`=`);if(t.trim().toLowerCase()===`q`){let e=Number(n.trim());o=Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}}o>0&&t.push({range:a,quality:o-n*1e-9})}return t.toSorted((e,t)=>t.quality-e.quality).map(({range:e,quality:t})=>({range:e,quality:Math.round(t*1e3)/1e3}))}function r(e){try{return Intl.getCanonicalLocales(e)[0]??e}catch{return e}}export function negotiateLocale(e,t,n){let a=typeof e==`string`?parseAcceptLanguage(e).map(e=>e.range):[...e??[]],o=t.map(e=>({tag:e,lower:r(e).toLowerCase()}));for(let e of a){let t=r(e).toLowerCase();if(t===`*`)return n;for(let e=t;e!==``;e=e.includes(`-`)?e.slice(0,e.lastIndexOf(`-`)):``){let t=o.find(t=>t.lower===e);if(t!==void 0)return t.tag}let a=t.split(`-`)[0]??t,s=o.filter(e=>e.lower.startsWith(`${a}-`));if(s.length>0){let t=i(e);return(s.find(e=>i(e.tag)===t)??s[0])?.tag??n}}return n}function i(e){try{return new Intl.Locale(e).maximize().script}catch{return}}const a=new Set([`adlm`,`arab`,`hebr`,`mand`,`mend`,`nkoo`,`rohg`,`samr`,`syrc`,`thaa`,`yezi`]);export function localeDirection(e){try{let t=new Intl.Locale(e),n=t,r=n.getTextInfo?.()??n.textInfo;return r===void 0?a.has((t.maximize().script??``).toLowerCase())?`rtl`:`ltr`:r.direction===`rtl`?`rtl`:`ltr`}catch{return`ltr`}}export function createLocale(t){let i=[...t.supported];if(i.length===0)throw TypeError(`zerolith/i18n: createLocale needs at least one supported locale`);let a=t.fallback===void 0?i[0]??``:i.find(e=>r(e).toLowerCase()===r(t.fallback??``).toLowerCase());if(a===void 0)throw TypeError(`zerolith/i18n: the fallback ${t.fallback??``} is not one of the supported locales, ${i.join(`, `)}`);let o=n(negotiateLocale(t.initial??a,i,a),{name:`locale`});return{locale:o,direction:e(()=>localeDirection(o.get())),supported:i,set(e){o.set(negotiateLocale(e,i,a))}}}export function applyLocale(e,n=document){return t(()=>{n.documentElement.lang=e.locale.get(),n.documentElement.dir=e.direction.get()})}const o=new Map;function s(e,t,n,r){let i=`${e}\u0000${t}\u0000${n===void 0?``:JSON.stringify(n)}`,a=o.get(i);return a===void 0&&(a=r(),o.set(i,a)),a}export function formatters(e){let t=()=>typeof e==`string`?e:e.get();return{number:(e,n)=>s(`number`,t(),n,()=>new Intl.NumberFormat(t(),n)).format(e),date:(e,n)=>s(`date`,t(),n,()=>new Intl.DateTimeFormat(t(),n)).format(e),relative:(e,n,r)=>s(`relative`,t(),r,()=>new Intl.RelativeTimeFormat(t(),r)).format(e,n),list:(e,n)=>s(`list`,t(),n,()=>new Intl.ListFormat(t(),n)).format(e),plural:(e,n)=>s(`plural`,t(),n,()=>new Intl.PluralRules(t(),n)).select(e)}}
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/**\n * @zerolith/i18n: the locale layer, built on `Intl` with nothing shipped.\n * Negotiation of the request's or the browser's languages against the\n * locales an application supports, the current locale and its direction\n * as signals, the document's `lang` and `dir`, and formatters cached per\n * locale. Message catalogs are compiled ahead of time by\n * `@zerolith/i18n/compile` into plain functions, so no message runtime\n * exists here either.\n */\nimport { type ReadableSignal, type Signal, computed, effect, signal } from \"zerolith\";\n\n/** One entry of an `Accept-Language` header or of `navigator.languages`. */\nexport interface LanguageRange\n{\n /** The language tag, or `*` for any language, as written before any `;` parameters. */\n readonly range: string;\n /** The entry's `q` weight between 0 and 1, rounded to three decimals; 1 when the entry gives none. */\n readonly quality: number;\n}\n\n/** Parses an `Accept-Language` header into ranges ordered by quality, dropping those with quality zero. */\nexport function parseAcceptLanguage(header: string | null | undefined): LanguageRange[]\n{\n if (header === null || header === undefined || header.trim() === \"\")\n {\n return [];\n }\n const ranges: LanguageRange[] = [];\n for (const [index, part] of header.split(\",\").entries())\n {\n const [rawRange = \"\", ...parameters] = part.split(\";\");\n const range = rawRange.trim();\n if (range === \"\")\n {\n continue;\n }\n let quality = 1;\n for (const parameter of parameters)\n {\n const [key = \"\", value = \"\"] = parameter.split(\"=\");\n if (key.trim().toLowerCase() === \"q\")\n {\n const parsed = Number(value.trim());\n quality = Number.isFinite(parsed) ? Math.min(1, Math.max(0, parsed)) : 0;\n }\n }\n if (quality > 0)\n {\n ranges.push({ range, quality: quality - index * 1e-9 });\n }\n }\n return ranges.toSorted((a, b) => b.quality - a.quality).map(({ range, quality }) => ({ range, quality: Math.round(quality * 1000) / 1000 }));\n}\n\nfunction canonical(tag: string): string\n{\n try\n {\n return Intl.getCanonicalLocales(tag)[0] ?? tag;\n }\n catch\n {\n return tag;\n }\n}\n\n/**\n * Picks the supported locale that best matches what was requested: an\n * `Accept-Language` header, `navigator.languages`, or one tag. Each range\n * is tried in order of quality, first as an exact match, then by dropping\n * subtags from the end as RFC 4647 lookup does, then as the language of a\n * more specific supported locale, preferring one written in the same\n * script, so `zh-HK` finds `zh-TW` before `zh-CN`. `*` and no match at all\n * give `fallback`.\n */\nexport function negotiateLocale(requested: string | readonly string[] | null | undefined, supported: readonly string[], fallback: string): string\n{\n const ranges = typeof requested === \"string\" ? parseAcceptLanguage(requested).map((entry) => entry.range) : [...(requested ?? [])];\n const candidates = supported.map((tag) => ({ tag, lower: canonical(tag).toLowerCase() }));\n for (const range of ranges)\n {\n const wanted = canonical(range).toLowerCase();\n if (wanted === \"*\")\n {\n return fallback;\n }\n for (let prefix = wanted; prefix !== \"\"; prefix = prefix.includes(\"-\") ? prefix.slice(0, prefix.lastIndexOf(\"-\")) : \"\")\n {\n const exact = candidates.find((candidate) => candidate.lower === prefix);\n if (exact !== undefined)\n {\n return exact.tag;\n }\n }\n const language = wanted.split(\"-\")[0] ?? wanted;\n const related = candidates.filter((candidate) => candidate.lower.startsWith(`${language}-`));\n if (related.length > 0)\n {\n const script = scriptOf(range);\n return (related.find((candidate) => scriptOf(candidate.tag) === script) ?? related[0])?.tag ?? fallback;\n }\n }\n return fallback;\n}\n\n/** The script a locale is written in, with the likely script filled in, as `Hant` for `zh-TW`; undefined for a tag that does not parse. */\nfunction scriptOf(tag: string): string | undefined\n{\n try\n {\n return new Intl.Locale(tag).maximize().script;\n }\n catch\n {\n return undefined;\n }\n}\n\n/** The scripts written right to left, by their ISO 15924 codes in lowercase. */\nconst RTL_SCRIPTS: ReadonlySet<string> = new Set([\"adlm\", \"arab\", \"hebr\", \"mand\", \"mend\", \"nkoo\", \"rohg\", \"samr\", \"syrc\", \"thaa\", \"yezi\"]);\n\n/** The writing direction of a locale, from `Intl.Locale` where the engine provides it and otherwise from its script, the likely one when the tag names none, as engines decide. */\nexport function localeDirection(locale: string): \"ltr\" | \"rtl\"\n{\n try\n {\n const parsed = new Intl.Locale(locale);\n const withInfo = parsed as Intl.Locale & { getTextInfo?: () => { direction: string }; textInfo?: { direction: string } };\n const info = withInfo.getTextInfo?.() ?? withInfo.textInfo;\n if (info !== undefined)\n {\n return info.direction === \"rtl\" ? \"rtl\" : \"ltr\";\n }\n return RTL_SCRIPTS.has((parsed.maximize().script ?? \"\").toLowerCase()) ? \"rtl\" : \"ltr\";\n }\n catch\n {\n return \"ltr\";\n }\n}\n\n/** Options for `createLocale`. */\nexport interface LocaleOptions\n{\n /** The locales the application ships, most preferred first. */\n supported: readonly string[];\n /** The locale used when nothing matches, one of `supported`. Defaults to the first supported one. */\n fallback?: string;\n /** What to negotiate from at first: an `Accept-Language` header, `navigator.languages`, or a tag. Defaults to the fallback. */\n initial?: string | readonly string[] | null;\n}\n\n/** The current locale as state. */\nexport interface LocaleState\n{\n /** The current locale, always one of `supported`. */\n readonly locale: ReadableSignal<string>;\n /** The writing direction of the current locale. */\n readonly direction: ReadableSignal<\"ltr\" | \"rtl\">;\n /** A copy of the `supported` option, in the same order; `set` negotiates against it. */\n readonly supported: readonly string[];\n /** Switches locales after negotiating the request against `supported`. */\n set(requested: string | readonly string[]): void;\n}\n\n/** Creates the locale state for an application. Throws a `TypeError` when `supported` is empty or `fallback` is not one of its locales, since the locale must always be one of them. */\nexport function createLocale(options: LocaleOptions): LocaleState\n{\n const supported = [...options.supported];\n if (supported.length === 0)\n {\n throw new TypeError(\"zerolith/i18n: createLocale needs at least one supported locale\");\n }\n const fallback = options.fallback === undefined ? (supported[0] ?? \"\") : supported.find((tag) => canonical(tag).toLowerCase() === canonical(options.fallback ?? \"\").toLowerCase());\n if (fallback === undefined)\n {\n throw new TypeError(`zerolith/i18n: the fallback ${options.fallback ?? \"\"} is not one of the supported locales, ${supported.join(\", \")}`);\n }\n const locale: Signal<string> = signal(negotiateLocale(options.initial ?? fallback, supported, fallback), { name: \"locale\" });\n return {\n locale,\n direction: computed(() => localeDirection(locale.get())),\n supported,\n set(requested)\n {\n locale.set(negotiateLocale(requested, supported, fallback));\n }\n };\n}\n\n/** Keeps the document's `lang` and `dir` attributes in step with the locale; returns the effect's disposer. */\nexport function applyLocale(state: LocaleState, doc: Document = document): () => void\n{\n return effect(() =>\n {\n doc.documentElement.lang = state.locale.get();\n doc.documentElement.dir = state.direction.get();\n });\n}\n\n/** Formatters for the current locale; each reads the locale signal when called, so a computed value or template re-renders on a locale change. */\nexport interface Formatters\n{\n /** Formats a number with `Intl.NumberFormat`. */\n number(value: number, options?: Intl.NumberFormatOptions): string;\n /** Formats a `Date`, or a timestamp in milliseconds since the epoch, with `Intl.DateTimeFormat`. */\n date(value: Date | number, options?: Intl.DateTimeFormatOptions): string;\n /** Formats a time `value` units of `unit` away from now with `Intl.RelativeTimeFormat`, such as `in 2 hours`; a negative value lies in the past. */\n relative(value: number, unit: Intl.RelativeTimeFormatUnit, options?: Intl.RelativeTimeFormatOptions): string;\n /** Joins strings into a list with `Intl.ListFormat`, such as `a, b, and c` in English. */\n list(values: Iterable<string>, options?: Intl.ListFormatOptions): string;\n /** Selects the plural category of a number with `Intl.PluralRules`, such as `one` or `other`, for choosing a message variant. */\n plural(value: number, options?: Intl.PluralRulesOptions): Intl.LDMLPluralRule;\n}\n\nconst cache = new Map<string, unknown>();\n\nfunction cached<T>(kind: string, locale: string, options: object | undefined, create: () => T): T\n{\n const key = `${kind}\\u0000${locale}\\u0000${options === undefined ? \"\" : JSON.stringify(options)}`;\n let instance = cache.get(key) as T | undefined;\n if (instance === undefined)\n {\n instance = create();\n cache.set(key, instance);\n }\n return instance;\n}\n\n/** Creates formatters over a locale, given as a signal or as a fixed tag. Instances are cached per locale and options. */\nexport function formatters(locale: ReadableSignal<string> | string): Formatters\n{\n const current = (): string => (typeof locale === \"string\" ? locale : locale.get());\n return {\n number: (value, options) => cached(\"number\", current(), options, () => new Intl.NumberFormat(current(), options)).format(value),\n date: (value, options) => cached(\"date\", current(), options, () => new Intl.DateTimeFormat(current(), options)).format(value),\n relative: (value, unit, options) => cached(\"relative\", current(), options, () => new Intl.RelativeTimeFormat(current(), options)).format(value, unit),\n list: (values, options) => cached(\"list\", current(), options, () => new Intl.ListFormat(current(), options)).format(values),\n plural: (value, options) => cached(\"plural\", current(), options, () => new Intl.PluralRules(current(), options)).select(value)\n };\n}\n"],"names":["header","ranges","index","part","rawRange","parameters","range","quality","parameter","key","value","parsed","b","a","canonical","tag","requested","entry","candidates","supported","wanted","fallback","prefix","exact","candidate","language","related","script","scriptOf","RTL_SCRIPTS","locale","withInfo","info","options","signal","computed","effect","state","cache","cached","kind","instance","create","current","unit","values"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerolith/i18n",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.8",
|
|
4
4
|
"description": "Internationalization for zerolith built on Intl with nothing shipped: locale negotiation and state, direction and document language, cached formatters, and a compiler that turns MessageFormat 2 catalogs into per-locale modules",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "molexxxx",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://zerolith.dev/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/molexxxx/zerolith.git",
|
|
@@ -30,11 +30,13 @@
|
|
|
30
30
|
"exports": {
|
|
31
31
|
".": {
|
|
32
32
|
"types": "./dist/index.d.ts",
|
|
33
|
-
"
|
|
33
|
+
"development": "./dist/index.js",
|
|
34
|
+
"default": "./dist/production/index.js"
|
|
34
35
|
},
|
|
35
36
|
"./compile": {
|
|
36
37
|
"types": "./dist/compile.d.ts",
|
|
37
|
-
"
|
|
38
|
+
"development": "./dist/compile.js",
|
|
39
|
+
"default": "./dist/production/compile.js"
|
|
38
40
|
},
|
|
39
41
|
"./package.json": "./package.json"
|
|
40
42
|
},
|
|
@@ -45,12 +47,12 @@
|
|
|
45
47
|
"README.md"
|
|
46
48
|
],
|
|
47
49
|
"scripts": {
|
|
48
|
-
"build": "tsc -p tsconfig.build.json"
|
|
50
|
+
"build": "tsc -p tsconfig.build.json && node ../../scripts/production.ts"
|
|
49
51
|
},
|
|
50
52
|
"peerDependencies": {
|
|
51
|
-
"zerolith": "^0.1.0-alpha.
|
|
53
|
+
"zerolith": "^0.1.0-alpha.8"
|
|
52
54
|
},
|
|
53
55
|
"devDependencies": {
|
|
54
|
-
"zerolith": "^0.1.0-alpha.
|
|
56
|
+
"zerolith": "^0.1.0-alpha.8"
|
|
55
57
|
}
|
|
56
58
|
}
|
package/src/cli.ts
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
8
8
|
import { basename, join } from "node:path";
|
|
9
|
+
import { realpathSync } from "node:fs";
|
|
9
10
|
import process from "node:process";
|
|
11
|
+
import { pathToFileURL } from "node:url";
|
|
10
12
|
import { type Catalog, compileIndex, compileMessages, messageNames } from "./compile.js";
|
|
11
13
|
|
|
12
14
|
const USAGE = "usage: zerolith-i18n <folder> [--out <folder>] [--js] [--strict]\n";
|
|
@@ -181,7 +183,21 @@ export async function main(argv: readonly string[]): Promise<number>
|
|
|
181
183
|
return missing > 0 && parsed.strict ? 1 : 0;
|
|
182
184
|
}
|
|
183
185
|
|
|
184
|
-
|
|
186
|
+
/** True when node started this module, directly or through the bin link npm installs, which it resolves the way node resolves its entry. */
|
|
187
|
+
function started(): boolean
|
|
188
|
+
{
|
|
189
|
+
const entry = process.argv[1];
|
|
190
|
+
try
|
|
191
|
+
{
|
|
192
|
+
return entry !== undefined && pathToFileURL(realpathSync(entry)).href === import.meta.url;
|
|
193
|
+
}
|
|
194
|
+
catch
|
|
195
|
+
{
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (started())
|
|
185
201
|
{
|
|
186
202
|
process.exitCode = await main(process.argv.slice(2));
|
|
187
203
|
}
|
package/src/compile.ts
CHANGED
|
@@ -418,13 +418,35 @@ const NUMBER_OPTIONS: Record<string, string> = {
|
|
|
418
418
|
/** Names a module cannot bind; a message named so is exported under its name from a binding of its own. */
|
|
419
419
|
const RESERVED: ReadonlySet<string> = new Set(["arguments", "await", "break", "case", "catch", "class", "const", "continue", "debugger", "default", "delete", "do", "else", "enum", "eval", "export", "extends", "false", "finally", "for", "function", "if", "implements", "import", "in", "instanceof", "interface", "let", "new", "null", "package", "private", "protected", "public", "return", "static", "super", "switch", "this", "throw", "true", "try", "typeof", "var", "void", "while", "with", "yield"]);
|
|
420
420
|
|
|
421
|
+
/** Characters an HTML parser reads inside an inline script, and the line separators older engines refused in string literals. */
|
|
422
|
+
const SCRIPT_UNSAFE = new RegExp(`[<>${String.fromCodePoint(0x2028, 0x2029)}]`, "g");
|
|
423
|
+
|
|
424
|
+
/** The line breaks of a message's source, each starting a new line of its doc comment. */
|
|
425
|
+
const SOURCE_LINES = /\r\n|[\n\r\u2028\u2029]/;
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* A value written as JavaScript source: its JSON, with `<`, `>`, U+2028, and
|
|
429
|
+
* U+2029 escaped, so generated code stays inert even when a page inlines
|
|
430
|
+
* it in a script element.
|
|
431
|
+
*/
|
|
432
|
+
function jsLiteral(value: unknown): string
|
|
433
|
+
{
|
|
434
|
+
return JSON.stringify(value).replace(SCRIPT_UNSAFE, (character) => `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/** Text for a `//` comment, kept on one line and with `<` written as `<`, so it can end neither the comment nor an inline script. */
|
|
438
|
+
function commentText(text: string): string
|
|
439
|
+
{
|
|
440
|
+
return text.split(SOURCE_LINES).join(" ").replaceAll("<", "<");
|
|
441
|
+
}
|
|
442
|
+
|
|
421
443
|
/** An argument or local name JavaScript can write as it is; MessageFormat also allows `-` and `.`, as in `$first-name`. */
|
|
422
444
|
const PLAIN_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
423
445
|
|
|
424
446
|
/** A property name as code: as it is when plain, quoted otherwise. */
|
|
425
447
|
function property(name: string): string
|
|
426
448
|
{
|
|
427
|
-
return PLAIN_NAME.test(name) ? name :
|
|
449
|
+
return PLAIN_NAME.test(name) ? name : jsLiteral(name);
|
|
428
450
|
}
|
|
429
451
|
|
|
430
452
|
function identifier(key: string): string
|
|
@@ -488,7 +510,7 @@ class Emitter
|
|
|
488
510
|
{
|
|
489
511
|
this.fail(`$${name} is used both as ${existing} and as ${type}`);
|
|
490
512
|
}
|
|
491
|
-
return PLAIN_NAME.test(name) ? `args.${name}` : `args[${
|
|
513
|
+
return PLAIN_NAME.test(name) ? `args.${name}` : `args[${jsLiteral(name)}]`;
|
|
492
514
|
}
|
|
493
515
|
|
|
494
516
|
private optionValue(value: Literal | Variable | undefined): string | undefined
|
|
@@ -497,7 +519,7 @@ class Emitter
|
|
|
497
519
|
{
|
|
498
520
|
return undefined;
|
|
499
521
|
}
|
|
500
|
-
return value.kind === "literal" ?
|
|
522
|
+
return value.kind === "literal" ? jsLiteral(value.value) : `String(${this.argument(value.name, "string")})`;
|
|
501
523
|
}
|
|
502
524
|
|
|
503
525
|
private numberOptions(expression: Expression): string
|
|
@@ -532,7 +554,7 @@ class Emitter
|
|
|
532
554
|
}
|
|
533
555
|
else if (option === "useGrouping" && value.kind === "literal")
|
|
534
556
|
{
|
|
535
|
-
entries.push(`useGrouping: ${value.value === "never" ? "false" : value.value === "always" ? "true" :
|
|
557
|
+
entries.push(`useGrouping: ${value.value === "never" ? "false" : value.value === "always" ? "true" : jsLiteral(value.value)}`);
|
|
536
558
|
}
|
|
537
559
|
else if (option === "fractionDigits" && value.kind === "literal" && /^[0-9]+$/.test(value.value))
|
|
538
560
|
{
|
|
@@ -554,17 +576,17 @@ class Emitter
|
|
|
554
576
|
const length = literal(fn === "datetime" ? "dateLength" : "length") ?? (fn === "time" ? undefined : "medium");
|
|
555
577
|
if (length !== undefined && fn !== "time")
|
|
556
578
|
{
|
|
557
|
-
entries.push(`dateStyle: ${
|
|
579
|
+
entries.push(`dateStyle: ${jsLiteral(length)}`);
|
|
558
580
|
}
|
|
559
581
|
const precision = literal(fn === "datetime" ? "timePrecision" : "precision") ?? (fn === "date" ? undefined : "minute");
|
|
560
582
|
if (precision !== undefined && fn !== "date")
|
|
561
583
|
{
|
|
562
|
-
entries.push(`timeStyle: ${
|
|
584
|
+
entries.push(`timeStyle: ${jsLiteral(precision === "second" ? "medium" : "short")}`);
|
|
563
585
|
}
|
|
564
586
|
const zone = literal("timeZone");
|
|
565
587
|
if (zone !== undefined && zone !== "input")
|
|
566
588
|
{
|
|
567
|
-
entries.push(`timeZone: ${
|
|
589
|
+
entries.push(`timeZone: ${jsLiteral(zone)}`);
|
|
568
590
|
}
|
|
569
591
|
const hour12 = literal("hour12");
|
|
570
592
|
if (hour12 !== undefined)
|
|
@@ -574,7 +596,7 @@ class Emitter
|
|
|
574
596
|
const style = literal("timeZoneStyle");
|
|
575
597
|
if (style !== undefined)
|
|
576
598
|
{
|
|
577
|
-
entries.push(`timeZoneName: ${
|
|
599
|
+
entries.push(`timeZoneName: ${jsLiteral(style)}`);
|
|
578
600
|
}
|
|
579
601
|
return entries.length === 0 ? "{}" : `{ ${entries.join(", ")} }`;
|
|
580
602
|
}
|
|
@@ -635,7 +657,7 @@ class Emitter
|
|
|
635
657
|
{
|
|
636
658
|
this.fail(":string needs an operand");
|
|
637
659
|
}
|
|
638
|
-
return operand.kind === "literal" ?
|
|
660
|
+
return operand.kind === "literal" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, "string")})`;
|
|
639
661
|
}
|
|
640
662
|
if (NUMBER_FUNCTIONS.has(fn))
|
|
641
663
|
{
|
|
@@ -656,7 +678,7 @@ class Emitter
|
|
|
656
678
|
{
|
|
657
679
|
this.fail(`:${fn} needs an operand`);
|
|
658
680
|
}
|
|
659
|
-
const value = operand.kind === "literal" ? `new Date(${
|
|
681
|
+
const value = operand.kind === "literal" ? `new Date(${jsLiteral(operand.value)})` : this.argument(operand.name, "date");
|
|
660
682
|
return `${this.shared(`new Intl.DateTimeFormat(locale, ${this.dateOptions(expression)})`)}().format(${value})`;
|
|
661
683
|
}
|
|
662
684
|
this.fail(`unknown function :${fn}`);
|
|
@@ -676,7 +698,7 @@ class Emitter
|
|
|
676
698
|
{
|
|
677
699
|
return `{ value: String(${value}), categories: [] }`;
|
|
678
700
|
}
|
|
679
|
-
const type =
|
|
701
|
+
const type = jsLiteral(mode === "ordinal" ? "ordinal" : "cardinal");
|
|
680
702
|
const reads = this.reads;
|
|
681
703
|
const options = this.numberOptions(expression);
|
|
682
704
|
if (this.reads === reads)
|
|
@@ -693,7 +715,7 @@ class Emitter
|
|
|
693
715
|
{
|
|
694
716
|
this.fail("a selector needs an operand");
|
|
695
717
|
}
|
|
696
|
-
const value = operand.kind === "literal" ?
|
|
718
|
+
const value = operand.kind === "literal" ? jsLiteral(operand.value) : `String(${this.argument(operand.name, "string")})`;
|
|
697
719
|
return `{ value: ${value}, categories: [] }`;
|
|
698
720
|
}
|
|
699
721
|
this.fail(`:${fn} cannot select`);
|
|
@@ -705,7 +727,7 @@ class Emitter
|
|
|
705
727
|
{
|
|
706
728
|
return "\"\"";
|
|
707
729
|
}
|
|
708
|
-
return parts.map((part) => (typeof part === "string" ?
|
|
730
|
+
return parts.map((part) => (typeof part === "string" ? jsLiteral(part) : this.format(part))).join(" + ");
|
|
709
731
|
}
|
|
710
732
|
|
|
711
733
|
body(): string
|
|
@@ -725,7 +747,7 @@ class Emitter
|
|
|
725
747
|
return this.pattern(this.message.pattern);
|
|
726
748
|
}
|
|
727
749
|
const selectors = this.message.selectors.map((selector) => this.selector(selector));
|
|
728
|
-
const variants = this.message.variants.map((variant) => `{ keys: ${
|
|
750
|
+
const variants = this.message.variants.map((variant) => `{ keys: ${jsLiteral(variant.keys)}, pattern: () => ${this.pattern(variant.pattern)} }`);
|
|
729
751
|
this.used.add("select");
|
|
730
752
|
return `$select([${selectors.join(", ")}], [${variants.join(", ")}])`;
|
|
731
753
|
}
|
|
@@ -948,12 +970,12 @@ export function compileMessages(locale: string, catalog: Catalog, options: Compi
|
|
|
948
970
|
{
|
|
949
971
|
const javascript = options.language === "js";
|
|
950
972
|
const out: string[] = [];
|
|
951
|
-
out.push(`// Generated by @zerolith/i18n from ${options.source ?? `the ${locale} catalog`}. Do not edit; regenerate instead.`);
|
|
973
|
+
out.push(`// Generated by @zerolith/i18n from ${commentText(options.source ?? `the ${locale} catalog`)}. Do not edit; regenerate instead.`);
|
|
952
974
|
if (javascript)
|
|
953
975
|
{
|
|
954
976
|
out.push("// @ts-check");
|
|
955
977
|
}
|
|
956
|
-
out.push(`export const locale${javascript ? "" : ": string"} = ${
|
|
978
|
+
out.push(`export const locale${javascript ? "" : ": string"} = ${jsLiteral(locale)};`);
|
|
957
979
|
out.push("");
|
|
958
980
|
const head = out.length;
|
|
959
981
|
const formatters = new Map<string, string>();
|
|
@@ -978,7 +1000,7 @@ export function compileMessages(locale: string, catalog: Catalog, options: Compi
|
|
|
978
1000
|
const emitter = new Emitter(key, message, formatters, used);
|
|
979
1001
|
const body = emitter.body();
|
|
980
1002
|
const args = [...emitter.arguments.entries()].toSorted(([a], [b]) => a.localeCompare(b));
|
|
981
|
-
const doc = source.replace(/\*\//g, "* /").split(
|
|
1003
|
+
const doc = source.replace(/\*\//g, "* /").replaceAll("<", "<").split(SOURCE_LINES).map((line) => ` * ${line}`.trimEnd()).join("\n");
|
|
982
1004
|
const argumentType = `{ ${args.map(([argument, type]) => `${property(argument)}: ${typeOf(type)}`).join("; ")} }`;
|
|
983
1005
|
if (javascript)
|
|
984
1006
|
{
|
|
@@ -1030,14 +1052,14 @@ export function compileIndex(locales: readonly string[], options: CompileOptions
|
|
|
1030
1052
|
}
|
|
1031
1053
|
if (!javascript)
|
|
1032
1054
|
{
|
|
1033
|
-
lines.push(`import type * as first from
|
|
1055
|
+
lines.push(`import type * as first from ${jsLiteral(`./${locales[0] ?? "en"}.${extension}`)};`);
|
|
1034
1056
|
lines.push("");
|
|
1035
1057
|
}
|
|
1036
|
-
lines.push(`export const locales${javascript ? "" : ": readonly string[]"} = ${
|
|
1058
|
+
lines.push(`export const locales${javascript ? "" : ": readonly string[]"} = ${jsLiteral(locales)};`);
|
|
1037
1059
|
lines.push("");
|
|
1038
1060
|
lines.push(`/** Loads one locale's messages; each locale is its own module. */`);
|
|
1039
1061
|
lines.push(javascript ? "export const loaders = {" : "export const loaders: Readonly<Record<string, () => Promise<typeof first>>> = {");
|
|
1040
|
-
lines.push(locales.map((locale) => ` ${
|
|
1062
|
+
lines.push(locales.map((locale) => ` ${jsLiteral(locale)}: () => import(${jsLiteral(`./${locale}.${extension}`)})`).join(",\n"));
|
|
1041
1063
|
lines.push("};");
|
|
1042
1064
|
lines.push("");
|
|
1043
1065
|
return lines.join("\n");
|