@prisma-next/sql-relational-core 0.1.0-pr.43.2 → 0.1.0-pr.43.4

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.
@@ -78,7 +78,7 @@ function executeOperation(signature, selfBuilder, args, columnMeta, operationReg
78
78
  if (returnTypeId && operationRegistry) {
79
79
  const operations = operationRegistry.byType(returnTypeId);
80
80
  if (operations.length > 0) {
81
- const resultWithOps = result;
81
+ const resultWithOps = { ...result };
82
82
  for (const operation of operations) {
83
83
  if (operation.capabilities && operation.capabilities.length > 0) {
84
84
  if (!contractCapabilities) {
@@ -143,4 +143,4 @@ function attachOperationsToColumnBuilder(columnBuilder, columnMeta, registry, co
143
143
  export {
144
144
  attachOperationsToColumnBuilder
145
145
  };
146
- //# sourceMappingURL=chunk-WOBJRUFS.js.map
146
+ //# sourceMappingURL=chunk-4FZM7S3U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/operations-registry.ts"],"sourcesContent":["import type { OperationRegistry } from '@prisma-next/operations';\nimport { hasAllCapabilities } from '@prisma-next/operations';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationSignature } from '@prisma-next/sql-operations';\nimport type { ColumnRef, LiteralExpr, OperationExpr, ParamRef } from './ast/types';\nimport { createExpressionBuilder } from './expression-builder';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n ColumnBuilder,\n OperationTypes,\n} from './types';\nimport { isParamPlaceholder } from './utils/guards';\n\nfunction isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\nfunction isExpressionBuilder(value: unknown): value is AnyExpressionBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'expression'\n );\n}\n\n/**\n * Extracts the expression from a ColumnBuilder or ExpressionBuilder.\n * If it's an ExpressionBuilder, returns its expr property.\n * If it's a ColumnBuilder, converts it to a ColumnRef.\n */\nfunction extractExpression(\n builder: AnyColumnBuilder | AnyExpressionBuilder,\n): ColumnRef | OperationExpr {\n if (isExpressionBuilder(builder)) {\n return builder.expr;\n }\n // It's a ColumnBuilder - extract ColumnRef\n const colBuilder = builder as { table: string; column: string };\n return {\n kind: 'col',\n table: colBuilder.table,\n column: colBuilder.column,\n };\n}\n\n/**\n * Executes an operation and returns an ExpressionBuilder.\n * This is the canonical entrypoint for operation invocation, enabling\n * future enhancements like telemetry, caching, or tracing.\n *\n * @param signature - The operation signature from the registry\n * @param selfBuilder - The column builder or expression builder that the operation is called on\n * @param args - The arguments passed to the operation\n * @param columnMeta - The metadata of the column the operation is called on\n * @returns An ExpressionBuilder wrapping the operation expression\n */\nfunction executeOperation(\n signature: SqlOperationSignature,\n selfBuilder: AnyColumnBuilder | AnyExpressionBuilder,\n args: unknown[],\n columnMeta: StorageColumn,\n operationRegistry?: OperationRegistry,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): AnyExpressionBuilder {\n if (args.length !== signature.args.length) {\n throw planInvalid(\n `Operation ${signature.method} expects ${signature.args.length} arguments, got ${args.length}`,\n );\n }\n\n // Extract the expression from selfBuilder (handles both ColumnBuilder and ExpressionBuilder)\n const selfExpr: ColumnRef | OperationExpr = extractExpression(selfBuilder);\n\n const operationArgs: Array<ColumnRef | ParamRef | LiteralExpr | OperationExpr> = [];\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argSpec = signature.args[i];\n if (!argSpec) {\n throw planInvalid(`Missing argument spec for argument ${i}`);\n }\n\n if (argSpec.kind === 'param') {\n if (!isParamPlaceholder(arg)) {\n throw planInvalid(`Argument ${i} must be a parameter placeholder`);\n }\n operationArgs.push({\n kind: 'param',\n index: 0,\n name: arg.name,\n });\n } else if (argSpec.kind === 'typeId') {\n // Argument can be either ColumnBuilder or ExpressionBuilder\n if (!isColumnBuilder(arg) && !isExpressionBuilder(arg)) {\n throw planInvalid(`Argument ${i} must be a ColumnBuilder or ExpressionBuilder`);\n }\n // Extract expression from either type\n operationArgs.push(extractExpression(arg));\n } else if (argSpec.kind === 'literal') {\n operationArgs.push({\n kind: 'literal',\n value: arg,\n });\n }\n }\n\n const operationExpr: OperationExpr = {\n kind: 'operation',\n method: signature.method,\n forTypeId: signature.forTypeId,\n self: selfExpr,\n args: operationArgs,\n returns: signature.returns,\n lowering: signature.lowering,\n };\n\n const returnTypeId = signature.returns.kind === 'typeId' ? signature.returns.type : undefined;\n const returnColumnMeta: StorageColumn = returnTypeId\n ? {\n ...columnMeta,\n codecId: returnTypeId,\n }\n : columnMeta;\n\n let result = createExpressionBuilder(operationExpr, returnColumnMeta);\n\n // If the return type is a typeId, attach operations for that type to the ExpressionBuilder.\n // This allows chaining operations (e.g., col.normalize().cosineDistance(otherVec)).\n if (returnTypeId && operationRegistry) {\n const operations = operationRegistry.byType(returnTypeId) as SqlOperationSignature[];\n if (operations.length > 0) {\n // Create an unfrozen copy to attach operations (result is frozen from createExpressionBuilder)\n const resultWithOps = { ...result } as AnyExpressionBuilder & Record<string, unknown>;\n for (const operation of operations) {\n if (operation.capabilities && operation.capabilities.length > 0) {\n if (!contractCapabilities) {\n continue;\n }\n if (!hasAllCapabilities(operation.capabilities, contractCapabilities)) {\n continue;\n }\n }\n // Attach operation as a method on the expression builder\n (resultWithOps as Record<string, unknown>)[operation.method] = function (\n this: AnyExpressionBuilder,\n ...args: unknown[]\n ) {\n return executeOperation(\n operation,\n this,\n args,\n returnColumnMeta,\n operationRegistry,\n contractCapabilities,\n );\n };\n }\n result = Object.freeze(resultWithOps) as AnyExpressionBuilder;\n }\n }\n\n return result;\n}\n\nexport function attachOperationsToColumnBuilder<\n ColumnName extends string,\n ColumnMeta extends StorageColumn,\n JsType = unknown,\n Operations extends OperationTypes = Record<string, never>,\n>(\n columnBuilder: ColumnBuilder<ColumnName, ColumnMeta, JsType, Record<string, never>>,\n columnMeta: ColumnMeta,\n registry: OperationRegistry | undefined,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations> {\n if (!registry) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n // Use codecId to look up operations registered for this column's type\n const codecId = columnMeta.codecId;\n if (!codecId) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n const operations = registry.byType(codecId) as SqlOperationSignature[];\n if (operations.length === 0) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n const builderWithOps = columnBuilder as unknown as ColumnBuilder<\n ColumnName,\n ColumnMeta,\n JsType,\n Operations\n >;\n\n for (const operation of operations) {\n if (operation.capabilities && operation.capabilities.length > 0) {\n if (!contractCapabilities) {\n continue;\n }\n\n if (!hasAllCapabilities(operation.capabilities, contractCapabilities)) {\n continue;\n }\n }\n // Method sugar: attach operation as a method on the column builder\n (builderWithOps as Record<string, unknown>)[operation.method] = function (\n this: ColumnBuilder<ColumnName, ColumnMeta, JsType, Record<string, never>>,\n ...args: unknown[]\n ) {\n return executeOperation(\n operation,\n this as unknown as ColumnBuilder<string, StorageColumn, unknown>,\n args,\n columnMeta,\n registry,\n contractCapabilities,\n );\n };\n }\n\n return builderWithOps;\n}\n"],"mappings":"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","names":["args"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  attachOperationsToColumnBuilder
3
- } from "./chunk-WOBJRUFS.js";
3
+ } from "./chunk-4FZM7S3U.js";
4
4
  import {
5
5
  columnToExpression
6
6
  } from "./chunk-J6EORPAV.js";
@@ -155,4 +155,4 @@ export {
155
155
  TableBuilderImpl,
156
156
  schema
157
157
  };
158
- //# sourceMappingURL=chunk-ZZG6Z2J3.js.map
158
+ //# sourceMappingURL=chunk-L6F7B2YB.js.map
@@ -1,7 +1,7 @@
1
1
  import "../chunk-G52ENULI.js";
2
2
  import {
3
3
  attachOperationsToColumnBuilder
4
- } from "../chunk-WOBJRUFS.js";
4
+ } from "../chunk-4FZM7S3U.js";
5
5
  import "../chunk-UVB7347H.js";
6
6
  import "../chunk-J6EORPAV.js";
7
7
  export {
@@ -2,8 +2,8 @@ import {
2
2
  ColumnBuilderImpl,
3
3
  TableBuilderImpl,
4
4
  schema
5
- } from "../chunk-ZZG6Z2J3.js";
6
- import "../chunk-WOBJRUFS.js";
5
+ } from "../chunk-L6F7B2YB.js";
6
+ import "../chunk-4FZM7S3U.js";
7
7
  import "../chunk-UVB7347H.js";
8
8
  import "../chunk-J6EORPAV.js";
9
9
  import "../chunk-7AKUPEMX.js";
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  ColumnBuilderImpl,
4
4
  TableBuilderImpl,
5
5
  schema
6
- } from "./chunk-ZZG6Z2J3.js";
6
+ } from "./chunk-L6F7B2YB.js";
7
7
  import {
8
8
  param
9
9
  } from "./chunk-7I3EMQID.js";
@@ -11,7 +11,7 @@ import "./chunk-36WJWNHT.js";
11
11
  import "./chunk-G52ENULI.js";
12
12
  import {
13
13
  attachOperationsToColumnBuilder
14
- } from "./chunk-WOBJRUFS.js";
14
+ } from "./chunk-4FZM7S3U.js";
15
15
  import "./chunk-UVB7347H.js";
16
16
  import "./chunk-J6EORPAV.js";
17
17
  import {
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-relational-core",
3
- "version": "0.1.0-pr.43.2",
3
+ "version": "0.1.0-pr.43.4",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Schema and column builders, operation attachment, and AST types for Prisma Next",
7
7
  "dependencies": {
8
8
  "ts-toolbelt": "^9.6.0",
9
- "@prisma-next/contract": "0.1.0-pr.43.2",
10
- "@prisma-next/operations": "0.1.0-pr.43.2",
11
- "@prisma-next/plan": "0.1.0-pr.43.2",
12
- "@prisma-next/sql-contract": "0.1.0-pr.43.2",
13
- "@prisma-next/sql-operations": "0.1.0-pr.43.2"
9
+ "@prisma-next/contract": "0.1.0-pr.43.4",
10
+ "@prisma-next/operations": "0.1.0-pr.43.4",
11
+ "@prisma-next/plan": "0.1.0-pr.43.4",
12
+ "@prisma-next/sql-contract": "0.1.0-pr.43.4",
13
+ "@prisma-next/sql-operations": "0.1.0-pr.43.4"
14
14
  },
15
15
  "devDependencies": {
16
16
  "tsup": "^8.3.0",
17
17
  "typescript": "^5.9.3",
18
18
  "vite-tsconfig-paths": "^5.1.4",
19
19
  "vitest": "^2.1.1",
20
- "@prisma-next/sql-contract-ts": "0.1.0-pr.43.2",
20
+ "@prisma-next/sql-contract-ts": "0.1.0-pr.43.4",
21
21
  "@prisma-next/test-utils": "0.0.1"
22
22
  },
23
23
  "files": [
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/operations-registry.ts"],"sourcesContent":["import type { OperationRegistry } from '@prisma-next/operations';\nimport { hasAllCapabilities } from '@prisma-next/operations';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationSignature } from '@prisma-next/sql-operations';\nimport type { ColumnRef, LiteralExpr, OperationExpr, ParamRef } from './ast/types';\nimport { createExpressionBuilder } from './expression-builder';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n ColumnBuilder,\n OperationTypes,\n} from './types';\nimport { isParamPlaceholder } from './utils/guards';\n\nfunction isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\nfunction isExpressionBuilder(value: unknown): value is AnyExpressionBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'expression'\n );\n}\n\n/**\n * Extracts the expression from a ColumnBuilder or ExpressionBuilder.\n * If it's an ExpressionBuilder, returns its expr property.\n * If it's a ColumnBuilder, converts it to a ColumnRef.\n */\nfunction extractExpression(\n builder: AnyColumnBuilder | AnyExpressionBuilder,\n): ColumnRef | OperationExpr {\n if (isExpressionBuilder(builder)) {\n return builder.expr;\n }\n // It's a ColumnBuilder - extract ColumnRef\n const colBuilder = builder as { table: string; column: string };\n return {\n kind: 'col',\n table: colBuilder.table,\n column: colBuilder.column,\n };\n}\n\n/**\n * Executes an operation and returns an ExpressionBuilder.\n * This is the canonical entrypoint for operation invocation, enabling\n * future enhancements like telemetry, caching, or tracing.\n *\n * @param signature - The operation signature from the registry\n * @param selfBuilder - The column builder or expression builder that the operation is called on\n * @param args - The arguments passed to the operation\n * @param columnMeta - The metadata of the column the operation is called on\n * @returns An ExpressionBuilder wrapping the operation expression\n */\nfunction executeOperation(\n signature: SqlOperationSignature,\n selfBuilder: AnyColumnBuilder | AnyExpressionBuilder,\n args: unknown[],\n columnMeta: StorageColumn,\n operationRegistry?: OperationRegistry,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): AnyExpressionBuilder {\n if (args.length !== signature.args.length) {\n throw planInvalid(\n `Operation ${signature.method} expects ${signature.args.length} arguments, got ${args.length}`,\n );\n }\n\n // Extract the expression from selfBuilder (handles both ColumnBuilder and ExpressionBuilder)\n const selfExpr: ColumnRef | OperationExpr = extractExpression(selfBuilder);\n\n const operationArgs: Array<ColumnRef | ParamRef | LiteralExpr | OperationExpr> = [];\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argSpec = signature.args[i];\n if (!argSpec) {\n throw planInvalid(`Missing argument spec for argument ${i}`);\n }\n\n if (argSpec.kind === 'param') {\n if (!isParamPlaceholder(arg)) {\n throw planInvalid(`Argument ${i} must be a parameter placeholder`);\n }\n operationArgs.push({\n kind: 'param',\n index: 0,\n name: arg.name,\n });\n } else if (argSpec.kind === 'typeId') {\n // Argument can be either ColumnBuilder or ExpressionBuilder\n if (!isColumnBuilder(arg) && !isExpressionBuilder(arg)) {\n throw planInvalid(`Argument ${i} must be a ColumnBuilder or ExpressionBuilder`);\n }\n // Extract expression from either type\n operationArgs.push(extractExpression(arg));\n } else if (argSpec.kind === 'literal') {\n operationArgs.push({\n kind: 'literal',\n value: arg,\n });\n }\n }\n\n const operationExpr: OperationExpr = {\n kind: 'operation',\n method: signature.method,\n forTypeId: signature.forTypeId,\n self: selfExpr,\n args: operationArgs,\n returns: signature.returns,\n lowering: signature.lowering,\n };\n\n const returnTypeId = signature.returns.kind === 'typeId' ? signature.returns.type : undefined;\n const returnColumnMeta: StorageColumn = returnTypeId\n ? {\n ...columnMeta,\n codecId: returnTypeId,\n }\n : columnMeta;\n\n let result = createExpressionBuilder(operationExpr, returnColumnMeta);\n\n // If the return type is a typeId, attach operations for that type to the ExpressionBuilder.\n // This allows chaining operations (e.g., col.normalize().cosineDistance(otherVec)).\n if (returnTypeId && operationRegistry) {\n const operations = operationRegistry.byType(returnTypeId) as SqlOperationSignature[];\n if (operations.length > 0) {\n // Attach operations as methods on the ExpressionBuilder\n const resultWithOps = result as unknown as AnyExpressionBuilder & Record<string, unknown>;\n for (const operation of operations) {\n if (operation.capabilities && operation.capabilities.length > 0) {\n if (!contractCapabilities) {\n continue;\n }\n if (!hasAllCapabilities(operation.capabilities, contractCapabilities)) {\n continue;\n }\n }\n // Attach operation as a method on the expression builder\n (resultWithOps as Record<string, unknown>)[operation.method] = function (\n this: AnyExpressionBuilder,\n ...args: unknown[]\n ) {\n return executeOperation(\n operation,\n this,\n args,\n returnColumnMeta,\n operationRegistry,\n contractCapabilities,\n );\n };\n }\n result = Object.freeze(resultWithOps) as AnyExpressionBuilder;\n }\n }\n\n return result;\n}\n\nexport function attachOperationsToColumnBuilder<\n ColumnName extends string,\n ColumnMeta extends StorageColumn,\n JsType = unknown,\n Operations extends OperationTypes = Record<string, never>,\n>(\n columnBuilder: ColumnBuilder<ColumnName, ColumnMeta, JsType, Record<string, never>>,\n columnMeta: ColumnMeta,\n registry: OperationRegistry | undefined,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations> {\n if (!registry) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n // Use codecId to look up operations registered for this column's type\n const codecId = columnMeta.codecId;\n if (!codecId) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n const operations = registry.byType(codecId) as SqlOperationSignature[];\n if (operations.length === 0) {\n return columnBuilder as ColumnBuilder<ColumnName, ColumnMeta, JsType, Operations>;\n }\n\n const builderWithOps = columnBuilder as unknown as ColumnBuilder<\n ColumnName,\n ColumnMeta,\n JsType,\n Operations\n >;\n\n for (const operation of operations) {\n if (operation.capabilities && operation.capabilities.length > 0) {\n if (!contractCapabilities) {\n continue;\n }\n\n if (!hasAllCapabilities(operation.capabilities, contractCapabilities)) {\n continue;\n }\n }\n // Method sugar: attach operation as a method on the column builder\n (builderWithOps as Record<string, unknown>)[operation.method] = function (\n this: ColumnBuilder<ColumnName, ColumnMeta, JsType, Record<string, never>>,\n ...args: unknown[]\n ) {\n return executeOperation(\n operation,\n this as unknown as ColumnBuilder<string, StorageColumn, unknown>,\n args,\n columnMeta,\n registry,\n contractCapabilities,\n );\n };\n }\n\n return builderWithOps;\n}\n"],"mappings":"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","names":["args"]}