@dittowords/cli 3.2.0-alpha → 3.2.2-alpha

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 (53) hide show
  1. package/bin/ditto.js +11 -0
  2. package/bin/ditto.js.map +1 -1
  3. package/bin/lib/add-project.js +36 -0
  4. package/bin/lib/add-project.js.map +1 -0
  5. package/bin/lib/api.js +20 -0
  6. package/bin/lib/api.js.map +1 -0
  7. package/bin/lib/config.js +202 -0
  8. package/bin/lib/config.js.map +1 -0
  9. package/bin/lib/consts.js +21 -0
  10. package/bin/lib/consts.js.map +1 -0
  11. package/bin/lib/ditto.js +121 -0
  12. package/bin/lib/ditto.js.map +1 -0
  13. package/bin/lib/generate-suggestions.js +71 -0
  14. package/bin/lib/generate-suggestions.js.map +1 -0
  15. package/bin/lib/http/fetchComponents.js +13 -0
  16. package/bin/lib/http/fetchComponents.js.map +1 -0
  17. package/bin/lib/http/fetchVariants.js +26 -0
  18. package/bin/lib/http/fetchVariants.js.map +1 -0
  19. package/bin/lib/init/init.js +50 -0
  20. package/bin/lib/init/init.js.map +1 -0
  21. package/bin/lib/init/project.js +108 -0
  22. package/bin/lib/init/project.js.map +1 -0
  23. package/bin/lib/init/token.js +91 -0
  24. package/bin/lib/init/token.js.map +1 -0
  25. package/bin/lib/output.js +34 -0
  26. package/bin/lib/output.js.map +1 -0
  27. package/bin/lib/pull.js +264 -0
  28. package/bin/lib/pull.js.map +1 -0
  29. package/bin/lib/remove-project.js +35 -0
  30. package/bin/lib/remove-project.js.map +1 -0
  31. package/bin/lib/replace.js +107 -0
  32. package/bin/lib/replace.js.map +1 -0
  33. package/bin/lib/types.js +3 -0
  34. package/bin/lib/types.js.map +1 -0
  35. package/bin/lib/utils/cleanFileName.js +11 -0
  36. package/bin/lib/utils/cleanFileName.js.map +1 -0
  37. package/bin/lib/utils/generateJsDriver.js +56 -0
  38. package/bin/lib/utils/generateJsDriver.js.map +1 -0
  39. package/bin/lib/utils/getSelectedProjects.js +61 -0
  40. package/bin/lib/utils/getSelectedProjects.js.map +1 -0
  41. package/bin/lib/utils/processMetaOption.js +15 -0
  42. package/bin/lib/utils/processMetaOption.js.map +1 -0
  43. package/bin/lib/utils/projectsToText.js +25 -0
  44. package/bin/lib/utils/projectsToText.js.map +1 -0
  45. package/bin/lib/utils/promptForProject.js +43 -0
  46. package/bin/lib/utils/promptForProject.js.map +1 -0
  47. package/bin/lib/utils/quit.js +10 -0
  48. package/bin/lib/utils/quit.js.map +1 -0
  49. package/bin/lib/utils/sourcesToText.js +25 -0
  50. package/bin/lib/utils/sourcesToText.js.map +1 -0
  51. package/bin/package.json +76 -0
  52. package/lib/ditto.ts +12 -3
  53. package/package.json +1 -1
package/bin/ditto.js CHANGED
@@ -8,6 +8,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
8
8
  const commander_1 = require("commander");
9
9
  // to use V8's code cache to speed up instantiation time
10
10
  require("v8-compile-cache");
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
11
13
  const init_1 = require("./init/init");
12
14
  const pull_1 = require("./pull");
13
15
  const quit_1 = require("./utils/quit");
@@ -16,6 +18,14 @@ const remove_project_1 = __importDefault(require("./remove-project"));
16
18
  const replace_1 = require("./replace");
17
19
  const generate_suggestions_1 = require("./generate-suggestions");
18
20
  const processMetaOption_1 = __importDefault(require("./utils/processMetaOption"));
21
+ function getVersion() {
22
+ const packageJsonPath = path_1.default.join(__dirname, "..", "package.json");
23
+ const packageJsonContent = fs_1.default.readFileSync(packageJsonPath, "utf8");
24
+ const packageJson = JSON.parse(packageJsonContent);
25
+ const version = packageJson.version;
26
+ return version;
27
+ }
28
+ const VERSION = getVersion();
19
29
  const COMMANDS = [
20
30
  {
21
31
  name: "pull",
@@ -63,6 +73,7 @@ const setupCommands = () => {
63
73
  };
64
74
  const setupOptions = () => {
65
75
  commander_1.program.option("-m, --meta <data...>", "Include arbitrary data in requests to the Ditto API. Ex: -m githubActionRequest:true trigger:manual");
76
+ commander_1.program.version(VERSION, "-v, --version", "Output the current version");
66
77
  };
67
78
  const executeCommand = async (command, options) => {
68
79
  const needsInitialization = (0, init_1.needsTokenOrSource)();
package/bin/ditto.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ditto.js","sourceRoot":"","sources":["../lib/ditto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ditto.js","sourceRoot":"","sources":["../lib/ditto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
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 project_1 = require("./init/project");
7
+ const projectsToText_1 = __importDefault(require("./utils/projectsToText"));
8
+ const getSelectedProjects_1 = require("./utils/getSelectedProjects");
9
+ const output_1 = __importDefault(require("./output"));
10
+ const quit_1 = require("./utils/quit");
11
+ const addProject = async () => {
12
+ const projects = (0, getSelectedProjects_1.getSelectedProjects)();
13
+ const usingComponents = (0, getSelectedProjects_1.getIsUsingComponents)();
14
+ try {
15
+ if (usingComponents) {
16
+ if (projects.length) {
17
+ console.log(`\nYou're currently syncing text from the ${output_1.default.info("Component Library")} and from the following projects: ${(0, projectsToText_1.default)(projects)}`);
18
+ }
19
+ else {
20
+ console.log(`\nYou're currently only syncing text from the ${output_1.default.info("Component Library")}`);
21
+ }
22
+ }
23
+ else if (projects.length) {
24
+ console.log(`\nYou're currently set up to sync text from the following projects: ${(0, projectsToText_1.default)(projects)}`);
25
+ }
26
+ await (0, project_1.collectAndSaveSource)({
27
+ components: false,
28
+ });
29
+ }
30
+ catch (error) {
31
+ console.log(`\nSorry, there was an error adding a project to your workspace: `, error);
32
+ (0, quit_1.quit)("Project selection was not updated.");
33
+ }
34
+ };
35
+ exports.default = addProject;
36
+ //# sourceMappingURL=add-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-project.js","sourceRoot":"","sources":["../../lib/add-project.ts"],"names":[],"mappings":";;;;;AAAA,4CAAsD;AACtD,4EAAoD;AACpD,qEAGqC;AACrC,sDAA8B;AAC9B,uCAAoC;AAEpC,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;IAC5B,MAAM,QAAQ,GAAG,IAAA,yCAAmB,GAAE,CAAC;IACvC,MAAM,eAAe,GAAG,IAAA,0CAAoB,GAAE,CAAC;IAE/C,IAAI;QACF,IAAI,eAAe,EAAE;YACnB,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,OAAO,CAAC,GAAG,CACT,4CAA4C,gBAAM,CAAC,IAAI,CACrD,mBAAmB,CACpB,qCAAqC,IAAA,wBAAc,EAAC,QAAQ,CAAC,EAAE,CACjE,CAAC;aACH;iBAAM;gBACL,OAAO,CAAC,GAAG,CACT,iDAAiD,gBAAM,CAAC,IAAI,CAC1D,mBAAmB,CACpB,EAAE,CACJ,CAAC;aACH;SACF;aAAM,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC1B,OAAO,CAAC,GAAG,CACT,uEAAuE,IAAA,wBAAc,EACnF,QAAQ,CACT,EAAE,CACJ,CAAC;SACH;QACD,MAAM,IAAA,8BAAoB,EAAC;YACzB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;KACJ;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CACT,kEAAkE,EAClE,KAAK,CACN,CAAC;QACF,IAAA,WAAI,EAAC,oCAAoC,CAAC,CAAC;KAC5C;AACH,CAAC,CAAC;AAEF,kBAAe,UAAU,CAAC"}
package/bin/lib/api.js ADDED
@@ -0,0 +1,20 @@
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.create = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const config_1 = __importDefault(require("./config"));
9
+ const consts_1 = __importDefault(require("./consts"));
10
+ const create = (token) => {
11
+ return axios_1.default.create({
12
+ baseURL: consts_1.default.API_HOST,
13
+ headers: {
14
+ Authorization: `token ${token}`,
15
+ },
16
+ });
17
+ };
18
+ exports.create = create;
19
+ exports.default = (0, exports.create)(config_1.default.getToken(consts_1.default.CONFIG_FILE, consts_1.default.API_HOST));
20
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../lib/api.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,sDAA8B;AAC9B,sDAA8B;AAEvB,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;IACvC,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,gBAAM,CAAC,QAAQ;QACxB,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,KAAK,EAAE;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,MAAM,UAOjB;AAEF,kBAAe,IAAA,cAAM,EAAC,gBAAM,CAAC,QAAQ,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,202 @@
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.DEFAULT_CONFIG = exports.DEFAULT_CONFIG_JSON = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const url_1 = __importDefault(require("url"));
10
+ const js_yaml_1 = __importDefault(require("js-yaml"));
11
+ const consts_1 = __importDefault(require("./consts"));
12
+ exports.DEFAULT_CONFIG_JSON = {
13
+ sources: {
14
+ components: { enabled: true },
15
+ },
16
+ variants: true,
17
+ format: "flat",
18
+ };
19
+ exports.DEFAULT_CONFIG = js_yaml_1.default.dump(exports.DEFAULT_CONFIG_JSON);
20
+ function createFileIfMissing(filename, defaultContents) {
21
+ const dir = path_1.default.dirname(filename);
22
+ // create the directory if it doesn't already exist
23
+ if (!fs_1.default.existsSync(dir))
24
+ fs_1.default.mkdirSync(dir);
25
+ // create the file if it doesn't already exist
26
+ if (!fs_1.default.existsSync(filename)) {
27
+ // create the file, writing the `defaultContents` if provided
28
+ fs_1.default.writeFileSync(filename, defaultContents || "", "utf-8");
29
+ }
30
+ }
31
+ function jsonIsConfigYAML(json) {
32
+ return typeof json === "object";
33
+ }
34
+ function jsonIsGlobalYAML(json) {
35
+ return (!!json &&
36
+ typeof json === "object" &&
37
+ Object.values(json).every((arr) => arr.every &&
38
+ arr.every((val) => typeof val === "object" && Object.keys(val).includes("token"))));
39
+ }
40
+ /**
41
+ * Read data from a project config file
42
+ * @param {string} file defaults to `PROJECT_CONFIG_FILE` defined in `constants.js`
43
+ * @param {*} defaultData defaults to `{}`
44
+ * @returns { ConfigYAML }
45
+ */
46
+ function readProjectConfigData(file = consts_1.default.PROJECT_CONFIG_FILE, defaultData = {}) {
47
+ createFileIfMissing(file, exports.DEFAULT_CONFIG);
48
+ const fileContents = fs_1.default.readFileSync(file, "utf8");
49
+ const yamlData = js_yaml_1.default.load(fileContents);
50
+ if (jsonIsConfigYAML(yamlData)) {
51
+ return yamlData;
52
+ }
53
+ return defaultData;
54
+ }
55
+ /**
56
+ * Read data from a global config file
57
+ * @param {string} file defaults to `CONFIG_FILE` defined in `constants.js`
58
+ * @param {*} defaultData defaults to `{}`
59
+ * @returns { Record<string, { token: string }[]> }
60
+ */
61
+ function readGlobalConfigData(file = consts_1.default.CONFIG_FILE, defaultData = {}) {
62
+ createFileIfMissing(file);
63
+ const fileContents = fs_1.default.readFileSync(file, "utf8");
64
+ const yamlData = js_yaml_1.default.load(fileContents);
65
+ if (jsonIsGlobalYAML(yamlData)) {
66
+ return yamlData;
67
+ }
68
+ return defaultData;
69
+ }
70
+ function writeProjectConfigData(file, data) {
71
+ createFileIfMissing(file, exports.DEFAULT_CONFIG);
72
+ const existingData = readProjectConfigData(file);
73
+ const configData = {
74
+ ...existingData,
75
+ ...data,
76
+ sources: {
77
+ ...existingData.sources,
78
+ ...data.sources,
79
+ },
80
+ };
81
+ const yamlStr = js_yaml_1.default.dump(configData);
82
+ fs_1.default.writeFileSync(file, yamlStr, "utf8");
83
+ }
84
+ function writeGlobalConfigData(file, data) {
85
+ createFileIfMissing(file);
86
+ const existingData = readGlobalConfigData(file);
87
+ const yamlStr = js_yaml_1.default.dump({ ...existingData, ...data });
88
+ fs_1.default.writeFileSync(file, yamlStr, "utf8");
89
+ }
90
+ function justTheHost(host) {
91
+ if (!host.includes("://"))
92
+ return host;
93
+ return url_1.default.parse(host).hostname || "";
94
+ }
95
+ function deleteToken(file, host) {
96
+ const data = readGlobalConfigData(file);
97
+ const hostParsed = justTheHost(host);
98
+ data[hostParsed] = [];
99
+ data[hostParsed][0] = { token: "" };
100
+ writeGlobalConfigData(file, data);
101
+ }
102
+ function saveToken(file, host, token) {
103
+ const data = readGlobalConfigData(file);
104
+ const hostParsed = justTheHost(host);
105
+ data[hostParsed] = []; // only allow one token per host
106
+ data[hostParsed][0] = { token };
107
+ writeGlobalConfigData(file, data);
108
+ }
109
+ function getTokenFromEnv() {
110
+ return process.env.DITTO_API_KEY;
111
+ }
112
+ /**
113
+ *
114
+ * @param {string} file
115
+ * @param {string} host
116
+ * @returns {Token}
117
+ */
118
+ function getToken(file, host) {
119
+ const tokenFromEnv = getTokenFromEnv();
120
+ if (tokenFromEnv) {
121
+ return tokenFromEnv;
122
+ }
123
+ const data = readGlobalConfigData(file);
124
+ const hostEntry = data[justTheHost(host)];
125
+ if (!hostEntry)
126
+ return undefined;
127
+ const { length } = hostEntry;
128
+ return hostEntry[length - 1].token;
129
+ }
130
+ const IS_DUPLICATE = /-(\d+$)/;
131
+ function dedupeProjectName(projectNames, projectName) {
132
+ let dedupedName = projectName;
133
+ if (projectNames.has(dedupedName)) {
134
+ while (projectNames.has(dedupedName)) {
135
+ const [_, numberStr] = dedupedName.match(IS_DUPLICATE) || [];
136
+ if (numberStr && !isNaN(parseInt(numberStr))) {
137
+ dedupedName = `${dedupedName.replace(IS_DUPLICATE, "")}-${parseInt(numberStr) + 1}`;
138
+ }
139
+ else {
140
+ dedupedName = `${dedupedName}-1`;
141
+ }
142
+ }
143
+ }
144
+ return dedupedName;
145
+ }
146
+ /**
147
+ * Reads from the config file, filters out
148
+ * invalid projects, dedupes those remaining, and returns:
149
+ * - whether or not the data required to `pull` is present
150
+ * - whether or not the component library should be fetched
151
+ * - an array of valid, deduped projects
152
+ * - the `variants` and `format` config options
153
+ */
154
+ function parseSourceInformation(file) {
155
+ const { sources, variants, format, status, richText, projects: projectsRoot, components: componentsRoot, } = readProjectConfigData(file);
156
+ const projects = sources?.projects || [];
157
+ const projectNames = new Set();
158
+ const validProjects = [];
159
+ let hasComponentLibraryInProjects = false;
160
+ (projects || []).forEach((project) => {
161
+ const isValid = project.id && project.name;
162
+ if (!isValid) {
163
+ return;
164
+ }
165
+ if (project.id === "ditto_component_library") {
166
+ hasComponentLibraryInProjects = true;
167
+ return;
168
+ }
169
+ project.fileName = dedupeProjectName(projectNames, project.name);
170
+ projectNames.add(project.fileName);
171
+ validProjects.push(project);
172
+ });
173
+ const shouldFetchComponentLibrary = Boolean(sources?.components?.enabled);
174
+ const hasSourceData = !!validProjects.length || shouldFetchComponentLibrary;
175
+ return {
176
+ hasSourceData,
177
+ validProjects,
178
+ shouldFetchComponentLibrary,
179
+ variants: variants || false,
180
+ format,
181
+ status,
182
+ richText,
183
+ hasTopLevelProjectsField: !!projectsRoot,
184
+ hasTopLevelComponentsField: !!componentsRoot,
185
+ hasComponentLibraryInProjects,
186
+ componentFolders: sources?.components?.folders || null,
187
+ };
188
+ }
189
+ exports.default = {
190
+ createFileIfMissing,
191
+ readProjectConfigData,
192
+ readGlobalConfigData,
193
+ writeGlobalConfigData,
194
+ writeProjectConfigData,
195
+ justTheHost,
196
+ saveToken,
197
+ deleteToken,
198
+ getToken,
199
+ getTokenFromEnv,
200
+ parseSourceInformation,
201
+ };
202
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
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.TEXT_FILE = exports.TEXT_DIR = exports.PROJECT_CONFIG_FILE = exports.CONFIG_FILE = exports.API_HOST = void 0;
7
+ const os_1 = require("os");
8
+ const path_1 = __importDefault(require("path"));
9
+ exports.API_HOST = process.env.DITTO_API_HOST || "https://api.dittowords.com";
10
+ exports.CONFIG_FILE = process.env.DITTO_CONFIG_FILE || path_1.default.join((0, os_1.homedir)(), ".config", "ditto");
11
+ exports.PROJECT_CONFIG_FILE = path_1.default.normalize(path_1.default.join("ditto", "config.yml"));
12
+ exports.TEXT_DIR = process.env.DITTO_TEXT_DIR || "ditto";
13
+ exports.TEXT_FILE = path_1.default.normalize(path_1.default.join(exports.TEXT_DIR, "text.json"));
14
+ exports.default = {
15
+ API_HOST: exports.API_HOST,
16
+ CONFIG_FILE: exports.CONFIG_FILE,
17
+ PROJECT_CONFIG_FILE: exports.PROJECT_CONFIG_FILE,
18
+ TEXT_DIR: exports.TEXT_DIR,
19
+ TEXT_FILE: exports.TEXT_FILE,
20
+ };
21
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../lib/consts.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA6B;AAC7B,gDAAwB;AAEX,QAAA,QAAQ,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,4BAA4B,CAAC;AAChD,QAAA,WAAW,GACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAI,CAAC,IAAI,CAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/D,QAAA,mBAAmB,GAAG,cAAI,CAAC,SAAS,CAC/C,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CACjC,CAAC;AACW,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC;AACjD,QAAA,SAAS,GAAG,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,gBAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E,kBAAe;IACb,QAAQ,EAAR,gBAAQ;IACR,WAAW,EAAX,mBAAW;IACX,mBAAmB,EAAnB,2BAAmB;IACnB,QAAQ,EAAR,gBAAQ;IACR,SAAS,EAAT,iBAAS;CACV,CAAC"}
@@ -0,0 +1,121 @@
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 });
7
+ // This is the main entry point for the ditto-cli command.
8
+ const commander_1 = require("commander");
9
+ // to use V8's code cache to speed up instantiation time
10
+ require("v8-compile-cache");
11
+ const package_json_1 = __importDefault(require("../package.json"));
12
+ const init_1 = require("./init/init");
13
+ const pull_1 = require("./pull");
14
+ const quit_1 = require("./utils/quit");
15
+ const add_project_1 = __importDefault(require("./add-project"));
16
+ const remove_project_1 = __importDefault(require("./remove-project"));
17
+ const replace_1 = require("./replace");
18
+ const generate_suggestions_1 = require("./generate-suggestions");
19
+ const processMetaOption_1 = __importDefault(require("./utils/processMetaOption"));
20
+ const VERSION = package_json_1.default.version;
21
+ const COMMANDS = [
22
+ {
23
+ name: "pull",
24
+ description: "Sync copy from Ditto into the current working directory",
25
+ },
26
+ {
27
+ name: "project",
28
+ description: "Add a Ditto project to sync copy from",
29
+ commands: [
30
+ {
31
+ name: "add",
32
+ description: "Add a Ditto project to sync copy from",
33
+ },
34
+ {
35
+ name: "remove",
36
+ description: "Stop syncing copy from a Ditto project",
37
+ },
38
+ ],
39
+ },
40
+ {
41
+ name: "generate-suggestions",
42
+ description: "Find text that can be potentially replaced with Ditto text",
43
+ },
44
+ {
45
+ name: "replace",
46
+ description: "Find and replace Ditto text with code",
47
+ },
48
+ ];
49
+ const setupCommands = () => {
50
+ commander_1.program.name("ditto-cli");
51
+ COMMANDS.forEach((commandConfig) => {
52
+ const cmd = commander_1.program
53
+ .command(commandConfig.name)
54
+ .description(commandConfig.description)
55
+ .action((str, options) => executeCommand(commandConfig.name, options));
56
+ if ("commands" in commandConfig) {
57
+ commandConfig.commands.forEach((nestedCommand) => {
58
+ cmd
59
+ .command(nestedCommand.name)
60
+ .description(nestedCommand.description)
61
+ .action((str, options) => executeCommand(`${commandConfig.name} ${nestedCommand.name}`, options));
62
+ });
63
+ }
64
+ });
65
+ };
66
+ const setupOptions = () => {
67
+ commander_1.program.option("-m, --meta <data...>", "Include arbitrary data in requests to the Ditto API. Ex: -m githubActionRequest:true trigger:manual");
68
+ commander_1.program.version(VERSION, "-v, --version", "Output the current version");
69
+ };
70
+ const executeCommand = async (command, options) => {
71
+ const needsInitialization = (0, init_1.needsTokenOrSource)();
72
+ if (needsInitialization) {
73
+ try {
74
+ await (0, init_1.init)();
75
+ }
76
+ catch (error) {
77
+ (0, quit_1.quit)("Exiting Ditto CLI...");
78
+ return;
79
+ }
80
+ }
81
+ const { meta } = commander_1.program.opts();
82
+ switch (command) {
83
+ case "none":
84
+ case "pull": {
85
+ return (0, pull_1.pull)({ meta: (0, processMetaOption_1.default)(meta) });
86
+ }
87
+ case "project":
88
+ case "project add": {
89
+ // initialization already includes the selection of a source,
90
+ // so if `project add` is called during initialization, don't
91
+ // prompt the user to select a source again
92
+ if (needsInitialization)
93
+ return;
94
+ return (0, add_project_1.default)();
95
+ }
96
+ case "project remove": {
97
+ return (0, remove_project_1.default)();
98
+ }
99
+ case "generate-suggestions": {
100
+ return (0, generate_suggestions_1.generateSuggestions)();
101
+ }
102
+ case "replace": {
103
+ return (0, replace_1.replace)(options);
104
+ }
105
+ default: {
106
+ (0, quit_1.quit)("Exiting Ditto CLI...");
107
+ return;
108
+ }
109
+ }
110
+ };
111
+ const main = async () => {
112
+ setupCommands();
113
+ setupOptions();
114
+ if (process.argv.length <= 2 && process.argv[1].includes("ditto-cli")) {
115
+ await executeCommand("none", []);
116
+ return;
117
+ }
118
+ commander_1.program.parse(process.argv);
119
+ };
120
+ main();
121
+ //# 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,71 @@
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.generateSuggestions = exports.findTextInJSXFiles = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const glob_1 = __importDefault(require("glob"));
9
+ const parser_1 = require("@babel/parser");
10
+ const traverse_1 = __importDefault(require("@babel/traverse"));
11
+ const fetchComponents_1 = require("./http/fetchComponents");
12
+ async function generateSuggestions() {
13
+ const components = await (0, fetchComponents_1.fetchComponents)();
14
+ const results = {};
15
+ for (const [compApiId, component] of Object.entries(components)) {
16
+ if (!results[compApiId]) {
17
+ results[compApiId] = [];
18
+ }
19
+ const result = await findTextInJSXFiles(".", component.text);
20
+ results[compApiId] = [...results[compApiId], ...result];
21
+ }
22
+ // Display results to user
23
+ console.log(JSON.stringify(results, null, 2));
24
+ }
25
+ exports.generateSuggestions = generateSuggestions;
26
+ async function findTextInJSXFiles(path, searchString) {
27
+ const result = [];
28
+ const files = glob_1.default.sync(`${path}/**/*.+(jsx|tsx)`, {
29
+ ignore: "**/node_modules/**",
30
+ });
31
+ const promises = [];
32
+ for (const file of files) {
33
+ promises.push(fs_extra_1.default.readFile(file, "utf-8").then((code) => {
34
+ const ast = (0, parser_1.parse)(code, {
35
+ sourceType: "module",
36
+ plugins: ["jsx", "typescript"],
37
+ });
38
+ const occurrences = [];
39
+ (0, traverse_1.default)(ast, {
40
+ JSXText(path) {
41
+ if (path.node.value.includes(searchString)) {
42
+ const regex = new RegExp(searchString, "g");
43
+ let match;
44
+ while ((match = regex.exec(path.node.value)) !== null) {
45
+ const lines = path.node.value.slice(0, match.index).split("\n");
46
+ if (!path.node.loc) {
47
+ continue;
48
+ }
49
+ const lineNumber = path.node.loc.start.line + lines.length - 1;
50
+ const codeLines = code.split("\n");
51
+ const line = codeLines[lineNumber - 1];
52
+ const preview = replaceAt(line, match.index, searchString, `{{${searchString}}}`);
53
+ occurrences.push({ lineNumber, preview });
54
+ }
55
+ }
56
+ },
57
+ });
58
+ if (occurrences.length > 0) {
59
+ result.push({ file, occurrences });
60
+ }
61
+ }));
62
+ }
63
+ await Promise.all(promises);
64
+ return result;
65
+ }
66
+ exports.findTextInJSXFiles = findTextInJSXFiles;
67
+ function replaceAt(str, index, searchString, replacement) {
68
+ return (str.substring(0, index) +
69
+ str.substring(index, str.length).replace(searchString, replacement));
70
+ }
71
+ //# sourceMappingURL=generate-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-suggestions.js","sourceRoot":"","sources":["../../lib/generate-suggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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.fetchComponents = void 0;
7
+ const api_1 = __importDefault(require("../api"));
8
+ async function fetchComponents() {
9
+ const { data } = await api_1.default.get("/components", {});
10
+ return data;
11
+ }
12
+ exports.fetchComponents = fetchComponents;
13
+ //# sourceMappingURL=fetchComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchComponents.js","sourceRoot":"","sources":["../../../lib/http/fetchComponents.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAyB;AAElB,KAAK,UAAU,eAAe;IACnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAG,CAAC,GAAG,CAO3B,aAAa,EAAE,EAAE,CAAC,CAAC;IAEtB,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,0CAWC"}
@@ -0,0 +1,26 @@
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.fetchVariants = void 0;
7
+ const api_1 = __importDefault(require("../api"));
8
+ async function fetchVariants(source, options = {}) {
9
+ if (!source.variants) {
10
+ return null;
11
+ }
12
+ const { shouldFetchComponentLibrary, validProjects } = source;
13
+ const config = {
14
+ params: { ...options?.meta },
15
+ };
16
+ // if we're not syncing from the component library, then we pass the project ids
17
+ // to limit the list of returned variants to only those that are relevant for the
18
+ // specified projects
19
+ if (validProjects.length && !shouldFetchComponentLibrary) {
20
+ config.params.projectIds = validProjects.map(({ id }) => id);
21
+ }
22
+ const { data } = await api_1.default.get("/variants", config);
23
+ return data;
24
+ }
25
+ exports.fetchVariants = fetchVariants;
26
+ //# sourceMappingURL=fetchVariants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchVariants.js","sourceRoot":"","sources":["../../../lib/http/fetchVariants.ts"],"names":[],"mappings":";;;;;;AACA,iDAAyB;AAIlB,KAAK,UAAU,aAAa,CACjC,MAAyB,EACzB,UAAuB,EAAE;IAEzB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,2BAA2B,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAE9D,MAAM,MAAM,GAAuB;QACjC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE;KAC7B,CAAC;IAEF,gFAAgF;IAChF,iFAAiF;IACjF,qBAAqB;IACrB,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,2BAA2B,EAAE;QACxD,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KAC9D;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAG,CAAC,GAAG,CAAsB,WAAW,EAAE,MAAM,CAAC,CAAC;IAEzE,OAAO,IAAI,CAAC;AACd,CAAC;AAxBD,sCAwBC"}