diff --git a/packages/dds/sequence/package.json b/packages/dds/sequence/package.json index 09ac28aa9a48..07cd49b828d4 100644 --- a/packages/dds/sequence/package.json +++ b/packages/dds/sequence/package.json @@ -187,9 +187,13 @@ }, "fluidBuild": { "tasks": { - "build:test": [ + "build:test:cjs": [ "...", - "@fluidframework/merge-tree#build:test" + "@fluidframework/merge-tree#build:test:cjs" + ], + "build:test:esm": [ + "...", + "@fluidframework/merge-tree#build:test:esm" ] } }, diff --git a/packages/test/local-server-stress-tests/.mocharc.cjs b/packages/test/local-server-stress-tests/.mocharc.cjs index 45580c775c72..78479d820901 100644 --- a/packages/test/local-server-stress-tests/.mocharc.cjs +++ b/packages/test/local-server-stress-tests/.mocharc.cjs @@ -8,4 +8,7 @@ const getFluidTestMochaConfig = require("@fluid-internal/mocha-test-setup/mocharc-common"); const config = getFluidTestMochaConfig(__dirname); +config.spec = "lib/test/**/*.spec.*js"; +// Explicit exit is used to cut off any dangling GC / summarizer workloads. +config.exit = true; module.exports = config; diff --git a/packages/test/local-server-stress-tests/eslint.config.mts b/packages/test/local-server-stress-tests/eslint.config.mts index 9a761b570a30..b2481a13ee66 100644 --- a/packages/test/local-server-stress-tests/eslint.config.mts +++ b/packages/test/local-server-stress-tests/eslint.config.mts @@ -32,7 +32,7 @@ const config: Linter.Config[] = [ languageOptions: { parserOptions: { projectService: false, - project: ["./src/tsconfig.json"], + project: ["./src/test/tsconfig.json"], }, }, }, diff --git a/packages/test/local-server-stress-tests/package.json b/packages/test/local-server-stress-tests/package.json index 06493fd05ec5..139b2243468a 100644 --- a/packages/test/local-server-stress-tests/package.json +++ b/packages/test/local-server-stress-tests/package.json @@ -12,11 +12,12 @@ "license": "MIT", "author": "Microsoft and contributors", "sideEffects": false, - "type": "commonjs", + "type": "module", "scripts": { "build": "fluid-build . --task build", "build:compile": "fluid-build . --task compile", - "build:test": "tsc --project ./src/tsconfig.json", + "build:test": "npm run build:test:esm", + "build:test:esm": "tsc --project ./src/test/tsconfig.json", "check:biome": "biome check .", "check:format": "npm run check:biome", "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc", @@ -28,7 +29,8 @@ "lint:fix": "fluid-build . --task eslint:fix --task format", "test": "npm run test:mocha", "test:coverage": "c8 npm test", - "test:mocha": "mocha \"lib/test/**/*.spec.*js\" --exit", + "test:mocha": "npm run test:mocha:esm", + "test:mocha:esm": "mocha", "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha" }, "c8": { @@ -107,19 +109,19 @@ }, "fluidBuild": { "tasks": { - "build:test": [ - "^tsc", - "^api-extractor:commonjs", - "@fluidframework/id-compressor#build:test", - "@fluidframework/sequence#build:test", - "@fluidframework/map#build:test", - "@fluidframework/matrix#build:test", - "@fluidframework/tree#build:test", - "@fluidframework/task-manager#build:test", - "@fluidframework/legacy-dds#build:test", - "@fluidframework/ordered-collection#build:test", - "@fluidframework/counter#build:test", - "@fluidframework/register-collection#build:test" + "build:test:esm": [ + "^build:esnext", + "^api-extractor:esnext", + "@fluidframework/id-compressor#build:test:esm", + "@fluidframework/sequence#build:test:esm", + "@fluidframework/map#build:test:esm", + "@fluidframework/matrix#build:test:esm", + "@fluidframework/tree#build:test:esm", + "@fluidframework/task-manager#build:test:esm", + "@fluidframework/legacy-dds#build:test:esm", + "@fluidframework/ordered-collection#build:test:esm", + "@fluidframework/counter#build:test:esm", + "@fluidframework/register-collection#build:test:esm" ] } }, diff --git a/packages/test/local-server-stress-tests/src/dirname.cts b/packages/test/local-server-stress-tests/src/dirname.cts deleted file mode 100644 index ac1703eb418b..000000000000 --- a/packages/test/local-server-stress-tests/src/dirname.cts +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -/** - * Problem: - * - `__dirname` is not defined in ESM - * - `import.meta.url` is not defined in CJS - * Solution: - * - Export '__dirname' from a .cjs file in the same directory. - * - * Note that *.cjs files are always CommonJS, but can be imported from ESM. - */ -export const _dirname = __dirname; diff --git a/packages/test/local-server-stress-tests/src/baseModel.ts b/packages/test/local-server-stress-tests/src/test/baseModel.ts similarity index 95% rename from packages/test/local-server-stress-tests/src/baseModel.ts rename to packages/test/local-server-stress-tests/src/test/baseModel.ts index 18862d6b978a..7f0e08bcaaef 100644 --- a/packages/test/local-server-stress-tests/src/baseModel.ts +++ b/packages/test/local-server-stress-tests/src/test/baseModel.ts @@ -4,6 +4,7 @@ */ import * as path from "node:path"; +import { fileURLToPath } from "node:url"; import { type AsyncGenerator, @@ -24,13 +25,12 @@ import { loadAllHandles, type DDSModelOp, type OrderSequentially, -} from "./ddsOperations"; -import { _dirname } from "./dirname.cjs"; +} from "./ddsOperations.js"; import { createWeightedAsyncGeneratorWithDynamicWeights, type DynamicAsyncWeights, } from "./dynamicWeightGenerator.js"; -import type { LocalServerStressState } from "./localServerStressHarness"; +import type { LocalServerStressState } from "./localServerStressHarness.js"; import type { StressDataObjectOperations } from "./stressDataObject.js"; export type StressOperations = StressDataObjectOperations | DDSModelOp | OrderSequentially; @@ -246,9 +246,14 @@ export function makeGenerator( return op; }; } -export const saveFailures = { directory: path.join(_dirname, "../src/test/results") }; -export const saveSuccesses = { directory: path.join(_dirname, "../src/test/results") }; -export const saveFluidOps = { directory: path.join(_dirname, "../src/test/results") }; + +const srcResultsPath = path.join( + path.dirname(fileURLToPath(import.meta.url)), + "../../src/test/results", +); +export const saveFailures = { directory: srcResultsPath }; +export const saveSuccesses = { directory: srcResultsPath }; +export const saveFluidOps = { directory: srcResultsPath }; export const ddsModelMinimizers: MinimizationTransform[] = [ ...ddsModelMap.entries(), diff --git a/packages/test/local-server-stress-tests/src/dataStoreOperations.ts b/packages/test/local-server-stress-tests/src/test/dataStoreOperations.ts similarity index 92% rename from packages/test/local-server-stress-tests/src/dataStoreOperations.ts rename to packages/test/local-server-stress-tests/src/test/dataStoreOperations.ts index f032f4f163a3..4cbf85038645 100644 --- a/packages/test/local-server-stress-tests/src/dataStoreOperations.ts +++ b/packages/test/local-server-stress-tests/src/test/dataStoreOperations.ts @@ -5,7 +5,7 @@ import { assert } from "@fluidframework/core-utils/internal"; -import type { Client } from "./localServerStressHarness"; +import type { Client } from "./localServerStressHarness.js"; export const validateAllDataStoresSaved = async (...clients: Client[]): Promise => { for (const client of clients) { diff --git a/packages/test/local-server-stress-tests/src/ddsModels.ts b/packages/test/local-server-stress-tests/src/test/ddsModels.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/ddsModels.ts rename to packages/test/local-server-stress-tests/src/test/ddsModels.ts diff --git a/packages/test/local-server-stress-tests/src/ddsOperations.ts b/packages/test/local-server-stress-tests/src/test/ddsOperations.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/ddsOperations.ts rename to packages/test/local-server-stress-tests/src/test/ddsOperations.ts diff --git a/packages/test/local-server-stress-tests/src/dynamicWeightGenerator.ts b/packages/test/local-server-stress-tests/src/test/dynamicWeightGenerator.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/dynamicWeightGenerator.ts rename to packages/test/local-server-stress-tests/src/test/dynamicWeightGenerator.ts diff --git a/packages/test/local-server-stress-tests/src/test/localServerStress.spec.ts b/packages/test/local-server-stress-tests/src/test/localServerStress.spec.ts index 6212b7adfe7a..648bb006df93 100644 --- a/packages/test/local-server-stress-tests/src/test/localServerStress.spec.ts +++ b/packages/test/local-server-stress-tests/src/test/localServerStress.spec.ts @@ -11,13 +11,13 @@ import { reducer, saveFailures, type StressOperations, -} from "../baseModel.js"; -import { validateAllDataStoresSaved } from "../dataStoreOperations.js"; -import { validateConsistencyOfAllDDS } from "../ddsOperations"; +} from "./baseModel.js"; +import { validateAllDataStoresSaved } from "./dataStoreOperations.js"; +import { validateConsistencyOfAllDDS } from "./ddsOperations.js"; import { createLocalServerStressSuite, LocalServerStressModel, -} from "../localServerStressHarness"; +} from "./localServerStressHarness.js"; describe("Local Server Stress", () => { const model: LocalServerStressModel = { diff --git a/packages/test/local-server-stress-tests/src/localServerStressHarness.ts b/packages/test/local-server-stress-tests/src/test/localServerStressHarness.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/localServerStressHarness.ts rename to packages/test/local-server-stress-tests/src/test/localServerStressHarness.ts diff --git a/packages/test/local-server-stress-tests/src/stressDataObject.ts b/packages/test/local-server-stress-tests/src/test/stressDataObject.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/stressDataObject.ts rename to packages/test/local-server-stress-tests/src/test/stressDataObject.ts diff --git a/packages/test/local-server-stress-tests/src/tsconfig.json b/packages/test/local-server-stress-tests/src/test/tsconfig.json similarity index 58% rename from packages/test/local-server-stress-tests/src/tsconfig.json rename to packages/test/local-server-stress-tests/src/test/tsconfig.json index 3b86c69e2b1b..9d1e7a9043d5 100644 --- a/packages/test/local-server-stress-tests/src/tsconfig.json +++ b/packages/test/local-server-stress-tests/src/test/tsconfig.json @@ -1,8 +1,8 @@ { - "extends": "../../../../common/build/build-common/tsconfig.test.node16.json", + "extends": "../../../../../common/build/build-common/tsconfig.test.node16.json", "compilerOptions": { "rootDir": "./", - "outDir": "../lib", + "outDir": "../../lib/test", "types": ["mocha", "node"], "noUncheckedIndexedAccess": false, "exactOptionalPropertyTypes": false, diff --git a/packages/test/local-server-stress-tests/src/utils.ts b/packages/test/local-server-stress-tests/src/test/utils.ts similarity index 100% rename from packages/test/local-server-stress-tests/src/utils.ts rename to packages/test/local-server-stress-tests/src/test/utils.ts diff --git a/packages/test/local-server-tests/.mocharc.cjs b/packages/test/local-server-tests/.mocharc.cjs index 6345db3514ce..477d403cab09 100644 --- a/packages/test/local-server-tests/.mocharc.cjs +++ b/packages/test/local-server-tests/.mocharc.cjs @@ -8,6 +8,7 @@ const getFluidTestMochaConfig = require("@fluid-internal/mocha-test-setup/mocharc-common"); const config = getFluidTestMochaConfig(__dirname); +config.spec = "lib/test/**/*.spec.*js"; // TODO: figure out why this package needs the --exit flag, tests might not be cleaning up correctly after themselves // AB#7856 config.exit = true; diff --git a/packages/test/local-server-tests/package.json b/packages/test/local-server-tests/package.json index e67ae3bf945d..ee8725853b0c 100644 --- a/packages/test/local-server-tests/package.json +++ b/packages/test/local-server-tests/package.json @@ -12,11 +12,12 @@ "license": "MIT", "author": "Microsoft and contributors", "sideEffects": false, - "type": "commonjs", + "type": "module", "scripts": { "build": "fluid-build . --task build", "build:compile": "fluid-build . --task compile", - "build:test": "tsc --project ./src/test/tsconfig.json", + "build:test": "npm run build:test:esm", + "build:test:esm": "tsc --project ./src/test/tsconfig.json", "check:biome": "biome check .", "check:format": "npm run check:biome", "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc", @@ -28,7 +29,8 @@ "lint:fix": "fluid-build . --task eslint:fix --task format", "test": "npm run test:mocha", "test:coverage": "c8 npm test", - "test:mocha": "mocha \"lib/test/**/*.spec.*js\"", + "test:mocha": "npm run test:mocha:esm", + "test:mocha:esm": "mocha", "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha" }, "c8": { @@ -100,9 +102,9 @@ }, "fluidBuild": { "tasks": { - "build:test": [ - "^tsc", - "^api-extractor:commonjs" + "build:test:esm": [ + "^build:esnext", + "^api-extractor:esnext" ] } }, diff --git a/packages/test/local-server-tests/src/test/captureFullContainerState.spec.ts b/packages/test/local-server-tests/src/test/captureFullContainerState.spec.ts index d87d4fa86982..6328b3d44259 100644 --- a/packages/test/local-server-tests/src/test/captureFullContainerState.spec.ts +++ b/packages/test/local-server-tests/src/test/captureFullContainerState.spec.ts @@ -33,7 +33,7 @@ import { type TestFluidObject, } from "@fluidframework/test-utils/internal"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; const toComparableArray = (map: ISharedMap): [string, unknown][] => [...map.entries()].map(([key, value]) => [ diff --git a/packages/test/local-server-tests/src/test/decoupledCreate.spec.ts b/packages/test/local-server-tests/src/test/decoupledCreate.spec.ts index a6c493d63796..b88936544391 100644 --- a/packages/test/local-server-tests/src/test/decoupledCreate.spec.ts +++ b/packages/test/local-server-tests/src/test/decoupledCreate.spec.ts @@ -26,7 +26,7 @@ import { } from "@fluidframework/server-local-server"; import type { ITestFluidObject } from "@fluidframework/test-utils/internal"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; function createDSFWithOutOfBandCreate({ deltaConnectionServer, diff --git a/packages/test/local-server-tests/src/test/handleResolution.spec.ts b/packages/test/local-server-tests/src/test/handleResolution.spec.ts index c9236551ed58..696a436843cb 100644 --- a/packages/test/local-server-tests/src/test/handleResolution.spec.ts +++ b/packages/test/local-server-tests/src/test/handleResolution.spec.ts @@ -21,7 +21,7 @@ import { type ITestFluidObject, } from "@fluidframework/test-utils/internal"; -import { createLoader } from "../utils"; +import { createLoader } from "./utils.js"; /** * Creates a non-root data object and validates that it is not visible from the root of the container. diff --git a/packages/test/local-server-tests/src/test/loadFrozenContainerFromPendingState.spec.ts b/packages/test/local-server-tests/src/test/loadFrozenContainerFromPendingState.spec.ts index 7297dc2ef642..bf4658ec2a14 100644 --- a/packages/test/local-server-tests/src/test/loadFrozenContainerFromPendingState.spec.ts +++ b/packages/test/local-server-tests/src/test/loadFrozenContainerFromPendingState.spec.ts @@ -35,7 +35,7 @@ import { type TestFluidObject, } from "@fluidframework/test-utils/internal"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; const toComparableArray = (dir: ISharedMap): [string, unknown][] => [...dir.entries()].map(([key, value]) => [ diff --git a/packages/test/local-server-tests/src/test/pendingLocalStateStore.spec.ts b/packages/test/local-server-tests/src/test/pendingLocalStateStore.spec.ts index 9a7088251d20..cfd1d742dd77 100644 --- a/packages/test/local-server-tests/src/test/pendingLocalStateStore.spec.ts +++ b/packages/test/local-server-tests/src/test/pendingLocalStateStore.spec.ts @@ -22,7 +22,7 @@ import { getRequiredPendingLocalState, } from "@fluidframework/test-utils/internal"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; describe("PendingLocalStateStore End-to-End Tests", () => { /** diff --git a/packages/test/local-server-tests/src/test/readonly.spec.ts b/packages/test/local-server-tests/src/test/readonly.spec.ts index f539918578ee..75186df7b879 100644 --- a/packages/test/local-server-tests/src/test/readonly.spec.ts +++ b/packages/test/local-server-tests/src/test/readonly.spec.ts @@ -21,7 +21,7 @@ import { SharedMap, ISharedMap } from "@fluidframework/map/internal"; import type { IFluidDataStoreFactory } from "@fluidframework/runtime-definitions/internal"; import { LocalDeltaConnectionServer } from "@fluidframework/server-local-server"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; const mapFactory = SharedMap.getFactory(); const sharedObjectRegistry = new Map([[mapFactory.type, mapFactory]]); diff --git a/packages/test/local-server-tests/src/test/stagingMode.spec.ts b/packages/test/local-server-tests/src/test/stagingMode.spec.ts index 676c3a0e141b..ca6bf364ff39 100644 --- a/packages/test/local-server-tests/src/test/stagingMode.spec.ts +++ b/packages/test/local-server-tests/src/test/stagingMode.spec.ts @@ -45,7 +45,7 @@ import type { SharedObject } from "@fluidframework/shared-object-base/internal"; import { LoggingError, wrapError } from "@fluidframework/telemetry-utils/internal"; import sinon from "sinon"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; /** * A DataObject implementation that is used to test Staging Mode. diff --git a/packages/test/local-server-tests/src/test/synchronousDataStoreCreation.spec.ts b/packages/test/local-server-tests/src/test/synchronousDataStoreCreation.spec.ts index d96f926c640c..41f85006fe55 100644 --- a/packages/test/local-server-tests/src/test/synchronousDataStoreCreation.spec.ts +++ b/packages/test/local-server-tests/src/test/synchronousDataStoreCreation.spec.ts @@ -30,7 +30,7 @@ import type { import { isFluidHandle } from "@fluidframework/runtime-utils/internal"; import { LocalDeltaConnectionServer } from "@fluidframework/server-local-server"; -import { createLoader } from "../utils.js"; +import { createLoader } from "./utils.js"; const mapFactory = SharedMap.getFactory(); const sharedObjectRegistry = new Map([[mapFactory.type, mapFactory]]); diff --git a/packages/test/local-server-tests/src/test/tsconfig.json b/packages/test/local-server-tests/src/test/tsconfig.json index 9a8f91284a62..7d0213a9e6ad 100644 --- a/packages/test/local-server-tests/src/test/tsconfig.json +++ b/packages/test/local-server-tests/src/test/tsconfig.json @@ -1,8 +1,8 @@ { "extends": "../../../../../common/build/build-common/tsconfig.test.node16.json", "compilerOptions": { - "rootDir": "../", - "outDir": "../../lib", + "rootDir": "./", + "outDir": "../../lib/test", "types": ["mocha"], "noUncheckedIndexedAccess": false, "exactOptionalPropertyTypes": false, diff --git a/packages/test/local-server-tests/src/utils.ts b/packages/test/local-server-tests/src/test/utils.ts similarity index 100% rename from packages/test/local-server-tests/src/utils.ts rename to packages/test/local-server-tests/src/test/utils.ts