Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Apache 2.0
4
44,213
  • Linux
  • Apple
Version.test.ts9.79 kB
import { enginesVersion, getCliQueryEngineBinaryType } from '@prisma/engines' import { BinaryType, download } from '@prisma/fetch-engine' import { getBinaryTargetForCurrentPlatform, jestConsoleContext, jestContext } from '@prisma/get-platform' import { engineEnvVarMap } from '@prisma/internals' import { ensureDir } from 'fs-extra' import path from 'path' import { version as typeScriptVersion } from 'typescript' import packageJson from '../../../package.json' const ctx = jestContext.new().add(jestConsoleContext()).assemble() const testIf = (condition: boolean) => (condition ? test : test.skip) const runLibraryTest = getCliQueryEngineBinaryType() === BinaryType.QueryEngineLibrary && !process.env.PRISMA_QUERY_ENGINE_LIBRARY const runBinaryTest = getCliQueryEngineBinaryType() === BinaryType.QueryEngineBinary && !process.env.PRISMA_QUERY_ENGINE_BINARY describe('version', () => { describe('shows @prisma/schema-engine-wasm when config.migrate.adapter is set', () => { testIf(runLibraryTest)('shows query-engine library when queryCompiler is turned off', async () => { ctx.fixture('prisma-config-dont-download-schema-engine') const data = await ctx.cli('version') expect(data.exitCode).toBe(0) expect(cleanSnapshot(data.stdout)).toMatchInlineSnapshot(` "Prisma schema loaded from schema.prisma prisma : 0.0.0 @prisma/client : 0.0.0 Computed binaryTarget : TEST_PLATFORM Operating System : OS Architecture : ARCHITECTURE Node.js : NODEJS_VERSION TypeScript : TYPESCRIPT_VERSION Query Engine (Node-API) : libquery-engine ENGINE_VERSION (at sanitized_path/libquery_engine-TEST_PLATFORM.LIBRARY_TYPE.node) PSL : @prisma/prisma-schema-wasm CLI_VERSION.ENGINE_VERSION Schema Engine : @prisma/schema-engine-wasm CLI_VERSION.ENGINE_VERSION Schema Engine Adapter : @prisma/adapter-mock Default Engines Hash : ENGINE_VERSION Studio : STUDIO_VERSION" `) expect(cleanSnapshot(data.stderr)).toMatchInlineSnapshot(` "Loaded Prisma config from prisma.config.ts. Prisma config detected, skipping environment variable loading." `) }) describe('bypassing query engine env vars', () => { const originalEnv = { ...process.env } const resetEnv = () => { for (const key of Object.keys(process.env)) { if (!(key in originalEnv)) { delete process.env[key] } } for (const [key, value] of Object.entries(originalEnv)) { if (value === undefined) { delete process.env[key] } else { process.env[key] = value } } } beforeAll(() => { resetEnv() delete process.env.PRISMA_CLI_QUERY_ENGINE_TYPE delete process.env.PRISMA_CLIENT_ENGINE_TYPE }) afterAll(() => { resetEnv() }) test('does not download query-engine when engine type is client', async () => { ctx.fixture('prisma-config-dont-download-engines') const data = await ctx.cli('version') expect(data.exitCode).toBe(0) expect(cleanSnapshot(data.stdout)).toMatchInlineSnapshot(` "Prisma schema loaded from schema.prisma prisma : 0.0.0 @prisma/client : 0.0.0 Computed binaryTarget : TEST_PLATFORM Operating System : OS Architecture : ARCHITECTURE Node.js : NODEJS_VERSION TypeScript : TYPESCRIPT_VERSION Query Compiler : enabled PSL : @prisma/prisma-schema-wasm CLI_VERSION.ENGINE_VERSION Schema Engine : @prisma/schema-engine-wasm CLI_VERSION.ENGINE_VERSION Schema Engine Adapter : @prisma/adapter-mock Default Engines Hash : ENGINE_VERSION Studio : STUDIO_VERSION" `) expect(cleanSnapshot(data.stderr)).toMatchInlineSnapshot(` "Loaded Prisma config from prisma.config.ts. Prisma config detected, skipping environment variable loading." `) }) }) }) // Node-API Tests testIf(runLibraryTest)('basic version (Node-API)', async () => { const data = await ctx.cli('--version') expect(cleanSnapshot(data.stdout)).toMatchSnapshot() }) testIf(runLibraryTest)( 'version with custom binaries (Node-API)', async () => { const enginesDir = path.join(__dirname, 'version-test-engines') await ensureDir(enginesDir) const binaryPaths = await download({ binaries: { 'schema-engine': enginesDir, 'libquery-engine': enginesDir, }, version: enginesVersion, failSilent: false, }) // This Omits query-engine from the map const { ['query-engine']: qe, ...envVarMap } = engineEnvVarMap const binaryTarget = await getBinaryTargetForCurrentPlatform() for (const engine in envVarMap) { const envVar = envVarMap[engine] process.env[envVar] = binaryPaths[engine][binaryTarget] } const data = await ctx.cli('--version') expect(cleanSnapshot(data.stdout, enginesVersion)).toMatchSnapshot() // cleanup for (const engine in envVarMap) { const envVar = envVarMap[engine] delete process[envVar] } }, 50_000, ) // Binary Tests testIf(runBinaryTest)( 'basic version', async () => { const data = await ctx.cli('--version') expect(cleanSnapshot(data.stdout)).toMatchSnapshot() }, 10_000, ) testIf(runBinaryTest)( 'version with custom binaries', async () => { const enginesDir = path.join(__dirname, 'version-test-engines') await ensureDir(enginesDir) const binaryPaths = await download({ binaries: { 'schema-engine': enginesDir, 'query-engine': enginesDir, }, version: enginesVersion, failSilent: false, }) const binaryTarget = await getBinaryTargetForCurrentPlatform() const { ['libquery-engine']: qe, ...envVarMap } = engineEnvVarMap for (const engine in envVarMap) { const envVar = envVarMap[engine] process.env[envVar] = binaryPaths[engine][binaryTarget] } const data = await ctx.cli('--version') expect(cleanSnapshot(data.stdout, enginesVersion)).toMatchSnapshot() // cleanup for (const engine in envVarMap) { const envVar = envVarMap[engine] delete process[envVar] } }, 50_000, ) }) function cleanSnapshot(str: string, versionOverride?: string): string { // sanitize engine path // Query Engine (Node-API) : libquery-engine e996df5d66a2314d1da15d31047f9777fc2fbdd9 (at ../../home/runner/work/prisma/prisma/node_modules/.pnpm/@prisma+engines@3.11.0-41.e996df5d66a2314d1da15d31047f9777fc2fbdd9/node_modules/@prisma/engines/libquery_engine-TEST_PLATFORM.LIBRARY_TYPE.node) // + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // Query Engine (Node-API) : libquery-engine 5a2e5869b69a983e279380ec68596b71beae9eff (at ../../cli/src/__tests__/commands/version-test-engines/libquery_engine-TEST_PLATFORM.LIBRARY_TYPE.node, resolved by PRISMA_QUERY_ENGINE_LIBRARY) // => ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // Query Engine (Node-API) : libquery-engine e996df5d66a2314d1da15d31047f9777fc2fbdd9 (at sanitized_path/libquery_engine-TEST_PLATFORM.LIBRARY_TYPE.node) // ^^^^^^^^^^^^^^^^^^^ str = str.replace(/\(at (.*engines)(\/|\\)/g, '(at sanitized_path/') // Replace 'Loaded Prisma config from "/.../prisma.config.ts"' // with 'Loaded Prisma config from "sanitized prisma.config.ts path"' str = str.replace( /Loaded Prisma config from ".*(\/|\\)prisma\.config\.ts"/g, 'Loaded Prisma config from "sanitized prisma.config.ts path"', ) // TODO: replace '[a-z0-9]{40}' with 'ENGINE_VERSION'. // Currently, the engine version of @prisma/prisma-schema-wasm isn't necessarily the same as the enginesVersion str = str.replace(/([0-9]+\.[0-9]+\.[0-9]+-[0-9]+\.)([a-z0-9-]+)/g, 'CLI_VERSION.ENGINE_VERSION') // Replace locally built prisma-schema-wasm and schema-engine-wasm versions linked via package.json str = str.replace(/link:([A-Z]:)?(\/[\w-]+)+/g, 'CLI_VERSION.ENGINE_VERSION') // replace engine version hash const defaultEngineVersion = enginesVersion const currentEngineVersion = versionOverride ?? enginesVersion str = str.replace(new RegExp(currentEngineVersion, 'g'), 'ENGINE_VERSION') str = str.replace(new RegExp(defaultEngineVersion, 'g'), 'ENGINE_VERSION') str = str.replace(new RegExp('(Operating System\\s+:).*', 'g'), '$1 OS') str = str.replace(new RegExp('(Architecture\\s+:).*', 'g'), '$1 ARCHITECTURE') str = str.replace(new RegExp('workspace:\\*', 'g'), 'ENGINE_VERSION') str = str.replace(new RegExp(process.version, 'g'), 'NODEJS_VERSION') str = str.replace(new RegExp(`(TypeScript\\s+:) ${typeScriptVersion}`, 'g'), '$1 TYPESCRIPT_VERSION') // replace studio version str = str.replace(packageJson.devDependencies['@prisma/studio-server'], 'STUDIO_VERSION') // sanitize windows specific engine names str = str.replace(/\.exe/g, '') return str }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prisma/prisma'

If you have feedback or need assistance with the MCP directory API, please join our Discord server