@prisma-next/sql-runtime 0.3.0-dev.40 → 0.3.0-dev.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/test/utils.d.mts.map +1 -1
- package/dist/test/utils.mjs +1 -1
- package/dist/test/utils.mjs.map +1 -1
- package/package.json +10 -10
- package/test/utils.ts +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.mts","names":[],"sources":["../../test/utils.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;AAiCA;;;AACY,iBADU,qBACV,CAAA,UAAA,aAAA,CAAc,UAAd,CAAyB,CAAzB,CAAA,CAAA,GAA+B,YAA/B,CAA4C,UAA5C,CAAuD,CAAvD,CAAA,CAAA,CAAA,CAAA,OAAA,EACD,UADC,CAAA,OACiB,aADjB,CAAA,EAAA,IAAA,EACuC,CADvC,CAAA,EAC2C,OAD3C,CACmD,UADnD,CAC8D,CAD9D,CAAA,EAAA,CAAA;;;;;AACD,iBASW,kBAAA,CATX,OAAA,EAUA,UAVA,CAAA,OAUkB,aAVlB,CAAA,EAAA,IAAA,EAWH,aAXG,GAWa,YAXb,CAAA,OAAA,CAAA,CAAA,EAYR,OAZQ,CAAA,IAAA,CAAA;;;;AAA4C,iBAmBjC,gBAAA,CAnBiC,MAAA,EAmBR,MAnBQ,EAAA,SAAA,EAmBW,YAnBX,CAAA,EAmB0B,OAnB1B,CAAA,IAAA,CAAA;;AASvD;;;AAEQ,iBAqBc,iBAAA,CArBd,MAAA,EAsBE,MAtBF,EAAA,QAAA,EAuBI,WAvBJ,CAuBgB,UAvBhB,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAwBY,MAxBZ,EAAA,GAwBuB,OAxBvB,CAAA,IAAA,CAAA,CAAA,EAyBL,OAzBK,CAAA,IAAA,CAAA;;;;AAQR;AAA+C,iBAsCzB,uBAAA,CAtCyB,MAAA,EAuCrC,MAvCqC,EAAA,QAAA,EAwCnC,WAxCmC,CAwCvB,UAxCuB,CAAA,CAAA,EAyC5C,OAzC4C,CAAA,IAAA,CAAA;;;;AAa/C;;AAEwB,iBAyCR,2BAAA,CAzCQ,OAAA,EA0Cb,OA1Ca,CA0CL,SA1CK,EA0CM,WA1CN,CA0CkB,UA1ClB,CAAA,EA0C+B,gBA1C/B,CAAA,CAAA,EA2CrB,2BA3CqB,CAAA,UAAA,CAAA;;;;AAErB,iBA6Da,0BAAA,CAAA,CA7Db,EA6D2C,0BA7D3C,CAAA,UAAA,CAAA;;AAqBH;;;;;;AAkBgB,iBA6CA,iBA7C2B,CAAA,kBA6CS,WA7CT,CA6CqB,UA7CrB,CAAA,CAAA,CAAA,QAAA,EA8C/B,SA9C+B,EAAA,OAAA,EA+ChC,OA/CgC,CA+CxB,SA/CwB,EA+Cb,WA/Ca,CA+CD,UA/CC,CAAA,EA+CY,gBA/CZ,CAAA,EAAA,OACD,CADC,EAAA;EACxB,cAAA,CAAA,EAgDE,aAhDF,CAgDgB,6BAhDhB,CAAA,UAAA,CAAA,CAAA;CAAuB,CAAA,EAkDvC,gBAlDuC,CAkDtB,SAlDsB,CAAA;AAAZ,iBA6Dd,uBAAA,CA7Dc,OAC3B,CAD2B,EAAA;EAAyB,cAAA,CAAA,EA8DpC,aA9DoC,CA8DtB,6BA9DsB,CAAA,UAAA,CAAA,CAAA;EAA5C,MAAA,CAAA,EA+DA,uBA/DA,CAAA,KAAA,EAAA,UAAA,EAAA,OAAA,EAmEP,wBAnEO,CAAA,UAAA,CAAA,CAAA;CACR,CAAA,EAoEF,wCAAA,CAAA,sBApEE,CAAA,KAAA,EAAA,UAAA,EAoEF,yBApEE,CAAA,UAAA,CAAA,EAoEF,wBApEE,CAAA,UAAA,CAAA,EAoEF,2BApEE,CAAA,UAAA,CAAA,CAAA;;AAoBH;AAuBA;;;;;AAE0C,iBAyC1B,iBAAA,CAAA,CAzC0B,EAyCL,OAzCK,CAyCG,SAzCH,EAyCc,WAzCd,CAyC0B,UAzC1B,CAAA,EAyCuC,gBAzCvC,CAAA;;;;;;;AAIvC,
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../../test/utils.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/test/utils.mjs
CHANGED
|
@@ -154,7 +154,7 @@ function createStubAdapter() {
|
|
|
154
154
|
typeId: "pg/timestamptz@1",
|
|
155
155
|
targetTypes: ["timestamptz"],
|
|
156
156
|
encode: (value) => value instanceof Date ? value.toISOString() : value,
|
|
157
|
-
decode: (wire) =>
|
|
157
|
+
decode: (wire) => wire instanceof Date ? wire : new Date(wire)
|
|
158
158
|
}));
|
|
159
159
|
return {
|
|
160
160
|
profile: {
|
package/dist/test/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":["collectAsync"],"sources":["../../test/utils.ts"],"sourcesContent":["import type { ExecutionPlan, ResultType } from '@prisma-next/contract/types';\nimport { coreHash, profileHash } from '@prisma-next/contract/types';\nimport { instantiateExecutionStack } from '@prisma-next/core-execution-plane/stack';\nimport type { RuntimeDriverDescriptor } from '@prisma-next/core-execution-plane/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { Adapter, LoweredStatement, SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport { codec, createCodecRegistry } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { collectAsync, drainAsyncIterable } from '@prisma-next/test-utils';\nimport type { Client } from 'pg';\nimport type { SqlStatement } from '../src/exports';\nimport {\n createExecutionContext,\n type createRuntime,\n createSqlExecutionStack,\n ensureSchemaStatement,\n ensureTableStatement,\n writeContractMarker,\n} from '../src/exports';\nimport type {\n ExecutionContext,\n SqlRuntimeAdapterDescriptor,\n SqlRuntimeAdapterInstance,\n SqlRuntimeDriverInstance,\n SqlRuntimeExtensionDescriptor,\n SqlRuntimeTargetDescriptor,\n} from '../src/sql-context';\n\n/**\n * Executes a plan and collects all results into an array.\n * This helper DRYs up the common pattern of executing plans in tests.\n * The return type is inferred from the plan's type parameter.\n */\nexport async function executePlanAndCollect<\n P extends ExecutionPlan<ResultType<P>> | SqlQueryPlan<ResultType<P>>,\n>(runtime: ReturnType<typeof createRuntime>, plan: P): Promise<ResultType<P>[]> {\n type Row = ResultType<P>;\n return collectAsync<Row>(runtime.execute<Row>(plan));\n}\n\n/**\n * Drains a plan execution, consuming all results without collecting them.\n * Useful for testing side effects without memory overhead.\n */\nexport async function drainPlanExecution(\n runtime: ReturnType<typeof createRuntime>,\n plan: ExecutionPlan | SqlQueryPlan<unknown>,\n): Promise<void> {\n return drainAsyncIterable(runtime.execute(plan));\n}\n\n/**\n * Executes a SQL statement on a database client.\n */\nexport async function executeStatement(client: Client, statement: SqlStatement): Promise<void> {\n if (statement.params.length > 0) {\n await client.query(statement.sql, [...statement.params]);\n return;\n }\n\n await client.query(statement.sql);\n}\n\n/**\n * Sets up database schema and data, then writes the contract marker.\n * This helper DRYs up the common pattern of database setup in tests.\n */\nexport async function setupTestDatabase(\n client: Client,\n contract: SqlContract<SqlStorage>,\n setupFn: (client: Client) => Promise<void>,\n): Promise<void> {\n await client.query('drop schema if exists prisma_contract cascade');\n await client.query('create schema if not exists public');\n\n await setupFn(client);\n\n await executeStatement(client, ensureSchemaStatement);\n await executeStatement(client, ensureTableStatement);\n const write = writeContractMarker({\n storageHash: contract.storageHash,\n profileHash: contract.profileHash ?? contract.storageHash,\n contractJson: contract,\n canonicalVersion: 1,\n });\n await executeStatement(client, write.insert);\n}\n\n/**\n * Writes a contract marker to the database.\n * This helper DRYs up the common pattern of writing contract markers in tests.\n */\nexport async function writeTestContractMarker(\n client: Client,\n contract: SqlContract<SqlStorage>,\n): Promise<void> {\n const write = writeContractMarker({\n storageHash: contract.storageHash,\n profileHash: contract.profileHash ?? contract.storageHash,\n contractJson: contract,\n canonicalVersion: 1,\n });\n await executeStatement(client, write.insert);\n}\n\n/**\n * Creates a test adapter descriptor from a raw adapter.\n * Wraps the adapter in an SqlRuntimeAdapterDescriptor with static contributions\n * derived from the adapter's codec registry.\n */\nexport function createTestAdapterDescriptor(\n adapter: Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n): SqlRuntimeAdapterDescriptor<'postgres'> {\n const codecRegistry = adapter.profile.codecs();\n return {\n kind: 'adapter' as const,\n id: 'test-adapter',\n version: '0.0.1',\n familyId: 'sql' as const,\n targetId: 'postgres' as const,\n codecs: () => codecRegistry,\n operationSignatures: () => [],\n parameterizedCodecs: () => [],\n create(): SqlRuntimeAdapterInstance<'postgres'> {\n return Object.assign({ familyId: 'sql' as const, targetId: 'postgres' as const }, adapter);\n },\n };\n}\n\n/**\n * Creates a test target descriptor with empty static contributions.\n */\nexport function createTestTargetDescriptor(): SqlRuntimeTargetDescriptor<'postgres'> {\n return {\n kind: 'target' as const,\n id: 'postgres',\n version: '0.0.1',\n familyId: 'sql' as const,\n targetId: 'postgres' as const,\n codecs: () => createCodecRegistry(),\n operationSignatures: () => [],\n parameterizedCodecs: () => [],\n create() {\n return { familyId: 'sql' as const, targetId: 'postgres' as const };\n },\n };\n}\n\n/**\n * Creates an ExecutionContext for testing.\n * This helper DRYs up the common pattern of context creation in tests.\n *\n * Accepts a raw adapter and optional extension descriptors, wrapping the\n * adapter in a descriptor internally for descriptor-first context creation.\n */\nexport function createTestContext<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n adapter: Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n options?: {\n extensionPacks?: ReadonlyArray<SqlRuntimeExtensionDescriptor<'postgres'>>;\n },\n): ExecutionContext<TContract> {\n return createExecutionContext({\n contract,\n stack: {\n target: createTestTargetDescriptor(),\n adapter: createTestAdapterDescriptor(adapter),\n extensionPacks: options?.extensionPacks ?? [],\n },\n });\n}\n\nexport function createTestStackInstance(options?: {\n extensionPacks?: ReadonlyArray<SqlRuntimeExtensionDescriptor<'postgres'>>;\n driver?: RuntimeDriverDescriptor<\n 'sql',\n 'postgres',\n unknown,\n SqlRuntimeDriverInstance<'postgres'>\n >;\n}) {\n const stack = createSqlExecutionStack({\n target: createTestTargetDescriptor(),\n adapter: createTestAdapterDescriptor(createStubAdapter()),\n driver: options?.driver,\n extensionPacks: options?.extensionPacks ?? [],\n });\n\n return instantiateExecutionStack(stack);\n}\n\n/**\n * Creates a stub adapter for testing.\n * This helper DRYs up the common pattern of adapter creation in tests.\n *\n * The stub adapter includes simple codecs for common test types (pg/int4@1, pg/text@1, pg/timestamptz@1)\n * to enable type inference in tests without requiring the postgres adapter package.\n */\nexport function createStubAdapter(): Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement> {\n const codecRegistry = createCodecRegistry();\n\n // Register stub codecs for common test types\n // These match the codec IDs used in test contracts (pg/int4@1, pg/text@1, pg/timestamptz@1)\n // but don't require importing from the postgres adapter package\n codecRegistry.register(\n codec({\n typeId: 'pg/int4@1',\n targetTypes: ['int4'],\n encode: (value: number) => value,\n decode: (wire: number) => wire,\n }),\n );\n\n codecRegistry.register(\n codec({\n typeId: 'pg/text@1',\n targetTypes: ['text'],\n encode: (value: string) => value,\n decode: (wire: string) => wire,\n }),\n );\n\n codecRegistry.register(\n codec({\n typeId: 'pg/timestamptz@1',\n targetTypes: ['timestamptz'],\n encode: (value: string | Date) => (value instanceof Date ? value.toISOString() : value),\n decode: (wire: string | Date) =>\n typeof wire === 'string' ? wire : wire instanceof Date ? wire.toISOString() : String(wire),\n }),\n );\n\n return {\n profile: {\n id: 'stub-profile',\n target: 'postgres',\n capabilities: {},\n codecs() {\n return codecRegistry;\n },\n },\n lower(ast: SelectAst, ctx: { contract: SqlContract<SqlStorage>; params?: readonly unknown[] }) {\n const sqlText = JSON.stringify(ast);\n return {\n profileId: this.profile.id,\n body: Object.freeze({ sql: sqlText, params: ctx.params ? [...ctx.params] : [] }),\n };\n },\n };\n}\n\n/**\n * Creates a valid test contract without using validateContract.\n * Ensures all required fields are present (mappings, capabilities, extensionPacks, meta, sources)\n * and returns the contract with proper typing.\n * This helper allows tests to create contracts without depending on sql-query.\n */\nexport function createTestContract(\n contract: Partial<Omit<SqlContract<SqlStorage>, 'storageHash' | 'profileHash'>> & {\n storageHash?: string;\n profileHash?: string;\n },\n): SqlContract<SqlStorage> {\n const { execution, ...rest } = contract;\n\n return {\n ...rest,\n schemaVersion: rest.schemaVersion ?? '1',\n target: rest.target ?? 'postgres',\n targetFamily: rest.targetFamily ?? 'sql',\n storage: rest.storage ?? { tables: {} },\n models: rest.models ?? {},\n relations: rest.relations ?? {},\n mappings: rest.mappings ?? { codecTypes: {}, operationTypes: {} },\n capabilities: rest.capabilities ?? {},\n extensionPacks: rest.extensionPacks ?? {},\n meta: rest.meta ?? {},\n sources: rest.sources ?? {},\n ...(execution ? { execution } : {}),\n storageHash: coreHash(rest.storageHash ?? 'sha256:testcore'),\n profileHash: profileHash(rest.profileHash ?? 'sha256:testprofile'),\n } satisfies SqlContract<SqlStorage>;\n}\n\n// Re-export generic utilities from test-utils\nexport {\n collectAsync,\n createDevDatabase,\n type DevDatabase,\n teardownTestDatabase,\n withClient,\n} from '@prisma-next/test-utils';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":["collectAsync"],"sources":["../../test/utils.ts"],"sourcesContent":["import type { ExecutionPlan, ResultType } from '@prisma-next/contract/types';\nimport { coreHash, profileHash } from '@prisma-next/contract/types';\nimport { instantiateExecutionStack } from '@prisma-next/core-execution-plane/stack';\nimport type { RuntimeDriverDescriptor } from '@prisma-next/core-execution-plane/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { Adapter, LoweredStatement, SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport { codec, createCodecRegistry } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { collectAsync, drainAsyncIterable } from '@prisma-next/test-utils';\nimport type { Client } from 'pg';\nimport type { SqlStatement } from '../src/exports';\nimport {\n createExecutionContext,\n type createRuntime,\n createSqlExecutionStack,\n ensureSchemaStatement,\n ensureTableStatement,\n writeContractMarker,\n} from '../src/exports';\nimport type {\n ExecutionContext,\n SqlRuntimeAdapterDescriptor,\n SqlRuntimeAdapterInstance,\n SqlRuntimeDriverInstance,\n SqlRuntimeExtensionDescriptor,\n SqlRuntimeTargetDescriptor,\n} from '../src/sql-context';\n\n/**\n * Executes a plan and collects all results into an array.\n * This helper DRYs up the common pattern of executing plans in tests.\n * The return type is inferred from the plan's type parameter.\n */\nexport async function executePlanAndCollect<\n P extends ExecutionPlan<ResultType<P>> | SqlQueryPlan<ResultType<P>>,\n>(runtime: ReturnType<typeof createRuntime>, plan: P): Promise<ResultType<P>[]> {\n type Row = ResultType<P>;\n return collectAsync<Row>(runtime.execute<Row>(plan));\n}\n\n/**\n * Drains a plan execution, consuming all results without collecting them.\n * Useful for testing side effects without memory overhead.\n */\nexport async function drainPlanExecution(\n runtime: ReturnType<typeof createRuntime>,\n plan: ExecutionPlan | SqlQueryPlan<unknown>,\n): Promise<void> {\n return drainAsyncIterable(runtime.execute(plan));\n}\n\n/**\n * Executes a SQL statement on a database client.\n */\nexport async function executeStatement(client: Client, statement: SqlStatement): Promise<void> {\n if (statement.params.length > 0) {\n await client.query(statement.sql, [...statement.params]);\n return;\n }\n\n await client.query(statement.sql);\n}\n\n/**\n * Sets up database schema and data, then writes the contract marker.\n * This helper DRYs up the common pattern of database setup in tests.\n */\nexport async function setupTestDatabase(\n client: Client,\n contract: SqlContract<SqlStorage>,\n setupFn: (client: Client) => Promise<void>,\n): Promise<void> {\n await client.query('drop schema if exists prisma_contract cascade');\n await client.query('create schema if not exists public');\n\n await setupFn(client);\n\n await executeStatement(client, ensureSchemaStatement);\n await executeStatement(client, ensureTableStatement);\n const write = writeContractMarker({\n storageHash: contract.storageHash,\n profileHash: contract.profileHash ?? contract.storageHash,\n contractJson: contract,\n canonicalVersion: 1,\n });\n await executeStatement(client, write.insert);\n}\n\n/**\n * Writes a contract marker to the database.\n * This helper DRYs up the common pattern of writing contract markers in tests.\n */\nexport async function writeTestContractMarker(\n client: Client,\n contract: SqlContract<SqlStorage>,\n): Promise<void> {\n const write = writeContractMarker({\n storageHash: contract.storageHash,\n profileHash: contract.profileHash ?? contract.storageHash,\n contractJson: contract,\n canonicalVersion: 1,\n });\n await executeStatement(client, write.insert);\n}\n\n/**\n * Creates a test adapter descriptor from a raw adapter.\n * Wraps the adapter in an SqlRuntimeAdapterDescriptor with static contributions\n * derived from the adapter's codec registry.\n */\nexport function createTestAdapterDescriptor(\n adapter: Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n): SqlRuntimeAdapterDescriptor<'postgres'> {\n const codecRegistry = adapter.profile.codecs();\n return {\n kind: 'adapter' as const,\n id: 'test-adapter',\n version: '0.0.1',\n familyId: 'sql' as const,\n targetId: 'postgres' as const,\n codecs: () => codecRegistry,\n operationSignatures: () => [],\n parameterizedCodecs: () => [],\n create(): SqlRuntimeAdapterInstance<'postgres'> {\n return Object.assign({ familyId: 'sql' as const, targetId: 'postgres' as const }, adapter);\n },\n };\n}\n\n/**\n * Creates a test target descriptor with empty static contributions.\n */\nexport function createTestTargetDescriptor(): SqlRuntimeTargetDescriptor<'postgres'> {\n return {\n kind: 'target' as const,\n id: 'postgres',\n version: '0.0.1',\n familyId: 'sql' as const,\n targetId: 'postgres' as const,\n codecs: () => createCodecRegistry(),\n operationSignatures: () => [],\n parameterizedCodecs: () => [],\n create() {\n return { familyId: 'sql' as const, targetId: 'postgres' as const };\n },\n };\n}\n\n/**\n * Creates an ExecutionContext for testing.\n * This helper DRYs up the common pattern of context creation in tests.\n *\n * Accepts a raw adapter and optional extension descriptors, wrapping the\n * adapter in a descriptor internally for descriptor-first context creation.\n */\nexport function createTestContext<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n adapter: Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n options?: {\n extensionPacks?: ReadonlyArray<SqlRuntimeExtensionDescriptor<'postgres'>>;\n },\n): ExecutionContext<TContract> {\n return createExecutionContext({\n contract,\n stack: {\n target: createTestTargetDescriptor(),\n adapter: createTestAdapterDescriptor(adapter),\n extensionPacks: options?.extensionPacks ?? [],\n },\n });\n}\n\nexport function createTestStackInstance(options?: {\n extensionPacks?: ReadonlyArray<SqlRuntimeExtensionDescriptor<'postgres'>>;\n driver?: RuntimeDriverDescriptor<\n 'sql',\n 'postgres',\n unknown,\n SqlRuntimeDriverInstance<'postgres'>\n >;\n}) {\n const stack = createSqlExecutionStack({\n target: createTestTargetDescriptor(),\n adapter: createTestAdapterDescriptor(createStubAdapter()),\n driver: options?.driver,\n extensionPacks: options?.extensionPacks ?? [],\n });\n\n return instantiateExecutionStack(stack);\n}\n\n/**\n * Creates a stub adapter for testing.\n * This helper DRYs up the common pattern of adapter creation in tests.\n *\n * The stub adapter includes simple codecs for common test types (pg/int4@1, pg/text@1, pg/timestamptz@1)\n * to enable type inference in tests without requiring the postgres adapter package.\n */\nexport function createStubAdapter(): Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement> {\n const codecRegistry = createCodecRegistry();\n\n // Register stub codecs for common test types\n // These match the codec IDs used in test contracts (pg/int4@1, pg/text@1, pg/timestamptz@1)\n // but don't require importing from the postgres adapter package\n codecRegistry.register(\n codec({\n typeId: 'pg/int4@1',\n targetTypes: ['int4'],\n encode: (value: number) => value,\n decode: (wire: number) => wire,\n }),\n );\n\n codecRegistry.register(\n codec({\n typeId: 'pg/text@1',\n targetTypes: ['text'],\n encode: (value: string) => value,\n decode: (wire: string) => wire,\n }),\n );\n\n codecRegistry.register(\n codec({\n typeId: 'pg/timestamptz@1',\n targetTypes: ['timestamptz'],\n encode: (value: string | Date) => (value instanceof Date ? value.toISOString() : value),\n decode: (wire: string | Date) => (wire instanceof Date ? wire : new Date(wire)),\n }),\n );\n\n return {\n profile: {\n id: 'stub-profile',\n target: 'postgres',\n capabilities: {},\n codecs() {\n return codecRegistry;\n },\n },\n lower(ast: SelectAst, ctx: { contract: SqlContract<SqlStorage>; params?: readonly unknown[] }) {\n const sqlText = JSON.stringify(ast);\n return {\n profileId: this.profile.id,\n body: Object.freeze({ sql: sqlText, params: ctx.params ? [...ctx.params] : [] }),\n };\n },\n };\n}\n\n/**\n * Creates a valid test contract without using validateContract.\n * Ensures all required fields are present (mappings, capabilities, extensionPacks, meta, sources)\n * and returns the contract with proper typing.\n * This helper allows tests to create contracts without depending on sql-query.\n */\nexport function createTestContract(\n contract: Partial<Omit<SqlContract<SqlStorage>, 'storageHash' | 'profileHash'>> & {\n storageHash?: string;\n profileHash?: string;\n },\n): SqlContract<SqlStorage> {\n const { execution, ...rest } = contract;\n\n return {\n ...rest,\n schemaVersion: rest.schemaVersion ?? '1',\n target: rest.target ?? 'postgres',\n targetFamily: rest.targetFamily ?? 'sql',\n storage: rest.storage ?? { tables: {} },\n models: rest.models ?? {},\n relations: rest.relations ?? {},\n mappings: rest.mappings ?? { codecTypes: {}, operationTypes: {} },\n capabilities: rest.capabilities ?? {},\n extensionPacks: rest.extensionPacks ?? {},\n meta: rest.meta ?? {},\n sources: rest.sources ?? {},\n ...(execution ? { execution } : {}),\n storageHash: coreHash(rest.storageHash ?? 'sha256:testcore'),\n profileHash: profileHash(rest.profileHash ?? 'sha256:testprofile'),\n } satisfies SqlContract<SqlStorage>;\n}\n\n// Re-export generic utilities from test-utils\nexport {\n collectAsync,\n createDevDatabase,\n type DevDatabase,\n teardownTestDatabase,\n withClient,\n} from '@prisma-next/test-utils';\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-runtime",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.43",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "SQL runtime implementation for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"arktype": "^2.1.26",
|
|
9
|
-
"@prisma-next/contract": "0.3.0-dev.
|
|
10
|
-
"@prisma-next/utils": "0.3.0-dev.
|
|
11
|
-
"@prisma-next/core-execution-plane": "0.3.0-dev.
|
|
12
|
-
"@prisma-next/ids": "0.3.0-dev.
|
|
13
|
-
"@prisma-next/operations": "0.3.0-dev.
|
|
14
|
-
"@prisma-next/runtime-executor": "0.3.0-dev.
|
|
15
|
-
"@prisma-next/sql-contract": "0.3.0-dev.
|
|
16
|
-
"@prisma-next/sql-operations": "0.3.0-dev.
|
|
17
|
-
"@prisma-next/sql-relational-core": "0.3.0-dev.
|
|
9
|
+
"@prisma-next/contract": "0.3.0-dev.43",
|
|
10
|
+
"@prisma-next/utils": "0.3.0-dev.43",
|
|
11
|
+
"@prisma-next/core-execution-plane": "0.3.0-dev.43",
|
|
12
|
+
"@prisma-next/ids": "0.3.0-dev.43",
|
|
13
|
+
"@prisma-next/operations": "0.3.0-dev.43",
|
|
14
|
+
"@prisma-next/runtime-executor": "0.3.0-dev.43",
|
|
15
|
+
"@prisma-next/sql-contract": "0.3.0-dev.43",
|
|
16
|
+
"@prisma-next/sql-operations": "0.3.0-dev.43",
|
|
17
|
+
"@prisma-next/sql-relational-core": "0.3.0-dev.43"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/pg": "8.16.0",
|
package/test/utils.ts
CHANGED
|
@@ -225,8 +225,7 @@ export function createStubAdapter(): Adapter<SelectAst, SqlContract<SqlStorage>,
|
|
|
225
225
|
typeId: 'pg/timestamptz@1',
|
|
226
226
|
targetTypes: ['timestamptz'],
|
|
227
227
|
encode: (value: string | Date) => (value instanceof Date ? value.toISOString() : value),
|
|
228
|
-
decode: (wire: string | Date) =>
|
|
229
|
-
typeof wire === 'string' ? wire : wire instanceof Date ? wire.toISOString() : String(wire),
|
|
228
|
+
decode: (wire: string | Date) => (wire instanceof Date ? wire : new Date(wire)),
|
|
230
229
|
}),
|
|
231
230
|
);
|
|
232
231
|
|