@shopify/oxygen-cli 4.6.9-unstable.202501311522.0 → 4.6.9
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/CHANGELOG.md +8 -0
- package/dist/commands/oxygen/deploy.js.map +1 -1
- package/dist/deploy/build-cancel.js.map +1 -1
- package/dist/deploy/build-initiate.js.map +1 -1
- package/dist/deploy/build-project.js.map +1 -1
- package/dist/deploy/deployment-cancel.js.map +1 -1
- package/dist/deploy/deployment-complete.js.map +1 -1
- package/dist/deploy/deployment-initiate.js.map +1 -1
- package/dist/deploy/get-upload-files.js.map +1 -1
- package/dist/deploy/graphql/build-cancel.js.map +1 -1
- package/dist/deploy/graphql/build-initiate.js.map +1 -1
- package/dist/deploy/graphql/deployment-cancel.js.map +1 -1
- package/dist/deploy/graphql/deployment-complete.js.map +1 -1
- package/dist/deploy/graphql/deployment-initiate.js.map +1 -1
- package/dist/deploy/graphql/deployment-verification-details.js.map +1 -1
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/metadata.js +2 -2
- package/dist/deploy/metadata.js.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/deploy/upload-files.js.map +1 -1
- package/dist/deploy/verify-deployment-completed.js.map +1 -1
- package/dist/deploy/verify-deployment.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/oxygen-cli.js.map +1 -1
- package/dist/utils/bugsnag.js +1 -1
- package/dist/utils/bugsnag.js.map +1 -1
- package/dist/utils/metrics-exporter.js.map +1 -1
- package/dist/utils/test-helper.js.map +1 -1
- package/dist/utils/utils.d.ts +1 -1
- package/dist/utils/utils.js +2 -2
- package/dist/utils/utils.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# @shopify/oxygen-cli
|
2
2
|
|
3
|
+
## 4.6.9
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 89c3e63: Update vite from 6.0.11 to 6.1.0
|
8
|
+
- 9a34109: Update oclif from 4.17.25 to 4.17.27
|
9
|
+
|
3
10
|
## 4.6.8
|
4
11
|
|
5
12
|
### Patch Changes
|
@@ -8,6 +15,7 @@
|
|
8
15
|
- 5dd422b: Update oclif from 4.17.19 to 4.17.20
|
9
16
|
- f921837: Update @types/node from 22.10.10 to 22.12.0
|
10
17
|
- cc8faf4: Update oclif from 4.17.20 to 4.17.21
|
18
|
+
- e52c28f: Update oclif from 4.17.21 to 4.17.25
|
11
19
|
|
12
20
|
## 4.6.7
|
13
21
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","file":"deploy.js","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\nimport {VerificationError} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n verificationMaxDuration: Flags.integer({\n char: 'd',\n description:\n 'the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.',\n min: 10,\n max: 300,\n required: false,\n default: deployDefaults.verificationMaxDurationDefault as number,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n skipVerification: Flags.boolean({\n char: 'v',\n description: 'Skip running deployment verification step',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataHydrogenVersion: Flags.string({\n description: 'The Hydrogen version of the deployment from package.json',\n required: false,\n env: 'OXYGEN_METADATA_HYDROGEN_VERSION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n verificationMaxDuration: flags.verificationMaxDuration,\n metadata: {\n description: flags.metadataDescription,\n hydrogenVersion: flags.metadataHydrogenVersion,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n skipVerification: flags.skipVerification,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (!(error instanceof Error)) {\n consoleError(error as string);\n } else if (!(error instanceof VerificationError)) {\n consoleError(error.message);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","file":"deploy.js","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\nimport {VerificationError} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n verificationMaxDuration: Flags.integer({\n char: 'd',\n description:\n 'the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.',\n min: 10,\n max: 300,\n required: false,\n default: deployDefaults.verificationMaxDurationDefault as number,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n skipVerification: Flags.boolean({\n char: 'v',\n description: 'Skip running deployment verification step',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataHydrogenVersion: Flags.string({\n description: 'The Hydrogen version of the deployment from package.json',\n required: false,\n env: 'OXYGEN_METADATA_HYDROGEN_VERSION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n verificationMaxDuration: flags.verificationMaxDuration,\n metadata: {\n description: flags.metadataDescription,\n hydrogenVersion: flags.metadataHydrogenVersion,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n skipVerification: flags.skipVerification,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (!(error instanceof Error)) {\n consoleError(error as string);\n } else if (!(error instanceof VerificationError)) {\n consoleError(error.message);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/build-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,YACpB,OAC8B,EAAA;AAC9B,EAAA,MAAM,EAAC,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/build-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,YACpB,OAC8B,EAAA;AAC9B,EAAA,MAAM,EAAC,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA;AAE1C,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,OAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAiC,MAAM,cAAe,CAAA;AAAA,MAC1D,KAAO,EAAA,gBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA,OACzD;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,WAAA,CAAY,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AAC/C,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,2BAA2B,QAAS,CAAA,WAAA,CAAY,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA;AAAA,OACxE;AAAA;AAEF,IAAW,UAAA,CAAA,CAAA,cAAA,EAAiB,OAAO,CAAA,WAAA,CAAA,EAAe,MAAM,CAAA;AAExD,IAAA,OAAO,QAAS,CAAA,WAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAM,MAAA,KAAA;AAAA;AAEV","file":"build-cancel.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n BuildCancelQuery,\n BuildCancelQueryData,\n BuildCancelResponse,\n} from './graphql/build-cancel.js';\n\ninterface BuildCancelOptions {\n config: DeploymentConfig;\n buildId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function buildCancel(\n options: BuildCancelOptions,\n): Promise<BuildCancelResponse> {\n const {config, buildId, reason, logger} = options;\n\n const variables = {\n buildId,\n reason,\n };\n\n try {\n const response: BuildCancelQueryData = await graphqlRequest({\n query: BuildCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n variables,\n });\n\n if (response.buildCancel.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to cancel build: ${response.buildCancel.userErrors[0]?.message}`,\n );\n }\n outputInfo(`Build with id ${buildId} cancelled.`, logger);\n\n return response.buildCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/build-initiate.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,cACpB,OACgC,EAAA;AAChC,EAAA,MAAM,EAAC,MAAQ,EAAA,MAAA,EAAQ,aAAa,MAAS,GAAA,IAAM,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/build-initiate.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,cACpB,OACgC,EAAA;AAChC,EAAA,MAAM,EAAC,MAAQ,EAAA,MAAA,EAAQ,aAAa,MAAS,GAAA,IAAM,GAAA,OAAA;AAEnD,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,WAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAmC,MAAM,cAAe,CAAA;AAAA,MAC5D,KAAO,EAAA,kBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA;AACzD,KACD,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,aAAA,CAAc,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACjD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,2BAA2B,QAAS,CAAA,aAAA,CAAc,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA;AAAA,OAC1E;AAAA;AAEF,IAAA,eAAA;AAAA,MACE,CAAwC,qCAAA,EAAA,QAAA,CAAS,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA,CAAA;AAAA,MACvE;AAAA,KACF;AAEA,IAAA,OAAO,QAAS,CAAA,aAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAM,MAAA,KAAA;AAAA;AAEV","file":"build-initiate.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {EnvironmentInput, DeploymentConfig} from './types.js';\nimport {\n BuildInitiateQuery,\n BuildInitiateQueryData,\n BuildInitiateResponse,\n} from './graphql/build-initiate.js';\n\ninterface BuildInitiateOptions {\n config: DeploymentConfig;\n logger: Logger;\n environment?: EnvironmentInput;\n labels?: string[];\n}\n\nexport async function buildInitiate(\n options: BuildInitiateOptions,\n): Promise<BuildInitiateResponse> {\n const {config, logger, environment, labels = []} = options;\n\n const variables = {\n environment,\n labels,\n };\n\n try {\n const response: BuildInitiateQueryData = await graphqlRequest({\n query: BuildInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.buildInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create build. ${response.buildInitiate.userErrors[0]?.message}`,\n );\n }\n outputCompleted(\n `Build initiated successfully with id ${response.buildInitiate.build.id}.`,\n logger,\n );\n\n return response.buildInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/build-project.ts"],"names":[],"mappings":";;;;;AAeA,eAAsB,aAAa,OAA8B,EAAA;AAC/D,EAAA,MAAM,EAAC,MAAA,EAAQ,SAAW,EAAA,KAAA,EAAS,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/build-project.ts"],"names":[],"mappings":";;;;;AAeA,eAAsB,aAAa,OAA8B,EAAA;AAC/D,EAAA,MAAM,EAAC,MAAA,EAAQ,SAAW,EAAA,KAAA,EAAS,GAAA,OAAA;AACnC,EAAA,MAAM,UAAU,UAAW,EAAA;AAE3B,EAAA,IAAI,OAAO,aAAe,EAAA;AACxB,IAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AAClC,IAAA,OAAO,KACJ,CAAA,aAAA,CAAc,SAAS,CAAA,CACvB,KAAK,MAAM;AACV,MAAA,OAAA,CAAQ,eAAiB,EAAA,GAAA;AAAA,QACvB,UAAW,CAAA,SAAA;AAAA,QACX,WAAA,CAAY,KAAQ,GAAA;AAAA,OACtB;AAAA,KACD,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAqC,kCAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA,KAC7D,CAAA;AAAA;AAGL,EAAA,MAAM,uBAAuB,SACzB,GAAA,EAAC,uBAAyB,EAAA,SAAA,KAC1B,EAAC;AACL,EAAI,IAAA;AACF,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACrC,MAAA,IAAI,MAAS,GAAA,EAAA;AACb,MAAM,MAAA,YAAA,GAAe,IAAI,WAAY,EAAA;AAErC,MAAa,YAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,CAAC,KAAU,KAAA;AACjC,QAAU,MAAA,IAAA,KAAA;AACV,QAAQ,OAAA,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,OAC3B,CAAA;AAED,MAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AAClC,MAAA,MAAM,YAAe,GAAA,KAAA,CAAM,MAAO,CAAA,YAAA,EAAe,EAAI,EAAA;AAAA,QACnD,KAAO,EAAA,CAAC,SAAW,EAAA,MAAA,EAAQ,MAAM,CAAA;AAAA,QACjC,GAAK,EAAA;AAAA;AAAA,UAEH,GAAG,OAAQ,CAAA,GAAA;AAAA,UACX,GAAG;AAAA,SACL;AAAA,QACA,KAAK,MAAO,CAAA,QAAA;AAAA,QACZ,KAAO,EAAA;AAAA,OACR,CAAA;AAED,MAAC,YAAA,CAAa,MAA4B,EAAA,IAAA,CAAK,YAAY,CAAA;AAC3D,MAAC,YAAA,CAAa,MAA4B,EAAA,IAAA,CAAK,YAAY,CAAA;AAE3D,MAAa,YAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,IAAS,KAAA;AACjC,QAAA,IAAI,SAAS,CAAG,EAAA;AACd,UAAA,OAAA,CAAQ,eAAiB,EAAA,GAAA;AAAA,YACvB,UAAW,CAAA,SAAA;AAAA,YACX,WAAA,CAAY,KAAQ,GAAA;AAAA,WACtB;AAAA;AAEF,QAAA,OAAA,EAAS,YAAY,cAAgB,EAAA;AAAA,UACnC,SAAS,MAAO,CAAA,YAAA;AAAA,UAChB,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,IAAI,SAAS,CAAG,EAAA;AACd,UAAA,MAAA,CAAO,IAAI,CAAA;AACX,UAAA;AAAA;AAEF,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,OACb,CAAA;AAAA,KACF,CAAA;AAAA,WACM,KAAO,EAAA;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAiC,8BAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AAE5D","file":"build-project.js","sourcesContent":["import {spawn} from 'child_process';\nimport {PassThrough, Readable} from 'stream';\n\nimport {getBugsnag} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\n\ninterface BuildProjectOptions {\n config: DeploymentConfig;\n assetPath?: string;\n hooks?: DeploymentHooks;\n metricsExporter?: MetricsExporter;\n}\n\nexport async function buildProject(options: BuildProjectOptions) {\n const {config, assetPath, hooks} = options;\n const Bugsnag = getBugsnag();\n\n if (hooks?.buildFunction) {\n const startTime = performance.now();\n return hooks\n .buildFunction(assetPath)\n .then(() => {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n })\n .catch((error) => {\n throw new Error(`Build function failed with error: ${error}`);\n });\n }\n\n const assetPathEnvironment = assetPath\n ? {HYDROGEN_ASSET_BASE_URL: assetPath}\n : {};\n try {\n await new Promise((resolve, reject) => {\n let stderr = '';\n const stderrStream = new PassThrough();\n\n stderrStream.on('data', (chunk) => {\n stderr += chunk;\n process.stderr.write(chunk);\n });\n\n const startTime = performance.now();\n const buildCommand = spawn(config.buildCommand!, [], {\n stdio: ['inherit', 'pipe', 'pipe'],\n env: {\n // eslint-disable-next-line no-process-env\n ...process.env,\n ...assetPathEnvironment,\n },\n cwd: config.rootPath,\n shell: true,\n });\n\n (buildCommand.stderr as Readable | null)?.pipe(stderrStream);\n (buildCommand.stdout as Readable | null)?.pipe(stderrStream);\n\n buildCommand.on('close', (code) => {\n if (code === 0) {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n }\n Bugsnag?.addMetadata('buildCommand', {\n command: config.buildCommand,\n stderr,\n code,\n });\n if (code !== 0) {\n reject(code);\n return;\n }\n resolve(code);\n });\n });\n } catch (error) {\n throw new Error(`Build failed with error code: ${error}`);\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/deployment-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,iBACpB,OACmC,EAAA;AACnC,EAAA,MAAM,EAAC,MAAA,EAAQ,YAAc,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/deployment-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,iBACpB,OACmC,EAAA;AACnC,EAAA,MAAM,EAAC,MAAA,EAAQ,YAAc,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA;AAE/C,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAsC,MAAM,cAAe,CAAA;AAAA,MAC/D,KAAO,EAAA,qBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA;AACzD,KACD,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,gBAAA,CAAiB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACpD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,QAAS,CAAA,gBAAA,CAAiB,UAAW,CAAA,CAAC,GAAG,OAAW,IAAA;AAAA,OACtD;AAAA;AAEF,IAAW,UAAA,CAAA,CAAA,mBAAA,EAAsB,YAAY,CAAA,WAAA,CAAA,EAAe,MAAM,CAAA;AAElE,IAAA,OAAO,QAAS,CAAA,gBAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAM,MAAA,KAAA;AAAA;AAEV","file":"deployment-cancel.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n DeploymentCancelQuery,\n DeploymentCancelQueryData,\n DeploymentCancelResponse,\n} from './graphql/deployment-cancel.js';\n\ninterface DeploymentCancelOptions {\n config: DeploymentConfig;\n deploymentId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function deploymentCancel(\n options: DeploymentCancelOptions,\n): Promise<DeploymentCancelResponse> {\n const {config, deploymentId, reason, logger} = options;\n\n const variables = {\n deploymentId,\n reason,\n };\n\n try {\n const response: DeploymentCancelQueryData = await graphqlRequest({\n query: DeploymentCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentCancel.userErrors.length >= 1) {\n throw new AbortError(\n response.deploymentCancel.userErrors[0]?.message || '',\n );\n }\n outputInfo(`Deployment with id ${deploymentId} cancelled.`, logger);\n\n return response.deploymentCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/deployment-complete.ts"],"names":[],"mappings":";;;;;AAiBA,eAAsB,kBAAA,CACpB,QACA,YACqC,EAAA;AACrC,EAAA,MAAM,SAA8C,GAAA;AAAA,IAClD,YAAA;AAAA,IACA,yBAAyB,MAAO,CAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/deployment-complete.ts"],"names":[],"mappings":";;;;;AAiBA,eAAsB,kBAAA,CACpB,QACA,YACqC,EAAA;AACrC,EAAA,MAAM,SAA8C,GAAA;AAAA,IAClD,YAAA;AAAA,IACA,yBAAyB,MAAO,CAAA;AAAA,GAClC;AAEA,EAAA,IAAI,OAAO,uBAAyB,EAAA;AAClC,IAAA,SAAA,CAAU,uBAA0B,GAAA,4BAAA;AAAA,MAClC,MAAO,CAAA;AAAA,KACT;AAAA,GACF,MAAA,IAAW,OAAO,uBAAyB,EAAA;AACzC,IAAA,MAAM,IAAI,UAAA;AAAA,MACR;AAAA,KACF;AAAA;AAGF,EAAA,IAAI,OAAO,8BAAgC,EAAA;AACzC,IAAA,SAAA,CAAU,uBAAuB,MAAO,CAAA,8BAAA;AAAA;AAG1C,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAwC,MAAM,cAAe,CAAA;AAAA,MACjE,KAAO,EAAA,uBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA;AACzD,KACD,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACtD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,kCAAkC,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA;AAAA,OACtF;AAAA;AAGF,IAAA,OAAO,QAAS,CAAA,kBAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAM,MAAA,KAAA;AAAA;AAEV","file":"deployment-complete.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n authBypassTokenDurationParse,\n errorHandler,\n Header,\n} from '../utils/utils.js';\n\nimport {\n DeploymentCompleteQuery,\n DeploymentCompleteQueryVariables,\n DeploymentCompleteQueryData,\n DeploymentCompleteResponse,\n} from './graphql/deployment-complete.js';\nimport type {DeploymentConfig} from './types.js';\n\nexport async function deploymentComplete(\n config: DeploymentConfig,\n deploymentId: string,\n): Promise<DeploymentCompleteResponse> {\n const variables: DeploymentCompleteQueryVariables = {\n deploymentId,\n generateAuthBypassToken: config.generateAuthBypassToken,\n };\n\n if (config.generateAuthBypassToken) {\n variables.authBypassTokenDuration = authBypassTokenDurationParse(\n config.authBypassTokenDuration,\n );\n } else if (config.authBypassTokenDuration) {\n throw new AbortError(\n 'authBypassTokenDuration is set but generateAuthBypassToken is not enabled',\n );\n }\n\n if (config.overriddenEnvironmentVariables) {\n variables.environmentVariables = config.overriddenEnvironmentVariables;\n }\n\n try {\n const response: DeploymentCompleteQueryData = await graphqlRequest({\n query: DeploymentCompleteQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentComplete.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to complete deployment: ${response.deploymentComplete.userErrors[0]?.message}`,\n );\n }\n\n return response.deploymentComplete;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/deployment-initiate.ts"],"names":[],"mappings":";;;;;;AAqCA,eAAsB,mBACpB,OACqC,EAAA;AACrC,EAAA,MAAM,EAAC,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAU,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/deployment-initiate.ts"],"names":[],"mappings":";;;;;;AAqCA,eAAsB,mBACpB,OACqC,EAAA;AACrC,EAAA,MAAM,EAAC,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAU,GAAA,OAAA;AAEhC,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,aAAa,KAAM,CAAA,WAAA;AAAA,IACnB,OAAO,KAAM,CAAA,QAAA;AAAA,IACb,QAAQ,KAAM,CAAA;AAAA,GAChB;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAwC,MAAM,cAAe,CAAA;AAAA,MACjE,KAAO,EAAA,uBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA;AACzD,KACD,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACtD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,gCAAgC,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA;AAAA,OACpF;AAAA;AAGF,IAAA,eAAA;AAAA,MACE,CAAyB,sBAAA,EAAA,QAAA,CAAS,kBAAmB,CAAA,iBAAA,CAAkB,MAAM,CAAA,iBAAA,CAAA;AAAA,MAC7E;AAAA,KACF;AACA,IAAA,OAAO,QAAS,CAAA,kBAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAM,MAAA,KAAA;AAAA;AAEV","file":"deployment-initiate.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentManifestFile,\n EnvironmentInput,\n} from './types.js';\nimport {\n DeploymentInitiateQuery,\n DeploymentInitiateQueryData,\n DeploymentInitiateResponse,\n} from './graphql/deployment-initiate.js';\n\ntype DeploymentInitiateInput =\n | {\n buildId: string;\n environment?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n }\n | {\n environment?: EnvironmentInput;\n buildId?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n };\n\ninterface DeploymentInitiateOptions {\n config: DeploymentConfig;\n input: DeploymentInitiateInput;\n logger: Logger;\n}\n\nexport async function deploymentInitiate(\n options: DeploymentInitiateOptions,\n): Promise<DeploymentInitiateResponse> {\n const {config, input, logger} = options;\n\n const variables = {\n buildId: input.buildId,\n environment: input.environment,\n files: input.manifest,\n labels: input.labels,\n };\n\n try {\n const response: DeploymentInitiateQueryData = await graphqlRequest({\n query: DeploymentInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create deployment. ${response.deploymentInitiate.userErrors[0]?.message}`,\n );\n }\n\n outputCompleted(\n `Deployment initiated, ${response.deploymentInitiate.deploymentTargets.length} files to upload.`,\n logger,\n );\n return response.deploymentInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/get-upload-files.ts"],"names":[],"mappings":";;;;;;;AASA,eAAsB,cAAA,CACpB,QACA,eACmC,EAAA;AACnC,EAAA,MAAM,UAAa,GAAA,QAAA,CAAS,MAAO,CAAA,QAAA,EAAW,OAAO,SAAU,CAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/get-upload-files.ts"],"names":[],"mappings":"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","file":"get-upload-files.js","sourcesContent":["import {glob, fileSizeSync, readFileSync} from '@shopify/cli-kit/node/fs';\nimport {fileHash} from '@shopify/cli-kit/node/crypto';\nimport {joinPath, relativePath} from '@shopify/cli-kit/node/path';\nimport {lookupMimeType} from '@shopify/cli-kit/node/mimes';\n\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentManifestFile, FileType} from './types.js';\n\nexport async function getUploadFiles(\n config: DeploymentConfig,\n metricsExporter?: MetricsExporter,\n): Promise<DeploymentManifestFile[]> {\n const workerPath = joinPath(config.rootPath!, config.workerDir!);\n const workerFiles = await glob(`${workerPath}/**`);\n let manifest = createManifestEntries({\n files: workerFiles,\n basePath: workerPath,\n type: FileType.Worker,\n filter: workerFileFilter,\n });\n\n if (!config.workerOnly) {\n const assetPath = joinPath(config.rootPath!, config.assetsDir!);\n const assetFiles = await glob(`${assetPath}/**`);\n manifest = [\n ...manifest,\n ...createManifestEntries({\n files: assetFiles,\n basePath: assetPath,\n type: FileType.Asset,\n filter: assetFileFilter,\n }),\n ];\n }\n metricsExporter?.add(MetricName.NumFilesRequested, manifest.length);\n const totalSize =\n manifest.reduce((total, file) => total + file.fileSize, 0) / 1024;\n metricsExporter?.add(MetricName.TotalSizeRequested, totalSize);\n\n return manifest;\n}\n\nfunction createHash(file: string): string {\n const buff = readFileSync(file);\n return fileHash(buff);\n}\n\ninterface CreateManifestEntriesParams {\n files: string[];\n basePath: string;\n type: FileType;\n filter?: (arg0: string) => boolean;\n}\n\nfunction createManifestEntries(\n params: CreateManifestEntriesParams,\n): DeploymentManifestFile[] {\n const {files, basePath, type, filter} = params;\n const manifest: DeploymentManifestFile[] = [];\n files.forEach((file: string) => {\n const filePath = relativePath(basePath, file);\n if (filter && !filter(filePath)) {\n return;\n }\n\n manifest.push({\n filePath,\n fileSize: fileSizeSync(file),\n mimeType: lookupMimeType(file)!,\n fileType: type,\n fileHash: createHash(file),\n });\n });\n return manifest;\n}\n\nfunction workerFileFilter(fileName: string): boolean {\n const allowedWorkerAssets = ['oxygen.json'];\n const allowedExtensions = ['.js.map', '.mjs.map', '.map', '.js', '.mjs'];\n const allowedFilenames = ['index'];\n const regexString = `^(${allowedFilenames.join(\n '|',\n )})(${allowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return (\n regex.test(fileName.toLowerCase()) || allowedWorkerAssets.includes(fileName)\n );\n}\n\nfunction assetFileFilter(fileName: string): boolean {\n const disallowedExtensions = ['.map'];\n const regexString = `(${disallowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return !regex.test(fileName.toLowerCase());\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/build-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,gBAAmB,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/build-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,gBAAmB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"build-cancel.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildCancelQuery = `\n mutation BuildCancel($buildId: ID!, $reason: String!) {\n buildCancel(id: $buildId, reason: $reason) {\n build {\n id\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildCancelQueryData {\n buildCancel: BuildCancelResponse;\n}\n\nexport interface BuildCancelResponse {\n build: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/build-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,kBAAqB,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/build-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"build-initiate.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildInitiateQuery = `\n mutation BuildInitiate($environment: EnvironmentSelectorInput, $labels: [String!]) {\n buildInitiate(environment: $environment, labels: $labels) {\n build {\n id\n assetPath\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildInitiateQueryData {\n buildInitiate: BuildInitiateResponse;\n}\n\nexport interface BuildInitiateResponse {\n build: {\n id: string;\n assetPath: string;\n };\n userErrors: OxygenError[];\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/deployment-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,qBAAwB,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/deployment-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,qBAAwB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-cancel.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentCancelQuery = `\nmutation DeploymentCancel($deploymentId: ID!, $reason: String!) {\n deploymentCancel(id: $deploymentId, reason: $reason) {\n deployment {\n id\n }\n userErrors {\n message\n }\n }\n}\n`;\n\nexport interface DeploymentCancelQueryData {\n deploymentCancel: DeploymentCancelResponse;\n}\n\nexport interface DeploymentCancelResponse {\n deployment: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/deployment-complete.ts"],"names":[],"mappings":"AAIO,MAAM,uBAA0B,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/deployment-complete.ts"],"names":[],"mappings":"AAIO,MAAM,uBAA0B,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-complete.js","sourcesContent":["import {Variables} from 'graphql-request';\n\nimport {OxygenError} from '../types.js';\n\nexport const DeploymentCompleteQuery = `\n mutation DeploymentComplete($deploymentId: ID!, $generateAuthBypassToken: Boolean, $authBypassTokenDuration: Int, $environmentVariables: [EnvironmentVariableInput!]) {\n deploymentComplete(id: $deploymentId, generateAuthBypassToken: $generateAuthBypassToken, authBypassTokenDuration: $authBypassTokenDuration, environmentVariables: $environmentVariables) {\n deployment {\n id\n url\n }\n authBypassToken\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentCompleteQueryData {\n deploymentComplete: DeploymentCompleteResponse;\n}\n\ninterface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentCompleteQueryVariables extends Variables {\n deploymentId: string;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: number;\n environmentVariables?: EnvironmentVariable[];\n}\n\nexport interface DeploymentCompleteResponse {\n deployment: Deployment;\n authBypassToken: string | null;\n userErrors: OxygenError[];\n}\n\ninterface Deployment {\n id: string;\n url: string;\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/deployment-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,uBAA0B,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/deployment-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,uBAA0B,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-initiate.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentInitiateQuery = `\n mutation DeploymentInitiate($buildId: ID, $environment: EnvironmentSelectorInput, $labels: [String!], $files: [FileInput!]!) {\n deploymentInitiate(buildId: $buildId, environment: $environment, labels: $labels, files: $files) {\n deployment {\n id\n }\n deploymentTargets {\n filePath\n fileSize\n uploadUrl\n fileType\n parameters {\n name\n value\n }\n }\n deploymentConfiguration {\n timeoutInSeconds\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentInitiateQueryData {\n deploymentInitiate: DeploymentInitiateResponse;\n}\n\nexport interface DeploymentInitiateResponse {\n deployment: Deployment;\n deploymentTargets: DeploymentTargetResponse[];\n deploymentConfiguration: DeploymentConfigurationResponse;\n userErrors: OxygenError[];\n}\n\nexport interface DeploymentTargetResponse {\n filePath: string;\n fileSize: number;\n uploadUrl: string;\n fileType: string;\n parameters: DeploymentInitiateParameters[] | null;\n}\n\nexport interface DeploymentConfigurationResponse {\n timeoutInSeconds: number;\n}\n\ninterface Deployment {\n id: string;\n}\n\ninterface DeploymentInitiateParameters {\n name: string;\n value: string;\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/deploy/graphql/deployment-verification-details.ts"],"names":["Status"],"mappings":"AAAO,MAAM,kCAAqC,GAAA
|
1
|
+
{"version":3,"sources":["../../../src/deploy/graphql/deployment-verification-details.ts"],"names":["Status"],"mappings":"AAAO,MAAM,kCAAqC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBtC,IAAA,MAAA,qBAAAA,OAAL,KAAA;AACL,EAAAA,QAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,QAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,QAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,QAAA,WAAY,CAAA,GAAA,WAAA;AAJF,EAAAA,OAAAA,OAAAA;AAAA,CAAA,EAAA,MAAA,IAAA,EAAA","file":"deployment-verification-details.js","sourcesContent":["export const DeploymentVerificationDetailsQuery = `\n query DeploymentVerificationDetails($deploymentId: ID!) {\n deploymentVerificationDetails(id: $deploymentId) {\n url\n status\n error\n startupTime\n }\n }\n`;\n\nexport interface DeploymentVerificationDetailsQueryData {\n deploymentVerificationDetails: DeploymentVerificationDetailsResponse | null;\n}\n\nexport interface DeploymentVerificationDetailsResponse {\n url: string;\n status: string;\n error?: string;\n startupTime?: number;\n}\n\nexport enum Status {\n Pending = 'PENDING',\n Deployed = 'DEPLOYED',\n Failed = 'FAILED',\n Cancelled = 'CANCELLED',\n}\n"]}
|
package/dist/deploy/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {verifyDeployment} from './verify-deployment.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n VerificationError,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n if (!config.skipVerification) {\n await verifyDeployment({\n config,\n url: deploymentCompleteOp.deployment.url,\n logger,\n hooks,\n });\n\n metricsExporter.add(\n MetricName.DeploymentRoutableTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n }\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (\n error instanceof VerificationError ||\n error instanceof DeploymentCompletedVerificationError\n ) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
|
1
|
+
{"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {verifyDeployment} from './verify-deployment.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n VerificationError,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n if (!config.skipVerification) {\n await verifyDeployment({\n config,\n url: deploymentCompleteOp.deployment.url,\n logger,\n hooks,\n });\n\n metricsExporter.add(\n MetricName.DeploymentRoutableTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n }\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (\n error instanceof VerificationError ||\n error instanceof DeploymentCompletedVerificationError\n ) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
|
package/dist/deploy/metadata.js
CHANGED
@@ -78,10 +78,10 @@ function createCommitTitle(commitMessage) {
|
|
78
78
|
}
|
79
79
|
function getEnvironmentInput(config, metadata) {
|
80
80
|
if (config.defaultEnvironment) {
|
81
|
-
return
|
81
|
+
return undefined;
|
82
82
|
}
|
83
83
|
const tag = config.environmentTag || metadata.branch;
|
84
|
-
return tag ? { tag } :
|
84
|
+
return tag ? { tag } : undefined;
|
85
85
|
}
|
86
86
|
function createLabels(metadata) {
|
87
87
|
const labels = [];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/metadata.ts"],"names":["keyMapping"],"mappings":";;;;;AAcA,eAAsB,WAAA,CACpB,QACA,MACmB,EAAA;AACnB,EAAA,MAAM,SAAS,UAAW,EAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/metadata.ts"],"names":["keyMapping"],"mappings":";;;;;AAcA,eAAsB,WAAA,CACpB,QACA,MACmB,EAAA;AACnB,EAAA,MAAM,SAAS,UAAW,EAAA;AAC1B,EAAM,MAAA,QAAA,GAAqB,MAAO,CAAA,QAAA,IAAY,EAAC;AAE/C,EAAI,IAAA;AACF,IAAA,MAAM,SAAY,GAAA,MAAM,YAAa,CAAA,MAAA,CAAO,QAAQ,CAAA;AAIpD,IAAI,IAAA,CAAC,SAAS,KAAO,EAAA;AACnB,MAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,WAAA;AAAA;AAE7B,IAAI,IAAA,CAAC,SAAS,UAAY,EAAA;AACxB,MAAA,QAAA,CAAS,aAAa,SAAU,CAAA,IAAA;AAAA;AAElC,IAAI,IAAA,CAAC,SAAS,aAAe,EAAA;AAC3B,MAAA,QAAA,CAAS,gBAAgB,SAAU,CAAA,OAAA;AAAA;AAKrC,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAA,QAAA,CAAS,SAAS,SAAU,CAAA,MAAA;AAAA;AAE9B,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAA,QAAA,CAAS,YAAY,SAAU,CAAA,IAAA;AAAA;AACjC,WACO,KAAO,EAAA;AACd,IAAA,UAAA;AAAA,MACE,qEAAA;AAAA,MACA;AAAA,KACF;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,MAAA,CAAO,IAAO,GAAA,MAAA,CAAO,IAAO,GAAA,MAAA;AAAA,IAClC,GAAG,QAAA;AAAA,IACH,KAAO,EAAA,MAAA,CAAO,QAAS,CAAA,IAAA,IAAQ,QAAS,CAAA,KAAA;AAAA,IACxC,aAAe,EAAA,iBAAA;AAAA,MACb,MAAA,CAAO,QAAS,CAAA,WAAA,IAAe,QAAS,CAAA;AAAA,KAC1C;AAAA,IACA,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,OAAA,IAAW,QAAS,CAAA,SAAA;AAAA,IAC/C,eAAA,EAAiB,OAAO,QAAS,CAAA,eAAA;AAAA,IACjC,GAAK,EAAA,MAAA,CAAO,QAAS,CAAA,GAAA,IAAO,QAAS,CAAA;AAAA,GACvC;AACF;AAEA,eAAe,aAAa,IAAe,EAAA;AACzC,EAAM,MAAA,SAAA,GAAY,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAC/C,EAAM,MAAA,MAAA,GAAA,CAAU,kBAAkB,IAAK,CAAA,SAAA,CAAU,IAAI,CAAK,IAAA,IAAI,CAAC,CAAA;AAM/D,EAAM,MAAA,OAAA,GAAU,QAAQ,GAAI,CAAA,eAAA;AAE5B,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA;AAAA,MACL,GAAG,SAAA;AAAA,MACH;AAAA,KACF;AAAA;AAGF,EAAA,MAAM,KAAQ,GAAA,8BAAA,CAA+B,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA;AAEnE,EAAO,OAAA;AAAA,IACL,GAAG,SAAA;AAAA,IACH,MAAQ,EAAA,OAAA;AAAA,IACR,IAAM,EAAA,KAAA,GAAQ,KAAM,CAAA,CAAC,IAAI,SAAU,CAAA;AAAA,GACrC;AACF;AAEA,SAAS,kBAAkB,aAA4C,EAAA;AACrE,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA;AAAA;AAGF,EAAI,IAAA,KAAA,GAAQ,cAAc,KAAM,CAAA,OAAO,EAAE,CAAC,CAAA,EAAG,MAAU,IAAA,EAAA;AACvD,EAAI,IAAA,SAAA,GAAY,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA;AACpC,EAAA,IAAI,WAAc,GAAA,KAAA;AAElB,EAAO,OAAA,SAAA,CAAU,SAAS,cAAgB,EAAA;AACxC,IAAA,MAAM,cAAiB,GAAA,KAAA,CAAM,WAAY,CAAA,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAChE,IAAA,KAAA,GAAQ,GAAG,KAAM,CAAA,SAAA;AAAA,MACf,CAAA;AAAA,MACA,cAAA,GAAiB,EAAK,GAAA,cAAA,GAAiB,cAAiB,GAAA;AAAA,KACzD,GAAG,OAAQ,EAAA;AACZ,IAAc,WAAA,GAAA,IAAA;AACd,IAAY,SAAA,GAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA;AAGlC,EAAO,OAAA,WAAA,GAAc,CAAG,EAAA,KAAK,CAAQ,GAAA,CAAA,GAAA,KAAA;AACvC;AAEO,SAAS,mBAAA,CACd,QACA,QAC8B,EAAA;AAC9B,EAAA,IAAI,OAAO,kBAAoB,EAAA;AAC7B,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,GAAA,GAAM,MAAO,CAAA,cAAA,IAAkB,QAAS,CAAA,MAAA;AAC9C,EAAO,OAAA,GAAA,GAAM,EAAC,GAAA,EAAO,GAAA,SAAA;AACvB;AAEO,SAAS,aAAa,QAA8B,EAAA;AACzD,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAM,MAAA,UAAA,GAAa,CAAC,QAAA,EAAkB,UAAuB,KAAA;AAC3D,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,SAAA,CAAU,UAAU,CAAA;AAC5C,IAAI,IAAA,UAAA,CAAW,SAAS,cAAgB,EAAA;AACtC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,SAAA,EAAY,QAAQ,CAAA,sCAAA,EAAyC,cAAc,CAAA,aAAA;AAAA,OAC7E;AAAA;AAEF,IAAA,MAAM,KAAQ,GAAA,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACvC,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,GACnB;AAEA,EAAI,IAAA,QAAA,CAAS,SAAS,MAAQ,EAAA;AAC5B,IAAA,MAAA,CAAO,KAAK,CAAe,YAAA,EAAA,IAAA,CAAK,UAAU,QAAS,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AAAA;AAG5D,EAAI,IAAA,QAAA,CAAS,SAAS,SAAW,EAAA;AAC/B,IAAA,MAAMA,WAAa,GAAA;AAAA,MACjB,OAAS,EAAA,SAAA;AAAA,MACT,GAAK,EAAA;AAAA,KACP;AAEA,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQA,WAAU,CAAG,EAAA;AACrD,MAAA,MAAM,WAAc,GAAA,GAAA;AACpB,MAAI,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzB,QAAO,MAAA,CAAA,IAAA;AAAA,UACL,CAAA,EAAG,QAAS,CAAA,IAAI,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,IAAA,CAAK,SAAU,CAAA,QAAA,CAAS,WAAW,CAAC,CAAC,CAAA;AAAA,SACpE;AAAA;AACF;AACF;AAGF,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA,QAAA;AAAA,IACR,UAAY,EAAA,aAAA;AAAA,IACZ,aAAe,EAAA,aAAA;AAAA,IACf,SAAW,EAAA,SAAA;AAAA,IACX,eAAiB,EAAA,kBAAA;AAAA,IACjB,GAAK,EAAA;AAAA,GACP;AAEA,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AACrD,IAAA,MAAM,WAAc,GAAA,GAAA;AACpB,IAAI,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzB,MAAW,UAAA,CAAA,KAAA,EAAO,QAAS,CAAA,WAAW,CAAE,CAAA;AAAA;AAC1C;AAGF,EAAO,OAAA,MAAA;AACT","file":"metadata.js","sourcesContent":["import {ciPlatform, CIMetadata} from '@shopify/cli-kit/node/context/local';\nimport {getLatestGitCommit} from '@shopify/cli-kit/node/git';\nimport {Logger, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {maxLabelLength} from '../utils/utils.js';\n\nimport {DeploymentConfig, EnvironmentInput} from './types.js';\n\nexport type Metadata = CIMetadata & {\n commitDate?: string;\n hydrogenVersion?: string;\n name?: string;\n};\n\nexport async function getMetadata(\n config: DeploymentConfig,\n logger: Logger,\n): Promise<Metadata> {\n const ciInfo = ciPlatform();\n const metadata: Metadata = ciInfo.metadata ?? {};\n\n try {\n const gitCommit = await latestCommit(config.rootPath);\n\n // Only update actor, commitDate, and commitMessage if we don't already have\n // the data from CI.\n if (!metadata.actor) {\n metadata.actor = gitCommit.author_name;\n }\n if (!metadata.commitDate) {\n metadata.commitDate = gitCommit.date;\n }\n if (!metadata.commitMessage) {\n metadata.commitMessage = gitCommit.message;\n }\n\n // Always update the following keys with the Git information if it's\n // available since we may modify what the values are.\n if (gitCommit.branch) {\n metadata.branch = gitCommit.branch;\n }\n if (gitCommit.hash) {\n metadata.commitSha = gitCommit.hash;\n }\n } catch (error) {\n outputWarn(\n 'Could not retrieve Git history, commit message will be unavailable.',\n logger,\n );\n }\n\n return {\n name: ciInfo.isCI ? ciInfo.name : 'none',\n ...metadata,\n actor: config.metadata.user ?? metadata.actor,\n commitMessage: createCommitTitle(\n config.metadata.description ?? metadata.commitMessage,\n ),\n commitSha: config.metadata.version ?? metadata.commitSha,\n hydrogenVersion: config.metadata.hydrogenVersion,\n url: config.metadata.url ?? metadata.url,\n };\n}\n\nasync function latestCommit(path?: string) {\n const gitCommit = await getLatestGitCommit(path);\n const branch = (/HEAD -> ([^,]*)/.exec(gitCommit.refs) || [])[1];\n\n // If this variable is set it means we are in a GitHub action using the\n // pull_request trigger which creates a merge commit and we'll need to\n // manually extract the commit details.\n // eslint-disable-next-line no-process-env\n const headRef = process.env.GITHUB_HEAD_REF;\n\n if (!headRef) {\n return {\n ...gitCommit,\n branch,\n };\n }\n\n const match = /Merge ([\\w\\d]+) into [\\w\\d]+/.exec(gitCommit.message);\n\n return {\n ...gitCommit,\n branch: headRef,\n hash: match ? match[1] : gitCommit.hash,\n };\n}\n\nfunction createCommitTitle(commitMessage?: string): string | undefined {\n if (!commitMessage) {\n return;\n }\n\n let title = commitMessage.split(/\\r?\\n/)[0]?.trim() || '';\n let jsonTitle = JSON.stringify(title);\n let isTruncated = false;\n\n while (jsonTitle.length > maxLabelLength) {\n const lastSpaceIndex = title.lastIndexOf(' ', maxLabelLength - 3);\n title = `${title.substring(\n 0,\n lastSpaceIndex > -1 ? lastSpaceIndex : maxLabelLength - 3,\n )}`.trimEnd();\n isTruncated = true;\n jsonTitle = JSON.stringify(title);\n }\n\n return isTruncated ? `${title}...` : title;\n}\n\nexport function getEnvironmentInput(\n config: DeploymentConfig,\n metadata: CIMetadata,\n): EnvironmentInput | undefined {\n if (config.defaultEnvironment) {\n return undefined;\n }\n\n const tag = config.environmentTag || metadata.branch;\n return tag ? {tag} : undefined;\n}\n\nexport function createLabels(metadata: Metadata): string[] {\n const labels: string[] = [];\n\n const checkLabel = (labelKey: string, labelValue: string) => {\n const jsonString = JSON.stringify(labelValue);\n if (jsonString.length > maxLabelLength) {\n throw new Error(\n `Provided ${labelKey} metadata exceeds maximum length (max ${maxLabelLength} characters).`,\n );\n }\n const label = `${labelKey}=${jsonString}`;\n labels.push(label);\n };\n\n if (metadata.name !== 'none') {\n labels.push(`ci-platform=${JSON.stringify(metadata.name)}`);\n }\n\n if (metadata.name !== 'unknown') {\n const keyMapping = {\n attempt: 'attempt',\n run: 'runId',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n labels.push(\n `${metadata.name}-${value}=${JSON.stringify(metadata[metadataKey])}`,\n );\n }\n }\n }\n\n const keyMapping = {\n actor: 'user',\n branch: 'branch',\n commitDate: 'commit-date',\n commitMessage: 'description',\n commitSha: 'version',\n hydrogenVersion: 'hydrogen-version',\n url: 'url',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n checkLabel(value, metadata[metadataKey]!);\n }\n }\n\n return labels;\n}\n"]}
|
package/dist/deploy/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAkFY,IAAA,QAAA,qBAAAA,SAAL,KAAA;AACL,EAAAA,UAAA,QAAS,CAAA,GAAA,QAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAkFY,IAAA,QAAA,qBAAAA,SAAL,KAAA;AACL,EAAAA,UAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AAFE,EAAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AASL,MAAM,0BAA0B,KAAM,CAAA;AAAC;AAEvC,MAAM,6CAA6C,KAAM,CAAA;AAAC","file":"types.js","sourcesContent":["import {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n\nexport interface Build {\n id: string;\n assetPath: string;\n}\n\nexport interface ClientError extends Error {\n statusCode: number;\n}\n\nexport interface DeploymentHooks {\n buildFunction?: (urlPath?: string) => Promise<void>;\n onDeploymentCompletedVerificationStart?: () => void;\n onDeploymentCompletedVerificationError?: () => void;\n onDeploymentFailed?: (\n responseData: DeploymentVerificationDetailsResponse,\n ) => void;\n onDeploymentCompleted?: () => void;\n onVerificationStart?: () => void;\n onVerificationComplete?: () => void;\n onVerificationError?: (error: Error) => void;\n onUploadFilesStart?: () => void;\n onUploadFilesError?: (error: Error) => void;\n onUploadFilesComplete?: () => void;\n}\n\nexport interface DeploymentConfig {\n assetsDir?: string;\n bugsnag: boolean;\n buildCommand?: string;\n deploymentToken: DeploymentToken;\n deploymentUrl: string;\n environmentTag?: string;\n metadata: {\n description?: string;\n hydrogenVersion?: string;\n user?: string;\n version?: string;\n url?: string;\n };\n defaultEnvironment: boolean;\n rootPath?: string;\n skipBuild: boolean;\n skipVerification: boolean;\n verificationMaxDuration: number;\n workerDir?: string;\n workerOnly: boolean;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: string;\n overriddenEnvironmentVariables?: EnvironmentVariable[];\n}\n\nexport interface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentToken {\n accessToken: string;\n allowedResource: string;\n appId: string;\n client: string;\n expiresAt: string;\n namespace: string;\n namespaceId: string;\n}\n\nexport interface DeploymentManifestFile {\n filePath: string;\n fileSize: number;\n mimeType: string;\n fileHash: string;\n fileType: string;\n}\n\nexport interface EnvironmentInput {\n handle?: string;\n tag?: string;\n}\n\nexport enum FileType {\n Worker = 'WORKER',\n Asset = 'ASSET',\n}\n\nexport interface OxygenError {\n message: string;\n}\n\nexport class VerificationError extends Error {}\n\nexport class DeploymentCompletedVerificationError extends Error {}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/upload-files.ts"],"names":[],"mappings":"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","file":"upload-files.js","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {Agent} from 'https';\n\nimport {fetch, formData} from '@shopify/cli-kit/node/http';\nimport {createFileReadStream} from '@shopify/cli-kit/node/fs';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {mapLimit} from 'async';\n\nimport {deployDefaults} from '../utils/utils.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\nimport {DeploymentTargetResponse} from './graphql/deployment-initiate.js';\n\ninterface InitiateResumableResponse {\n target: DeploymentTargetResponse;\n sessionUri: string;\n location: string;\n}\n\ninterface ResumableUploadStatus {\n complete: boolean;\n lastReceivedByte: number;\n}\n\ninterface UploadFilesOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n metricsExporter?: MetricsExporter;\n targets: DeploymentTargetResponse[];\n}\n\nexport async function uploadFiles(options: UploadFilesOptions): Promise<void> {\n const {config, logger, targets, hooks} = options;\n outputInfo(`Uploading ${targets.length} files...`, logger);\n\n const totalUploadSize =\n targets.reduce((total, target) => total + target.fileSize, 0) / 1024;\n options.metricsExporter?.add(MetricName.TotalSizeUploaded, totalUploadSize);\n options.metricsExporter?.add(MetricName.NumFilesUploaded, targets.length);\n\n const agent = new Agent({keepAlive: true});\n hooks?.onUploadFilesStart?.();\n const startTime = performance.now();\n return mapLimit(targets, 6, async (target: DeploymentTargetResponse) => {\n await uploadFile(config, target, agent);\n })\n .then(() => {\n const endTime = performance.now();\n hooks?.onUploadFilesComplete?.();\n options.metricsExporter?.add(MetricName.UploadTime, endTime - startTime);\n outputCompleted(`Files uploaded successfully`, logger);\n })\n .catch((err) => {\n hooks?.onUploadFilesError?.(err);\n throw err;\n })\n .finally(() => {\n agent.destroy();\n });\n}\n\nasync function uploadFile(\n config: DeploymentConfig,\n target: DeploymentTargetResponse,\n agent: Agent,\n) {\n const localFolderPath =\n target.fileType === 'WORKER'\n ? joinPath(config.rootPath!, config.workerDir!)\n : joinPath(config.rootPath!, config.assetsDir!);\n\n if (target.parameters !== null && target.parameters.length > 0) {\n // If parameters exist perform a form upload\n const form = formData();\n target.parameters.forEach((param) => {\n form.append(param.name, param.value);\n });\n form.append(\n 'file',\n createFileReadStream(joinPath(localFolderPath, target.filePath)),\n );\n await formUpload(form, target, agent);\n } else {\n // If no parameters exist perform a resumable upload\n const initData = await initiateResumableUpload(target, agent);\n await performResumableUpload(\n joinPath(localFolderPath, target.filePath),\n initData,\n agent,\n );\n }\n}\n\nasync function formUpload(\n form: ReturnType<typeof formData>,\n target: DeploymentTargetResponse,\n agent: Agent,\n attemptNumber = 0,\n) {\n try {\n const timeoutDuration = 120000;\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, timeoutDuration);\n\n const response = await fetch(target.uploadUrl, {\n method: 'POST',\n body: form,\n signal: controller.signal,\n headers: {\n Connection: 'keep-alive',\n },\n agent,\n });\n clearTimeout(timeout);\n\n if (!response.ok) {\n throw new Error(`${response.status}`);\n }\n } catch (err) {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${target.filePath}`);\n }\n\n if (attemptNumber < Number(deployDefaults.maxUploadAttempts)) {\n await formUpload(form, target, agent, attemptNumber + 1);\n } else {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new Error(`Request timeout whilst uploading ${target.filePath}`);\n }\n throw new Error(`Failed to upload file ${target.filePath}`);\n }\n }\n}\n\nasync function initiateResumableUpload(\n target: DeploymentTargetResponse,\n agent: Agent,\n): Promise<InitiateResumableResponse> {\n return fetch(target.uploadUrl, {\n method: 'POST',\n headers: {\n 'x-goog-resumable': 'start',\n 'X-Goog-Content-Length-Range': `0,${target.fileSize}`,\n 'User-Agent': 'oxygen-cli',\n },\n agent,\n })\n .then((res) => {\n return {\n sessionUri: res.headers.get('x-guploader-uploadid')!,\n location: res.headers.get('location')!,\n target,\n };\n })\n .catch((err) => {\n throw new Error(\n `Failed to initiate resumable upload for file ${target.filePath} (status code ${err.statusCode})`,\n );\n });\n}\n\nasync function performResumableUpload(\n localFilePath: string,\n initData: InitiateResumableResponse,\n agent: Agent,\n startByte = 0,\n attemptNumber = 0,\n) {\n await uploadResumable(\n initData.location,\n localFilePath,\n startByte,\n agent,\n ).catch(async (err) => {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${initData.target.filePath}`);\n }\n\n if (\n err &&\n attemptNumber >= Number(deployDefaults.maxResumabeUploadAttempts)\n ) {\n throw new Error(\n `Failed to upload file ${initData.target.filePath} after ${deployDefaults.maxResumabeUploadAttempts} attempts`,\n );\n }\n const status = await resumableUploadStatus(\n initData.location,\n initData.target.fileSize,\n agent,\n );\n if (!status.complete) {\n const nextAttemptStartByte = status.lastReceivedByte;\n const attempt = attemptNumber + 1;\n await performResumableUpload(\n localFilePath,\n initData,\n agent,\n nextAttemptStartByte,\n attempt,\n );\n }\n });\n}\n\nasync function uploadResumable(\n location: string,\n filePath: string,\n lastReceivedByte: number,\n agent: Agent,\n): Promise<number> {\n const file = createFileReadStream(filePath, {start: lastReceivedByte});\n return fetch(location, {\n method: 'PUT',\n body: file,\n agent,\n }).then((res) => {\n return res.status;\n });\n}\n\nasync function resumableUploadStatus(\n location: string,\n fileSize: number,\n agent: Agent,\n): Promise<ResumableUploadStatus> {\n const getLastByte = (range: string | null): number => {\n if (!range || range.split('-').length !== 2) return 0;\n const rangeParts = range.split('-');\n return parseInt(rangeParts[1]!, 10);\n };\n\n return fetch(location, {\n method: 'PUT',\n headers: {\n 'Content-Length': '0',\n 'Content-Range': `bytes */${fileSize}`,\n },\n agent,\n })\n .then((res) => {\n return {\n complete: res.status === 200,\n lastReceivedByte: getLastByte(res.headers.get('range')),\n };\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n return {\n complete: false,\n lastReceivedByte: 0,\n };\n });\n}\n\nfunction isErrorCode(err: unknown, code: string): boolean {\n return err instanceof Error && 'code' in err && err.code === code;\n}\n"]}
|
1
|
+
{"version":3,"sources":["../../src/deploy/upload-files.ts"],"names":[],"mappings":"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","file":"upload-files.js","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {Agent} from 'https';\n\nimport {fetch, formData} from '@shopify/cli-kit/node/http';\nimport {createFileReadStream} from '@shopify/cli-kit/node/fs';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {mapLimit} from 'async';\n\nimport {deployDefaults} from '../utils/utils.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\nimport {DeploymentTargetResponse} from './graphql/deployment-initiate.js';\n\ninterface InitiateResumableResponse {\n target: DeploymentTargetResponse;\n sessionUri: string;\n location: string;\n}\n\ninterface ResumableUploadStatus {\n complete: boolean;\n lastReceivedByte: number;\n}\n\ninterface UploadFilesOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n metricsExporter?: MetricsExporter;\n targets: DeploymentTargetResponse[];\n}\n\nexport async function uploadFiles(options: UploadFilesOptions): Promise<void> {\n const {config, logger, targets, hooks} = options;\n outputInfo(`Uploading ${targets.length} files...`, logger);\n\n const totalUploadSize =\n targets.reduce((total, target) => total + target.fileSize, 0) / 1024;\n options.metricsExporter?.add(MetricName.TotalSizeUploaded, totalUploadSize);\n options.metricsExporter?.add(MetricName.NumFilesUploaded, targets.length);\n\n const agent = new Agent({keepAlive: true});\n hooks?.onUploadFilesStart?.();\n const startTime = performance.now();\n return mapLimit(targets, 6, async (target: DeploymentTargetResponse) => {\n await uploadFile(config, target, agent);\n })\n .then(() => {\n const endTime = performance.now();\n hooks?.onUploadFilesComplete?.();\n options.metricsExporter?.add(MetricName.UploadTime, endTime - startTime);\n outputCompleted(`Files uploaded successfully`, logger);\n })\n .catch((err) => {\n hooks?.onUploadFilesError?.(err);\n throw err;\n })\n .finally(() => {\n agent.destroy();\n });\n}\n\nasync function uploadFile(\n config: DeploymentConfig,\n target: DeploymentTargetResponse,\n agent: Agent,\n) {\n const localFolderPath =\n target.fileType === 'WORKER'\n ? joinPath(config.rootPath!, config.workerDir!)\n : joinPath(config.rootPath!, config.assetsDir!);\n\n if (target.parameters !== null && target.parameters.length > 0) {\n // If parameters exist perform a form upload\n const form = formData();\n target.parameters.forEach((param) => {\n form.append(param.name, param.value);\n });\n form.append(\n 'file',\n createFileReadStream(joinPath(localFolderPath, target.filePath)),\n );\n await formUpload(form, target, agent);\n } else {\n // If no parameters exist perform a resumable upload\n const initData = await initiateResumableUpload(target, agent);\n await performResumableUpload(\n joinPath(localFolderPath, target.filePath),\n initData,\n agent,\n );\n }\n}\n\nasync function formUpload(\n form: ReturnType<typeof formData>,\n target: DeploymentTargetResponse,\n agent: Agent,\n attemptNumber = 0,\n) {\n try {\n const timeoutDuration = 120000;\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, timeoutDuration);\n\n const response = await fetch(target.uploadUrl, {\n method: 'POST',\n body: form,\n signal: controller.signal,\n headers: {\n Connection: 'keep-alive',\n },\n agent,\n });\n clearTimeout(timeout);\n\n if (!response.ok) {\n throw new Error(`${response.status}`);\n }\n } catch (err) {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${target.filePath}`);\n }\n\n if (attemptNumber < Number(deployDefaults.maxUploadAttempts)) {\n await formUpload(form, target, agent, attemptNumber + 1);\n } else {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new Error(`Request timeout whilst uploading ${target.filePath}`);\n }\n throw new Error(`Failed to upload file ${target.filePath}`);\n }\n }\n}\n\nasync function initiateResumableUpload(\n target: DeploymentTargetResponse,\n agent: Agent,\n): Promise<InitiateResumableResponse> {\n return fetch(target.uploadUrl, {\n method: 'POST',\n headers: {\n 'x-goog-resumable': 'start',\n 'X-Goog-Content-Length-Range': `0,${target.fileSize}`,\n 'User-Agent': 'oxygen-cli',\n },\n agent,\n })\n .then((res) => {\n return {\n sessionUri: res.headers.get('x-guploader-uploadid')!,\n location: res.headers.get('location')!,\n target,\n };\n })\n .catch((err) => {\n throw new Error(\n `Failed to initiate resumable upload for file ${target.filePath} (status code ${err.statusCode})`,\n );\n });\n}\n\nasync function performResumableUpload(\n localFilePath: string,\n initData: InitiateResumableResponse,\n agent: Agent,\n startByte = 0,\n attemptNumber = 0,\n) {\n await uploadResumable(\n initData.location,\n localFilePath,\n startByte,\n agent,\n ).catch(async (err) => {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${initData.target.filePath}`);\n }\n\n if (\n err &&\n attemptNumber >= Number(deployDefaults.maxResumabeUploadAttempts)\n ) {\n throw new Error(\n `Failed to upload file ${initData.target.filePath} after ${deployDefaults.maxResumabeUploadAttempts} attempts`,\n );\n }\n const status = await resumableUploadStatus(\n initData.location,\n initData.target.fileSize,\n agent,\n );\n if (!status.complete) {\n const nextAttemptStartByte = status.lastReceivedByte;\n const attempt = attemptNumber + 1;\n await performResumableUpload(\n localFilePath,\n initData,\n agent,\n nextAttemptStartByte,\n attempt,\n );\n }\n });\n}\n\nasync function uploadResumable(\n location: string,\n filePath: string,\n lastReceivedByte: number,\n agent: Agent,\n): Promise<number> {\n const file = createFileReadStream(filePath, {start: lastReceivedByte});\n return fetch(location, {\n method: 'PUT',\n body: file,\n agent,\n }).then((res) => {\n return res.status;\n });\n}\n\nasync function resumableUploadStatus(\n location: string,\n fileSize: number,\n agent: Agent,\n): Promise<ResumableUploadStatus> {\n const getLastByte = (range: string | null): number => {\n if (!range || range.split('-').length !== 2) return 0;\n const rangeParts = range.split('-');\n return parseInt(rangeParts[1]!, 10);\n };\n\n return fetch(location, {\n method: 'PUT',\n headers: {\n 'Content-Length': '0',\n 'Content-Range': `bytes */${fileSize}`,\n },\n agent,\n })\n .then((res) => {\n return {\n complete: res.status === 200,\n lastReceivedByte: getLastByte(res.headers.get('range')),\n };\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n return {\n complete: false,\n lastReceivedByte: 0,\n };\n });\n}\n\nfunction isErrorCode(err: unknown, code: string): boolean {\n return err instanceof Error && 'code' in err && err.code === code;\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/verify-deployment-completed.ts"],"names":[],"mappings":";;;;;;AA4BA,eAAsB,yBAAA,CACpB,SACA,YACgD,EAAA;AAChD,EAAA,MAAM,EAAC,MAAA,EAAQ,MAAQ,EAAA,gBAAA,EAAkB,OAAS,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/verify-deployment-completed.ts"],"names":[],"mappings":";;;;;;AA4BA,eAAsB,yBAAA,CACpB,SACA,YACgD,EAAA;AAChD,EAAA,MAAM,EAAC,MAAA,EAAQ,MAAQ,EAAA,gBAAA,EAAkB,OAAS,GAAA,OAAA;AAClD,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB;AAAA,GACF;AAEA,EAAA,KAAA,EAAO,sCAAyC,IAAA;AAChD,EAAA,UAAA,CAAW,qCAAqC,MAAM,CAAA;AAGtD,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAE3B,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,MAAM,KAAQ,GAAA,GAAA;AACd,IAAA,MAAM,WAAe,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA;AAC/C,IAAI,IAAA,WAAA,GAAc,KAAQ,GAAA,GAAA,GAAO,gBAAkB,EAAA;AACjD,MAAA,KAAA,EAAO,sCAAyC,IAAA;AAChD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kCAAkC,gBAAgB,CAAA,SAAA;AAAA,OACpD;AAAA;AAGF,IAAA,MAAM,IAAI,OAAQ,CAAA,CAAC,YAAY,UAAW,CAAA,OAAA,EAAS,KAAK,CAAC,CAAA;AACzD,IAAA,OAAO,KAAM,EAAA;AAAA,GACf;AAEA,EAAA,MAAM,QAAQ,YAA4D;AACxE,IAAM,MAAA,QAAA,GACJ,MAAM,cAAe,CAAA;AAAA,MACnB,KAAO,EAAA,kCAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA;AAAA;AACzD,KACD,CAAA;AAEH,IAAA,MAAM,OAAO,QAAS,CAAA,6BAAA;AACtB,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,KAAA,EAAO,sCAAyC,IAAA;AAChD,MAAM,MAAA,IAAI,qCAAqC,sBAAsB,CAAA;AAAA;AAGvE,IAAI,IAAA,IAAA,CAAK,MAAW,KAAA,MAAA,CAAO,QAAU,EAAA;AACnC,MAAA,eAAA,CAAgB,+CAA+C,MAAM,CAAA;AACrE,MAAA,KAAA,EAAO,qBAAwB,IAAA;AAC/B,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,IAAI,KAAK,MAAW,KAAA,MAAA,CAAO,UAAU,IAAK,CAAA,MAAA,KAAW,OAAO,SAAW,EAAA;AACrE,MAAA,KAAA,EAAO,qBAAqB,IAAI,CAAA;AAChC,MAAA,MAAM,IAAI,oCAAA;AAAA,QACR,IAAK,CAAA,KAAA,GACD,CAAc,WAAA,EAAA,IAAA,CAAK,MAAO,CAAA,iBAAA,EAAmB,CAAA,SAAA,EAC3C,IAAK,CAAA,KACP,CACE,EAAA,IAAA,CAAK,WAAe,IAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,yBAAyB,CAAA,GAC7D,CAAmB,gBAAA,EAAA,IAAA,CAAK,WAAW,CAAA,2BAAA,CAAA,GACnC,EACN,CAAA,CAAA,GACA,CAAc,WAAA,EAAA,IAAA,CAAK,MAAO,CAAA,iBAAA,EAAmB,CAAA;AAAA,OACnD;AAAA;AAGF,IAAA,OAAO,cAAe,EAAA;AAAA,GACxB;AAEA,EAAA,OAAO,KAAM,EAAA;AACf","file":"verify-deployment-completed.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\n\nimport {Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentHooks,\n DeploymentCompletedVerificationError,\n} from './types.js';\nimport {\n DeploymentVerificationDetailsQuery,\n DeploymentVerificationDetailsQueryData,\n DeploymentVerificationDetailsResponse,\n Status,\n} from './graphql/deployment-verification-details.js';\n\ninterface DeploymentVerificationDetailsOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n timeoutInSeconds: number;\n logger: Logger;\n}\n\nexport async function verifyDeploymentCompleted(\n options: DeploymentVerificationDetailsOptions,\n deploymentId: string,\n): Promise<DeploymentVerificationDetailsResponse> {\n const {config, logger, timeoutInSeconds, hooks} = options;\n const variables = {\n deploymentId,\n };\n\n hooks?.onDeploymentCompletedVerificationStart?.();\n outputInfo('Verifying deployment completed...', logger);\n\n let attempts = 0;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n const delay = 3000;\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > timeoutInSeconds) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new Error(\n `Deployment not completed after ${timeoutInSeconds} seconds.`,\n );\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n return check();\n };\n\n const check = async (): Promise<DeploymentVerificationDetailsResponse> => {\n const response: DeploymentVerificationDetailsQueryData =\n await graphqlRequest({\n query: DeploymentVerificationDetailsQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n const data = response.deploymentVerificationDetails;\n if (data == null) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new DeploymentCompletedVerificationError('Deployment not found');\n }\n\n if (data.status === Status.Deployed) {\n outputCompleted('Deployment to Oxygen completed successfully', logger);\n hooks?.onDeploymentCompleted?.();\n return data;\n }\n\n if (data.status === Status.Failed || data.status === Status.Cancelled) {\n hooks?.onDeploymentFailed?.(data);\n throw new DeploymentCompletedVerificationError(\n data.error\n ? `Deployment ${data.status.toLocaleLowerCase()}, error: ${\n data.error\n }${\n data.startupTime && data.error.includes('exceeded CPU time limit')\n ? ` (Startup time: ${data.startupTime}ms exceeded CPU time limit)`\n : ''\n }`\n : `Deployment ${data.status.toLocaleLowerCase()}`,\n );\n }\n\n return handleInterval();\n };\n\n return check();\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/deploy/verify-deployment.ts"],"names":[],"mappings":";;;;AAYA,eAAsB,iBACpB,OACe,EAAA;AACf,EAAA,MAAM,EAAC,MAAA,EAAQ,GAAK,EAAA,MAAA,EAAQ,OAAS,GAAA,OAAA
|
1
|
+
{"version":3,"sources":["../../src/deploy/verify-deployment.ts"],"names":[],"mappings":";;;;AAYA,eAAsB,iBACpB,OACe,EAAA;AACf,EAAA,MAAM,EAAC,MAAA,EAAQ,GAAK,EAAA,MAAA,EAAQ,OAAS,GAAA,OAAA;AACrC,EAAA,KAAA,EAAO,mBAAsB,IAAA;AAC7B,EAAA,UAAA,CAAW,8CAA8C,MAAM,CAAA;AAE/D,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,IAAI,uBAA0B,GAAA,KAAA;AAC9B,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAE3B,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,IAAI,WAAW,EAAI,EAAA;AACjB,MAAQ,KAAA,GAAA,GAAA;AAAA,KACV,MAAA,IAAW,QAAW,GAAA,CAAA,KAAM,CAAG,EAAA;AAC7B,MAAS,KAAA,IAAA,GAAA;AAAA;AAEX,IAAA,MAAM,WAAe,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA;AAC/C,IAAA,IAAI,WAAc,GAAA,KAAA,GAAQ,GAAO,GAAA,MAAA,CAAO,uBAAyB,EAAA;AAC/D,MAAA,MAAM,QAAQ,IAAI,iBAAA;AAAA,QAChB;AAAA,OACF;AACA,MAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,QAA0B,uBAAA,GAAA,IAAA;AAC1B,QAAA,KAAA,EAAO,sBAAsB,KAAK,CAAA;AAAA;AAEpC,MAAM,MAAA,KAAA;AAAA;AAER,IAAA,QAAA,EAAA;AACA,IAAA,MAAM,IAAI,OAAQ,CAAA,CAAC,YAAY,UAAW,CAAA,OAAA,EAAS,KAAK,CAAC,CAAA;AACzD,IAAA,MAAM,KAAM,EAAA;AAAA,GACd;AAEA,EAAA,MAAM,QAAQ,YAAY;AACxB,IAAI,IAAA;AACF,MAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,CAAA,EAAG,GAAG,CAAuB,mBAAA,CAAA,EAAA;AAAA,QACxD,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,QAAA,UAAA,CAAW,wCAAwC,MAAM,CAAA;AACzD,QAAA,KAAA,EAAO,sBAAyB,IAAA;AAChC,QAAA,OAAO,QAAQ,OAAQ,EAAA;AAAA;AAEzB,MAAA,MAAM,cAAe,EAAA;AAAA,KACf,CAAA,MAAA;AACN,MAAA,MAAM,cAAe,EAAA;AAAA;AACvB,GACF;AAEA,EAAA,MAAM,KAAM,EAAA;AACd","file":"verify-deployment.js","sourcesContent":["import {fetch} from '@shopify/cli-kit/node/http';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {DeploymentConfig, DeploymentHooks, VerificationError} from './types.js';\n\ninterface VerificationOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n url: string;\n}\n\nexport async function verifyDeployment(\n options: VerificationOptions,\n): Promise<void> {\n const {config, url, logger, hooks} = options;\n hooks?.onVerificationStart?.();\n outputInfo('Verifying worker deployment is routable...', logger);\n\n let attempts = 0;\n let delay = 0;\n let calledVerificationError = false;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n if (attempts < 10) {\n delay = 500;\n } else if (attempts % 5 === 0) {\n delay += 5000;\n }\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > config.verificationMaxDuration) {\n const error = new VerificationError(\n 'Unable to verify that the worker is accessible.',\n );\n if (!calledVerificationError) {\n calledVerificationError = true;\n hooks?.onVerificationError?.(error);\n }\n throw error;\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n await check();\n };\n\n const check = async () => {\n try {\n const response = await fetch(`${url}/.oxygen/deployment`, {\n method: 'HEAD',\n });\n if (response.status === 200) {\n outputInfo('Deployment verification check passed', logger);\n hooks?.onVerificationComplete?.();\n return Promise.resolve();\n }\n await handleInterval();\n } catch {\n await handleInterval();\n }\n };\n\n await check();\n}\n"]}
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,eAAe,YAAe,GAAA;AAC5B,EAAA,MAAM,MAAO,CAAA;AAAA,IACX,WAAW,MAAY,CAAA,IAAA,CAAA,GAAA;AAAA,IACvB,WAAa,EAAA
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,eAAe,YAAe,GAAA;AAC5B,EAAA,MAAM,MAAO,CAAA;AAAA,IACX,WAAW,MAAY,CAAA,IAAA,CAAA,GAAA;AAAA,IACvB,WAAa,EAAA;AAAA,GACd,CAAA;AACH;AAEA,IAAO,aAAQ,GAAA","file":"index.js","sourcesContent":["import {runCLI} from '@shopify/cli-kit/node/cli';\n\nasync function runOxygenCLI() {\n await runCLI({\n moduleURL: import.meta.url,\n development: false,\n });\n}\n\nexport default runOxygenCLI;\n"]}
|
package/dist/oxygen-cli.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/oxygen-cli.ts"],"names":[],"mappings":";;;AAIA,OAAA,CAAQ,mBAAmB,SAAS,CAAA
|
1
|
+
{"version":3,"sources":["../src/oxygen-cli.ts"],"names":[],"mappings":";;;AAIA,OAAA,CAAQ,mBAAmB,SAAS,CAAA;AAEpC,MAAO,EAAA","file":"oxygen-cli.js","sourcesContent":["#!/usr/bin/env node\n\nimport runCLI from './index.js';\n\nprocess.removeAllListeners('warning');\n\nrunCLI();\n"]}
|
package/dist/utils/bugsnag.js
CHANGED
@@ -34,7 +34,7 @@ function sanitizeError(error, rootPath) {
|
|
34
34
|
const cleanError = Object.create(Object.getPrototypeOf(error));
|
35
35
|
Object.assign(cleanError, error, {
|
36
36
|
message: replaceRootPath(error.message),
|
37
|
-
stack: error.stack ? replaceRootPath(error.stack) :
|
37
|
+
stack: error.stack ? replaceRootPath(error.stack) : undefined
|
38
38
|
});
|
39
39
|
return cleanError;
|
40
40
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/bugsnag.ts"],"names":[],"mappings":";;;AAKA,IAAI,aAAA
|
1
|
+
{"version":3,"sources":["../../src/utils/bugsnag.ts"],"names":[],"mappings":";;;AAKA,IAAI,aAAA;AAEJ,SAAS,aAAa,cAAyB,EAAA;AAC7C,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA;AAAA,GACF,MAAA,IAAY,QAAgB,OAAS,EAAA;AACnC,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,MAAM,cAAc,eAAgB,EAAA;AAEpC,EAAA,MAAM,oBAA2C,GAAA;AAAA,IAC/C,MAAQ,EAAA,kCAAA;AAAA,IACR,gBAAkB,EAAA,IAAA;AAAA,IAClB,YAAY,WAAY,CAAA,OAAA;AAAA,IACxB,MAAQ,EAAA;AAAA,GACV;AAEA,EAAQ,OAAA,OAAA,CAAgB,MAAM,oBAAoB,CAAA;AACpD;AAEO,SAAS,kBAAkB,cAAyB,EAAA;AACzD,EAAA,aAAA,GAAgB,aAAa,cAAc,CAAA;AAC7C;AAEO,SAAS,UAAa,GAAA;AAC3B,EAAO,OAAA,aAAA;AACT;AAEO,SAAS,aAAA,CACd,OACA,QACgB,EAAA;AAChB,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,eAAA,GAAkB,CAAC,OAAoB,KAAA;AAC3C,IAAA,OAAO,QAAQ,OAAQ,CAAA,IAAI,OAAO,QAAU,EAAA,GAAG,GAAG,KAAK,CAAA;AAAA,GACzD;AAEA,EAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,IAAA,MAAM,aAAa,MAAO,CAAA,MAAA,CAAO,MAAO,CAAA,cAAA,CAAe,KAAK,CAAC,CAAA;AAC7D,IAAO,MAAA,CAAA,MAAA,CAAO,YAAY,KAAO,EAAA;AAAA,MAC/B,OAAA,EAAS,eAAgB,CAAA,KAAA,CAAM,OAAO,CAAA;AAAA,MACtC,OAAO,KAAM,CAAA,KAAA,GAAQ,eAAgB,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA;AAAA,KACrD,CAAA;AAED,IAAO,OAAA,UAAA;AAAA;AAGT,EAAA,OAAO,gBAAgB,KAAK,CAAA;AAC9B","file":"bugsnag.js","sourcesContent":["import Bugsnag from '@bugsnag/node';\nimport * as BugsnagCore from '@bugsnag/core';\n\nimport {loadPackageJson} from './utils.js';\n\nlet BugsnagClient: BugsnagCore.Client | undefined;\n\nfunction setupBugsnag(disableBugsnag: boolean) {\n if (disableBugsnag) {\n return;\n } else if ((Bugsnag as any)._client) {\n return Bugsnag;\n }\n\n const packageJson = loadPackageJson();\n\n const bugsnagServerOptions: BugsnagCore.Config = {\n apiKey: '21fd37fe87ead4b9c5a8eed90752b455',\n autoDetectErrors: true,\n appVersion: packageJson.version,\n logger: null,\n };\n\n return (Bugsnag as any).start(bugsnagServerOptions);\n}\n\nexport function initializeBugsnag(disableBugsnag: boolean) {\n BugsnagClient = setupBugsnag(disableBugsnag);\n}\n\nexport function getBugsnag() {\n return BugsnagClient;\n}\n\nexport function sanitizeError(\n error: Error | string,\n rootPath?: string,\n): Error | string {\n if (!rootPath) {\n return error;\n }\n\n const replaceRootPath = (message: string) => {\n return message.replace(new RegExp(rootPath, 'g'), '***');\n };\n\n if (error instanceof Error) {\n const cleanError = Object.create(Object.getPrototypeOf(error));\n Object.assign(cleanError, error, {\n message: replaceRootPath(error.message),\n stack: error.stack ? replaceRootPath(error.stack) : undefined,\n });\n\n return cleanError;\n }\n\n return replaceRootPath(error);\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":";;;;AAuBY,IAAA,UAAA,qBAAAA,WAAL,KAAA;AACL,EAAAA,YAAA,WAAY,CAAA,GAAA,YAAA
|
1
|
+
{"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":"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","file":"metrics-exporter.js","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {fetch} from '@shopify/cli-kit/node/http';\n\nimport {getBugsnag} from './bugsnag.js';\nimport {loadPackageJson} from './utils.js';\n\ninterface GodogEvent {\n name: string;\n type: string;\n value: number;\n tags: string[];\n}\n\ntype MetricCollection = Record<\n string,\n [{value: number; tags: Record<string, string>}]\n>;\n\ninterface MetricsExporterOptions {\n ciProvider: string;\n rootPath: string;\n}\n\nexport enum MetricName {\n BuildTime = 'build_time',\n NumFilesRequested = 'num_files_requested',\n NumFilesUploaded = 'num_files_uploaded',\n TotalSizeUploaded = 'total_size_uploaded',\n TotalSizeRequested = 'total_size_requested',\n TotalTime = 'total_time',\n UploadTime = 'upload_time',\n DeploymentCompletedTime = 'deployment_completed_time',\n DeploymentRoutableTime = 'deployment_routable_time',\n}\n\nexport class MetricsExporter {\n private metrics: MetricCollection = {};\n private readonly metricPrefix: string = 'oxygen.cli';\n private readonly defaultTags: Record<string, string>;\n private readonly exportUrl: string;\n\n constructor(options: MetricsExporterOptions) {\n const {version: cliVersion} = loadPackageJson();\n const {version: hydrogenVersion} = loadPackageJson(\n `${options.rootPath}/node_modules/@shopify/hydrogen`,\n );\n this.defaultTags = {\n ci_provider: options.ciProvider,\n cli_version: `oxygen-cli@${cliVersion || 'unknown'}`,\n hydrogen_version: hydrogenVersion || 'unknown',\n };\n this.exportUrl = 'https://metrics.myshopify.dev';\n }\n\n add(\n name: MetricName,\n value: number,\n tags: Record<string, string> = {},\n ): void {\n const metric = {\n value,\n tags,\n };\n\n if (this.metrics[name]) {\n this.metrics[name]!.push(metric);\n } else {\n this.metrics[name] = [metric];\n }\n }\n\n formatTags(tags: Record<string, string>): string[] {\n return Object.entries(tags).map(([key, value]) => `${key}:${value}`);\n }\n\n async export(): Promise<void> {\n const metricsToExport: GodogEvent[] = Object.entries(this.metrics)\n .map(([metricName, values]) => {\n const name = `${this.metricPrefix}.${metricName}`;\n\n return values.map(({value, tags}) => {\n return {\n name,\n type: 'gauge',\n value,\n tags: this.formatTags({...tags, ...this.defaultTags}),\n };\n });\n })\n .flat();\n\n try {\n await fetch(this.exportUrl, {\n method: 'POST',\n body: JSON.stringify({events: metricsToExport}),\n });\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n }\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":";;AAIO,MAAM,SAAY,GAAA;AAAA,EACvB,WAAa,EAAA,YAAA;AAAA,EACb,eAAiB,EAAA,8BAAA;AAAA,EACjB,KAAO,EAAA,wBAAA;AAAA,EACP,MAAQ,EAAA,2BAAA;AAAA,EACR,SAAW,EAAA,0BAAA;AAAA,EACX,SAAW,EAAA,iBAAA;AAAA,EACX,WAAa,EAAA
|
1
|
+
{"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":";;AAIO,MAAM,SAAY,GAAA;AAAA,EACvB,WAAa,EAAA,YAAA;AAAA,EACb,eAAiB,EAAA,8BAAA;AAAA,EACjB,KAAO,EAAA,wBAAA;AAAA,EACP,MAAQ,EAAA,2BAAA;AAAA,EACR,SAAW,EAAA,0BAAA;AAAA,EACX,SAAW,EAAA,iBAAA;AAAA,EACX,WAAa,EAAA;AACf;AAEO,SAAS,iBAAiB,UAAsC,EAAA;AACrE,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,UAAA;AAAA,IACX,OAAS,EAAA,KAAA;AAAA,IACT,YAAA,EAAc,MAAO,CAAA,cAAA,CAAe,mBAAoB,CAAA;AAAA,IACxD,kBAAoB,EAAA,KAAA;AAAA,IACpB,eAAiB,EAAA,SAAA;AAAA,IACjB,cAAgB,EAAA,aAAA;AAAA,IAChB,aAAe,EAAA,wBAAA;AAAA,IACf,uBAAyB,EAAA,GAAA;AAAA,IACzB,UAAU,EAAC;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,SAAW,EAAA,KAAA;AAAA,IACX,gBAAkB,EAAA,KAAA;AAAA,IAClB,SAAW,EAAA,UAAA;AAAA,IACX,UAAY,EAAA,KAAA;AAAA,IACZ,uBAAyB,EAAA;AAAA,GAC3B;AACF","file":"test-helper.js","sourcesContent":["import type {DeploymentConfig} from '../deploy/types.js';\n\nimport {deployDefaults} from './utils.js';\n\nexport const testToken = {\n accessToken: 'some_token',\n allowedResource: 'gid://oxygen-hub/Namespace/1',\n appId: 'gid://oxygen-hub/App/1',\n client: 'gid://oxygen-hub/Client/1',\n expiresAt: '2023-04-08T09:38:50.368Z',\n namespace: 'fresh-namespace',\n namespaceId: 'gid://oxygen-hub/Namespace/1',\n};\n\nexport function createTestConfig(rootFolder: string): DeploymentConfig {\n return {\n assetsDir: '/assets/',\n bugsnag: false,\n buildCommand: String(deployDefaults.buildCommandDefault!),\n defaultEnvironment: false,\n deploymentToken: testToken,\n environmentTag: 'environment',\n deploymentUrl: 'https://localhost:3000',\n verificationMaxDuration: 300,\n metadata: {},\n rootPath: rootFolder,\n skipBuild: false,\n skipVerification: false,\n workerDir: '/worker/',\n workerOnly: false,\n generateAuthBypassToken: false,\n };\n}\n"]}
|
package/dist/utils/utils.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { DeploymentConfig, ClientError
|
1
|
+
import { DeploymentToken, DeploymentConfig, ClientError } from '../deploy/types.js';
|
2
2
|
import '../deploy/graphql/deployment-verification-details.js';
|
3
3
|
|
4
4
|
declare const deployDefaults: Record<string, string | number>;
|
package/dist/utils/utils.js
CHANGED
@@ -103,7 +103,7 @@ function parseToken(inputToken) {
|
|
103
103
|
}
|
104
104
|
function authBypassTokenDurationParse(authBypassTokenDurationFlag) {
|
105
105
|
if (!authBypassTokenDurationFlag) {
|
106
|
-
return
|
106
|
+
return undefined;
|
107
107
|
}
|
108
108
|
const duration = Number(authBypassTokenDurationFlag);
|
109
109
|
if (isNaN(duration)) {
|
@@ -158,7 +158,7 @@ function convertKeysToCamelCase(obj) {
|
|
158
158
|
/([-_][a-z])/gi,
|
159
159
|
($1) => $1.toUpperCase().replace("-", "").replace("_", "")
|
160
160
|
);
|
161
|
-
if (obj[key] ===
|
161
|
+
if (obj[key] === undefined) {
|
162
162
|
throw new Error(`Invalid token: ${key} is undefined`);
|
163
163
|
}
|
164
164
|
result[camelCaseKey] = convertKeysToCamelCase(obj[key]);
|
package/dist/utils/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"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","file":"utils.js","sourcesContent":["import fs from 'fs';\nimport path, {dirname} from 'path';\nimport {fileURLToPath} from 'url';\n\nimport {fileExists, fileExistsSync} from '@shopify/cli-kit/node/fs';\nimport {outputInfo, outputWarn} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n ClientError,\n DeploymentConfig,\n DeploymentToken,\n} from '../deploy/types.js';\n\nexport const deployDefaults: Record<string, string | number> = {\n assetsDirDefault: 'dist/client/',\n buildCommandDefault: 'npm build',\n verificationDurationDefault: 180,\n maxUploadAttempts: 3,\n maxResumabeUploadAttempts: 9,\n workerDirDefault: 'dist/worker/',\n};\n\nexport function errorHandler(error: any) {\n if (isClientError(error)) {\n if (error.statusCode === 401) {\n throw new AbortError(\n 'You are not authorized to perform this action. Please check your deployment token.',\n );\n }\n\n if (error.statusCode === 429) {\n throw new AbortError(\n \"You've made too many requests. Please try again later\",\n );\n }\n }\n\n if (error instanceof AbortError && error.message.includes('503')) {\n throw new AbortError(\n 'The server is currently unavailable. Please try again later.',\n );\n }\n}\n\nexport function getBuildCommandFromLockFile(config: DeploymentConfig): string {\n const lockFileBuildCommands = new Map([\n ['package-lock.json', 'npm run build'],\n ['pnpm-lock.yaml', 'pnpm run build'],\n ['yarn.lock', 'yarn build'],\n ]);\n\n const foundLockFiles = [];\n\n for (const [lockFileName, buildCommand] of lockFileBuildCommands) {\n if (fileExistsSync(joinPath(config.rootPath!, lockFileName))) {\n foundLockFiles.push({lockFileName, buildCommand});\n }\n }\n\n if (foundLockFiles.length > 1) {\n const lockFilesList = foundLockFiles\n .map(({lockFileName}) => lockFileName)\n .join(', ');\n outputWarn(\n `Warning: Multiple lock files found: (${lockFilesList}).`,\n stderrLogger,\n );\n }\n\n if (foundLockFiles.length > 0) {\n const {lockFileName, buildCommand} = foundLockFiles[0] as {\n lockFileName: string;\n buildCommand: string;\n };\n\n const infoMsg = foundLockFiles.length > 1 ? '' : `Found: ${lockFileName}. `;\n\n outputInfo(\n `${infoMsg}Assuming \"${buildCommand}\" as build command. Use the buildCommand flag to override.`,\n stderrLogger,\n );\n return buildCommand;\n }\n\n return String(deployDefaults.buildCommandDefault);\n}\n\nexport enum Header {\n OxygenNamespaceHandle = 'X-Oxygen-Namespace-Handle',\n}\n\nexport function isClientError(error: unknown): error is ClientError {\n return typeof error === 'object' && error !== null && 'statusCode' in error;\n}\n\nexport function loadPackageJson(projectFolder?: string) {\n let jsonPath;\n if (projectFolder) {\n jsonPath = path.join(projectFolder, 'package.json');\n } else {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n jsonPath = path.join(__dirname, '../../package.json');\n }\n\n if (!fs.existsSync(jsonPath)) {\n return {};\n }\n const packageJsonData = fs.readFileSync(jsonPath, 'utf8');\n return JSON.parse(packageJsonData);\n}\n\nexport function stderrLogger(log: string): void {\n process.stderr.write(`${log}\\n`);\n}\n\nexport const maxLabelLength = 375;\n\nexport function parseToken(inputToken: string): DeploymentToken {\n try {\n const decodedToken = Buffer.from(inputToken, 'base64').toString('utf-8');\n const rawToken = JSON.parse(decodedToken);\n return convertKeysToCamelCase(rawToken) as DeploymentToken;\n } catch (error) {\n throw new Error(\n `Error processing deployment token. Please check your token and try again.`,\n );\n }\n}\n\nexport function authBypassTokenDurationParse(\n authBypassTokenDurationFlag?: string,\n): number | undefined {\n if (!authBypassTokenDurationFlag) {\n return undefined;\n }\n const duration = Number(authBypassTokenDurationFlag);\n if (isNaN(duration)) {\n throw new AbortError(\n \"Invalid duration format. Please specify the duration in hours (e.g., '10').\",\n );\n }\n if (duration > 12 || duration < 1) {\n throw new AbortError(\n 'Invalid duration length. Please specify the duration (in hours) between 1 to 12 hours.',\n );\n }\n return duration;\n}\n\ninterface VerifyConfigParams {\n config: DeploymentConfig;\n performedBuild?: boolean;\n}\n\nexport async function verifyConfig({\n config,\n performedBuild = false,\n}: VerifyConfigParams) {\n const {rootPath, workerDir, assetsDir, skipBuild, workerOnly} = config;\n const checkPaths: Record<string, string> = {\n root: rootPath!,\n };\n\n if (skipBuild || performedBuild) {\n checkPaths.worker = joinPath(rootPath!, workerDir!);\n if (!workerOnly) {\n checkPaths.assets = joinPath(rootPath!, assetsDir!);\n }\n }\n\n for (const pathType of Object.keys(checkPaths)) {\n await checkPath(checkPaths[pathType]!, pathType);\n }\n\n const addressRegex =\n /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+|^https:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/;\n if (!addressRegex.test(config.deploymentUrl)) {\n throw new Error(`Invalid deployment service URL: ${config.deploymentUrl}`);\n }\n}\n\nasync function checkPath(path: string, pathType: string) {\n if (!(await fileExists(path))) {\n if (pathType === 'assets') {\n outputWarn(\n `Use the \"workerOnly\" flag to perform a worker-only deployment.`,\n stderrLogger,\n );\n }\n throw new Error(`Path not found: ${path}`);\n }\n}\n\ninterface TokenType {\n [x: string]: string | TokenType;\n}\n\nfunction convertKeysToCamelCase(\n obj: TokenType | string,\n): DeploymentToken | string {\n if (typeof obj === 'object') {\n return Object.keys(obj).reduce((result: any, key: string) => {\n const camelCaseKey = key.replace(/([-_][a-z])/gi, ($1) =>\n $1.toUpperCase().replace('-', '').replace('_', ''),\n );\n if (obj[key] === undefined) {\n throw new Error(`Invalid token: ${key} is undefined`);\n }\n result[camelCaseKey] = convertKeysToCamelCase(obj[key] as TokenType);\n return result;\n }, {} as DeploymentToken);\n }\n return obj;\n}\n"]}
|
1
|
+
{"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"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","file":"utils.js","sourcesContent":["import fs from 'fs';\nimport path, {dirname} from 'path';\nimport {fileURLToPath} from 'url';\n\nimport {fileExists, fileExistsSync} from '@shopify/cli-kit/node/fs';\nimport {outputInfo, outputWarn} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n ClientError,\n DeploymentConfig,\n DeploymentToken,\n} from '../deploy/types.js';\n\nexport const deployDefaults: Record<string, string | number> = {\n assetsDirDefault: 'dist/client/',\n buildCommandDefault: 'npm build',\n verificationDurationDefault: 180,\n maxUploadAttempts: 3,\n maxResumabeUploadAttempts: 9,\n workerDirDefault: 'dist/worker/',\n};\n\nexport function errorHandler(error: any) {\n if (isClientError(error)) {\n if (error.statusCode === 401) {\n throw new AbortError(\n 'You are not authorized to perform this action. Please check your deployment token.',\n );\n }\n\n if (error.statusCode === 429) {\n throw new AbortError(\n \"You've made too many requests. Please try again later\",\n );\n }\n }\n\n if (error instanceof AbortError && error.message.includes('503')) {\n throw new AbortError(\n 'The server is currently unavailable. Please try again later.',\n );\n }\n}\n\nexport function getBuildCommandFromLockFile(config: DeploymentConfig): string {\n const lockFileBuildCommands = new Map([\n ['package-lock.json', 'npm run build'],\n ['pnpm-lock.yaml', 'pnpm run build'],\n ['yarn.lock', 'yarn build'],\n ]);\n\n const foundLockFiles = [];\n\n for (const [lockFileName, buildCommand] of lockFileBuildCommands) {\n if (fileExistsSync(joinPath(config.rootPath!, lockFileName))) {\n foundLockFiles.push({lockFileName, buildCommand});\n }\n }\n\n if (foundLockFiles.length > 1) {\n const lockFilesList = foundLockFiles\n .map(({lockFileName}) => lockFileName)\n .join(', ');\n outputWarn(\n `Warning: Multiple lock files found: (${lockFilesList}).`,\n stderrLogger,\n );\n }\n\n if (foundLockFiles.length > 0) {\n const {lockFileName, buildCommand} = foundLockFiles[0] as {\n lockFileName: string;\n buildCommand: string;\n };\n\n const infoMsg = foundLockFiles.length > 1 ? '' : `Found: ${lockFileName}. `;\n\n outputInfo(\n `${infoMsg}Assuming \"${buildCommand}\" as build command. Use the buildCommand flag to override.`,\n stderrLogger,\n );\n return buildCommand;\n }\n\n return String(deployDefaults.buildCommandDefault);\n}\n\nexport enum Header {\n OxygenNamespaceHandle = 'X-Oxygen-Namespace-Handle',\n}\n\nexport function isClientError(error: unknown): error is ClientError {\n return typeof error === 'object' && error !== null && 'statusCode' in error;\n}\n\nexport function loadPackageJson(projectFolder?: string) {\n let jsonPath;\n if (projectFolder) {\n jsonPath = path.join(projectFolder, 'package.json');\n } else {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n jsonPath = path.join(__dirname, '../../package.json');\n }\n\n if (!fs.existsSync(jsonPath)) {\n return {};\n }\n const packageJsonData = fs.readFileSync(jsonPath, 'utf8');\n return JSON.parse(packageJsonData);\n}\n\nexport function stderrLogger(log: string): void {\n process.stderr.write(`${log}\\n`);\n}\n\nexport const maxLabelLength = 375;\n\nexport function parseToken(inputToken: string): DeploymentToken {\n try {\n const decodedToken = Buffer.from(inputToken, 'base64').toString('utf-8');\n const rawToken = JSON.parse(decodedToken);\n return convertKeysToCamelCase(rawToken) as DeploymentToken;\n } catch (error) {\n throw new Error(\n `Error processing deployment token. Please check your token and try again.`,\n );\n }\n}\n\nexport function authBypassTokenDurationParse(\n authBypassTokenDurationFlag?: string,\n): number | undefined {\n if (!authBypassTokenDurationFlag) {\n return undefined;\n }\n const duration = Number(authBypassTokenDurationFlag);\n if (isNaN(duration)) {\n throw new AbortError(\n \"Invalid duration format. Please specify the duration in hours (e.g., '10').\",\n );\n }\n if (duration > 12 || duration < 1) {\n throw new AbortError(\n 'Invalid duration length. Please specify the duration (in hours) between 1 to 12 hours.',\n );\n }\n return duration;\n}\n\ninterface VerifyConfigParams {\n config: DeploymentConfig;\n performedBuild?: boolean;\n}\n\nexport async function verifyConfig({\n config,\n performedBuild = false,\n}: VerifyConfigParams) {\n const {rootPath, workerDir, assetsDir, skipBuild, workerOnly} = config;\n const checkPaths: Record<string, string> = {\n root: rootPath!,\n };\n\n if (skipBuild || performedBuild) {\n checkPaths.worker = joinPath(rootPath!, workerDir!);\n if (!workerOnly) {\n checkPaths.assets = joinPath(rootPath!, assetsDir!);\n }\n }\n\n for (const pathType of Object.keys(checkPaths)) {\n await checkPath(checkPaths[pathType]!, pathType);\n }\n\n const addressRegex =\n /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+|^https:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/;\n if (!addressRegex.test(config.deploymentUrl)) {\n throw new Error(`Invalid deployment service URL: ${config.deploymentUrl}`);\n }\n}\n\nasync function checkPath(path: string, pathType: string) {\n if (!(await fileExists(path))) {\n if (pathType === 'assets') {\n outputWarn(\n `Use the \"workerOnly\" flag to perform a worker-only deployment.`,\n stderrLogger,\n );\n }\n throw new Error(`Path not found: ${path}`);\n }\n}\n\ninterface TokenType {\n [x: string]: string | TokenType;\n}\n\nfunction convertKeysToCamelCase(\n obj: TokenType | string,\n): DeploymentToken | string {\n if (typeof obj === 'object') {\n return Object.keys(obj).reduce((result: any, key: string) => {\n const camelCaseKey = key.replace(/([-_][a-z])/gi, ($1) =>\n $1.toUpperCase().replace('-', '').replace('_', ''),\n );\n if (obj[key] === undefined) {\n throw new Error(`Invalid token: ${key} is undefined`);\n }\n result[camelCaseKey] = convertKeysToCamelCase(obj[key] as TokenType);\n return result;\n }, {} as DeploymentToken);\n }\n return obj;\n}\n"]}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
"@shopify:registry": "https://registry.npmjs.org"
|
6
6
|
},
|
7
7
|
"license": "MIT",
|
8
|
-
"version": "4.6.9
|
8
|
+
"version": "4.6.9",
|
9
9
|
"type": "module",
|
10
10
|
"scripts": {
|
11
11
|
"build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",
|
@@ -58,7 +58,7 @@
|
|
58
58
|
"oclif": "^4",
|
59
59
|
"tsup": "^8.3.6",
|
60
60
|
"typescript": "^5.7.3",
|
61
|
-
"vite": "^6.0
|
61
|
+
"vite": "^6.1.0",
|
62
62
|
"vitest": "^2.1.8"
|
63
63
|
},
|
64
64
|
"prettier": "@shopify/prettier-config",
|