@shopify/oxygen-cli 4.6.20-unstable.202505071715.0 → 4.7.1-unstable.202505081434.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 CHANGED
@@ -1,6 +1,10 @@
1
1
  # @shopify/oxygen-cli
2
2
 
3
- ## 4.6.19
3
+ ## 4.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 70115bb: Use "dist/server" as default worker directory
4
8
 
5
9
  ### Patch Changes
6
10
 
package/README.md CHANGED
@@ -42,7 +42,7 @@ oxygen:deploy [options]
42
42
  - `-p`, `--path`: Root path (defaults to the current working directory).
43
43
  - `-e`, `--environmentTag`: Tag of the environment to deploy to. Defaults to branch name in supported CI environments (see below).
44
44
  - `--defaultEnvironment`: Deploys to the default environment of the app.
45
- - `-w`, `--workerFolder`: Worker folder (default: `dist/worker/`).
45
+ - `-w`, `--workerFolder`: Worker folder (default: `dist/server/`).
46
46
  - `-a`, `--assetsFolder`: Assets folder (default: `dist/client/`).
47
47
  - `-o`, `--workerOnly`: Worker only deployment.
48
48
  - `-s`, `--skipBuild`: Skip running build command.
@@ -12,7 +12,7 @@ const deployDefaults = {
12
12
  verificationDurationDefault: 180,
13
13
  maxUploadAttempts: 3,
14
14
  maxResumabeUploadAttempts: 9,
15
- workerDirDefault: "dist/worker/"
15
+ workerDirDefault: "dist/server/"
16
16
  };
17
17
  function errorHandler(error) {
18
18
  if (isClientError(error)) {
@@ -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/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"]}
@@ -99,7 +99,7 @@
99
99
  "description": "Worker folder",
100
100
  "name": "workerFolder",
101
101
  "required": false,
102
- "default": "dist/worker/",
102
+ "default": "dist/server/",
103
103
  "hasDynamicHelp": false,
104
104
  "multiple": false,
105
105
  "type": "option"
@@ -203,5 +203,5 @@
203
203
  ]
204
204
  }
205
205
  },
206
- "version": "4.6.20-unstable.202505071715.0"
206
+ "version": "4.7.1-unstable.202505081434.0"
207
207
  }
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.20-unstable.202505071715.0",
8
+ "version": "4.7.1-unstable.202505081434.0",
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",