From 2bd5ecd5942a0212ba472211e9123471e91526fd Mon Sep 17 00:00:00 2001 From: Hyeoncheol Kim Date: Tue, 24 Feb 2026 17:41:19 +0900 Subject: [PATCH 1/2] feat(node): scaffold @jongodb/memory-server workspace (#107) --- .gitignore | 5 ++ package-lock.json | 57 +++++++++++++++++++ package.json | 13 +++++ packages/memory-server/README.md | 18 ++++++ packages/memory-server/package.json | 26 +++++++++ packages/memory-server/src/index.ts | 28 +++++++++ .../memory-server/src/test/scaffold.test.ts | 10 ++++ packages/memory-server/tsconfig.json | 19 +++++++ 8 files changed, 176 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/memory-server/README.md create mode 100644 packages/memory-server/package.json create mode 100644 packages/memory-server/src/index.ts create mode 100644 packages/memory-server/src/test/scaffold.test.ts create mode 100644 packages/memory-server/tsconfig.json diff --git a/.gitignore b/.gitignore index 9a937f0..36e0153 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ out/ # Local tool distributions .tooling/ + +# Node workspace artifacts +node_modules/ +packages/*/node_modules/ +packages/*/dist/ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0c7b2eb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,57 @@ +{ + "name": "jongodb-workspace", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "jongodb-workspace", + "workspaces": [ + "packages/*" + ] + }, + "node_modules/@jongodb/memory-server": { + "resolved": "packages/memory-server", + "link": true + }, + "node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "packages/memory-server": { + "name": "@jongodb/memory-server", + "version": "0.0.0-development", + "license": "Apache-2.0", + "devDependencies": { + "@types/node": "^20.17.57", + "typescript": "^5.9.2" + }, + "engines": { + "node": ">=20" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c10fd1f --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "jongodb-workspace", + "private": true, + "description": "Workspace scripts for jongodb Node adapter packages.", + "workspaces": [ + "packages/*" + ], + "scripts": { + "node:build": "npm run --workspace @jongodb/memory-server build", + "node:test": "npm run --workspace @jongodb/memory-server test", + "node:typecheck": "npm run --workspace @jongodb/memory-server typecheck" + } +} diff --git a/packages/memory-server/README.md b/packages/memory-server/README.md new file mode 100644 index 0000000..d4a39f9 --- /dev/null +++ b/packages/memory-server/README.md @@ -0,0 +1,18 @@ +# @jongodb/memory-server + +Node.js adapter package for starting a `jongodb` test server and obtaining a MongoDB URI. + +Current status: +- package scaffold is in place +- runtime process manager is tracked in issue `#108` + +## Local Commands + +From repository root: + +```bash +npm ci +npm run node:build +npm run node:typecheck +npm run node:test +``` diff --git a/packages/memory-server/package.json b/packages/memory-server/package.json new file mode 100644 index 0000000..e4d57a3 --- /dev/null +++ b/packages/memory-server/package.json @@ -0,0 +1,26 @@ +{ + "name": "@jongodb/memory-server", + "version": "0.0.0-development", + "description": "Node.js launcher for jongodb in-memory server", + "license": "Apache-2.0", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "engines": { + "node": ">=20" + }, + "scripts": { + "build": "tsc -p tsconfig.json", + "clean": "rm -rf dist", + "typecheck": "tsc -p tsconfig.json --noEmit", + "pretest": "npm run build", + "test": "node --test dist/test/*.test.js" + }, + "devDependencies": { + "@types/node": "^20.17.57", + "typescript": "^5.9.2" + } +} diff --git a/packages/memory-server/src/index.ts b/packages/memory-server/src/index.ts new file mode 100644 index 0000000..31acc6c --- /dev/null +++ b/packages/memory-server/src/index.ts @@ -0,0 +1,28 @@ +export interface JongodbMemoryServerOptions { + host?: string; + port?: number; + databaseName?: string; + startupTimeoutMs?: number; + logLevel?: "silent" | "info" | "debug"; +} + +export interface JongodbMemoryServer { + readonly uri: string; + stop(): Promise; +} + +function notImplementedError(): Error { + return new Error( + "Runtime process manager is not implemented yet. Track progress in issue #108." + ); +} + +/** + * Starts a local jongodb-backed MongoDB-compatible endpoint for tests. + * Runtime process lifecycle is implemented in issue #108. + */ +export async function startJongodbMemoryServer( + _options: JongodbMemoryServerOptions = {} +): Promise { + throw notImplementedError(); +} diff --git a/packages/memory-server/src/test/scaffold.test.ts b/packages/memory-server/src/test/scaffold.test.ts new file mode 100644 index 0000000..cf0fcbc --- /dev/null +++ b/packages/memory-server/src/test/scaffold.test.ts @@ -0,0 +1,10 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; + +import { startJongodbMemoryServer } from "../index.js"; + +test("startJongodbMemoryServer is scaffolded and explicitly not implemented", async () => { + await assert.rejects(async () => { + await startJongodbMemoryServer(); + }, /not implemented/i); +}); diff --git a/packages/memory-server/tsconfig.json b/packages/memory-server/tsconfig.json new file mode 100644 index 0000000..0753a87 --- /dev/null +++ b/packages/memory-server/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "declarationMap": true, + "strict": true, + "rootDir": "src", + "outDir": "dist", + "types": [ + "node" + ], + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts" + ] +} From 2d5d6850c25cfb9364ccdde0ec878d650fe93d0c Mon Sep 17 00:00:00 2001 From: Hyeoncheol Kim Date: Tue, 24 Feb 2026 17:46:01 +0900 Subject: [PATCH 2/2] chore(node): apply PR review follow-ups for scaffold metadata (#107) --- README.md | 9 +++++++++ packages/memory-server/package.json | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/README.md b/README.md index 4de51da..61c98ce 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,15 @@ Requirements: - Java 17+ - Gradle 8+ +## Node Adapter Status + +Node.js adapter work is tracked in issue `#106` and lives under `packages/memory-server`. + +Current state: +- package scaffold exists (`@jongodb/memory-server`) +- runtime process manager is in progress (`#108`) +- Jest/Vitest helpers and compatibility smoke suites are planned (`#109`, `#110`) + ## Transaction Contract (Current) Supported in current scope: diff --git a/packages/memory-server/package.json b/packages/memory-server/package.json index e4d57a3..0cf877b 100644 --- a/packages/memory-server/package.json +++ b/packages/memory-server/package.json @@ -2,6 +2,14 @@ "name": "@jongodb/memory-server", "version": "0.0.0-development", "description": "Node.js launcher for jongodb in-memory server", + "keywords": [ + "mongodb", + "mongodb-memory-server", + "jongodb", + "integration-test", + "jest", + "vitest" + ], "license": "Apache-2.0", "type": "module", "main": "./dist/index.js",