@automattic/vip 2.21.0 → 2.23.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/CHANGELOG.md +23 -0
- package/assets/dev-env.lando.template.yml.ejs +1 -1
- package/automattic-vip-2.23.0.tgz +0 -0
- package/dist/bin/vip-app-list.js +0 -12
- package/dist/bin/vip-app.js +6 -13
- package/dist/bin/vip-cache-purge-url.js +4 -19
- package/dist/bin/vip-cache.js +0 -2
- package/dist/bin/vip-config-envvar-delete.js +4 -19
- package/dist/bin/vip-config-envvar-get-all.js +6 -19
- package/dist/bin/vip-config-envvar-get.js +4 -15
- package/dist/bin/vip-config-envvar-list.js +8 -20
- package/dist/bin/vip-config-envvar-set.js +4 -23
- package/dist/bin/vip-config-envvar.js +0 -2
- package/dist/bin/vip-config-software-get.js +0 -17
- package/dist/bin/vip-config-software-update.js +6 -22
- package/dist/bin/vip-config-software.js +0 -2
- package/dist/bin/vip-config.js +0 -2
- package/dist/bin/vip-dev-env-create.js +0 -18
- package/dist/bin/vip-dev-env-destroy.js +0 -9
- package/dist/bin/vip-dev-env-exec.js +0 -12
- package/dist/bin/vip-dev-env-import-media.js +0 -7
- package/dist/bin/vip-dev-env-import-sql.js +2 -17
- package/dist/bin/vip-dev-env-import.js +0 -3
- package/dist/bin/vip-dev-env-info.js +0 -10
- package/dist/bin/vip-dev-env-list.js +0 -7
- package/dist/bin/vip-dev-env-start.js +4 -14
- package/dist/bin/vip-dev-env-stop.js +0 -9
- package/dist/bin/vip-dev-env-update.js +0 -11
- package/dist/bin/vip-dev-env.js +0 -2
- package/dist/bin/vip-import-media-abort.js +0 -18
- package/dist/bin/vip-import-media-status.js +0 -12
- package/dist/bin/vip-import-media.js +6 -23
- package/dist/bin/vip-import-sql-status.js +0 -12
- package/dist/bin/vip-import-sql.js +40 -103
- package/dist/bin/vip-import-validate-files.js +21 -42
- package/dist/bin/vip-import-validate-sql.js +0 -8
- package/dist/bin/vip-import.js +0 -3
- package/dist/bin/vip-logs.js +20 -50
- package/dist/bin/vip-search-replace.js +8 -14
- package/dist/bin/vip-sync.js +2 -25
- package/dist/bin/vip-validate-preflight.js +427 -0
- package/dist/bin/vip-validate.js +19 -0
- package/dist/bin/vip-whoami.js +2 -14
- package/dist/bin/vip-wp.js +39 -89
- package/dist/bin/vip.js +5 -35
- package/dist/lib/analytics/clients/pendo.js +9 -18
- package/dist/lib/analytics/clients/stub.js +1 -3
- package/dist/lib/analytics/clients/tracks.js +11 -20
- package/dist/lib/analytics/index.js +4 -11
- package/dist/lib/api/app.js +1 -11
- package/dist/lib/api/cache-purge.js +4 -7
- package/dist/lib/api/feature-flags.js +1 -4
- package/dist/lib/api/http.js +9 -15
- package/dist/lib/api/user.js +1 -7
- package/dist/lib/api.js +17 -19
- package/dist/lib/app-logs/app-logs.js +2 -9
- package/dist/lib/app.js +2 -5
- package/dist/lib/cli/apiConfig.js +4 -19
- package/dist/lib/cli/command.js +43 -133
- package/dist/lib/cli/config.js +1 -5
- package/dist/lib/cli/envAlias.js +14 -15
- package/dist/lib/cli/exit.js +4 -6
- package/dist/lib/cli/format.js +8 -50
- package/dist/lib/cli/progress.js +13 -42
- package/dist/lib/cli/prompt.js +1 -5
- package/dist/lib/cli/repo.js +7 -20
- package/dist/lib/client-file-uploader.js +44 -97
- package/dist/lib/config/software.js +2 -52
- package/dist/lib/constants/dev-environment.js +1 -2
- package/dist/lib/constants/file-size.js +1 -1
- package/dist/lib/constants/vipgo.js +1 -1
- package/dist/lib/dev-environment/dev-environment-cli.js +68 -155
- package/dist/lib/dev-environment/dev-environment-core.js +73 -194
- package/dist/lib/dev-environment/dev-environment-lando.js +16 -71
- package/dist/lib/env.js +1 -4
- package/dist/lib/envvar/api-delete.js +1 -4
- package/dist/lib/envvar/api-get-all.js +1 -4
- package/dist/lib/envvar/api-get.js +1 -2
- package/dist/lib/envvar/api-list.js +3 -4
- package/dist/lib/envvar/api-set.js +1 -4
- package/dist/lib/envvar/api.js +5 -16
- package/dist/lib/envvar/input.js +1 -8
- package/dist/lib/envvar/logging.js +2 -6
- package/dist/lib/envvar/read-file.js +1 -3
- package/dist/lib/http/proxy-agent.js +17 -22
- package/dist/lib/keychain/browser.js +1 -4
- package/dist/lib/keychain/insecure.js +1 -10
- package/dist/lib/keychain/secure.js +1 -8
- package/dist/lib/keychain.js +4 -8
- package/dist/lib/logout.js +0 -6
- package/dist/lib/media-import/media-file-import.js +3 -7
- package/dist/lib/media-import/progress.js +6 -17
- package/dist/lib/media-import/status.js +14 -65
- package/dist/lib/read-file.js +1 -6
- package/dist/lib/rollbar.js +1 -7
- package/dist/lib/search-and-replace.js +9 -41
- package/dist/lib/site-import/db-file-import.js +3 -9
- package/dist/lib/site-import/status.js +17 -74
- package/dist/lib/token.js +1 -33
- package/dist/lib/tracker.js +4 -20
- package/dist/lib/user-error.js +0 -2
- package/dist/lib/validations/is-multi-site-sql-dump.js +4 -12
- package/dist/lib/validations/is-multi-site.js +5 -21
- package/dist/lib/validations/is-multisite-domain-mapped.js +5 -31
- package/dist/lib/validations/line-by-line.js +4 -16
- package/dist/lib/validations/site-type.js +10 -19
- package/dist/lib/validations/sql.js +11 -76
- package/dist/lib/validations/utils.js +1 -6
- package/dist/lib/vip-import-validate-files.js +82 -109
- package/npm-shrinkwrap.json +2407 -1800
- package/package.json +18 -15
package/dist/lib/token.js
CHANGED
|
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.SERVICE = void 0;
|
|
7
|
-
|
|
8
7
|
var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
|
|
9
|
-
|
|
10
8
|
var _uuid2 = require("uuid");
|
|
11
|
-
|
|
12
9
|
var _keychain = _interopRequireDefault(require("./keychain"));
|
|
13
|
-
|
|
14
10
|
var _api = require("./api");
|
|
15
|
-
|
|
16
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
12
|
|
|
18
13
|
/**
|
|
@@ -22,111 +17,84 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
22
17
|
/**
|
|
23
18
|
* Internal dependencies
|
|
24
19
|
*/
|
|
20
|
+
|
|
25
21
|
// Config
|
|
26
22
|
const SERVICE = 'vip-go-cli';
|
|
27
23
|
exports.SERVICE = SERVICE;
|
|
28
|
-
|
|
29
24
|
class Token {
|
|
30
25
|
constructor(token) {
|
|
31
26
|
if (!token) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
token = token.trim();
|
|
36
|
-
|
|
37
30
|
if (!token.length) {
|
|
38
31
|
return;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
33
|
const decodedToken = (0, _jwtDecode.default)(token);
|
|
42
34
|
this.raw = token;
|
|
43
|
-
|
|
44
35
|
if (decodedToken.id) {
|
|
45
36
|
this.id = decodedToken.id;
|
|
46
37
|
}
|
|
47
|
-
|
|
48
38
|
if (decodedToken.iat) {
|
|
49
39
|
this.iat = new Date(decodedToken.iat * 1000);
|
|
50
40
|
}
|
|
51
|
-
|
|
52
41
|
if (decodedToken.exp) {
|
|
53
42
|
this.exp = new Date(decodedToken.exp * 1000);
|
|
54
43
|
}
|
|
55
44
|
}
|
|
56
|
-
|
|
57
45
|
valid() {
|
|
58
46
|
if (!this.id) {
|
|
59
47
|
return false;
|
|
60
48
|
}
|
|
61
|
-
|
|
62
49
|
if (!this.iat) {
|
|
63
50
|
return false;
|
|
64
51
|
}
|
|
65
|
-
|
|
66
52
|
const now = new Date();
|
|
67
|
-
|
|
68
53
|
if (!this.exp) {
|
|
69
54
|
return now > this.iat;
|
|
70
55
|
}
|
|
71
|
-
|
|
72
56
|
return now > this.iat && now < this.exp;
|
|
73
57
|
}
|
|
74
|
-
|
|
75
58
|
expired() {
|
|
76
59
|
if (!this.exp) {
|
|
77
60
|
return false;
|
|
78
61
|
}
|
|
79
|
-
|
|
80
62
|
const now = new Date();
|
|
81
63
|
return now > this.exp;
|
|
82
64
|
}
|
|
83
|
-
|
|
84
65
|
static async uuid() {
|
|
85
66
|
const service = Token.getServiceName('-uuid');
|
|
86
|
-
|
|
87
67
|
let _uuid = await _keychain.default.getPassword(service);
|
|
88
|
-
|
|
89
68
|
if (!_uuid) {
|
|
90
69
|
_uuid = (0, _uuid2.v4)();
|
|
91
70
|
await _keychain.default.setPassword(service, _uuid);
|
|
92
71
|
}
|
|
93
|
-
|
|
94
72
|
return _uuid;
|
|
95
73
|
}
|
|
96
|
-
|
|
97
74
|
static async setUuid(_uuid) {
|
|
98
75
|
const service = Token.getServiceName('-uuid');
|
|
99
76
|
await _keychain.default.setPassword(service, _uuid);
|
|
100
77
|
}
|
|
101
|
-
|
|
102
78
|
static async set(token) {
|
|
103
79
|
const service = Token.getServiceName();
|
|
104
80
|
return _keychain.default.setPassword(service, token);
|
|
105
81
|
}
|
|
106
|
-
|
|
107
82
|
static async get() {
|
|
108
83
|
const service = Token.getServiceName();
|
|
109
84
|
const token = await _keychain.default.getPassword(service);
|
|
110
85
|
return new Token(token);
|
|
111
86
|
}
|
|
112
|
-
|
|
113
87
|
static async purge() {
|
|
114
88
|
const service = Token.getServiceName();
|
|
115
89
|
return _keychain.default.deletePassword(service);
|
|
116
90
|
}
|
|
117
|
-
|
|
118
91
|
static getServiceName(modifier = '') {
|
|
119
92
|
let service = SERVICE;
|
|
120
|
-
|
|
121
93
|
if (_api.PRODUCTION_API_HOST !== _api.API_HOST) {
|
|
122
94
|
const sanitized = _api.API_HOST.replace(/[^a-z0-9]/gi, '-');
|
|
123
|
-
|
|
124
95
|
service = `${SERVICE}:${sanitized}`;
|
|
125
96
|
}
|
|
126
|
-
|
|
127
97
|
return `${service}${modifier}`;
|
|
128
98
|
}
|
|
129
|
-
|
|
130
99
|
}
|
|
131
|
-
|
|
132
100
|
exports.default = Token;
|
package/dist/lib/tracker.js
CHANGED
|
@@ -3,41 +3,31 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.trackEvent = trackEvent;
|
|
7
6
|
exports.aliasUser = aliasUser;
|
|
7
|
+
exports.trackEvent = trackEvent;
|
|
8
8
|
exports.trackEventWithEnv = trackEventWithEnv;
|
|
9
|
-
|
|
10
9
|
var _index = _interopRequireDefault(require("./analytics/index"));
|
|
11
|
-
|
|
12
10
|
var _tracks = _interopRequireDefault(require("./analytics/clients/tracks"));
|
|
13
|
-
|
|
14
11
|
var _pendo = _interopRequireDefault(require("./analytics/clients/pendo"));
|
|
15
|
-
|
|
16
12
|
var _token = _interopRequireDefault(require("./token"));
|
|
17
|
-
|
|
18
13
|
var _config = _interopRequireDefault(require("./cli/config"));
|
|
19
|
-
|
|
20
14
|
var _env = _interopRequireDefault(require("./env"));
|
|
21
|
-
|
|
22
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
16
|
/**
|
|
25
17
|
* External dependencies
|
|
26
18
|
*/
|
|
27
19
|
const debug = require('debug')('@automattic/vip:analytics');
|
|
20
|
+
|
|
28
21
|
/**
|
|
29
22
|
* Internal dependencies
|
|
30
23
|
*/
|
|
31
24
|
|
|
32
|
-
|
|
33
25
|
let analytics = null;
|
|
34
|
-
|
|
35
26
|
async function init() {
|
|
36
27
|
const uuid = await _token.default.uuid();
|
|
37
28
|
const clients = [];
|
|
38
29
|
const tracksUserType = _config.default.tracksUserType;
|
|
39
30
|
const tracksEventPrefix = _config.default.tracksEventPrefix;
|
|
40
|
-
|
|
41
31
|
if (tracksUserType && tracksEventPrefix) {
|
|
42
32
|
clients.push(new _tracks.default(uuid, tracksUserType, tracksEventPrefix, _env.default));
|
|
43
33
|
clients.push(new _pendo.default({
|
|
@@ -46,22 +36,18 @@ async function init() {
|
|
|
46
36
|
userId: uuid
|
|
47
37
|
}));
|
|
48
38
|
}
|
|
49
|
-
|
|
50
39
|
analytics = new _index.default({
|
|
51
40
|
clients
|
|
52
41
|
});
|
|
53
42
|
return analytics;
|
|
54
43
|
}
|
|
55
|
-
|
|
56
44
|
async function getInstance() {
|
|
57
45
|
if (analytics) {
|
|
58
46
|
return analytics;
|
|
59
47
|
}
|
|
60
|
-
|
|
61
48
|
analytics = await init();
|
|
62
49
|
return analytics;
|
|
63
50
|
}
|
|
64
|
-
|
|
65
51
|
async function trackEvent(...args) {
|
|
66
52
|
try {
|
|
67
53
|
await _token.default.uuid();
|
|
@@ -71,7 +57,6 @@ async function trackEvent(...args) {
|
|
|
71
57
|
debug('trackEvent() failed', err);
|
|
72
58
|
}
|
|
73
59
|
}
|
|
74
|
-
|
|
75
60
|
async function aliasUser(vipUserId) {
|
|
76
61
|
try {
|
|
77
62
|
if (vipUserId) {
|
|
@@ -80,16 +65,15 @@ async function aliasUser(vipUserId) {
|
|
|
80
65
|
_ut: _config.default.tracksUserType,
|
|
81
66
|
anonid: _token.default.uuid()
|
|
82
67
|
});
|
|
83
|
-
|
|
84
68
|
_token.default.setUuid(vipUserId);
|
|
85
69
|
}
|
|
86
70
|
} catch (err) {
|
|
87
71
|
debug('aliasUser() failed', err);
|
|
88
72
|
}
|
|
89
73
|
}
|
|
90
|
-
|
|
91
74
|
async function trackEventWithEnv(appId, envId, eventName, eventProps = {}) {
|
|
92
|
-
return trackEvent(eventName, {
|
|
75
|
+
return trackEvent(eventName, {
|
|
76
|
+
...eventProps,
|
|
93
77
|
app_id: appId,
|
|
94
78
|
env_id: envId
|
|
95
79
|
});
|
package/dist/lib/user-error.js
CHANGED
|
@@ -4,11 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
function UserError(message) {
|
|
9
8
|
this.message = message;
|
|
10
9
|
}
|
|
11
|
-
|
|
12
10
|
UserError.prototype = new Error();
|
|
13
11
|
var _default = UserError;
|
|
14
12
|
exports.default = _default;
|
|
@@ -3,17 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.sqlDumpLineIsMultiSite = sqlDumpLineIsMultiSite;
|
|
7
6
|
exports.isMultiSiteDumpFile = isMultiSiteDumpFile;
|
|
8
|
-
|
|
7
|
+
exports.sqlDumpLineIsMultiSite = sqlDumpLineIsMultiSite;
|
|
9
8
|
var _lineByLine = require("./line-by-line");
|
|
10
|
-
|
|
11
9
|
var exit = _interopRequireWildcard(require("../cli/exit"));
|
|
12
|
-
|
|
13
10
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
|
|
15
11
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
|
|
17
12
|
/**
|
|
18
13
|
*
|
|
19
14
|
* @format
|
|
@@ -26,33 +21,30 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
26
21
|
/**
|
|
27
22
|
* Internal dependencies
|
|
28
23
|
*/
|
|
24
|
+
|
|
29
25
|
const SQL_CREATE_TABLE_IS_MULTISITE_REGEX = /^CREATE TABLE `?(wp_\d+_[a-z0-9_]*|wp_blogs)/i;
|
|
30
26
|
const SQL_CONTAINS_MULTISITE_WP_USERS_REGEX = /\`spam\` tinyint\(2\)|\`deleted\` tinyint\(2\)/i;
|
|
31
|
-
|
|
32
27
|
function sqlDumpLineIsMultiSite(line) {
|
|
33
28
|
// determine if we're on a CREATE TABLE statement line what has eg. wp_\d_options OR wp_blogs
|
|
34
29
|
// also check if we're on a line that defines the additional two columns found on the wp_users table for multisites
|
|
35
30
|
if (SQL_CREATE_TABLE_IS_MULTISITE_REGEX.test(line) || SQL_CONTAINS_MULTISITE_WP_USERS_REGEX.test(line)) {
|
|
36
31
|
return true;
|
|
37
32
|
}
|
|
38
|
-
|
|
39
33
|
return false;
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
function isMultiSiteDumpFile(fileName) {
|
|
43
36
|
return new Promise(async resolve => {
|
|
44
37
|
const readInterface = await (0, _lineByLine.getReadInterface)(fileName);
|
|
45
38
|
readInterface.on('line', line => {
|
|
46
39
|
const result = sqlDumpLineIsMultiSite(line);
|
|
47
|
-
|
|
48
40
|
if (true === result) {
|
|
49
41
|
resolve(true);
|
|
50
42
|
}
|
|
51
43
|
});
|
|
52
44
|
readInterface.on('error', () => {
|
|
53
45
|
exit.withError('An error was encountered while reading your SQL dump file. Please verify the file contents.');
|
|
54
|
-
});
|
|
55
|
-
|
|
46
|
+
});
|
|
47
|
+
// Block until the processing completes
|
|
56
48
|
await new Promise(resolveBlock => readInterface.on('close', resolveBlock));
|
|
57
49
|
resolve(false);
|
|
58
50
|
});
|
|
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.isMultiSiteInSiteMeta = isMultiSiteInSiteMeta;
|
|
7
|
-
|
|
8
7
|
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
9
|
-
|
|
10
8
|
var _api = _interopRequireDefault(require("../api"));
|
|
11
|
-
|
|
12
9
|
var _tracker = require("../tracker");
|
|
13
|
-
|
|
14
10
|
var exit = _interopRequireWildcard(require("../cli/exit"));
|
|
15
|
-
|
|
16
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
-
|
|
18
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
|
|
20
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
14
|
/**
|
|
23
15
|
*
|
|
24
16
|
* @format
|
|
@@ -31,21 +23,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
31
23
|
/**
|
|
32
24
|
* Internal dependencies
|
|
33
25
|
*/
|
|
34
|
-
const isMultiSite = new WeakMap();
|
|
35
26
|
|
|
27
|
+
const isMultiSite = new WeakMap();
|
|
36
28
|
async function isMultiSiteInSiteMeta(appId, envId) {
|
|
37
29
|
var _res, _res$data, _res$data$app;
|
|
30
|
+
const track = _tracker.trackEventWithEnv.bind(null, appId, envId);
|
|
38
31
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
// if we've already been through this, avoid doing it again within the same process
|
|
42
33
|
if (isMultiSite.has(arguments) && 'boolean' === typeof isMultiSite.get(arguments)) {
|
|
43
34
|
return Boolean(isMultiSite.get(arguments));
|
|
44
35
|
}
|
|
45
|
-
|
|
46
36
|
const api = await (0, _api.default)();
|
|
47
37
|
let res;
|
|
48
|
-
|
|
49
38
|
try {
|
|
50
39
|
res = await api.query({
|
|
51
40
|
query: (0, _graphqlTag.default)`
|
|
@@ -77,23 +66,18 @@ async function isMultiSiteInSiteMeta(appId, envId) {
|
|
|
77
66
|
});
|
|
78
67
|
exit.withError(`StartImport call failed: ${GraphQlError}`);
|
|
79
68
|
}
|
|
80
|
-
|
|
81
69
|
if (Array.isArray((_res = res) === null || _res === void 0 ? void 0 : (_res$data = _res.data) === null || _res$data === void 0 ? void 0 : (_res$data$app = _res$data.app) === null || _res$data$app === void 0 ? void 0 : _res$data$app.environments)) {
|
|
82
70
|
const environments = res.data.app.environments;
|
|
83
|
-
|
|
84
71
|
if (!environments.length) {
|
|
85
72
|
isMultiSite.set(arguments, false);
|
|
86
73
|
return false;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
74
|
+
}
|
|
75
|
+
// we asked for one result with one appId and one envId, so...
|
|
90
76
|
const thisEnv = environments[0];
|
|
91
|
-
|
|
92
77
|
if (thisEnv.isMultiSite || thisEnv.isSubdirectoryMultisite) {
|
|
93
78
|
isMultiSite.set(arguments, true);
|
|
94
79
|
return true;
|
|
95
80
|
}
|
|
96
81
|
}
|
|
97
|
-
|
|
98
82
|
return false;
|
|
99
83
|
}
|
|
@@ -3,23 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getPrimaryDomainFromSQL = exports.getPrimaryDomain = void 0;
|
|
6
7
|
exports.isMultisitePrimaryDomainMapped = isMultisitePrimaryDomainMapped;
|
|
7
|
-
exports.
|
|
8
|
-
|
|
8
|
+
exports.maybeSearchReplacePrimaryDomain = void 0;
|
|
9
9
|
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
10
|
-
|
|
11
10
|
var _api = _interopRequireDefault(require("../api"));
|
|
12
|
-
|
|
13
11
|
var _tracker = require("../tracker");
|
|
14
|
-
|
|
15
12
|
var exit = _interopRequireWildcard(require("../cli/exit"));
|
|
16
|
-
|
|
17
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
|
-
|
|
19
14
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
20
|
-
|
|
21
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
-
|
|
23
16
|
/**
|
|
24
17
|
*
|
|
25
18
|
* @format
|
|
@@ -41,15 +34,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
41
34
|
*/
|
|
42
35
|
const getPrimaryDomainFromSQL = statements => {
|
|
43
36
|
var _statements$;
|
|
44
|
-
|
|
45
37
|
if (!statements.length) {
|
|
46
38
|
return '';
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
const SQL_WP_SITE_DOMAINS_REGEX = /\(1,'(.*?)'/s;
|
|
50
41
|
const matches = (_statements$ = statements[0]) === null || _statements$ === void 0 ? void 0 : _statements$.join('').replace(/\s/g, '').match(SQL_WP_SITE_DOMAINS_REGEX);
|
|
51
42
|
return matches ? matches[1] : '';
|
|
52
43
|
};
|
|
44
|
+
|
|
53
45
|
/**
|
|
54
46
|
* Apply search-replacements to a domain
|
|
55
47
|
*
|
|
@@ -57,27 +49,21 @@ const getPrimaryDomainFromSQL = statements => {
|
|
|
57
49
|
* @param {(string|array)} searchReplace The search-replace pairs
|
|
58
50
|
* @returns {string} The processed domain
|
|
59
51
|
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
52
|
exports.getPrimaryDomainFromSQL = getPrimaryDomainFromSQL;
|
|
63
|
-
|
|
64
53
|
const maybeSearchReplacePrimaryDomain = function (domain, searchReplace) {
|
|
65
54
|
if (searchReplace) {
|
|
66
55
|
var _primaryDomainReplace;
|
|
67
|
-
|
|
68
56
|
let pairs = searchReplace;
|
|
69
|
-
|
|
70
57
|
if (!Array.isArray(pairs)) {
|
|
71
58
|
pairs = [searchReplace];
|
|
72
59
|
}
|
|
73
|
-
|
|
74
60
|
const domainReplacements = pairs.map(pair => pair.split(','));
|
|
75
61
|
const primaryDomainReplacement = domainReplacements.find(pair => pair[0] === domain);
|
|
76
62
|
return (_primaryDomainReplace = primaryDomainReplacement === null || primaryDomainReplacement === void 0 ? void 0 : primaryDomainReplacement[1]) !== null && _primaryDomainReplace !== void 0 ? _primaryDomainReplace : domain;
|
|
77
63
|
}
|
|
78
|
-
|
|
79
64
|
return domain;
|
|
80
65
|
};
|
|
66
|
+
|
|
81
67
|
/**
|
|
82
68
|
* Get the primary domain as it will be imported
|
|
83
69
|
*
|
|
@@ -85,14 +71,12 @@ const maybeSearchReplacePrimaryDomain = function (domain, searchReplace) {
|
|
|
85
71
|
* @param {(string|array)} searchReplace The search-replace pairs
|
|
86
72
|
* @returns {string} The replaced domain, or the domain as found in the SQL dump
|
|
87
73
|
*/
|
|
88
|
-
|
|
89
|
-
|
|
90
74
|
exports.maybeSearchReplacePrimaryDomain = maybeSearchReplacePrimaryDomain;
|
|
91
|
-
|
|
92
75
|
const getPrimaryDomain = function (statements, searchReplace) {
|
|
93
76
|
const domainFromSQL = getPrimaryDomainFromSQL(statements);
|
|
94
77
|
return maybeSearchReplacePrimaryDomain(domainFromSQL, searchReplace);
|
|
95
78
|
};
|
|
79
|
+
|
|
96
80
|
/**
|
|
97
81
|
* Gets the mapped domains and checks if the primary domain from the provided SQL dump is one of them
|
|
98
82
|
*
|
|
@@ -101,18 +85,12 @@ const getPrimaryDomain = function (statements, searchReplace) {
|
|
|
101
85
|
* @param {string} primaryDomain The primary domain found in the provided SQL file
|
|
102
86
|
* @returns {boolean} Whether the primary domain is mapped
|
|
103
87
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
88
|
exports.getPrimaryDomain = getPrimaryDomain;
|
|
107
|
-
|
|
108
89
|
async function isMultisitePrimaryDomainMapped(appId, envId, primaryDomain) {
|
|
109
90
|
var _res, _res$data, _res$data$app, _environments$, _environments$$domain, _environments$$domain2;
|
|
110
|
-
|
|
111
91
|
const track = _tracker.trackEventWithEnv.bind(null, appId, envId);
|
|
112
|
-
|
|
113
92
|
const api = await (0, _api.default)();
|
|
114
93
|
let res;
|
|
115
|
-
|
|
116
94
|
try {
|
|
117
95
|
res = await api.query({
|
|
118
96
|
query: (0, _graphqlTag.default)`
|
|
@@ -145,17 +123,13 @@ async function isMultisitePrimaryDomainMapped(appId, envId, primaryDomain) {
|
|
|
145
123
|
});
|
|
146
124
|
exit.withError(`StartImport call failed: ${GraphQlError}`);
|
|
147
125
|
}
|
|
148
|
-
|
|
149
126
|
if (!Array.isArray((_res = res) === null || _res === void 0 ? void 0 : (_res$data = _res.data) === null || _res$data === void 0 ? void 0 : (_res$data$app = _res$data.app) === null || _res$data$app === void 0 ? void 0 : _res$data$app.environments)) {
|
|
150
127
|
return false;
|
|
151
128
|
}
|
|
152
|
-
|
|
153
129
|
const environments = res.data.app.environments;
|
|
154
|
-
|
|
155
130
|
if (!environments.length) {
|
|
156
131
|
return false;
|
|
157
132
|
}
|
|
158
|
-
|
|
159
133
|
const mappedDomains = (_environments$ = environments[0]) === null || _environments$ === void 0 ? void 0 : (_environments$$domain = _environments$.domains) === null || _environments$$domain === void 0 ? void 0 : (_environments$$domain2 = _environments$$domain.nodes) === null || _environments$$domain2 === void 0 ? void 0 : _environments$$domain2.map(domain => domain.name);
|
|
160
134
|
return mappedDomains.includes(primaryDomain);
|
|
161
135
|
}
|
|
@@ -3,23 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getReadInterface = getReadInterface;
|
|
7
6
|
exports.fileLineValidations = fileLineValidations;
|
|
8
|
-
|
|
7
|
+
exports.getReadInterface = getReadInterface;
|
|
9
8
|
var _readline = _interopRequireDefault(require("readline"));
|
|
10
|
-
|
|
11
9
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
-
|
|
13
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
-
|
|
15
11
|
var exit = _interopRequireWildcard(require("../cli/exit"));
|
|
16
|
-
|
|
17
12
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
|
-
|
|
19
13
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
20
|
-
|
|
21
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
-
|
|
23
15
|
/**
|
|
24
16
|
*
|
|
25
17
|
* @format
|
|
@@ -32,29 +24,25 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
32
24
|
/**
|
|
33
25
|
* Internal dependencies
|
|
34
26
|
*/
|
|
35
|
-
const debug = (0, _debug.default)('vip:validations:line-by-line');
|
|
36
27
|
|
|
28
|
+
const debug = (0, _debug.default)('vip:validations:line-by-line');
|
|
37
29
|
function openFile(filename, flags = 'r', mode = 666) {
|
|
38
30
|
return new Promise((resolve, reject) => {
|
|
39
31
|
_fs.default.open(filename, flags, mode, (err, fd) => {
|
|
40
32
|
if (err) {
|
|
41
33
|
return reject(err);
|
|
42
34
|
}
|
|
43
|
-
|
|
44
35
|
resolve(fd);
|
|
45
36
|
});
|
|
46
37
|
});
|
|
47
38
|
}
|
|
48
|
-
|
|
49
39
|
async function getReadInterface(filename) {
|
|
50
40
|
let fd;
|
|
51
|
-
|
|
52
41
|
try {
|
|
53
42
|
fd = await openFile(filename);
|
|
54
43
|
} catch (err) {
|
|
55
44
|
exit.withError('The file at the provided path is either missing or not readable. Please check the input and try again.');
|
|
56
45
|
}
|
|
57
|
-
|
|
58
46
|
return _readline.default.createInterface({
|
|
59
47
|
input: _fs.default.createReadStream('', {
|
|
60
48
|
fd
|
|
@@ -63,7 +51,6 @@ async function getReadInterface(filename) {
|
|
|
63
51
|
console: false
|
|
64
52
|
});
|
|
65
53
|
}
|
|
66
|
-
|
|
67
54
|
async function fileLineValidations(appId, envId, fileName, validations, searchReplace) {
|
|
68
55
|
const isImport = true;
|
|
69
56
|
const readInterface = await getReadInterface(fileName);
|
|
@@ -75,8 +62,9 @@ async function fileLineValidations(appId, envId, fileName, validations, searchRe
|
|
|
75
62
|
});
|
|
76
63
|
readInterface.on('error', err => {
|
|
77
64
|
throw new Error(` Error validating input file: ${err.toString()}`);
|
|
78
|
-
});
|
|
65
|
+
});
|
|
79
66
|
|
|
67
|
+
// Block until the processing completes
|
|
80
68
|
await new Promise(resolve => readInterface.on('close', resolve));
|
|
81
69
|
readInterface.close();
|
|
82
70
|
return Promise.all(validations.map(async validation => {
|
|
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.siteTypeValidations = void 0;
|
|
7
|
-
|
|
8
7
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
-
|
|
10
8
|
var _tracker = require("../tracker");
|
|
11
|
-
|
|
12
9
|
var _isMultiSiteSqlDump = require("./is-multi-site-sql-dump");
|
|
13
|
-
|
|
14
10
|
var _isMultiSite = require("./is-multi-site");
|
|
15
|
-
|
|
16
11
|
var _isMultisiteDomainMapped = require("./is-multisite-domain-mapped");
|
|
17
|
-
|
|
18
12
|
var _utils = require("./utils");
|
|
19
|
-
|
|
20
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
14
|
/**
|
|
23
15
|
*
|
|
24
16
|
* @format
|
|
@@ -31,6 +23,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
31
23
|
/**
|
|
32
24
|
* Internal dependencies
|
|
33
25
|
*/
|
|
26
|
+
|
|
34
27
|
const debug = (0, _debug.default)('vip:vip-import-sql');
|
|
35
28
|
let isMultiSiteSqlDump = false;
|
|
36
29
|
let wpSiteInsertStatement;
|
|
@@ -39,7 +32,6 @@ const siteTypeValidations = {
|
|
|
39
32
|
execute: line => {
|
|
40
33
|
const lineIsMultiSite = (0, _isMultiSiteSqlDump.sqlDumpLineIsMultiSite)(line);
|
|
41
34
|
wpSiteInsertStatement = getWpSiteInsertStatement(line);
|
|
42
|
-
|
|
43
35
|
if (lineIsMultiSite) {
|
|
44
36
|
isMultiSiteSqlDump = true;
|
|
45
37
|
}
|
|
@@ -50,36 +42,35 @@ const siteTypeValidations = {
|
|
|
50
42
|
searchReplace
|
|
51
43
|
}) => {
|
|
52
44
|
const isMultiSite = await (0, _isMultiSite.isMultiSiteInSiteMeta)(appId, envId);
|
|
53
|
-
|
|
54
45
|
const track = _tracker.trackEventWithEnv.bind(null, appId, envId);
|
|
55
|
-
|
|
56
46
|
debug(`\nAppId: ${appId} is ${isMultiSite ? 'a multisite.' : 'not a multisite'}`);
|
|
57
47
|
debug(`The SQL dump provided is ${isMultiSiteSqlDump ? 'from a multisite.' : 'not from a multisite'}\n`);
|
|
58
|
-
|
|
59
48
|
if (!isMultiSite && isMultiSiteSqlDump) {
|
|
60
49
|
await track('import_sql_command_error', {
|
|
61
50
|
error_type: 'not-multisite-with-multisite-sql-dump'
|
|
62
51
|
});
|
|
63
52
|
throw new Error('You have provided a multisite SQL dump file for import into a single site (non-multisite).');
|
|
64
53
|
}
|
|
65
|
-
|
|
66
54
|
if (isMultiSite && !isMultiSiteSqlDump) {
|
|
67
55
|
await track('import_sql_command_error', {
|
|
68
56
|
error_type: 'subsite-import-without-subsite-sql-dump'
|
|
69
57
|
});
|
|
70
58
|
throw new Error('You have requested a subsite SQL import but have not provided a subsite compatiable SQL dump.');
|
|
71
|
-
}
|
|
59
|
+
}
|
|
72
60
|
|
|
61
|
+
// Get Primary Domain
|
|
62
|
+
const primaryDomainFromSQL = (0, _isMultisiteDomainMapped.getPrimaryDomain)(wpSiteInsertStatement, searchReplace);
|
|
73
63
|
|
|
74
|
-
|
|
64
|
+
// Check if Primary Domain exists (empty string does not qualify)
|
|
65
|
+
const primaryDomainExists = primaryDomainFromSQL || '' !== primaryDomainFromSQL;
|
|
75
66
|
|
|
76
|
-
|
|
67
|
+
// Check if primary domain is mapped only if it exists
|
|
77
68
|
// Also saves on a call to Parker by checking ahead
|
|
78
|
-
|
|
79
69
|
if (primaryDomainExists) {
|
|
80
|
-
const isPrimaryDomainMapped = await (0, _isMultisiteDomainMapped.isMultisitePrimaryDomainMapped)(appId, envId, primaryDomainFromSQL);
|
|
81
|
-
// then throw an error
|
|
70
|
+
const isPrimaryDomainMapped = await (0, _isMultisiteDomainMapped.isMultisitePrimaryDomainMapped)(appId, envId, primaryDomainFromSQL);
|
|
82
71
|
|
|
72
|
+
// If site is multisite AND the primary domain is exists AND the primary is unmapped
|
|
73
|
+
// then throw an error
|
|
83
74
|
if (isMultiSite && !isPrimaryDomainMapped) {
|
|
84
75
|
await track('import_sql_command_error', {
|
|
85
76
|
error_type: 'multisite-import-where-primary-domain-unmapped'
|