@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
|
@@ -5,71 +5,75 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
7
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
10
8
|
const github_1 = require("@hubspot/local-dev-lib/github");
|
|
11
9
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
12
10
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
13
|
-
const createProjectPrompt_1 = require("../../lib/prompts/createProjectPrompt");
|
|
14
11
|
const config_1 = require("../../lib/projects/config");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
12
|
+
const legacy_1 = require("../../lib/projects/create/legacy");
|
|
13
|
+
const v3_1 = require("../../lib/projects/create/v3");
|
|
17
14
|
const ui_1 = require("../../lib/ui");
|
|
18
15
|
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
19
16
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
20
17
|
const constants_1 = require("../../lib/constants");
|
|
21
18
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
19
|
+
const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
|
|
20
|
+
const en_1 = require("../../lang/en");
|
|
21
|
+
const logger_1 = require("../../lib/ui/logger");
|
|
22
|
+
const v3_2 = require("../../lib/projects/create/v3");
|
|
23
|
+
const create_1 = require("../../lib/projects/create");
|
|
24
|
+
const command = ['create', 'init'];
|
|
25
|
+
const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.create.describe, false);
|
|
26
|
+
const { v2023_2, v2025_1, v2025_2 } = projects_1.PLATFORM_VERSIONS;
|
|
24
27
|
async function handler(args) {
|
|
25
|
-
const { derivedAccountId } = args;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!templateSource) {
|
|
29
|
-
templateSource = constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
|
|
30
|
-
try {
|
|
31
|
-
const releaseData = await (0, github_1.fetchReleaseData)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
|
|
32
|
-
if (releaseData) {
|
|
33
|
-
latestRepoReleaseTag = releaseData.tag_name;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToFetchProjectList`));
|
|
38
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (!templateSource || !templateSource.includes('/')) {
|
|
42
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.invalidTemplateSource`));
|
|
28
|
+
const { derivedAccountId, platformVersion, templateSource } = args;
|
|
29
|
+
if (templateSource && !templateSource.includes('/')) {
|
|
30
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.invalidTemplateSource);
|
|
43
31
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
44
32
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
const repo = templateSource || constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
|
|
34
|
+
let handleResult;
|
|
35
|
+
try {
|
|
36
|
+
handleResult = await (0, create_1.handleProjectCreationFlow)(args);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
(0, errorHandlers_1.logError)(error);
|
|
48
40
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
49
41
|
}
|
|
50
|
-
const
|
|
42
|
+
const { authType, distribution, repoConfig, projectContents, createProjectPromptResponse, } = handleResult;
|
|
43
|
+
(0, usageTracking_1.trackCommandUsage)('project-create', {
|
|
44
|
+
type: createProjectPromptResponse.projectTemplate?.name ||
|
|
45
|
+
(createProjectPromptResponse.componentTemplates || [])
|
|
46
|
+
// @ts-expect-error
|
|
47
|
+
.map((item) => item.label)
|
|
48
|
+
.join(','),
|
|
49
|
+
}, derivedAccountId);
|
|
51
50
|
const projectDest = path_1.default.resolve((0, path_2.getCwd)(), createProjectPromptResponse.dest);
|
|
52
|
-
(0, usageTracking_1.trackCommandUsage)('project-create', { type: createProjectPromptResponse.projectTemplate.name }, derivedAccountId);
|
|
53
51
|
const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await (0, config_1.getProjectConfig)(projectDest);
|
|
54
52
|
// Exit if the target destination is within an existing project
|
|
55
53
|
if (existingProjectConfig &&
|
|
56
54
|
existingProjectDir &&
|
|
57
55
|
projectDest.startsWith(existingProjectDir)) {
|
|
58
|
-
logger_1.
|
|
59
|
-
projectDir: existingProjectDir,
|
|
60
|
-
}));
|
|
56
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.cannotNestProjects(existingProjectDir));
|
|
61
57
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
62
58
|
}
|
|
59
|
+
const components = (0, v3_2.generateComponentPaths)({
|
|
60
|
+
createProjectPromptResponse,
|
|
61
|
+
platformVersion,
|
|
62
|
+
repoConfig,
|
|
63
|
+
projectContents,
|
|
64
|
+
authType,
|
|
65
|
+
distribution,
|
|
66
|
+
});
|
|
63
67
|
try {
|
|
64
|
-
await (0, github_1.cloneGithubRepo)(
|
|
65
|
-
sourceDir: createProjectPromptResponse.projectTemplate
|
|
66
|
-
tag: latestRepoReleaseTag,
|
|
68
|
+
await (0, github_1.cloneGithubRepo)(repo, projectDest, {
|
|
69
|
+
sourceDir: createProjectPromptResponse.projectTemplate?.path || components,
|
|
67
70
|
hideLogs: true,
|
|
71
|
+
branch: 'main',
|
|
68
72
|
});
|
|
69
73
|
}
|
|
70
74
|
catch (err) {
|
|
71
75
|
(0, errorHandlers_1.debugError)(err);
|
|
72
|
-
logger_1.
|
|
76
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.failedToDownloadProject);
|
|
73
77
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
74
78
|
}
|
|
75
79
|
const projectConfigPath = path_1.default.join(projectDest, constants_1.PROJECT_CONFIG_FILE);
|
|
@@ -79,17 +83,13 @@ async function handler(args) {
|
|
|
79
83
|
name: createProjectPromptResponse.name,
|
|
80
84
|
});
|
|
81
85
|
// If the template is 'no-template', we need to manually create a src directory
|
|
82
|
-
if (createProjectPromptResponse.projectTemplate
|
|
83
|
-
|
|
86
|
+
if (createProjectPromptResponse.projectTemplate?.name ===
|
|
87
|
+
legacy_1.EMPTY_PROJECT_TEMPLATE_NAME ||
|
|
88
|
+
projectContents === v3_1.EMPTY_PROJECT) {
|
|
84
89
|
fs_extra_1.default.ensureDirSync(path_1.default.join(projectDest, 'src'));
|
|
85
90
|
}
|
|
86
|
-
logger_1.
|
|
87
|
-
logger_1.
|
|
88
|
-
projectName: createProjectPromptResponse.name,
|
|
89
|
-
projectDest,
|
|
90
|
-
}));
|
|
91
|
-
logger_1.logger.log('');
|
|
92
|
-
logger_1.logger.log(chalk_1.default.bold((0, lang_1.i18n)(`commands.project.subcommands.create.logs.welcomeMessage`)));
|
|
91
|
+
logger_1.uiLogger.success(en_1.commands.project.create.logs.success(createProjectPromptResponse.name, projectDest));
|
|
92
|
+
logger_1.uiLogger.log(en_1.commands.project.create.logs.welcomeMessage);
|
|
93
93
|
(0, ui_1.uiFeatureHighlight)([
|
|
94
94
|
'projectCommandTip',
|
|
95
95
|
'projectUploadCommand',
|
|
@@ -104,32 +104,61 @@ async function handler(args) {
|
|
|
104
104
|
function projectCreateBuilder(yargs) {
|
|
105
105
|
yargs.options({
|
|
106
106
|
name: {
|
|
107
|
-
describe:
|
|
107
|
+
describe: en_1.commands.project.create.options.name.describe,
|
|
108
108
|
type: 'string',
|
|
109
109
|
},
|
|
110
110
|
dest: {
|
|
111
|
-
describe:
|
|
111
|
+
describe: en_1.commands.project.create.options.dest.describe,
|
|
112
112
|
type: 'string',
|
|
113
113
|
},
|
|
114
114
|
template: {
|
|
115
|
-
|
|
115
|
+
// TODO: When we release 2025.2 scaffolding, we need to point out this is only valid for 2025.1 prior
|
|
116
|
+
describe: en_1.commands.project.create.options.template.describe,
|
|
116
117
|
type: 'string',
|
|
117
118
|
},
|
|
118
119
|
'template-source': {
|
|
119
|
-
describe:
|
|
120
|
+
describe: en_1.commands.project.create.options.templateSource.describe,
|
|
121
|
+
type: 'string',
|
|
122
|
+
},
|
|
123
|
+
'platform-version': {
|
|
124
|
+
describe: en_1.commands.project.create.options.platformVersion.describe,
|
|
125
|
+
hidden: true,
|
|
120
126
|
type: 'string',
|
|
127
|
+
choices: [v2023_2, v2025_1, v2025_2],
|
|
128
|
+
default: v2023_2,
|
|
129
|
+
},
|
|
130
|
+
'project-base': {
|
|
131
|
+
describe: en_1.commands.project.create.options.projectBase.describe,
|
|
132
|
+
hidden: true,
|
|
133
|
+
type: 'string',
|
|
134
|
+
choices: [v3_1.EMPTY_PROJECT, v3_1.PROJECT_WITH_APP],
|
|
135
|
+
},
|
|
136
|
+
distribution: {
|
|
137
|
+
describe: en_1.commands.project.create.options.distribution.describe,
|
|
138
|
+
hidden: true,
|
|
139
|
+
type: 'string',
|
|
140
|
+
choices: [constants_1.privateDistribution, constants_1.marketplaceDistribution],
|
|
141
|
+
},
|
|
142
|
+
auth: {
|
|
143
|
+
describe: en_1.commands.project.create.options.auth.describe,
|
|
144
|
+
hidden: true,
|
|
145
|
+
type: 'string',
|
|
146
|
+
choices: [constants_1.oAuth, constants_1.staticAuth],
|
|
147
|
+
},
|
|
148
|
+
features: {
|
|
149
|
+
describe: en_1.commands.project.create.options.features.describe,
|
|
150
|
+
hidden: true,
|
|
151
|
+
type: 'array',
|
|
121
152
|
},
|
|
122
153
|
});
|
|
154
|
+
yargs.conflicts('template', 'features');
|
|
123
155
|
yargs.example([
|
|
124
|
-
[
|
|
125
|
-
'$0 project create',
|
|
126
|
-
(0, lang_1.i18n)(`commands.project.subcommands.create.examples.default`),
|
|
127
|
-
],
|
|
156
|
+
['$0 project create', en_1.commands.project.create.examples.default],
|
|
128
157
|
]);
|
|
129
158
|
yargs.example([
|
|
130
159
|
[
|
|
131
160
|
'$0 project create --template-source HubSpot/ui-extensions-examples',
|
|
132
|
-
|
|
161
|
+
en_1.commands.project.create.examples.templateSource,
|
|
133
162
|
],
|
|
134
163
|
]);
|
|
135
164
|
return yargs;
|
package/commands/remove.js
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const fileMapper_1 = require("@hubspot/local-dev-lib/api/fileMapper");
|
|
4
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
5
4
|
const index_1 = require("../lib/errorHandlers/index");
|
|
6
5
|
const usageTracking_1 = require("../lib/usageTracking");
|
|
7
|
-
const
|
|
6
|
+
const en_1 = require("../lang/en");
|
|
8
7
|
const yargsUtils_1 = require("../lib/yargsUtils");
|
|
8
|
+
const logger_1 = require("../lib/ui/logger");
|
|
9
9
|
const command = 'remove <path>';
|
|
10
|
-
const describe =
|
|
10
|
+
const describe = en_1.commands.remove.describe;
|
|
11
11
|
async function handler(args) {
|
|
12
12
|
const { path: hsPath, derivedAccountId } = args;
|
|
13
13
|
(0, usageTracking_1.trackCommandUsage)('remove', undefined, derivedAccountId);
|
|
14
14
|
try {
|
|
15
15
|
await (0, fileMapper_1.deleteFile)(derivedAccountId, hsPath);
|
|
16
|
-
logger_1.
|
|
17
|
-
accountId: derivedAccountId,
|
|
18
|
-
path: hsPath,
|
|
19
|
-
}));
|
|
16
|
+
logger_1.uiLogger.log(en_1.commands.remove.deleted(hsPath, derivedAccountId));
|
|
20
17
|
}
|
|
21
18
|
catch (error) {
|
|
22
|
-
logger_1.
|
|
23
|
-
accountId: derivedAccountId,
|
|
24
|
-
path: hsPath,
|
|
25
|
-
}));
|
|
19
|
+
logger_1.uiLogger.error(en_1.commands.remove.errors.deleteFailed(hsPath, derivedAccountId));
|
|
26
20
|
(0, index_1.logError)(error, new index_1.ApiErrorContext({
|
|
27
21
|
accountId: derivedAccountId,
|
|
28
22
|
request: hsPath,
|
|
@@ -31,7 +25,7 @@ async function handler(args) {
|
|
|
31
25
|
}
|
|
32
26
|
function cmsRemoveBuilder(yargs) {
|
|
33
27
|
yargs.positional('path', {
|
|
34
|
-
describe:
|
|
28
|
+
describe: en_1.commands.remove.positionals.path,
|
|
35
29
|
type: 'string',
|
|
36
30
|
});
|
|
37
31
|
return yargs;
|
|
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const fs_1 = __importDefault(require("fs"));
|
|
7
|
-
const
|
|
8
|
-
const lang_1 = require("../../lib/lang");
|
|
7
|
+
const en_1 = require("../../lang/en");
|
|
9
8
|
const generateSelectors_1 = require("../../lib/generateSelectors");
|
|
10
9
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
11
10
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
11
|
+
const logger_1 = require("../../lib/ui/logger");
|
|
12
12
|
const HUBL_EXPRESSION_REGEX = new RegExp(/{%\s*(.*)\s*%}/, 'g');
|
|
13
13
|
const HUBL_VARIABLE_NAME_REGEX = new RegExp(/{%\s*set\s*(\w*)/, 'i');
|
|
14
14
|
const HUBL_STATEMENT_REGEX = new RegExp(/{{\s*[\w.(,\d\-\s)|/~]*.*}}/, 'g');
|
|
@@ -19,12 +19,12 @@ const CSS_SELECTORS_REGEX = new RegExp(/([\s\w:.,\0-[\]]*){/, 'i');
|
|
|
19
19
|
const CSS_EXPRESSION_REGEX = new RegExp(/(?!\s)([^}])*(?![.#\s,>])[^}]*}/, 'g');
|
|
20
20
|
const THEME_PATH_REGEX = new RegExp(/=\s*.*(theme\.(\w|\.)*)/, 'i');
|
|
21
21
|
const command = 'generate-selectors <path>';
|
|
22
|
-
const describe =
|
|
22
|
+
const describe = en_1.commands.theme.subcommands.generateSelectors.describe;
|
|
23
23
|
async function handler(args) {
|
|
24
24
|
const { path } = args;
|
|
25
25
|
const fieldsJsonPath = (0, generateSelectors_1.findFieldsJsonPath)(path);
|
|
26
26
|
if (!fieldsJsonPath) {
|
|
27
|
-
logger_1.
|
|
27
|
+
logger_1.uiLogger.error(en_1.commands.theme.subcommands.generateSelectors.errors.fieldsNotFound);
|
|
28
28
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
29
29
|
}
|
|
30
30
|
let fieldsJson = JSON.parse(fs_1.default.readFileSync(fieldsJsonPath, 'utf-8'));
|
|
@@ -134,7 +134,7 @@ async function handler(args) {
|
|
|
134
134
|
return themeFieldsSelectorMap;
|
|
135
135
|
}, {});
|
|
136
136
|
if (!Object.keys(finalMap).length) {
|
|
137
|
-
logger_1.
|
|
137
|
+
logger_1.uiLogger.error(en_1.commands.theme.subcommands.generateSelectors.errors.noSelectorsFound);
|
|
138
138
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
139
139
|
}
|
|
140
140
|
Object.keys(finalMap).forEach(themeFieldKey => {
|
|
@@ -151,14 +151,11 @@ async function handler(args) {
|
|
|
151
151
|
const selectorsMap = (0, generateSelectors_1.generateSelectorsMap)(fieldsJson);
|
|
152
152
|
const selectorsPath = `${path}/editor-preview.json`;
|
|
153
153
|
fs_1.default.writeFileSync(selectorsPath, `${JSON.stringify({ selectors: selectorsMap }, null, 2)}\n`);
|
|
154
|
-
logger_1.
|
|
155
|
-
themePath: path,
|
|
156
|
-
selectorsPath,
|
|
157
|
-
}));
|
|
154
|
+
logger_1.uiLogger.success(en_1.commands.theme.subcommands.generateSelectors.success(path, selectorsPath));
|
|
158
155
|
}
|
|
159
156
|
function themeSelectorBuilder(yargs) {
|
|
160
157
|
yargs.positional('path', {
|
|
161
|
-
describe:
|
|
158
|
+
describe: en_1.commands.theme.subcommands.generateSelectors.positionals.path,
|
|
162
159
|
type: 'string',
|
|
163
160
|
required: true,
|
|
164
161
|
});
|
|
@@ -6,31 +6,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
|
|
7
7
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
8
8
|
const marketplaceValidate_1 = require("../../lib/marketplaceValidate");
|
|
9
|
-
const
|
|
9
|
+
const en_1 = require("../../lang/en");
|
|
10
10
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
11
11
|
const command = 'marketplace-validate <path>';
|
|
12
|
-
const describe =
|
|
12
|
+
const describe = en_1.commands.theme.subcommands.marketplaceValidate.describe;
|
|
13
13
|
async function handler(args) {
|
|
14
14
|
const { path, derivedAccountId } = args;
|
|
15
15
|
(0, usageTracking_1.trackCommandUsage)('validate', {}, derivedAccountId);
|
|
16
16
|
SpinniesManager_1.default.init();
|
|
17
17
|
SpinniesManager_1.default.add('marketplaceValidation', {
|
|
18
|
-
text:
|
|
19
|
-
path,
|
|
20
|
-
}),
|
|
18
|
+
text: en_1.commands.theme.subcommands.marketplaceValidate.logs.validatingTheme(path),
|
|
21
19
|
});
|
|
22
20
|
const assetType = 'THEME';
|
|
23
21
|
const validationId = await (0, marketplaceValidate_1.kickOffValidation)(derivedAccountId, assetType, path);
|
|
24
22
|
await (0, marketplaceValidate_1.pollForValidationFinish)(derivedAccountId, validationId);
|
|
25
23
|
SpinniesManager_1.default.remove('marketplaceValidation');
|
|
26
24
|
const validationResults = await (0, marketplaceValidate_1.fetchValidationResults)(derivedAccountId, validationId);
|
|
27
|
-
(0, marketplaceValidate_1.processValidationErrors)(
|
|
28
|
-
(0, marketplaceValidate_1.displayValidationResults)(
|
|
25
|
+
(0, marketplaceValidate_1.processValidationErrors)(en_1.commands.theme.subcommands.marketplaceValidate.errors.invalidPath, validationResults);
|
|
26
|
+
(0, marketplaceValidate_1.displayValidationResults)(en_1.commands.theme.subcommands.marketplaceValidate.results, validationResults);
|
|
29
27
|
process.exit();
|
|
30
28
|
}
|
|
31
29
|
function themeValidateBuilder(yargs) {
|
|
32
30
|
yargs.positional('path', {
|
|
33
|
-
describe:
|
|
31
|
+
describe: en_1.commands.theme.subcommands.marketplaceValidate.positionals.path.describe,
|
|
34
32
|
type: 'string',
|
|
35
33
|
required: true,
|
|
36
34
|
});
|
|
@@ -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)
|