@hubspot/cli 7.5.0-beta.1 → 7.5.1-beta.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/bin/cli.js +96 -92
- package/commands/account/auth.js +51 -82
- package/commands/account.js +0 -2
- package/commands/app.js +0 -2
- package/commands/auth.js +2 -17
- package/commands/cms.js +0 -2
- package/commands/completion.js +0 -2
- package/commands/config/migrate.js +17 -36
- package/commands/config.js +0 -2
- package/commands/create.js +0 -2
- package/commands/customObject.js +0 -2
- package/commands/doctor.js +0 -2
- package/commands/feedback.js +0 -2
- package/commands/filemanager.js +0 -2
- package/commands/function.js +0 -2
- package/commands/hubdb.js +0 -2
- package/commands/init.js +1 -4
- package/commands/lint.js +0 -2
- package/commands/list.js +0 -2
- package/commands/module/marketplace-validate.js +6 -8
- package/commands/module.js +2 -1
- package/commands/mv.js +0 -2
- package/commands/open.js +0 -2
- package/commands/project/dev/deprecatedFlow.d.ts +8 -2
- package/commands/project/dev/deprecatedFlow.js +9 -1
- package/commands/project/dev/index.js +59 -34
- package/commands/project/dev/unifiedFlow.d.ts +10 -2
- package/commands/project/dev/unifiedFlow.js +27 -41
- package/commands/project.js +0 -2
- package/commands/remove.js +6 -14
- package/commands/sandbox.js +0 -2
- package/commands/secret.js +0 -2
- 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 -4
- package/commands/upload.js +26 -65
- package/commands/watch.js +20 -32
- package/lang/en.d.ts +105 -92
- package/lang/en.js +105 -95
- package/lang/en.lyaml +2 -185
- package/lib/accountTypes.js +1 -3
- package/lib/commonOpts.d.ts +1 -3
- package/lib/commonOpts.js +1 -1
- package/lib/configMigrate.d.ts +2 -2
- package/lib/configMigrate.js +34 -69
- package/lib/constants.d.ts +7 -5
- package/lib/constants.js +8 -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/middleware/fireAlarmMiddleware.d.ts +2 -2
- package/lib/middleware/fireAlarmMiddleware.js +5 -3
- package/lib/projects/localDev/AppDevModeInterface.js +0 -6
- package/lib/projects/localDev/LocalDevProcess.d.ts +6 -4
- package/lib/projects/localDev/LocalDevProcess.js +32 -17
- package/lib/projects/localDev/LocalDevState.d.ts +5 -1
- package/lib/projects/localDev/LocalDevState.js +15 -1
- package/lib/projects/localDev/LocalDevWatcher.js +3 -6
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +2 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.js +29 -9
- package/lib/projects/upload.js +6 -0
- package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
- package/package.json +7 -6
- package/types/LocalDev.d.ts +1 -1
- package/types/Yargs.d.ts +2 -0
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const fs_1 = __importDefault(require("fs"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
9
|
-
const
|
|
10
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
9
|
+
const en_1 = require("../../lang/en");
|
|
11
10
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
12
11
|
const files_1 = require("@hubspot/local-dev-lib/constants/files");
|
|
13
12
|
const themes_1 = require("@hubspot/local-dev-lib/cms/themes");
|
|
@@ -24,13 +23,12 @@ const Projects_1 = require("../../types/Projects");
|
|
|
24
23
|
const hasFeature_1 = require("../../lib/hasFeature");
|
|
25
24
|
const constants_1 = require("../../lib/constants");
|
|
26
25
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
26
|
+
const logger_1 = require("../../lib/ui/logger");
|
|
27
27
|
const command = 'preview [--src] [--dest]';
|
|
28
|
-
const describe =
|
|
28
|
+
const describe = en_1.commands.theme.subcommands.preview.describe;
|
|
29
29
|
function validateSrcPath(src) {
|
|
30
30
|
const logInvalidPath = () => {
|
|
31
|
-
logger_1.
|
|
32
|
-
path: src,
|
|
33
|
-
}));
|
|
31
|
+
logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.invalidPath(src));
|
|
34
32
|
};
|
|
35
33
|
try {
|
|
36
34
|
const stats = fs_1.default.statSync(src);
|
|
@@ -47,7 +45,7 @@ function validateSrcPath(src) {
|
|
|
47
45
|
}
|
|
48
46
|
function handleUserInput() {
|
|
49
47
|
const onTerminate = () => {
|
|
50
|
-
logger_1.
|
|
48
|
+
logger_1.uiLogger.log(en_1.commands.theme.subcommands.preview.logs.processExited);
|
|
51
49
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
52
50
|
};
|
|
53
51
|
(0, process_1.handleExit)(onTerminate);
|
|
@@ -78,7 +76,7 @@ async function determineSrcAndDest(args) {
|
|
|
78
76
|
const projectComponents = await (0, structure_1.findProjectComponents)(projectDir);
|
|
79
77
|
const themeComponents = projectComponents.filter(c => c.type === Projects_1.ComponentTypes.HublTheme);
|
|
80
78
|
if (themeComponents.length === 0) {
|
|
81
|
-
logger_1.
|
|
79
|
+
logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.noThemeComponents);
|
|
82
80
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
83
81
|
}
|
|
84
82
|
const answer = await (0, previewPrompt_1.previewProjectPrompt)(themeComponents);
|
|
@@ -102,7 +100,7 @@ async function handler(args) {
|
|
|
102
100
|
hideCursor: true,
|
|
103
101
|
}, cli_progress_1.default.Presets.rect);
|
|
104
102
|
initialUploadProgressBar.start(numFiles, 0, {
|
|
105
|
-
label:
|
|
103
|
+
label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar.start,
|
|
106
104
|
});
|
|
107
105
|
let uploadsHaveStarted = false;
|
|
108
106
|
const uploadOptions = {
|
|
@@ -114,7 +112,8 @@ async function handler(args) {
|
|
|
114
112
|
if (!uploadsHaveStarted) {
|
|
115
113
|
uploadsHaveStarted = true;
|
|
116
114
|
initialUploadProgressBar.update(0, {
|
|
117
|
-
label:
|
|
115
|
+
label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar
|
|
116
|
+
.uploading,
|
|
118
117
|
});
|
|
119
118
|
}
|
|
120
119
|
},
|
|
@@ -127,12 +126,12 @@ async function handler(args) {
|
|
|
127
126
|
onFinalErrorCallback: () => initialUploadProgressBar.increment(),
|
|
128
127
|
onFinishCallback: (results) => {
|
|
129
128
|
initialUploadProgressBar.update(numFiles, {
|
|
130
|
-
label:
|
|
129
|
+
label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar.finish,
|
|
131
130
|
});
|
|
132
131
|
initialUploadProgressBar.stop();
|
|
133
132
|
results.forEach(result => {
|
|
134
133
|
if (result.resultType == files_1.FILE_UPLOAD_RESULT_TYPES.FAILURE) {
|
|
135
|
-
logger_1.
|
|
134
|
+
logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.uploadFailed(result.file, dest));
|
|
136
135
|
(0, index_1.logError)(result.error, new index_1.ApiErrorContext({
|
|
137
136
|
accountId: derivedAccountId,
|
|
138
137
|
request: dest,
|
|
@@ -154,7 +153,7 @@ async function handler(args) {
|
|
|
154
153
|
createUnifiedDevServer = createDevServer;
|
|
155
154
|
}
|
|
156
155
|
catch (e) {
|
|
157
|
-
logger_1.
|
|
156
|
+
logger_1.uiLogger.warn('Unified dev server requires node 20 to run. Defaulting to legacy preview.');
|
|
158
157
|
}
|
|
159
158
|
const isUngatedForUnified = await (0, hasFeature_1.hasFeature)(derivedAccountId, constants_1.FEATURES.UNIFIED_THEME_PREVIEW);
|
|
160
159
|
if (isUngatedForUnified && createUnifiedDevServer) {
|
|
@@ -183,27 +182,27 @@ async function handler(args) {
|
|
|
183
182
|
function themePreviewBuilder(yargs) {
|
|
184
183
|
yargs
|
|
185
184
|
.option('src', {
|
|
186
|
-
describe:
|
|
185
|
+
describe: en_1.commands.theme.subcommands.preview.positionals.src,
|
|
187
186
|
type: 'string',
|
|
188
187
|
requiresArg: true,
|
|
189
188
|
})
|
|
190
189
|
.option('dest', {
|
|
191
|
-
describe:
|
|
190
|
+
describe: en_1.commands.theme.subcommands.preview.positionals.dest,
|
|
192
191
|
type: 'string',
|
|
193
192
|
requiresArg: true,
|
|
194
193
|
})
|
|
195
194
|
.option('notify', {
|
|
196
195
|
alias: 'n',
|
|
197
|
-
describe:
|
|
196
|
+
describe: en_1.commands.theme.subcommands.preview.options.notify,
|
|
198
197
|
type: 'string',
|
|
199
198
|
requiresArg: true,
|
|
200
199
|
})
|
|
201
200
|
.option('no-ssl', {
|
|
202
|
-
describe:
|
|
201
|
+
describe: en_1.commands.theme.subcommands.preview.options.noSsl,
|
|
203
202
|
type: 'boolean',
|
|
204
203
|
})
|
|
205
204
|
.option('port', {
|
|
206
|
-
describe:
|
|
205
|
+
describe: en_1.commands.theme.subcommands.preview.options.port,
|
|
207
206
|
type: 'number',
|
|
208
207
|
})
|
|
209
208
|
.option('resetSession', {
|
package/commands/theme.js
CHANGED
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const marketplace_validate_1 = __importDefault(require("./theme/marketplace-validate"));
|
|
7
7
|
const generate_selectors_1 = __importDefault(require("./theme/generate-selectors"));
|
|
8
8
|
const preview_1 = __importDefault(require("./theme/preview"));
|
|
9
|
-
const
|
|
9
|
+
const en_1 = require("../lang/en");
|
|
10
10
|
const yargsUtils_1 = require("../lib/yargsUtils");
|
|
11
11
|
const command = ['theme', 'themes'];
|
|
12
|
-
const describe =
|
|
12
|
+
const describe = en_1.commands.theme.describe;
|
|
13
13
|
function themeBuilder(yargs) {
|
|
14
14
|
yargs
|
|
15
15
|
.command(preview_1.default)
|
|
@@ -26,5 +26,3 @@ const themeCommand = {
|
|
|
26
26
|
handler: () => { },
|
|
27
27
|
};
|
|
28
28
|
exports.default = themeCommand;
|
|
29
|
-
// TODO Remove this legacy export once we've migrated all commands to TS
|
|
30
|
-
module.exports = themeCommand;
|
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
|
});
|
|
@@ -252,5 +215,3 @@ const uploadCommand = {
|
|
|
252
215
|
builder,
|
|
253
216
|
};
|
|
254
217
|
exports.default = uploadCommand;
|
|
255
|
-
// TODO remove this after cli.ts is ported to TS
|
|
256
|
-
module.exports = uploadCommand;
|
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
|
});
|