@shopify/oxygen-cli 3.1.3-unstable.202312071416.0 → 3.1.3
Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# @shopify/oxygen-cli
|
2
2
|
|
3
|
+
## 3.1.3
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 3c9f36d: Update vitest from 0.34.6 to 1.0.0
|
8
|
+
- e8a5a58: Update @shopify/eslint-plugin from 43.0.0 to 44.0.0
|
9
|
+
- 2ef909e: Update tsup from 7.3.0 to 8.0.1
|
10
|
+
- 243a30d: Update vitest from 1.0.0 to 1.0.4
|
11
|
+
|
3
12
|
## 3.1.2
|
4
13
|
|
5
14
|
### Patch Changes
|
@@ -7,6 +16,7 @@
|
|
7
16
|
- ad4ac47: Update @shopify/cli-kit from 3.51.2 to 3.52.0
|
8
17
|
- 80fd45c: Update @types/node from 20.9.1 to 20.10.4
|
9
18
|
- 74e4e06: Update eslint from 8.53.0 to 8.55.0
|
19
|
+
- 802bedd: Update typescript from 5.3.2 to 5.3.3
|
10
20
|
|
11
21
|
## 3.1.1
|
12
22
|
|
@@ -17,12 +17,8 @@ declare class MetricsExporter {
|
|
17
17
|
private readonly defaultTags;
|
18
18
|
private readonly exportUrl;
|
19
19
|
constructor(options: MetricsExporterOptions);
|
20
|
-
add(name: MetricName, value: number, tags?:
|
21
|
-
|
22
|
-
}): void;
|
23
|
-
formatTags(tags: {
|
24
|
-
[key: string]: string;
|
25
|
-
}): string[];
|
20
|
+
add(name: MetricName, value: number, tags?: Record<string, string>): void;
|
21
|
+
formatTags(tags: Record<string, string>): string[];
|
26
22
|
export(): Promise<void>;
|
27
23
|
}
|
28
24
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":"AACA,SAAQ,aAAY;AAEpB,SAAQ,kBAAiB;AACzB,SAAQ,uBAAsB;
|
1
|
+
{"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":"AACA,SAAQ,aAAY;AAEpB,SAAQ,kBAAiB;AACzB,SAAQ,uBAAsB;AAmBvB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,uBAAoB;AACpB,EAAAA,YAAA,sBAAmB;AACnB,EAAAA,YAAA,uBAAoB;AACpB,EAAAA,YAAA,wBAAqB;AACrB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,gBAAa;AAPH,SAAAA;AAAA,GAAA;AAUL,MAAM,gBAAgB;AAAA,EACnB,UAA4B,CAAC;AAAA,EACpB,eAAuB;AAAA,EACvB;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiC;AAC3C,UAAM,EAAC,SAAS,WAAU,IAAI,gBAAgB;AAC9C,UAAM,EAAC,SAAS,gBAAe,IAAI;AAAA,MACjC,GAAG,QAAQ,QAAQ;AAAA,IACrB;AACA,SAAK,cAAc;AAAA,MACjB,aAAa,QAAQ;AAAA,MACrB,aAAa,cAAc,cAAc,SAAS;AAAA,MAClD,kBAAkB,mBAAmB;AAAA,IACvC;AACA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IACE,MACA,OACA,OAA+B,CAAC,GAC1B;AACN,UAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,IAAI,GAAG;AACtB,WAAK,QAAQ,IAAI,EAAG,KAAK,MAAM;AAAA,IACjC,OAAO;AACL,WAAK,QAAQ,IAAI,IAAI,CAAC,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,WAAW,MAAwC;AACjD,WAAO,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,EACrE;AAAA,EAEA,MAAM,SAAwB;AAC5B,UAAM,kBAAgC,OAAO,QAAQ,KAAK,OAAO,EAC9D,IAAI,CAAC,CAAC,YAAY,MAAM,MAAM;AAC7B,YAAM,OAAO,GAAG,KAAK,YAAY,IAAI,UAAU;AAE/C,aAAO,OAAO,IAAI,CAAC,EAAC,OAAO,KAAI,MAAM;AACnC,eAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,MAAM,KAAK,WAAW,EAAC,GAAG,MAAM,GAAG,KAAK,YAAW,CAAC;AAAA,QACtD;AAAA,MACF,CAAC;AAAA,IACH,CAAC,EACA,KAAK;AAER,QAAI;AACF,YAAM,MAAM,KAAK,WAAW;AAAA,QAC1B,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAC,QAAQ,gBAAe,CAAC;AAAA,MAChD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,UAAU,WAAW;AAC3B,UAAI,YAAY,iBAAiB,SAAS,OAAO,UAAU,WAAW;AACpE,gBAAQ,OAAO,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF","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}\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"]}
|
package/dist/utils/utils.d.ts
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
import { DeploymentConfig, ClientError, DeploymentToken } from '../deploy/types.js';
|
2
2
|
import '../deploy/graphql/deployment-verification-details.js';
|
3
3
|
|
4
|
-
declare const deployDefaults:
|
5
|
-
[key: string]: string | number;
|
6
|
-
};
|
4
|
+
declare const deployDefaults: Record<string, string | number>;
|
7
5
|
declare function errorHandler(error: any): void;
|
8
6
|
declare function getBuildCommandFromLockFile(config: DeploymentConfig): string;
|
9
7
|
declare enum Header {
|
package/dist/utils/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"AAAA,OAAO,QAAQ;AACf,OAAO,QAAO,eAAc;AAC5B,SAAQ,qBAAoB;AAE5B,SAAQ,YAAY,sBAAqB;AACzC,SAAQ,YAAY,kBAAiB;AACrC,SAAQ,gBAAe;AACvB,SAAQ,kBAAiB;AAQlB,MAAM,
|
1
|
+
{"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"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","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: 'yarn 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\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": "3.1.3
|
8
|
+
"version": "3.1.3",
|
9
9
|
"type": "module",
|
10
10
|
"scripts": {
|
11
11
|
"build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",
|
@@ -46,7 +46,7 @@
|
|
46
46
|
"devDependencies": {
|
47
47
|
"@bugsnag/source-maps": "^2.3.1",
|
48
48
|
"@changesets/cli": "^2.27.1",
|
49
|
-
"@shopify/eslint-plugin": "^
|
49
|
+
"@shopify/eslint-plugin": "^44.0.0",
|
50
50
|
"@shopify/prettier-config": "^1.1.2",
|
51
51
|
"@types/async": "^3.2.24",
|
52
52
|
"@types/node": "^20.10.4",
|
@@ -54,10 +54,10 @@
|
|
54
54
|
"eslint-plugin-prettier": "^5.0.1",
|
55
55
|
"node-fetch": "^3.3.2",
|
56
56
|
"oclif": "^4",
|
57
|
-
"tsup": "^
|
58
|
-
"typescript": "^5.3.
|
57
|
+
"tsup": "^8.0.1",
|
58
|
+
"typescript": "^5.3.3",
|
59
59
|
"vite": "^4.4.10",
|
60
|
-
"vitest": "^0.
|
60
|
+
"vitest": "^1.0.4"
|
61
61
|
},
|
62
62
|
"prettier": "@shopify/prettier-config",
|
63
63
|
"oclif": {
|