From 3fae5f173eda131a99c1fdee8f5abb966eb9b107 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:44:45 +1000 Subject: [PATCH 1/8] refactor: migrate telemetry tests to typescript --- packages/telemetry/package.json | 3 +- .../test/{config.test.js => config.test.ts} | 0 .../test/{index.test.js => index.test.ts} | 32 ++++++++++++++----- packages/telemetry/tsconfig.test.json | 13 ++++++++ 4 files changed, 39 insertions(+), 9 deletions(-) rename packages/telemetry/test/{config.test.js => config.test.ts} (100%) rename packages/telemetry/test/{index.test.js => index.test.ts} (76%) create mode 100644 packages/telemetry/tsconfig.test.json diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index dfaa652d6019..d03ef1d10b2a 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -23,7 +23,8 @@ "build": "astro-scripts build \"src/**/*.ts\" && tsc", "build:ci": "astro-scripts build \"src/**/*.ts\"", "dev": "astro-scripts dev \"src/**/*.ts\"", - "test": "astro-scripts test \"test/**/*.test.js\"" + "test": "astro-scripts test \"test/**/*.test.ts\"", + "typecheck:tests": "tsc --build tsconfig.test.json" }, "files": [ "dist" diff --git a/packages/telemetry/test/config.test.js b/packages/telemetry/test/config.test.ts similarity index 100% rename from packages/telemetry/test/config.test.js rename to packages/telemetry/test/config.test.ts diff --git a/packages/telemetry/test/index.test.js b/packages/telemetry/test/index.test.ts similarity index 76% rename from packages/telemetry/test/index.test.js rename to packages/telemetry/test/index.test.ts index 2bfc353614de..40a1c561e314 100644 --- a/packages/telemetry/test/index.test.js +++ b/packages/telemetry/test/index.test.ts @@ -1,11 +1,27 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; -import { AstroTelemetry } from '../dist/index.js'; +import { AstroTelemetry, type TelemetryEvent } from '../dist/index.js'; + +declare global { + // eslint-disable-next-line no-var + var _astroGlobalDebug: ((type: string, ...args: unknown[]) => void) | undefined; +} + +interface TelemetryTestAccess { + isCI: boolean; + env: NodeJS.ProcessEnv; + config: Map; + readonly enabled: boolean; + readonly isDisabled: boolean; + setEnabled(value: boolean): void; + record(event?: TelemetryEvent | TelemetryEvent[]): Promise; + notify(callback: () => boolean | Promise): Promise; +} function setup() { - const config = new Map(); - const telemetry = new AstroTelemetry({ astroVersion: '0.0.0-test.1', viteVersion: '0.0.0' }); - const logs = []; + const config = new Map(); + const telemetry = new AstroTelemetry({ astroVersion: '0.0.0-test.1', viteVersion: '0.0.0' }) as unknown as TelemetryTestAccess; + const logs: unknown[][] = []; // Stub isCI to false so we can test user-facing behavior telemetry.isCI = false; // Stub process.env to properly test in Astro's own CI @@ -15,7 +31,7 @@ function setup() { // Mock the global debug function to capture logs const originalDebug = globalThis._astroGlobalDebug; - globalThis._astroGlobalDebug = (type, ...args) => { + globalThis._astroGlobalDebug = (type: string, ...args: unknown[]) => { if (type === 'telemetry') { logs.push(args); } @@ -40,7 +56,7 @@ function setup() { }; } describe('AstroTelemetry', () => { - let oldCI; + let oldCI: string | undefined; before(() => { oldCI = process.env.CI; // Stub process.env.CI to `false` @@ -62,7 +78,7 @@ describe('AstroTelemetry', () => { assert.equal(config.get(key), false); assert.equal(telemetry.enabled, false); assert.equal(telemetry.isDisabled, true); - const result = await telemetry.record(['TEST']); + const result = await telemetry.record([{ eventName: 'TEST', payload: {} }]); assert.equal(result, undefined); const [log] = logs; assert.notEqual(log, undefined); @@ -77,7 +93,7 @@ describe('AstroTelemetry', () => { assert.equal(config.get(key), true); assert.equal(telemetry.enabled, true); assert.equal(telemetry.isDisabled, false); - await telemetry.record(['TEST']); + await telemetry.record([{ eventName: 'TEST', payload: {} }]); assert.equal(logs.length, 2); cleanup(); }); diff --git a/packages/telemetry/tsconfig.test.json b/packages/telemetry/tsconfig.test.json new file mode 100644 index 000000000000..c94db9d8553c --- /dev/null +++ b/packages/telemetry/tsconfig.test.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["test/**/*.ts"], + "exclude": ["test/fixtures/**"], + "compilerOptions": { + "noEmit": true, + "allowJs": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "rewriteRelativeImportExtensions": true + }, + "references": [{ "path": "../astro/tsconfig.test.json" }] +} From 25d4659050917dc52a2ea1aa224a65f5eef77e6c Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:47:45 +1000 Subject: [PATCH 2/8] format --- packages/telemetry/test/index.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index 40a1c561e314..2ae71f8efa7a 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -3,7 +3,6 @@ import { after, before, describe, it } from 'node:test'; import { AstroTelemetry, type TelemetryEvent } from '../dist/index.js'; declare global { - // eslint-disable-next-line no-var var _astroGlobalDebug: ((type: string, ...args: unknown[]) => void) | undefined; } @@ -20,7 +19,10 @@ interface TelemetryTestAccess { function setup() { const config = new Map(); - const telemetry = new AstroTelemetry({ astroVersion: '0.0.0-test.1', viteVersion: '0.0.0' }) as unknown as TelemetryTestAccess; + const telemetry = new AstroTelemetry({ + astroVersion: '0.0.0-test.1', + viteVersion: '0.0.0', + }) as unknown as TelemetryTestAccess; const logs: unknown[][] = []; // Stub isCI to false so we can test user-facing behavior telemetry.isCI = false; From 74b12eed836157fb4ab531117ee42a2670ad0487 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:49:11 +1000 Subject: [PATCH 3/8] remove types --- packages/telemetry/test/index.test.ts | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index 2ae71f8efa7a..b33f5517b022 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -6,30 +6,19 @@ declare global { var _astroGlobalDebug: ((type: string, ...args: unknown[]) => void) | undefined; } -interface TelemetryTestAccess { - isCI: boolean; - env: NodeJS.ProcessEnv; - config: Map; - readonly enabled: boolean; - readonly isDisabled: boolean; - setEnabled(value: boolean): void; - record(event?: TelemetryEvent | TelemetryEvent[]): Promise; - notify(callback: () => boolean | Promise): Promise; -} - function setup() { const config = new Map(); const telemetry = new AstroTelemetry({ astroVersion: '0.0.0-test.1', viteVersion: '0.0.0', - }) as unknown as TelemetryTestAccess; + }) ; const logs: unknown[][] = []; // Stub isCI to false so we can test user-facing behavior - telemetry.isCI = false; + telemetry['isCI'] = false; // Stub process.env to properly test in Astro's own CI - telemetry.env = {}; + telemetry['env'] = {}; // Override config so we can inspect it - telemetry.config = config; + telemetry['config'] = config; // Mock the global debug function to capture logs const originalDebug = globalThis._astroGlobalDebug; From 91688840d953015ec0ca0a26e98be88bf9f3a463 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:49:26 +1000 Subject: [PATCH 4/8] format --- packages/telemetry/test/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index b33f5517b022..95c3ad8fca77 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; -import { AstroTelemetry, type TelemetryEvent } from '../dist/index.js'; +import { AstroTelemetry } from '../dist/index.js'; declare global { var _astroGlobalDebug: ((type: string, ...args: unknown[]) => void) | undefined; @@ -11,7 +11,7 @@ function setup() { const telemetry = new AstroTelemetry({ astroVersion: '0.0.0-test.1', viteVersion: '0.0.0', - }) ; + }); const logs: unknown[][] = []; // Stub isCI to false so we can test user-facing behavior telemetry['isCI'] = false; From 0131c8f4e52dea5efe3bd6394b4e3c2886153ae9 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:51:18 +1000 Subject: [PATCH 5/8] just use any --- packages/telemetry/test/index.test.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index 95c3ad8fca77..7f4af946f03e 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -2,9 +2,7 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; import { AstroTelemetry } from '../dist/index.js'; -declare global { - var _astroGlobalDebug: ((type: string, ...args: unknown[]) => void) | undefined; -} + function setup() { const config = new Map(); @@ -21,8 +19,8 @@ function setup() { telemetry['config'] = config; // Mock the global debug function to capture logs - const originalDebug = globalThis._astroGlobalDebug; - globalThis._astroGlobalDebug = (type: string, ...args: unknown[]) => { + const originalDebug = (globalThis as any)._astroGlobalDebug; + (globalThis as any)._astroGlobalDebug = (type: string, ...args: unknown[]) => { if (type === 'telemetry') { logs.push(args); } @@ -41,7 +39,7 @@ function setup() { config, logs, cleanup: () => { - globalThis._astroGlobalDebug = originalDebug; + (globalThis as any)._astroGlobalDebug = originalDebug; process.env.DEBUG = oldDebug; }, }; From 8d07abb0a98fcb42dc18745b93992f835b24786d Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 22:51:30 +1000 Subject: [PATCH 6/8] format --- packages/telemetry/test/index.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index 7f4af946f03e..cad7495e2f02 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -2,8 +2,6 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; import { AstroTelemetry } from '../dist/index.js'; - - function setup() { const config = new Map(); const telemetry = new AstroTelemetry({ From 5b8d093c2f16e28d491be473bde3365ba8a45351 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 23:20:36 +1000 Subject: [PATCH 7/8] fix typecheck --- packages/telemetry/test/index.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/telemetry/test/index.test.ts b/packages/telemetry/test/index.test.ts index cad7495e2f02..d2c3f5c95dd3 100644 --- a/packages/telemetry/test/index.test.ts +++ b/packages/telemetry/test/index.test.ts @@ -63,8 +63,8 @@ describe('AstroTelemetry', () => { const [key] = Array.from(config.keys()); assert.notEqual(key, undefined); assert.equal(config.get(key), false); - assert.equal(telemetry.enabled, false); - assert.equal(telemetry.isDisabled, true); + assert.equal(telemetry['enabled'], false); + assert.equal(telemetry['isDisabled'], true); const result = await telemetry.record([{ eventName: 'TEST', payload: {} }]); assert.equal(result, undefined); const [log] = logs; @@ -78,8 +78,8 @@ describe('AstroTelemetry', () => { const [key] = Array.from(config.keys()); assert.notEqual(key, undefined); assert.equal(config.get(key), true); - assert.equal(telemetry.enabled, true); - assert.equal(telemetry.isDisabled, false); + assert.equal(telemetry['enabled'], true); + assert.equal(telemetry['isDisabled'], false); await telemetry.record([{ eventName: 'TEST', payload: {} }]); assert.equal(logs.length, 2); cleanup(); @@ -90,8 +90,8 @@ describe('AstroTelemetry', () => { const [key] = Array.from(config.keys()); assert.notEqual(key, undefined); assert.equal(config.get(key), false); - assert.equal(telemetry.enabled, false); - assert.equal(telemetry.isDisabled, true); + assert.equal(telemetry['enabled'], false); + assert.equal(telemetry['isDisabled'], true); const [log] = logs; assert.notEqual(log, undefined); assert.match(logs.join(''), /disabled/); @@ -103,8 +103,8 @@ describe('AstroTelemetry', () => { const [key] = Array.from(config.keys()); assert.notEqual(key, undefined); assert.equal(config.get(key), true); - assert.equal(telemetry.enabled, true); - assert.equal(telemetry.isDisabled, false); + assert.equal(telemetry['enabled'], true); + assert.equal(telemetry['isDisabled'], false); const [log] = logs; assert.notEqual(log, undefined); assert.match(logs.join(''), /enabled/); From db6cb185b2975c08fd5bd95c03f2eb7338121274 Mon Sep 17 00:00:00 2001 From: ocavue Date: Thu, 16 Apr 2026 23:20:52 +1000 Subject: [PATCH 8/8] chore: trigger ci