@hubspot/cli 7.7.1-experimental.0 → 7.7.2-experimental.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.
- package/commands/account/auth.js +51 -82
- package/commands/auth.js +2 -15
- package/commands/config/migrate.js +17 -36
- package/commands/init.js +1 -2
- package/commands/module/marketplace-validate.js +6 -8
- package/commands/module.js +2 -1
- package/commands/project/add.d.ts +5 -2
- package/commands/project/add.js +43 -80
- package/commands/project/create.d.ts +2 -8
- package/commands/project/create.js +84 -55
- package/commands/project/dev/unifiedFlow.js +1 -0
- package/commands/remove.js +6 -12
- package/commands/theme/generate-selectors.js +7 -10
- package/commands/theme/marketplace-validate.js +6 -8
- package/commands/theme/preview.js +17 -18
- package/commands/theme.js +2 -2
- package/commands/upload.js +26 -63
- package/commands/watch.js +20 -32
- package/lang/en.d.ts +140 -92
- package/lang/en.js +143 -98
- package/lang/en.lyaml +3 -186
- package/lib/configMigrate.d.ts +2 -2
- package/lib/configMigrate.js +34 -69
- package/lib/constants.d.ts +23 -5
- package/lib/constants.js +24 -6
- package/lib/generateSelectors.js +3 -5
- package/lib/marketplaceValidate.d.ts +12 -2
- package/lib/marketplaceValidate.js +22 -29
- package/lib/middleware/configMiddleware.js +1 -0
- package/lib/projects/add/legacyAddComponent.d.ts +5 -0
- package/lib/projects/add/legacyAddComponent.js +48 -0
- package/lib/projects/add/v3AddComponent.d.ts +8 -0
- package/lib/projects/add/v3AddComponent.js +85 -0
- package/lib/projects/components.d.ts +2 -0
- package/lib/projects/components.js +82 -0
- package/lib/projects/create/index.d.ts +23 -0
- package/lib/projects/create/index.js +33 -0
- package/lib/projects/create/legacy.d.ts +6 -0
- package/lib/projects/{create.js → create/legacy.js} +20 -11
- package/lib/projects/create/v3.d.ts +27 -0
- package/lib/projects/create/v3.js +158 -0
- package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -2
- package/lib/projects/localDev/AppDevModeInterface.js +38 -2
- package/lib/projects/localDev/LocalDevProcess.d.ts +12 -5
- package/lib/projects/localDev/LocalDevProcess.js +47 -17
- package/lib/projects/localDev/LocalDevState.d.ts +16 -3
- package/lib/projects/localDev/LocalDevState.js +43 -2
- package/lib/projects/localDev/LocalDevWatcher.js +3 -6
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.js +48 -9
- package/lib/prompts/createProjectPrompt.d.ts +14 -5
- package/lib/prompts/createProjectPrompt.js +36 -13
- package/lib/prompts/projectAddPrompt.d.ts +5 -1
- package/lib/prompts/projectAddPrompt.js +35 -7
- package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
- package/package.json +6 -5
- package/types/LocalDev.d.ts +11 -1
- package/types/Projects.d.ts +19 -2
- package/lib/projects/create.d.ts +0 -5
package/commands/upload.js
CHANGED
|
@@ -9,7 +9,6 @@ const uploadFolder_1 = require("@hubspot/local-dev-lib/cms/uploadFolder");
|
|
|
9
9
|
const fileMapper_1 = require("@hubspot/local-dev-lib/fileMapper");
|
|
10
10
|
const fileMapper_2 = require("@hubspot/local-dev-lib/api/fileMapper");
|
|
11
11
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
12
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
13
12
|
const modules_1 = require("@hubspot/local-dev-lib/cms/modules");
|
|
14
13
|
const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
|
|
15
14
|
const themes_1 = require("@hubspot/local-dev-lib/cms/themes");
|
|
@@ -21,18 +20,17 @@ const promptUtils_1 = require("../lib/prompts/promptUtils");
|
|
|
21
20
|
const validation_1 = require("../lib/validation");
|
|
22
21
|
const usageTracking_1 = require("../lib/usageTracking");
|
|
23
22
|
const upload_1 = require("../lib/upload");
|
|
24
|
-
const
|
|
23
|
+
const en_1 = require("../lang/en");
|
|
25
24
|
const exitCodes_1 = require("../lib/enums/exitCodes");
|
|
26
25
|
const yargsUtils_1 = require("../lib/yargsUtils");
|
|
26
|
+
const logger_1 = require("../lib/ui/logger");
|
|
27
27
|
const command = 'upload [src] [dest]';
|
|
28
|
-
const describe =
|
|
28
|
+
const describe = en_1.commands.upload.describe;
|
|
29
29
|
function logThemePreview(filePath, accountId) {
|
|
30
30
|
const previewUrl = (0, themes_1.getThemePreviewUrl)(filePath, accountId);
|
|
31
31
|
// Only log if we are actually in a theme
|
|
32
32
|
if (previewUrl) {
|
|
33
|
-
logger_1.
|
|
34
|
-
previewUrl,
|
|
35
|
-
}));
|
|
33
|
+
logger_1.uiLogger.log(en_1.commands.upload.previewUrl(previewUrl));
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
async function handler(args) {
|
|
@@ -47,7 +45,7 @@ async function handler(args) {
|
|
|
47
45
|
let dest = args.dest || uploadPromptAnswers.dest;
|
|
48
46
|
let absoluteSrcPath = path_1.default.resolve((0, path_2.getCwd)(), src);
|
|
49
47
|
if (!dest) {
|
|
50
|
-
logger_1.
|
|
48
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.destinationRequired);
|
|
51
49
|
return;
|
|
52
50
|
}
|
|
53
51
|
// Check for theme.json file and determine the root path for the project based on it if it exists
|
|
@@ -72,52 +70,37 @@ async function handler(args) {
|
|
|
72
70
|
try {
|
|
73
71
|
stats = fs_1.default.statSync(absoluteSrcPath);
|
|
74
72
|
if (!stats.isFile() && !stats.isDirectory()) {
|
|
75
|
-
logger_1.
|
|
76
|
-
path: src,
|
|
77
|
-
}));
|
|
73
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.invalidPath(src));
|
|
78
74
|
return;
|
|
79
75
|
}
|
|
80
76
|
}
|
|
81
77
|
catch (e) {
|
|
82
|
-
logger_1.
|
|
83
|
-
path: src,
|
|
84
|
-
}));
|
|
78
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.invalidPath(src));
|
|
85
79
|
return;
|
|
86
80
|
}
|
|
87
81
|
const normalizedDest = (0, path_2.convertToUnixPath)(dest);
|
|
88
82
|
(0, usageTracking_1.trackCommandUsage)('upload', { mode: cmsPublishMode, type: stats.isFile() ? 'file' : 'folder' }, derivedAccountId);
|
|
89
83
|
const srcDestIssues = await (0, modules_1.validateSrcAndDestPaths)({ isLocal: true, path: src }, { isHubSpot: true, path: dest });
|
|
90
84
|
if (srcDestIssues.length) {
|
|
91
|
-
srcDestIssues.forEach(({ message }) => logger_1.
|
|
85
|
+
srcDestIssues.forEach(({ message }) => logger_1.uiLogger.error(message));
|
|
92
86
|
process.exit(exitCodes_1.EXIT_CODES.WARNING);
|
|
93
87
|
}
|
|
94
88
|
if (stats.isFile()) {
|
|
95
89
|
if (!(0, path_2.isAllowedExtension)(src) && !convertFields) {
|
|
96
|
-
logger_1.
|
|
97
|
-
path: src,
|
|
98
|
-
}));
|
|
90
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.invalidPath(src));
|
|
99
91
|
return;
|
|
100
92
|
}
|
|
101
93
|
if ((0, ignoreRules_1.shouldIgnoreFile)(absoluteSrcPath)) {
|
|
102
|
-
logger_1.
|
|
103
|
-
path: src,
|
|
104
|
-
}));
|
|
94
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.fileIgnored(src));
|
|
105
95
|
return;
|
|
106
96
|
}
|
|
107
97
|
(0, fileMapper_2.upload)(derivedAccountId, absoluteSrcPath, normalizedDest, (0, fileMapper_1.getFileMapperQueryValues)(cmsPublishMode))
|
|
108
98
|
.then(() => {
|
|
109
|
-
logger_1.
|
|
110
|
-
accountId: derivedAccountId,
|
|
111
|
-
dest: normalizedDest,
|
|
112
|
-
src,
|
|
113
|
-
}));
|
|
99
|
+
logger_1.uiLogger.success(en_1.commands.upload.success.fileUploaded(src, normalizedDest, derivedAccountId));
|
|
114
100
|
logThemePreview(src, derivedAccountId);
|
|
115
101
|
})
|
|
116
102
|
.catch(error => {
|
|
117
|
-
logger_1.
|
|
118
|
-
dest: normalizedDest,
|
|
119
|
-
src,
|
|
120
|
-
}));
|
|
103
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.uploadFailed(src, normalizedDest));
|
|
121
104
|
(0, index_1.logError)(error, new index_1.ApiErrorContext({
|
|
122
105
|
accountId: derivedAccountId,
|
|
123
106
|
request: normalizedDest,
|
|
@@ -137,35 +120,22 @@ async function handler(args) {
|
|
|
137
120
|
});
|
|
138
121
|
}
|
|
139
122
|
else {
|
|
140
|
-
logger_1.
|
|
141
|
-
accountId: derivedAccountId,
|
|
142
|
-
dest,
|
|
143
|
-
src,
|
|
144
|
-
}));
|
|
123
|
+
logger_1.uiLogger.log(en_1.commands.upload.uploading(src, dest, derivedAccountId));
|
|
145
124
|
// Generate the first-pass file list in here, and pass to uploadFolder.
|
|
146
125
|
const filePaths = await (0, upload_1.getUploadableFileList)(absoluteSrcPath, args.convertFields ?? false);
|
|
147
126
|
if (args.clean) {
|
|
148
127
|
// If clean is true, will first delete the dest folder and then upload src. Cleans up files that only exist on HS.
|
|
149
128
|
let cleanUpload = args.force;
|
|
150
129
|
if (!args.force) {
|
|
151
|
-
cleanUpload = await (0, promptUtils_1.confirmPrompt)(
|
|
152
|
-
accountId: derivedAccountId,
|
|
153
|
-
path: dest,
|
|
154
|
-
}), { defaultAnswer: false });
|
|
130
|
+
cleanUpload = await (0, promptUtils_1.confirmPrompt)(en_1.commands.upload.confirmCleanUpload(dest, derivedAccountId), { defaultAnswer: false });
|
|
155
131
|
}
|
|
156
132
|
if (cleanUpload) {
|
|
157
133
|
try {
|
|
158
134
|
await (0, fileMapper_2.deleteFile)(derivedAccountId, dest);
|
|
159
|
-
logger_1.
|
|
160
|
-
accountId: derivedAccountId,
|
|
161
|
-
filePath: dest,
|
|
162
|
-
}));
|
|
135
|
+
logger_1.uiLogger.log(en_1.commands.upload.cleaning(dest, derivedAccountId));
|
|
163
136
|
}
|
|
164
137
|
catch (error) {
|
|
165
|
-
logger_1.
|
|
166
|
-
accountId: derivedAccountId,
|
|
167
|
-
path: dest,
|
|
168
|
-
}));
|
|
138
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.deleteFailed(dest, derivedAccountId));
|
|
169
139
|
}
|
|
170
140
|
}
|
|
171
141
|
}
|
|
@@ -177,23 +147,16 @@ async function handler(args) {
|
|
|
177
147
|
}, filePaths)
|
|
178
148
|
.then(results => {
|
|
179
149
|
if (!(0, uploadFolder_1.hasUploadErrors)(results)) {
|
|
180
|
-
logger_1.
|
|
181
|
-
dest,
|
|
182
|
-
}));
|
|
150
|
+
logger_1.uiLogger.success(en_1.commands.upload.success.uploadComplete(dest));
|
|
183
151
|
logThemePreview(src, derivedAccountId);
|
|
184
152
|
}
|
|
185
153
|
else {
|
|
186
|
-
logger_1.
|
|
187
|
-
dest,
|
|
188
|
-
}));
|
|
154
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.someFilesFailed(dest));
|
|
189
155
|
process.exit(exitCodes_1.EXIT_CODES.WARNING);
|
|
190
156
|
}
|
|
191
157
|
})
|
|
192
158
|
.catch(error => {
|
|
193
|
-
logger_1.
|
|
194
|
-
dest,
|
|
195
|
-
src,
|
|
196
|
-
}));
|
|
159
|
+
logger_1.uiLogger.error(en_1.commands.upload.errors.uploadFailed(src, dest));
|
|
197
160
|
(0, index_1.logError)(error, {
|
|
198
161
|
accountId: derivedAccountId,
|
|
199
162
|
});
|
|
@@ -203,36 +166,36 @@ async function handler(args) {
|
|
|
203
166
|
}
|
|
204
167
|
function uploadBuilder(yargs) {
|
|
205
168
|
yargs.positional('src', {
|
|
206
|
-
describe:
|
|
169
|
+
describe: en_1.commands.upload.positionals.src,
|
|
207
170
|
type: 'string',
|
|
208
171
|
});
|
|
209
172
|
yargs.positional('dest', {
|
|
210
|
-
describe:
|
|
173
|
+
describe: en_1.commands.upload.positionals.dest,
|
|
211
174
|
type: 'string',
|
|
212
175
|
});
|
|
213
176
|
yargs.option('fieldOptions', {
|
|
214
|
-
describe:
|
|
177
|
+
describe: en_1.commands.upload.options.options,
|
|
215
178
|
type: 'array',
|
|
216
179
|
default: [''],
|
|
217
180
|
hidden: true,
|
|
218
181
|
});
|
|
219
182
|
yargs.option('saveOutput', {
|
|
220
|
-
describe:
|
|
183
|
+
describe: en_1.commands.upload.options.saveOutput,
|
|
221
184
|
type: 'boolean',
|
|
222
185
|
default: false,
|
|
223
186
|
});
|
|
224
187
|
yargs.option('convertFields', {
|
|
225
|
-
describe:
|
|
188
|
+
describe: en_1.commands.upload.options.convertFields,
|
|
226
189
|
type: 'boolean',
|
|
227
190
|
default: false,
|
|
228
191
|
});
|
|
229
192
|
yargs.option('clean', {
|
|
230
|
-
describe:
|
|
193
|
+
describe: en_1.commands.upload.options.clean,
|
|
231
194
|
type: 'boolean',
|
|
232
195
|
default: false,
|
|
233
196
|
});
|
|
234
197
|
yargs.option('force', {
|
|
235
|
-
describe:
|
|
198
|
+
describe: en_1.commands.upload.options.force,
|
|
236
199
|
type: 'boolean',
|
|
237
200
|
default: false,
|
|
238
201
|
});
|
package/commands/watch.js
CHANGED
|
@@ -7,18 +7,18 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const watch_1 = require("@hubspot/local-dev-lib/cms/watch");
|
|
9
9
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
10
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
11
10
|
const commonOpts_1 = require("../lib/commonOpts");
|
|
12
11
|
const uploadPrompt_1 = require("../lib/prompts/uploadPrompt");
|
|
13
12
|
const validation_1 = require("../lib/validation");
|
|
14
13
|
const usageTracking_1 = require("../lib/usageTracking");
|
|
15
|
-
const
|
|
14
|
+
const en_1 = require("../lang/en");
|
|
16
15
|
const upload_1 = require("../lib/upload");
|
|
17
16
|
const errorHandlers_1 = require("../lib/errorHandlers");
|
|
18
17
|
const exitCodes_1 = require("../lib/enums/exitCodes");
|
|
19
18
|
const yargsUtils_1 = require("../lib/yargsUtils");
|
|
19
|
+
const logger_1 = require("../lib/ui/logger");
|
|
20
20
|
const command = 'watch [src] [dest]';
|
|
21
|
-
const describe =
|
|
21
|
+
const describe = en_1.commands.watch.describe;
|
|
22
22
|
const handler = async (args) => {
|
|
23
23
|
const { remove, initialUpload, disableInitial, notify, derivedAccountId } = args;
|
|
24
24
|
if (!(0, validation_1.validateCmsPublishMode)(args)) {
|
|
@@ -32,50 +32,38 @@ const handler = async (args) => {
|
|
|
32
32
|
try {
|
|
33
33
|
const stats = fs_1.default.statSync(absoluteSrcPath);
|
|
34
34
|
if (!stats.isDirectory()) {
|
|
35
|
-
logger_1.
|
|
36
|
-
path: src,
|
|
37
|
-
}));
|
|
35
|
+
logger_1.uiLogger.log(en_1.commands.watch.errors.invalidPath(src));
|
|
38
36
|
return;
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
catch (e) {
|
|
42
|
-
logger_1.
|
|
43
|
-
path: src,
|
|
44
|
-
}));
|
|
40
|
+
logger_1.uiLogger.log(en_1.commands.watch.errors.invalidPath(src));
|
|
45
41
|
return;
|
|
46
42
|
}
|
|
47
43
|
if (!dest) {
|
|
48
|
-
logger_1.
|
|
44
|
+
logger_1.uiLogger.log(en_1.commands.watch.errors.destinationRequired);
|
|
49
45
|
return;
|
|
50
46
|
}
|
|
51
47
|
let filesToUpload = [];
|
|
52
48
|
if (disableInitial) {
|
|
53
|
-
logger_1.
|
|
49
|
+
logger_1.uiLogger.info(en_1.commands.watch.warnings.disableInitial);
|
|
54
50
|
}
|
|
55
51
|
else if (!initialUpload) {
|
|
56
|
-
logger_1.
|
|
57
|
-
logger_1.
|
|
52
|
+
logger_1.uiLogger.info(en_1.commands.watch.warnings.notUploaded(src));
|
|
53
|
+
logger_1.uiLogger.info(en_1.commands.watch.warnings.initialUpload);
|
|
58
54
|
}
|
|
59
55
|
if (initialUpload) {
|
|
60
56
|
filesToUpload = await (0, upload_1.getUploadableFileList)(absoluteSrcPath, args.convertFields);
|
|
61
57
|
}
|
|
62
58
|
(0, usageTracking_1.trackCommandUsage)('watch', { mode: cmsPublishMode }, derivedAccountId);
|
|
63
59
|
const onUploadFolderError = (error) => {
|
|
64
|
-
logger_1.
|
|
65
|
-
src,
|
|
66
|
-
dest,
|
|
67
|
-
accountId: derivedAccountId,
|
|
68
|
-
}));
|
|
60
|
+
logger_1.uiLogger.error(en_1.commands.watch.errors.folderFailed(src, dest, derivedAccountId));
|
|
69
61
|
(0, errorHandlers_1.logError)(error, {
|
|
70
62
|
accountId: derivedAccountId,
|
|
71
63
|
});
|
|
72
64
|
};
|
|
73
65
|
const onUploadFileError = (file, destPath, accountId) => (error) => {
|
|
74
|
-
logger_1.
|
|
75
|
-
file,
|
|
76
|
-
dest: destPath,
|
|
77
|
-
accountId,
|
|
78
|
-
}));
|
|
66
|
+
logger_1.uiLogger.error(en_1.commands.watch.errors.fileFailed(file, destPath, accountId));
|
|
79
67
|
(0, errorHandlers_1.logError)(error, new errorHandlers_1.ApiErrorContext({
|
|
80
68
|
accountId,
|
|
81
69
|
request: destPath,
|
|
@@ -93,47 +81,47 @@ const handler = async (args) => {
|
|
|
93
81
|
};
|
|
94
82
|
function watchBuilder(yargs) {
|
|
95
83
|
yargs.positional('src', {
|
|
96
|
-
describe:
|
|
84
|
+
describe: en_1.commands.watch.positionals.src,
|
|
97
85
|
type: 'string',
|
|
98
86
|
});
|
|
99
87
|
yargs.positional('dest', {
|
|
100
|
-
describe:
|
|
88
|
+
describe: en_1.commands.watch.positionals.dest,
|
|
101
89
|
type: 'string',
|
|
102
90
|
});
|
|
103
91
|
yargs.option('fieldOptions', {
|
|
104
|
-
describe:
|
|
92
|
+
describe: en_1.commands.watch.options.options,
|
|
105
93
|
type: 'array',
|
|
106
94
|
default: [''],
|
|
107
95
|
hidden: true,
|
|
108
96
|
});
|
|
109
97
|
yargs.option('remove', {
|
|
110
98
|
alias: 'r',
|
|
111
|
-
describe:
|
|
99
|
+
describe: en_1.commands.watch.options.remove,
|
|
112
100
|
type: 'boolean',
|
|
113
101
|
});
|
|
114
102
|
yargs.option('initial-upload', {
|
|
115
103
|
alias: 'i',
|
|
116
|
-
describe:
|
|
104
|
+
describe: en_1.commands.watch.options.initialUpload,
|
|
117
105
|
type: 'boolean',
|
|
118
106
|
});
|
|
119
107
|
yargs.option('disable-initial', {
|
|
120
|
-
describe:
|
|
108
|
+
describe: en_1.commands.watch.options.disableInitial,
|
|
121
109
|
type: 'boolean',
|
|
122
110
|
hidden: true,
|
|
123
111
|
});
|
|
124
112
|
yargs.option('notify', {
|
|
125
113
|
alias: 'n',
|
|
126
|
-
describe:
|
|
114
|
+
describe: en_1.commands.watch.options.notify,
|
|
127
115
|
type: 'string',
|
|
128
116
|
requiresArg: true,
|
|
129
117
|
});
|
|
130
118
|
yargs.option('convertFields', {
|
|
131
|
-
describe:
|
|
119
|
+
describe: en_1.commands.watch.options.convertFields,
|
|
132
120
|
type: 'boolean',
|
|
133
121
|
default: false,
|
|
134
122
|
});
|
|
135
123
|
yargs.option('saveOutput', {
|
|
136
|
-
describe:
|
|
124
|
+
describe: en_1.commands.watch.options.saveOutput,
|
|
137
125
|
type: 'boolean',
|
|
138
126
|
default: false,
|
|
139
127
|
});
|