lingo.dev 0.71.0 → 0.72.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.
package/build/cli.cjs CHANGED
@@ -18,7 +18,7 @@ var _interactivecommander = require('interactive-commander');
18
18
  var _figlet = require('figlet'); var _figlet2 = _interopRequireDefault(_figlet);
19
19
  var _gradientstring = require('gradient-string');
20
20
 
21
- // src/cli/cli/auth.ts
21
+ // src/cli/cmd/auth.ts
22
22
 
23
23
  var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
24
24
  var _express = require('express'); var _express2 = _interopRequireDefault(_express);
@@ -174,7 +174,7 @@ function createAuthenticator(params) {
174
174
  };
175
175
  }
176
176
 
177
- // src/cli/cli/auth.ts
177
+ // src/cli/cmd/auth.ts
178
178
  var auth_default = new (0, _interactivecommander.Command)().command("auth").description("Authenticate with Lingo.dev API").helpOption("-h, --help", "Show help").option("--logout", "Delete existing authentication").option("--login", "Authenticate with Lingo.dev API").action(async (options) => {
179
179
  try {
180
180
  let settings = await getSettings(void 0);
@@ -242,7 +242,7 @@ async function waitForApiKey(cb) {
242
242
  });
243
243
  }
244
244
 
245
- // src/cli/cli/init.ts
245
+ // src/cli/cmd/init.ts
246
246
 
247
247
 
248
248
 
@@ -275,7 +275,7 @@ function _getConfigFilePath() {
275
275
  return _path2.default.join(process.cwd(), "i18n.json");
276
276
  }
277
277
 
278
- // src/cli/cli/init.ts
278
+ // src/cli/cmd/init.ts
279
279
 
280
280
  var _child_process = require('child_process');
281
281
 
@@ -396,10 +396,10 @@ var init_default = new (0, _interactivecommander.InteractiveCommand)().command("
396
396
  }
397
397
  });
398
398
 
399
- // src/cli/cli/show/index.ts
399
+ // src/cli/cmd/show/index.ts
400
400
 
401
401
 
402
- // src/cli/cli/show/config.ts
402
+ // src/cli/cmd/show/config.ts
403
403
 
404
404
 
405
405
 
@@ -420,7 +420,7 @@ function loadReplexicaFileConfig() {
420
420
  return replexicaFileConfig;
421
421
  }
422
422
 
423
- // src/cli/cli/show/locale.ts
423
+ // src/cli/cmd/show/locale.ts
424
424
 
425
425
 
426
426
  var locale_default = new (0, _interactivecommander.Command)().command("locale").description("Print out the list of locales").helpOption("-h, --help", "Show help").argument("<type>", 'Type of locales to show, either "sources" or "targets"').action(async (type) => {
@@ -445,7 +445,7 @@ var locale_default = new (0, _interactivecommander.Command)().command("locale").
445
445
  }
446
446
  });
447
447
 
448
- // src/cli/cli/show/files.ts
448
+ // src/cli/cmd/show/files.ts
449
449
 
450
450
 
451
451
 
@@ -529,7 +529,7 @@ function resolveBucketItem(bucketItem) {
529
529
  return bucketItem;
530
530
  }
531
531
 
532
- // src/cli/cli/show/files.ts
532
+ // src/cli/cmd/show/files.ts
533
533
  var files_default = new (0, _interactivecommander.Command)().command("files").description("Print out the list of files managed by Lingo.dev").option("--source", "Only show source files").option("--target", "Only show target files").helpOption("-h, --help", "Show help").action(async (type) => {
534
534
  const ora = _ora2.default.call(void 0, );
535
535
  try {
@@ -575,10 +575,10 @@ var files_default = new (0, _interactivecommander.Command)().command("files").de
575
575
  }
576
576
  });
577
577
 
578
- // src/cli/cli/show/index.ts
578
+ // src/cli/cmd/show/index.ts
579
579
  var show_default = new (0, _interactivecommander.Command)().command("show").description("Prints out the current configuration").helpOption("-h, --help", "Show help").addCommand(config_default).addCommand(locale_default).addCommand(files_default);
580
580
 
581
- // src/cli/cli/i18n.ts
581
+ // src/cli/cmd/i18n.ts
582
582
 
583
583
 
584
584
 
@@ -724,7 +724,7 @@ function createTextFileLoader(pathPattern) {
724
724
  const finalPath = _path2.default.resolve(draftPath);
725
725
  const dirPath = _path2.default.dirname(finalPath);
726
726
  await _promises4.default.mkdir(dirPath, { recursive: true });
727
- const finalPayload = data.trim() + "\n";
727
+ const finalPayload = data.trim();
728
728
  await _promises4.default.writeFile(finalPath, finalPayload, {
729
729
  encoding: "utf-8",
730
730
  flag: "w"
@@ -1271,7 +1271,7 @@ function createPrettierLoader(options) {
1271
1271
  return data;
1272
1272
  }
1273
1273
  const result = _prettier2.default.format(data, {
1274
- ...prettierConfig || { printWidth: 2500 },
1274
+ ...prettierConfig || { printWidth: 2500, bracketSameLine: false },
1275
1275
  parser: options.parser,
1276
1276
  // For HTML parser, preserve comments and quotes
1277
1277
  ...options.parser === "html" ? {
@@ -2136,7 +2136,6 @@ function createVttLoader() {
2136
2136
  text
2137
2137
  };
2138
2138
  });
2139
- console.log(payload, output);
2140
2139
  const input = {
2141
2140
  valid: true,
2142
2141
  strict: true,
@@ -2236,6 +2235,76 @@ function createSyncLoader() {
2236
2235
  });
2237
2236
  }
2238
2237
 
2238
+ // src/cli/utils/plutil-formatter.ts
2239
+ function formatPlutilStyle(jsonData, existingJson) {
2240
+ const indent = existingJson ? detectIndentation(existingJson) : " ";
2241
+ function format(data, level = 0) {
2242
+ const currentIndent = indent.repeat(level);
2243
+ const nextIndent = indent.repeat(level + 1);
2244
+ if (typeof data !== "object" || data === null) {
2245
+ return JSON.stringify(data);
2246
+ }
2247
+ if (Array.isArray(data)) {
2248
+ if (data.length === 0) return "[]";
2249
+ const items2 = data.map((item) => `${nextIndent}${format(item, level + 1)}`);
2250
+ return `[
2251
+ ${items2.join(",\n")}
2252
+ ${currentIndent}]`;
2253
+ }
2254
+ const keys = Object.keys(data);
2255
+ if (keys.length === 0) {
2256
+ return `{
2257
+
2258
+ ${currentIndent}}`;
2259
+ }
2260
+ const items = keys.map((key) => {
2261
+ const value = data[key];
2262
+ return `${nextIndent}${JSON.stringify(key)} : ${format(value, level + 1)}`;
2263
+ });
2264
+ return `{
2265
+ ${items.join(",\n")}
2266
+ ${currentIndent}}`;
2267
+ }
2268
+ return format(jsonData);
2269
+ }
2270
+ function detectIndentation(jsonStr) {
2271
+ const match = jsonStr.match(/\n(\s+)/);
2272
+ return match ? match[1] : " ";
2273
+ }
2274
+
2275
+ // src/cli/loaders/plutil-json-loader.ts
2276
+ function createPlutilJsonTextLoader() {
2277
+ return createLoader({
2278
+ async pull(locale, data) {
2279
+ return data;
2280
+ },
2281
+ async push(locale, data, originalInput) {
2282
+ const jsonData = JSON.parse(data);
2283
+ const result = formatPlutilStyle(jsonData, originalInput || "");
2284
+ console.log(result[result.length - 1]);
2285
+ return result;
2286
+ }
2287
+ });
2288
+ }
2289
+
2290
+ // src/cli/loaders/new-line.ts
2291
+ function createNewLineLoader() {
2292
+ return createLoader({
2293
+ async pull(locale, input) {
2294
+ return input;
2295
+ },
2296
+ async push(locale, data, originalInput) {
2297
+ if (!data) return "";
2298
+ const trimmed = data.replace(/[\r\n]+$/, "");
2299
+ if (_optionalChain([originalInput, 'optionalAccess', _119 => _119.match, 'call', _120 => _120(/[\r\n]$/)])) {
2300
+ const ending = _optionalChain([originalInput, 'optionalAccess', _121 => _121.includes, 'call', _122 => _122("\r\n")]) ? "\r\n" : _optionalChain([originalInput, 'optionalAccess', _123 => _123.includes, 'call', _124 => _124("\r")]) ? "\r" : "\n";
2301
+ return trimmed + ending;
2302
+ }
2303
+ return trimmed;
2304
+ }
2305
+ });
2306
+ }
2307
+
2239
2308
  // src/cli/loaders/index.ts
2240
2309
  function createBucketLoader(bucketType, bucketPathPattern) {
2241
2310
  switch (bucketType) {
@@ -2244,6 +2313,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2244
2313
  case "android":
2245
2314
  return composeLoaders(
2246
2315
  createTextFileLoader(bucketPathPattern),
2316
+ createNewLineLoader(),
2247
2317
  createAndroidLoader(),
2248
2318
  createFlatLoader(),
2249
2319
  createSyncLoader(),
@@ -2252,6 +2322,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2252
2322
  case "csv":
2253
2323
  return composeLoaders(
2254
2324
  createTextFileLoader(bucketPathPattern),
2325
+ createNewLineLoader(),
2255
2326
  createCsvLoader(),
2256
2327
  createFlatLoader(),
2257
2328
  createSyncLoader(),
@@ -2260,6 +2331,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2260
2331
  case "html":
2261
2332
  return composeLoaders(
2262
2333
  createTextFileLoader(bucketPathPattern),
2334
+ createNewLineLoader(),
2263
2335
  createPrettierLoader({ parser: "html", alwaysFormat: true }),
2264
2336
  createHtmlLoader(),
2265
2337
  createSyncLoader(),
@@ -2268,6 +2340,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2268
2340
  case "json":
2269
2341
  return composeLoaders(
2270
2342
  createTextFileLoader(bucketPathPattern),
2343
+ createNewLineLoader(),
2271
2344
  createPrettierLoader({ parser: "json" }),
2272
2345
  createJsonLoader(),
2273
2346
  createFlatLoader(),
@@ -2277,6 +2350,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2277
2350
  case "markdown":
2278
2351
  return composeLoaders(
2279
2352
  createTextFileLoader(bucketPathPattern),
2353
+ createNewLineLoader(),
2280
2354
  createPrettierLoader({ parser: "markdown" }),
2281
2355
  createMarkdownLoader(),
2282
2356
  createSyncLoader(),
@@ -2285,6 +2359,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2285
2359
  case "po":
2286
2360
  return composeLoaders(
2287
2361
  createTextFileLoader(bucketPathPattern),
2362
+ createNewLineLoader(),
2288
2363
  createPoLoader(),
2289
2364
  createFlatLoader(),
2290
2365
  createSyncLoader(),
@@ -2294,6 +2369,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2294
2369
  case "properties":
2295
2370
  return composeLoaders(
2296
2371
  createTextFileLoader(bucketPathPattern),
2372
+ createNewLineLoader(),
2297
2373
  createPropertiesLoader(),
2298
2374
  createSyncLoader(),
2299
2375
  createUnlocalizableLoader()
@@ -2301,6 +2377,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2301
2377
  case "xcode-strings":
2302
2378
  return composeLoaders(
2303
2379
  createTextFileLoader(bucketPathPattern),
2380
+ createNewLineLoader(),
2304
2381
  createXcodeStringsLoader(),
2305
2382
  createSyncLoader(),
2306
2383
  createUnlocalizableLoader()
@@ -2308,6 +2385,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2308
2385
  case "xcode-stringsdict":
2309
2386
  return composeLoaders(
2310
2387
  createTextFileLoader(bucketPathPattern),
2388
+ createNewLineLoader(),
2311
2389
  createXcodeStringsdictLoader(),
2312
2390
  createFlatLoader(),
2313
2391
  createSyncLoader(),
@@ -2316,7 +2394,8 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2316
2394
  case "xcode-xcstrings":
2317
2395
  return composeLoaders(
2318
2396
  createTextFileLoader(bucketPathPattern),
2319
- createPrettierLoader({ parser: "json" }),
2397
+ createNewLineLoader(),
2398
+ createPlutilJsonTextLoader(),
2320
2399
  createJsonLoader(),
2321
2400
  createXcodeXcstringsLoader(),
2322
2401
  createFlatLoader(),
@@ -2327,6 +2406,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2327
2406
  case "yaml":
2328
2407
  return composeLoaders(
2329
2408
  createTextFileLoader(bucketPathPattern),
2409
+ createNewLineLoader(),
2330
2410
  createPrettierLoader({ parser: "yaml" }),
2331
2411
  createYamlLoader(),
2332
2412
  createFlatLoader(),
@@ -2336,6 +2416,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2336
2416
  case "yaml-root-key":
2337
2417
  return composeLoaders(
2338
2418
  createTextFileLoader(bucketPathPattern),
2419
+ createNewLineLoader(),
2339
2420
  createPrettierLoader({ parser: "yaml" }),
2340
2421
  createYamlLoader(),
2341
2422
  createRootKeyLoader(true),
@@ -2346,6 +2427,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2346
2427
  case "flutter":
2347
2428
  return composeLoaders(
2348
2429
  createTextFileLoader(bucketPathPattern),
2430
+ createNewLineLoader(),
2349
2431
  createPrettierLoader({ parser: "json" }),
2350
2432
  createJsonLoader(),
2351
2433
  createFlutterLoader(),
@@ -2356,6 +2438,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2356
2438
  case "xliff":
2357
2439
  return composeLoaders(
2358
2440
  createTextFileLoader(bucketPathPattern),
2441
+ createNewLineLoader(),
2359
2442
  createXliffLoader(),
2360
2443
  createFlatLoader(),
2361
2444
  createSyncLoader(),
@@ -2364,6 +2447,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2364
2447
  case "xml":
2365
2448
  return composeLoaders(
2366
2449
  createTextFileLoader(bucketPathPattern),
2450
+ createNewLineLoader(),
2367
2451
  createXmlLoader(),
2368
2452
  createFlatLoader(),
2369
2453
  createSyncLoader(),
@@ -2372,6 +2456,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2372
2456
  case "srt":
2373
2457
  return composeLoaders(
2374
2458
  createTextFileLoader(bucketPathPattern),
2459
+ createNewLineLoader(),
2375
2460
  createSrtLoader(),
2376
2461
  createSyncLoader(),
2377
2462
  createUnlocalizableLoader()
@@ -2379,6 +2464,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2379
2464
  case "dato":
2380
2465
  return composeLoaders(
2381
2466
  createDatoLoader(bucketPathPattern),
2467
+ createNewLineLoader(),
2382
2468
  createSyncLoader(),
2383
2469
  createFlatLoader(),
2384
2470
  createUnlocalizableLoader()
@@ -2386,6 +2472,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2386
2472
  case "vtt":
2387
2473
  return composeLoaders(
2388
2474
  createTextFileLoader(bucketPathPattern),
2475
+ createNewLineLoader(),
2389
2476
  createVttLoader(),
2390
2477
  createSyncLoader(),
2391
2478
  createUnlocalizableLoader()
@@ -2462,7 +2549,7 @@ var LockfileSchema = _zod2.default.object({
2462
2549
  ).default({})
2463
2550
  });
2464
2551
 
2465
- // src/cli/cli/i18n.ts
2552
+ // src/cli/cmd/i18n.ts
2466
2553
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
2467
2554
  var _diff = require('diff');
2468
2555
 
@@ -2535,7 +2622,7 @@ function _tryParseJSON(line) {
2535
2622
  }
2536
2623
  }
2537
2624
 
2538
- // src/cli/cli/i18n.ts
2625
+ // src/cli/cmd/i18n.ts
2539
2626
  var i18n_default = new (0, _interactivecommander.Command)().command("i18n").description("Run Localization engine").helpOption("-h, --help", "Show help").option("--locale <locale>", "Locale to process", (val, prev) => prev ? [...prev, val] : [val]).option("--bucket <bucket>", "Bucket to process", (val, prev) => prev ? [...prev, val] : [val]).option("--key <key>", "Key to process").option("--frozen", `Don't update the translations and fail if an update is needed`).option("--force", "Ignore lockfile and process all keys").option("--verbose", "Show verbose output").option("--interactive", "Interactive mode").option("--api-key <api-key>", "Explicitly set the API key to use").option("--debug", "Debug mode").option("--strict", "Stop on first error").action(async function(options) {
2540
2627
  const ora = _ora2.default.call(void 0, );
2541
2628
  const flags = parseFlags(options);
@@ -2561,11 +2648,11 @@ var i18n_default = new (0, _interactivecommander.Command)().command("i18n").desc
2561
2648
  const auth = await validateAuth(settings);
2562
2649
  ora.succeed(`Authenticated as ${auth.email}`);
2563
2650
  let buckets = getBuckets(i18nConfig);
2564
- if (_optionalChain([flags, 'access', _119 => _119.bucket, 'optionalAccess', _120 => _120.length])) {
2651
+ if (_optionalChain([flags, 'access', _125 => _125.bucket, 'optionalAccess', _126 => _126.length])) {
2565
2652
  buckets = buckets.filter((bucket) => flags.bucket.includes(bucket.type));
2566
2653
  }
2567
2654
  ora.succeed("Buckets retrieved");
2568
- const targetLocales = _optionalChain([flags, 'access', _121 => _121.locale, 'optionalAccess', _122 => _122.length]) ? flags.locale : i18nConfig.locale.targets;
2655
+ const targetLocales = _optionalChain([flags, 'access', _127 => _127.locale, 'optionalAccess', _128 => _128.length]) ? flags.locale : i18nConfig.locale.targets;
2569
2656
  const lockfileHelper = createLockfileHelper();
2570
2657
  ora.start("Ensuring i18n.lock exists...");
2571
2658
  if (!lockfileHelper.isLockfileExists()) {
@@ -2850,12 +2937,12 @@ function validateParams(i18nConfig, flags) {
2850
2937
  message: "No buckets found in i18n.json. Please add at least one bucket containing i18n content.",
2851
2938
  docUrl: "bucketNotFound"
2852
2939
  });
2853
- } else if (_optionalChain([flags, 'access', _123 => _123.locale, 'optionalAccess', _124 => _124.some, 'call', _125 => _125((locale) => !i18nConfig.locale.targets.includes(locale))])) {
2940
+ } else if (_optionalChain([flags, 'access', _129 => _129.locale, 'optionalAccess', _130 => _130.some, 'call', _131 => _131((locale) => !i18nConfig.locale.targets.includes(locale))])) {
2854
2941
  throw new CLIError({
2855
2942
  message: `One or more specified locales do not exist in i18n.json locale.targets. Please add them to the list and try again.`,
2856
2943
  docUrl: "localeTargetNotFound"
2857
2944
  });
2858
- } else if (_optionalChain([flags, 'access', _126 => _126.bucket, 'optionalAccess', _127 => _127.some, 'call', _128 => _128((bucket) => !i18nConfig.buckets[bucket])])) {
2945
+ } else if (_optionalChain([flags, 'access', _132 => _132.bucket, 'optionalAccess', _133 => _133.some, 'call', _134 => _134((bucket) => !i18nConfig.buckets[bucket])])) {
2859
2946
  throw new CLIError({
2860
2947
  message: `One or more specified buckets do not exist in i18n.json. Please add them to the list and try again.`,
2861
2948
  docUrl: "bucketNotFound"
@@ -2958,7 +3045,7 @@ Editing value for: ${_chalk2.default.cyan(key)}`);
2958
3045
  return customData;
2959
3046
  }
2960
3047
 
2961
- // src/cli/cli/lockfile.ts
3048
+ // src/cli/cmd/lockfile.ts
2962
3049
 
2963
3050
 
2964
3051
 
@@ -2987,7 +3074,7 @@ var flagsSchema = _zod2.default.object({
2987
3074
  force: _zod2.default.boolean().default(false)
2988
3075
  });
2989
3076
 
2990
- // src/cli/cli/cleanup.ts
3077
+ // src/cli/cmd/cleanup.ts
2991
3078
 
2992
3079
 
2993
3080
 
@@ -3080,7 +3167,7 @@ function displaySummary(results) {
3080
3167
  // package.json
3081
3168
  var package_default = {
3082
3169
  name: "lingo.dev",
3083
- version: "0.71.0",
3170
+ version: "0.72.0",
3084
3171
  description: "Lingo.dev CLI",
3085
3172
  private: false,
3086
3173
  type: "module",