@dittowords/cli 3.10.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +125 -36
  2. package/bin/add-project.js +101 -33
  3. package/bin/add-project.js.map +1 -1
  4. package/bin/api.js +49 -15
  5. package/bin/api.js.map +1 -1
  6. package/bin/component-folders.js +56 -7
  7. package/bin/component-folders.js.map +1 -1
  8. package/bin/config.js +206 -170
  9. package/bin/config.js.map +1 -1
  10. package/bin/config.test.js +92 -0
  11. package/bin/config.test.js.map +1 -0
  12. package/bin/consts.js +64 -18
  13. package/bin/consts.js.map +1 -1
  14. package/bin/ditto.js +250 -200
  15. package/bin/ditto.js.map +1 -1
  16. package/bin/generate-suggestions.js +155 -78
  17. package/bin/generate-suggestions.js.map +1 -1
  18. package/bin/generate-suggestions.test.js +189 -0
  19. package/bin/generate-suggestions.test.js.map +1 -0
  20. package/bin/http/fetchComponentFolders.js +60 -8
  21. package/bin/http/fetchComponentFolders.js.map +1 -1
  22. package/bin/http/fetchComponents.js +65 -18
  23. package/bin/http/fetchComponents.js.map +1 -1
  24. package/bin/http/fetchVariants.js +74 -14
  25. package/bin/http/fetchVariants.js.map +1 -1
  26. package/bin/http/importComponents.js +100 -49
  27. package/bin/http/importComponents.js.map +1 -1
  28. package/bin/importComponents.js +61 -10
  29. package/bin/importComponents.js.map +1 -1
  30. package/bin/init/init.js +120 -44
  31. package/bin/init/init.js.map +1 -1
  32. package/bin/init/project.js +160 -83
  33. package/bin/init/project.js.map +1 -1
  34. package/bin/init/project.test.js +49 -0
  35. package/bin/init/project.test.js.map +1 -0
  36. package/bin/init/token.js +134 -74
  37. package/bin/init/token.js.map +1 -1
  38. package/bin/init/token.test.js +69 -0
  39. package/bin/init/token.test.js.map +1 -0
  40. package/bin/output.js +72 -30
  41. package/bin/output.js.map +1 -1
  42. package/bin/pull.js +424 -213
  43. package/bin/pull.js.map +1 -1
  44. package/bin/pull.test.js +410 -0
  45. package/bin/pull.test.js.map +1 -0
  46. package/bin/remove-project.js +91 -27
  47. package/bin/remove-project.js.map +1 -1
  48. package/bin/replace.js +140 -100
  49. package/bin/replace.js.map +1 -1
  50. package/bin/replace.test.js +155 -0
  51. package/bin/replace.test.js.map +1 -0
  52. package/bin/sentry-test.js.map +1 -0
  53. package/bin/types.js +20 -2
  54. package/bin/types.js.map +1 -1
  55. package/bin/utils/cleanFileName.js +32 -8
  56. package/bin/utils/cleanFileName.js.map +1 -1
  57. package/bin/utils/createSentryContext.js +43 -0
  58. package/bin/utils/createSentryContext.js.map +1 -0
  59. package/bin/utils/generateJsDriver.js +114 -51
  60. package/bin/utils/generateJsDriver.js.map +1 -1
  61. package/bin/utils/getSelectedProjects.js +58 -52
  62. package/bin/utils/getSelectedProjects.js.map +1 -1
  63. package/bin/utils/processMetaOption.js +36 -11
  64. package/bin/utils/processMetaOption.js.map +1 -1
  65. package/bin/utils/processMetaOption.test.js +45 -0
  66. package/bin/utils/processMetaOption.test.js.map +1 -0
  67. package/bin/utils/projectsToText.js +52 -19
  68. package/bin/utils/projectsToText.js.map +1 -1
  69. package/bin/utils/promptForProject.js +89 -36
  70. package/bin/utils/promptForProject.js.map +1 -1
  71. package/bin/utils/quit.js +36 -7
  72. package/bin/utils/quit.js.map +1 -1
  73. package/bin/utils/sourcesToText.js +51 -19
  74. package/bin/utils/sourcesToText.js.map +1 -1
  75. package/etsc.config.js +13 -0
  76. package/lib/config.ts +27 -8
  77. package/lib/ditto.ts +6 -0
  78. package/lib/init/project.ts +3 -3
  79. package/lib/pull.ts +190 -52
  80. package/lib/types.ts +24 -7
  81. package/lib/utils/createSentryContext.ts +20 -0
  82. package/lib/utils/generateJsDriver.ts +40 -6
  83. package/lib/utils/quit.ts +2 -3
  84. package/package.json +10 -6
  85. package/tsconfig.json +4 -1
  86. package/bin/lib/add-project.js +0 -36
  87. package/bin/lib/add-project.js.map +0 -1
  88. package/bin/lib/api.js +0 -20
  89. package/bin/lib/api.js.map +0 -1
  90. package/bin/lib/config.js +0 -202
  91. package/bin/lib/config.js.map +0 -1
  92. package/bin/lib/consts.js +0 -21
  93. package/bin/lib/consts.js.map +0 -1
  94. package/bin/lib/ditto.js +0 -121
  95. package/bin/lib/ditto.js.map +0 -1
  96. package/bin/lib/generate-suggestions.js +0 -71
  97. package/bin/lib/generate-suggestions.js.map +0 -1
  98. package/bin/lib/http/fetchComponents.js +0 -13
  99. package/bin/lib/http/fetchComponents.js.map +0 -1
  100. package/bin/lib/http/fetchVariants.js +0 -26
  101. package/bin/lib/http/fetchVariants.js.map +0 -1
  102. package/bin/lib/init/init.js +0 -50
  103. package/bin/lib/init/init.js.map +0 -1
  104. package/bin/lib/init/project.js +0 -108
  105. package/bin/lib/init/project.js.map +0 -1
  106. package/bin/lib/init/token.js +0 -91
  107. package/bin/lib/init/token.js.map +0 -1
  108. package/bin/lib/output.js +0 -34
  109. package/bin/lib/output.js.map +0 -1
  110. package/bin/lib/pull.js +0 -264
  111. package/bin/lib/pull.js.map +0 -1
  112. package/bin/lib/remove-project.js +0 -35
  113. package/bin/lib/remove-project.js.map +0 -1
  114. package/bin/lib/replace.js +0 -107
  115. package/bin/lib/replace.js.map +0 -1
  116. package/bin/lib/types.js +0 -3
  117. package/bin/lib/types.js.map +0 -1
  118. package/bin/lib/utils/cleanFileName.js +0 -11
  119. package/bin/lib/utils/cleanFileName.js.map +0 -1
  120. package/bin/lib/utils/generateJsDriver.js +0 -56
  121. package/bin/lib/utils/generateJsDriver.js.map +0 -1
  122. package/bin/lib/utils/getSelectedProjects.js +0 -61
  123. package/bin/lib/utils/getSelectedProjects.js.map +0 -1
  124. package/bin/lib/utils/processMetaOption.js +0 -15
  125. package/bin/lib/utils/processMetaOption.js.map +0 -1
  126. package/bin/lib/utils/projectsToText.js +0 -25
  127. package/bin/lib/utils/projectsToText.js.map +0 -1
  128. package/bin/lib/utils/promptForProject.js +0 -43
  129. package/bin/lib/utils/promptForProject.js.map +0 -1
  130. package/bin/lib/utils/quit.js +0 -10
  131. package/bin/lib/utils/quit.js.map +0 -1
  132. package/bin/lib/utils/sourcesToText.js +0 -25
  133. package/bin/lib/utils/sourcesToText.js.map +0 -1
  134. package/bin/package.json +0 -76
package/bin/config.js CHANGED
@@ -1,202 +1,238 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3f451b9b-6016-532a-b399-58b8b273e73c")}catch(e){}}();
3
+
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __defProps = Object.defineProperties;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
+ var __getProtoOf = Object.getPrototypeOf;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __spreadValues = (a, b) => {
16
+ for (var prop in b || (b = {}))
17
+ if (__hasOwnProp.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ if (__getOwnPropSymbols)
20
+ for (var prop of __getOwnPropSymbols(b)) {
21
+ if (__propIsEnum.call(b, prop))
22
+ __defNormalProp(a, prop, b[prop]);
23
+ }
24
+ return a;
25
+ };
26
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
27
+ var __export = (target, all) => {
28
+ for (var name in all)
29
+ __defProp(target, name, { get: all[name], enumerable: true });
30
+ };
31
+ var __copyProps = (to, from, except, desc) => {
32
+ if (from && typeof from === "object" || typeof from === "function") {
33
+ for (let key of __getOwnPropNames(from))
34
+ if (!__hasOwnProp.call(to, key) && key !== except)
35
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
36
+ }
37
+ return to;
4
38
  };
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",
39
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
40
+ // If the importer is in node compatibility mode or this is not an ESM
41
+ // file that has been converted to a CommonJS file using a Babel-
42
+ // compatible transform (i.e. "__esModule" has not been set), then set
43
+ // "default" to the CommonJS "module.exports" for node compatibility.
44
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
45
+ mod
46
+ ));
47
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
48
+ var config_exports = {};
49
+ __export(config_exports, {
50
+ DEFAULT_CONFIG: () => DEFAULT_CONFIG,
51
+ DEFAULT_CONFIG_JSON: () => DEFAULT_CONFIG_JSON,
52
+ default: () => config_default
53
+ });
54
+ module.exports = __toCommonJS(config_exports);
55
+ var import_fs = __toESM(require("fs"));
56
+ var import_path = __toESM(require("path"));
57
+ var import_url = __toESM(require("url"));
58
+ var import_js_yaml = __toESM(require("js-yaml"));
59
+ var Sentry = __toESM(require("@sentry/node"));
60
+ var import_consts = __toESM(require("./consts"));
61
+ var import_createSentryContext = require("./utils/createSentryContext");
62
+ const DEFAULT_CONFIG_JSON = {
63
+ sources: {
64
+ components: true
65
+ },
66
+ variants: true,
67
+ format: "flat"
18
68
  };
19
- exports.DEFAULT_CONFIG = js_yaml_1.default.dump(exports.DEFAULT_CONFIG_JSON);
69
+ const DEFAULT_CONFIG = import_js_yaml.default.dump(DEFAULT_CONFIG_JSON);
20
70
  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
- }
71
+ const dir = import_path.default.dirname(filename);
72
+ if (!import_fs.default.existsSync(dir))
73
+ import_fs.default.mkdirSync(dir);
74
+ if (!import_fs.default.existsSync(filename)) {
75
+ import_fs.default.writeFileSync(filename, defaultContents || "", "utf-8");
76
+ }
30
77
  }
31
78
  function jsonIsConfigYAML(json) {
32
- return typeof json === "object";
79
+ return typeof json === "object";
33
80
  }
34
81
  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"))));
82
+ return !!json && typeof json === "object" && Object.values(json).every(
83
+ (arr) => arr.every && arr.every(
84
+ (val) => typeof val === "object" && Object.keys(val).includes("token")
85
+ )
86
+ );
39
87
  }
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;
88
+ function readProjectConfigData(file = import_consts.default.PROJECT_CONFIG_FILE, defaultData = {}) {
89
+ createFileIfMissing(file, DEFAULT_CONFIG);
90
+ const fileContents = import_fs.default.readFileSync(file, "utf8");
91
+ const yamlData = import_js_yaml.default.load(fileContents);
92
+ if (jsonIsConfigYAML(yamlData)) {
93
+ return yamlData;
94
+ }
95
+ return defaultData;
54
96
  }
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;
97
+ function readGlobalConfigData(file = import_consts.default.CONFIG_FILE, defaultData = {}) {
98
+ createFileIfMissing(file);
99
+ const fileContents = import_fs.default.readFileSync(file, "utf8");
100
+ const yamlData = import_js_yaml.default.load(fileContents);
101
+ if (jsonIsGlobalYAML(yamlData)) {
102
+ return yamlData;
103
+ }
104
+ return defaultData;
69
105
  }
70
106
  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");
107
+ createFileIfMissing(file, DEFAULT_CONFIG);
108
+ const existingData = readProjectConfigData(file);
109
+ const configData = __spreadProps(__spreadValues(__spreadValues({}, existingData), data), {
110
+ sources: __spreadValues(__spreadValues({}, existingData.sources), data.sources)
111
+ });
112
+ const yamlStr = import_js_yaml.default.dump(configData);
113
+ import_fs.default.writeFileSync(file, yamlStr, "utf8");
83
114
  }
84
115
  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");
116
+ createFileIfMissing(file);
117
+ const existingData = readGlobalConfigData(file);
118
+ const yamlStr = import_js_yaml.default.dump(__spreadValues(__spreadValues({}, existingData), data));
119
+ import_fs.default.writeFileSync(file, yamlStr, "utf8");
89
120
  }
90
121
  function justTheHost(host) {
91
- if (!host.includes("://"))
92
- return host;
93
- return url_1.default.parse(host).hostname || "";
122
+ if (!host.includes("://"))
123
+ return host;
124
+ return import_url.default.parse(host).hostname || "";
94
125
  }
95
126
  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);
127
+ const data = readGlobalConfigData(file);
128
+ const hostParsed = justTheHost(host);
129
+ data[hostParsed] = [];
130
+ data[hostParsed][0] = { token: "" };
131
+ writeGlobalConfigData(file, data);
101
132
  }
102
133
  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);
134
+ const data = readGlobalConfigData(file);
135
+ const hostParsed = justTheHost(host);
136
+ data[hostParsed] = [];
137
+ data[hostParsed][0] = { token };
138
+ writeGlobalConfigData(file, data);
108
139
  }
109
140
  function getTokenFromEnv() {
110
- return process.env.DITTO_API_KEY;
141
+ return process.env.DITTO_API_KEY;
111
142
  }
112
- /**
113
- *
114
- * @param {string} file
115
- * @param {string} host
116
- * @returns {Token}
117
- */
118
143
  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;
144
+ const tokenFromEnv = getTokenFromEnv();
145
+ if (tokenFromEnv) {
146
+ return tokenFromEnv;
147
+ }
148
+ const data = readGlobalConfigData(file);
149
+ const hostEntry = data[justTheHost(host)];
150
+ if (!hostEntry)
151
+ return void 0;
152
+ const { length } = hostEntry;
153
+ return hostEntry[length - 1].token;
129
154
  }
130
155
  const IS_DUPLICATE = /-(\d+$)/;
131
156
  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
- }
157
+ let dedupedName = projectName;
158
+ if (projectNames.has(dedupedName)) {
159
+ while (projectNames.has(dedupedName)) {
160
+ const [_, numberStr] = dedupedName.match(IS_DUPLICATE) || [];
161
+ if (numberStr && !isNaN(parseInt(numberStr))) {
162
+ dedupedName = `${dedupedName.replace(IS_DUPLICATE, "")}-${parseInt(numberStr) + 1}`;
163
+ } else {
164
+ dedupedName = `${dedupedName}-1`;
165
+ }
143
166
  }
144
- return dedupedName;
167
+ }
168
+ return dedupedName;
145
169
  }
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
170
  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
- };
171
+ const {
172
+ sources,
173
+ variants,
174
+ format,
175
+ status,
176
+ richText,
177
+ projects: projectsRoot,
178
+ components: componentsRoot
179
+ } = readProjectConfigData(file);
180
+ const projects = (sources == null ? void 0 : sources.projects) || [];
181
+ const projectNames = /* @__PURE__ */ new Set();
182
+ const validProjects = [];
183
+ let hasComponentLibraryInProjects = false;
184
+ (projects || []).forEach((project) => {
185
+ const isValid = project.id && project.name;
186
+ if (!isValid) {
187
+ return;
188
+ }
189
+ if (project.id === "ditto_component_library") {
190
+ hasComponentLibraryInProjects = true;
191
+ return;
192
+ }
193
+ project.fileName = dedupeProjectName(projectNames, project.name);
194
+ projectNames.add(project.fileName);
195
+ validProjects.push(project);
196
+ });
197
+ const shouldFetchComponentLibrary = Boolean(sources == null ? void 0 : sources.components);
198
+ const componentRoot = typeof (sources == null ? void 0 : sources.components) === "object" ? sources.components.root : void 0;
199
+ const componentFolders = typeof (sources == null ? void 0 : sources.components) === "object" ? sources.components.folders : void 0;
200
+ const hasSourceData = !!validProjects.length || shouldFetchComponentLibrary;
201
+ const result = {
202
+ hasSourceData,
203
+ validProjects,
204
+ shouldFetchComponentLibrary,
205
+ variants: variants || false,
206
+ format,
207
+ status,
208
+ richText,
209
+ hasTopLevelProjectsField: !!projectsRoot,
210
+ hasTopLevelComponentsField: !!componentsRoot,
211
+ hasComponentLibraryInProjects,
212
+ componentRoot,
213
+ componentFolders
214
+ };
215
+ Sentry.setContext("config", (0, import_createSentryContext.createSentryContext)(result));
216
+ return result;
188
217
  }
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,
218
+ var config_default = {
219
+ createFileIfMissing,
220
+ readProjectConfigData,
221
+ readGlobalConfigData,
222
+ writeGlobalConfigData,
223
+ writeProjectConfigData,
224
+ justTheHost,
225
+ saveToken,
226
+ deleteToken,
227
+ getToken,
228
+ getTokenFromEnv,
229
+ parseSourceInformation
201
230
  };
202
- //# sourceMappingURL=config.js.map
231
+ // Annotate the CommonJS export names for ESM import in node:
232
+ 0 && (module.exports = {
233
+ DEFAULT_CONFIG,
234
+ DEFAULT_CONFIG_JSON
235
+ });
236
+ //# sourceMappingURL=config.js.map
237
+
238
+ //# debugId=3f451b9b-6016-532a-b399-58b8b273e73c
package/bin/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,8CAAsB;AACtB,sDAA2B;AAG3B,sDAA8B;AAGjB,QAAA,mBAAmB,GAAe;IAC7C,OAAO,EAAE;QACP,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC9B;IACD,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,MAAM;CACf,CAAC;AAEW,QAAA,cAAc,GAAG,iBAAI,CAAC,IAAI,CAAC,2BAAmB,CAAC,CAAC;AAE7D,SAAS,mBAAmB,CAAC,QAAgB,EAAE,eAAqB;IAClE,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,mDAAmD;IACnD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAE3C,8CAA8C;IAC9C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC5B,6DAA6D;QAC7D,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;KAC5D;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAa;IAEb,OAAO,CACL,CAAC,CAAC,IAAI;QACN,OAAO,IAAI,KAAK,QAAQ;QACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CACvB,CAAC,GAAG,EAAE,EAAE,CACL,GAAW,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,CACP,CAAC,GAAQ,EAAE,EAAE,CACX,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChE,CACJ,CACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,IAAI,GAAG,gBAAM,CAAC,mBAAmB,EACjC,WAAW,GAAG,EAAE;IAEhB,mBAAmB,CAAC,IAAI,EAAE,sBAAc,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,iBAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,QAAQ,CAAC;KACjB;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAC3B,IAAI,GAAG,gBAAM,CAAC,WAAW,EACzB,WAAW,GAAG,EAAE;IAEhB,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,YAAY,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,iBAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,QAAQ,CAAC;KACjB;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAyB;IACrE,mBAAmB,CAAC,IAAI,EAAE,sBAAc,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAe;QAC7B,GAAG,YAAY;QACf,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,YAAY,CAAC,OAAO;YACvB,GAAG,IAAI,CAAC,OAAO;SAChB;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAAY;IACvD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,iBAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACxD,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,aAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa;IAC1D,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,gCAAgC;IACvD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;IAChC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;IAC1C,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;IAED,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACrC,CAAC;AAED,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,SAAS,iBAAiB,CAAC,YAAyB,EAAE,WAAmB;IACvE,IAAI,WAAW,GAAG,WAAW,CAAC;IAE9B,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACjC,OAAO,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACpC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC7D,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE;gBAC5C,WAAW,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,IACpD,QAAQ,CAAC,SAAS,CAAC,GAAG,CACxB,EAAE,CAAC;aACJ;iBAAM;gBACL,WAAW,GAAG,GAAG,WAAW,IAAI,CAAC;aAClC;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,IAAa;IAC3C,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,cAAc,GAC3B,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;IAEzC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,aAAa,GAAc,EAAE,CAAC;IACpC,IAAI,6BAA6B,GAAG,KAAK,CAAC;IAE1C,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,IAAI,OAAO,CAAC,EAAE,KAAK,yBAAyB,EAAE;YAC5C,6BAA6B,GAAG,IAAI,CAAC;YACrC,OAAO;SACR;QAED,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACjE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,2BAA2B,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAE5E,OAAO;QACL,aAAa;QACb,aAAa;QACb,2BAA2B;QAC3B,QAAQ,EAAE,QAAQ,IAAI,KAAK;QAC3B,MAAM;QACN,MAAM;QACN,QAAQ;QACR,wBAAwB,EAAE,CAAC,CAAC,YAAY;QACxC,0BAA0B,EAAE,CAAC,CAAC,cAAc;QAC5C,6BAA6B;QAC7B,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,IAAI;KACvD,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,sBAAsB;IACtB,WAAW;IACX,SAAS;IACT,WAAW;IACX,QAAQ;IACR,eAAe;IACf,sBAAsB;CACvB,CAAC"}
1
+ {"version":3,"sources":["../lib/config.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport url from \"url\";\nimport yaml from \"js-yaml\";\nimport * as Sentry from \"@sentry/node\";\n\nimport consts from \"./consts\";\nimport { createSentryContext } from \"./utils/createSentryContext\";\nimport { Project, ConfigYAML, SourceInformation } from \"./types\";\n\nexport const DEFAULT_CONFIG_JSON: ConfigYAML = {\n sources: {\n components: true,\n },\n variants: true,\n format: \"flat\",\n};\n\nexport const DEFAULT_CONFIG = yaml.dump(DEFAULT_CONFIG_JSON);\n\nfunction createFileIfMissing(filename: string, defaultContents?: any) {\n const dir = path.dirname(filename);\n\n // create the directory if it doesn't already exist\n if (!fs.existsSync(dir)) fs.mkdirSync(dir);\n\n // create the file if it doesn't already exist\n if (!fs.existsSync(filename)) {\n // create the file, writing the `defaultContents` if provided\n fs.writeFileSync(filename, defaultContents || \"\", \"utf-8\");\n }\n}\n\nfunction jsonIsConfigYAML(json: unknown): json is ConfigYAML {\n return typeof json === \"object\";\n}\n\nfunction jsonIsGlobalYAML(\n json: unknown\n): json is Record<string, { token: string }[]> {\n return (\n !!json &&\n typeof json === \"object\" &&\n Object.values(json).every(\n (arr) =>\n (arr as any).every &&\n arr.every(\n (val: any) =>\n typeof val === \"object\" && Object.keys(val).includes(\"token\")\n )\n )\n );\n}\n\n/**\n * Read data from a project config file\n * @param {string} file defaults to `PROJECT_CONFIG_FILE` defined in `constants.js`\n * @param {*} defaultData defaults to `{}`\n * @returns { ConfigYAML }\n */\nfunction readProjectConfigData(\n file = consts.PROJECT_CONFIG_FILE,\n defaultData = {}\n): ConfigYAML {\n createFileIfMissing(file, DEFAULT_CONFIG);\n const fileContents = fs.readFileSync(file, \"utf8\");\n const yamlData = yaml.load(fileContents);\n if (jsonIsConfigYAML(yamlData)) {\n return yamlData;\n }\n return defaultData;\n}\n\n/**\n * Read data from a global config file\n * @param {string} file defaults to `CONFIG_FILE` defined in `constants.js`\n * @param {*} defaultData defaults to `{}`\n * @returns { Record<string, { token: string }[]> }\n */\nfunction readGlobalConfigData(\n file = consts.CONFIG_FILE,\n defaultData = {}\n): Record<string, { token: string }[]> {\n createFileIfMissing(file);\n const fileContents = fs.readFileSync(file, \"utf8\");\n const yamlData = yaml.load(fileContents);\n if (jsonIsGlobalYAML(yamlData)) {\n return yamlData;\n }\n return defaultData;\n}\n\nfunction writeProjectConfigData(file: string, data: Partial<ConfigYAML>) {\n createFileIfMissing(file, DEFAULT_CONFIG);\n const existingData = readProjectConfigData(file);\n\n const configData: ConfigYAML = {\n ...existingData,\n ...data,\n sources: {\n ...existingData.sources,\n ...data.sources,\n },\n };\n\n const yamlStr = yaml.dump(configData);\n fs.writeFileSync(file, yamlStr, \"utf8\");\n}\n\nfunction writeGlobalConfigData(file: string, data: object) {\n createFileIfMissing(file);\n const existingData = readGlobalConfigData(file);\n const yamlStr = yaml.dump({ ...existingData, ...data });\n fs.writeFileSync(file, yamlStr, \"utf8\");\n}\n\nfunction justTheHost(host: string) {\n if (!host.includes(\"://\")) return host;\n return url.parse(host).hostname || \"\";\n}\n\nfunction deleteToken(file: string, host: string) {\n const data = readGlobalConfigData(file);\n const hostParsed = justTheHost(host);\n data[hostParsed] = [];\n data[hostParsed][0] = { token: \"\" };\n writeGlobalConfigData(file, data);\n}\n\nfunction saveToken(file: string, host: string, token: string) {\n const data = readGlobalConfigData(file);\n const hostParsed = justTheHost(host);\n data[hostParsed] = []; // only allow one token per host\n data[hostParsed][0] = { token };\n writeGlobalConfigData(file, data);\n}\n\nfunction getTokenFromEnv() {\n return process.env.DITTO_API_KEY;\n}\n\n/**\n *\n * @param {string} file\n * @param {string} host\n * @returns {Token}\n */\nfunction getToken(file: string, host: string) {\n const tokenFromEnv = getTokenFromEnv();\n if (tokenFromEnv) {\n return tokenFromEnv;\n }\n\n const data = readGlobalConfigData(file);\n const hostEntry = data[justTheHost(host)];\n if (!hostEntry) return undefined;\n const { length } = hostEntry;\n\n return hostEntry[length - 1].token;\n}\n\nconst IS_DUPLICATE = /-(\\d+$)/;\n\nfunction dedupeProjectName(projectNames: Set<string>, projectName: string) {\n let dedupedName = projectName;\n\n if (projectNames.has(dedupedName)) {\n while (projectNames.has(dedupedName)) {\n const [_, numberStr] = dedupedName.match(IS_DUPLICATE) || [];\n if (numberStr && !isNaN(parseInt(numberStr))) {\n dedupedName = `${dedupedName.replace(IS_DUPLICATE, \"\")}-${\n parseInt(numberStr) + 1\n }`;\n } else {\n dedupedName = `${dedupedName}-1`;\n }\n }\n }\n\n return dedupedName;\n}\n\n/**\n * Reads from the config file, filters out\n * invalid projects, dedupes those remaining, and returns:\n * - whether or not the data required to `pull` is present\n * - whether or not the component library should be fetched\n * - an array of valid, deduped projects\n * - the `variants` and `format` config options\n */\nfunction parseSourceInformation(file?: string): SourceInformation {\n const {\n sources,\n variants,\n format,\n status,\n richText,\n projects: projectsRoot,\n components: componentsRoot,\n } = readProjectConfigData(file);\n\n const projects = sources?.projects || [];\n\n const projectNames = new Set<string>();\n const validProjects: Project[] = [];\n let hasComponentLibraryInProjects = false;\n\n (projects || []).forEach((project) => {\n const isValid = project.id && project.name;\n if (!isValid) {\n return;\n }\n\n if (project.id === \"ditto_component_library\") {\n hasComponentLibraryInProjects = true;\n return;\n }\n\n project.fileName = dedupeProjectName(projectNames, project.name);\n projectNames.add(project.fileName);\n\n validProjects.push(project);\n });\n\n const shouldFetchComponentLibrary = Boolean(sources?.components);\n const componentRoot =\n typeof sources?.components === \"object\"\n ? sources.components.root\n : undefined;\n const componentFolders =\n typeof sources?.components === \"object\"\n ? sources.components.folders\n : undefined;\n\n /**\n * If it's not specified to fetch projects or the component library, then there\n * is no source data to pull.\n */\n const hasSourceData = !!validProjects.length || shouldFetchComponentLibrary;\n\n const result = {\n hasSourceData,\n validProjects,\n shouldFetchComponentLibrary,\n variants: variants || false,\n format,\n status,\n richText,\n hasTopLevelProjectsField: !!projectsRoot,\n hasTopLevelComponentsField: !!componentsRoot,\n hasComponentLibraryInProjects,\n componentRoot,\n componentFolders,\n };\n\n Sentry.setContext(\"config\", createSentryContext(result));\n\n return result;\n}\n\nexport default {\n createFileIfMissing,\n readProjectConfigData,\n readGlobalConfigData,\n writeGlobalConfigData,\n writeProjectConfigData,\n justTheHost,\n saveToken,\n deleteToken,\n getToken,\n getTokenFromEnv,\n parseSourceInformation,\n};\n"],"names":["yaml","path","fs","consts","url"],"mappings":"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","debug_id":"3f451b9b-6016-532a-b399-58b8b273e73c"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="cbf596dd-bfcd-5042-ba69-a19133c93ca6")}catch(e){}}();
3
+
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
26
+ var import_fs = __toESM(require("fs"));
27
+ var import_path = __toESM(require("path"));
28
+ var import_js_yaml = __toESM(require("js-yaml"));
29
+ var import_config = __toESM(require("./config"));
30
+ const fakeHomedir = import_fs.default.mkdtempSync(import_path.default.join(__dirname, "../testing/tmp"));
31
+ describe("Config File", () => {
32
+ const expectedConfigDir = import_path.default.join(fakeHomedir, ".config");
33
+ beforeEach(() => {
34
+ if (!import_fs.default.existsSync(fakeHomedir))
35
+ import_fs.default.mkdirSync(fakeHomedir);
36
+ });
37
+ afterEach(() => {
38
+ import_fs.default.rmdirSync(fakeHomedir, { recursive: true });
39
+ });
40
+ describe("createFileIfMissing", () => {
41
+ const expectedConfigFile = import_path.default.join(expectedConfigDir, "ditto");
42
+ it("creates a config file if the config dir is missing", () => {
43
+ import_config.default.createFileIfMissing(expectedConfigFile);
44
+ expect(import_fs.default.existsSync(expectedConfigFile)).toBeTruthy();
45
+ });
46
+ it("creates a config file if it's missing", () => {
47
+ import_fs.default.mkdirSync(expectedConfigDir);
48
+ import_config.default.createFileIfMissing(expectedConfigFile);
49
+ expect(import_fs.default.existsSync(expectedConfigFile)).toBeTruthy();
50
+ });
51
+ it("does nothing if it already exists", () => {
52
+ import_fs.default.mkdirSync(expectedConfigDir);
53
+ import_fs.default.closeSync(import_fs.default.openSync(expectedConfigFile, "w"));
54
+ import_config.default.createFileIfMissing(expectedConfigFile);
55
+ expect(import_fs.default.existsSync(expectedConfigFile)).toBeTruthy();
56
+ });
57
+ });
58
+ });
59
+ describe("Tokens in config files", () => {
60
+ const configFile = import_path.default.join(fakeHomedir, "ditto");
61
+ beforeEach(() => {
62
+ import_config.default.createFileIfMissing(configFile);
63
+ import_config.default.saveToken(configFile, "testing.dittowords.com", "faketoken");
64
+ });
65
+ afterEach(() => {
66
+ import_fs.default.rmdirSync(fakeHomedir, { recursive: true });
67
+ });
68
+ describe("saveToken", () => {
69
+ it("creates a config file with config data", () => {
70
+ const fileContents = import_fs.default.readFileSync(configFile, "utf8");
71
+ const configData = import_js_yaml.default.load(fileContents);
72
+ if (configData && typeof configData === "object") {
73
+ expect(configData["testing.dittowords.com"]).toBeDefined();
74
+ expect(configData["testing.dittowords.com"][0].token).toEqual(
75
+ "faketoken"
76
+ );
77
+ } else {
78
+ fail("Config Data should have been an object!");
79
+ }
80
+ });
81
+ });
82
+ describe("getToken", () => {
83
+ it("can retrieve the saved token value", () => {
84
+ expect(import_config.default.getToken(configFile, "testing.dittowords.com")).toEqual(
85
+ "faketoken"
86
+ );
87
+ });
88
+ });
89
+ });
90
+ //# sourceMappingURL=config.test.js.map
91
+
92
+ //# debugId=cbf596dd-bfcd-5042-ba69-a19133c93ca6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/config.test.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport fs from \"fs\";\nimport path from \"path\";\nimport tempy from \"tempy\";\nimport yaml from \"js-yaml\";\nimport config from \"./config\";\n\nconst fakeHomedir = fs.mkdtempSync(path.join(__dirname, \"../testing/tmp\"));\n\ndescribe(\"Config File\", () => {\n const expectedConfigDir = path.join(fakeHomedir, \".config\");\n\n beforeEach(() => {\n if (!fs.existsSync(fakeHomedir)) fs.mkdirSync(fakeHomedir);\n });\n\n afterEach(() => {\n fs.rmdirSync(fakeHomedir, { recursive: true });\n });\n\n describe(\"createFileIfMissing\", () => {\n const expectedConfigFile = path.join(expectedConfigDir, \"ditto\");\n\n it(\"creates a config file if the config dir is missing\", () => {\n config.createFileIfMissing(expectedConfigFile);\n expect(fs.existsSync(expectedConfigFile)).toBeTruthy();\n });\n it(\"creates a config file if it's missing\", () => {\n fs.mkdirSync(expectedConfigDir);\n config.createFileIfMissing(expectedConfigFile);\n expect(fs.existsSync(expectedConfigFile)).toBeTruthy();\n });\n\n it(\"does nothing if it already exists\", () => {\n fs.mkdirSync(expectedConfigDir);\n fs.closeSync(fs.openSync(expectedConfigFile, \"w\"));\n config.createFileIfMissing(expectedConfigFile);\n expect(fs.existsSync(expectedConfigFile)).toBeTruthy();\n });\n });\n});\n\ndescribe(\"Tokens in config files\", () => {\n const configFile = path.join(fakeHomedir, \"ditto\");\n\n beforeEach(() => {\n config.createFileIfMissing(configFile);\n config.saveToken(configFile, \"testing.dittowords.com\", \"faketoken\");\n });\n\n afterEach(() => {\n fs.rmdirSync(fakeHomedir, { recursive: true });\n });\n\n describe(\"saveToken\", () => {\n it(\"creates a config file with config data\", () => {\n const fileContents = fs.readFileSync(configFile, \"utf8\");\n const configData = yaml.load(fileContents);\n if (configData && typeof configData === \"object\") {\n expect(configData[\"testing.dittowords.com\"]).toBeDefined();\n expect(configData[\"testing.dittowords.com\"][0].token).toEqual(\n \"faketoken\"\n );\n } else {\n fail(\"Config Data should have been an object!\");\n }\n });\n });\n\n describe(\"getToken\", () => {\n it(\"can retrieve the saved token value\", () => {\n expect(config.getToken(configFile, \"testing.dittowords.com\")).toEqual(\n \"faketoken\"\n );\n });\n });\n});\n"],"names":["fs","path","config","yaml"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,gBAAe;AACf,kBAAiB;AAEjB,qBAAiB;AACjB,oBAAmB;AAEnB,MAAM,cAAc,UAAAA,QAAG,YAAY,YAAAC,QAAK,KAAK,WAAW,gBAAgB,CAAC;AAEzE,SAAS,eAAe,MAAM;AAC5B,QAAM,oBAAoB,YAAAA,QAAK,KAAK,aAAa,SAAS;AAE1D,aAAW,MAAM;AACf,QAAI,CAAC,UAAAD,QAAG,WAAW,WAAW;AAAG,gBAAAA,QAAG,UAAU,WAAW;AAAA,EAC3D,CAAC;AAED,YAAU,MAAM;AACd,cAAAA,QAAG,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,EAC/C,CAAC;AAED,WAAS,uBAAuB,MAAM;AACpC,UAAM,qBAAqB,YAAAC,QAAK,KAAK,mBAAmB,OAAO;AAE/D,OAAG,sDAAsD,MAAM;AAC7D,oBAAAC,QAAO,oBAAoB,kBAAkB;AAC7C,aAAO,UAAAF,QAAG,WAAW,kBAAkB,CAAC,EAAE,WAAW;AAAA,IACvD,CAAC;AACD,OAAG,yCAAyC,MAAM;AAChD,gBAAAA,QAAG,UAAU,iBAAiB;AAC9B,oBAAAE,QAAO,oBAAoB,kBAAkB;AAC7C,aAAO,UAAAF,QAAG,WAAW,kBAAkB,CAAC,EAAE,WAAW;AAAA,IACvD,CAAC;AAED,OAAG,qCAAqC,MAAM;AAC5C,gBAAAA,QAAG,UAAU,iBAAiB;AAC9B,gBAAAA,QAAG,UAAU,UAAAA,QAAG,SAAS,oBAAoB,GAAG,CAAC;AACjD,oBAAAE,QAAO,oBAAoB,kBAAkB;AAC7C,aAAO,UAAAF,QAAG,WAAW,kBAAkB,CAAC,EAAE,WAAW;AAAA,IACvD,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,MAAM;AACvC,QAAM,aAAa,YAAAC,QAAK,KAAK,aAAa,OAAO;AAEjD,aAAW,MAAM;AACf,kBAAAC,QAAO,oBAAoB,UAAU;AACrC,kBAAAA,QAAO,UAAU,YAAY,0BAA0B,WAAW;AAAA,EACpE,CAAC;AAED,YAAU,MAAM;AACd,cAAAF,QAAG,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,EAC/C,CAAC;AAED,WAAS,aAAa,MAAM;AAC1B,OAAG,0CAA0C,MAAM;AACjD,YAAM,eAAe,UAAAA,QAAG,aAAa,YAAY,MAAM;AACvD,YAAM,aAAa,eAAAG,QAAK,KAAK,YAAY;AACzC,UAAI,cAAc,OAAO,eAAe,UAAU;AAChD,eAAO,WAAW,wBAAwB,CAAC,EAAE,YAAY;AACzD,eAAO,WAAW,wBAAwB,EAAE,CAAC,EAAE,KAAK,EAAE;AAAA,UACpD;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,yCAAyC;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,YAAY,MAAM;AACzB,OAAG,sCAAsC,MAAM;AAC7C,aAAO,cAAAD,QAAO,SAAS,YAAY,wBAAwB,CAAC,EAAE;AAAA,QAC5D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC","debug_id":"cbf596dd-bfcd-5042-ba69-a19133c93ca6"}
package/bin/consts.js CHANGED
@@ -1,21 +1,67 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2f4fc790-aa3c-5658-8839-9af5301ee3e0")}catch(e){}}();
3
+
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
4
13
  };
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,
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
20
21
  };
21
- //# sourceMappingURL=consts.js.map
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+ var consts_exports = {};
32
+ __export(consts_exports, {
33
+ API_HOST: () => API_HOST,
34
+ CONFIG_FILE: () => CONFIG_FILE,
35
+ PROJECT_CONFIG_FILE: () => PROJECT_CONFIG_FILE,
36
+ TEXT_DIR: () => TEXT_DIR,
37
+ TEXT_FILE: () => TEXT_FILE,
38
+ default: () => consts_default
39
+ });
40
+ module.exports = __toCommonJS(consts_exports);
41
+ var import_os = require("os");
42
+ var import_path = __toESM(require("path"));
43
+ const API_HOST = process.env.DITTO_API_HOST || "https://api.dittowords.com";
44
+ const CONFIG_FILE = process.env.DITTO_CONFIG_FILE || import_path.default.join((0, import_os.homedir)(), ".config", "ditto");
45
+ const PROJECT_CONFIG_FILE = import_path.default.normalize(
46
+ import_path.default.join("ditto", "config.yml")
47
+ );
48
+ const TEXT_DIR = process.env.DITTO_TEXT_DIR || "ditto";
49
+ const TEXT_FILE = import_path.default.normalize(import_path.default.join(TEXT_DIR, "text.json"));
50
+ var consts_default = {
51
+ API_HOST,
52
+ CONFIG_FILE,
53
+ PROJECT_CONFIG_FILE,
54
+ TEXT_DIR,
55
+ TEXT_FILE
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ API_HOST,
60
+ CONFIG_FILE,
61
+ PROJECT_CONFIG_FILE,
62
+ TEXT_DIR,
63
+ TEXT_FILE
64
+ });
65
+ //# sourceMappingURL=consts.js.map
66
+
67
+ //# debugId=2f4fc790-aa3c-5658-8839-9af5301ee3e0