typeorm 0.3.21-dev.755191e → 0.3.21-dev.9d15cbd
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/README.md +0 -1
- package/browser/cache/QueryResultCache.d.ts +4 -2
- package/browser/cache/QueryResultCache.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.d.ts +4 -4
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +0 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +5 -3
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +0 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +0 -1
- package/browser/driver/mongodb/typings.d.ts +0 -8
- package/browser/driver/mongodb/typings.js +0 -1
- package/browser/driver/mongodb/typings.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +0 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +0 -1
- package/browser/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +0 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +0 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +0 -1
- package/browser/driver/spanner/SpannerQueryRunner.d.ts +0 -1
- package/browser/driver/sqlite/SqliteDriver.js +2 -2
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
- package/browser/find-options/FindOptionsOrder.d.ts +0 -1
- package/browser/find-options/FindOptionsRelations.d.ts +0 -1
- package/browser/find-options/FindOptionsSelect.d.ts +0 -1
- package/browser/find-options/FindOptionsWhere.d.ts +0 -1
- package/browser/platform/PlatformTools.d.ts +0 -4
- package/browser/platform/PlatformTools.js +3 -9
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.d.ts +0 -1
- package/browser/query-runner/QueryRunner.d.ts +0 -1
- package/browser/util/ImportUtils.js +22 -34
- package/browser/util/ImportUtils.js.map +1 -1
- package/cache/QueryResultCache.d.ts +4 -2
- package/cache/QueryResultCache.js.map +1 -1
- package/commands/CommandUtils.d.ts +1 -1
- package/commands/CommandUtils.js +18 -16
- package/commands/CommandUtils.js.map +1 -1
- package/commands/InitCommand.js +1 -1
- package/commands/InitCommand.js.map +1 -1
- package/connection/ConnectionOptionsReader.d.ts +4 -4
- package/container.js +2 -3
- package/container.js.map +1 -1
- package/decorator/Check.js +1 -2
- package/decorator/Check.js.map +1 -1
- package/decorator/EntityRepository.js +1 -2
- package/decorator/EntityRepository.js.map +1 -1
- package/decorator/Exclusion.js +1 -2
- package/decorator/Exclusion.js.map +1 -1
- package/decorator/Generated.js +1 -2
- package/decorator/Generated.js.map +1 -1
- package/decorator/Index.js +1 -2
- package/decorator/Index.js.map +1 -1
- package/decorator/Unique.js +1 -2
- package/decorator/Unique.js.map +1 -1
- package/decorator/columns/Column.js +1 -2
- package/decorator/columns/Column.js.map +1 -1
- package/decorator/columns/CreateDateColumn.js +1 -2
- package/decorator/columns/CreateDateColumn.js.map +1 -1
- package/decorator/columns/DeleteDateColumn.js +1 -2
- package/decorator/columns/DeleteDateColumn.js.map +1 -1
- package/decorator/columns/ObjectIdColumn.js +1 -2
- package/decorator/columns/ObjectIdColumn.js.map +1 -1
- package/decorator/columns/PrimaryColumn.js +1 -2
- package/decorator/columns/PrimaryColumn.js.map +1 -1
- package/decorator/columns/PrimaryGeneratedColumn.js +1 -2
- package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/decorator/columns/UpdateDateColumn.js +1 -2
- package/decorator/columns/UpdateDateColumn.js.map +1 -1
- package/decorator/columns/VersionColumn.js +1 -2
- package/decorator/columns/VersionColumn.js.map +1 -1
- package/decorator/columns/ViewColumn.js +1 -2
- package/decorator/columns/ViewColumn.js.map +1 -1
- package/decorator/columns/VirtualColumn.js +1 -2
- package/decorator/columns/VirtualColumn.js.map +1 -1
- package/decorator/entity/ChildEntity.js +1 -2
- package/decorator/entity/ChildEntity.js.map +1 -1
- package/decorator/entity/Entity.js +1 -2
- package/decorator/entity/Entity.js.map +1 -1
- package/decorator/entity/TableInheritance.js +1 -2
- package/decorator/entity/TableInheritance.js.map +1 -1
- package/decorator/entity-view/ViewEntity.js +1 -2
- package/decorator/entity-view/ViewEntity.js.map +1 -1
- package/decorator/listeners/AfterInsert.js +1 -2
- package/decorator/listeners/AfterInsert.js.map +1 -1
- package/decorator/listeners/AfterLoad.js +1 -2
- package/decorator/listeners/AfterLoad.js.map +1 -1
- package/decorator/listeners/AfterRecover.js +1 -2
- package/decorator/listeners/AfterRecover.js.map +1 -1
- package/decorator/listeners/AfterRemove.js +1 -2
- package/decorator/listeners/AfterRemove.js.map +1 -1
- package/decorator/listeners/AfterSoftRemove.js +1 -2
- package/decorator/listeners/AfterSoftRemove.js.map +1 -1
- package/decorator/listeners/AfterUpdate.js +1 -2
- package/decorator/listeners/AfterUpdate.js.map +1 -1
- package/decorator/listeners/BeforeInsert.js +1 -2
- package/decorator/listeners/BeforeInsert.js.map +1 -1
- package/decorator/listeners/BeforeRecover.js +1 -2
- package/decorator/listeners/BeforeRecover.js.map +1 -1
- package/decorator/listeners/BeforeRemove.js +1 -2
- package/decorator/listeners/BeforeRemove.js.map +1 -1
- package/decorator/listeners/BeforeSoftRemove.js +1 -2
- package/decorator/listeners/BeforeSoftRemove.js.map +1 -1
- package/decorator/listeners/BeforeUpdate.js +1 -2
- package/decorator/listeners/BeforeUpdate.js.map +1 -1
- package/decorator/listeners/EventSubscriber.js +1 -2
- package/decorator/listeners/EventSubscriber.js.map +1 -1
- package/decorator/relations/JoinColumn.js +1 -2
- package/decorator/relations/JoinColumn.js.map +1 -1
- package/decorator/relations/JoinTable.js +1 -2
- package/decorator/relations/JoinTable.js.map +1 -1
- package/decorator/relations/ManyToMany.js +1 -2
- package/decorator/relations/ManyToMany.js.map +1 -1
- package/decorator/relations/ManyToOne.js +1 -2
- package/decorator/relations/ManyToOne.js.map +1 -1
- package/decorator/relations/OneToMany.js +1 -2
- package/decorator/relations/OneToMany.js.map +1 -1
- package/decorator/relations/OneToOne.js +1 -2
- package/decorator/relations/OneToOne.js.map +1 -1
- package/decorator/relations/RelationCount.js +1 -2
- package/decorator/relations/RelationCount.js.map +1 -1
- package/decorator/relations/RelationId.js +1 -2
- package/decorator/relations/RelationId.js.map +1 -1
- package/decorator/tree/Tree.js +1 -2
- package/decorator/tree/Tree.js.map +1 -1
- package/decorator/tree/TreeChildren.js +1 -2
- package/decorator/tree/TreeChildren.js.map +1 -1
- package/decorator/tree/TreeLevelColumn.js +1 -2
- package/decorator/tree/TreeLevelColumn.js.map +1 -1
- package/decorator/tree/TreeParent.js +1 -2
- package/decorator/tree/TreeParent.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +0 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts +0 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +0 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +5 -3
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +0 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +0 -1
- package/driver/mongodb/typings.d.ts +0 -8
- package/driver/mongodb/typings.js +0 -1
- package/driver/mongodb/typings.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +0 -1
- package/driver/oracle/OracleQueryRunner.d.ts +0 -1
- package/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +0 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +0 -1
- package/driver/sap/SapQueryRunner.d.ts +0 -1
- package/driver/spanner/SpannerQueryRunner.d.ts +0 -1
- package/driver/sqlite/SqliteDriver.js +2 -2
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +0 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +0 -1
- package/find-options/FindOptionsOrder.d.ts +0 -1
- package/find-options/FindOptionsRelations.d.ts +0 -1
- package/find-options/FindOptionsSelect.d.ts +0 -1
- package/find-options/FindOptionsWhere.d.ts +0 -1
- package/find-options/operator/And.js +1 -2
- package/find-options/operator/And.js.map +1 -1
- package/find-options/operator/Any.js +1 -2
- package/find-options/operator/Any.js.map +1 -1
- package/find-options/operator/ArrayContainedBy.js +1 -2
- package/find-options/operator/ArrayContainedBy.js.map +1 -1
- package/find-options/operator/ArrayContains.js +1 -2
- package/find-options/operator/ArrayContains.js.map +1 -1
- package/find-options/operator/ArrayOverlap.js +1 -2
- package/find-options/operator/ArrayOverlap.js.map +1 -1
- package/find-options/operator/Between.js +1 -2
- package/find-options/operator/Between.js.map +1 -1
- package/find-options/operator/Equal.js +1 -2
- package/find-options/operator/Equal.js.map +1 -1
- package/find-options/operator/ILike.js +1 -2
- package/find-options/operator/ILike.js.map +1 -1
- package/find-options/operator/In.js +1 -2
- package/find-options/operator/In.js.map +1 -1
- package/find-options/operator/IsNull.js +1 -2
- package/find-options/operator/IsNull.js.map +1 -1
- package/find-options/operator/JsonContains.js +1 -2
- package/find-options/operator/JsonContains.js.map +1 -1
- package/find-options/operator/LessThan.js +1 -2
- package/find-options/operator/LessThan.js.map +1 -1
- package/find-options/operator/LessThanOrEqual.js +1 -2
- package/find-options/operator/LessThanOrEqual.js.map +1 -1
- package/find-options/operator/Like.js +1 -2
- package/find-options/operator/Like.js.map +1 -1
- package/find-options/operator/MoreThan.js +1 -2
- package/find-options/operator/MoreThan.js.map +1 -1
- package/find-options/operator/MoreThanOrEqual.js +1 -2
- package/find-options/operator/MoreThanOrEqual.js.map +1 -1
- package/find-options/operator/Not.js +1 -2
- package/find-options/operator/Not.js.map +1 -1
- package/find-options/operator/Or.js +1 -2
- package/find-options/operator/Or.js.map +1 -1
- package/find-options/operator/Raw.js +1 -2
- package/find-options/operator/Raw.js.map +1 -1
- package/globals.js +14 -15
- package/globals.js.map +1 -1
- package/package.json +1 -1
- package/platform/PlatformTools.d.ts +0 -4
- package/platform/PlatformTools.js +12 -18
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/SelectQueryBuilder.d.ts +0 -1
- package/query-builder/index.js +1 -2
- package/query-builder/index.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +0 -1
- package/util/DirectoryExportedClassesLoader.js +2 -3
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ImportUtils.js +23 -36
- package/util/ImportUtils.js.map +1 -1
- package/util/PathUtils.js +3 -4
- package/util/PathUtils.js.map +1 -1
- package/util/StringUtils.js +6 -7
- package/util/StringUtils.js.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BeforeUpdate =
|
|
3
|
+
exports.BeforeUpdate = BeforeUpdate;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
const EventListenerTypes_1 = require("../../metadata/types/EventListenerTypes");
|
|
6
6
|
/**
|
|
@@ -15,6 +15,5 @@ function BeforeUpdate() {
|
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
exports.BeforeUpdate = BeforeUpdate;
|
|
19
18
|
|
|
20
19
|
//# sourceMappingURL=BeforeUpdate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/listeners/BeforeUpdate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/listeners/BeforeUpdate.ts"],"names":[],"mappings":";;AAOA,oCAQC;AAfD,2CAAsD;AACtD,gFAA4E;AAG5E;;GAEG;AACH,SAAgB,YAAY;IACxB,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAA,gCAAsB,GAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,uCAAkB,CAAC,aAAa;SACX,CAAC,CAAA;IACpC,CAAC,CAAA;AACL,CAAC","file":"BeforeUpdate.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\"\nimport { EntityListenerMetadataArgs } from \"../../metadata-args/EntityListenerMetadataArgs\"\n\n/**\n * Calls a method on which this decorator is applied before this entity update.\n */\nexport function BeforeUpdate(): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_UPDATE,\n } as EntityListenerMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EventSubscriber =
|
|
3
|
+
exports.EventSubscriber = EventSubscriber;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event
|
|
@@ -13,6 +13,5 @@ function EventSubscriber() {
|
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
exports.EventSubscriber = EventSubscriber;
|
|
17
16
|
|
|
18
17
|
//# sourceMappingURL=EventSubscriber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/listeners/EventSubscriber.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/listeners/EventSubscriber.ts"],"names":[],"mappings":";;AAOA,0CAMC;AAbD,2CAAsD;AAGtD;;;GAGG;AACH,SAAgB,eAAe;IAC3B,OAAO,UAAU,MAAgB;QAC7B,IAAA,gCAAsB,GAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC5C,MAAM,EAAE,MAAM;SACe,CAAC,CAAA;IACtC,CAAC,CAAA;AACL,CAAC","file":"EventSubscriber.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { EntitySubscriberMetadataArgs } from \"../../metadata-args/EntitySubscriberMetadataArgs\"\n\n/**\n * Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event\n * occurs. Those classes must implement EventSubscriberInterface interface.\n */\nexport function EventSubscriber(): ClassDecorator {\n return function (target: Function) {\n getMetadataArgsStorage().entitySubscribers.push({\n target: target,\n } as EntitySubscriberMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JoinColumn =
|
|
3
|
+
exports.JoinColumn = JoinColumn;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* JoinColumn decorator used on one-to-one relations to specify owner side of relationship.
|
|
@@ -23,6 +23,5 @@ function JoinColumn(optionsOrOptionsArray) {
|
|
|
23
23
|
});
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
-
exports.JoinColumn = JoinColumn;
|
|
27
26
|
|
|
28
27
|
//# sourceMappingURL=JoinColumn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/JoinColumn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/JoinColumn.ts"],"names":[],"mappings":";;AA8BA,gCAiBC;AA/CD,2CAAsD;AAyBtD;;;;GAIG;AACH,SAAgB,UAAU,CACtB,qBAA+D;IAE/D,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAChD,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,IAAA,gCAAsB,GAAE,CAAC,WAAW,CAAC,IAAI,CAAC;gBACtC,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;gBAClD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;aACnC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;AACL,CAAC","file":"JoinColumn.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { JoinColumnMetadataArgs } from \"../../metadata-args/JoinColumnMetadataArgs\"\nimport { JoinColumnOptions } from \"../options/JoinColumnOptions\"\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(options: JoinColumnOptions): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(options: JoinColumnOptions[]): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(\n optionsOrOptionsArray?: JoinColumnOptions | JoinColumnOptions[],\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n const options = Array.isArray(optionsOrOptionsArray)\n ? optionsOrOptionsArray\n : [optionsOrOptionsArray || {}]\n options.forEach((options) => {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName,\n foreignKeyConstraintName: options.foreignKeyConstraintName,\n } as JoinColumnMetadataArgs)\n })\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JoinTable =
|
|
3
|
+
exports.JoinTable = JoinTable;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.
|
|
@@ -30,6 +30,5 @@ function JoinTable(options) {
|
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
exports.JoinTable = JoinTable;
|
|
34
33
|
|
|
35
34
|
//# sourceMappingURL=JoinTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/JoinTable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/JoinTable.ts"],"names":[],"mappings":";;AA6BA,8BA0BC;AAvDD,2CAAsD;AAyBtD;;;GAGG;AACH,SAAgB,SAAS,CACrB,OAA4D;IAE5D,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,OAAO;YACH,OAAO;gBACN,EAAyD,CAAA;QAC9D,IAAA,gCAAsB,GAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YACrC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,CAAC,OAAO,IAAK,OAA4B,CAAC,UAAU;gBAC7D,CAAC,CAAC,CAAE,OAA4B,CAAC,UAAW,CAAC;gBAC7C,CAAC,CAAE,OAA2C;qBACvC,WAAW,CAAQ;YAC9B,kBAAkB,EAAE,CAAC,OAAO;gBAC3B,OAA4B,CAAC,iBAAiB;gBAC3C,CAAC,CAAC,CAAE,OAA4B,CAAC,iBAAkB,CAAC;gBACpD,CAAC,CAAE,OAA2C;qBACvC,kBAAkB,CAAQ;YACrC,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC9D,QAAQ,EACJ,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9D,WAAW,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;SAClC,CAAC,CAAA;IAC/B,CAAC,CAAA;AACL,CAAC","file":"JoinTable.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { JoinTableMetadataArgs } from \"../../metadata-args/JoinTableMetadataArgs\"\nimport { JoinTableMultipleColumnsOptions } from \"../options/JoinTableMultipleColumnsOptions\"\nimport { JoinTableOptions } from \"../options/JoinTableOptions\"\n\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(): PropertyDecorator\n\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(options: JoinTableOptions): PropertyDecorator\n\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(\n options: JoinTableMultipleColumnsOptions,\n): PropertyDecorator\n\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(\n options?: JoinTableOptions | JoinTableMultipleColumnsOptions,\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n options =\n options ||\n ({} as JoinTableOptions | JoinTableMultipleColumnsOptions)\n getMetadataArgsStorage().joinTables.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n joinColumns: (options && (options as JoinTableOptions).joinColumn\n ? [(options as JoinTableOptions).joinColumn!]\n : (options as JoinTableMultipleColumnsOptions)\n .joinColumns) as any,\n inverseJoinColumns: (options &&\n (options as JoinTableOptions).inverseJoinColumn\n ? [(options as JoinTableOptions).inverseJoinColumn!]\n : (options as JoinTableMultipleColumnsOptions)\n .inverseJoinColumns) as any,\n schema: options && options.schema ? options.schema : undefined,\n database:\n options && options.database ? options.database : undefined,\n synchronize: !(options && options.synchronize === false),\n } as JoinTableMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ManyToMany =
|
|
3
|
+
exports.ManyToMany = ManyToMany;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
const ObjectUtils_1 = require("../../util/ObjectUtils");
|
|
6
6
|
/**
|
|
@@ -42,6 +42,5 @@ function ManyToMany(typeFunctionOrTarget, inverseSideOrOptions, options) {
|
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
exports.ManyToMany = ManyToMany;
|
|
46
45
|
|
|
47
46
|
//# sourceMappingURL=ManyToMany.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/ManyToMany.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/ManyToMany.ts"],"names":[],"mappings":";;AAgCA,gCA4CC;AA5ED,2CAAsD;AAItD,wDAAoD;AAuBpD;;;;GAIG;AACH,SAAgB,UAAU,CACtB,oBAA8D,EAC9D,oBAAsE,EACtE,OAAyB;IAEzB,uBAAuB;IACvB,IAAI,mBAAkD,CAAA;IACtD,IAAI,yBAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAoB,oBAAoB,CAAA;IACnD,CAAC;SAAM,CAAC;QACJ,mBAAmB,GAAG,oBAA2B,CAAA;IACrD,CAAC;IAED,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,4CAA4C;QAC5C,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;QAClC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAK,OAAe,CAAC,WAAW,EAAE,CAAC;YACrD,0BAA0B;YAC1B,MAAM,aAAa,GAAI,OAAe,CAAC,WAAW,CAC9C,aAAa,EACb,MAAM,EACN,YAAY,CACf,CAAA;YACD,IACI,aAAa;gBACb,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;gBACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;gBAE9C,MAAM,GAAG,IAAI,CAAA;QACrB,CAAC;QAED,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,+BAA+B;YAC/B,YAAY,EAAE,cAAc;YAC5B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,mBAAmB,EAAE,mBAAmB;YACxC,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"ManyToMany.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { ObjectType } from \"../../common/ObjectType\"\nimport { RelationOptions } from \"../options/RelationOptions\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\n\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSide?: string | ((object: T) => any),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSideOrOptions?: string | ((object: T) => any) | RelationOptions,\n options?: RelationOptions,\n): PropertyDecorator {\n // normalize parameters\n let inverseSideProperty: string | ((object: T) => any)\n if (ObjectUtils.isObject(inverseSideOrOptions)) {\n options = <RelationOptions>inverseSideOrOptions\n } else {\n inverseSideProperty = inverseSideOrOptions as any\n }\n\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // now try to determine it its lazy relation\n let isLazy = options.lazy === true\n if (!isLazy && Reflect && (Reflect as any).getMetadata) {\n // automatic determination\n const reflectedType = (Reflect as any).getMetadata(\n \"design:type\",\n object,\n propertyName,\n )\n if (\n reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\"\n )\n isLazy = true\n }\n\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-many\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ManyToOne =
|
|
3
|
+
exports.ManyToOne = ManyToOne;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
const ObjectUtils_1 = require("../../util/ObjectUtils");
|
|
6
6
|
/**
|
|
@@ -42,6 +42,5 @@ function ManyToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {
|
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
exports.ManyToOne = ManyToOne;
|
|
46
45
|
|
|
47
46
|
//# sourceMappingURL=ManyToOne.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/ManyToOne.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/ManyToOne.ts"],"names":[],"mappings":";;AAgCA,8BA4CC;AA5ED,2CAAsD;AAItD,wDAAoD;AAuBpD;;;;GAIG;AACH,SAAgB,SAAS,CACrB,oBAA8D,EAC9D,oBAAsE,EACtE,OAAyB;IAEzB,wBAAwB;IACxB,IAAI,mBAAkD,CAAA;IACtD,IAAI,yBAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAoB,oBAAoB,CAAA;IACnD,CAAC;SAAM,CAAC;QACJ,mBAAmB,GAAG,oBAA2B,CAAA;IACrD,CAAC;IAED,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,iDAAiD;QACjD,IAAI,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;QAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,IAAK,OAAe,CAAC,WAAW,EAAE,CAAC;YACrD,0BAA0B;YAC1B,MAAM,aAAa,GAAI,OAAe,CAAC,WAAW,CAC9C,aAAa,EACb,MAAM,EACN,YAAY,CACf,CAAA;YACD,IACI,aAAa;gBACb,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;gBACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;gBAE9C,MAAM,GAAG,IAAI,CAAA;QACrB,CAAC;QAED,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,+BAA+B;YAC/B,YAAY,EAAE,aAAa;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,mBAAmB,EAAE,mBAAmB;YACxC,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"ManyToOne.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { ObjectType } from \"../../common/ObjectType\"\nimport { RelationOptions } from \"../options/RelationOptions\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\n\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSide?: string | ((object: T) => any),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSideOrOptions?: string | ((object: T) => any) | RelationOptions,\n options?: RelationOptions,\n): PropertyDecorator {\n // Normalize parameters.\n let inverseSideProperty: string | ((object: T) => any)\n if (ObjectUtils.isObject(inverseSideOrOptions)) {\n options = <RelationOptions>inverseSideOrOptions\n } else {\n inverseSideProperty = inverseSideOrOptions as any\n }\n\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // Now try to determine if it is a lazy relation.\n let isLazy = options && options.lazy === true\n if (!isLazy && Reflect && (Reflect as any).getMetadata) {\n // automatic determination\n const reflectedType = (Reflect as any).getMetadata(\n \"design:type\",\n object,\n propertyName,\n )\n if (\n reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\"\n )\n isLazy = true\n }\n\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-one\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OneToMany =
|
|
3
|
+
exports.OneToMany = OneToMany;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,
|
|
@@ -33,6 +33,5 @@ function OneToMany(typeFunctionOrTarget, inverseSide, options) {
|
|
|
33
33
|
});
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
exports.OneToMany = OneToMany;
|
|
37
36
|
|
|
38
37
|
//# sourceMappingURL=OneToMany.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/OneToMany.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/OneToMany.ts"],"names":[],"mappings":";;AAUA,8BAoCC;AA9CD,2CAAsD;AAKtD;;;;GAIG;AACH,SAAgB,SAAS,CACrB,oBAA8D,EAC9D,WAA0C,EAC1C,OAAyB;IAEzB,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,iDAAiD;QACjD,IAAI,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;QAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,IAAK,OAAe,CAAC,WAAW,EAAE,CAAC;YACrD,0BAA0B;YAC1B,MAAM,aAAa,GAAI,OAAe,CAAC,WAAW,CAC9C,aAAa,EACb,MAAM,EACN,YAAY,CACf,CAAA;YACD,IACI,aAAa;gBACb,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;gBACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;gBAE9C,MAAM,GAAG,IAAI,CAAA;QACrB,CAAC;QAED,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,+BAA+B;YAC/B,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,oBAAoB;YAC1B,mBAAmB,EAAE,WAAW;YAChC,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"OneToMany.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { ObjectType } from \"../../common/ObjectType\"\nimport { RelationOptions } from \"../options/RelationOptions\"\n\n/**\n * A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,\n * but Entity2 has only one Entity1. Entity2 is the owner of the relationship, and stores the id of Entity1 on its\n * side of the relation.\n */\nexport function OneToMany<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSide: string | ((object: T) => any),\n options?: RelationOptions,\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // Now try to determine if it is a lazy relation.\n let isLazy = options && options.lazy === true\n if (!isLazy && Reflect && (Reflect as any).getMetadata) {\n // automatic determination\n const reflectedType = (Reflect as any).getMetadata(\n \"design:type\",\n object,\n propertyName,\n )\n if (\n reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\"\n )\n isLazy = true\n }\n\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSide,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OneToOne =
|
|
3
|
+
exports.OneToOne = OneToOne;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
const ObjectUtils_1 = require("../../util/ObjectUtils");
|
|
6
6
|
/**
|
|
@@ -41,6 +41,5 @@ function OneToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {
|
|
|
41
41
|
});
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
exports.OneToOne = OneToOne;
|
|
45
44
|
|
|
46
45
|
//# sourceMappingURL=OneToOne.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/OneToOne.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/OneToOne.ts"],"names":[],"mappings":";;AA6BA,4BA4CC;AAzED,2CAAsD;AAItD,wDAAoD;AAqBpD;;;GAGG;AACH,SAAgB,QAAQ,CACpB,oBAA8D,EAC9D,oBAAsE,EACtE,OAAyB;IAEzB,uBAAuB;IACvB,IAAI,mBAAkD,CAAA;IACtD,IAAI,yBAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAoB,oBAAoB,CAAA;IACnD,CAAC;SAAM,CAAC;QACJ,mBAAmB,GAAG,oBAA2B,CAAA;IACrD,CAAC;IAED,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,4CAA4C;QAC5C,IAAI,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;QAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,IAAK,OAAe,CAAC,WAAW,EAAE,CAAC;YACrD,0BAA0B;YAC1B,MAAM,aAAa,GAAI,OAAe,CAAC,WAAW,CAC9C,aAAa,EACb,MAAM,EACN,YAAY,CACf,CAAA;YACD,IACI,aAAa;gBACb,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;gBACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;gBAE9C,MAAM,GAAG,IAAI,CAAA;QACrB,CAAC;QAED,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,+BAA+B;YAC/B,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,oBAAoB;YAC1B,mBAAmB,EAAE,mBAAmB;YACxC,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"OneToOne.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { ObjectType } from \"../../common/ObjectType\"\nimport { RelationOptions } from \"../options/RelationOptions\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\n\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSide?: string | ((object: T) => any),\n options?: RelationOptions,\n): PropertyDecorator\n\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne<T>(\n typeFunctionOrTarget: string | ((type?: any) => ObjectType<T>),\n inverseSideOrOptions?: string | ((object: T) => any) | RelationOptions,\n options?: RelationOptions,\n): PropertyDecorator {\n // normalize parameters\n let inverseSideProperty: string | ((object: T) => any)\n if (ObjectUtils.isObject(inverseSideOrOptions)) {\n options = <RelationOptions>inverseSideOrOptions\n } else {\n inverseSideProperty = inverseSideOrOptions as any\n }\n\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // now try to determine it its lazy relation\n let isLazy = options && options.lazy === true ? true : false\n if (!isLazy && Reflect && (Reflect as any).getMetadata) {\n // automatic determination\n const reflectedType = (Reflect as any).getMetadata(\n \"design:type\",\n object,\n propertyName,\n )\n if (\n reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\"\n )\n isLazy = true\n }\n\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-one\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RelationCount =
|
|
3
|
+
exports.RelationCount = RelationCount;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Holds a number of children in the closure table of the column.
|
|
@@ -18,6 +18,5 @@ function RelationCount(relation, alias, queryBuilderFactory) {
|
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
exports.RelationCount = RelationCount;
|
|
22
21
|
|
|
23
22
|
//# sourceMappingURL=RelationCount.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/RelationCount.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/RelationCount.ts"],"names":[],"mappings":";;AASA,sCAgBC;AAzBD,2CAAsD;AAItD;;;;GAIG;AACH,SAAgB,aAAa,CACzB,QAAuC,EACvC,KAAc,EACd,mBAE4B;IAE5B,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAA,gCAAsB,GAAE,CAAC,cAAc,CAAC,IAAI,CAAC;YACzC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,mBAAmB;SACd,CAAC,CAAA;IACnC,CAAC,CAAA;AACL,CAAC","file":"RelationCount.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationCountMetadataArgs } from \"../../metadata-args/RelationCountMetadataArgs\"\nimport { SelectQueryBuilder } from \"../../query-builder/SelectQueryBuilder\"\n\n/**\n * Holds a number of children in the closure table of the column.\n *\n * @deprecated Do not use this decorator, it may be removed in the future versions\n */\nexport function RelationCount<T>(\n relation: string | ((object: T) => any),\n alias?: string,\n queryBuilderFactory?: (\n qb: SelectQueryBuilder<any>,\n ) => SelectQueryBuilder<any>,\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n getMetadataArgsStorage().relationCounts.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory,\n } as RelationCountMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RelationId =
|
|
3
|
+
exports.RelationId = RelationId;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Special decorator used to extract relation id into separate entity property.
|
|
@@ -18,6 +18,5 @@ function RelationId(relation, alias, queryBuilderFactory) {
|
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
exports.RelationId = RelationId;
|
|
22
21
|
|
|
23
22
|
//# sourceMappingURL=RelationId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/relations/RelationId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/relations/RelationId.ts"],"names":[],"mappings":";;AASA,gCAgBC;AAzBD,2CAAsD;AAItD;;;;GAIG;AACH,SAAgB,UAAU,CACtB,QAAuC,EACvC,KAAc,EACd,mBAE4B;IAE5B,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAA,gCAAsB,GAAE,CAAC,WAAW,CAAC,IAAI,CAAC;YACtC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,mBAAmB;SACjB,CAAC,CAAA;IAChC,CAAC,CAAA;AACL,CAAC","file":"RelationId.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationIdMetadataArgs } from \"../../metadata-args/RelationIdMetadataArgs\"\nimport { SelectQueryBuilder } from \"../../query-builder/SelectQueryBuilder\"\n\n/**\n * Special decorator used to extract relation id into separate entity property.\n *\n * @experimental\n */\nexport function RelationId<T>(\n relation: string | ((object: T) => any),\n alias?: string,\n queryBuilderFactory?: (\n qb: SelectQueryBuilder<any>,\n ) => SelectQueryBuilder<any>,\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n getMetadataArgsStorage().relationIds.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory,\n } as RelationIdMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
package/decorator/tree/Tree.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Tree =
|
|
3
|
+
exports.Tree = Tree;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Marks entity to work like a tree.
|
|
@@ -17,6 +17,5 @@ function Tree(type, options) {
|
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
exports.Tree = Tree;
|
|
21
20
|
|
|
22
21
|
//# sourceMappingURL=Tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/tree/Tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/tree/Tree.ts"],"names":[],"mappings":";;AAWA,oBAWC;AAtBD,2CAAsD;AAKtD;;;;;GAKG;AACH,SAAgB,IAAI,CAChB,IAAc,EACd,OAA4B;IAE5B,OAAO,UAAU,MAAgB;QAC7B,IAAA,gCAAsB,GAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SACtC,CAAC,CAAA;IAC1B,CAAC,CAAA;AACL,CAAC","file":"Tree.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { TreeMetadataArgs } from \"../../metadata-args/TreeMetadataArgs\"\nimport { TreeType } from \"../../metadata/types/TreeTypes\"\nimport { ClosureTreeOptions } from \"../../metadata/types/ClosureTreeOptions\"\n\n/**\n * Marks entity to work like a tree.\n * Tree pattern that will be used for the tree entity should be specified.\n * @TreeParent decorator must be used in tree entities.\n * TreeRepository can be used to manipulate with tree entities.\n */\nexport function Tree(\n type: TreeType,\n options?: ClosureTreeOptions,\n): ClassDecorator {\n return function (target: Function) {\n getMetadataArgsStorage().trees.push({\n target: target,\n type: type,\n options: type === \"closure-table\" ? options : undefined,\n } as TreeMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TreeChildren =
|
|
3
|
+
exports.TreeChildren = TreeChildren;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Marks a entity property as a children of the tree.
|
|
@@ -30,6 +30,5 @@ function TreeChildren(options) {
|
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
exports.TreeChildren = TreeChildren;
|
|
34
33
|
|
|
35
34
|
//# sourceMappingURL=TreeChildren.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/tree/TreeChildren.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/tree/TreeChildren.ts"],"names":[],"mappings":";;AAQA,oCA8BC;AAtCD,2CAAsD;AAItD;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAI5B;IACG,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,4CAA4C;QAC5C,MAAM,aAAa,GACf,OAAO,IAAK,OAAe,CAAC,WAAW;YACnC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GACR,CAAC,aAAa;YACV,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;YACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;YACnD,KAAK,CAAA;QAET,oCAAoC;QACpC,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW;YAC9B,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"TreeChildren.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { RelationOptions } from \"../options/RelationOptions\"\n\n/**\n * Marks a entity property as a children of the tree.\n * \"Tree children\" will contain all children (bind) of this entity.\n */\nexport function TreeChildren(options?: {\n cascade?:\n | boolean\n | (\"insert\" | \"update\" | \"remove\" | \"soft-remove\" | \"recover\")[]\n}): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // now try to determine it its lazy relation\n const reflectedType =\n Reflect && (Reflect as any).getMetadata\n ? Reflect.getMetadata(\"design:type\", object, propertyName)\n : undefined\n const isLazy =\n (reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\") ||\n false\n\n // add one-to-many relation for this\n getMetadataArgsStorage().relations.push({\n isTreeChildren: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: () => object.constructor,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TreeLevelColumn =
|
|
3
|
+
exports.TreeLevelColumn = TreeLevelColumn;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Creates a "level"/"length" column to the table that holds a closure table.
|
|
@@ -15,6 +15,5 @@ function TreeLevelColumn() {
|
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
exports.TreeLevelColumn = TreeLevelColumn;
|
|
19
18
|
|
|
20
19
|
//# sourceMappingURL=TreeLevelColumn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/tree/TreeLevelColumn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/tree/TreeLevelColumn.ts"],"names":[],"mappings":";;AAMA,0CASC;AAfD,2CAAsD;AAGtD;;GAEG;AACH,SAAgB,eAAe;IAC3B,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAA,gCAAsB,GAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAClC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,EAAE;SACQ,CAAC,CAAA;IAC5B,CAAC,CAAA;AACL,CAAC","file":"TreeLevelColumn.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { ColumnMetadataArgs } from \"../../metadata-args/ColumnMetadataArgs\"\n\n/**\n * Creates a \"level\"/\"length\" column to the table that holds a closure table.\n */\nexport function TreeLevelColumn(): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"treeLevel\",\n options: {},\n } as ColumnMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TreeParent =
|
|
3
|
+
exports.TreeParent = TreeParent;
|
|
4
4
|
const globals_1 = require("../../globals");
|
|
5
5
|
/**
|
|
6
6
|
* Marks a entity property as a parent of the tree.
|
|
@@ -29,6 +29,5 @@ function TreeParent(options) {
|
|
|
29
29
|
});
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
exports.TreeParent = TreeParent;
|
|
33
32
|
|
|
34
33
|
//# sourceMappingURL=TreeParent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/decorator/tree/TreeParent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/decorator/tree/TreeParent.ts"],"names":[],"mappings":";;AASA,gCA2BC;AApCD,2CAAsD;AAKtD;;;GAGG;AACH,SAAgB,UAAU,CAAC,OAE1B;IACG,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,EAAqB,CAAA;QAE7C,4CAA4C;QAC5C,MAAM,aAAa,GACf,OAAO,IAAK,OAAe,CAAC,WAAW;YACnC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GACR,CAAC,aAAa;YACV,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;YACtC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;YACnD,KAAK,CAAA;QAET,IAAA,gCAAsB,GAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW;YAC9B,OAAO,EAAE,OAAO;SACK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACL,CAAC","file":"TreeParent.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { RelationMetadataArgs } from \"../../metadata-args/RelationMetadataArgs\"\nimport { OnDeleteType } from \"../../metadata/types/OnDeleteType\"\nimport { RelationOptions } from \"../options/RelationOptions\"\n\n/**\n * Marks a entity property as a parent of the tree.\n * \"Tree parent\" indicates who owns (is a parent) of this entity in tree structure.\n */\nexport function TreeParent(options?: {\n onDelete?: OnDeleteType\n}): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n if (!options) options = {} as RelationOptions\n\n // now try to determine it its lazy relation\n const reflectedType =\n Reflect && (Reflect as any).getMetadata\n ? Reflect.getMetadata(\"design:type\", object, propertyName)\n : undefined\n const isLazy =\n (reflectedType &&\n typeof reflectedType.name === \"string\" &&\n reflectedType.name.toLowerCase() === \"promise\") ||\n false\n\n getMetadataArgsStorage().relations.push({\n isTreeParent: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"many-to-one\",\n type: () => object.constructor,\n options: options,\n } as RelationMetadataArgs)\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BetterSqlite3Driver = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
5
|
+
const promises_1 = tslib_1.__importDefault(require("fs/promises"));
|
|
6
6
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
7
|
const error_1 = require("../../error");
|
|
8
8
|
const PlatformTools_1 = require("../../platform/PlatformTools");
|
|
@@ -126,7 +126,7 @@ class BetterSqlite3Driver extends AbstractSqliteDriver_1.AbstractSqliteDriver {
|
|
|
126
126
|
* Auto creates database directory if it does not exist.
|
|
127
127
|
*/
|
|
128
128
|
async createDatabaseDirectory(dbPath) {
|
|
129
|
-
await
|
|
129
|
+
await promises_1.default.mkdir(dbPath, { recursive: true });
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
132
132
|
* Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/better-sqlite3/BetterSqlite3Driver.ts"],"names":[],"mappings":"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","file":"BetterSqlite3Driver.js","sourcesContent":["import mkdirp from \"mkdirp\"\nimport path from \"path\"\nimport { DriverPackageNotInstalledError } from \"../../error\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { BetterSqlite3ConnectionOptions } from \"./BetterSqlite3ConnectionOptions\"\nimport { BetterSqlite3QueryRunner } from \"./BetterSqlite3QueryRunner\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { filepathToName, isAbsolute } from \"../../util/PathUtils\"\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class BetterSqlite3Driver extends AbstractSqliteDriver {\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BetterSqlite3ConnectionOptions\n\n /**\n * SQLite underlying library.\n */\n sqlite: any\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n\n this.connection = connection\n this.options = connection.options as BetterSqlite3ConnectionOptions\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n this.queryRunner = undefined\n this.databaseConnection.close()\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new BetterSqlite3QueryRunner(this)\n\n return this.queryRunner\n }\n\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\"\n }\n\n return super.normalizeType(column)\n }\n\n async afterConnect(): Promise<void> {\n return this.attachDatabases()\n }\n\n /**\n * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.\n */\n buildTableName(\n tableName: string,\n _schema?: string,\n database?: string,\n ): string {\n if (!database) return tableName\n if (this.getAttachedDatabaseHandleByRelativePath(database))\n return `${this.getAttachedDatabaseHandleByRelativePath(\n database,\n )}.${tableName}`\n\n if (database === this.options.database) return tableName\n\n // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)\n const identifierHash = filepathToName(database)\n // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable\n const absFilepath = isAbsolute(database)\n ? database\n : path.join(this.getMainDatabasePath(), database)\n\n this.attachedDatabases[database] = {\n attachFilepathAbsolute: absFilepath,\n attachFilepathRelative: database,\n attachHandle: identifierHash,\n }\n\n return `${identifierHash}.${tableName}`\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n // not to create database directory if is in memory\n if (this.options.database !== \":memory:\")\n await this.createDatabaseDirectory(\n path.dirname(this.options.database),\n )\n\n const {\n database,\n readonly = false,\n fileMustExist = false,\n timeout = 5000,\n verbose = null,\n nativeBinding = null,\n prepareDatabase,\n } = this.options\n const databaseConnection = this.sqlite(database, {\n readonly,\n fileMustExist,\n timeout,\n verbose,\n nativeBinding,\n })\n // in the options, if encryption key for SQLCipher is setted.\n // Must invoke key pragma before trying to do any other interaction with the database.\n if (this.options.key) {\n databaseConnection.exec(\n `PRAGMA key = ${JSON.stringify(this.options.key)}`,\n )\n }\n\n // function to run before a database is used in typeorm.\n if (typeof prepareDatabase === \"function\") {\n prepareDatabase(databaseConnection)\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.exec(`PRAGMA foreign_keys = ON`)\n\n // turn on WAL mode to enhance performance\n if (this.options.enableWAL) {\n databaseConnection.exec(`PRAGMA journal_mode = WAL`)\n }\n\n return databaseConnection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite =\n this.options.driver || PlatformTools.load(\"better-sqlite3\")\n this.sqlite = sqlite\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"better-sqlite3\")\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(dbPath: string): Promise<void> {\n await mkdirp(dbPath)\n }\n\n /**\n * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName\n * during EntityMetadata production (see EntityMetadata#buildTablePath)\n *\n * https://sqlite.org/lang_attach.html\n */\n protected async attachDatabases() {\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {\n attachHandle,\n attachFilepathAbsolute,\n } of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(\n path.dirname(attachFilepathAbsolute),\n )\n await this.connection.query(\n `ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`,\n )\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database\n return path.dirname(\n isAbsolute(optionsDb)\n ? optionsDb\n : path.join(this.options.baseDirectory!, optionsDb),\n )\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/better-sqlite3/BetterSqlite3Driver.ts"],"names":[],"mappings":";;;;AAAA,mEAA4B;AAC5B,wDAAuB;AACvB,uCAA4D;AAC5D,gEAA4D;AAI5D,kFAA8E;AAE9E,yEAAqE;AAErE,oDAAiE;AAEjE;;GAEG;AACH,MAAa,mBAAoB,SAAQ,2CAAoB;IAezD,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,UAAsB;QAC9B,KAAK,CAAC,UAAU,CAAC,CAAA;QAEjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAyC,CAAA;QACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC5B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAqB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,WAAW,GAAG,IAAI,mDAAwB,CAAC,IAAI,CAAC,CAAA;QAEzD,OAAO,IAAI,CAAC,WAAW,CAAA;IAC3B,CAAC;IAED,aAAa,CAAC,MAKb;QACG,IAAK,MAAM,CAAC,IAAY,KAAK,MAAM,EAAE,CAAC;YAClC,OAAO,MAAM,CAAA;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,OAAO,IAAI,CAAC,eAAe,EAAE,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,cAAc,CACV,SAAiB,EACjB,OAAgB,EAChB,QAAiB;QAEjB,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/B,IAAI,IAAI,CAAC,uCAAuC,CAAC,QAAQ,CAAC;YACtD,OAAO,GAAG,IAAI,CAAC,uCAAuC,CAClD,QAAQ,CACX,IAAI,SAAS,EAAE,CAAA;QAEpB,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAExD,iHAAiH;QACjH,MAAM,cAAc,GAAG,IAAA,0BAAc,EAAC,QAAQ,CAAC,CAAA;QAC/C,gIAAgI;QAChI,MAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,QAAQ,CAAC;YACpC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,CAAC,CAAA;QAErD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG;YAC/B,sBAAsB,EAAE,WAAW;YACnC,sBAAsB,EAAE,QAAQ;YAChC,YAAY,EAAE,cAAc;SAC/B,CAAA;QAED,OAAO,GAAG,cAAc,IAAI,SAAS,EAAE,CAAA;IAC3C,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,KAAK,CAAC,wBAAwB;QACpC,mDAAmD;QACnD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU;YACpC,MAAM,IAAI,CAAC,uBAAuB,CAC9B,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CACtC,CAAA;QAEL,MAAM,EACF,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,KAAK,EACrB,OAAO,GAAG,IAAI,EACd,OAAO,GAAG,IAAI,EACd,aAAa,GAAG,IAAI,EACpB,eAAe,GAClB,GAAG,IAAI,CAAC,OAAO,CAAA;QAChB,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC7C,QAAQ;YACR,aAAa;YACb,OAAO;YACP,OAAO;YACP,aAAa;SAChB,CAAC,CAAA;QACF,6DAA6D;QAC7D,sFAAsF;QACtF,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnB,kBAAkB,CAAC,IAAI,CACnB,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CACrD,CAAA;QACL,CAAC;QAED,wDAAwD;QACxD,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;YACxC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QACvC,CAAC;QAED,yFAAyF;QACzF,kEAAkE;QAClE,kBAAkB,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAEnD,0CAA0C;QAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACxD,CAAC;QAED,OAAO,kBAAkB,CAAA;IAC7B,CAAC;IAED;;OAEG;IACO,gBAAgB;QACtB,IAAI,CAAC;YACD,MAAM,MAAM,GACR,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,6BAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,sCAA8B,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;QACxE,CAAC;IACL,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,uBAAuB,CAAC,MAAc;QAClD,MAAM,kBAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,eAAe;QAC3B,kIAAkI;QAClI,IAAI,KAAK,EAAE,MAAM,EACb,YAAY,EACZ,sBAAsB,GACzB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,uBAAuB,CAC9B,cAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,WAAW,sBAAsB,SAAS,YAAY,GAAG,CAC5D,CAAA;QACL,CAAC;IACL,CAAC;IAES,mBAAmB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QACvC,OAAO,cAAI,CAAC,OAAO,CACf,IAAA,sBAAU,EAAC,SAAS,CAAC;YACjB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAc,EAAE,SAAS,CAAC,CAC1D,CAAA;IACL,CAAC;CACJ;AA7MD,kDA6MC","file":"BetterSqlite3Driver.js","sourcesContent":["import fs from \"fs/promises\"\nimport path from \"path\"\nimport { DriverPackageNotInstalledError } from \"../../error\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { BetterSqlite3ConnectionOptions } from \"./BetterSqlite3ConnectionOptions\"\nimport { BetterSqlite3QueryRunner } from \"./BetterSqlite3QueryRunner\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { filepathToName, isAbsolute } from \"../../util/PathUtils\"\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class BetterSqlite3Driver extends AbstractSqliteDriver {\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BetterSqlite3ConnectionOptions\n\n /**\n * SQLite underlying library.\n */\n sqlite: any\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n\n this.connection = connection\n this.options = connection.options as BetterSqlite3ConnectionOptions\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n this.queryRunner = undefined\n this.databaseConnection.close()\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new BetterSqlite3QueryRunner(this)\n\n return this.queryRunner\n }\n\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\"\n }\n\n return super.normalizeType(column)\n }\n\n async afterConnect(): Promise<void> {\n return this.attachDatabases()\n }\n\n /**\n * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.\n */\n buildTableName(\n tableName: string,\n _schema?: string,\n database?: string,\n ): string {\n if (!database) return tableName\n if (this.getAttachedDatabaseHandleByRelativePath(database))\n return `${this.getAttachedDatabaseHandleByRelativePath(\n database,\n )}.${tableName}`\n\n if (database === this.options.database) return tableName\n\n // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)\n const identifierHash = filepathToName(database)\n // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable\n const absFilepath = isAbsolute(database)\n ? database\n : path.join(this.getMainDatabasePath(), database)\n\n this.attachedDatabases[database] = {\n attachFilepathAbsolute: absFilepath,\n attachFilepathRelative: database,\n attachHandle: identifierHash,\n }\n\n return `${identifierHash}.${tableName}`\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n // not to create database directory if is in memory\n if (this.options.database !== \":memory:\")\n await this.createDatabaseDirectory(\n path.dirname(this.options.database),\n )\n\n const {\n database,\n readonly = false,\n fileMustExist = false,\n timeout = 5000,\n verbose = null,\n nativeBinding = null,\n prepareDatabase,\n } = this.options\n const databaseConnection = this.sqlite(database, {\n readonly,\n fileMustExist,\n timeout,\n verbose,\n nativeBinding,\n })\n // in the options, if encryption key for SQLCipher is setted.\n // Must invoke key pragma before trying to do any other interaction with the database.\n if (this.options.key) {\n databaseConnection.exec(\n `PRAGMA key = ${JSON.stringify(this.options.key)}`,\n )\n }\n\n // function to run before a database is used in typeorm.\n if (typeof prepareDatabase === \"function\") {\n prepareDatabase(databaseConnection)\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.exec(`PRAGMA foreign_keys = ON`)\n\n // turn on WAL mode to enhance performance\n if (this.options.enableWAL) {\n databaseConnection.exec(`PRAGMA journal_mode = WAL`)\n }\n\n return databaseConnection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite =\n this.options.driver || PlatformTools.load(\"better-sqlite3\")\n this.sqlite = sqlite\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"better-sqlite3\")\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(dbPath: string): Promise<void> {\n await fs.mkdir(dbPath, { recursive: true })\n }\n\n /**\n * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName\n * during EntityMetadata production (see EntityMetadata#buildTablePath)\n *\n * https://sqlite.org/lang_attach.html\n */\n protected async attachDatabases() {\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {\n attachHandle,\n attachFilepathAbsolute,\n } of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(\n path.dirname(attachFilepathAbsolute),\n )\n await this.connection.query(\n `ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`,\n )\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database\n return path.dirname(\n isAbsolute(optionsDb)\n ? optionsDb\n : path.join(this.options.baseDirectory!, optionsDb),\n )\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"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","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize\n } else {\n this.cacheSize = 100\n }\n }\n\n private cacheSize: number\n private stmtCache = new Map<string, any>()\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query)\n if (!stmt) {\n const databaseConnection = await this.connect()\n stmt = databaseConnection.prepare(query)\n this.stmtCache.set(query, stmt)\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value\n this.stmtCache.delete(key)\n }\n }\n return stmt\n } else {\n const databaseConnection = await this.connect()\n return databaseConnection.prepare(query)\n }\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n\n const broadcasterResult = new BroadcasterResult()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n this.broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n const queryStartTime = +new Date()\n\n const stmt = await this.getStmt(query)\n\n try {\n const result = new QueryResult()\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters)\n\n result.raw = raw\n\n if (Array.isArray(raw)) {\n result.records = raw\n }\n } else {\n const raw = stmt.run.apply(stmt, parameters)\n result.affected = raw.changes\n result.raw = raw.lastInsertRowid\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n result.raw,\n undefined,\n )\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this)\n throw new QueryFailedError(query, parameters, err)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadTableRecords(\n tablePath: string,\n tableOrIndex: \"table\" | \"index\",\n ) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `SELECT ${\n database ? `'${database}'` : null\n } as database, * FROM ${this.escapePath(\n `${database ? `${database}.` : \"\"}sqlite_master`,\n )} WHERE \"type\" = '${tableOrIndex}' AND \"${\n tableOrIndex === \"table\" ? \"name\" : \"tbl_name\"\n }\" IN ('${tableName}')`,\n )\n return res\n }\n protected async loadPragmaRecords(tablePath: string, pragma: string) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `PRAGMA ${\n database ? `\"${database}\".` : \"\"\n }${pragma}(\"${tableName}\")`,\n )\n return res\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"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","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize\n } else {\n this.cacheSize = 100\n }\n }\n\n private cacheSize: number\n private stmtCache = new Map<string, any>()\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query)\n if (!stmt) {\n const databaseConnection = await this.connect()\n stmt = databaseConnection.prepare(query)\n this.stmtCache.set(query, stmt)\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value!\n this.stmtCache.delete(key)\n }\n }\n return stmt\n } else {\n const databaseConnection = await this.connect()\n return databaseConnection.prepare(query)\n }\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n\n const broadcasterResult = new BroadcasterResult()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n this.broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n const queryStartTime = +new Date()\n\n const stmt = await this.getStmt(query)\n\n try {\n const result = new QueryResult()\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters)\n\n result.raw = raw\n\n if (Array.isArray(raw)) {\n result.records = raw\n }\n } else {\n const raw = stmt.run.apply(stmt, parameters)\n result.affected = raw.changes\n result.raw = raw.lastInsertRowid\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n result.raw,\n undefined,\n )\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this)\n throw new QueryFailedError(query, parameters, err)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadTableRecords(\n tablePath: string,\n tableOrIndex: \"table\" | \"index\",\n ) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `SELECT ${\n database ? `'${database}'` : null\n } as database, * FROM ${this.escapePath(\n `${database ? `${database}.` : \"\"}sqlite_master`,\n )} WHERE \"type\" = '${tableOrIndex}' AND \"${\n tableOrIndex === \"table\" ? \"name\" : \"tbl_name\"\n }\" IN ('${tableName}')`,\n )\n return res\n }\n protected async loadPragmaRecords(tablePath: string, pragma: string) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `PRAGMA ${\n database ? `\"${database}\".` : \"\"\n }${pragma}(\"${tableName}\")`,\n )\n return res\n }\n}\n"],"sourceRoot":"../.."}
|