@dittowords/cli 2.5.1 → 2.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 (73) hide show
  1. package/.idea/workspace.xml +124 -0
  2. package/README.md +23 -10
  3. package/babel.config.js +2 -8
  4. package/bin/add-project.js +38 -0
  5. package/bin/add-project.js.map +1 -0
  6. package/bin/api.js +20 -0
  7. package/bin/api.js.map +1 -0
  8. package/bin/config.js +174 -0
  9. package/bin/config.js.map +1 -0
  10. package/bin/consts.js +21 -0
  11. package/bin/consts.js.map +1 -0
  12. package/bin/ditto.js +71 -74
  13. package/bin/ditto.js.map +1 -0
  14. package/bin/init/init.js +39 -0
  15. package/bin/init/init.js.map +1 -0
  16. package/bin/init/project.js +115 -0
  17. package/bin/init/project.js.map +1 -0
  18. package/bin/init/token.js +89 -0
  19. package/bin/init/token.js.map +1 -0
  20. package/bin/output.js +34 -0
  21. package/bin/output.js.map +1 -0
  22. package/bin/pull.js +305 -0
  23. package/bin/pull.js.map +1 -0
  24. package/bin/remove-project.js +40 -0
  25. package/bin/remove-project.js.map +1 -0
  26. package/bin/types.js +3 -0
  27. package/bin/types.js.map +1 -0
  28. package/bin/utils/getSelectedProjects.js +76 -0
  29. package/bin/utils/getSelectedProjects.js.map +1 -0
  30. package/bin/utils/processMetaOption.js +15 -0
  31. package/bin/utils/processMetaOption.js.map +1 -0
  32. package/bin/utils/projectsToText.js +16 -0
  33. package/bin/utils/projectsToText.js.map +1 -0
  34. package/bin/utils/promptForProject.js +44 -0
  35. package/bin/utils/promptForProject.js.map +1 -0
  36. package/bin/utils/sourcesToText.js +25 -0
  37. package/bin/utils/sourcesToText.js.map +1 -0
  38. package/jest.config.js +1 -1
  39. package/lib/{add-project.js → add-project.ts} +8 -8
  40. package/lib/api.ts +15 -0
  41. package/lib/{config.test.js → config.test.ts} +14 -25
  42. package/lib/config.ts +214 -0
  43. package/lib/consts.ts +20 -0
  44. package/lib/ditto.ts +97 -0
  45. package/lib/init/{init.js → init.ts} +11 -12
  46. package/lib/init/project.test.ts +49 -0
  47. package/lib/init/{project.js → project.ts} +31 -29
  48. package/lib/init/{token.test.js → token.test.ts} +3 -3
  49. package/lib/init/{token.js → token.ts} +23 -19
  50. package/lib/output.ts +21 -0
  51. package/lib/pull.test.ts +172 -0
  52. package/lib/{pull.js → pull.ts} +145 -98
  53. package/lib/{remove-project.js → remove-project.ts} +11 -15
  54. package/lib/types.ts +23 -0
  55. package/lib/utils/getSelectedProjects.ts +55 -0
  56. package/lib/utils/processMetaOption.test.ts +18 -0
  57. package/lib/utils/processMetaOption.ts +16 -0
  58. package/lib/utils/{projectsToText.js → projectsToText.ts} +5 -4
  59. package/lib/utils/{promptForProject.js → promptForProject.ts} +18 -9
  60. package/lib/utils/{sourcesToText.js → sourcesToText.ts} +6 -5
  61. package/package.json +20 -15
  62. package/testing/fixtures/project-config-pull.yml +0 -0
  63. package/tsconfig.json +12 -0
  64. package/yarn-error.log +4466 -0
  65. package/lib/api.js +0 -18
  66. package/lib/config.js +0 -169
  67. package/lib/consts.js +0 -14
  68. package/lib/init/project.test.js +0 -99
  69. package/lib/output.js +0 -21
  70. package/lib/pull.test.js +0 -173
  71. package/lib/utils/getSelectedProjects.js +0 -44
  72. package/lib/utils/processMetaOption.js +0 -16
  73. package/lib/utils/processMetaOption.test.js +0 -16
package/bin/pull.js ADDED
@@ -0,0 +1,305 @@
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
+ exports.pull = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const api_1 = __importDefault(require("./api"));
11
+ const config_1 = __importDefault(require("./config"));
12
+ const consts_1 = __importDefault(require("./consts"));
13
+ const output_1 = __importDefault(require("./output"));
14
+ const token_1 = require("./init/token");
15
+ const sourcesToText_1 = __importDefault(require("./utils/sourcesToText"));
16
+ const NON_DEFAULT_FORMATS = ["flat", "structured", "android", "ios-strings"];
17
+ const DEFAULT_FORMAT_KEYS = ["projects", "exported_at"];
18
+ const hasVariantData = (data) => {
19
+ const hasTopLevelKeys = Object.keys(data).filter((key) => !DEFAULT_FORMAT_KEYS.includes(key))
20
+ .length > 0;
21
+ const hasProjectKeys = data.projects && Object.keys(data.projects).length > 0;
22
+ return hasTopLevelKeys || hasProjectKeys;
23
+ };
24
+ async function askForAnotherToken() {
25
+ config_1.default.deleteToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST);
26
+ const message = "Looks like the API key you have saved no longer works. Please enter another one.";
27
+ await (0, token_1.collectAndSaveToken)(message);
28
+ }
29
+ function getExtension(format) {
30
+ if (format === "android") {
31
+ return ".xml";
32
+ }
33
+ if (format === "ios-strings") {
34
+ return ".strings";
35
+ }
36
+ return ".json";
37
+ }
38
+ /**
39
+ * For a given variant:
40
+ * - if format is unspecified, fetch data for all projects from `/projects` and
41
+ * save in `{variantApiId}.json`
42
+ * - if format is `flat` or `structured`, fetch data for each project from `/project/:project_id` and
43
+ * save in `{projectName}-${variantApiId}.json`
44
+ */
45
+ async function downloadAndSaveVariant(variantApiId, projects, format, token) {
46
+ const params = {
47
+ variant: variantApiId,
48
+ };
49
+ if (format) {
50
+ params.format = format;
51
+ }
52
+ if (format && NON_DEFAULT_FORMATS.includes(format)) {
53
+ const savedMessages = await Promise.all(projects.map(async ({ id, fileName }) => {
54
+ const { data } = await api_1.default.get(`/projects/${id}`, {
55
+ params,
56
+ headers: { Authorization: `token ${token}` },
57
+ });
58
+ if (!hasVariantData(data)) {
59
+ return "";
60
+ }
61
+ const extension = getExtension(format);
62
+ const filename = fileName + ("__" + (variantApiId || "base")) + extension;
63
+ const filepath = path_1.default.join(consts_1.default.TEXT_DIR, filename);
64
+ let dataString = data;
65
+ if (extension === ".json") {
66
+ dataString = JSON.stringify(data, null, 2);
67
+ }
68
+ fs_1.default.writeFileSync(filepath, dataString);
69
+ return getSavedMessage(filename);
70
+ }));
71
+ return savedMessages.join("");
72
+ }
73
+ else {
74
+ const { data } = await api_1.default.get("/projects", {
75
+ params: { ...params, projectIds: projects.map(({ id }) => id) },
76
+ headers: { Authorization: `token ${token}` },
77
+ });
78
+ if (!hasVariantData(data)) {
79
+ return "";
80
+ }
81
+ const filename = `${variantApiId || "base"}.json`;
82
+ const filepath = path_1.default.join(consts_1.default.TEXT_DIR, filename);
83
+ const dataString = JSON.stringify(data, null, 2);
84
+ fs_1.default.writeFileSync(filepath, dataString);
85
+ return getSavedMessage(filename);
86
+ }
87
+ }
88
+ async function downloadAndSaveVariants(projects, format, token, options) {
89
+ const meta = options ? options.meta : {};
90
+ const { data: variants } = await api_1.default.get("/variants", {
91
+ params: {
92
+ ...meta,
93
+ projectIds: projects.map(({ id }) => id),
94
+ },
95
+ headers: { Authorization: `token ${token}` },
96
+ });
97
+ const messages = await Promise.all([
98
+ downloadAndSaveVariant(null, projects, format, token),
99
+ ...variants.map(({ apiID }) => downloadAndSaveVariant(apiID, projects, format, token)),
100
+ ]);
101
+ return messages.join("");
102
+ }
103
+ async function downloadAndSaveBase(projects, format, token, options) {
104
+ const meta = options ? options.meta : {};
105
+ const params = {
106
+ ...meta,
107
+ };
108
+ if (format) {
109
+ params.format = format;
110
+ }
111
+ if (format && NON_DEFAULT_FORMATS.includes(format)) {
112
+ const savedMessages = await Promise.all(projects.map(async ({ id, fileName }) => {
113
+ const { data } = await api_1.default.get(`/projects/${id}`, {
114
+ params,
115
+ headers: { Authorization: `token ${token}` },
116
+ });
117
+ const extension = getExtension(format);
118
+ const filename = `${fileName}${extension}`;
119
+ const filepath = path_1.default.join(consts_1.default.TEXT_DIR, filename);
120
+ let dataString = data;
121
+ if (extension === ".json") {
122
+ dataString = JSON.stringify(data, null, 2);
123
+ }
124
+ fs_1.default.writeFileSync(filepath, dataString);
125
+ return getSavedMessage(filename);
126
+ }));
127
+ return savedMessages.join("");
128
+ }
129
+ else {
130
+ const { data } = await api_1.default.get(`/projects`, {
131
+ params: { ...params, projectIds: projects.map(({ id }) => id) },
132
+ headers: { Authorization: `token ${token}` },
133
+ });
134
+ const dataString = JSON.stringify(data, null, 2);
135
+ fs_1.default.writeFileSync(consts_1.default.TEXT_FILE, dataString);
136
+ return getSavedMessage("text.json");
137
+ }
138
+ }
139
+ function getSavedMessage(file) {
140
+ return `Successfully saved to ${output_1.default.info(file)}\n`;
141
+ }
142
+ function cleanOutputFiles() {
143
+ if (!fs_1.default.existsSync(consts_1.default.TEXT_DIR)) {
144
+ fs_1.default.mkdirSync(consts_1.default.TEXT_DIR);
145
+ }
146
+ const fileNames = fs_1.default.readdirSync(consts_1.default.TEXT_DIR);
147
+ fileNames.forEach((fileName) => {
148
+ if (/\.js(on)?|\.xml|\.strings$/.test(fileName)) {
149
+ fs_1.default.unlinkSync(path_1.default.resolve(consts_1.default.TEXT_DIR, fileName));
150
+ }
151
+ });
152
+ return "Cleaning old output files..\n";
153
+ }
154
+ // compatability with legacy method of specifying project ids
155
+ // that is still used by the default format
156
+ const stringifyProjectId = (projectId) => projectId === "ditto_component_library" ? projectId : `project_${projectId}`;
157
+ /**
158
+ * Generates an index.js file that can be consumed
159
+ * by an SDK - this is a big DX improvement because
160
+ * it provides a single entry point to get all data
161
+ * (including variants) instead of having to import
162
+ * each generated file individually.
163
+ *
164
+ * The generated file will have a unified format
165
+ * independent of the CLI configuration used to fetch
166
+ * data from Ditto.
167
+ */
168
+ function generateJsDriver(projects, variants, format) {
169
+ const fileNames = fs_1.default
170
+ .readdirSync(consts_1.default.TEXT_DIR)
171
+ .filter((fileName) => /\.json$/.test(fileName));
172
+ const projectIdsByName = projects.reduce((agg, project) => {
173
+ if (project.fileName) {
174
+ return { ...agg, [project.fileName]: project.id };
175
+ }
176
+ return agg;
177
+ }, {});
178
+ const data = fileNames.reduce((obj, fileName) => {
179
+ // filename format: {project-name}__{variant-api-id}.json
180
+ // file format: flat or structured
181
+ if (variants && format) {
182
+ const [projectName, rest] = fileName.split("__");
183
+ const [variantApiId] = rest.split(".");
184
+ const projectId = projectIdsByName[projectName];
185
+ if (!projectId) {
186
+ throw new Error(`Couldn't find id for ${projectName}`);
187
+ }
188
+ const projectIdStr = stringifyProjectId(projectId);
189
+ if (!obj[projectIdStr]) {
190
+ obj[projectIdStr] = {};
191
+ }
192
+ obj[projectIdStr][variantApiId] = `require('./${fileName}')`;
193
+ }
194
+ // filename format: {variant-api-id}.json
195
+ // file format: default
196
+ else if (variants) {
197
+ const file = require(path_1.default.resolve(consts_1.default.TEXT_DIR, `./${fileName}`));
198
+ const [variantApiId] = fileName.split(".");
199
+ Object.keys(file.projects).forEach((projectId) => {
200
+ if (!obj[projectId]) {
201
+ obj[projectId] = {};
202
+ }
203
+ const project = file.projects[projectId];
204
+ obj[projectId][variantApiId] = project.frames || project.components;
205
+ });
206
+ }
207
+ // filename format: {project-name}.json
208
+ // file format: flat or structured
209
+ else if (format) {
210
+ const [projectName] = fileName.split(".");
211
+ const projectId = projectIdsByName[projectName];
212
+ if (!projectId) {
213
+ throw new Error(`Couldn't find id for ${projectName}`);
214
+ }
215
+ obj[stringifyProjectId(projectId)] = {
216
+ base: `require('./${fileName}')`,
217
+ };
218
+ }
219
+ // filename format: text.json (single file)
220
+ // file format: default
221
+ else {
222
+ const file = require(path_1.default.resolve(consts_1.default.TEXT_DIR, `./${fileName}`));
223
+ Object.keys(file.projects).forEach((projectId) => {
224
+ const project = file.projects[projectId];
225
+ obj[projectId] = { base: project.frames || project.components };
226
+ });
227
+ }
228
+ return obj;
229
+ }, {});
230
+ let dataString = `module.exports = ${JSON.stringify(data, null, 2)}`
231
+ // remove quotes around require statements
232
+ .replace(/"require\((.*)\)"/g, "require($1)");
233
+ const filePath = path_1.default.resolve(consts_1.default.TEXT_DIR, "index.js");
234
+ fs_1.default.writeFileSync(filePath, dataString, { encoding: "utf8" });
235
+ return `Generated .js SDK driver at ${output_1.default.info(filePath)}`;
236
+ }
237
+ async function downloadAndSave(sourceInformation, token, options) {
238
+ const { validProjects, variants, format, shouldFetchComponentLibrary } = sourceInformation;
239
+ let msg = `\nFetching the latest text from ${(0, sourcesToText_1.default)(validProjects, shouldFetchComponentLibrary)}\n`;
240
+ const spinner = (0, ora_1.default)(msg);
241
+ spinner.start();
242
+ // We'll need to move away from this solution if at some
243
+ // point down the road we stop allowing the component
244
+ // library to be returned from the /projects endpoint
245
+ if (shouldFetchComponentLibrary) {
246
+ validProjects.push({
247
+ id: "ditto_component_library",
248
+ name: "Ditto Component Library",
249
+ fileName: "ditto-component-library",
250
+ });
251
+ }
252
+ try {
253
+ msg += cleanOutputFiles();
254
+ const meta = options ? options.meta : {};
255
+ msg += variants
256
+ ? await downloadAndSaveVariants(validProjects, format, token, { meta })
257
+ : await downloadAndSaveBase(validProjects, format, token, { meta });
258
+ msg += generateJsDriver(validProjects, variants, format);
259
+ msg += `\n${output_1.default.success("Done")}!`;
260
+ spinner.stop();
261
+ return console.log(msg);
262
+ }
263
+ catch (e) {
264
+ spinner.stop();
265
+ let error = e.message;
266
+ if (e.response && e.response.status === 404) {
267
+ await askForAnotherToken();
268
+ (0, exports.pull)();
269
+ return;
270
+ }
271
+ if (e.response && e.response.status === 401) {
272
+ error = "You don't have access to the selected projects";
273
+ msg = `${output_1.default.errorText(error)}.\nChoose others using the ${output_1.default.info("project")} command, or update your API key.`;
274
+ return console.log(msg);
275
+ }
276
+ if (e.response && e.response.status === 403) {
277
+ error =
278
+ "One or more of the requested projects don't have Developer Mode enabled";
279
+ msg = `${output_1.default.errorText(error)}.\nPlease choose different projects using the ${output_1.default.info("project")} command, or turn on Developer Mode for all selected projects. Learn more here: ${output_1.default.subtle("https://www.dittowords.com/docs/ditto-developer-mode")}.`;
280
+ return console.log(msg);
281
+ }
282
+ if (e.response && e.response.status === 400) {
283
+ error = "projects not found";
284
+ }
285
+ msg = `We hit an error fetching text from the projects: ${output_1.default.errorText(error)}.\nChoose others using the ${output_1.default.info("project")} command.`;
286
+ return console.log(msg);
287
+ }
288
+ }
289
+ const pull = (options) => {
290
+ const meta = options ? options.meta : {};
291
+ const token = config_1.default.getToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST);
292
+ const sourceInformation = config_1.default.parseSourceInformation();
293
+ return downloadAndSave(sourceInformation, token, { meta });
294
+ };
295
+ exports.pull = pull;
296
+ exports.default = {
297
+ pull: exports.pull,
298
+ _testing: {
299
+ cleanOutputFiles,
300
+ downloadAndSaveVariant,
301
+ downloadAndSaveVariants,
302
+ downloadAndSaveBase,
303
+ },
304
+ };
305
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
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 config_1 = __importDefault(require("./config"));
7
+ const consts_1 = __importDefault(require("./consts"));
8
+ const output_1 = __importDefault(require("./output"));
9
+ const getSelectedProjects_1 = require("./utils/getSelectedProjects");
10
+ const promptForProject_1 = __importDefault(require("./utils/promptForProject"));
11
+ async function removeProject() {
12
+ const projects = (0, getSelectedProjects_1.getSelectedProjects)();
13
+ const isUsingComponents = (0, getSelectedProjects_1.getIsUsingComponents)();
14
+ if (!projects.length && !isUsingComponents) {
15
+ console.log("\n" +
16
+ "No projects found in your current configuration.\n" +
17
+ `Try adding one with: ${output_1.default.info("ditto-cli project add")}\n`);
18
+ return;
19
+ }
20
+ const allProjects = isUsingComponents
21
+ ? [{ id: "components", name: "Ditto Component Library" }, ...projects]
22
+ : projects;
23
+ const projectToRemove = await (0, promptForProject_1.default)({
24
+ projects: allProjects,
25
+ message: isUsingComponents
26
+ ? "Select a project or library to remove"
27
+ : "Select a project to remove",
28
+ });
29
+ if (!projectToRemove)
30
+ return;
31
+ config_1.default.writeProjectConfigData(consts_1.default.PROJECT_CONFIG_FILE, {
32
+ components: isUsingComponents && projectToRemove.id !== "components",
33
+ projects: projects.filter(({ id }) => id !== projectToRemove.id),
34
+ });
35
+ console.log(`\n${output_1.default.info(projectToRemove.name)} has been removed from your selected projects. ` +
36
+ `\nWe saved your updated configuration to: ${output_1.default.info(consts_1.default.PROJECT_CONFIG_FILE)}` +
37
+ "\n");
38
+ }
39
+ exports.default = removeProject;
40
+ //# sourceMappingURL=remove-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-project.js","sourceRoot":"","sources":["../lib/remove-project.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,sDAA8B;AAC9B,sDAA8B;AAC9B,qEAGqC;AACrC,gFAAwD;AAExD,KAAK,UAAU,aAAa;IAC1B,MAAM,QAAQ,GAAG,IAAA,yCAAmB,GAAE,CAAC;IACvC,MAAM,iBAAiB,GAAG,IAAA,0CAAoB,GAAE,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE;QAC1C,OAAO,CAAC,GAAG,CACT,IAAI;YACF,oDAAoD;YACpD,wBAAwB,gBAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CACnE,CAAC;QACF,OAAO;KACR;IAED,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,GAAG,QAAQ,CAAC;QACtE,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,eAAe,GAAG,MAAM,IAAA,0BAAgB,EAAC;QAC7C,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,iBAAiB;YACxB,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,4BAA4B;KACjC,CAAC,CAAC;IACH,IAAI,CAAC,eAAe;QAAE,OAAO;IAE7B,gBAAM,CAAC,sBAAsB,CAAC,gBAAM,CAAC,mBAAmB,EAAE;QACxD,UAAU,EAAE,iBAAiB,IAAI,eAAe,CAAC,EAAE,KAAK,YAAY;QACpE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,CAAC;KACjE,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,KAAK,gBAAM,CAAC,IAAI,CACd,eAAe,CAAC,IAAI,CACrB,iDAAiD;QAChD,6CAA6C,gBAAM,CAAC,IAAI,CACtD,gBAAM,CAAC,mBAAmB,CAC3B,EAAE;QACH,IAAI,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,aAAa,CAAC"}
package/bin/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getIsUsingComponents = exports.getSelectedProjects = void 0;
30
+ const fs_1 = __importDefault(require("fs"));
31
+ const js_yaml_1 = __importStar(require("js-yaml"));
32
+ const consts_1 = require("../consts");
33
+ function jsonIsConfigYAML(json) {
34
+ return typeof json === "object";
35
+ }
36
+ function yamlToJson(_yaml) {
37
+ try {
38
+ let configYaml = js_yaml_1.default.load(_yaml);
39
+ if (!jsonIsConfigYAML(configYaml)) {
40
+ return {};
41
+ }
42
+ return configYaml;
43
+ }
44
+ catch (e) {
45
+ if (e instanceof js_yaml_1.YAMLException) {
46
+ return null;
47
+ }
48
+ else {
49
+ throw e;
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Returns an array containing all valid projects ({ id, name })
55
+ * currently contained in the project config file.
56
+ */
57
+ const getSelectedProjects = (configFile = consts_1.PROJECT_CONFIG_FILE) => {
58
+ if (!fs_1.default.existsSync(configFile))
59
+ return [];
60
+ const contentYaml = fs_1.default.readFileSync(configFile, "utf8");
61
+ const contentJson = yamlToJson(contentYaml);
62
+ if (!(contentJson && contentJson.projects)) {
63
+ return [];
64
+ }
65
+ return contentJson.projects.filter(({ name, id }) => name && id);
66
+ };
67
+ exports.getSelectedProjects = getSelectedProjects;
68
+ const getIsUsingComponents = (configFile = consts_1.PROJECT_CONFIG_FILE) => {
69
+ if (!fs_1.default.existsSync(configFile))
70
+ return false;
71
+ const contentYaml = fs_1.default.readFileSync(configFile, "utf8");
72
+ const contentJson = yamlToJson(contentYaml);
73
+ return !!contentJson && !!contentJson.components;
74
+ };
75
+ exports.getIsUsingComponents = getIsUsingComponents;
76
+ //# sourceMappingURL=getSelectedProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectedProjects.js","sourceRoot":"","sources":["../../lib/utils/getSelectedProjects.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,mDAA8C;AAE9C,sCAAgD;AAGhD,SAAS,gBAAgB,CAAC,IAAa;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI;QACF,IAAI,UAAU,GAAG,iBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YACjC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,UAAU,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,YAAY,uBAAa,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;aAAM;YACL,MAAM,CAAC,CAAC;SACT;KACF;AACH,CAAC;AAED;;;GAGG;AACI,MAAM,mBAAmB,GAAG,CACjC,UAAU,GAAG,4BAAmB,EACrB,EAAE;IACb,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;QAC1C,OAAO,EAAE,CAAC;KACX;IAED,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AAbW,QAAA,mBAAmB,uBAa9B;AAEK,MAAM,oBAAoB,GAAG,CAClC,UAAU,GAAG,4BAAmB,EACvB,EAAE;IACX,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;AACnD,CAAC,CAAC;AATW,QAAA,oBAAoB,wBAS/B"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const processMetaOption = (inputArr) => {
4
+ const res = {};
5
+ if (!Array.isArray(inputArr)) {
6
+ return res;
7
+ }
8
+ inputArr.forEach((element) => {
9
+ const [key, value] = element.split(":");
10
+ res[key] = value;
11
+ });
12
+ return res;
13
+ };
14
+ exports.default = processMetaOption;
15
+ //# sourceMappingURL=processMetaOption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processMetaOption.js","sourceRoot":"","sources":["../../lib/utils/processMetaOption.ts"],"names":[],"mappings":";;AAAA,MAAM,iBAAiB,GAAG,CAAC,QAAyB,EAAE,EAAE;IACtD,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC5B,OAAO,GAAG,CAAC;KACZ;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
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 = (projects) => {
8
+ return ((projects || []).reduce((outputString, { name, id }) => outputString +
9
+ ("\n" +
10
+ "- " +
11
+ output_1.default.info(name) +
12
+ " " +
13
+ output_1.default.subtle("https://app.dittowords.com/doc/" + id)), "") + "\n");
14
+ };
15
+ exports.default = projectsToText;
16
+ //# sourceMappingURL=projectsToText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectsToText.js","sourceRoot":"","sources":["../../lib/utils/projectsToText.ts"],"names":[],"mappings":";;;;;AAAA,uDAA+B;AAG/B,MAAM,cAAc,GAAG,CAAC,QAAmB,EAAE,EAAE;IAC7C,OAAO,CACL,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CACrB,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAC7B,YAAY;QACZ,CAAC,IAAI;YACH,IAAI;YACJ,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,GAAG;YACH,gBAAM,CAAC,MAAM,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC,EAC1D,EAAE,CACH,GAAG,IAAI,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,44 @@
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
+ function formatProjectChoice(project) {
9
+ return (project.name +
10
+ " " +
11
+ output_1.default.subtle(project.url || `https://app.dittowords.com/doc/${project.id}`));
12
+ }
13
+ function parseResponse(response) {
14
+ if (!response) {
15
+ return null;
16
+ }
17
+ const [, name, id] = response.split(/^(.*)\s.*http.*\/(\w+).*$/);
18
+ if (id === "all") {
19
+ return { name, id: "ditto_component_library" };
20
+ }
21
+ return { name, id };
22
+ }
23
+ const promptForProject = async ({ message, projects, limit = 10, }) => {
24
+ output_1.default.nl();
25
+ const choices = projects.map(formatProjectChoice);
26
+ const prompt = new AutoComplete({
27
+ name: "project",
28
+ message,
29
+ limit,
30
+ choices,
31
+ });
32
+ let response;
33
+ try {
34
+ response = await prompt.run();
35
+ }
36
+ catch (e) {
37
+ // this catch handles the case where someone presses
38
+ // Ctrl + C to kill the AutoComplete process
39
+ response = null;
40
+ }
41
+ return parseResponse(response);
42
+ };
43
+ exports.default = promptForProject;
44
+ //# 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;AAG/B,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,OAAO,CACL,OAAO,CAAC,IAAI;QACZ,GAAG;QACH,gBAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,kCAAkC,OAAO,CAAC,EAAE,EAAE,CAAC,CAC7E,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,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"}
package/jest.config.js CHANGED
@@ -2,5 +2,5 @@ module.exports = {
2
2
  transformIgnorePatterns: [],
3
3
  maxWorkers: 1,
4
4
  verbose: true,
5
- collectCoverageFrom: ["src/**/*.{js,jsx}"],
5
+ collectCoverageFrom: ["lib/**/*.{js,jsx,ts,tsx}"],
6
6
  };
@@ -1,10 +1,10 @@
1
- const { collectAndSaveProject } = require("./init/project");
2
- const projectsToText = require("./utils/projectsToText");
3
- const {
1
+ import { collectAndSaveProject } from "./init/project";
2
+ import projectsToText from "./utils/projectsToText";
3
+ import {
4
4
  getSelectedProjects,
5
5
  getIsUsingComponents,
6
- } = require("./utils/getSelectedProjects");
7
- const output = require("./output");
6
+ } from "./utils/getSelectedProjects";
7
+ import output from "./output";
8
8
 
9
9
  function quit(exitCode = 2) {
10
10
  console.log("Project selection was not updated.");
@@ -20,13 +20,13 @@ const addProject = async () => {
20
20
  if (usingComponents) {
21
21
  if (projects.length) {
22
22
  console.log(
23
- `\nYou're currently set up to sync text from the ${output.info(
23
+ `\nYou're currently syncing text from the ${output.info(
24
24
  "Component Library"
25
25
  )} and from the following projects: ${projectsToText(projects)}`
26
26
  );
27
27
  } else {
28
28
  console.log(
29
- `\nYou're currently only set up to sync text from the ${output.info(
29
+ `\nYou're currently only syncing text from the ${output.info(
30
30
  "Component Library"
31
31
  )}`
32
32
  );
@@ -48,4 +48,4 @@ const addProject = async () => {
48
48
  }
49
49
  };
50
50
 
51
- module.exports = addProject;
51
+ export default addProject;
package/lib/api.ts ADDED
@@ -0,0 +1,15 @@
1
+ import axios from "axios";
2
+
3
+ import config from "./config";
4
+ import consts from "./consts";
5
+
6
+ export const create = (token?: string) => {
7
+ return axios.create({
8
+ baseURL: consts.API_HOST,
9
+ headers: {
10
+ Authorization: `token ${token}`,
11
+ },
12
+ });
13
+ };
14
+
15
+ export default create(config.getToken(consts.CONFIG_FILE, consts.API_HOST));