typeorm 0.3.11-dev.1cb738a → 0.3.11-dev.2473ff0
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/browser/data-source/DataSource.js +2 -2
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/driver/postgres/PostgresConnectionOptions.d.ts +16 -0
- package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +11 -1
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteConnectionOptions.d.ts +6 -0
- package/browser/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.js +18 -6
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +3 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +1 -1
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +3 -3
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/repository/UpsertOptions.d.ts +3 -1
- package/browser/repository/UpsertOptions.js.map +1 -1
- package/data-source/DataSource.js +2 -2
- package/data-source/DataSource.js.map +1 -1
- package/driver/postgres/PostgresConnectionOptions.d.ts +16 -0
- package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +11 -1
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/sqlite/SqliteConnectionOptions.d.ts +6 -0
- package/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
- package/driver/sqlite/SqliteDriver.js +18 -6
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/entity-manager/EntityManager.js +3 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/migration/MigrationExecutor.js +1 -1
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +1 -1
- package/query-builder/SelectQueryBuilder.js +3 -3
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/repository/UpsertOptions.d.ts +3 -1
- package/repository/UpsertOptions.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/entity-manager/EntityManager.ts"],"names":[],"mappings":";;;AAIA,sEAAkE;AAClE,8GAA0G;AAK1G,kGAA8F;AAC9F,mEAA+D;AAC/D,iEAA6D;AAC7D,yDAAqD;AACrD,uEAAmE;AACnE,sHAAkH;AAClH,gIAA4H;AAC5H,oCAKiB;AACjB,yEAAqE;AAIrE,gFAA4E;AAO5E,qDAAiD;AACjD,wCAAmD;AAEnD,6DAAyD;AAGzD;;;GAGG;AACH,MAAa,aAAa;IAsCtB,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,UAAsB,EAAE,WAAyB;QAzCpD,mBAAa,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAiBpD,4EAA4E;QAC5E,uBAAuB;QACvB,4EAA4E;QAE5E;;WAEG;QACO,iBAAY,GAAsB,EAAE,CAAA;QAE9C;;WAEG;QACO,qBAAgB,GAA0B,EAAE,CAAA;QAEtD;;WAEG;QACO,mCAA8B,GACpC,IAAI,qEAAiC,EAAE,CAAA;QAOvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;YAC9B,uCAAuC;YACvC,yBAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;SAC1D;IACL,CAAC;IAuBD;;;OAGG;IACH,KAAK,CAAC,WAAW,CACb,2BAEoD,EACpD,qBAAoE;QAEpE,MAAM,SAAS,GACX,OAAO,2BAA2B,KAAK,QAAQ;YAC3C,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,gBAAgB,GAClB,OAAO,2BAA2B,KAAK,UAAU;YAC7C,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,qBAAqB,CAAA;QAE/B,IAAI,CAAC,gBAAgB,EAAE;YACnB,MAAM,IAAI,oBAAY,CAClB,0FAA0F,CAC7F,CAAA;SACJ;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU;YAC/C,MAAM,IAAI,iFAAuC,EAAE,CAAA;QAEvD,6HAA6H;QAC7H,6GAA6G;QAC7G,MAAM,WAAW,GACb,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAA;QAE3D,IAAI;YACA,MAAM,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAC7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAC1D,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAA;YACrC,OAAO,MAAM,CAAA;SAChB;QAAC,OAAO,GAAG,EAAE;YACV,IAAI;gBACA,2DAA2D;gBAC3D,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAA;aAC1C;YAAC,OAAO,aAAa,EAAE,GAAE;YAC1B,MAAM,GAAG,CAAA;SACZ;gBAAS;YACN,IAAI,CAAC,IAAI,CAAC,WAAW;gBACjB,yDAAyD;gBACzD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;SAClC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,UAAkB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACrE,CAAC;IAgBD;;OAEG;IACH,kBAAkB,CACd,WAAgD,EAChD,KAAc,EACd,WAAyB;QAEzB,IAAI,KAAK,EAAE;YACP,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACrC,WAAmC,EACnC,KAAK,EACL,WAAW,IAAI,IAAI,CAAC,WAAW,CAClC,CAAA;SACJ;aAAM;YACH,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACpC,WAAuC;gBACpC,WAAW;gBACX,IAAI,CAAC,WAAW,CACvB,CAAA;SACJ;IACL,CAAC;IAYD;;OAEG;IACH,KAAK,CAAC,cAAuC,EAAE,WAAiB;QAC5D,MAAM,MAAM,GACR,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAA;QACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAA;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACpD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAYD;;OAEG;IACH,KAAK,CAAC,cAAuC,EAAE,WAAiB;QAC5D,MAAM,MAAM,GACR,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAA;QACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAA;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACpD,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC/C,CAAC;IAoBD;;;OAGG;IACH,MAAM,CACF,WAAiC,EACjC,oBAAkE;QAElE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEzD,IAAI,CAAC,oBAAoB;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnE,IAAI,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACnC,OAAQ,oBAA8C,CAAC,GAAG,CACtD,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CACjE,CAAA;QAEL,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACzD,IAAI,CAAC,8BAA8B,CAAC,SAAS,CACzC,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,IAAI,CACP,CAAA;QACD,OAAO,eAAe,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CACD,WAAiC,EACjC,eAAuB,EACvB,GAAG,WAAkC;QAErC,sDAAsD;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3B,IAAI,CAAC,8BAA8B,CAAC,SAAS,CACzC,eAAe,EACf,MAAM,EACN,QAAQ,CACX,CACJ,CAAA;QACD,OAAO,eAAe,CAAA;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACT,WAAiC,EACjC,UAA+B;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,sCAAsC,GACxC,IAAI,+EAAsC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACvE,MAAM,iBAAiB,GACnB,MAAM,sCAAsC,CAAC,SAAS,CAClD,UAAU,EACV,QAAQ,CACX,CAAA;QACL,IAAI,iBAAiB;YACjB,OAAO,IAAI,CAAC,KAAK,CACb,WAAkB,EAClB,iBAA2B,EAC3B,UAAU,CACb,CAAA;QAEL,OAAO,SAAS,CAAA;IACpB,CAAC;IAsDD;;OAEG;IACH,IAAI,CACA,cAAgD,EAChD,oBAA8B,EAC9B,YAA0B;QAE1B,6BAA6B;QAC7B,IAAI,MAAM,GACN,SAAS,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,OAAO,cAAc,KAAK,UAAU;gBACjC,iCAAe,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC9C,OAAO,cAAc,KAAK,QAAQ,CAAC;YACnC,CAAC,CAAE,cAAoC;YACvC,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GAAY,MAAM;YAC1B,CAAC,CAAE,oBAAgC;YACnC,CAAC,CAAE,cAA0B,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM;YAClB,CAAC,CAAC,YAAY;YACd,CAAC,CAAE,oBAAoC,CAAA;QAE3C,IAAI,iCAAe,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA;QAExE,2EAA2E;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAElC,yBAAyB;QACzB,OAAO,IAAI,6CAAqB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,CACV;aACI,OAAO,EAAE;aACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IA8BD;;OAEG;IACH,MAAM,CACF,cAA0D,EAC1D,oBAAwC,EACxC,YAA4B;QAE5B,6BAA6B;QAC7B,MAAM,MAAM,GACR,SAAS,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,OAAO,cAAc,KAAK,UAAU;gBACjC,iCAAe,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC9C,OAAO,cAAc,KAAK,QAAQ,CAAC;YACnC,CAAC,CAAE,cAAoC;YACvC,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GAAsB,MAAM;YACpC,CAAC,CAAE,oBAA0C;YAC7C,CAAC,CAAE,cAAoC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM;YAClB,CAAC,CAAC,YAAY;YACd,CAAC,CAAE,oBAAoC,CAAA;QAE3C,2EAA2E;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAElC,yBAAyB;QACzB,OAAO,IAAI,6CAAqB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,CACV;aACI,OAAO,EAAE;aACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAiCD;;OAEG;IACH,UAAU,CACN,cAAgD,EAChD,oBAA8B,EAC9B,YAA0B;QAE1B,6BAA6B;QAC7B,IAAI,MAAM,GACN,SAAS,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,OAAO,cAAc,KAAK,UAAU;gBACjC,iCAAe,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC9C,OAAO,cAAc,KAAK,QAAQ,CAAC;YACnC,CAAC,CAAE,cAAoC;YACvC,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GAAY,MAAM;YAC1B,CAAC,CAAE,oBAAgC;YACnC,CAAC,CAAE,cAA0B,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM;YAClB,CAAC,CAAC,YAAY;YACd,CAAC,CAAE,oBAAoC,CAAA;QAE3C,IAAI,iCAAe,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA;QAExE,2EAA2E;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAElC,gCAAgC;QAChC,OAAO,IAAI,6CAAqB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,aAAa,EACb,MAAM,EACN,MAAM,EACN,OAAO,CACV;aACI,OAAO,EAAE;aACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAiCD;;OAEG;IACH,OAAO,CACH,cAAgD,EAChD,oBAA8B,EAC9B,YAA0B;QAE1B,6BAA6B;QAC7B,IAAI,MAAM,GACN,SAAS,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,OAAO,cAAc,KAAK,UAAU;gBACjC,iCAAe,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC9C,OAAO,cAAc,KAAK,QAAQ,CAAC;YACnC,CAAC,CAAE,cAAoC;YACvC,CAAC,CAAC,SAAS,CAAA;QACnB,MAAM,MAAM,GAAY,MAAM;YAC1B,CAAC,CAAE,oBAAgC;YACnC,CAAC,CAAE,cAA0B,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM;YAClB,CAAC,CAAC,YAAY;YACd,CAAC,CAAE,oBAAoC,CAAA;QAE3C,IAAI,iCAAe,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA;QAExE,2EAA2E;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAElC,4BAA4B;QAC5B,OAAO,IAAI,6CAAqB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,CACV;aACI,OAAO,EAAE;aACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACR,MAA4B,EAC5B,MAEsC;QAEtC,OAAO,IAAI,CAAC,kBAAkB,EAAE;aAC3B,MAAM,EAAE;aACR,IAAI,CAAC,MAAM,CAAC;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,EAAE,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CACR,MAA4B,EAC5B,gBAEsC,EACtC,sBAAwD;QAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAEpD,IAAI,OAA8B,CAAA;QAElC,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE;YACvC,OAAO,GAAG;gBACN,aAAa,EAAE,sBAAsB;aACxC,CAAA;SACJ;aAAM;YACH,OAAO,GAAG,sBAAsB,CAAA;SACnC;QAED,IAAI,QAA0C,CAAA;QAE9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAClC,QAAQ,GAAG,CAAC,gBAAgB,CAAC,CAAA;SAChC;aAAM;YACH,QAAQ,GAAG,gBAAgB,CAAA;SAC9B;QAED,MAAM,eAAe,GAAG,QAAQ,CAAC,yBAAyB,CACtD,OAAO,CAAC,aAAa,CACxB,CAAA;QAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,EAAE,CACJ,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACT,CAAC,MAAM,EAAE,EAAE,CACP,OAAO,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,WAAW,CACxD,CACR,CAAA;QAED,OAAO,IAAI,CAAC,kBAAkB,EAAE;aAC3B,MAAM,EAAE;aACR,IAAI,CAAC,MAAM,CAAC;aACZ,MAAM,CAAC,QAAQ,CAAC;aAChB,QAAQ,CACL,CAAC,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC,GAAG,CACzC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAC5B,EACD,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAC9C;YACI,2BAA2B,EACvB,OAAO,CAAC,2BAA2B;SAC1C,CACJ;aACA,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CACF,MAA4B,EAC5B,QASS,EACT,aAA6C;QAE7C,gFAAgF;QAChF,IACI,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,IAAI;YACjB,QAAQ,KAAK,EAAE;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD;YACE,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,oBAAY,CACZ,0DAA0D,CAC7D,CACJ,CAAA;SACJ;QAED,IACI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,YAAY,IAAI;YACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACzB;YACE,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,MAAM,CAAC,MAAM,CAAC;iBACd,GAAG,CAAC,aAAa,CAAC;iBAClB,UAAU,CAAC,QAAQ,CAAC;iBACpB,OAAO,EAAE,CAAA;SACjB;aAAM;YACH,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,MAAM,CAAC,MAAM,CAAC;iBACd,GAAG,CAAC,aAAa,CAAC;iBAClB,KAAK,CAAC,QAAQ,CAAC;iBACf,OAAO,EAAE,CAAA;SACjB;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CACF,cAAoC,EACpC,QASS;QAET,gFAAgF;QAChF,IACI,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,IAAI;YACjB,QAAQ,KAAK,EAAE;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD;YACE,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,oBAAY,CACZ,0DAA0D,CAC7D,CACJ,CAAA;SACJ;QAED,IACI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,YAAY,IAAI;YACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACzB;YACE,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,MAAM,EAAE;iBACR,IAAI,CAAC,cAAc,CAAC;iBACpB,UAAU,CAAC,QAAQ,CAAC;iBACpB,OAAO,EAAE,CAAA;SACjB;aAAM;YACH,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,MAAM,EAAE;iBACR,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,QAAQ,CAAC;iBACf,OAAO,EAAE,CAAA;SACjB;IACL,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CACN,cAAoC,EACpC,QASS;QAET,gFAAgF;QAChF,IACI,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,IAAI;YACjB,QAAQ,KAAK,EAAE;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD;YACE,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,oBAAY,CACZ,0DAA0D,CAC7D,CACJ,CAAA;SACJ;QAED,IACI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,YAAY,IAAI;YACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACzB;YACE,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,UAAU,EAAE;iBACZ,IAAI,CAAC,cAAc,CAAC;iBACpB,UAAU,CAAC,QAAQ,CAAC;iBACpB,OAAO,EAAE,CAAA;SACjB;aAAM;YACH,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,UAAU,EAAE;iBACZ,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,QAAQ,CAAC;iBACf,OAAO,EAAE,CAAA;SACjB;IACL,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CACH,cAAoC,EACpC,QASS;QAET,gFAAgF;QAChF,IACI,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,IAAI;YACjB,QAAQ,KAAK,EAAE;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD;YACE,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,oBAAY,CACZ,0DAA0D,CAC7D,CACJ,CAAA;SACJ;QAED,IACI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,YAAY,IAAI;YACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACzB;YACE,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,OAAO,EAAE;iBACT,IAAI,CAAC,cAAc,CAAC;iBACpB,UAAU,CAAC,QAAQ,CAAC;iBACpB,OAAO,EAAE,CAAA;SACjB;aAAM;YACH,OAAO,IAAI,CAAC,kBAAkB,EAAE;iBAC3B,OAAO,EAAE;iBACT,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,QAAQ,CAAC;iBACf,OAAO,EAAE,CAAA;SACjB;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CACD,WAAiC,EACjC,OAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAW,EACX,mCAAgB,CAAC,2BAA2B,CAAC,OAAO,CAAC;YACjD,QAAQ,CAAC,IAAI,CACpB;aACI,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,QAAQ,EAAE,CAAA;IACnB,CAAC;IAED;;;OAGG;IACH,OAAO,CACH,WAAiC,EACjC,KAA4D;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;aACrD,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;aACzB,QAAQ,EAAE,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACN,WAAiC,EACjC,OAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAkB,EAClB,mCAAgB,CAAC,2BAA2B,CAAC,OAAO,CAAC;YACjD,QAAQ,CAAC,IAAI,CACpB;aACI,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,WAAiC,EACjC,KAA4D;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAkB,EAClB,QAAQ,CAAC,IAAI,CAChB;aACI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aAChC,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;;;OAIG;IACH,YAAY,CACR,WAAiC,EACjC,OAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAkB,EAClB,mCAAgB,CAAC,2BAA2B,CAAC,OAAO,CAAC;YACjD,QAAQ,CAAC,IAAI,CACpB;aACI,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,eAAe,EAAE,CAAA;IAC1B,CAAC;IAED;;;;OAIG;IACH,cAAc,CACV,WAAiC,EACjC,KAA4D;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAkB,EAClB,QAAQ,CAAC,IAAI,CAChB;aACI,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;aACzB,eAAe,EAAE,CAAA;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CACX,WAAiC,EACjC,GAAU;QAEV,sFAAsF;QACtF,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAC1B,WAAkB,EAClB,QAAQ,CAAC,IAAI,CAChB;aACI,aAAa,CAAC,GAAG,CAAC;aAClB,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACT,WAAiC,EACjC,OAA+B;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEzD,gCAAgC;QAChC,IAAI,KAAK,GAAW,QAAQ,CAAC,IAAI,CAAA;QACjC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;YACzB,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAA;SAC7B;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAChB,MAAM,IAAI,KAAK,CACX,sEAAsE,CACzE,CAAA;SACJ;QAED,8CAA8C;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAS,WAAW,EAAE,KAAK,CAAC;aACrD,cAAc,CAAC;YACZ,GAAG,OAAO;YACV,IAAI,EAAE,CAAC;SACV,CAAC;aACD,MAAM,EAAE,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACX,WAAiC,EACjC,KAA4D;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEzD,8CAA8C;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAS,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;aAC7D,cAAc,CAAC;YACZ,KAAK;YACL,IAAI,EAAE,CAAC;SACV,CAAC;aACD,MAAM,EAAE,CAAA;IACjB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,WAAW,CACb,WAAiC,EACjC,EAAqC;QAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEzD,8CAA8C;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAS,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;aAC7D,cAAc,CAAC;YACZ,IAAI,EAAE,CAAC;SACV,CAAC;aACD,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;aAC1C,MAAM,EAAE,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CACf,WAAiC,EACjC,OAA+B;QAE/B,OAAO,IAAI,CAAC,OAAO,CAAS,WAAkB,EAAE,OAAO,CAAC,CAAC,IAAI,CACzD,CAAC,KAAK,EAAE,EAAE;YACN,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,yCAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAChD,CAAA;aACJ;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC,CACJ,CAAA;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACjB,WAAiC,EACjC,KAA4D;QAE5D,OAAO,IAAI,CAAC,SAAS,CAAS,WAAkB,EAAE,KAAK,CAAC,CAAC,IAAI,CACzD,CAAC,KAAK,EAAE,EAAE;YACN,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,yCAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAC9C,CAAA;aACJ;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC,CACJ,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAS,WAAiC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,WAAW,GACb,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAA;QAC3D,IAAI;YACA,OAAO,MAAM,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA,CAAC,oDAAoD;SAC/G;gBAAS;YACN,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;SACrD;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACX,WAAiC,EACjC,UAAe,EACf,YAAoB,EACpB,KAAsB;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,oBAAY,CAClB,UAAU,YAAY,qBAAqB,QAAQ,CAAC,UAAU,UAAU,CAC3E,CAAA;QAEL,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,IAAI,oBAAY,CAAC,UAAU,KAAK,oBAAoB,CAAC,CAAA;QAE/D,6FAA6F;QAC7F,MAAM,MAAM,GAAmC,YAAY;aACtD,KAAK,CAAC,GAAG,CAAC;aACV,WAAW,CACR,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAU,CAAA,EACzC,GAAG,EAAE,CACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAClD,KAAK;YACL,KAAK,CACZ,CAAA;QAEL,OAAO,IAAI,CAAC,kBAAkB,CAAS,WAAkB,EAAE,QAAQ,CAAC;aAC/D,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,MAAM,CAAC;aACX,KAAK,CAAC,UAAU,CAAC;aACjB,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACX,WAAiC,EACjC,UAAe,EACf,YAAoB,EACpB,KAAsB;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,oBAAY,CAClB,UAAU,YAAY,qBAAqB,QAAQ,CAAC,UAAU,UAAU,CAC3E,CAAA;QAEL,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,IAAI,oBAAY,CAAC,UAAU,KAAK,oBAAoB,CAAC,CAAA;QAE/D,6FAA6F;QAC7F,MAAM,MAAM,GAAmC,YAAY;aACtD,KAAK,CAAC,GAAG,CAAC;aACV,WAAW,CACR,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAU,CAAA,EACzC,GAAG,EAAE,CACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAClD,KAAK;YACL,KAAK,CACZ,CAAA;QAEL,OAAO,IAAI,CAAC,kBAAkB,CAAS,WAAkB,EAAE,QAAQ,CAAC;aAC/D,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,MAAM,CAAC;aACX,KAAK,CAAC,UAAU,CAAC;aACjB,OAAO,EAAE,CAAA;IAClB,CAAC;IAED;;;;;OAKG;IACH,aAAa,CACT,MAA4B;QAE5B,kEAAkE;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACrC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,CAC/C,CAAA;QACD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAA;QAEjC,+EAA+E;QAC/E,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YACnD,MAAM,aAAa,GAAG,IAAI,iCAAe,CACrC,MAAM,EACN,IAAI,EACJ,IAAI,CAAC,WAAW,CACnB,CAAA;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAoB,CAAC,CAAA;YAC5C,OAAO,aAAa,CAAA;SACvB;aAAM;YACH,MAAM,aAAa,GAAG,IAAI,uBAAU,CAChC,MAAM,EACN,IAAI,EACJ,IAAI,CAAC,WAAW,CACnB,CAAA;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACrC,OAAO,aAAa,CAAA;SACvB;IACL,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CACb,MAA4B;QAE5B,yDAAyD;QACzD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK;YAC5C,MAAM,IAAI,uCAA+B,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAErE,kEAAkE;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,CAC/C,CAAA;QACD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAA;QAEjC,8CAA8C;QAC9C,MAAM,aAAa,GAAG,IAAI,+BAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QACxE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACzC,OAAO,aAAa,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,kBAAkB,CACd,MAA4B;QAE5B,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAS,MAAM,CAAC,CAAA;IAC7D,CAAC;IAED;;;;OAIG;IACH,cAAc,CACV,UAAkC;QAElC,MAAM,qBAAqB,GACvB,UAAU,CAAC,WAAgC,CAAA;QAC/C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,yBAAyB,EAAE,GAChE,UAAU,CAAA;QACd,OAAO,MAAM,CAAC,MAAM,CAChB,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAM,EACvD;YACI,GAAG,yBAAyB;SAC/B,CACJ,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAI,gBAA+B;QAClD,MAAM,4BAA4B,GAC9B,IAAA,gCAAsB,GAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC5D,OAAO,CACH,UAAU,CAAC,MAAM;gBACjB,CAAC,OAAO,gBAAgB,KAAK,UAAU;oBACnC,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAE,gBAAwB,CAAC,WAAW,CAAC,CAC/C,CAAA;QACL,CAAC,CAAC,CAAA;QACN,IAAI,CAAC,4BAA4B;YAC7B,MAAM,IAAI,qCAA6B,CAAC,gBAAgB,CAAC,CAAA;QAE7D,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM;YACtD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,4BAA4B,CAAC,MAAM,CAAC;YAClE,CAAC,CAAC,SAAS,CAAA;QACf,MAAM,wBAAwB,GAC1B,IAAK,4BAA4B,CAAC,MAAc,CAC5C,IAAI,EACJ,cAAc,CACjB,CAAA;QAEL,4HAA4H;QAC5H,kEAAkE;QAClE,IAAI,wBAAwB,YAAY,uCAAkB,EAAE;YACxD,IAAI,CAAE,wBAAgC,CAAC,SAAS,CAAC;gBAC5C,wBAAgC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;SAC1D;aAAM;YACH,IAAI,CAAC,cAAc;gBACf,MAAM,IAAI,oDAA4C,CAClD,gBAAgB,CACnB,CACJ;YAAC,wBAAgC,CAAC,SAAS,CAAC,GAAG,IAAI,CACnD;YAAC,wBAAgC,CAAC,UAAU,CAAC,GAAG,cAAc,CAAA;SAClE;QAED,OAAO,wBAAwB,CAAA;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,qEAAiC,EAAE,CAAA;QAEpE,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;IACrC,CAAC;CACJ;AAr2CD,sCAq2CC","file":"EntityManager.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\nimport { ObjectType } from \"../common/ObjectType\"\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\"\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { RemoveOptions } from \"../repository/RemoveOptions\"\nimport { SaveOptions } from \"../repository/SaveOptions\"\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\"\nimport { MongoRepository } from \"../repository/MongoRepository\"\nimport { TreeRepository } from \"../repository/TreeRepository\"\nimport { Repository } from \"../repository/Repository\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\"\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\"\nimport {\n CustomRepositoryCannotInheritRepositoryError,\n CustomRepositoryNotFoundError,\n TreeRepositoryNotSupportedError,\n TypeORMError,\n} from \"../error\"\nimport { AbstractRepository } from \"../repository/AbstractRepository\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { IsolationLevel } from \"../driver/types/IsolationLevel\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { getMetadataArgsStorage } from \"../globals\"\nimport { UpsertOptions } from \"../repository/UpsertOptions\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\n\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nexport class EntityManager {\n readonly \"@instanceof\" = Symbol.for(\"EntityManager\")\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this entity manager.\n */\n readonly connection: DataSource\n\n /**\n * Custom query runner to be used for operations in this entity manager.\n * Used only in non-global entity manager.\n */\n readonly queryRunner?: QueryRunner\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Once created and then reused by repositories.\n */\n protected repositories: Repository<any>[] = []\n\n /**\n * Once created and then reused by repositories.\n */\n protected treeRepositories: TreeRepository<any>[] = []\n\n /**\n * Plain to object transformer used in create and merge operations.\n */\n protected plainObjectToEntityTransformer =\n new PlainObjectToNewEntityTransformer()\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource, queryRunner?: QueryRunner) {\n this.connection = connection\n if (queryRunner) {\n this.queryRunner = queryRunner\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this })\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationLevel: IsolationLevel,\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationOrRunInTransaction:\n | IsolationLevel\n | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T> {\n const isolation =\n typeof isolationOrRunInTransaction === \"string\"\n ? isolationOrRunInTransaction\n : undefined\n const runInTransaction =\n typeof isolationOrRunInTransaction === \"function\"\n ? isolationOrRunInTransaction\n : runInTransactionParam\n\n if (!runInTransaction) {\n throw new TypeORMError(\n `Transaction method requires callback in second parameter if isolation level is supplied.`,\n )\n }\n\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError()\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n try {\n await queryRunner.startTransaction(isolation)\n const result = await runInTransaction(queryRunner.manager)\n await queryRunner.commitTransaction()\n return result\n } catch (err) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n throw err\n } finally {\n if (!this.queryRunner)\n // if we used a new query runner provider then release it\n await queryRunner.release()\n }\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[]): Promise<any> {\n return this.connection.query(query, parameters, this.queryRunner)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n alias: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass?: EntityTarget<Entity> | QueryRunner,\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n if (alias) {\n return this.connection.createQueryBuilder(\n entityClass as EntityTarget<Entity>,\n alias,\n queryRunner || this.queryRunner,\n )\n } else {\n return this.connection.createQueryBuilder(\n (entityClass as QueryRunner | undefined) ||\n queryRunner ||\n this.queryRunner,\n )\n }\n }\n\n /**\n * Checks if entity has an id.\n */\n hasId(entity: any): boolean\n\n /**\n * Checks if entity of given schema name has an id.\n */\n hasId(target: Function | string, entity: any): boolean\n\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n hasId(targetOrEntity: any | Function | string, maybeEntity?: any): boolean {\n const target =\n arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity\n const metadata = this.connection.getMetadata(target)\n return metadata.hasId(entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: any): any\n\n /**\n * Gets entity mixed id.\n */\n getId(target: EntityTarget<any>, entity: any): any\n\n /**\n * Gets entity mixed id.\n */\n getId(targetOrEntity: any | EntityTarget<any>, maybeEntity?: any): any {\n const target =\n arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity\n const metadata = this.connection.getMetadata(target)\n return metadata.getEntityIdMixedMap(entity)\n }\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObject?: DeepPartial<Entity>,\n ): Entity\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObjects?: DeepPartial<Entity>[],\n ): Entity[]\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObjectOrObjects?: DeepPartial<Entity> | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n const metadata = this.connection.getMetadata(entityClass)\n\n if (!plainObjectOrObjects) return metadata.create(this.queryRunner)\n\n if (Array.isArray(plainObjectOrObjects))\n return (plainObjectOrObjects as DeepPartial<Entity>[]).map(\n (plainEntityLike) => this.create(entityClass, plainEntityLike),\n )\n\n const mergeIntoEntity = metadata.create(this.queryRunner)\n this.plainObjectToEntityTransformer.transform(\n mergeIntoEntity,\n plainObjectOrObjects,\n metadata,\n true,\n )\n return mergeIntoEntity\n }\n\n /**\n * Merges two entities into one new entity.\n */\n merge<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n mergeIntoEntity: Entity,\n ...entityLikes: DeepPartial<Entity>[]\n ): Entity {\n // todo: throw exception if entity manager is released\n const metadata = this.connection.getMetadata(entityClass)\n entityLikes.forEach((object) =>\n this.plainObjectToEntityTransformer.transform(\n mergeIntoEntity,\n object,\n metadata,\n ),\n )\n return mergeIntoEntity\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n async preload<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n entityLike: DeepPartial<Entity>,\n ): Promise<Entity | undefined> {\n const metadata = this.connection.getMetadata(entityClass)\n const plainObjectToDatabaseEntityTransformer =\n new PlainObjectToDatabaseEntityTransformer(this.connection.manager)\n const transformedEntity =\n await plainObjectToDatabaseEntityTransformer.transform(\n entityLike,\n metadata,\n )\n if (transformedEntity)\n return this.merge(\n entityClass as any,\n transformedEntity as Entity,\n entityLike,\n )\n\n return undefined\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Saves a given entity in the database.\n */\n save<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute save operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"save\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity, options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(\n targetOrEntity: EntityTarget<Entity>,\n entity: Entity,\n options?: RemoveOptions,\n ): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity[], options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(\n targetOrEntity: EntityTarget<Entity>,\n entity: Entity[],\n options?: RemoveOptions,\n ): Promise<Entity[]>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity extends ObjectLiteral>(\n targetOrEntity: (Entity | Entity[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: Entity | Entity[],\n maybeOptions?: RemoveOptions,\n ): Promise<Entity | Entity[]> {\n // normalize mixed parameters\n const target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: Entity | Entity[] = target\n ? (maybeEntityOrOptions as Entity | Entity[])\n : (targetOrEntity as Entity | Entity[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute save operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"remove\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity>(\n entities: Entity[],\n options?: SaveOptions,\n ): Promise<Entity[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute soft-remove operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"soft-remove\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Recovers all given entities.\n */\n recover<Entity>(\n entities: Entity[],\n options?: SaveOptions,\n ): Promise<Entity[]>\n\n /**\n * Recovers a given entity.\n */\n recover<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Recovers all given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Recovers a given entity.\n */\n recover<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Recovers one or many given entities.\n */\n recover<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute recover operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"recover\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n async insert<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n entity:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()\n }\n\n async upsert<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n const metadata = this.connection.getMetadata(target)\n\n let options: UpsertOptions<Entity>\n\n if (Array.isArray(conflictPathsOrOptions)) {\n options = {\n conflictPaths: conflictPathsOrOptions,\n }\n } else {\n options = conflictPathsOrOptions\n }\n\n let entities: QueryDeepPartialEntity<Entity>[]\n\n if (!Array.isArray(entityOrEntities)) {\n entities = [entityOrEntities]\n } else {\n entities = entityOrEntities\n }\n\n const conflictColumns = metadata.mapPropertyPathsToColumns(\n options.conflictPaths,\n )\n\n const overwriteColumns = metadata.columns.filter(\n (col) =>\n !conflictColumns.includes(col) &&\n entities.some(\n (entity) =>\n typeof col.getEntityValue(entity) !== \"undefined\",\n ),\n )\n\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entities)\n .orUpdate(\n [...conflictColumns, ...overwriteColumns].map(\n (col) => col.databaseName,\n ),\n conflictColumns.map((col) => col.databaseName),\n {\n skipUpdateIfNoValuesChanged:\n options.skipUpdateIfNoValuesChanged,\n },\n )\n .execute()\n }\n\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n update<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n partialEntity: QueryDeepPartialEntity<Entity>,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the update method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n delete<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<DeleteResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n softDelete<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n restore<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder(\n entityClass,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getCount()\n }\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder(entityClass, metadata.name)\n .setFindOptions({ where })\n .getCount()\n }\n\n /**\n * Finds entities that match given find options.\n */\n async find<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getMany()\n }\n\n /**\n * Finds entities that match given find options.\n */\n async findBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .setFindOptions({ where: where })\n .getMany()\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getManyAndCount()\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .setFindOptions({ where })\n .getManyAndCount()\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n async findByIds<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n ids: any[],\n ): Promise<Entity[]> {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length) return Promise.resolve([])\n\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .andWhereInIds(ids)\n .getMany()\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n async findOne<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options: FindOneOptions<Entity>,\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // prepare alias for built query\n let alias: string = metadata.name\n if (options && options.join) {\n alias = options.join.alias\n }\n\n if (!options.where) {\n throw new Error(\n `You must provide selection conditions in order to find a single row.`,\n )\n }\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, alias)\n .setFindOptions({\n ...options,\n take: 1,\n })\n .getOne()\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n async findOneBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, metadata.name)\n .setFindOptions({\n where,\n take: 1,\n })\n .getOne()\n }\n\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n async findOneById<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n id: number | string | Date | ObjectID,\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, metadata.name)\n .setFindOptions({\n take: 1,\n })\n .whereInIds(metadata.ensureEntityIdMap(id))\n .getOne()\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n async findOneOrFail<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options: FindOneOptions<Entity>,\n ): Promise<Entity> {\n return this.findOne<Entity>(entityClass as any, options).then(\n (value) => {\n if (value === null) {\n return Promise.reject(\n new EntityNotFoundError(entityClass, options),\n )\n }\n return Promise.resolve(value)\n },\n )\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n async findOneByOrFail<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.findOneBy<Entity>(entityClass as any, where).then(\n (value) => {\n if (value === null) {\n return Promise.reject(\n new EntityNotFoundError(entityClass, where),\n )\n }\n return Promise.resolve(value)\n },\n )\n }\n\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n async clear<Entity>(entityClass: EntityTarget<Entity>): Promise<void> {\n const metadata = this.connection.getMetadata(entityClass)\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n try {\n return await queryRunner.clearTable(metadata.tablePath) // await is needed here because we are using finally\n } finally {\n if (!this.queryRunner) await queryRunner.release()\n }\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n async increment<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n const metadata = this.connection.getMetadata(entityClass)\n const column = metadata.findColumnWithPropertyPath(propertyPath)\n if (!column)\n throw new TypeORMError(\n `Column ${propertyPath} was not found in ${metadata.targetName} entity.`,\n )\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`)\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value } as any),\n () =>\n this.connection.driver.escape(column.databaseName) +\n \" + \" +\n value,\n )\n\n return this.createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n async decrement<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n const metadata = this.connection.getMetadata(entityClass)\n const column = metadata.findColumnWithPropertyPath(propertyPath)\n if (!column)\n throw new TypeORMError(\n `Column ${propertyPath} was not found in ${metadata.targetName} entity.`,\n )\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`)\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value } as any),\n () =>\n this.connection.driver.escape(column.databaseName) +\n \" - \" +\n value,\n )\n\n return this.createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()\n }\n\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): Repository<Entity> {\n // find already created repository instance and return it if found\n const repository = this.repositories.find(\n (repository) => repository.target === target,\n )\n if (repository) return repository\n\n // if repository was not found then create it, store its instance and return it\n if (this.connection.driver.options.type === \"mongodb\") {\n const newRepository = new MongoRepository(\n target,\n this,\n this.queryRunner,\n )\n this.repositories.push(newRepository as any)\n return newRepository\n } else {\n const newRepository = new Repository<any>(\n target,\n this,\n this.queryRunner,\n )\n this.repositories.push(newRepository)\n return newRepository\n }\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getTreeRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): TreeRepository<Entity> {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver)\n\n // find already created repository instance and return it if found\n const repository = this.treeRepositories.find(\n (repository) => repository.target === target,\n )\n if (repository) return repository\n\n // check if repository is real tree repository\n const newRepository = new TreeRepository(target, this, this.queryRunner)\n this.treeRepositories.push(newRepository)\n return newRepository\n }\n\n /**\n * Gets mongodb repository for the given entity class.\n */\n getMongoRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): MongoRepository<Entity> {\n return this.connection.getMongoRepository<Entity>(target)\n }\n\n /**\n * Creates a new repository instance out of a given Repository and\n * sets current EntityManager instance to it. Used to work with custom repositories\n * in transactions.\n */\n withRepository<Entity extends ObjectLiteral, R extends Repository<any>>(\n repository: R & Repository<Entity>,\n ): R {\n const repositoryConstructor =\n repository.constructor as typeof Repository\n const { target, manager, queryRunner, ...otherRepositoryProperties } =\n repository\n return Object.assign(\n new repositoryConstructor(repository.target, this) as R,\n {\n ...otherRepositoryProperties,\n },\n )\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n *\n * @deprecated use Repository.extend to create custom repositories\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n const entityRepositoryMetadataArgs =\n getMetadataArgsStorage().entityRepositories.find((repository) => {\n return (\n repository.target ===\n (typeof customRepository === \"function\"\n ? customRepository\n : (customRepository as any).constructor)\n )\n })\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository)\n\n const entityMetadata = entityRepositoryMetadataArgs.entity\n ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity)\n : undefined\n const entityRepositoryInstance =\n new (entityRepositoryMetadataArgs.target as any)(\n this,\n entityMetadata,\n )\n\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!(entityRepositoryInstance as any)[\"manager\"])\n (entityRepositoryInstance as any)[\"manager\"] = this\n } else {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(\n customRepository,\n )\n ;(entityRepositoryInstance as any)[\"manager\"] = this\n ;(entityRepositoryInstance as any)[\"metadata\"] = entityMetadata\n }\n\n return entityRepositoryInstance\n }\n\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n async release(): Promise<void> {\n if (!this.queryRunner) throw new NoNeedToReleaseEntityManagerError()\n\n return this.queryRunner.release()\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/entity-manager/EntityManager.ts"],"names":[],"mappings":"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","file":"EntityManager.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\nimport { ObjectType } from \"../common/ObjectType\"\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\"\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { RemoveOptions } from \"../repository/RemoveOptions\"\nimport { SaveOptions } from \"../repository/SaveOptions\"\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\"\nimport { MongoRepository } from \"../repository/MongoRepository\"\nimport { TreeRepository } from \"../repository/TreeRepository\"\nimport { Repository } from \"../repository/Repository\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\"\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\"\nimport {\n CustomRepositoryCannotInheritRepositoryError,\n CustomRepositoryNotFoundError,\n TreeRepositoryNotSupportedError,\n TypeORMError,\n} from \"../error\"\nimport { AbstractRepository } from \"../repository/AbstractRepository\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { IsolationLevel } from \"../driver/types/IsolationLevel\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { getMetadataArgsStorage } from \"../globals\"\nimport { UpsertOptions } from \"../repository/UpsertOptions\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\n\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nexport class EntityManager {\n readonly \"@instanceof\" = Symbol.for(\"EntityManager\")\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this entity manager.\n */\n readonly connection: DataSource\n\n /**\n * Custom query runner to be used for operations in this entity manager.\n * Used only in non-global entity manager.\n */\n readonly queryRunner?: QueryRunner\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Once created and then reused by repositories.\n */\n protected repositories: Repository<any>[] = []\n\n /**\n * Once created and then reused by repositories.\n */\n protected treeRepositories: TreeRepository<any>[] = []\n\n /**\n * Plain to object transformer used in create and merge operations.\n */\n protected plainObjectToEntityTransformer =\n new PlainObjectToNewEntityTransformer()\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource, queryRunner?: QueryRunner) {\n this.connection = connection\n if (queryRunner) {\n this.queryRunner = queryRunner\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this })\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationLevel: IsolationLevel,\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationOrRunInTransaction:\n | IsolationLevel\n | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T> {\n const isolation =\n typeof isolationOrRunInTransaction === \"string\"\n ? isolationOrRunInTransaction\n : undefined\n const runInTransaction =\n typeof isolationOrRunInTransaction === \"function\"\n ? isolationOrRunInTransaction\n : runInTransactionParam\n\n if (!runInTransaction) {\n throw new TypeORMError(\n `Transaction method requires callback in second parameter if isolation level is supplied.`,\n )\n }\n\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError()\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n try {\n await queryRunner.startTransaction(isolation)\n const result = await runInTransaction(queryRunner.manager)\n await queryRunner.commitTransaction()\n return result\n } catch (err) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n throw err\n } finally {\n if (!this.queryRunner)\n // if we used a new query runner provider then release it\n await queryRunner.release()\n }\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[]): Promise<any> {\n return this.connection.query(query, parameters, this.queryRunner)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n alias: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass?: EntityTarget<Entity> | QueryRunner,\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n if (alias) {\n return this.connection.createQueryBuilder(\n entityClass as EntityTarget<Entity>,\n alias,\n queryRunner || this.queryRunner,\n )\n } else {\n return this.connection.createQueryBuilder(\n (entityClass as QueryRunner | undefined) ||\n queryRunner ||\n this.queryRunner,\n )\n }\n }\n\n /**\n * Checks if entity has an id.\n */\n hasId(entity: any): boolean\n\n /**\n * Checks if entity of given schema name has an id.\n */\n hasId(target: Function | string, entity: any): boolean\n\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n hasId(targetOrEntity: any | Function | string, maybeEntity?: any): boolean {\n const target =\n arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity\n const metadata = this.connection.getMetadata(target)\n return metadata.hasId(entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: any): any\n\n /**\n * Gets entity mixed id.\n */\n getId(target: EntityTarget<any>, entity: any): any\n\n /**\n * Gets entity mixed id.\n */\n getId(targetOrEntity: any | EntityTarget<any>, maybeEntity?: any): any {\n const target =\n arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity\n const metadata = this.connection.getMetadata(target)\n return metadata.getEntityIdMixedMap(entity)\n }\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObject?: DeepPartial<Entity>,\n ): Entity\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObjects?: DeepPartial<Entity>[],\n ): Entity[]\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create<Entity>(\n entityClass: EntityTarget<Entity>,\n plainObjectOrObjects?: DeepPartial<Entity> | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n const metadata = this.connection.getMetadata(entityClass)\n\n if (!plainObjectOrObjects) return metadata.create(this.queryRunner)\n\n if (Array.isArray(plainObjectOrObjects))\n return (plainObjectOrObjects as DeepPartial<Entity>[]).map(\n (plainEntityLike) => this.create(entityClass, plainEntityLike),\n )\n\n const mergeIntoEntity = metadata.create(this.queryRunner)\n this.plainObjectToEntityTransformer.transform(\n mergeIntoEntity,\n plainObjectOrObjects,\n metadata,\n true,\n )\n return mergeIntoEntity\n }\n\n /**\n * Merges two entities into one new entity.\n */\n merge<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n mergeIntoEntity: Entity,\n ...entityLikes: DeepPartial<Entity>[]\n ): Entity {\n // todo: throw exception if entity manager is released\n const metadata = this.connection.getMetadata(entityClass)\n entityLikes.forEach((object) =>\n this.plainObjectToEntityTransformer.transform(\n mergeIntoEntity,\n object,\n metadata,\n ),\n )\n return mergeIntoEntity\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n async preload<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n entityLike: DeepPartial<Entity>,\n ): Promise<Entity | undefined> {\n const metadata = this.connection.getMetadata(entityClass)\n const plainObjectToDatabaseEntityTransformer =\n new PlainObjectToDatabaseEntityTransformer(this.connection.manager)\n const transformedEntity =\n await plainObjectToDatabaseEntityTransformer.transform(\n entityLike,\n metadata,\n )\n if (transformedEntity)\n return this.merge(\n entityClass as any,\n transformedEntity as Entity,\n entityLike,\n )\n\n return undefined\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Saves a given entity in the database.\n */\n save<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute save operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"save\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity, options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(\n targetOrEntity: EntityTarget<Entity>,\n entity: Entity,\n options?: RemoveOptions,\n ): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity[], options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(\n targetOrEntity: EntityTarget<Entity>,\n entity: Entity[],\n options?: RemoveOptions,\n ): Promise<Entity[]>\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity extends ObjectLiteral>(\n targetOrEntity: (Entity | Entity[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: Entity | Entity[],\n maybeOptions?: RemoveOptions,\n ): Promise<Entity | Entity[]> {\n // normalize mixed parameters\n const target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: Entity | Entity[] = target\n ? (maybeEntityOrOptions as Entity | Entity[])\n : (targetOrEntity as Entity | Entity[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute save operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"remove\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity>(\n entities: Entity[],\n options?: SaveOptions,\n ): Promise<Entity[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute soft-remove operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"soft-remove\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Recovers all given entities.\n */\n recover<Entity>(\n entities: Entity[],\n options?: SaveOptions,\n ): Promise<Entity[]>\n\n /**\n * Recovers a given entity.\n */\n recover<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>\n\n /**\n * Recovers all given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Recovers a given entity.\n */\n recover<Entity, T extends DeepPartial<Entity>>(\n targetOrEntity: EntityTarget<Entity>,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Recovers one or many given entities.\n */\n recover<Entity extends ObjectLiteral, T extends DeepPartial<Entity>>(\n targetOrEntity: (T | T[]) | EntityTarget<Entity>,\n maybeEntityOrOptions?: T | T[],\n maybeOptions?: SaveOptions,\n ): Promise<T | T[]> {\n // normalize mixed parameters\n let target =\n arguments.length > 1 &&\n (typeof targetOrEntity === \"function\" ||\n InstanceChecker.isEntitySchema(targetOrEntity) ||\n typeof targetOrEntity === \"string\")\n ? (targetOrEntity as Function | string)\n : undefined\n const entity: T | T[] = target\n ? (maybeEntityOrOptions as T | T[])\n : (targetOrEntity as T | T[])\n const options = target\n ? maybeOptions\n : (maybeEntityOrOptions as SaveOptions)\n\n if (InstanceChecker.isEntitySchema(target)) target = target.options.name\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity)\n\n // execute recover operation\n return new EntityPersistExecutor(\n this.connection,\n this.queryRunner,\n \"recover\",\n target,\n entity,\n options,\n )\n .execute()\n .then(() => entity)\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n async insert<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n entity:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()\n }\n\n async upsert<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n const metadata = this.connection.getMetadata(target)\n\n let options: UpsertOptions<Entity>\n\n if (Array.isArray(conflictPathsOrOptions)) {\n options = {\n conflictPaths: conflictPathsOrOptions,\n }\n } else {\n options = conflictPathsOrOptions\n }\n\n let entities: QueryDeepPartialEntity<Entity>[]\n\n if (!Array.isArray(entityOrEntities)) {\n entities = [entityOrEntities]\n } else {\n entities = entityOrEntities\n }\n\n const conflictColumns = metadata.mapPropertyPathsToColumns(\n Array.isArray(options.conflictPaths)\n ? options.conflictPaths\n : Object.keys(options.conflictPaths),\n )\n\n const overwriteColumns = metadata.columns.filter(\n (col) =>\n !conflictColumns.includes(col) &&\n entities.some(\n (entity) =>\n typeof col.getEntityValue(entity) !== \"undefined\",\n ),\n )\n\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entities)\n .orUpdate(\n [...conflictColumns, ...overwriteColumns].map(\n (col) => col.databaseName,\n ),\n conflictColumns.map((col) => col.databaseName),\n {\n skipUpdateIfNoValuesChanged:\n options.skipUpdateIfNoValuesChanged,\n },\n )\n .execute()\n }\n\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n update<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n partialEntity: QueryDeepPartialEntity<Entity>,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the update method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n delete<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<DeleteResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n softDelete<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n restore<Entity extends ObjectLiteral>(\n targetOrEntity: EntityTarget<Entity>,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | any,\n ): Promise<UpdateResult> {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (\n criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)\n ) {\n return Promise.reject(\n new TypeORMError(\n `Empty criteria(s) are not allowed for the delete method.`,\n ),\n )\n }\n\n if (\n typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)\n ) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute()\n } else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute()\n }\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder(\n entityClass,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getCount()\n }\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder(entityClass, metadata.name)\n .setFindOptions({ where })\n .getCount()\n }\n\n /**\n * Finds entities that match given find options.\n */\n async find<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getMany()\n }\n\n /**\n * Finds entities that match given find options.\n */\n async findBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .setFindOptions({ where: where })\n .getMany()\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options?: FindManyOptions<Entity>,\n ): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n FindOptionsUtils.extractFindManyOptionsAlias(options) ||\n metadata.name,\n )\n .setFindOptions(options || {})\n .getManyAndCount()\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .setFindOptions({ where })\n .getManyAndCount()\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n async findByIds<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n ids: any[],\n ): Promise<Entity[]> {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length) return Promise.resolve([])\n\n const metadata = this.connection.getMetadata(entityClass)\n return this.createQueryBuilder<Entity>(\n entityClass as any,\n metadata.name,\n )\n .andWhereInIds(ids)\n .getMany()\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n async findOne<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options: FindOneOptions<Entity>,\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // prepare alias for built query\n let alias: string = metadata.name\n if (options && options.join) {\n alias = options.join.alias\n }\n\n if (!options.where) {\n throw new Error(\n `You must provide selection conditions in order to find a single row.`,\n )\n }\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, alias)\n .setFindOptions({\n ...options,\n take: 1,\n })\n .getOne()\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n async findOneBy<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, metadata.name)\n .setFindOptions({\n where,\n take: 1,\n })\n .getOne()\n }\n\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n async findOneById<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n id: number | string | Date | ObjectID,\n ): Promise<Entity | null> {\n const metadata = this.connection.getMetadata(entityClass)\n\n // create query builder and apply find options\n return this.createQueryBuilder<Entity>(entityClass, metadata.name)\n .setFindOptions({\n take: 1,\n })\n .whereInIds(metadata.ensureEntityIdMap(id))\n .getOne()\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n async findOneOrFail<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n options: FindOneOptions<Entity>,\n ): Promise<Entity> {\n return this.findOne<Entity>(entityClass as any, options).then(\n (value) => {\n if (value === null) {\n return Promise.reject(\n new EntityNotFoundError(entityClass, options),\n )\n }\n return Promise.resolve(value)\n },\n )\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n async findOneByOrFail<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.findOneBy<Entity>(entityClass as any, where).then(\n (value) => {\n if (value === null) {\n return Promise.reject(\n new EntityNotFoundError(entityClass, where),\n )\n }\n return Promise.resolve(value)\n },\n )\n }\n\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n async clear<Entity>(entityClass: EntityTarget<Entity>): Promise<void> {\n const metadata = this.connection.getMetadata(entityClass)\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n try {\n return await queryRunner.clearTable(metadata.tablePath) // await is needed here because we are using finally\n } finally {\n if (!this.queryRunner) await queryRunner.release()\n }\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n async increment<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n const metadata = this.connection.getMetadata(entityClass)\n const column = metadata.findColumnWithPropertyPath(propertyPath)\n if (!column)\n throw new TypeORMError(\n `Column ${propertyPath} was not found in ${metadata.targetName} entity.`,\n )\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`)\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value } as any),\n () =>\n this.connection.driver.escape(column.databaseName) +\n \" + \" +\n value,\n )\n\n return this.createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n async decrement<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n const metadata = this.connection.getMetadata(entityClass)\n const column = metadata.findColumnWithPropertyPath(propertyPath)\n if (!column)\n throw new TypeORMError(\n `Column ${propertyPath} was not found in ${metadata.targetName} entity.`,\n )\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`)\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value } as any),\n () =>\n this.connection.driver.escape(column.databaseName) +\n \" - \" +\n value,\n )\n\n return this.createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()\n }\n\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): Repository<Entity> {\n // find already created repository instance and return it if found\n const repository = this.repositories.find(\n (repository) => repository.target === target,\n )\n if (repository) return repository\n\n // if repository was not found then create it, store its instance and return it\n if (this.connection.driver.options.type === \"mongodb\") {\n const newRepository = new MongoRepository(\n target,\n this,\n this.queryRunner,\n )\n this.repositories.push(newRepository as any)\n return newRepository\n } else {\n const newRepository = new Repository<any>(\n target,\n this,\n this.queryRunner,\n )\n this.repositories.push(newRepository)\n return newRepository\n }\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getTreeRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): TreeRepository<Entity> {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver)\n\n // find already created repository instance and return it if found\n const repository = this.treeRepositories.find(\n (repository) => repository.target === target,\n )\n if (repository) return repository\n\n // check if repository is real tree repository\n const newRepository = new TreeRepository(target, this, this.queryRunner)\n this.treeRepositories.push(newRepository)\n return newRepository\n }\n\n /**\n * Gets mongodb repository for the given entity class.\n */\n getMongoRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): MongoRepository<Entity> {\n return this.connection.getMongoRepository<Entity>(target)\n }\n\n /**\n * Creates a new repository instance out of a given Repository and\n * sets current EntityManager instance to it. Used to work with custom repositories\n * in transactions.\n */\n withRepository<Entity extends ObjectLiteral, R extends Repository<any>>(\n repository: R & Repository<Entity>,\n ): R {\n const repositoryConstructor =\n repository.constructor as typeof Repository\n const { target, manager, queryRunner, ...otherRepositoryProperties } =\n repository\n return Object.assign(\n new repositoryConstructor(repository.target, this) as R,\n {\n ...otherRepositoryProperties,\n },\n )\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n *\n * @deprecated use Repository.extend to create custom repositories\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n const entityRepositoryMetadataArgs =\n getMetadataArgsStorage().entityRepositories.find((repository) => {\n return (\n repository.target ===\n (typeof customRepository === \"function\"\n ? customRepository\n : (customRepository as any).constructor)\n )\n })\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository)\n\n const entityMetadata = entityRepositoryMetadataArgs.entity\n ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity)\n : undefined\n const entityRepositoryInstance =\n new (entityRepositoryMetadataArgs.target as any)(\n this,\n entityMetadata,\n )\n\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!(entityRepositoryInstance as any)[\"manager\"])\n (entityRepositoryInstance as any)[\"manager\"] = this\n } else {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(\n customRepository,\n )\n ;(entityRepositoryInstance as any)[\"manager\"] = this\n ;(entityRepositoryInstance as any)[\"metadata\"] = entityMetadata\n }\n\n return entityRepositoryInstance\n }\n\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n async release(): Promise<void> {\n if (!this.queryRunner) throw new NoNeedToReleaseEntityManagerError()\n\n return this.queryRunner.release()\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -106,7 +106,7 @@ class MigrationExecutor {
|
|
|
106
106
|
for (const migration of allMigrations) {
|
|
107
107
|
const executedMigration = executedMigrations.find((executedMigration) => executedMigration.name === migration.name);
|
|
108
108
|
if (executedMigration) {
|
|
109
|
-
this.connection.logger.logSchemaBuild(`[X] ${migration.name}`);
|
|
109
|
+
this.connection.logger.logSchemaBuild(`[X] ${executedMigration.id} ${migration.name}`);
|
|
110
110
|
}
|
|
111
111
|
else {
|
|
112
112
|
hasUnappliedMigrations = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import { Table } from \"../schema-builder/table/Table\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { Migration } from \"./Migration\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\"\nimport { TypeORMError } from \"../error\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\"\n\n /**\n * Option to fake-run or fake-revert a migration, adding to the\n * executed migrations table, but not actually running it. This feature is\n * useful for when migrations are added after the fact or for\n * interoperability between applications which are desired to each keep\n * a consistent migration history.\n */\n fake: boolean\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string\n private readonly migrationsSchema?: string\n private readonly migrationsTable: string\n private readonly migrationsTableName: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n protected queryRunner?: QueryRunner,\n ) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n this.migrationsDatabase = database\n this.migrationsSchema = schema\n this.migrationsTableName =\n connection.options.migrationsTableName || \"migrations\"\n this.migrationsTable = this.connection.driver.buildTableName(\n this.migrationsTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n await queryRunner.beforeMigration()\n await (migration.instance as any).up(queryRunner)\n await queryRunner.afterMigration()\n await this.insertExecutedMigration(queryRunner, migration)\n\n return migration\n })\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations())\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n return await this.loadExecutedMigrations(queryRunner)\n })\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations()\n const executedMigrations = await this.getExecutedMigrations()\n\n return allMigrations.filter(\n (migration) =>\n !executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n ),\n )\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner((q) =>\n this.insertExecutedMigration(q, migration),\n )\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner((q) =>\n this.deleteExecutedMigration(q, migration),\n )\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n )\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(`[X] ${migration.name}`)\n } else {\n hasUnappliedMigrations = true\n this.connection.logger.logSchemaBuild(`[ ] ${migration.name}`)\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release()\n }\n\n return hasUnappliedMigrations\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n // create migrations table if it's not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create the typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration =\n this.getLatestTimestampMigration(executedMigrations)\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n // variable to store all migrations we did successfully\n const successMigrations: Migration[] = []\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter((migration) => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n )\n if (executedMigration) return false\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true\n })\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`)\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n return []\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(\n `${executedMigrations.length} migrations are already loaded in the database.`,\n )\n this.connection.logger.logSchemaBuild(\n `${allMigrations.length} migrations were found in the source code.`,\n )\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(\n `${\n lastTimeExecutedMigration.name\n } is the last executed migration. It was executed on ${new Date(\n lastTimeExecutedMigration.timestamp,\n ).toString()}.`,\n )\n this.connection.logger.logSchemaBuild(\n `${pendingMigrations.length} migrations are new migrations must be executed.`,\n )\n\n // start transaction if its not started yet\n let transactionStartedByUs = false\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.fake) {\n // directly insert migration record into the database if it is fake\n await this.insertExecutedMigration(queryRunner, migration)\n\n // nothing else needs to be done, continue to next migration\n continue\n }\n\n if (\n this.transaction === \"each\" &&\n !queryRunner.isTransactionActive\n ) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n await migration\n .instance!.up(queryRunner)\n .catch((error) => {\n // informative log about migration failure\n this.connection.logger.logMigration(\n `Migration \"${migration.name}\" failed, error: ${error?.message}`,\n )\n throw error\n })\n .then(async () => {\n // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(\n queryRunner,\n migration,\n )\n // commit transaction if we started it\n if (\n this.transaction === \"each\" &&\n transactionStartedByUs\n )\n await queryRunner.commitTransaction()\n })\n .then(() => {\n // informative log about migration success\n successMigrations.push(migration)\n this.connection.logger.logSchemaBuild(\n `Migration ${migration.name} has been ${\n this.fake ? \"(fake)\" : \"\"\n } executed successfully.`,\n )\n })\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction()\n } catch (err) {\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n }\n\n throw err\n } finally {\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n }\n return successMigrations\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n // create migrations table if it's not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration =\n this.getLatestExecutedMigration(executedMigrations)\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\n `No migrations was found in the database. Nothing to revert!`,\n )\n return\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(\n (migration) => migration.name === lastTimeExecutedMigration!.name,\n )\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(\n `No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`,\n )\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(\n `${executedMigrations.length} migrations are already loaded in the database.`,\n )\n this.connection.logger.logSchemaBuild(\n `${\n lastTimeExecutedMigration.name\n } is the last executed migration. It was executed on ${new Date(\n lastTimeExecutedMigration.timestamp,\n ).toString()}.`,\n )\n this.connection.logger.logSchemaBuild(`Now reverting it...`)\n\n // start transaction if its not started yet\n let transactionStartedByUs = false\n if (this.transaction !== \"none\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n try {\n if (!this.fake) {\n await queryRunner.beforeMigration()\n await migrationToRevert.instance!.down(queryRunner)\n await queryRunner.afterMigration()\n }\n\n await this.deleteExecutedMigration(queryRunner, migrationToRevert)\n this.connection.logger.logSchemaBuild(\n `Migration ${migrationToRevert.name} has been ${\n this.fake ? \"(fake)\" : \"\"\n } reverted successfully.`,\n )\n\n // commit transaction if we started it\n if (transactionStartedByUs) await queryRunner.commitTransaction()\n } catch (err) {\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n }\n\n throw err\n } finally {\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(\n queryRunner: QueryRunner,\n ): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver.options.type === \"mongodb\") {\n return\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable) // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(\n new Table({\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationId,\n }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false,\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationName,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(\n queryRunner: QueryRunner,\n ): Promise<Migration[]> {\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({ _id: -1 })\n .toArray()\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()\n return migrationsRaw.map((migrationRaw) => {\n return new Migration(\n parseInt(migrationRaw[\"id\"]),\n parseInt(migrationRaw[\"timestamp\"]),\n migrationRaw[\"name\"],\n )\n })\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map((migration) => {\n const migrationClassName =\n migration.name || (migration.constructor as any).name\n const migrationTimestamp = parseInt(\n migrationClassName.substr(-13),\n 10,\n )\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(\n `${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`,\n )\n }\n\n return new Migration(\n undefined,\n migrationTimestamp,\n migrationClassName,\n migration,\n )\n })\n\n this.checkForDuplicateMigrations(migrations)\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp)\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map((migration) => migration.name)\n const duplicates = Array.from(\n new Set(\n migrationNames.filter(\n (migrationName, index) =>\n migrationNames.indexOf(migrationName) < index,\n ),\n ),\n )\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`)\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(\n migrations: Migration[],\n ): Migration | undefined {\n const sortedMigrations = migrations\n .map((migration) => migration)\n .sort((a, b) => (a.timestamp - b.timestamp) * -1)\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(\n sortedMigrations: Migration[],\n ): Migration | undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(\n queryRunner: QueryRunner,\n migration: Migration,\n ): Promise<void> {\n const values: ObjectLiteral = {}\n if (this.connection.driver.options.type === \"mssql\") {\n values[\"timestamp\"] = new MssqlParameter(\n migration.timestamp,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }) as any,\n )\n values[\"name\"] = new MssqlParameter(\n migration.name,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes.migrationName,\n }) as any,\n )\n } else {\n values[\"timestamp\"] = migration.timestamp\n values[\"name\"] = migration.name\n }\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .insertOne(values)\n } else {\n const qb = queryRunner.manager.createQueryBuilder()\n await qb\n .insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(\n queryRunner: QueryRunner,\n migration: Migration,\n ): Promise<void> {\n const conditions: ObjectLiteral = {}\n if (this.connection.driver.options.type === \"mssql\") {\n conditions[\"timestamp\"] = new MssqlParameter(\n migration.timestamp,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }) as any,\n )\n conditions[\"name\"] = new MssqlParameter(\n migration.name,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes.migrationName,\n }) as any,\n )\n } else {\n conditions[\"timestamp\"] = migration.timestamp\n conditions[\"name\"] = migration.name\n }\n\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .deleteOne(conditions)\n } else {\n const qb = queryRunner.manager.createQueryBuilder()\n await qb\n .delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute()\n }\n }\n\n protected async withQueryRunner<T extends any>(\n callback: (queryRunner: QueryRunner) => T | Promise<T>,\n ) {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n try {\n return callback(queryRunner)\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release()\n }\n }\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import { Table } from \"../schema-builder/table/Table\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { Migration } from \"./Migration\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\"\nimport { TypeORMError } from \"../error\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\"\n\n /**\n * Option to fake-run or fake-revert a migration, adding to the\n * executed migrations table, but not actually running it. This feature is\n * useful for when migrations are added after the fact or for\n * interoperability between applications which are desired to each keep\n * a consistent migration history.\n */\n fake: boolean\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string\n private readonly migrationsSchema?: string\n private readonly migrationsTable: string\n private readonly migrationsTableName: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n protected queryRunner?: QueryRunner,\n ) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n this.migrationsDatabase = database\n this.migrationsSchema = schema\n this.migrationsTableName =\n connection.options.migrationsTableName || \"migrations\"\n this.migrationsTable = this.connection.driver.buildTableName(\n this.migrationsTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n await queryRunner.beforeMigration()\n await (migration.instance as any).up(queryRunner)\n await queryRunner.afterMigration()\n await this.insertExecutedMigration(queryRunner, migration)\n\n return migration\n })\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations())\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n return await this.loadExecutedMigrations(queryRunner)\n })\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations()\n const executedMigrations = await this.getExecutedMigrations()\n\n return allMigrations.filter(\n (migration) =>\n !executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n ),\n )\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner((q) =>\n this.insertExecutedMigration(q, migration),\n )\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner((q) =>\n this.deleteExecutedMigration(q, migration),\n )\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n )\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(\n `[X] ${executedMigration.id} ${migration.name}`,\n )\n } else {\n hasUnappliedMigrations = true\n this.connection.logger.logSchemaBuild(`[ ] ${migration.name}`)\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release()\n }\n\n return hasUnappliedMigrations\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n // create migrations table if it's not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create the typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration =\n this.getLatestTimestampMigration(executedMigrations)\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n // variable to store all migrations we did successfully\n const successMigrations: Migration[] = []\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter((migration) => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(\n (executedMigration) =>\n executedMigration.name === migration.name,\n )\n if (executedMigration) return false\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true\n })\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`)\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n return []\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(\n `${executedMigrations.length} migrations are already loaded in the database.`,\n )\n this.connection.logger.logSchemaBuild(\n `${allMigrations.length} migrations were found in the source code.`,\n )\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(\n `${\n lastTimeExecutedMigration.name\n } is the last executed migration. It was executed on ${new Date(\n lastTimeExecutedMigration.timestamp,\n ).toString()}.`,\n )\n this.connection.logger.logSchemaBuild(\n `${pendingMigrations.length} migrations are new migrations must be executed.`,\n )\n\n // start transaction if its not started yet\n let transactionStartedByUs = false\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.fake) {\n // directly insert migration record into the database if it is fake\n await this.insertExecutedMigration(queryRunner, migration)\n\n // nothing else needs to be done, continue to next migration\n continue\n }\n\n if (\n this.transaction === \"each\" &&\n !queryRunner.isTransactionActive\n ) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n await migration\n .instance!.up(queryRunner)\n .catch((error) => {\n // informative log about migration failure\n this.connection.logger.logMigration(\n `Migration \"${migration.name}\" failed, error: ${error?.message}`,\n )\n throw error\n })\n .then(async () => {\n // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(\n queryRunner,\n migration,\n )\n // commit transaction if we started it\n if (\n this.transaction === \"each\" &&\n transactionStartedByUs\n )\n await queryRunner.commitTransaction()\n })\n .then(() => {\n // informative log about migration success\n successMigrations.push(migration)\n this.connection.logger.logSchemaBuild(\n `Migration ${migration.name} has been ${\n this.fake ? \"(fake)\" : \"\"\n } executed successfully.`,\n )\n })\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction()\n } catch (err) {\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n }\n\n throw err\n } finally {\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n }\n return successMigrations\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n // create migrations table if it's not created yet\n await this.createMigrationsTableIfNotExist(queryRunner)\n\n // create typeorm_metadata table if it's not created yet\n const schemaBuilder = this.connection.driver.createSchemaBuilder()\n if (InstanceChecker.isRdbmsSchemaBuilder(schemaBuilder)) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner)\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(\n queryRunner,\n )\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration =\n this.getLatestExecutedMigration(executedMigrations)\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\n `No migrations was found in the database. Nothing to revert!`,\n )\n return\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations()\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(\n (migration) => migration.name === lastTimeExecutedMigration!.name,\n )\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(\n `No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`,\n )\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(\n `${executedMigrations.length} migrations are already loaded in the database.`,\n )\n this.connection.logger.logSchemaBuild(\n `${\n lastTimeExecutedMigration.name\n } is the last executed migration. It was executed on ${new Date(\n lastTimeExecutedMigration.timestamp,\n ).toString()}.`,\n )\n this.connection.logger.logSchemaBuild(`Now reverting it...`)\n\n // start transaction if its not started yet\n let transactionStartedByUs = false\n if (this.transaction !== \"none\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction()\n transactionStartedByUs = true\n }\n\n try {\n if (!this.fake) {\n await queryRunner.beforeMigration()\n await migrationToRevert.instance!.down(queryRunner)\n await queryRunner.afterMigration()\n }\n\n await this.deleteExecutedMigration(queryRunner, migrationToRevert)\n this.connection.logger.logSchemaBuild(\n `Migration ${migrationToRevert.name} has been ${\n this.fake ? \"(fake)\" : \"\"\n } reverted successfully.`,\n )\n\n // commit transaction if we started it\n if (transactionStartedByUs) await queryRunner.commitTransaction()\n } catch (err) {\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction()\n } catch (rollbackError) {}\n }\n\n throw err\n } finally {\n // if query runner was created by us then release it\n if (!this.queryRunner) await queryRunner.release()\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(\n queryRunner: QueryRunner,\n ): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver.options.type === \"mongodb\") {\n return\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable) // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(\n new Table({\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationId,\n }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false,\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationName,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(\n queryRunner: QueryRunner,\n ): Promise<Migration[]> {\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({ _id: -1 })\n .toArray()\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()\n return migrationsRaw.map((migrationRaw) => {\n return new Migration(\n parseInt(migrationRaw[\"id\"]),\n parseInt(migrationRaw[\"timestamp\"]),\n migrationRaw[\"name\"],\n )\n })\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map((migration) => {\n const migrationClassName =\n migration.name || (migration.constructor as any).name\n const migrationTimestamp = parseInt(\n migrationClassName.substr(-13),\n 10,\n )\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(\n `${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`,\n )\n }\n\n return new Migration(\n undefined,\n migrationTimestamp,\n migrationClassName,\n migration,\n )\n })\n\n this.checkForDuplicateMigrations(migrations)\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp)\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map((migration) => migration.name)\n const duplicates = Array.from(\n new Set(\n migrationNames.filter(\n (migrationName, index) =>\n migrationNames.indexOf(migrationName) < index,\n ),\n ),\n )\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`)\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(\n migrations: Migration[],\n ): Migration | undefined {\n const sortedMigrations = migrations\n .map((migration) => migration)\n .sort((a, b) => (a.timestamp - b.timestamp) * -1)\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(\n sortedMigrations: Migration[],\n ): Migration | undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(\n queryRunner: QueryRunner,\n migration: Migration,\n ): Promise<void> {\n const values: ObjectLiteral = {}\n if (this.connection.driver.options.type === \"mssql\") {\n values[\"timestamp\"] = new MssqlParameter(\n migration.timestamp,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }) as any,\n )\n values[\"name\"] = new MssqlParameter(\n migration.name,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes.migrationName,\n }) as any,\n )\n } else {\n values[\"timestamp\"] = migration.timestamp\n values[\"name\"] = migration.name\n }\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .insertOne(values)\n } else {\n const qb = queryRunner.manager.createQueryBuilder()\n await qb\n .insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(\n queryRunner: QueryRunner,\n migration: Migration,\n ): Promise<void> {\n const conditions: ObjectLiteral = {}\n if (this.connection.driver.options.type === \"mssql\") {\n conditions[\"timestamp\"] = new MssqlParameter(\n migration.timestamp,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes\n .migrationTimestamp,\n }) as any,\n )\n conditions[\"name\"] = new MssqlParameter(\n migration.name,\n this.connection.driver.normalizeType({\n type: this.connection.driver.mappedDataTypes.migrationName,\n }) as any,\n )\n } else {\n conditions[\"timestamp\"] = migration.timestamp\n conditions[\"name\"] = migration.name\n }\n\n if (this.connection.driver.options.type === \"mongodb\") {\n const mongoRunner = queryRunner as MongoQueryRunner\n await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .deleteOne(conditions)\n } else {\n const qb = queryRunner.manager.createQueryBuilder()\n await qb\n .delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute()\n }\n }\n\n protected async withQueryRunner<T extends any>(\n callback: (queryRunner: QueryRunner) => T | Promise<T>,\n ) {\n const queryRunner =\n this.queryRunner || this.connection.createQueryRunner()\n\n try {\n return callback(queryRunner)\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release()\n }\n }\n }\n}\n"],"sourceRoot":".."}
|