@automattic/vip 2.31.0-dev1 → 2.31.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 CHANGED
@@ -1,5 +1,30 @@
1
1
  ## Changelog
2
2
 
3
+ ### 2.31.0
4
+
5
+ - #1397 feature(dev-env): Add ability to sync multisites
6
+ - #1399 chore(dev-deps): Remove stub type definitions
7
+ - #1394 FORNO-1609: Combine all error events into one error event
8
+ - #1345 feat(dev-env): Add Photon
9
+ - #1398 Fix coverage generation
10
+ - #1395 Add types for the other ways of using enquirer
11
+ - #1388 Typescript: refactor `vip-whoami`
12
+ - #1393 refactor: Convert `lib/{app-logs,envvar}` to TypeScript
13
+ - #1392 refactor: Convert `lib/config` to TypeScript
14
+ - #1391 refactor: Convert lib to TypeScript
15
+ - #1390 chore(deps): Update @automattic/vip-search-replace to 1.1.1
16
+ - #1389 Replace 'site' by 'environment' in error msg
17
+ - #1385 refactor: Convert lib/api to TypeScript
18
+ - #1387 chore(deps): Update @automattic/vip-search-replace to 1.1.0
19
+ - #1386 fix: Fix `getAbsolutePath()` and convert `utils.js` to TypeScript
20
+ - #1383 fix(dev-env): Pull uniqueLabel field from backend
21
+ - #1382 test: Reduce noise from tests
22
+ - #1384 fix: Add return type to parseEnvAliasFromArgv()
23
+ - #1381 refactor: Convert lib/cli and dependencies to TypeScript
24
+ - #1377 chore: Configure linting for TS files
25
+ - #1380 chore(dev-deps): Remove jest-environment-jsdom
26
+ - #1378 refactor: Convert analytics and dependencies to TypeScript
27
+
3
28
  ### 2.30.0
4
29
 
5
30
  - #1264 feature(dev-env): Add dev-env-sync-sql command
@@ -222,6 +222,20 @@ services:
222
222
  LANDO_NEEDS_EXEC: 1
223
223
  <% } %>
224
224
 
225
+ <% if ( photon ) { %>
226
+ photon:
227
+ type: compose
228
+ services:
229
+ image: ghcr.io/automattic/vip-container-images/photon:latest
230
+ command: /usr/sbin/php-fpm
231
+ environment:
232
+ LANDO_NO_USER_PERMS: 1
233
+ LANDO_NO_SCRIPTS: 1
234
+ LANDO_NEEDS_EXEC: 1
235
+ volumes:
236
+ - ./uploads:/usr/share/webapps/photon/uploads:ro
237
+ <% } %>
238
+
225
239
  tooling:
226
240
  wp:
227
241
  service: php
@@ -1,6 +1,27 @@
1
+ <% if ( photon ) { %>
2
+
3
+ location ^~ /wp-content/uploads/ {
4
+ expires max;
5
+ log_not_found off;
1
6
  <% if ( mediaRedirectDomain ) { %>
7
+ if (!-f $request_filename) {
8
+ rewrite ^/(.*)$ <%= mediaRedirectDomain %>/$1 redirect;
9
+ }
10
+ <% } %>
11
+
12
+ include fastcgi_params;
13
+ fastcgi_param DOCUMENT_ROOT /usr/share/webapps/photon;
14
+ fastcgi_param SCRIPT_FILENAME /usr/share/webapps/photon/index.php;
15
+ fastcgi_param SCRIPT_NAME /index.php;
16
+
17
+ if ($request_uri ~* \.(gif|jpe?g|png)\?) {
18
+ fastcgi_pass photon:9000;
19
+ }
20
+ }
21
+
22
+ <% } else if ( mediaRedirectDomain ) { %>
2
23
 
3
- location ~* /wp-content/uploads {
24
+ location ^~ /wp-content/uploads {
4
25
  expires max;
5
26
  log_not_found off;
6
27
  try_files $uri @prod_site;
@@ -10,4 +31,4 @@ location @prod_site {
10
31
  rewrite ^/(.*)$ <%= mediaRedirectDomain %>/$1 redirect;
11
32
  }
12
33
 
13
- <% } %>
34
+ <% } %>
@@ -29,7 +29,8 @@ const userMap = {
29
29
  elasticsearch: 'elasticsearch',
30
30
  phpmyadmin: 'www-data',
31
31
  mailhog: 'mailhog',
32
- mailpit: 'root'
32
+ mailpit: 'root',
33
+ photon: 'root'
33
34
  };
34
35
  const examples = [{
35
36
  usage: `${_devEnvironment.DEV_ENVIRONMENT_FULL_COMMAND} shell`,
@@ -62,7 +62,8 @@ const appQuery = `
62
62
  const trackerFn = (0, _tracker.makeCommandTracker)('dev_env_sync_sql', {
63
63
  app: app.id,
64
64
  env: env.uniqueLabel,
65
- slug
65
+ slug,
66
+ multisite: env.isMultisite
66
67
  });
67
68
  await trackerFn('execute');
68
69
  const lando = await (0, _devEnvironmentLando.bootstrapLando)();
@@ -74,6 +75,8 @@ const appQuery = `
74
75
  throw new _userError.default('Environment needs to be started first');
75
76
  }
76
77
  const cmd = new _devEnvSyncSql.DevEnvSyncSQLCommand(app, env, slug, trackerFn);
78
+ // TODO: There's a function called handleCLIException for dev-env that handles exceptions but DevEnvSyncSQLCommand has its own implementation.
79
+ // We should probably use handleCLIException instead?
77
80
  await cmd.run();
78
81
  await trackerFn('success');
79
82
  });
File without changes
@@ -64,6 +64,7 @@ cmd.argv(process.argv, async (arg, opt) => {
64
64
  phpmyadmin: currentInstanceData.phpmyadmin,
65
65
  xdebug: currentInstanceData.xdebug,
66
66
  mailpit: (_currentInstanceData$ = currentInstanceData.mailpit) !== null && _currentInstanceData$ !== void 0 ? _currentInstanceData$ : currentInstanceData.mailhog,
67
+ photon: currentInstanceData.photon,
67
68
  mediaRedirectDomain: currentInstanceData.mediaRedirectDomain,
68
69
  multisite: false,
69
70
  title: ''
@@ -135,7 +135,7 @@ class DevEnvSyncSQLCommand {
135
135
  for (const site of networkSites) {
136
136
  if (!site.blogId || site.blogId === 1) continue;
137
137
  const url = site.homeUrl.replace(/https?:\/\//, '');
138
- if (!this.searchReplaceMap[url]) return;
138
+ if (!this.searchReplaceMap[url]) continue;
139
139
  this.searchReplaceMap[url] = `${site.blogId}.${this.landoDomain}`;
140
140
  }
141
141
  }
@@ -165,6 +165,14 @@ class DevEnvSyncSQLCommand {
165
165
  try {
166
166
  await this.generateExport();
167
167
  } catch (err) {
168
+ // this.generateExport probably catches all exceptions, track the event and runs exit.withError() but if things go really wrong
169
+ // and we have no tracking data, we would at least have it logged here.
170
+ // the following will not get executed if this.generateExport() calls exit.withError() on all exception
171
+ await this.track('error', {
172
+ error_type: 'export_sql_backup',
173
+ error_message: err === null || err === void 0 ? void 0 : err.message,
174
+ stack: err === null || err === void 0 ? void 0 : err.stack
175
+ });
168
176
  exit.withError(`Error exporting SQL backup: ${err === null || err === void 0 ? void 0 : err.message}`);
169
177
  }
170
178
  try {
@@ -172,8 +180,10 @@ class DevEnvSyncSQLCommand {
172
180
  await (0, _clientFileUploader.unzipFile)(this.gzFile, this.sqlFile);
173
181
  console.log(`${_chalk.default.green('✓')} Extracted to ${this.sqlFile}`);
174
182
  } catch (err) {
175
- await this.track('archive_extraction_error', {
176
- errorMessage: err.message
183
+ await this.track('error', {
184
+ error_type: 'archive_extraction',
185
+ error_message: err === null || err === void 0 ? void 0 : err.message,
186
+ stack: err === null || err === void 0 ? void 0 : err.stack
177
187
  });
178
188
  exit.withError(`Error extracting the SQL export: ${err.message}`);
179
189
  }
@@ -181,6 +191,11 @@ class DevEnvSyncSQLCommand {
181
191
  console.log('Extracting site urls from the SQL file...');
182
192
  this.siteUrls = await extractSiteUrls(this.sqlFile);
183
193
  } catch (err) {
194
+ await this.track('error', {
195
+ error_type: 'extract_site_urls',
196
+ error_message: err === null || err === void 0 ? void 0 : err.message,
197
+ stack: err === null || err === void 0 ? void 0 : err.stack
198
+ });
184
199
  exit.withError(`Error extracting site URLs: ${err === null || err === void 0 ? void 0 : err.message}`);
185
200
  }
186
201
  console.log('Generating search-replace configuration...');
@@ -193,8 +208,10 @@ class DevEnvSyncSQLCommand {
193
208
  await this.runSearchReplace();
194
209
  console.log(`${_chalk.default.green('✓')} Search-replace operation is complete`);
195
210
  } catch (err) {
196
- await this.track('search_replace_error', {
197
- errorMessage: err === null || err === void 0 ? void 0 : err.message
211
+ await this.track('error', {
212
+ error_type: 'search_replace',
213
+ error_message: err === null || err === void 0 ? void 0 : err.message,
214
+ stack: err === null || err === void 0 ? void 0 : err.stack
198
215
  });
199
216
  exit.withError(`Error replacing domains: ${err === null || err === void 0 ? void 0 : err.message}`);
200
217
  }
@@ -203,8 +220,10 @@ class DevEnvSyncSQLCommand {
203
220
  await this.runImport();
204
221
  console.log(`${_chalk.default.green('✓')} SQL file imported`);
205
222
  } catch (err) {
206
- await this.track('import_error', {
207
- errorMessage: err === null || err === void 0 ? void 0 : err.message
223
+ await this.track('error', {
224
+ error_type: 'import_sql_file',
225
+ error_message: err === null || err === void 0 ? void 0 : err.message,
226
+ stack: err === null || err === void 0 ? void 0 : err.stack
208
227
  });
209
228
  exit.withError(`Error importing SQL file: ${err === null || err === void 0 ? void 0 : err.message}`);
210
229
  }
@@ -322,7 +322,8 @@ class ExportSQLCommand {
322
322
  } catch (err) {
323
323
  await this.track('error', {
324
324
  error_type: 'cannot_write_to_path',
325
- error_message: `Cannot write to the specified path: ${err === null || err === void 0 ? void 0 : err.message}`
325
+ error_message: `Cannot write to the specified path: ${err === null || err === void 0 ? void 0 : err.message}`,
326
+ stack: err === null || err === void 0 ? void 0 : err.stack
326
327
  });
327
328
  exit.withError(`Cannot write to the specified path: ${err === null || err === void 0 ? void 0 : err.message}`);
328
329
  }
@@ -351,9 +352,16 @@ class ExportSQLCommand {
351
352
  if (err !== null && err !== void 0 && err.message.includes('Backup Copy already in progress')) {
352
353
  await this.track('error', {
353
354
  error_type: 'job_already_running',
354
- error_message: err === null || err === void 0 ? void 0 : err.message
355
+ error_message: err === null || err === void 0 ? void 0 : err.message,
356
+ stack: err === null || err === void 0 ? void 0 : err.stack
355
357
  });
356
358
  exit.withError('There is an export job already running for this environment: ' + `https://dashboard.wpvip.com/apps/${this.app.id}/${this.env.uniqueLabel}/data/database/backups\n` + 'Currently, we allow only one export job at a time, per site. Please try again later.');
359
+ } else {
360
+ await this.track('error', {
361
+ error_type: 'create_export_job',
362
+ error_message: err === null || err === void 0 ? void 0 : err.message,
363
+ stack: err === null || err === void 0 ? void 0 : err.stack
364
+ });
357
365
  }
358
366
  exit.withError(`Error creating export job: ${err === null || err === void 0 ? void 0 : err.message}`);
359
367
  }
@@ -378,7 +386,8 @@ class ExportSQLCommand {
378
386
  this.stopProgressTracker();
379
387
  await this.track('error', {
380
388
  error_type: 'download_failed',
381
- error_message: err === null || err === void 0 ? void 0 : err.message
389
+ error_message: err === null || err === void 0 ? void 0 : err.message,
390
+ stack: err === null || err === void 0 ? void 0 : err.stack
382
391
  });
383
392
  exit.withError(`Error downloading exported file: ${err === null || err === void 0 ? void 0 : err.message}`);
384
393
  }
@@ -307,12 +307,14 @@ async function promptForArguments(preselectedOptions, defaultOptions, suppressPr
307
307
  xdebug: false,
308
308
  xdebugConfig: preselectedOptions.xdebugConfig,
309
309
  siteSlug: '',
310
- mailpit: false
310
+ mailpit: false,
311
+ photon: false
311
312
  };
312
313
  const promptLabels = {
313
314
  xdebug: 'XDebug',
314
315
  phpmyadmin: 'phpMyAdmin',
315
- mailpit: 'Mailpit'
316
+ mailpit: 'Mailpit',
317
+ photon: 'Photon'
316
318
  };
317
319
  if (!instanceData.mediaRedirectDomain && defaultOptions.mediaRedirectDomain) {
318
320
  const mediaRedirectPromptText = `Would you like to redirect to ${defaultOptions.mediaRedirectDomain} for missing media files?`;
@@ -340,7 +342,7 @@ async function promptForArguments(preselectedOptions, defaultOptions, suppressPr
340
342
  } else {
341
343
  instanceData.elasticsearch = await promptForBoolean('Enable Elasticsearch (needed by Enterprise Search)?', !!defaultOptions.elasticsearch);
342
344
  }
343
- for (const service of ['phpmyadmin', 'xdebug', 'mailpit']) {
345
+ for (const service of ['phpmyadmin', 'xdebug', 'mailpit', 'photon']) {
344
346
  if (service in instanceData) {
345
347
  if (service in preselectedOptions) {
346
348
  instanceData[service] = preselectedOptions[service];
@@ -636,7 +638,7 @@ function processVersionOption(value) {
636
638
  }
637
639
  function addDevEnvConfigurationOptions(command) {
638
640
  // We leave the third parameter to undefined on some because the defaults are handled in preProcessInstanceData()
639
- return command.option('wordpress', 'Use a specific WordPress version', undefined, processVersionOption).option(['u', 'mu-plugins'], 'Use a specific mu-plugins changeset or local directory').option('app-code', 'Use the application code from a local directory or use "demo" for VIP skeleton code').option('phpmyadmin', 'Enable PHPMyAdmin component. By default it is disabled', undefined, processBooleanOption).option('xdebug', 'Enable XDebug. By default it is disabled', undefined, processBooleanOption).option('xdebug_config', 'Extra configuration to pass to xdebug via XDEBUG_CONFIG environment variable').option('elasticsearch', 'Enable Elasticsearch (needed by Enterprise Search)', undefined, processBooleanOption).option(['r', 'media-redirect-domain'], 'Domain to redirect for missing media files. This can be used to still have images without the need to import them locally.').option('php', 'Explicitly choose PHP version to use', undefined, processVersionOption).option(['G', 'mailhog'], 'Enable Mailpit. By default it is disabled (deprecated option, please use --mailpit instead)', undefined, processBooleanOption).option(['A', 'mailpit'], 'Enable Mailpit. By default it is disabled', undefined, processBooleanOption);
641
+ return command.option('wordpress', 'Use a specific WordPress version', undefined, processVersionOption).option(['u', 'mu-plugins'], 'Use a specific mu-plugins changeset or local directory').option('app-code', 'Use the application code from a local directory or use "demo" for VIP skeleton code').option('phpmyadmin', 'Enable PHPMyAdmin component. By default it is disabled', undefined, processBooleanOption).option('xdebug', 'Enable XDebug. By default it is disabled', undefined, processBooleanOption).option('xdebug_config', 'Extra configuration to pass to xdebug via XDEBUG_CONFIG environment variable').option('elasticsearch', 'Enable Elasticsearch (needed by Enterprise Search)', undefined, processBooleanOption).option(['r', 'media-redirect-domain'], 'Domain to redirect for missing media files. This can be used to still have images without the need to import them locally.').option('php', 'Explicitly choose PHP version to use', undefined, processVersionOption).option(['G', 'mailhog'], 'Enable Mailpit. By default it is disabled (deprecated option, please use --mailpit instead)', undefined, processBooleanOption).option(['A', 'mailpit'], 'Enable Mailpit. By default it is disabled', undefined, processBooleanOption).option(['H', 'photon'], 'Enable Photon. By default it is disabled', undefined, processBooleanOption);
640
642
  }
641
643
 
642
644
  /**
@@ -94,7 +94,8 @@ async function sanitizeConfiguration(configuration) {
94
94
  phpmyadmin: stringToBooleanIfDefined(configuration.phpmyadmin),
95
95
  xdebug: stringToBooleanIfDefined(configuration.xdebug),
96
96
  mailpit: stringToBooleanIfDefined((_configuration$mailpi = configuration.mailpit) !== null && _configuration$mailpi !== void 0 ? _configuration$mailpi : configuration.mailhog),
97
- 'media-redirect-domain': configuration['media-redirect-domain']
97
+ 'media-redirect-domain': configuration['media-redirect-domain'],
98
+ photon: stringToBooleanIfDefined(configuration.photon)
98
99
  };
99
100
 
100
101
  // Remove undefined values
@@ -119,7 +120,8 @@ function mergeConfigurationFileOptions(preselectedOptions, configurationFileOpti
119
120
  xdebug: configurationFileOptions.xdebug,
120
121
  xdebugConfig: configurationFileOptions['xdebug-config'],
121
122
  mailpit: (_configurationFileOpt = configurationFileOptions.mailpit) !== null && _configurationFileOpt !== void 0 ? _configurationFileOpt : configurationFileOptions.mailhog,
122
- mediaRedirectDomain: configurationFileOptions['media-redirect-domain']
123
+ mediaRedirectDomain: configurationFileOptions['media-redirect-domain'],
124
+ photon: configurationFileOptions.photon
123
125
  };
124
126
  const mergedOptions = {};
125
127
  Object.keys(configurationFileInstanceOptions).forEach(key => {
@@ -146,6 +146,9 @@ function preProcessInstanceData(instanceData) {
146
146
  if (!newInstanceData.phpmyadmin) {
147
147
  newInstanceData.phpmyadmin = false;
148
148
  }
149
+ if (!newInstanceData.photon) {
150
+ newInstanceData.photon = false;
151
+ }
149
152
 
150
153
  // Mailpit migration
151
154
  if (!newInstanceData.mailpit) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@automattic/vip",
3
- "version": "2.31.0-dev1",
3
+ "version": "2.31.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@automattic/vip",
9
- "version": "2.31.0-dev1",
9
+ "version": "2.31.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
@@ -115,17 +115,14 @@
115
115
  "@types/js-yaml": "^4.0.5",
116
116
  "@types/json2csv": "5.0.3",
117
117
  "@types/node-fetch": "^2.6.4",
118
- "@types/opn": "5.5.0",
119
118
  "@types/proxy-from-env": "^1.0.1",
120
119
  "@types/semver": "7.5.0",
121
120
  "@types/shelljs": "^0.8.12",
122
121
  "@types/single-line-log": "1.1.0",
123
122
  "@types/update-notifier": "5.1.0",
124
123
  "@types/uuid": "9.0.0",
125
- "@types/xdg-basedir": "^4.0.2",
126
124
  "@types/xml2js": "^0.4.11",
127
125
  "babel-jest": "^29.5.0",
128
- "babel-plugin-explicit-exports-references": "^1.0.2",
129
126
  "babel-plugin-module-resolver": "5.0.0",
130
127
  "check-node-version": "^4.2.1",
131
128
  "dockerode": "^3.3.4",
@@ -3625,16 +3622,6 @@
3625
3622
  "node": ">= 6"
3626
3623
  }
3627
3624
  },
3628
- "node_modules/@types/opn": {
3629
- "version": "5.5.0",
3630
- "resolved": "https://registry.npmjs.org/@types/opn/-/opn-5.5.0.tgz",
3631
- "integrity": "sha512-rfEmrSa/x0vArY1aFnVTBAmy6b2I0oNHONL59qR+vnsHfD5xacM40O4PSiVisERq/GmROjmS3Xo/ptp8fx823g==",
3632
- "deprecated": "This is a stub types definition. opn provides its own type definitions, so you do not need this installed.",
3633
- "dev": true,
3634
- "dependencies": {
3635
- "opn": "*"
3636
- }
3637
- },
3638
3625
  "node_modules/@types/prettier": {
3639
3626
  "version": "2.7.2",
3640
3627
  "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
@@ -3869,16 +3856,6 @@
3869
3856
  "integrity": "sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==",
3870
3857
  "dev": true
3871
3858
  },
3872
- "node_modules/@types/xdg-basedir": {
3873
- "version": "4.0.2",
3874
- "resolved": "https://registry.npmjs.org/@types/xdg-basedir/-/xdg-basedir-4.0.2.tgz",
3875
- "integrity": "sha512-hNaXvZUM/XXs/Vlwpo7Pu6BXfDP7xWIoGRq/uwVYuIKcKOCKfavyRtQn++Uw1lpDrqqG9mX5XuTMazFk68pd2g==",
3876
- "deprecated": "This is a stub types definition. xdg-basedir provides its own type definitions, so you do not need this installed.",
3877
- "dev": true,
3878
- "dependencies": {
3879
- "xdg-basedir": "*"
3880
- }
3881
- },
3882
3859
  "node_modules/@types/xml2js": {
3883
3860
  "version": "0.4.11",
3884
3861
  "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.11.tgz",
@@ -4572,21 +4549,6 @@
4572
4549
  "node": ">=8"
4573
4550
  }
4574
4551
  },
4575
- "node_modules/babel-plugin-explicit-exports-references": {
4576
- "version": "1.0.2",
4577
- "resolved": "https://registry.npmjs.org/babel-plugin-explicit-exports-references/-/babel-plugin-explicit-exports-references-1.0.2.tgz",
4578
- "integrity": "sha512-z+weAyF11Mr1azXIR5pfhAeXeK8ZvacXSKgPLGdwBoR7efyqnUxYvlGUny7eHZxAO/Q1C2O1+xO9lwgGPDaBlw==",
4579
- "dev": true,
4580
- "dependencies": {
4581
- "@babel/core": "^7.13.15",
4582
- "@babel/template": "^7.12.13",
4583
- "@babel/types": "^7.13.14",
4584
- "debug": "^4.3.1"
4585
- },
4586
- "engines": {
4587
- "node": ">= 12.x"
4588
- }
4589
- },
4590
4552
  "node_modules/babel-plugin-istanbul": {
4591
4553
  "version": "6.1.1",
4592
4554
  "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
@@ -17829,15 +17791,6 @@
17829
17791
  }
17830
17792
  }
17831
17793
  },
17832
- "@types/opn": {
17833
- "version": "5.5.0",
17834
- "resolved": "https://registry.npmjs.org/@types/opn/-/opn-5.5.0.tgz",
17835
- "integrity": "sha512-rfEmrSa/x0vArY1aFnVTBAmy6b2I0oNHONL59qR+vnsHfD5xacM40O4PSiVisERq/GmROjmS3Xo/ptp8fx823g==",
17836
- "dev": true,
17837
- "requires": {
17838
- "opn": "*"
17839
- }
17840
- },
17841
17794
  "@types/prettier": {
17842
17795
  "version": "2.7.2",
17843
17796
  "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
@@ -18034,15 +17987,6 @@
18034
17987
  "integrity": "sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==",
18035
17988
  "dev": true
18036
17989
  },
18037
- "@types/xdg-basedir": {
18038
- "version": "4.0.2",
18039
- "resolved": "https://registry.npmjs.org/@types/xdg-basedir/-/xdg-basedir-4.0.2.tgz",
18040
- "integrity": "sha512-hNaXvZUM/XXs/Vlwpo7Pu6BXfDP7xWIoGRq/uwVYuIKcKOCKfavyRtQn++Uw1lpDrqqG9mX5XuTMazFk68pd2g==",
18041
- "dev": true,
18042
- "requires": {
18043
- "xdg-basedir": "*"
18044
- }
18045
- },
18046
17990
  "@types/xml2js": {
18047
17991
  "version": "0.4.11",
18048
17992
  "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.11.tgz",
@@ -18533,18 +18477,6 @@
18533
18477
  }
18534
18478
  }
18535
18479
  },
18536
- "babel-plugin-explicit-exports-references": {
18537
- "version": "1.0.2",
18538
- "resolved": "https://registry.npmjs.org/babel-plugin-explicit-exports-references/-/babel-plugin-explicit-exports-references-1.0.2.tgz",
18539
- "integrity": "sha512-z+weAyF11Mr1azXIR5pfhAeXeK8ZvacXSKgPLGdwBoR7efyqnUxYvlGUny7eHZxAO/Q1C2O1+xO9lwgGPDaBlw==",
18540
- "dev": true,
18541
- "requires": {
18542
- "@babel/core": "^7.13.15",
18543
- "@babel/template": "^7.12.13",
18544
- "@babel/types": "^7.13.14",
18545
- "debug": "^4.3.1"
18546
- }
18547
- },
18548
18480
  "babel-plugin-istanbul": {
18549
18481
  "version": "6.1.1",
18550
18482
  "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automattic/vip",
3
- "version": "2.31.0-dev1",
3
+ "version": "2.31.0",
4
4
  "description": "The VIP Javascript library & CLI",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -54,7 +54,7 @@
54
54
  "vip-wp": "dist/bin/vip-wp.js"
55
55
  },
56
56
  "scripts": {
57
- "test": "npm run lint && npm run flow && npm run check-types && jest --testPathIgnorePatterns __tests__/devenv-e2e/",
57
+ "test": "npm run lint && npm run flow && npm run check-types && jest --coverage --testPathIgnorePatterns __tests__/devenv-e2e/",
58
58
  "test:e2e:dev-env": "jest -c __tests__/devenv-e2e/jest/jest.config.js",
59
59
  "clean": "rimraf dist",
60
60
  "prepare": "npm run clean && npm run build",
@@ -112,17 +112,14 @@
112
112
  "@types/js-yaml": "^4.0.5",
113
113
  "@types/json2csv": "5.0.3",
114
114
  "@types/node-fetch": "^2.6.4",
115
- "@types/opn": "5.5.0",
116
115
  "@types/proxy-from-env": "^1.0.1",
117
116
  "@types/semver": "7.5.0",
118
117
  "@types/shelljs": "^0.8.12",
119
118
  "@types/single-line-log": "1.1.0",
120
119
  "@types/update-notifier": "5.1.0",
121
120
  "@types/uuid": "9.0.0",
122
- "@types/xdg-basedir": "^4.0.2",
123
121
  "@types/xml2js": "^0.4.11",
124
122
  "babel-jest": "^29.5.0",
125
- "babel-plugin-explicit-exports-references": "^1.0.2",
126
123
  "babel-plugin-module-resolver": "5.0.0",
127
124
  "check-node-version": "^4.2.1",
128
125
  "dockerode": "^3.3.4",