@shopify/cli-kit 3.73.2 → 3.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/cli/api/graphql/admin/generated/get_theme.d.ts +1 -3
  2. package/dist/cli/api/graphql/admin/generated/get_theme_file_bodies.d.ts +1 -5
  3. package/dist/cli/api/graphql/admin/generated/get_theme_file_checksums.d.ts +1 -4
  4. package/dist/cli/api/graphql/admin/generated/get_themes.d.ts +1 -3
  5. package/dist/cli/api/graphql/admin/generated/metafield_definitions_by_owner_type.d.ts +1 -3
  6. package/dist/cli/api/graphql/admin/generated/online_store_password_protection.d.ts +13 -0
  7. package/dist/cli/api/graphql/admin/generated/online_store_password_protection.js +37 -0
  8. package/dist/cli/api/graphql/admin/generated/online_store_password_protection.js.map +1 -0
  9. package/dist/cli/api/graphql/admin/generated/public_api_versions.d.ts +1 -3
  10. package/dist/cli/api/graphql/admin/generated/theme_delete.d.ts +1 -3
  11. package/dist/cli/api/graphql/admin/generated/theme_files_upsert.d.ts +1 -4
  12. package/dist/cli/api/graphql/admin/generated/theme_publish.d.ts +1 -3
  13. package/dist/cli/api/graphql/admin/generated/theme_update.d.ts +1 -4
  14. package/dist/private/node/analytics.js.map +1 -1
  15. package/dist/private/node/api/graphql.js.map +1 -1
  16. package/dist/private/node/api/headers.d.ts +2 -2
  17. package/dist/private/node/api/headers.js +1 -1
  18. package/dist/private/node/api/headers.js.map +1 -1
  19. package/dist/private/node/api/rest.js.map +1 -1
  20. package/dist/private/node/api/urls.js.map +1 -1
  21. package/dist/private/node/api.js.map +1 -1
  22. package/dist/private/node/conf-store.js.map +1 -1
  23. package/dist/private/node/constants.d.ts +0 -1
  24. package/dist/private/node/constants.js +0 -1
  25. package/dist/private/node/constants.js.map +1 -1
  26. package/dist/private/node/content-tokens.js.map +1 -1
  27. package/dist/private/node/context/deprecations-store.js.map +1 -1
  28. package/dist/private/node/context/service.d.ts +0 -1
  29. package/dist/private/node/context/service.js.map +1 -1
  30. package/dist/private/node/context/utilities.d.ts +0 -1
  31. package/dist/private/node/context/utilities.js.map +1 -1
  32. package/dist/private/node/otel-metrics.js.map +1 -1
  33. package/dist/private/node/request-ids.js.map +1 -1
  34. package/dist/private/node/session/device-authorization.js.map +1 -1
  35. package/dist/private/node/session/exchange.js +2 -3
  36. package/dist/private/node/session/exchange.js.map +1 -1
  37. package/dist/private/node/session/identity-token-validation.js.map +1 -1
  38. package/dist/private/node/session/identity.js.map +1 -1
  39. package/dist/private/node/session/scopes.d.ts +2 -3
  40. package/dist/private/node/session/scopes.js +7 -8
  41. package/dist/private/node/session/scopes.js.map +1 -1
  42. package/dist/private/node/session/store.js.map +1 -1
  43. package/dist/private/node/session/validate.js.map +1 -1
  44. package/dist/private/node/session.d.ts +0 -1
  45. package/dist/private/node/session.js +3 -74
  46. package/dist/private/node/session.js.map +1 -1
  47. package/dist/private/node/testing/ui.d.ts +0 -1
  48. package/dist/private/node/testing/ui.js.map +1 -1
  49. package/dist/private/node/themes/replace-invalid-characters.js +3 -3
  50. package/dist/private/node/themes/replace-invalid-characters.js.map +1 -1
  51. package/dist/private/node/ui/components/Alert.d.ts +2 -1
  52. package/dist/private/node/ui/components/Alert.js +2 -1
  53. package/dist/private/node/ui/components/Alert.js.map +1 -1
  54. package/dist/private/node/ui/components/AutocompletePrompt.js.map +1 -1
  55. package/dist/private/node/ui/components/Banner.js.map +1 -1
  56. package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
  57. package/dist/private/node/ui/components/DangerousConfirmationPrompt.js.map +1 -1
  58. package/dist/private/node/ui/components/FatalError.js +2 -1
  59. package/dist/private/node/ui/components/FatalError.js.map +1 -1
  60. package/dist/private/node/ui/components/Link.js.map +1 -1
  61. package/dist/private/node/ui/components/Prompts/PromptLayout.js.map +1 -1
  62. package/dist/private/node/ui/components/Scrollbar.js.map +1 -1
  63. package/dist/private/node/ui/components/SelectInput.js.map +1 -1
  64. package/dist/private/node/ui/components/SelectPrompt.js.map +1 -1
  65. package/dist/private/node/ui/components/Table/Row.d.ts +0 -1
  66. package/dist/private/node/ui/components/Table/Row.js.map +1 -1
  67. package/dist/private/node/ui/components/Table/Table.d.ts +0 -1
  68. package/dist/private/node/ui/components/Table/Table.js.map +1 -1
  69. package/dist/private/node/ui/components/TabularData.d.ts +8 -0
  70. package/dist/private/node/ui/components/TabularData.js +16 -0
  71. package/dist/private/node/ui/components/TabularData.js.map +1 -0
  72. package/dist/private/node/ui/components/Tasks.d.ts +1 -1
  73. package/dist/private/node/ui/components/Tasks.js.map +1 -1
  74. package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
  75. package/dist/private/node/ui/components/TextInput.js.map +1 -1
  76. package/dist/private/node/ui/components/TextPrompt.js.map +1 -1
  77. package/dist/private/node/ui/components/TokenizedText.d.ts +12 -19
  78. package/dist/private/node/ui/components/TokenizedText.js.map +1 -1
  79. package/dist/private/node/ui/hooks/use-layout.d.ts +0 -1
  80. package/dist/private/node/ui/hooks/use-layout.js.map +1 -1
  81. package/dist/private/node/ui/hooks/use-prompt.d.ts +0 -1
  82. package/dist/private/node/ui/hooks/use-select-state.js.map +1 -1
  83. package/dist/private/node/ui/utilities.d.ts +15 -1
  84. package/dist/private/node/ui.d.ts +0 -2
  85. package/dist/private/node/ui.js.map +1 -1
  86. package/dist/public/common/retry.js.map +1 -1
  87. package/dist/public/common/string.js.map +1 -1
  88. package/dist/public/common/ts/json-narrowing.js.map +1 -1
  89. package/dist/public/common/url.js.map +1 -1
  90. package/dist/public/common/version.d.ts +1 -1
  91. package/dist/public/common/version.js +1 -1
  92. package/dist/public/common/version.js.map +1 -1
  93. package/dist/public/node/analytics.js.map +1 -1
  94. package/dist/public/node/api/admin.js.map +1 -1
  95. package/dist/public/node/api/app-management.js.map +1 -1
  96. package/dist/public/node/api/graphql.js.map +1 -1
  97. package/dist/public/node/api/partners.js.map +1 -1
  98. package/dist/public/node/api/rest-api-throttler.js.map +1 -1
  99. package/dist/public/node/archiver.js.map +1 -1
  100. package/dist/public/node/base-command.js.map +1 -1
  101. package/dist/public/node/cli-launcher.js.map +1 -1
  102. package/dist/public/node/cli.d.ts +0 -1
  103. package/dist/public/node/cli.js.map +1 -1
  104. package/dist/public/node/context/fqdn.js.map +1 -1
  105. package/dist/public/node/context/local.d.ts +4 -5
  106. package/dist/public/node/context/local.js +6 -5
  107. package/dist/public/node/context/local.js.map +1 -1
  108. package/dist/public/node/context/spin.d.ts +0 -1
  109. package/dist/public/node/context/spin.js.map +1 -1
  110. package/dist/public/node/context/utilities.js.map +1 -1
  111. package/dist/public/node/crypto.d.ts +0 -1
  112. package/dist/public/node/custom-oclif-loader.js.map +1 -1
  113. package/dist/public/node/dot-env.js.map +1 -1
  114. package/dist/public/node/environment.d.ts +0 -1
  115. package/dist/public/node/environment.js.map +1 -1
  116. package/dist/public/node/environments.js.map +1 -1
  117. package/dist/public/node/error-handler.js +1 -1
  118. package/dist/public/node/error-handler.js.map +1 -1
  119. package/dist/public/node/error.js.map +1 -1
  120. package/dist/public/node/framework.js.map +1 -1
  121. package/dist/public/node/fs.d.ts +20 -2
  122. package/dist/public/node/fs.js +24 -0
  123. package/dist/public/node/fs.js.map +1 -1
  124. package/dist/public/node/git.js.map +1 -1
  125. package/dist/public/node/github.js.map +1 -1
  126. package/dist/public/node/global-context.js.map +1 -1
  127. package/dist/public/node/hooks/deprecations.js.map +1 -1
  128. package/dist/public/node/hooks/postrun.js.map +1 -1
  129. package/dist/public/node/hooks/prerun.js.map +1 -1
  130. package/dist/public/node/http.js.map +1 -1
  131. package/dist/public/node/is-global.js.map +1 -1
  132. package/dist/public/node/json-schema.js.map +1 -1
  133. package/dist/public/node/liquid.js.map +1 -1
  134. package/dist/public/node/metadata.js +1 -1
  135. package/dist/public/node/metadata.js.map +1 -1
  136. package/dist/public/node/monorail.d.ts +1 -0
  137. package/dist/public/node/monorail.js.map +1 -1
  138. package/dist/public/node/node-package-manager.d.ts +0 -2
  139. package/dist/public/node/node-package-manager.js.map +1 -1
  140. package/dist/public/node/notifications-system.d.ts +6 -7
  141. package/dist/public/node/notifications-system.js.map +1 -1
  142. package/dist/public/node/os.js.map +1 -1
  143. package/dist/public/node/output.d.ts +0 -2
  144. package/dist/public/node/output.js +3 -3
  145. package/dist/public/node/output.js.map +1 -1
  146. package/dist/public/node/path.d.ts +0 -1
  147. package/dist/public/node/path.js.map +1 -1
  148. package/dist/public/node/plugins.d.ts +1 -1
  149. package/dist/public/node/plugins.js.map +1 -1
  150. package/dist/public/node/result.js.map +1 -1
  151. package/dist/public/node/schema.js.map +1 -1
  152. package/dist/public/node/session.d.ts +0 -1
  153. package/dist/public/node/session.js.map +1 -1
  154. package/dist/public/node/system.d.ts +0 -1
  155. package/dist/public/node/system.js.map +1 -1
  156. package/dist/public/node/tcp.js.map +1 -1
  157. package/dist/public/node/themes/api.d.ts +1 -0
  158. package/dist/public/node/themes/api.js +10 -0
  159. package/dist/public/node/themes/api.js.map +1 -1
  160. package/dist/public/node/themes/conf.js.map +1 -1
  161. package/dist/public/node/themes/theme-manager.js.map +1 -1
  162. package/dist/public/node/themes/types.d.ts +4 -1
  163. package/dist/public/node/themes/types.js.map +1 -1
  164. package/dist/public/node/themes/urls.js.map +1 -1
  165. package/dist/public/node/themes/utils.js.map +1 -1
  166. package/dist/public/node/tree-kill.js.map +1 -1
  167. package/dist/public/node/ui.d.ts +0 -1
  168. package/dist/public/node/ui.js.map +1 -1
  169. package/dist/public/node/upgrade.js.map +1 -1
  170. package/dist/public/node/vendor/dev_server/DevServer.js.map +1 -1
  171. package/dist/public/node/vendor/otel-js/export/InstantaneousMetricReader.js.map +1 -1
  172. package/dist/public/node/vendor/otel-js/service/BaseOtelService/BaseOtelService.js.map +1 -1
  173. package/dist/public/node/vendor/otel-js/service/DefaultOtelService/DefaultMeterProvider.js.map +1 -1
  174. package/dist/public/node/vendor/otel-js/utils/throttle.js.map +1 -1
  175. package/dist/public/node/vendor/otel-js/utils/validators.js.map +1 -1
  176. package/dist/public/node/version.js.map +1 -1
  177. package/dist/public/node/vscode.js.map +1 -1
  178. package/dist/tsconfig.tsbuildinfo +1 -1
  179. package/package.json +27 -29
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/public/node/ui.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable tsdoc/syntax */\nimport {AbortError, AbortSilentError, FatalError as Fatal} from './error.js'\nimport {\n collectLog,\n consoleError,\n consoleLog,\n Logger,\n LogLevel,\n outputContent,\n outputDebug,\n outputToken,\n outputWhereAppropriate,\n} from './output.js'\nimport {isUnitTest} from './context/local.js'\nimport {terminalSupportsPrompting} from './system.js'\nimport {AbortController} from './abort.js'\nimport {runWithTimer} from './metadata.js'\nimport {ConcurrentOutput, ConcurrentOutputProps} from '../../private/node/ui/components/ConcurrentOutput.js'\nimport {handleCtrlC, render, renderOnce} from '../../private/node/ui.js'\nimport {alert, AlertOptions} from '../../private/node/ui/alert.js'\nimport {CustomSection} from '../../private/node/ui/components/Alert.js'\nimport {FatalError} from '../../private/node/ui/components/FatalError.js'\nimport ScalarDict from '../../private/node/ui/components/Table/ScalarDict.js'\nimport {Table, TableColumn, TableProps} from '../../private/node/ui/components/Table/Table.js'\nimport {\n Token,\n tokenItemToString,\n InlineToken,\n LinkToken,\n ListToken,\n TokenItem,\n} from '../../private/node/ui/components/TokenizedText.js'\nimport {\n DangerousConfirmationPrompt,\n DangerousConfirmationPromptProps,\n} from '../../private/node/ui/components/DangerousConfirmationPrompt.js'\nimport {SelectPrompt, SelectPromptProps} from '../../private/node/ui/components/SelectPrompt.js'\nimport {Tasks, Task} from '../../private/node/ui/components/Tasks.js'\nimport {TextPrompt, TextPromptProps} from '../../private/node/ui/components/TextPrompt.js'\nimport {AutocompletePromptProps, AutocompletePrompt} from '../../private/node/ui/components/AutocompletePrompt.js'\nimport {InfoTableSection} from '../../private/node/ui/components/Prompts/InfoTable.js'\nimport {InfoMessageProps} from '../../private/node/ui/components/Prompts/InfoMessage.js'\nimport React from 'react'\nimport {Key as InkKey, RenderOptions} from 'ink'\n\ntype PartialBy<T, TKey extends keyof T> = Omit<T, TKey> & Partial<Pick<T, TKey>>\n\ninterface UIDebugOptions {\n /** If true, don't check if the current terminal is interactive or not */\n skipTTYCheck?: boolean\n}\nconst defaultUIDebugOptions: UIDebugOptions = {\n skipTTYCheck: false,\n}\n\nexport interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps, 'abortSignal'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.\n * @example\n * 00:00:00 │ backend │ first backend message\n * 00:00:00 │ backend │ second backend message\n * 00:00:00 │ backend │ third backend message\n * 00:00:00 │ frontend │ first frontend message\n * 00:00:00 │ frontend │ second frontend message\n * 00:00:00 │ frontend │ third frontend message\n *\n */\nexport async function renderConcurrent({renderOptions, ...props}: RenderConcurrentOptions) {\n const abortSignal = props.abortSignal ?? new AbortController().signal\n\n return render(<ConcurrentOutput {...props} abortSignal={abortSignal} />, renderOptions)\n}\n\nexport type AlertCustomSection = CustomSection\nexport type RenderAlertOptions = Omit<AlertOptions, 'type'>\n\n/**\n * Renders an information banner to the console.\n * @example Basic\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ CLI update available. │\n * │ │\n * │ Run `npm run shopify upgrade`. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ my-app initialized and ready to build. │\n * │ │\n * │ Next steps │\n * │ • Run `cd verification-app` │\n * │ • To preview your project, run `npm app dev` │\n * │ • To add extensions, run `npm generate extension` │\n * │ │\n * │ Reference │\n * │ • Run `npm shopify help` │\n * │ • Dev docs [1] │\n * │ │\n * │ Custom section │\n * │ • Item 1 [2] │\n * │ • Item 2 │\n * │ • Item 3 [3] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev\n * [2] https://www.google.com/search?q=jh56t9l34kpo35tw8s28hn7s\n * 9s2xvzla01d8cn6j7yq&rlz=1C1GCEU_enUS832US832&oq=jh56t9l34kpo\n * 35tw8s28hn7s9s2xvzla01d8cn6j7yq&aqs=chrome.0.35i39l2j0l4j46j\n * 69i60.2711j0j7&sourceid=chrome&ie=UTF-8\n * [3] https://shopify.com\n *\n */\nexport function renderInfo(options: RenderAlertOptions) {\n return alert({...options, type: 'info'})\n}\n\n/**\n * Renders a success banner to the console.\n * @example Basic\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ CLI updated. │\n * │ │\n * │ You are now running version 3.47. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ Deployment successful. │\n * │ │\n * │ Your extensions have been uploaded to your Shopify │\n * │ Partners Dashboard. │\n * │ │\n * │ Next steps │\n * │ • See your deployment and set it live [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/1797046/apps/4523695/deploy\n * ments\n *\n */\nexport function renderSuccess(options: RenderAlertOptions) {\n return alert({...options, type: 'success'})\n}\n\n/**\n * Renders a warning banner to the console.\n * @example Basic\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ You have reached your limit of checkout extensions for │\n * │ this app. │\n * │ │\n * │ You can free up space for a new one by deleting an │\n * │ existing one. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ Required access scope update. │\n * │ │\n * │ The deadline for re-selecting your app scopes is May │\n * │ 1, 2022. │\n * │ │\n * │ Reference │\n * │ • Dev docs [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev/app/scopes\n *\n */\nexport function renderWarning(options: RenderAlertOptions) {\n return alert({...options, type: 'warning'})\n}\n\n/**\n * Renders an error banner to the console.\n * @example\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Version couldn't be released. │\n * │ │\n * │ This version needs to be submitted for review and │\n * │ approved by Shopify before it can be released. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\nexport function renderError(options: RenderAlertOptions) {\n return alert({...options, type: 'error'})\n}\n\ninterface RenderFatalErrorOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a Fatal error to the console inside a banner.\n * @example Basic\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Something went wrong. │\n * │ │\n * │ To investigate the issue, examine this stack trace: │\n * │ at _compile (internal/modules/cjs/loader.js:1137) │\n * │ at js (internal/modules/cjs/loader.js:1157) │\n * │ at load (internal/modules/cjs/loader.js:985) │\n * │ at _load (internal/modules/cjs/loader.js:878) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ No Organization found │\n * │ │\n * │ Next steps │\n * │ • Have you created a Shopify Partners organization │\n * │ [1]? │\n * │ • Have you confirmed your accounts from the emails │\n * │ you received? │\n * │ • Need to connect to a different App or │\n * │ organization? Run the command again with `--reset` │\n * │ │\n * │ amortizable-marketplace-ext │\n * │ • Some other error │\n * │ Validation errors │\n * │ • Missing expected key(s). │\n * │ │\n * │ amortizable-marketplace-ext-2 │\n * │ • Something was not found │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/signup\n *\n */\n// eslint-disable-next-line max-params\nexport function renderFatalError(error: Fatal, {renderOptions}: RenderFatalErrorOptions = {}) {\n return renderOnce(<FatalError error={error} />, {logLevel: 'error', logger: consoleError, renderOptions})\n}\n\nexport interface RenderSelectPromptOptions<T> extends Omit<SelectPromptProps<T>, 'onSubmit'> {\n isConfirmationPrompt?: boolean\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a select prompt to the console.\n * @example\n * ? Associate your project with the org Castile Ventures?\n *\n * ┃ Add\n * ┃ • new-ext\n * ┃\n * ┃ Remove\n * ┃ • integrated-demand-ext\n * ┃ • order-discount\n *\n * Automations\n * > fifth\n * sixth\n *\n * Merchant Admin\n * eighth\n * ninth\n *\n * Other\n * first\n * second\n * third (limit reached)\n * fourth\n * seventh\n * tenth\n *\n * Press ↑↓ arrows to select, enter to confirm.\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderSelectPrompt<T>(\n {renderOptions, isConfirmationPrompt, ...props}: RenderSelectPromptOptions<T>,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<T> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let selectedValue: T\n await render(\n <SelectPrompt\n {...props}\n onSubmit={(value: T) => {\n selectedValue = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return selectedValue!\n })\n}\n\nexport interface RenderConfirmationPromptOptions\n extends Pick<SelectPromptProps<boolean>, 'message' | 'infoTable' | 'infoMessage' | 'abortSignal'> {\n confirmationMessage?: string\n cancellationMessage?: string\n renderOptions?: RenderOptions\n defaultValue?: boolean\n}\n\n/**\n * Renders a confirmation prompt to the console.\n * @example\n * ? Delete the following themes from the store?\n *\n * ┃ Info message title\n * ┃\n * ┃ Info message body\n * ┃\n * ┃ • first theme (#1)\n * ┃ • second theme (#2)\n *\n * > (y) Yes, confirm changes\n * (n) Cancel\n *\n * Press ↑↓ arrows to select, enter or a shortcut to\n * confirm.\n *\n */\nexport async function renderConfirmationPrompt({\n message,\n infoTable,\n confirmationMessage = 'Yes, confirm',\n cancellationMessage = 'No, cancel',\n renderOptions,\n defaultValue = true,\n abortSignal,\n infoMessage,\n}: RenderConfirmationPromptOptions): Promise<boolean> {\n const choices = [\n {\n label: confirmationMessage,\n value: true,\n key: 'y',\n },\n {\n label: cancellationMessage,\n value: false,\n key: 'n',\n },\n ]\n\n return renderSelectPrompt({\n choices,\n message,\n infoTable,\n renderOptions,\n defaultValue,\n isConfirmationPrompt: true,\n abortSignal,\n infoMessage,\n })\n}\n\nexport interface RenderAutocompleteOptions<T>\n extends PartialBy<Omit<AutocompletePromptProps<T>, 'onSubmit'>, 'search'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders an autocomplete prompt to the console.\n * @example\n * ? Select a template: Type to search...\n *\n * ┃ Info message title\n * ┃\n * ┃ Info message body\n *\n * > first\n * second\n * third\n * fourth\n * fifth\n * sixth\n * seventh\n * eighth\n * ninth\n * tenth\n * eleventh\n * twelfth\n * thirteenth\n * fourteenth\n * fifteenth\n * sixteenth\n * seventeenth\n * eighteenth\n * nineteenth (disabled)\n * twentieth\n * twenty-first\n * twenty-second\n * twenty-third\n * twenty-fourth\n * twenty-fifth\n *\n * Press ↑↓ arrows to select, enter to confirm.\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderAutocompletePrompt<T>(\n {renderOptions, ...props}: RenderAutocompleteOptions<T>,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<T> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n const newProps = {\n search(term: string) {\n const lowerTerm = term.toLowerCase()\n return Promise.resolve({\n data: props.choices.filter((item) => {\n return item.label.toLowerCase().includes(lowerTerm) || item.group?.toLowerCase().includes(lowerTerm)\n }),\n })\n },\n ...props,\n }\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let selectedValue: T\n await render(\n <AutocompletePrompt\n {...newProps}\n onSubmit={(value: T) => {\n selectedValue = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return selectedValue!\n })\n}\n\ninterface RenderTableOptions<T extends ScalarDict> extends TableProps<T> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a table to the console.\n * @example\n * ID Name email\n * ── ────────── ─────────────\n * 1 John Doe jon@doe.com\n * 2 Jane Doe jane@doe.com\n * 3 John Smith jon@smith.com\n */\nexport function renderTable<T extends ScalarDict>({renderOptions, ...props}: RenderTableOptions<T>) {\n return renderOnce(<Table {...props} />, {renderOptions})\n}\n\ninterface RenderTasksOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Runs async tasks and displays their progress to the console.\n * @example\n * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n * Installing dependencies ...\n */\n// eslint-disable-next-line max-params\nexport async function renderTasks<TContext>(tasks: Task<TContext>[], {renderOptions}: RenderTasksOptions = {}) {\n // eslint-disable-next-line max-params\n return new Promise<TContext>((resolve, reject) => {\n render(<Tasks tasks={tasks} onComplete={resolve} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n })\n .then(() => {})\n .catch(reject)\n })\n}\n\nexport interface RenderTextPromptOptions extends Omit<TextPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a text prompt to the console.\n * @example\n * ? App project name (can be changed later):\n * > expansive commerce app\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderTextPrompt(\n {renderOptions, ...props}: RenderTextPromptOptions,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<string> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let enteredText = ''\n await render(\n <TextPrompt\n {...props}\n onSubmit={(value: string) => {\n enteredText = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return enteredText\n })\n}\n\nexport interface RenderDangerousConfirmationPromptOptions extends Omit<DangerousConfirmationPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a dangerous confirmation prompt to the console, forcing the user to\n * type a confirmation string to proceed.\n * @example\n * ? Release a new version of nightly-app-2023-06-19?\n *\n * ┃ Includes:\n * ┃ + web-px (new)\n * ┃ + sub-ui-ext\n * ┃ + theme-app-ext\n * ┃ + paymentify (from Partner Dashboard)\n * ┃\n * ┃ Removes:\n * ┃ - prod-discount-fun\n * ┃\n * ┃ This can permanently delete app user data.\n *\n * Type nightly-app-2023-06-19 to confirm, or press Escape\n * to cancel.\n * > █\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderDangerousConfirmationPrompt(\n {renderOptions, ...props}: RenderDangerousConfirmationPromptOptions,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<boolean> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let confirmed: boolean\n await render(\n <DangerousConfirmationPrompt\n {...props}\n onSubmit={(value: boolean) => {\n confirmed = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return confirmed!\n })\n}\n\ninterface RenderTextOptions {\n text: string\n logLevel?: LogLevel\n logger?: Logger\n}\n\n/** Renders a text string to the console.\n * Using this function makes sure that correct spacing is applied among the various components.\n * @example\n * Hello world!\n *\n */\nexport function renderText({text, logLevel = 'info', logger = consoleLog}: RenderTextOptions) {\n let textWithLineReturn = text\n if (!text.endsWith('\\n')) textWithLineReturn += '\\n'\n\n if (isUnitTest()) collectLog(logLevel, textWithLineReturn)\n outputWhereAppropriate(logLevel, logger, textWithLineReturn)\n return textWithLineReturn\n}\n\n/** Waits for any key to be pressed except Ctrl+C which will terminate the process. */\n// eslint-disable-next-line max-params\nexport const keypress = async (stdin = process.stdin, uiDebugOptions: UIDebugOptions = defaultUIDebugOptions) => {\n throwInNonTTY({message: 'Press any key'}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(() => {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n const handler = (buffer: Buffer) => {\n stdin.setRawMode(false)\n\n const bytes = Array.from(buffer)\n\n if (bytes.length && bytes[0] === 3) {\n outputDebug('Canceled keypress, User pressed CTRL+C')\n reject(new AbortSilentError())\n }\n stdin.unref()\n process.nextTick(resolve)\n }\n\n stdin.setRawMode(true)\n stdin.once('data', handler)\n\n // We want to indicate that we're still using stdin, so that the process\n // doesn't exit early.\n stdin.ref()\n })\n })\n}\n\ninterface IsTTYOptions {\n stdin?: NodeJS.ReadStream\n uiDebugOptions?: UIDebugOptions\n}\n\nexport function isTTY({stdin = undefined, uiDebugOptions = defaultUIDebugOptions}: IsTTYOptions = {}) {\n return Boolean(uiDebugOptions.skipTTYCheck || stdin || terminalSupportsPrompting())\n}\n\ninterface ThrowInNonTTYOptions {\n message: TokenItem\n stdin?: NodeJS.ReadStream\n}\n\n// eslint-disable-next-line max-params\nfunction throwInNonTTY({message, stdin = undefined}: ThrowInNonTTYOptions, uiDebugOptions: UIDebugOptions) {\n if (isTTY({stdin, uiDebugOptions})) return\n\n const promptText = tokenItemToString(message)\n const errorMessage = `Failed to prompt:\n\n${outputContent`${outputToken.cyan(promptText)}`.value}\n\nThis usually happens when running a command non-interactively, for example in a CI environment, or when piping to or from another process.`\n throw new AbortError(\n errorMessage,\n 'To resolve this, specify the option in the command, or run the command in an interactive environment such as your local terminal.',\n )\n}\n\nexport type Key = InkKey\nexport type InfoMessage = InfoMessageProps['message']\nexport {Token, Task, TokenItem, InlineToken, LinkToken, TableColumn, InfoTableSection, ListToken, render, handleCtrlC}\n"]}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/public/node/ui.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable tsdoc/syntax */\nimport {AbortError, AbortSilentError, FatalError as Fatal} from './error.js'\nimport {\n collectLog,\n consoleError,\n consoleLog,\n Logger,\n LogLevel,\n outputContent,\n outputDebug,\n outputToken,\n outputWhereAppropriate,\n} from './output.js'\nimport {isUnitTest} from './context/local.js'\nimport {terminalSupportsPrompting} from './system.js'\nimport {AbortController} from './abort.js'\nimport {runWithTimer} from './metadata.js'\nimport {ConcurrentOutput, ConcurrentOutputProps} from '../../private/node/ui/components/ConcurrentOutput.js'\nimport {handleCtrlC, render, renderOnce} from '../../private/node/ui.js'\nimport {alert, AlertOptions} from '../../private/node/ui/alert.js'\nimport {CustomSection} from '../../private/node/ui/components/Alert.js'\nimport {FatalError} from '../../private/node/ui/components/FatalError.js'\nimport ScalarDict from '../../private/node/ui/components/Table/ScalarDict.js'\nimport {Table, TableColumn, TableProps} from '../../private/node/ui/components/Table/Table.js'\nimport {\n Token,\n tokenItemToString,\n InlineToken,\n LinkToken,\n ListToken,\n TokenItem,\n} from '../../private/node/ui/components/TokenizedText.js'\nimport {\n DangerousConfirmationPrompt,\n DangerousConfirmationPromptProps,\n} from '../../private/node/ui/components/DangerousConfirmationPrompt.js'\nimport {SelectPrompt, SelectPromptProps} from '../../private/node/ui/components/SelectPrompt.js'\nimport {Tasks, Task} from '../../private/node/ui/components/Tasks.js'\nimport {TextPrompt, TextPromptProps} from '../../private/node/ui/components/TextPrompt.js'\nimport {AutocompletePromptProps, AutocompletePrompt} from '../../private/node/ui/components/AutocompletePrompt.js'\nimport {InfoTableSection} from '../../private/node/ui/components/Prompts/InfoTable.js'\nimport {InfoMessageProps} from '../../private/node/ui/components/Prompts/InfoMessage.js'\nimport React from 'react'\nimport {Key as InkKey, RenderOptions} from 'ink'\n\ntype PartialBy<T, TKey extends keyof T> = Omit<T, TKey> & Partial<Pick<T, TKey>>\n\ninterface UIDebugOptions {\n /** If true, don't check if the current terminal is interactive or not */\n skipTTYCheck?: boolean\n}\nconst defaultUIDebugOptions: UIDebugOptions = {\n skipTTYCheck: false,\n}\n\nexport interface RenderConcurrentOptions extends PartialBy<ConcurrentOutputProps, 'abortSignal'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders output from concurrent processes to the terminal with {@link ConcurrentOutput}.\n * @example\n * 00:00:00 │ backend │ first backend message\n * 00:00:00 │ backend │ second backend message\n * 00:00:00 │ backend │ third backend message\n * 00:00:00 │ frontend │ first frontend message\n * 00:00:00 │ frontend │ second frontend message\n * 00:00:00 │ frontend │ third frontend message\n *\n */\nexport async function renderConcurrent({renderOptions, ...props}: RenderConcurrentOptions) {\n const abortSignal = props.abortSignal ?? new AbortController().signal\n\n return render(<ConcurrentOutput {...props} abortSignal={abortSignal} />, renderOptions)\n}\n\nexport type AlertCustomSection = CustomSection\nexport type RenderAlertOptions = Omit<AlertOptions, 'type'>\n\n/**\n * Renders an information banner to the console.\n * @example Basic\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ CLI update available. │\n * │ │\n * │ Run `npm run shopify upgrade`. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ info ───────────────────────────────────────────────────╮\n * │ │\n * │ my-app initialized and ready to build. │\n * │ │\n * │ Next steps │\n * │ • Run `cd verification-app` │\n * │ • To preview your project, run `npm app dev` │\n * │ • To add extensions, run `npm generate extension` │\n * │ │\n * │ Reference │\n * │ • Run `npm shopify help` │\n * │ • Dev docs [1] │\n * │ │\n * │ Custom section │\n * │ • Item 1 [2] │\n * │ • Item 2 │\n * │ • Item 3 [3] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev\n * [2] https://www.google.com/search?q=jh56t9l34kpo35tw8s28hn7s\n * 9s2xvzla01d8cn6j7yq&rlz=1C1GCEU_enUS832US832&oq=jh56t9l34kpo\n * 35tw8s28hn7s9s2xvzla01d8cn6j7yq&aqs=chrome.0.35i39l2j0l4j46j\n * 69i60.2711j0j7&sourceid=chrome&ie=UTF-8\n * [3] https://shopify.com\n *\n */\nexport function renderInfo(options: RenderAlertOptions) {\n return alert({...options, type: 'info'})\n}\n\n/**\n * Renders a success banner to the console.\n * @example Basic\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ CLI updated. │\n * │ │\n * │ You are now running version 3.47. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ success ────────────────────────────────────────────────╮\n * │ │\n * │ Deployment successful. │\n * │ │\n * │ Your extensions have been uploaded to your Shopify │\n * │ Partners Dashboard. │\n * │ │\n * │ Next steps │\n * │ • See your deployment and set it live [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/1797046/apps/4523695/deploy\n * ments\n *\n */\nexport function renderSuccess(options: RenderAlertOptions) {\n return alert({...options, type: 'success'})\n}\n\n/**\n * Renders a warning banner to the console.\n * @example Basic\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ You have reached your limit of checkout extensions for │\n * │ this app. │\n * │ │\n * │ You can free up space for a new one by deleting an │\n * │ existing one. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ warning ────────────────────────────────────────────────╮\n * │ │\n * │ Required access scope update. │\n * │ │\n * │ The deadline for re-selecting your app scopes is May │\n * │ 1, 2022. │\n * │ │\n * │ Reference │\n * │ • Dev docs [1] │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://shopify.dev/app/scopes\n *\n */\nexport function renderWarning(options: RenderAlertOptions) {\n return alert({...options, type: 'warning'})\n}\n\n/**\n * Renders an error banner to the console.\n * @example\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Version couldn't be released. │\n * │ │\n * │ This version needs to be submitted for review and │\n * │ approved by Shopify before it can be released. │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n */\nexport function renderError(options: RenderAlertOptions) {\n return alert({...options, type: 'error'})\n}\n\ninterface RenderFatalErrorOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a Fatal error to the console inside a banner.\n * @example Basic\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ Something went wrong. │\n * │ │\n * │ To investigate the issue, examine this stack trace: │\n * │ at _compile (internal/modules/cjs/loader.js:1137) │\n * │ at js (internal/modules/cjs/loader.js:1157) │\n * │ at load (internal/modules/cjs/loader.js:985) │\n * │ at _load (internal/modules/cjs/loader.js:878) │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n *\n * @example Complete\n * ╭─ error ──────────────────────────────────────────────────╮\n * │ │\n * │ No Organization found │\n * │ │\n * │ Next steps │\n * │ • Have you created a Shopify Partners organization │\n * │ [1]? │\n * │ • Have you confirmed your accounts from the emails │\n * │ you received? │\n * │ • Need to connect to a different App or │\n * │ organization? Run the command again with `--reset` │\n * │ │\n * │ amortizable-marketplace-ext │\n * │ • Some other error │\n * │ Validation errors │\n * │ • Missing expected key(s). │\n * │ │\n * │ amortizable-marketplace-ext-2 │\n * │ • Something was not found │\n * │ │\n * ╰──────────────────────────────────────────────────────────╯\n * [1] https://partners.shopify.com/signup\n *\n */\n// eslint-disable-next-line max-params\nexport function renderFatalError(error: Fatal, {renderOptions}: RenderFatalErrorOptions = {}) {\n return renderOnce(<FatalError error={error} />, {logLevel: 'error', logger: consoleError, renderOptions})\n}\n\nexport interface RenderSelectPromptOptions<T> extends Omit<SelectPromptProps<T>, 'onSubmit'> {\n isConfirmationPrompt?: boolean\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a select prompt to the console.\n * @example\n * ? Associate your project with the org Castile Ventures?\n *\n * ┃ Add\n * ┃ • new-ext\n * ┃\n * ┃ Remove\n * ┃ • integrated-demand-ext\n * ┃ • order-discount\n *\n * Automations\n * > fifth\n * sixth\n *\n * Merchant Admin\n * eighth\n * ninth\n *\n * Other\n * first\n * second\n * third (limit reached)\n * fourth\n * seventh\n * tenth\n *\n * Press ↑↓ arrows to select, enter to confirm.\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderSelectPrompt<T>(\n {renderOptions, isConfirmationPrompt, ...props}: RenderSelectPromptOptions<T>,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<T> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let selectedValue: T\n await render(\n <SelectPrompt\n {...props}\n onSubmit={(value: T) => {\n selectedValue = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return selectedValue!\n })\n}\n\nexport interface RenderConfirmationPromptOptions\n extends Pick<SelectPromptProps<boolean>, 'message' | 'infoTable' | 'infoMessage' | 'abortSignal'> {\n confirmationMessage?: string\n cancellationMessage?: string\n renderOptions?: RenderOptions\n defaultValue?: boolean\n}\n\n/**\n * Renders a confirmation prompt to the console.\n * @example\n * ? Delete the following themes from the store?\n *\n * ┃ Info message title\n * ┃\n * ┃ Info message body\n * ┃\n * ┃ • first theme (#1)\n * ┃ • second theme (#2)\n *\n * > (y) Yes, confirm changes\n * (n) Cancel\n *\n * Press ↑↓ arrows to select, enter or a shortcut to\n * confirm.\n *\n */\nexport async function renderConfirmationPrompt({\n message,\n infoTable,\n confirmationMessage = 'Yes, confirm',\n cancellationMessage = 'No, cancel',\n renderOptions,\n defaultValue = true,\n abortSignal,\n infoMessage,\n}: RenderConfirmationPromptOptions): Promise<boolean> {\n const choices = [\n {\n label: confirmationMessage,\n value: true,\n key: 'y',\n },\n {\n label: cancellationMessage,\n value: false,\n key: 'n',\n },\n ]\n\n return renderSelectPrompt({\n choices,\n message,\n infoTable,\n renderOptions,\n defaultValue,\n isConfirmationPrompt: true,\n abortSignal,\n infoMessage,\n })\n}\n\nexport interface RenderAutocompleteOptions<T>\n extends PartialBy<Omit<AutocompletePromptProps<T>, 'onSubmit'>, 'search'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders an autocomplete prompt to the console.\n * @example\n * ? Select a template: Type to search...\n *\n * ┃ Info message title\n * ┃\n * ┃ Info message body\n *\n * > first\n * second\n * third\n * fourth\n * fifth\n * sixth\n * seventh\n * eighth\n * ninth\n * tenth\n * eleventh\n * twelfth\n * thirteenth\n * fourteenth\n * fifteenth\n * sixteenth\n * seventeenth\n * eighteenth\n * nineteenth (disabled)\n * twentieth\n * twenty-first\n * twenty-second\n * twenty-third\n * twenty-fourth\n * twenty-fifth\n *\n * Press ↑↓ arrows to select, enter to confirm.\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderAutocompletePrompt<T>(\n {renderOptions, ...props}: RenderAutocompleteOptions<T>,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<T> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n const newProps = {\n search(term: string) {\n const lowerTerm = term.toLowerCase()\n return Promise.resolve({\n data: props.choices.filter((item) => {\n return item.label.toLowerCase().includes(lowerTerm) || item.group?.toLowerCase().includes(lowerTerm)\n }),\n })\n },\n ...props,\n }\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let selectedValue: T\n await render(\n <AutocompletePrompt\n {...newProps}\n onSubmit={(value: T) => {\n selectedValue = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return selectedValue!\n })\n}\n\ninterface RenderTableOptions<T extends ScalarDict> extends TableProps<T> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a table to the console.\n * @example\n * ID Name email\n * ── ────────── ─────────────\n * 1 John Doe jon@doe.com\n * 2 Jane Doe jane@doe.com\n * 3 John Smith jon@smith.com\n */\nexport function renderTable<T extends ScalarDict>({renderOptions, ...props}: RenderTableOptions<T>) {\n return renderOnce(<Table {...props} />, {renderOptions})\n}\n\ninterface RenderTasksOptions {\n renderOptions?: RenderOptions\n}\n\n/**\n * Runs async tasks and displays their progress to the console.\n * @example\n * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n * Installing dependencies ...\n */\n// eslint-disable-next-line max-params\nexport async function renderTasks<TContext>(tasks: Task<TContext>[], {renderOptions}: RenderTasksOptions = {}) {\n // eslint-disable-next-line max-params\n return new Promise<TContext>((resolve, reject) => {\n render(<Tasks tasks={tasks} onComplete={resolve} />, {\n ...renderOptions,\n exitOnCtrlC: false,\n })\n .then(() => {})\n .catch(reject)\n })\n}\n\nexport interface RenderTextPromptOptions extends Omit<TextPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a text prompt to the console.\n * @example\n * ? App project name (can be changed later):\n * > expansive commerce app\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderTextPrompt(\n {renderOptions, ...props}: RenderTextPromptOptions,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<string> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let enteredText = ''\n await render(\n <TextPrompt\n {...props}\n onSubmit={(value: string) => {\n enteredText = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return enteredText\n })\n}\n\nexport interface RenderDangerousConfirmationPromptOptions extends Omit<DangerousConfirmationPromptProps, 'onSubmit'> {\n renderOptions?: RenderOptions\n}\n\n/**\n * Renders a dangerous confirmation prompt to the console, forcing the user to\n * type a confirmation string to proceed.\n * @example\n * ? Release a new version of nightly-app-2023-06-19?\n *\n * ┃ Includes:\n * ┃ + web-px (new)\n * ┃ + sub-ui-ext\n * ┃ + theme-app-ext\n * ┃ + paymentify (from Partner Dashboard)\n * ┃\n * ┃ Removes:\n * ┃ - prod-discount-fun\n * ┃\n * ┃ This can permanently delete app user data.\n *\n * Type nightly-app-2023-06-19 to confirm, or press Escape\n * to cancel.\n * > █\n * ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n *\n */\n// eslint-disable-next-line max-params\nexport async function renderDangerousConfirmationPrompt(\n {renderOptions, ...props}: RenderDangerousConfirmationPromptOptions,\n uiDebugOptions: UIDebugOptions = defaultUIDebugOptions,\n): Promise<boolean> {\n throwInNonTTY({message: props.message, stdin: renderOptions?.stdin}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(async () => {\n let confirmed: boolean\n await render(\n <DangerousConfirmationPrompt\n {...props}\n onSubmit={(value: boolean) => {\n confirmed = value\n }}\n />,\n {\n ...renderOptions,\n exitOnCtrlC: false,\n },\n )\n return confirmed!\n })\n}\n\ninterface RenderTextOptions {\n text: string\n logLevel?: LogLevel\n logger?: Logger\n}\n\n/** Renders a text string to the console.\n * Using this function makes sure that correct spacing is applied among the various components.\n * @example\n * Hello world!\n *\n */\nexport function renderText({text, logLevel = 'info', logger = consoleLog}: RenderTextOptions) {\n let textWithLineReturn = text\n if (!text.endsWith('\\n')) textWithLineReturn += '\\n'\n\n if (isUnitTest()) collectLog(logLevel, textWithLineReturn)\n outputWhereAppropriate(logLevel, logger, textWithLineReturn)\n return textWithLineReturn\n}\n\n/** Waits for any key to be pressed except Ctrl+C which will terminate the process. */\n// eslint-disable-next-line max-params\nexport const keypress = async (stdin = process.stdin, uiDebugOptions: UIDebugOptions = defaultUIDebugOptions) => {\n throwInNonTTY({message: 'Press any key'}, uiDebugOptions)\n\n return runWithTimer('cmd_all_timing_prompts_ms')(() => {\n // eslint-disable-next-line max-params\n return new Promise((resolve, reject) => {\n const handler = (buffer: Buffer) => {\n stdin.setRawMode(false)\n\n const bytes = Array.from(buffer)\n\n if (bytes.length && bytes[0] === 3) {\n outputDebug('Canceled keypress, User pressed CTRL+C')\n reject(new AbortSilentError())\n }\n stdin.unref()\n process.nextTick(resolve)\n }\n\n stdin.setRawMode(true)\n stdin.once('data', handler)\n\n // We want to indicate that we're still using stdin, so that the process\n // doesn't exit early.\n stdin.ref()\n })\n })\n}\n\ninterface IsTTYOptions {\n stdin?: NodeJS.ReadStream\n uiDebugOptions?: UIDebugOptions\n}\n\nexport function isTTY({stdin = undefined, uiDebugOptions = defaultUIDebugOptions}: IsTTYOptions = {}) {\n return Boolean(uiDebugOptions.skipTTYCheck || stdin || terminalSupportsPrompting())\n}\n\ninterface ThrowInNonTTYOptions {\n message: TokenItem\n stdin?: NodeJS.ReadStream\n}\n\n// eslint-disable-next-line max-params\nfunction throwInNonTTY({message, stdin = undefined}: ThrowInNonTTYOptions, uiDebugOptions: UIDebugOptions) {\n if (isTTY({stdin, uiDebugOptions})) return\n\n const promptText = tokenItemToString(message)\n const errorMessage = `Failed to prompt:\n\n${outputContent`${outputToken.cyan(promptText)}`.value}\n\nThis usually happens when running a command non-interactively, for example in a CI environment, or when piping to or from another process.`\n throw new AbortError(\n errorMessage,\n 'To resolve this, specify the option in the command, or run the command in an interactive environment such as your local terminal.',\n )\n}\n\nexport type Key = InkKey\nexport type InfoMessage = InfoMessageProps['message']\nexport {Token, Task, TokenItem, InlineToken, LinkToken, TableColumn, InfoTableSection, ListToken, render, handleCtrlC}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/public/node/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,+BAA+B,EAAC,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAC,2BAA2B,EAAC,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAA;IACzC,IAAI,cAAc,GAAG,2BAA2B,EAAE,CAAA;IAClD,gGAAgG;IAChG,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,cAAc,GAAG,+BAA+B,EAAE,CAAA;KACnD;IACD,yGAAyG;IACzG,IAAI,cAAc,KAAK,SAAS;QAAE,cAAc,GAAG,KAAK,CAAA;IAExD,IAAI,cAAc,KAAK,MAAM,EAAE;QAC7B,OAAO,GAAG,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAA;KAC/E;SAAM;QACL,MAAM,IAAI,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC1D,OAAO,GAAG,cAAc,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAA;KAC/E;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,aAAa,CAAA,cAAc,OAAO,mBAAmB,WAAW,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,EAAE;SAC/G,KAAK,CAAA;AACV,CAAC","sourcesContent":["import {currentProcessIsGlobal, inferPackageManagerForGlobalCLI} from './is-global.js'\nimport {packageManagerFromUserAgent} from './node-package-manager.js'\nimport {outputContent, outputToken} from './output.js'\n\n/**\n * Utility function for generating an install command for the user to run\n * to install an updated version of Shopify CLI.\n *\n * @returns A string with the command to run.\n */\nexport function cliInstallCommand(): string {\n const isGlobal = currentProcessIsGlobal()\n let packageManager = packageManagerFromUserAgent()\n // packageManagerFromUserAgent() will return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') {\n packageManager = inferPackageManagerForGlobalCLI()\n }\n // inferPackageManagerForGlobalCLI() will also return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') packageManager = 'npm'\n\n if (packageManager === 'yarn') {\n return `${packageManager} ${isGlobal ? 'global ' : ''}add @shopify/cli@latest`\n } else {\n const verb = packageManager === 'pnpm' ? 'add' : 'install'\n return `${packageManager} ${verb} ${isGlobal ? '-g ' : ''}@shopify/cli@latest`\n }\n}\n\n/**\n * Generates a message to remind the user to update the CLI.\n *\n * @param version - The version to update to.\n * @returns The message to remind the user to update the CLI.\n */\nexport function getOutputUpdateCLIReminder(version: string): string {\n return outputContent`💡 Version ${version} available! Run ${outputToken.genericShellCommand(cliInstallCommand())}`\n .value\n}\n"]}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/public/node/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,+BAA+B,EAAC,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAC,2BAA2B,EAAC,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAA;IACzC,IAAI,cAAc,GAAG,2BAA2B,EAAE,CAAA;IAClD,gGAAgG;IAChG,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,cAAc,GAAG,+BAA+B,EAAE,CAAA;IACpD,CAAC;IACD,yGAAyG;IACzG,IAAI,cAAc,KAAK,SAAS;QAAE,cAAc,GAAG,KAAK,CAAA;IAExD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,GAAG,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAA;IAChF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC1D,OAAO,GAAG,cAAc,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAA;IAChF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,aAAa,CAAA,cAAc,OAAO,mBAAmB,WAAW,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,EAAE;SAC/G,KAAK,CAAA;AACV,CAAC","sourcesContent":["import {currentProcessIsGlobal, inferPackageManagerForGlobalCLI} from './is-global.js'\nimport {packageManagerFromUserAgent} from './node-package-manager.js'\nimport {outputContent, outputToken} from './output.js'\n\n/**\n * Utility function for generating an install command for the user to run\n * to install an updated version of Shopify CLI.\n *\n * @returns A string with the command to run.\n */\nexport function cliInstallCommand(): string {\n const isGlobal = currentProcessIsGlobal()\n let packageManager = packageManagerFromUserAgent()\n // packageManagerFromUserAgent() will return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') {\n packageManager = inferPackageManagerForGlobalCLI()\n }\n // inferPackageManagerForGlobalCLI() will also return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') packageManager = 'npm'\n\n if (packageManager === 'yarn') {\n return `${packageManager} ${isGlobal ? 'global ' : ''}add @shopify/cli@latest`\n } else {\n const verb = packageManager === 'pnpm' ? 'add' : 'install'\n return `${packageManager} ${verb} ${isGlobal ? '-g ' : ''}@shopify/cli@latest`\n }\n}\n\n/**\n * Generates a message to remind the user to update the CLI.\n *\n * @param version - The version to update to.\n * @returns The message to remind the user to update the CLI.\n */\nexport function getOutputUpdateCLIReminder(version: string): string {\n return outputContent`💡 Version ${version} available! Run ${outputToken.genericShellCommand(cliInstallCommand())}`\n .value\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../../../../src/public/node/vendor/dev_server/DevServer.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport * as os from 'os';\nimport * as ni from 'network-interfaces';\nimport { execSync } from 'child_process';\n\nclass DevServerUtils {\n static readonly INFERENCE_MODE_SENTINEL =\n '/opt/dev/misc/dev-server-inference-mode';\n static readonly BACKEND_PORT = 8080;\n static readonly CONNECT_TIMEOUT = 100; // 100ms\n static readonly HOSTS_FILE = '/etc/hosts';\n\n static assertConnectable(name: string, addr: string, port: number): void {\n try {\n execSync(`nc -z -v -w 1 ${addr} ${port}`, {\n timeout: DevServerUtils.CONNECT_TIMEOUT,\n stdio: 'ignore',\n });\n } catch (err) {\n throw new Error(\n `NET FAILED DevServer for '${name}' is not running on ${port} / ${addr}: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static inferenceModeAndProjectIsEdition2016(name: string): boolean {\n try {\n fs.accessSync(DevServerUtils.INFERENCE_MODE_SENTINEL);\n try {\n fs.accessSync(`/opt/nginx/etc/manifest/${name}/current/edition-2024`);\n return false;\n } catch {\n return true;\n }\n } catch {\n return false;\n }\n }\n\n static getIpFromHosts(hostname: string): string {\n try {\n const hostsContent = fs.readFileSync(DevServerUtils.HOSTS_FILE, 'utf8');\n const lines = hostsContent.split(/\\r?\\n/);\n for (const line of lines) {\n const matches = /^\\s*?([^#]+?)\\s+([^#]+?)$/.exec(line);\n if (matches && matches.length === 3 && matches[2] === hostname) {\n return matches[1]!; // Return the IP address\n }\n }\n } catch (error) {\n console.error('Error reading hosts file:', error);\n }\n\n throw new Error(`No IP found for hostname: ${hostname}`);\n }\n\n static getAddrPort2024(name: string): [string, number] {\n try {\n const backendIp = DevServerUtils.resolveBackendHost(name);\n const interfaceName = ni.fromIp(backendIp, {\n internal: true,\n ipVersion: 4,\n });\n return [backendIp, DevServerUtils.BACKEND_PORT];\n } catch (error) {\n throw new Error(\n `DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static getAddrPort2016(name: string): [string, number] {\n try {\n const portContent = fs.readFileSync(\n `${os.homedir()}/.local/run/services/${name}/server/port`,\n 'utf-8'\n );\n return ['localhost', parseInt(portContent, 10)];\n } catch (error) {\n throw new Error(\n `DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static resolveBackendHost(name: string): string {\n let host: string;\n try {\n host = fs.readlinkSync(`/opt/nginx/etc/manifest/${name}/current`);\n } catch (error) {\n host = `${name}.root.shopify.dev.internal`;\n }\n\n try {\n return DevServerUtils.getIpFromHosts(host);\n } catch {\n return host;\n }\n }\n}\n\nexport class DevServer {\n protected name: string;\n\n constructor(name: string) {\n if (!process.env.SPIN && !process.env.USING_DEV) {\n throw new Error('DevServer is not supported in this environment');\n }\n\n if (name === 'shopify') {\n throw new Error('Use DevServer.core for the \\'shopify\\' project');\n }\n this.name = name;\n }\n\n url({\n nonstandardHostPrefix,\n }: { nonstandardHostPrefix?: string } = {}): string {\n return `https://${this.host({nonstandardHostPrefix})}`;\n }\n\n host({\n nonstandardHostPrefix,\n }: { nonstandardHostPrefix?: string } = {}): string {\n const prefix = nonstandardHostPrefix || this.name;\n\n if (process.env.SPIN === '1') {\n const services = fs.readdirSync('/run/ports2')\n .filter(file => file.endsWith(`--${this.name}`));\n\n if (services.length === 0) {\n throw new Error(\n `DevServer for '${this.name}' not present in this spin environment`\n );\n }\n\n const match = new RegExp(`^(.+)${this.name}$`).exec(services[0]!);\n const organization = match ? match[1] : '';\n const spinPrefix = organization !== 'shopify--' ? `${organization}` : '';\n\n return `${spinPrefix}${this.name}.${process.env.SPIN_FQDN}`;\n } else if (DevServerUtils.inferenceModeAndProjectIsEdition2016(this.name)) {\n this.assertRunningLocally2016();\n return `${prefix}.myshopify.io`;\n } else {\n this.assertRunningLocally2024();\n return `${prefix}.shop.dev`;\n }\n }\n\n protected assertRunningLocally2024(): void {\n const [addr, port] = DevServerUtils.getAddrPort2024(this.name);\n DevServerUtils.assertConnectable(this.name, addr, port);\n }\n\n protected assertRunningLocally2016(): void {\n const [addr, port] = DevServerUtils.getAddrPort2016(this.name);\n DevServerUtils.assertConnectable(this.name, addr, port);\n }\n}\n\nexport class DevServerCore {\n private readonly name = 'shopify';\n\n url(prefix: string): string {\n return `https://${this.host(prefix)}`;\n }\n\n host(prefix: string): string {\n if (process.env.SPIN === '1') {\n const projectPortRoot = fs\n .readdirSync('/run/ports2')\n .find((file) => file.endsWith(`--${this.name}`));\n if (!projectPortRoot) {\n throw new Error(\n `DevServer for '${this.name}' not present in this spin environment`\n );\n }\n // Spin mostly doesn't do alternative hostname prefixing.\n return `${prefix}.${this.name}.${process.env.SPIN_FQDN}`;\n } else if (DevServerUtils.inferenceModeAndProjectIsEdition2016('shopify')) {\n this.assertRunningLocally2016();\n return `${prefix}.myshopify.io`;\n } else {\n this.assertRunningLocally2024();\n return `${prefix}.my.shop.dev`;\n }\n }\n\n private assertRunningLocally2024(): void {\n const [addr, port] = DevServerUtils.getAddrPort2024('shopify');\n DevServerUtils.assertConnectable('shopify', addr, port);\n }\n\n private assertRunningLocally2016(): void {\n const [addr, port] = DevServerUtils.getAddrPort2016('shopify');\n DevServerUtils.assertConnectable('shopify', addr, port);\n }\n}"]}
1
+ {"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../../../../src/public/node/vendor/dev_server/DevServer.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport * as os from 'os';\nimport * as ni from 'network-interfaces';\nimport { execSync } from 'child_process';\n\nclass DevServerUtils {\n static readonly INFERENCE_MODE_SENTINEL =\n '/opt/dev/misc/dev-server-inference-mode';\n static readonly BACKEND_PORT = 8080;\n static readonly CONNECT_TIMEOUT = 100; // 100ms\n static readonly HOSTS_FILE = '/etc/hosts';\n\n static assertConnectable(name: string, addr: string, port: number): void {\n try {\n execSync(`nc -z -v -w 1 ${addr} ${port}`, {\n timeout: DevServerUtils.CONNECT_TIMEOUT,\n stdio: 'ignore',\n });\n } catch (err) {\n throw new Error(\n `NET FAILED DevServer for '${name}' is not running on ${port} / ${addr}: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static inferenceModeAndProjectIsEdition2016(name: string): boolean {\n try {\n fs.accessSync(DevServerUtils.INFERENCE_MODE_SENTINEL);\n try {\n fs.accessSync(`/opt/nginx/etc/manifest/${name}/current/edition-2024`);\n return false;\n } catch {\n return true;\n }\n } catch {\n return false;\n }\n }\n\n static getIpFromHosts(hostname: string): string {\n try {\n const hostsContent = fs.readFileSync(DevServerUtils.HOSTS_FILE, 'utf8');\n const lines = hostsContent.split(/\\r?\\n/);\n for (const line of lines) {\n const matches = /^\\s*?([^#]+?)\\s+([^#]+?)$/.exec(line);\n if (matches && matches.length === 3 && matches[2] === hostname) {\n return matches[1]!; // Return the IP address\n }\n }\n } catch (error) {\n console.error('Error reading hosts file:', error);\n }\n\n throw new Error(`No IP found for hostname: ${hostname}`);\n }\n\n static getAddrPort2024(name: string): [string, number] {\n try {\n const backendIp = DevServerUtils.resolveBackendHost(name);\n const interfaceName = ni.fromIp(backendIp, {\n internal: true,\n ipVersion: 4,\n });\n return [backendIp, DevServerUtils.BACKEND_PORT];\n } catch (error) {\n throw new Error(\n `DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static getAddrPort2016(name: string): [string, number] {\n try {\n const portContent = fs.readFileSync(\n `${os.homedir()}/.local/run/services/${name}/server/port`,\n 'utf-8'\n );\n return ['localhost', parseInt(portContent, 10)];\n } catch (error) {\n throw new Error(\n `DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`\n );\n }\n }\n\n static resolveBackendHost(name: string): string {\n let host: string;\n try {\n host = fs.readlinkSync(`/opt/nginx/etc/manifest/${name}/current`);\n } catch (error) {\n host = `${name}.root.shopify.dev.internal`;\n }\n\n try {\n return DevServerUtils.getIpFromHosts(host);\n } catch {\n return host;\n }\n }\n}\n\nexport class DevServer {\n protected name: string;\n\n constructor(name: string) {\n if (!process.env.SPIN && !process.env.USING_DEV) {\n throw new Error('DevServer is not supported in this environment');\n }\n\n if (name === 'shopify') {\n throw new Error('Use DevServer.core for the \\'shopify\\' project');\n }\n this.name = name;\n }\n\n url({\n nonstandardHostPrefix,\n }: { nonstandardHostPrefix?: string } = {}): string {\n return `https://${this.host({nonstandardHostPrefix})}`;\n }\n\n host({\n nonstandardHostPrefix,\n }: { nonstandardHostPrefix?: string } = {}): string {\n const prefix = nonstandardHostPrefix || this.name;\n\n if (process.env.SPIN === '1') {\n const services = fs.readdirSync('/run/ports2')\n .filter(file => file.endsWith(`--${this.name}`));\n\n if (services.length === 0) {\n throw new Error(\n `DevServer for '${this.name}' not present in this spin environment`\n );\n }\n\n const match = new RegExp(`^(.+)${this.name}$`).exec(services[0]!);\n const organization = match ? match[1] : '';\n const spinPrefix = organization !== 'shopify--' ? `${organization}` : '';\n\n return `${spinPrefix}${this.name}.${process.env.SPIN_FQDN}`;\n } else if (DevServerUtils.inferenceModeAndProjectIsEdition2016(this.name)) {\n this.assertRunningLocally2016();\n return `${prefix}.myshopify.io`;\n } else {\n this.assertRunningLocally2024();\n return `${prefix}.shop.dev`;\n }\n }\n\n protected assertRunningLocally2024(): void {\n const [addr, port] = DevServerUtils.getAddrPort2024(this.name);\n DevServerUtils.assertConnectable(this.name, addr, port);\n }\n\n protected assertRunningLocally2016(): void {\n const [addr, port] = DevServerUtils.getAddrPort2016(this.name);\n DevServerUtils.assertConnectable(this.name, addr, port);\n }\n}\n\nexport class DevServerCore {\n private readonly name = 'shopify';\n\n url(prefix: string): string {\n return `https://${this.host(prefix)}`;\n }\n\n host(prefix: string): string {\n if (process.env.SPIN === '1') {\n const projectPortRoot = fs\n .readdirSync('/run/ports2')\n .find((file) => file.endsWith(`--${this.name}`));\n if (!projectPortRoot) {\n throw new Error(\n `DevServer for '${this.name}' not present in this spin environment`\n );\n }\n // Spin mostly doesn't do alternative hostname prefixing.\n return `${prefix}.${this.name}.${process.env.SPIN_FQDN}`;\n } else if (DevServerUtils.inferenceModeAndProjectIsEdition2016('shopify')) {\n this.assertRunningLocally2016();\n return `${prefix}.myshopify.io`;\n } else {\n this.assertRunningLocally2024();\n return `${prefix}.my.shop.dev`;\n }\n }\n\n private assertRunningLocally2024(): void {\n const [addr, port] = DevServerUtils.getAddrPort2024('shopify');\n DevServerUtils.assertConnectable('shopify', addr, port);\n }\n\n private assertRunningLocally2016(): void {\n const [addr, port] = DevServerUtils.getAddrPort2016('shopify');\n DevServerUtils.assertConnectable('shopify', addr, port);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InstantaneousMetricReader.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/export/InstantaneousMetricReader.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAEvC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAc7C,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IAGzD,YAAY,EAAC,QAAQ,EAAE,aAAa,EAAmC;QACrE,KAAK,CAAC;YACJ,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC/D,8BAA8B,EAAE,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,QAAQ,CAAC;SACtF,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,IAAI,CAAC,YAAY,GAAG,QAAQ;QAC1B,6DAA6D;QAC7D,IAAI,CAAC,YAAY,EACjB,aAAa,CACd,CAAA;IACH,CAAC;IAES,KAAK,CAAC,YAAY;QAC1B,MAAM,EAAC,eAAe,EAAE,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAExD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,0DAA0D,EAAE,GAAG,MAAM,CAAC,CAAA;SAClF;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChD,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,EAAE;oBAC5C,OAAO,EAAE,CAAA;iBACV;qBAAM;oBACL,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,2DAA2D,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;iBAC9G;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;IACjC,CAAC;CACF","sourcesContent":["import type {PushMetricExporter} from '@opentelemetry/sdk-metrics'\nimport {MetricReader} from '@opentelemetry/sdk-metrics'\nimport {ExportResultCode} from '@opentelemetry/core'\nimport {diag} from '@opentelemetry/api'\n\nimport {throttle} from '../utils/throttle.js'\n\nexport interface InstantaneousMetricReaderOptions {\n /**\n * The backing exporter for the metric reader.\n */\n exporter: PushMetricExporter\n\n /**\n * How much the export should be throttled in milliseconds.\n */\n throttleLimit: number\n}\n\nexport class InstantaneousMetricReader extends MetricReader {\n private readonly _exporter: PushMetricExporter\n\n constructor({exporter, throttleLimit}: InstantaneousMetricReaderOptions) {\n super({\n aggregationSelector: exporter.selectAggregation?.bind(exporter),\n aggregationTemporalitySelector: exporter.selectAggregationTemporality?.bind(exporter),\n })\n this._exporter = exporter\n\n this.onForceFlush = throttle(\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onForceFlush,\n throttleLimit,\n )\n }\n\n protected async onForceFlush(): Promise<void> {\n const {resourceMetrics, errors} = await this.collect({})\n\n if (errors.length > 0) {\n diag.error('PeriodicExportingMetricReader: metrics collection errors', ...errors)\n }\n\n return new Promise((resolve, reject) => {\n this._exporter.export(resourceMetrics, (result) => {\n if (result.code === ExportResultCode.SUCCESS) {\n resolve()\n } else {\n reject(result.error ?? new Error(`InstantaneousMetricReader: metrics export failed (error ${result.error})`))\n }\n })\n })\n }\n\n protected async onShutdown(): Promise<void> {\n await this._exporter.shutdown()\n }\n}\n"]}
1
+ {"version":3,"file":"InstantaneousMetricReader.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/export/InstantaneousMetricReader.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAEvC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAc7C,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IAGzD,YAAY,EAAC,QAAQ,EAAE,aAAa,EAAmC;QACrE,KAAK,CAAC;YACJ,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC/D,8BAA8B,EAAE,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,QAAQ,CAAC;SACtF,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,IAAI,CAAC,YAAY,GAAG,QAAQ;QAC1B,6DAA6D;QAC7D,IAAI,CAAC,YAAY,EACjB,aAAa,CACd,CAAA;IACH,CAAC;IAES,KAAK,CAAC,YAAY;QAC1B,MAAM,EAAC,eAAe,EAAE,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAExD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,0DAA0D,EAAE,GAAG,MAAM,CAAC,CAAA;QACnF,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChD,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC7C,OAAO,EAAE,CAAA;gBACX,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,2DAA2D,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;gBAC/G,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;IACjC,CAAC;CACF","sourcesContent":["import type {PushMetricExporter} from '@opentelemetry/sdk-metrics'\nimport {MetricReader} from '@opentelemetry/sdk-metrics'\nimport {ExportResultCode} from '@opentelemetry/core'\nimport {diag} from '@opentelemetry/api'\n\nimport {throttle} from '../utils/throttle.js'\n\nexport interface InstantaneousMetricReaderOptions {\n /**\n * The backing exporter for the metric reader.\n */\n exporter: PushMetricExporter\n\n /**\n * How much the export should be throttled in milliseconds.\n */\n throttleLimit: number\n}\n\nexport class InstantaneousMetricReader extends MetricReader {\n private readonly _exporter: PushMetricExporter\n\n constructor({exporter, throttleLimit}: InstantaneousMetricReaderOptions) {\n super({\n aggregationSelector: exporter.selectAggregation?.bind(exporter),\n aggregationTemporalitySelector: exporter.selectAggregationTemporality?.bind(exporter),\n })\n this._exporter = exporter\n\n this.onForceFlush = throttle(\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onForceFlush,\n throttleLimit,\n )\n }\n\n protected async onForceFlush(): Promise<void> {\n const {resourceMetrics, errors} = await this.collect({})\n\n if (errors.length > 0) {\n diag.error('PeriodicExportingMetricReader: metrics collection errors', ...errors)\n }\n\n return new Promise((resolve, reject) => {\n this._exporter.export(resourceMetrics, (result) => {\n if (result.code === ExportResultCode.SUCCESS) {\n resolve()\n } else {\n reject(result.error ?? new Error(`InstantaneousMetricReader: metrics export failed (error ${result.error})`))\n }\n })\n })\n }\n\n protected async onShutdown(): Promise<void> {\n await this._exporter.shutdown()\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseOtelService.js","sourceRoot":"","sources":["../../../../../../../src/public/node/vendor/otel-js/service/BaseOtelService/BaseOtelService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {MetricAttributes} from '@opentelemetry/api'\nimport type {MeterProvider, ViewOptions} from '@opentelemetry/sdk-metrics'\nimport {ExplicitBucketHistogramAggregation, View} from '@opentelemetry/sdk-metrics'\n\nimport type {\n MetricDescriptor,\n MetricRecording,\n MetricsConfig,\n OnRecordCallback,\n OtelService,\n RecordMetricFunction,\n} from '../types.js'\nimport {MetricInstrumentType} from '../types.js'\nimport {isValidMetricName} from '../../utils/validators.js'\n\nconst instrumentationScope = 'opentelemetry-js-shopify-web'\n\nexport interface BaseOtelServiceOptions {\n /**\n * Service name is a unique name for an application/service.\n */\n serviceName: string\n\n /**\n * If this is set to true then the service name is prefixed to every metric.\n */\n prefixMetric?: boolean\n\n /**\n * Metrics to register on startup.\n */\n metrics?: MetricsConfig\n\n /**\n * Called when a metric is recorded. `addOnRecord` can also be used to add\n * listeners anytime.\n */\n onRecord?: OnRecordCallback\n\n /**\n * Override the default meter provider.\n */\n meterProvider?: MeterProvider\n}\n\nexport class BaseOtelService implements OtelService {\n readonly serviceName: string\n readonly prefixMetric: boolean\n\n protected readonly meterProvider: MeterProvider\n protected readonly metrics: Map<string, RecordMetricFunction> = new Map()\n protected readonly recordListeners = new Set<OnRecordCallback>()\n\n /**\n * Bootstraps an Otel exporter which can send Otel metrics to a dedicated Shopify supported collector endpoint.\n */\n constructor({serviceName, prefixMetric = false, metrics = {}, onRecord, meterProvider}: BaseOtelServiceOptions) {\n if (!serviceName) {\n throw new Error('Service name is required.')\n }\n this.serviceName = serviceName\n\n this.prefixMetric = prefixMetric\n if (onRecord) this.addOnRecord(onRecord)\n\n if (!meterProvider) {\n throw new Error('MeterProvider is required.')\n }\n this.meterProvider = meterProvider\n\n this.register(metrics)\n }\n\n getMeterProvider(): MeterProvider {\n return this.meterProvider\n }\n\n addView(viewOptions: ViewOptions) {\n // The API to register view is not yet exposed. We need to use the private\n // property to register a new view after the initial instantiation.\n ;(this.meterProvider as any)._sharedState?.viewRegistry?.addView?.(new View(viewOptions))\n }\n\n record(metricName: string, value: number, labels?: MetricAttributes): void {\n const recordMetric = this.metrics.get(metricName)\n if (!recordMetric) {\n throw new Error(\n `Service ${this.serviceName} has no metrics registered for name: ${metricName}. Can't record value for unknown metric.`,\n )\n }\n recordMetric(value, labels)\n }\n\n registerMetric(metricName: string, {type, ...options}: MetricDescriptor): void {\n if (this.metrics.has(metricName)) {\n return\n }\n const meter = this.meterProvider.getMeter(instrumentationScope)\n const name = this.prefixMetric ? `${this.serviceName}_${metricName}` : metricName\n\n if (!isValidMetricName(name)) {\n return\n }\n\n const createInstrument = () => {\n switch (type) {\n case MetricInstrumentType.Counter:\n return meter.createCounter(name, options)\n case MetricInstrumentType.UpDownCounter:\n return meter.createUpDownCounter(name, options)\n case MetricInstrumentType.Histogram: {\n if ('boundaries' in options) {\n this.addView({\n instrumentName: name,\n aggregation: new ExplicitBucketHistogramAggregation(options.boundaries, true),\n })\n }\n return meter.createHistogram(name, options)\n }\n }\n }\n\n // Lazy instantiate the instrument so we don't create it if we don't need to\n this.metrics.set(metricName, (firstValue: number, firstLabels?: MetricAttributes) => {\n const instrument = createInstrument()\n const record = (value: number, labels?: MetricAttributes) => {\n const [finalValue, finalLabels] = this.notifyRecordListeners(\n metricName,\n value,\n // ensures an new object is created so we don't mutate the original\n {...labels},\n )\n if ('record' in instrument) {\n instrument.record(finalValue, finalLabels)\n } else {\n instrument.add(finalValue, finalLabels)\n }\n // We flush metrics after every record - we do not await as we fire & forget.\n this.meterProvider.forceFlush({})\n }\n record(firstValue, firstLabels)\n this.metrics.set(metricName, record)\n })\n }\n\n register(metrics: MetricsConfig) {\n Object.entries(metrics).forEach(([metricName, options]) => {\n this.registerMetric(metricName, options)\n })\n }\n\n addOnRecord(onRecord: OnRecordCallback): () => void {\n this.recordListeners.add(onRecord)\n return () => {\n this.recordListeners.delete(onRecord)\n }\n }\n\n removeOnRecord(onRecord: OnRecordCallback): void {\n this.recordListeners.delete(onRecord)\n }\n\n shutdown(): Promise<void> {\n this.metrics.clear()\n this.recordListeners.clear()\n return this.meterProvider.shutdown()\n }\n\n protected notifyRecordListeners(metricName: string, initialValue: number, initialLabels: MetricAttributes) {\n return Array.from(this.recordListeners).reduce<MetricRecording>(\n (recordArgs, listener) => {\n return listener(metricName, ...recordArgs) || recordArgs\n },\n [initialValue, initialLabels],\n )\n }\n}\n"]}
1
+ {"version":3,"file":"BaseOtelService.js","sourceRoot":"","sources":["../../../../../../../src/public/node/vendor/otel-js/service/BaseOtelService/BaseOtelService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kCAAkC,EAAE,IAAI,EAAC,MAAM,4BAA4B,CAAA;AAUnF,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAA;AAE3D,MAAM,oBAAoB,GAAG,8BAA8B,CAAA;AA8B3D,MAAM,OAAO,eAAe;IAQ1B;;OAEG;IACH,YAAY,EAAC,WAAW,EAAE,YAAY,GAAG,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAyB;QAN3F,YAAO,GAAsC,IAAI,GAAG,EAAE,CAAA;QACtD,oBAAe,GAAG,IAAI,GAAG,EAAoB,CAAA;QAM9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9C,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAE9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,QAAQ;YAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAExC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAElC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,OAAO,CAAC,WAAwB;QAC9B,0EAA0E;QAC1E,mEAAmE;QACnE,CAAC;QAAC,IAAI,CAAC,aAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,KAAa,EAAE,MAAyB;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,CAAC,WAAW,wCAAwC,UAAU,0CAA0C,CACxH,CAAA;QACH,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,cAAc,CAAC,UAAkB,EAAE,EAAC,IAAI,EAAE,GAAG,OAAO,EAAmB;QACrE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAA;QAEjF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,oBAAoB,CAAC,OAAO;oBAC/B,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC3C,KAAK,oBAAoB,CAAC,aAAa;oBACrC,OAAO,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACjD,KAAK,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpC,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,CAAC,OAAO,CAAC;4BACX,cAAc,EAAE,IAAI;4BACpB,WAAW,EAAE,IAAI,kCAAkC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;yBAC9E,CAAC,CAAA;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,4EAA4E;QAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,UAAkB,EAAE,WAA8B,EAAE,EAAE;YAClF,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAA;YACrC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,MAAyB,EAAE,EAAE;gBAC1D,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAC1D,UAAU,EACV,KAAK;gBACL,mEAAmE;gBACnE,EAAC,GAAG,MAAM,EAAC,CACZ,CAAA;gBACD,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;oBAC3B,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;gBAC5C,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;gBACzC,CAAC;gBACD,6EAA6E;gBAC7E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACnC,CAAC,CAAA;YACD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE;YACxD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,WAAW,CAAC,QAA0B;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC,CAAA;IACH,CAAC;IAED,cAAc,CAAC,QAA0B;QACvC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAA;IACtC,CAAC;IAES,qBAAqB,CAAC,UAAkB,EAAE,YAAoB,EAAE,aAA+B;QACvG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAC5C,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YACvB,OAAO,QAAQ,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,IAAI,UAAU,CAAA;QAC1D,CAAC,EACD,CAAC,YAAY,EAAE,aAAa,CAAC,CAC9B,CAAA;IACH,CAAC;CACF","sourcesContent":["import type {MetricAttributes} from '@opentelemetry/api'\nimport type {MeterProvider, ViewOptions} from '@opentelemetry/sdk-metrics'\nimport {ExplicitBucketHistogramAggregation, View} from '@opentelemetry/sdk-metrics'\n\nimport type {\n MetricDescriptor,\n MetricRecording,\n MetricsConfig,\n OnRecordCallback,\n OtelService,\n RecordMetricFunction,\n} from '../types.js'\nimport {MetricInstrumentType} from '../types.js'\nimport {isValidMetricName} from '../../utils/validators.js'\n\nconst instrumentationScope = 'opentelemetry-js-shopify-web'\n\nexport interface BaseOtelServiceOptions {\n /**\n * Service name is a unique name for an application/service.\n */\n serviceName: string\n\n /**\n * If this is set to true then the service name is prefixed to every metric.\n */\n prefixMetric?: boolean\n\n /**\n * Metrics to register on startup.\n */\n metrics?: MetricsConfig\n\n /**\n * Called when a metric is recorded. `addOnRecord` can also be used to add\n * listeners anytime.\n */\n onRecord?: OnRecordCallback\n\n /**\n * Override the default meter provider.\n */\n meterProvider?: MeterProvider\n}\n\nexport class BaseOtelService implements OtelService {\n readonly serviceName: string\n readonly prefixMetric: boolean\n\n protected readonly meterProvider: MeterProvider\n protected readonly metrics: Map<string, RecordMetricFunction> = new Map()\n protected readonly recordListeners = new Set<OnRecordCallback>()\n\n /**\n * Bootstraps an Otel exporter which can send Otel metrics to a dedicated Shopify supported collector endpoint.\n */\n constructor({serviceName, prefixMetric = false, metrics = {}, onRecord, meterProvider}: BaseOtelServiceOptions) {\n if (!serviceName) {\n throw new Error('Service name is required.')\n }\n this.serviceName = serviceName\n\n this.prefixMetric = prefixMetric\n if (onRecord) this.addOnRecord(onRecord)\n\n if (!meterProvider) {\n throw new Error('MeterProvider is required.')\n }\n this.meterProvider = meterProvider\n\n this.register(metrics)\n }\n\n getMeterProvider(): MeterProvider {\n return this.meterProvider\n }\n\n addView(viewOptions: ViewOptions) {\n // The API to register view is not yet exposed. We need to use the private\n // property to register a new view after the initial instantiation.\n ;(this.meterProvider as any)._sharedState?.viewRegistry?.addView?.(new View(viewOptions))\n }\n\n record(metricName: string, value: number, labels?: MetricAttributes): void {\n const recordMetric = this.metrics.get(metricName)\n if (!recordMetric) {\n throw new Error(\n `Service ${this.serviceName} has no metrics registered for name: ${metricName}. Can't record value for unknown metric.`,\n )\n }\n recordMetric(value, labels)\n }\n\n registerMetric(metricName: string, {type, ...options}: MetricDescriptor): void {\n if (this.metrics.has(metricName)) {\n return\n }\n const meter = this.meterProvider.getMeter(instrumentationScope)\n const name = this.prefixMetric ? `${this.serviceName}_${metricName}` : metricName\n\n if (!isValidMetricName(name)) {\n return\n }\n\n const createInstrument = () => {\n switch (type) {\n case MetricInstrumentType.Counter:\n return meter.createCounter(name, options)\n case MetricInstrumentType.UpDownCounter:\n return meter.createUpDownCounter(name, options)\n case MetricInstrumentType.Histogram: {\n if ('boundaries' in options) {\n this.addView({\n instrumentName: name,\n aggregation: new ExplicitBucketHistogramAggregation(options.boundaries, true),\n })\n }\n return meter.createHistogram(name, options)\n }\n }\n }\n\n // Lazy instantiate the instrument so we don't create it if we don't need to\n this.metrics.set(metricName, (firstValue: number, firstLabels?: MetricAttributes) => {\n const instrument = createInstrument()\n const record = (value: number, labels?: MetricAttributes) => {\n const [finalValue, finalLabels] = this.notifyRecordListeners(\n metricName,\n value,\n // ensures an new object is created so we don't mutate the original\n {...labels},\n )\n if ('record' in instrument) {\n instrument.record(finalValue, finalLabels)\n } else {\n instrument.add(finalValue, finalLabels)\n }\n // We flush metrics after every record - we do not await as we fire & forget.\n this.meterProvider.forceFlush({})\n }\n record(firstValue, firstLabels)\n this.metrics.set(metricName, record)\n })\n }\n\n register(metrics: MetricsConfig) {\n Object.entries(metrics).forEach(([metricName, options]) => {\n this.registerMetric(metricName, options)\n })\n }\n\n addOnRecord(onRecord: OnRecordCallback): () => void {\n this.recordListeners.add(onRecord)\n return () => {\n this.recordListeners.delete(onRecord)\n }\n }\n\n removeOnRecord(onRecord: OnRecordCallback): void {\n this.recordListeners.delete(onRecord)\n }\n\n shutdown(): Promise<void> {\n this.metrics.clear()\n this.recordListeners.clear()\n return this.meterProvider.shutdown()\n }\n\n protected notifyRecordListeners(metricName: string, initialValue: number, initialLabels: MetricAttributes) {\n return Array.from(this.recordListeners).reduce<MetricRecording>(\n (recordArgs, listener) => {\n return listener(metricName, ...recordArgs) || recordArgs\n },\n [initialValue, initialLabels],\n )\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultMeterProvider.js","sourceRoot":"","sources":["../../../../../../../src/public/node/vendor/otel-js/service/DefaultOtelService/DefaultMeterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,2CAA2C,CAAA;AACnF,OAAO,EAAC,kBAAkB,EAA4B,MAAM,2CAA2C,CAAA;AACvG,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAC,sBAAsB,EAAE,qBAAqB,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAA;AACvG,OAAO,EAAC,0BAA0B,EAAC,MAAM,qCAAqC,CAAA;AAa9E,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,YAAY,EAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAA8B;QAC9F,KAAK,CAAC;YACJ,QAAQ,EAAE,IAAI,QAAQ,CAAC;gBACrB,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,WAAW;aACvD,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,IAAI,GAA8B;YACtC,mEAAmE;YACnE,eAAe;YACf,GAAG,EAAE,YAAY;YACjB,qBAAqB,EAAE,sBAAsB,CAAC,KAAK;SACpD,CAAA;QAED,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;SAClB;QAED,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAI,CAAC,eAAe,CAClB,IAAI,yBAAyB,CAAC;YAC5B,QAAQ;YACR,aAAa;SACd,CAAC,CACH,CAAA;QAED,wEAAwE;QACxE,IAAI,GAAG,KAAK,KAAK,EAAE;YACjB,IAAI,CAAC,eAAe,CAClB,IAAI,yBAAyB,CAAC;gBAC5B,QAAQ,EAAE,IAAI,qBAAqB,EAAE;gBACrC,aAAa;aACd,CAAC,CACH,CAAA;SACF;IACH,CAAC;CACF","sourcesContent":["import {InstantaneousMetricReader} from '../../export/InstantaneousMetricReader.js'\nimport {OTLPMetricExporter, OTLPMetricExporterOptions} from '@opentelemetry/exporter-metrics-otlp-http'\nimport {Resource} from '@opentelemetry/resources'\nimport {AggregationTemporality, ConsoleMetricExporter, MeterProvider} from '@opentelemetry/sdk-metrics'\nimport {SemanticResourceAttributes} from '@opentelemetry/semantic-conventions'\n\nexport type Environment = 'production' | 'staging' | 'local'\n\ninterface DefaultMeterProviderOptions {\n serviceName: string\n env: string\n throttleLimit: number\n useXhr: boolean\n // CLI addition\n otelEndpoint: string\n}\n\nexport class DefaultMeterProvider extends MeterProvider {\n constructor({serviceName, env, throttleLimit, useXhr, otelEndpoint}: DefaultMeterProviderOptions) {\n super({\n resource: new Resource({\n [SemanticResourceAttributes.SERVICE_NAME]: serviceName,\n }),\n })\n\n const opts: OTLPMetricExporterOptions = {\n // url: OTEL_ENDPOINTS[env as Environment] || OTEL_ENDPOINTS.local,\n // CLI addition\n url: otelEndpoint,\n temporalityPreference: AggregationTemporality.DELTA,\n }\n\n if (useXhr) {\n opts.headers = {}\n }\n\n const exporter = new OTLPMetricExporter(opts)\n\n this.addMetricReader(\n new InstantaneousMetricReader({\n exporter,\n throttleLimit,\n }),\n )\n\n // Add a console exporter to see what we are sending in dev environments\n if (env === 'dev') {\n this.addMetricReader(\n new InstantaneousMetricReader({\n exporter: new ConsoleMetricExporter(),\n throttleLimit,\n }),\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"DefaultMeterProvider.js","sourceRoot":"","sources":["../../../../../../../src/public/node/vendor/otel-js/service/DefaultOtelService/DefaultMeterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,2CAA2C,CAAA;AACnF,OAAO,EAAC,kBAAkB,EAA4B,MAAM,2CAA2C,CAAA;AACvG,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAC,sBAAsB,EAAE,qBAAqB,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAA;AACvG,OAAO,EAAC,0BAA0B,EAAC,MAAM,qCAAqC,CAAA;AAa9E,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,YAAY,EAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAA8B;QAC9F,KAAK,CAAC;YACJ,QAAQ,EAAE,IAAI,QAAQ,CAAC;gBACrB,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,WAAW;aACvD,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,IAAI,GAA8B;YACtC,mEAAmE;YACnE,eAAe;YACf,GAAG,EAAE,YAAY;YACjB,qBAAqB,EAAE,sBAAsB,CAAC,KAAK;SACpD,CAAA;QAED,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAI,CAAC,eAAe,CAClB,IAAI,yBAAyB,CAAC;YAC5B,QAAQ;YACR,aAAa;SACd,CAAC,CACH,CAAA;QAED,wEAAwE;QACxE,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAClB,IAAI,yBAAyB,CAAC;gBAC5B,QAAQ,EAAE,IAAI,qBAAqB,EAAE;gBACrC,aAAa;aACd,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import {InstantaneousMetricReader} from '../../export/InstantaneousMetricReader.js'\nimport {OTLPMetricExporter, OTLPMetricExporterOptions} from '@opentelemetry/exporter-metrics-otlp-http'\nimport {Resource} from '@opentelemetry/resources'\nimport {AggregationTemporality, ConsoleMetricExporter, MeterProvider} from '@opentelemetry/sdk-metrics'\nimport {SemanticResourceAttributes} from '@opentelemetry/semantic-conventions'\n\nexport type Environment = 'production' | 'staging' | 'local'\n\ninterface DefaultMeterProviderOptions {\n serviceName: string\n env: string\n throttleLimit: number\n useXhr: boolean\n // CLI addition\n otelEndpoint: string\n}\n\nexport class DefaultMeterProvider extends MeterProvider {\n constructor({serviceName, env, throttleLimit, useXhr, otelEndpoint}: DefaultMeterProviderOptions) {\n super({\n resource: new Resource({\n [SemanticResourceAttributes.SERVICE_NAME]: serviceName,\n }),\n })\n\n const opts: OTLPMetricExporterOptions = {\n // url: OTEL_ENDPOINTS[env as Environment] || OTEL_ENDPOINTS.local,\n // CLI addition\n url: otelEndpoint,\n temporalityPreference: AggregationTemporality.DELTA,\n }\n\n if (useXhr) {\n opts.headers = {}\n }\n\n const exporter = new OTLPMetricExporter(opts)\n\n this.addMetricReader(\n new InstantaneousMetricReader({\n exporter,\n throttleLimit,\n }),\n )\n\n // Add a console exporter to see what we are sending in dev environments\n if (env === 'dev') {\n this.addMetricReader(\n new InstantaneousMetricReader({\n exporter: new ConsoleMetricExporter(),\n throttleLimit,\n }),\n )\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/utils/throttle.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,QAAQ,CACtB,IAAO,EACP,IAAY,EACZ,EAAC,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAqB,EAAE;IAEvD,IAAI,QAA8B,CAAA;IAClC,IAAI,MAAqB,CAAA;IACzB,IAAI,OAAY,CAAA;IAChB,IAAI,OAAO,GAAyC,IAAI,CAAA;IACxD,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,SAAS,KAAK;QACZ,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7C,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,QAAQ,EAAE;YACZ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;SACvC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAED,OAAO,UAAqB,GAAG,IAAmB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,KAAK;YAAE,QAAQ,GAAG,GAAG,CAAA;QAElD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAA;QACzC,6EAA6E;QAC7E,OAAO,GAAG,IAAI,CAAA;QACd,QAAQ,GAAG,IAAI,CAAA;QACf,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,EAAE;YACtC,IAAI,OAAO,EAAE;gBACX,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,OAAO,GAAG,IAAI,CAAA;aACf;YACD,QAAQ,GAAG,GAAG,CAAA;YACd,IAAI,QAAQ,EAAE;gBACZ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;aACvC;YACD,OAAO,GAAG,IAAI,CAAA;YACd,QAAQ,GAAG,IAAI,CAAA;SAChB;aAAM,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,KAAK,EAAE;YACzC,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;SACvC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC","sourcesContent":["type ThrottledFunction<T extends (...args: any) => any> = (...args: Parameters<T>) => ReturnType<T>\n\ninterface ThrottleOptions {\n leading?: boolean\n trailing?: boolean\n}\n\nexport function throttle<T extends (...args: any) => any>(\n func: T,\n wait: number,\n {leading = true, trailing = true}: ThrottleOptions = {},\n): ThrottledFunction<T> {\n let lastArgs: Parameters<T> | null\n let result: ReturnType<T>\n let context: any\n let timeout: ReturnType<typeof setTimeout> | null = null\n let previous = 0\n\n function later() {\n previous = leading === false ? 0 : Date.now()\n timeout = null\n if (lastArgs) {\n result = func.apply(context, lastArgs)\n }\n context = null\n lastArgs = null\n }\n\n return function (this: any, ...args: Parameters<T>): ReturnType<T> {\n const now = Date.now()\n if (!previous && leading === false) previous = now\n\n const remaining = wait - (now - previous)\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n context = this\n lastArgs = args\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n previous = now\n if (lastArgs) {\n result = func.apply(context, lastArgs)\n }\n context = null\n lastArgs = null\n } else if (!timeout && trailing !== false) {\n timeout = setTimeout(later, remaining)\n }\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/utils/throttle.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,QAAQ,CACtB,IAAO,EACP,IAAY,EACZ,EAAC,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAqB,EAAE;IAEvD,IAAI,QAA8B,CAAA;IAClC,IAAI,MAAqB,CAAA;IACzB,IAAI,OAAY,CAAA;IAChB,IAAI,OAAO,GAAyC,IAAI,CAAA;IACxD,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,SAAS,KAAK;QACZ,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7C,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAED,OAAO,UAAqB,GAAG,IAAmB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,KAAK;YAAE,QAAQ,GAAG,GAAG,CAAA;QAElD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAA;QACzC,6EAA6E;QAC7E,OAAO,GAAG,IAAI,CAAA;QACd,QAAQ,GAAG,IAAI,CAAA;QACf,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,EAAE,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,QAAQ,GAAG,GAAG,CAAA;YACd,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YACxC,CAAC;YACD,OAAO,GAAG,IAAI,CAAA;YACd,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1C,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC","sourcesContent":["type ThrottledFunction<T extends (...args: any) => any> = (...args: Parameters<T>) => ReturnType<T>\n\ninterface ThrottleOptions {\n leading?: boolean\n trailing?: boolean\n}\n\nexport function throttle<T extends (...args: any) => any>(\n func: T,\n wait: number,\n {leading = true, trailing = true}: ThrottleOptions = {},\n): ThrottledFunction<T> {\n let lastArgs: Parameters<T> | null\n let result: ReturnType<T>\n let context: any\n let timeout: ReturnType<typeof setTimeout> | null = null\n let previous = 0\n\n function later() {\n previous = leading === false ? 0 : Date.now()\n timeout = null\n if (lastArgs) {\n result = func.apply(context, lastArgs)\n }\n context = null\n lastArgs = null\n }\n\n return function (this: any, ...args: Parameters<T>): ReturnType<T> {\n const now = Date.now()\n if (!previous && leading === false) previous = now\n\n const remaining = wait - (now - previous)\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n context = this\n lastArgs = args\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n previous = now\n if (lastArgs) {\n result = func.apply(context, lastArgs)\n }\n context = null\n lastArgs = null\n } else if (!timeout && trailing !== false) {\n timeout = setTimeout(later, remaining)\n }\n return result\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/utils/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAEvC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAE/D,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAChC,IAAI,CAAC,IAAI,CACP,eAAe,KAAK;gGACsE,EAC1F,WAAW,CACZ,CAAA;QACD,OAAO,KAAK,CAAA;KACb;IAED,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import {diag} from '@opentelemetry/api'\n\nconst validMetricRegex = new RegExp('[^a-zA-Z_][^a-zA-Z0-9_]*')\n\nexport function isValidMetricName(value: string): boolean {\n if (validMetricRegex.test(value)) {\n diag.warn(\n `Metric name ${value} contains invalid characters and will be dropped.\n Service Names and metric names must conform to the following regex %c[a-zA-Z_][a-zA-Z0-9_]*`,\n 'color:red',\n )\n return false\n }\n\n return true\n}\n"]}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/public/node/vendor/otel-js/utils/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAEvC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAE/D,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CACP,eAAe,KAAK;gGACsE,EAC1F,WAAW,CACZ,CAAA;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import {diag} from '@opentelemetry/api'\n\nconst validMetricRegex = new RegExp('[^a-zA-Z_][^a-zA-Z0-9_]*')\n\nexport function isValidMetricName(value: string): boolean {\n if (validMetricRegex.test(value)) {\n diag.warn(\n `Metric name ${value} contains invalid characters and will be dropped.\n Service Names and metric names must conform to the following regex %c[a-zA-Z_][a-zA-Z0-9_]*`,\n 'color:red',\n )\n return false\n }\n\n return true\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/public/node/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAC,GAAG,EAAE,SAAS,EAAC,CAAC,CAAA;QACrF,OAAO,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnD,qDAAqD;KACtD;IAAC,MAAM;QACN,OAAO,SAAS,CAAA;KACjB;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI;QACF,MAAM,GAAG,GAAG,EAAC,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAC,GAAG,EAAC,CAAC,CAAA;QAClE,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;YACzC,OAAO,OAAO,CAAA;SACf;QACD,OAAO,SAAS,CAAA;QAChB,qDAAqD;KACtD;IAAC,MAAM;QACN,OAAO,SAAS,CAAA;KACjB;AACH,CAAC","sourcesContent":["import {versionSatisfies} from '../node/node-package-manager.js'\nimport {captureOutput} from '../node/system.js'\n\n/**\n * Returns the version of the local dependency of the CLI if it's installed in the provided directory.\n *\n * @param directory - Path of the project to look for the dependency.\n * @returns The CLI version or undefined if the dependency is not installed.\n */\nexport async function localCLIVersion(directory: string): Promise<string | undefined> {\n try {\n const output = await captureOutput('npm', ['list', '@shopify/cli'], {cwd: directory})\n return output.match(/@shopify\\/cli@([\\w.-]*)/)?.[1]\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n\n/**\n * Returns the version of the globally installed CLI, only if it's greater than 3.59.0 (when the global CLI was introduced).\n *\n * @returns The version of the CLI if it is globally installed or undefined.\n */\nexport async function globalCLIVersion(): Promise<string | undefined> {\n try {\n const env = {...process.env, SHOPIFY_CLI_NO_ANALYTICS: '1'}\n const version = await captureOutput('shopify', ['version'], {env})\n if (versionSatisfies(version, `>=3.59.0`)) {\n return version\n }\n return undefined\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/public/node/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAC,GAAG,EAAE,SAAS,EAAC,CAAC,CAAA;QACrF,OAAO,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnD,qDAAqD;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAC,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAC,GAAG,EAAC,CAAC,CAAA;QAClE,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,OAAO,SAAS,CAAA;QAChB,qDAAqD;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC","sourcesContent":["import {versionSatisfies} from '../node/node-package-manager.js'\nimport {captureOutput} from '../node/system.js'\n\n/**\n * Returns the version of the local dependency of the CLI if it's installed in the provided directory.\n *\n * @param directory - Path of the project to look for the dependency.\n * @returns The CLI version or undefined if the dependency is not installed.\n */\nexport async function localCLIVersion(directory: string): Promise<string | undefined> {\n try {\n const output = await captureOutput('npm', ['list', '@shopify/cli'], {cwd: directory})\n return output.match(/@shopify\\/cli@([\\w.-]*)/)?.[1]\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n\n/**\n * Returns the version of the globally installed CLI, only if it's greater than 3.59.0 (when the global CLI was introduced).\n *\n * @returns The version of the CLI if it is globally installed or undefined.\n */\nexport async function globalCLIVersion(): Promise<string | undefined> {\n try {\n const env = {...process.env, SHOPIFY_CLI_NO_ANALYTICS: '1'}\n const version = await captureOutput('shopify', ['version'], {env})\n if (versionSatisfies(version, `>=3.59.0`)) {\n return version\n }\n return undefined\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../../src/public/node/vscode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,SAAS,CAAA;AACnE,OAAO,EAAC,QAAQ,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AACvC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAEnF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAI,GAAG,GAAG,EAAE;IACzC,WAAW,CACT,aAAa,CAAA,6BAA6B,WAAW,CAAC,IAAI,CACxD,IAAI,CACL,oDAAoD,CACtD,CAAA;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAA;IAE/E,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,KAAK,CAAA;KACb;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,SAAiB,EAAE,eAAyB;IACzF,WAAW,CAAC,aAAa,CAAA,2CAA2C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;EAC/F,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;GAChC,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAA;IAErE,IAAI,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC7B,IAAI,sBAAsB,GAAG,EAAC,eAAe,EAAE,EAAE,EAAC,CAAA;QAClD,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE;YACpC,MAAM,sBAAsB,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAA;YAC7D,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;SAC5D;QACD,MAAM,iBAAiB,GAAG;YACxB,GAAG,sBAAsB;YACzB,eAAe,EAAE,CAAC,GAAG,sBAAsB,CAAC,eAAe,EAAE,GAAG,eAAe,CAAC;SACjF,CAAA;QACD,MAAM,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;KAC5E;AACH,CAAC","sourcesContent":["import {fileExists, writeFile, readFile, findPathUp} from './fs.js'\nimport {joinPath, cwd} from './path.js'\nimport {outputContent, outputToken, outputDebug} from '../../public/node/output.js'\n\n/**\n * Check if user editor is VS Code.\n *\n * @param root - Root directory to start searching for .vscode directory.\n * @returns True if user editor is VS Code.\n */\nexport async function isVSCode(root = cwd()): Promise<boolean> {\n outputDebug(\n outputContent`Checking if the directory ${outputToken.path(\n root,\n )} or any of its parents has a .vscode directory... `,\n )\n const config = await findPathUp(joinPath(root, '.vscode'), {type: 'directory'})\n\n if (!config) {\n return false\n }\n\n return fileExists(config)\n}\n\n/**\n * Add VSCode extension recommendations.\n *\n * @param directory - Directory that contains the .vscode folder.\n * @param recommendations - List of VSCode extensions to recommend.\n */\nexport async function addRecommendedExtensions(directory: string, recommendations: string[]): Promise<void> {\n outputDebug(outputContent`Adding VSCode recommended extensions at ${outputToken.path(directory)}:\n${outputToken.json(recommendations)}\n `)\n const extensionsPath = joinPath(directory, '.vscode/extensions.json')\n\n if (await isVSCode(directory)) {\n let originalExtensionsJson = {recommendations: []}\n if (await fileExists(extensionsPath)) {\n const originalExtensionsFile = await readFile(extensionsPath)\n originalExtensionsJson = JSON.parse(originalExtensionsFile)\n }\n const newExtensionsJson = {\n ...originalExtensionsJson,\n recommendations: [...originalExtensionsJson.recommendations, ...recommendations],\n }\n await writeFile(extensionsPath, JSON.stringify(newExtensionsJson, null, 2))\n }\n}\n"]}
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../../src/public/node/vscode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,SAAS,CAAA;AACnE,OAAO,EAAC,QAAQ,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AACvC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAEnF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAI,GAAG,GAAG,EAAE;IACzC,WAAW,CACT,aAAa,CAAA,6BAA6B,WAAW,CAAC,IAAI,CACxD,IAAI,CACL,oDAAoD,CACtD,CAAA;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAA;IAE/E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,SAAiB,EAAE,eAAyB;IACzF,WAAW,CAAC,aAAa,CAAA,2CAA2C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;EAC/F,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;GAChC,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAA;IAErE,IAAI,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,IAAI,sBAAsB,GAAG,EAAC,eAAe,EAAE,EAAE,EAAC,CAAA;QAClD,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,MAAM,sBAAsB,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAA;YAC7D,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,iBAAiB,GAAG;YACxB,GAAG,sBAAsB;YACzB,eAAe,EAAE,CAAC,GAAG,sBAAsB,CAAC,eAAe,EAAE,GAAG,eAAe,CAAC;SACjF,CAAA;QACD,MAAM,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC","sourcesContent":["import {fileExists, writeFile, readFile, findPathUp} from './fs.js'\nimport {joinPath, cwd} from './path.js'\nimport {outputContent, outputToken, outputDebug} from '../../public/node/output.js'\n\n/**\n * Check if user editor is VS Code.\n *\n * @param root - Root directory to start searching for .vscode directory.\n * @returns True if user editor is VS Code.\n */\nexport async function isVSCode(root = cwd()): Promise<boolean> {\n outputDebug(\n outputContent`Checking if the directory ${outputToken.path(\n root,\n )} or any of its parents has a .vscode directory... `,\n )\n const config = await findPathUp(joinPath(root, '.vscode'), {type: 'directory'})\n\n if (!config) {\n return false\n }\n\n return fileExists(config)\n}\n\n/**\n * Add VSCode extension recommendations.\n *\n * @param directory - Directory that contains the .vscode folder.\n * @param recommendations - List of VSCode extensions to recommend.\n */\nexport async function addRecommendedExtensions(directory: string, recommendations: string[]): Promise<void> {\n outputDebug(outputContent`Adding VSCode recommended extensions at ${outputToken.path(directory)}:\n${outputToken.json(recommendations)}\n `)\n const extensionsPath = joinPath(directory, '.vscode/extensions.json')\n\n if (await isVSCode(directory)) {\n let originalExtensionsJson = {recommendations: []}\n if (await fileExists(extensionsPath)) {\n const originalExtensionsFile = await readFile(extensionsPath)\n originalExtensionsJson = JSON.parse(originalExtensionsFile)\n }\n const newExtensionsJson = {\n ...originalExtensionsJson,\n recommendations: [...originalExtensionsJson.recommendations, ...recommendations],\n }\n await writeFile(extensionsPath, JSON.stringify(newExtensionsJson, null, 2))\n }\n}\n"]}