Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/lib/mysql/repository/materialized-view.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -51,9 +52,12 @@ export class MaterializedView<MVG extends MaterializedViewGeneric = Materialized
options?: ModelTypes.TMVOptionsWithoutClient;
schema: ModelTypes.TMaterializedView<SharedTypes.TStringKeys<MVG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
this.#coreFields = this.#model.coreFields;
Expand Down
8 changes: 6 additions & 2 deletions src/lib/mysql/repository/sequence.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import { BaseSequence as Model, TExecutor } from "../model/index.js";
import { QueryBuilder } from "../query-builder/query-builder.js";
Expand Down Expand Up @@ -44,9 +45,12 @@ export class Sequence<SG extends SequenceGeneric = SequenceGeneric> {
options?: ModelTypes.TSOptionsWithoutClient;
schema: ModelTypes.TSequence;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
}
Expand Down
8 changes: 6 additions & 2 deletions src/lib/mysql/repository/table.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -58,9 +59,12 @@ export class Table<TG extends TableGeneric = TableGeneric> {
options?: ModelTypes.TDBOptionsWithoutClient;
schema: ModelTypes.TTable<SharedTypes.TStringKeys<TG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#createField = this.#model.createField;
this.#primaryKey = this.#model.primaryKey;
Expand Down
8 changes: 6 additions & 2 deletions src/lib/mysql/repository/view.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -51,9 +52,12 @@ export class View<VG extends ViewGeneric = ViewGeneric> {
options?: ModelTypes.TMVOptionsWithoutClient;
schema: ModelTypes.TView<SharedTypes.TStringKeys<VG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
this.#coreFields = this.#model.coreFields;
Expand Down
8 changes: 6 additions & 2 deletions src/lib/pg/repository/materialized-view.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -51,9 +52,12 @@ export class MaterializedView<MVG extends MaterializedViewGeneric = Materialized
options?: ModelTypes.TMVOptionsWithoutClient;
schema: ModelTypes.TMaterializedView<SharedTypes.TStringKeys<MVG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
this.#coreFields = this.#model.coreFields;
Expand Down
8 changes: 6 additions & 2 deletions src/lib/pg/repository/sequence.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import { BaseSequence as Model, TExecutor } from "../model/index.js";

import { BaseSequenceGeneric as SequenceGeneric } from "../domain/sequence.js";
Expand Down Expand Up @@ -42,9 +43,12 @@ export class Sequence<SG extends SequenceGeneric = SequenceGeneric> {
options?: ModelTypes.TSOptionsWithoutClient;
schema: ModelTypes.TSequence;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
}
Expand Down
8 changes: 6 additions & 2 deletions src/lib/pg/repository/table.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -58,9 +59,12 @@ export class Table<TG extends TableGeneric = TableGeneric> {
options?: ModelTypes.TDBOptionsWithoutClient;
schema: ModelTypes.TTable<SharedTypes.TStringKeys<TG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#createField = this.#model.createField;
this.#primaryKey = this.#model.primaryKey;
Expand Down
8 changes: 6 additions & 2 deletions src/lib/pg/repository/view.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as ModelTypes from "../model/types.js";
import * as SharedHelpers from "../../../shared-helpers/index.js";
import * as SharedTypes from "../../../shared-types/index.js";
import * as Types from "../domain/types.js";
import {
Expand Down Expand Up @@ -51,9 +52,12 @@ export class View<VG extends ViewGeneric = ViewGeneric> {
options?: ModelTypes.TMVOptionsWithoutClient;
schema: ModelTypes.TView<SharedTypes.TStringKeys<VG["CoreFields"]>[]>;
}) {
this.#initialArgs = structuredClone(config);
this.#initialArgs = SharedHelpers.cloneRepositoryInitialArgs(config);

this.#model = new Model(config.schema, config.dbCreds, config.options);
this.#model = new Model(config.schema, config.dbCreds, {
...config.options,
client: config.client,
});

this.#name = this.#model.name;
this.#coreFields = this.#model.coreFields;
Expand Down
40 changes: 40 additions & 0 deletions src/shared-helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,46 @@ export function clearUndefinedFields(params: SharedTypes.TRawParams): SharedType
return result;
}

/**
* Snapshots repository constructor args for later recreation via `setupClient`.
*
* Omits `client` and keeps `options.logger` by reference — both are not
* `structuredClone`-compatible (executors are EventEmitters; loggers are functions).
*/
export function cloneRepositoryInitialArgs<
TSchema,
TDbCreds,
TOptions extends { logger?: SharedTypes.TLogger; },
>(config: {
client?: unknown;
dbCreds?: TDbCreds;
options?: TOptions;
schema: TSchema;
}): {
dbCreds?: TDbCreds;
options?: TOptions;
schema: TSchema;
} {
const { dbCreds, options, schema } = config;

let clonedOptions: TOptions | undefined;

if (options) {
const { logger, ...restOptions } = options;

clonedOptions = {
...structuredClone(restOptions),
...(logger !== undefined ? { logger } : {}),
} as TOptions;
}

return {
dbCreds: dbCreds !== undefined ? structuredClone(dbCreds) : undefined,
options: clonedOptions,
schema: structuredClone(schema),
};
}

export function isHasFields<T extends object>(
obj: T,
fields: Array<Extract<keyof T, string> | string>,
Expand Down
Loading