Comparing version
@@ -153,3 +153,3 @@ import { MssqlParameter } from "../driver/sqlserver/MssqlParameter"; | ||
duration < | ||
new Date().getTime()); | ||
Date.now()); | ||
} | ||
@@ -156,0 +156,0 @@ /** |
@@ -117,3 +117,3 @@ import { PlatformTools } from "../platform/PlatformTools"; | ||
isExpired(savedCache) { | ||
return savedCache.time + savedCache.duration < new Date().getTime(); | ||
return savedCache.time + savedCache.duration < Date.now(); | ||
} | ||
@@ -120,0 +120,0 @@ /** |
@@ -73,3 +73,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const stmt = await this.getStmt(query); | ||
@@ -92,3 +92,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -95,0 +95,0 @@ if (maxQueryExecutionTime && |
@@ -43,3 +43,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
try { | ||
@@ -51,3 +51,3 @@ const raw = await new Promise(async (ok, fail) => { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -54,0 +54,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -27,3 +27,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const statement = await databaseConnection.prepareAsync(query); | ||
@@ -33,3 +33,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -36,0 +36,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, rawResult, undefined); |
@@ -108,3 +108,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
// All Expo SQL queries are executed in a transaction context | ||
@@ -119,3 +119,3 @@ databaseConnection.transaction(async (transaction) => { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -122,0 +122,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -94,2 +94,8 @@ import { BaseDataSourceOptions } from "../../data-source/BaseDataSourceOptions"; | ||
/** | ||
* If a value is specified for maxQueryExecutionTime, in addition to generating a warning log when a query exceeds this time limit, | ||
* the specified maxQueryExecutionTime value is also used as the timeout for the query. | ||
* For more information, check https://github.com/mysqljs/mysql?tab=readme-ov-file#timeouts | ||
*/ | ||
readonly enableQueryTimeout?: boolean; | ||
/** | ||
* Replication setup. | ||
@@ -96,0 +102,0 @@ */ |
@@ -46,3 +46,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -69,3 +69,3 @@ if (maxQueryExecutionTime && | ||
}; | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
if (isInsertQuery) { | ||
@@ -72,0 +72,0 @@ databaseConnection.execSQL(query, parameters, handler); |
@@ -43,7 +43,7 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
databaseConnection.executeSql(query, parameters, async (raw) => { | ||
// log slow queries if maxQueryExecution time is set | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -50,0 +50,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -55,3 +55,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.driver.connection.logger.logQuery(query, parameters, this); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const isInsertQuery = query.startsWith("INSERT "); | ||
@@ -78,3 +78,3 @@ const isDeleteQuery = query.startsWith("DELETE "); | ||
// log slow queries if maxQueryExecution time is set | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -81,0 +81,0 @@ if (maxQueryExecutionTime && |
@@ -70,3 +70,3 @@ import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
let statement; | ||
@@ -81,3 +81,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -84,0 +84,0 @@ if (maxQueryExecutionTime && |
/** | ||
* Position object. | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1 | ||
*/ | ||
export type Position = number[]; | ||
/** | ||
* Point geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.2 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.2 | ||
*/ | ||
export type Point = { | ||
type: "Point"; | ||
coordinates: number[]; | ||
coordinates: Position; | ||
}; | ||
/** | ||
* LineString geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.4 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4 | ||
*/ | ||
export type LineString = { | ||
type: "LineString"; | ||
coordinates: number[][]; | ||
coordinates: Position[]; | ||
}; | ||
/** | ||
* Polygon geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.6 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6 | ||
*/ | ||
export type Polygon = { | ||
type: "Polygon"; | ||
coordinates: number[][][]; | ||
coordinates: Position[][]; | ||
}; | ||
/** | ||
* MultiPoint geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.3 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.3 | ||
*/ | ||
export type MultiPoint = { | ||
type: "MultiPoint"; | ||
coordinates: number[][]; | ||
coordinates: Position[]; | ||
}; | ||
/** | ||
* MultiLineString geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.5 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.5 | ||
*/ | ||
export type MultiLineString = { | ||
type: "MultiLineString"; | ||
coordinates: number[][][]; | ||
coordinates: Position[][]; | ||
}; | ||
/** | ||
* MultiPolygon geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.7 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.7 | ||
*/ | ||
export type MultiPolygon = { | ||
type: "MultiPolygon"; | ||
coordinates: number[][][][]; | ||
coordinates: Position[][][]; | ||
}; | ||
/** | ||
* Geometry Collection | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.8 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.8 | ||
*/ | ||
@@ -64,3 +69,3 @@ export type GeometryCollection = { | ||
* A feature object which contains a geometry and associated properties. | ||
* https://tools.ietf.org/html/rfc7946#section-3.2 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.2 | ||
*/ | ||
@@ -78,3 +83,3 @@ export type Feature = { | ||
* A collection of feature objects. | ||
* https://tools.ietf.org/html/rfc7946#section-3.3 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.3 | ||
*/ | ||
@@ -81,0 +86,0 @@ export type FeatureCollection = { |
import { ColumnType } from "../driver/types/ColumnTypes"; | ||
import { ValueTransformer } from "../decorator/options/ValueTransformer"; | ||
import { SpatialColumnOptions } from "../decorator/options/SpatialColumnOptions"; | ||
import { EntitySchemaColumnForeignKeyOptions } from "./EntitySchemaColumnForeignKeyOptions"; | ||
export interface EntitySchemaColumnOptions extends SpatialColumnOptions { | ||
@@ -174,2 +175,6 @@ /** | ||
primaryKeyConstraintName?: string; | ||
/** | ||
* Foreign key options of this column. | ||
*/ | ||
foreignKey?: EntitySchemaColumnForeignKeyOptions; | ||
} |
@@ -12,2 +12,3 @@ import { DataSource, EntitySchemaEmbeddedColumnOptions, SelectQueryBuilder } from ".."; | ||
import { EntitySchemaRelationIdOptions } from "./EntitySchemaRelationIdOptions"; | ||
import { EntitySchemaForeignKeyOptions } from "./EntitySchemaForeignKeyOptions"; | ||
/** | ||
@@ -68,2 +69,6 @@ * Interface for entity metadata mappings stored inside "schemas" instead of models decorated by decorators. | ||
/** | ||
* Entity foreign keys options. | ||
*/ | ||
foreignKeys?: EntitySchemaForeignKeyOptions[]; | ||
/** | ||
* Entity uniques options. | ||
@@ -70,0 +75,0 @@ */ |
@@ -127,2 +127,16 @@ import { MetadataArgsStorage } from "../metadata-args/MetadataArgsStorage"; | ||
}); | ||
if (regularColumn.foreignKey) { | ||
const foreignKey = regularColumn.foreignKey; | ||
const foreignKeyArgs = { | ||
target: options.target || options.name, | ||
type: foreignKey.target, | ||
propertyName: columnName, | ||
inverseSide: foreignKey.inverseSide, | ||
name: foreignKey.name, | ||
onDelete: foreignKey.onDelete, | ||
onUpdate: foreignKey.onUpdate, | ||
deferrable: foreignKey.deferrable, | ||
}; | ||
metadataArgsStorage.foreignKeys.push(foreignKeyArgs); | ||
} | ||
}); | ||
@@ -246,2 +260,17 @@ // add relation metadata args from the schema | ||
} | ||
if (options.foreignKeys) { | ||
options.foreignKeys.forEach((foreignKey) => { | ||
const foreignKeyArgs = { | ||
target: options.target || options.name, | ||
type: foreignKey.target, | ||
columnNames: foreignKey.columnNames, | ||
referencedColumnNames: foreignKey.referencedColumnNames, | ||
name: foreignKey.name, | ||
onDelete: foreignKey.onDelete, | ||
onUpdate: foreignKey.onUpdate, | ||
deferrable: foreignKey.deferrable, | ||
}; | ||
metadataArgsStorage.foreignKeys.push(foreignKeyArgs); | ||
}); | ||
} | ||
// add unique metadata args from the schema | ||
@@ -248,0 +277,0 @@ if (options.uniques) { |
@@ -59,2 +59,3 @@ /*! | ||
export * from "./decorator/Index"; | ||
export * from "./decorator/ForeignKey"; | ||
export * from "./decorator/Unique"; | ||
@@ -61,0 +62,0 @@ export * from "./decorator/Check"; |
@@ -62,2 +62,3 @@ /*! | ||
export * from "./decorator/Index"; | ||
export * from "./decorator/ForeignKey"; | ||
export * from "./decorator/Unique"; | ||
@@ -64,0 +65,0 @@ export * from "./decorator/Check"; |
@@ -23,2 +23,3 @@ import { RelationMetadataArgs } from "./RelationMetadataArgs"; | ||
import { ExclusionMetadataArgs } from "./ExclusionMetadataArgs"; | ||
import { ForeignKeyMetadataArgs } from "./ForeignKeyMetadataArgs"; | ||
/** | ||
@@ -38,2 +39,3 @@ * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc. | ||
readonly indices: IndexMetadataArgs[]; | ||
readonly foreignKeys: ForeignKeyMetadataArgs[]; | ||
readonly uniques: UniqueMetadataArgs[]; | ||
@@ -68,2 +70,4 @@ readonly checks: CheckMetadataArgs[]; | ||
filterIndices(target: (Function | string)[]): IndexMetadataArgs[]; | ||
filterForeignKeys(target: Function | string): ForeignKeyMetadataArgs[]; | ||
filterForeignKeys(target: (Function | string)[]): ForeignKeyMetadataArgs[]; | ||
filterUniques(target: Function | string): UniqueMetadataArgs[]; | ||
@@ -70,0 +74,0 @@ filterUniques(target: (Function | string)[]): UniqueMetadataArgs[]; |
@@ -20,2 +20,3 @@ import { MetadataUtils } from "../metadata-builder/MetadataUtils"; | ||
this.indices = []; | ||
this.foreignKeys = []; | ||
this.uniques = []; | ||
@@ -74,2 +75,9 @@ this.checks = []; | ||
} | ||
filterForeignKeys(target) { | ||
return this.foreignKeys.filter((foreignKey) => { | ||
return Array.isArray(target) | ||
? target.indexOf(foreignKey.target) !== -1 | ||
: foreignKey.target === target; | ||
}); | ||
} | ||
filterUniques(target) { | ||
@@ -76,0 +84,0 @@ return this.uniques.filter((unique) => { |
@@ -57,2 +57,6 @@ import { EntityMetadata } from "../metadata/EntityMetadata"; | ||
protected createKeysForTableInheritance(entityMetadata: EntityMetadata): void; | ||
/** | ||
* Creates from the given foreign key metadata args real foreign key metadatas. | ||
*/ | ||
protected createForeignKeys(entityMetadata: EntityMetadata, entityMetadatas: EntityMetadata[]): void; | ||
} |
@@ -19,2 +19,4 @@ import { EntityMetadata } from "../metadata/EntityMetadata"; | ||
import { DriverUtils } from "../driver/DriverUtils"; | ||
import { ForeignKeyMetadata } from "../metadata/ForeignKeyMetadata"; | ||
import { InstanceChecker } from "../util/InstanceChecker"; | ||
/** | ||
@@ -226,2 +228,4 @@ * Builds EntityMetadata objects and all its sub-metadatas. | ||
}); | ||
// generate foreign keys for tables | ||
entityMetadatas.forEach((entityMetadata) => this.createForeignKeys(entityMetadata, entityMetadatas)); | ||
// add lazy initializer for entity relations | ||
@@ -764,4 +768,70 @@ entityMetadatas | ||
} | ||
/** | ||
* Creates from the given foreign key metadata args real foreign key metadatas. | ||
*/ | ||
createForeignKeys(entityMetadata, entityMetadatas) { | ||
this.metadataArgsStorage | ||
.filterForeignKeys(entityMetadata.inheritanceTree) | ||
.forEach((foreignKeyArgs) => { | ||
const foreignKeyType = typeof foreignKeyArgs.type === "function" | ||
? foreignKeyArgs.type() | ||
: foreignKeyArgs.type; | ||
const referencedEntityMetadata = entityMetadatas.find((m) => typeof foreignKeyType === "string" | ||
? m.targetName === foreignKeyType || | ||
m.givenTableName === foreignKeyType | ||
: InstanceChecker.isEntitySchema(foreignKeyType) | ||
? m.target === foreignKeyType.options.name || | ||
m.target === foreignKeyType.options.target | ||
: m.target === foreignKeyType); | ||
if (!referencedEntityMetadata) { | ||
throw new TypeORMError("Entity metadata for " + | ||
entityMetadata.name + | ||
(foreignKeyArgs.propertyName | ||
? "#" + foreignKeyArgs.propertyName | ||
: "") + | ||
" was not found. Check if you specified a correct entity object and if it's connected in the connection options."); | ||
} | ||
const columnNames = foreignKeyArgs.columnNames ?? []; | ||
const referencedColumnNames = foreignKeyArgs.referencedColumnNames ?? []; | ||
const columns = []; | ||
const referencedColumns = []; | ||
if (foreignKeyArgs.propertyName) { | ||
columnNames.push(foreignKeyArgs.propertyName); | ||
if (foreignKeyArgs.inverseSide) { | ||
if (typeof foreignKeyArgs.inverseSide === "function") { | ||
referencedColumnNames.push(foreignKeyArgs.inverseSide(referencedEntityMetadata.propertiesMap)); | ||
} | ||
else { | ||
referencedColumnNames.push(foreignKeyArgs.inverseSide); | ||
} | ||
} | ||
} | ||
if (!referencedColumnNames.length) { | ||
referencedColumns.push(...referencedEntityMetadata.primaryColumns); | ||
} | ||
const columnNameToColumn = (columnName, entityMetadata) => { | ||
const column = entityMetadata.columns.find((column) => column.propertyName === columnName || | ||
column.databaseName === columnName); | ||
if (column) | ||
return column; | ||
const foreignKeyName = foreignKeyArgs.name | ||
? '"' + foreignKeyArgs.name + '" ' | ||
: ""; | ||
const entityName = entityMetadata.targetName; | ||
throw new TypeORMError(`Foreign key constraint ${foreignKeyName}contains column that is missing in the entity (${entityName}): ${columnName}`); | ||
}; | ||
columns.push(...columnNames.map((columnName) => columnNameToColumn(columnName, entityMetadata))); | ||
referencedColumns.push(...referencedColumnNames.map((columnName) => columnNameToColumn(columnName, referencedEntityMetadata))); | ||
entityMetadata.foreignKeys.push(new ForeignKeyMetadata({ | ||
entityMetadata, | ||
referencedEntityMetadata, | ||
namingStrategy: this.connection.namingStrategy, | ||
columns, | ||
referencedColumns, | ||
...foreignKeyArgs, | ||
})); | ||
}); | ||
} | ||
} | ||
//# sourceMappingURL=EntityMetadataBuilder.js.map |
@@ -32,4 +32,16 @@ /** | ||
execute(entity) { | ||
if (!this.embeddedMetadata) | ||
return entity[this.propertyName](); | ||
// Check if the Embedded Metadata does not exist | ||
if (!this.embeddedMetadata) { | ||
// Get the Entity's Method | ||
const entityMethod = entity[this.propertyName]; | ||
// Check if the Entity Method does not exist | ||
if (!entityMethod) | ||
throw new Error(`Entity listener method "${this.propertyName}" does not exist in entity "${entity.constructor.name}".`); | ||
// Check if the Entity Method is not a function | ||
if (typeof entityMethod !== "function") | ||
throw new Error(`Entity listener method "${this.propertyName}" in entity "${entity.constructor.name}" must be a function but got "${typeof entityMethod}".`); | ||
// Call and return the Entity Method | ||
return entityMethod.call(entity); | ||
} | ||
// Call the Embedded Method | ||
this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(".")); | ||
@@ -36,0 +48,0 @@ } |
@@ -100,3 +100,3 @@ import { ObjectLiteral } from "../common/ObjectLiteral"; | ||
*/ | ||
aggregate<R = any>(pipeline: ObjectLiteral[], options?: AggregateOptions): AggregationCursor<Entity>; | ||
aggregate<R = any>(pipeline: ObjectLiteral[], options?: AggregateOptions): AggregationCursor<R>; | ||
/** | ||
@@ -103,0 +103,0 @@ * Execute an aggregation framework pipeline against the collection. |
@@ -28,2 +28,4 @@ import { ColumnMetadata } from "../../metadata/ColumnMetadata"; | ||
* Updating entity. | ||
* | ||
* Contains the same data that was passed to the updating method, be it the instance of an entity or the partial entity. | ||
*/ | ||
@@ -37,2 +39,4 @@ entity: ObjectLiteral | undefined; | ||
* Updating entity in the database. | ||
* | ||
* Is set only when one of the following methods are used: .save(), .remove(), .softRemove(), and .recover() | ||
*/ | ||
@@ -39,0 +43,0 @@ databaseEntity: Entity; |
@@ -156,3 +156,3 @@ "use strict"; | ||
duration < | ||
new Date().getTime()); | ||
Date.now()); | ||
} | ||
@@ -159,0 +159,0 @@ /** |
@@ -120,3 +120,3 @@ "use strict"; | ||
isExpired(savedCache) { | ||
return savedCache.time + savedCache.duration < new Date().getTime(); | ||
return savedCache.time + savedCache.duration < Date.now(); | ||
} | ||
@@ -123,0 +123,0 @@ /** |
@@ -13,2 +13,4 @@ import yargs from "yargs"; | ||
} & { | ||
esm: boolean; | ||
} & { | ||
t: number | boolean; | ||
@@ -26,3 +28,3 @@ }>; | ||
*/ | ||
protected static getJavascriptTemplate(name: string, timestamp: number): string; | ||
protected static getJavascriptTemplate(name: string, timestamp: number, esm: boolean): string; | ||
} |
@@ -31,2 +31,7 @@ "use strict"; | ||
}) | ||
.option("esm", { | ||
type: "boolean", | ||
default: false, | ||
describe: "Generate a migration file on ESM instead of CommonJS", | ||
}) | ||
.option("t", { | ||
@@ -48,3 +53,3 @@ alias: "timestamp", | ||
const fileContent = args.outputJs | ||
? MigrationCreateCommand.getJavascriptTemplate(filename, timestamp) | ||
? MigrationCreateCommand.getJavascriptTemplate(filename, timestamp, args.esm) | ||
: MigrationCreateCommand.getTemplate(filename, timestamp); | ||
@@ -82,5 +87,14 @@ await CommandUtils_1.CommandUtils.createFile(fullPath + (args.outputJs ? ".js" : ".ts"), fileContent); | ||
*/ | ||
static getJavascriptTemplate(name, timestamp) { | ||
return `module.exports = class ${(0, StringUtils_1.camelCase)(name, true)}${timestamp} { | ||
static getJavascriptTemplate(name, timestamp, esm) { | ||
const exportMethod = esm ? "export" : "module.exports ="; | ||
return `/** | ||
* @typedef {import('typeorm').MigrationInterface} MigrationInterface | ||
*/ | ||
/** | ||
* @class | ||
* @implements {MigrationInterface} | ||
*/ | ||
${exportMethod} class ${(0, StringUtils_1.camelCase)(name, true)}${timestamp} { | ||
async up(queryRunner) { | ||
@@ -87,0 +101,0 @@ } |
@@ -17,2 +17,4 @@ import yargs from "yargs"; | ||
} & { | ||
esm: boolean; | ||
} & { | ||
dr: boolean; | ||
@@ -38,3 +40,3 @@ } & { | ||
*/ | ||
protected static getJavascriptTemplate(name: string, timestamp: number, upSqls: string[], downSqls: string[]): string; | ||
protected static getJavascriptTemplate(name: string, timestamp: number, upSqls: string[], downSqls: string[], esm: boolean): string; | ||
/** | ||
@@ -41,0 +43,0 @@ * |
@@ -45,2 +45,7 @@ "use strict"; | ||
}) | ||
.option("esm", { | ||
type: "boolean", | ||
default: false, | ||
describe: "Generate a migration file on ESM instead of CommonJS", | ||
}) | ||
.option("dr", { | ||
@@ -129,3 +134,3 @@ alias: "dryrun", | ||
const fileContent = args.outputJs | ||
? MigrationGenerateCommand.getJavascriptTemplate(path_1.default.basename(fullPath), timestamp, upSqls, downSqls.reverse()) | ||
? MigrationGenerateCommand.getJavascriptTemplate(path_1.default.basename(fullPath), timestamp, upSqls, downSqls.reverse(), args.esm) | ||
: MigrationGenerateCommand.getTemplate(path_1.default.basename(fullPath), timestamp, upSqls, downSqls.reverse()); | ||
@@ -191,5 +196,14 @@ if (args.check) { | ||
*/ | ||
static getJavascriptTemplate(name, timestamp, upSqls, downSqls) { | ||
static getJavascriptTemplate(name, timestamp, upSqls, downSqls, esm) { | ||
const migrationName = `${(0, StringUtils_1.camelCase)(name, true)}${timestamp}`; | ||
return `module.exports = class ${migrationName} { | ||
const exportMethod = esm ? "export" : "module.exports ="; | ||
return `/** | ||
* @typedef {import('typeorm').MigrationInterface} MigrationInterface | ||
*/ | ||
/** | ||
* @class | ||
* @implements {MigrationInterface} | ||
*/ | ||
${exportMethod} class ${migrationName} { | ||
name = '${migrationName}' | ||
@@ -196,0 +210,0 @@ |
@@ -76,3 +76,3 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const stmt = await this.getStmt(query); | ||
@@ -95,3 +95,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -98,0 +98,0 @@ if (maxQueryExecutionTime && |
@@ -46,3 +46,3 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
try { | ||
@@ -54,3 +54,3 @@ const raw = await new Promise(async (ok, fail) => { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -57,0 +57,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -30,3 +30,3 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const statement = await databaseConnection.prepareAsync(query); | ||
@@ -36,3 +36,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -39,0 +39,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, rawResult, undefined); |
@@ -111,3 +111,3 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
// All Expo SQL queries are executed in a transaction context | ||
@@ -122,3 +122,3 @@ databaseConnection.transaction(async (transaction) => { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -125,0 +125,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -94,2 +94,8 @@ import { BaseDataSourceOptions } from "../../data-source/BaseDataSourceOptions"; | ||
/** | ||
* If a value is specified for maxQueryExecutionTime, in addition to generating a warning log when a query exceeds this time limit, | ||
* the specified maxQueryExecutionTime value is also used as the timeout for the query. | ||
* For more information, check https://github.com/mysqljs/mysql?tab=readme-ov-file#timeouts | ||
*/ | ||
readonly enableQueryTimeout?: boolean; | ||
/** | ||
* Replication setup. | ||
@@ -96,0 +102,0 @@ */ |
@@ -49,3 +49,3 @@ "use strict"; | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -72,3 +72,3 @@ if (maxQueryExecutionTime && | ||
}; | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
if (isInsertQuery) { | ||
@@ -75,0 +75,0 @@ databaseConnection.execSQL(query, parameters, handler); |
@@ -46,7 +46,7 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
databaseConnection.executeSql(query, parameters, async (raw) => { | ||
// log slow queries if maxQueryExecution time is set | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -53,0 +53,0 @@ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined); |
@@ -58,3 +58,3 @@ "use strict"; | ||
this.driver.connection.logger.logQuery(query, parameters, this); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
const isInsertQuery = query.startsWith("INSERT "); | ||
@@ -81,3 +81,3 @@ const isDeleteQuery = query.startsWith("DELETE "); | ||
// log slow queries if maxQueryExecution time is set | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -84,0 +84,0 @@ if (maxQueryExecutionTime && |
@@ -73,3 +73,3 @@ "use strict"; | ||
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters); | ||
const queryStartTime = +new Date(); | ||
const queryStartTime = Date.now(); | ||
let statement; | ||
@@ -84,3 +84,3 @@ try { | ||
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime; | ||
const queryEndTime = +new Date(); | ||
const queryEndTime = Date.now(); | ||
const queryExecutionTime = queryEndTime - queryStartTime; | ||
@@ -87,0 +87,0 @@ if (maxQueryExecutionTime && |
/** | ||
* Position object. | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1 | ||
*/ | ||
export type Position = number[]; | ||
/** | ||
* Point geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.2 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.2 | ||
*/ | ||
export type Point = { | ||
type: "Point"; | ||
coordinates: number[]; | ||
coordinates: Position; | ||
}; | ||
/** | ||
* LineString geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.4 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4 | ||
*/ | ||
export type LineString = { | ||
type: "LineString"; | ||
coordinates: number[][]; | ||
coordinates: Position[]; | ||
}; | ||
/** | ||
* Polygon geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.6 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6 | ||
*/ | ||
export type Polygon = { | ||
type: "Polygon"; | ||
coordinates: number[][][]; | ||
coordinates: Position[][]; | ||
}; | ||
/** | ||
* MultiPoint geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.3 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.3 | ||
*/ | ||
export type MultiPoint = { | ||
type: "MultiPoint"; | ||
coordinates: number[][]; | ||
coordinates: Position[]; | ||
}; | ||
/** | ||
* MultiLineString geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.5 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.5 | ||
*/ | ||
export type MultiLineString = { | ||
type: "MultiLineString"; | ||
coordinates: number[][][]; | ||
coordinates: Position[][]; | ||
}; | ||
/** | ||
* MultiPolygon geometry object. | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.7 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.7 | ||
*/ | ||
export type MultiPolygon = { | ||
type: "MultiPolygon"; | ||
coordinates: number[][][][]; | ||
coordinates: Position[][][]; | ||
}; | ||
/** | ||
* Geometry Collection | ||
* https://tools.ietf.org/html/rfc7946#section-3.1.8 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.8 | ||
*/ | ||
@@ -64,3 +69,3 @@ export type GeometryCollection = { | ||
* A feature object which contains a geometry and associated properties. | ||
* https://tools.ietf.org/html/rfc7946#section-3.2 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.2 | ||
*/ | ||
@@ -78,3 +83,3 @@ export type Feature = { | ||
* A collection of feature objects. | ||
* https://tools.ietf.org/html/rfc7946#section-3.3 | ||
* https://datatracker.ietf.org/doc/html/rfc7946#section-3.3 | ||
*/ | ||
@@ -81,0 +86,0 @@ export type FeatureCollection = { |
import { ColumnType } from "../driver/types/ColumnTypes"; | ||
import { ValueTransformer } from "../decorator/options/ValueTransformer"; | ||
import { SpatialColumnOptions } from "../decorator/options/SpatialColumnOptions"; | ||
import { EntitySchemaColumnForeignKeyOptions } from "./EntitySchemaColumnForeignKeyOptions"; | ||
export interface EntitySchemaColumnOptions extends SpatialColumnOptions { | ||
@@ -174,2 +175,6 @@ /** | ||
primaryKeyConstraintName?: string; | ||
/** | ||
* Foreign key options of this column. | ||
*/ | ||
foreignKey?: EntitySchemaColumnForeignKeyOptions; | ||
} |
@@ -12,2 +12,3 @@ import { DataSource, EntitySchemaEmbeddedColumnOptions, SelectQueryBuilder } from ".."; | ||
import { EntitySchemaRelationIdOptions } from "./EntitySchemaRelationIdOptions"; | ||
import { EntitySchemaForeignKeyOptions } from "./EntitySchemaForeignKeyOptions"; | ||
/** | ||
@@ -68,2 +69,6 @@ * Interface for entity metadata mappings stored inside "schemas" instead of models decorated by decorators. | ||
/** | ||
* Entity foreign keys options. | ||
*/ | ||
foreignKeys?: EntitySchemaForeignKeyOptions[]; | ||
/** | ||
* Entity uniques options. | ||
@@ -70,0 +75,0 @@ */ |
@@ -130,2 +130,16 @@ "use strict"; | ||
}); | ||
if (regularColumn.foreignKey) { | ||
const foreignKey = regularColumn.foreignKey; | ||
const foreignKeyArgs = { | ||
target: options.target || options.name, | ||
type: foreignKey.target, | ||
propertyName: columnName, | ||
inverseSide: foreignKey.inverseSide, | ||
name: foreignKey.name, | ||
onDelete: foreignKey.onDelete, | ||
onUpdate: foreignKey.onUpdate, | ||
deferrable: foreignKey.deferrable, | ||
}; | ||
metadataArgsStorage.foreignKeys.push(foreignKeyArgs); | ||
} | ||
}); | ||
@@ -249,2 +263,17 @@ // add relation metadata args from the schema | ||
} | ||
if (options.foreignKeys) { | ||
options.foreignKeys.forEach((foreignKey) => { | ||
const foreignKeyArgs = { | ||
target: options.target || options.name, | ||
type: foreignKey.target, | ||
columnNames: foreignKey.columnNames, | ||
referencedColumnNames: foreignKey.referencedColumnNames, | ||
name: foreignKey.name, | ||
onDelete: foreignKey.onDelete, | ||
onUpdate: foreignKey.onUpdate, | ||
deferrable: foreignKey.deferrable, | ||
}; | ||
metadataArgsStorage.foreignKeys.push(foreignKeyArgs); | ||
}); | ||
} | ||
// add unique metadata args from the schema | ||
@@ -251,0 +280,0 @@ if (options.uniques) { |
@@ -59,2 +59,3 @@ /*! | ||
export * from "./decorator/Index"; | ||
export * from "./decorator/ForeignKey"; | ||
export * from "./decorator/Unique"; | ||
@@ -61,0 +62,0 @@ export * from "./decorator/Check"; |
@@ -66,2 +66,3 @@ "use strict"; | ||
tslib_1.__exportStar(require("./decorator/Index"), exports); | ||
tslib_1.__exportStar(require("./decorator/ForeignKey"), exports); | ||
tslib_1.__exportStar(require("./decorator/Unique"), exports); | ||
@@ -68,0 +69,0 @@ tslib_1.__exportStar(require("./decorator/Check"), exports); |
@@ -23,2 +23,3 @@ import { RelationMetadataArgs } from "./RelationMetadataArgs"; | ||
import { ExclusionMetadataArgs } from "./ExclusionMetadataArgs"; | ||
import { ForeignKeyMetadataArgs } from "./ForeignKeyMetadataArgs"; | ||
/** | ||
@@ -38,2 +39,3 @@ * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc. | ||
readonly indices: IndexMetadataArgs[]; | ||
readonly foreignKeys: ForeignKeyMetadataArgs[]; | ||
readonly uniques: UniqueMetadataArgs[]; | ||
@@ -68,2 +70,4 @@ readonly checks: CheckMetadataArgs[]; | ||
filterIndices(target: (Function | string)[]): IndexMetadataArgs[]; | ||
filterForeignKeys(target: Function | string): ForeignKeyMetadataArgs[]; | ||
filterForeignKeys(target: (Function | string)[]): ForeignKeyMetadataArgs[]; | ||
filterUniques(target: Function | string): UniqueMetadataArgs[]; | ||
@@ -70,0 +74,0 @@ filterUniques(target: (Function | string)[]): UniqueMetadataArgs[]; |
@@ -23,2 +23,3 @@ "use strict"; | ||
this.indices = []; | ||
this.foreignKeys = []; | ||
this.uniques = []; | ||
@@ -77,2 +78,9 @@ this.checks = []; | ||
} | ||
filterForeignKeys(target) { | ||
return this.foreignKeys.filter((foreignKey) => { | ||
return Array.isArray(target) | ||
? target.indexOf(foreignKey.target) !== -1 | ||
: foreignKey.target === target; | ||
}); | ||
} | ||
filterUniques(target) { | ||
@@ -79,0 +87,0 @@ return this.uniques.filter((unique) => { |
@@ -57,2 +57,6 @@ import { EntityMetadata } from "../metadata/EntityMetadata"; | ||
protected createKeysForTableInheritance(entityMetadata: EntityMetadata): void; | ||
/** | ||
* Creates from the given foreign key metadata args real foreign key metadatas. | ||
*/ | ||
protected createForeignKeys(entityMetadata: EntityMetadata, entityMetadatas: EntityMetadata[]): void; | ||
} |
@@ -22,2 +22,4 @@ "use strict"; | ||
const DriverUtils_1 = require("../driver/DriverUtils"); | ||
const ForeignKeyMetadata_1 = require("../metadata/ForeignKeyMetadata"); | ||
const InstanceChecker_1 = require("../util/InstanceChecker"); | ||
/** | ||
@@ -229,2 +231,4 @@ * Builds EntityMetadata objects and all its sub-metadatas. | ||
}); | ||
// generate foreign keys for tables | ||
entityMetadatas.forEach((entityMetadata) => this.createForeignKeys(entityMetadata, entityMetadatas)); | ||
// add lazy initializer for entity relations | ||
@@ -767,2 +771,68 @@ entityMetadatas | ||
} | ||
/** | ||
* Creates from the given foreign key metadata args real foreign key metadatas. | ||
*/ | ||
createForeignKeys(entityMetadata, entityMetadatas) { | ||
this.metadataArgsStorage | ||
.filterForeignKeys(entityMetadata.inheritanceTree) | ||
.forEach((foreignKeyArgs) => { | ||
const foreignKeyType = typeof foreignKeyArgs.type === "function" | ||
? foreignKeyArgs.type() | ||
: foreignKeyArgs.type; | ||
const referencedEntityMetadata = entityMetadatas.find((m) => typeof foreignKeyType === "string" | ||
? m.targetName === foreignKeyType || | ||
m.givenTableName === foreignKeyType | ||
: InstanceChecker_1.InstanceChecker.isEntitySchema(foreignKeyType) | ||
? m.target === foreignKeyType.options.name || | ||
m.target === foreignKeyType.options.target | ||
: m.target === foreignKeyType); | ||
if (!referencedEntityMetadata) { | ||
throw new error_1.TypeORMError("Entity metadata for " + | ||
entityMetadata.name + | ||
(foreignKeyArgs.propertyName | ||
? "#" + foreignKeyArgs.propertyName | ||
: "") + | ||
" was not found. Check if you specified a correct entity object and if it's connected in the connection options."); | ||
} | ||
const columnNames = foreignKeyArgs.columnNames ?? []; | ||
const referencedColumnNames = foreignKeyArgs.referencedColumnNames ?? []; | ||
const columns = []; | ||
const referencedColumns = []; | ||
if (foreignKeyArgs.propertyName) { | ||
columnNames.push(foreignKeyArgs.propertyName); | ||
if (foreignKeyArgs.inverseSide) { | ||
if (typeof foreignKeyArgs.inverseSide === "function") { | ||
referencedColumnNames.push(foreignKeyArgs.inverseSide(referencedEntityMetadata.propertiesMap)); | ||
} | ||
else { | ||
referencedColumnNames.push(foreignKeyArgs.inverseSide); | ||
} | ||
} | ||
} | ||
if (!referencedColumnNames.length) { | ||
referencedColumns.push(...referencedEntityMetadata.primaryColumns); | ||
} | ||
const columnNameToColumn = (columnName, entityMetadata) => { | ||
const column = entityMetadata.columns.find((column) => column.propertyName === columnName || | ||
column.databaseName === columnName); | ||
if (column) | ||
return column; | ||
const foreignKeyName = foreignKeyArgs.name | ||
? '"' + foreignKeyArgs.name + '" ' | ||
: ""; | ||
const entityName = entityMetadata.targetName; | ||
throw new error_1.TypeORMError(`Foreign key constraint ${foreignKeyName}contains column that is missing in the entity (${entityName}): ${columnName}`); | ||
}; | ||
columns.push(...columnNames.map((columnName) => columnNameToColumn(columnName, entityMetadata))); | ||
referencedColumns.push(...referencedColumnNames.map((columnName) => columnNameToColumn(columnName, referencedEntityMetadata))); | ||
entityMetadata.foreignKeys.push(new ForeignKeyMetadata_1.ForeignKeyMetadata({ | ||
entityMetadata, | ||
referencedEntityMetadata, | ||
namingStrategy: this.connection.namingStrategy, | ||
columns, | ||
referencedColumns, | ||
...foreignKeyArgs, | ||
})); | ||
}); | ||
} | ||
} | ||
@@ -769,0 +839,0 @@ exports.EntityMetadataBuilder = EntityMetadataBuilder; |
@@ -35,4 +35,16 @@ "use strict"; | ||
execute(entity) { | ||
if (!this.embeddedMetadata) | ||
return entity[this.propertyName](); | ||
// Check if the Embedded Metadata does not exist | ||
if (!this.embeddedMetadata) { | ||
// Get the Entity's Method | ||
const entityMethod = entity[this.propertyName]; | ||
// Check if the Entity Method does not exist | ||
if (!entityMethod) | ||
throw new Error(`Entity listener method "${this.propertyName}" does not exist in entity "${entity.constructor.name}".`); | ||
// Check if the Entity Method is not a function | ||
if (typeof entityMethod !== "function") | ||
throw new Error(`Entity listener method "${this.propertyName}" in entity "${entity.constructor.name}" must be a function but got "${typeof entityMethod}".`); | ||
// Call and return the Entity Method | ||
return entityMethod.call(entity); | ||
} | ||
// Call the Embedded Method | ||
this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(".")); | ||
@@ -39,0 +51,0 @@ } |
@@ -1,1 +0,1 @@ | ||
{ "name": "typeorm", "version": "0.3.23-dev.cebd63b", "private": false, "description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.", "homepage": "https://typeorm.io", "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "funding": "https://opencollective.com/typeorm", "license": "MIT", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "types": "./index.d.ts", "node": { "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "types": "./index.d.ts", "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1", "compile": "rimraf ./build && tsc", "format": "prettier --cache --write \"./**/*.ts\"", "format:ci": "prettier --check \"./**/*.ts\"", "lint": "eslint .", "pack": "gulp pack", "package": "gulp package", "test": "npm run compile && npm run test:fast --", "test:ci": "mocha --bail", "test:fast": "mocha", "watch": "tsc --watch" }, "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "devDependencies": { "@eslint/js": "^9.22.0", "@sap/hana-client": "^2.24.21", "@tsconfig/node16": "^16.1.3", "@types/chai": "^4.3.20", "@types/chai-as-promised": "^7.1.8", "@types/debug": "^4.1.12", "@types/gulp-rename": "^2.0.6", "@types/gulp-sourcemaps": "^0.0.38", "@types/mocha": "^10.0.10", "@types/node": "^16.18.126", "@types/sha.js": "^2.4.4", "@types/sinon": "^10.0.20", "@types/sinon-chai": "^4.0.0", "@types/source-map-support": "^0.5.10", "@types/yargs": "^17.0.33", "better-sqlite3": "^8.7.0", "chai": "^4.5.0", "chai-as-promised": "^7.1.2", "class-transformer": "^0.5.1", "conventional-changelog-angular": "^7.0.0", "conventional-changelog-cli": "^5.0.0", "eslint": "^9.22.0", "globals": "^16.0.0", "gulp": "^4.0.2", "gulp-rename": "^2.0.0", "gulp-replace": "^1.1.4", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "hdb-pool": "^0.1.6", "mocha": "^10.8.2", "mongodb": "^6.15.0", "mssql": "^11.0.1", "mysql": "^2.18.1", "mysql2": "^3.14.0", "nyc": "^17.1.0", "oracledb": "^6.8.0", "pg": "^8.14.1", "pg-query-stream": "^4.8.1", "prettier": "^2.8.8", "redis": "^4.7.0", "remap-istanbul": "^0.13.0", "rimraf": "^5.0.10", "sinon": "^15.2.0", "sinon-chai": "^3.7.0", "source-map-support": "^0.5.21", "sql.js": "^1.13.0", "sqlite3": "^5.1.7", "ts-node": "^10.9.2", "typescript": "^5.8.2", "typescript-eslint": "^8.27.0" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "engines": { "node": ">=16.13.0" }, "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "readmeFilename": "README.md", "tags": [ "orm", "typescript", "typescript-orm", "mariadb", "mariadb-orm", "mysql", "mysql-orm", "oracle", "oracle-orm", "postgresql", "postgresql-orm", "sap-hana", "sap-hana-orm", "spanner", "cloud-spanner", "cloud-spanner-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm" ] } | ||
{ "name": "typeorm", "version": "0.3.23-dev.fe71a0c", "private": false, "description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.", "homepage": "https://typeorm.io", "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "funding": "https://opencollective.com/typeorm", "license": "MIT", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "types": "./index.d.ts", "node": { "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "types": "./index.d.ts", "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "scripts": { "changelog": "standard-changelog", "compile": "rimraf ./build && tsc", "format": "prettier --cache --write \"./**/*.ts\"", "format:ci": "prettier --check \"./**/*.ts\"", "lint": "eslint .", "pack": "gulp pack", "package": "gulp package", "test": "npm run compile && npm run test:fast --", "test:ci": "mocha --bail", "test:fast": "mocha", "watch": "tsc --watch" }, "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "devDependencies": { "@eslint/js": "^9.22.0", "@sap/hana-client": "^2.24.21", "@tsconfig/node16": "^16.1.3", "@types/chai": "^4.3.20", "@types/chai-as-promised": "^7.1.8", "@types/debug": "^4.1.12", "@types/gulp-rename": "^2.0.6", "@types/gulp-sourcemaps": "^0.0.38", "@types/mocha": "^10.0.10", "@types/node": "^16.18.126", "@types/sha.js": "^2.4.4", "@types/sinon": "^10.0.20", "@types/sinon-chai": "^4.0.0", "@types/source-map-support": "^0.5.10", "@types/yargs": "^17.0.33", "better-sqlite3": "^8.7.0", "chai": "^4.5.0", "chai-as-promised": "^7.1.2", "class-transformer": "^0.5.1", "eslint": "^9.22.0", "globals": "^16.0.0", "gulp": "^4.0.2", "gulp-rename": "^2.0.0", "gulp-replace": "^1.1.4", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "hdb-pool": "^0.1.6", "mocha": "^10.8.2", "mongodb": "^6.15.0", "mssql": "^11.0.1", "mysql": "^2.18.1", "mysql2": "^3.14.0", "nyc": "^17.1.0", "oracledb": "^6.8.0", "pg": "^8.14.1", "pg-query-stream": "^4.8.1", "prettier": "^2.8.8", "redis": "^4.7.0", "remap-istanbul": "^0.13.0", "rimraf": "^5.0.10", "sinon": "^15.2.0", "sinon-chai": "^3.7.0", "source-map-support": "^0.5.21", "sql.js": "^1.13.0", "sqlite3": "^5.1.7", "standard-changelog": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.8.2", "typescript-eslint": "^8.27.0" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "engines": { "node": ">=16.13.0" }, "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "readmeFilename": "README.md", "tags": [ "orm", "typescript", "typescript-orm", "mariadb", "mariadb-orm", "mysql", "mysql-orm", "oracle", "oracle-orm", "postgresql", "postgresql-orm", "sap-hana", "sap-hana-orm", "spanner", "cloud-spanner", "cloud-spanner-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm" ] } |
@@ -100,3 +100,3 @@ import { ObjectLiteral } from "../common/ObjectLiteral"; | ||
*/ | ||
aggregate<R = any>(pipeline: ObjectLiteral[], options?: AggregateOptions): AggregationCursor<Entity>; | ||
aggregate<R = any>(pipeline: ObjectLiteral[], options?: AggregateOptions): AggregationCursor<R>; | ||
/** | ||
@@ -103,0 +103,0 @@ * Execute an aggregation framework pipeline against the collection. |
@@ -28,2 +28,4 @@ import { ColumnMetadata } from "../../metadata/ColumnMetadata"; | ||
* Updating entity. | ||
* | ||
* Contains the same data that was passed to the updating method, be it the instance of an entity or the partial entity. | ||
*/ | ||
@@ -37,2 +39,4 @@ entity: ObjectLiteral | undefined; | ||
* Updating entity in the database. | ||
* | ||
* Is set only when one of the following methods are used: .save(), .remove(), .softRemove(), and .recover() | ||
*/ | ||
@@ -39,0 +43,0 @@ databaseEntity: Entity; |
@@ -270,2 +270,7 @@ // this "shim" can be used on the frontend to prevent from errors on undefined | ||
/* export */ function ForeignKey() { | ||
return noop | ||
} | ||
exports.ForeignKey = ForeignKey; | ||
/* export */ function Unique() { | ||
@@ -299,2 +304,2 @@ return noop | ||
} | ||
exports.VirtualColumn = VirtualColumn; | ||
exports.VirtualColumn = VirtualColumn; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
20544492
0.4%51
-1.92%3044
1%190326
0.38%