lingo.dev 0.114.0 → 0.114.1
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 +160 -122
- package/build/cli.cjs.map +1 -1
- package/build/cli.mjs +43 -5
- package/build/cli.mjs.map +1 -1
- package/package.json +4 -4
package/build/cli.mjs
CHANGED
|
@@ -2363,7 +2363,7 @@ async function parseAndroidDocument(input2) {
|
|
|
2363
2363
|
function buildPullResult(document) {
|
|
2364
2364
|
const result = {};
|
|
2365
2365
|
for (const resource of document.resourceNodes) {
|
|
2366
|
-
if (!resource
|
|
2366
|
+
if (!isTranslatable(resource)) {
|
|
2367
2367
|
continue;
|
|
2368
2368
|
}
|
|
2369
2369
|
switch (resource.type) {
|
|
@@ -2406,6 +2406,9 @@ function buildPullResult(document) {
|
|
|
2406
2406
|
}
|
|
2407
2407
|
return result;
|
|
2408
2408
|
}
|
|
2409
|
+
function isTranslatable(resource) {
|
|
2410
|
+
return resource.translatable;
|
|
2411
|
+
}
|
|
2409
2412
|
function buildTranslatedDocument(payload, existingDocument, sourceDocument) {
|
|
2410
2413
|
const templateDocument = sourceDocument;
|
|
2411
2414
|
const finalDocument = cloneDocumentStructure(templateDocument);
|
|
@@ -2434,6 +2437,9 @@ function buildTranslatedDocument(payload, existingDocument, sourceDocument) {
|
|
|
2434
2437
|
if (finalMap.has(resource.name)) {
|
|
2435
2438
|
continue;
|
|
2436
2439
|
}
|
|
2440
|
+
if (!isTranslatable(resource)) {
|
|
2441
|
+
continue;
|
|
2442
|
+
}
|
|
2437
2443
|
const cloned = cloneResourceNode(resource);
|
|
2438
2444
|
appendResourceNode(finalDocument, cloned);
|
|
2439
2445
|
finalMap.set(cloned.name, cloned);
|
|
@@ -2550,7 +2556,7 @@ function appendResourceNode(document, resourceNode) {
|
|
|
2550
2556
|
document.resourceNodes.push(resourceNode);
|
|
2551
2557
|
}
|
|
2552
2558
|
function setTextualNodeContent(node, value, useCdata) {
|
|
2553
|
-
const escapedValue = useCdata ? value : escapeAndroidString(value);
|
|
2559
|
+
const escapedValue = useCdata ? escapeApostrophesOnly(value) : escapeAndroidString(value);
|
|
2554
2560
|
node._ = escapedValue;
|
|
2555
2561
|
node.$$ = node.$$ ?? [];
|
|
2556
2562
|
let textNode = node.$$.find(
|
|
@@ -2561,7 +2567,7 @@ function setTextualNodeContent(node, value, useCdata) {
|
|
|
2561
2567
|
node.$$.push(textNode);
|
|
2562
2568
|
}
|
|
2563
2569
|
textNode["#name"] = useCdata ? "__cdata" : "__text__";
|
|
2564
|
-
textNode._ =
|
|
2570
|
+
textNode._ = escapedValue;
|
|
2565
2571
|
}
|
|
2566
2572
|
function buildResourceNameMap(document) {
|
|
2567
2573
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -2721,6 +2727,9 @@ function asInteger(value, name) {
|
|
|
2721
2727
|
function escapeAndroidString(value) {
|
|
2722
2728
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/(?<!\\)'/g, "\\'");
|
|
2723
2729
|
}
|
|
2730
|
+
function escapeApostrophesOnly(value) {
|
|
2731
|
+
return value.replace(/(?<!\\)'/g, "\\'");
|
|
2732
|
+
}
|
|
2724
2733
|
function segmentsToString(segments) {
|
|
2725
2734
|
return segments.map((segment) => segment.value).join("");
|
|
2726
2735
|
}
|
|
@@ -2851,13 +2860,42 @@ function createResourceNodeFromValue(name, value) {
|
|
|
2851
2860
|
}
|
|
2852
2861
|
}
|
|
2853
2862
|
function cloneDocumentStructure(document) {
|
|
2863
|
+
const translatableResources = document.resourceNodes.filter(isTranslatable);
|
|
2854
2864
|
const resourcesClone = deepClone(document.resources);
|
|
2855
2865
|
const lookup = buildResourceLookup(resourcesClone);
|
|
2856
2866
|
const resourceNodes = [];
|
|
2857
|
-
for (const resource of
|
|
2867
|
+
for (const resource of translatableResources) {
|
|
2858
2868
|
const cloned = cloneResourceNodeFromLookup(resource, lookup);
|
|
2859
2869
|
resourceNodes.push(cloned);
|
|
2860
2870
|
}
|
|
2871
|
+
if (resourcesClone.$$ && Array.isArray(resourcesClone.$$)) {
|
|
2872
|
+
const includedKeys = new Set(
|
|
2873
|
+
resourceNodes.map((r) => resourceLookupKey(r.type, r.name))
|
|
2874
|
+
);
|
|
2875
|
+
let filtered = resourcesClone.$$.filter((child) => {
|
|
2876
|
+
const elementName = child?.["#name"];
|
|
2877
|
+
const name = child?.$?.name;
|
|
2878
|
+
if (!isResourceElementName(elementName) || !name) {
|
|
2879
|
+
return true;
|
|
2880
|
+
}
|
|
2881
|
+
return includedKeys.has(resourceLookupKey(elementName, name));
|
|
2882
|
+
});
|
|
2883
|
+
const cleaned = [];
|
|
2884
|
+
let lastWasWhitespace = false;
|
|
2885
|
+
for (const child of filtered) {
|
|
2886
|
+
const isWhitespace = child?.["#name"] === "__text__" && (!child._ || child._.trim() === "");
|
|
2887
|
+
if (isWhitespace) {
|
|
2888
|
+
if (!lastWasWhitespace) {
|
|
2889
|
+
cleaned.push(child);
|
|
2890
|
+
lastWasWhitespace = true;
|
|
2891
|
+
}
|
|
2892
|
+
} else {
|
|
2893
|
+
cleaned.push(child);
|
|
2894
|
+
lastWasWhitespace = false;
|
|
2895
|
+
}
|
|
2896
|
+
}
|
|
2897
|
+
resourcesClone.$$ = cleaned;
|
|
2898
|
+
}
|
|
2861
2899
|
return {
|
|
2862
2900
|
resources: resourcesClone,
|
|
2863
2901
|
resourceNodes
|
|
@@ -13458,7 +13496,7 @@ async function renderHero2() {
|
|
|
13458
13496
|
// package.json
|
|
13459
13497
|
var package_default = {
|
|
13460
13498
|
name: "lingo.dev",
|
|
13461
|
-
version: "0.114.
|
|
13499
|
+
version: "0.114.1",
|
|
13462
13500
|
description: "Lingo.dev CLI",
|
|
13463
13501
|
private: false,
|
|
13464
13502
|
publishConfig: {
|