@shopify/create-app 3.87.0 → 3.87.2

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.
@@ -14,7 +14,7 @@ import {
14
14
  setCurrentSessionId,
15
15
  setSessions,
16
16
  timeIntervalToMilliseconds
17
- } from "./chunk-HLOOBB4I.js";
17
+ } from "./chunk-YFM6JOY4.js";
18
18
  import {
19
19
  AbortError,
20
20
  BugError,
@@ -80,7 +80,7 @@ import {
80
80
  stringifyMessage,
81
81
  systemEnvironmentVariables,
82
82
  themeToken
83
- } from "./chunk-HBFPX5N4.js";
83
+ } from "./chunk-HFDFZYWH.js";
84
84
  import {
85
85
  cwd,
86
86
  sniffForJson
@@ -30580,7 +30580,7 @@ var require_lib3 = __commonJS({
30580
30580
 
30581
30581
  // ../cli-kit/dist/public/common/version.js
30582
30582
  init_cjs_shims();
30583
- var CLI_KIT_VERSION = "3.87.0";
30583
+ var CLI_KIT_VERSION = "3.87.2";
30584
30584
 
30585
30585
  // ../cli-kit/dist/private/node/context/service.js
30586
30586
  init_cjs_shims();
@@ -36092,7 +36092,7 @@ function unionArrayStrategy(destinationArray, sourceArray) {
36092
36092
  }
36093
36093
 
36094
36094
  // ../cli-kit/dist/public/common/object.js
36095
- var import_deepmerge = __toESM(require_cjs(), 1), import_pickBy = __toESM(require_pickBy(), 1), import_mapValues = __toESM(require_mapValues(), 1), import_isEqual = __toESM(require_isEqual(), 1), import_differenceWith = __toESM(require_differenceWith(), 1), import_fromPairs = __toESM(require_fromPairs(), 1), import_toPairs = __toESM(require_toPairs(), 1), import_get = __toESM(require_get(), 1), import_set = __toESM(require_set(), 1), import_unset = __toESM(require_unset(), 1), import_isEmpty = __toESM(require_isEmpty(), 1);
36095
+ var import_deepmerge = __toESM(require_cjs()), import_pickBy = __toESM(require_pickBy()), import_mapValues = __toESM(require_mapValues()), import_isEqual = __toESM(require_isEqual()), import_differenceWith = __toESM(require_differenceWith()), import_fromPairs = __toESM(require_fromPairs()), import_toPairs = __toESM(require_toPairs()), import_get = __toESM(require_get()), import_set = __toESM(require_set()), import_unset = __toESM(require_unset()), import_isEmpty = __toESM(require_isEmpty());
36096
36096
  function deepMergeObjects(lhs, rhs, arrayMergeStrategy = unionArrayStrategy) {
36097
36097
  return (0, import_deepmerge.default)(lhs, rhs, { arrayMerge: arrayMergeStrategy });
36098
36098
  }
@@ -36749,4 +36749,4 @@ mime-types/index.js:
36749
36749
  * MIT Licensed
36750
36750
  *)
36751
36751
  */
36752
- //# sourceMappingURL=chunk-PDSOKLSC.js.map
36752
+ //# sourceMappingURL=chunk-2TZYQN2V.js.map
@@ -5,10 +5,10 @@ import {
5
5
  getLastSeenUserIdAfterAuth,
6
6
  getSensitiveEnvironmentData,
7
7
  requestIdsCollection
8
- } from "./chunk-PDSOKLSC.js";
8
+ } from "./chunk-2TZYQN2V.js";
9
9
  import {
10
10
  runWithRateLimit
11
- } from "./chunk-HLOOBB4I.js";
11
+ } from "./chunk-YFM6JOY4.js";
12
12
  import {
13
13
  alwaysLogAnalytics,
14
14
  alwaysLogMetrics,
@@ -24,7 +24,7 @@ import {
24
24
  outputDebug,
25
25
  outputToken,
26
26
  reportingRateLimit
27
- } from "./chunk-HBFPX5N4.js";
27
+ } from "./chunk-HFDFZYWH.js";
28
28
  import {
29
29
  __commonJS,
30
30
  __esm,
@@ -16093,4 +16093,4 @@ export {
16093
16093
  recordEvent2 as recordEvent,
16094
16094
  compileData2 as compileData
16095
16095
  };
16096
- //# sourceMappingURL=chunk-UOEBXUPG.js.map
16096
+ //# sourceMappingURL=chunk-447ARDSU.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  reportAnalyticsEvent
3
- } from "./chunk-UOEBXUPG.js";
3
+ } from "./chunk-447ARDSU.js";
4
4
  import {
5
5
  getNextDeprecationDate
6
- } from "./chunk-PDSOKLSC.js";
6
+ } from "./chunk-2TZYQN2V.js";
7
7
  import {
8
8
  addSensitiveMetadata,
9
9
  getAllSensitiveMetadata,
10
10
  outputDebug,
11
11
  renderWarning
12
- } from "./chunk-HBFPX5N4.js";
12
+ } from "./chunk-HFDFZYWH.js";
13
13
  import {
14
14
  init_cjs_shims
15
15
  } from "./chunk-PKR7KJ6P.js";
@@ -77,4 +77,4 @@ export {
77
77
  postRunHookHasCompleted,
78
78
  hook
79
79
  };
80
- //# sourceMappingURL=chunk-MWXQRYBK.js.map
80
+ //# sourceMappingURL=chunk-BPE3Z6SL.js.map
@@ -2,12 +2,12 @@ import {
2
2
  CLI_KIT_VERSION,
3
3
  jsonOutputEnabled,
4
4
  z
5
- } from "./chunk-PDSOKLSC.js";
5
+ } from "./chunk-2TZYQN2V.js";
6
6
  import {
7
7
  cacheRetrieve,
8
8
  cacheStore,
9
9
  versionSatisfies
10
- } from "./chunk-HLOOBB4I.js";
10
+ } from "./chunk-YFM6JOY4.js";
11
11
  import {
12
12
  AbortSilentError,
13
13
  exec,
@@ -16,7 +16,7 @@ import {
16
16
  renderError,
17
17
  renderInfo,
18
18
  renderWarning
19
- } from "./chunk-HBFPX5N4.js";
19
+ } from "./chunk-HFDFZYWH.js";
20
20
  import {
21
21
  init_cjs_shims
22
22
  } from "./chunk-PKR7KJ6P.js";
@@ -84,7 +84,7 @@ async function showNotificationsIfNeeded(currentSurfaces, environment = process.
84
84
  throw new AbortSilentError();
85
85
  let errorMessage = `Error showing notifications: ${error.message}`;
86
86
  outputDebug(errorMessage);
87
- let { sendErrorToBugsnag } = await import("./error-handler-OMN5NZFN.js");
87
+ let { sendErrorToBugsnag } = await import("./error-handler-KEOBZRN6.js");
88
88
  await sendErrorToBugsnag(errorMessage, "unexpected_error");
89
89
  }
90
90
  }
@@ -174,4 +174,4 @@ export {
174
174
  showNotificationsIfNeeded,
175
175
  fetchNotificationsInBackground
176
176
  };
177
- //# sourceMappingURL=chunk-VLJHCQXA.js.map
177
+ //# sourceMappingURL=chunk-E7XE2ARS.js.map
@@ -23388,7 +23388,7 @@ function createRuntimeMetadataContainer(defaultPublicMetadata = {}) {
23388
23388
  try {
23389
23389
  await getAndSet();
23390
23390
  } catch (error) {
23391
- let { sendErrorToBugsnag } = await import("./error-handler-OMN5NZFN.js");
23391
+ let { sendErrorToBugsnag } = await import("./error-handler-KEOBZRN6.js");
23392
23392
  await sendErrorToBugsnag(error, "unexpected_error");
23393
23393
  }
23394
23394
  }, durationStack = [];
@@ -29005,7 +29005,7 @@ init_cjs_shims();
29005
29005
 
29006
29006
  // ../cli-kit/dist/public/common/function.js
29007
29007
  init_cjs_shims();
29008
- var import_memoize = __toESM(require_memoize(), 1), import_debounce = __toESM(require_debounce(), 1), import_throttle2 = __toESM(require_throttle(), 1);
29008
+ var import_memoize = __toESM(require_memoize()), import_debounce = __toESM(require_debounce()), import_throttle2 = __toESM(require_throttle());
29009
29009
  function debounce(func, wait, options) {
29010
29010
  return (0, import_debounce.default)(func, wait, options);
29011
29011
  }
@@ -32433,4 +32433,4 @@ react-reconciler/cjs/react-reconciler-constants.development.js:
32433
32433
  * LICENSE file in the root directory of this source tree.
32434
32434
  *)
32435
32435
  */
32436
- //# sourceMappingURL=chunk-HBFPX5N4.js.map
32436
+ //# sourceMappingURL=chunk-HFDFZYWH.js.map
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  fanoutHooks,
3
3
  reportAnalyticsEvent
4
- } from "./chunk-UOEBXUPG.js";
4
+ } from "./chunk-447ARDSU.js";
5
5
  import {
6
6
  CLI_KIT_VERSION,
7
7
  getEnvironmentData,
8
8
  getLastSeenUserIdAfterAuth,
9
9
  isLocalEnvironment
10
- } from "./chunk-PDSOKLSC.js";
10
+ } from "./chunk-2TZYQN2V.js";
11
11
  import {
12
12
  runWithRateLimit
13
- } from "./chunk-HLOOBB4I.js";
13
+ } from "./chunk-YFM6JOY4.js";
14
14
  import {
15
15
  AbortSilentError,
16
16
  CancelExecution,
@@ -25,7 +25,7 @@ import {
25
25
  reportingRateLimit,
26
26
  require_stacktracey,
27
27
  shouldReportErrorAsUnexpected
28
- } from "./chunk-HBFPX5N4.js";
28
+ } from "./chunk-HFDFZYWH.js";
29
29
  import {
30
30
  require_lib
31
31
  } from "./chunk-V7OWCSFT.js";
@@ -2233,4 +2233,4 @@ export {
2233
2233
  registerCleanBugsnagErrorsFromWithinPlugins,
2234
2234
  addBugsnagMetadata
2235
2235
  };
2236
- //# sourceMappingURL=chunk-VR5VKR2I.js.map
2236
+ //# sourceMappingURL=chunk-LZZX55OB.js.map
@@ -20,7 +20,7 @@ import {
20
20
  runWithTimer,
21
21
  unixFileIsOwnedByCurrentUser,
22
22
  writeFile
23
- } from "./chunk-HBFPX5N4.js";
23
+ } from "./chunk-HFDFZYWH.js";
24
24
  import {
25
25
  require_semver
26
26
  } from "./chunk-V7OWCSFT.js";
@@ -13996,4 +13996,4 @@ deep-extend/lib/deep-extend.js:
13996
13996
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
13997
13997
  *)
13998
13998
  */
13999
- //# sourceMappingURL=chunk-HLOOBB4I.js.map
13999
+ //# sourceMappingURL=chunk-YFM6JOY4.js.map
@@ -2,7 +2,7 @@ import {
2
2
  execaSync,
3
3
  fileExistsSync,
4
4
  isDevelopment
5
- } from "./chunk-HBFPX5N4.js";
5
+ } from "./chunk-HFDFZYWH.js";
6
6
  import {
7
7
  require_lib
8
8
  } from "./chunk-V7OWCSFT.js";
@@ -46,4 +46,4 @@ var import_core = __toESM(require_lib(), 1), ShopifyConfig = class extends impor
46
46
  export {
47
47
  ShopifyConfig
48
48
  };
49
- //# sourceMappingURL=custom-oclif-loader-TBJQ73OQ.js.map
49
+ //# sourceMappingURL=custom-oclif-loader-GKICOYDK.js.map
@@ -4,12 +4,12 @@ import {
4
4
  errorHandler,
5
5
  registerCleanBugsnagErrorsFromWithinPlugins,
6
6
  sendErrorToBugsnag
7
- } from "./chunk-VR5VKR2I.js";
8
- import "./chunk-UOEBXUPG.js";
9
- import "./chunk-PDSOKLSC.js";
7
+ } from "./chunk-LZZX55OB.js";
8
+ import "./chunk-447ARDSU.js";
9
+ import "./chunk-2TZYQN2V.js";
10
10
  import "./chunk-XD3LXUGW.js";
11
- import "./chunk-HLOOBB4I.js";
12
- import "./chunk-HBFPX5N4.js";
11
+ import "./chunk-YFM6JOY4.js";
12
+ import "./chunk-HFDFZYWH.js";
13
13
  import "./chunk-V7OWCSFT.js";
14
14
  import "./chunk-UMUTXITN.js";
15
15
  import "./chunk-Y2JP6WFP.js";
@@ -27,4 +27,4 @@ export {
27
27
  registerCleanBugsnagErrorsFromWithinPlugins,
28
28
  sendErrorToBugsnag
29
29
  };
30
- //# sourceMappingURL=error-handler-OMN5NZFN.js.map
30
+ //# sourceMappingURL=error-handler-KEOBZRN6.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  hook
3
- } from "../chunk-MWXQRYBK.js";
4
- import "../chunk-UOEBXUPG.js";
5
- import "../chunk-PDSOKLSC.js";
3
+ } from "../chunk-BPE3Z6SL.js";
4
+ import "../chunk-447ARDSU.js";
5
+ import "../chunk-2TZYQN2V.js";
6
6
  import "../chunk-XD3LXUGW.js";
7
- import "../chunk-HLOOBB4I.js";
8
- import "../chunk-HBFPX5N4.js";
7
+ import "../chunk-YFM6JOY4.js";
8
+ import "../chunk-HFDFZYWH.js";
9
9
  import "../chunk-V7OWCSFT.js";
10
10
  import "../chunk-UMUTXITN.js";
11
11
  import "../chunk-Y2JP6WFP.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  fetchNotificationsInBackground
3
- } from "../chunk-VLJHCQXA.js";
3
+ } from "../chunk-E7XE2ARS.js";
4
4
  import {
5
5
  CLI_KIT_VERSION,
6
6
  startAnalytics
7
- } from "../chunk-PDSOKLSC.js";
7
+ } from "../chunk-2TZYQN2V.js";
8
8
  import "../chunk-XD3LXUGW.js";
9
9
  import {
10
10
  checkForCachedNewVersion,
11
11
  checkForNewVersion,
12
12
  packageManagerFromUserAgent,
13
13
  runAtMinimumInterval
14
- } from "../chunk-HLOOBB4I.js";
14
+ } from "../chunk-YFM6JOY4.js";
15
15
  import {
16
16
  currentProcessIsGlobal,
17
17
  inferPackageManagerForGlobalCLI,
@@ -20,7 +20,7 @@ import {
20
20
  outputDebug,
21
21
  outputToken,
22
22
  outputWarn
23
- } from "../chunk-HBFPX5N4.js";
23
+ } from "../chunk-HFDFZYWH.js";
24
24
  import "../chunk-V7OWCSFT.js";
25
25
  import "../chunk-UMUTXITN.js";
26
26
  import "../chunk-Y2JP6WFP.js";
package/dist/index.js CHANGED
@@ -8,10 +8,10 @@ import {
8
8
  errorHandler,
9
9
  registerCleanBugsnagErrorsFromWithinPlugins,
10
10
  require_end_of_stream
11
- } from "./chunk-VR5VKR2I.js";
11
+ } from "./chunk-LZZX55OB.js";
12
12
  import {
13
13
  postRunHookHasCompleted
14
- } from "./chunk-MWXQRYBK.js";
14
+ } from "./chunk-BPE3Z6SL.js";
15
15
  import {
16
16
  compileData,
17
17
  fanoutHooks,
@@ -20,11 +20,11 @@ import {
20
20
  recordEvent,
21
21
  recordTiming,
22
22
  reportAnalyticsEvent
23
- } from "./chunk-UOEBXUPG.js";
23
+ } from "./chunk-447ARDSU.js";
24
24
  import {
25
25
  setCurrentCommandId,
26
26
  showNotificationsIfNeeded
27
- } from "./chunk-VLJHCQXA.js";
27
+ } from "./chunk-E7XE2ARS.js";
28
28
  import {
29
29
  CLI_KIT_VERSION,
30
30
  ClientError,
@@ -95,7 +95,7 @@ import {
95
95
  setPathValue,
96
96
  shopifyFetch,
97
97
  z
98
- } from "./chunk-PDSOKLSC.js";
98
+ } from "./chunk-2TZYQN2V.js";
99
99
  import "./chunk-XD3LXUGW.js";
100
100
  import {
101
101
  LocalStorage,
@@ -117,7 +117,7 @@ import {
117
117
  usesWorkspaces,
118
118
  versionSatisfies,
119
119
  writePackageJSON
120
- } from "./chunk-HLOOBB4I.js";
120
+ } from "./chunk-YFM6JOY4.js";
121
121
  import {
122
122
  AbortController as AbortController2,
123
123
  AbortError,
@@ -282,7 +282,7 @@ import {
282
282
  username,
283
283
  writeFile,
284
284
  writeFileSync
285
- } from "./chunk-HBFPX5N4.js";
285
+ } from "./chunk-HFDFZYWH.js";
286
286
  import {
287
287
  require_brace_expansion,
288
288
  require_commonjs,
@@ -195023,7 +195023,7 @@ function loadFwConfigFile(rootPath, fwConfigFileName, fwConfigFiles = {}) {
195023
195023
 
195024
195024
  // ../cli-kit/dist/public/node/toml.js
195025
195025
  init_cjs_shims();
195026
- var toml = __toESM(require_toml(), 1);
195026
+ var toml = __toESM(require_toml());
195027
195027
  function decodeToml(input) {
195028
195028
  let normalizedInput = input.replace(/\r\n$/g, `
195029
195029
  `);
@@ -195258,7 +195258,7 @@ var AppLoader = class {
195258
195258
  let specConfiguration = parseConfigurationObjectAgainstSpecification(specification, appConfiguration.path, appConfiguration, this.abortOrReport.bind(this));
195259
195259
  return Object.keys(specConfiguration).length === 0 ? [null, Object.keys(specConfiguration)] : [await this.createExtensionInstance(specification.identifier, specConfiguration, appConfiguration.path, directory).then((extensionInstance) => this.validateConfigurationExtensionInstance(appConfiguration.client_id, appConfiguration, extensionInstance)), Object.keys(specConfiguration)];
195260
195260
  })), unusedKeys = Object.keys(appConfiguration).filter((key) => !extensionInstancesWithKeys.some(([_2, keys]) => keys.includes(key))).filter((key) => ![...Object.keys(AppSchema.shape), "path", "organization_id"].includes(key));
195261
- return unusedKeys.length > 0 && this.abortOrReport(outputContent`Unsupported section(s) in app configuration: ${unusedKeys.sort().join(", ")}`, void 0, appConfiguration.path), extensionInstancesWithKeys.filter(([instance]) => instance).map(([instance]) => instance);
195261
+ return unusedKeys.length > 0 && this.mode !== "local" && this.abortOrReport(outputContent`Unsupported section(s) in app configuration: ${unusedKeys.sort().join(", ")}`, void 0, appConfiguration.path), extensionInstancesWithKeys.filter(([instance]) => instance).map(([instance]) => instance);
195262
195262
  }
195263
195263
  async validateConfigurationExtensionInstance(apiKey, appConfiguration, extensionInstance) {
195264
195264
  return extensionInstance && await extensionInstance.deployConfig({ apiKey, appConfiguration }) ? extensionInstance : void 0;
@@ -201969,7 +201969,7 @@ init_cjs_shims();
201969
201969
  init_cjs_shims();
201970
201970
  import { fileURLToPath as fileURLToPath2 } from "node:url";
201971
201971
  async function launchCLI(options) {
201972
- let { errorHandler: errorHandler2 } = await import("./error-handler-OMN5NZFN.js"), { isDevelopment: isDevelopment2 } = await import("./local-XH6K2UZK.js"), oclif = await import("./lib-IF6LVQLE.js"), { ShopifyConfig } = await import("./custom-oclif-loader-TBJQ73OQ.js");
201972
+ let { errorHandler: errorHandler2 } = await import("./error-handler-KEOBZRN6.js"), { isDevelopment: isDevelopment2 } = await import("./local-2YM74VBN.js"), oclif = await import("./lib-IF6LVQLE.js"), { ShopifyConfig } = await import("./custom-oclif-loader-GKICOYDK.js");
201973
201973
  isDevelopment2() && (oclif.default.settings.debug = !0);
201974
201974
  try {
201975
201975
  let config2 = new ShopifyConfig({ root: fileURLToPath2(options.moduleURL) });
@@ -201984,7 +201984,7 @@ var import_core3 = __toESM(require_lib2());
201984
201984
  async function exitIfOldNodeVersion(versions2 = process.versions) {
201985
201985
  let nodeVersion = versions2.node, nodeMajorVersion = Number(nodeVersion.split(".")[0]);
201986
201986
  if (nodeMajorVersion < 18) {
201987
- let { renderError: renderError2 } = await import("./ui-ROZ5MAUS.js");
201987
+ let { renderError: renderError2 } = await import("./ui-Z5ALGKAS.js");
201988
201988
  renderError2({
201989
201989
  headline: "Upgrade to a supported Node version now.",
201990
201990
  body: [
@@ -202011,7 +202011,7 @@ async function runCLI(options, launchCLI2 = launchCLI, argv = process.argv, env
202011
202011
  return setupEnvironmentVariables(options, argv, env), options.runInCreateMode && await addInitToArgvWhenRunningCreateCLI(options, argv), forceNoColor(argv, env), await exitIfOldNodeVersion(versions2), launchCLI2({ moduleURL: options.moduleURL });
202012
202012
  }
202013
202013
  async function addInitToArgvWhenRunningCreateCLI(options, argv = process.argv) {
202014
- let { findUpAndReadPackageJson: findUpAndReadPackageJson2 } = await import("./node-package-manager-5EX7KILU.js"), { moduleDirectory: moduleDirectory2 } = await import("./path-COZT77T2.js"), name = (await findUpAndReadPackageJson2(moduleDirectory2(options.moduleURL))).content.name.replace("@shopify/create-", "");
202014
+ let { findUpAndReadPackageJson: findUpAndReadPackageJson2 } = await import("./node-package-manager-XQHPINWH.js"), { moduleDirectory: moduleDirectory2 } = await import("./path-COZT77T2.js"), name = (await findUpAndReadPackageJson2(moduleDirectory2(options.moduleURL))).content.name.replace("@shopify/create-", "");
202015
202015
  if (argv.findIndex((arg) => arg.includes("init")) === -1) {
202016
202016
  let initIndex2 = argv.findIndex((arg) => arg.match(new RegExp(`bin(\\/|\\\\)+(create-${name}|dev|run)`))) + 1;
202017
202017
  argv.splice(initIndex2, 0, "init");
@@ -204405,7 +204405,6 @@ var ThemeFilesUpsert = {
204405
204405
  kind: "SelectionSet",
204406
204406
  selections: [
204407
204407
  { kind: "Field", name: { kind: "Name", value: "filename" } },
204408
- { kind: "Field", name: { kind: "Name", value: "checksumMd5" } },
204409
204408
  { kind: "Field", name: { kind: "Name", value: "__typename" } }
204410
204409
  ]
204411
204410
  }
@@ -204916,11 +204915,7 @@ function processUploadResults(uploadResults) {
204916
204915
  results.push({
204917
204916
  key: file.filename,
204918
204917
  success: !0,
204919
- operation: Operation.Upload,
204920
- asset: {
204921
- key: file.filename,
204922
- checksum: file.checksumMd5 ?? ""
204923
- }
204918
+ operation: Operation.Upload
204924
204919
  });
204925
204920
  }), userErrors.forEach((error) => {
204926
204921
  error.filename || unexpectedGraphQLError(`Error uploading theme files: ${error.message}`), recordError(`Asset upload failed for ${error.filename}: ${error.message}`), results.push({
@@ -209266,14 +209261,7 @@ function mountThemeFileSystem(root, options) {
209266
209261
  function notifyFileChange(fileKey) {
209267
209262
  return notifier?.notify(fileKey) ?? Promise.resolve();
209268
209263
  }
209269
- let write = async (asset) => {
209270
- files.set(asset.key, buildThemeAsset({
209271
- key: asset.key,
209272
- checksum: asset.checksum,
209273
- value: asset.value ?? "",
209274
- attachment: asset.attachment ?? ""
209275
- })), await writeThemeFile(root, asset);
209276
- }, handleFileUpdate = (eventName, themeId, adminSession, fileKey) => {
209264
+ let handleFileUpdate = (eventName, themeId, adminSession, fileKey) => {
209277
209265
  if (isFileIgnored(fileKey))
209278
209266
  return;
209279
209267
  let previousChecksum = files.get(fileKey)?.checksum, contentPromise = read(fileKey).then(async () => {
@@ -209283,12 +209271,11 @@ function mountThemeFileSystem(root, options) {
209283
209271
  // file.value has a fallback value of '', so we want to ignore this eslint rule
209284
209272
  // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
209285
209273
  value: file.value || void 0,
209286
- attachment: file.attachment,
209287
- checksum: file.checksum
209274
+ attachment: file.attachment
209288
209275
  };
209289
209276
  }), syncPromise = contentPromise.then((content) => {
209290
209277
  if (content)
209291
- return handleSyncUpdate(unsyncedFileKeys, uploadErrors, fileKey, themeId, adminSession, write)(content);
209278
+ return handleSyncUpdate(unsyncedFileKeys, uploadErrors, fileKey, themeId, adminSession)(content);
209292
209279
  }).catch(createSyncingCatchError(fileKey, "upload"));
209293
209280
  emitEvent(eventName, {
209294
209281
  fileKey,
@@ -209333,7 +209320,14 @@ function mountThemeFileSystem(root, options) {
209333
209320
  delete: async (fileKey) => {
209334
209321
  files.delete(fileKey), await removeThemeFile(root, fileKey);
209335
209322
  },
209336
- write,
209323
+ write: async (asset) => {
209324
+ files.set(asset.key, buildThemeAsset({
209325
+ key: asset.key,
209326
+ checksum: asset.checksum,
209327
+ value: asset.value ?? "",
209328
+ attachment: asset.attachment ?? ""
209329
+ })), await writeThemeFile(root, asset);
209330
+ },
209337
209331
  read,
209338
209332
  applyIgnoreFilters: (files2) => applyIgnoreFilters(files2, filterPatterns),
209339
209333
  addEventListener: (eventName, cb) => {
@@ -209349,7 +209343,7 @@ function mountThemeFileSystem(root, options) {
209349
209343
  }
209350
209344
  };
209351
209345
  }
209352
- function handleSyncUpdate(unsyncedFileKeys, uploadErrors, fileKey, themeId, adminSession, write) {
209346
+ function handleSyncUpdate(unsyncedFileKeys, uploadErrors, fileKey, themeId, adminSession) {
209353
209347
  return async (content) => {
209354
209348
  if (!unsyncedFileKeys.has(fileKey))
209355
209349
  return !1;
@@ -209359,11 +209353,7 @@ function handleSyncUpdate(unsyncedFileKeys, uploadErrors, fileKey, themeId, admi
209359
209353
  throw uploadErrors.set(fileKey, errors), triggerBrowserFullReload(themeId, fileKey), new Error(errors.join(`
209360
209354
  `));
209361
209355
  }
209362
- if (uploadErrors.delete(fileKey) && triggerBrowserFullReload(themeId, fileKey), unsyncedFileKeys.delete(fileKey), outputSyncResult("update", fileKey), content.value && content.checksum !== result?.asset?.checksum) {
209363
- let [remoteAsset] = await fetchThemeAssets(Number(themeId), [fileKey], adminSession);
209364
- remoteAsset && (await write(remoteAsset), outputSyncResult("rewrite", fileKey));
209365
- }
209366
- return !0;
209356
+ return uploadErrors.delete(fileKey) && triggerBrowserFullReload(themeId, fileKey), unsyncedFileKeys.delete(fileKey), outputSyncResult("update", fileKey), !0;
209367
209357
  };
209368
209358
  }
209369
209359
  async function writeThemeFile(root, { key, attachment, value }) {
@@ -209440,8 +209430,7 @@ function dirPath(filePath) {
209440
209430
  return filePath.substring(0, fileNameIndex);
209441
209431
  }
209442
209432
  function outputSyncResult(action, fileKey) {
209443
- let content;
209444
- action === "rewrite" ? content = outputContent`• ${timestampDateFormat.format(/* @__PURE__ */ new Date())} Overwritten ${fileKey}` : content = outputContent`• ${timestampDateFormat.format(/* @__PURE__ */ new Date())} Synced ${outputToken.raw("\xBB")} ${action} ${fileKey}`, outputInfo(content);
209433
+ outputInfo(outputContent`• ${timestampDateFormat.format(/* @__PURE__ */ new Date())} Synced ${outputToken.raw("\xBB")} ${action} ${fileKey}`);
209445
209434
  }
209446
209435
  function inferLocalHotReloadScriptPath() {
209447
209436
  let envVar = process.env.SHOPIFY_CLI_LOCAL_HOT_RELOAD;
@@ -209652,101 +209641,16 @@ async function reconcileAndPollThemeEditorChanges(targetTheme, session, remoteCh
209652
209641
 
209653
209642
  // ../theme/dist/cli/utilities/theme-uploader.js
209654
209643
  init_cjs_shims();
209655
-
209656
- // ../theme/dist/cli/utilities/theme-downloader.js
209657
- init_cjs_shims();
209658
- async function downloadTheme(theme, session, remoteChecksums, themeFileSystem, options, context) {
209659
- let deleteTasks = buildDeleteTasks(remoteChecksums, themeFileSystem, options), downloadTasks = buildDownloadTasks(remoteChecksums, theme, themeFileSystem, session), tasks = [...deleteTasks, ...downloadTasks, { title: "Theme download complete", task: async () => {
209660
- } }];
209661
- tasks.length > 0 && await renderTasks(tasks, {
209662
- renderOptions: { stdout: context?.stdout ?? process.stdout },
209663
- noProgressBar: options.multiEnvironment
209664
- });
209665
- }
209666
- function buildDeleteTasks(remoteChecksums, themeFileSystem, options) {
209667
- if (options.nodelete)
209668
- return [];
209669
- let remoteKeys = new Set(remoteChecksums.map((checksum) => checksum.key));
209670
- return themeFileSystem.applyIgnoreFilters([...themeFileSystem.files.values()]).map(({ key }) => key).filter((key) => !remoteKeys.has(key)).map((key) => ({
209671
- title: `Cleaning your local directory (removing ${key})`,
209672
- task: async () => themeFileSystem.delete(key)
209673
- }));
209674
- }
209675
- function buildDownloadTasks(remoteChecksums, theme, themeFileSystem, session) {
209676
- let checksums = themeFileSystem.applyIgnoreFilters(remoteChecksums);
209677
- checksums = checksums.filter((checksum) => {
209678
- let remoteChecksumValue = checksum.checksum;
209679
- return themeFileSystem.files.get(checksum.key)?.checksum !== remoteChecksumValue;
209680
- });
209681
- let filenames = checksums.map((checksum) => checksum.key), getProgress = (params) => params.total === 0 ? "[100%]" : `[${Math.round(params.current / params.total * 100)}%]`;
209682
- return batchedTasks(filenames, MAX_GRAPHQL_THEME_FILES, (batchedFilenames, i) => ({
209683
- title: `Downloading files from remote theme ${getProgress({
209684
- current: i,
209685
- total: filenames.length
209686
- })}`,
209687
- task: async () => downloadFiles(theme, themeFileSystem, batchedFilenames, session)
209688
- }));
209689
- }
209690
- async function downloadFiles(theme, fileSystem, filenames, session) {
209691
- let assets = await fetchThemeAssets(theme.id, filenames, session);
209692
- assets && assets.forEach(async (asset) => {
209693
- await fileSystem.write(asset);
209694
- });
209695
- }
209696
-
209697
- // ../theme/dist/cli/utilities/theme-uploader.js
209698
209644
  var MAX_BATCH_FILE_COUNT = 20, MAX_BATCH_BYTESIZE = 1024 * 1024, MAX_UPLOAD_RETRY_COUNT = 2;
209699
209645
  function uploadTheme(theme, session, checksums, themeFileSystem, options = {}, context) {
209700
- let remoteChecksums = rejectGeneratedStaticAssets(checksums), uploadResults = /* @__PURE__ */ new Map(), getProgress = (params) => params.total === 0 ? "[100%]" : `[${Math.round(params.current / params.total * 100)}%]`, themeCreationPromise = ensureThemeCreation(theme, session, remoteChecksums), uploadJobPromise = Promise.all([themeFileSystem.ready(), themeCreationPromise]).then(() => buildUploadJob(remoteChecksums, themeFileSystem, theme, session, uploadResults)), deleteJobPromise = uploadJobPromise.then((result) => result.promise).then(() => buildDeleteJob(remoteChecksums, themeFileSystem, theme, session, options, uploadResults)), workPromise = options?.deferPartialWork ? themeCreationPromise.then(() => {
209701
- }) : deleteJobPromise.then((result) => result.promise);
209702
- options?.backgroundWorkCatch && Promise.all([
209646
+ let remoteChecksums = rejectGeneratedStaticAssets(checksums), uploadResults = /* @__PURE__ */ new Map(), getProgress = (params) => params.total === 0 ? "[100%]" : `[${Math.round(params.current / params.total * 100)}%]`, themeCreationPromise = ensureThemeCreation(theme, session, remoteChecksums), uploadJobPromise = Promise.all([themeFileSystem.ready(), themeCreationPromise]).then(() => buildUploadJob(remoteChecksums, themeFileSystem, theme, session, uploadResults)), deleteJobPromise = uploadJobPromise.then((result) => result.promise).then(() => buildDeleteJob(remoteChecksums, themeFileSystem, theme, session, options, uploadResults)), workPromise = options?.deferPartialWork ? themeCreationPromise : deleteJobPromise.then((result) => result.promise);
209647
+ return options?.backgroundWorkCatch && Promise.all([
209703
209648
  themeCreationPromise,
209704
209649
  uploadJobPromise.then((result) => result.promise),
209705
209650
  deleteJobPromise.then((result) => result.promise)
209706
- ]).catch(options.backgroundWorkCatch);
209707
- let syncRewrittenFilesPromise = options?.handleRewrittenFiles ? Promise.all([themeFileSystem.ready(), themeCreationPromise, uploadJobPromise, deleteJobPromise]).then(async () => {
209708
- let filesDifferentFromRemote = [];
209709
- for (let uploadResult of uploadResults.values()) {
209710
- if (!uploadResult.key.endsWith(".liquid"))
209711
- continue;
209712
- let localFile = themeFileSystem.files.get(uploadResult.key);
209713
- localFile?.value && uploadResult.success && uploadResult.asset?.checksum && uploadResult.asset.checksum !== localFile.checksum && filesDifferentFromRemote.push(uploadResult.key);
209714
- }
209715
- filesDifferentFromRemote.length > 0 && (options.handleRewrittenFiles === "fix" ? (renderInfo({
209716
- headline: "Updated Liquid files to conform to latest Liquid standards.",
209717
- body: [
209718
- "The following Liquid files were updated locally and remotely:",
209719
- {
209720
- list: {
209721
- items: filesDifferentFromRemote
209722
- }
209723
- }
209724
- ]
209725
- }), await downloadFiles(theme, themeFileSystem, filesDifferentFromRemote, session)) : options.handleRewrittenFiles === "warn" && renderInfo({
209726
- headline: "Liquid files were updated remotely to conform to latest Liquid standards.",
209727
- body: [
209728
- "The following Liquid files were updated remotely:",
209729
- {
209730
- list: {
209731
- items: filesDifferentFromRemote
209732
- }
209733
- }
209734
- ],
209735
- nextSteps: [
209736
- [
209737
- "Fetch the latest files using",
209738
- {
209739
- command: "shopify theme pull"
209740
- },
209741
- "to sync them locally."
209742
- ]
209743
- ]
209744
- }));
209745
- }) : Promise.resolve();
209746
- return {
209651
+ ]).catch(options.backgroundWorkCatch), {
209747
209652
  uploadResults,
209748
209653
  workPromise,
209749
- syncRewrittenFilesPromise,
209750
209654
  renderThemeSyncProgress: async () => {
209751
209655
  if (options?.deferPartialWork)
209752
209656
  return;
@@ -209838,7 +209742,7 @@ var MINIMUM_THEME_ASSETS = [
209838
209742
  ];
209839
209743
  async function ensureThemeCreation(theme, session, remoteChecksums) {
209840
209744
  let remoteAssetKeys = new Set(remoteChecksums.map((checksum) => checksum.key)), missingAssets = MINIMUM_THEME_ASSETS.filter(({ key }) => !remoteAssetKeys.has(key));
209841
- return missingAssets.length === 0 ? Promise.resolve([]) : bulkUploadThemeAssets(theme.id, missingAssets, session);
209745
+ missingAssets.length > 0 && await bulkUploadThemeAssets(theme.id, missingAssets, session);
209842
209746
  }
209843
209747
  function buildUploadJob(remoteChecksums, themeFileSystem, theme, session, uploadResults) {
209844
209748
  let filesToUpload = selectUploadableFiles(themeFileSystem, remoteChecksums);
@@ -209963,8 +209867,7 @@ function setupDevServer(theme, ctx) {
209963
209867
  workPromise,
209964
209868
  serverStart: server.start,
209965
209869
  dispatchEvent: server.dispatch,
209966
- renderDevSetupProgress: envSetup.renderProgress,
209967
- syncRewrittenFilesPromise: () => envSetup.syncRewrittenFilesPromise
209870
+ renderDevSetupProgress: envSetup.renderProgress
209968
209871
  };
209969
209872
  }
209970
209873
  function ensureThemeEnvironmentSetup(theme, ctx) {
@@ -209973,8 +209876,7 @@ function ensureThemeEnvironmentSetup(theme, ctx) {
209973
209876
  return uploadTheme(theme, ctx.session, updatedRemoteChecksums, ctx.localThemeFileSystem, {
209974
209877
  nodelete: ctx.options.noDelete,
209975
209878
  deferPartialWork: !0,
209976
- backgroundWorkCatch: abort2,
209977
- handleRewrittenFiles: "fix"
209879
+ backgroundWorkCatch: abort2
209978
209880
  });
209979
209881
  }).catch(abort2);
209980
209882
  return {
@@ -209993,8 +209895,7 @@ function ensureThemeEnvironmentSetup(theme, ctx) {
209993
209895
  }
209994
209896
  let { renderThemeSyncProgress } = await uploadPromise;
209995
209897
  await renderThemeSyncProgress();
209996
- },
209997
- syncRewrittenFilesPromise: uploadPromise.then((result) => result.syncRewrittenFilesPromise).catch(abort2)
209898
+ }
209998
209899
  };
209999
209900
  }
210000
209901
  function handleThemeEditorSync(theme, ctx, remoteChecksums) {
@@ -210328,8 +210229,8 @@ async function dev(options) {
210328
210229
  }
210329
210230
  };
210330
210231
  options["theme-editor-sync"] && (session.storefrontPassword = await storefrontPasswordPromise);
210331
- let { serverStart, renderDevSetupProgress, syncRewrittenFilesPromise } = setupDevServer(options.theme, ctx);
210332
- options["theme-editor-sync"] || (session.storefrontPassword = await storefrontPasswordPromise), await renderDevSetupProgress(), await serverStart(), await syncRewrittenFilesPromise(), renderLinks(urls), options.open && openURLSafely(urls.local, "development server"), readline.emitKeypressEvents(process.stdin), process.stdin.isTTY && process.stdin.setRawMode(!0), process.stdin.on("keypress", (_str, key) => {
210232
+ let { serverStart, renderDevSetupProgress } = setupDevServer(options.theme, ctx);
210233
+ options["theme-editor-sync"] || (session.storefrontPassword = await storefrontPasswordPromise), await renderDevSetupProgress(), await serverStart(), renderLinks(urls), options.open && openURLSafely(urls.local, "development server"), readline.emitKeypressEvents(process.stdin), process.stdin.isTTY && process.stdin.setRawMode(!0), process.stdin.on("keypress", (_str, key) => {
210333
210234
  switch (key.ctrl && key.name === "c" && process.exit(), key.name) {
210334
210235
  case "t":
210335
210236
  openURLSafely(urls.local, "localhost");
@@ -214894,6 +214795,49 @@ init_cjs_shims();
214894
214795
 
214895
214796
  // ../theme/dist/cli/services/pull.js
214896
214797
  init_cjs_shims();
214798
+
214799
+ // ../theme/dist/cli/utilities/theme-downloader.js
214800
+ init_cjs_shims();
214801
+ async function downloadTheme(theme, session, remoteChecksums, themeFileSystem, options, context) {
214802
+ let deleteTasks = buildDeleteTasks(remoteChecksums, themeFileSystem, options), downloadTasks = buildDownloadTasks(remoteChecksums, theme, themeFileSystem, session), tasks = [...deleteTasks, ...downloadTasks, { title: "Theme download complete", task: async () => {
214803
+ } }];
214804
+ tasks.length > 0 && await renderTasks(tasks, {
214805
+ renderOptions: { stdout: context?.stdout ?? process.stdout },
214806
+ noProgressBar: options.multiEnvironment
214807
+ });
214808
+ }
214809
+ function buildDeleteTasks(remoteChecksums, themeFileSystem, options) {
214810
+ if (options.nodelete)
214811
+ return [];
214812
+ let remoteKeys = new Set(remoteChecksums.map((checksum) => checksum.key));
214813
+ return themeFileSystem.applyIgnoreFilters([...themeFileSystem.files.values()]).map(({ key }) => key).filter((key) => !remoteKeys.has(key)).map((key) => ({
214814
+ title: `Cleaning your local directory (removing ${key})`,
214815
+ task: async () => themeFileSystem.delete(key)
214816
+ }));
214817
+ }
214818
+ function buildDownloadTasks(remoteChecksums, theme, themeFileSystem, session) {
214819
+ let checksums = themeFileSystem.applyIgnoreFilters(remoteChecksums);
214820
+ checksums = checksums.filter((checksum) => {
214821
+ let remoteChecksumValue = checksum.checksum;
214822
+ return themeFileSystem.files.get(checksum.key)?.checksum !== remoteChecksumValue;
214823
+ });
214824
+ let filenames = checksums.map((checksum) => checksum.key), getProgress = (params) => params.total === 0 ? "[100%]" : `[${Math.round(params.current / params.total * 100)}%]`;
214825
+ return batchedTasks(filenames, MAX_GRAPHQL_THEME_FILES, (batchedFilenames, i) => ({
214826
+ title: `Downloading files from remote theme ${getProgress({
214827
+ current: i,
214828
+ total: filenames.length
214829
+ })}`,
214830
+ task: async () => downloadFiles(theme, themeFileSystem, batchedFilenames, session)
214831
+ }));
214832
+ }
214833
+ async function downloadFiles(theme, fileSystem, filenames, session) {
214834
+ let assets = await fetchThemeAssets(theme.id, filenames, session);
214835
+ assets && assets.forEach(async (asset) => {
214836
+ await fileSystem.write(asset);
214837
+ });
214838
+ }
214839
+
214840
+ // ../theme/dist/cli/services/pull.js
214897
214841
  async function pull(flags, session, multiEnvironment, context) {
214898
214842
  recordTiming("theme-service:pull:setup"), configureCLIEnvironment({ verbose: flags.verbose, noColor: flags.noColor });
214899
214843
  let adminSession = session ?? await ensureAuthenticatedThemes(ensureThemeStore({ store: flags.store }), flags.password), developmentThemeManager = new DevelopmentThemeManager(adminSession), developmentTheme = await (flags.development ? developmentThemeManager.find() : developmentThemeManager.fetch()), { path, nodelete, live, development, only, ignore: ignore4, force, environment } = flags;
@@ -215041,11 +214985,8 @@ async function executePush(theme, session, options, context) {
215041
214985
  recordTiming("theme-service:push:file-system");
215042
214986
  let themeChecksums = await fetchChecksums(theme.id, session), themeFileSystem = mountThemeFileSystem(options.path, { filters: options });
215043
214987
  recordTiming("theme-service:push:file-system");
215044
- let { uploadResults, renderThemeSyncProgress, syncRewrittenFilesPromise } = uploadTheme(theme, session, themeChecksums, themeFileSystem, {
215045
- ...options,
215046
- handleRewrittenFiles: "warn"
215047
- }, context);
215048
- await renderThemeSyncProgress(), await syncRewrittenFilesPromise, options.publish && await themePublish(theme.id, session), await handlePushOutput(uploadResults, theme, session, options);
214988
+ let { uploadResults, renderThemeSyncProgress } = uploadTheme(theme, session, themeChecksums, themeFileSystem, options, context);
214989
+ await renderThemeSyncProgress(), options.publish && await themePublish(theme.id, session), await handlePushOutput(uploadResults, theme, session, options);
215049
214990
  }
215050
214991
  function hasUploadErrors(results) {
215051
214992
  for (let [_key, result] of results.entries())
@@ -20,7 +20,7 @@ import {
20
20
  macAddress,
21
21
  opentelemetryDomain,
22
22
  themeToken
23
- } from "./chunk-HBFPX5N4.js";
23
+ } from "./chunk-HFDFZYWH.js";
24
24
  import "./chunk-V7OWCSFT.js";
25
25
  import "./chunk-UMUTXITN.js";
26
26
  import "./chunk-Y2JP6WFP.js";
@@ -53,4 +53,4 @@ export {
53
53
  opentelemetryDomain,
54
54
  themeToken
55
55
  };
56
- //# sourceMappingURL=local-XH6K2UZK.js.map
56
+ //# sourceMappingURL=local-2YM74VBN.js.map
@@ -29,8 +29,8 @@ import {
29
29
  versionSatisfies,
30
30
  writePackageJSON,
31
31
  yarnLockfile
32
- } from "./chunk-HLOOBB4I.js";
33
- import "./chunk-HBFPX5N4.js";
32
+ } from "./chunk-YFM6JOY4.js";
33
+ import "./chunk-HFDFZYWH.js";
34
34
  import "./chunk-V7OWCSFT.js";
35
35
  import "./chunk-UMUTXITN.js";
36
36
  import "./chunk-Y2JP6WFP.js";
@@ -72,4 +72,4 @@ export {
72
72
  writePackageJSON,
73
73
  yarnLockfile
74
74
  };
75
- //# sourceMappingURL=node-package-manager-5EX7KILU.js.map
75
+ //# sourceMappingURL=node-package-manager-XQHPINWH.js.map
@@ -17,7 +17,7 @@ import {
17
17
  renderTasks,
18
18
  renderTextPrompt,
19
19
  renderWarning
20
- } from "./chunk-HBFPX5N4.js";
20
+ } from "./chunk-HFDFZYWH.js";
21
21
  import "./chunk-V7OWCSFT.js";
22
22
  import "./chunk-UMUTXITN.js";
23
23
  import "./chunk-Y2JP6WFP.js";
@@ -47,4 +47,4 @@ export {
47
47
  renderTextPrompt,
48
48
  renderWarning
49
49
  };
50
- //# sourceMappingURL=ui-ROZ5MAUS.js.map
50
+ //# sourceMappingURL=ui-Z5ALGKAS.js.map
@@ -104,5 +104,5 @@
104
104
  "summary": "Create a new app project"
105
105
  }
106
106
  },
107
- "version": "3.87.0"
107
+ "version": "3.87.2"
108
108
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopify/create-app",
3
- "version": "3.87.0",
3
+ "version": "3.87.2",
4
4
  "private": false,
5
5
  "description": "A CLI tool to create a new Shopify app.",
6
6
  "keywords": [
@@ -47,8 +47,8 @@
47
47
  "esbuild": "0.25.12"
48
48
  },
49
49
  "devDependencies": {
50
- "@shopify/cli-kit": "3.87.0",
51
- "@shopify/app": "3.87.0",
50
+ "@shopify/cli-kit": "3.87.2",
51
+ "@shopify/app": "3.87.2",
52
52
  "esbuild-plugin-copy": "^2.1.1",
53
53
  "@vitest/coverage-istanbul": "^3.1.4"
54
54
  },