@lingo.dev/_spec 0.24.2

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 ADDED
@@ -0,0 +1,19 @@
1
+ # Lingo.dev Spec
2
+
3
+ A utility package for Lingo.dev.
4
+
5
+ ### Installation
6
+
7
+ ```bash
8
+ npm i lingo.dev
9
+ ```
10
+
11
+ ### Usage
12
+
13
+ ```
14
+ import {} from 'lingo.dev/spec';
15
+ ```
16
+
17
+ ### Documentation
18
+
19
+ [Documentation](https://lingo.dev/go/docs)
@@ -0,0 +1,496 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/locales.ts
2
+ var _zod = require('zod'); var _zod2 = _interopRequireDefault(_zod);
3
+ var localeMap = {
4
+ // Urdu (Pakistan)
5
+ ur: ["ur-PK"],
6
+ // Vietnamese (Vietnam)
7
+ vi: ["vi-VN"],
8
+ // Turkish (Turkey)
9
+ tr: ["tr-TR"],
10
+ // Tamil (India)
11
+ ta: ["ta-IN"],
12
+ // Serbian
13
+ sr: [
14
+ "sr-RS",
15
+ // Serbian (Latin)
16
+ "sr-Latn-RS",
17
+ // Serbian (Latin)
18
+ "sr-Cyrl-RS"
19
+ // Serbian (Cyrillic)
20
+ ],
21
+ // Hungarian (Hungary)
22
+ hu: ["hu-HU"],
23
+ // Hebrew (Israel)
24
+ he: ["he-IL"],
25
+ // Estonian (Estonia)
26
+ et: ["et-EE"],
27
+ // Greek (Greece)
28
+ el: ["el-GR"],
29
+ // Danish (Denmark)
30
+ da: ["da-DK"],
31
+ // Azerbaijani (Azerbaijan)
32
+ az: ["az-AZ"],
33
+ // Thai (Thailand)
34
+ th: ["th-TH"],
35
+ // Swedish (Sweden)
36
+ sv: ["sv-SE"],
37
+ // English
38
+ en: [
39
+ "en-US",
40
+ // United States
41
+ "en-GB",
42
+ // United Kingdom
43
+ "en-AU",
44
+ // Australia
45
+ "en-CA"
46
+ // Canada
47
+ ],
48
+ // Spanish
49
+ es: [
50
+ "es-ES",
51
+ // Spain
52
+ "es-419",
53
+ // Latin America
54
+ "es-MX",
55
+ // Mexico
56
+ "es-AR"
57
+ // Argentina
58
+ ],
59
+ // French
60
+ fr: [
61
+ "fr-FR",
62
+ // France
63
+ "fr-CA",
64
+ // Canada
65
+ "fr-BE"
66
+ // Belgium
67
+ ],
68
+ // Catalan (Spain)
69
+ ca: ["ca-ES"],
70
+ // Japanese (Japan)
71
+ ja: ["ja-JP"],
72
+ // German
73
+ de: [
74
+ "de-DE",
75
+ // Germany
76
+ "de-AT",
77
+ // Austria
78
+ "de-CH"
79
+ // Switzerland
80
+ ],
81
+ // Portuguese
82
+ pt: [
83
+ "pt-PT",
84
+ // Portugal
85
+ "pt-BR"
86
+ // Brazil
87
+ ],
88
+ // Italian
89
+ it: [
90
+ "it-IT",
91
+ // Italy
92
+ "it-CH"
93
+ // Switzerland
94
+ ],
95
+ // Russian
96
+ ru: [
97
+ "ru-RU",
98
+ // Russia
99
+ "ru-BY"
100
+ // Belarus
101
+ ],
102
+ // Ukrainian (Ukraine)
103
+ uk: ["uk-UA"],
104
+ // Belarusian (Belarus)
105
+ be: ["be-BY"],
106
+ // Hindi (India)
107
+ hi: ["hi-IN"],
108
+ // Chinese
109
+ zh: [
110
+ "zh-CN",
111
+ // Simplified Chinese (China)
112
+ "zh-TW",
113
+ // Traditional Chinese (Taiwan)
114
+ "zh-HK",
115
+ // Traditional Chinese (Hong Kong)
116
+ "zh-Hans",
117
+ // Simplified Chinese
118
+ "zh-Hant",
119
+ // Traditional Chinese
120
+ "zh-Hant-HK",
121
+ // Traditional Chinese (Hong Kong)
122
+ "zh-Hant-TW",
123
+ // Traditional Chinese (Taiwan)
124
+ "zh-Hant-CN",
125
+ // Traditional Chinese (China)
126
+ "zh-Hans-HK",
127
+ // Simplified Chinese (Hong Kong)
128
+ "zh-Hans-TW",
129
+ // Simplified Chinese (China)
130
+ "zh-Hans-CN"
131
+ // Simplified Chinese (China)
132
+ ],
133
+ // Korean (South Korea)
134
+ ko: ["ko-KR"],
135
+ // Arabic
136
+ ar: [
137
+ "ar-EG",
138
+ // Egypt
139
+ "ar-SA",
140
+ // Saudi Arabia
141
+ "ar-AE",
142
+ // United Arab Emirates
143
+ "ar-MA"
144
+ // Morocco
145
+ ],
146
+ // Bulgarian (Bulgaria)
147
+ bg: ["bg-BG"],
148
+ // Czech (Czech Republic)
149
+ cs: ["cs-CZ"],
150
+ // Dutch
151
+ nl: [
152
+ "nl-NL",
153
+ // Netherlands
154
+ "nl-BE"
155
+ // Belgium
156
+ ],
157
+ // Polish (Poland)
158
+ pl: ["pl-PL"],
159
+ // Indonesian (Indonesia)
160
+ id: ["id-ID"],
161
+ // Malay (Malaysia)
162
+ ms: ["ms-MY"],
163
+ // Finnish (Finland)
164
+ fi: ["fi-FI"],
165
+ // Basque (Spain)
166
+ eu: ["eu-ES"],
167
+ // Croatian (Croatia)
168
+ hr: ["hr-HR"],
169
+ // Hebrew (Israel) - alternative code
170
+ iw: ["iw-IL"],
171
+ // Khmer (Cambodia)
172
+ km: ["km-KH"],
173
+ // Latvian (Latvia)
174
+ lv: ["lv-LV"],
175
+ // Lithuanian (Lithuania)
176
+ lt: ["lt-LT"],
177
+ // Norwegian (Norway)
178
+ no: ["no-NO"],
179
+ // Romanian (Romania)
180
+ ro: ["ro-RO"],
181
+ // Slovak (Slovakia)
182
+ sk: ["sk-SK"],
183
+ // Swahili
184
+ sw: [
185
+ "sw-TZ",
186
+ // Tanzania
187
+ "sw-KE"
188
+ // Kenya
189
+ ],
190
+ // Persian (Iran)
191
+ fa: ["fa-IR"],
192
+ // Filipino (Philippines)
193
+ fil: ["fil-PH"],
194
+ // Punjabi
195
+ pa: [
196
+ "pa-IN",
197
+ // India
198
+ "pa-PK"
199
+ // Pakistan
200
+ ],
201
+ // Bengali
202
+ bn: [
203
+ "bn-BD",
204
+ // Bangladesh
205
+ "bn-IN"
206
+ // India
207
+ ],
208
+ // Irish (Ireland)
209
+ ga: ["ga-IE"],
210
+ // Maltese (Malta)
211
+ mt: ["mt-MT"],
212
+ // Slovenian (Slovenia)
213
+ sl: ["sl-SI"],
214
+ // Albanian (Albania)
215
+ sq: ["sq-AL"],
216
+ // Bavarian (Germany)
217
+ bar: ["bar-DE"],
218
+ // Neapolitan (Italy)
219
+ nap: ["nap-IT"],
220
+ // Afrikaans (South Africa)
221
+ af: ["af-ZA"],
222
+ // Somali (Somalia)
223
+ so: ["so-SO"],
224
+ // Tigrinya (Ethiopia)
225
+ ti: ["ti-ET"],
226
+ // Standard Moroccan Tamazight (Morocco)
227
+ zgh: ["zgh-MA"],
228
+ // Tagalog (Philippines)
229
+ tl: ["tl-PH"],
230
+ // Telugu (India)
231
+ te: ["te-IN"]
232
+ };
233
+ var localeCodesShort = Object.keys(localeMap);
234
+ var localeCodesFull = Object.values(localeMap).flat();
235
+ var localeCodesFullUnderscore = localeCodesFull.map((value) => value.replace("-", "_"));
236
+ var localeCodesFullExplicitRegion = localeCodesFull.map((value) => {
237
+ const chunks = value.split("-");
238
+ const result = [chunks[0], "-r", chunks.slice(1).join("-")].join("");
239
+ return result;
240
+ });
241
+ var localeCodes = [
242
+ ...localeCodesShort,
243
+ ...localeCodesFull,
244
+ ...localeCodesFullUnderscore,
245
+ ...localeCodesFullExplicitRegion
246
+ ];
247
+ var localeCodeSchema = _zod2.default.string().refine((value) => localeCodes.includes(value), {
248
+ message: "Invalid locale code"
249
+ });
250
+ var resolveLocaleCode = (value) => {
251
+ const existingFullLocaleCode = Object.values(localeMap).flat().includes(value);
252
+ if (existingFullLocaleCode) {
253
+ return value;
254
+ }
255
+ const existingShortLocaleCode = Object.keys(localeMap).includes(value);
256
+ if (existingShortLocaleCode) {
257
+ const correspondingFullLocales = localeMap[value];
258
+ const fallbackFullLocale = correspondingFullLocales[0];
259
+ return fallbackFullLocale;
260
+ }
261
+ throw new Error(`Invalid locale code: ${value}`);
262
+ };
263
+ var getAlternativeLocaleCodes = (locale) => {
264
+ if (locale.includes("-")) {
265
+ return [locale.replace(/-/g, "_")];
266
+ } else if (locale.includes("_")) {
267
+ return [locale.replace(/_/g, "-")];
268
+ } else {
269
+ return [];
270
+ }
271
+ };
272
+ var getLocaleCodeDelimiter = (locale) => {
273
+ if (locale.includes("_")) {
274
+ return "_";
275
+ } else if (locale.includes("-")) {
276
+ return "-";
277
+ } else {
278
+ return null;
279
+ }
280
+ };
281
+ var resolveOverridenLocale = (locale, delimiter) => {
282
+ if (!delimiter) {
283
+ return locale;
284
+ }
285
+ const currentDelimiter = getLocaleCodeDelimiter(locale);
286
+ if (!currentDelimiter) {
287
+ return locale;
288
+ }
289
+ return locale.replace(currentDelimiter, delimiter);
290
+ };
291
+
292
+ // src/formats.ts
293
+
294
+ var bucketTypes = [
295
+ "android",
296
+ "csv",
297
+ "flutter",
298
+ "html",
299
+ "json",
300
+ "markdown",
301
+ "xcode-strings",
302
+ "xcode-stringsdict",
303
+ "xcode-xcstrings",
304
+ "yaml",
305
+ "yaml-root-key",
306
+ "properties",
307
+ "po",
308
+ "xliff",
309
+ "xml",
310
+ "srt",
311
+ "dato",
312
+ "compiler",
313
+ "vtt"
314
+ ];
315
+ var bucketTypeSchema = _zod2.default.enum(bucketTypes);
316
+
317
+ // src/config.ts
318
+
319
+ var localeSchema = _zod2.default.object({
320
+ source: localeCodeSchema,
321
+ targets: _zod2.default.array(localeCodeSchema)
322
+ });
323
+ var createConfigDefinition = (definition) => definition;
324
+ var extendConfigDefinition = (definition, params) => {
325
+ const schema = params.createSchema(definition.schema);
326
+ const defaultValue = params.createDefaultValue(definition.defaultValue);
327
+ const upgrader = (config) => params.createUpgrader(config, schema, defaultValue);
328
+ return createConfigDefinition({
329
+ schema,
330
+ defaultValue,
331
+ parse: (rawConfig) => {
332
+ const safeResult = schema.safeParse(rawConfig);
333
+ if (safeResult.success) {
334
+ return safeResult.data;
335
+ }
336
+ const localeErrors = safeResult.error.errors.filter((issue) => issue.message.includes("Invalid locale code")).map((issue) => {
337
+ let unsupportedLocale = "";
338
+ const path = issue.path;
339
+ const config = rawConfig;
340
+ if (config.locale) {
341
+ unsupportedLocale = path.reduce((acc, key) => {
342
+ if (acc && typeof acc === "object" && key in acc) {
343
+ return acc[key];
344
+ }
345
+ return acc;
346
+ }, config.locale);
347
+ }
348
+ return `Unsupported locale: ${unsupportedLocale}`;
349
+ });
350
+ if (localeErrors.length > 0) {
351
+ throw new Error(`
352
+ ${localeErrors.join("\n")}`);
353
+ }
354
+ const baseConfig = definition.parse(rawConfig);
355
+ const result = upgrader(baseConfig);
356
+ return result;
357
+ }
358
+ });
359
+ };
360
+ var configV0Schema = _zod2.default.object({
361
+ version: _zod2.default.number().default(0)
362
+ });
363
+ var configV0Definition = createConfigDefinition({
364
+ schema: configV0Schema,
365
+ defaultValue: { version: 0 },
366
+ parse: (rawConfig) => {
367
+ return configV0Schema.parse(rawConfig);
368
+ }
369
+ });
370
+ var configV1Definition = extendConfigDefinition(configV0Definition, {
371
+ createSchema: (baseSchema) => baseSchema.extend({
372
+ locale: localeSchema,
373
+ buckets: _zod2.default.record(_zod2.default.string(), bucketTypeSchema).default({}).optional()
374
+ }),
375
+ createDefaultValue: () => ({
376
+ version: 1,
377
+ locale: {
378
+ source: "en",
379
+ targets: ["es"]
380
+ },
381
+ buckets: {}
382
+ }),
383
+ createUpgrader: () => ({
384
+ version: 1,
385
+ locale: {
386
+ source: "en",
387
+ targets: ["es"]
388
+ },
389
+ buckets: {}
390
+ })
391
+ });
392
+ var configV1_1Definition = extendConfigDefinition(configV1Definition, {
393
+ createSchema: (baseSchema) => baseSchema.extend({
394
+ buckets: _zod2.default.record(
395
+ bucketTypeSchema,
396
+ _zod2.default.object({
397
+ include: _zod2.default.array(_zod2.default.string()).default([]),
398
+ exclude: _zod2.default.array(_zod2.default.string()).default([]).optional()
399
+ })
400
+ ).default({})
401
+ }),
402
+ createDefaultValue: (baseDefaultValue) => ({
403
+ ...baseDefaultValue,
404
+ version: 1.1,
405
+ buckets: {}
406
+ }),
407
+ createUpgrader: (oldConfig, schema) => {
408
+ const upgradedConfig = {
409
+ ...oldConfig,
410
+ version: 1.1,
411
+ buckets: {}
412
+ };
413
+ if (oldConfig.buckets) {
414
+ for (const [bucketPath, bucketType] of Object.entries(oldConfig.buckets)) {
415
+ if (!upgradedConfig.buckets[bucketType]) {
416
+ upgradedConfig.buckets[bucketType] = {
417
+ include: []
418
+ };
419
+ }
420
+ _optionalChain([upgradedConfig, 'access', _ => _.buckets, 'access', _2 => _2[bucketType], 'optionalAccess', _3 => _3.include, 'access', _4 => _4.push, 'call', _5 => _5(bucketPath)]);
421
+ }
422
+ }
423
+ return upgradedConfig;
424
+ }
425
+ });
426
+ var configV1_2Definition = extendConfigDefinition(configV1_1Definition, {
427
+ createSchema: (baseSchema) => baseSchema.extend({
428
+ locale: localeSchema.extend({
429
+ extraSource: localeCodeSchema.optional()
430
+ })
431
+ }),
432
+ createDefaultValue: (baseDefaultValue) => ({
433
+ ...baseDefaultValue,
434
+ version: 1.2
435
+ }),
436
+ createUpgrader: (oldConfig) => ({
437
+ ...oldConfig,
438
+ version: 1.2
439
+ })
440
+ });
441
+ var bucketItemSchema = _zod2.default.object({
442
+ path: _zod2.default.string(),
443
+ delimiter: _zod2.default.union([_zod2.default.literal("-"), _zod2.default.literal("_"), _zod2.default.literal(null)]).optional()
444
+ });
445
+ var configV1_3Definition = extendConfigDefinition(configV1_2Definition, {
446
+ createSchema: (baseSchema) => baseSchema.extend({
447
+ buckets: _zod2.default.record(
448
+ bucketTypeSchema,
449
+ _zod2.default.object({
450
+ include: _zod2.default.array(_zod2.default.union([_zod2.default.string(), bucketItemSchema])).default([]),
451
+ exclude: _zod2.default.array(_zod2.default.union([_zod2.default.string(), bucketItemSchema])).default([]).optional()
452
+ })
453
+ ).default({})
454
+ }),
455
+ createDefaultValue: (baseDefaultValue) => ({
456
+ ...baseDefaultValue,
457
+ version: 1.3
458
+ }),
459
+ createUpgrader: (oldConfig) => ({
460
+ ...oldConfig,
461
+ version: 1.3
462
+ })
463
+ });
464
+ var LATEST_CONFIG_DEFINITION = configV1_3Definition;
465
+ function parseI18nConfig(rawConfig) {
466
+ try {
467
+ const result = LATEST_CONFIG_DEFINITION.parse(rawConfig);
468
+ return result;
469
+ } catch (error) {
470
+ throw new Error(`Failed to parse config: ${error.message}`);
471
+ }
472
+ }
473
+ var defaultConfig = LATEST_CONFIG_DEFINITION.defaultValue;
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+ exports.bucketItemSchema = bucketItemSchema; exports.bucketTypeSchema = bucketTypeSchema; exports.bucketTypes = bucketTypes; exports.configV0Definition = configV0Definition; exports.configV1Definition = configV1Definition; exports.configV1_1Definition = configV1_1Definition; exports.configV1_2Definition = configV1_2Definition; exports.configV1_3Definition = configV1_3Definition; exports.defaultConfig = defaultConfig; exports.getAlternativeLocaleCodes = getAlternativeLocaleCodes; exports.getLocaleCodeDelimiter = getLocaleCodeDelimiter; exports.localeCodeSchema = localeCodeSchema; exports.localeCodes = localeCodes; exports.localeCodesFull = localeCodesFull; exports.localeCodesFullExplicitRegion = localeCodesFullExplicitRegion; exports.localeCodesFullUnderscore = localeCodesFullUnderscore; exports.localeCodesShort = localeCodesShort; exports.localeSchema = localeSchema; exports.parseI18nConfig = parseI18nConfig; exports.resolveLocaleCode = resolveLocaleCode; exports.resolveOverridenLocale = resolveOverridenLocale;