@shopify/shop-minis-cli 0.0.0-snapshot.20240712123821
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +78 -0
- package/LICENSE +21 -0
- package/README.md +8 -0
- package/README_INTERNAL.md +115 -0
- package/build/commands/cancel-submission/cancel-submission.d.ts +1 -0
- package/build/commands/cancel-submission/cancel-submission.js +57 -0
- package/build/commands/cancel-submission/cancel-submission.js.map +1 -0
- package/build/commands/cancel-submission/index.d.ts +2 -0
- package/build/commands/cancel-submission/index.js +18 -0
- package/build/commands/cancel-submission/index.js.map +1 -0
- package/build/commands/cancel-submission/types.d.ts +3 -0
- package/build/commands/cancel-submission/types.js +2 -0
- package/build/commands/cancel-submission/types.js.map +1 -0
- package/build/commands/check-submission/index.d.ts +2 -0
- package/build/commands/check-submission/index.js +55 -0
- package/build/commands/check-submission/index.js.map +1 -0
- package/build/commands/check-submission/types.d.ts +3 -0
- package/build/commands/check-submission/types.js +2 -0
- package/build/commands/check-submission/types.js.map +1 -0
- package/build/commands/codemod/index.d.ts +3 -0
- package/build/commands/codemod/index.js +47 -0
- package/build/commands/codemod/index.js.map +1 -0
- package/build/commands/codemod/releases/index.d.ts +7 -0
- package/build/commands/codemod/releases/index.js +89 -0
- package/build/commands/codemod/releases/index.js.map +1 -0
- package/build/commands/codemod/releases/types.d.ts +9 -0
- package/build/commands/codemod/releases/types.js +2 -0
- package/build/commands/codemod/releases/types.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-100.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-100.js +50 -0
- package/build/commands/codemod/releases/v0-0-100.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-103.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-103.js +43 -0
- package/build/commands/codemod/releases/v0-0-103.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-105.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-105.js +59 -0
- package/build/commands/codemod/releases/v0-0-105.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-106.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-106.js +32 -0
- package/build/commands/codemod/releases/v0-0-106.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-114.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-114.js +48 -0
- package/build/commands/codemod/releases/v0-0-114.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-115.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-115.js +50 -0
- package/build/commands/codemod/releases/v0-0-115.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-121.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-121.js +74 -0
- package/build/commands/codemod/releases/v0-0-121.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-42/index.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-42/index.js +46 -0
- package/build/commands/codemod/releases/v0-0-42/index.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.d.ts +7 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.js +83 -0
- package/build/commands/codemod/releases/v0-0-42/reset-files.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-43.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-43.js +32 -0
- package/build/commands/codemod/releases/v0-0-43.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-44.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-44.js +214 -0
- package/build/commands/codemod/releases/v0-0-44.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-45.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-45.js +23 -0
- package/build/commands/codemod/releases/v0-0-45.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-50.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-50.js +34 -0
- package/build/commands/codemod/releases/v0-0-50.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-54.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-54.js +70 -0
- package/build/commands/codemod/releases/v0-0-54.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-56.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-56.js +48 -0
- package/build/commands/codemod/releases/v0-0-56.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-57.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-57.js +41 -0
- package/build/commands/codemod/releases/v0-0-57.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-58.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-58.js +68 -0
- package/build/commands/codemod/releases/v0-0-58.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-61.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-61.js +30 -0
- package/build/commands/codemod/releases/v0-0-61.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-63.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-63.js +42 -0
- package/build/commands/codemod/releases/v0-0-63.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-64.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-64.js +47 -0
- package/build/commands/codemod/releases/v0-0-64.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-75.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-75.js +30 -0
- package/build/commands/codemod/releases/v0-0-75.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-76.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-76.js +32 -0
- package/build/commands/codemod/releases/v0-0-76.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-77.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-77.js +39 -0
- package/build/commands/codemod/releases/v0-0-77.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-79.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-79.js +35 -0
- package/build/commands/codemod/releases/v0-0-79.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-84.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-84.js +41 -0
- package/build/commands/codemod/releases/v0-0-84.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-85.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-85.js +60 -0
- package/build/commands/codemod/releases/v0-0-85.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-89.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-89.js +60 -0
- package/build/commands/codemod/releases/v0-0-89.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-91/index.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-91/index.js +38 -0
- package/build/commands/codemod/releases/v0-0-91/index.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-91/replace-dev-wrapper.d.ts +5 -0
- package/build/commands/codemod/releases/v0-0-91/replace-dev-wrapper.js +45 -0
- package/build/commands/codemod/releases/v0-0-91/replace-dev-wrapper.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-91/replace-safe-area-imports.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-91/replace-safe-area-imports.js +97 -0
- package/build/commands/codemod/releases/v0-0-91/replace-safe-area-imports.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-92.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-92.js +38 -0
- package/build/commands/codemod/releases/v0-0-92.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-after.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-after.js +15 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-after.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-before.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-before.js +13 -0
- package/build/commands/codemod/releases/v0-0-93/blank/App-before.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/index.d.ts +6 -0
- package/build/commands/codemod/releases/v0-0-93/index.js +7 -0
- package/build/commands/codemod/releases/v0-0-93/index.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-after.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-after.js +53 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-after.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-before.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-before.js +43 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-posts/App-before.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-after.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-after.js +49 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-after.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-before.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-before.js +42 -0
- package/build/commands/codemod/releases/v0-0-93/shoppable-videos/App-before.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-93.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-93.js +48 -0
- package/build/commands/codemod/releases/v0-0-93.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-97/index.d.ts +3 -0
- package/build/commands/codemod/releases/v0-0-97/index.js +20 -0
- package/build/commands/codemod/releases/v0-0-97/index.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-97/migrate-to-new-theme.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-97/migrate-to-new-theme.js +47 -0
- package/build/commands/codemod/releases/v0-0-97/migrate-to-new-theme.js.map +1 -0
- package/build/commands/codemod/releases/v0-0-97/remove-theme-from-config.d.ts +1 -0
- package/build/commands/codemod/releases/v0-0-97/remove-theme-from-config.js +105 -0
- package/build/commands/codemod/releases/v0-0-97/remove-theme-from-config.js.map +1 -0
- package/build/commands/config.d.ts +14 -0
- package/build/commands/config.js +42 -0
- package/build/commands/config.js.map +1 -0
- package/build/commands/create-extension/constants.d.ts +24 -0
- package/build/commands/create-extension/constants.js +68 -0
- package/build/commands/create-extension/constants.js.map +1 -0
- package/build/commands/create-extension/index.d.ts +2 -0
- package/build/commands/create-extension/index.js +122 -0
- package/build/commands/create-extension/index.js.map +1 -0
- package/build/commands/create-extension/types.d.ts +11 -0
- package/build/commands/create-extension/types.js +7 -0
- package/build/commands/create-extension/types.js.map +1 -0
- package/build/commands/create-extension/utils/add-target-to-config.d.ts +2 -0
- package/build/commands/create-extension/utils/add-target-to-config.js +56 -0
- package/build/commands/create-extension/utils/add-target-to-config.js.map +1 -0
- package/build/commands/create-extension/utils/create-from-template.d.ts +3 -0
- package/build/commands/create-extension/utils/create-from-template.js +46 -0
- package/build/commands/create-extension/utils/create-from-template.js.map +1 -0
- package/build/commands/create-mini/index.d.ts +2 -0
- package/build/commands/create-mini/index.js +137 -0
- package/build/commands/create-mini/index.js.map +1 -0
- package/build/commands/create-mini/utils/template-app.d.ts +1 -0
- package/build/commands/create-mini/utils/template-app.js +47 -0
- package/build/commands/create-mini/utils/template-app.js.map +1 -0
- package/build/commands/dev/index.d.ts +12 -0
- package/build/commands/dev/index.js +75 -0
- package/build/commands/dev/index.js.map +1 -0
- package/build/commands/dev/utils/android.d.ts +18 -0
- package/build/commands/dev/utils/android.js +153 -0
- package/build/commands/dev/utils/android.js.map +1 -0
- package/build/commands/dev/utils/binaries.d.ts +5 -0
- package/build/commands/dev/utils/binaries.js +17 -0
- package/build/commands/dev/utils/binaries.js.map +1 -0
- package/build/commands/dev/utils/build-type.d.ts +2 -0
- package/build/commands/dev/utils/build-type.js +14 -0
- package/build/commands/dev/utils/build-type.js.map +1 -0
- package/build/commands/dev/utils/deeplink.d.ts +14 -0
- package/build/commands/dev/utils/deeplink.js +58 -0
- package/build/commands/dev/utils/deeplink.js.map +1 -0
- package/build/commands/dev/utils/interactive-terminal.d.ts +25 -0
- package/build/commands/dev/utils/interactive-terminal.js +210 -0
- package/build/commands/dev/utils/interactive-terminal.js.map +1 -0
- package/build/commands/dev/utils/metro/metro-config.d.ts +2 -0
- package/build/commands/dev/utils/metro/metro-config.js +27 -0
- package/build/commands/dev/utils/metro/metro-config.js.map +1 -0
- package/build/commands/dev/utils/metro/metro-minis-module-resolver.d.ts +6 -0
- package/build/commands/dev/utils/metro/metro-minis-module-resolver.js +11 -0
- package/build/commands/dev/utils/metro/metro-minis-module-resolver.js.map +1 -0
- package/build/commands/dev/utils/metro/metro-reporter.d.ts +13 -0
- package/build/commands/dev/utils/metro/metro-reporter.js +27 -0
- package/build/commands/dev/utils/metro/metro-reporter.js.map +1 -0
- package/build/commands/dev/utils/metro/metro-server-middleware.d.ts +10 -0
- package/build/commands/dev/utils/metro/metro-server-middleware.js +74 -0
- package/build/commands/dev/utils/metro/metro-server-middleware.js.map +1 -0
- package/build/commands/dev/utils/metro/metro-server.d.ts +6 -0
- package/build/commands/dev/utils/metro/metro-server.js +26 -0
- package/build/commands/dev/utils/metro/metro-server.js.map +1 -0
- package/build/commands/dev/utils/network.d.ts +20 -0
- package/build/commands/dev/utils/network.js +129 -0
- package/build/commands/dev/utils/network.js.map +1 -0
- package/build/commands/dev/utils/platform.d.ts +18 -0
- package/build/commands/dev/utils/platform.js +41 -0
- package/build/commands/dev/utils/platform.js.map +1 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.d.ts +1 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.js +12 -0
- package/build/commands/dev/utils/prompt-binary-upgrade.js.map +1 -0
- package/build/commands/dev/utils/qr-code.d.ts +1 -0
- package/build/commands/dev/utils/qr-code.js +5 -0
- package/build/commands/dev/utils/qr-code.js.map +1 -0
- package/build/commands/dev/utils/react-native-version.d.ts +4 -0
- package/build/commands/dev/utils/react-native-version.js +23 -0
- package/build/commands/dev/utils/react-native-version.js.map +1 -0
- package/build/commands/dev/utils/simulator.d.ts +22 -0
- package/build/commands/dev/utils/simulator.js +95 -0
- package/build/commands/dev/utils/simulator.js.map +1 -0
- package/build/commands/dev/utils/start-app/config.d.ts +5 -0
- package/build/commands/dev/utils/start-app/config.js +25 -0
- package/build/commands/dev/utils/start-app/config.js.map +1 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.d.ts +2 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.js +94 -0
- package/build/commands/dev/utils/start-app/start-app-with-options.js.map +1 -0
- package/build/commands/dev/utils/start-app/start-app.d.ts +2 -0
- package/build/commands/dev/utils/start-app/start-app.js +10 -0
- package/build/commands/dev/utils/start-app/start-app.js.map +1 -0
- package/build/commands/dev/utils/start-app/types.d.ts +20 -0
- package/build/commands/dev/utils/start-app/types.js +2 -0
- package/build/commands/dev/utils/start-app/types.js.map +1 -0
- package/build/commands/dev/utils/types.d.ts +24 -0
- package/build/commands/dev/utils/types.js +7 -0
- package/build/commands/dev/utils/types.js.map +1 -0
- package/build/commands/dev/utils/version.d.ts +64 -0
- package/build/commands/dev/utils/version.js +101 -0
- package/build/commands/dev/utils/version.js.map +1 -0
- package/build/commands/dev/utils/with-retries.d.ts +4 -0
- package/build/commands/dev/utils/with-retries.js +24 -0
- package/build/commands/dev/utils/with-retries.js.map +1 -0
- package/build/commands/doctor/index.d.ts +6 -0
- package/build/commands/doctor/index.js +21 -0
- package/build/commands/doctor/index.js.map +1 -0
- package/build/commands/doctor/utils/diagnose-dependencies.d.ts +7 -0
- package/build/commands/doctor/utils/diagnose-dependencies.js +113 -0
- package/build/commands/doctor/utils/diagnose-dependencies.js.map +1 -0
- package/build/commands/features/index.d.ts +6 -0
- package/build/commands/features/index.js +135 -0
- package/build/commands/features/index.js.map +1 -0
- package/build/commands/generate-graphql-types/index.d.ts +6 -0
- package/build/commands/generate-graphql-types/index.js +33 -0
- package/build/commands/generate-graphql-types/index.js.map +1 -0
- package/build/commands/generate-graphql-types/utils/generate-graphql-types.d.ts +2 -0
- package/build/commands/generate-graphql-types/utils/generate-graphql-types.js +101 -0
- package/build/commands/generate-graphql-types/utils/generate-graphql-types.js.map +1 -0
- package/build/commands/info/index.d.ts +3 -0
- package/build/commands/info/index.js +42 -0
- package/build/commands/info/index.js.map +1 -0
- package/build/commands/setup/index.d.ts +2 -0
- package/build/commands/setup/index.js +82 -0
- package/build/commands/setup/index.js.map +1 -0
- package/build/commands/submit/config.d.ts +9 -0
- package/build/commands/submit/config.js +18 -0
- package/build/commands/submit/config.js.map +1 -0
- package/build/commands/submit/errors.d.ts +19 -0
- package/build/commands/submit/errors.js +87 -0
- package/build/commands/submit/errors.js.map +1 -0
- package/build/commands/submit/gcs.d.ts +6 -0
- package/build/commands/submit/gcs.js +21 -0
- package/build/commands/submit/gcs.js.map +1 -0
- package/build/commands/submit/index.d.ts +2 -0
- package/build/commands/submit/index.js +25 -0
- package/build/commands/submit/index.js.map +1 -0
- package/build/commands/submit/submit.d.ts +5 -0
- package/build/commands/submit/submit.js +225 -0
- package/build/commands/submit/submit.js.map +1 -0
- package/build/commands/submit/tasks.d.ts +37 -0
- package/build/commands/submit/tasks.js +91 -0
- package/build/commands/submit/tasks.js.map +1 -0
- package/build/commands/submit/types.d.ts +14 -0
- package/build/commands/submit/types.js +2 -0
- package/build/commands/submit/types.js.map +1 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.d.ts +1 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.js +58 -0
- package/build/commands/submit/utils/assert-core-dependencies-version.js.map +1 -0
- package/build/commands/submit/utils/request-entry-point-params.d.ts +1 -0
- package/build/commands/submit/utils/request-entry-point-params.js +41 -0
- package/build/commands/submit/utils/request-entry-point-params.js.map +1 -0
- package/build/commands/submit/validation.d.ts +1 -0
- package/build/commands/submit/validation.js +11 -0
- package/build/commands/submit/validation.js.map +1 -0
- package/build/commands/upgrade/index.d.ts +13 -0
- package/build/commands/upgrade/index.js +65 -0
- package/build/commands/upgrade/index.js.map +1 -0
- package/build/commands/upgrade/utils/clear-metro-cache.d.ts +1 -0
- package/build/commands/upgrade/utils/clear-metro-cache.js +12 -0
- package/build/commands/upgrade/utils/clear-metro-cache.js.map +1 -0
- package/build/commands/upgrade/utils/cli.d.ts +1 -0
- package/build/commands/upgrade/utils/cli.js +15 -0
- package/build/commands/upgrade/utils/cli.js.map +1 -0
- package/build/commands/validate-manifest/index.d.ts +3 -0
- package/build/commands/validate-manifest/index.js +29 -0
- package/build/commands/validate-manifest/index.js.map +1 -0
- package/build/constants/extensions.d.ts +26 -0
- package/build/constants/extensions.js +31 -0
- package/build/constants/extensions.js.map +1 -0
- package/build/data/accept-invitation.d.ts +4 -0
- package/build/data/accept-invitation.js +16 -0
- package/build/data/accept-invitation.js.map +1 -0
- package/build/data/cancel-submission.d.ts +22 -0
- package/build/data/cancel-submission.js +26 -0
- package/build/data/cancel-submission.js.map +1 -0
- package/build/data/create-submission.d.ts +20 -0
- package/build/data/create-submission.js +27 -0
- package/build/data/create-submission.js.map +1 -0
- package/build/data/create-upload.d.ts +21 -0
- package/build/data/create-upload.js +40 -0
- package/build/data/create-upload.js.map +1 -0
- package/build/data/get-submissions.d.ts +27 -0
- package/build/data/get-submissions.js +33 -0
- package/build/data/get-submissions.js.map +1 -0
- package/build/data/gql-client.d.ts +8 -0
- package/build/data/gql-client.js +9 -0
- package/build/data/gql-client.js.map +1 -0
- package/build/data/mini.d.ts +5 -0
- package/build/data/mini.js +14 -0
- package/build/data/mini.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.d.ts +13 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.js +7 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/fragment-masking.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.d.ts +75 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js +24 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/gql.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.d.ts +1745 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js +1072 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/graphql.js.map +1 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.d.ts +2 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.js +3 -0
- package/build/data/types/autogenerated/shop-minis-admin-api/index.js.map +1 -0
- package/build/dev-panel/asset-manifest.json +13 -0
- package/build/dev-panel/checkmark.svg +3 -0
- package/build/dev-panel/chevron.svg +3 -0
- package/build/dev-panel/copy.svg +4 -0
- package/build/dev-panel/get-started.svg +3 -0
- package/build/dev-panel/how-to.svg +3 -0
- package/build/dev-panel/index.html +1 -0
- package/build/dev-panel/references.svg +3 -0
- package/build/dev-panel/robots.txt +3 -0
- package/build/dev-panel/static/css/main.7f1ee407.css +2 -0
- package/build/dev-panel/static/css/main.7f1ee407.css.map +1 -0
- package/build/dev-panel/static/js/main.6625699c.js +3 -0
- package/build/dev-panel/static/js/main.6625699c.js.LICENSE.txt +41 -0
- package/build/dev-panel/static/js/main.6625699c.js.map +1 -0
- package/build/dev-panel/topics.svg +3 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +47 -0
- package/build/index.js.map +1 -0
- package/build/schemas/manifest.schema.json +214 -0
- package/build/templates-index.d.ts +6 -0
- package/build/templates-index.js +19 -0
- package/build/templates-index.js.map +1 -0
- package/build/utils/archive.d.ts +30 -0
- package/build/utils/archive.js +38 -0
- package/build/utils/archive.js.map +1 -0
- package/build/utils/codemod.d.ts +86 -0
- package/build/utils/codemod.js +161 -0
- package/build/utils/codemod.js.map +1 -0
- package/build/utils/common-tasks.d.ts +1 -0
- package/build/utils/common-tasks.js +49 -0
- package/build/utils/common-tasks.js.map +1 -0
- package/build/utils/development-params.d.ts +13 -0
- package/build/utils/development-params.js +44 -0
- package/build/utils/development-params.js.map +1 -0
- package/build/utils/exec-async-child-process.d.ts +18 -0
- package/build/utils/exec-async-child-process.js +41 -0
- package/build/utils/exec-async-child-process.js.map +1 -0
- package/build/utils/extensions.d.ts +13 -0
- package/build/utils/extensions.js +87 -0
- package/build/utils/extensions.js.map +1 -0
- package/build/utils/file.d.ts +1 -0
- package/build/utils/file.js +7 -0
- package/build/utils/file.js.map +1 -0
- package/build/utils/minis-manifest.d.ts +8 -0
- package/build/utils/minis-manifest.js +67 -0
- package/build/utils/minis-manifest.js.map +1 -0
- package/build/utils/package-manager.d.ts +42 -0
- package/build/utils/package-manager.js +107 -0
- package/build/utils/package-manager.js.map +1 -0
- package/build/utils/patch-package.d.ts +5 -0
- package/build/utils/patch-package.js +76 -0
- package/build/utils/patch-package.js.map +1 -0
- package/build/utils/path.d.ts +1 -0
- package/build/utils/path.js +8 -0
- package/build/utils/path.js.map +1 -0
- package/build/utils/replace-strings-in-template.d.ts +1 -0
- package/build/utils/replace-strings-in-template.js +15 -0
- package/build/utils/replace-strings-in-template.js.map +1 -0
- package/build/utils/semver.d.ts +1 -0
- package/build/utils/semver.js +19 -0
- package/build/utils/semver.js.map +1 -0
- package/build/utils/wrap-with-loading-indicator.d.ts +9 -0
- package/build/utils/wrap-with-loading-indicator.js +16 -0
- package/build/utils/wrap-with-loading-indicator.js.map +1 -0
- package/package.json +102 -0
- package/scripts/graphql-codegen.ts +23 -0
- package/scripts/test-template.ts +66 -0
- package/shipit.snapshot.yml +9 -0
- package/templates/__template_blank/src/App.tsx +24 -0
- package/templates/__template_blank/src/index.tsx +9 -0
- package/templates/__template_common/.eslintignore +1 -0
- package/templates/__template_common/.eslintrc.js +3 -0
- package/templates/__template_common/.graphqlrc.js +1 -0
- package/templates/__template_common/.prettierrc.json +8 -0
- package/templates/__template_common/assets.d.ts +14 -0
- package/templates/__template_common/babel.config.js +5 -0
- package/templates/__template_common/gitignore +5 -0
- package/templates/__template_common/index.tsx +7 -0
- package/templates/__template_common/metro.config.js +5 -0
- package/templates/__template_common/package.json +38 -0
- package/templates/__template_common/src/manifest.json +6 -0
- package/templates/__template_common/tsconfig.json +41 -0
- package/templates/__template_shoppable_posts/src/App.tsx +37 -0
- package/templates/__template_shoppable_posts/src/index.tsx +9 -0
- package/templates/__template_shoppable_videos/src/App.tsx +34 -0
- package/templates/__template_shoppable_videos/src/index.tsx +9 -0
- package/templates/extensions/components/__template_blank/render.tsx +11 -0
- package/templates/extensions/components/__template_bundle-collection/render.tsx +31 -0
- package/templates/extensions/components/__template_bundle-collection/seed.ts +26 -0
- package/templates/extensions/components/__template_bundle-selector/render.tsx +51 -0
- package/templates/extensions/components/__template_bundle-selector/seed.ts +72 -0
- package/templates/extensions/components/__template_default-card/render.tsx +24 -0
- package/templates/extensions/components/__template_default-card/seed.ts +10 -0
- package/templates/extensions/components/__template_image-collection/render.tsx +17 -0
- package/templates/extensions/components/__template_image-collection/seed.ts +70 -0
- package/templates/extensions/components/__template_link/render.tsx +17 -0
- package/templates/extensions/components/__template_link/seed.ts +5 -0
- package/templates/extensions/components/__template_product-offer-card/render.tsx +17 -0
- package/templates/extensions/components/__template_product-offer-card/seed.ts +44 -0
- package/templates/extensions/components/__template_video-collection/render.tsx +17 -0
- package/templates/extensions/components/__template_video-collection/seed.ts +37 -0
- package/templates/extensions/queries/__template_product-page/input.graphql +6 -0
- package/templates/extensions/queries/__template_product-page/input.graphql.d.ts +26 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { packageManagerFromUserAgent } from '@shopify/cli-kit/node/node-package-manager';
|
|
5
|
+
import { Command, Option } from 'commander';
|
|
6
|
+
import prompts from 'prompts';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import _ from 'lodash';
|
|
9
|
+
import { execAsync } from '../../utils/exec-async-child-process.js';
|
|
10
|
+
import { wrapWithLoadingIndicator } from '../../utils/wrap-with-loading-indicator.js';
|
|
11
|
+
import { TEMPLATES, TEMPLATE_VALUES } from '../../templates-index.js';
|
|
12
|
+
import { getRunBinCommand } from '../../utils/package-manager.js';
|
|
13
|
+
import { generateMiniFromTemplate } from './utils/template-app.js';
|
|
14
|
+
function logSuccess(miniName, outputDir, miniDir, useYarn) {
|
|
15
|
+
console.log(`\n \nShop Mini`, chalk.green.bold(`${miniName}`), 'created. Next steps:\n');
|
|
16
|
+
const currentPath = `${process.cwd()}/`;
|
|
17
|
+
const cdAbsolutePath = path.resolve(outputDir, miniDir);
|
|
18
|
+
const cdPath = cdAbsolutePath.startsWith(currentPath)
|
|
19
|
+
? cdAbsolutePath.replace(currentPath, '')
|
|
20
|
+
: cdAbsolutePath;
|
|
21
|
+
console.log(chalk.cyan.bold(` cd ${cdPath}`));
|
|
22
|
+
console.log(chalk.dim(' Open your Shop Mini’s directory\n'));
|
|
23
|
+
console.log(chalk.cyan.bold(` ↪ ${useYarn ? 'yarn' : 'npm'} start`));
|
|
24
|
+
console.log(chalk.dim(' Run Shop Mini, and open it on an iOS or Android device.\n'));
|
|
25
|
+
console.log(chalk.cyan(' ↪ ') +
|
|
26
|
+
chalk.cyan.underline.bold('https://shop.app/minis/docs/'));
|
|
27
|
+
console.log(chalk.dim(' Shop Minis documentation.\n \n'));
|
|
28
|
+
}
|
|
29
|
+
async function promptUser(miniNameArg, templateNameArg) {
|
|
30
|
+
const questions = [];
|
|
31
|
+
if (!miniNameArg) {
|
|
32
|
+
questions.push({
|
|
33
|
+
type: 'text',
|
|
34
|
+
name: 'miniName',
|
|
35
|
+
validate: value => {
|
|
36
|
+
if (!value) {
|
|
37
|
+
return 'The Mini name is required';
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
},
|
|
41
|
+
message: `Give your Shop Mini a name. ${chalk.dim('You can change it later.\n')}`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (!templateNameArg || !TEMPLATE_VALUES.includes(templateNameArg)) {
|
|
45
|
+
// TODO: add some logs if the template name was wrong and explain why we are still prompting for selection
|
|
46
|
+
questions.push({
|
|
47
|
+
type: 'select',
|
|
48
|
+
name: 'templateName',
|
|
49
|
+
message: 'Select a template',
|
|
50
|
+
choices: TEMPLATES,
|
|
51
|
+
initial: 0,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (!questions.length) {
|
|
55
|
+
return { miniName: miniNameArg, templateName: templateNameArg };
|
|
56
|
+
}
|
|
57
|
+
const onCancel = () => {
|
|
58
|
+
console.log('\nShop Mini creation stopped at your request. Name not saved.\n');
|
|
59
|
+
process.exit(0);
|
|
60
|
+
};
|
|
61
|
+
const response = await prompts.prompt(questions, { onCancel });
|
|
62
|
+
return {
|
|
63
|
+
miniName: miniNameArg || response.miniName,
|
|
64
|
+
templateName: response.templateName,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function loadCommand(parentProgram) {
|
|
68
|
+
const command = new Command()
|
|
69
|
+
.name('create')
|
|
70
|
+
.description('Create a new Shop Mini')
|
|
71
|
+
.argument('[mini name]', 'the name of your mini')
|
|
72
|
+
// TODO: Remove `--useYarn` https://github.com/Shopify/shop-minis-cli/issues/190
|
|
73
|
+
.option('--useYarn', '(deprecated) Use yarn as package manager instead of npm')
|
|
74
|
+
.option('--alphaMinisRuntime', 'use the alpha tag of @shopify/shop-minis-runtime. uses the latest tag by default')
|
|
75
|
+
.option('--alphaMinisSDK', 'use the alpha tag of @shopify/shop-minis-platform-sdk. uses the latest tag by default')
|
|
76
|
+
.addOption(new Option('--template <template name>', 'name of the template to use').choices(TEMPLATE_VALUES))
|
|
77
|
+
.option('--output-dir <path>', 'Specify an output directory for the mini')
|
|
78
|
+
.action(async (miniNameArg, options = {}) => {
|
|
79
|
+
const currentDirectoryName = path.basename(process.cwd());
|
|
80
|
+
// The default has to be out of the 'shop-minis-cli' directory because the cli is using
|
|
81
|
+
// modules but the mini is a commonjs app. Running a cjs project inside a modules project causes various issues.
|
|
82
|
+
const defaultOutputDir = currentDirectoryName === 'shop-minis-cli' ? '..' : '.';
|
|
83
|
+
const outputDir = options.outputDir ?? defaultOutputDir;
|
|
84
|
+
if (!existsSync(outputDir)) {
|
|
85
|
+
console.error(`Unable to create a mini at the specified output dir of ${outputDir}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const { miniName, templateName } = await promptUser(miniNameArg, options.template);
|
|
90
|
+
const miniDir = _.kebabCase(miniName);
|
|
91
|
+
await wrapWithLoadingIndicator(generateMiniFromTemplate(miniName, templateName, outputDir, miniDir, options.alphaMinisRuntime, options.alphaMinisSDK), {
|
|
92
|
+
loadingMessage: 'Fetching template...',
|
|
93
|
+
successMessage: 'Template fetched',
|
|
94
|
+
});
|
|
95
|
+
const useYarn = packageManagerFromUserAgent() === 'yarn';
|
|
96
|
+
// Yarn is ignoring the `resolutions` when you install
|
|
97
|
+
// via `yarn create @shopify/shop-mini` so use `--ignore-engines` to work around the
|
|
98
|
+
// problem with `@apollo/federation`
|
|
99
|
+
// npm fails to install for a similar reason on node 15 but runs fine so we will
|
|
100
|
+
// use `--force` to get everything installed
|
|
101
|
+
const installCmd = useYarn ? 'yarn --ignore-engines' : 'npm i --force';
|
|
102
|
+
const miniDirPath = path.resolve(outputDir, miniDir);
|
|
103
|
+
await execAsync({
|
|
104
|
+
cmd: installCmd,
|
|
105
|
+
loadingMessage: 'Installing dependencies. This might take a minute...',
|
|
106
|
+
successMessage: 'Dependencies installed',
|
|
107
|
+
}, { cwd: miniDirPath });
|
|
108
|
+
execSync(`${useYarn ? 'yarn' : 'npx'} patch-package --patch-dir node_modules/@shopify/shop-minis-runtime/patches`, { cwd: miniDirPath });
|
|
109
|
+
const createExtensionCommand = await getRunBinCommand('shop-minis create-extension');
|
|
110
|
+
const silentCreateExtensionCommand = await getRunBinCommand('shop-minis create-extension --silent');
|
|
111
|
+
const onCancel = async () => {
|
|
112
|
+
console.log(`\nTo create an extension in the future, run ${createExtensionCommand}\n`);
|
|
113
|
+
logSuccess(miniName, outputDir, miniDir, useYarn);
|
|
114
|
+
process.exit(0);
|
|
115
|
+
};
|
|
116
|
+
const { createExtension } = await prompts.prompt({
|
|
117
|
+
type: 'confirm',
|
|
118
|
+
name: 'createExtension',
|
|
119
|
+
message: 'Would you like to create an extension for this Shop Mini?',
|
|
120
|
+
}, { onCancel });
|
|
121
|
+
if (!createExtension) {
|
|
122
|
+
onCancel();
|
|
123
|
+
}
|
|
124
|
+
execSync(silentCreateExtensionCommand, {
|
|
125
|
+
cwd: miniDirPath,
|
|
126
|
+
stdio: 'inherit',
|
|
127
|
+
});
|
|
128
|
+
logSuccess(miniName, outputDir, miniDir, useYarn);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
console.error(err?.message || err);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
parentProgram.addCommand(command);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/create-mini/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateMiniFromTemplate(name: string, templateName: string, outputDir: string | undefined, miniDir: string, useAlphaRuntime?: boolean, useAlphaSDK?: boolean): Promise<void>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import url from 'node:url';
|
|
2
|
+
import { mkdtemp } from 'node:fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { copy, move } from 'fs-extra';
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { CLI_VERSION } from '../../config.js';
|
|
8
|
+
import { replaceStringsInTemplate } from '../../../utils/replace-strings-in-template.js';
|
|
9
|
+
import { execAsync } from '../../../utils/exec-async-child-process.js';
|
|
10
|
+
import { getPackageAlphaVersionCommand, getPackageLatestVersionCommand, } from '../../../utils/package-manager.js';
|
|
11
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
12
|
+
export async function generateMiniFromTemplate(name, templateName, outputDir = '.', miniDir, useAlphaRuntime, useAlphaSDK) {
|
|
13
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), `${miniDir}-`));
|
|
14
|
+
const miniTemplateDir = await path.join(__dirname, '../../../../templates', `__template_${templateName}`);
|
|
15
|
+
const miniDestinationDir = path.resolve(process.cwd(), outputDir, miniDir);
|
|
16
|
+
const stringsToReplace = {
|
|
17
|
+
__MINI_APP_NAME__: name,
|
|
18
|
+
__MINI_APP_NAME_PASCAL_CASE__: _.startCase(miniDir).replace(/ /g, ''),
|
|
19
|
+
__MINI_APP_NAME_KEBAB_CASE__: _.kebabCase(name),
|
|
20
|
+
__SHOP_MINIS_CLI_VERSION__: CLI_VERSION,
|
|
21
|
+
__SHOP_MINIS_RUNTIME_VERSION__: await fetchPackageVersion('@shopify/shop-minis-runtime', '0.0.100', useAlphaRuntime),
|
|
22
|
+
__SHOP_MINIS_SDK_VERSION__: await fetchPackageVersion('@shopify/shop-minis-platform-sdk', '0.1.95', useAlphaSDK),
|
|
23
|
+
__SHOP_MINIS_UI_EXTENSIONS_VERSION__: await fetchPackageVersion('@shopify/shop-minis-ui-extensions', '0.0.4'),
|
|
24
|
+
};
|
|
25
|
+
const commonTemplateFilesDir = await path.join(__dirname, '../../../../templates', '__template_common');
|
|
26
|
+
await copy(commonTemplateFilesDir, tmpDir);
|
|
27
|
+
await copy(miniTemplateDir, tmpDir);
|
|
28
|
+
await move(path.join(tmpDir, 'gitignore'), path.join(tmpDir, '.gitignore'));
|
|
29
|
+
await replaceStringsInTemplate(tmpDir, stringsToReplace);
|
|
30
|
+
await copy(tmpDir, miniDestinationDir);
|
|
31
|
+
}
|
|
32
|
+
async function fetchPackageVersion(packageName, fallbackVersion, alpha = false) {
|
|
33
|
+
try {
|
|
34
|
+
const commandToFetchVersion = alpha
|
|
35
|
+
? getPackageAlphaVersionCommand
|
|
36
|
+
: getPackageLatestVersionCommand;
|
|
37
|
+
const { stdout: latestPackageVersionStdout } = await execAsync({
|
|
38
|
+
cmd: await commandToFetchVersion(packageName),
|
|
39
|
+
});
|
|
40
|
+
return latestPackageVersionStdout[0];
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// this fallback shouldn't be needed but we do our best to make sure the mini creation doesn't fail
|
|
44
|
+
return fallbackVersion;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=template-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-app.js","sourceRoot":"","sources":["../../../../src/commands/create-mini/utils/template-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { BuildType } from './utils/types.js';
|
|
3
|
+
export interface DevCommandOptions {
|
|
4
|
+
resetCache?: boolean;
|
|
5
|
+
host: string;
|
|
6
|
+
buildType: BuildType;
|
|
7
|
+
snapshotVersion?: string;
|
|
8
|
+
extensionTargets?: string[];
|
|
9
|
+
extensionTarget?: string;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadCommand(parentProgram: Command): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import internalIp from 'internal-ip';
|
|
4
|
+
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
5
|
+
import { handler as handleError } from '@shopify/cli-kit/node/error';
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { getMiniManifest } from '../../utils/minis-manifest.js';
|
|
8
|
+
import { maybeApplyPatches } from '../../utils/patch-package.js';
|
|
9
|
+
import { getInvalidDependencies } from '../doctor/utils/diagnose-dependencies.js';
|
|
10
|
+
import { getRunBinCommand } from '../../utils/package-manager.js';
|
|
11
|
+
import { getMiniExtensions } from '../../utils/extensions.js';
|
|
12
|
+
import { generateGraphQLTypes } from '../generate-graphql-types/utils/generate-graphql-types.js';
|
|
13
|
+
import { InteractiveTerminal } from './utils/interactive-terminal.js';
|
|
14
|
+
import { runMetro } from './utils/metro/metro-server.js';
|
|
15
|
+
import { BuildType } from './utils/types.js';
|
|
16
|
+
export async function loadCommand(parentProgram) {
|
|
17
|
+
const ip = await internalIp.v4();
|
|
18
|
+
const command = new Command()
|
|
19
|
+
.name('dev')
|
|
20
|
+
.description('Start a local dev server for the mini app')
|
|
21
|
+
.option('--reset-cache', 'reset the dev server cache')
|
|
22
|
+
.option('--host <host>', "packager's host", ip)
|
|
23
|
+
.option('--verbose', 'print debugging messages') // compatible with cli-kit
|
|
24
|
+
.option('--extension-target <extensionTarget>', '(deprecated) use --extension-targets instead')
|
|
25
|
+
.option('--extension-targets <extensionTargets...>', 'specify extension targets to run')
|
|
26
|
+
.addOption(new Option('--build-type <buildType>', 'build type')
|
|
27
|
+
.choices(Object.values(BuildType))
|
|
28
|
+
.default(BuildType.Release))
|
|
29
|
+
.addOption(new Option('--snapshot-version <version>', 'specify the snapshot version to use. (example: 2.100.0+544)').implies({ buildType: 'snapshot' }))
|
|
30
|
+
.action(async (initialOptions) => {
|
|
31
|
+
try {
|
|
32
|
+
outputDebug(`Dev command args ${JSON.stringify(initialOptions)}`);
|
|
33
|
+
const options = await initialiseOptions(initialOptions);
|
|
34
|
+
const { handle: miniHandle, name: miniName } = getMiniManifest();
|
|
35
|
+
outputDebug(`Running mini "${miniName}"`);
|
|
36
|
+
await validateDependencies();
|
|
37
|
+
maybeApplyPatches(); // we need to patch react-native pressability system to avoid duplicated react tags
|
|
38
|
+
await runMetro(options);
|
|
39
|
+
console.log('Local development environment for', chalk.green(miniName), 'is running...');
|
|
40
|
+
const interactiveTerminal = new InteractiveTerminal(options, miniHandle ?? _.kebabCase(miniName) // newly created minis do not have a handle, we fallback to the name instead.
|
|
41
|
+
);
|
|
42
|
+
interactiveTerminal.start();
|
|
43
|
+
generateGraphQLTypes({ verbose: options.verbose, watch: true });
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
delete err.stack; // delete the stack to avoid a verbose error in case the manifest file does not exist
|
|
47
|
+
await handleError(err);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
parentProgram.addCommand(command);
|
|
51
|
+
}
|
|
52
|
+
async function initialiseOptions(options) {
|
|
53
|
+
if (options.snapshotVersion && options.buildType !== 'snapshot') {
|
|
54
|
+
console.log(chalk.bold.yellow('\n⚠️ --snapshot-version was specified but --build-type is not `snapshot`. --snapshot-version will be ignored.\n'));
|
|
55
|
+
}
|
|
56
|
+
else if (options.buildType === 'snapshot' && !options.snapshotVersion) {
|
|
57
|
+
console.log(chalk.bold.yellow('\n⚠️ --build-type was set to `snapshot` but --snapshot-version was not specified. Fetching the latest available snapshot\n'));
|
|
58
|
+
}
|
|
59
|
+
let extensionTargets = options.extensionTargets;
|
|
60
|
+
if (!options.extensionTargets && options.extensionTarget) {
|
|
61
|
+
console.log(chalk.bold.yellow(`\n⚠️ --extension-target is deprecated, used --extension-targets instead\n`));
|
|
62
|
+
extensionTargets = [options.extensionTarget];
|
|
63
|
+
}
|
|
64
|
+
const extensionsToStart = await getMiniExtensions(extensionTargets);
|
|
65
|
+
outputDebug(`Running extensions ${JSON.stringify(extensionsToStart)}`);
|
|
66
|
+
return { ...options, extensionTargets: extensionsToStart };
|
|
67
|
+
}
|
|
68
|
+
async function validateDependencies() {
|
|
69
|
+
const { areDependenciesInvalid } = getInvalidDependencies();
|
|
70
|
+
if (areDependenciesInvalid) {
|
|
71
|
+
console.warn(chalk.yellow(`\n⚠️ There are some issues with the dependencies of your mini. Run ${chalk.bold(await getRunBinCommand('shop-minis doctor'))} for more details and instructions on how to fix them.`));
|
|
72
|
+
console.warn(chalk.yellow('⚠️ Problems with the dependencies of your mini could be a cause of rejection during the submission process\n'));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface androidDevice {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly description: string;
|
|
4
|
+
readonly type: string;
|
|
5
|
+
readonly isBooted: boolean;
|
|
6
|
+
readonly isAuthorized: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function getDevices(): Promise<androidDevice[]>;
|
|
9
|
+
export declare function getEmulators(): Promise<androidDevice[]>;
|
|
10
|
+
export declare function promptForAndroidDevices(): Promise<androidDevice | null>;
|
|
11
|
+
export declare function maybeLaunchEmulator(emulatorName: string): Promise<string | null>;
|
|
12
|
+
export declare function installShopInEmulator(emulatorId: string, fileName: string): Promise<void>;
|
|
13
|
+
export declare function getInstalledShopVersion(emulatorId: string): Promise<{
|
|
14
|
+
version: string;
|
|
15
|
+
build: string;
|
|
16
|
+
} | null>;
|
|
17
|
+
export declare function connectDevelopmentServer(emulatorId: string): Promise<void>;
|
|
18
|
+
export declare function deeplinkToEmulator(emulatorId: string, originalDeeplink: string): Promise<void>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import child_process from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import prompts from 'prompts';
|
|
5
|
+
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
6
|
+
import { execAsync } from '../../../utils/exec-async-child-process.js';
|
|
7
|
+
import { PATHS, whichAdb, whichEmulator } from '../../config.js';
|
|
8
|
+
import { withRetries } from './with-retries.js';
|
|
9
|
+
export async function getDevices() {
|
|
10
|
+
const { stdout: devicesList } = await execAsync(`${whichAdb()} devices -l`);
|
|
11
|
+
return devicesList
|
|
12
|
+
.slice(1)
|
|
13
|
+
.filter(name => !name.includes('emulator'))
|
|
14
|
+
.map(name => ({
|
|
15
|
+
name: name.split(' ')[0],
|
|
16
|
+
description: `${name.split(' ')[0]} (device)`,
|
|
17
|
+
type: 'device',
|
|
18
|
+
isBooted: true,
|
|
19
|
+
isAuthorized: true,
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
export async function getEmulators() {
|
|
23
|
+
const { stdout: devicesList } = await execAsync(`${whichEmulator()} -list-avds`);
|
|
24
|
+
return devicesList.map(name => ({
|
|
25
|
+
name,
|
|
26
|
+
description: `${name} (emulator)`,
|
|
27
|
+
type: 'emulator',
|
|
28
|
+
isBooted: false,
|
|
29
|
+
isAuthorized: true,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
export async function promptForAndroidDevices() {
|
|
33
|
+
const devices = await getDevices();
|
|
34
|
+
const emulators = await getEmulators();
|
|
35
|
+
const androidDevices = devices.concat(emulators);
|
|
36
|
+
if (!androidDevices.length) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const { value } = await prompts({
|
|
40
|
+
type: 'autocomplete',
|
|
41
|
+
name: 'value',
|
|
42
|
+
limit: 11,
|
|
43
|
+
message: 'Select a device',
|
|
44
|
+
choices: androidDevices.map(item => {
|
|
45
|
+
return {
|
|
46
|
+
title: item.description,
|
|
47
|
+
value: item,
|
|
48
|
+
};
|
|
49
|
+
}),
|
|
50
|
+
suggest: (input, choices) => {
|
|
51
|
+
const regex = new RegExp(input, 'i');
|
|
52
|
+
return choices.filter((choice) => regex.test(choice.title));
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
export async function maybeLaunchEmulator(emulatorName) {
|
|
58
|
+
let emulatorId = await getIdForEmulatorWithName(emulatorName); // if emulatorId is defined the emulator is already running
|
|
59
|
+
if (!emulatorId) {
|
|
60
|
+
emulatorId = await doLaunchEmulator(emulatorName);
|
|
61
|
+
}
|
|
62
|
+
if (emulatorId) {
|
|
63
|
+
await waitForEmulatorToBoot(emulatorId);
|
|
64
|
+
}
|
|
65
|
+
return emulatorId;
|
|
66
|
+
}
|
|
67
|
+
export async function installShopInEmulator(emulatorId, fileName) {
|
|
68
|
+
outputDebug(`Install Shop in Android emulator ${JSON.stringify({ emulatorId, fileName })}`);
|
|
69
|
+
const binaryPath = path.join(PATHS.CACHE_DIR, fileName);
|
|
70
|
+
await execAsync(`${whichAdb()} -s ${emulatorId} install -r -d "${binaryPath}"`);
|
|
71
|
+
}
|
|
72
|
+
export async function getInstalledShopVersion(emulatorId) {
|
|
73
|
+
try {
|
|
74
|
+
const versionName = await execAsync(`${whichAdb()} -s ${emulatorId} shell dumpsys package com.shopify.arrive.internal | grep versionName`);
|
|
75
|
+
const versionCode = await execAsync(`${whichAdb()} -s ${emulatorId} shell dumpsys package com.shopify.arrive.internal | grep versionCode`);
|
|
76
|
+
// stdout: [" versionName=2.86.0"]
|
|
77
|
+
const version = _.last(versionName.stdout[0]?.trim().split('='));
|
|
78
|
+
// stdout: [" versionCode=1680515537 minSdk=21 targetSdk=33"]
|
|
79
|
+
const build = _.last(versionCode.stdout[0]?.trim().split(' ')[0]?.split('='));
|
|
80
|
+
if (version == null || build == null) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
version,
|
|
85
|
+
build,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function connectDevelopmentServer(emulatorId) {
|
|
93
|
+
await execAsync(`${whichAdb()} -s ${emulatorId} reverse tcp:8082 tcp:8082`);
|
|
94
|
+
}
|
|
95
|
+
export async function deeplinkToEmulator(emulatorId, originalDeeplink) {
|
|
96
|
+
let deeplink = originalDeeplink;
|
|
97
|
+
// If we have a querystring we need to modify it to escape ampersands
|
|
98
|
+
// https://stackoverflow.com/a/45323695
|
|
99
|
+
const queryIndex = deeplink.indexOf('?');
|
|
100
|
+
if (queryIndex !== -1) {
|
|
101
|
+
const urlObj = new URL(deeplink);
|
|
102
|
+
const preQueryString = deeplink.substring(0, queryIndex);
|
|
103
|
+
const queryString = Array.from(urlObj.searchParams.entries())
|
|
104
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
105
|
+
.join('\\&');
|
|
106
|
+
deeplink = `${preQueryString}?${queryString}`;
|
|
107
|
+
}
|
|
108
|
+
await execAsync(`${whichAdb()} -s ${emulatorId} shell am start -a android.intent.action.VIEW -d "${deeplink}"`);
|
|
109
|
+
}
|
|
110
|
+
async function getNameForEmulatorWithId(emulatorId) {
|
|
111
|
+
const { stdout } = await execAsync(`${whichAdb()} -s ${emulatorId} emu avd name`);
|
|
112
|
+
return stdout[0];
|
|
113
|
+
}
|
|
114
|
+
async function getIdForEmulatorWithName(emulatorName) {
|
|
115
|
+
const { stdout } = await execAsync(`${whichAdb()} devices`);
|
|
116
|
+
const emulatorIds = stdout.filter(result => result.startsWith('emulator-'));
|
|
117
|
+
for (const emulatorId of emulatorIds) {
|
|
118
|
+
const name = await getNameForEmulatorWithId(emulatorId);
|
|
119
|
+
if (name === emulatorName) {
|
|
120
|
+
return emulatorId;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
async function waitForEmulatorToBoot(emulatorId, timeout = 60 * 2 * 1000 // 2 minutes
|
|
126
|
+
) {
|
|
127
|
+
await execAsync(`${whichAdb()} -s ${emulatorId} wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'`, { timeout });
|
|
128
|
+
}
|
|
129
|
+
function doLaunchEmulator(emulatorName) {
|
|
130
|
+
const emulatorProcess = child_process.spawn(whichEmulator(), [`@${emulatorName}`], {
|
|
131
|
+
stdio: 'ignore',
|
|
132
|
+
detached: true,
|
|
133
|
+
});
|
|
134
|
+
emulatorProcess.unref();
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
withRetries(() => getIdForEmulatorWithName(emulatorName))
|
|
137
|
+
.then(resolve)
|
|
138
|
+
.catch(reject)
|
|
139
|
+
.finally(() => {
|
|
140
|
+
emulatorProcess.removeAllListeners();
|
|
141
|
+
})
|
|
142
|
+
.catch(() => { });
|
|
143
|
+
emulatorProcess.on('error', ({ message }) => {
|
|
144
|
+
reject(new Error(message));
|
|
145
|
+
emulatorProcess.removeAllListeners();
|
|
146
|
+
});
|
|
147
|
+
emulatorProcess.on('exit', () => {
|
|
148
|
+
reject(new Error('Emulator closed before booting up'));
|
|
149
|
+
emulatorProcess.removeAllListeners();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/android.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readdir } from 'node:fs/promises';
|
|
2
|
+
import { PATHS } from '../../config.js';
|
|
3
|
+
import { metadataToBinaryFileName } from './version.js';
|
|
4
|
+
/**
|
|
5
|
+
* Returns a boolean indicating if the binary for the given version and platform is already downloaded in the system
|
|
6
|
+
*/
|
|
7
|
+
export async function isVersionAvailableLocally(version) {
|
|
8
|
+
const localBinariesList = await readdir(PATHS.CACHE_DIR);
|
|
9
|
+
try {
|
|
10
|
+
const fileName = metadataToBinaryFileName(version);
|
|
11
|
+
return localBinariesList.includes(fileName);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=binaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binaries.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/binaries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AAExC,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAA;AAGrC,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAA;AAErD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAuB;IACrE,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACxD,IAAI;QACF,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAElD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC5C;IAAC,MAAM;QACN,OAAO,KAAK,CAAA;KACb;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BuildType } from './types.js';
|
|
2
|
+
export function getBuildTypeForBinaryBuildType(type) {
|
|
3
|
+
switch (type) {
|
|
4
|
+
case 'release':
|
|
5
|
+
return BuildType.Release;
|
|
6
|
+
case 'nightly':
|
|
7
|
+
return BuildType.Nightly;
|
|
8
|
+
case 'snapshot':
|
|
9
|
+
return BuildType.Snapshot;
|
|
10
|
+
default:
|
|
11
|
+
throw new Error(`Invalid build type: ${type}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=build-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-type.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/build-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;AAEpC,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,QAAQ,IAAI,EAAE;QACZ,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC,OAAO,CAAA;QAC1B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC,OAAO,CAAA;QAC1B,KAAK,UAAU;YACb,OAAO,SAAS,CAAC,QAAQ,CAAA;QAC3B;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;KACjD;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DevCommandOptions } from '../index.js';
|
|
2
|
+
export declare function getBundleUrl(host: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Creates deeplinks to remote minis or remote widget
|
|
5
|
+
*
|
|
6
|
+
* Example deeplink for remote mini:
|
|
7
|
+
* arrive://mini/remote/eyJoYW5kbGUiOiJ0ZXN0IiwiYnVuZGxlVXJsIjoiZ29vZ2xlLmNvbSJ9?shop_id=123
|
|
8
|
+
*
|
|
9
|
+
* Example deeplink for remote widget:
|
|
10
|
+
* arrive://mini/remote-extension/eyJoYW5kbGUiOiJ0ZXN0IiwiYnVuZGxlVXJsIjoiZ29vZ2xlLmNvbSJ9?widgetType=product-upsell&widgetLocation=PRODUCT_PAGE
|
|
11
|
+
*
|
|
12
|
+
* In both cases, the base64 encoded payload contains the bundle url and extra information about the remote environment
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDeeplink(miniHandle: string, options: DevCommandOptions, universalLink?: boolean): string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
2
|
+
import { getDevelopmentEntryPointParamsQueryString } from '../../../utils/development-params.js';
|
|
3
|
+
import { getMiniManifest } from '../../../utils/minis-manifest.js';
|
|
4
|
+
import { getReactNativeVersion } from './react-native-version.js';
|
|
5
|
+
export function getBundleUrl(host) {
|
|
6
|
+
return `http://${host}:8082/index.bundle`;
|
|
7
|
+
}
|
|
8
|
+
function getExtensionInputQueryUrl(host, target) {
|
|
9
|
+
return `http://${host}:8082/input-query${target ? `/${target}` : ''}`;
|
|
10
|
+
}
|
|
11
|
+
function getDeeplinkPayload(miniHandle, host, extensionTargets) {
|
|
12
|
+
const bundleUrl = getBundleUrl(host);
|
|
13
|
+
const extensionInputQueryUrl = getExtensionInputQueryUrl(host);
|
|
14
|
+
const extensionInputQueryUrlPrefix = getExtensionInputQueryUrl(host);
|
|
15
|
+
const params = {
|
|
16
|
+
handle: miniHandle,
|
|
17
|
+
bundleUrl,
|
|
18
|
+
/*
|
|
19
|
+
* We used to support only one input query per mini.
|
|
20
|
+
* Now we support one input query per target.
|
|
21
|
+
* TODO: Remove usage of extensionInputQueryUrl in favor of extensionInputQueryUrlPrefix. https://github.com/Shopify/shop-client/issues/41813
|
|
22
|
+
*/
|
|
23
|
+
extensionInputQueryUrl,
|
|
24
|
+
extensionInputQueryUrlPrefix,
|
|
25
|
+
rnVersion: getReactNativeVersion(),
|
|
26
|
+
features: getMiniManifest()?.features ?? undefined,
|
|
27
|
+
};
|
|
28
|
+
if (extensionTargets) {
|
|
29
|
+
params.extensionTargets = extensionTargets;
|
|
30
|
+
params.extensionTarget = extensionTargets[0];
|
|
31
|
+
}
|
|
32
|
+
const stringifiedParams = JSON.stringify(params);
|
|
33
|
+
return Buffer.from(stringifiedParams).toString('base64');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates deeplinks to remote minis or remote widget
|
|
37
|
+
*
|
|
38
|
+
* Example deeplink for remote mini:
|
|
39
|
+
* arrive://mini/remote/eyJoYW5kbGUiOiJ0ZXN0IiwiYnVuZGxlVXJsIjoiZ29vZ2xlLmNvbSJ9?shop_id=123
|
|
40
|
+
*
|
|
41
|
+
* Example deeplink for remote widget:
|
|
42
|
+
* arrive://mini/remote-extension/eyJoYW5kbGUiOiJ0ZXN0IiwiYnVuZGxlVXJsIjoiZ29vZ2xlLmNvbSJ9?widgetType=product-upsell&widgetLocation=PRODUCT_PAGE
|
|
43
|
+
*
|
|
44
|
+
* In both cases, the base64 encoded payload contains the bundle url and extra information about the remote environment
|
|
45
|
+
*/
|
|
46
|
+
export function getDeeplink(miniHandle, options, universalLink = false) {
|
|
47
|
+
const deeplinkParams = getDeeplinkPayload(miniHandle, options.host, options.extensionTargets);
|
|
48
|
+
const developmentParams = getDevelopmentEntryPointParamsQueryString();
|
|
49
|
+
const deeplinkPath = options.extensionTargets?.length
|
|
50
|
+
? '/mini/remote-extension/'
|
|
51
|
+
: '/mini/remote/';
|
|
52
|
+
const deeplink = universalLink
|
|
53
|
+
? `https://shop.app${deeplinkPath}${deeplinkParams}${developmentParams}`
|
|
54
|
+
: `arrive:/${deeplinkPath}${deeplinkParams}${developmentParams}`;
|
|
55
|
+
outputDebug(`Deeplink: ${deeplink}`);
|
|
56
|
+
return deeplink;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=deeplink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deeplink.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/deeplink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAC,yCAAyC,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAA;AAGhE,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAA;AAE/D,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,IAAI,oBAAoB,CAAA;AAC3C,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,MAAe;IAC9D,OAAO,UAAU,IAAI,oBAAoB,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACvE,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,IAAY,EACZ,gBAA2B;IAE3B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,4BAA4B,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAEpE,MAAM,MAAM,GAAkD;QAC5D,MAAM,EAAE,UAAU;QAClB,SAAS;QACT;;;;WAIG;QACH,sBAAsB;QACtB,4BAA4B;QAC5B,SAAS,EAAE,qBAAqB,EAAE;QAClC,QAAQ,EAAE,eAAe,EAAE,EAAE,QAAQ,IAAI,SAAS;KACnD,CAAA;IAED,IAAI,gBAAgB,EAAE;QACpB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAC1C,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAC7C;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,OAA0B,EAC1B,aAAa,GAAG,KAAK;IAErB,MAAM,cAAc,GAAG,kBAAkB,CACvC,UAAU,EACV,OAAO,CAAC,IAAK,EACb,OAAO,CAAC,gBAAgB,CACzB,CAAA;IACD,MAAM,iBAAiB,GAAG,yCAAyC,EAAE,CAAA;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM;QACnD,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,eAAe,CAAA;IAEnB,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,mBAAmB,YAAY,GAAG,cAAc,GAAG,iBAAiB,EAAE;QACxE,CAAC,CAAC,WAAW,YAAY,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAElE,WAAW,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAEpC,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|