@hubspot/cli 8.0.2-experimental.0 → 8.0.3-experimental.1

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 (62) hide show
  1. package/commands/__tests__/getStarted.test.js +2 -2
  2. package/commands/__tests__/project.test.js +30 -0
  3. package/commands/account/auth.js +8 -97
  4. package/commands/account/use.js +19 -4
  5. package/commands/cms/module/marketplace-validate.js +23 -5
  6. package/commands/cms/theme/marketplace-validate.js +25 -6
  7. package/commands/mcp/setup.js +1 -2
  8. package/commands/mcp.js +1 -2
  9. package/commands/project.js +22 -1
  10. package/lang/en.d.ts +30 -1
  11. package/lang/en.js +34 -5
  12. package/lib/__tests__/accountAuth.test.d.ts +1 -0
  13. package/lib/__tests__/accountAuth.test.js +258 -0
  14. package/lib/accountAuth.d.ts +10 -0
  15. package/lib/accountAuth.js +105 -0
  16. package/lib/app/urls.d.ts +1 -0
  17. package/lib/app/urls.js +4 -0
  18. package/lib/errors/ProjectErrors.d.ts +15 -0
  19. package/lib/errors/ProjectErrors.js +30 -0
  20. package/lib/getStarted/getStartedV2.js +3 -41
  21. package/lib/getStartedV2Actions.d.ts +29 -0
  22. package/lib/getStartedV2Actions.js +104 -9
  23. package/lib/marketplaceValidate.d.ts +1 -1
  24. package/lib/marketplaceValidate.js +23 -41
  25. package/lib/projects/ProjectLogsManager.d.ts +12 -3
  26. package/lib/projects/ProjectLogsManager.js +70 -12
  27. package/lib/projects/__tests__/ProjectLogsManager.test.js +131 -18
  28. package/lib/projects/__tests__/platformVersion.test.js +37 -1
  29. package/lib/projects/__tests__/projects.test.js +6 -2
  30. package/lib/projects/__tests__/upload.test.js +10 -0
  31. package/lib/projects/__tests__/workspaceArchive.test.d.ts +1 -0
  32. package/lib/projects/__tests__/workspaceArchive.test.js +207 -0
  33. package/lib/projects/components.d.ts +6 -0
  34. package/lib/projects/components.js +1 -1
  35. package/lib/projects/config.js +9 -2
  36. package/lib/projects/localDev/helpers/project.d.ts +4 -1
  37. package/lib/projects/localDev/helpers/project.js +13 -8
  38. package/lib/projects/platformVersion.d.ts +8 -0
  39. package/lib/projects/platformVersion.js +31 -2
  40. package/lib/projects/upload.js +9 -0
  41. package/lib/projects/workspaces.d.ts +36 -0
  42. package/lib/projects/workspaces.js +224 -0
  43. package/lib/prompts/accountsPrompt.d.ts +2 -1
  44. package/lib/prompts/accountsPrompt.js +10 -2
  45. package/package.json +3 -3
  46. package/ui/components/ActionSection.d.ts +1 -1
  47. package/ui/components/BoxWithTitle.js +1 -1
  48. package/ui/components/getStarted/GetStartedFlow.d.ts +8 -0
  49. package/ui/components/getStarted/GetStartedFlow.js +136 -0
  50. package/ui/components/getStarted/reducer.d.ts +59 -0
  51. package/ui/components/getStarted/reducer.js +72 -0
  52. package/ui/components/getStarted/screens/ProjectSetupScreen.d.ts +16 -0
  53. package/ui/components/getStarted/screens/ProjectSetupScreen.js +39 -0
  54. package/ui/components/getStarted/screens/UploadScreen.d.ts +7 -0
  55. package/ui/components/getStarted/screens/UploadScreen.js +43 -0
  56. package/ui/components/getStarted/selectors.d.ts +2 -0
  57. package/ui/components/getStarted/selectors.js +1 -0
  58. package/ui/lib/constants.d.ts +16 -0
  59. package/ui/lib/constants.js +16 -0
  60. package/ui/render.js +6 -0
  61. package/ui/components/GetStartedFlow.d.ts +0 -24
  62. package/ui/components/GetStartedFlow.js +0 -128
@@ -1,128 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { sanitizeFileName, untildify } from '@hubspot/local-dev-lib/path';
3
- import { Box, Text, useApp, useFocus, useInput } from 'ink';
4
- import { useCallback, useEffect, useState } from 'react';
5
- import { commands } from '../../lang/en.js';
6
- import { GET_STARTED_OPTIONS } from '../../lib/constants.js';
7
- import { uiAccountDescription } from '../../lib/ui/index.js';
8
- import { ActionSection } from '../components/ActionSection.js';
9
- import { BoxWithTitle } from '../components/BoxWithTitle.js';
10
- import { InputField } from '../components/InputField.js';
11
- import { SelectInput } from '../components/SelectInput.js';
12
- import { ACTION_STATUSES } from '../constants.js';
13
- import { INK_COLORS } from '../styles.js';
14
- export const DEFAULT_PROJECT_NAME = 'get-started-project';
15
- export const GET_STARTED_FLOW_OPTIONS = [
16
- {
17
- label: commands.getStarted.prompts.options.app,
18
- value: GET_STARTED_OPTIONS.APP,
19
- },
20
- {
21
- label: commands.getStarted.prompts.options.cmsTheme,
22
- value: 'CMS_THEME',
23
- disabled: true,
24
- },
25
- {
26
- label: commands.getStarted.prompts.options.cmsReactModule,
27
- value: 'CMS_REACT_MODULE',
28
- disabled: true,
29
- },
30
- ];
31
- export const FLOW_STEPS = {
32
- SELECT: 'select',
33
- NAME_INPUT: 'name-input',
34
- DEST_INPUT: 'dest-input',
35
- CREATING: 'creating',
36
- COMPLETE: 'complete',
37
- };
38
- export function getGetStartedFlow(props) {
39
- return _jsx(GetStartedFlow, { ...props });
40
- }
41
- export function GetStartedFlow({ derivedAccountId, onRunCreateProject, initialName, initialDest, }) {
42
- useFocus({ autoFocus: true });
43
- const { exit } = useApp();
44
- const accountName = uiAccountDescription(derivedAccountId);
45
- // Determine initial step based on what was provided via CLI
46
- const getInitialStep = () => {
47
- if (initialName && initialDest) {
48
- return FLOW_STEPS.CREATING;
49
- }
50
- else if (initialName) {
51
- return FLOW_STEPS.DEST_INPUT;
52
- }
53
- else if (initialDest) {
54
- return FLOW_STEPS.NAME_INPUT;
55
- }
56
- return FLOW_STEPS.SELECT;
57
- };
58
- const hasInitialValues = Boolean(initialName && initialDest);
59
- const [step, setStep] = useState(getInitialStep());
60
- const [selectedLabel, setSelectedLabel] = useState(initialName ? commands.getStarted.prompts.options.app : '');
61
- const [projectName, setProjectName] = useState(initialName || DEFAULT_PROJECT_NAME);
62
- const [projectDest, setProjectDest] = useState(initialDest
63
- ? untildify(initialDest)
64
- : sanitizeFileName(DEFAULT_PROJECT_NAME));
65
- const [createStatus, setCreateStatus] = useState(initialName ? ACTION_STATUSES.RUNNING : ACTION_STATUSES.IDLE);
66
- const [createError, setCreateError] = useState('');
67
- // Only auto-update dest from name if dest wasn't provided via CLI
68
- useEffect(() => {
69
- if (!initialDest) {
70
- setProjectDest(sanitizeFileName(projectName));
71
- }
72
- }, [projectName, initialDest]);
73
- const handleSelect = useCallback((item) => {
74
- if (item.disabled)
75
- return;
76
- setSelectedLabel(item.label);
77
- setStep(FLOW_STEPS.NAME_INPUT);
78
- setCreateStatus(ACTION_STATUSES.RUNNING);
79
- }, []);
80
- const handleNameSubmit = useCallback(() => {
81
- setStep(FLOW_STEPS.DEST_INPUT);
82
- }, []);
83
- const handleDestChange = useCallback((value) => {
84
- setProjectDest(value);
85
- if (createError) {
86
- setCreateError('');
87
- }
88
- }, [createError]);
89
- const handleDestSubmit = useCallback(async () => {
90
- setStep(FLOW_STEPS.CREATING);
91
- setCreateError('');
92
- setCreateStatus(ACTION_STATUSES.RUNNING);
93
- try {
94
- await onRunCreateProject({
95
- projectName,
96
- projectDest,
97
- });
98
- setCreateStatus(ACTION_STATUSES.DONE);
99
- setStep(FLOW_STEPS.COMPLETE);
100
- }
101
- catch (error) {
102
- const errorMessage = error instanceof Error
103
- ? error.message
104
- : commands.getStarted.v2.unknownError;
105
- setCreateStatus(ACTION_STATUSES.ERROR);
106
- setCreateError(errorMessage);
107
- setStep(FLOW_STEPS.DEST_INPUT);
108
- }
109
- }, [onRunCreateProject, projectName, projectDest]);
110
- // Auto-start project creation when initial values are provided
111
- useEffect(() => {
112
- if (hasInitialValues && step === FLOW_STEPS.CREATING) {
113
- setCreateStatus(ACTION_STATUSES.RUNNING);
114
- handleDestSubmit();
115
- }
116
- }, [hasInitialValues, step, handleDestSubmit]);
117
- useInput((_, key) => {
118
- if (step === FLOW_STEPS.COMPLETE && key.return) {
119
- exit();
120
- }
121
- });
122
- const titleText = commands.getStarted.v2.startTitle;
123
- const overviewText = commands.getStarted.v2.guideOverview(accountName);
124
- const projectsText = commands.getStarted.v2.projects;
125
- const selectPrompt = commands.getStarted.v2.prompts.selectOptionV2;
126
- const runningProjectCreateText = commands.getStarted.v2.runningProjectCreate;
127
- return (_jsx(BoxWithTitle, { flexGrow: 1, title: "hs get-started", borderColor: INK_COLORS.HUBSPOT_ORANGE, titleBackgroundColor: INK_COLORS.HUBSPOT_ORANGE, children: _jsxs(Box, { flexDirection: "column", rowGap: 1, children: [_jsx(Text, { bold: true, children: titleText }), step === FLOW_STEPS.SELECT ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: overviewText }), _jsx(Text, { children: projectsText }), _jsxs(Box, { flexDirection: "row", flexWrap: "wrap", columnGap: 1, children: [_jsx(Text, { color: INK_COLORS.HUBSPOT_TEAL, children: "?" }), _jsx(Text, { children: selectPrompt })] }), _jsx(SelectInput, { items: GET_STARTED_FLOW_OPTIONS, onSelect: handleSelect })] })) : (_jsxs(Box, { flexDirection: "row", flexWrap: "wrap", columnGap: 1, children: [_jsx(Text, { color: INK_COLORS.HUBSPOT_TEAL, children: "?" }), _jsx(Text, { children: `${selectPrompt}` }), _jsx(Text, { color: INK_COLORS.INFO_BLUE, children: selectedLabel })] })), _jsxs(ActionSection, { status: createStatus, statusText: runningProjectCreateText, errorMessage: createError, children: [step !== FLOW_STEPS.SELECT && (_jsx(InputField, { flag: "name", prompt: "Enter your project name", value: projectName, isEditing: step === FLOW_STEPS.NAME_INPUT, onChange: setProjectName, onSubmit: handleNameSubmit })), step !== FLOW_STEPS.SELECT && step !== FLOW_STEPS.NAME_INPUT && (_jsx(InputField, { flag: "dest", prompt: "Choose where to create the project", value: projectDest, isEditing: step === FLOW_STEPS.DEST_INPUT, onChange: handleDestChange, onSubmit: handleDestSubmit }))] }), step === FLOW_STEPS.COMPLETE && (_jsxs(Box, { flexDirection: "row", flexWrap: "wrap", columnGap: 1, children: [_jsx(Text, { color: INK_COLORS.HUBSPOT_TEAL, children: "?" }), _jsx(Text, { children: commands.getStarted.v2.pressEnterToContinueDeploy(accountName) })] }))] }) }));
128
- }