-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathimport-config-handler.ts
More file actions
116 lines (98 loc) · 4.21 KB
/
import-config-handler.ts
File metadata and controls
116 lines (98 loc) · 4.21 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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 } 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.types = filter(config.modules.types, (module) => includes(externalConfig['modules'], module));
externalConfig = omit(externalConfig, ['modules']);
}
config = merge.recursive(config, externalConfig);
}
config.contentDir = importCmdFlags['data'] || importCmdFlags['data-dir'] || config.data || (await askContentDir());
const pattern = /[*$%#<>{}!&?]/g;
if (pattern.test(config.contentDir)) {
cliux.print(`\nPlease add a directory path without any of the special characters: (*,&,{,},[,],$,%,<,>,?,!)`, {
color: 'yellow',
});
config.contentDir = 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') {
throw new Error('Invalid API key received');
}
}
}
config.isAuthenticated = isAuthenticated();
config.auth_token = configHandler.get('authtoken'); // TBD handle auth token in httpClient & sdk
//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'];
config.branchDir = config.contentDir;
}
if (importCmdFlags['module']) {
config.moduleName = importCmdFlags['module'];
config.singleModuleImport = true;
}
if (importCmdFlags['backup-dir']) {
config.useBackedupDir = importCmdFlags['backup-dir'];
}
if (importCmdFlags['skip-assets-publish']) {
config.skipAssetsPublish = importCmdFlags['skip-assets-publish'];
}
if (importCmdFlags['skip-entries-publish']) {
config.skipEntriesPublish = importCmdFlags['skip-entries-publish'];
}
// Note to support old modules
config.target_stack = config.apiKey;
config.replaceExisting = importCmdFlags['replace-existing'];
config.skipExisting = importCmdFlags['skip-existing'];
config.personalizeProjectName = importCmdFlags['personalize-project-name'];
if (importCmdFlags['exclude-global-modules']) {
config['exclude-global-modules'] = importCmdFlags['exclude-global-modules'];
}
return config;
};
export default setupConfig;