lingo.dev 0.74.16 → 0.75.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
@@ -287,6 +287,8 @@ function findLocaleFiles(bucket) {
287
287
  return findLocaleFilesWithExtension(".xml");
288
288
  case "markdown":
289
289
  return findLocaleFilesWithExtension(".md");
290
+ case "php":
291
+ return findLocaleFilesWithExtension(".php");
290
292
  case "xcode-xcstrings":
291
293
  return findLocaleFilesForFilename("Localizable.xcstrings");
292
294
  case "xcode-strings":
@@ -518,7 +520,7 @@ var init_default = new (0, _interactivecommander.InteractiveCommand)().command("
518
520
  } else {
519
521
  spinner.succeed("No existing locale files found.");
520
522
  const useDefault = await _prompts.confirm.call(void 0, {
521
- message: `Use default path ${patterns.join(", ")}?`
523
+ message: `Use (and create) default path ${patterns.join(", ")}?`
522
524
  });
523
525
  ensurePatterns(patterns, options.source);
524
526
  if (useDefault) {
@@ -1588,7 +1590,7 @@ async function loadPrettierConfig() {
1588
1590
 
1589
1591
  var _isurl = require('is-url'); var _isurl2 = _interopRequireDefault(_isurl);
1590
1592
  var _datefns = require('date-fns');
1591
- function createUnlocalizableLoader() {
1593
+ function createUnlocalizableLoader(isCacheRestore = false) {
1592
1594
  const rules = {
1593
1595
  isEmpty: (v) => _lodash2.default.isEmpty(v),
1594
1596
  isNumber: (v) => !_lodash2.default.isNaN(_lodash2.default.toNumber(v)),
@@ -1611,6 +1613,9 @@ function createUnlocalizableLoader() {
1611
1613
  return result;
1612
1614
  },
1613
1615
  async push(locale, data, originalInput) {
1616
+ if (isCacheRestore) {
1617
+ return _lodash2.default.merge({}, data);
1618
+ }
1614
1619
  const result = _lodash2.default.merge({}, originalInput, data);
1615
1620
  return result;
1616
1621
  }
@@ -2534,10 +2539,10 @@ function createSyncLoader() {
2534
2539
 
2535
2540
  // src/cli/utils/plutil-formatter.ts
2536
2541
  function formatPlutilStyle(jsonData, existingJson) {
2537
- const indent = existingJson ? detectIndentation(existingJson) : " ";
2542
+ const indent2 = existingJson ? detectIndentation(existingJson) : " ";
2538
2543
  function format(data, level = 0) {
2539
- const currentIndent = indent.repeat(level);
2540
- const nextIndent = indent.repeat(level + 1);
2544
+ const currentIndent = indent2.repeat(level);
2545
+ const nextIndent = indent2.repeat(level + 1);
2541
2546
  if (typeof data !== "object" || data === null) {
2542
2547
  return JSON.stringify(data);
2543
2548
  }
@@ -2591,8 +2596,68 @@ function createPlutilJsonTextLoader() {
2591
2596
  });
2592
2597
  }
2593
2598
 
2599
+ // src/cli/loaders/php.ts
2600
+ var _phparrayreader = require('php-array-reader');
2601
+ function createPhpLoader() {
2602
+ return createLoader({
2603
+ pull: async (locale, input2) => {
2604
+ try {
2605
+ const output = _phparrayreader.fromString.call(void 0, input2);
2606
+ return output;
2607
+ } catch (error) {
2608
+ throw new Error(`Error parsing PHP file for locale ${locale}`);
2609
+ }
2610
+ },
2611
+ push: async (locale, data, originalInput) => {
2612
+ const output = toPhpString(data, originalInput);
2613
+ return output;
2614
+ }
2615
+ });
2616
+ }
2617
+ function toPhpString(data, originalPhpString) {
2618
+ const defaultFilePrefix = "<?php\n\n";
2619
+ if (originalPhpString) {
2620
+ const [filePrefix = defaultFilePrefix] = originalPhpString.split("return ");
2621
+ const shortArraySyntax = !originalPhpString.includes("array(");
2622
+ const output = `${filePrefix}return ${toPhpArray(data, shortArraySyntax)};`;
2623
+ return output;
2624
+ }
2625
+ return `${defaultFilePrefix}return ${toPhpArray(data)};`;
2626
+ }
2627
+ function toPhpArray(data, shortSyntax = true, indentLevel = 1) {
2628
+ if (data === null || data === void 0) {
2629
+ return "null";
2630
+ }
2631
+ if (typeof data === "string") {
2632
+ return `'${escapePhpString(data)}'`;
2633
+ }
2634
+ if (typeof data === "number") {
2635
+ return data.toString();
2636
+ }
2637
+ if (typeof data === "boolean") {
2638
+ return data ? "true" : "false";
2639
+ }
2640
+ const arrayStart = shortSyntax ? "[" : "array(";
2641
+ const arrayEnd = shortSyntax ? "]" : ")";
2642
+ if (Array.isArray(data)) {
2643
+ return `${arrayStart}
2644
+ ${data.map((value) => `${indent(indentLevel)}${toPhpArray(value, shortSyntax, indentLevel + 1)}`).join(",\n")}
2645
+ ${indent(indentLevel - 1)}${arrayEnd}`;
2646
+ }
2647
+ const output = `${arrayStart}
2648
+ ${Object.entries(data).map(([key, value]) => `${indent(indentLevel)}'${key}' => ${toPhpArray(value, shortSyntax, indentLevel + 1)}`).join(",\n")}
2649
+ ${indent(indentLevel - 1)}${arrayEnd}`;
2650
+ return output;
2651
+ }
2652
+ function indent(level) {
2653
+ return " ".repeat(level);
2654
+ }
2655
+ function escapePhpString(str) {
2656
+ return str.replaceAll("\\", "\\\\").replaceAll("'", "\\'").replaceAll("\r", "\\r").replaceAll("\n", "\\n").replaceAll(" ", "\\t");
2657
+ }
2658
+
2594
2659
  // src/cli/loaders/index.ts
2595
- function createBucketLoader(bucketType, bucketPathPattern) {
2660
+ function createBucketLoader(bucketType, bucketPathPattern, { isCacheRestore = false } = {}) {
2596
2661
  switch (bucketType) {
2597
2662
  default:
2598
2663
  throw new Error(`Unsupported bucket type: ${bucketType}`);
@@ -2602,7 +2667,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2602
2667
  createAndroidLoader(),
2603
2668
  createFlatLoader(),
2604
2669
  createSyncLoader(),
2605
- createUnlocalizableLoader()
2670
+ createUnlocalizableLoader(isCacheRestore)
2606
2671
  );
2607
2672
  case "csv":
2608
2673
  return composeLoaders(
@@ -2610,7 +2675,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2610
2675
  createCsvLoader(),
2611
2676
  createFlatLoader(),
2612
2677
  createSyncLoader(),
2613
- createUnlocalizableLoader()
2678
+ createUnlocalizableLoader(isCacheRestore)
2614
2679
  );
2615
2680
  case "html":
2616
2681
  return composeLoaders(
@@ -2618,7 +2683,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2618
2683
  createPrettierLoader({ parser: "html", alwaysFormat: true }),
2619
2684
  createHtmlLoader(),
2620
2685
  createSyncLoader(),
2621
- createUnlocalizableLoader()
2686
+ createUnlocalizableLoader(isCacheRestore)
2622
2687
  );
2623
2688
  case "json":
2624
2689
  return composeLoaders(
@@ -2627,7 +2692,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2627
2692
  createJsonLoader(),
2628
2693
  createFlatLoader(),
2629
2694
  createSyncLoader(),
2630
- createUnlocalizableLoader()
2695
+ createUnlocalizableLoader(isCacheRestore)
2631
2696
  );
2632
2697
  case "markdown":
2633
2698
  return composeLoaders(
@@ -2635,7 +2700,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2635
2700
  createPrettierLoader({ parser: "markdown" }),
2636
2701
  createMarkdownLoader(),
2637
2702
  createSyncLoader(),
2638
- createUnlocalizableLoader()
2703
+ createUnlocalizableLoader(isCacheRestore)
2639
2704
  );
2640
2705
  case "po":
2641
2706
  return composeLoaders(
@@ -2643,7 +2708,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2643
2708
  createPoLoader(),
2644
2709
  createFlatLoader(),
2645
2710
  createSyncLoader(),
2646
- createUnlocalizableLoader(),
2711
+ createUnlocalizableLoader(isCacheRestore),
2647
2712
  createVariableLoader({ type: "python" })
2648
2713
  );
2649
2714
  case "properties":
@@ -2651,14 +2716,14 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2651
2716
  createTextFileLoader(bucketPathPattern),
2652
2717
  createPropertiesLoader(),
2653
2718
  createSyncLoader(),
2654
- createUnlocalizableLoader()
2719
+ createUnlocalizableLoader(isCacheRestore)
2655
2720
  );
2656
2721
  case "xcode-strings":
2657
2722
  return composeLoaders(
2658
2723
  createTextFileLoader(bucketPathPattern),
2659
2724
  createXcodeStringsLoader(),
2660
2725
  createSyncLoader(),
2661
- createUnlocalizableLoader()
2726
+ createUnlocalizableLoader(isCacheRestore)
2662
2727
  );
2663
2728
  case "xcode-stringsdict":
2664
2729
  return composeLoaders(
@@ -2666,7 +2731,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2666
2731
  createXcodeStringsdictLoader(),
2667
2732
  createFlatLoader(),
2668
2733
  createSyncLoader(),
2669
- createUnlocalizableLoader()
2734
+ createUnlocalizableLoader(isCacheRestore)
2670
2735
  );
2671
2736
  case "xcode-xcstrings":
2672
2737
  return composeLoaders(
@@ -2676,7 +2741,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2676
2741
  createXcodeXcstringsLoader(),
2677
2742
  createFlatLoader(),
2678
2743
  createSyncLoader(),
2679
- createUnlocalizableLoader(),
2744
+ createUnlocalizableLoader(isCacheRestore),
2680
2745
  createVariableLoader({ type: "ieee" })
2681
2746
  );
2682
2747
  case "yaml":
@@ -2686,7 +2751,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2686
2751
  createYamlLoader(),
2687
2752
  createFlatLoader(),
2688
2753
  createSyncLoader(),
2689
- createUnlocalizableLoader()
2754
+ createUnlocalizableLoader(isCacheRestore)
2690
2755
  );
2691
2756
  case "yaml-root-key":
2692
2757
  return composeLoaders(
@@ -2696,7 +2761,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2696
2761
  createRootKeyLoader(true),
2697
2762
  createFlatLoader(),
2698
2763
  createSyncLoader(),
2699
- createUnlocalizableLoader()
2764
+ createUnlocalizableLoader(isCacheRestore)
2700
2765
  );
2701
2766
  case "flutter":
2702
2767
  return composeLoaders(
@@ -2706,7 +2771,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2706
2771
  createFlutterLoader(),
2707
2772
  createFlatLoader(),
2708
2773
  createSyncLoader(),
2709
- createUnlocalizableLoader()
2774
+ createUnlocalizableLoader(isCacheRestore)
2710
2775
  );
2711
2776
  case "xliff":
2712
2777
  return composeLoaders(
@@ -2714,7 +2779,7 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2714
2779
  createXliffLoader(),
2715
2780
  createFlatLoader(),
2716
2781
  createSyncLoader(),
2717
- createUnlocalizableLoader()
2782
+ createUnlocalizableLoader(isCacheRestore)
2718
2783
  );
2719
2784
  case "xml":
2720
2785
  return composeLoaders(
@@ -2722,27 +2787,35 @@ function createBucketLoader(bucketType, bucketPathPattern) {
2722
2787
  createXmlLoader(),
2723
2788
  createFlatLoader(),
2724
2789
  createSyncLoader(),
2725
- createUnlocalizableLoader()
2790
+ createUnlocalizableLoader(isCacheRestore)
2726
2791
  );
2727
2792
  case "srt":
2728
2793
  return composeLoaders(
2729
2794
  createTextFileLoader(bucketPathPattern),
2730
2795
  createSrtLoader(),
2731
2796
  createSyncLoader(),
2732
- createUnlocalizableLoader()
2797
+ createUnlocalizableLoader(isCacheRestore)
2733
2798
  );
2734
2799
  case "dato":
2735
2800
  return composeLoaders(
2736
2801
  createDatoLoader(bucketPathPattern),
2737
2802
  createSyncLoader(),
2738
2803
  createFlatLoader(),
2739
- createUnlocalizableLoader()
2804
+ createUnlocalizableLoader(isCacheRestore)
2740
2805
  );
2741
2806
  case "vtt":
2742
2807
  return composeLoaders(
2743
2808
  createTextFileLoader(bucketPathPattern),
2744
2809
  createVttLoader(),
2745
2810
  createSyncLoader(),
2811
+ createUnlocalizableLoader(isCacheRestore)
2812
+ );
2813
+ case "php":
2814
+ return composeLoaders(
2815
+ createTextFileLoader(bucketPathPattern),
2816
+ createPhpLoader(),
2817
+ createSyncLoader(),
2818
+ createFlatLoader(),
2746
2819
  createUnlocalizableLoader()
2747
2820
  );
2748
2821
  }
@@ -2950,7 +3023,7 @@ var i18n_default = new (0, _interactivecommander.Command)().command("i18n").desc
2950
3023
  const bucketOra = _ora2.default.call(void 0, { indent: 4 });
2951
3024
  bucketOra.info(`Processing path: ${bucketConfig.pathPattern}`);
2952
3025
  const sourceLocale = __spec.resolveOverridenLocale.call(void 0, i18nConfig.locale.source, bucketConfig.delimiter);
2953
- const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);
3026
+ const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, { isCacheRestore: true });
2954
3027
  bucketLoader.setDefaultLocale(sourceLocale);
2955
3028
  await bucketLoader.init();
2956
3029
  const sourceData = await bucketLoader.pull(sourceLocale);
@@ -3438,7 +3511,7 @@ function displaySummary(results) {
3438
3511
  // package.json
3439
3512
  var package_default = {
3440
3513
  name: "lingo.dev",
3441
- version: "0.74.16",
3514
+ version: "0.75.0",
3442
3515
  description: "Lingo.dev CLI",
3443
3516
  private: false,
3444
3517
  publishConfig: {
@@ -3482,10 +3555,10 @@ var package_default = {
3482
3555
  author: "",
3483
3556
  license: "Apache-2.0",
3484
3557
  dependencies: {
3485
- "@lingo.dev/_sdk": "workspace:*",
3486
- "@lingo.dev/_spec": "workspace:*",
3487
3558
  "@datocms/cma-client-node": "^3.4.0",
3488
3559
  "@inquirer/prompts": "^7.2.3",
3560
+ "@lingo.dev/_sdk": "workspace:*",
3561
+ "@lingo.dev/_spec": "workspace:*",
3489
3562
  "@paralleldrive/cuid2": "^2.2.2",
3490
3563
  chalk: "^5.4.1",
3491
3564
  cors: "^2.8.5",
@@ -3519,6 +3592,7 @@ var package_default = {
3519
3592
  open: "^10.1.0",
3520
3593
  ora: "^8.1.1",
3521
3594
  "p-limit": "^6.2.0",
3595
+ "php-array-reader": "^2.1.2",
3522
3596
  plist: "^3.1.0",
3523
3597
  prettier: "^3.4.2",
3524
3598
  "properties-parser": "^0.6.0",