@automattic/vip 3.23.3 → 3.23.4-dev.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.
@@ -49,7 +49,9 @@ cmd.argv(process.argv, async (arg, opt) => {
49
49
  if (hasConfiguration) {
50
50
  slug = await (0, _devEnvironmentCli.getEnvironmentName)(environmentNameOptions);
51
51
  }
52
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
52
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
53
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
54
+ });
53
55
  (0, _devEnvironmentCli.validateDependencies)(lando);
54
56
  debug('Args: ', arg, 'Options: ', opt);
55
57
  const trackingInfo = {
@@ -23,7 +23,9 @@ const examples = [{
23
23
  usage
24
24
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('soft', 'Preserve an environment’s configuration files; allows an environment to be regenerated with the start command.').examples(examples).argv(process.argv, async (arg, opt) => {
25
25
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
26
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
26
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
27
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
28
+ });
27
29
  (0, _devEnvironmentCli.validateDependencies)(lando);
28
30
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
29
31
  await (0, _tracker.trackEvent)('dev_env_destroy_command_execute', trackingInfo);
@@ -25,7 +25,9 @@ const examples = [{
25
25
  usage
26
26
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('force', 'Skip validation for a local environment to be in a running state.', undefined, _devEnvironmentCli.processBooleanOption).option('quiet', 'Suppress informational messages.', undefined, _devEnvironmentCli.processBooleanOption).examples(examples).argv(process.argv, async (unmatchedArgs, opt) => {
27
27
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
28
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
28
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
29
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
30
+ });
29
31
  (0, _devEnvironmentCli.validateDependencies)(lando);
30
32
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
31
33
  await (0, _tracker.trackEvent)('dev_env_exec_command_execute', trackingInfo);
@@ -23,16 +23,18 @@ const examples = [{
23
23
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('all', 'Retrieve information about all local environments.').option('extended', 'Deprecated, not used.').examples(examples).argv(process.argv, async (arg, opt) => {
24
24
  let trackingInfo;
25
25
  let slug;
26
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
27
26
  if (opt.all) {
28
27
  trackingInfo = {
29
28
  all: true
30
29
  };
31
- slug = '';
30
+ slug = undefined;
32
31
  } else {
33
32
  slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
34
33
  trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
35
34
  }
35
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
36
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
37
+ });
36
38
  (0, _devEnvironmentCli.validateDependencies)(lando);
37
39
  await (0, _tracker.trackEvent)('dev_env_info_command_execute', trackingInfo);
38
40
  debug('Args: ', arg, 'Options: ', opt);
@@ -16,7 +16,9 @@ const examples = [{
16
16
  (0, _command.default)({
17
17
  usage
18
18
  }).examples(examples).argv(process.argv, async () => {
19
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
19
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
20
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)()
21
+ });
20
22
  lando.events.constructor.prototype.setMaxListeners(1024);
21
23
  (0, _devEnvironmentCli.validateDependencies)(lando);
22
24
  const trackingInfo = {
@@ -25,7 +25,9 @@ const examples = [{
25
25
  usage
26
26
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option(['f', 'follow'], 'Continually output logs as they are generated.').option('service', 'Restrict to a single service.').examples(examples).argv(process.argv, async (arg, opt) => {
27
27
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
28
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
28
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
29
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
30
+ });
29
31
  (0, _devEnvironmentCli.validateDependencies)(lando);
30
32
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
31
33
  await (0, _tracker.trackEvent)('dev_env_logs_command_execute', trackingInfo);
@@ -34,7 +34,9 @@ const examples = [{
34
34
  }).option('soft', 'Preserve an environment’s configuration files; allows an environment to be regenerated with the start command.').option('force', 'Skip confirmation.').examples(examples).argv(process.argv, async (arg, opt) => {
35
35
  debug('Args: ', arg, 'Options: ', opt);
36
36
  const allEnvNames = (0, _devEnvironmentCore.getAllEnvironmentNames)();
37
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
37
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
38
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)()
39
+ });
38
40
  if (allEnvNames.length === 0) {
39
41
  console.log('No environments to purge!');
40
42
  return;
@@ -57,7 +57,9 @@ function getCommand(args) {
57
57
  usage
58
58
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('root', 'Create with root privileges.').option('service', 'Restrict to a single service.').examples(examples).argv(process.argv, async (args, opt) => {
59
59
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
60
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
60
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
61
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
62
+ });
61
63
  (0, _devEnvironmentCli.validateDependencies)(lando);
62
64
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
63
65
  await (0, _tracker.trackEvent)('dev_env_shell_command_execute', trackingInfo);
@@ -34,7 +34,9 @@ const examples = [{
34
34
  usage
35
35
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('skip-rebuild', 'Only start services that are not in a running state.').option(['w', 'skip-wp-versions-check'], 'Skip the prompt to update WordPress; occurs if the last major release version is not configured.').option('vscode', 'Generate a Visual Studio Code Workspace file (deprecated, use --editor=vscode instead).').option('editor', 'Generate a workspace file for the specified editor (supports: vscode, cursor, windsurf, phpstorm).').examples(examples).argv(process.argv, async (arg, opt) => {
36
36
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
37
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
37
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
38
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
39
+ });
38
40
  (0, _devEnvironmentCli.validateDependencies)(lando);
39
41
  const startProcessing = new Date();
40
42
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
@@ -22,24 +22,30 @@ const examples = [{
22
22
  (0, _command.default)({
23
23
  usage
24
24
  }).option('slug', 'A unique name for a local environment. Default is "vip-local".', undefined, _devEnvironmentCli.processSlug).option('all', 'Stop all local environments.').examples(examples).argv(process.argv, async (arg, opt) => {
25
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
26
- (0, _devEnvironmentCli.validateDependencies)(lando);
27
25
  debug('Args: ', arg, 'Options: ', opt);
28
26
 
29
27
  /** @type {Record< string, unknown >} */
30
28
  let trackingInfo;
31
29
  /** @type {string[]} */
32
30
  let environments;
31
+ /** @type {string|undefined} */
32
+ let logSlug;
33
33
  if (opt.all) {
34
34
  trackingInfo = {
35
35
  all: true
36
36
  };
37
37
  environments = (0, _devEnvironmentCore.getAllEnvironmentNames)();
38
+ logSlug = undefined;
38
39
  } else {
39
40
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
40
41
  trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
41
42
  environments = [slug];
43
+ logSlug = slug;
42
44
  }
45
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
46
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(logSlug)
47
+ });
48
+ (0, _devEnvironmentCli.validateDependencies)(lando);
43
49
  await (0, _tracker.trackEvent)('dev_env_stop_command_execute', trackingInfo);
44
50
  for (const slug of environments) {
45
51
  try {
@@ -70,7 +70,9 @@ const appQuery = `
70
70
  multisite: env.isMultisite
71
71
  });
72
72
  await trackerFn('execute');
73
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
73
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
74
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
75
+ });
74
76
  const isUp = (await Promise.all([(0, _devEnvironmentLando.isContainerRunning)(lando, slug, 'php'), (0, _devEnvironmentLando.isContainerRunning)(lando, slug, 'database')])).every(Boolean);
75
77
  if (!isUp && !opt.force) {
76
78
  await trackerFn('env_not_running_error', {
@@ -31,7 +31,9 @@ const cmd = (0, _command.default)({
31
31
  cmd.examples(examples);
32
32
  cmd.argv(process.argv, async (arg, opt) => {
33
33
  const slug = await (0, _devEnvironmentCli.getEnvironmentName)(opt);
34
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
34
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
35
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(slug)
36
+ });
35
37
  (0, _devEnvironmentCli.validateDependencies)(lando);
36
38
  const trackingInfo = (0, _devEnvironmentCli.getEnvTrackingInfo)(slug);
37
39
  await (0, _tracker.trackEvent)('dev_env_update_command_execute', trackingInfo);
@@ -24,7 +24,9 @@ class DevEnvImportSQLCommand {
24
24
  this.slug = slug;
25
25
  }
26
26
  async run() {
27
- const lando = await (0, _devEnvironmentLando.bootstrapLando)();
27
+ const lando = await (0, _devEnvironmentLando.bootstrapLando)({
28
+ logFile: (0, _devEnvironmentCli.getDevEnvLogFile)(this.slug)
29
+ });
28
30
  (0, _devEnvironmentCli.validateDependencies)(lando);
29
31
  (0, _sql.validateImportFileExtension)(this.fileName);
30
32
  const dumpDetails = await (0, _database.getSqlDumpDetails)(this.fileName);
@@ -4,6 +4,9 @@ exports.__esModule = true;
4
4
  exports.DEFAULT_SLUG = exports.CONFIGURATION_FOLDER = void 0;
5
5
  exports.addDevEnvConfigurationOptions = addDevEnvConfigurationOptions;
6
6
  exports.ensureValidPathsInOptions = ensureValidPathsInOptions;
7
+ exports.formatDevEnvLogSlug = formatDevEnvLogSlug;
8
+ exports.formatDevEnvLogTimestamp = formatDevEnvLogTimestamp;
9
+ exports.getDevEnvLogFile = getDevEnvLogFile;
7
10
  exports.getEnvTrackingInfo = getEnvTrackingInfo;
8
11
  exports.getEnvironmentName = getEnvironmentName;
9
12
  exports.getEnvironmentStartCommand = getEnvironmentStartCommand;
@@ -666,6 +669,16 @@ function processSlug(value) {
666
669
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
667
670
  return (value ?? '').toString().toLowerCase();
668
671
  }
672
+ function formatDevEnvLogTimestamp(date) {
673
+ return date.toISOString().replace(/\..*$/, '').replace(/[-:]/g, '').replace('T', '-');
674
+ }
675
+ function formatDevEnvLogSlug(slug) {
676
+ return slug.replace(/[^a-z0-9_-]+/gi, '-').toLowerCase();
677
+ }
678
+ function getDevEnvLogFile(slug) {
679
+ const slugPart = slug ? formatDevEnvLogSlug(slug) : 'all';
680
+ return `vip-dev-env-${slugPart}-${formatDevEnvLogTimestamp(new Date())}.log`;
681
+ }
669
682
  function processVersionOption(value) {
670
683
  if (typeof value === 'string' || typeof value === 'number') {
671
684
  if (!isNaN(value) && Number(value) % 1 === 0) {
@@ -22,14 +22,17 @@ var _bootstrap = require("lando/lib/bootstrap");
22
22
  var _lando = _interopRequireDefault(require("lando/lib/lando"));
23
23
  var _utils = _interopRequireDefault(require("lando/plugins/lando-core/lib/utils"));
24
24
  var _build = _interopRequireDefault(require("lando/plugins/lando-tooling/lib/build"));
25
+ var _nodeChild_process = require("node:child_process");
25
26
  var _promises = require("node:dns/promises");
26
27
  var _promises2 = require("node:fs/promises");
27
28
  var _nodeOs = require("node:os");
28
29
  var _nodePath = _interopRequireWildcard(require("node:path"));
30
+ var _nodeUtil = require("node:util");
29
31
  var _semver = require("semver");
30
32
  var _devEnvironmentCore = require("./dev-environment-core");
31
33
  var _dockerUtils = require("./docker-utils");
32
34
  var _devEnvironment = require("../constants/dev-environment");
35
+ var _env = _interopRequireDefault(require("../env"));
33
36
  var _userError = _interopRequireDefault(require("../user-error"));
34
37
  var _xdgData = require("../xdg-data");
35
38
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -39,11 +42,117 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
39
42
  */
40
43
  const DEBUG_KEY = '@automattic/vip:bin:dev-environment';
41
44
  const debug = (0, _debug.default)(DEBUG_KEY);
45
+ const execFileAsync = (0, _nodeUtil.promisify)(_nodeChild_process.execFile);
46
+ const bannerLabelWidth = 18;
47
+ let logPathRegistered = false;
48
+ let resolvedLogPath = null;
49
+ const getLogFilePath = config => {
50
+ if (config.logFile) {
51
+ return _nodePath.default.isAbsolute(config.logFile) ? config.logFile : _nodePath.default.join(config.logDir ?? '', config.logFile);
52
+ }
53
+ if (config.logDir && config.logName) {
54
+ return _nodePath.default.join(config.logDir, `${config.logName}.log`);
55
+ }
56
+ return null;
57
+ };
58
+ const registerLogPathOutput = config => {
59
+ if (logPathRegistered) {
60
+ return;
61
+ }
62
+ resolvedLogPath = getLogFilePath(config);
63
+ if (!resolvedLogPath) {
64
+ return;
65
+ }
66
+ logPathRegistered = true;
67
+ process.once('exit', () => {
68
+ if (resolvedLogPath && process.stdout.isTTY) {
69
+ console.log(`\n ${formatBannerLine(_chalk.default.cyan('COMMAND LOG FILE'.padEnd(bannerLabelWidth)), resolvedLogPath)}`);
70
+ }
71
+ });
72
+ };
73
+ const formatBytes = bytes => {
74
+ const gb = bytes / 1024 ** 3;
75
+ return `${gb.toFixed(1)} GB`;
76
+ };
77
+ const isRecord = value => typeof value === 'object' && value !== null;
78
+ const isDockerPluginInfo = value => isRecord(value);
79
+ const getDockerVersions = async config => {
80
+ const dockerBin = config.dockerBin ?? '';
81
+ const composeBin = config.composeBin ?? '';
82
+ let engine = 'unknown';
83
+ let compose = 'unknown';
84
+ let composePlugin = 'unknown';
85
+ try {
86
+ if (dockerBin) {
87
+ const {
88
+ stdout
89
+ } = await execFileAsync(dockerBin, ['info', '--format', 'json']);
90
+ const dockerData = JSON.parse(stdout);
91
+ if (isRecord(dockerData)) {
92
+ const serverVersion = dockerData.ServerVersion;
93
+ if (typeof serverVersion === 'string') {
94
+ engine = serverVersion;
95
+ }
96
+ const clientInfo = dockerData.ClientInfo;
97
+ if (isRecord(clientInfo)) {
98
+ const plugins = clientInfo.Plugins;
99
+ if (Array.isArray(plugins)) {
100
+ const composePluginEntry = plugins.find(plugin => isDockerPluginInfo(plugin) && plugin.Name === 'compose');
101
+ if (composePluginEntry && typeof composePluginEntry.Version === 'string') {
102
+ composePlugin = composePluginEntry.Version;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ } catch (error) {
109
+ debug('Failed to read docker version info: %O', error);
110
+ }
111
+ try {
112
+ if (composeBin) {
113
+ const {
114
+ stdout
115
+ } = await execFileAsync(composeBin, ['version', '--short']);
116
+ compose = stdout.trim() || compose;
117
+ }
118
+ } catch (error) {
119
+ debug('Failed to read docker-compose version info: %O', error);
120
+ }
121
+ return {
122
+ engine,
123
+ compose,
124
+ composePlugin
125
+ };
126
+ };
127
+ const formatBannerLine = (label, value) => `${label.padEnd(bannerLabelWidth)} ${value}`;
128
+ const writeLogBanner = async config => {
129
+ const logFilePath = getLogFilePath(config);
130
+ if (!logFilePath) {
131
+ return;
132
+ }
133
+ try {
134
+ const existing = await (0, _promises2.stat)(logFilePath);
135
+ if (existing.size > 0) {
136
+ return;
137
+ }
138
+ } catch {
139
+ // File does not exist yet.
140
+ }
141
+ await (0, _promises2.mkdir)(_nodePath.default.dirname(logFilePath), {
142
+ recursive: true
143
+ });
144
+ const dockerVersions = await getDockerVersions(config);
145
+ const command = process.argv.slice(1).join(' ');
146
+ const bannerLines = ['=== VIP Dev Env Log ===', formatBannerLine('COMMAND', command), formatBannerLine('OS', `${_env.default.os.name} ${_env.default.os.version} ${_env.default.os.arch}`), formatBannerLine('NODE', _env.default.node.version), formatBannerLine('VIP-CLI', _env.default.app.version), formatBannerLine('DOCKER ENGINE', dockerVersions.engine), formatBannerLine('DOCKER COMPOSE', dockerVersions.compose), formatBannerLine('COMPOSE PLUGIN', dockerVersions.composePlugin), formatBannerLine('DOCKER BIN', config.dockerBin ?? 'unknown'), formatBannerLine('COMPOSE BIN', config.composeBin ?? 'unknown'), formatBannerLine('RAM', formatBytes((0, _nodeOs.totalmem)())), formatBannerLine('CPU', String((0, _nodeOs.cpus)().length)), '===', '', ''];
147
+ await (0, _promises2.writeFile)(logFilePath, bannerLines.join('\n'), {
148
+ flag: 'a'
149
+ });
150
+ };
42
151
 
43
152
  /**
44
153
  * @return {Promise<LandoConfig>} Lando configuration
45
154
  */
46
- async function getLandoConfig() {
155
+ async function getLandoConfig(options = {}) {
47
156
  // The path will be smth like `yarn/global/node_modules/lando/lib/lando.js`; we need the path up to `lando` (inclusive)
48
157
  const landoPath = (0, _nodePath.dirname)((0, _nodePath.dirname)(require.resolve('lando')));
49
158
  debug(`Getting Lando config, using paths '${landoPath}' for plugins`);
@@ -60,6 +169,7 @@ async function getLandoConfig() {
60
169
  const vipDir = _nodePath.default.join((0, _xdgData.xdgData)(), 'vip');
61
170
  const landoDir = _nodePath.default.join(vipDir, 'lando');
62
171
  const fakeHomeDir = _nodePath.default.join(landoDir, 'home');
172
+ const logDir = _nodePath.default.join(landoDir, 'logs');
63
173
  try {
64
174
  await (0, _promises2.mkdir)(fakeHomeDir, {
65
175
  recursive: true
@@ -69,6 +179,9 @@ async function getLandoConfig() {
69
179
  }
70
180
  const config = {
71
181
  logLevelConsole,
182
+ logDir,
183
+ logFile: options.logFile ?? 'vip-dev-env.log',
184
+ logName: options.logName ?? 'vip-dev-env',
72
185
  configSources: [_nodePath.default.join(landoDir, 'config.yml')],
73
186
  landoFile: '.lando.yml',
74
187
  preLandoFiles: ['.lando.base.yml', '.lando.dist.yml', '.lando.upstream.yml'],
@@ -159,17 +272,25 @@ async function getLandoApplication(lando, instancePath) {
159
272
  debug('getLandoApplication() took %d ms', duration);
160
273
  }
161
274
  }
162
- async function bootstrapLando() {
275
+ async function bootstrapLando(options = {}) {
163
276
  const started = new Date();
164
277
  try {
278
+ if (process.env.DEBUG && !process.env.DEBUG.includes('-winston:*')) {
279
+ process.env.DEBUG = `${process.env.DEBUG},-winston:*`;
280
+ }
165
281
  const socket = await (0, _dockerUtils.getDockerSocket)();
166
- const config = await getLandoConfig();
282
+ const config = await getLandoConfig(options);
167
283
  debug('Docker socket: %j', socket);
168
284
  if (socket) {
169
285
  config.engineConfig = await (0, _dockerUtils.getEngineConfig)(socket);
170
286
  debug('Engine config: %j', config.engineConfig);
171
287
  }
288
+ registerLogPathOutput(config);
289
+ await writeLogBanner(config);
172
290
  const lando = new _lando.default(config);
291
+ _debug.default.log = (message, ...args) => {
292
+ lando.log.debug(message, ...args);
293
+ };
173
294
  lando.events.once('pre-engine-build', async data => {
174
295
  const instanceData = (0, _devEnvironmentCore.readEnvironmentData)(data.name);
175
296
  let registryResolvable = false;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@automattic/vip",
3
- "version": "3.23.3",
3
+ "version": "3.23.4-dev.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@automattic/vip",
9
- "version": "3.23.3",
9
+ "version": "3.23.4-dev.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
@@ -29,7 +29,7 @@
29
29
  "https-proxy-agent": "^7.0.6",
30
30
  "js-yaml": "^4.1.0",
31
31
  "jwt-decode": "4.0.0",
32
- "lando": "github:automattic/lando-cli#bff037ea318948a1bac623c12ede017928cb99db",
32
+ "lando": "github:automattic/lando-cli#8f198e0f17dec1144efa216bec5a227dfc851900",
33
33
  "node-fetch": "^3.3.2",
34
34
  "node-stream-zip": "1.15.0",
35
35
  "open": "^11.0.0",
@@ -2545,10 +2545,30 @@
2545
2545
  "url": "https://github.com/sponsors/nzakas"
2546
2546
  }
2547
2547
  },
2548
+ "node_modules/@isaacs/balanced-match": {
2549
+ "version": "4.0.1",
2550
+ "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
2551
+ "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
2552
+ "engines": {
2553
+ "node": "20 || >=22"
2554
+ }
2555
+ },
2556
+ "node_modules/@isaacs/brace-expansion": {
2557
+ "version": "5.0.0",
2558
+ "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
2559
+ "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
2560
+ "dependencies": {
2561
+ "@isaacs/balanced-match": "^4.0.1"
2562
+ },
2563
+ "engines": {
2564
+ "node": "20 || >=22"
2565
+ }
2566
+ },
2548
2567
  "node_modules/@isaacs/cliui": {
2549
2568
  "version": "8.0.2",
2550
2569
  "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
2551
2570
  "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
2571
+ "dev": true,
2552
2572
  "license": "ISC",
2553
2573
  "dependencies": {
2554
2574
  "string-width": "^5.1.2",
@@ -2566,6 +2586,7 @@
2566
2586
  "version": "6.2.2",
2567
2587
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
2568
2588
  "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
2589
+ "dev": true,
2569
2590
  "license": "MIT",
2570
2591
  "engines": {
2571
2592
  "node": ">=12"
@@ -2578,6 +2599,7 @@
2578
2599
  "version": "6.2.3",
2579
2600
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
2580
2601
  "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
2602
+ "dev": true,
2581
2603
  "license": "MIT",
2582
2604
  "engines": {
2583
2605
  "node": ">=12"
@@ -2590,6 +2612,7 @@
2590
2612
  "version": "5.1.2",
2591
2613
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2592
2614
  "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2615
+ "dev": true,
2593
2616
  "license": "MIT",
2594
2617
  "dependencies": {
2595
2618
  "eastasianwidth": "^0.2.0",
@@ -2607,6 +2630,7 @@
2607
2630
  "version": "7.1.2",
2608
2631
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
2609
2632
  "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
2633
+ "dev": true,
2610
2634
  "license": "MIT",
2611
2635
  "dependencies": {
2612
2636
  "ansi-regex": "^6.0.1"
@@ -2622,6 +2646,7 @@
2622
2646
  "version": "8.1.0",
2623
2647
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2624
2648
  "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2649
+ "dev": true,
2625
2650
  "license": "MIT",
2626
2651
  "dependencies": {
2627
2652
  "ansi-styles": "^6.1.0",
@@ -3670,6 +3695,7 @@
3670
3695
  "version": "0.11.0",
3671
3696
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
3672
3697
  "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
3698
+ "dev": true,
3673
3699
  "license": "MIT",
3674
3700
  "optional": true,
3675
3701
  "engines": {
@@ -6762,6 +6788,7 @@
6762
6788
  "version": "0.2.0",
6763
6789
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
6764
6790
  "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
6791
+ "dev": true,
6765
6792
  "license": "MIT"
6766
6793
  },
6767
6794
  "node_modules/ejs": {
@@ -6803,6 +6830,7 @@
6803
6830
  "version": "9.2.2",
6804
6831
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
6805
6832
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
6833
+ "dev": true,
6806
6834
  "license": "MIT"
6807
6835
  },
6808
6836
  "node_modules/enabled": {
@@ -8079,30 +8107,6 @@
8079
8107
  "integrity": "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag==",
8080
8108
  "license": "MIT"
8081
8109
  },
8082
- "node_modules/figlet": {
8083
- "version": "1.9.4",
8084
- "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.9.4.tgz",
8085
- "integrity": "sha512-uN6QE+TrzTAHC1IWTyrc4FfGo2KH/82J8Jl1tyKB7+z5DBit/m3D++Iu5lg91qJMnQQ3vpJrj5gxcK/pk4R9tQ==",
8086
- "license": "MIT",
8087
- "dependencies": {
8088
- "commander": "^14.0.0"
8089
- },
8090
- "bin": {
8091
- "figlet": "bin/index.js"
8092
- },
8093
- "engines": {
8094
- "node": ">= 17.0.0"
8095
- }
8096
- },
8097
- "node_modules/figlet/node_modules/commander": {
8098
- "version": "14.0.2",
8099
- "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz",
8100
- "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==",
8101
- "license": "MIT",
8102
- "engines": {
8103
- "node": ">=20"
8104
- }
8105
- },
8106
8110
  "node_modules/file-entry-cache": {
8107
8111
  "version": "8.0.0",
8108
8112
  "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -8244,6 +8248,7 @@
8244
8248
  "version": "3.3.1",
8245
8249
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
8246
8250
  "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
8251
+ "dev": true,
8247
8252
  "license": "ISC",
8248
8253
  "dependencies": {
8249
8254
  "cross-spawn": "^7.0.6",
@@ -8260,6 +8265,7 @@
8260
8265
  "version": "4.1.0",
8261
8266
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
8262
8267
  "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
8268
+ "dev": true,
8263
8269
  "license": "ISC",
8264
8270
  "engines": {
8265
8271
  "node": ">=14"
@@ -9643,6 +9649,7 @@
9643
9649
  "version": "3.4.3",
9644
9650
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
9645
9651
  "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
9652
+ "dev": true,
9646
9653
  "license": "BlueOak-1.0.0",
9647
9654
  "dependencies": {
9648
9655
  "@isaacs/cliui": "^8.0.2"
@@ -11297,8 +11304,8 @@
11297
11304
  "node_modules/lando": {
11298
11305
  "name": "@lando/cli",
11299
11306
  "version": "3.6.5",
11300
- "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#bff037ea318948a1bac623c12ede017928cb99db",
11301
- "integrity": "sha512-IR5BopOUjDDlKwu65d7oQ/SxGUFXVkAH4/ljKuT8I0lWbPE+bbTup3IcjMEiXz7pZWEAfIsBANHIhdnmXcF9NQ==",
11307
+ "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#8f198e0f17dec1144efa216bec5a227dfc851900",
11308
+ "integrity": "sha512-2eM6b+AM2q1W6dP0x718x+X/ITLyXS8QXFiAEoF2wPx9HsKjf5ZhmD1haBRbjh7uDULq1BGKw2t657ojuUetpw==",
11302
11309
  "license": "GPL-3.0",
11303
11310
  "dependencies": {
11304
11311
  "axios": "^1.13.2",
@@ -11307,19 +11314,16 @@
11307
11314
  "cli-table3": "^0.6.5",
11308
11315
  "copy-dir": "^1.3.0",
11309
11316
  "dockerode": "^4.0.9",
11310
- "figlet": "^1.9.4",
11311
- "glob": "^10.5.0",
11317
+ "glob": "^13.0.0",
11312
11318
  "js-yaml": "^4.1.1",
11313
11319
  "jsonfile": "^6.1.0",
11314
11320
  "lodash": "^4.17.21",
11315
11321
  "node-cache": "^5.1.2",
11316
- "object-hash": "^1.1.8",
11322
+ "object-hash": "^3.0.0",
11317
11323
  "semver": "^7.7.3",
11318
11324
  "shelljs": "^0.10.0",
11319
11325
  "string-argv": "0.1.1",
11320
- "through": "^2.3.8",
11321
11326
  "transliteration": "^2.6.0",
11322
- "valid-url": "^1.0.9",
11323
11327
  "winston": "^3.11.0",
11324
11328
  "yargs": "^16.1.0"
11325
11329
  },
@@ -11391,20 +11395,38 @@
11391
11395
  "license": "MIT"
11392
11396
  },
11393
11397
  "node_modules/lando/node_modules/glob": {
11394
- "version": "10.5.0",
11395
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
11396
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
11397
- "license": "ISC",
11398
+ "version": "13.0.0",
11399
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz",
11400
+ "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
11398
11401
  "dependencies": {
11399
- "foreground-child": "^3.1.0",
11400
- "jackspeak": "^3.1.2",
11401
- "minimatch": "^9.0.4",
11402
+ "minimatch": "^10.1.1",
11402
11403
  "minipass": "^7.1.2",
11403
- "package-json-from-dist": "^1.0.0",
11404
- "path-scurry": "^1.11.1"
11404
+ "path-scurry": "^2.0.0"
11405
11405
  },
11406
- "bin": {
11407
- "glob": "dist/esm/bin.mjs"
11406
+ "engines": {
11407
+ "node": "20 || >=22"
11408
+ },
11409
+ "funding": {
11410
+ "url": "https://github.com/sponsors/isaacs"
11411
+ }
11412
+ },
11413
+ "node_modules/lando/node_modules/lru-cache": {
11414
+ "version": "11.2.4",
11415
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz",
11416
+ "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==",
11417
+ "engines": {
11418
+ "node": "20 || >=22"
11419
+ }
11420
+ },
11421
+ "node_modules/lando/node_modules/minimatch": {
11422
+ "version": "10.1.1",
11423
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
11424
+ "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
11425
+ "dependencies": {
11426
+ "@isaacs/brace-expansion": "^5.0.0"
11427
+ },
11428
+ "engines": {
11429
+ "node": "20 || >=22"
11408
11430
  },
11409
11431
  "funding": {
11410
11432
  "url": "https://github.com/sponsors/isaacs"
@@ -11414,11 +11436,25 @@
11414
11436
  "version": "7.1.2",
11415
11437
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
11416
11438
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
11417
- "license": "ISC",
11418
11439
  "engines": {
11419
11440
  "node": ">=16 || 14 >=14.17"
11420
11441
  }
11421
11442
  },
11443
+ "node_modules/lando/node_modules/path-scurry": {
11444
+ "version": "2.0.1",
11445
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
11446
+ "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
11447
+ "dependencies": {
11448
+ "lru-cache": "^11.0.0",
11449
+ "minipass": "^7.1.2"
11450
+ },
11451
+ "engines": {
11452
+ "node": "20 || >=22"
11453
+ },
11454
+ "funding": {
11455
+ "url": "https://github.com/sponsors/isaacs"
11456
+ }
11457
+ },
11422
11458
  "node_modules/lando/node_modules/wrap-ansi": {
11423
11459
  "version": "7.0.0",
11424
11460
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -11746,6 +11782,7 @@
11746
11782
  "version": "9.0.5",
11747
11783
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
11748
11784
  "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
11785
+ "dev": true,
11749
11786
  "license": "ISC",
11750
11787
  "dependencies": {
11751
11788
  "brace-expansion": "^2.0.1"
@@ -12007,12 +12044,11 @@
12007
12044
  "license": "MIT"
12008
12045
  },
12009
12046
  "node_modules/object-hash": {
12010
- "version": "1.3.1",
12011
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
12012
- "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
12013
- "license": "MIT",
12047
+ "version": "3.0.0",
12048
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
12049
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
12014
12050
  "engines": {
12015
- "node": ">= 0.10.0"
12051
+ "node": ">= 6"
12016
12052
  }
12017
12053
  },
12018
12054
  "node_modules/object-inspect": {
@@ -12295,6 +12331,7 @@
12295
12331
  "version": "1.0.1",
12296
12332
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
12297
12333
  "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
12334
+ "dev": true,
12298
12335
  "license": "BlueOak-1.0.0"
12299
12336
  },
12300
12337
  "node_modules/parent-module": {
@@ -12387,6 +12424,7 @@
12387
12424
  "version": "1.11.1",
12388
12425
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
12389
12426
  "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
12427
+ "dev": true,
12390
12428
  "license": "BlueOak-1.0.0",
12391
12429
  "dependencies": {
12392
12430
  "lru-cache": "^10.2.0",
@@ -12403,12 +12441,14 @@
12403
12441
  "version": "10.4.3",
12404
12442
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
12405
12443
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
12444
+ "dev": true,
12406
12445
  "license": "ISC"
12407
12446
  },
12408
12447
  "node_modules/path-scurry/node_modules/minipass": {
12409
12448
  "version": "7.1.2",
12410
12449
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
12411
12450
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
12451
+ "dev": true,
12412
12452
  "license": "ISC",
12413
12453
  "engines": {
12414
12454
  "node": ">=16 || 14 >=14.17"
@@ -13719,6 +13759,7 @@
13719
13759
  "version": "4.2.3",
13720
13760
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
13721
13761
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
13762
+ "dev": true,
13722
13763
  "license": "MIT",
13723
13764
  "dependencies": {
13724
13765
  "emoji-regex": "^8.0.0",
@@ -13733,6 +13774,7 @@
13733
13774
  "version": "8.0.0",
13734
13775
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
13735
13776
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
13777
+ "dev": true,
13736
13778
  "license": "MIT"
13737
13779
  },
13738
13780
  "node_modules/string-width/node_modules/emoji-regex": {
@@ -13871,6 +13913,7 @@
13871
13913
  "version": "6.0.1",
13872
13914
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
13873
13915
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
13916
+ "dev": true,
13874
13917
  "license": "MIT",
13875
13918
  "dependencies": {
13876
13919
  "ansi-regex": "^5.0.1"
@@ -14092,12 +14135,6 @@
14092
14135
  "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
14093
14136
  "license": "MIT"
14094
14137
  },
14095
- "node_modules/through": {
14096
- "version": "2.3.8",
14097
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
14098
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
14099
- "license": "MIT"
14100
- },
14101
14138
  "node_modules/tinyglobby": {
14102
14139
  "version": "0.2.15",
14103
14140
  "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -14870,11 +14907,6 @@
14870
14907
  "node": ">=10.12.0"
14871
14908
  }
14872
14909
  },
14873
- "node_modules/valid-url": {
14874
- "version": "1.0.9",
14875
- "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
14876
- "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
14877
- },
14878
14910
  "node_modules/vscode-json-languageservice": {
14879
14911
  "version": "4.2.1",
14880
14912
  "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz",
@@ -15189,6 +15221,7 @@
15189
15221
  "version": "7.0.0",
15190
15222
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
15191
15223
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
15224
+ "dev": true,
15192
15225
  "license": "MIT",
15193
15226
  "dependencies": {
15194
15227
  "ansi-styles": "^4.0.0",
@@ -15206,6 +15239,7 @@
15206
15239
  "version": "4.3.0",
15207
15240
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
15208
15241
  "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
15242
+ "dev": true,
15209
15243
  "license": "MIT",
15210
15244
  "dependencies": {
15211
15245
  "color-convert": "^2.0.1"
@@ -15221,6 +15255,7 @@
15221
15255
  "version": "2.0.1",
15222
15256
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
15223
15257
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
15258
+ "dev": true,
15224
15259
  "license": "MIT",
15225
15260
  "dependencies": {
15226
15261
  "color-name": "~1.1.4"
@@ -15233,6 +15268,7 @@
15233
15268
  "version": "1.1.4",
15234
15269
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
15235
15270
  "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
15271
+ "dev": true,
15236
15272
  "license": "MIT"
15237
15273
  },
15238
15274
  "node_modules/wrap-ansi/node_modules/ansi-regex": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automattic/vip",
3
- "version": "3.23.3",
3
+ "version": "3.23.4-dev.0",
4
4
  "description": "The VIP Javascript library & CLI",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -157,7 +157,7 @@
157
157
  "https-proxy-agent": "^7.0.6",
158
158
  "js-yaml": "^4.1.0",
159
159
  "jwt-decode": "4.0.0",
160
- "lando": "github:automattic/lando-cli#bff037ea318948a1bac623c12ede017928cb99db",
160
+ "lando": "github:automattic/lando-cli#459ac2d44ac3db17719493e879d52178410ff70e",
161
161
  "node-fetch": "^3.3.2",
162
162
  "node-stream-zip": "1.15.0",
163
163
  "open": "^11.0.0",