diff --git a/src/Documents/Conventions/DocumentConventions.ts b/src/Documents/Conventions/DocumentConventions.ts index 63d986b7..4988a86e 100644 --- a/src/Documents/Conventions/DocumentConventions.ts +++ b/src/Documents/Conventions/DocumentConventions.ts @@ -116,6 +116,25 @@ export class DocumentConventions { return this._sharding; } + private _returnPlainJsObjects: boolean = false; + + /** + * Gets whether all values returned from API will be plain objects (not class instances). + * This is useful for environments like Next.js that require serializable results. + */ + public get returnPlainJsObjects(): boolean { + return this._returnPlainJsObjects; + } + + /** + * Sets whether all values returned from API will be plain objects (not class instances). + * This is useful for environments like Next.js that require serializable results. + */ + public set returnPlainJsObjects(value: boolean) { + this._assertNotFrozen(); + this._returnPlainJsObjects = value; + } + public constructor() { this._readBalanceBehavior = "None"; this._identityPartsSeparator = "/"; diff --git a/src/Documents/Session/AbstractDocumentQuery.ts b/src/Documents/Session/AbstractDocumentQuery.ts index b8b2b38a..b97c9561 100644 --- a/src/Documents/Session/AbstractDocumentQuery.ts +++ b/src/Documents/Session/AbstractDocumentQuery.ts @@ -97,6 +97,7 @@ import { } from "./IVectorFieldFactory.js"; import { VectorEmbeddingFieldFactory } from "../Queries/VectorSearch/VectorEmbeddingFieldFactory.js"; import { Field } from "../../Types/index.js"; +import { JsonSerializer } from "../../Mapping/Json/Serializer.js"; /** * A query against a Raven index @@ -2193,7 +2194,13 @@ export abstract class AbstractDocumentQuery { const results = await this.iterator(); - return [...results]; + const array = [...results]; + + if (this.conventions.returnPlainJsObjects) { + return array.map(item => JsonSerializer.toPlainObject(item)) + } + + return array; } public async getQueryResult(): Promise { @@ -2208,11 +2215,20 @@ export abstract class AbstractDocumentQuery { const entries = await this._executeQueryOperation(1); + + if (this.conventions.returnPlainJsObjects) { + return JsonSerializer.toPlainObject(entries[0]) || null; + } + return entries[0] || null; } @@ -2224,6 +2240,10 @@ export abstract class AbstractDocumentQuery(obj: T): T { + return JSON.parse(JSON.stringify(obj)); + } } \ No newline at end of file