@shopify/cli-kit 3.0.10 → 3.0.13

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.
@@ -3,7 +3,7 @@ import require$$0$3 from 'events';
3
3
  import require$$0$2 from 'readline';
4
4
  import require$$0$5, { sep as sep$1, extname as extname$1, resolve as resolve$4, dirname as dirname$2 } from 'path';
5
5
  import path$I from 'node:path';
6
- import url$1, { fileURLToPath, format as format$5 } from 'node:url';
6
+ import url$1, { fileURLToPath, format as format$6 } from 'node:url';
7
7
  import process$2, { platform as platform$1 } from 'node:process';
8
8
  import fs$L, { promises } from 'node:fs';
9
9
  import require$$1$2, { constants as constants$8, EOL, networkInterfaces } from 'os';
@@ -19,6 +19,7 @@ import require$$0$b from 'constants';
19
19
  import Stream$5, { Writable as Writable$1, PassThrough as PassThrough$7, pipeline as pipeline$2 } from 'node:stream';
20
20
  import { promisify as promisify$8, types as types$6, deprecate } from 'node:util';
21
21
  import crypto$1, { randomUUID } from 'crypto';
22
+ import prettier from 'prettier';
22
23
  import * as tty$1 from 'tty';
23
24
  import tty__default from 'tty';
24
25
  import StackTracey from 'stacktracey';
@@ -38,7 +39,7 @@ import require$$0$d from 'http2';
38
39
  import require$$1$4 from 'tls';
39
40
  import require$$0$e, { createServer } from 'net';
40
41
  import require$$0$f from 'punycode';
41
- import { parse as parse$i, stringify as stringify$d } from 'envfile';
42
+ import { parse as parse$i, stringify as stringify$f } from 'envfile';
42
43
 
43
44
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
44
45
 
@@ -142,7 +143,7 @@ Reflect.defineProperty(module.exports, 'windows', { enumerable: false, value: wi
142
143
  Reflect.defineProperty(module.exports, 'other', { enumerable: false, value: other });
143
144
  }(symbols$2));
144
145
 
145
- const isObject$6 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
146
+ const isObject$7 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
146
147
 
147
148
  /* eslint-disable no-control-regex */
148
149
  // this is a modified version of https://github.com/chalk/ansi-regex (MIT License)
@@ -298,7 +299,7 @@ const create$3 = () => {
298
299
  };
299
300
 
300
301
  colors.theme = custom => {
301
- if (!isObject$6(custom)) throw new TypeError('Expected theme to be an object');
302
+ if (!isObject$7(custom)) throw new TypeError('Expected theme to be an object');
302
303
  for (let name of Object.keys(custom)) {
303
304
  colors.alias(name, custom[name]);
304
305
  }
@@ -1892,7 +1893,7 @@ const colors$5 = ansiColors.exports;
1892
1893
  const Prompt$5 = prompt$1;
1893
1894
  const roles = roles_1;
1894
1895
  const utils$t = utils$z;
1895
- const { reorder, scrollUp, scrollDown, isObject: isObject$5, swap } = utils$t;
1896
+ const { reorder, scrollUp, scrollDown, isObject: isObject$6, swap } = utils$t;
1896
1897
 
1897
1898
  class ArrayPrompt$3 extends Prompt$5 {
1898
1899
  constructor(options) {
@@ -1926,7 +1927,7 @@ class ArrayPrompt$3 extends Prompt$5 {
1926
1927
  throw new Error('At least one choice must be selectable');
1927
1928
  }
1928
1929
 
1929
- if (isObject$5(initial)) initial = Object.keys(initial);
1930
+ if (isObject$6(initial)) initial = Object.keys(initial);
1930
1931
  if (Array.isArray(initial)) {
1931
1932
  if (autofocus != null) this.index = this.findIndex(autofocus);
1932
1933
  initial.forEach(v => this.enable(this.find(v)));
@@ -2190,7 +2191,7 @@ class ArrayPrompt$3 extends Prompt$5 {
2190
2191
  let len = this.choices.length;
2191
2192
  let num = this.num;
2192
2193
 
2193
- let handle = (val, res) => {
2194
+ let handle = (val = false, res) => {
2194
2195
  clearTimeout(this.numberTimeout);
2195
2196
  if (val) res = number(num);
2196
2197
  this.num = '';
@@ -2402,7 +2403,7 @@ class ArrayPrompt$3 extends Prompt$5 {
2402
2403
  }
2403
2404
 
2404
2405
  find(value, prop) {
2405
- if (isObject$5(value)) return prop ? value[prop] : value;
2406
+ if (isObject$6(value)) return prop ? value[prop] : value;
2406
2407
  let isChoice = (ele, i) => [ele.name, i].includes(value);
2407
2408
  let fn = typeof value === 'function' ? value : isChoice;
2408
2409
  let choice = this.choices.find(fn);
@@ -2810,7 +2811,7 @@ const utils$r = utils$z;
2810
2811
  * @api public
2811
2812
  */
2812
2813
 
2813
- var placeholder$2 = (prompt, options) => {
2814
+ var placeholder$2 = (prompt, options = {}) => {
2814
2815
  prompt.cursorHide();
2815
2816
 
2816
2817
  let { input = '', initial = '', pos, showCursor = true, color } = options;
@@ -4059,7 +4060,7 @@ class Item {
4059
4060
  }
4060
4061
  }
4061
4062
 
4062
- const tokenize = async(options = {}, defaults, fn = token => token) => {
4063
+ const tokenize = async(options = {}, defaults = {}, fn = token => token) => {
4063
4064
  let unique = new Set();
4064
4065
  let fields = options.fields || [];
4065
4066
  let input = options.template;
@@ -5417,7 +5418,7 @@ const relative = function(from, to) {
5417
5418
  const dirname$1 = function(p) {
5418
5419
  return require$$0$5.posix.dirname(normalizeWindowsPath(p));
5419
5420
  };
5420
- const format$4 = function(p) {
5421
+ const format$5 = function(p) {
5421
5422
  return normalizeWindowsPath(require$$0$5.posix.format(p));
5422
5423
  };
5423
5424
  const basename = function(p, ext) {
@@ -5440,7 +5441,7 @@ const _path = /*#__PURE__*/Object.freeze({
5440
5441
  extname: extname,
5441
5442
  relative: relative,
5442
5443
  dirname: dirname$1,
5443
- format: format$4,
5444
+ format: format$5,
5444
5445
  basename: basename,
5445
5446
  parse: parse$h
5446
5447
  });
@@ -5610,7 +5611,7 @@ async function pLocate$2(
5610
5611
  {
5611
5612
  concurrency = Number.POSITIVE_INFINITY,
5612
5613
  preserveOrder = true,
5613
- },
5614
+ } = {},
5614
5615
  ) {
5615
5616
  const limit = pLimit$3(concurrency);
5616
5617
 
@@ -5637,14 +5638,14 @@ const typeMappings = {
5637
5638
  };
5638
5639
 
5639
5640
  function checkType(type) {
5640
- if (type in typeMappings) {
5641
+ if (Object.hasOwnProperty.call(typeMappings, type)) {
5641
5642
  return;
5642
5643
  }
5643
5644
 
5644
5645
  throw new Error(`Invalid type specified: ${type}`);
5645
5646
  }
5646
5647
 
5647
- const matchType = (type, stat) => type === undefined || stat[typeMappings[type]]();
5648
+ const matchType = (type, stat) => stat[typeMappings[type]]();
5648
5649
 
5649
5650
  const toPath$1 = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;
5650
5651
 
@@ -5677,7 +5678,7 @@ const toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath)
5677
5678
 
5678
5679
  const findUpStop = Symbol('findUpStop');
5679
5680
 
5680
- async function findUpMultiple(name, options) {
5681
+ async function findUpMultiple(name, options = {}) {
5681
5682
  let directory = path$I.resolve(toPath(options.cwd) || '');
5682
5683
  const {root} = path$I.parse(directory);
5683
5684
  const stopAt = path$I.resolve(directory, options.stopAt || root);
@@ -6152,7 +6153,7 @@ exports.flatten = (...args) => {
6152
6153
 
6153
6154
  const utils$m = utils$n;
6154
6155
 
6155
- var stringify$c = (ast, options = {}) => {
6156
+ var stringify$e = (ast, options = {}) => {
6156
6157
  let stringify = (node, parent = {}) => {
6157
6158
  let invalidBlock = options.escapeInvalid && utils$m.isInvalidBrace(parent);
6158
6159
  let invalidNode = node.invalid === true && options.escapeInvalid === true;
@@ -6494,7 +6495,7 @@ var toRegexRange_1 = toRegexRange$1;
6494
6495
  const util$9 = require$$0$6;
6495
6496
  const toRegexRange = toRegexRange_1;
6496
6497
 
6497
- const isObject$4 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
6498
+ const isObject$5 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
6498
6499
 
6499
6500
  const transform$1 = toNumber => {
6500
6501
  return value => toNumber === true ? Number(value) : String(value);
@@ -6515,7 +6516,7 @@ const zeros = input => {
6515
6516
  return index > 0;
6516
6517
  };
6517
6518
 
6518
- const stringify$b = (start, end, options) => {
6519
+ const stringify$d = (start, end, options) => {
6519
6520
  if (typeof start === 'string' || typeof end === 'string') {
6520
6521
  return true;
6521
6522
  }
@@ -6611,7 +6612,7 @@ const invalidStep = (step, options) => {
6611
6612
  return [];
6612
6613
  };
6613
6614
 
6614
- const fillNumbers = (start, end, step = 1, options) => {
6615
+ const fillNumbers = (start, end, step = 1, options = {}) => {
6615
6616
  let a = Number(start);
6616
6617
  let b = Number(end);
6617
6618
 
@@ -6632,7 +6633,7 @@ const fillNumbers = (start, end, step = 1, options) => {
6632
6633
 
6633
6634
  let padded = zeros(startString) || zeros(endString) || zeros(stepString);
6634
6635
  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
6635
- let toNumber = padded === false && stringify$b(start, end, options) === false;
6636
+ let toNumber = padded === false && stringify$d(start, end, options) === false;
6636
6637
  let format = options.transform || transform$1(toNumber);
6637
6638
 
6638
6639
  if (options.toRegex && step === 1) {
@@ -6663,7 +6664,7 @@ const fillNumbers = (start, end, step = 1, options) => {
6663
6664
  return range;
6664
6665
  };
6665
6666
 
6666
- const fillLetters = (start, end, step = 1, options) => {
6667
+ const fillLetters = (start, end, step = 1, options = {}) => {
6667
6668
  if ((!isNumber$3(start) && start.length > 1) || (!isNumber$3(end) && end.length > 1)) {
6668
6669
  return invalidRange(start, end, options);
6669
6670
  }
@@ -6710,7 +6711,7 @@ const fill$2 = (start, end, step, options = {}) => {
6710
6711
  return fill$2(start, end, 1, { transform: step });
6711
6712
  }
6712
6713
 
6713
- if (isObject$4(step)) {
6714
+ if (isObject$5(step)) {
6714
6715
  return fill$2(start, end, 0, step);
6715
6716
  }
6716
6717
 
@@ -6719,7 +6720,7 @@ const fill$2 = (start, end, step, options = {}) => {
6719
6720
  step = step || opts.step || 1;
6720
6721
 
6721
6722
  if (!isNumber$3(step)) {
6722
- if (step != null && !isObject$4(step)) return invalidStep(step, opts);
6723
+ if (step != null && !isObject$5(step)) return invalidStep(step, opts);
6723
6724
  return fill$2(start, end, 1, step);
6724
6725
  }
6725
6726
 
@@ -6789,7 +6790,7 @@ const compile$2 = (ast, options = {}) => {
6789
6790
  var compile_1$2 = compile$2;
6790
6791
 
6791
6792
  const fill = fillRange;
6792
- const stringify$a = stringify$c;
6793
+ const stringify$c = stringify$e;
6793
6794
  const utils$k = utils$n;
6794
6795
 
6795
6796
  const append$3 = (queue = '', stash = '', enclose = false) => {
@@ -6833,7 +6834,7 @@ const expand$1 = (ast, options = {}) => {
6833
6834
  }
6834
6835
 
6835
6836
  if (node.invalid || node.dollar) {
6836
- q.push(append$3(q.pop(), stringify$a(node, options)));
6837
+ q.push(append$3(q.pop(), stringify$c(node, options)));
6837
6838
  return;
6838
6839
  }
6839
6840
 
@@ -6851,7 +6852,7 @@ const expand$1 = (ast, options = {}) => {
6851
6852
 
6852
6853
  let range = fill(...args, options);
6853
6854
  if (range.length === 0) {
6854
- range = stringify$a(node, options);
6855
+ range = stringify$c(node, options);
6855
6856
  }
6856
6857
 
6857
6858
  q.push(append$3(q.pop(), range));
@@ -6956,7 +6957,7 @@ var constants$7 = {
6956
6957
  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
6957
6958
  };
6958
6959
 
6959
- const stringify$9 = stringify$c;
6960
+ const stringify$b = stringify$e;
6960
6961
 
6961
6962
  /**
6962
6963
  * Constants
@@ -7199,7 +7200,7 @@ const parse$g = (input, options = {}) => {
7199
7200
  if (block.ranges > 0) {
7200
7201
  block.ranges = 0;
7201
7202
  let open = block.nodes.shift();
7202
- block.nodes = [open, { type: 'text', value: stringify$9(block) }];
7203
+ block.nodes = [open, { type: 'text', value: stringify$b(block) }];
7203
7204
  }
7204
7205
 
7205
7206
  push({ type: 'comma', value });
@@ -7285,7 +7286,7 @@ const parse$g = (input, options = {}) => {
7285
7286
 
7286
7287
  var parse_1$3 = parse$g;
7287
7288
 
7288
- const stringify$8 = stringify$c;
7289
+ const stringify$a = stringify$e;
7289
7290
  const compile$1 = compile_1$2;
7290
7291
  const expand = expand_1;
7291
7292
  const parse$f = parse_1$3;
@@ -7358,9 +7359,9 @@ braces$1.parse = (input, options = {}) => parse$f(input, options);
7358
7359
 
7359
7360
  braces$1.stringify = (input, options = {}) => {
7360
7361
  if (typeof input === 'string') {
7361
- return stringify$8(braces$1.parse(input, options), options);
7362
+ return stringify$a(braces$1.parse(input, options), options);
7362
7363
  }
7363
- return stringify$8(input, options);
7364
+ return stringify$a(input, options);
7364
7365
  };
7365
7366
 
7366
7367
  /**
@@ -9185,7 +9186,7 @@ const scan = scan_1;
9185
9186
  const parse$d = parse_1$2;
9186
9187
  const utils$g = utils$j;
9187
9188
  const constants$4 = constants$6;
9188
- const isObject$3 = val => val && typeof val === 'object' && !Array.isArray(val);
9189
+ const isObject$4 = val => val && typeof val === 'object' && !Array.isArray(val);
9189
9190
 
9190
9191
  /**
9191
9192
  * Creates a matcher function from one or more glob patterns. The
@@ -9222,7 +9223,7 @@ const picomatch$2 = (glob, options, returnState = false) => {
9222
9223
  return arrayMatcher;
9223
9224
  }
9224
9225
 
9225
- const isState = isObject$3(glob) && glob.tokens && glob.input;
9226
+ const isState = isObject$4(glob) && glob.tokens && glob.input;
9226
9227
 
9227
9228
  if (glob === '' || (typeof glob !== 'string' && !isState)) {
9228
9229
  throw new TypeError('Expected pattern to be a non-empty string');
@@ -10354,7 +10355,7 @@ utils$o.string = string$1;
10354
10355
  Object.defineProperty(tasks, "__esModule", { value: true });
10355
10356
  tasks.convertPatternGroupToTask = tasks.convertPatternGroupsToTasks = tasks.groupPatternsByBaseDirectory = tasks.getNegativePatternsAsPositive = tasks.getPositivePatterns = tasks.convertPatternsToTasks = tasks.generate = void 0;
10356
10357
  const utils$e = utils$o;
10357
- function generate(patterns, settings) {
10358
+ function generate$1(patterns, settings) {
10358
10359
  const positivePatterns = getPositivePatterns(patterns);
10359
10360
  const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
10360
10361
  const staticPatterns = positivePatterns.filter((pattern) => utils$e.pattern.isStaticPattern(pattern, settings));
@@ -10363,7 +10364,7 @@ function generate(patterns, settings) {
10363
10364
  const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
10364
10365
  return staticTasks.concat(dynamicTasks);
10365
10366
  }
10366
- tasks.generate = generate;
10367
+ tasks.generate = generate$1;
10367
10368
  /**
10368
10369
  * Returns tasks grouped by basic pattern directories.
10369
10370
  *
@@ -12288,10 +12289,12 @@ var out = FastGlob;
12288
12289
 
12289
12290
  function relativize(path) {
12290
12291
  const result = commondir([path, process.cwd()]);
12291
- if (result === "/") {
12292
+ const relativePath = relative(process.cwd(), path);
12293
+ const relativeComponents = relativePath.split("/").filter((component) => component === "..").length;
12294
+ if (result === "/" || relativeComponents > 2) {
12292
12295
  return path;
12293
12296
  } else {
12294
- return relative(process.cwd(), path);
12297
+ return relativePath;
12295
12298
  }
12296
12299
  }
12297
12300
 
@@ -12304,7 +12307,7 @@ var path$w = /*#__PURE__*/Object.freeze({
12304
12307
  delimiter: delimiter,
12305
12308
  dirname: dirname$1,
12306
12309
  extname: extname,
12307
- format: format$4,
12310
+ format: format$5,
12308
12311
  isAbsolute: isAbsolute,
12309
12312
  join: join$3,
12310
12313
  normalize: normalize$2,
@@ -12317,7 +12320,7 @@ var path$w = /*#__PURE__*/Object.freeze({
12317
12320
  });
12318
12321
 
12319
12322
  var name = "@shopify/cli-kit";
12320
- var version$1 = "3.0.10";
12323
+ var version$2 = "3.0.13";
12321
12324
  var description$1 = "A set of utilities, interfaces, and models that are common across all the platform features";
12322
12325
  var keywords = [
12323
12326
  "shopify",
@@ -12370,7 +12373,8 @@ var dependencies$1 = {
12370
12373
  keytar: "^7.9.0",
12371
12374
  open: "^8.4.0",
12372
12375
  "source-map-support": "^0.5.21",
12373
- stacktracey: "^2.1.8"
12376
+ stacktracey: "^2.1.8",
12377
+ prettier: "^2.6.2"
12374
12378
  };
12375
12379
  var devDependencies = {
12376
12380
  "@iarna/toml": "^2.2.5",
@@ -12380,12 +12384,12 @@ var devDependencies = {
12380
12384
  "abort-controller": "^3.0.0",
12381
12385
  "ansi-colors": "^4.1.1",
12382
12386
  "change-case": "^4.1.2",
12383
- "color-json": "^2.0.1",
12384
12387
  commondir: "^1.0.1",
12385
12388
  conf: "^10.1.2",
12386
12389
  "cross-zip": "^4.0.0",
12387
12390
  del: "^6.0.0",
12388
12391
  enquirer: "^2.3.6",
12392
+ "color-json": "^2.0.1",
12389
12393
  "env-paths": "^3.0.0",
12390
12394
  execa: "^6.0.0",
12391
12395
  "fast-glob": "^3.2.11",
@@ -12396,6 +12400,7 @@ var devDependencies = {
12396
12400
  "get-port-please": "^2.5.0",
12397
12401
  graphql: "^16.4.0",
12398
12402
  "graphql-request": "^4.3.0",
12403
+ haikunator: "^2.1.2",
12399
12404
  "js-yaml": "^4.1.0",
12400
12405
  "latest-version": "^6.0.0",
12401
12406
  liquidjs: "^9.36.0",
@@ -12413,7 +12418,7 @@ var devDependencies = {
12413
12418
  };
12414
12419
  var cliKitPackageJson = {
12415
12420
  name: name,
12416
- version: version$1,
12421
+ version: version$2,
12417
12422
  "private": false,
12418
12423
  description: description$1,
12419
12424
  keywords: keywords,
@@ -12517,7 +12522,9 @@ const constants$2 = {
12517
12522
  spinWorkspace: "SPIN_WORKSPACE",
12518
12523
  spinNamespace: "SPIN_NAMESPACE",
12519
12524
  spinHost: "SPIN_HOST",
12520
- partnersToken: "SHOPIFY_CLI_PARTNERS_TOKEN"
12525
+ partnersToken: "SHOPIFY_CLI_PARTNERS_TOKEN",
12526
+ verbose: "SHOPIFY_FLAG_VERBOSE",
12527
+ noAnalytics: "SHOPIFY_CLI_NO_ANALYTICS"
12521
12528
  },
12522
12529
  paths: {
12523
12530
  executables: {
@@ -12540,7 +12547,7 @@ const constants$2 = {
12540
12547
  }
12541
12548
  },
12542
12549
  versions: {
12543
- cliKit: version$1
12550
+ cliKit: version$2
12544
12551
  },
12545
12552
  keychain: {
12546
12553
  service: "shopify-cli"
@@ -13217,7 +13224,7 @@ function npmRunPath(options = {}) {
13217
13224
  return [...result, path_].join(path$I.delimiter);
13218
13225
  }
13219
13226
 
13220
- function npmRunPathEnv({env = process$2.env, ...options}) {
13227
+ function npmRunPathEnv({env = process$2.env, ...options} = {}) {
13221
13228
  env = {...env};
13222
13229
 
13223
13230
  const path = pathKey({env});
@@ -14652,11 +14659,30 @@ const open = async (url) => {
14652
14659
  const externalOpen = await import('open');
14653
14660
  await externalOpen.default(url);
14654
14661
  };
14655
- const captureOutput = async (command, args) => {
14656
- const result = await execa(command, args);
14662
+ const captureOutput = async (command, args, options) => {
14663
+ const result = await buildExec(command, args, options);
14657
14664
  return result.stdout;
14658
14665
  };
14659
- const exec$2 = (command, args, options) => {
14666
+ const exec$2 = async (command, args, options) => {
14667
+ const commandProcess = buildExec(command, args, options);
14668
+ if (options?.stderr) {
14669
+ commandProcess.stderr?.pipe(options.stderr);
14670
+ }
14671
+ if (options?.stdout) {
14672
+ commandProcess.stdout?.pipe(options.stdout);
14673
+ }
14674
+ options?.signal?.addEventListener("abort", () => {
14675
+ commandProcess.kill("SIGTERM", { forceKillAfterTimeout: 1e3 });
14676
+ });
14677
+ try {
14678
+ await commandProcess;
14679
+ } catch (processError) {
14680
+ const abortError = new Abort(processError.message);
14681
+ abortError.stack = processError.stack;
14682
+ throw abortError;
14683
+ }
14684
+ };
14685
+ const buildExec = (command, args, options) => {
14660
14686
  const env = options?.env ?? process.env;
14661
14687
  if (shouldDisplayColors()) {
14662
14688
  env.FORCE_COLOR = "1";
@@ -14671,17 +14697,7 @@ Running system process:
14671
14697
  \xB7 Command: ${command} ${args.join(" ")}
14672
14698
  \xB7 Working directory: ${options?.cwd ?? process.cwd()}
14673
14699
  `);
14674
- if (options?.stderr) {
14675
- commandProcess.stderr?.pipe(options.stderr);
14676
- }
14677
- if (options?.stdout) {
14678
- commandProcess.stdout?.pipe(options.stdout);
14679
- }
14680
- return commandProcess.catch((processError) => {
14681
- const abortError = new Abort(processError.message);
14682
- abortError.stack = processError.stack;
14683
- throw abortError;
14684
- });
14700
+ return commandProcess;
14685
14701
  };
14686
14702
  const concurrentExec = async (commands) => {
14687
14703
  await concurrent(commands.map((command) => {
@@ -16492,7 +16508,7 @@ const assert$2 = require$$0$4;
16492
16508
 
16493
16509
  const isWindows$2 = (process.platform === 'win32');
16494
16510
 
16495
- function defaults$2 (options) {
16511
+ function defaults$3 (options) {
16496
16512
  const methods = [
16497
16513
  'unlink',
16498
16514
  'chmod',
@@ -16524,7 +16540,7 @@ function rimraf$3 (p, options, cb) {
16524
16540
  assert$2(options, 'rimraf: invalid options argument provided');
16525
16541
  assert$2.strictEqual(typeof options, 'object', 'rimraf: options should be object');
16526
16542
 
16527
- defaults$2(options);
16543
+ defaults$3(options);
16528
16544
 
16529
16545
  rimraf_$1(p, options, function CB (er) {
16530
16546
  if (er) {
@@ -16703,7 +16719,7 @@ function rimrafSync$1 (p, options) {
16703
16719
  let st;
16704
16720
 
16705
16721
  options = options || {};
16706
- defaults$2(options);
16722
+ defaults$3(options);
16707
16723
 
16708
16724
  assert$2(p, 'rimraf: missing path');
16709
16725
  assert$2.strictEqual(typeof p, 'string', 'rimraf: path should be a string');
@@ -17208,7 +17224,7 @@ var ensure = {
17208
17224
  ensureSymlinkSync: createSymlinkSync
17209
17225
  };
17210
17226
 
17211
- function stringify$7 (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
17227
+ function stringify$9 (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
17212
17228
  const EOF = finalEOL ? EOL : '';
17213
17229
  const str = JSON.stringify(obj, replacer, spaces);
17214
17230
 
@@ -17221,7 +17237,7 @@ function stripBom$1 (content) {
17221
17237
  return content.replace(/^\uFEFF/, '')
17222
17238
  }
17223
17239
 
17224
- var utils$2 = { stringify: stringify$7, stripBom: stripBom$1 };
17240
+ var utils$2 = { stringify: stringify$9, stripBom: stripBom$1 };
17225
17241
 
17226
17242
  let _fs;
17227
17243
  try {
@@ -17230,7 +17246,7 @@ try {
17230
17246
  _fs = require$$0$8;
17231
17247
  }
17232
17248
  const universalify = universalify$1;
17233
- const { stringify: stringify$6, stripBom } = utils$2;
17249
+ const { stringify: stringify$8, stripBom } = utils$2;
17234
17250
 
17235
17251
  async function _readFile (file, options = {}) {
17236
17252
  if (typeof options === 'string') {
@@ -17288,7 +17304,7 @@ function readFileSync$2 (file, options = {}) {
17288
17304
  async function _writeFile (file, obj, options = {}) {
17289
17305
  const fs = options.fs || _fs;
17290
17306
 
17291
- const str = stringify$6(obj, options);
17307
+ const str = stringify$8(obj, options);
17292
17308
 
17293
17309
  await universalify.fromCallback(fs.writeFile)(file, str, options);
17294
17310
  }
@@ -17298,7 +17314,7 @@ const writeFile$1 = universalify.fromPromise(_writeFile);
17298
17314
  function writeFileSync$1 (file, obj, options = {}) {
17299
17315
  const fs = options.fs || _fs;
17300
17316
 
17301
- const str = stringify$6(obj, options);
17317
+ const str = stringify$8(obj, options);
17302
17318
  // not sure if fs.writeFileSync returns anything, but just in case
17303
17319
  return fs.writeFileSync(file, str, options)
17304
17320
  }
@@ -17361,22 +17377,22 @@ var outputFile_1 = {
17361
17377
  outputFileSync: outputFileSync$1
17362
17378
  };
17363
17379
 
17364
- const { stringify: stringify$5 } = utils$2;
17380
+ const { stringify: stringify$7 } = utils$2;
17365
17381
  const { outputFile } = outputFile_1;
17366
17382
 
17367
17383
  async function outputJson (file, data, options = {}) {
17368
- const str = stringify$5(data, options);
17384
+ const str = stringify$7(data, options);
17369
17385
 
17370
17386
  await outputFile(file, str, options);
17371
17387
  }
17372
17388
 
17373
17389
  var outputJson_1 = outputJson;
17374
17390
 
17375
- const { stringify: stringify$4 } = utils$2;
17391
+ const { stringify: stringify$6 } = utils$2;
17376
17392
  const { outputFileSync } = outputFile_1;
17377
17393
 
17378
17394
  function outputJsonSync (file, data, options) {
17379
- const str = stringify$4(data, options);
17395
+ const str = stringify$6(data, options);
17380
17396
 
17381
17397
  outputFileSync(file, str, options);
17382
17398
  }
@@ -18689,7 +18705,7 @@ let timeout = 0;
18689
18705
 
18690
18706
  const isWindows$1 = (process.platform === "win32");
18691
18707
 
18692
- const defaults$1 = options => {
18708
+ const defaults$2 = options => {
18693
18709
  const methods = [
18694
18710
  'unlink',
18695
18711
  'chmod',
@@ -18728,7 +18744,7 @@ const rimraf$1 = (p, options, cb) => {
18728
18744
  assert$1(options, 'rimraf: invalid options argument provided');
18729
18745
  assert$1.equal(typeof options, 'object', 'rimraf: options should be object');
18730
18746
 
18731
- defaults$1(options);
18747
+ defaults$2(options);
18732
18748
 
18733
18749
  let busyTries = 0;
18734
18750
  let errState = null;
@@ -18928,7 +18944,7 @@ const rmkids = (p, options, cb) => {
18928
18944
  // deep directory trees.
18929
18945
  const rimrafSync = (p, options) => {
18930
18946
  options = options || {};
18931
- defaults$1(options);
18947
+ defaults$2(options);
18932
18948
 
18933
18949
  assert$1(p, 'rimraf: missing path');
18934
18950
  assert$1.equal(typeof p, 'string', 'rimraf: path should be a string');
@@ -19030,7 +19046,7 @@ const rmkidsSync = (p, options) => {
19030
19046
  var rimraf_1 = rimraf$1;
19031
19047
  rimraf$1.sync = rimrafSync;
19032
19048
 
19033
- var indentString$3 = (string, count, options) => {
19049
+ var indentString$3 = (string, count = 1, options) => {
19034
19050
  options = {
19035
19051
  indent: ' ',
19036
19052
  includeEmptyLines: false,
@@ -19606,6 +19622,12 @@ Object.defineProperty(tempy, 'root', {
19606
19622
  },
19607
19623
  });
19608
19624
 
19625
+ const DEFAULT_PRETTIER_CONFIG = {
19626
+ arrowParens: "always",
19627
+ singleQuote: true,
19628
+ bracketSpacing: false,
19629
+ trailingComma: "all"
19630
+ };
19609
19631
  function stripUp(path, strip) {
19610
19632
  const parts = path.split(sep);
19611
19633
  return join$3(...parts.slice(strip));
@@ -19620,6 +19642,9 @@ async function read$1(path) {
19620
19642
  async function copy(from, to) {
19621
19643
  await fs$g.copy(from, to);
19622
19644
  }
19645
+ async function touch(path) {
19646
+ await fs$g.ensureFile(path);
19647
+ }
19623
19648
  async function write$1(path, data) {
19624
19649
  await fs$g.writeFile(path, data);
19625
19650
  }
@@ -19664,6 +19689,21 @@ async function exists$1(path) {
19664
19689
  return false;
19665
19690
  }
19666
19691
  }
19692
+ async function format$4(content, options) {
19693
+ const ext = extname(options.path);
19694
+ const prettierConfig = {
19695
+ ...DEFAULT_PRETTIER_CONFIG,
19696
+ parser: "babel"
19697
+ };
19698
+ switch (ext) {
19699
+ case ".html":
19700
+ case ".css":
19701
+ prettierConfig.parser = ext.slice(1);
19702
+ break;
19703
+ }
19704
+ const formattedContent = await prettier.format(content, prettierConfig);
19705
+ return formattedContent;
19706
+ }
19667
19707
 
19668
19708
  var file$1 = /*#__PURE__*/Object.freeze({
19669
19709
  __proto__: null,
@@ -19671,6 +19711,7 @@ var file$1 = /*#__PURE__*/Object.freeze({
19671
19711
  inTemporaryDirectory: inTemporaryDirectory,
19672
19712
  read: read$1,
19673
19713
  copy: copy,
19714
+ touch: touch,
19674
19715
  write: write$1,
19675
19716
  append: append$2,
19676
19717
  mkdir: mkdir,
@@ -19681,7 +19722,8 @@ var file$1 = /*#__PURE__*/Object.freeze({
19681
19722
  move: move,
19682
19723
  chmod: chmod,
19683
19724
  hasExecutablePermissions: hasExecutablePermissions,
19684
- exists: exists$1
19725
+ exists: exists$1,
19726
+ format: format$4
19685
19727
  });
19686
19728
 
19687
19729
  function homeDirectory() {
@@ -19690,6 +19732,9 @@ function homeDirectory() {
19690
19732
  function isDebug(env = process.env) {
19691
19733
  return env[constants$2.environmentVariables.shopifyConfig] === "debug";
19692
19734
  }
19735
+ function isVerbose(env = process.env) {
19736
+ return isTruthy$1(env[constants$2.environmentVariables.verbose]) || process.argv.includes("--verbose");
19737
+ }
19693
19738
  async function isShopify(env = process.env) {
19694
19739
  const runAsUser = isTruthy$1(env[constants$2.environmentVariables.runAsUser]);
19695
19740
  if (runAsUser) {
@@ -19701,13 +19746,18 @@ async function isShopify(env = process.env) {
19701
19746
  function isUnitTest(env = process.env) {
19702
19747
  return isTruthy$1(env[constants$2.environmentVariables.unitTest]);
19703
19748
  }
19749
+ function analyticsDisabled(env = process.env) {
19750
+ return isTruthy$1(env[constants$2.environmentVariables.noAnalytics]);
19751
+ }
19704
19752
 
19705
19753
  var local = /*#__PURE__*/Object.freeze({
19706
19754
  __proto__: null,
19707
19755
  homeDirectory: homeDirectory,
19708
19756
  isDebug: isDebug,
19757
+ isVerbose: isVerbose,
19709
19758
  isShopify: isShopify,
19710
- isUnitTest: isUnitTest
19759
+ isUnitTest: isUnitTest,
19760
+ analyticsDisabled: analyticsDisabled
19711
19761
  });
19712
19762
 
19713
19763
  const ESC = '\u001B[';
@@ -20630,7 +20680,7 @@ const ATTRIBUTE = 3;
20630
20680
  * @param {any} x The value to check.
20631
20681
  * @returns {boolean} `true` if the value is an object.
20632
20682
  */
20633
- function isObject$2(x) {
20683
+ function isObject$3(x) {
20634
20684
  return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax
20635
20685
  }
20636
20686
 
@@ -20671,7 +20721,7 @@ function defineEventAttributeDescriptor(eventName) {
20671
20721
  },
20672
20722
 
20673
20723
  set(listener) {
20674
- if (typeof listener !== "function" && !isObject$2(listener)) {
20724
+ if (typeof listener !== "function" && !isObject$3(listener)) {
20675
20725
  listener = null; // eslint-disable-line no-param-reassign
20676
20726
  }
20677
20727
  const listeners = getListeners(this);
@@ -20804,12 +20854,12 @@ EventTarget.prototype = {
20804
20854
  if (listener == null) {
20805
20855
  return
20806
20856
  }
20807
- if (typeof listener !== "function" && !isObject$2(listener)) {
20857
+ if (typeof listener !== "function" && !isObject$3(listener)) {
20808
20858
  throw new TypeError("'listener' should be a function or an object.")
20809
20859
  }
20810
20860
 
20811
20861
  const listeners = getListeners(this);
20812
- const optionsIsObj = isObject$2(options);
20862
+ const optionsIsObj = isObject$3(options);
20813
20863
  const capture = optionsIsObj
20814
20864
  ? Boolean(options.capture)
20815
20865
  : Boolean(options);
@@ -20860,7 +20910,7 @@ EventTarget.prototype = {
20860
20910
  }
20861
20911
 
20862
20912
  const listeners = getListeners(this);
20863
- const capture = isObject$2(options)
20913
+ const capture = isObject$3(options)
20864
20914
  ? Boolean(options.capture)
20865
20915
  : Boolean(options);
20866
20916
  const listenerType = capture ? CAPTURE : BUBBLE;
@@ -21127,7 +21177,7 @@ const defaultColors = {
21127
21177
  key: 'white'
21128
21178
  };
21129
21179
 
21130
- var colorJson$1 = supportsColor() ? function syntaxHighlight(json, colors = defaultColors, colorMap = defaultColorMap, spacing = 2) { // thanks: https://stackoverflow.com/a/7220510/4151489
21180
+ var colorJson = supportsColor() ? function syntaxHighlight(json, colors = defaultColors, colorMap = defaultColorMap, spacing = 2) { // thanks: https://stackoverflow.com/a/7220510/4151489
21131
21181
  if (typeof json != 'string') json = JSON.stringify(json, undefined, spacing);
21132
21182
  else json = JSON.stringify(JSON.parse(json), undefined, spacing);
21133
21183
  return colorMap[colors.separator] + json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
@@ -21154,41 +21204,53 @@ class ContentToken {
21154
21204
  }
21155
21205
  }
21156
21206
  const token = {
21207
+ raw: (value) => {
21208
+ return new ContentToken(value, {}, 0 /* Raw */);
21209
+ },
21157
21210
  genericShellCommand: (value) => {
21158
- return new ContentToken(value, {}, 0 /* Command */);
21211
+ return new ContentToken(value, {}, 1 /* Command */);
21212
+ },
21213
+ json: (value) => {
21214
+ return new ContentToken(value, {}, 2 /* Json */);
21159
21215
  },
21160
21216
  path: (value) => {
21161
- return new ContentToken(value, {}, 1 /* Path */);
21217
+ return new ContentToken(value, {}, 3 /* Path */);
21162
21218
  },
21163
21219
  link: (value, link) => {
21164
- return new ContentToken(value, { link }, 2 /* Link */);
21220
+ return new ContentToken(value, { link }, 4 /* Link */);
21165
21221
  },
21166
21222
  heading: (value) => {
21167
- return new ContentToken(value, {}, 3 /* Heading */);
21223
+ return new ContentToken(value, {}, 5 /* Heading */);
21168
21224
  },
21169
21225
  subheading: (value) => {
21170
- return new ContentToken(value, {}, 4 /* SubHeading */);
21226
+ return new ContentToken(value, {}, 6 /* SubHeading */);
21171
21227
  },
21172
21228
  italic: (value) => {
21173
- return new ContentToken(value, {}, 5 /* Italic */);
21229
+ return new ContentToken(value, {}, 7 /* Italic */);
21174
21230
  },
21175
21231
  errorText: (value) => {
21176
- return new ContentToken(value, {}, 6 /* ErrorText */);
21232
+ return new ContentToken(value, {}, 8 /* ErrorText */);
21177
21233
  },
21178
21234
  cyan: (value) => {
21179
- return new ContentToken(value, {}, 8 /* Cyan */);
21235
+ return new ContentToken(value, {}, 10 /* Cyan */);
21180
21236
  },
21181
21237
  yellow: (value) => {
21182
- return new ContentToken(value, {}, 7 /* Yellow */);
21238
+ return new ContentToken(value, {}, 9 /* Yellow */);
21183
21239
  },
21184
21240
  magenta: (value) => {
21185
- return new ContentToken(value, {}, 9 /* Magenta */);
21241
+ return new ContentToken(value, {}, 11 /* Magenta */);
21186
21242
  },
21187
21243
  green: (value) => {
21188
- return new ContentToken(value, {}, 10 /* Green */);
21244
+ return new ContentToken(value, {}, 12 /* Green */);
21189
21245
  },
21190
- command: (dependencyManager, scriptName, ...scriptArgs) => {
21191
- return new ContentToken(formatPackageManagerCommand(dependencyManager, scriptName, scriptArgs), {}, 0 /* Command */);
21246
+ packagejsonScript: (dependencyManager, scriptName, ...scriptArgs) => {
21247
+ return new ContentToken(formatPackageManagerCommand(dependencyManager, scriptName, scriptArgs), {}, 1 /* Command */);
21248
+ },
21249
+ successIcon: () => {
21250
+ return new ContentToken("\u2714", {}, 12 /* Green */);
21251
+ },
21252
+ failIcon: () => {
21253
+ return new ContentToken("\u2716", {}, 8 /* ErrorText */);
21192
21254
  }
21193
21255
  };
21194
21256
  function formatPackageManagerCommand(dependencyManager, scriptName, scriptArgs) {
@@ -21226,38 +21288,48 @@ function content(strings, ...keys) {
21226
21288
  } else {
21227
21289
  const enumToken = token2;
21228
21290
  switch (enumToken.type) {
21229
- case 0 /* Command */:
21230
- output += colors$9.bold(colors$9.yellow(enumToken.value));
21291
+ case 0 /* Raw */:
21292
+ output += enumToken.value;
21293
+ break;
21294
+ case 1 /* Command */:
21295
+ output += colors$9.bold(colors$9.yellow(stringifyMessage(enumToken.value)));
21231
21296
  break;
21232
- case 1 /* Path */:
21233
- output += colors$9.italic(enumToken.value);
21297
+ case 3 /* Path */:
21298
+ output += colors$9.cyan(relativize(stringifyMessage(enumToken.value)));
21299
+ break;
21300
+ case 2 /* Json */:
21301
+ try {
21302
+ output += colorJson(stringifyMessage(enumToken.value) ?? {});
21303
+ } catch (_) {
21304
+ output += JSON.stringify(stringifyMessage(enumToken.value) ?? {}, null, 2);
21305
+ }
21234
21306
  break;
21235
- case 2 /* Link */:
21236
- output += terminalLink(colors$9.green(enumToken.value), enumToken.metadata.link ?? "");
21307
+ case 4 /* Link */:
21308
+ output += terminalLink(colors$9.green(stringifyMessage(enumToken.value)), enumToken.metadata.link ?? "");
21237
21309
  break;
21238
- case 3 /* Heading */:
21239
- output += colors$9.bold.underline(enumToken.value);
21310
+ case 5 /* Heading */:
21311
+ output += colors$9.bold.underline(stringifyMessage(enumToken.value));
21240
21312
  break;
21241
- case 4 /* SubHeading */:
21242
- output += colors$9.underline(enumToken.value);
21313
+ case 6 /* SubHeading */:
21314
+ output += colors$9.underline(stringifyMessage(enumToken.value));
21243
21315
  break;
21244
- case 5 /* Italic */:
21245
- output += colors$9.italic(enumToken.value);
21316
+ case 7 /* Italic */:
21317
+ output += colors$9.italic(stringifyMessage(enumToken.value));
21246
21318
  break;
21247
- case 6 /* ErrorText */:
21248
- output += colors$9.bold.redBright(enumToken.value);
21319
+ case 8 /* ErrorText */:
21320
+ output += colors$9.bold.redBright(stringifyMessage(enumToken.value));
21249
21321
  break;
21250
- case 7 /* Yellow */:
21251
- output += colors$9.yellow(enumToken.value);
21322
+ case 9 /* Yellow */:
21323
+ output += colors$9.yellow(stringifyMessage(enumToken.value));
21252
21324
  break;
21253
- case 8 /* Cyan */:
21254
- output += colors$9.cyan(enumToken.value);
21325
+ case 10 /* Cyan */:
21326
+ output += colors$9.cyan(stringifyMessage(enumToken.value));
21255
21327
  break;
21256
- case 9 /* Magenta */:
21257
- output += colors$9.magenta(enumToken.value);
21328
+ case 11 /* Magenta */:
21329
+ output += colors$9.magenta(stringifyMessage(enumToken.value));
21258
21330
  break;
21259
- case 10 /* Green */:
21260
- output += colors$9.green(enumToken.value);
21331
+ case 12 /* Green */:
21332
+ output += colors$9.green(stringifyMessage(enumToken.value));
21261
21333
  break;
21262
21334
  }
21263
21335
  }
@@ -21283,7 +21355,7 @@ const logLevelValue = (level) => {
21283
21355
  }
21284
21356
  };
21285
21357
  const currentLogLevel = () => {
21286
- if (process.argv.includes("--verbose")) {
21358
+ if (isVerbose()) {
21287
21359
  return "debug";
21288
21360
  } else {
21289
21361
  return "info";
@@ -21319,9 +21391,6 @@ const warn = (content2) => {
21319
21391
  const newline = () => {
21320
21392
  console.log();
21321
21393
  };
21322
- const colorJson = (json) => {
21323
- return colorJson$1(json);
21324
- };
21325
21394
  const error$k = async (content2) => {
21326
21395
  if (shouldOutput("error")) {
21327
21396
  if (!content2.message) {
@@ -21375,13 +21444,15 @@ function stringifyMessage(message2) {
21375
21444
  return message2;
21376
21445
  }
21377
21446
  }
21378
- const message = (content2, level) => {
21447
+ const message = (content2, level = "info") => {
21379
21448
  if (shouldOutput(level)) {
21380
21449
  consoleLog(stringifyMessage(content2));
21381
21450
  }
21382
21451
  };
21383
- async function concurrent(processes) {
21452
+ async function concurrent(processes, callback = void 0) {
21384
21453
  const abortController = new AbortController$1();
21454
+ if (callback)
21455
+ callback(abortController.signal);
21385
21456
  const concurrentColors = [token.yellow, token.cyan, token.magenta, token.green];
21386
21457
  const prefixColumnSize = Math.max(...processes.map((process2) => process2.prefix.length));
21387
21458
  function linePrefix(prefix, index) {
@@ -21404,7 +21475,7 @@ async function concurrent(processes) {
21404
21475
  write(chunk, _encoding, next) {
21405
21476
  const lines = stripAnsiEraseCursorEscapeCharacters(chunk.toString("ascii")).split(/\n/);
21406
21477
  for (const line of lines) {
21407
- message(content`${linePrefix(process2.prefix, index)}${colors$9.bold("ERROR")} ${line}`, "error");
21478
+ message(content`${linePrefix(process2.prefix, index)}${colors$9.bold(line)}`, "error");
21408
21479
  }
21409
21480
  next();
21410
21481
  }
@@ -21459,7 +21530,6 @@ var output = /*#__PURE__*/Object.freeze({
21459
21530
  debug: debug$5,
21460
21531
  warn: warn,
21461
21532
  newline: newline,
21462
- colorJson: colorJson,
21463
21533
  error: error$k,
21464
21534
  stringifyMessage: stringifyMessage,
21465
21535
  concurrent: concurrent,
@@ -21470,8 +21540,8 @@ var output = /*#__PURE__*/Object.freeze({
21470
21540
  sourceMapSupport.install();
21471
21541
  class Fatal extends Error {
21472
21542
  constructor(message, type, tryMessage = null) {
21473
- super(message);
21474
- this.tryMessage = tryMessage;
21543
+ super(stringifyMessage(message));
21544
+ this.tryMessage = tryMessage ? stringifyMessage(tryMessage) : null;
21475
21545
  this.type = type;
21476
21546
  }
21477
21547
  }
@@ -21619,7 +21689,7 @@ function __spreadArray$1(to, from, pack) {
21619
21689
  return to.concat(ar || Array.prototype.slice.call(from));
21620
21690
  }
21621
21691
 
21622
- function isFunction$1(value) {
21692
+ function isFunction$2(value) {
21623
21693
  return typeof value === 'function';
21624
21694
  }
21625
21695
 
@@ -21687,7 +21757,7 @@ var Subscription = (function () {
21687
21757
  }
21688
21758
  }
21689
21759
  var initialFinalizer = this.initialTeardown;
21690
- if (isFunction$1(initialFinalizer)) {
21760
+ if (isFunction$2(initialFinalizer)) {
21691
21761
  try {
21692
21762
  initialFinalizer();
21693
21763
  }
@@ -21779,10 +21849,10 @@ var Subscription = (function () {
21779
21849
  var EMPTY_SUBSCRIPTION = Subscription.EMPTY;
21780
21850
  function isSubscription(value) {
21781
21851
  return (value instanceof Subscription ||
21782
- (value && 'closed' in value && isFunction$1(value.remove) && isFunction$1(value.add) && isFunction$1(value.unsubscribe)));
21852
+ (value && 'closed' in value && isFunction$2(value.remove) && isFunction$2(value.add) && isFunction$2(value.unsubscribe)));
21783
21853
  }
21784
21854
  function execFinalizer(finalizer) {
21785
- if (isFunction$1(finalizer)) {
21855
+ if (isFunction$2(finalizer)) {
21786
21856
  finalizer();
21787
21857
  }
21788
21858
  else {
@@ -21966,7 +22036,7 @@ var SafeSubscriber = (function (_super) {
21966
22036
  function SafeSubscriber(observerOrNext, error, complete) {
21967
22037
  var _this = _super.call(this) || this;
21968
22038
  var partialObserver;
21969
- if (isFunction$1(observerOrNext) || !observerOrNext) {
22039
+ if (isFunction$2(observerOrNext) || !observerOrNext) {
21970
22040
  partialObserver = {
21971
22041
  next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,
21972
22042
  error: error !== null && error !== void 0 ? error : undefined,
@@ -22114,7 +22184,7 @@ function getPromiseCtor(promiseCtor) {
22114
22184
  return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;
22115
22185
  }
22116
22186
  function isObserver(value) {
22117
- return value && isFunction$1(value.next) && isFunction$1(value.error) && isFunction$1(value.complete);
22187
+ return value && isFunction$2(value.next) && isFunction$2(value.error) && isFunction$2(value.complete);
22118
22188
  }
22119
22189
  function isSubscriber(value) {
22120
22190
  return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));
@@ -25007,16 +25077,17 @@ const argv = process.argv || [];
25007
25077
  const isDisabled = "NO_COLOR" in env$1 || argv.includes("--no-color");
25008
25078
  const isForced = "FORCE_COLOR" in env$1 || argv.includes("--color");
25009
25079
  const isWindows = process.platform === "win32";
25080
+ const isDumbTerminal = env$1.TERM === "dumb";
25010
25081
 
25011
25082
  const isCompatibleTerminal =
25012
- tty$1 && tty$1.isatty && tty$1.isatty(1) && env$1.TERM && env$1.TERM !== "dumb";
25083
+ tty$1 && tty$1.isatty && tty$1.isatty(1) && env$1.TERM && !isDumbTerminal;
25013
25084
 
25014
25085
  const isCI =
25015
25086
  "CI" in env$1 &&
25016
25087
  ("GITHUB_ACTIONS" in env$1 || "GITLAB_CI" in env$1 || "CIRCLECI" in env$1);
25017
25088
 
25018
25089
  const isColorSupported =
25019
- !isDisabled && (isForced || isWindows || isCompatibleTerminal || isCI);
25090
+ !isDisabled && (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI);
25020
25091
 
25021
25092
  const replaceClose = (
25022
25093
  index,
@@ -25093,13 +25164,11 @@ const colors = {
25093
25164
  bgWhiteBright: init(107, 49),
25094
25165
  };
25095
25166
 
25096
- const none = (any) => any;
25097
-
25098
25167
  const createColors = ({ useColor = isColorSupported } = {}) =>
25099
25168
  useColor
25100
25169
  ? colors
25101
25170
  : Object.keys(colors).reduce(
25102
- (colors, key) => ({ ...colors, [key]: none }),
25171
+ (colors, key) => ({ ...colors, [key]: String }),
25103
25172
  {}
25104
25173
  );
25105
25174
 
@@ -26590,12 +26659,12 @@ var Drop = /** @class */ (function () {
26590
26659
 
26591
26660
  var toString$1 = Object.prototype.toString;
26592
26661
  var toLowerCase = String.prototype.toLowerCase;
26593
- var hasOwnProperty$1 = Object.hasOwnProperty;
26662
+ var hasOwnProperty$2 = Object.hasOwnProperty;
26594
26663
  function isString(value) {
26595
26664
  return typeof value === 'string';
26596
26665
  }
26597
26666
  // eslint-disable-next-line @typescript-eslint/ban-types
26598
- function isFunction(value) {
26667
+ function isFunction$1(value) {
26599
26668
  return typeof value === 'function';
26600
26669
  }
26601
26670
  function escapeRegex(str) {
@@ -26614,14 +26683,14 @@ function promisify$2(fn) {
26614
26683
  });
26615
26684
  };
26616
26685
  }
26617
- function stringify$3(value) {
26686
+ function stringify$5(value) {
26618
26687
  value = toValue$1(value);
26619
26688
  if (isString(value))
26620
26689
  return value;
26621
26690
  if (isNil(value))
26622
26691
  return '';
26623
- if (isArray(value))
26624
- return value.map(function (x) { return stringify$3(x); }).join('');
26692
+ if (isArray$1(value))
26693
+ return value.map(function (x) { return stringify$5(x); }).join('');
26625
26694
  return String(value);
26626
26695
  }
26627
26696
  function toValue$1(value) {
@@ -26631,14 +26700,14 @@ function isNumber$2(value) {
26631
26700
  return typeof value === 'number';
26632
26701
  }
26633
26702
  function toLiquid(value) {
26634
- if (value && isFunction(value.toLiquid))
26703
+ if (value && isFunction$1(value.toLiquid))
26635
26704
  return toLiquid(value.toLiquid());
26636
26705
  return value;
26637
26706
  }
26638
26707
  function isNil(value) {
26639
26708
  return value == null;
26640
26709
  }
26641
- function isArray(value) {
26710
+ function isArray$1(value) {
26642
26711
  // be compatible with IE 8
26643
26712
  return toString$1.call(value) === '[object Array]';
26644
26713
  }
@@ -26653,7 +26722,7 @@ function isArray(value) {
26653
26722
  function forOwn(obj, iteratee) {
26654
26723
  obj = obj || {};
26655
26724
  for (var k in obj) {
26656
- if (hasOwnProperty$1.call(obj, k)) {
26725
+ if (hasOwnProperty$2.call(obj, k)) {
26657
26726
  if (iteratee(obj[k], k, obj) === false)
26658
26727
  break;
26659
26728
  }
@@ -26669,7 +26738,7 @@ function last$1(arr) {
26669
26738
  * @param {any} value The value to check.
26670
26739
  * @return {Boolean} Returns true if value is an object, else false.
26671
26740
  */
26672
- function isObject$1(value) {
26741
+ function isObject$2(value) {
26673
26742
  var type = typeof value;
26674
26743
  return value !== null && (type === 'object' || type === 'function');
26675
26744
  }
@@ -26877,7 +26946,7 @@ var fs$a = /*#__PURE__*/Object.freeze({
26877
26946
  });
26878
26947
 
26879
26948
  function isComparable(arg) {
26880
- return arg && isFunction(arg.equals);
26949
+ return arg && isFunction$1(arg.equals);
26881
26950
  }
26882
26951
 
26883
26952
  function isTruthy(val, ctx) {
@@ -26938,7 +27007,7 @@ var defaultOperators = {
26938
27007
  'contains': function (l, r) {
26939
27008
  l = toValue$1(l);
26940
27009
  r = toValue$1(r);
26941
- return l && isFunction(l.indexOf) ? l.indexOf(r) > -1 : false;
27010
+ return l && isFunction$1(l.indexOf) ? l.indexOf(r) > -1 : false;
26942
27011
  },
26943
27012
  'and': function (l, r, ctx) { return isTruthy(l, ctx) && isTruthy(r, ctx); },
26944
27013
  'or': function (l, r, ctx) { return isTruthy(l, ctx) || isTruthy(r, ctx); }
@@ -27001,19 +27070,19 @@ var unescapeMap = {
27001
27070
  ''': "'"
27002
27071
  };
27003
27072
  function escape(str) {
27004
- return stringify$3(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; });
27073
+ return stringify$5(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; });
27005
27074
  }
27006
27075
  function unescape$1(str) {
27007
- return stringify$3(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; });
27076
+ return stringify$5(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; });
27008
27077
  }
27009
27078
  function escapeOnce(str) {
27010
- return escape(unescape$1(stringify$3(str)));
27079
+ return escape(unescape$1(stringify$5(str)));
27011
27080
  }
27012
27081
  function newlineToBr(v) {
27013
- return stringify$3(v).replace(/\n/g, '<br />\n');
27082
+ return stringify$5(v).replace(/\n/g, '<br />\n');
27014
27083
  }
27015
27084
  function stripHtml(v) {
27016
- return stringify$3(v).replace(/<script.*?<\/script>|<!--.*?-->|<style.*?<\/style>|<.*?>/g, '');
27085
+ return stringify$5(v).replace(/<script.*?<\/script>|<!--.*?-->|<style.*?<\/style>|<.*?>/g, '');
27017
27086
  }
27018
27087
 
27019
27088
  var abs = argumentsToValue(Math.abs);
@@ -27041,34 +27110,34 @@ function plus(v, arg) {
27041
27110
  return Number(v) + Number(arg);
27042
27111
  }
27043
27112
 
27044
- var urlDecode = function (x) { return stringify$3(x).split('+').map(decodeURIComponent).join(' '); };
27045
- var urlEncode = function (x) { return stringify$3(x).split(' ').map(encodeURIComponent).join('+'); };
27113
+ var urlDecode = function (x) { return stringify$5(x).split('+').map(decodeURIComponent).join(' '); };
27114
+ var urlEncode = function (x) { return stringify$5(x).split(' ').map(encodeURIComponent).join('+'); };
27046
27115
 
27047
27116
  function toEnumerable(val) {
27048
- if (isArray(val))
27117
+ if (isArray$1(val))
27049
27118
  return val;
27050
27119
  if (isString(val) && val.length > 0)
27051
27120
  return [val];
27052
- if (isObject$1(val))
27121
+ if (isObject$2(val))
27053
27122
  return Object.keys(val).map(function (key) { return [key, val[key]]; });
27054
27123
  return [];
27055
27124
  }
27056
27125
  function toArray$1(val) {
27057
27126
  if (isNil(val))
27058
27127
  return [];
27059
- if (isArray(val))
27128
+ if (isArray$1(val))
27060
27129
  return val;
27061
27130
  return [val];
27062
27131
  }
27063
27132
 
27064
27133
  var join$2 = argumentsToValue(function (v, arg) { return toArray$1(v).join(arg === undefined ? ' ' : arg); });
27065
- var last$2 = argumentsToValue(function (v) { return isArray(v) ? last$1(v) : ''; });
27066
- var first$1 = argumentsToValue(function (v) { return isArray(v) ? v[0] : ''; });
27134
+ var last$2 = argumentsToValue(function (v) { return isArray$1(v) ? last$1(v) : ''; });
27135
+ var first$1 = argumentsToValue(function (v) { return isArray$1(v) ? v[0] : ''; });
27067
27136
  var reverse = argumentsToValue(function (v) { return __spreadArray([], __read(toArray$1(v)), false).reverse(); });
27068
27137
  function sort$1(arr, property) {
27069
27138
  var _this = this;
27070
27139
  arr = toValue$1(arr);
27071
- var getValue = function (obj) { return property ? _this.context.getFromScope(obj, stringify$3(property).split('.')) : obj; };
27140
+ var getValue = function (obj) { return property ? _this.context.getFromScope(obj, stringify$5(property).split('.')) : obj; };
27072
27141
  return __spreadArray([], __read(toArray$1(arr)), false).sort(function (lhs, rhs) {
27073
27142
  lhs = getValue(lhs);
27074
27143
  rhs = getValue(rhs);
@@ -27077,7 +27146,7 @@ function sort$1(arr, property) {
27077
27146
  }
27078
27147
  function sortNatural(input, property) {
27079
27148
  input = toValue$1(input);
27080
- var propertyString = stringify$3(property);
27149
+ var propertyString = stringify$5(property);
27081
27150
  var compare = property === undefined
27082
27151
  ? caseInsensitiveCompare
27083
27152
  : function (lhs, rhs) { return caseInsensitiveCompare(lhs[propertyString], rhs[propertyString]); };
@@ -27087,7 +27156,7 @@ var size = function (v) { return (v && v.length) || 0; };
27087
27156
  function map$1(arr, property) {
27088
27157
  var _this = this;
27089
27158
  arr = toValue$1(arr);
27090
- return toArray$1(arr).map(function (obj) { return _this.context.getFromScope(obj, stringify$3(property).split('.')); });
27159
+ return toArray$1(arr).map(function (obj) { return _this.context.getFromScope(obj, stringify$5(property).split('.')); });
27091
27160
  }
27092
27161
  function compact(arr) {
27093
27162
  arr = toValue$1(arr);
@@ -27104,8 +27173,8 @@ function slice(v, begin, length) {
27104
27173
  v = toValue$1(v);
27105
27174
  if (isNil(v))
27106
27175
  return [];
27107
- if (!isArray(v))
27108
- v = stringify$3(v);
27176
+ if (!isArray$1(v))
27177
+ v = stringify$5(v);
27109
27178
  begin = begin < 0 ? v.length + begin : begin;
27110
27179
  return v.slice(begin, begin + length);
27111
27180
  }
@@ -27113,7 +27182,7 @@ function where(arr, property, expected) {
27113
27182
  var _this = this;
27114
27183
  arr = toValue$1(arr);
27115
27184
  return toArray$1(arr).filter(function (obj) {
27116
- var value = _this.context.getFromScope(obj, stringify$3(property).split('.'));
27185
+ var value = _this.context.getFromScope(obj, stringify$5(property).split('.'));
27117
27186
  if (expected === undefined)
27118
27187
  return isTruthy(value, _this.context);
27119
27188
  if (isComparable(expected))
@@ -27125,7 +27194,7 @@ function uniq(arr) {
27125
27194
  arr = toValue$1(arr);
27126
27195
  var u = {};
27127
27196
  return (arr || []).filter(function (val) {
27128
- if (hasOwnProperty$1.call(u, String(val)))
27197
+ if (hasOwnProperty$2.call(u, String(val)))
27129
27198
  return false;
27130
27199
  u[String(val)] = true;
27131
27200
  return true;
@@ -27402,7 +27471,7 @@ function date(v, arg) {
27402
27471
  var opts = this.context.opts;
27403
27472
  var date;
27404
27473
  v = toValue$1(v);
27405
- arg = stringify$3(arg);
27474
+ arg = stringify$5(arg);
27406
27475
  if (v === 'now' || v === 'today') {
27407
27476
  date = new Date();
27408
27477
  }
@@ -27440,7 +27509,7 @@ function Default(value, defaultValue) {
27440
27509
  args[_i - 2] = arguments[_i];
27441
27510
  }
27442
27511
  value = toValue$1(value);
27443
- if (isArray(value) || isString(value))
27512
+ if (isArray$1(value) || isString(value))
27444
27513
  return value.length ? value : defaultValue;
27445
27514
  if (value === false && (new Map(args)).get('allow_false'))
27446
27515
  return false;
@@ -27576,40 +27645,40 @@ function assert(predicate, message) {
27576
27645
  */
27577
27646
  function append$1(v, arg) {
27578
27647
  assert(arguments.length === 2, 'append expect 2 arguments');
27579
- return stringify$3(v) + stringify$3(arg);
27648
+ return stringify$5(v) + stringify$5(arg);
27580
27649
  }
27581
27650
  function prepend(v, arg) {
27582
27651
  assert(arguments.length === 2, 'prepend expect 2 arguments');
27583
- return stringify$3(arg) + stringify$3(v);
27652
+ return stringify$5(arg) + stringify$5(v);
27584
27653
  }
27585
27654
  function lstrip(v, chars) {
27586
27655
  if (chars) {
27587
- chars = escapeRegExp(stringify$3(chars));
27588
- return stringify$3(v).replace(new RegExp("^[".concat(chars, "]+"), 'g'), '');
27656
+ chars = escapeRegExp(stringify$5(chars));
27657
+ return stringify$5(v).replace(new RegExp("^[".concat(chars, "]+"), 'g'), '');
27589
27658
  }
27590
- return stringify$3(v).replace(/^\s+/, '');
27659
+ return stringify$5(v).replace(/^\s+/, '');
27591
27660
  }
27592
27661
  function downcase(v) {
27593
- return stringify$3(v).toLowerCase();
27662
+ return stringify$5(v).toLowerCase();
27594
27663
  }
27595
27664
  function upcase(str) {
27596
- return stringify$3(str).toUpperCase();
27665
+ return stringify$5(str).toUpperCase();
27597
27666
  }
27598
27667
  function remove$3(v, arg) {
27599
- return stringify$3(v).split(String(arg)).join('');
27668
+ return stringify$5(v).split(String(arg)).join('');
27600
27669
  }
27601
27670
  function removeFirst(v, l) {
27602
- return stringify$3(v).replace(String(l), '');
27671
+ return stringify$5(v).replace(String(l), '');
27603
27672
  }
27604
27673
  function rstrip(str, chars) {
27605
27674
  if (chars) {
27606
- chars = escapeRegExp(stringify$3(chars));
27607
- return stringify$3(str).replace(new RegExp("[".concat(chars, "]+$"), 'g'), '');
27675
+ chars = escapeRegExp(stringify$5(chars));
27676
+ return stringify$5(str).replace(new RegExp("[".concat(chars, "]+$"), 'g'), '');
27608
27677
  }
27609
- return stringify$3(str).replace(/\s+$/, '');
27678
+ return stringify$5(str).replace(/\s+$/, '');
27610
27679
  }
27611
27680
  function split(v, arg) {
27612
- var arr = stringify$3(v).split(String(arg));
27681
+ var arr = stringify$5(v).split(String(arg));
27613
27682
  // align to ruby split, which is the behavior of shopify/liquid
27614
27683
  // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split
27615
27684
  while (arr.length && arr[arr.length - 1] === '')
@@ -27618,30 +27687,30 @@ function split(v, arg) {
27618
27687
  }
27619
27688
  function strip(v, chars) {
27620
27689
  if (chars) {
27621
- chars = escapeRegExp(stringify$3(chars));
27622
- return stringify$3(v)
27690
+ chars = escapeRegExp(stringify$5(chars));
27691
+ return stringify$5(v)
27623
27692
  .replace(new RegExp("^[".concat(chars, "]+"), 'g'), '')
27624
27693
  .replace(new RegExp("[".concat(chars, "]+$"), 'g'), '');
27625
27694
  }
27626
- return stringify$3(v).trim();
27695
+ return stringify$5(v).trim();
27627
27696
  }
27628
27697
  function stripNewlines(v) {
27629
- return stringify$3(v).replace(/\n/g, '');
27698
+ return stringify$5(v).replace(/\n/g, '');
27630
27699
  }
27631
27700
  function capitalize$1(str) {
27632
- str = stringify$3(str);
27701
+ str = stringify$5(str);
27633
27702
  return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
27634
27703
  }
27635
27704
  function replace$1(v, pattern, replacement) {
27636
- return stringify$3(v).split(String(pattern)).join(replacement);
27705
+ return stringify$5(v).split(String(pattern)).join(replacement);
27637
27706
  }
27638
27707
  function replaceFirst(v, arg1, arg2) {
27639
- return stringify$3(v).replace(String(arg1), arg2);
27708
+ return stringify$5(v).replace(String(arg1), arg2);
27640
27709
  }
27641
27710
  function truncate(v, l, o) {
27642
27711
  if (l === void 0) { l = 50; }
27643
27712
  if (o === void 0) { o = '...'; }
27644
- v = stringify$3(v);
27713
+ v = stringify$5(v);
27645
27714
  if (v.length <= l)
27646
27715
  return v;
27647
27716
  return v.substring(0, l - o.length) + o;
@@ -27649,7 +27718,7 @@ function truncate(v, l, o) {
27649
27718
  function truncatewords(v, l, o) {
27650
27719
  if (l === void 0) { l = 15; }
27651
27720
  if (o === void 0) { o = '...'; }
27652
- var arr = stringify$3(v).split(/\s+/);
27721
+ var arr = stringify$5(v).split(/\s+/);
27653
27722
  var ret = arr.slice(0, l).join(' ');
27654
27723
  if (arr.length >= l)
27655
27724
  ret += o;
@@ -27799,9 +27868,9 @@ var EmptyDrop = /** @class */ (function (_super) {
27799
27868
  if (value instanceof EmptyDrop)
27800
27869
  return false;
27801
27870
  value = toValue$1(value);
27802
- if (isString(value) || isArray(value))
27871
+ if (isString(value) || isArray$1(value))
27803
27872
  return value.length === 0;
27804
- if (isObject$1(value))
27873
+ if (isObject$2(value))
27805
27874
  return Object.keys(value).length === 0;
27806
27875
  return false;
27807
27876
  };
@@ -28897,7 +28966,7 @@ var Hash = /** @class */ (function () {
28897
28966
  }());
28898
28967
 
28899
28968
  function isKeyValuePair(arr) {
28900
- return isArray(arr);
28969
+ return isArray$1(arr);
28901
28970
  }
28902
28971
 
28903
28972
  var Filter = /** @class */ (function () {
@@ -29006,10 +29075,10 @@ function createRejectedThenable(err) {
29006
29075
  return ret;
29007
29076
  }
29008
29077
  function isThenable(val) {
29009
- return val && isFunction(val.then);
29078
+ return val && isFunction$1(val.then);
29010
29079
  }
29011
29080
  function isAsyncIterator(val) {
29012
- return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);
29081
+ return val && isFunction$1(val.next) && isFunction$1(val.throw) && isFunction$1(val.return);
29013
29082
  }
29014
29083
  // convert an async iterator to a thenable (Promise compatible)
29015
29084
  function toThenable(val) {
@@ -29589,7 +29658,7 @@ var decrement = {
29589
29658
  if (!isNumber$2(scope[this.variable])) {
29590
29659
  scope[this.variable] = 0;
29591
29660
  }
29592
- emitter.write(stringify$3(--scope[this.variable]));
29661
+ emitter.write(stringify$5(--scope[this.variable]));
29593
29662
  }
29594
29663
  };
29595
29664
 
@@ -29710,7 +29779,7 @@ var increment = {
29710
29779
  }
29711
29780
  var val = scope[this.variable];
29712
29781
  scope[this.variable]++;
29713
- emitter.write(stringify$3(val));
29782
+ emitter.write(stringify$5(val));
29714
29783
  }
29715
29784
  };
29716
29785
 
@@ -30170,17 +30239,17 @@ function normalize$1(options) {
30170
30239
  function getOutputEscapeFunction(nameOrFunction) {
30171
30240
  if (isString(nameOrFunction)) {
30172
30241
  var filterImpl = filters.get(nameOrFunction);
30173
- assert(isFunction(filterImpl), "filter \"".concat(nameOrFunction, "\" not found"));
30242
+ assert(isFunction$1(filterImpl), "filter \"".concat(nameOrFunction, "\" not found"));
30174
30243
  return filterImpl;
30175
30244
  }
30176
30245
  else {
30177
- assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');
30246
+ assert(isFunction$1(nameOrFunction), '`outputEscape` need to be of type string or function');
30178
30247
  return nameOrFunction;
30179
30248
  }
30180
30249
  }
30181
30250
  function normalizeDirectoryList(value) {
30182
30251
  var list = [];
30183
- if (isArray(value))
30252
+ if (isArray$1(value))
30184
30253
  list = value;
30185
30254
  if (isString(value))
30186
30255
  list = [value];
@@ -30270,12 +30339,12 @@ function readProperty(obj, key, ownPropertyOnly) {
30270
30339
  if (isNil(obj))
30271
30340
  return obj;
30272
30341
  obj = toLiquid(obj);
30273
- if (isArray(obj) && key < 0)
30342
+ if (isArray$1(obj) && key < 0)
30274
30343
  return obj[obj.length + +key];
30275
30344
  var jsProperty = readJSProperty(obj, key, ownPropertyOnly);
30276
30345
  if (jsProperty === undefined && obj instanceof Drop)
30277
30346
  return obj.liquidMethodMissing(key);
30278
- if (isFunction(jsProperty))
30347
+ if (isFunction$1(jsProperty))
30279
30348
  return jsProperty.call(obj);
30280
30349
  if (key === 'size')
30281
30350
  return readSize(obj);
@@ -30291,19 +30360,19 @@ function readJSProperty(obj, key, ownPropertyOnly) {
30291
30360
  return obj[key];
30292
30361
  }
30293
30362
  function readFirst(obj) {
30294
- if (isArray(obj))
30363
+ if (isArray$1(obj))
30295
30364
  return obj[0];
30296
30365
  return obj['first'];
30297
30366
  }
30298
30367
  function readLast(obj) {
30299
- if (isArray(obj))
30368
+ if (isArray$1(obj))
30300
30369
  return obj[obj.length - 1];
30301
30370
  return obj['last'];
30302
30371
  }
30303
30372
  function readSize(obj) {
30304
30373
  if (obj.hasOwnProperty('size') || obj['size'] !== undefined)
30305
30374
  return obj['size'];
30306
- if (isArray(obj) || isString(obj))
30375
+ if (isArray$1(obj) || isString(obj))
30307
30376
  return obj.length;
30308
30377
  if (typeof obj === 'object')
30309
30378
  return Object.keys(obj).length;
@@ -30470,7 +30539,7 @@ var SimpleEmitter = /** @class */ (function () {
30470
30539
  this.buffer = '';
30471
30540
  }
30472
30541
  SimpleEmitter.prototype.write = function (html) {
30473
- this.buffer += stringify$3(html);
30542
+ this.buffer += stringify$5(html);
30474
30543
  };
30475
30544
  return SimpleEmitter;
30476
30545
  }());
@@ -30481,7 +30550,7 @@ var StreamedEmitter = /** @class */ (function () {
30481
30550
  this.stream = new PassThrough$6();
30482
30551
  }
30483
30552
  StreamedEmitter.prototype.write = function (html) {
30484
- this.stream.write(stringify$3(html));
30553
+ this.stream.write(stringify$5(html));
30485
30554
  };
30486
30555
  StreamedEmitter.prototype.error = function (err) {
30487
30556
  this.stream.emit('error', err);
@@ -30506,7 +30575,7 @@ var KeepingTypeEmitter = /** @class */ (function () {
30506
30575
  this.buffer = html;
30507
30576
  }
30508
30577
  else {
30509
- this.buffer = stringify$3(this.buffer) + stringify$3(html);
30578
+ this.buffer = stringify$5(this.buffer) + stringify$5(html);
30510
30579
  }
30511
30580
  };
30512
30581
  return KeepingTypeEmitter;
@@ -30605,7 +30674,7 @@ var Tag = /** @class */ (function (_super) {
30605
30674
  case 1:
30606
30675
  hash = (_a.sent());
30607
30676
  impl = this.impl;
30608
- if (!isFunction(impl.render)) return [3 /*break*/, 3];
30677
+ if (!isFunction$1(impl.render)) return [3 /*break*/, 3];
30609
30678
  return [4 /*yield*/, impl.render(ctx, emitter, hash)];
30610
30679
  case 2: return [2 /*return*/, _a.sent()];
30611
30680
  case 3: return [2 /*return*/];
@@ -32332,14 +32401,14 @@ function splitOn(input, char) {
32332
32401
  ];
32333
32402
  }
32334
32403
  function first(input, offset = 0) {
32335
- return isArrayLike(input) && input.length > offset ? input[offset] : void 0;
32404
+ return isArrayLike$1(input) && input.length > offset ? input[offset] : void 0;
32336
32405
  }
32337
32406
  function last(input, offset = 0) {
32338
- if (isArrayLike(input) && input.length > offset) {
32407
+ if (isArrayLike$1(input) && input.length > offset) {
32339
32408
  return input[input.length - 1 - offset];
32340
32409
  }
32341
32410
  }
32342
- function isArrayLike(input) {
32411
+ function isArrayLike$1(input) {
32343
32412
  return !!(input && typeof input.length === "number");
32344
32413
  }
32345
32414
  function toLinesWithContent(input = "", trimmed2 = true, separator = "\n") {
@@ -32413,13 +32482,13 @@ function pick(source, properties) {
32413
32482
  function delay(duration = 0) {
32414
32483
  return new Promise((done) => setTimeout(done, duration));
32415
32484
  }
32416
- var NULL, NOOP$1, objectToString;
32485
+ var NULL, NOOP$1, objectToString$1;
32417
32486
  var init_util = __esm({
32418
32487
  "src/lib/utils/util.ts"() {
32419
32488
  NULL = "\0";
32420
32489
  NOOP$1 = () => {
32421
32490
  };
32422
- objectToString = Object.prototype.toString.call.bind(Object.prototype.toString);
32491
+ objectToString$1 = Object.prototype.toString.call.bind(Object.prototype.toString);
32423
32492
  }
32424
32493
  });
32425
32494
 
@@ -32434,7 +32503,7 @@ function filterPrimitives(input, omit) {
32434
32503
  return /number|string|boolean/.test(typeof input) && (!omit || !omit.includes(typeof input));
32435
32504
  }
32436
32505
  function filterPlainObject(input) {
32437
- return !!input && objectToString(input) === "[object Object]";
32506
+ return !!input && objectToString$1(input) === "[object Object]";
32438
32507
  }
32439
32508
  function filterFunction(input) {
32440
32509
  return typeof input === "function";
@@ -32669,7 +32738,7 @@ __export(utils_exports, {
32669
32738
  including: () => including,
32670
32739
  isUserFunction: () => isUserFunction,
32671
32740
  last: () => last,
32672
- objectToString: () => objectToString,
32741
+ objectToString: () => objectToString$1,
32673
32742
  parseStringResponse: () => parseStringResponse,
32674
32743
  pick: () => pick,
32675
32744
  prefixedArray: () => prefixedArray,
@@ -33274,7 +33343,7 @@ var init_git_logger = __esm({
33274
33343
  if (Buffer.isBuffer(value)) {
33275
33344
  return value.toString("utf8");
33276
33345
  }
33277
- return objectToString(value);
33346
+ return objectToString$1(value);
33278
33347
  };
33279
33348
  }
33280
33349
  });
@@ -33448,7 +33517,7 @@ var init_git_executor_chain = __esm({
33448
33517
  logger.info(`exitCode=%s handling with custom error handler`);
33449
33518
  return task.onError(result, error, (newStdOut) => {
33450
33519
  logger.info(`custom error handler treated as success`);
33451
- logger(`custom error returned a %s`, objectToString(newStdOut));
33520
+ logger(`custom error returned a %s`, objectToString$1(newStdOut));
33452
33521
  done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr)));
33453
33522
  }, fail);
33454
33523
  }
@@ -35689,7 +35758,7 @@ function isTaskError(result) {
35689
35758
  function getErrorMessage(result) {
35690
35759
  return Buffer.concat([...result.stdOut, ...result.stdErr]);
35691
35760
  }
35692
- function errorDetectionHandler(overwrite, isError = isTaskError, errorMessage = getErrorMessage) {
35761
+ function errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) {
35693
35762
  return (error, result) => {
35694
35763
  if (!overwrite && error || !isError(result)) {
35695
35764
  return error;
@@ -35857,6 +35926,9 @@ init_git_response_error();
35857
35926
  var esm_default = gitInstanceFactory;
35858
35927
 
35859
35928
  const factory = esm_default;
35929
+ async function initializeRepository(directory) {
35930
+ await esm_default(directory).init();
35931
+ }
35860
35932
  async function downloadRepository({ repoUrl, destination }) {
35861
35933
  const [repository, branch] = repoUrl.split("#");
35862
35934
  const options = { "--recurse-submodules": null };
@@ -35873,6 +35945,7 @@ async function downloadRepository({ repoUrl, destination }) {
35873
35945
  var git = /*#__PURE__*/Object.freeze({
35874
35946
  __proto__: null,
35875
35947
  factory: factory,
35948
+ initializeRepository: initializeRepository,
35876
35949
  downloadRepository: downloadRepository
35877
35950
  });
35878
35951
 
@@ -40202,7 +40275,7 @@ try {
40202
40275
  const POOL_SIZE = 65536;
40203
40276
 
40204
40277
  /** @param {(Blob | Uint8Array)[]} parts */
40205
- async function * toIterator (parts, clone) {
40278
+ async function * toIterator (parts, clone = true) {
40206
40279
  for (const part of parts) {
40207
40280
  if ('stream' in part) {
40208
40281
  yield * (/** @type {AsyncIterableIterator<Uint8Array>} */ (part.stream()));
@@ -40744,7 +40817,7 @@ class Body$1 {
40744
40817
  return formData;
40745
40818
  }
40746
40819
 
40747
- const {toFormData} = await import('./multipart-parser-44064309.js');
40820
+ const {toFormData} = await import('./multipart-parser-cfdda463.js');
40748
40821
  return toFormData(this.body, ct);
40749
40822
  }
40750
40823
 
@@ -41923,7 +41996,7 @@ class Request$1 extends Body$1 {
41923
41996
 
41924
41997
  /** @returns {string} */
41925
41998
  get url() {
41926
- return format$5(this[INTERNALS$3].parsedURL);
41999
+ return format$6(this[INTERNALS$3].parsedURL);
41927
42000
  }
41928
42001
 
41929
42002
  /** @returns {Headers} */
@@ -42053,7 +42126,7 @@ const getNodeRequestOptions$1 = request => {
42053
42126
 
42054
42127
  // HTTP-network-or-cache fetch step 2.15
42055
42128
  if (request.compress && !headers.has('Accept-Encoding')) {
42056
- headers.set('Accept-Encoding', 'gzip,deflate,br');
42129
+ headers.set('Accept-Encoding', 'gzip, deflate, br');
42057
42130
  }
42058
42131
 
42059
42132
  let {agent} = request;
@@ -42472,13 +42545,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
42472
42545
  }
42473
42546
  };
42474
42547
 
42475
- socket.prependListener('close', onSocketClose);
42476
-
42477
- request.on('abort', () => {
42478
- socket.removeListener('close', onSocketClose);
42479
- });
42480
-
42481
- socket.on('data', buf => {
42548
+ const onData = buf => {
42482
42549
  properLastChunkReceived = Buffer$1.compare(buf.slice(-5), LAST_CHUNK) === 0;
42483
42550
 
42484
42551
  // Sometimes final 0-length chunk and end of message code are in separate packets
@@ -42490,6 +42557,14 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
42490
42557
  }
42491
42558
 
42492
42559
  previousChunk = buf;
42560
+ };
42561
+
42562
+ socket.prependListener('close', onSocketClose);
42563
+ socket.on('data', onData);
42564
+
42565
+ request.on('close', () => {
42566
+ socket.removeListener('close', onSocketClose);
42567
+ socket.removeListener('data', onData);
42493
42568
  });
42494
42569
  });
42495
42570
  }
@@ -54673,147 +54748,1062 @@ var github = /*#__PURE__*/Object.freeze({
54673
54748
  parseRepoUrl: parseRepoUrl
54674
54749
  });
54675
54750
 
54676
- const dependencyManager = ["yarn", "npm", "pnpm"];
54677
- const PackageJsonNotFoundError = (directory) => {
54678
- return new Abort(`The directory ${directory} doesn't have a package.json.`);
54679
- };
54680
- function dependencyManagerUsedForCreating(env = process.env) {
54681
- if (env.npm_config_user_agent?.includes("yarn")) {
54682
- return "yarn";
54683
- } else if (env.npm_config_user_agent?.includes("pnpm")) {
54684
- return "pnpm";
54685
- } else {
54686
- return "npm";
54751
+ var distWeb = {exports: {}};
54752
+
54753
+ var stringify$4 = {exports: {}};
54754
+
54755
+ (function (module, exports) {
54756
+ exports = module.exports = stringify;
54757
+ exports.getSerialize = serializer;
54758
+
54759
+ function stringify(obj, replacer, spaces, cycleReplacer) {
54760
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)
54761
+ }
54762
+
54763
+ function serializer(replacer, cycleReplacer) {
54764
+ var stack = [], keys = [];
54765
+
54766
+ if (cycleReplacer == null) cycleReplacer = function(key, value) {
54767
+ if (stack[0] === value) return "[Circular ~]"
54768
+ return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]"
54769
+ };
54770
+
54771
+ return function(key, value) {
54772
+ if (stack.length > 0) {
54773
+ var thisPos = stack.indexOf(this);
54774
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
54775
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
54776
+ if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value);
54777
+ }
54778
+ else stack.push(value);
54779
+
54780
+ return replacer == null ? value : replacer.call(this, key, value)
54687
54781
  }
54688
54782
  }
54689
- async function installNPMDependenciesRecursively(options) {
54690
- const packageJsons = await out(join$3(options.directory, "**/package.json"), {
54691
- ignore: [join$3(options.directory, "node_modules/**/package.json")],
54692
- cwd: options.directory,
54693
- onlyFiles: true,
54694
- deep: options.deep
54695
- });
54696
- const abortController = new AbortController$1();
54697
- try {
54698
- await Promise.all(packageJsons.map(async (packageJsonPath) => {
54699
- const directory = dirname$1(packageJsonPath);
54700
- await install(directory, options.dependencyManager, void 0, void 0, abortController.signal);
54701
- }));
54702
- } catch (error) {
54703
- abortController.abort();
54704
- throw error;
54783
+ }(stringify$4, stringify$4.exports));
54784
+
54785
+ /*
54786
+ * random-seed
54787
+ * https://github.com/skratchdot/random-seed
54788
+ *
54789
+ * This code was originally written by Steve Gibson and can be found here:
54790
+ *
54791
+ * https://www.grc.com/otg/uheprng.htm
54792
+ *
54793
+ * It was slightly modified for use in node, to pass jshint, and a few additional
54794
+ * helper functions were added.
54795
+ *
54796
+ * Copyright (c) 2013 skratchdot
54797
+ * Dual Licensed under the MIT license and the original GRC copyright/license
54798
+ * included below.
54799
+ */
54800
+ var stringify$3 = stringify$4.exports;
54801
+
54802
+ /* ============================================================================
54803
+ This is based upon Johannes Baagoe's carefully designed and efficient hash
54804
+ function for use with JavaScript. It has a proven "avalanche" effect such
54805
+ that every bit of the input affects every bit of the output 50% of the time,
54806
+ which is good. See: http://baagoe.com/en/RandomMusings/hash/avalanche.xhtml
54807
+ ============================================================================
54808
+ */
54809
+ var Mash = function () {
54810
+ var n = 0xefc8249d;
54811
+ var mash = function (data) {
54812
+ if (data) {
54813
+ data = data.toString();
54814
+ for (var i = 0; i < data.length; i++) {
54815
+ n += data.charCodeAt(i);
54816
+ var h = 0.02519603282416938 * n;
54817
+ n = h >>> 0;
54818
+ h -= n;
54819
+ h *= n;
54820
+ n = h >>> 0;
54821
+ h -= n;
54822
+ n += h * 0x100000000; // 2^32
54823
+ }
54824
+ return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
54825
+ } else {
54826
+ n = 0xefc8249d;
54827
+ }
54828
+ };
54829
+ return mash;
54830
+ };
54831
+
54832
+ var uheprng = function (seed) {
54833
+ return (function () {
54834
+ var o = 48; // set the 'order' number of ENTROPY-holding 32-bit values
54835
+ var c = 1; // init the 'carry' used by the multiply-with-carry (MWC) algorithm
54836
+ var p = o; // init the 'phase' (max-1) of the intermediate variable pointer
54837
+ var s = new Array(o); // declare our intermediate variables array
54838
+ var i; // general purpose local
54839
+ var j; // general purpose local
54840
+ var k = 0; // general purpose local
54841
+
54842
+ // when our "uheprng" is initially invoked our PRNG state is initialized from the
54843
+ // browser's own local PRNG. This is okay since although its generator might not
54844
+ // be wonderful, it's useful for establishing large startup entropy for our usage.
54845
+ var mash = new Mash(); // get a pointer to our high-performance "Mash" hash
54846
+
54847
+ // fill the array with initial mash hash values
54848
+ for (i = 0; i < o; i++) {
54849
+ s[i] = mash(Math.random());
54850
+ }
54851
+
54852
+ // this PRIVATE (internal access only) function is the heart of the multiply-with-carry
54853
+ // (MWC) PRNG algorithm. When called it returns a pseudo-random number in the form of a
54854
+ // 32-bit JavaScript fraction (0.0 to <1.0) it is a PRIVATE function used by the default
54855
+ // [0-1] return function, and by the random 'string(n)' function which returns 'n'
54856
+ // characters from 33 to 126.
54857
+ var rawprng = function () {
54858
+ if (++p >= o) {
54859
+ p = 0;
54860
+ }
54861
+ var t = 1768863 * s[p] + c * 2.3283064365386963e-10; // 2^-32
54862
+ return s[p] = t - (c = t | 0);
54863
+ };
54864
+
54865
+ // this EXPORTED function is the default function returned by this library.
54866
+ // The values returned are integers in the range from 0 to range-1. We first
54867
+ // obtain two 32-bit fractions (from rawprng) to synthesize a single high
54868
+ // resolution 53-bit prng (0 to <1), then we multiply this by the caller's
54869
+ // "range" param and take the "floor" to return a equally probable integer.
54870
+ var random = function (range) {
54871
+ return Math.floor(range * (rawprng() + (rawprng() * 0x200000 | 0) * 1.1102230246251565e-16)); // 2^-53
54872
+ };
54873
+
54874
+ // this EXPORTED function 'string(n)' returns a pseudo-random string of
54875
+ // 'n' printable characters ranging from chr(33) to chr(126) inclusive.
54876
+ random.string = function (count) {
54877
+ var i;
54878
+ var s = '';
54879
+ for (i = 0; i < count; i++) {
54880
+ s += String.fromCharCode(33 + random(94));
54881
+ }
54882
+ return s;
54883
+ };
54884
+
54885
+ // this PRIVATE "hash" function is used to evolve the generator's internal
54886
+ // entropy state. It is also called by the EXPORTED addEntropy() function
54887
+ // which is used to pour entropy into the PRNG.
54888
+ var hash = function () {
54889
+ var args = Array.prototype.slice.call(arguments);
54890
+ for (i = 0; i < args.length; i++) {
54891
+ for (j = 0; j < o; j++) {
54892
+ s[j] -= mash(args[i]);
54893
+ if (s[j] < 0) {
54894
+ s[j] += 1;
54895
+ }
54896
+ }
54897
+ }
54898
+ };
54899
+
54900
+ // this EXPORTED "clean string" function removes leading and trailing spaces and non-printing
54901
+ // control characters, including any embedded carriage-return (CR) and line-feed (LF) characters,
54902
+ // from any string it is handed. this is also used by the 'hashstring' function (below) to help
54903
+ // users always obtain the same EFFECTIVE uheprng seeding key.
54904
+ random.cleanString = function (inStr) {
54905
+ inStr = inStr.replace(/(^\s*)|(\s*$)/gi, ''); // remove any/all leading spaces
54906
+ inStr = inStr.replace(/[\x00-\x1F]/gi, ''); // remove any/all control characters
54907
+ inStr = inStr.replace(/\n /, '\n'); // remove any/all trailing spaces
54908
+ return inStr; // return the cleaned up result
54909
+ };
54910
+
54911
+ // this EXPORTED "hash string" function hashes the provided character string after first removing
54912
+ // any leading or trailing spaces and ignoring any embedded carriage returns (CR) or Line Feeds (LF)
54913
+ random.hashString = function (inStr) {
54914
+ inStr = random.cleanString(inStr);
54915
+ mash(inStr); // use the string to evolve the 'mash' state
54916
+ for (i = 0; i < inStr.length; i++) { // scan through the characters in our string
54917
+ k = inStr.charCodeAt(i); // get the character code at the location
54918
+ for (j = 0; j < o; j++) { // "mash" it into the UHEPRNG state
54919
+ s[j] -= mash(k);
54920
+ if (s[j] < 0) {
54921
+ s[j] += 1;
54922
+ }
54923
+ }
54924
+ }
54925
+ };
54926
+
54927
+ // this EXPORTED function allows you to seed the random generator.
54928
+ random.seed = function (seed) {
54929
+ if (typeof seed === 'undefined' || seed === null) {
54930
+ seed = Math.random();
54931
+ }
54932
+ if (typeof seed !== 'string') {
54933
+ seed = stringify$3(seed, function (key, value) {
54934
+ if (typeof value === 'function') {
54935
+ return (value).toString();
54936
+ }
54937
+ return value;
54938
+ });
54939
+ }
54940
+ random.initState();
54941
+ random.hashString(seed);
54942
+ };
54943
+
54944
+ // this handy exported function is used to add entropy to our uheprng at any time
54945
+ random.addEntropy = function ( /* accept zero or more arguments */ ) {
54946
+ var args = [];
54947
+ for (i = 0; i < arguments.length; i++) {
54948
+ args.push(arguments[i]);
54949
+ }
54950
+ hash((k++) + (new Date().getTime()) + args.join('') + Math.random());
54951
+ };
54952
+
54953
+ // if we want to provide a deterministic startup context for our PRNG,
54954
+ // but without directly setting the internal state variables, this allows
54955
+ // us to initialize the mash hash and PRNG's internal state before providing
54956
+ // some hashing input
54957
+ random.initState = function () {
54958
+ mash(); // pass a null arg to force mash hash to init
54959
+ for (i = 0; i < o; i++) {
54960
+ s[i] = mash(' '); // fill the array with initial mash hash values
54961
+ }
54962
+ c = 1; // init our multiply-with-carry carry
54963
+ p = o; // init our phase
54964
+ };
54965
+
54966
+ // we use this (optional) exported function to signal the JavaScript interpreter
54967
+ // that we're finished using the "Mash" hash function so that it can free up the
54968
+ // local "instance variables" is will have been maintaining. It's not strictly
54969
+ // necessary, of course, but it's good JavaScript citizenship.
54970
+ random.done = function () {
54971
+ mash = null;
54972
+ };
54973
+
54974
+ // if we called "uheprng" with a seed value, then execute random.seed() before returning
54975
+ if (typeof seed !== 'undefined') {
54976
+ random.seed(seed);
54977
+ }
54978
+
54979
+ // Returns a random integer between 0 (inclusive) and range (exclusive)
54980
+ random.range = function (range) {
54981
+ return random(range);
54982
+ };
54983
+
54984
+ // Returns a random float between 0 (inclusive) and 1 (exclusive)
54985
+ random.random = function () {
54986
+ return random(Number.MAX_VALUE - 1) / Number.MAX_VALUE;
54987
+ };
54988
+
54989
+ // Returns a random float between min (inclusive) and max (exclusive)
54990
+ random.floatBetween = function (min, max) {
54991
+ return random.random() * (max - min) + min;
54992
+ };
54993
+
54994
+ // Returns a random integer between min (inclusive) and max (inclusive)
54995
+ random.intBetween = function (min, max) {
54996
+ return Math.floor(random.random() * (max - min + 1)) + min;
54997
+ };
54998
+
54999
+ // when our main outer "uheprng" function is called, after setting up our
55000
+ // initial variables and entropic state, we return an "instance pointer"
55001
+ // to the internal anonymous function which can then be used to access
55002
+ // the uheprng's various exported functions. As with the ".done" function
55003
+ // above, we should set the returned value to 'null' once we're finished
55004
+ // using any of these functions.
55005
+ return random;
55006
+ }());
55007
+ };
55008
+
55009
+ // Modification for use in node:
55010
+ uheprng.create = function (seed) {
55011
+ return new uheprng(seed);
55012
+ };
55013
+ var randomSeed = uheprng;
55014
+
55015
+ /**
55016
+ * lodash (Custom Build) <https://lodash.com/>
55017
+ * Build: `lodash modularize exports="npm" -o ./`
55018
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
55019
+ * Released under MIT license <https://lodash.com/license>
55020
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
55021
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
55022
+ */
55023
+
55024
+ /** Used as references for various `Number` constants. */
55025
+ var MAX_SAFE_INTEGER$2 = 9007199254740991;
55026
+
55027
+ /** `Object#toString` result references. */
55028
+ var argsTag = '[object Arguments]',
55029
+ funcTag = '[object Function]',
55030
+ genTag = '[object GeneratorFunction]';
55031
+
55032
+ /** Used to detect unsigned integer values. */
55033
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
55034
+
55035
+ /**
55036
+ * A faster alternative to `Function#apply`, this function invokes `func`
55037
+ * with the `this` binding of `thisArg` and the arguments of `args`.
55038
+ *
55039
+ * @private
55040
+ * @param {Function} func The function to invoke.
55041
+ * @param {*} thisArg The `this` binding of `func`.
55042
+ * @param {Array} args The arguments to invoke `func` with.
55043
+ * @returns {*} Returns the result of `func`.
55044
+ */
55045
+ function apply(func, thisArg, args) {
55046
+ switch (args.length) {
55047
+ case 0: return func.call(thisArg);
55048
+ case 1: return func.call(thisArg, args[0]);
55049
+ case 2: return func.call(thisArg, args[0], args[1]);
55050
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
54705
55051
  }
55052
+ return func.apply(thisArg, args);
54706
55053
  }
54707
- async function install(directory, dependencyManager2, stdout, stderr, signal) {
54708
- const options = { cwd: directory, stdout, stderr, signal };
54709
- await exec$2(dependencyManager2, ["install"], options);
55054
+
55055
+ /**
55056
+ * The base implementation of `_.times` without support for iteratee shorthands
55057
+ * or max array length checks.
55058
+ *
55059
+ * @private
55060
+ * @param {number} n The number of times to invoke `iteratee`.
55061
+ * @param {Function} iteratee The function invoked per iteration.
55062
+ * @returns {Array} Returns the array of results.
55063
+ */
55064
+ function baseTimes(n, iteratee) {
55065
+ var index = -1,
55066
+ result = Array(n);
55067
+
55068
+ while (++index < n) {
55069
+ result[index] = iteratee(index);
55070
+ }
55071
+ return result;
54710
55072
  }
54711
- async function getPackageName(packageJsonPath) {
54712
- const packageJsonContent = await packageJSONContents(packageJsonPath);
54713
- return packageJsonContent.name;
55073
+
55074
+ /** Used for built-in method references. */
55075
+ var objectProto = Object.prototype;
55076
+
55077
+ /** Used to check objects for own properties. */
55078
+ var hasOwnProperty$1 = objectProto.hasOwnProperty;
55079
+
55080
+ /**
55081
+ * Used to resolve the
55082
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
55083
+ * of values.
55084
+ */
55085
+ var objectToString = objectProto.toString;
55086
+
55087
+ /** Built-in value references. */
55088
+ var propertyIsEnumerable = objectProto.propertyIsEnumerable;
55089
+
55090
+ /* Built-in method references for those with the same name as other `lodash` methods. */
55091
+ var nativeMax = Math.max;
55092
+
55093
+ /**
55094
+ * Creates an array of the enumerable property names of the array-like `value`.
55095
+ *
55096
+ * @private
55097
+ * @param {*} value The value to query.
55098
+ * @param {boolean} inherited Specify returning inherited property names.
55099
+ * @returns {Array} Returns the array of property names.
55100
+ */
55101
+ function arrayLikeKeys(value, inherited) {
55102
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
55103
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
55104
+ var result = (isArray(value) || isArguments(value))
55105
+ ? baseTimes(value.length, String)
55106
+ : [];
55107
+
55108
+ var length = result.length,
55109
+ skipIndexes = !!length;
55110
+
55111
+ for (var key in value) {
55112
+ if ((inherited || hasOwnProperty$1.call(value, key)) &&
55113
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
55114
+ result.push(key);
55115
+ }
55116
+ }
55117
+ return result;
54714
55118
  }
54715
- async function getDependencies(packageJsonPath) {
54716
- const packageJsonContent = await packageJSONContents(packageJsonPath);
54717
- const dependencies = packageJsonContent.dependencies ?? {};
54718
- const devDependencies = packageJsonContent.devDependencies ?? {};
54719
- return { ...dependencies, ...devDependencies };
55119
+
55120
+ /**
55121
+ * Used by `_.defaults` to customize its `_.assignIn` use.
55122
+ *
55123
+ * @private
55124
+ * @param {*} objValue The destination value.
55125
+ * @param {*} srcValue The source value.
55126
+ * @param {string} key The key of the property to assign.
55127
+ * @param {Object} object The parent object of `objValue`.
55128
+ * @returns {*} Returns the value to assign.
55129
+ */
55130
+ function assignInDefaults(objValue, srcValue, key, object) {
55131
+ if (objValue === undefined ||
55132
+ (eq$3(objValue, objectProto[key]) && !hasOwnProperty$1.call(object, key))) {
55133
+ return srcValue;
55134
+ }
55135
+ return objValue;
54720
55136
  }
54721
- async function packageJSONContents(packageJsonPath) {
54722
- if (!await exists$1(packageJsonPath)) {
54723
- throw PackageJsonNotFoundError(dirname$1(packageJsonPath));
55137
+
55138
+ /**
55139
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
55140
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
55141
+ * for equality comparisons.
55142
+ *
55143
+ * @private
55144
+ * @param {Object} object The object to modify.
55145
+ * @param {string} key The key of the property to assign.
55146
+ * @param {*} value The value to assign.
55147
+ */
55148
+ function assignValue(object, key, value) {
55149
+ var objValue = object[key];
55150
+ if (!(hasOwnProperty$1.call(object, key) && eq$3(objValue, value)) ||
55151
+ (value === undefined && !(key in object))) {
55152
+ object[key] = value;
54724
55153
  }
54725
- return JSON.parse(await read$1(packageJsonPath));
54726
55154
  }
54727
- async function addNPMDependenciesIfNeeded(dependencies, options) {
54728
- const packageJsonPath = join$3(options.directory, "package.json");
54729
- if (!await exists$1(packageJsonPath)) {
54730
- throw PackageJsonNotFoundError(options.directory);
55155
+
55156
+ /**
55157
+ * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
55158
+ *
55159
+ * @private
55160
+ * @param {Object} object The object to query.
55161
+ * @returns {Array} Returns the array of property names.
55162
+ */
55163
+ function baseKeysIn(object) {
55164
+ if (!isObject$1(object)) {
55165
+ return nativeKeysIn(object);
54731
55166
  }
54732
- const existingDependencies = Object.keys(await getDependencies(packageJsonPath));
54733
- const dependenciesToAdd = dependencies.filter((dep) => {
54734
- return !existingDependencies.includes(dep);
54735
- });
54736
- if (dependenciesToAdd.length === 0) {
54737
- return;
55167
+ var isProto = isPrototype(object),
55168
+ result = [];
55169
+
55170
+ for (var key in object) {
55171
+ if (!(key == 'constructor' && (isProto || !hasOwnProperty$1.call(object, key)))) {
55172
+ result.push(key);
55173
+ }
54738
55174
  }
54739
- let args;
54740
- switch (options.dependencyManager) {
54741
- case "npm":
54742
- args = argumentsToAddDependenciesWithNPM(dependenciesToAdd, options.type);
54743
- break;
54744
- case "yarn":
54745
- args = argumentsToAddDependenciesWithYarn(dependenciesToAdd, options.type);
54746
- break;
54747
- case "pnpm":
54748
- args = argumentsToAddDependenciesWithPNPM(dependenciesToAdd, options.type);
54749
- break;
55175
+ return result;
55176
+ }
55177
+
55178
+ /**
55179
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
55180
+ *
55181
+ * @private
55182
+ * @param {Function} func The function to apply a rest parameter to.
55183
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
55184
+ * @returns {Function} Returns the new function.
55185
+ */
55186
+ function baseRest(func, start) {
55187
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
55188
+ return function() {
55189
+ var args = arguments,
55190
+ index = -1,
55191
+ length = nativeMax(args.length - start, 0),
55192
+ array = Array(length);
55193
+
55194
+ while (++index < length) {
55195
+ array[index] = args[start + index];
55196
+ }
55197
+ index = -1;
55198
+ var otherArgs = Array(start + 1);
55199
+ while (++index < start) {
55200
+ otherArgs[index] = args[index];
55201
+ }
55202
+ otherArgs[start] = array;
55203
+ return apply(func, this, otherArgs);
55204
+ };
55205
+ }
55206
+
55207
+ /**
55208
+ * Copies properties of `source` to `object`.
55209
+ *
55210
+ * @private
55211
+ * @param {Object} source The object to copy properties from.
55212
+ * @param {Array} props The property identifiers to copy.
55213
+ * @param {Object} [object={}] The object to copy properties to.
55214
+ * @param {Function} [customizer] The function to customize copied values.
55215
+ * @returns {Object} Returns `object`.
55216
+ */
55217
+ function copyObject(source, props, object, customizer) {
55218
+ object || (object = {});
55219
+
55220
+ var index = -1,
55221
+ length = props.length;
55222
+
55223
+ while (++index < length) {
55224
+ var key = props[index];
55225
+
55226
+ var newValue = customizer
55227
+ ? customizer(object[key], source[key], key, object, source)
55228
+ : undefined;
55229
+
55230
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
54750
55231
  }
54751
- await exec$2(options.dependencyManager, args, {
54752
- cwd: options.directory,
54753
- stdout: options.stdout,
54754
- stderr: options.stderr,
54755
- signal: options.signal
55232
+ return object;
55233
+ }
55234
+
55235
+ /**
55236
+ * Creates a function like `_.assign`.
55237
+ *
55238
+ * @private
55239
+ * @param {Function} assigner The function to assign values.
55240
+ * @returns {Function} Returns the new assigner function.
55241
+ */
55242
+ function createAssigner(assigner) {
55243
+ return baseRest(function(object, sources) {
55244
+ var index = -1,
55245
+ length = sources.length,
55246
+ customizer = length > 1 ? sources[length - 1] : undefined,
55247
+ guard = length > 2 ? sources[2] : undefined;
55248
+
55249
+ customizer = (assigner.length > 3 && typeof customizer == 'function')
55250
+ ? (length--, customizer)
55251
+ : undefined;
55252
+
55253
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
55254
+ customizer = length < 3 ? undefined : customizer;
55255
+ length = 1;
55256
+ }
55257
+ object = Object(object);
55258
+ while (++index < length) {
55259
+ var source = sources[index];
55260
+ if (source) {
55261
+ assigner(object, source, index, customizer);
55262
+ }
55263
+ }
55264
+ return object;
54756
55265
  });
54757
55266
  }
54758
- function argumentsToAddDependenciesWithNPM(dependencies, type) {
54759
- let command = ["install"];
54760
- command = command.concat(dependencies);
54761
- switch (type) {
54762
- case "dev":
54763
- command.push("--save-dev");
54764
- break;
54765
- case "peer":
54766
- command.push("--save-peer");
54767
- break;
54768
- case "prod":
54769
- command.push("--save-prod");
54770
- break;
55267
+
55268
+ /**
55269
+ * Checks if `value` is a valid array-like index.
55270
+ *
55271
+ * @private
55272
+ * @param {*} value The value to check.
55273
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
55274
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
55275
+ */
55276
+ function isIndex(value, length) {
55277
+ length = length == null ? MAX_SAFE_INTEGER$2 : length;
55278
+ return !!length &&
55279
+ (typeof value == 'number' || reIsUint.test(value)) &&
55280
+ (value > -1 && value % 1 == 0 && value < length);
55281
+ }
55282
+
55283
+ /**
55284
+ * Checks if the given arguments are from an iteratee call.
55285
+ *
55286
+ * @private
55287
+ * @param {*} value The potential iteratee value argument.
55288
+ * @param {*} index The potential iteratee index or key argument.
55289
+ * @param {*} object The potential iteratee object argument.
55290
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
55291
+ * else `false`.
55292
+ */
55293
+ function isIterateeCall(value, index, object) {
55294
+ if (!isObject$1(object)) {
55295
+ return false;
54771
55296
  }
54772
- return command;
55297
+ var type = typeof index;
55298
+ if (type == 'number'
55299
+ ? (isArrayLike(object) && isIndex(index, object.length))
55300
+ : (type == 'string' && index in object)
55301
+ ) {
55302
+ return eq$3(object[index], value);
55303
+ }
55304
+ return false;
54773
55305
  }
54774
- function argumentsToAddDependenciesWithYarn(dependencies, type) {
54775
- let command = ["add"];
54776
- command = command.concat(dependencies);
54777
- switch (type) {
54778
- case "dev":
54779
- command.push("--dev");
54780
- break;
54781
- case "peer":
54782
- command.push("--peer");
54783
- break;
54784
- case "prod":
54785
- command.push("--prod");
54786
- break;
55306
+
55307
+ /**
55308
+ * Checks if `value` is likely a prototype object.
55309
+ *
55310
+ * @private
55311
+ * @param {*} value The value to check.
55312
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
55313
+ */
55314
+ function isPrototype(value) {
55315
+ var Ctor = value && value.constructor,
55316
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
55317
+
55318
+ return value === proto;
55319
+ }
55320
+
55321
+ /**
55322
+ * This function is like
55323
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
55324
+ * except that it includes inherited enumerable properties.
55325
+ *
55326
+ * @private
55327
+ * @param {Object} object The object to query.
55328
+ * @returns {Array} Returns the array of property names.
55329
+ */
55330
+ function nativeKeysIn(object) {
55331
+ var result = [];
55332
+ if (object != null) {
55333
+ for (var key in Object(object)) {
55334
+ result.push(key);
55335
+ }
54787
55336
  }
54788
- return command;
55337
+ return result;
54789
55338
  }
54790
- function argumentsToAddDependenciesWithPNPM(dependencies, type) {
54791
- let command = ["add"];
54792
- command = command.concat(dependencies);
54793
- switch (type) {
54794
- case "dev":
54795
- command.push("--save-dev");
54796
- break;
54797
- case "peer":
54798
- command.push("--save-peer");
54799
- break;
54800
- case "prod":
54801
- command.push("--save-prod");
54802
- break;
55339
+
55340
+ /**
55341
+ * Performs a
55342
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
55343
+ * comparison between two values to determine if they are equivalent.
55344
+ *
55345
+ * @static
55346
+ * @memberOf _
55347
+ * @since 4.0.0
55348
+ * @category Lang
55349
+ * @param {*} value The value to compare.
55350
+ * @param {*} other The other value to compare.
55351
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
55352
+ * @example
55353
+ *
55354
+ * var object = { 'a': 1 };
55355
+ * var other = { 'a': 1 };
55356
+ *
55357
+ * _.eq(object, object);
55358
+ * // => true
55359
+ *
55360
+ * _.eq(object, other);
55361
+ * // => false
55362
+ *
55363
+ * _.eq('a', 'a');
55364
+ * // => true
55365
+ *
55366
+ * _.eq('a', Object('a'));
55367
+ * // => false
55368
+ *
55369
+ * _.eq(NaN, NaN);
55370
+ * // => true
55371
+ */
55372
+ function eq$3(value, other) {
55373
+ return value === other || (value !== value && other !== other);
55374
+ }
55375
+
55376
+ /**
55377
+ * Checks if `value` is likely an `arguments` object.
55378
+ *
55379
+ * @static
55380
+ * @memberOf _
55381
+ * @since 0.1.0
55382
+ * @category Lang
55383
+ * @param {*} value The value to check.
55384
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
55385
+ * else `false`.
55386
+ * @example
55387
+ *
55388
+ * _.isArguments(function() { return arguments; }());
55389
+ * // => true
55390
+ *
55391
+ * _.isArguments([1, 2, 3]);
55392
+ * // => false
55393
+ */
55394
+ function isArguments(value) {
55395
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
55396
+ return isArrayLikeObject(value) && hasOwnProperty$1.call(value, 'callee') &&
55397
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
55398
+ }
55399
+
55400
+ /**
55401
+ * Checks if `value` is classified as an `Array` object.
55402
+ *
55403
+ * @static
55404
+ * @memberOf _
55405
+ * @since 0.1.0
55406
+ * @category Lang
55407
+ * @param {*} value The value to check.
55408
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
55409
+ * @example
55410
+ *
55411
+ * _.isArray([1, 2, 3]);
55412
+ * // => true
55413
+ *
55414
+ * _.isArray(document.body.children);
55415
+ * // => false
55416
+ *
55417
+ * _.isArray('abc');
55418
+ * // => false
55419
+ *
55420
+ * _.isArray(_.noop);
55421
+ * // => false
55422
+ */
55423
+ var isArray = Array.isArray;
55424
+
55425
+ /**
55426
+ * Checks if `value` is array-like. A value is considered array-like if it's
55427
+ * not a function and has a `value.length` that's an integer greater than or
55428
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
55429
+ *
55430
+ * @static
55431
+ * @memberOf _
55432
+ * @since 4.0.0
55433
+ * @category Lang
55434
+ * @param {*} value The value to check.
55435
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
55436
+ * @example
55437
+ *
55438
+ * _.isArrayLike([1, 2, 3]);
55439
+ * // => true
55440
+ *
55441
+ * _.isArrayLike(document.body.children);
55442
+ * // => true
55443
+ *
55444
+ * _.isArrayLike('abc');
55445
+ * // => true
55446
+ *
55447
+ * _.isArrayLike(_.noop);
55448
+ * // => false
55449
+ */
55450
+ function isArrayLike(value) {
55451
+ return value != null && isLength(value.length) && !isFunction(value);
55452
+ }
55453
+
55454
+ /**
55455
+ * This method is like `_.isArrayLike` except that it also checks if `value`
55456
+ * is an object.
55457
+ *
55458
+ * @static
55459
+ * @memberOf _
55460
+ * @since 4.0.0
55461
+ * @category Lang
55462
+ * @param {*} value The value to check.
55463
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
55464
+ * else `false`.
55465
+ * @example
55466
+ *
55467
+ * _.isArrayLikeObject([1, 2, 3]);
55468
+ * // => true
55469
+ *
55470
+ * _.isArrayLikeObject(document.body.children);
55471
+ * // => true
55472
+ *
55473
+ * _.isArrayLikeObject('abc');
55474
+ * // => false
55475
+ *
55476
+ * _.isArrayLikeObject(_.noop);
55477
+ * // => false
55478
+ */
55479
+ function isArrayLikeObject(value) {
55480
+ return isObjectLike$1(value) && isArrayLike(value);
55481
+ }
55482
+
55483
+ /**
55484
+ * Checks if `value` is classified as a `Function` object.
55485
+ *
55486
+ * @static
55487
+ * @memberOf _
55488
+ * @since 0.1.0
55489
+ * @category Lang
55490
+ * @param {*} value The value to check.
55491
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
55492
+ * @example
55493
+ *
55494
+ * _.isFunction(_);
55495
+ * // => true
55496
+ *
55497
+ * _.isFunction(/abc/);
55498
+ * // => false
55499
+ */
55500
+ function isFunction(value) {
55501
+ // The use of `Object#toString` avoids issues with the `typeof` operator
55502
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
55503
+ var tag = isObject$1(value) ? objectToString.call(value) : '';
55504
+ return tag == funcTag || tag == genTag;
55505
+ }
55506
+
55507
+ /**
55508
+ * Checks if `value` is a valid array-like length.
55509
+ *
55510
+ * **Note:** This method is loosely based on
55511
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
55512
+ *
55513
+ * @static
55514
+ * @memberOf _
55515
+ * @since 4.0.0
55516
+ * @category Lang
55517
+ * @param {*} value The value to check.
55518
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
55519
+ * @example
55520
+ *
55521
+ * _.isLength(3);
55522
+ * // => true
55523
+ *
55524
+ * _.isLength(Number.MIN_VALUE);
55525
+ * // => false
55526
+ *
55527
+ * _.isLength(Infinity);
55528
+ * // => false
55529
+ *
55530
+ * _.isLength('3');
55531
+ * // => false
55532
+ */
55533
+ function isLength(value) {
55534
+ return typeof value == 'number' &&
55535
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$2;
55536
+ }
55537
+
55538
+ /**
55539
+ * Checks if `value` is the
55540
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
55541
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
55542
+ *
55543
+ * @static
55544
+ * @memberOf _
55545
+ * @since 0.1.0
55546
+ * @category Lang
55547
+ * @param {*} value The value to check.
55548
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
55549
+ * @example
55550
+ *
55551
+ * _.isObject({});
55552
+ * // => true
55553
+ *
55554
+ * _.isObject([1, 2, 3]);
55555
+ * // => true
55556
+ *
55557
+ * _.isObject(_.noop);
55558
+ * // => true
55559
+ *
55560
+ * _.isObject(null);
55561
+ * // => false
55562
+ */
55563
+ function isObject$1(value) {
55564
+ var type = typeof value;
55565
+ return !!value && (type == 'object' || type == 'function');
55566
+ }
55567
+
55568
+ /**
55569
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
55570
+ * and has a `typeof` result of "object".
55571
+ *
55572
+ * @static
55573
+ * @memberOf _
55574
+ * @since 4.0.0
55575
+ * @category Lang
55576
+ * @param {*} value The value to check.
55577
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
55578
+ * @example
55579
+ *
55580
+ * _.isObjectLike({});
55581
+ * // => true
55582
+ *
55583
+ * _.isObjectLike([1, 2, 3]);
55584
+ * // => true
55585
+ *
55586
+ * _.isObjectLike(_.noop);
55587
+ * // => false
55588
+ *
55589
+ * _.isObjectLike(null);
55590
+ * // => false
55591
+ */
55592
+ function isObjectLike$1(value) {
55593
+ return !!value && typeof value == 'object';
55594
+ }
55595
+
55596
+ /**
55597
+ * This method is like `_.assignIn` except that it accepts `customizer`
55598
+ * which is invoked to produce the assigned values. If `customizer` returns
55599
+ * `undefined`, assignment is handled by the method instead. The `customizer`
55600
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
55601
+ *
55602
+ * **Note:** This method mutates `object`.
55603
+ *
55604
+ * @static
55605
+ * @memberOf _
55606
+ * @since 4.0.0
55607
+ * @alias extendWith
55608
+ * @category Object
55609
+ * @param {Object} object The destination object.
55610
+ * @param {...Object} sources The source objects.
55611
+ * @param {Function} [customizer] The function to customize assigned values.
55612
+ * @returns {Object} Returns `object`.
55613
+ * @see _.assignWith
55614
+ * @example
55615
+ *
55616
+ * function customizer(objValue, srcValue) {
55617
+ * return _.isUndefined(objValue) ? srcValue : objValue;
55618
+ * }
55619
+ *
55620
+ * var defaults = _.partialRight(_.assignInWith, customizer);
55621
+ *
55622
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
55623
+ * // => { 'a': 1, 'b': 2 }
55624
+ */
55625
+ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
55626
+ copyObject(source, keysIn(source), object, customizer);
55627
+ });
55628
+
55629
+ /**
55630
+ * Assigns own and inherited enumerable string keyed properties of source
55631
+ * objects to the destination object for all destination properties that
55632
+ * resolve to `undefined`. Source objects are applied from left to right.
55633
+ * Once a property is set, additional values of the same property are ignored.
55634
+ *
55635
+ * **Note:** This method mutates `object`.
55636
+ *
55637
+ * @static
55638
+ * @since 0.1.0
55639
+ * @memberOf _
55640
+ * @category Object
55641
+ * @param {Object} object The destination object.
55642
+ * @param {...Object} [sources] The source objects.
55643
+ * @returns {Object} Returns `object`.
55644
+ * @see _.defaultsDeep
55645
+ * @example
55646
+ *
55647
+ * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
55648
+ * // => { 'a': 1, 'b': 2 }
55649
+ */
55650
+ var defaults$1 = baseRest(function(args) {
55651
+ args.push(undefined, assignInDefaults);
55652
+ return apply(assignInWith, undefined, args);
55653
+ });
55654
+
55655
+ /**
55656
+ * Creates an array of the own and inherited enumerable property names of `object`.
55657
+ *
55658
+ * **Note:** Non-object values are coerced to objects.
55659
+ *
55660
+ * @static
55661
+ * @memberOf _
55662
+ * @since 3.0.0
55663
+ * @category Object
55664
+ * @param {Object} object The object to query.
55665
+ * @returns {Array} Returns the array of property names.
55666
+ * @example
55667
+ *
55668
+ * function Foo() {
55669
+ * this.a = 1;
55670
+ * this.b = 2;
55671
+ * }
55672
+ *
55673
+ * Foo.prototype.c = 3;
55674
+ *
55675
+ * _.keysIn(new Foo);
55676
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
55677
+ */
55678
+ function keysIn(object) {
55679
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
55680
+ }
55681
+
55682
+ var lodash_defaults = defaults$1;
55683
+
55684
+ (function (module, exports) {
55685
+ Object.defineProperty(exports, "__esModule", {
55686
+ value: true
55687
+ });
55688
+ exports["default"] = void 0;
55689
+
55690
+ var _randomSeed = _interopRequireDefault(randomSeed);
55691
+
55692
+ var _lodash = _interopRequireDefault(lodash_defaults);
55693
+
55694
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
55695
+
55696
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
55697
+
55698
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
55699
+
55700
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
55701
+
55702
+ /**
55703
+ * Adjectives used by haikunator
55704
+ */
55705
+ var defaultAdjectives = ['aged', 'ancient', 'autumn', 'billowing', 'bitter', 'black', 'blue', 'bold', 'broad', 'broken', 'calm', 'cold', 'cool', 'crimson', 'curly', 'damp', 'dark', 'dawn', 'delicate', 'divine', 'dry', 'empty', 'falling', 'fancy', 'flat', 'floral', 'fragrant', 'frosty', 'gentle', 'green', 'hidden', 'holy', 'icy', 'jolly', 'late', 'lingering', 'little', 'lively', 'long', 'lucky', 'misty', 'morning', 'muddy', 'mute', 'nameless', 'noisy', 'odd', 'old', 'orange', 'patient', 'plain', 'polished', 'proud', 'purple', 'quiet', 'rapid', 'raspy', 'red', 'restless', 'rough', 'round', 'royal', 'shiny', 'shrill', 'shy', 'silent', 'small', 'snowy', 'soft', 'solitary', 'sparkling', 'spring', 'square', 'steep', 'still', 'summer', 'super', 'sweet', 'throbbing', 'tight', 'tiny', 'twilight', 'wandering', 'weathered', 'white', 'wild', 'winter', 'wispy', 'withered', 'yellow', 'young'];
55706
+ /**
55707
+ * Nouns used by haikunator
55708
+ */
55709
+
55710
+ var defaultNouns = ['art', 'band', 'bar', 'base', 'bird', 'block', 'boat', 'bonus', 'bread', 'breeze', 'brook', 'bush', 'butterfly', 'cake', 'cell', 'cherry', 'cloud', 'credit', 'darkness', 'dawn', 'dew', 'disk', 'dream', 'dust', 'feather', 'field', 'fire', 'firefly', 'flower', 'fog', 'forest', 'frog', 'frost', 'glade', 'glitter', 'grass', 'hall', 'hat', 'haze', 'heart', 'hill', 'king', 'lab', 'lake', 'leaf', 'limit', 'math', 'meadow', 'mode', 'moon', 'morning', 'mountain', 'mouse', 'mud', 'night', 'paper', 'pine', 'poetry', 'pond', 'queen', 'rain', 'recipe', 'resonance', 'rice', 'river', 'salad', 'scene', 'sea', 'shadow', 'shape', 'silence', 'sky', 'smoke', 'snow', 'snowflake', 'sound', 'star', 'sun', 'sun', 'sunset', 'surf', 'term', 'thunder', 'tooth', 'tree', 'truth', 'union', 'unit', 'violet', 'voice', 'water', 'waterfall', 'wave', 'wildflower', 'wind', 'wood'];
55711
+
55712
+ /**
55713
+ * Default options used by haikunate method
55714
+ */
55715
+ var defaultOptions = {
55716
+ delimiter: '-',
55717
+ tokenLength: 4,
55718
+ tokenHex: false,
55719
+ tokenChars: '0123456789'
55720
+ };
55721
+
55722
+ var Haikunator =
55723
+ /*#__PURE__*/
55724
+ function () {
55725
+ /**
55726
+ * Initialize new haikunator
55727
+ */
55728
+ function Haikunator() {
55729
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
55730
+
55731
+ _classCallCheck(this, Haikunator);
55732
+
55733
+ this.adjectives = options.adjectives || defaultAdjectives;
55734
+ this.nouns = options.nouns || defaultNouns;
55735
+ this.random = _randomSeed["default"].create(options.seed);
55736
+ this.config = (0, _lodash["default"])(options.defaults, defaultOptions);
54803
55737
  }
54804
- return command;
55738
+ /**
55739
+ * Generate heroku-like random names
55740
+ */
55741
+
55742
+
55743
+ _createClass(Haikunator, [{
55744
+ key: "haikunate",
55745
+ value: function haikunate(options) {
55746
+ // set specified options
55747
+ var config = (0, _lodash["default"])(options, this.config); // set tokenChars if tokenHex is set
55748
+
55749
+ if (config.tokenHex === true) {
55750
+ config.tokenChars = '0123456789abcdef';
55751
+ } // pick adjective and noun
55752
+
55753
+
55754
+ var adjective = this._randomElement(this.adjectives);
55755
+
55756
+ var noun = this._randomElement(this.nouns); // create random token
55757
+
55758
+
55759
+ if (!config.tokenLength) config.tokenLength = 0;
55760
+ var token = '';
55761
+
55762
+ for (var i = 0; i < config.tokenLength; i++) {
55763
+ token += this._randomElement(config.tokenChars);
55764
+ } // create result and return
55765
+
55766
+
55767
+ var sections = [adjective, noun, token];
55768
+ return sections.filter(function (e) {
55769
+ return !!e;
55770
+ }).join(config.delimiter);
55771
+ }
55772
+ /**
55773
+ * Get a random element from an array/string
55774
+ * @param {(string|Array)} array
55775
+ * @returns {*}
55776
+ * @private
55777
+ */
55778
+
55779
+ }, {
55780
+ key: "_randomElement",
55781
+ value: function _randomElement(array) {
55782
+ if (!array) return undefined;
55783
+ return array[this.random(array.length)];
55784
+ }
55785
+ }]);
55786
+
55787
+ return Haikunator;
55788
+ }();
55789
+
55790
+ exports["default"] = Haikunator;
55791
+ module.exports = exports.default;
55792
+
55793
+ }(distWeb, distWeb.exports));
55794
+
55795
+ var Haikunator = /*@__PURE__*/getDefaultExportFromCjs(distWeb.exports);
55796
+
55797
+ const haikunator = new Haikunator();
55798
+ function generate(suffix) {
55799
+ const generated = haikunator.haikunate();
55800
+ const [adjective, noun, token] = generated.split("-");
55801
+ return [adjective, noun, suffix, token].join("-");
54805
55802
  }
54806
55803
 
54807
- var dependency = /*#__PURE__*/Object.freeze({
55804
+ var haiku = /*#__PURE__*/Object.freeze({
54808
55805
  __proto__: null,
54809
- dependencyManager: dependencyManager,
54810
- PackageJsonNotFoundError: PackageJsonNotFoundError,
54811
- dependencyManagerUsedForCreating: dependencyManagerUsedForCreating,
54812
- installNPMDependenciesRecursively: installNPMDependenciesRecursively,
54813
- install: install,
54814
- getPackageName: getPackageName,
54815
- getDependencies: getDependencies,
54816
- addNPMDependenciesIfNeeded: addNPMDependenciesIfNeeded
55806
+ generate: generate
54817
55807
  });
54818
55808
 
54819
55809
  var packageJson$2 = {exports: {}};
@@ -57476,6 +58466,7 @@ const compressBrotli = src$2.exports;
57476
58466
  const loadStore = options => {
57477
58467
  const adapters = {
57478
58468
  redis: '@keyv/redis',
58469
+ rediss: '@keyv/redis',
57479
58470
  mongodb: '@keyv/mongo',
57480
58471
  mongo: '@keyv/mongo',
57481
58472
  sqlite: '@keyv/sqlite',
@@ -57483,9 +58474,11 @@ const loadStore = options => {
57483
58474
  postgres: '@keyv/postgres',
57484
58475
  mysql: '@keyv/mysql',
57485
58476
  etcd: '@keyv/etcd',
58477
+ offline: '@keyv/offline',
58478
+ tiered: '@keyv/tiered',
57486
58479
  };
57487
58480
  if (options.adapter || options.uri) {
57488
- const adapter = options.adapter || /^[^:]*/.exec(options.uri)[0];
58481
+ const adapter = options.adapter || /^[^:+]*/.exec(options.uri)[0];
57489
58482
  return new (commonjsRequire(adapters[adapter]))(options);
57490
58483
  }
57491
58484
 
@@ -57498,10 +58491,11 @@ const iterableAdapters = [
57498
58491
  'mysql',
57499
58492
  'mongo',
57500
58493
  'redis',
58494
+ 'tiered',
57501
58495
  ];
57502
58496
 
57503
58497
  class Keyv$1 extends EventEmitter$2 {
57504
- constructor(uri, options) {
58498
+ constructor(uri, {emitErrors = true, ...options} = {}) {
57505
58499
  super();
57506
58500
  this.opts = {
57507
58501
  namespace: 'keyv',
@@ -57525,30 +58519,29 @@ class Keyv$1 extends EventEmitter$2 {
57525
58519
  };
57526
58520
  }
57527
58521
 
57528
- if (typeof this.opts.store.on === 'function') {
58522
+ if (typeof this.opts.store.on === 'function' && emitErrors) {
57529
58523
  this.opts.store.on('error', error => this.emit('error', error));
57530
58524
  }
57531
58525
 
57532
58526
  this.opts.store.namespace = this.opts.namespace;
57533
58527
 
57534
- const generateIterator = iterator =>
57535
- async function * () {
57536
- for await (const [key, raw] of typeof iterator === 'function'
57537
- ? iterator(this.opts.store.namespace)
57538
- : iterator) {
57539
- const data = typeof raw === 'string' ? this.opts.deserialize(raw) : raw;
57540
- if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
57541
- continue;
57542
- }
57543
-
57544
- if (typeof data.expires === 'number' && Date.now() > data.expires) {
57545
- this.delete(key);
57546
- continue;
57547
- }
58528
+ const generateIterator = iterator => async function * () {
58529
+ for await (const [key, raw] of typeof iterator === 'function'
58530
+ ? iterator(this.opts.store.namespace)
58531
+ : iterator) {
58532
+ const data = this.opts.deserialize(raw);
58533
+ if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
58534
+ continue;
58535
+ }
57548
58536
 
57549
- yield [this._getKeyUnprefix(key), data.value];
58537
+ if (typeof data.expires === 'number' && Date.now() > data.expires) {
58538
+ this.delete(key);
58539
+ continue;
57550
58540
  }
57551
- };
58541
+
58542
+ yield [this._getKeyUnprefix(key), data.value];
58543
+ }
58544
+ };
57552
58545
 
57553
58546
  // Attach iterators
57554
58547
  if (typeof this.opts.store[Symbol.iterator] === 'function' && this.opts.store instanceof Map) {
@@ -57573,12 +58566,10 @@ class Keyv$1 extends EventEmitter$2 {
57573
58566
  }
57574
58567
 
57575
58568
  _getKeyUnprefix(key) {
57576
- return this.opts.store.namespace
57577
- ? key
57578
- .split(':')
57579
- .splice(1)
57580
- .join(':')
57581
- : key;
58569
+ return key
58570
+ .split(':')
58571
+ .splice(1)
58572
+ .join(':');
57582
58573
  }
57583
58574
 
57584
58575
  get(key, options) {
@@ -57620,13 +58611,13 @@ class Keyv$1 extends EventEmitter$2 {
57620
58611
  .then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))
57621
58612
  .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
57622
58613
  .then(data => {
57623
- // Console.log('get', data);
57624
58614
  if (data === undefined || data === null) {
57625
58615
  return undefined;
57626
58616
  }
57627
58617
 
57628
58618
  if (isArray) {
57629
58619
  const result = [];
58620
+
57630
58621
  if (data.length === 0) {
57631
58622
  return [];
57632
58623
  }
@@ -57728,6 +58719,13 @@ class Keyv$1 extends EventEmitter$2 {
57728
58719
  return value !== undefined;
57729
58720
  });
57730
58721
  }
58722
+
58723
+ disconnect() {
58724
+ const {store} = this.opts;
58725
+ if (typeof store.disconnect === 'function') {
58726
+ return store.disconnect();
58727
+ }
58728
+ }
57731
58729
  }
57732
58730
 
57733
58731
  var src$1 = Keyv$1;
@@ -61113,6 +62111,14 @@ class Request extends stream_1.Duplex {
61113
62111
  const redirectUrl = new url_1.URL(redirectBuffer, url);
61114
62112
  const redirectString = redirectUrl.toString();
61115
62113
  decodeURI(redirectString);
62114
+ // eslint-disable-next-line no-inner-declarations
62115
+ function isUnixSocketURL(url) {
62116
+ return url.protocol === 'unix:' || url.hostname === 'unix';
62117
+ }
62118
+ if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {
62119
+ this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this));
62120
+ return;
62121
+ }
61116
62122
  // Redirecting to a different site, clear sensitive data.
61117
62123
  if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {
61118
62124
  if ('host' in options.headers) {
@@ -61930,11 +62936,11 @@ function asPromise(normalizedOptions) {
61930
62936
  request._beforeError(new types_1.RequestError(error.message, error, request));
61931
62937
  return;
61932
62938
  }
62939
+ globalResponse = response;
61933
62940
  if (!is_response_ok_1.isResponseOk(response)) {
61934
62941
  request._beforeError(new types_1.HTTPError(response));
61935
62942
  return;
61936
62943
  }
61937
- globalResponse = response;
61938
62944
  resolve(request.options.resolveBodyOnly ? response.body : response);
61939
62945
  });
61940
62946
  const onError = (error) => {
@@ -66358,11 +67364,178 @@ async function latestNpmPackageVersion(name) {
66358
67364
  return latestVersion(name);
66359
67365
  }
66360
67366
 
66361
- var version = /*#__PURE__*/Object.freeze({
67367
+ var version$1 = /*#__PURE__*/Object.freeze({
66362
67368
  __proto__: null,
66363
67369
  latestNpmPackageVersion: latestNpmPackageVersion
66364
67370
  });
66365
67371
 
67372
+ var semver = /*#__PURE__*/Object.freeze({
67373
+ __proto__: null,
67374
+ Version: semver$3,
67375
+ coerce: coerce_1
67376
+ });
67377
+
67378
+ const dependencyManager = ["yarn", "npm", "pnpm"];
67379
+ const PackageJsonNotFoundError = (directory) => {
67380
+ return new Abort(`The directory ${directory} doesn't have a package.json.`);
67381
+ };
67382
+ function dependencyManagerUsedForCreating(env = process.env) {
67383
+ if (env.npm_config_user_agent?.includes("yarn")) {
67384
+ return "yarn";
67385
+ } else if (env.npm_config_user_agent?.includes("pnpm")) {
67386
+ return "pnpm";
67387
+ } else {
67388
+ return "npm";
67389
+ }
67390
+ }
67391
+ async function installNPMDependenciesRecursively(options) {
67392
+ const packageJsons = await out(join$3(options.directory, "**/package.json"), {
67393
+ ignore: [join$3(options.directory, "node_modules/**/package.json")],
67394
+ cwd: options.directory,
67395
+ onlyFiles: true,
67396
+ deep: options.deep
67397
+ });
67398
+ const abortController = new AbortController$1();
67399
+ try {
67400
+ await Promise.all(packageJsons.map(async (packageJsonPath) => {
67401
+ const directory = dirname$1(packageJsonPath);
67402
+ await install(directory, options.dependencyManager, void 0, void 0, abortController.signal);
67403
+ }));
67404
+ } catch (error) {
67405
+ abortController.abort();
67406
+ throw error;
67407
+ }
67408
+ }
67409
+ async function install(directory, dependencyManager2, stdout, stderr, signal) {
67410
+ const options = { cwd: directory, stdout, stderr, signal };
67411
+ await exec$2(dependencyManager2, ["install"], options);
67412
+ }
67413
+ async function getPackageName(packageJsonPath) {
67414
+ const packageJsonContent = await packageJSONContents(packageJsonPath);
67415
+ return packageJsonContent.name;
67416
+ }
67417
+ async function getDependencies(packageJsonPath) {
67418
+ const packageJsonContent = await packageJSONContents(packageJsonPath);
67419
+ const dependencies = packageJsonContent.dependencies ?? {};
67420
+ const devDependencies = packageJsonContent.devDependencies ?? {};
67421
+ return { ...dependencies, ...devDependencies };
67422
+ }
67423
+ async function checkForNewVersion(dependency, currentVersion) {
67424
+ try {
67425
+ const lastVersion = await latestNpmPackageVersion(dependency);
67426
+ if (lastVersion && new semver$3(currentVersion).compare(lastVersion) < 0) {
67427
+ return lastVersion;
67428
+ } else {
67429
+ return void 0;
67430
+ }
67431
+ } catch (error) {
67432
+ return void 0;
67433
+ }
67434
+ }
67435
+ function getOutputUpdateCLIReminder(dependencyManager2, packages) {
67436
+ const updateCommand = dependencyManager2 === "yarn" ? "upgrade" : "update";
67437
+ return content`To update to the latest version of the Shopify CLI, run ${token.genericShellCommand(`${dependencyManager2} ${updateCommand}${packages === void 0 ? "" : ` ${packages.join(", ")}`}`)}`.value;
67438
+ }
67439
+ async function packageJSONContents(packageJsonPath) {
67440
+ if (!await exists$1(packageJsonPath)) {
67441
+ throw PackageJsonNotFoundError(dirname$1(packageJsonPath));
67442
+ }
67443
+ return JSON.parse(await read$1(packageJsonPath));
67444
+ }
67445
+ async function addNPMDependenciesIfNeeded(dependencies, options) {
67446
+ const packageJsonPath = join$3(options.directory, "package.json");
67447
+ if (!await exists$1(packageJsonPath)) {
67448
+ throw PackageJsonNotFoundError(options.directory);
67449
+ }
67450
+ const existingDependencies = Object.keys(await getDependencies(packageJsonPath));
67451
+ const dependenciesToAdd = dependencies.filter((dep) => {
67452
+ return !existingDependencies.includes(dep);
67453
+ });
67454
+ if (dependenciesToAdd.length === 0) {
67455
+ return;
67456
+ }
67457
+ let args;
67458
+ switch (options.dependencyManager) {
67459
+ case "npm":
67460
+ args = argumentsToAddDependenciesWithNPM(dependenciesToAdd, options.type);
67461
+ break;
67462
+ case "yarn":
67463
+ args = argumentsToAddDependenciesWithYarn(dependenciesToAdd, options.type);
67464
+ break;
67465
+ case "pnpm":
67466
+ args = argumentsToAddDependenciesWithPNPM(dependenciesToAdd, options.type);
67467
+ break;
67468
+ }
67469
+ await exec$2(options.dependencyManager, args, {
67470
+ cwd: options.directory,
67471
+ stdout: options.stdout,
67472
+ stderr: options.stderr,
67473
+ signal: options.signal
67474
+ });
67475
+ }
67476
+ function argumentsToAddDependenciesWithNPM(dependencies, type) {
67477
+ let command = ["install"];
67478
+ command = command.concat(dependencies);
67479
+ switch (type) {
67480
+ case "dev":
67481
+ command.push("--save-dev");
67482
+ break;
67483
+ case "peer":
67484
+ command.push("--save-peer");
67485
+ break;
67486
+ case "prod":
67487
+ command.push("--save-prod");
67488
+ break;
67489
+ }
67490
+ return command;
67491
+ }
67492
+ function argumentsToAddDependenciesWithYarn(dependencies, type) {
67493
+ let command = ["add"];
67494
+ command = command.concat(dependencies);
67495
+ switch (type) {
67496
+ case "dev":
67497
+ command.push("--dev");
67498
+ break;
67499
+ case "peer":
67500
+ command.push("--peer");
67501
+ break;
67502
+ case "prod":
67503
+ command.push("--prod");
67504
+ break;
67505
+ }
67506
+ return command;
67507
+ }
67508
+ function argumentsToAddDependenciesWithPNPM(dependencies, type) {
67509
+ let command = ["add"];
67510
+ command = command.concat(dependencies);
67511
+ switch (type) {
67512
+ case "dev":
67513
+ command.push("--save-dev");
67514
+ break;
67515
+ case "peer":
67516
+ command.push("--save-peer");
67517
+ break;
67518
+ case "prod":
67519
+ command.push("--save-prod");
67520
+ break;
67521
+ }
67522
+ return command;
67523
+ }
67524
+
67525
+ var dependency = /*#__PURE__*/Object.freeze({
67526
+ __proto__: null,
67527
+ dependencyManager: dependencyManager,
67528
+ PackageJsonNotFoundError: PackageJsonNotFoundError,
67529
+ dependencyManagerUsedForCreating: dependencyManagerUsedForCreating,
67530
+ installNPMDependenciesRecursively: installNPMDependenciesRecursively,
67531
+ install: install,
67532
+ getPackageName: getPackageName,
67533
+ getDependencies: getDependencies,
67534
+ checkForNewVersion: checkForNewVersion,
67535
+ getOutputUpdateCLIReminder: getOutputUpdateCLIReminder,
67536
+ addNPMDependenciesIfNeeded: addNPMDependenciesIfNeeded
67537
+ });
67538
+
66366
67539
  const getEnvironmentVariable = () => {
66367
67540
  const { env } = process;
66368
67541
  return env.SUDO_USER || env.C9_USER || env.LOGNAME || env.USER || env.LNAME || env.USERNAME;
@@ -84341,7 +85514,7 @@ var mimicFn_1 = mimicFn$1;
84341
85514
 
84342
85515
  const mimicFn = mimicFn_1;
84343
85516
 
84344
- var debounceFn = (inputFunction, options) => {
85517
+ var debounceFn = (inputFunction, options = {}) => {
84345
85518
  if (typeof inputFunction !== 'function') {
84346
85519
  throw new TypeError(`Expected the first argument to be a function, got \`${typeof inputFunction}\``);
84347
85520
  }
@@ -162947,6 +164120,7 @@ var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\
162947
164120
  function validateLabel(label, processing_option) {
162948
164121
  if (label.substr(0, 4) === "xn--") {
162949
164122
  label = punycode.toUnicode(label);
164123
+ PROCESSING_OPTIONS.NONTRANSITIONAL;
162950
164124
  }
162951
164125
 
162952
164126
  var error = false;
@@ -170692,7 +171866,7 @@ const printDocASTReducer = {
170692
171866
  * print all items together separated by separator if provided
170693
171867
  */
170694
171868
 
170695
- function join(maybeArray, separator) {
171869
+ function join(maybeArray, separator = '') {
170696
171870
  var _maybeArray$filter$jo;
170697
171871
 
170698
171872
  return (_maybeArray$filter$jo =
@@ -172147,7 +173321,7 @@ function makeRequest(_a) {
172147
173321
  successfullyPassedErrorPolicy = !result.errors || fetchOptions.errorPolicy === 'all' || fetchOptions.errorPolicy === 'ignore';
172148
173322
  if (response.ok && successfullyPassedErrorPolicy && successfullyReceivedData) {
172149
173323
  headers_1 = response.headers, status_1 = response.status;
172150
- rest = __rest(result, ["errors"]);
173324
+ result.errors, rest = __rest(result, ["errors"]);
172151
173325
  data = fetchOptions.errorPolicy === 'ignore' ? rest : result;
172152
173326
  return [2 /*return*/, __assign(__assign({}, (isBathchingQuery ? { data: data } : data)), { headers: headers_1, status: status_1 })];
172153
173327
  }
@@ -172284,10 +173458,12 @@ Object.defineProperty(exports, "GraphQLWebSocketClient", { enumerable: true, get
172284
173458
 
172285
173459
  }(dist$1));
172286
173460
 
172287
- const UnauthorizedAccessError = () => {
172288
- return new Abort(`You can't use Shopify CLI with development stores if you only have Partner staff member access.
172289
- If you want to use Shopify CLI to work on a development store, then you should be the store owner or create a staff account on the store`, `If you're the store owner, then you need to log in to the store directly using the store URL at least once (for example, using %s.myshopify.com/admin) before you log in using Shopify CLI.
172290
- Logging in to the Shopify admin directly connects the development store with your Shopify login.`);
173461
+ const UnauthorizedAccessError = (store) => {
173462
+ const adminLink = token.link(`URL`, `https://${store}/admin`);
173463
+ const storeName = store.replace(".myshopify.com", "");
173464
+ return new Abort(content`Looks like you need access to this dev store (${token.link(storeName, `https://${store}`)})`, content`• Log in to the store directly from this ${adminLink}. If you're the store owner, then that direct log in should solve your access issue.
173465
+ • If you're not the owner, create a dev store staff account for yourself. Then log in directly from the link above.
173466
+ `);
172291
173467
  };
172292
173468
  const UnknownError = () => {
172293
173469
  return new Bug(`Unknown error connecting to your store`);
@@ -172311,12 +173487,12 @@ ${sanitizedHeadersOutput(headers)}
172311
173487
  return response;
172312
173488
  } catch (error) {
172313
173489
  if (error instanceof dist$1.ClientError) {
172314
- const errorMessage = `
172315
- The Admin GraphQL API responded unsuccessfully with the HTTP status ${error.response.status} and errors:
173490
+ const errorMessage = content`
173491
+ The Admin GraphQL API responded unsuccessfully with the HTTP status ${`${error.response.status}`} and errors:
172316
173492
 
172317
- ${colorJson(error.response.errors)}
173493
+ ${token.json(error.response.errors)}
172318
173494
  `;
172319
- const abortError = new Abort(errorMessage);
173495
+ const abortError = new Abort(errorMessage.value);
172320
173496
  abortError.stack = error.stack;
172321
173497
  throw abortError;
172322
173498
  } else {
@@ -172333,7 +173509,7 @@ Sending Admin GraphQL request to URL ${url} with query:
172333
173509
  ${query}
172334
173510
  `);
172335
173511
  const data = await dist$1.request(url, query, {}, headers).catch((err) => {
172336
- throw err.response.status === 403 ? UnauthorizedAccessError() : UnknownError();
173512
+ throw err.response.status === 403 ? UnauthorizedAccessError(session.storeFqdn) : UnknownError();
172337
173513
  });
172338
173514
  return data.publicApiVersions.filter((item) => item.supported).map((item) => item.handle).sort().reverse()[0];
172339
173515
  }
@@ -172488,8 +173664,8 @@ const GenerateSignedUploadUrl = dist$1.gql`
172488
173664
  `;
172489
173665
 
172490
173666
  const CreateDeployment = dist$1.gql`
172491
- mutation CreateDeployment($apiKey: String!, $uuid: String!, $bundleUrl: String!) {
172492
- deploymentCreate(input: {apiKey: $apiKey, uuid: $uuid, bundleUrl: $bundleUrl}) {
173667
+ mutation CreateDeployment($apiKey: String!, $uuid: String!, $bundleUrl: String!, $extensions: [ExtensionSettings!]) {
173668
+ deploymentCreate(input: {apiKey: $apiKey, uuid: $uuid, bundleUrl: $bundleUrl, extensions: $extensions}) {
172493
173669
  deployment {
172494
173670
  uuid
172495
173671
  }
@@ -172707,10 +173883,10 @@ var index = /*#__PURE__*/Object.freeze({
172707
173883
  AppFunctionSetMutation: AppFunctionSetMutation
172708
173884
  });
172709
173885
 
172710
- async function request(query, token, variables) {
173886
+ async function request(query, token$1, variables) {
172711
173887
  const fqdn = await partners$1();
172712
173888
  const url = `https://${fqdn}/api/cli/graphql`;
172713
- const headers = await buildHeaders(token);
173889
+ const headers = await buildHeaders(token$1);
172714
173890
  debug$5(`
172715
173891
  Sending Partners GraphQL request:
172716
173892
  ${query}
@@ -172726,10 +173902,10 @@ ${sanitizedHeadersOutput(headers)}
172726
173902
  return response;
172727
173903
  } catch (error) {
172728
173904
  if (error instanceof dist$1.ClientError) {
172729
- const errorMessage = `
172730
- The Partners GraphQL API responded unsuccessfully with the HTTP status ${error.response.status} and errors:
173905
+ const errorMessage = content`
173906
+ The Partners GraphQL API responded unsuccessfully with the HTTP status ${`${error.response.status}`} and errors:
172731
173907
 
172732
- ${colorJson(error.response.errors)}
173908
+ ${token.json(error.response.errors)}
172733
173909
  `;
172734
173910
  const abortError = new Abort(errorMessage);
172735
173911
  abortError.stack = error.stack;
@@ -173005,12 +174181,6 @@ var checksum = /*#__PURE__*/Object.freeze({
173005
174181
  validateMD5: validateMD5
173006
174182
  });
173007
174183
 
173008
- var semver = /*#__PURE__*/Object.freeze({
173009
- __proto__: null,
173010
- Version: semver$3,
173011
- coerce: coerce_1
173012
- });
173013
-
173014
174184
  const RubyCLIVersion = "2.16.0";
173015
174185
  const ThemeCheckVersion = "1.10.2";
173016
174186
  const MinBundlerVersion = "2.3.8";
@@ -173106,7 +174276,7 @@ async function validateRubyEnv() {
173106
174276
  }
173107
174277
  async function getBundlerVersion() {
173108
174278
  try {
173109
- const { stdout } = await exec$2("bundler", ["-v"]);
174279
+ const stdout = await captureOutput("bundler", ["-v"]);
173110
174280
  return coerce_1(stdout);
173111
174281
  } catch {
173112
174282
  throw new Abort("Bundler not found", "Make sure you have Bundler installed on your system: https://bundler.io/");
@@ -173142,11 +174312,16 @@ function shopifyCLIDirectory() {
173142
174312
  function themeCheckDirectory() {
173143
174313
  return join$3(constants$2.paths.directories.cache.vendor.path(), "theme-check", ThemeCheckVersion);
173144
174314
  }
174315
+ async function version() {
174316
+ const parseOutput = (version2) => version2.match(/ruby (\d+\.\d+\.\d+)/)?.[1];
174317
+ return captureOutput("ruby", ["-v"]).then(parseOutput).catch(() => void 0);
174318
+ }
173145
174319
 
173146
174320
  var ruby = /*#__PURE__*/Object.freeze({
173147
174321
  __proto__: null,
173148
174322
  execCLI: execCLI,
173149
- execThemeCheckCLI: execThemeCheckCLI
174323
+ execThemeCheckCLI: execThemeCheckCLI,
174324
+ version: version
173150
174325
  });
173151
174326
 
173152
174327
  async function readPackageJSON(directory) {
@@ -173434,7 +174609,7 @@ async function read(path) {
173434
174609
  };
173435
174610
  }
173436
174611
  async function write(file) {
173437
- await write$1(file.path, stringify$d(file.variables));
174612
+ await write$1(file.path, stringify$f(file.variables));
173438
174613
  }
173439
174614
 
173440
174615
  var dotEnv = /*#__PURE__*/Object.freeze({
@@ -173464,5 +174639,34 @@ var plugins = /*#__PURE__*/Object.freeze({
173464
174639
  lookupTunnelPlugin: lookupTunnelPlugin
173465
174640
  });
173466
174641
 
173467
- export { npm as A, port as B, cli as C, id as D, temporary as E, FormData$3 as F, dotEnv as G, abort as H, constants$2 as I, plugins as J, File$1 as a, string as b, github as c, dependency as d, error$j as e, file$1 as f, git as g, os$2 as h, environment as i, session as j, schema$2 as k, toml as l, store as m, api as n, output as o, path$w as p, http$2 as q, archiver as r, system as s, template as t, ui as u, version as v, checksum as w, ruby as x, yaml as y, semver as z };
173468
- //# sourceMappingURL=index-84d3a745.js.map
174642
+ const isVSCode = async (root = process.cwd()) => {
174643
+ const config = await findUp$2(join$3(root, ".vscode"), { type: "directory" });
174644
+ if (!config) {
174645
+ return false;
174646
+ }
174647
+ return exists$1(config);
174648
+ };
174649
+ async function addRecommendedExtensions(directory, recommendations) {
174650
+ const extensionsPath = join$3(directory, ".vscode/extensions.json");
174651
+ if (await isVSCode(directory)) {
174652
+ let originalExtensionsJson = { recommendations: [] };
174653
+ if (await exists$1(extensionsPath)) {
174654
+ const originalExtensionsFile = await read$1(extensionsPath);
174655
+ originalExtensionsJson = JSON.parse(originalExtensionsFile);
174656
+ }
174657
+ const newExtensionsJson = {
174658
+ ...originalExtensionsJson,
174659
+ recommendations: [...originalExtensionsJson.recommendations, ...recommendations]
174660
+ };
174661
+ await write$1(extensionsPath, JSON.stringify(newExtensionsJson, null, 2));
174662
+ }
174663
+ }
174664
+
174665
+ var vscode = /*#__PURE__*/Object.freeze({
174666
+ __proto__: null,
174667
+ isVSCode: isVSCode,
174668
+ addRecommendedExtensions: addRecommendedExtensions
174669
+ });
174670
+
174671
+ export { semver as A, npm as B, port as C, cli as D, id as E, FormData$3 as F, temporary as G, dotEnv as H, abort as I, constants$2 as J, plugins as K, vscode as L, File$1 as a, string as b, github as c, dependency as d, error$j as e, file$1 as f, git as g, haiku as h, os$2 as i, environment as j, session as k, schema$2 as l, toml as m, store as n, output as o, path$w as p, api as q, http$2 as r, system as s, template as t, ui as u, version$1 as v, archiver as w, checksum as x, yaml as y, ruby as z };
174672
+ //# sourceMappingURL=index-6d1cf8d0.js.map