@lingo.dev/_spec 0.24.2

Sign up to get free protection for your applications and to get access to all the features.
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;