@voxendar/shared 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,8 +4,27 @@
4
4
  * channel policy, and provider choices are confirmed by Rob in Phase 0
5
5
  * (Implementation_Plan.md Phase 0).
6
6
  */
7
- /** Candidate launch languages (2–3 to start, per context.md §10). */
8
- export declare const SUPPORTED_LANGUAGES: readonly ["en-US", "zh-CN", "es-MX"];
7
+ /**
8
+ * The launch languages (decided by Rob 2026-09-23; Phase 0's last open item).
9
+ *
10
+ * Every entry here is **verified to round-trip**: a reminder sentence is
11
+ * synthesised by the TTS provider and the audio is transcribed back, and the
12
+ * transcript matches what was said (see `daily_development_log.md` →
13
+ * 2026-09-23 "语言集扩容"). That test is the bar for adding a language, because
14
+ * a provider can accept a request for an unsupported language and still
15
+ * mispronounce it — Hebrew failed exactly that way on `eleven_multilingual_v2`.
16
+ *
17
+ * `he-IL` is included because it **passes on `eleven_v3`** (70+ languages); see
18
+ * `ELEVEN_MODEL_BY_LANGUAGE` in `functions/` for the per-language model choice.
19
+ * Arabic and Hebrew are RTL — the *content* renders fine, but app-UI
20
+ * localisation for RTL is a separate, still-open workstream.
21
+ *
22
+ * Adding a language is not one constant: it also needs a reminder template in
23
+ * `i18n/templates.ts` (an unknown language silently falls back to English), a
24
+ * native-name label in the app, and a republish of this package + a functions
25
+ * redeploy, since the backend resolves it from the registry.
26
+ */
27
+ export declare const SUPPORTED_LANGUAGES: readonly ["en-US", "zh-CN", "es-MX", "fr-FR", "de-DE", "pt-BR", "ru-RU", "ar-SA", "hi-IN", "he-IL", "ja-JP", "ko-KR"];
9
28
  /** Google Calendar color ids "1"–"11" (color-to-member assignment decided in Phase 0). */
10
29
  export declare const GOOGLE_CALENDAR_COLOR_IDS: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"];
11
30
  /** Default per-event reminder offsets in minutes (1 day, 2 hours). */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,sCAAuC,CAAC;AAExE,0FAA0F;AAC1F,eAAO,MAAM,yBAAyB,oEAY5B,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,gCAAgC,sBAAuB,CAAC;AAErE,qEAAqE;AACrE,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,mEAAmE;AACnE,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,iCAAiC;AACjC,eAAO,MAAM,qBAAqB;;;;;;;CAOxB,CAAC;AAEX,sCAAsC;AACtC,eAAO,MAAM,aAAa;;;CAGhB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,uHAatB,CAAC;AAEX,0FAA0F;AAC1F,eAAO,MAAM,yBAAyB,oEAY5B,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,gCAAgC,sBAAuB,CAAC;AAErE,qEAAqE;AACrE,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,mEAAmE;AACnE,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,iCAAiC;AACjC,eAAO,MAAM,qBAAqB;;;;;;;CAOxB,CAAC;AAEX,sCAAsC;AACtC,eAAO,MAAM,aAAa;;;CAGhB,CAAC"}
package/dist/constants.js CHANGED
@@ -7,8 +7,40 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.STORAGE_PATHS = exports.FIRESTORE_COLLECTIONS = exports.SCHEDULER_HORIZON_MARGIN_MINUTES_DEFAULT = exports.SCHEDULER_INTERVAL_MINUTES_DEFAULT = exports.DEFAULT_REMINDER_OFFSETS_MINUTES = exports.GOOGLE_CALENDAR_COLOR_IDS = exports.SUPPORTED_LANGUAGES = void 0;
10
- /** Candidate launch languages (2–3 to start, per context.md §10). */
11
- exports.SUPPORTED_LANGUAGES = ["en-US", "zh-CN", "es-MX"];
10
+ /**
11
+ * The launch languages (decided by Rob 2026-09-23; Phase 0's last open item).
12
+ *
13
+ * Every entry here is **verified to round-trip**: a reminder sentence is
14
+ * synthesised by the TTS provider and the audio is transcribed back, and the
15
+ * transcript matches what was said (see `daily_development_log.md` →
16
+ * 2026-09-23 "语言集扩容"). That test is the bar for adding a language, because
17
+ * a provider can accept a request for an unsupported language and still
18
+ * mispronounce it — Hebrew failed exactly that way on `eleven_multilingual_v2`.
19
+ *
20
+ * `he-IL` is included because it **passes on `eleven_v3`** (70+ languages); see
21
+ * `ELEVEN_MODEL_BY_LANGUAGE` in `functions/` for the per-language model choice.
22
+ * Arabic and Hebrew are RTL — the *content* renders fine, but app-UI
23
+ * localisation for RTL is a separate, still-open workstream.
24
+ *
25
+ * Adding a language is not one constant: it also needs a reminder template in
26
+ * `i18n/templates.ts` (an unknown language silently falls back to English), a
27
+ * native-name label in the app, and a republish of this package + a functions
28
+ * redeploy, since the backend resolves it from the registry.
29
+ */
30
+ exports.SUPPORTED_LANGUAGES = [
31
+ "en-US",
32
+ "zh-CN",
33
+ "es-MX",
34
+ "fr-FR",
35
+ "de-DE",
36
+ "pt-BR",
37
+ "ru-RU",
38
+ "ar-SA",
39
+ "hi-IN",
40
+ "he-IL",
41
+ "ja-JP",
42
+ "ko-KR",
43
+ ];
12
44
  /** Google Calendar color ids "1"–"11" (color-to-member assignment decided in Phase 0). */
13
45
  exports.GOOGLE_CALENDAR_COLOR_IDS = [
14
46
  "1",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qEAAqE;AACxD,QAAA,mBAAmB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAExE,0FAA0F;AAC7E,QAAA,yBAAyB,GAAG;IACvC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;CACI,CAAC;AAEX,sEAAsE;AACzD,QAAA,gCAAgC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAU,CAAC;AAErE,qEAAqE;AACxD,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,wCAAwC,GAAG,GAAG,CAAC;AAE5D,iCAAiC;AACpB,QAAA,qBAAqB,GAAG;IACnC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX,sCAAsC;AACzB,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,OAAO,EAAE,gDAAgD;IACnE,QAAQ,EAAE,KAAK,EAAE,6CAA6C;CACtD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,mBAAmB,GAAG;IACjC,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACC,CAAC;AAEX,0FAA0F;AAC7E,QAAA,yBAAyB,GAAG;IACvC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;CACI,CAAC;AAEX,sEAAsE;AACzD,QAAA,gCAAgC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAU,CAAC;AAErE,qEAAqE;AACxD,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,wCAAwC,GAAG,GAAG,CAAC;AAE5D,iCAAiC;AACpB,QAAA,qBAAqB,GAAG;IACnC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX,sCAAsC;AACzB,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,OAAO,EAAE,gDAAgD;IACnE,QAAQ,EAAE,KAAK,EAAE,6CAA6C;CACtD,CAAC"}
@@ -11,13 +11,94 @@ export interface ReminderMessageParams {
11
11
  /** Optional location included in the message. */
12
12
  location?: string | null;
13
13
  }
14
- declare const TEMPLATES: {
15
- readonly "en-US": (p: ReminderMessageParams) => string;
16
- readonly "zh-CN": (p: ReminderMessageParams) => string;
17
- readonly "es-MX": (p: ReminderMessageParams) => string;
14
+ /**
15
+ * Per-language copy, as data rather than one function per language: with 12
16
+ * languages the only thing that varies is punctuation and word order, so the
17
+ * variation belongs in a table a reviewer can scan in one screen.
18
+ *
19
+ * Two things worth knowing when adding a row:
20
+ * - **`lead` + `join` are the whole sentence shape.** `{location}` in `location`
21
+ * is replaced only when the event has one, which is why the parentheses live
22
+ * in the table (Japanese uses full-width ones, English half-width).
23
+ * - **Anything outside GSM-7 costs a second SMS segment.** Latin/Cyrillic-adjacent
24
+ * text is 160 chars per segment on the Latin-1 path, but Arabic, Hebrew, Hindi,
25
+ * Japanese and Korean are UCS-2 — 70 chars per segment — and Chinese already
26
+ * is. So the 9 new languages make a long title likelier to bill as 2 segments;
27
+ * this is exactly why the file header rejects free-form LLM copy.
28
+ */
29
+ declare const COPY: {
30
+ readonly "en-US": {
31
+ readonly lead: "⏰ Reminder: ";
32
+ readonly join: " — ";
33
+ readonly location: " (📍 {location})";
34
+ };
35
+ readonly "zh-CN": {
36
+ readonly lead: "⏰ 提醒:";
37
+ readonly join: ",";
38
+ readonly location: "(📍 {location})";
39
+ };
40
+ readonly "es-MX": {
41
+ readonly lead: "⏰ Recordatorio: ";
42
+ readonly join: " — ";
43
+ readonly location: " (📍 {location})";
44
+ };
45
+ readonly "fr-FR": {
46
+ readonly lead: "⏰ Rappel : ";
47
+ readonly join: " — ";
48
+ readonly location: " (📍 {location})";
49
+ };
50
+ readonly "de-DE": {
51
+ readonly lead: "⏰ Erinnerung: ";
52
+ readonly join: " — ";
53
+ readonly location: " (📍 {location})";
54
+ };
55
+ readonly "pt-BR": {
56
+ readonly lead: "⏰ Lembrete: ";
57
+ readonly join: " — ";
58
+ readonly location: " (📍 {location})";
59
+ };
60
+ readonly "ru-RU": {
61
+ readonly lead: "⏰ Напоминание: ";
62
+ readonly join: " — ";
63
+ readonly location: " (📍 {location})";
64
+ };
65
+ readonly "ar-SA": {
66
+ readonly lead: "⏰ تذكير: ";
67
+ readonly join: " — ";
68
+ readonly location: " (📍 {location})";
69
+ };
70
+ readonly "hi-IN": {
71
+ readonly lead: "⏰ रिमाइंडर: ";
72
+ readonly join: " — ";
73
+ readonly location: " (📍 {location})";
74
+ };
75
+ readonly "he-IL": {
76
+ readonly lead: "⏰ תזכורת: ";
77
+ readonly join: " — ";
78
+ readonly location: " (📍 {location})";
79
+ };
80
+ readonly "ja-JP": {
81
+ readonly lead: "⏰ リマインダー:";
82
+ readonly join: " — ";
83
+ readonly location: "(📍 {location})";
84
+ };
85
+ readonly "ko-KR": {
86
+ readonly lead: "⏰ 알림: ";
87
+ readonly join: " — ";
88
+ readonly location: " (📍 {location})";
89
+ };
18
90
  };
19
- export type TemplateKey = keyof typeof TEMPLATES;
20
- /** Closest template for a BCP-47 tag: exact → base language ("zh" → "zh-CN") → "en-US". */
91
+ export type TemplateKey = keyof typeof COPY;
92
+ /**
93
+ * Closest template for a BCP-47 tag: exact → base language ("zh" → "zh-CN") →
94
+ * "en-US".
95
+ *
96
+ * The base-language step now matters more than it did with three languages: a
97
+ * member on `pt-PT` or `ar-EG` gets `pt-BR` / `ar-SA` rather than English. That
98
+ * is the right trade for a message *template* — the times inside `when` are
99
+ * already resolved in the member's own timezone by the caller — but it is a
100
+ * deliberate approximation, not true localisation.
101
+ */
21
102
  export declare function resolveTemplateKey(language: string): TemplateKey;
22
103
  /** Build the reminder message text for a member's language. */
23
104
  export declare function buildReminderMessage(language: string, params: ReminderMessageParams): string;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/i18n/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,SAAS;0BACA,qBAAqB,KAAG,MAAM;0BAI9B,qBAAqB,KAAG,MAAM;0BAI9B,qBAAqB,KAAG,MAAM;CAI4B,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,SAAS,CAAC;AAEjD,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAUhE;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAG5F"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/i18n/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBT,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,IAAI,CAAC;AAE5C;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAUhE;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAI5F"}
@@ -7,24 +7,56 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.resolveTemplateKey = resolveTemplateKey;
9
9
  exports.buildReminderMessage = buildReminderMessage;
10
- const TEMPLATES = {
11
- "en-US": (p) => p.location
12
- ? `⏰ Reminder: ${p.title} — ${p.when} (📍 ${p.location})`
13
- : `⏰ Reminder: ${p.title} — ${p.when}`,
14
- "zh-CN": (p) => p.location
15
- ? `⏰ 提醒:${p.title},${p.when}(📍 ${p.location})`
16
- : `⏰ 提醒:${p.title},${p.when}`,
17
- "es-MX": (p) => p.location
18
- ? `⏰ Recordatorio: ${p.title} — ${p.when} (📍 ${p.location})`
19
- : `⏰ Recordatorio: ${p.title} — ${p.when}`,
10
+ /**
11
+ * Per-language copy, as data rather than one function per language: with 12
12
+ * languages the only thing that varies is punctuation and word order, so the
13
+ * variation belongs in a table a reviewer can scan in one screen.
14
+ *
15
+ * Two things worth knowing when adding a row:
16
+ * - **`lead` + `join` are the whole sentence shape.** `{location}` in `location`
17
+ * is replaced only when the event has one, which is why the parentheses live
18
+ * in the table (Japanese uses full-width ones, English half-width).
19
+ * - **Anything outside GSM-7 costs a second SMS segment.** Latin/Cyrillic-adjacent
20
+ * text is 160 chars per segment on the Latin-1 path, but Arabic, Hebrew, Hindi,
21
+ * Japanese and Korean are UCS-2 — 70 chars per segment — and Chinese already
22
+ * is. So the 9 new languages make a long title likelier to bill as 2 segments;
23
+ * this is exactly why the file header rejects free-form LLM copy.
24
+ */
25
+ const COPY = {
26
+ "en-US": { lead: "⏰ Reminder: ", join: " — ", location: " (📍 {location})" },
27
+ "zh-CN": { lead: "⏰ 提醒:", join: ",", location: "(📍 {location})" },
28
+ "es-MX": { lead: "⏰ Recordatorio: ", join: " — ", location: " (📍 {location})" },
29
+ // French puts a space before the colon — `Rappel :` — not `Rappel:`.
30
+ "fr-FR": { lead: "⏰ Rappel : ", join: " — ", location: " (📍 {location})" },
31
+ "de-DE": { lead: "⏰ Erinnerung: ", join: " — ", location: " (📍 {location})" },
32
+ "pt-BR": { lead: "⏰ Lembrete: ", join: " — ", location: " (📍 {location})" },
33
+ "ru-RU": { lead: "⏰ Напоминание: ", join: " — ", location: " (📍 {location})" },
34
+ // Arabic is RTL: the whole line renders right-to-left, but `lead` still comes
35
+ // first in logical order, which is what the messaging APIs expect.
36
+ "ar-SA": { lead: "⏰ تذكير: ", join: " — ", location: " (📍 {location})" },
37
+ "hi-IN": { lead: "⏰ रिमाइंडर: ", join: " — ", location: " (📍 {location})" },
38
+ "he-IL": { lead: "⏰ תזכורת: ", join: " — ", location: " (📍 {location})" },
39
+ // Japanese uses `:` after the lead and `、`-style separation; full-width
40
+ // parentheses keep the location visually inside the sentence.
41
+ "ja-JP": { lead: "⏰ リマインダー:", join: " — ", location: "(📍 {location})" },
42
+ "ko-KR": { lead: "⏰ 알림: ", join: " — ", location: " (📍 {location})" },
20
43
  };
21
- /** Closest template for a BCP-47 tag: exact → base language ("zh" → "zh-CN") → "en-US". */
44
+ /**
45
+ * Closest template for a BCP-47 tag: exact → base language ("zh" → "zh-CN") →
46
+ * "en-US".
47
+ *
48
+ * The base-language step now matters more than it did with three languages: a
49
+ * member on `pt-PT` or `ar-EG` gets `pt-BR` / `ar-SA` rather than English. That
50
+ * is the right trade for a message *template* — the times inside `when` are
51
+ * already resolved in the member's own timezone by the caller — but it is a
52
+ * deliberate approximation, not true localisation.
53
+ */
22
54
  function resolveTemplateKey(language) {
23
- if (language in TEMPLATES)
55
+ if (language in COPY)
24
56
  return language;
25
57
  const base = language.split("-")[0] ?? "";
26
58
  if (base.length >= 2) {
27
- const baseKey = Object.keys(TEMPLATES).find((key) => key.startsWith(`${base}-`));
59
+ const baseKey = Object.keys(COPY).find((key) => key.startsWith(`${base}-`));
28
60
  if (baseKey)
29
61
  return baseKey;
30
62
  }
@@ -32,7 +64,8 @@ function resolveTemplateKey(language) {
32
64
  }
33
65
  /** Build the reminder message text for a member's language. */
34
66
  function buildReminderMessage(language, params) {
35
- const templateKey = resolveTemplateKey(language);
36
- return TEMPLATES[templateKey](params);
67
+ const copy = COPY[resolveTemplateKey(language)];
68
+ const body = `${copy.lead}${params.title}${copy.join}${params.when}`;
69
+ return params.location ? body + copy.location.replace("{location}", params.location) : body;
37
70
  }
38
71
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/i18n/templates.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA6BH,gDAUC;AAGD,oDAGC;AAlCD,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,CAAC,CAAwB,EAAU,EAAE,CAC5C,CAAC,CAAC,QAAQ;QACR,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,QAAQ,GAAG;QACzD,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAwB,EAAU,EAAE,CAC5C,CAAC,CAAC,QAAQ;QACR,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,GAAG;QAC/C,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,CAAC,CAAwB,EAAU,EAAE,CAC5C,CAAC,CAAC,QAAQ;QACR,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,QAAQ,GAAG;QAC7D,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,EAAE;CACyB,CAAC;AAI1E,2FAA2F;AAC3F,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,IAAI,QAAQ,IAAI,SAAS;QAAE,OAAO,QAAuB,CAAC;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACrE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAC3B,CAAC;QACF,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+DAA+D;AAC/D,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,MAA6B;IAClF,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/i18n/templates.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA6DH,gDAUC;AAGD,oDAIC;AAnED;;;;;;;;;;;;;;GAcG;AACH,MAAM,IAAI,GAAG;IACX,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC5E,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE;IAClE,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAChF,qEAAqE;IACrE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC3E,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC9E,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC5E,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC/E,8EAA8E;IAC9E,mEAAmE;IACnE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IACzE,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC5E,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAC1E,wEAAwE;IACxE,8DAA8D;IAC9D,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE;IACxE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;CAIvE,CAAC;AAIF;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,QAAuB,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAChE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAC3B,CAAC;QACF,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+DAA+D;AAC/D,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,MAA6B;IAClF,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACrE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9F,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@voxendar/shared",
3
- "version": "0.1.0",
4
- "private": false,
3
+ "version": "0.2.0",
4
+ "private": false,
5
5
  "description": "Shared contracts, schemas, constants and pure logic for Voxendar/Tellie (consumed by functions/ and app/)",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -21,4 +21,4 @@
21
21
  "typescript": "^5.5.4",
22
22
  "vitest": "^2.1.9"
23
23
  }
24
- }
24
+ }