esa-cli 0.0.2-beta.10 → 0.0.2-beta.13

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 (75) hide show
  1. package/dist/commands/commit/index.js +26 -115
  2. package/dist/commands/commit/prodBuild.js +2 -3
  3. package/dist/commands/common/routineUtils.js +276 -0
  4. package/dist/commands/config.js +1 -1
  5. package/dist/commands/deploy/helper.js +40 -61
  6. package/dist/commands/deploy/index.js +90 -188
  7. package/dist/commands/deployments/delete.js +32 -22
  8. package/dist/commands/deployments/index.js +2 -2
  9. package/dist/commands/deployments/list.js +22 -38
  10. package/dist/commands/dev/build.js +3 -3
  11. package/dist/commands/dev/doProcess.js +5 -5
  12. package/dist/commands/dev/ew2/cacheService.js +33 -0
  13. package/dist/commands/dev/ew2/devEntry.js +2 -1
  14. package/dist/commands/dev/ew2/devPack.js +22 -11
  15. package/dist/commands/dev/ew2/kvService.js +27 -0
  16. package/dist/commands/dev/ew2/mock/cache.js +99 -15
  17. package/dist/commands/dev/ew2/mock/kv.js +142 -21
  18. package/dist/commands/dev/ew2/server.js +162 -27
  19. package/dist/commands/dev/index.js +14 -15
  20. package/dist/commands/dev/mockWorker/devPack.js +16 -7
  21. package/dist/commands/dev/mockWorker/server.js +7 -6
  22. package/dist/commands/domain/add.js +2 -2
  23. package/dist/commands/domain/delete.js +7 -7
  24. package/dist/commands/domain/index.js +2 -2
  25. package/dist/commands/domain/list.js +10 -10
  26. package/dist/commands/init/helper.js +87 -13
  27. package/dist/commands/init/index.js +461 -57
  28. package/dist/commands/init/template.jsonc +34 -0
  29. package/dist/commands/lang.js +2 -2
  30. package/dist/commands/login/index.js +57 -7
  31. package/dist/commands/logout.js +5 -5
  32. package/dist/commands/route/add.js +138 -49
  33. package/dist/commands/route/delete.js +33 -27
  34. package/dist/commands/route/helper.js +124 -0
  35. package/dist/commands/route/index.js +2 -2
  36. package/dist/commands/route/list.js +56 -17
  37. package/dist/commands/routine/delete.js +2 -2
  38. package/dist/commands/routine/index.js +2 -2
  39. package/dist/commands/routine/list.js +9 -21
  40. package/dist/commands/site/index.js +1 -1
  41. package/dist/commands/site/list.js +6 -7
  42. package/dist/commands/utils.js +55 -19
  43. package/dist/components/descriptionInput.js +1 -1
  44. package/dist/components/mutiSelectTable.js +1 -1
  45. package/dist/components/selectInput.js +2 -3
  46. package/dist/components/selectItem.js +1 -1
  47. package/dist/docs/Commands_en.md +25 -15
  48. package/dist/docs/Commands_zh_CN.md +12 -2
  49. package/dist/docs/eslint-config-en.md +1 -0
  50. package/dist/docs/eslint-config.md +73 -0
  51. package/dist/docs/init-command-quick-test.md +208 -0
  52. package/dist/docs/init-command-test-guide.md +598 -0
  53. package/dist/i18n/index.js +2 -2
  54. package/dist/i18n/locales.json +261 -17
  55. package/dist/index.js +17 -12
  56. package/dist/libs/api.js +32 -9
  57. package/dist/libs/apiService.js +258 -85
  58. package/dist/libs/git/index.js +8 -4
  59. package/dist/libs/interface.js +0 -1
  60. package/dist/libs/logger.js +63 -7
  61. package/dist/libs/service.js +2 -2
  62. package/dist/libs/templates/index.js +1 -1
  63. package/dist/utils/checkAssetsExist.js +80 -0
  64. package/dist/utils/checkDevPort.js +3 -17
  65. package/dist/utils/checkEntryFileExist.js +10 -0
  66. package/dist/utils/checkIsRoutineCreated.js +16 -31
  67. package/dist/utils/checkVersion.js +1 -1
  68. package/dist/utils/compress.js +80 -0
  69. package/dist/utils/download.js +5 -5
  70. package/dist/utils/fileMd5.js +1 -1
  71. package/dist/utils/fileUtils/index.js +71 -22
  72. package/dist/utils/installDeno.js +3 -3
  73. package/dist/utils/installEw2.js +7 -7
  74. package/dist/utils/openInBrowser.js +1 -1
  75. package/package.json +11 -6
@@ -7,22 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import chalk from 'chalk';
11
- import { getProjectConfig, readEdgeRoutineFile } from '../../utils/fileUtils/index.js';
12
- import SelectItems from '../../components/selectInput.js';
13
- import { Environment, PublishType } from '../../libs/interface.js';
14
- import logger from '../../libs/logger.js';
15
- import { checkDirectory, checkIsLoginSuccess, getRoutineVersionList } from '../utils.js';
16
- import { displayMultiSelectTable } from '../../components/mutiSelectTable.js';
17
- import { Base64 } from 'js-base64';
18
- import { ApiService } from '../../libs/apiService.js';
19
- import { createAndDeployVersion, displaySelectDeployType, promptSelectVersion, yesNoPromptAndExecute } from './helper.js';
20
- import t from '../../i18n/index.js';
21
- import prodBuild from '../commit/prodBuild.js';
22
10
  import { exit } from 'process';
23
- import path from 'path';
24
- import { checkRoutineExist } from '../../utils/checkIsRoutineCreated.js';
25
- import moment from 'moment';
11
+ import t from '../../i18n/index.js';
12
+ import { validateAndInitializeProject, commitAndDeployVersion, displayDeploySuccess } from '../common/routineUtils.js';
26
13
  const deploy = {
27
14
  command: 'deploy [entry]',
28
15
  builder: (yargs) => {
@@ -32,188 +19,103 @@ const deploy = {
32
19
  type: 'string',
33
20
  demandOption: false
34
21
  })
35
- .option('quick', {
36
- alias: 'q',
22
+ .option('version', {
23
+ alias: 'v',
24
+ describe: t('deploy_option_version').d('Version to deploy (skip interactive selection)'),
25
+ type: 'string'
26
+ })
27
+ .option('environment', {
28
+ alias: 'e',
29
+ describe: t('deploy_option_environment').d('Environment to deploy to: staging or production (skip interactive selection)'),
30
+ type: 'string',
31
+ choices: ['staging', 'production']
32
+ })
33
+ .option('name', {
34
+ alias: 'n',
35
+ describe: t('deploy_option_name').d('Name of the routine'),
36
+ type: 'string'
37
+ })
38
+ .option('assets', {
39
+ alias: 'a',
40
+ describe: t('deploy_option_assets').d('Deploy assets'),
41
+ type: 'boolean'
42
+ })
43
+ .option('description', {
44
+ alias: 'd',
45
+ describe: t('deploy_option_description').d('Description of the version'),
46
+ type: 'string'
47
+ })
48
+ .option('minify', {
49
+ alias: 'm',
50
+ describe: t('deploy_option_minify').d('Minify the code'),
51
+ type: 'boolean'
52
+ })
53
+ .option('minify', {
54
+ alias: 'm',
55
+ describe: t('deploy_option_minify').d('Minify the code'),
37
56
  type: 'boolean'
38
57
  });
39
58
  },
40
59
  describe: `🚀 ${t('deploy_describe').d('Deploy your project')}`,
41
60
  handler: (argv) => __awaiter(void 0, void 0, void 0, function* () {
42
- handleDeploy(argv);
61
+ yield handleDeploy(argv);
62
+ exit();
43
63
  })
44
64
  };
45
- export default deploy;
46
- export function quickDeploy(entry, projectConfig) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const server = yield ApiService.getInstance();
49
- const entryFile = path.resolve(entry !== null && entry !== void 0 ? entry : '', 'src/index.js');
50
- yield prodBuild(false, entryFile, entry);
51
- const code = readEdgeRoutineFile(entry) || '';
52
- const res = yield server.quickDeployRoutine({
53
- name: projectConfig.name,
54
- code: code
55
- });
56
- if (res) {
57
- logger.success(t('quick_deploy_success').d('Your code has been successfully deployed'));
58
- logger.log(`👉 ${t('quick_deploy_success_guide').d('Run this command to add domains')}: ${chalk.green('esa domain add <DOMAIN>')}`);
59
- }
60
- else {
61
- logger.error(t('quick_deploy_failed').d('Quick deploy failed'));
62
- process.exit(0);
63
- }
64
- });
65
- }
66
65
  export function handleDeploy(argv) {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- var _a, _b, _c, _d, _e;
69
- if (!checkDirectory()) {
70
- return;
71
- }
72
- const projectConfig = getProjectConfig();
73
- if (!projectConfig)
74
- return logger.notInProject();
75
- const isSuccess = yield checkIsLoginSuccess();
76
- if (!isSuccess)
77
- return;
78
- const server = yield ApiService.getInstance();
79
- const entry = argv.entry;
80
- yield checkRoutineExist(projectConfig.name, entry);
81
- const req = { Name: projectConfig.name };
82
- const routineDetail = yield server.getRoutine(req, false);
83
- const versionList = ((_a = routineDetail === null || routineDetail === void 0 ? void 0 : routineDetail.data) === null || _a === void 0 ? void 0 : _a.CodeVersions) || [];
84
- const customEntry = argv.entry;
85
- const stagingVersion = (_c = (_b = routineDetail === null || routineDetail === void 0 ? void 0 : routineDetail.data) === null || _b === void 0 ? void 0 : _b.Envs[1]) === null || _c === void 0 ? void 0 : _c.CodeVersion;
86
- const productionVersion = (_e = (_d = routineDetail === null || routineDetail === void 0 ? void 0 : routineDetail.data) === null || _d === void 0 ? void 0 : _d.Envs[0]) === null || _e === void 0 ? void 0 : _e.CodeVersion;
87
- if (argv.quick) {
88
- yield quickDeploy(customEntry, projectConfig);
89
- exit(0);
90
- }
91
- if (versionList.length === 0) {
92
- logger.log(t('no_formal_version_found').d('No formal version found, you need to create a version first.'));
93
- yield handleOnlyUnstableVersionFound(projectConfig, customEntry);
94
- }
95
- else {
96
- yield displayVersionList(versionList, stagingVersion, productionVersion);
97
- logger.log(chalk.bold(`${t('deploy_version_select').d('Select the version you want to publish')}:`));
98
- const selectedVersion = yield promptSelectVersion(versionList);
99
- const selectedType = yield displaySelectDeployType();
100
- yield deploySelectedCodeVersion(projectConfig.name, selectedType, selectedVersion);
101
- }
102
- });
103
- }
104
- export function displaySelectSpec(specList) {
105
- return __awaiter(this, void 0, void 0, function* () {
106
- logger.log(`📃 ${t('deploy_spec_select').d('Please select the spec of the routine you want to create')}`);
107
- const selectItems = specList.map((spec) => {
108
- return { label: spec, value: spec };
109
- });
110
- return new Promise((resolve) => {
111
- const handleSelection = (item) => __awaiter(this, void 0, void 0, function* () {
112
- resolve(item.value);
113
- });
114
- SelectItems({ items: selectItems, handleSelect: handleSelection });
115
- });
116
- });
117
- }
118
- function handleNoVersionsFound(projectConfig, customEntry) {
119
- return __awaiter(this, void 0, void 0, function* () {
120
- logger.log(`😄 ${t('deploy_first_time').d("This is first time to deploy. Let's create a version first!")}`);
121
- const created = yield yesNoPromptAndExecute(`📃 ${t('deploy_create_formal_version_ques').d('Do you want to create an unstable version now?')}`, () => createAndDeployVersion(projectConfig, true));
122
- if (created) {
123
- yield handleOnlyUnstableVersionFound(projectConfig);
124
- }
125
- });
126
- }
127
- function promptAndDeployVersion(projectConfig) {
128
- return __awaiter(this, void 0, void 0, function* () {
129
- const versionList = yield getRoutineVersionList(projectConfig.name);
130
- yield displayVersionList(versionList);
131
- logger.log(`📃 ${t('deploy_select_version').d("Select which version you'd like to deploy")}`);
132
- const selectedVersion = yield promptSelectVersion(versionList);
133
- const selectedType = yield displaySelectDeployType();
134
- yield deploySelectedCodeVersion(projectConfig.name, selectedType, selectedVersion);
135
- });
136
- }
137
- const specialAreaTransfer = (canaryAreaSelectList) => {
138
- return canaryAreaSelectList.map((item) => {
139
- if (item.label === 'HongKong') {
140
- return { label: 'HongKong(China)' };
141
- }
142
- if (item.label === 'Macau') {
143
- return { label: 'Macau(China)' };
144
- }
145
- if (item.label === 'Taiwan') {
146
- return { label: 'Taiwan(China)' };
147
- }
148
- return { label: item.label };
149
- });
150
- };
151
- export function handleOnlyUnstableVersionFound(projectConfig, customEntry) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- const created = yield yesNoPromptAndExecute(`📃 ${t('deploy_create_formal_version_ques').d('Do you want to create a formal version to deploy on production environment?')}`, () => createAndDeployVersion(projectConfig));
154
- if (created) {
155
- yield promptAndDeployVersion(projectConfig);
156
- }
157
- });
158
- }
159
- export function deploySelectedCodeVersion(name, selectedType, version) {
160
66
  return __awaiter(this, void 0, void 0, function* () {
161
67
  var _a;
162
- const server = yield ApiService.getInstance();
163
- const param = {
164
- Name: name,
165
- Env: selectedType === PublishType.Staging
166
- ? Environment.Staging
167
- : Environment.Production
168
- };
169
- if (selectedType === PublishType.Canary) {
170
- const res = yield server.listRoutineCanaryAreas();
171
- const canaryList = (_a = res === null || res === void 0 ? void 0 : res.CanaryAreas) !== null && _a !== void 0 ? _a : [];
172
- logger.log(`📃 ${t('deploy_select_canary').d('Please select the canary area(s) you want to deploy to')}`);
173
- const canaryAreaSelectList = canaryList.map((area) => {
174
- return { label: area };
175
- });
176
- const selectedCanaryList = yield displayMultiSelectTable(specialAreaTransfer(canaryAreaSelectList));
177
- param.CanaryAreaList = selectedCanaryList;
178
- param.CanaryCodeVersion = version;
179
- }
180
- else {
181
- param.CodeVersion = version;
182
- }
183
- try {
184
- const res = yield server.publishRoutineCodeVersion(param);
185
- if (res) {
186
- logger.success(t('deploy_success').d('Your code has been successfully deployed'));
187
- logger.log(`👉 ${t('deploy_success_guide').d('Run this command to add domains')}: ${chalk.green('esa domain add <DOMAIN>')}`);
188
- }
189
- }
190
- catch (e) {
191
- console.error(e);
192
- }
193
- });
194
- }
195
- export function displayVersionList(versionList_1) {
196
- return __awaiter(this, arguments, void 0, function* (versionList, stagingVersion = 'unstable', productionVersion = 'unstable') {
197
- logger.log(`${chalk.bgYellow('Active')} ${t('deploy_env_staging').d('Staging')}`);
198
- logger.log(`${chalk.bgGreen('Active')} ${t('deploy_env_production').d('Production')}`);
199
- const data = [];
200
- for (let i = 0; i < versionList.length; i++) {
201
- const version = versionList[i];
202
- const createTime = moment(version.CreateTime).format('YYYY/MM/DD HH:mm:ss');
203
- const tags = [
204
- version.CodeVersion === stagingVersion ? chalk.bgYellow('Active') : '',
205
- version.CodeVersion === productionVersion ? chalk.bgGreen('Active') : ''
206
- ];
207
- data.push([
208
- `${version.CodeVersion} ${tags.join(' ')}`,
209
- createTime,
210
- Base64.decode(version.CodeDescription)
211
- ]);
212
- }
213
- logger.table([
214
- t('deploy_table_header_version').d('Version'),
215
- t('deploy_table_header_created').d('Created'),
216
- t('deploy_table_header_description').d('Description')
217
- ], data, [30, 25, 15]);
68
+ const projectInfo = yield validateAndInitializeProject(argv === null || argv === void 0 ? void 0 : argv.name);
69
+ if (!projectInfo)
70
+ return;
71
+ const { projectConfig, projectName } = projectInfo;
72
+ const entry = argv.entry || projectConfig.entry;
73
+ const assets = argv.assets || ((_a = projectConfig.assets) === null || _a === void 0 ? void 0 : _a.directory);
74
+ const success = yield commitAndDeployVersion(projectConfig, entry, assets, argv.description || '', undefined, argv.environment, argv.minify, argv.version);
75
+ if (success) {
76
+ yield displayDeploySuccess(projectName, true, false);
77
+ }
78
+ // if (allVersions.length === 0) {
79
+ // logger.log(
80
+ // t('no_formal_version_found').d(
81
+ // 'No formal version found, you need to create a version first.'
82
+ // )
83
+ // );
84
+ // const commitRes = await generateCodeVersion(projectName, '', entry, assets);
85
+ // if (!commitRes?.isSuccess) {
86
+ // exit(0);
87
+ // }
88
+ // }
89
+ // const {
90
+ // allVersions: committedVersionList,
91
+ // stagingVersions,
92
+ // productionVersions
93
+ // } = await getRoutineCodeVersions(projectName);
94
+ // await displayVersionList(
95
+ // committedVersionList,
96
+ // stagingVersions,
97
+ // productionVersions
98
+ // );
99
+ // const selectedVersion =
100
+ // (argv.version as string) ||
101
+ // (await promptSelectVersion(committedVersionList));
102
+ // const selectedEnvironment =
103
+ // (argv.environment as string) || (await displaySelectDeployEnv());
104
+ // if (
105
+ // selectedEnvironment !== PublishType.Staging &&
106
+ // selectedEnvironment !== PublishType.Production
107
+ // ) {
108
+ // logger.error(t('deploy_invalid_environment').d('Invalid environment'));
109
+ // exit(0);
110
+ // }
111
+ // const success = await deployCodeVersion(
112
+ // projectName,
113
+ // selectedVersion,
114
+ // selectedEnvironment as PublishType
115
+ // );
116
+ // if (success) {
117
+ // await displayDeploySuccess(projectName, true, true);
118
+ // }
218
119
  });
219
120
  }
121
+ export default deploy;
@@ -7,14 +7,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { getProjectConfig } from '../../utils/fileUtils/index.js';
11
- import { checkDirectory, checkIsLoginSuccess, getRoutineVersionList } from '../utils.js';
12
- import { ApiService } from '../../libs/apiService.js';
10
+ import chalk from 'chalk';
11
+ import { displayMultiSelectTable } from '../../components/mutiSelectTable.js';
13
12
  import t from '../../i18n/index.js';
13
+ import { ApiService } from '../../libs/apiService.js';
14
14
  import logger from '../../libs/logger.js';
15
- import { displayMultiSelectTable } from '../../components/mutiSelectTable.js';
16
- import { Base64 } from 'js-base64';
17
15
  import { validRoutine } from '../../utils/checkIsRoutineCreated.js';
16
+ import { getProjectConfig } from '../../utils/fileUtils/index.js';
17
+ import { checkDirectory, checkIsLoginSuccess, getRoutineCodeVersions } from '../utils.js';
18
18
  const deploymentsDelete = {
19
19
  command: 'delete [deploymentId..]',
20
20
  describe: `🗑 ${t('deployments_delete_describe').d('Delete one or more deployment versions')}`,
@@ -49,29 +49,39 @@ export function handleDeleteDeployments(argv) {
49
49
  yield validRoutine(projectConfig.name);
50
50
  const server = yield ApiService.getInstance();
51
51
  let versions = argv.deploymentId;
52
- // const req: DeleteRoutineCodeVersionReq = {
53
- // Name: projectConfig.name,
54
- // CodeVersion: version
55
- // };
56
- // const res = await server.deleteRoutineCodeVersion(req);
57
- // if (res?.Status === 'OK') {
58
- // logger.success(
59
- // `${t('deployments_delete_success').d('Delete success')}: ${version}`
60
- // );
61
- // } else {
62
- // logger.error(
63
- // `🙅 ${t('deployments_delete_failed').d('Delete failed')}: ${version}`
64
- // );
65
- // }
66
52
  const isInteractive = argv.i;
67
53
  if (isInteractive) {
68
- const versionList = yield getRoutineVersionList(projectConfig.name);
54
+ const { allVersions, stagingVersions, productionVersions } = yield getRoutineCodeVersions(projectConfig.name);
55
+ // 显示正在部署的版本信息
56
+ if (stagingVersions.length > 0 || productionVersions.length > 0) {
57
+ logger.log(chalk.yellow('⚠️ Currently deploying versions:'));
58
+ if (stagingVersions.length > 0) {
59
+ logger.log(chalk.yellow(` Staging: ${stagingVersions.join(',')}`));
60
+ }
61
+ if (productionVersions.length > 0) {
62
+ logger.log(chalk.yellow(` Production: ${productionVersions.join(',')}`));
63
+ }
64
+ logger.log('');
65
+ }
69
66
  logger.log(t('delete_deployments_table_title').d(' Version ID Description'));
70
- const selectList = versionList.map((item) => {
67
+ // 过滤掉正在部署的版本
68
+ const selectList = allVersions
69
+ .filter((item) => {
70
+ var _a, _b;
71
+ if (stagingVersions.length === 0 && productionVersions.length === 0)
72
+ return true;
73
+ return (!stagingVersions.includes((_a = item.codeVersion) !== null && _a !== void 0 ? _a : '') &&
74
+ !productionVersions.includes((_b = item.codeVersion) !== null && _b !== void 0 ? _b : ''));
75
+ })
76
+ .map((item) => {
71
77
  return {
72
- label: item.CodeVersion + ' ' + Base64.decode(item.CodeDescription)
78
+ label: item.codeVersion + ' ' + item.codeDescription
73
79
  };
74
80
  });
81
+ if (selectList.length === 0) {
82
+ logger.error('No deletable versions found. All versions are currently deployed.');
83
+ return;
84
+ }
75
85
  versions = (yield displayMultiSelectTable(selectList, 1, 100)).map((item) => item.slice(0, item.indexOf(' ')));
76
86
  }
77
87
  for (let i = 0; i < versions.length; i++) {
@@ -1,6 +1,6 @@
1
- import deploymentsList from './list.js';
2
- import deploymentsDelete from './delete.js';
3
1
  import t from '../../i18n/index.js';
2
+ import deploymentsDelete from './delete.js';
3
+ import deploymentsList from './list.js';
4
4
  let yargsIns;
5
5
  const deploymentsCommand = {
6
6
  command: 'deployments [script]',
@@ -7,28 +7,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { displayVersionList } from '../deploy/index.js';
11
- import { checkDirectory, checkIsLoginSuccess, getRoutineVersionList } from '../utils.js';
12
- import { getProjectConfig } from '../../utils/fileUtils/index.js';
13
10
  import chalk from 'chalk';
14
- import { ApiService } from '../../libs/apiService.js';
15
11
  import t from '../../i18n/index.js';
12
+ import { ApiService } from '../../libs/apiService.js';
16
13
  import logger from '../../libs/logger.js';
17
14
  import { validRoutine } from '../../utils/checkIsRoutineCreated.js';
15
+ import { getProjectConfig } from '../../utils/fileUtils/index.js';
16
+ import { displayVersionList } from '../deploy/helper.js';
17
+ import { checkIsLoginSuccess, getRoutineCodeVersions } from '../utils.js';
18
18
  const deploymentsList = {
19
19
  command: 'list',
20
20
  describe: `🔍 ${t('deployments_list_describe').d('List all deployments')}`,
21
- handler: (argv) => __awaiter(void 0, void 0, void 0, function* () {
22
- handleListDeployments(argv);
21
+ handler: () => __awaiter(void 0, void 0, void 0, function* () {
22
+ handleListDeployments();
23
23
  })
24
24
  };
25
25
  export default deploymentsList;
26
- export function handleListDeployments(argv) {
26
+ export function handleListDeployments() {
27
27
  return __awaiter(this, void 0, void 0, function* () {
28
- var _a, _b, _c, _d;
29
- if (!checkDirectory()) {
30
- return;
31
- }
32
28
  const projectConfig = getProjectConfig();
33
29
  if (!projectConfig)
34
30
  return logger.notInProject();
@@ -37,52 +33,40 @@ export function handleListDeployments(argv) {
37
33
  return;
38
34
  yield validRoutine(projectConfig.name);
39
35
  const server = yield ApiService.getInstance();
40
- const versionList = yield getRoutineVersionList(projectConfig.name);
41
36
  const req = { Name: projectConfig.name };
42
37
  const routineDetail = yield server.getRoutine(req);
43
38
  if (!routineDetail)
44
39
  return;
45
- //测试环境版本
46
- const stagingVersion = (_b = (_a = routineDetail === null || routineDetail === void 0 ? void 0 : routineDetail.data) === null || _a === void 0 ? void 0 : _a.Envs[1]) === null || _b === void 0 ? void 0 : _b.CodeVersion;
47
- //生产环境版本
48
- const productionVersion = (_d = (_c = routineDetail === null || routineDetail === void 0 ? void 0 : routineDetail.data) === null || _c === void 0 ? void 0 : _c.Envs[0]) === null || _d === void 0 ? void 0 : _d.CodeVersion;
49
- yield displayListPrompt(routineDetail);
50
- yield displayVersionList(versionList, stagingVersion, productionVersion);
40
+ const { allVersions, stagingVersions, productionVersions } = yield getRoutineCodeVersions(projectConfig.name);
41
+ yield displayDeployingVersions(routineDetail, stagingVersions, productionVersions);
42
+ yield displayVersionList(allVersions, stagingVersions, productionVersions);
51
43
  });
52
44
  }
53
- function displayListPrompt(routineDetail) {
45
+ function displayDeployingVersions(routineDetail, stagingVersions, productionVersions) {
54
46
  return __awaiter(this, void 0, void 0, function* () {
55
- var _a, _b, _c, _d, _e;
56
- const isCanary = ((_a = routineDetail.data.Envs[0].CanaryAreaList) !== null && _a !== void 0 ? _a : []).length !== 0;
57
- const canaryEnv = routineDetail.data.Envs[0];
58
- const stagingEnv = routineDetail.data.Envs[1];
47
+ var _a, _b;
59
48
  const server = yield ApiService.getInstance();
60
49
  const res = yield server.getRoutineStagingEnvIp();
61
- const stagingIpList = (_c = (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.IPV4) !== null && _c !== void 0 ? _c : [];
50
+ const stagingIpList = (_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.IPV4) !== null && _b !== void 0 ? _b : [];
62
51
  const coloredStagingIpList = stagingIpList.map((ip) => {
63
52
  return chalk.green(ip);
64
53
  });
65
- const showEnvTable = (version, spec, region) => {
66
- const data = [
67
- { Version: version },
68
- { Specification: spec }
69
- ];
70
- if (region) {
71
- data.push({ Region: region });
72
- }
54
+ const showEnvTable = (version) => {
55
+ const data = [{ Version: version }];
73
56
  logger.table([], data);
74
57
  };
75
58
  logger.log(chalk.bold(t('deploy_env_staging').d('Staging')));
76
59
  if (stagingIpList.length > 0) {
77
60
  logger.log(`Staging IP: ${coloredStagingIpList.join(', ')}`);
78
61
  }
79
- showEnvTable(stagingEnv.CodeVersion, stagingEnv.SpecName);
80
- logger.block();
81
- logger.log(`${chalk.bold(`${t('deploy_env_production').d('Production')} ${!isCanary ? chalk.green('●') : ''}`)}`);
82
- showEnvTable(canaryEnv.CodeVersion, canaryEnv.SpecName);
62
+ if (stagingVersions.length > 0) {
63
+ showEnvTable(stagingVersions.join(','));
64
+ }
83
65
  logger.block();
84
- logger.log(`${chalk.bold(`${t('deploy_env_canary').d('Canary')} ${isCanary ? chalk.green('●') : ''}`)}`);
85
- showEnvTable((_d = canaryEnv.CanaryCodeVersion) !== null && _d !== void 0 ? _d : '', canaryEnv.SpecName, (_e = canaryEnv.CanaryAreaList) === null || _e === void 0 ? void 0 : _e.join(', '));
66
+ logger.log(`${chalk.bold(`${t('deploy_env_production').d('Production')} ${chalk.green('●')}`)}`);
67
+ if (productionVersions.length > 0) {
68
+ showEnvTable(productionVersions.join(','));
69
+ }
86
70
  logger.log(`${t('show_default_url').d(`You can visit:`)} ${chalk.yellowBright(routineDetail.data.DefaultRelatedRecord)}`);
87
71
  logger.info(routineDetail.data.DefaultRelatedRecord);
88
72
  logger.block();
@@ -1,12 +1,12 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
+ import _generator from '@babel/generator';
4
+ import parser from '@babel/parser';
5
+ import _traverse from '@babel/traverse';
3
6
  import esbuild from 'esbuild';
4
7
  import { lessLoader } from 'esbuild-plugin-less';
5
8
  import { getRoot } from '../../utils/fileUtils/base.js';
6
9
  import { NODE_EXTERNALS } from '../common/constant.js';
7
- import parser from '@babel/parser';
8
- import _traverse from '@babel/traverse';
9
- import _generator from '@babel/generator';
10
10
  const replacements = { cache: 'mockCache', EdgeKV: 'mockKV' };
11
11
  const traverse = _traverse.default;
12
12
  const generator = _generator.default;
@@ -7,14 +7,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import React, { useEffect } from 'react';
11
- import { Box, Text, useApp, useInput, render } from 'ink';
12
10
  import chalk from 'chalk';
11
+ import { Box, Text, useApp, useInput, render } from 'ink';
12
+ import React, { useEffect } from 'react';
13
+ import t from '../../i18n/index.js';
13
14
  import logger from '../../libs/logger.js';
14
- import openInBrowser from '../../utils/openInBrowser.js';
15
- import { getDevOpenBrowserUrl } from '../../utils/fileUtils/index.js';
16
15
  import { checkOS, Platforms } from '../../utils/checkOS.js';
17
- import t from '../../i18n/index.js';
16
+ import { getDevOpenBrowserUrl } from '../../utils/fileUtils/index.js';
17
+ import openInBrowser from '../../utils/openInBrowser.js';
18
18
  const InteractionBox = ({ worker }) => {
19
19
  const { exit } = useApp();
20
20
  const inspectLink = chalk.underline.blue('chrome://inspect/#devices');
@@ -0,0 +1,33 @@
1
+ class CacheService {
2
+ constructor() {
3
+ this.store = new Map();
4
+ this.maxQuota = 100 * 1024 * 1024;
5
+ }
6
+ put(key, serializedResponse) {
7
+ const expires = serializedResponse.ttl === 0
8
+ ? Infinity
9
+ : Date.now() + serializedResponse.ttl * 1000;
10
+ this.store.set(key, {
11
+ serializedResponse,
12
+ expires: expires,
13
+ lastUsed: Date.now()
14
+ });
15
+ }
16
+ get(key) {
17
+ const entry = this.store.get(key);
18
+ if (!entry || Date.now() > entry.expires) {
19
+ return null;
20
+ }
21
+ entry.lastUsed = Date.now();
22
+ return entry;
23
+ }
24
+ delete(key) {
25
+ return this.deleteEntry(key);
26
+ }
27
+ deleteEntry(key) {
28
+ if (!this.store.has(key))
29
+ return false;
30
+ return this.store.delete(key);
31
+ }
32
+ }
33
+ export default CacheService;
@@ -2,8 +2,9 @@ import worker from '$userPath';
2
2
  import Cache from './mock/cache.js';
3
3
  import mockKV from './mock/kv.js';
4
4
 
5
- var mock_cache = await Cache.init('mock');
5
+ var mock_cache = new Cache($userPort);
6
6
  globalThis.mockCache = mock_cache;
7
+ mockKV.port = $userPort;
7
8
  globalThis.mockKV = mockKV;
8
9
 
9
10
  export default worker;