-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathimport-config-handler.ts
More file actions
95 lines (82 loc) · 3.64 KB
/
import-config-handler.ts
File metadata and controls
95 lines (82 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import merge from 'merge';
import * as path from 'path';
import { omit, filter, includes, isArray } from 'lodash';
import { configHandler, isAuthenticated, cliux, sanitizePath } from '@contentstack/cli-utilities';
import defaultConfig from '../config';
import { readFile, fileExistsSync } from './file-helper';
import { askContentDir, askAPIKey, askSelectedModules } from './interactive';
import login from './login-handler';
import { ImportConfig } from '../types';
const setupConfig = async (importCmdFlags: any): Promise<ImportConfig> => {
let config: ImportConfig = merge({}, defaultConfig);
// setup the config
// if (importCmdFlags['config']) {
// let externalConfig = await readFile(importCmdFlags['config']);
// if (isArray(externalConfig['modules'])) {
// config.modules = filter(config.modules, (module) => includes(externalConfig['modules'], module));
// externalConfig = omit(externalConfig, ['modules']);
// }
// config = merge.recursive(config, externalConfig);
// }
config.contentDir = sanitizePath(importCmdFlags['data'] || importCmdFlags['data-dir'] || config.data || (await askContentDir()));
const pattern = /[*$%#<>{}!&?]/g;
if (pattern.test(config.contentDir)) {
cliux.print(`\nPlease enter a directory path without special characters: (*,&,{,},[,],$,%,<,>,?,!)`, {
color: 'yellow',
});
config.contentDir = sanitizePath(await askContentDir());
}
config.contentDir = config.contentDir.replace(/['"]/g, '');
config.contentDir = path.resolve(config.contentDir);
//Note to support the old key
config.data = config.contentDir;
if (fileExistsSync(path.join(config.contentDir, 'export-info.json'))) {
config.contentVersion =
((await readFile(path.join(config.contentDir, 'export-info.json'))) || {}).contentVersion || 2;
} else {
config.contentVersion = 1;
}
const managementTokenAlias = importCmdFlags['management-token-alias'] || importCmdFlags['alias'];
if (managementTokenAlias) {
const { token, apiKey } = configHandler.get(`tokens.${managementTokenAlias}`) ?? {};
config.management_token = token;
config.apiKey = apiKey;
if (!config.management_token) {
throw new Error(`No management token found on given alias ${managementTokenAlias}`);
}
}
if (!config.management_token) {
if (!isAuthenticated()) {
if (config.email && config.password) {
await login(config);
} else {
throw new Error('Please login or provide an alias for the management token');
}
} else {
config.apiKey =
importCmdFlags['stack-uid'] || importCmdFlags['stack-api-key'] || config.target_stack || (await askAPIKey());
if (typeof config.apiKey !== 'string' || !config.apiKey || !config.apiKey.trim()) {
throw new Error('Invalid or empty API key received. Please provide a valid stack API key.');
}
}
}
config.isAuthenticated = isAuthenticated();
//Note to support the old key
config.source_stack = config.apiKey;
// config.skipAudit = importCmdFlags['skip-audit'];
// config.forceStopMarketplaceAppsPrompt = importCmdFlags.yes;
// config.importWebhookStatus = importCmdFlags['import-webhook-status'];
// config.skipPrivateAppRecreationIfExist = importCmdFlags['skip-app-recreation'];
if (importCmdFlags['branch']) {
config.branchName = importCmdFlags['branch'];
}
if (importCmdFlags['branch-alias']) {
config.branchAlias = importCmdFlags['branch-alias'];
}
config.selectedModules = importCmdFlags['module'] || [await askSelectedModules()];
if (importCmdFlags['backup-dir']) {
config.useBackedupDir = importCmdFlags['backup-dir'];
}
return config;
};
export default setupConfig;