@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/ditto.js CHANGED
@@ -1,96 +1,93 @@
1
1
  #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
2
7
  // This is the main entry point for the ditto-cli command.
3
- const { program } = require("commander");
8
+ const commander_1 = require("commander");
4
9
  // to use V8's code cache to speed up instantiation time
5
10
  require("v8-compile-cache");
6
-
7
- const { init, needsInit } = require("../lib/init/init");
8
- const { pull } = require("../lib/pull");
9
-
10
- const addProject = require("../lib/add-project");
11
- const removeProject = require("../lib/remove-project");
12
- const processMetaOption = require("../lib/utils/processMetaOption");
13
-
11
+ const init_1 = require("./init/init");
12
+ const pull_1 = require("./pull");
13
+ const add_project_1 = __importDefault(require("./add-project"));
14
+ const remove_project_1 = __importDefault(require("./remove-project"));
15
+ const processMetaOption_1 = __importDefault(require("./utils/processMetaOption"));
14
16
  /**
15
17
  * Catch and report unexpected error.
16
18
  * @param {any} error The thrown error object.
17
19
  * @returns {void}
18
20
  */
19
21
  function quit(exitCode = 2) {
20
- console.log("\nExiting Ditto CLI...\n");
21
- process.exitCode = exitCode;
22
- process.exit();
22
+ console.log("\nExiting Ditto CLI...\n");
23
+ process.exitCode = exitCode;
24
+ process.exit();
23
25
  }
24
-
25
26
  const setupCommands = () => {
26
- program.name("ditto-cli");
27
- program
28
- .command("pull")
29
- .description("Sync copy from Ditto into working directory")
30
- .action(() => checkInit("pull"));
31
-
32
- const projectDescription = "Add a Ditto project to sync copy from";
33
- const projectCommand = program
34
- .command("project")
35
- .description(projectDescription)
36
- .action(() => checkInit("project"));
37
-
38
- projectCommand
39
- .command("add")
40
- .description(projectDescription)
41
- .action(() => checkInit("project"));
42
-
43
- projectCommand
44
- .command("remove")
45
- .description("Stop syncing copy from a Ditto project")
46
- .action(() => checkInit("project remove"));
27
+ commander_1.program.name("ditto-cli");
28
+ commander_1.program
29
+ .command("pull")
30
+ .description("Sync copy from Ditto into working directory")
31
+ .action(() => checkInit("pull"));
32
+ const projectDescription = "Add a Ditto project to sync copy from";
33
+ const projectCommand = commander_1.program
34
+ .command("project")
35
+ .description(projectDescription)
36
+ .action(() => checkInit("project"));
37
+ projectCommand
38
+ .command("add")
39
+ .description(projectDescription)
40
+ .action(() => checkInit("project"));
41
+ projectCommand
42
+ .command("remove")
43
+ .description("Stop syncing copy from a Ditto project")
44
+ .action(() => checkInit("project remove"));
47
45
  };
48
-
49
46
  const setupOptions = () => {
50
- program
51
- .option('-m, --meta <data...>',
52
- 'Optional metadata for this command to send arbitrary data to the backend. Ex: -m githubActionRequest:true trigger:manual');
47
+ commander_1.program.option("-m, --meta <data...>", "Optional metadata for this command to send arbitrary data to the backend. Ex: -m githubActionRequest:true trigger:manual");
53
48
  };
54
-
55
49
  const checkInit = async (command) => {
56
- if (needsInit() && command !== "project remove") {
57
- try {
58
- await init();
59
- if (command === "pull") main(); // re-run to actually pull text now that init is finished
60
- } catch (error) {
61
- quit();
50
+ if ((0, init_1.needsInit)() && command !== "project remove") {
51
+ try {
52
+ await (0, init_1.init)();
53
+ if (command === "pull")
54
+ main(); // re-run to actually pull text now that init is finished
55
+ }
56
+ catch (error) {
57
+ quit();
58
+ }
62
59
  }
63
- } else {
64
- const { meta } = program.opts();
65
- switch (command) {
66
- case "pull":
67
- pull({ meta: processMetaOption(meta) });
68
- break;
69
- case "project":
70
- case "project add":
71
- addProject();
72
- break;
73
- case "project remove":
74
- removeProject();
75
- break;
76
- case "none":
77
- setupCommands();
78
- program.help();
79
- break;
80
- default:
81
- quit();
60
+ else {
61
+ const { meta } = commander_1.program.opts();
62
+ switch (command) {
63
+ case "pull":
64
+ (0, pull_1.pull)({ meta: (0, processMetaOption_1.default)(meta) });
65
+ break;
66
+ case "project":
67
+ case "project add":
68
+ (0, add_project_1.default)();
69
+ break;
70
+ case "project remove":
71
+ (0, remove_project_1.default)();
72
+ break;
73
+ case "none":
74
+ setupCommands();
75
+ commander_1.program.help();
76
+ break;
77
+ default:
78
+ quit();
79
+ }
82
80
  }
83
- }
84
81
  };
85
-
86
82
  const main = async () => {
87
- if (process.argv.length <= 2 && process.argv[1].includes("ditto-cli")) {
88
- await checkInit("none");
89
- } else {
90
- setupCommands();
91
- setupOptions();
92
- }
93
- program.parse(process.argv);
83
+ if (process.argv.length <= 2 && process.argv[1].includes("ditto-cli")) {
84
+ await checkInit("none");
85
+ }
86
+ else {
87
+ setupCommands();
88
+ setupOptions();
89
+ }
90
+ commander_1.program.parse(process.argv);
94
91
  };
95
-
96
92
  main();
93
+ //# sourceMappingURL=ditto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ditto.js","sourceRoot":"","sources":["../lib/ditto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
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.init = exports.needsInit = void 0;
7
+ // Related to initializing a user/environment to ditto.
8
+ // expected to be run once per project.
9
+ const boxen_1 = __importDefault(require("boxen"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const project_1 = require("./project");
12
+ const token_1 = require("./token");
13
+ const config_1 = __importDefault(require("../config"));
14
+ const sourcesToText_1 = __importDefault(require("../utils/sourcesToText"));
15
+ const needsInit = () => (0, token_1.needsToken)() || (0, project_1.needsSource)();
16
+ exports.needsInit = needsInit;
17
+ function welcome() {
18
+ const msg = chalk_1.default.white(`${chalk_1.default.bold("Welcome to the", chalk_1.default.magentaBright("Ditto CLI"))}.
19
+
20
+ We're glad to have you here.`);
21
+ console.log((0, boxen_1.default)(msg, { padding: 1 }));
22
+ }
23
+ const init = async () => {
24
+ welcome();
25
+ if ((0, token_1.needsToken)()) {
26
+ await (0, token_1.collectAndSaveToken)();
27
+ }
28
+ const { hasSourceData, validProjects, shouldFetchComponentLibrary } = config_1.default.parseSourceInformation();
29
+ if (!hasSourceData) {
30
+ await (0, project_1.collectAndSaveProject)(true);
31
+ return;
32
+ }
33
+ const message = "You're currently set up to sync text from " +
34
+ (0, sourcesToText_1.default)(validProjects, shouldFetchComponentLibrary);
35
+ console.log(message);
36
+ };
37
+ exports.init = init;
38
+ exports.default = { needsInit: exports.needsInit, init: exports.init };
39
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../lib/init/init.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,uCAAuC;AACvC,kDAA0B;AAC1B,kDAA0B;AAG1B,uCAA+D;AAC/D,mCAA0D;AAE1D,uDAA+B;AAC/B,2EAAmD;AAE5C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAA,kBAAU,GAAE,IAAI,IAAA,qBAAW,GAAE,CAAC;AAAhD,QAAA,SAAS,aAAuC;AAE7D,SAAS,OAAO;IACd,MAAM,GAAG,GAAG,eAAK,CAAC,KAAK,CAAC,GAAG,eAAK,CAAC,IAAI,CACnC,gBAAgB,EAChB,eAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CACjC;;6BAE0B,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAEM,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IAC7B,OAAO,EAAE,CAAC;IAEV,IAAI,IAAA,kBAAU,GAAE,EAAE;QAChB,MAAM,IAAA,2BAAmB,GAAE,CAAC;KAC7B;IAED,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,2BAA2B,EAAE,GACjE,gBAAM,CAAC,sBAAsB,EAAE,CAAC;IAElC,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAA,+BAAqB,EAAC,IAAI,CAAC,CAAC;QAClC,OAAO;KACR;IAED,MAAM,OAAO,GACX,4CAA4C;QAC5C,IAAA,uBAAa,EAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC,CAAC;AApBW,QAAA,IAAI,QAoBf;AAEF,kBAAe,EAAE,SAAS,EAAT,iBAAS,EAAE,IAAI,EAAJ,YAAI,EAAE,CAAC"}
@@ -0,0 +1,115 @@
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._testing = exports.collectAndSaveProject = exports.needsSource = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const api_1 = __importDefault(require("../api"));
9
+ const config_1 = __importDefault(require("../config"));
10
+ const consts_1 = __importDefault(require("../consts"));
11
+ const output_1 = __importDefault(require("../output"));
12
+ const token_1 = require("./token");
13
+ const getSelectedProjects_1 = require("../utils/getSelectedProjects");
14
+ const promptForProject_1 = __importDefault(require("../utils/promptForProject"));
15
+ function quit(exitCode = 2) {
16
+ console.log("\nExiting Ditto CLI...\n");
17
+ process.exitCode = exitCode;
18
+ process.exit();
19
+ }
20
+ function saveProject(file, name, id) {
21
+ // old functionality included "ditto_component_library" in the `projects`
22
+ // array, but we want to always treat the component library as a separate
23
+ // entity and use the new notation of a top-level `components` key
24
+ if (id === "components") {
25
+ config_1.default.writeProjectConfigData(file, { components: true });
26
+ return;
27
+ }
28
+ const projects = [...(0, getSelectedProjects_1.getSelectedProjects)(), { name, id }];
29
+ config_1.default.writeProjectConfigData(file, { projects });
30
+ }
31
+ const needsSource = () => {
32
+ return !config_1.default.parseSourceInformation().hasSourceData;
33
+ };
34
+ exports.needsSource = needsSource;
35
+ async function askForAnotherToken() {
36
+ config_1.default.deleteToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST);
37
+ const message = "Looks like the API key you have saved no longer works. Please enter another one.";
38
+ await (0, token_1.collectAndSaveToken)(message);
39
+ }
40
+ async function listProjects(token, projectsAlreadySelected, componentsSelected) {
41
+ const spinner = (0, ora_1.default)("Fetching projects in your workspace...");
42
+ spinner.start();
43
+ let response;
44
+ try {
45
+ response = await api_1.default.get("/project-names", {
46
+ headers: {
47
+ Authorization: `token ${token}`,
48
+ },
49
+ });
50
+ }
51
+ catch (e) {
52
+ spinner.stop();
53
+ throw e;
54
+ }
55
+ spinner.stop();
56
+ return response.data.filter(({ id }) => {
57
+ if (id === "ditto_component_library") {
58
+ return !componentsSelected;
59
+ }
60
+ else {
61
+ return !projectsAlreadySelected.some((project) => project.id === id);
62
+ }
63
+ });
64
+ }
65
+ async function collectProject(token, initialize) {
66
+ const path = process.cwd();
67
+ if (initialize) {
68
+ console.log(`Looks like there are no Ditto projects selected for your current directory: ${output_1.default.info(path)}.`);
69
+ }
70
+ const projectsAlreadySelected = (0, getSelectedProjects_1.getSelectedProjects)();
71
+ const usingComponents = (0, getSelectedProjects_1.getIsUsingComponents)();
72
+ const projects = await listProjects(token, projectsAlreadySelected, usingComponents);
73
+ if (!(projects && projects.length)) {
74
+ console.log("You're currently syncing all projects in your workspace.");
75
+ console.log(output_1.default.warnText("Not seeing a project that you were expecting? Verify that developer mode is enabled on that project. More info: https://www.dittowords.com/docs/ditto-developer-mode"));
76
+ return null;
77
+ }
78
+ const nonInitPrompt = usingComponents
79
+ ? "Add a project"
80
+ : "Add a project or library";
81
+ return (0, promptForProject_1.default)({
82
+ projects,
83
+ message: initialize
84
+ ? "Choose the project or library you'd like to sync text from"
85
+ : nonInitPrompt,
86
+ });
87
+ }
88
+ const collectAndSaveProject = async (initialize = false) => {
89
+ try {
90
+ const token = config_1.default.getToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST);
91
+ const project = await collectProject(token, initialize);
92
+ if (!project) {
93
+ quit(0);
94
+ return;
95
+ }
96
+ console.log("\n" +
97
+ `Thanks for adding ${output_1.default.info(project.name)} to your selected projects.\n` +
98
+ `We saved your updated configuration to: ${output_1.default.info(consts_1.default.PROJECT_CONFIG_FILE)}\n`);
99
+ saveProject(consts_1.default.PROJECT_CONFIG_FILE, project.name, project.id);
100
+ }
101
+ catch (e) {
102
+ console.log(e);
103
+ if (e.response && e.response.status === 404) {
104
+ await askForAnotherToken();
105
+ await (0, exports.collectAndSaveProject)();
106
+ }
107
+ else {
108
+ quit();
109
+ }
110
+ }
111
+ };
112
+ exports.collectAndSaveProject = collectAndSaveProject;
113
+ exports._testing = { saveProject, needsSource: exports.needsSource };
114
+ exports.default = { needsSource: exports.needsSource, collectAndSaveProject: exports.collectAndSaveProject };
115
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../lib/init/project.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AAEtB,iDAAyB;AACzB,uDAA+B;AAC/B,uDAA+B;AAC/B,uDAA+B;AAC/B,mCAA8C;AAC9C,sEAGsC;AACtC,iFAAyD;AAIzD,SAAS,IAAI,CAAC,QAAQ,GAAG,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU;IACzD,yEAAyE;IACzE,yEAAyE;IACzE,kEAAkE;IAClE,IAAI,EAAE,KAAK,YAAY,EAAE;QACvB,gBAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAA,yCAAmB,GAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE1D,gBAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,CAAC;AAEM,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,OAAO,CAAC,gBAAM,CAAC,sBAAsB,EAAE,CAAC,aAAa,CAAC;AACxD,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;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,KAAK,UAAU,YAAY,CACzB,KAAY,EACZ,uBAAkC,EAClC,kBAA2B;IAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,wCAAwC,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,QAAuD,CAAC;IAC5D,IAAI;QACF,QAAQ,GAAG,MAAM,aAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE;YACzC,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,KAAK,EAAE;aAChC;SACF,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,CAAC;KACT;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAW,EAAE,EAAE;QAC9C,IAAI,EAAE,KAAK,yBAAyB,EAAE;YACpC,OAAO,CAAC,kBAAkB,CAAC;SAC5B;aAAM;YACL,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;SACtE;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAY,EAAE,UAAmB;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,UAAU,EAAE;QACd,OAAO,CAAC,GAAG,CACT,+EAA+E,gBAAM,CAAC,IAAI,CACxF,IAAI,CACL,GAAG,CACL,CAAC;KACH;IAED,MAAM,uBAAuB,GAAG,IAAA,yCAAmB,GAAE,CAAC;IACtD,MAAM,eAAe,GAAG,IAAA,0CAAoB,GAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,KAAK,EACL,uBAAuB,EACvB,eAAe,CAChB,CAAC;IAEF,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CACT,gBAAM,CAAC,QAAQ,CACb,sKAAsK,CACvK,CACF,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,MAAM,aAAa,GAAG,eAAe;QACnC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,0BAA0B,CAAC;IAE/B,OAAO,IAAA,0BAAgB,EAAC;QACtB,QAAQ;QACR,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC,4DAA4D;YAC9D,CAAC,CAAC,aAAa;KAClB,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;IAChE,IAAI;QACF,MAAM,KAAK,GAAG,gBAAM,CAAC,QAAQ,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,CAAC,CAAC,CAAC;YACR,OAAO;SACR;QAED,OAAO,CAAC,GAAG,CACT,IAAI;YACF,qBAAqB,gBAAM,CAAC,IAAI,CAC9B,OAAO,CAAC,IAAI,CACb,+BAA+B;YAChC,2CAA2C,gBAAM,CAAC,IAAI,CACpD,gBAAM,CAAC,mBAAmB,CAC3B,IAAI,CACR,CAAC;QAEF,WAAW,CAAC,gBAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;KACnE;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,MAAM,kBAAkB,EAAE,CAAC;YAC3B,MAAM,IAAA,6BAAqB,GAAE,CAAC;SAC/B;aAAM;YACL,IAAI,EAAE,CAAC;SACR;KACF;AACH,CAAC,CAAC;AA7BW,QAAA,qBAAqB,yBA6BhC;AAEW,QAAA,QAAQ,GAAG,EAAE,WAAW,EAAE,WAAW,EAAX,mBAAW,EAAE,CAAC;AAErD,kBAAe,EAAE,WAAW,EAAX,mBAAW,EAAE,qBAAqB,EAArB,6BAAqB,EAAE,CAAC"}
@@ -0,0 +1,89 @@
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.collectAndSaveToken = exports.needsToken = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const enquirer_1 = require("enquirer");
10
+ const api_1 = require("../api");
11
+ const consts_1 = __importDefault(require("../consts"));
12
+ const output_1 = __importDefault(require("../output"));
13
+ const config_1 = __importDefault(require("../config"));
14
+ const needsToken = (configFile, host = consts_1.default.API_HOST) => {
15
+ if (config_1.default.getTokenFromEnv()) {
16
+ return false;
17
+ }
18
+ const file = configFile || consts_1.default.CONFIG_FILE;
19
+ if (!fs_1.default.existsSync(file))
20
+ return true;
21
+ const configData = config_1.default.readGlobalConfigData(file);
22
+ if (!configData[config_1.default.justTheHost(host)] ||
23
+ configData[config_1.default.justTheHost(host)][0].token === "")
24
+ return true;
25
+ return false;
26
+ };
27
+ exports.needsToken = needsToken;
28
+ // Returns true if valid, otherwise an error message.
29
+ async function checkToken(token) {
30
+ const axios = (0, api_1.create)(token);
31
+ const endpoint = "/token-check";
32
+ const resOrError = await axios
33
+ .get(endpoint)
34
+ .catch((error) => {
35
+ if (error.code === "ENOTFOUND") {
36
+ return output_1.default.errorText(`Can't connect to API: ${output_1.default.url(error.hostname)}`);
37
+ }
38
+ if (error.response.status === 401 || error.response.status === 404) {
39
+ return output_1.default.errorText("This API key isn't valid. Please try another.");
40
+ }
41
+ return output_1.default.warnText("We're having trouble reaching the Ditto API.");
42
+ })
43
+ .catch(() => output_1.default.errorText("Sorry! We're having trouble reaching the Ditto API."));
44
+ if (typeof resOrError === "string")
45
+ return resOrError;
46
+ if (resOrError.status === 200)
47
+ return true;
48
+ return output_1.default.errorText("This API key isn't valid. Please try another.");
49
+ }
50
+ async function collectToken(message) {
51
+ const blue = output_1.default.info;
52
+ const apiUrl = output_1.default.url("https://app.dittowords.com/account/user");
53
+ const breadcrumbs = `${blue("User")}`;
54
+ const tokenDescription = message ||
55
+ `To get started, you'll need your Ditto API key. You can find this at: ${apiUrl} > ${breadcrumbs} under "${chalk_1.default.bold("API Keys")}".`;
56
+ console.log(tokenDescription);
57
+ const response = await (0, enquirer_1.prompt)({
58
+ type: "input",
59
+ name: "token",
60
+ message: "What is your API key?",
61
+ validate: (token) => checkToken(token),
62
+ });
63
+ return response.token;
64
+ }
65
+ function quit(exitCode = 2) {
66
+ console.log("API key was not saved.");
67
+ process.exitCode = exitCode;
68
+ process.exit();
69
+ }
70
+ /**
71
+ *
72
+ * @param {string | null} message
73
+ * @returns
74
+ */
75
+ const collectAndSaveToken = async (message = null) => {
76
+ try {
77
+ const token = await collectToken(message);
78
+ console.log(`Thanks for authenticating. We'll save the key to: ${output_1.default.info(consts_1.default.CONFIG_FILE)}`);
79
+ output_1.default.nl();
80
+ config_1.default.saveToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST, token);
81
+ return token;
82
+ }
83
+ catch (error) {
84
+ quit();
85
+ }
86
+ };
87
+ exports.collectAndSaveToken = collectAndSaveToken;
88
+ exports.default = { needsToken: exports.needsToken, collectAndSaveToken: exports.collectAndSaveToken };
89
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../lib/init/token.ts"],"names":[],"mappings":"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"}
package/bin/output.js ADDED
@@ -0,0 +1,34 @@
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.nl = exports.write = exports.subtle = exports.url = exports.success = exports.info = exports.warnText = exports.errorText = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const errorText = (msg) => chalk_1.default.magenta(msg);
9
+ exports.errorText = errorText;
10
+ const warnText = (msg) => chalk_1.default.yellow(msg);
11
+ exports.warnText = warnText;
12
+ const info = (msg) => chalk_1.default.blueBright(msg);
13
+ exports.info = info;
14
+ const success = (msg) => chalk_1.default.green(msg);
15
+ exports.success = success;
16
+ const url = (msg) => chalk_1.default.blueBright.underline(msg);
17
+ exports.url = url;
18
+ const subtle = (msg) => chalk_1.default.grey(msg);
19
+ exports.subtle = subtle;
20
+ const write = (msg) => chalk_1.default.white(msg);
21
+ exports.write = write;
22
+ const nl = () => console.log("\n");
23
+ exports.nl = nl;
24
+ exports.default = {
25
+ errorText: exports.errorText,
26
+ warnText: exports.warnText,
27
+ info: exports.info,
28
+ success: exports.success,
29
+ url: exports.url,
30
+ subtle: exports.subtle,
31
+ write: exports.write,
32
+ nl: exports.nl,
33
+ };
34
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../lib/output.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEnB,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAAhD,QAAA,SAAS,aAAuC;AACtD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAA9C,QAAA,QAAQ,YAAsC;AACpD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAA9C,QAAA,IAAI,QAA0C;AACpD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAA5C,QAAA,OAAO,WAAqC;AAClD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAAvD,QAAA,GAAG,OAAoD;AAC7D,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAA1C,QAAA,MAAM,UAAoC;AAChD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAA1C,QAAA,KAAK,SAAqC;AAChD,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAA7B,QAAA,EAAE,MAA2B;AAE1C,kBAAe;IACb,SAAS,EAAT,iBAAS;IACT,QAAQ,EAAR,gBAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,OAAO,EAAP,eAAO;IACP,GAAG,EAAH,WAAG;IACH,MAAM,EAAN,cAAM;IACN,KAAK,EAAL,aAAK;IACL,EAAE,EAAF,UAAE;CACH,CAAC"}