@shopify/oxygen-cli 5.0.1-unstable.202506131501.0 → 5.0.1-unstable.202507092243.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/utils/utils.js +20 -0
- package/dist/utils/utils.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
@@ -8,11 +8,13 @@
|
|
8
8
|
|
9
9
|
### Minor Changes
|
10
10
|
|
11
|
+
- cbb4d6e: Added error messages for 5xx status codes
|
11
12
|
- 70115bb: Use "dist/server" as default worker directory
|
12
13
|
|
13
14
|
### Patch Changes
|
14
15
|
|
15
16
|
- 18c232a: Update brace-expansion from 1.1.11 to 1.1.12
|
17
|
+
- d2b6c7c: Update @changesets/cli from 2.29.3 to 2.29.4
|
16
18
|
- db5e117: Update vitest from 3.1.1 to 3.1.2
|
17
19
|
- 371f333: Update oclif from 4.17.44 to 4.17.46
|
18
20
|
- f653da2: Update @types/node from 22.14.1 to 22.15.2
|
package/dist/utils/utils.js
CHANGED
@@ -26,6 +26,26 @@ function errorHandler(error) {
|
|
26
26
|
"You've made too many requests. Please try again later"
|
27
27
|
);
|
28
28
|
}
|
29
|
+
if ([502, 503, 504].includes(error.statusCode)) {
|
30
|
+
if (error.message && error.message.trim().length > 0) {
|
31
|
+
throw new AbortError(
|
32
|
+
`${error.message}. Please try your deployment again.`
|
33
|
+
);
|
34
|
+
}
|
35
|
+
throw new AbortError(
|
36
|
+
"The server is currently unavailable. Please try again later."
|
37
|
+
);
|
38
|
+
}
|
39
|
+
if (error.statusCode === 500) {
|
40
|
+
if (error.message && error.message.trim().length > 0) {
|
41
|
+
throw new AbortError(
|
42
|
+
`${error.message}. Please try your deployment again.`
|
43
|
+
);
|
44
|
+
}
|
45
|
+
throw new AbortError(
|
46
|
+
"An unknown error occurred, please try your deployment again"
|
47
|
+
);
|
48
|
+
}
|
29
49
|
}
|
30
50
|
if (error instanceof AbortError && error.message.includes("503")) {
|
31
51
|
throw new AbortError(
|
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/server/',\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/server/',\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 if ([502, 503, 504].includes(error.statusCode)) {\n if (error.message && error.message.trim().length > 0) {\n throw new AbortError(\n `${error.message}. Please try your deployment again.`,\n );\n }\n\n throw new AbortError(\n 'The server is currently unavailable. Please try again later.',\n );\n }\n\n if (error.statusCode === 500) {\n if (error.message && error.message.trim().length > 0) {\n throw new AbortError(\n `${error.message}. Please try your deployment again.`,\n );\n }\n\n throw new AbortError(\n 'An unknown error occurred, please try your deployment again',\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": "5.0.1-unstable.
|
8
|
+
"version": "5.0.1-unstable.202507092243.0",
|
9
9
|
"type": "module",
|
10
10
|
"scripts": {
|
11
11
|
"build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",
|
@@ -48,7 +48,7 @@
|
|
48
48
|
},
|
49
49
|
"devDependencies": {
|
50
50
|
"@bugsnag/source-maps": "^2.3.3",
|
51
|
-
"@changesets/cli": "^2.29.
|
51
|
+
"@changesets/cli": "^2.29.5",
|
52
52
|
"@shopify/eslint-plugin": "^48.0.2",
|
53
53
|
"@shopify/prettier-config": "^1.1.4",
|
54
54
|
"@types/async": "^3.2.24",
|