@dittowords/cli 3.4.2 → 3.6.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 (72) hide show
  1. package/README.md +17 -14
  2. package/bin/api.js +5 -6
  3. package/bin/api.js.map +1 -1
  4. package/bin/http/fetchComponents.js +3 -5
  5. package/bin/http/fetchComponents.js.map +1 -1
  6. package/bin/http/fetchVariants.js +3 -5
  7. package/bin/http/fetchVariants.js.map +1 -1
  8. package/bin/init/project.js +3 -6
  9. package/bin/init/project.js.map +1 -1
  10. package/bin/init/token.js +1 -1
  11. package/bin/init/token.js.map +1 -1
  12. package/bin/lib/add-project.js +36 -0
  13. package/bin/lib/add-project.js.map +1 -0
  14. package/bin/lib/api.js +20 -0
  15. package/bin/lib/api.js.map +1 -0
  16. package/bin/lib/config.js +202 -0
  17. package/bin/lib/config.js.map +1 -0
  18. package/bin/lib/consts.js +21 -0
  19. package/bin/lib/consts.js.map +1 -0
  20. package/bin/lib/ditto.js +121 -0
  21. package/bin/lib/ditto.js.map +1 -0
  22. package/bin/lib/generate-suggestions.js +71 -0
  23. package/bin/lib/generate-suggestions.js.map +1 -0
  24. package/bin/lib/http/fetchComponents.js +13 -0
  25. package/bin/lib/http/fetchComponents.js.map +1 -0
  26. package/bin/lib/http/fetchVariants.js +26 -0
  27. package/bin/lib/http/fetchVariants.js.map +1 -0
  28. package/bin/lib/init/init.js +50 -0
  29. package/bin/lib/init/init.js.map +1 -0
  30. package/bin/lib/init/project.js +108 -0
  31. package/bin/lib/init/project.js.map +1 -0
  32. package/bin/lib/init/token.js +91 -0
  33. package/bin/lib/init/token.js.map +1 -0
  34. package/bin/lib/output.js +34 -0
  35. package/bin/lib/output.js.map +1 -0
  36. package/bin/lib/pull.js +264 -0
  37. package/bin/lib/pull.js.map +1 -0
  38. package/bin/lib/remove-project.js +35 -0
  39. package/bin/lib/remove-project.js.map +1 -0
  40. package/bin/lib/replace.js +107 -0
  41. package/bin/lib/replace.js.map +1 -0
  42. package/bin/lib/types.js +3 -0
  43. package/bin/lib/types.js.map +1 -0
  44. package/bin/lib/utils/cleanFileName.js +11 -0
  45. package/bin/lib/utils/cleanFileName.js.map +1 -0
  46. package/bin/lib/utils/generateJsDriver.js +56 -0
  47. package/bin/lib/utils/generateJsDriver.js.map +1 -0
  48. package/bin/lib/utils/getSelectedProjects.js +61 -0
  49. package/bin/lib/utils/getSelectedProjects.js.map +1 -0
  50. package/bin/lib/utils/processMetaOption.js +15 -0
  51. package/bin/lib/utils/processMetaOption.js.map +1 -0
  52. package/bin/lib/utils/projectsToText.js +25 -0
  53. package/bin/lib/utils/projectsToText.js.map +1 -0
  54. package/bin/lib/utils/promptForProject.js +43 -0
  55. package/bin/lib/utils/promptForProject.js.map +1 -0
  56. package/bin/lib/utils/quit.js +10 -0
  57. package/bin/lib/utils/quit.js.map +1 -0
  58. package/bin/lib/utils/sourcesToText.js +25 -0
  59. package/bin/lib/utils/sourcesToText.js.map +1 -0
  60. package/bin/package.json +76 -0
  61. package/bin/pull.js +11 -5
  62. package/bin/pull.js.map +1 -1
  63. package/lib/api.ts +5 -5
  64. package/lib/http/fetchComponents.ts +2 -1
  65. package/lib/http/fetchVariants.ts +2 -1
  66. package/lib/init/project.ts +3 -6
  67. package/lib/init/token.ts +2 -2
  68. package/lib/pull.test.ts +32 -7
  69. package/lib/pull.ts +13 -6
  70. package/lib/replace.test.ts +1 -0
  71. package/lib/types.ts +9 -1
  72. package/package.json +1 -1
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const { AutoComplete } = require("enquirer");
7
+ const output_1 = __importDefault(require("../output"));
8
+ const projectsToText_1 = require("./projectsToText");
9
+ function formatProjectChoice(project) {
10
+ return (project.name + " " + output_1.default.subtle(project.url || (0, projectsToText_1.getSourceUrl)(project.id)));
11
+ }
12
+ function parseResponse(response) {
13
+ if (!response) {
14
+ return null;
15
+ }
16
+ const [, name, id] = response.split(/^(.*)\s.*http.*\/(\w+).*$/);
17
+ if (id === "all") {
18
+ return { name, id: "ditto_component_library" };
19
+ }
20
+ return { name, id };
21
+ }
22
+ const promptForProject = async ({ message, projects, limit = 10, }) => {
23
+ output_1.default.nl();
24
+ const choices = projects.map(formatProjectChoice);
25
+ const prompt = new AutoComplete({
26
+ name: "project",
27
+ message,
28
+ limit,
29
+ choices,
30
+ });
31
+ let response;
32
+ try {
33
+ response = await prompt.run();
34
+ }
35
+ catch (e) {
36
+ // this catch handles the case where someone presses
37
+ // Ctrl + C to kill the AutoComplete process
38
+ response = null;
39
+ }
40
+ return parseResponse(response);
41
+ };
42
+ exports.default = promptForProject;
43
+ //# sourceMappingURL=promptForProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptForProject.js","sourceRoot":"","sources":["../../../lib/utils/promptForProject.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAE7C,uDAA+B;AAE/B,qDAAgD;AAEhD,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,OAAO,CACL,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,gBAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,IAAA,6BAAY,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IAED,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAEjE,IAAI,EAAE,KAAK,KAAK,EAAE;QAChB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,yBAAyB,EAAE,CAAC;KAChD;IAED,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC;AAQD,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,OAAO,EACP,QAAQ,EACR,KAAK,GAAG,EAAE,GACU,EAAE,EAAE;IACxB,gBAAM,CAAC,EAAE,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,IAAI,EAAE,SAAS;QACf,OAAO;QACP,KAAK;QACL,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC;IAEb,IAAI;QACF,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;QACV,oDAAoD;QACpD,4CAA4C;QAC5C,QAAQ,GAAG,IAAI,CAAC;KACjB;IAED,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quit = void 0;
4
+ function quit(message, exitCode = 2) {
5
+ console.log(`\n${message}\n`);
6
+ process.exitCode = exitCode;
7
+ process.exit();
8
+ }
9
+ exports.quit = quit;
10
+ //# sourceMappingURL=quit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quit.js","sourceRoot":"","sources":["../../../lib/utils/quit.ts"],"names":[],"mappings":";;;AAAA,SAAgB,IAAI,CAAC,OAAe,EAAE,QAAQ,GAAG,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAJD,oBAIC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const output_1 = __importDefault(require("../output"));
7
+ const projectsToText_1 = __importDefault(require("./projectsToText"));
8
+ const sourcesToText = (projects, componentLibrary) => {
9
+ let message = "";
10
+ if (componentLibrary) {
11
+ message += `the ${output_1.default.info("Ditto Component Library")}`;
12
+ if ((projects || []).length) {
13
+ message += " and ";
14
+ }
15
+ else {
16
+ message += "..";
17
+ }
18
+ }
19
+ if ((projects || []).length) {
20
+ message += `the following projects: ${(0, projectsToText_1.default)(projects)}\n`;
21
+ }
22
+ return message;
23
+ };
24
+ exports.default = sourcesToText;
25
+ //# sourceMappingURL=sourcesToText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcesToText.js","sourceRoot":"","sources":["../../../lib/utils/sourcesToText.ts"],"names":[],"mappings":";;;;;AAAA,uDAA+B;AAC/B,sEAA8C;AAG9C,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,gBAAyB,EAAE,EAAE;IACvE,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,gBAAgB,EAAE;QACpB,OAAO,IAAI,OAAO,gBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAE3D,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAC3B,OAAO,IAAI,OAAO,CAAC;SACpB;aAAM;YACL,OAAO,IAAI,IAAI,CAAC;SACjB;KACF;IAED,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,OAAO,IAAI,2BAA2B,IAAA,wBAAc,EAAC,QAAQ,CAAC,IAAI,CAAC;KACpE;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@dittowords/cli",
3
+ "version": "3.2.1-alpha",
4
+ "description": "Command Line Interface for Ditto (dittowords.com).",
5
+ "main": "bin/index.js",
6
+ "scripts": {
7
+ "prepublish": "tsc",
8
+ "prepare": "husky install",
9
+ "start": "tsc && node bin/ditto.js",
10
+ "sync": "tsc && node bin/ditto.js pull",
11
+ "dev": "tsc --watch"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/dittowords/cli.git"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/dittowords/cli/issues"
19
+ },
20
+ "author": "Ditto Tech Inc.",
21
+ "license": "MIT",
22
+ "keywords": [
23
+ "ditto",
24
+ "dittowords",
25
+ "copy",
26
+ "microcopy",
27
+ "product",
28
+ "cli",
29
+ "api"
30
+ ],
31
+ "types": "bin/ditto.d.ts",
32
+ "bin": {
33
+ "ditto-cli": "bin/ditto.js"
34
+ },
35
+ "devDependencies": {
36
+ "@babel/preset-env": "^7.20.2",
37
+ "@babel/preset-typescript": "^7.18.6",
38
+ "@tsconfig/node16": "^1.0.3",
39
+ "@types/jest": "^26.0.9",
40
+ "@types/js-yaml": "^4.0.5",
41
+ "@types/node": "^18.0.0",
42
+ "babel-jest": "^29.3.1",
43
+ "eslint": "^8.27.0",
44
+ "eslint-config-airbnb-base": "^14.2.0",
45
+ "husky": "^7.0.4",
46
+ "jest": "^29.3.1",
47
+ "lint-staged": "^11.2.4",
48
+ "prettier": "2.4.1",
49
+ "rewire": "^6.0.0",
50
+ "source-map": "^0.7.3",
51
+ "tempy": "^0.6.0",
52
+ "typescript": "^4.7.4"
53
+ },
54
+ "dependencies": {
55
+ "@babel/core": "^7.11.4",
56
+ "@babel/parser": "^7.21.4",
57
+ "@babel/traverse": "^7.21.4",
58
+ "@babel/types": "^7.21.4",
59
+ "@types/babel-traverse": "^6.25.7",
60
+ "@types/fs-extra": "^11.0.1",
61
+ "axios": "^0.27.2",
62
+ "boxen": "^5.1.2",
63
+ "chalk": "^4.1.0",
64
+ "commander": "^6.1.0",
65
+ "enquirer": "^2.3.6",
66
+ "faker": "^5.1.0",
67
+ "fs-extra": "^11.1.1",
68
+ "glob": "^9.3.4",
69
+ "js-yaml": "^4.1.0",
70
+ "ora": "^5.0.0",
71
+ "v8-compile-cache": "^2.1.1"
72
+ },
73
+ "lint-staged": {
74
+ "src/**/*.{js,jsx,ts,tsx,css,json}": "prettier --write"
75
+ }
76
+ }
package/bin/pull.js CHANGED
@@ -7,7 +7,7 @@ exports.pull = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const ora_1 = __importDefault(require("ora"));
10
- const api_1 = __importDefault(require("./api"));
10
+ const api_1 = require("./api");
11
11
  const config_1 = __importDefault(require("./config"));
12
12
  const consts_1 = __importDefault(require("./consts"));
13
13
  const output_1 = __importDefault(require("./output"));
@@ -21,17 +21,20 @@ const SUPPORTED_FORMATS = [
21
21
  "structured",
22
22
  "android",
23
23
  "ios-strings",
24
+ "icu",
24
25
  ];
25
- const JSON_FORMATS = ["flat", "structured"];
26
+ const JSON_FORMATS = ["flat", "structured", "icu"];
26
27
  const FORMAT_EXTENSIONS = {
27
28
  flat: ".json",
28
29
  structured: ".json",
29
30
  android: ".xml",
30
31
  "ios-strings": ".strings",
32
+ icu: ".json",
31
33
  };
32
34
  const getFormatDataIsValid = {
33
35
  flat: (data) => data !== "{}",
34
36
  structured: (data) => data !== "{}",
37
+ icu: (data) => data !== "{}",
35
38
  android: (data) => data.includes("<string"),
36
39
  "ios-strings": (data) => !!data,
37
40
  };
@@ -65,6 +68,7 @@ async function askForAnotherToken() {
65
68
  * save in `{projectName}-${variantApiId}.json`
66
69
  */
67
70
  async function downloadAndSaveVariant(variantApiId, projects, format, status, richText, token) {
71
+ const api = (0, api_1.createApiClient)();
68
72
  const params = { variant: variantApiId };
69
73
  if (format)
70
74
  params.format = format;
@@ -73,7 +77,7 @@ async function downloadAndSaveVariant(variantApiId, projects, format, status, ri
73
77
  if (richText)
74
78
  params.includeRichText = richText.toString();
75
79
  const savedMessages = await Promise.all(projects.map(async ({ id, fileName }) => {
76
- const { data } = await api_1.default.get(`/projects/${id}`, {
80
+ const { data } = await api.get(`/projects/${id}`, {
77
81
  params,
78
82
  headers: { Authorization: `token ${token}` },
79
83
  });
@@ -104,6 +108,7 @@ async function downloadAndSaveVariants(variants, projects, format, status, richT
104
108
  return messages.join("");
105
109
  }
106
110
  async function downloadAndSaveBase(projects, format, status, richText, token, options) {
111
+ const api = (0, api_1.createApiClient)();
107
112
  const params = { ...options?.meta };
108
113
  if (format)
109
114
  params.format = format;
@@ -112,7 +117,7 @@ async function downloadAndSaveBase(projects, format, status, richText, token, op
112
117
  if (richText)
113
118
  params.includeRichText = richText.toString();
114
119
  const savedMessages = await Promise.all(projects.map(async ({ id, fileName }) => {
115
- const { data } = await api_1.default.get(`/projects/${id}`, {
120
+ const { data } = await api.get(`/projects/${id}`, {
116
121
  params,
117
122
  headers: { Authorization: `token ${token}` },
118
123
  });
@@ -148,6 +153,7 @@ function cleanOutputFiles() {
148
153
  return "Cleaning old output files..\n";
149
154
  }
150
155
  async function downloadAndSave(source, token, options) {
156
+ const api = (0, api_1.createApiClient)();
151
157
  const { validProjects, format: formatFromSource, shouldFetchComponentLibrary, status, richText, componentFolders, } = source;
152
158
  const format = getFormat(formatFromSource);
153
159
  let msg = "";
@@ -178,7 +184,7 @@ async function downloadAndSave(source, token, options) {
178
184
  const p = new URLSearchParams(params);
179
185
  if (variantApiId)
180
186
  p.append("variant", variantApiId);
181
- const { data } = await api_1.default.get(`/components`, { params: p });
187
+ const { data } = await api.get(`/components`, { params: p });
182
188
  const nameExt = getFormatExtension(format);
183
189
  const nameBase = "ditto-component-library";
184
190
  const namePostfix = `__${variantApiId || "base"}`;
package/bin/pull.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,8CAAsB;AAEtB,gDAAwB;AACxB,sDAA8B;AAC9B,sDAA8B;AAC9B,sDAA8B;AAC9B,wCAAmD;AACnD,0EAAkD;AAClD,+DAA4D;AAC5D,yDAAsD;AAEtD,wDAAqD;AAIrD,MAAM,iBAAiB,GAAsB;IAC3C,MAAM;IACN,YAAY;IACZ,SAAS;IACT,aAAa;CACd,CAAC;AAEF,MAAM,YAAY,GAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE/D,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,UAAU;CAC1B,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI;IACrC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI;IAC3C,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACnD,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;CACxC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,gBAAoC,EAAmB,EAAE;IAC1E,MAAM,CAAC,GAAG,gBAA+C,CAAC;IAC1D,IAAI,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACtC,OAAO,CAAC,CAAC;KACV;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAuB,EAAE,EAAE;IACrD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACxD,MAAM,cAAc,GAAG,CAAC,IAAS,EAAE,EAAE;IACnC,MAAM,eAAe,GACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAClE,MAAM,GAAG,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,OAAO,eAAe,IAAI,cAAc,CAAC;AAC3C,CAAC,CAAC;AAEF,KAAK,UAAU,kBAAkB;IAC/B,gBAAM,CAAC,WAAW,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,OAAO,GACX,kFAAkF,CAAC;IACrF,MAAM,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,YAA2B,EAC3B,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA6B,EAC7B,KAAa;IAEb,MAAM,MAAM,GAAkC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACxE,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAW,EAAE,EAAE;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAE;YAChD,MAAM;YACN,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,EAAE;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAC5B,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,GAAG,SAAS,CACzD,CAAC;QACF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5C;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC;SACX;QAED,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,QAA6B,EAC7B,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA6B,EAC7B,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;QACvE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAqB,EAAE,EAAE,CAC/C,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CACzE;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA8B,EAC9B,KAAa,EACb,OAAqB;IAErB,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAW,EAAE,EAAE;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAE;YAChD,MAAM;YACN,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,EAAE;SAC7C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5C;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC;SACX;QAED,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,yBAAyB,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,gBAAM,CAAC,QAAQ,CAAC,EAAE;QACnC,YAAE,CAAC,SAAS,CAAC,gBAAM,CAAC,QAAQ,CAAC,CAAC;KAC/B;IAED,MAAM,SAAS,GAAG,YAAE,CAAC,WAAW,CAAC,gBAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,IAAI,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC/C,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;SACxD;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAAyB,EACzB,KAAa,EACb,OAAqB;IAErB,MAAM,EACJ,aAAa,EACb,MAAM,EAAE,gBAAgB,EACxB,2BAA2B,EAC3B,MAAM,EACN,QAAQ,EACR,gBAAgB,GACjB,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE3C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAa,EAAC,MAAM,CAAC,CAAC;IAE7C,IAAI;QACF,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC1B,GAAG,IAAI,mCAAmC,IAAA,uBAAa,EACrD,aAAa,EACb,2BAA2B,CAC5B,IAAI,CAAC;QAEN,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzC,IAAI,2BAA2B,EAAE;YAC/B,wEAAwE;YACxE,iDAAiD;YACjD,MAAM,iBAAiB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,OAAO,EAAE,IAAI;gBACf,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,QAAQ;gBAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,IAAI,gBAAgB,EAAE;gBACpB,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;aACxE;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;gBACtD,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,YAAY;oBAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAEpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,yBAAyB,CAAC;gBAC3C,MAAM,WAAW,GAAG,KAAK,YAAY,IAAI,MAAM,EAAE,CAAC;gBAElD,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,EAAE,CAAC,CAAC;gBACtE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;gBACtB,IAAI,OAAO,KAAK,OAAO,EAAE;oBACvB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC5C;gBAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;oBAC5B,OAAO,EAAE,CAAC;iBACX;gBAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CACH,CAAC;YAEF,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1B;QAED,IAAI,aAAa,CAAC,MAAM,EAAE;YACxB,GAAG,IAAI,QAAQ;gBACb,CAAC,CAAC,MAAM,uBAAuB,CAC3B,QAAQ,EACR,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,CACN;gBACH,CAAC,CAAC,MAAM,mBAAmB,CACvB,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,EACL;oBACE,IAAI;iBACL,CACF,CAAC;SACP;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QACnC,IAAI,2BAA2B,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,yBAAyB;gBAC7B,IAAI,EAAE,yBAAyB;gBAC/B,QAAQ,EAAE,yBAAyB;aACpC,CAAC,CAAC;SACJ;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,GAAG,IAAI,IAAA,mCAAgB,EAAC,OAAO,CAAC,CAAC;QAEpE,GAAG,IAAI,KAAK,gBAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QAEtC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,MAAM,kBAAkB,EAAE,CAAC;YAC3B,IAAA,YAAI,GAAE,CAAC;YACP,OAAO;SACR;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK,GAAG,gDAAgD,CAAC;YACzD,GAAG,GAAG,GAAG,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,8BAA8B,gBAAM,CAAC,IAAI,CACvE,SAAS,CACV,mCAAmC,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK;gBACH,yEAAyE,CAAC;YAC5E,GAAG,GAAG,GAAG,gBAAM,CAAC,SAAS,CACvB,KAAK,CACN,iDAAiD,gBAAM,CAAC,IAAI,CAC3D,SAAS,CACV,mFAAmF,gBAAM,CAAC,MAAM,CAC/F,sDAAsD,CACvD,GAAG,CAAC;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK,GAAG,oBAAoB,CAAC;SAC9B;QACD,GAAG,GAAG,oDAAoD,gBAAM,CAAC,SAAS,CACxE,KAAK,CACN,8BAA8B,gBAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;AACH,CAAC;AAMM,MAAM,IAAI,GAAG,CAAC,OAAqB,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,gBAAM,CAAC,QAAQ,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,gBAAM,CAAC,sBAAsB,EAAE,CAAC;IAE1D,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC,CAAC;AANW,QAAA,IAAI,QAMf;AAEF,kBAAe;IACb,IAAI,EAAJ,YAAI;IACJ,QAAQ,EAAE;QACR,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,mBAAmB;KACpB;CACF,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":"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"}
package/lib/api.ts CHANGED
@@ -3,13 +3,13 @@ import axios from "axios";
3
3
  import config from "./config";
4
4
  import consts from "./consts";
5
5
 
6
- export const create = (token?: string) => {
6
+ export function createApiClient(token?: string) {
7
7
  return axios.create({
8
8
  baseURL: consts.API_HOST,
9
9
  headers: {
10
- Authorization: `token ${token}`,
10
+ Authorization: `token ${
11
+ token || config.getToken(consts.CONFIG_FILE, consts.API_HOST)
12
+ }`,
11
13
  },
12
14
  });
13
- };
14
-
15
- export default create(config.getToken(consts.CONFIG_FILE, consts.API_HOST));
15
+ }
@@ -1,4 +1,4 @@
1
- import api from "../api";
1
+ import { createApiClient } from "../api";
2
2
 
3
3
  export interface FetchComponentResponseComponent {
4
4
  name: string;
@@ -12,6 +12,7 @@ export interface FetchComponentResponse {
12
12
  }
13
13
 
14
14
  export async function fetchComponents(): Promise<FetchComponentResponse> {
15
+ const api = createApiClient();
15
16
  const { data } = await api.get<{
16
17
  [compApiId: string]: {
17
18
  name: string;
@@ -1,5 +1,5 @@
1
1
  import { AxiosRequestConfig } from "axios";
2
- import api from "../api";
2
+ import { createApiClient } from "../api";
3
3
  import { PullOptions } from "../pull";
4
4
  import { SourceInformation } from "../types";
5
5
 
@@ -7,6 +7,7 @@ export async function fetchVariants(
7
7
  source: SourceInformation,
8
8
  options: PullOptions = {}
9
9
  ) {
10
+ const api = createApiClient();
10
11
  if (!source.variants) {
11
12
  return null;
12
13
  }
@@ -1,6 +1,6 @@
1
1
  import ora from "ora";
2
2
 
3
- import api from "../api";
3
+ import { createApiClient } from "../api";
4
4
  import config from "../config";
5
5
  import consts from "../consts";
6
6
  import output from "../output";
@@ -38,16 +38,13 @@ async function askForAnotherToken() {
38
38
  }
39
39
 
40
40
  async function listProjects(token: Token, projectsAlreadySelected: Project[]) {
41
+ const api = createApiClient();
41
42
  const spinner = ora("Fetching sources in your workspace...");
42
43
  spinner.start();
43
44
 
44
45
  let response: AxiosResponse<{ id: string; name: string }[]>;
45
46
  try {
46
- response = await api.get("/project-names", {
47
- headers: {
48
- Authorization: `token ${token}`,
49
- },
50
- });
47
+ response = await api.get("/project-names");
51
48
  } catch (e) {
52
49
  spinner.stop();
53
50
  throw e;
package/lib/init/token.ts CHANGED
@@ -4,7 +4,7 @@ import chalk from "chalk";
4
4
 
5
5
  import { prompt } from "enquirer";
6
6
 
7
- import { create } from "../api";
7
+ import { createApiClient } from "../api";
8
8
  import consts from "../consts";
9
9
  import output from "../output";
10
10
  import config from "../config";
@@ -28,7 +28,7 @@ export const needsToken = (configFile?: string, host = consts.API_HOST) => {
28
28
 
29
29
  // Returns true if valid, otherwise an error message.
30
30
  async function checkToken(token: string): Promise<any> {
31
- const axios = create(token);
31
+ const axios = createApiClient(token);
32
32
  const endpoint = "/token-check";
33
33
 
34
34
  let resOrError;
package/lib/pull.test.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import api from "./api";
4
- import config from "./config";
3
+ import { createApiClient } from "./api";
5
4
 
6
5
  const testProjects = [
7
6
  {
@@ -14,7 +13,12 @@ const testProjects = [
14
13
 
15
14
  jest.mock("./api");
16
15
 
17
- const mockApi = api as jest.Mocked<typeof api>;
16
+ // TODO: all tests in this file currently failing because we're re-instantiating the api client
17
+ // everywhere and are unable to mock the return type separately for each instance of usage.
18
+ // We need to refactor to share one api client everywhere instead of always re-creating it.
19
+ const mockApi = createApiClient() as any as jest.Mocked<
20
+ ReturnType<typeof createApiClient>
21
+ >;
18
22
 
19
23
  jest.mock("./consts", () => ({
20
24
  TEXT_DIR: ".testing",
@@ -44,17 +48,18 @@ afterAll(() => {
44
48
  });
45
49
 
46
50
  describe("cleanOutputFiles", () => {
47
- it("removes .js, .json, .xml, and .strings files", () => {
51
+ it("removes .js, .json, .xml, .strings, .stringsdict files", () => {
48
52
  cleanOutputDir();
49
53
 
50
54
  fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.json"), "test");
51
55
  fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.js"), "test");
52
56
  fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.xml"), "test");
53
57
  fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.strings"), "test");
58
+ fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.stringsdict"), "test");
54
59
  // this file shouldn't be deleted
55
60
  fs.writeFileSync(path.resolve(consts.TEXT_DIR, "test.txt"), "test");
56
61
 
57
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(5);
62
+ expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(6);
58
63
 
59
64
  cleanOutputFiles();
60
65
 
@@ -112,11 +117,15 @@ describe("downloadAndSaveBase", () => {
112
117
  }
113
118
  });
114
119
 
115
- it("writes to text.json for default format", async () => {
120
+ it.only("writes to text.json for default format", async () => {
116
121
  cleanOutputDir();
117
122
 
118
123
  mockApi.get.mockResolvedValueOnce({ data: [] });
119
- const output = await downloadAndSaveBase(testProjects, "", undefined);
124
+ const output = await downloadAndSaveBase(
125
+ testProjects,
126
+ "" as any,
127
+ undefined
128
+ );
120
129
 
121
130
  expect(/saved to.*text\.json/.test(output)).toEqual(true);
122
131
  expect(output.match(/saved to/g)?.length).toEqual(1);
@@ -181,4 +190,20 @@ describe("downloadAndSaveBase", () => {
181
190
  expect(output.match(/saved to/g)?.length).toEqual(2);
182
191
  expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
183
192
  });
193
+
194
+ it("writes .stringsdict files for ios-stringsdict", async () => {
195
+ cleanOutputDir();
196
+
197
+ mockApi.get.mockResolvedValue({ data: "hello" });
198
+ const output = await downloadAndSaveBase(
199
+ testProjects,
200
+ "ios-stringsdict",
201
+ undefined
202
+ );
203
+
204
+ expect(/saved to.*Project 1\.stringsdict/.test(output)).toEqual(true);
205
+ expect(/saved to.*Project 2\.stringsdict/.test(output)).toEqual(true);
206
+ expect(output.match(/saved to/g)?.length).toEqual(2);
207
+ expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
208
+ });
184
209
  });
package/lib/pull.ts CHANGED
@@ -3,7 +3,7 @@ import path from "path";
3
3
 
4
4
  import ora from "ora";
5
5
 
6
- import api from "./api";
6
+ import { createApiClient } from "./api";
7
7
  import config from "./config";
8
8
  import consts from "./consts";
9
9
  import output from "./output";
@@ -11,32 +11,36 @@ import { collectAndSaveToken } from "./init/token";
11
11
  import sourcesToText from "./utils/sourcesToText";
12
12
  import { generateJsDriver } from "./utils/generateJsDriver";
13
13
  import { cleanFileName } from "./utils/cleanFileName";
14
- import { SourceInformation, Token, Project } from "./types";
14
+ import { SourceInformation, Token, Project, SupportedFormat } from "./types";
15
15
  import { fetchVariants } from "./http/fetchVariants";
16
16
 
17
- type SupportedFormat = "flat" | "structured" | "android" | "ios-strings";
18
-
19
17
  const SUPPORTED_FORMATS: SupportedFormat[] = [
20
18
  "flat",
21
19
  "structured",
22
20
  "android",
23
21
  "ios-strings",
22
+ "ios-stringsdict",
23
+ "icu",
24
24
  ];
25
25
 
26
- const JSON_FORMATS: SupportedFormat[] = ["flat", "structured"];
26
+ const JSON_FORMATS: SupportedFormat[] = ["flat", "structured", "icu"];
27
27
 
28
28
  const FORMAT_EXTENSIONS = {
29
29
  flat: ".json",
30
30
  structured: ".json",
31
31
  android: ".xml",
32
32
  "ios-strings": ".strings",
33
+ "ios-stringsdict": ".stringsdict",
34
+ icu: ".json",
33
35
  };
34
36
 
35
37
  const getFormatDataIsValid = {
36
38
  flat: (data: string) => data !== "{}",
37
39
  structured: (data: string) => data !== "{}",
40
+ icu: (data: string) => data !== "{}",
38
41
  android: (data: string) => data.includes("<string"),
39
42
  "ios-strings": (data: string) => !!data,
43
+ "ios-stringsdict": (data: string) => data.includes("<key>"),
40
44
  };
41
45
 
42
46
  const getFormat = (formatFromSource: string | undefined): SupportedFormat => {
@@ -85,6 +89,7 @@ async function downloadAndSaveVariant(
85
89
  richText: boolean | undefined,
86
90
  token?: Token
87
91
  ) {
92
+ const api = createApiClient();
88
93
  const params: Record<string, string | null> = { variant: variantApiId };
89
94
  if (format) params.format = format;
90
95
  if (status) params.status = status;
@@ -152,6 +157,7 @@ async function downloadAndSaveBase(
152
157
  token?: Token,
153
158
  options?: PullOptions
154
159
  ) {
160
+ const api = createApiClient();
155
161
  const params = { ...options?.meta };
156
162
  if (format) params.format = format;
157
163
  if (status) params.status = status;
@@ -197,7 +203,7 @@ function cleanOutputFiles() {
197
203
 
198
204
  const fileNames = fs.readdirSync(consts.TEXT_DIR);
199
205
  fileNames.forEach((fileName) => {
200
- if (/\.js(on)?|\.xml|\.strings$/.test(fileName)) {
206
+ if (/\.js(on)?|\.xml|\.strings(dict)?$/.test(fileName)) {
201
207
  fs.unlinkSync(path.resolve(consts.TEXT_DIR, fileName));
202
208
  }
203
209
  });
@@ -210,6 +216,7 @@ async function downloadAndSave(
210
216
  token?: Token,
211
217
  options?: PullOptions
212
218
  ) {
219
+ const api = createApiClient();
213
220
  const {
214
221
  validProjects,
215
222
  format: formatFromSource,
@@ -57,6 +57,7 @@ describe("parseOptions", () => {
57
57
  });
58
58
  });
59
59
 
60
+ // TODO: this is flaky
60
61
  describe("replaceJSXTextInFile", () => {
61
62
  afterEach(async () => {
62
63
  await deleteTempFile("tempFile.jsx");
package/lib/types.ts CHANGED
@@ -12,6 +12,14 @@ interface ComponentFolder {
12
12
  name: string;
13
13
  }
14
14
 
15
+ export type SupportedFormat =
16
+ | "flat"
17
+ | "structured"
18
+ | "android"
19
+ | "ios-strings"
20
+ | "ios-stringsdict"
21
+ | "icu";
22
+
15
23
  export interface ConfigYAML {
16
24
  sources?: {
17
25
  components?: {
@@ -20,7 +28,7 @@ export interface ConfigYAML {
20
28
  };
21
29
  projects?: Project[];
22
30
  };
23
- format?: "flat" | "structured" | "android-xml" | "ios-strings";
31
+ format?: SupportedFormat;
24
32
  status?: string;
25
33
  variants?: boolean;
26
34
  richText?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dittowords/cli",
3
- "version": "3.4.2",
3
+ "version": "3.6.0",
4
4
  "description": "Command Line Interface for Ditto (dittowords.com).",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {