typeorm 0.3.22-dev.206af0a → 0.3.22-dev.27b4207
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/driver/aurora-mysql/AuroraMysqlQueryRunner.js +6 -9
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +6 -9
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +7 -11
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +6 -9
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +4 -6
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +6 -9
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.d.ts +2 -1
- package/browser/driver/sap/SapDriver.js +17 -11
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +6 -9
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +5 -6
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/query-builder/RelationIdLoader.js +3 -2
- package/browser/query-builder/RelationIdLoader.js.map +1 -1
- package/commands/InitCommand.js +8 -16
- package/commands/InitCommand.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +6 -9
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +6 -9
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +7 -11
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +6 -9
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.js +4 -6
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +6 -9
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.d.ts +2 -1
- package/driver/sap/SapDriver.js +17 -11
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +6 -9
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +5 -6
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/package.json +1 -1
- package/query-builder/RelationIdLoader.js +3 -2
- package/query-builder/RelationIdLoader.js.map +1 -1
|
@@ -408,6 +408,7 @@ export class RelationIdLoader {
|
|
|
408
408
|
* Loads relation ids for the one-to-many and one-to-one not owner relations.
|
|
409
409
|
*/
|
|
410
410
|
loadForOneToManyAndOneToOneNotOwner(relation, entities, relatedEntities) {
|
|
411
|
+
const originalRelation = relation;
|
|
411
412
|
relation = relation.inverseRelation;
|
|
412
413
|
if (relation.entityMetadata.primaryColumns.length ===
|
|
413
414
|
relation.joinColumns.length) {
|
|
@@ -425,7 +426,7 @@ export class RelationIdLoader {
|
|
|
425
426
|
joinColumn.referencedColumn.propertyPath.replace(".", "_");
|
|
426
427
|
const primaryColumnName = joinColumn.entityMetadata.name +
|
|
427
428
|
"_" +
|
|
428
|
-
|
|
429
|
+
originalRelation.propertyPath.replace(".", "_") +
|
|
429
430
|
"_" +
|
|
430
431
|
joinColumn.propertyPath.replace(".", "_");
|
|
431
432
|
result[joinColumnName] = value;
|
|
@@ -441,7 +442,7 @@ export class RelationIdLoader {
|
|
|
441
442
|
relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {
|
|
442
443
|
const columnName = DriverUtils.buildAlias(this.connection.driver, undefined, primaryColumn.entityMetadata.name +
|
|
443
444
|
"_" +
|
|
444
|
-
|
|
445
|
+
originalRelation.propertyPath.replace(".", "_") +
|
|
445
446
|
"_" +
|
|
446
447
|
primaryColumn.propertyPath.replace(".", "_"));
|
|
447
448
|
qb.addSelect(mainAlias + "." + primaryColumn.propertyPath, columnName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-builder/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\n\n/**\n * Loads relation ids for the given entities.\n */\nexport class RelationIdLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n private connection: DataSource,\n protected queryRunner?: QueryRunner | undefined,\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids of the given entity or entities.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n relatedEntityOrRelatedEntities?: ObjectLiteral | ObjectLiteral[],\n ): Promise<any[]> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const relatedEntities = Array.isArray(relatedEntityOrRelatedEntities)\n ? relatedEntityOrRelatedEntities\n : relatedEntityOrRelatedEntities\n ? [relatedEntityOrRelatedEntities]\n : undefined\n\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return this.loadForManyToMany(relation, entities, relatedEntities)\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadForManyToOneAndOneToOneOwner(\n relation,\n entities,\n relatedEntities,\n )\n } else {\n // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadForOneToManyAndOneToOneNotOwner(\n relation,\n entities,\n relatedEntities,\n )\n }\n }\n\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n async loadManyToManyRelationIdsAndGroup<\n E1 extends ObjectLiteral,\n E2 extends ObjectLiteral,\n >(\n relation: RelationMetadata,\n entitiesOrEntities: E1 | E1[],\n relatedEntityOrEntities?: E2 | E2[],\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<{ entity: E1; related?: E2 | E2[] }[]> {\n // console.log(\"relation:\", relation.propertyName);\n // console.log(\"entitiesOrEntities\", entitiesOrEntities);\n const isMany = relation.isManyToMany || relation.isOneToMany\n const entities: E1[] = Array.isArray(entitiesOrEntities)\n ? entitiesOrEntities\n : [entitiesOrEntities]\n\n if (!relatedEntityOrEntities) {\n relatedEntityOrEntities = await this.connection.relationLoader.load(\n relation,\n entitiesOrEntities,\n this.queryRunner,\n queryBuilder,\n )\n if (!relatedEntityOrEntities.length)\n return entities.map((entity) => ({\n entity: entity,\n related: isMany ? [] : undefined,\n }))\n }\n // const relationIds = await this.load(relation, relatedEntityOrEntities!, entitiesOrEntities);\n const relationIds = await this.load(\n relation,\n entitiesOrEntities,\n relatedEntityOrEntities,\n )\n // console.log(\"entities\", entities);\n // console.log(\"relatedEntityOrEntities\", relatedEntityOrEntities);\n // console.log(\"relationIds\", relationIds);\n\n const relatedEntities: E2[] = Array.isArray(relatedEntityOrEntities)\n ? relatedEntityOrEntities\n : [relatedEntityOrEntities!]\n\n let columns: ColumnMetadata[] = [],\n inverseColumns: ColumnMetadata[] = []\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns =\n relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.entityMetadata.primaryColumns\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.entityMetadata.primaryColumns\n inverseColumns = relation.inverseRelation!.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n } else {\n }\n\n return entities.map((entity) => {\n const group: { entity: E1; related?: E2 | E2[] } = {\n entity: entity,\n related: isMany ? [] : undefined,\n }\n\n const entityRelationIds = relationIds.filter((relationId) => {\n return inverseColumns.every((column) => {\n return column.compareEntityValue(\n entity,\n relationId[\n column.entityMetadata.name +\n \"_\" +\n column.propertyAliasName\n ],\n )\n })\n })\n if (!entityRelationIds.length) return group\n\n relatedEntities.forEach((relatedEntity) => {\n entityRelationIds.forEach((relationId) => {\n const relatedEntityMatched = columns.every((column) => {\n return column.compareEntityValue(\n relatedEntity,\n relationId[\n DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n column.propertyPath.replace(\".\", \"_\"),\n )\n ],\n )\n })\n if (relatedEntityMatched) {\n if (isMany) {\n ;(group.related as E2[]).push(relatedEntity)\n } else {\n group.related = relatedEntity\n }\n }\n })\n })\n return group\n })\n }\n\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise<void> {\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids for the many-to-many relation.\n */\n protected loadForManyToMany(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const junctionMetadata = relation.junctionEntityMetadata!\n const mainAlias = junctionMetadata.name\n const columns = relation.isOwning\n ? junctionMetadata.ownerColumns\n : junctionMetadata.inverseColumns\n const inverseColumns = relation.isOwning\n ? junctionMetadata.inverseColumns\n : junctionMetadata.ownerColumns\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n\n // select all columns from junction table\n columns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n inverseColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add conditions for the given entities\n let condition1 = \"\"\n if (columns.length === 1) {\n const values = entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition1 = `${mainAlias}.${\n columns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values1\", values)\n condition1 =\n mainAlias +\n \".\" +\n columns[0].propertyPath +\n \" IN (:...values1)\" // todo: use ANY for postgres\n }\n } else {\n condition1 =\n \"(\" +\n entities\n .map((entity, entityIndex) => {\n return columns\n .map((column) => {\n const paramName =\n \"entity1_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n\n // add conditions for the given inverse entities\n let condition2 = \"\"\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n const values = relatedEntities.map((entity) =>\n inverseColumns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition2 = `${mainAlias}.${\n inverseColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values2\", values)\n condition2 =\n mainAlias +\n \".\" +\n inverseColumns[0].propertyPath +\n \" IN (:...values2)\" // todo: use ANY for postgres\n }\n } else {\n condition2 =\n \"(\" +\n relatedEntities\n .map((entity, entityIndex) => {\n return inverseColumns\n .map((column) => {\n const paramName =\n \"entity2_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n }\n\n // qb.from(junctionMetadata.target, mainAlias)\n // .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"));\n //\n // // execute query\n // const { values1, values2 } = qb.getParameters();\n // console.log(`I can do it`, { values1, values2 });\n // if (inverseColumns.length === 1 &&\n // columns.length === 1 &&\n // this.connection.driver instanceof SqliteDriver &&\n // (values1.length + values2.length) > 500 &&\n // values1.length === values2.length) {\n // console.log(`I can do it`);\n // return qb.getRawMany();\n //\n // } else {\n // return qb.getRawMany();\n // }\n\n // execute query\n const condition = [condition1, condition2]\n .filter((v) => v.length > 0)\n .join(\" AND \")\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n protected loadForManyToOneAndOneToOneOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const mainAlias = relation.entityMetadata.targetName\n\n // console.log(\"entitiesx\", entities);\n // console.log(\"relatedEntitiesx\", relatedEntities);\n const hasAllJoinColumnsInEntity = relation.joinColumns.every(\n (joinColumn) => {\n return !!relation.entityMetadata.nonVirtualColumns.find(\n (column) => column === joinColumn,\n )\n },\n )\n if (relatedEntities && hasAllJoinColumnsInEntity) {\n let relationIdMaps: ObjectLiteral[] = []\n entities.forEach((entity) => {\n let relationIdMap: ObjectLiteral = {}\n relation.entityMetadata.primaryColumns.forEach(\n (primaryColumn) => {\n const key =\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\")\n relationIdMap[key] =\n primaryColumn.getEntityValue(entity)\n },\n )\n\n relatedEntities.forEach((relatedEntity) => {\n relation.joinColumns.forEach((joinColumn) => {\n const entityColumnValue =\n joinColumn.getEntityValue(entity)\n const relatedEntityColumnValue =\n joinColumn.referencedColumn!.getEntityValue(\n relatedEntity,\n )\n if (\n entityColumnValue === undefined ||\n relatedEntityColumnValue === undefined\n )\n return\n\n if (entityColumnValue === relatedEntityColumnValue) {\n const key =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n relationIdMap[key] = relatedEntityColumnValue\n }\n })\n })\n if (\n Object.keys(relationIdMap).length ===\n relation.entityMetadata.primaryColumns.length +\n relation.joinColumns.length\n ) {\n relationIdMaps.push(relationIdMap)\n }\n })\n // console.log(\"relationIdMap\", relationIdMaps);\n // console.log(\"entities.length\", entities.length);\n if (relationIdMaps.length === entities.length)\n return Promise.resolve(relationIdMaps)\n }\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.entityMetadata.primaryColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.entityMetadata.primaryColumns[0].getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.entityMetadata.primaryColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.entityMetadata.primaryColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.entityMetadata.primaryColumns\n .map((column, columnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n protected loadForOneToManyAndOneToOneNotOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n relation = relation.inverseRelation!\n\n if (\n relation.entityMetadata.primaryColumns.length ===\n relation.joinColumns.length\n ) {\n const sameReferencedColumns =\n relation.entityMetadata.primaryColumns.every((column) => {\n return relation.joinColumns.indexOf(column) !== -1\n })\n if (sameReferencedColumns) {\n return Promise.resolve(\n entities.map((entity) => {\n const result: ObjectLiteral = {}\n relation.joinColumns.forEach(function (joinColumn) {\n const value =\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n )\n const joinColumnName =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n const primaryColumnName =\n joinColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n joinColumn.propertyPath.replace(\".\", \"_\")\n result[joinColumnName] = value\n result[primaryColumnName] = value\n })\n return result\n }),\n )\n }\n }\n\n const mainAlias = relation.entityMetadata.targetName\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n relation.inverseRelation!.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.joinColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.joinColumns[0].referencedColumn!.getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.joinColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.joinColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.joinColumns\n .map((joinColumn, joinColumnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + joinColumnIndex\n qb.setParameter(\n paramName,\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n joinColumn.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-builder/RelationIdLoader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACzB,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YACY,UAAsB,EACpB,WAAqC;QADvC,eAAU,GAAV,UAAU,CAAY;QACpB,gBAAW,GAAX,WAAW,CAA0B;IAChD,CAAC;IAEJ,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,IAAI,CACA,QAA0B,EAC1B,gBAAiD,EACjD,8BAAgE;QAEhE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC5C,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;QACxB,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAAC;YACjE,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,8BAA8B;gBAChC,CAAC,CAAC,CAAC,8BAA8B,CAAC;gBAClC,CAAC,CAAC,SAAS,CAAA;QAEf,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;QACtE,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,gCAAgC,CACxC,QAAQ,EACR,QAAQ,EACR,eAAe,CAClB,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,6DAA6D;YAC7D,OAAO,IAAI,CAAC,mCAAmC,CAC3C,QAAQ,EACR,QAAQ,EACR,eAAe,CAClB,CAAA;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iCAAiC,CAInC,QAA0B,EAC1B,kBAA6B,EAC7B,uBAAmC,EACnC,YAAsC;QAEtC,mDAAmD;QACnD,yDAAyD;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,WAAW,CAAA;QAC5D,MAAM,QAAQ,GAAS,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACpD,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;QAE1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC3B,uBAAuB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAC/D,QAAQ,EACR,kBAAkB,EAClB,IAAI,CAAC,WAAW,EAChB,YAAY,CACf,CAAA;YACD,IAAI,CAAC,uBAAuB,CAAC,MAAM;gBAC/B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC7B,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;iBACnC,CAAC,CAAC,CAAA;QACX,CAAC;QACD,+FAA+F;QAC/F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAC/B,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,CAC1B,CAAA;QACD,qCAAqC;QACrC,mEAAmE;QACnE,2CAA2C;QAE3C,MAAM,eAAe,GAAS,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC;YAChE,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,CAAC,uBAAwB,CAAC,CAAA;QAEhC,IAAI,OAAO,GAAqB,EAAE,EAC9B,cAAc,GAAqB,EAAE,CAAA;QACzC,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAC7B,OAAO,GAAG,QAAQ,CAAC,sBAAuB,CAAC,cAAc,CAAC,GAAG,CACzD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;YACD,cAAc,GAAG,QAAQ,CAAC,sBAAuB,CAAC,YAAY,CAAC,GAAG,CAC9D,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACvC,OAAO,GAAG,QAAQ,CAAC,sBAAuB,CAAC,YAAY,CAAC,GAAG,CACvD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;YACD,cAAc;gBACV,QAAQ,CAAC,sBAAuB,CAAC,cAAc,CAAC,GAAG,CAC/C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;QACT,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC1D,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAC9B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;YACD,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAA;QAC3D,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAC7D,OAAO,GAAG,QAAQ,CAAC,eAAgB,CAAC,cAAc,CAAC,cAAc,CAAA;YACjE,cAAc,GAAG,QAAQ,CAAC,eAAgB,CAAC,WAAW,CAAC,GAAG,CACtD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAiB,CACvC,CAAA;QACL,CAAC;aAAM,CAAC;QACR,CAAC;QAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAwC;gBAC/C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;aACnC,CAAA;YAED,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;gBACxD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;oBACnC,OAAO,MAAM,CAAC,kBAAkB,CAC5B,MAAM,EACN,UAAU,CACN,MAAM,CAAC,cAAc,CAAC,IAAI;wBACtB,GAAG;wBACH,MAAM,CAAC,iBAAiB,CAC/B,CACJ,CAAA;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YAE3C,eAAe,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBACtC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBACrC,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;wBAClD,OAAO,MAAM,CAAC,kBAAkB,CAC5B,aAAa,EACb,UAAU,CACN,WAAW,CAAC,UAAU,CAClB,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,MAAM,CAAC,cAAc,CAAC,IAAI;4BACtB,GAAG;4BACH,QAAQ,CAAC,YAAY,CAAC,OAAO,CACzB,GAAG,EACH,GAAG,CACN;4BACD,GAAG;4BACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAC5C,CACJ,CACJ,CAAA;oBACL,CAAC,CAAC,CAAA;oBACF,IAAI,oBAAoB,EAAE,CAAC;wBACvB,IAAI,MAAM,EAAE,CAAC;4BACT,CAAC;4BAAC,KAAK,CAAC,OAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;wBAChD,CAAC;6BAAM,CAAC;4BACJ,KAAK,CAAC,OAAO,GAAG,aAAa,CAAA;wBACjC,CAAC;oBACL,CAAC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YACF,OAAO,KAAK,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IAEH,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,iBAAiB,CACvB,QAA0B,EAC1B,QAAyB,EACzB,eAAiC;QAEjC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,sBAAuB,CAAA;QACzD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAA;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ;YAC7B,CAAC,CAAC,gBAAgB,CAAC,YAAY;YAC/B,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAA;QACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ;YACpC,CAAC,CAAC,gBAAgB,CAAC,cAAc;YACjC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAA;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAE/D,yCAAyC;QACzC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACvB,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CAAC,IAAI;gBACxC,GAAG;gBACH,MAAM,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAC9D,CAAA;YACD,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QACF,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CAAC,IAAI;gBACxC,GAAG;gBACH,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gBACvC,GAAG;gBACH,MAAM,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAC9D,CAAA;YACD,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,wCAAwC;QACxC,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CACtD,CAAA;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACvC,CAAA;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,UAAU,GAAG,GAAG,SAAS,IACrB,OAAO,CAAC,CAAC,CAAC,CAAC,YACf,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;gBAClC,UAAU;oBACN,SAAS;wBACT,GAAG;wBACH,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;wBACvB,mBAAmB,CAAA,CAAC,6BAA6B;YACzD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,UAAU;gBACN,GAAG;oBACH,QAAQ;yBACH,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;wBACzB,OAAO,OAAO;6BACT,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;4BACZ,MAAM,SAAS,GACX,UAAU;gCACV,WAAW;gCACX,GAAG;gCACH,MAAM,CAAC,YAAY,CAAA;4BACvB,EAAE,CAAC,YAAY,CACX,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CACnC,MAAM,CACT,CACJ,CAAA;4BACD,OAAO,CACH,SAAS;gCACT,GAAG;gCACH,MAAM,CAAC,YAAY;gCACnB,MAAM;gCACN,SAAS,CACZ,CAAA;wBACL,CAAC,CAAC;6BACD,IAAI,CAAC,OAAO,CAAC,CAAA;oBACtB,CAAC,CAAC;yBACD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;yBACzC,IAAI,CAAC,MAAM,CAAC;oBACjB,GAAG,CAAA;QACX,CAAC;QAED,gDAAgD;QAChD,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1C,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAC7D,CAAA;gBACD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACvC,CAAA;gBAED,IAAI,aAAa,EAAE,CAAC;oBAChB,UAAU,GAAG,GAAG,SAAS,IACrB,cAAc,CAAC,CAAC,CAAC,CAAC,YACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACJ,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;oBAClC,UAAU;wBACN,SAAS;4BACT,GAAG;4BACH,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY;4BAC9B,mBAAmB,CAAA,CAAC,6BAA6B;gBACzD,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,UAAU;oBACN,GAAG;wBACH,eAAe;6BACV,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;4BACzB,OAAO,cAAc;iCAChB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gCACZ,MAAM,SAAS,GACX,UAAU;oCACV,WAAW;oCACX,GAAG;oCACH,MAAM,CAAC,YAAY,CAAA;gCACvB,EAAE,CAAC,YAAY,CACX,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CACnC,MAAM,CACT,CACJ,CAAA;gCACD,OAAO,CACH,SAAS;oCACT,GAAG;oCACH,MAAM,CAAC,YAAY;oCACnB,MAAM;oCACN,SAAS,CACZ,CAAA;4BACL,CAAC,CAAC;iCACD,IAAI,CAAC,OAAO,CAAC,CAAA;wBACtB,CAAC,CAAC;6BACD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;6BACzC,IAAI,CAAC,MAAM,CAAC;wBACjB,GAAG,CAAA;YACX,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,qEAAqE;QACrE,EAAE;QACF,mBAAmB;QACnB,mDAAmD;QACnD,oDAAoD;QACpD,qCAAqC;QACrC,8BAA8B;QAC9B,wDAAwD;QACxD,iDAAiD;QACjD,2CAA2C;QAC3C,kCAAkC;QAClC,8BAA8B;QAC9B,EAAE;QACF,WAAW;QACX,8BAA8B;QAC9B,IAAI;QAEJ,gBAAgB;QAChB,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,OAAO,CAAC,CAAA;QAClB,OAAO,EAAE;aACJ,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;aACxC,KAAK,CAAC,SAAS,CAAC;aAChB,UAAU,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACO,gCAAgC,CACtC,QAA0B,EAC1B,QAAyB,EACzB,eAAiC;QAEjC,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAA;QAEpD,sCAAsC;QACtC,oDAAoD;QACpD,MAAM,yBAAyB,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CACxD,CAAC,UAAU,EAAE,EAAE;YACX,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CACnD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CACpC,CAAA;QACL,CAAC,CACJ,CAAA;QACD,IAAI,eAAe,IAAI,yBAAyB,EAAE,CAAC;YAC/C,IAAI,cAAc,GAAoB,EAAE,CAAA;YACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,IAAI,aAAa,GAAkB,EAAE,CAAA;gBACrC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAC1C,CAAC,aAAa,EAAE,EAAE;oBACd,MAAM,GAAG,GACL,aAAa,CAAC,cAAc,CAAC,IAAI;wBACjC,GAAG;wBACH,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;oBAChD,aAAa,CAAC,GAAG,CAAC;wBACd,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;gBAC5C,CAAC,CACJ,CAAA;gBAED,eAAe,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;oBACtC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;wBACxC,MAAM,iBAAiB,GACnB,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;wBACrC,MAAM,wBAAwB,GAC1B,UAAU,CAAC,gBAAiB,CAAC,cAAc,CACvC,aAAa,CAChB,CAAA;wBACL,IACI,iBAAiB,KAAK,SAAS;4BAC/B,wBAAwB,KAAK,SAAS;4BAEtC,OAAM;wBAEV,IAAI,iBAAiB,KAAK,wBAAwB,EAAE,CAAC;4BACjD,MAAM,GAAG,GACL,UAAU,CAAC,gBAAiB,CAAC,cAAc;iCACtC,IAAI;gCACT,GAAG;gCACH,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gCACvC,GAAG;gCACH,UAAU,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAC7C,GAAG,EACH,GAAG,CACN,CAAA;4BACL,aAAa,CAAC,GAAG,CAAC,GAAG,wBAAwB,CAAA;wBACjD,CAAC;oBACL,CAAC,CAAC,CAAA;gBACN,CAAC,CAAC,CAAA;gBACF,IACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM;oBACjC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM;wBACzC,QAAQ,CAAC,WAAW,CAAC,MAAM,EACjC,CAAC;oBACC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACtC,CAAC;YACL,CAAC,CAAC,CAAA;YACF,gDAAgD;YAChD,mDAAmD;YACnD,IAAI,cAAc,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;gBACzC,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC9C,CAAC;QAED,6BAA6B;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/D,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;YAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,aAAa,CAAC,cAAc,CAAC,IAAI;gBAC7B,GAAG;gBACH,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CACnD,CAAA;YACD,EAAE,CAAC,SAAS,CACR,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC,YAAY,EAC5C,UAAU,CACb,CAAA;QACL,CAAC,CAAC,CAAA;QACF,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CAAC,IAAI;gBACxC,GAAG;gBACH,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gBACvC,GAAG;gBACH,MAAM,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAC9D,CAAA;YACD,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,6BAA6B;QAC7B,IAAI,SAAS,GAAW,EAAE,CAAA;QAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CACpD,MAAM,CACT,CACJ,CAAA;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACvC,CAAA;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,SAAS,GAAG,GAAG,SAAS,IACpB,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAC9C,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACjC,SAAS;oBACL,SAAS;wBACT,GAAG;wBACH,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY;wBACtD,kBAAkB,CAAA,CAAC,6BAA6B;YACxD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,QAAQ;iBACf,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gBACzB,OAAO,QAAQ,CAAC,cAAc,CAAC,cAAc;qBACxC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;oBACzB,MAAM,SAAS,GACX,QAAQ,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAA;oBAC9C,EAAE,CAAC,YAAY,CACX,SAAS,EACT,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAChC,CAAA;oBACD,OAAO,CACH,SAAS;wBACT,GAAG;wBACH,MAAM,CAAC,YAAY;wBACnB,MAAM;wBACN,SAAS,CACZ,CAAA;gBACL,CAAC,CAAC;qBACD,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;iBACzC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAED,gBAAgB;QAChB,OAAO,EAAE;aACJ,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC;aAC/C,KAAK,CAAC,SAAS,CAAC;aAChB,UAAU,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACO,mCAAmC,CACzC,QAA0B,EAC1B,QAAyB,EACzB,eAAiC;QAEjC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;QACjC,QAAQ,GAAG,QAAQ,CAAC,eAAgB,CAAA;QAEpC,IACI,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM;YAC7C,QAAQ,CAAC,WAAW,CAAC,MAAM,EAC7B,CAAC;YACC,MAAM,qBAAqB,GACvB,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpD,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACtD,CAAC,CAAC,CAAA;YACN,IAAI,qBAAqB,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC,OAAO,CAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACpB,MAAM,MAAM,GAAkB,EAAE,CAAA;oBAChC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,UAAU;wBAC7C,MAAM,KAAK,GACP,UAAU,CAAC,gBAAiB,CAAC,cAAc,CACvC,MAAM,CACT,CAAA;wBACL,MAAM,cAAc,GAChB,UAAU,CAAC,gBAAiB,CAAC,cAAc;6BACtC,IAAI;4BACT,GAAG;4BACH,UAAU,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAC7C,GAAG,EACH,GAAG,CACN,CAAA;wBACL,MAAM,iBAAiB,GACnB,UAAU,CAAC,cAAc,CAAC,IAAI;4BAC9B,GAAG;4BACH,gBAAgB,CAAC,YAAY,CAAC,OAAO,CACjC,GAAG,EACH,GAAG,CACN;4BACD,GAAG;4BACH,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;wBAC7C,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;wBAC9B,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAA;oBACrC,CAAC,CAAC,CAAA;oBACF,OAAO,MAAM,CAAA;gBACjB,CAAC,CAAC,CACL,CAAA;YACL,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAA;QAEpD,6BAA6B;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/D,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;YAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,aAAa,CAAC,cAAc,CAAC,IAAI;gBAC7B,GAAG;gBACH,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC/C,GAAG;gBACH,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CACnD,CAAA;YACD,EAAE,CAAC,SAAS,CACR,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC,YAAY,EAC5C,UAAU,CACb,CAAA;QACL,CAAC,CAAC,CAAA;QACF,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB,SAAS,EACT,MAAM,CAAC,gBAAiB,CAAC,cAAc,CAAC,IAAI;gBACxC,GAAG;gBACH,MAAM,CAAC,gBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAC9D,CAAA;YACD,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,6BAA6B;QAC7B,IAAI,SAAS,GAAW,EAAE,CAAA;QAC1B,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAiB,CAAC,cAAc,CACpD,MAAM,CACT,CACJ,CAAA;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACvC,CAAA;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,SAAS,GAAG,GAAG,SAAS,IACpB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAC5B,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACjC,SAAS;oBACL,SAAS;wBACT,GAAG;wBACH,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY;wBACpC,kBAAkB,CAAA,CAAC,6BAA6B;YACxD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,QAAQ;iBACf,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gBACzB,OAAO,QAAQ,CAAC,WAAW;qBACtB,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE;oBACjC,MAAM,SAAS,GACX,QAAQ,GAAG,WAAW,GAAG,GAAG,GAAG,eAAe,CAAA;oBAClD,EAAE,CAAC,YAAY,CACX,SAAS,EACT,UAAU,CAAC,gBAAiB,CAAC,cAAc,CACvC,MAAM,CACT,CACJ,CAAA;oBACD,OAAO,CACH,SAAS;wBACT,GAAG;wBACH,UAAU,CAAC,YAAY;wBACvB,MAAM;wBACN,SAAS,CACZ,CAAA;gBACL,CAAC,CAAC;qBACD,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;iBACzC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAED,gBAAgB;QAChB,OAAO,EAAE;aACJ,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC;aAC/C,KAAK,CAAC,SAAS,CAAC;aAChB,UAAU,EAAE,CAAA;IACrB,CAAC;CACJ","file":"RelationIdLoader.js","sourcesContent":["import { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\n\n/**\n * Loads relation ids for the given entities.\n */\nexport class RelationIdLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n private connection: DataSource,\n protected queryRunner?: QueryRunner | undefined,\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids of the given entity or entities.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n relatedEntityOrRelatedEntities?: ObjectLiteral | ObjectLiteral[],\n ): Promise<any[]> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const relatedEntities = Array.isArray(relatedEntityOrRelatedEntities)\n ? relatedEntityOrRelatedEntities\n : relatedEntityOrRelatedEntities\n ? [relatedEntityOrRelatedEntities]\n : undefined\n\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return this.loadForManyToMany(relation, entities, relatedEntities)\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadForManyToOneAndOneToOneOwner(\n relation,\n entities,\n relatedEntities,\n )\n } else {\n // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadForOneToManyAndOneToOneNotOwner(\n relation,\n entities,\n relatedEntities,\n )\n }\n }\n\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n async loadManyToManyRelationIdsAndGroup<\n E1 extends ObjectLiteral,\n E2 extends ObjectLiteral,\n >(\n relation: RelationMetadata,\n entitiesOrEntities: E1 | E1[],\n relatedEntityOrEntities?: E2 | E2[],\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<{ entity: E1; related?: E2 | E2[] }[]> {\n // console.log(\"relation:\", relation.propertyName);\n // console.log(\"entitiesOrEntities\", entitiesOrEntities);\n const isMany = relation.isManyToMany || relation.isOneToMany\n const entities: E1[] = Array.isArray(entitiesOrEntities)\n ? entitiesOrEntities\n : [entitiesOrEntities]\n\n if (!relatedEntityOrEntities) {\n relatedEntityOrEntities = await this.connection.relationLoader.load(\n relation,\n entitiesOrEntities,\n this.queryRunner,\n queryBuilder,\n )\n if (!relatedEntityOrEntities.length)\n return entities.map((entity) => ({\n entity: entity,\n related: isMany ? [] : undefined,\n }))\n }\n // const relationIds = await this.load(relation, relatedEntityOrEntities!, entitiesOrEntities);\n const relationIds = await this.load(\n relation,\n entitiesOrEntities,\n relatedEntityOrEntities,\n )\n // console.log(\"entities\", entities);\n // console.log(\"relatedEntityOrEntities\", relatedEntityOrEntities);\n // console.log(\"relationIds\", relationIds);\n\n const relatedEntities: E2[] = Array.isArray(relatedEntityOrEntities)\n ? relatedEntityOrEntities\n : [relatedEntityOrEntities!]\n\n let columns: ColumnMetadata[] = [],\n inverseColumns: ColumnMetadata[] = []\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata!.ownerColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns =\n relation.junctionEntityMetadata!.inverseColumns.map(\n (column) => column.referencedColumn!,\n )\n } else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n inverseColumns = relation.entityMetadata.primaryColumns\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.entityMetadata.primaryColumns\n inverseColumns = relation.inverseRelation!.joinColumns.map(\n (column) => column.referencedColumn!,\n )\n } else {\n }\n\n return entities.map((entity) => {\n const group: { entity: E1; related?: E2 | E2[] } = {\n entity: entity,\n related: isMany ? [] : undefined,\n }\n\n const entityRelationIds = relationIds.filter((relationId) => {\n return inverseColumns.every((column) => {\n return column.compareEntityValue(\n entity,\n relationId[\n column.entityMetadata.name +\n \"_\" +\n column.propertyAliasName\n ],\n )\n })\n })\n if (!entityRelationIds.length) return group\n\n relatedEntities.forEach((relatedEntity) => {\n entityRelationIds.forEach((relationId) => {\n const relatedEntityMatched = columns.every((column) => {\n return column.compareEntityValue(\n relatedEntity,\n relationId[\n DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n column.propertyPath.replace(\".\", \"_\"),\n )\n ],\n )\n })\n if (relatedEntityMatched) {\n if (isMany) {\n ;(group.related as E2[]).push(relatedEntity)\n } else {\n group.related = relatedEntity\n }\n }\n })\n })\n return group\n })\n }\n\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise<void> {\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation ids for the many-to-many relation.\n */\n protected loadForManyToMany(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const junctionMetadata = relation.junctionEntityMetadata!\n const mainAlias = junctionMetadata.name\n const columns = relation.isOwning\n ? junctionMetadata.ownerColumns\n : junctionMetadata.inverseColumns\n const inverseColumns = relation.isOwning\n ? junctionMetadata.inverseColumns\n : junctionMetadata.ownerColumns\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n\n // select all columns from junction table\n columns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n inverseColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add conditions for the given entities\n let condition1 = \"\"\n if (columns.length === 1) {\n const values = entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition1 = `${mainAlias}.${\n columns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values1\", values)\n condition1 =\n mainAlias +\n \".\" +\n columns[0].propertyPath +\n \" IN (:...values1)\" // todo: use ANY for postgres\n }\n } else {\n condition1 =\n \"(\" +\n entities\n .map((entity, entityIndex) => {\n return columns\n .map((column) => {\n const paramName =\n \"entity1_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n\n // add conditions for the given inverse entities\n let condition2 = \"\"\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n const values = relatedEntities.map((entity) =>\n inverseColumns[0].referencedColumn!.getEntityValue(entity),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition2 = `${mainAlias}.${\n inverseColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values2\", values)\n condition2 =\n mainAlias +\n \".\" +\n inverseColumns[0].propertyPath +\n \" IN (:...values2)\" // todo: use ANY for postgres\n }\n } else {\n condition2 =\n \"(\" +\n relatedEntities\n .map((entity, entityIndex) => {\n return inverseColumns\n .map((column) => {\n const paramName =\n \"entity2_\" +\n entityIndex +\n \"_\" +\n column.propertyName\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \") +\n \")\"\n }\n }\n\n // qb.from(junctionMetadata.target, mainAlias)\n // .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"));\n //\n // // execute query\n // const { values1, values2 } = qb.getParameters();\n // console.log(`I can do it`, { values1, values2 });\n // if (inverseColumns.length === 1 &&\n // columns.length === 1 &&\n // this.connection.driver instanceof SqliteDriver &&\n // (values1.length + values2.length) > 500 &&\n // values1.length === values2.length) {\n // console.log(`I can do it`);\n // return qb.getRawMany();\n //\n // } else {\n // return qb.getRawMany();\n // }\n\n // execute query\n const condition = [condition1, condition2]\n .filter((v) => v.length > 0)\n .join(\" AND \")\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n protected loadForManyToOneAndOneToOneOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const mainAlias = relation.entityMetadata.targetName\n\n // console.log(\"entitiesx\", entities);\n // console.log(\"relatedEntitiesx\", relatedEntities);\n const hasAllJoinColumnsInEntity = relation.joinColumns.every(\n (joinColumn) => {\n return !!relation.entityMetadata.nonVirtualColumns.find(\n (column) => column === joinColumn,\n )\n },\n )\n if (relatedEntities && hasAllJoinColumnsInEntity) {\n let relationIdMaps: ObjectLiteral[] = []\n entities.forEach((entity) => {\n let relationIdMap: ObjectLiteral = {}\n relation.entityMetadata.primaryColumns.forEach(\n (primaryColumn) => {\n const key =\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\")\n relationIdMap[key] =\n primaryColumn.getEntityValue(entity)\n },\n )\n\n relatedEntities.forEach((relatedEntity) => {\n relation.joinColumns.forEach((joinColumn) => {\n const entityColumnValue =\n joinColumn.getEntityValue(entity)\n const relatedEntityColumnValue =\n joinColumn.referencedColumn!.getEntityValue(\n relatedEntity,\n )\n if (\n entityColumnValue === undefined ||\n relatedEntityColumnValue === undefined\n )\n return\n\n if (entityColumnValue === relatedEntityColumnValue) {\n const key =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n relationIdMap[key] = relatedEntityColumnValue\n }\n })\n })\n if (\n Object.keys(relationIdMap).length ===\n relation.entityMetadata.primaryColumns.length +\n relation.joinColumns.length\n ) {\n relationIdMaps.push(relationIdMap)\n }\n })\n // console.log(\"relationIdMap\", relationIdMaps);\n // console.log(\"entities.length\", entities.length);\n if (relationIdMaps.length === entities.length)\n return Promise.resolve(relationIdMaps)\n }\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n relation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.entityMetadata.primaryColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.entityMetadata.primaryColumns[0].getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.entityMetadata.primaryColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.entityMetadata.primaryColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.entityMetadata.primaryColumns\n .map((column, columnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity),\n )\n return (\n mainAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n protected loadForOneToManyAndOneToOneNotOwner(\n relation: RelationMetadata,\n entities: ObjectLiteral[],\n relatedEntities?: ObjectLiteral[],\n ) {\n const originalRelation = relation\n relation = relation.inverseRelation!\n\n if (\n relation.entityMetadata.primaryColumns.length ===\n relation.joinColumns.length\n ) {\n const sameReferencedColumns =\n relation.entityMetadata.primaryColumns.every((column) => {\n return relation.joinColumns.indexOf(column) !== -1\n })\n if (sameReferencedColumns) {\n return Promise.resolve(\n entities.map((entity) => {\n const result: ObjectLiteral = {}\n relation.joinColumns.forEach(function (joinColumn) {\n const value =\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n )\n const joinColumnName =\n joinColumn.referencedColumn!.entityMetadata\n .name +\n \"_\" +\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n const primaryColumnName =\n joinColumn.entityMetadata.name +\n \"_\" +\n originalRelation.propertyPath.replace(\n \".\",\n \"_\",\n ) +\n \"_\" +\n joinColumn.propertyPath.replace(\".\", \"_\")\n result[joinColumnName] = value\n result[primaryColumnName] = value\n })\n return result\n }),\n )\n }\n }\n\n const mainAlias = relation.entityMetadata.targetName\n\n // select all columns we need\n const qb = this.connection.createQueryBuilder(this.queryRunner)\n relation.entityMetadata.primaryColumns.forEach((primaryColumn) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n primaryColumn.entityMetadata.name +\n \"_\" +\n originalRelation.propertyPath.replace(\".\", \"_\") +\n \"_\" +\n primaryColumn.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(\n mainAlias + \".\" + primaryColumn.propertyPath,\n columnName,\n )\n })\n relation.joinColumns.forEach((column) => {\n const columnName = DriverUtils.buildAlias(\n this.connection.driver,\n undefined,\n column.referencedColumn!.entityMetadata.name +\n \"_\" +\n column.referencedColumn!.propertyPath.replace(\".\", \"_\"),\n )\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName)\n })\n\n // add condition for entities\n let condition: string = \"\"\n if (relation.joinColumns.length === 1) {\n const values = entities.map((entity) =>\n relation.joinColumns[0].referencedColumn!.getEntityValue(\n entity,\n ),\n )\n const areAllNumbers = values.every(\n (value) => typeof value === \"number\",\n )\n\n if (areAllNumbers) {\n condition = `${mainAlias}.${\n relation.joinColumns[0].propertyPath\n } IN (${values.join(\", \")})`\n } else {\n qb.setParameter(\"values\", values)\n condition =\n mainAlias +\n \".\" +\n relation.joinColumns[0].propertyPath +\n \" IN (:...values)\" // todo: use ANY for postgres\n }\n } else {\n condition = entities\n .map((entity, entityIndex) => {\n return relation.joinColumns\n .map((joinColumn, joinColumnIndex) => {\n const paramName =\n \"entity\" + entityIndex + \"_\" + joinColumnIndex\n qb.setParameter(\n paramName,\n joinColumn.referencedColumn!.getEntityValue(\n entity,\n ),\n )\n return (\n mainAlias +\n \".\" +\n joinColumn.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n }\n\n // execute query\n return qb\n .from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany()\n }\n}\n"],"sourceRoot":".."}
|
package/commands/InitCommand.js
CHANGED
|
@@ -457,8 +457,7 @@ AppDataSource.initialize().then(async () => {
|
|
|
457
457
|
static getDockerComposeTemplate(database) {
|
|
458
458
|
switch (database) {
|
|
459
459
|
case "mysql":
|
|
460
|
-
return `
|
|
461
|
-
services:
|
|
460
|
+
return `services:
|
|
462
461
|
|
|
463
462
|
mysql:
|
|
464
463
|
image: "mysql:8.0.30"
|
|
@@ -472,8 +471,7 @@ services:
|
|
|
472
471
|
|
|
473
472
|
`;
|
|
474
473
|
case "mariadb":
|
|
475
|
-
return `
|
|
476
|
-
services:
|
|
474
|
+
return `services:
|
|
477
475
|
|
|
478
476
|
mariadb:
|
|
479
477
|
image: "mariadb:10.8.4"
|
|
@@ -487,8 +485,7 @@ services:
|
|
|
487
485
|
|
|
488
486
|
`;
|
|
489
487
|
case "postgres":
|
|
490
|
-
return `
|
|
491
|
-
services:
|
|
488
|
+
return `services:
|
|
492
489
|
|
|
493
490
|
postgres:
|
|
494
491
|
image: "postgres:14.5"
|
|
@@ -501,8 +498,7 @@ services:
|
|
|
501
498
|
|
|
502
499
|
`;
|
|
503
500
|
case "cockroachdb":
|
|
504
|
-
return `
|
|
505
|
-
services:
|
|
501
|
+
return `services:
|
|
506
502
|
|
|
507
503
|
cockroachdb:
|
|
508
504
|
image: "cockroachdb/cockroach:v22.1.6"
|
|
@@ -513,14 +509,12 @@ services:
|
|
|
513
509
|
`;
|
|
514
510
|
case "sqlite":
|
|
515
511
|
case "better-sqlite3":
|
|
516
|
-
return `
|
|
517
|
-
services:
|
|
512
|
+
return `services:
|
|
518
513
|
`;
|
|
519
514
|
case "oracle":
|
|
520
515
|
throw new error_1.TypeORMError(`You cannot initialize a project with docker for Oracle driver yet.`); // todo: implement for oracle as well
|
|
521
516
|
case "mssql":
|
|
522
|
-
return `
|
|
523
|
-
services:
|
|
517
|
+
return `services:
|
|
524
518
|
|
|
525
519
|
mssql:
|
|
526
520
|
image: "microsoft/mssql-server-linux:rc2"
|
|
@@ -532,8 +526,7 @@ services:
|
|
|
532
526
|
|
|
533
527
|
`;
|
|
534
528
|
case "mongodb":
|
|
535
|
-
return `
|
|
536
|
-
services:
|
|
529
|
+
return `services:
|
|
537
530
|
|
|
538
531
|
mongodb:
|
|
539
532
|
image: "mongo:5.0.12"
|
|
@@ -543,8 +536,7 @@ services:
|
|
|
543
536
|
|
|
544
537
|
`;
|
|
545
538
|
case "spanner":
|
|
546
|
-
return `
|
|
547
|
-
services:
|
|
539
|
+
return `services:
|
|
548
540
|
|
|
549
541
|
spanner:
|
|
550
542
|
image: gcr.io/cloud-spanner-emulator/emulator:1.4.1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/InitCommand.ts"],"names":[],"mappings":"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","file":"InitCommand.js","sourcesContent":["import ansi from \"ansis\"\nimport { exec } from \"child_process\"\nimport path from \"path\"\nimport yargs from \"yargs\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Generates a new project with TypeORM.\n */\nexport class InitCommand implements yargs.CommandModule {\n command = \"init\"\n describe =\n \"Generates initial TypeORM project structure. \" +\n \"If name specified then creates files inside directory called as name. \" +\n \"If its not specified then creates files inside current directory.\"\n\n builder(args: yargs.Argv) {\n return args\n .option(\"n\", {\n alias: \"name\",\n describe: \"Name of the project directory.\",\n })\n .option(\"db\", {\n alias: \"database\",\n describe: \"Database type you'll use in your project.\",\n })\n .option(\"express\", {\n describe:\n \"Indicates if express server sample code should be included in the project. False by default.\",\n })\n .option(\"docker\", {\n describe:\n \"Set to true if docker-compose must be generated as well. False by default.\",\n })\n .option(\"pm\", {\n alias: \"manager\",\n choices: [\"npm\", \"yarn\"],\n default: \"npm\",\n describe: \"Install packages, expected values are npm or yarn.\",\n })\n .option(\"ms\", {\n alias: \"module\",\n choices: [\"commonjs\", \"esm\"],\n default: \"commonjs\",\n describe:\n \"Module system to use for project, expected values are commonjs or esm.\",\n })\n }\n\n async handler(args: yargs.Arguments) {\n try {\n const database: string = (args.database as any) || \"postgres\"\n const isExpress = args.express !== undefined ? true : false\n const isDocker = args.docker !== undefined ? true : false\n const basePath = process.cwd() + (args.name ? \"/\" + args.name : \"\")\n const projectName = args.name\n ? path.basename(args.name as any)\n : undefined\n const installNpm = args.pm === \"yarn\" ? false : true\n const projectIsEsm = args.ms === \"esm\"\n await CommandUtils.createFile(\n basePath + \"/package.json\",\n InitCommand.getPackageJsonTemplate(projectName, projectIsEsm),\n false,\n )\n if (isDocker)\n await CommandUtils.createFile(\n basePath + \"/docker-compose.yml\",\n InitCommand.getDockerComposeTemplate(database),\n false,\n )\n await CommandUtils.createFile(\n basePath + \"/.gitignore\",\n InitCommand.getGitIgnoreFile(),\n )\n await CommandUtils.createFile(\n basePath + \"/README.md\",\n InitCommand.getReadmeTemplate({ docker: isDocker }),\n false,\n )\n await CommandUtils.createFile(\n basePath + \"/tsconfig.json\",\n InitCommand.getTsConfigTemplate(projectIsEsm),\n )\n await CommandUtils.createFile(\n basePath + \"/src/entity/User.ts\",\n InitCommand.getUserEntityTemplate(database),\n )\n await CommandUtils.createFile(\n basePath + \"/src/data-source.ts\",\n InitCommand.getAppDataSourceTemplate(projectIsEsm, database),\n )\n await CommandUtils.createFile(\n basePath + \"/src/index.ts\",\n InitCommand.getAppIndexTemplate(isExpress, projectIsEsm),\n )\n await CommandUtils.createDirectories(basePath + \"/src/migration\")\n\n // generate extra files for express application\n if (isExpress) {\n await CommandUtils.createFile(\n basePath + \"/src/routes.ts\",\n InitCommand.getRoutesTemplate(projectIsEsm),\n )\n await CommandUtils.createFile(\n basePath + \"/src/controller/UserController.ts\",\n InitCommand.getControllerTemplate(projectIsEsm),\n )\n }\n\n const packageJsonContents = await CommandUtils.readFile(\n basePath + \"/package.json\",\n )\n await CommandUtils.createFile(\n basePath + \"/package.json\",\n InitCommand.appendPackageJson(\n packageJsonContents,\n database,\n isExpress,\n projectIsEsm,\n ),\n )\n\n if (args.name) {\n console.log(\n ansi.green`Project created inside ${ansi.blue(\n basePath,\n )} directory.`,\n )\n } else {\n console.log(\n ansi.green`Project created inside current directory.`,\n )\n }\n\n console.log(ansi.green`Please wait, installing dependencies...`)\n if (args.pm && installNpm) {\n await InitCommand.executeCommand(\"npm install\", basePath)\n } else {\n await InitCommand.executeCommand(\"yarn install\", basePath)\n }\n\n console.log(ansi.green`Done! Start playing with a new project!`)\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during project initialization:\", err)\n process.exit(1)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n protected static executeCommand(command: string, cwd: string) {\n return new Promise<string>((ok, fail) => {\n exec(command, { cwd }, (error: any, stdout: any, stderr: any) => {\n if (stdout) return ok(stdout)\n if (stderr) return fail(stderr)\n if (error) return fail(error)\n ok(\"\")\n })\n })\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getAppDataSourceTemplate(\n isEsm: boolean,\n database: string,\n ): string {\n let dbSettings = \"\"\n switch (database) {\n case \"mysql\":\n dbSettings = `type: \"mysql\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"mariadb\":\n dbSettings = `type: \"mariadb\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"sqlite\":\n dbSettings = `type: \"sqlite\",\n database: \"database.sqlite\",`\n break\n case \"better-sqlite3\":\n dbSettings = `type: \"better-sqlite3\",\n database: \"database.sqlite\",`\n break\n case \"postgres\":\n dbSettings = `type: \"postgres\",\n host: \"localhost\",\n port: 5432,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"cockroachdb\":\n dbSettings = `type: \"cockroachdb\",\n host: \"localhost\",\n port: 26257,\n username: \"root\",\n password: \"\",\n database: \"defaultdb\",`\n break\n case \"mssql\":\n dbSettings = `type: \"mssql\",\n host: \"localhost\",\n username: \"sa\",\n password: \"Admin12345\",\n database: \"tempdb\",`\n break\n case \"oracle\":\n dbSettings = `type: \"oracle\",\nhost: \"localhost\",\nusername: \"system\",\npassword: \"oracle\",\nport: 1521,\nsid: \"xe.oracle.docker\",`\n break\n case \"mongodb\":\n dbSettings = `type: \"mongodb\",\n database: \"test\",`\n break\n case \"spanner\":\n dbSettings = `type: \"spanner\",\n projectId: \"test\",\n instanceId: \"test\",\n databaseId: \"test\",`\n break\n }\n return `import \"reflect-metadata\"\nimport { DataSource } from \"typeorm\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nexport const AppDataSource = new DataSource({\n ${dbSettings}\n synchronize: true,\n logging: false,\n entities: [User],\n migrations: [],\n subscribers: [],\n})\n`\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getTsConfigTemplate(esmModule: boolean): string {\n if (esmModule)\n return JSON.stringify(\n {\n compilerOptions: {\n lib: [\"es2021\"],\n target: \"es2021\",\n module: \"es2022\",\n moduleResolution: \"node\",\n allowSyntheticDefaultImports: true,\n outDir: \"./build\",\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n sourceMap: true,\n },\n },\n undefined,\n 3,\n )\n else\n return JSON.stringify(\n {\n compilerOptions: {\n lib: [\"es5\", \"es6\"],\n target: \"es5\",\n module: \"commonjs\",\n moduleResolution: \"node\",\n outDir: \"./build\",\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n sourceMap: true,\n },\n },\n undefined,\n 3,\n )\n }\n\n /**\n * Gets contents of the .gitignore file.\n */\n protected static getGitIgnoreFile(): string {\n return `.idea/\n.vscode/\nnode_modules/\nbuild/\ntmp/\ntemp/`\n }\n\n /**\n * Gets contents of the user entity.\n */\n protected static getUserEntityTemplate(database: string): string {\n return `import { Entity, ${\n database === \"mongodb\"\n ? \"ObjectIdColumn, ObjectId\"\n : \"PrimaryGeneratedColumn\"\n }, Column } from \"typeorm\"\n\n@Entity()\nexport class User {\n\n ${\n database === \"mongodb\"\n ? \"@ObjectIdColumn()\"\n : \"@PrimaryGeneratedColumn()\"\n }\n id: ${database === \"mongodb\" ? \"ObjectId\" : \"number\"}\n\n @Column()\n firstName: string\n\n @Column()\n lastName: string\n\n @Column()\n age: number\n\n}\n`\n }\n\n /**\n * Gets contents of the route file (used when express is enabled).\n */\n protected static getRoutesTemplate(isEsm: boolean): string {\n return `import { UserController } from \"./controller/UserController${\n isEsm ? \".js\" : \"\"\n }\"\n\nexport const Routes = [{\n method: \"get\",\n route: \"/users\",\n controller: UserController,\n action: \"all\"\n}, {\n method: \"get\",\n route: \"/users/:id\",\n controller: UserController,\n action: \"one\"\n}, {\n method: \"post\",\n route: \"/users\",\n controller: UserController,\n action: \"save\"\n}, {\n method: \"delete\",\n route: \"/users/:id\",\n controller: UserController,\n action: \"remove\"\n}]`\n }\n\n /**\n * Gets contents of the user controller file (used when express is enabled).\n */\n protected static getControllerTemplate(isEsm: boolean): string {\n return `import { AppDataSource } from \"../data-source${\n isEsm ? \".js\" : \"\"\n }\"\nimport { NextFunction, Request, Response } from \"express\"\nimport { User } from \"../entity/User${isEsm ? \".js\" : \"\"}\"\n\nexport class UserController {\n\n private userRepository = AppDataSource.getRepository(User)\n\n async all(request: Request, response: Response, next: NextFunction) {\n return this.userRepository.find()\n }\n\n async one(request: Request, response: Response, next: NextFunction) {\n const id = parseInt(request.params.id)\n\n\n const user = await this.userRepository.findOne({\n where: { id }\n })\n\n if (!user) {\n return \"unregistered user\"\n }\n return user\n }\n\n async save(request: Request, response: Response, next: NextFunction) {\n const { firstName, lastName, age } = request.body;\n\n const user = Object.assign(new User(), {\n firstName,\n lastName,\n age\n })\n\n return this.userRepository.save(user)\n }\n\n async remove(request: Request, response: Response, next: NextFunction) {\n const id = parseInt(request.params.id)\n\n let userToRemove = await this.userRepository.findOneBy({ id })\n\n if (!userToRemove) {\n return \"this user not exist\"\n }\n\n await this.userRepository.remove(userToRemove)\n\n return \"user has been removed\"\n }\n\n}`\n }\n\n /**\n * Gets contents of the main (index) application file.\n */\n protected static getAppIndexTemplate(\n express: boolean,\n isEsm: boolean,\n ): string {\n if (express) {\n return `import ${!isEsm ? \"* as \" : \"\"}express from \"express\"\nimport ${!isEsm ? \"* as \" : \"\"}bodyParser from \"body-parser\"\nimport { Request, Response } from \"express\"\nimport { AppDataSource } from \"./data-source${isEsm ? \".js\" : \"\"}\"\nimport { Routes } from \"./routes${isEsm ? \".js\" : \"\"}\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nAppDataSource.initialize().then(async () => {\n\n // create express app\n const app = express()\n app.use(bodyParser.json())\n\n // register express routes from defined application routes\n Routes.forEach(route => {\n (app as any)[route.method](route.route, (req: Request, res: Response, next: Function) => {\n const result = (new (route.controller as any))[route.action](req, res, next)\n if (result instanceof Promise) {\n result.then(result => result !== null && result !== undefined ? res.send(result) : undefined)\n\n } else if (result !== null && result !== undefined) {\n res.json(result)\n }\n })\n })\n\n // setup express app here\n // ...\n\n // start express server\n app.listen(3000)\n\n // insert new users for test\n await AppDataSource.manager.save(\n AppDataSource.manager.create(User, {\n firstName: \"Timber\",\n lastName: \"Saw\",\n age: 27\n })\n )\n\n await AppDataSource.manager.save(\n AppDataSource.manager.create(User, {\n firstName: \"Phantom\",\n lastName: \"Assassin\",\n age: 24\n })\n )\n\n console.log(\"Express server has started on port 3000. Open http://localhost:3000/users to see results\")\n\n}).catch(error => console.log(error))\n`\n } else {\n return `import { AppDataSource } from \"./data-source${\n isEsm ? \".js\" : \"\"\n }\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nAppDataSource.initialize().then(async () => {\n\n console.log(\"Inserting a new user into the database...\")\n const user = new User()\n user.firstName = \"Timber\"\n user.lastName = \"Saw\"\n user.age = 25\n await AppDataSource.manager.save(user)\n console.log(\"Saved a new user with id: \" + user.id)\n\n console.log(\"Loading users from the database...\")\n const users = await AppDataSource.manager.find(User)\n console.log(\"Loaded users: \", users)\n\n console.log(\"Here you can setup and run express / fastify / any other framework.\")\n\n}).catch(error => console.log(error))\n`\n }\n }\n\n /**\n * Gets contents of the new package.json file.\n */\n protected static getPackageJsonTemplate(\n projectName?: string,\n projectIsEsm?: boolean,\n ): string {\n return JSON.stringify(\n {\n name: projectName || \"typeorm-sample\",\n version: \"0.0.1\",\n description: \"Awesome project developed with TypeORM.\",\n type: projectIsEsm ? \"module\" : \"commonjs\",\n devDependencies: {},\n dependencies: {},\n scripts: {},\n },\n undefined,\n 3,\n )\n }\n\n /**\n * Gets contents of the new docker-compose.yml file.\n */\n protected static getDockerComposeTemplate(database: string): string {\n switch (database) {\n case \"mysql\":\n return `version: '3'\nservices:\n\n mysql:\n image: \"mysql:8.0.30\"\n ports:\n - \"3306:3306\"\n environment:\n MYSQL_ROOT_PASSWORD: \"admin\"\n MYSQL_USER: \"test\"\n MYSQL_PASSWORD: \"test\"\n MYSQL_DATABASE: \"test\"\n\n`\n case \"mariadb\":\n return `version: '3'\nservices:\n\n mariadb:\n image: \"mariadb:10.8.4\"\n ports:\n - \"3306:3306\"\n environment:\n MYSQL_ROOT_PASSWORD: \"admin\"\n MYSQL_USER: \"test\"\n MYSQL_PASSWORD: \"test\"\n MYSQL_DATABASE: \"test\"\n\n`\n case \"postgres\":\n return `version: '3'\nservices:\n\n postgres:\n image: \"postgres:14.5\"\n ports:\n - \"5432:5432\"\n environment:\n POSTGRES_USER: \"test\"\n POSTGRES_PASSWORD: \"test\"\n POSTGRES_DB: \"test\"\n\n`\n case \"cockroachdb\":\n return `version: '3'\nservices:\n\n cockroachdb:\n image: \"cockroachdb/cockroach:v22.1.6\"\n command: start --insecure\n ports:\n - \"26257:26257\"\n\n`\n case \"sqlite\":\n case \"better-sqlite3\":\n return `version: '3'\nservices:\n`\n case \"oracle\":\n throw new TypeORMError(\n `You cannot initialize a project with docker for Oracle driver yet.`,\n ) // todo: implement for oracle as well\n\n case \"mssql\":\n return `version: '3'\nservices:\n\n mssql:\n image: \"microsoft/mssql-server-linux:rc2\"\n ports:\n - \"1433:1433\"\n environment:\n SA_PASSWORD: \"Admin12345\"\n ACCEPT_EULA: \"Y\"\n\n`\n case \"mongodb\":\n return `version: '3'\nservices:\n\n mongodb:\n image: \"mongo:5.0.12\"\n container_name: \"typeorm-mongodb\"\n ports:\n - \"27017:27017\"\n\n`\n case \"spanner\":\n return `version: '3'\nservices:\n\n spanner:\n image: gcr.io/cloud-spanner-emulator/emulator:1.4.1\n ports:\n - \"9010:9010\"\n - \"9020:9020\"\n\n`\n }\n return \"\"\n }\n\n /**\n * Gets contents of the new readme.md file.\n */\n protected static getReadmeTemplate(options: { docker: boolean }): string {\n let template = `# Awesome Project Build with TypeORM\n\nSteps to run this project:\n\n1. Run \\`npm i\\` command\n`\n\n if (options.docker) {\n template += `2. Run \\`docker-compose up\\` command\n`\n } else {\n template += `2. Setup database settings inside \\`data-source.ts\\` file\n`\n }\n\n template += `3. Run \\`npm start\\` command\n`\n return template\n }\n\n /**\n * Appends to a given package.json template everything needed.\n */\n protected static appendPackageJson(\n packageJsonContents: string,\n database: string,\n express: boolean,\n projectIsEsm: boolean /*, docker: boolean*/,\n ): string {\n const packageJson = JSON.parse(packageJsonContents)\n\n if (!packageJson.devDependencies) packageJson.devDependencies = {}\n Object.assign(packageJson.devDependencies, {\n \"ts-node\": \"10.9.1\",\n \"@types/node\": \"^16.11.10\",\n typescript: \"4.5.2\",\n })\n\n if (!packageJson.dependencies) packageJson.dependencies = {}\n Object.assign(packageJson.dependencies, {\n typeorm:\n require(\"../package.json\").version !== \"0.0.0\"\n ? require(\"../package.json\").version // install version from package.json if present\n : require(\"../package.json\").installFrom, // else use custom source\n \"reflect-metadata\": \"^0.1.13\",\n })\n\n switch (database) {\n case \"mysql\":\n case \"mariadb\":\n packageJson.dependencies[\"mysql\"] = \"^2.14.1\"\n break\n case \"postgres\":\n case \"cockroachdb\":\n packageJson.dependencies[\"pg\"] = \"^8.4.0\"\n break\n case \"sqlite\":\n packageJson.dependencies[\"sqlite3\"] = \"^5.0.2\"\n break\n case \"better-sqlite3\":\n packageJson.dependencies[\"better-sqlite3\"] = \"^8.0.0\"\n break\n case \"oracle\":\n packageJson.dependencies[\"oracledb\"] = \"^5.1.0\"\n break\n case \"mssql\":\n packageJson.dependencies[\"mssql\"] = \"^9.1.1\"\n break\n case \"mongodb\":\n packageJson.dependencies[\"mongodb\"] = \"^5.2.0\"\n break\n case \"spanner\":\n packageJson.dependencies[\"@google-cloud/spanner\"] = \"^5.18.0\"\n break\n }\n\n if (express) {\n packageJson.dependencies[\"express\"] = \"^4.17.2\"\n packageJson.dependencies[\"body-parser\"] = \"^1.19.1\"\n }\n\n if (!packageJson.scripts) packageJson.scripts = {}\n\n if (projectIsEsm)\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */ \"node --loader ts-node/esm src/index.ts\",\n typeorm: \"typeorm-ts-node-esm\",\n })\n else\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */ \"ts-node src/index.ts\",\n typeorm: \"typeorm-ts-node-commonjs\",\n })\n\n return JSON.stringify(packageJson, undefined, 3)\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/InitCommand.ts"],"names":[],"mappings":"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","file":"InitCommand.js","sourcesContent":["import ansi from \"ansis\"\nimport { exec } from \"child_process\"\nimport path from \"path\"\nimport yargs from \"yargs\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Generates a new project with TypeORM.\n */\nexport class InitCommand implements yargs.CommandModule {\n command = \"init\"\n describe =\n \"Generates initial TypeORM project structure. \" +\n \"If name specified then creates files inside directory called as name. \" +\n \"If its not specified then creates files inside current directory.\"\n\n builder(args: yargs.Argv) {\n return args\n .option(\"n\", {\n alias: \"name\",\n describe: \"Name of the project directory.\",\n })\n .option(\"db\", {\n alias: \"database\",\n describe: \"Database type you'll use in your project.\",\n })\n .option(\"express\", {\n describe:\n \"Indicates if express server sample code should be included in the project. False by default.\",\n })\n .option(\"docker\", {\n describe:\n \"Set to true if docker-compose must be generated as well. False by default.\",\n })\n .option(\"pm\", {\n alias: \"manager\",\n choices: [\"npm\", \"yarn\"],\n default: \"npm\",\n describe: \"Install packages, expected values are npm or yarn.\",\n })\n .option(\"ms\", {\n alias: \"module\",\n choices: [\"commonjs\", \"esm\"],\n default: \"commonjs\",\n describe:\n \"Module system to use for project, expected values are commonjs or esm.\",\n })\n }\n\n async handler(args: yargs.Arguments) {\n try {\n const database: string = (args.database as any) || \"postgres\"\n const isExpress = args.express !== undefined ? true : false\n const isDocker = args.docker !== undefined ? true : false\n const basePath = process.cwd() + (args.name ? \"/\" + args.name : \"\")\n const projectName = args.name\n ? path.basename(args.name as any)\n : undefined\n const installNpm = args.pm === \"yarn\" ? false : true\n const projectIsEsm = args.ms === \"esm\"\n await CommandUtils.createFile(\n basePath + \"/package.json\",\n InitCommand.getPackageJsonTemplate(projectName, projectIsEsm),\n false,\n )\n if (isDocker)\n await CommandUtils.createFile(\n basePath + \"/docker-compose.yml\",\n InitCommand.getDockerComposeTemplate(database),\n false,\n )\n await CommandUtils.createFile(\n basePath + \"/.gitignore\",\n InitCommand.getGitIgnoreFile(),\n )\n await CommandUtils.createFile(\n basePath + \"/README.md\",\n InitCommand.getReadmeTemplate({ docker: isDocker }),\n false,\n )\n await CommandUtils.createFile(\n basePath + \"/tsconfig.json\",\n InitCommand.getTsConfigTemplate(projectIsEsm),\n )\n await CommandUtils.createFile(\n basePath + \"/src/entity/User.ts\",\n InitCommand.getUserEntityTemplate(database),\n )\n await CommandUtils.createFile(\n basePath + \"/src/data-source.ts\",\n InitCommand.getAppDataSourceTemplate(projectIsEsm, database),\n )\n await CommandUtils.createFile(\n basePath + \"/src/index.ts\",\n InitCommand.getAppIndexTemplate(isExpress, projectIsEsm),\n )\n await CommandUtils.createDirectories(basePath + \"/src/migration\")\n\n // generate extra files for express application\n if (isExpress) {\n await CommandUtils.createFile(\n basePath + \"/src/routes.ts\",\n InitCommand.getRoutesTemplate(projectIsEsm),\n )\n await CommandUtils.createFile(\n basePath + \"/src/controller/UserController.ts\",\n InitCommand.getControllerTemplate(projectIsEsm),\n )\n }\n\n const packageJsonContents = await CommandUtils.readFile(\n basePath + \"/package.json\",\n )\n await CommandUtils.createFile(\n basePath + \"/package.json\",\n InitCommand.appendPackageJson(\n packageJsonContents,\n database,\n isExpress,\n projectIsEsm,\n ),\n )\n\n if (args.name) {\n console.log(\n ansi.green`Project created inside ${ansi.blue(\n basePath,\n )} directory.`,\n )\n } else {\n console.log(\n ansi.green`Project created inside current directory.`,\n )\n }\n\n console.log(ansi.green`Please wait, installing dependencies...`)\n if (args.pm && installNpm) {\n await InitCommand.executeCommand(\"npm install\", basePath)\n } else {\n await InitCommand.executeCommand(\"yarn install\", basePath)\n }\n\n console.log(ansi.green`Done! Start playing with a new project!`)\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during project initialization:\", err)\n process.exit(1)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n protected static executeCommand(command: string, cwd: string) {\n return new Promise<string>((ok, fail) => {\n exec(command, { cwd }, (error: any, stdout: any, stderr: any) => {\n if (stdout) return ok(stdout)\n if (stderr) return fail(stderr)\n if (error) return fail(error)\n ok(\"\")\n })\n })\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getAppDataSourceTemplate(\n isEsm: boolean,\n database: string,\n ): string {\n let dbSettings = \"\"\n switch (database) {\n case \"mysql\":\n dbSettings = `type: \"mysql\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"mariadb\":\n dbSettings = `type: \"mariadb\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"sqlite\":\n dbSettings = `type: \"sqlite\",\n database: \"database.sqlite\",`\n break\n case \"better-sqlite3\":\n dbSettings = `type: \"better-sqlite3\",\n database: \"database.sqlite\",`\n break\n case \"postgres\":\n dbSettings = `type: \"postgres\",\n host: \"localhost\",\n port: 5432,\n username: \"test\",\n password: \"test\",\n database: \"test\",`\n break\n case \"cockroachdb\":\n dbSettings = `type: \"cockroachdb\",\n host: \"localhost\",\n port: 26257,\n username: \"root\",\n password: \"\",\n database: \"defaultdb\",`\n break\n case \"mssql\":\n dbSettings = `type: \"mssql\",\n host: \"localhost\",\n username: \"sa\",\n password: \"Admin12345\",\n database: \"tempdb\",`\n break\n case \"oracle\":\n dbSettings = `type: \"oracle\",\nhost: \"localhost\",\nusername: \"system\",\npassword: \"oracle\",\nport: 1521,\nsid: \"xe.oracle.docker\",`\n break\n case \"mongodb\":\n dbSettings = `type: \"mongodb\",\n database: \"test\",`\n break\n case \"spanner\":\n dbSettings = `type: \"spanner\",\n projectId: \"test\",\n instanceId: \"test\",\n databaseId: \"test\",`\n break\n }\n return `import \"reflect-metadata\"\nimport { DataSource } from \"typeorm\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nexport const AppDataSource = new DataSource({\n ${dbSettings}\n synchronize: true,\n logging: false,\n entities: [User],\n migrations: [],\n subscribers: [],\n})\n`\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getTsConfigTemplate(esmModule: boolean): string {\n if (esmModule)\n return JSON.stringify(\n {\n compilerOptions: {\n lib: [\"es2021\"],\n target: \"es2021\",\n module: \"es2022\",\n moduleResolution: \"node\",\n allowSyntheticDefaultImports: true,\n outDir: \"./build\",\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n sourceMap: true,\n },\n },\n undefined,\n 3,\n )\n else\n return JSON.stringify(\n {\n compilerOptions: {\n lib: [\"es5\", \"es6\"],\n target: \"es5\",\n module: \"commonjs\",\n moduleResolution: \"node\",\n outDir: \"./build\",\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n sourceMap: true,\n },\n },\n undefined,\n 3,\n )\n }\n\n /**\n * Gets contents of the .gitignore file.\n */\n protected static getGitIgnoreFile(): string {\n return `.idea/\n.vscode/\nnode_modules/\nbuild/\ntmp/\ntemp/`\n }\n\n /**\n * Gets contents of the user entity.\n */\n protected static getUserEntityTemplate(database: string): string {\n return `import { Entity, ${\n database === \"mongodb\"\n ? \"ObjectIdColumn, ObjectId\"\n : \"PrimaryGeneratedColumn\"\n }, Column } from \"typeorm\"\n\n@Entity()\nexport class User {\n\n ${\n database === \"mongodb\"\n ? \"@ObjectIdColumn()\"\n : \"@PrimaryGeneratedColumn()\"\n }\n id: ${database === \"mongodb\" ? \"ObjectId\" : \"number\"}\n\n @Column()\n firstName: string\n\n @Column()\n lastName: string\n\n @Column()\n age: number\n\n}\n`\n }\n\n /**\n * Gets contents of the route file (used when express is enabled).\n */\n protected static getRoutesTemplate(isEsm: boolean): string {\n return `import { UserController } from \"./controller/UserController${\n isEsm ? \".js\" : \"\"\n }\"\n\nexport const Routes = [{\n method: \"get\",\n route: \"/users\",\n controller: UserController,\n action: \"all\"\n}, {\n method: \"get\",\n route: \"/users/:id\",\n controller: UserController,\n action: \"one\"\n}, {\n method: \"post\",\n route: \"/users\",\n controller: UserController,\n action: \"save\"\n}, {\n method: \"delete\",\n route: \"/users/:id\",\n controller: UserController,\n action: \"remove\"\n}]`\n }\n\n /**\n * Gets contents of the user controller file (used when express is enabled).\n */\n protected static getControllerTemplate(isEsm: boolean): string {\n return `import { AppDataSource } from \"../data-source${\n isEsm ? \".js\" : \"\"\n }\"\nimport { NextFunction, Request, Response } from \"express\"\nimport { User } from \"../entity/User${isEsm ? \".js\" : \"\"}\"\n\nexport class UserController {\n\n private userRepository = AppDataSource.getRepository(User)\n\n async all(request: Request, response: Response, next: NextFunction) {\n return this.userRepository.find()\n }\n\n async one(request: Request, response: Response, next: NextFunction) {\n const id = parseInt(request.params.id)\n\n\n const user = await this.userRepository.findOne({\n where: { id }\n })\n\n if (!user) {\n return \"unregistered user\"\n }\n return user\n }\n\n async save(request: Request, response: Response, next: NextFunction) {\n const { firstName, lastName, age } = request.body;\n\n const user = Object.assign(new User(), {\n firstName,\n lastName,\n age\n })\n\n return this.userRepository.save(user)\n }\n\n async remove(request: Request, response: Response, next: NextFunction) {\n const id = parseInt(request.params.id)\n\n let userToRemove = await this.userRepository.findOneBy({ id })\n\n if (!userToRemove) {\n return \"this user not exist\"\n }\n\n await this.userRepository.remove(userToRemove)\n\n return \"user has been removed\"\n }\n\n}`\n }\n\n /**\n * Gets contents of the main (index) application file.\n */\n protected static getAppIndexTemplate(\n express: boolean,\n isEsm: boolean,\n ): string {\n if (express) {\n return `import ${!isEsm ? \"* as \" : \"\"}express from \"express\"\nimport ${!isEsm ? \"* as \" : \"\"}bodyParser from \"body-parser\"\nimport { Request, Response } from \"express\"\nimport { AppDataSource } from \"./data-source${isEsm ? \".js\" : \"\"}\"\nimport { Routes } from \"./routes${isEsm ? \".js\" : \"\"}\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nAppDataSource.initialize().then(async () => {\n\n // create express app\n const app = express()\n app.use(bodyParser.json())\n\n // register express routes from defined application routes\n Routes.forEach(route => {\n (app as any)[route.method](route.route, (req: Request, res: Response, next: Function) => {\n const result = (new (route.controller as any))[route.action](req, res, next)\n if (result instanceof Promise) {\n result.then(result => result !== null && result !== undefined ? res.send(result) : undefined)\n\n } else if (result !== null && result !== undefined) {\n res.json(result)\n }\n })\n })\n\n // setup express app here\n // ...\n\n // start express server\n app.listen(3000)\n\n // insert new users for test\n await AppDataSource.manager.save(\n AppDataSource.manager.create(User, {\n firstName: \"Timber\",\n lastName: \"Saw\",\n age: 27\n })\n )\n\n await AppDataSource.manager.save(\n AppDataSource.manager.create(User, {\n firstName: \"Phantom\",\n lastName: \"Assassin\",\n age: 24\n })\n )\n\n console.log(\"Express server has started on port 3000. Open http://localhost:3000/users to see results\")\n\n}).catch(error => console.log(error))\n`\n } else {\n return `import { AppDataSource } from \"./data-source${\n isEsm ? \".js\" : \"\"\n }\"\nimport { User } from \"./entity/User${isEsm ? \".js\" : \"\"}\"\n\nAppDataSource.initialize().then(async () => {\n\n console.log(\"Inserting a new user into the database...\")\n const user = new User()\n user.firstName = \"Timber\"\n user.lastName = \"Saw\"\n user.age = 25\n await AppDataSource.manager.save(user)\n console.log(\"Saved a new user with id: \" + user.id)\n\n console.log(\"Loading users from the database...\")\n const users = await AppDataSource.manager.find(User)\n console.log(\"Loaded users: \", users)\n\n console.log(\"Here you can setup and run express / fastify / any other framework.\")\n\n}).catch(error => console.log(error))\n`\n }\n }\n\n /**\n * Gets contents of the new package.json file.\n */\n protected static getPackageJsonTemplate(\n projectName?: string,\n projectIsEsm?: boolean,\n ): string {\n return JSON.stringify(\n {\n name: projectName || \"typeorm-sample\",\n version: \"0.0.1\",\n description: \"Awesome project developed with TypeORM.\",\n type: projectIsEsm ? \"module\" : \"commonjs\",\n devDependencies: {},\n dependencies: {},\n scripts: {},\n },\n undefined,\n 3,\n )\n }\n\n /**\n * Gets contents of the new docker-compose.yml file.\n */\n protected static getDockerComposeTemplate(database: string): string {\n switch (database) {\n case \"mysql\":\n return `services:\n\n mysql:\n image: \"mysql:8.0.30\"\n ports:\n - \"3306:3306\"\n environment:\n MYSQL_ROOT_PASSWORD: \"admin\"\n MYSQL_USER: \"test\"\n MYSQL_PASSWORD: \"test\"\n MYSQL_DATABASE: \"test\"\n\n`\n case \"mariadb\":\n return `services:\n\n mariadb:\n image: \"mariadb:10.8.4\"\n ports:\n - \"3306:3306\"\n environment:\n MYSQL_ROOT_PASSWORD: \"admin\"\n MYSQL_USER: \"test\"\n MYSQL_PASSWORD: \"test\"\n MYSQL_DATABASE: \"test\"\n\n`\n case \"postgres\":\n return `services:\n\n postgres:\n image: \"postgres:14.5\"\n ports:\n - \"5432:5432\"\n environment:\n POSTGRES_USER: \"test\"\n POSTGRES_PASSWORD: \"test\"\n POSTGRES_DB: \"test\"\n\n`\n case \"cockroachdb\":\n return `services:\n\n cockroachdb:\n image: \"cockroachdb/cockroach:v22.1.6\"\n command: start --insecure\n ports:\n - \"26257:26257\"\n\n`\n case \"sqlite\":\n case \"better-sqlite3\":\n return `services:\n`\n case \"oracle\":\n throw new TypeORMError(\n `You cannot initialize a project with docker for Oracle driver yet.`,\n ) // todo: implement for oracle as well\n\n case \"mssql\":\n return `services:\n\n mssql:\n image: \"microsoft/mssql-server-linux:rc2\"\n ports:\n - \"1433:1433\"\n environment:\n SA_PASSWORD: \"Admin12345\"\n ACCEPT_EULA: \"Y\"\n\n`\n case \"mongodb\":\n return `services:\n\n mongodb:\n image: \"mongo:5.0.12\"\n container_name: \"typeorm-mongodb\"\n ports:\n - \"27017:27017\"\n\n`\n case \"spanner\":\n return `services:\n\n spanner:\n image: gcr.io/cloud-spanner-emulator/emulator:1.4.1\n ports:\n - \"9010:9010\"\n - \"9020:9020\"\n\n`\n }\n return \"\"\n }\n\n /**\n * Gets contents of the new readme.md file.\n */\n protected static getReadmeTemplate(options: { docker: boolean }): string {\n let template = `# Awesome Project Build with TypeORM\n\nSteps to run this project:\n\n1. Run \\`npm i\\` command\n`\n\n if (options.docker) {\n template += `2. Run \\`docker-compose up\\` command\n`\n } else {\n template += `2. Setup database settings inside \\`data-source.ts\\` file\n`\n }\n\n template += `3. Run \\`npm start\\` command\n`\n return template\n }\n\n /**\n * Appends to a given package.json template everything needed.\n */\n protected static appendPackageJson(\n packageJsonContents: string,\n database: string,\n express: boolean,\n projectIsEsm: boolean /*, docker: boolean*/,\n ): string {\n const packageJson = JSON.parse(packageJsonContents)\n\n if (!packageJson.devDependencies) packageJson.devDependencies = {}\n Object.assign(packageJson.devDependencies, {\n \"ts-node\": \"10.9.1\",\n \"@types/node\": \"^16.11.10\",\n typescript: \"4.5.2\",\n })\n\n if (!packageJson.dependencies) packageJson.dependencies = {}\n Object.assign(packageJson.dependencies, {\n typeorm:\n require(\"../package.json\").version !== \"0.0.0\"\n ? require(\"../package.json\").version // install version from package.json if present\n : require(\"../package.json\").installFrom, // else use custom source\n \"reflect-metadata\": \"^0.1.13\",\n })\n\n switch (database) {\n case \"mysql\":\n case \"mariadb\":\n packageJson.dependencies[\"mysql\"] = \"^2.14.1\"\n break\n case \"postgres\":\n case \"cockroachdb\":\n packageJson.dependencies[\"pg\"] = \"^8.4.0\"\n break\n case \"sqlite\":\n packageJson.dependencies[\"sqlite3\"] = \"^5.0.2\"\n break\n case \"better-sqlite3\":\n packageJson.dependencies[\"better-sqlite3\"] = \"^8.0.0\"\n break\n case \"oracle\":\n packageJson.dependencies[\"oracledb\"] = \"^5.1.0\"\n break\n case \"mssql\":\n packageJson.dependencies[\"mssql\"] = \"^9.1.1\"\n break\n case \"mongodb\":\n packageJson.dependencies[\"mongodb\"] = \"^5.2.0\"\n break\n case \"spanner\":\n packageJson.dependencies[\"@google-cloud/spanner\"] = \"^5.18.0\"\n break\n }\n\n if (express) {\n packageJson.dependencies[\"express\"] = \"^4.17.2\"\n packageJson.dependencies[\"body-parser\"] = \"^1.19.1\"\n }\n\n if (!packageJson.scripts) packageJson.scripts = {}\n\n if (projectIsEsm)\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */ \"node --loader ts-node/esm src/index.ts\",\n typeorm: \"typeorm-ts-node-esm\",\n })\n else\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */ \"ts-node src/index.ts\",\n typeorm: \"typeorm-ts-node-commonjs\",\n })\n\n return JSON.stringify(packageJson, undefined, 3)\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -64,13 +64,12 @@ class AuroraMysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
64
64
|
throw err;
|
|
65
65
|
}
|
|
66
66
|
if (this.transactionDepth === 0) {
|
|
67
|
-
this.transactionDepth += 1;
|
|
68
67
|
await this.client.startTransaction();
|
|
69
68
|
}
|
|
70
69
|
else {
|
|
71
|
-
this.transactionDepth
|
|
72
|
-
await this.query(`SAVEPOINT typeorm_${this.transactionDepth - 1}`);
|
|
70
|
+
await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`);
|
|
73
71
|
}
|
|
72
|
+
this.transactionDepth += 1;
|
|
74
73
|
await this.broadcaster.broadcast("AfterTransactionStart");
|
|
75
74
|
}
|
|
76
75
|
/**
|
|
@@ -82,14 +81,13 @@ class AuroraMysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
82
81
|
throw new TransactionNotStartedError_1.TransactionNotStartedError();
|
|
83
82
|
await this.broadcaster.broadcast("BeforeTransactionCommit");
|
|
84
83
|
if (this.transactionDepth > 1) {
|
|
85
|
-
this.transactionDepth
|
|
86
|
-
await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth}`);
|
|
84
|
+
await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`);
|
|
87
85
|
}
|
|
88
86
|
else {
|
|
89
|
-
this.transactionDepth -= 1;
|
|
90
87
|
await this.client.commitTransaction();
|
|
91
88
|
this.isTransactionActive = false;
|
|
92
89
|
}
|
|
90
|
+
this.transactionDepth -= 1;
|
|
93
91
|
await this.broadcaster.broadcast("AfterTransactionCommit");
|
|
94
92
|
}
|
|
95
93
|
/**
|
|
@@ -101,14 +99,13 @@ class AuroraMysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
101
99
|
throw new TransactionNotStartedError_1.TransactionNotStartedError();
|
|
102
100
|
await this.broadcaster.broadcast("BeforeTransactionRollback");
|
|
103
101
|
if (this.transactionDepth > 1) {
|
|
104
|
-
this.transactionDepth
|
|
105
|
-
await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth}`);
|
|
102
|
+
await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`);
|
|
106
103
|
}
|
|
107
104
|
else {
|
|
108
|
-
this.transactionDepth -= 1;
|
|
109
105
|
await this.client.rollbackTransaction();
|
|
110
106
|
this.isTransactionActive = false;
|
|
111
107
|
}
|
|
108
|
+
this.transactionDepth -= 1;
|
|
112
109
|
await this.broadcaster.broadcast("AfterTransactionRollback");
|
|
113
110
|
}
|
|
114
111
|
/**
|