locize-cli 11.0.0 → 12.0.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +1 -1
  3. package/README.md +1 -0
  4. package/dist/cjs/add.js +90 -0
  5. package/{bin/locize → dist/cjs/cli.js} +390 -670
  6. package/dist/cjs/combineSubkeyPreprocessor.js +155 -0
  7. package/dist/cjs/convertToDesiredFormat.js +205 -0
  8. package/dist/cjs/convertToFlatFormat.js +231 -0
  9. package/dist/cjs/copyVersion.js +60 -0
  10. package/dist/cjs/createBranch.js +59 -0
  11. package/dist/cjs/deleteBranch.js +89 -0
  12. package/dist/cjs/deleteNamespace.js +37 -0
  13. package/dist/cjs/download.js +376 -0
  14. package/dist/cjs/filterNamespaces.js +13 -0
  15. package/dist/cjs/format.js +156 -0
  16. package/dist/cjs/formats.js +33 -0
  17. package/dist/cjs/get.js +66 -0
  18. package/dist/cjs/getBranches.js +37 -0
  19. package/dist/cjs/getJob.js +37 -0
  20. package/dist/cjs/getProjectStats.js +37 -0
  21. package/dist/cjs/getRemoteLanguages.js +38 -0
  22. package/dist/cjs/getRemoteNamespace.js +125 -0
  23. package/dist/cjs/index.js +37 -0
  24. package/dist/cjs/isValidUuid.js +6 -0
  25. package/dist/cjs/lngs.js +215 -0
  26. package/dist/cjs/mapLimit.js +22 -0
  27. package/dist/cjs/mergeBranch.js +80 -0
  28. package/dist/cjs/migrate.js +239 -0
  29. package/dist/cjs/missing.js +162 -0
  30. package/dist/cjs/package.json +5 -0
  31. package/{parseLocalLanguage.js → dist/cjs/parseLocalLanguage.js} +135 -142
  32. package/dist/cjs/parseLocalLanguages.js +18 -0
  33. package/dist/cjs/parseLocalReference.js +11 -0
  34. package/dist/cjs/publishVersion.js +42 -0
  35. package/dist/cjs/removeUndefinedFromArrays.js +19 -0
  36. package/dist/cjs/removeVersion.js +42 -0
  37. package/dist/cjs/request.js +66 -0
  38. package/dist/cjs/shouldUnflatten.js +21 -0
  39. package/dist/cjs/sortFlatResources.js +13 -0
  40. package/dist/cjs/sync.js +772 -0
  41. package/dist/cjs/unflatten.js +81 -0
  42. package/dist/esm/add.js +88 -0
  43. package/dist/esm/cli.js +1020 -0
  44. package/{combineSubkeyPreprocessor.js → dist/esm/combineSubkeyPreprocessor.js} +70 -73
  45. package/dist/esm/convertToDesiredFormat.js +203 -0
  46. package/dist/esm/convertToFlatFormat.js +229 -0
  47. package/dist/esm/copyVersion.js +58 -0
  48. package/dist/esm/createBranch.js +57 -0
  49. package/dist/esm/deleteBranch.js +87 -0
  50. package/dist/esm/deleteNamespace.js +35 -0
  51. package/dist/esm/download.js +374 -0
  52. package/{filterNamespaces.js → dist/esm/filterNamespaces.js} +4 -4
  53. package/dist/esm/format.js +154 -0
  54. package/{formats.js → dist/esm/formats.js} +7 -11
  55. package/dist/esm/get.js +64 -0
  56. package/dist/esm/getBranches.js +35 -0
  57. package/dist/esm/getJob.js +35 -0
  58. package/dist/esm/getProjectStats.js +35 -0
  59. package/dist/esm/getRemoteLanguages.js +36 -0
  60. package/dist/esm/getRemoteNamespace.js +123 -0
  61. package/dist/esm/index.js +16 -0
  62. package/dist/esm/isValidUuid.js +4 -0
  63. package/dist/esm/lngs.js +213 -0
  64. package/dist/esm/mapLimit.js +20 -0
  65. package/dist/esm/mergeBranch.js +78 -0
  66. package/dist/esm/migrate.js +237 -0
  67. package/dist/esm/missing.js +160 -0
  68. package/dist/esm/parseLocalLanguage.js +194 -0
  69. package/dist/esm/parseLocalLanguages.js +16 -0
  70. package/dist/esm/parseLocalReference.js +9 -0
  71. package/dist/esm/publishVersion.js +40 -0
  72. package/{removeUndefinedFromArrays.js → dist/esm/removeUndefinedFromArrays.js} +5 -5
  73. package/dist/esm/removeVersion.js +40 -0
  74. package/dist/esm/request.js +64 -0
  75. package/{shouldUnflatten.js → dist/esm/shouldUnflatten.js} +7 -7
  76. package/dist/esm/sortFlatResources.js +11 -0
  77. package/dist/esm/sync.js +770 -0
  78. package/{unflatten.js → dist/esm/unflatten.js} +36 -34
  79. package/package.json +39 -18
  80. package/rollup.config.js +57 -0
  81. package/add.js +0 -105
  82. package/convertToDesiredFormat.js +0 -268
  83. package/convertToFlatFormat.js +0 -322
  84. package/copyVersion.js +0 -69
  85. package/createBranch.js +0 -61
  86. package/deleteBranch.js +0 -97
  87. package/deleteNamespace.js +0 -39
  88. package/download.js +0 -516
  89. package/format.js +0 -206
  90. package/get.js +0 -81
  91. package/getBranches.js +0 -40
  92. package/getJob.js +0 -40
  93. package/getProjectStats.js +0 -40
  94. package/getRemoteLanguages.js +0 -40
  95. package/getRemoteNamespace.js +0 -122
  96. package/index.js +0 -9
  97. package/isValidUuid.js +0 -2
  98. package/lngs.json +0 -211
  99. package/mergeBranch.js +0 -102
  100. package/migrate.js +0 -314
  101. package/missing.js +0 -169
  102. package/parseLocalLanguages.js +0 -22
  103. package/parseLocalReference.js +0 -10
  104. package/publishVersion.js +0 -64
  105. package/removeVersion.js +0 -64
  106. package/request.js +0 -64
  107. package/sortFlatResources.js +0 -9
  108. package/sync.js +0 -786
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ const unflatten = (data, testNatural) => {
4
+ const result = {};
5
+ const shouldConvertArray = {};
6
+ for (const i in data) {
7
+ let keys = [];
8
+ if (testNatural && /( |,|\?)/.test(i)) {
9
+ keys = [i];
10
+ } else {
11
+ keys = i.split('.');
12
+ }
13
+ keys.reduce((r, e, j) => {
14
+ const isNumber = !isNaN(Number(keys[j + 1]));
15
+ const hasLeadingZero = isNumber && keys[j + 1].length > 1 && keys[j + 1][0] === '0';
16
+ const tooHighNumberToBeAnArrayIndex = isNumber && Number(keys[j + 1]) > 1000;
17
+ // if assumed to be an array, but now see a key wih non number value => transform to an object
18
+ if (Array.isArray(r[e]) && (!isNumber || hasLeadingZero || tooHighNumberToBeAnArrayIndex)) {
19
+ r[e] = r[e].reduce((mem, item, ind) => {
20
+ mem[ind] = item;
21
+ return mem
22
+ }, {});
23
+ }
24
+ if (Array.isArray(r[e]) && r[e].length > 50) {
25
+ const base = i.substring(0, i.indexOf(e) + e.length);
26
+ if (Object.values(r[e]).length < (r[e].length / 2)) {
27
+ shouldConvertArray[base] = true;
28
+ } else if (shouldConvertArray[base]) {
29
+ delete shouldConvertArray[base];
30
+ }
31
+ }
32
+ if (typeof r === 'string') {
33
+ if (e === '' && keys.length > 2) {
34
+ const lastPart = keys[keys.length - 2] + '.';
35
+ const firstParts = keys.slice(0, keys.length - 2);
36
+ let obj;
37
+ try {
38
+ obj = firstParts.reduce((acc, p) => acc[p], result);
39
+ } catch (err) {
40
+ if (firstParts.indexOf('') < 0) throw err
41
+
42
+ let navRes = result;
43
+ for (let ind = 0; ind < firstParts.length; ind++) {
44
+ const p = firstParts[ind];
45
+ if (typeof navRes[p] === 'object') {
46
+ navRes = navRes[p];
47
+ } else {
48
+ const rest = firstParts.slice(ind).map((c) => (c === '' ? '.' : c)).join('.');
49
+ navRes[rest] = data[i];
50
+ break
51
+ }
52
+ }
53
+ }
54
+ if (obj && typeof obj !== 'string' && obj[lastPart] === undefined) {
55
+ obj[lastPart] = data[i];
56
+ }
57
+ }
58
+ return r
59
+ }
60
+ return r[e] || (r[e] = (!isNumber || hasLeadingZero || tooHighNumberToBeAnArrayIndex) ? (keys.length - 1 === j ? data[i] : {}) : [])
61
+ }, result);
62
+ }
63
+ const arrsToConvert = Object.keys(shouldConvertArray);
64
+ arrsToConvert.forEach((arrToConvert) => {
65
+ const parts = arrToConvert.split('.');
66
+ let pr = result;
67
+ parts.forEach((part, ind) => {
68
+ if (ind === parts.length - 1 && Array.isArray(pr[part])) {
69
+ pr[part] = pr[part].reduce((mem, item, ind) => {
70
+ mem[ind] = item;
71
+ return mem
72
+ }, {});
73
+ } else {
74
+ pr = pr[part];
75
+ }
76
+ });
77
+ });
78
+ return result
79
+ };
80
+
81
+ module.exports = unflatten;
@@ -0,0 +1,88 @@
1
+ import colors from 'colors';
2
+ import flatten from 'flat';
3
+ import getRemoteLanguages from './getRemoteLanguages.js';
4
+ import request from './request.js';
5
+
6
+ const _add = async (opt) => {
7
+ const url = `${opt.apiEndpoint}/update/{{projectId}}/{{version}}/{{lng}}/{{ns}}`
8
+ .replace('{{projectId}}', opt.projectId)
9
+ .replace('{{ver}}', opt.version)
10
+ .replace('{{version}}', opt.version)
11
+ .replace('{{language}}', opt.language)
12
+ .replace('{{lng}}', opt.language)
13
+ .replace('{{ns}}', opt.namespace)
14
+ .replace('{{namespace}}', opt.namespace);
15
+
16
+ if (!opt.data && (opt.value === undefined || opt.value === null)) {
17
+ console.log(colors.yellow(`removing ${opt.key} from ${opt.version}/${opt.language}/${opt.namespace}...`));
18
+ } else {
19
+ console.log(colors.yellow(`adding ${opt.key} to ${opt.version}/${opt.language}/${opt.namespace}...`));
20
+ }
21
+
22
+ const data = flatten(opt.data || {});
23
+ if (!opt.data) {
24
+ data[opt.key] = opt.value || null; // null will remove the key
25
+ }
26
+
27
+ try {
28
+ const { res, obj } = await request(url, {
29
+ method: 'post',
30
+ headers: {
31
+ Authorization: opt.apiKey
32
+ },
33
+ body: data
34
+ });
35
+ if (res.status >= 300 && res.status !== 412) {
36
+ if (!opt.data && (opt.value === undefined || opt.value === null)) {
37
+ console.log(colors.red(`remove failed for ${opt.key} from ${opt.version}/${opt.language}/${opt.namespace}...`));
38
+ } else {
39
+ console.log(colors.red(`add failed for ${opt.key} to ${opt.version}/${opt.language}/${opt.namespace}...`));
40
+ }
41
+ if (obj && (obj.errorMessage || obj.message)) {
42
+ console.error(colors.red((obj.errorMessage || obj.message)));
43
+ process.exit(1);
44
+ } else {
45
+ console.error(colors.red(res.statusText + ' (' + res.status + ')'));
46
+ process.exit(1);
47
+ }
48
+ return
49
+ }
50
+ if (!opt.data && (opt.value === undefined || opt.value === null)) {
51
+ console.log(colors.green(`removed ${opt.key} from ${opt.version}/${opt.language}/${opt.namespace}...`));
52
+ } else {
53
+ console.log(colors.green(`added ${opt.key} to ${opt.version}/${opt.language}/${opt.namespace}...`));
54
+ }
55
+ } catch (err) {
56
+ if (!opt.data && (opt.value === undefined || opt.value === null)) {
57
+ console.log(colors.red(`remove failed for ${opt.key} from ${opt.version}/${opt.language}/${opt.namespace}...`));
58
+ } else {
59
+ console.log(colors.red(`add failed for ${opt.key} to ${opt.version}/${opt.language}/${opt.namespace}...`));
60
+ }
61
+ console.error(colors.red(err.message));
62
+ process.exit(1);
63
+ }
64
+ };
65
+
66
+ const add = async (opt) => {
67
+ if (opt.language) return _add(opt)
68
+
69
+ let lngs;
70
+ try {
71
+ lngs = await getRemoteLanguages(opt);
72
+ } catch (err) {
73
+ console.error(colors.red(err.message));
74
+ process.exit(1);
75
+ }
76
+
77
+ for (const lng of lngs) {
78
+ opt.language = lng;
79
+ await _add(opt);
80
+ }
81
+ if (!opt.data && (opt.value === undefined || opt.value === null)) {
82
+ console.log(colors.green(`removed ${opt.namespace}/${opt.key} (${opt.version}) from all languages...`));
83
+ } else {
84
+ console.log(colors.green(`added ${opt.namespace}/${opt.key} (${opt.version}) in all languages...`));
85
+ }
86
+ };
87
+
88
+ export { add as default };