From 807b5c0776763e0942738c9c2c992d14af227e71 Mon Sep 17 00:00:00 2001 From: "quisi.do" Date: Thu, 24 Oct 2024 22:54:00 -0700 Subject: [PATCH] fix prepublish (#238) --- packages/authn-shared/package.json | 2 +- packages/authn/src/test/expect-private-log.ts | 2 +- .../src/test/expect-private-metric.test.ts | 10 +++++ .../authn/src/test/expect-private-metric.ts | 43 +++++++++++++++---- .../src/test/expect-public-metric.test.ts | 10 +++++ .../authn/src/test/expect-public-metric.ts | 43 +++++++++++++++---- packages/aws-rum-react/package.json | 2 +- .../utils/describe-package-json-scripts.ts | 2 +- packages/cjs-ts/package.json | 2 +- packages/cloudflare-utils/package.json | 2 +- packages/csp-shared/package.json | 2 +- packages/eslint-config/package.json | 2 +- packages/fmrs/package.json | 2 +- packages/fullstory-react/package.json | 2 +- packages/lazy-i18n/package.json | 2 +- packages/mock-next-router/package.json | 2 +- packages/next/package.json | 6 +-- packages/number-format-react/package.json | 2 +- packages/proposal-async-context/package.json | 2 +- packages/react-datadog/package.json | 2 +- packages/sentry-react/package.json | 2 +- packages/test/package.json | 2 +- packages/tree-logger/package.json | 2 +- packages/unknown2string/package.json | 2 +- packages/use-shallow-memo/package.json | 2 +- packages/vitest-config/package.json | 2 +- packages/worker/eslint.config.js | 11 +++++ packages/worker/package.json | 2 +- packages/worker/src/fetch-context.test.ts | 16 +++---- .../src/test/expect-emit-private-metric.ts | 18 -------- .../src/test/expect-emit-public-metric.ts | 18 -------- .../src/test/expect-private-metric.test.ts | 12 ++++++ .../worker/src/test/expect-private-metric.ts | 42 ++++++++++++++++++ .../src/test/expect-public-metric.test.ts | 12 ++++++ .../worker/src/test/expect-public-metric.ts | 42 ++++++++++++++++++ .../worker/src/worker-fetch-context.test.ts | 29 ++++++------- packages/worker/src/worker-fetch-context.ts | 8 ++-- 37 files changed, 256 insertions(+), 108 deletions(-) create mode 100644 packages/authn/src/test/expect-private-metric.test.ts create mode 100644 packages/authn/src/test/expect-public-metric.test.ts delete mode 100644 packages/worker/src/test/expect-emit-private-metric.ts delete mode 100644 packages/worker/src/test/expect-emit-public-metric.ts create mode 100644 packages/worker/src/test/expect-private-metric.test.ts create mode 100644 packages/worker/src/test/expect-private-metric.ts create mode 100644 packages/worker/src/test/expect-public-metric.test.ts create mode 100644 packages/worker/src/test/expect-public-metric.ts diff --git a/packages/authn-shared/package.json b/packages/authn-shared/package.json index 43f1c4ce7..bd2a7e422 100644 --- a/packages/authn-shared/package.json +++ b/packages/authn-shared/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/authn/src/test/expect-private-log.ts b/packages/authn/src/test/expect-private-log.ts index 063ec72ca..91f14692a 100644 --- a/packages/authn/src/test/expect-private-log.ts +++ b/packages/authn/src/test/expect-private-log.ts @@ -4,7 +4,7 @@ import { TEST_CONSOLE_ERROR } from './test-console.js'; export default function expectPrivateLog(err: Error): void { expect(TEST_CONSOLE_ERROR).toHaveBeenCalledWith( - 'Private:', + 'Private error:', err.message, err.cause, EXPECT_ANY_STRING, diff --git a/packages/authn/src/test/expect-private-metric.test.ts b/packages/authn/src/test/expect-private-metric.test.ts new file mode 100644 index 000000000..0f3c52e5b --- /dev/null +++ b/packages/authn/src/test/expect-private-metric.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, it } from 'vitest'; +import expectPrivateMetric from './expect-private-metric.js'; + +describe('expectPrivateMetric', (): void => { + it('should throw an error when the metric has not been emit', (): void => { + expect((): void => { + expectPrivateMetric({ name: 'test' }); + }).toThrow('Expected to emit a private metric:'); + }); +}); diff --git a/packages/authn/src/test/expect-private-metric.ts b/packages/authn/src/test/expect-private-metric.ts index 6ad7c578f..9af661d72 100644 --- a/packages/authn/src/test/expect-private-metric.ts +++ b/packages/authn/src/test/expect-private-metric.ts @@ -1,15 +1,40 @@ import type { Metric } from '@quisido/worker'; import { expect } from 'vitest'; -import { EXPECT_ANY_NUMBER } from './expect-any.js'; +import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; import { TEST_CONSOLE_LOG } from './test-console.js'; +const JSON_SPACE = 2; + export default function expectPrivateMetric(metric: Metric): void { - expect(TEST_CONSOLE_LOG).toHaveBeenCalledWith('Private:', { - timestamp: EXPECT_ANY_NUMBER, - traceFlags: 4, - traceId: '00000000000000000000000000000002', - traceParentId: '0000000000000003', - traceVersion: 1, - ...metric, - }); + const metrics: string[] = []; + for (const call of TEST_CONSOLE_LOG.mock.calls) { + const [prefix, metricStr] = call as readonly unknown[]; + if (prefix !== 'Private metric:' || typeof metricStr !== 'string') { + continue; + } + + try { + const metricJson: unknown = JSON.parse(metricStr); + expect(metricJson).toEqual({ + timestamp: EXPECT_ANY_NUMBER, + traceFlags: EXPECT_ANY_NUMBER, + traceId: EXPECT_ANY_STRING, + traceParentId: EXPECT_ANY_STRING, + traceVersion: EXPECT_ANY_NUMBER, + ...metric, + }); + return; + } catch (_err: unknown) { + metrics.push(metricStr); + continue; + } + } + + throw new Error(`Expected to emit a private metric: + +${JSON.stringify(metric, null, JSON_SPACE)} + +in: + +${metrics.join('\n\n')}`); } diff --git a/packages/authn/src/test/expect-public-metric.test.ts b/packages/authn/src/test/expect-public-metric.test.ts new file mode 100644 index 000000000..99322be8e --- /dev/null +++ b/packages/authn/src/test/expect-public-metric.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, it } from 'vitest'; +import expectPublicMetric from './expect-public-metric.js'; + +describe('expectPublicMetric', (): void => { + it('should throw an error when the metric has not been emit', (): void => { + expect((): void => { + expectPublicMetric({ name: 'test' }); + }).toThrow('Expected to emit a public metric:'); + }); +}); diff --git a/packages/authn/src/test/expect-public-metric.ts b/packages/authn/src/test/expect-public-metric.ts index 5470a4f78..defc7d94f 100644 --- a/packages/authn/src/test/expect-public-metric.ts +++ b/packages/authn/src/test/expect-public-metric.ts @@ -1,15 +1,40 @@ import type { Metric } from '@quisido/worker'; import { expect } from 'vitest'; -import { EXPECT_ANY_NUMBER } from './expect-any.js'; +import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; import { TEST_CONSOLE_LOG } from './test-console.js'; +const JSON_SPACE = 2; + export default function expectPublicMetric(metric: Metric): void { - expect(TEST_CONSOLE_LOG).toHaveBeenCalledWith('Public:', { - timestamp: EXPECT_ANY_NUMBER, - traceFlags: 4, - traceId: '00000000000000000000000000000002', - traceParentId: '0000000000000003', - traceVersion: 1, - ...metric, - }); + const metrics: string[] = []; + for (const call of TEST_CONSOLE_LOG.mock.calls) { + const [prefix, metricStr] = call as readonly unknown[]; + if (prefix !== 'Public metric:' || typeof metricStr !== 'string') { + continue; + } + + try { + const metricJson: unknown = JSON.parse(metricStr); + expect(metricJson).toEqual({ + timestamp: EXPECT_ANY_NUMBER, + traceFlags: EXPECT_ANY_NUMBER, + traceId: EXPECT_ANY_STRING, + traceParentId: EXPECT_ANY_STRING, + traceVersion: EXPECT_ANY_NUMBER, + ...metric, + }); + return; + } catch (_err: unknown) { + metrics.push(metricStr); + continue; + } + } + + throw new Error(`Expected to emit a public metric: + +${JSON.stringify(metric, null, JSON_SPACE)} + +in: + +${metrics.join('\n\n')}`); } diff --git a/packages/aws-rum-react/package.json b/packages/aws-rum-react/package.json index aa9b392a8..67788988f 100644 --- a/packages/aws-rum-react/package.json +++ b/packages/aws-rum-react/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/aws-rum-react/src/test/utils/describe-package-json-scripts.ts b/packages/aws-rum-react/src/test/utils/describe-package-json-scripts.ts index 9acf4e419..23f3e2dfb 100644 --- a/packages/aws-rum-react/src/test/utils/describe-package-json-scripts.ts +++ b/packages/aws-rum-react/src/test/utils/describe-package-json-scripts.ts @@ -32,7 +32,7 @@ export default function describePackageJsonScripts(packageJson: object): void { it('should have prepublish scripts', (): void => { assert('prepublish' in scripts); expect(scripts.prepublish).toBe( - 'concurrently --kill-others-on-fail --names eslint,publint,vitest "yarn run eslint" "yarn run publint" "yarn run vitest:run"', + 'concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto "yarn run eslint" "yarn run publint" "yarn run vitest:run"', ); }); diff --git a/packages/cjs-ts/package.json b/packages/cjs-ts/package.json index e4a0f2d4a..ea7d63cfb 100644 --- a/packages/cjs-ts/package.json +++ b/packages/cjs-ts/package.json @@ -33,7 +33,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "exit 0", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", "publint": "publint" }, "dependencies": { diff --git a/packages/cloudflare-utils/package.json b/packages/cloudflare-utils/package.json index a1b1dc05e..1aa720f04 100644 --- a/packages/cloudflare-utils/package.json +++ b/packages/cloudflare-utils/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/csp-shared/package.json b/packages/csp-shared/package.json index 05247daa4..47f4f21ce 100644 --- a/packages/csp-shared/package.json +++ b/packages/csp-shared/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 8a6f86d1b..fd8fcade1 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -62,7 +62,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/fmrs/package.json b/packages/fmrs/package.json index e5cff53ac..d23ff2c76 100644 --- a/packages/fmrs/package.json +++ b/packages/fmrs/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/fullstory-react/package.json b/packages/fullstory-react/package.json index c6e740e5c..397416982 100644 --- a/packages/fullstory-react/package.json +++ b/packages/fullstory-react/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/lazy-i18n/package.json b/packages/lazy-i18n/package.json index 1eaeb90e1..c962ce29b 100644 --- a/packages/lazy-i18n/package.json +++ b/packages/lazy-i18n/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/mock-next-router/package.json b/packages/mock-next-router/package.json index b89620a34..52fcc30b1 100644 --- a/packages/mock-next-router/package.json +++ b/packages/mock-next-router/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/next/package.json b/packages/next/package.json index 82aeb1574..b62b43372 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -25,7 +25,7 @@ "build": "next build --debug", "clean": "rm -rf .next .wrangler cypress/coverage cypress/downloads cypress/screenshots cypress/videos out", "coverage": "monorepo-template-coverage", - "cypress": "concurrently --hide server --kill-others --kill-others-on-fail --names server,cypress --success command-cypress \"next build && next start\" \"yarn run cypress:run\"", + "cypress": "concurrently --hide server --kill-others --kill-others-on-fail --names server,cypress --prefix-colors auto --success command-cypress \"next build && next start\" \"yarn run cypress:run\"", "cypress:open": "wait-on https://localhost:3000/ && cypress open", "cypress:pnp": "node ./scripts/cypress-pnp/index.js", "cypress:run": "wait-on https://localhost:3000/ && cypress run --browser chrome:canary", @@ -36,13 +36,13 @@ "export": "next export --turbo", "info": "next info", "lighthouse": "yarn run build && yarn run lighthouse:report && yarn run postlighthouse", - "lighthouse:report": "concurrently --hide serve --kill-others --kill-others-on-fail --names lighthouse,serve --success command-lighthouse \"yarn run lighthouse:report:serve\" \"yarn run serve\"", + "lighthouse:report": "concurrently --hide serve --kill-others --kill-others-on-fail --names lighthouse,serve --prefix-colors auto --success command-lighthouse \"yarn run lighthouse:report:serve\" \"yarn run serve\"", "lighthouse:report:dev": "wait-on https://localhost:3000/ && lighthouse https://localhost:3000/ --budget-path=lighthouse.budget.json --chrome-flags=\"--headless\" --config-path=lighthouse.config.js --enable-error-reporting --output=html,json --output-path=lighthouse --preset=experimental --save-assets", "lighthouse:report:serve": "wait-on http://localhost:3000/ && lighthouse http://localhost:3000/ --budget-path=lighthouse.budget.json --chrome-flags=\"--headless\" --config-path=lighthouse.config.js --enable-error-reporting --output=html,json --output-path=lighthouse --preset=experimental --save-assets", "lighthouse:report:production": "lighthouse https://quisi.do/ --budget-path=lighthouse.budget.json --chrome-flags=\"--headless\" --config-path=lighthouse.config.js --enable-error-reporting --output=html,json --output-path=lighthouse --preset=experimental --save-assets", "postlighthouse": "yarn node ./scripts/postlighthouse/index.js", "prepack": "yarn run build", - "prepublish": "concurrently --kill-others-on-fail --names publint,vitest \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names publint,vitest --prefix-colors auto \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "serve": "serve out", "vitest": "vitest", diff --git a/packages/number-format-react/package.json b/packages/number-format-react/package.json index 2dc26652b..dd498fd9b 100644 --- a/packages/number-format-react/package.json +++ b/packages/number-format-react/package.json @@ -26,7 +26,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/proposal-async-context/package.json b/packages/proposal-async-context/package.json index 3692870bb..8f6483dec 100644 --- a/packages/proposal-async-context/package.json +++ b/packages/proposal-async-context/package.json @@ -34,7 +34,7 @@ "attw": "attw --quiet", "fix-esm-import-path": "fix-esm-import-path dist/src/", "prepack": "yarn run webpack && yarn run fix-esm-import-path", - "prepublish": "concurrently --kill-others-on-fail --names attw,publint \"yarn run attw\" \"yarn run publint\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,publint --prefix-colors auto \"yarn run attw\" \"yarn run publint\"", "publint": "publint", "webpack": "webpack" }, diff --git a/packages/react-datadog/package.json b/packages/react-datadog/package.json index 875235171..73a9d0b40 100644 --- a/packages/react-datadog/package.json +++ b/packages/react-datadog/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/sentry-react/package.json b/packages/sentry-react/package.json index d09b446bd..3308c9bbb 100644 --- a/packages/sentry-react/package.json +++ b/packages/sentry-react/package.json @@ -40,7 +40,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/test/package.json b/packages/test/package.json index ff47b1926..27a281ad0 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -37,7 +37,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/tree-logger/package.json b/packages/tree-logger/package.json index 81cabe648..5b8d9d75f 100644 --- a/packages/tree-logger/package.json +++ b/packages/tree-logger/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/unknown2string/package.json b/packages/unknown2string/package.json index eaddb84b0..fb4fb8720 100644 --- a/packages/unknown2string/package.json +++ b/packages/unknown2string/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/use-shallow-memo/package.json b/packages/use-shallow-memo/package.json index 3d936f551..e57eb5592 100644 --- a/packages/use-shallow-memo/package.json +++ b/packages/use-shallow-memo/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names eslint,publint,vitest --prefix-colors auto \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --generateCpuProfile tsc-output.cpuprofile --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/vitest-config/package.json b/packages/vitest-config/package.json index e122a8206..7e86d1151 100644 --- a/packages/vitest-config/package.json +++ b/packages/vitest-config/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/worker/eslint.config.js b/packages/worker/eslint.config.js index 44426fff9..fc09ffd8c 100644 --- a/packages/worker/eslint.config.js +++ b/packages/worker/eslint.config.js @@ -54,6 +54,17 @@ export default [ }, }, + { + files: [ + 'src/test/expect-private-metric.ts', + 'src/test/expect-public-metric.ts', + ], + + rules: { + 'max-statements': 'off', + }, + }, + { files: ['src/worker.ts'], rules: { diff --git a/packages/worker/package.json b/packages/worker/package.json index 879a3cdaf..8af420646 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -34,7 +34,7 @@ "eslint": "eslint . --cache --color --exit-on-fatal-error --max-warnings 0", "eslint:fix": "eslint . --cache --color --exit-on-fatal-error --fix --max-warnings 0", "prepack": "yarn run tsc", - "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", + "prepublish": "concurrently --kill-others-on-fail --names attw,eslint,publint,vitest --prefix-colors auto \"yarn run attw\" \"yarn run eslint\" \"yarn run publint\" \"yarn run vitest:run\"", "publint": "publint", "tsc": "tsc --project tsconfig.prepack.json", "vitest": "vitest", diff --git a/packages/worker/src/fetch-context.test.ts b/packages/worker/src/fetch-context.test.ts index 78d399f21..edae7f1b1 100644 --- a/packages/worker/src/fetch-context.test.ts +++ b/packages/worker/src/fetch-context.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it } from 'vitest'; import TestD1Database from './test/d1-database.js'; import { EXPECT_ANY_STRING } from './test/expect-any.js'; -import expectToEmitPublicMetric from './test/expect-emit-public-metric.js'; +import expectPublicMetric from './test/expect-public-metric.js'; import expectToLogError from './test/expect-to-log-error.js'; import TestR2Bucket from './test/r2-bucket.js'; import { TEST_EXECUTION_CONTEXT } from './test/test-execution-context.js'; @@ -22,12 +22,12 @@ describe('FetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test-invalid-trace-parent-metric-name', }); expectToLogError( - 'Public:', + 'Public error:', 'Invalid trace parent', new Error('Invalid trace parent'), EXPECT_ANY_STRING, @@ -49,7 +49,7 @@ describe('FetchContext', (): void => { ); expectToLogError( - 'Public:', + 'Public error:', 'Invalid trace parent', new Error('Trace parent trace IDs must be non-zero.'), EXPECT_ANY_STRING, @@ -71,7 +71,7 @@ describe('FetchContext', (): void => { ); expectToLogError( - 'Public:', + 'Public error:', 'Invalid trace parent', new Error('Trace parent parent IDs must be non-zero.'), EXPECT_ANY_STRING, @@ -98,7 +98,7 @@ describe('FetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ db: 'TEST_DB', name: '@quisido/worker/d1-database/invalid', }); @@ -142,7 +142,7 @@ describe('FetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ bucket: 'TEST_BUCKET', name: '@quisido/worker/r2-bucket/invalid', }); @@ -189,7 +189,7 @@ describe('FetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test metric name', traceFlags: 35, traceId: '23456789abcdef0123456789abcdef01', diff --git a/packages/worker/src/test/expect-emit-private-metric.ts b/packages/worker/src/test/expect-emit-private-metric.ts deleted file mode 100644 index ecc8cf12d..000000000 --- a/packages/worker/src/test/expect-emit-private-metric.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { expect } from 'vitest'; -import type { Metric } from '../metric.js'; -import { TEST_CONSOLE_LOG } from './console.js'; -import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; - -const NONE = 0; -const UNSPECIFIED = 0; - -export default function expectToEmitPrivateMetric(metric: Metric): void { - expect(TEST_CONSOLE_LOG).toHaveBeenCalledWith('Private:', { - timestamp: EXPECT_ANY_NUMBER, - traceFlags: NONE, - traceId: EXPECT_ANY_STRING, - traceParentId: '0000000000000000', - traceVersion: UNSPECIFIED, - ...metric, - }); -} diff --git a/packages/worker/src/test/expect-emit-public-metric.ts b/packages/worker/src/test/expect-emit-public-metric.ts deleted file mode 100644 index 5af770151..000000000 --- a/packages/worker/src/test/expect-emit-public-metric.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { expect } from 'vitest'; -import type { Metric } from '../metric.js'; -import { TEST_CONSOLE_LOG } from './console.js'; -import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; - -const NONE = 0; -const UNSPECIFIED = 0; - -export default function expectToEmitPublicMetric(metric: Metric): void { - expect(TEST_CONSOLE_LOG).toHaveBeenCalledWith('Public:', { - timestamp: EXPECT_ANY_NUMBER, - traceFlags: NONE, - traceId: EXPECT_ANY_STRING, - traceParentId: '0000000000000000', - traceVersion: UNSPECIFIED, - ...metric, - }); -} diff --git a/packages/worker/src/test/expect-private-metric.test.ts b/packages/worker/src/test/expect-private-metric.test.ts new file mode 100644 index 000000000..6a9bf8a6d --- /dev/null +++ b/packages/worker/src/test/expect-private-metric.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from 'vitest'; +import { TEST_CONSOLE_LOG as testConsoleLog } from './console.js'; +import expectPrivateMetric from './expect-private-metric.js'; + +describe('expectPrivateMetric', (): void => { + it('should throw an error when the metric has not been emit', (): void => { + expect((): void => { + testConsoleLog('Private metric:', '{}'); + expectPrivateMetric({ name: 'test' }); + }).toThrow('Expected to emit a private metric:'); + }); +}); diff --git a/packages/worker/src/test/expect-private-metric.ts b/packages/worker/src/test/expect-private-metric.ts new file mode 100644 index 000000000..48ec68825 --- /dev/null +++ b/packages/worker/src/test/expect-private-metric.ts @@ -0,0 +1,42 @@ +import { expect } from 'vitest'; +import type { Metric } from '../metric.js'; +import { TEST_CONSOLE_LOG } from './console.js'; +import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; + +const JSON_SPACE = 2; +const NONE = 0; +const UNSPECIFIED = 0; + +export default function expectPrivateMetric(metric: Metric): void { + const metrics: string[] = []; + for (const call of TEST_CONSOLE_LOG.mock.calls) { + const [prefix, metricStr] = call as readonly unknown[]; + if (prefix !== 'Private metric:' || typeof metricStr !== 'string') { + continue; + } + + try { + const metricJson: unknown = JSON.parse(metricStr); + expect(metricJson).toEqual({ + timestamp: EXPECT_ANY_NUMBER, + traceFlags: NONE, + traceId: EXPECT_ANY_STRING, + traceParentId: '0000000000000000', + traceVersion: UNSPECIFIED, + ...metric, + }); + return; + } catch (_err: unknown) { + metrics.push(metricStr); + continue; + } + } + + throw new Error(`Expected to emit a private metric: + +${JSON.stringify(metric, null, JSON_SPACE)} + +in: + +${metrics.join('\n\n')}`); +} diff --git a/packages/worker/src/test/expect-public-metric.test.ts b/packages/worker/src/test/expect-public-metric.test.ts new file mode 100644 index 000000000..5e46d18b3 --- /dev/null +++ b/packages/worker/src/test/expect-public-metric.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from 'vitest'; +import { TEST_CONSOLE_LOG as testConsoleLog } from './console.js'; +import expectPublicMetric from './expect-public-metric.js'; + +describe('expectPublicMetric', (): void => { + it('should throw an error when the metric has not been emit', (): void => { + expect((): void => { + testConsoleLog('Public metric:', '{}'); + expectPublicMetric({ name: 'test' }); + }).toThrow('Expected to emit a public metric:'); + }); +}); diff --git a/packages/worker/src/test/expect-public-metric.ts b/packages/worker/src/test/expect-public-metric.ts new file mode 100644 index 000000000..00dc3454a --- /dev/null +++ b/packages/worker/src/test/expect-public-metric.ts @@ -0,0 +1,42 @@ +import { expect } from 'vitest'; +import type { Metric } from '../metric.js'; +import { TEST_CONSOLE_LOG } from './console.js'; +import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './expect-any.js'; + +const JSON_SPACE = 2; +const NONE = 0; +const UNSPECIFIED = 0; + +export default function expectPublicMetric(metric: Metric): void { + const metrics: string[] = []; + for (const call of TEST_CONSOLE_LOG.mock.calls) { + const [prefix, metricStr] = call as readonly unknown[]; + if (prefix !== 'Public metric:' || typeof metricStr !== 'string') { + continue; + } + + try { + const metricJson: unknown = JSON.parse(metricStr); + expect(metricJson).toEqual({ + timestamp: EXPECT_ANY_NUMBER, + traceFlags: NONE, + traceId: EXPECT_ANY_STRING, + traceParentId: '0000000000000000', + traceVersion: UNSPECIFIED, + ...metric, + }); + return; + } catch (_err: unknown) { + metrics.push(metricStr); + continue; + } + } + + throw new Error(`Expected to emit a public metric: + +${JSON.stringify(metric, null, JSON_SPACE)} + +in: + +${metrics.join('\n\n')}`); +} diff --git a/packages/worker/src/worker-fetch-context.test.ts b/packages/worker/src/worker-fetch-context.test.ts index 54e962148..2e0897892 100644 --- a/packages/worker/src/worker-fetch-context.test.ts +++ b/packages/worker/src/worker-fetch-context.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, vi } from 'vitest'; import TestAnalyticsEngineDataset from './test/analytics-engine-dataset.js'; import { EXPECT_ANY_NUMBER, EXPECT_ANY_STRING } from './test/expect-any.js'; -import expectToEmitPrivateMetric from './test/expect-emit-private-metric.js'; -import expectToEmitPublicMetric from './test/expect-emit-public-metric.js'; +import expectPrivateMetric from './test/expect-private-metric.js'; +import expectPublicMetric from './test/expect-public-metric.js'; import expectToLogError from './test/expect-to-log-error.js'; import { TEST_EXECUTION_CONTEXT, @@ -42,23 +42,18 @@ describe('WorkerFetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPrivateMetric({ - name: 'private', - }); - - expectToEmitPublicMetric({ - name: 'public', - }); + expectPrivateMetric({ name: 'private' }); + expectPublicMetric({ name: 'public' }); expectToLogError( - 'Private:', + 'Private error:', 'private message', 'private cause', EXPECT_ANY_STRING, ); expectToLogError( - 'Public:', + 'Public error:', 'public message', 'public cause', EXPECT_ANY_STRING, @@ -122,7 +117,7 @@ describe('WorkerFetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test-missing-private-dataset-metric-name', }); }); @@ -138,13 +133,13 @@ describe('WorkerFetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test-invalid-private-dataset-metric-name', type: 'string', }); expectToLogError( - 'Private:', + 'Private error:', 'Invalid private dataset', 'test invalid private dataset', EXPECT_ANY_STRING, @@ -186,7 +181,7 @@ describe('WorkerFetchContext', (): void => { TEST_EXECUTION_CONTEXT, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test-missing-public-dataset-metric-name', }); }); @@ -203,13 +198,13 @@ describe('WorkerFetchContext', (): void => { ); expectToLogError( - 'Private:', + 'Private error:', 'Invalid public dataset', 'test invalid public dataset', EXPECT_ANY_STRING, ); - expectToEmitPublicMetric({ + expectPublicMetric({ name: 'test-invalid-public-dataset-metric-name', type: 'string', }); diff --git a/packages/worker/src/worker-fetch-context.ts b/packages/worker/src/worker-fetch-context.ts index 7dff23588..f431a7d78 100644 --- a/packages/worker/src/worker-fetch-context.ts +++ b/packages/worker/src/worker-fetch-context.ts @@ -77,19 +77,19 @@ export default class WorkerFetchContext extends FetchContext { #setConsole(console: Console): void { this.onPrivateError((err: Error): void => { - console.error('Private:', err.message, err.cause, err.stack); + console.error('Private error:', err.message, err.cause, err.stack); }); this.onPublicError((err: Error): void => { - console.error('Public:', err.message, err.cause, err.stack); + console.error('Public error:', err.message, err.cause, err.stack); }); this.onPrivateMetric((metric: Metric): void => { - console.log('Private:', JSON.stringify(metric, null, JSON_SPACE)); + console.log('Private metric:', JSON.stringify(metric, null, JSON_SPACE)); }); this.onPublicMetric((metric: Metric): void => { - console.log('Public:', JSON.stringify(metric, null, JSON_SPACE)); + console.log('Public metric:', JSON.stringify(metric, null, JSON_SPACE)); }); }