typeorm 0.2.39-dev.4638dea → 0.2.39-dev.4aaafdf

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.
Files changed (29) hide show
  1. package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  2. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  3. package/browser/find-options/FindOptionsUtils.d.ts +2 -0
  4. package/browser/find-options/FindOptionsUtils.js +19 -1
  5. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  6. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +10 -4
  7. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  8. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  9. package/browser/query-builder/SelectQueryBuilder.js +20 -4
  10. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  11. package/browser/repository/TreeRepository.d.ts +3 -3
  12. package/browser/repository/TreeRepository.js +28 -39
  13. package/browser/repository/TreeRepository.js.map +1 -1
  14. package/commands/InitCommand.js +2 -1
  15. package/commands/InitCommand.js.map +1 -1
  16. package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  17. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  18. package/find-options/FindOptionsUtils.d.ts +2 -0
  19. package/find-options/FindOptionsUtils.js +19 -1
  20. package/find-options/FindOptionsUtils.js.map +1 -1
  21. package/package.json +1 -1
  22. package/persistence/subject-builder/OneToManySubjectBuilder.js +10 -4
  23. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  24. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  25. package/query-builder/SelectQueryBuilder.js +20 -4
  26. package/query-builder/SelectQueryBuilder.js.map +1 -1
  27. package/repository/TreeRepository.d.ts +3 -3
  28. package/repository/TreeRepository.js +27 -38
  29. package/repository/TreeRepository.js.map +1 -1
@@ -18,7 +18,7 @@ export declare class TreeRepository<Entity> extends Repository<Entity> {
18
18
  /**
19
19
  * Gets all children (descendants) of the given entity. Returns them all in a flat array.
20
20
  */
21
- findDescendants(entity: Entity): Promise<Entity[]>;
21
+ findDescendants(entity: Entity, options?: FindTreeOptions): Promise<Entity[]>;
22
22
  /**
23
23
  * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.
24
24
  */
@@ -34,11 +34,11 @@ export declare class TreeRepository<Entity> extends Repository<Entity> {
34
34
  /**
35
35
  * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.
36
36
  */
37
- findAncestors(entity: Entity): Promise<Entity[]>;
37
+ findAncestors(entity: Entity, options?: FindTreeOptions): Promise<Entity[]>;
38
38
  /**
39
39
  * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.
40
40
  */
41
- findAncestorsTree(entity: Entity): Promise<Entity>;
41
+ findAncestorsTree(entity: Entity, options?: FindTreeOptions): Promise<Entity>;
42
42
  /**
43
43
  * Gets number of ancestors of the entity.
44
44
  */
@@ -1,8 +1,7 @@
1
- import { __awaiter, __extends, __generator, __read, __spreadArray } from "tslib";
1
+ import { __awaiter, __extends, __generator } from "tslib";
2
2
  import { Repository } from "./Repository";
3
3
  import { AbstractSqliteDriver } from "../driver/sqlite-abstract/AbstractSqliteDriver";
4
4
  import { TypeORMError } from "../error/TypeORMError";
5
- import { FindRelationsNotFoundError } from "../error";
6
5
  import { FindOptionsUtils } from "../find-options/FindOptionsUtils";
7
6
  /**
8
7
  * Repository with additional functions to work with trees.
@@ -46,15 +45,7 @@ var TreeRepository = /** @class */ (function (_super) {
46
45
  var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };
47
46
  var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);
48
47
  var qb = this.createQueryBuilder("treeEntity");
49
- if (options === null || options === void 0 ? void 0 : options.relations) {
50
- var allRelations = __spreadArray([], __read(options.relations), false);
51
- FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, "");
52
- // recursive removes found relations from allRelations array
53
- // if there are relations left in this array it means those relations were not found in the entity structure
54
- // so, we give an exception about not found relations
55
- if (allRelations.length > 0)
56
- throw new FindRelationsNotFoundError(allRelations);
57
- }
48
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);
58
49
  return qb
59
50
  .where(escapeAlias("treeEntity") + "." + escapeColumn(parentPropertyName) + " IS NULL")
60
51
  .getMany();
@@ -62,30 +53,22 @@ var TreeRepository = /** @class */ (function (_super) {
62
53
  /**
63
54
  * Gets all children (descendants) of the given entity. Returns them all in a flat array.
64
55
  */
65
- TreeRepository.prototype.findDescendants = function (entity) {
66
- return this
67
- .createDescendantsQueryBuilder("treeEntity", "treeClosure", entity)
68
- .getMany();
56
+ TreeRepository.prototype.findDescendants = function (entity, options) {
57
+ var qb = this.createDescendantsQueryBuilder("treeEntity", "treeClosure", entity);
58
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);
59
+ return qb.getMany();
69
60
  };
70
61
  /**
71
62
  * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.
72
63
  */
73
64
  TreeRepository.prototype.findDescendantsTree = function (entity, options) {
74
65
  return __awaiter(this, void 0, void 0, function () {
75
- var qb, allRelations, entities, relationMaps;
66
+ var qb, entities, relationMaps;
76
67
  return __generator(this, function (_a) {
77
68
  switch (_a.label) {
78
69
  case 0:
79
70
  qb = this.createDescendantsQueryBuilder("treeEntity", "treeClosure", entity);
80
- if (options === null || options === void 0 ? void 0 : options.relations) {
81
- allRelations = __spreadArray([], __read(options.relations), false);
82
- FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, "");
83
- // recursive removes found relations from allRelations array
84
- // if there are relations left in this array it means those relations were not found in the entity structure
85
- // so, we give an exception about not found relations
86
- if (allRelations.length > 0)
87
- throw new FindRelationsNotFoundError(allRelations);
88
- }
71
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);
89
72
  return [4 /*yield*/, qb.getRawAndEntities()];
90
73
  case 1:
91
74
  entities = _a.sent();
@@ -161,24 +144,30 @@ var TreeRepository = /** @class */ (function (_super) {
161
144
  /**
162
145
  * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.
163
146
  */
164
- TreeRepository.prototype.findAncestors = function (entity) {
165
- return this
166
- .createAncestorsQueryBuilder("treeEntity", "treeClosure", entity)
167
- .getMany();
147
+ TreeRepository.prototype.findAncestors = function (entity, options) {
148
+ var qb = this.createAncestorsQueryBuilder("treeEntity", "treeClosure", entity);
149
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);
150
+ return qb.getMany();
168
151
  };
169
152
  /**
170
153
  * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.
171
154
  */
172
- TreeRepository.prototype.findAncestorsTree = function (entity) {
173
- var _this = this;
174
- // todo: throw exception if there is no column of this relation?
175
- return this
176
- .createAncestorsQueryBuilder("treeEntity", "treeClosure", entity)
177
- .getRawAndEntities()
178
- .then(function (entitiesAndScalars) {
179
- var relationMaps = _this.createRelationMaps("treeEntity", entitiesAndScalars.raw);
180
- _this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);
181
- return entity;
155
+ TreeRepository.prototype.findAncestorsTree = function (entity, options) {
156
+ return __awaiter(this, void 0, void 0, function () {
157
+ var qb, entities, relationMaps;
158
+ return __generator(this, function (_a) {
159
+ switch (_a.label) {
160
+ case 0:
161
+ qb = this.createAncestorsQueryBuilder("treeEntity", "treeClosure", entity);
162
+ FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);
163
+ return [4 /*yield*/, qb.getRawAndEntities()];
164
+ case 1:
165
+ entities = _a.sent();
166
+ relationMaps = this.createRelationMaps("treeEntity", entities.raw);
167
+ this.buildParentEntityTree(entity, entities.entities, relationMaps);
168
+ return [2 /*return*/, entity];
169
+ }
170
+ });
182
171
  });
183
172
  };
184
173
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/repository/TreeRepository.ts"],"names":[],"mappings":"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","file":"TreeRepository.js","sourcesContent":["import {Repository} from \"./Repository\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { TypeORMError } from \"../error/TypeORMError\";\nimport { FindTreeOptions } from \"../find-options/FindTreeOptions\";\nimport { FindRelationsNotFoundError } from \"../error\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\n\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nexport class TreeRepository<Entity> extends Repository<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets complete trees for all roots in the table.\n */\n async findTrees(options?: FindTreeOptions): Promise<Entity[]> {\n const roots = await this.findRoots(options);\n await Promise.all(roots.map(root => this.findDescendantsTree(root, options)));\n return roots;\n }\n\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n findRoots(options?: FindTreeOptions): Promise<Entity[]> {\n const escapeAlias = (alias: string) => this.manager.connection.driver.escape(alias);\n const escapeColumn = (column: string) => this.manager.connection.driver.escape(column);\n const parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(\n this.metadata.treeParentRelation!.propertyName, this.metadata.primaryColumns[0].propertyName\n );\n\n const qb = this.createQueryBuilder(\"treeEntity\");\n\n if (options?.relations) {\n const allRelations = [...options.relations];\n\n FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias!.name, qb.expressionMap.mainAlias!.metadata, \"\");\n\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n\n\n return qb\n .where(`${escapeAlias(\"treeEntity\")}.${escapeColumn(parentPropertyName)} IS NULL`)\n .getMany();\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n findDescendants(entity: Entity): Promise<Entity[]> {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n async findDescendantsTree(entity: Entity, options?: FindTreeOptions): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n\n const qb: SelectQueryBuilder<Entity> = this.createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity);\n\n if (options?.relations) {\n // Copy because `applyRelationsRecursively` modifies it\n const allRelations = [...options.relations];\n\n FindOptionsUtils.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias!.name, qb.expressionMap.mainAlias!.metadata, \"\");\n\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = this.createRelationMaps(\"treeEntity\", entities.raw);\n this.buildChildrenEntityTree(entity, entities.entities, relationMaps);\n\n return entity;\n }\n\n /**\n * Gets number of descendants of the entity.\n */\n countDescendants(entity: Entity): Promise<number> {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n }\n\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n createDescendantsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n // create shortcuts for better readability\n const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n\n const joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn!.propertyPath);\n }).join(\" AND \");\n\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn!.propertyName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters);\n\n } else if (this.metadata.treeType === \"nested-set\") {\n\n const whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn!.propertyPath;\n const parameters: ObjectLiteral = {};\n const joinCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters);\n\n } else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(qb => {\n const subQuery = qb.subQuery()\n .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity));\n\n if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE ${subQuery.getQuery()} || '%'`;\n } else {\n return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE CONCAT(${subQuery.getQuery()}, '%')`;\n }\n });\n }\n\n throw new TypeORMError(`Supported only in tree entities`);\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n findAncestors(entity: Entity): Promise<Entity[]> {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n findAncestorsTree(entity: Entity): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(entitiesAndScalars => {\n const relationMaps = this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n }\n\n /**\n * Gets number of ancestors of the entity.\n */\n countAncestors(entity: Entity): Promise<number> {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n }\n\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n createAncestorsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn!.propertyName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters);\n\n } else if (this.metadata.treeType === \"nested-set\") {\n\n const joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn!.propertyPath;\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters);\n\n\n } else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(qb => {\n const subQuery = qb.subQuery()\n .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity));\n\n if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return `${subQuery.getQuery()} LIKE ${alias}.${this.metadata.materializedPathColumn!.propertyPath} || '%'`;\n\n } else {\n return `${subQuery.getQuery()} LIKE CONCAT(${alias}.${this.metadata.materializedPathColumn!.propertyPath}, '%')`;\n }\n });\n }\n\n throw new TypeORMError(`Supported only in tree entities`);\n }\n\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise<void> {\n return Promise.resolve();\n } */\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected createRelationMaps(alias: string, rawResults: any[]): { id: any, parentId: any }[] {\n return rawResults.map(rawResult => {\n const joinColumn = this.metadata.treeParentRelation!.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n const joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n const id = rawResult[alias + \"_\" + this.metadata.primaryColumns[0].databaseName];\n const parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: this.manager.connection.driver.prepareHydratedValue(id, this.metadata.primaryColumns[0]),\n parentId: this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n }\n\n protected buildChildrenEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n const childProperty = this.metadata.treeChildrenRelation!.propertyName;\n const parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n const childRelationMaps = relationMaps.filter(relationMap => relationMap.parentId === parentEntityId);\n const childIds = new Set(childRelationMaps.map(relationMap => relationMap.id));\n entity[childProperty] = entities.filter(entity => childIds.has(this.metadata.primaryColumns[0].getEntityValue(entity)));\n entity[childProperty].forEach((childEntity: any) => {\n this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n }\n\n protected buildParentEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n const parentProperty = this.metadata.treeParentRelation!.propertyName;\n const entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n const parentRelationMap = relationMaps.find(relationMap => relationMap.id === entityId);\n const parentEntity = entities.find(entity => {\n if (!parentRelationMap)\n return false;\n\n return this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/repository/TreeRepository.ts"],"names":[],"mappings":"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","file":"TreeRepository.js","sourcesContent":["import {Repository} from \"./Repository\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { TypeORMError } from \"../error/TypeORMError\";\nimport { FindTreeOptions } from \"../find-options/FindTreeOptions\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\n\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nexport class TreeRepository<Entity> extends Repository<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets complete trees for all roots in the table.\n */\n async findTrees(options?: FindTreeOptions): Promise<Entity[]> {\n const roots = await this.findRoots(options);\n await Promise.all(roots.map(root => this.findDescendantsTree(root, options)));\n return roots;\n }\n\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n findRoots(options?: FindTreeOptions): Promise<Entity[]> {\n const escapeAlias = (alias: string) => this.manager.connection.driver.escape(alias);\n const escapeColumn = (column: string) => this.manager.connection.driver.escape(column);\n const parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(\n this.metadata.treeParentRelation!.propertyName, this.metadata.primaryColumns[0].propertyName\n );\n\n const qb = this.createQueryBuilder(\"treeEntity\");\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n return qb\n .where(`${escapeAlias(\"treeEntity\")}.${escapeColumn(parentPropertyName)} IS NULL`)\n .getMany();\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n findDescendants(entity: Entity, options?: FindTreeOptions): Promise<Entity[]> {\n const qb = this.createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity);\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n return qb.getMany();\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n async findDescendantsTree(entity: Entity, options?: FindTreeOptions): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n\n const qb: SelectQueryBuilder<Entity> = this.createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity);\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = this.createRelationMaps(\"treeEntity\", entities.raw);\n this.buildChildrenEntityTree(entity, entities.entities, relationMaps);\n\n return entity;\n }\n\n /**\n * Gets number of descendants of the entity.\n */\n countDescendants(entity: Entity): Promise<number> {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n }\n\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n createDescendantsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n // create shortcuts for better readability\n const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n\n const joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn!.propertyPath);\n }).join(\" AND \");\n\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn!.propertyName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters);\n\n } else if (this.metadata.treeType === \"nested-set\") {\n\n const whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn!.propertyPath;\n const parameters: ObjectLiteral = {};\n const joinCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters);\n\n } else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(qb => {\n const subQuery = qb.subQuery()\n .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity));\n\n if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE ${subQuery.getQuery()} || '%'`;\n } else {\n return `${alias}.${this.metadata.materializedPathColumn!.propertyPath} LIKE CONCAT(${subQuery.getQuery()}, '%')`;\n }\n });\n }\n\n throw new TypeORMError(`Supported only in tree entities`);\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n findAncestors(entity: Entity, options?: FindTreeOptions): Promise<Entity[]> {\n const qb = this.createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity);\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n return qb.getMany();\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n async findAncestorsTree(entity: Entity, options?: FindTreeOptions): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n const qb = this.createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity);\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = this.createRelationMaps(\"treeEntity\", entities.raw);\n this.buildParentEntityTree(entity, entities.entities, relationMaps);\n return entity;\n }\n\n /**\n * Gets number of ancestors of the entity.\n */\n countAncestors(entity: Entity): Promise<number> {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n }\n\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n createAncestorsQueryBuilder(alias: string, closureTableAlias: string, entity: Entity): SelectQueryBuilder<Entity> {\n\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(column => {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(column => {\n parameters[column.referencedColumn!.propertyName] = column.referencedColumn!.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn!.propertyName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters);\n\n } else if (this.metadata.treeType === \"nested-set\") {\n\n const joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn!.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn!.propertyPath;\n const parameters: ObjectLiteral = {};\n const whereCondition = this.metadata.treeParentRelation!.joinColumns.map(joinColumn => {\n const parameterName = joinColumn.referencedColumn!.propertyPath.replace(\".\", \"_\");\n parameters[parameterName] = joinColumn.referencedColumn!.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn!.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters);\n\n\n } else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(qb => {\n const subQuery = qb.subQuery()\n .select(`${this.metadata.targetName}.${this.metadata.materializedPathColumn!.propertyPath}`, \"path\")\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity));\n\n if (this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return `${subQuery.getQuery()} LIKE ${alias}.${this.metadata.materializedPathColumn!.propertyPath} || '%'`;\n\n } else {\n return `${subQuery.getQuery()} LIKE CONCAT(${alias}.${this.metadata.materializedPathColumn!.propertyPath}, '%')`;\n }\n });\n }\n\n throw new TypeORMError(`Supported only in tree entities`);\n }\n\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise<void> {\n return Promise.resolve();\n } */\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected createRelationMaps(alias: string, rawResults: any[]): { id: any, parentId: any }[] {\n return rawResults.map(rawResult => {\n const joinColumn = this.metadata.treeParentRelation!.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n const joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n const id = rawResult[alias + \"_\" + this.metadata.primaryColumns[0].databaseName];\n const parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: this.manager.connection.driver.prepareHydratedValue(id, this.metadata.primaryColumns[0]),\n parentId: this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n }\n\n protected buildChildrenEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n const childProperty = this.metadata.treeChildrenRelation!.propertyName;\n const parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n const childRelationMaps = relationMaps.filter(relationMap => relationMap.parentId === parentEntityId);\n const childIds = new Set(childRelationMaps.map(relationMap => relationMap.id));\n entity[childProperty] = entities.filter(entity => childIds.has(this.metadata.primaryColumns[0].getEntityValue(entity)));\n entity[childProperty].forEach((childEntity: any) => {\n this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n }\n\n protected buildParentEntityTree(entity: any, entities: any[], relationMaps: { id: any, parentId: any }[]): void {\n const parentProperty = this.metadata.treeParentRelation!.propertyName;\n const entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n const parentRelationMap = relationMaps.find(relationMap => relationMap.id === entityId);\n const parentEntity = entities.find(entity => {\n if (!parentRelationMap)\n return false;\n\n return this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n }\n\n}\n"],"sourceRoot":".."}
@@ -402,7 +402,8 @@ var InitCommand = /** @class */ (function () {
402
402
  if (!packageJson.scripts)
403
403
  packageJson.scripts = {};
404
404
  Object.assign(packageJson.scripts, {
405
- start: /*(docker ? "docker-compose up && " : "") + */ "ts-node src/index.ts"
405
+ start: /*(docker ? "docker-compose up && " : "") + */ "ts-node src/index.ts",
406
+ typeorm: "node --require ts-node/register ./node_modules/typeorm/cli.js"
406
407
  });
407
408
  return JSON.stringify(packageJson, undefined, 3);
408
409
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/InitCommand.ts"],"names":[],"mappings":"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","file":"InitCommand.js","sourcesContent":["import { CommandUtils } from \"./CommandUtils\";\nimport { ObjectLiteral } from \"../common/ObjectLiteral\";\nimport * as path from \"path\";\nimport * as yargs from \"yargs\";\nimport chalk from \"chalk\";\nimport { exec } from \"child_process\";\nimport { TypeORMError } from \"../error/TypeORMError\";\n\n/**\n * Generates a new project with TypeORM.\n */\nexport class InitCommand implements yargs.CommandModule {\n command = \"init\";\n describe = \"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(\"c\", {\n alias: \"connection\",\n default: \"default\",\n describe: \"Name of the connection on which to run a query\"\n })\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: \"Indicates if express should be included in the project.\"\n })\n .option(\"docker\", {\n describe: \"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 }\n\n async handler(args: yargs.Arguments) {\n try {\n const database: string = args.database as any || \"mysql\";\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 ? path.basename(args.name as any) : undefined;\n const installNpm = args.pm === \"yarn\" ? false : true;\n await CommandUtils.createFile(basePath + \"/package.json\", InitCommand.getPackageJsonTemplate(projectName), false);\n if (isDocker)\n await CommandUtils.createFile(basePath + \"/docker-compose.yml\", InitCommand.getDockerComposeTemplate(database), false);\n await CommandUtils.createFile(basePath + \"/.gitignore\", InitCommand.getGitIgnoreFile());\n await CommandUtils.createFile(basePath + \"/README.md\", InitCommand.getReadmeTemplate({ docker: isDocker }), false);\n await CommandUtils.createFile(basePath + \"/tsconfig.json\", InitCommand.getTsConfigTemplate());\n await CommandUtils.createFile(basePath + \"/ormconfig.json\", InitCommand.getOrmConfigTemplate(database));\n await CommandUtils.createFile(basePath + \"/src/entity/User.ts\", InitCommand.getUserEntityTemplate(database));\n await CommandUtils.createFile(basePath + \"/src/index.ts\", InitCommand.getAppIndexTemplate(isExpress));\n await CommandUtils.createDirectories(basePath + \"/src/migration\");\n\n // generate extra files for express application\n if (isExpress) {\n await CommandUtils.createFile(basePath + \"/src/routes.ts\", InitCommand.getRoutesTemplate());\n await CommandUtils.createFile(basePath + \"/src/controller/UserController.ts\", InitCommand.getControllerTemplate());\n }\n\n const packageJsonContents = await CommandUtils.readFile(basePath + \"/package.json\");\n await CommandUtils.createFile(basePath + \"/package.json\", InitCommand.appendPackageJson(packageJsonContents, database, isExpress));\n\n if (args.name) {\n console.log(chalk.green(`Project created inside ${chalk.blue(basePath)} directory.`));\n\n } else {\n console.log(chalk.green(`Project created inside current directory.`));\n }\n\n if (args.pm && installNpm) {\n await InitCommand.executeCommand(\"npm install\");\n } else {\n await InitCommand.executeCommand(\"yarn install\");\n }\n\n } catch (err) {\n console.log(chalk.black.bgRed(\"Error during project initialization:\"));\n console.error(err);\n process.exit(1);\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n protected static executeCommand(command: string) {\n return new Promise<string>((ok, fail) => {\n exec(command, (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 getOrmConfigTemplate(database: string): string {\n const options: ObjectLiteral = {};\n switch (database) {\n case \"mysql\":\n Object.assign(options, {\n type: \"mysql\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",\n });\n break;\n case \"mariadb\":\n Object.assign(options, {\n type: \"mariadb\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",\n });\n break;\n case \"sqlite\":\n Object.assign(options, {\n type: \"sqlite\",\n \"database\": \"database.sqlite\",\n });\n break;\n case \"better-sqlite3\":\n Object.assign(options, {\n type: \"better-sqlite3\",\n \"database\": \"database.sqlite\",\n });\n break;\n case \"postgres\":\n Object.assign(options, {\n \"type\": \"postgres\",\n \"host\": \"localhost\",\n \"port\": 5432,\n \"username\": \"test\",\n \"password\": \"test\",\n \"database\": \"test\",\n });\n break;\n case \"cockroachdb\":\n Object.assign(options, {\n \"type\": \"cockroachdb\",\n \"host\": \"localhost\",\n \"port\": 26257,\n \"username\": \"root\",\n \"password\": \"\",\n \"database\": \"defaultdb\",\n });\n break;\n case \"mssql\":\n Object.assign(options, {\n \"type\": \"mssql\",\n \"host\": \"localhost\",\n \"username\": \"sa\",\n \"password\": \"Admin12345\",\n \"database\": \"tempdb\",\n });\n break;\n case \"oracle\":\n Object.assign(options, {\n \"type\": \"oracle\",\n \"host\": \"localhost\",\n \"username\": \"system\",\n \"password\": \"oracle\",\n \"port\": 1521,\n \"sid\": \"xe.oracle.docker\",\n });\n break;\n case \"mongodb\":\n Object.assign(options, {\n \"type\": \"mongodb\",\n \"database\": \"test\",\n });\n break;\n }\n Object.assign(options, {\n synchronize: true,\n logging: false,\n entities: [\n \"src/entity/**/*.ts\"\n ],\n migrations: [\n \"src/migration/**/*.ts\"\n ],\n subscribers: [\n \"src/subscriber/**/*.ts\"\n ],\n cli: {\n entitiesDir: \"src/entity\",\n migrationsDir: \"src/migration\",\n subscribersDir: \"src/subscriber\"\n }\n });\n return JSON.stringify(options, undefined, 3);\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getTsConfigTemplate(): string {\n return JSON.stringify({\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, 3);\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, ${ database === \"mongodb\" ? \"ObjectIdColumn, ObjectID\" : \"PrimaryGeneratedColumn\" }, Column} from \"typeorm\";\n\n@Entity()\nexport class User {\n\n ${ database === \"mongodb\" ? \"@ObjectIdColumn()\" : \"@PrimaryGeneratedColumn()\" }\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(): string {\n return `import {UserController} from \"./controller/UserController\";\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(): string {\n return `import {getRepository} from \"typeorm\";\nimport {NextFunction, Request, Response} from \"express\";\nimport {User} from \"../entity/User\";\n\nexport class UserController {\n\n private userRepository = 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 return this.userRepository.findOne(request.params.id);\n }\n\n async save(request: Request, response: Response, next: NextFunction) {\n return this.userRepository.save(request.body);\n }\n\n async remove(request: Request, response: Response, next: NextFunction) {\n let userToRemove = await this.userRepository.findOne(request.params.id);\n await this.userRepository.remove(userToRemove);\n }\n\n}`;\n }\n\n /**\n * Gets contents of the main (index) application file.\n */\n protected static getAppIndexTemplate(express: boolean): string {\n if (express) {\n return `import \"reflect-metadata\";\nimport {createConnection} from \"typeorm\";\nimport * as express from \"express\";\nimport * as bodyParser from \"body-parser\";\nimport {Request, Response} from \"express\";\nimport {Routes} from \"./routes\";\nimport {User} from \"./entity/User\";\n\ncreateConnection().then(async connection => {\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 connection.manager.save(connection.manager.create(User, {\n firstName: \"Timber\",\n lastName: \"Saw\",\n age: 27\n }));\n await connection.manager.save(connection.manager.create(User, {\n firstName: \"Phantom\",\n lastName: \"Assassin\",\n age: 24\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\n } else {\n return `import \"reflect-metadata\";\nimport {createConnection} from \"typeorm\";\nimport {User} from \"./entity/User\";\n\ncreateConnection().then(async connection => {\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 connection.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 connection.manager.find(User);\n console.log(\"Loaded users: \", users);\n\n console.log(\"Here you can setup and run express/koa/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(projectName?: string): string {\n return JSON.stringify({\n name: projectName || \"new-typeorm-project\",\n version: \"0.0.1\",\n description: \"Awesome project developed with TypeORM.\",\n devDependencies: {\n },\n dependencies: {\n },\n scripts: {\n }\n }, undefined, 3);\n }\n\n /**\n * Gets contents of the new docker-compose.yml file.\n */\n protected static getDockerComposeTemplate(database: string): string {\n\n switch (database) {\n case \"mysql\":\n return `version: '3'\nservices:\n\n mysql:\n image: \"mysql:5.7.10\"\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.1.16\"\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:9.6.1\"\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:v2.1.4\"\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(`You cannot initialize a project with docker for Oracle driver yet.`); // 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:4.0.6\"\n container_name: \"typeorm-mongodb\"\n ports:\n - \"27017:27017\"\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 \\`ormconfig.json\\` 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(packageJsonContents: string, database: string, express: boolean /*, docker: boolean*/): string {\n const packageJson = JSON.parse(packageJsonContents);\n\n if (!packageJson.devDependencies) packageJson.devDependencies = {};\n Object.assign(packageJson.devDependencies, {\n \"ts-node\": \"3.3.0\",\n \"@types/node\": \"^8.0.29\",\n \"typescript\": \"3.3.3333\"\n });\n\n if (!packageJson.dependencies) packageJson.dependencies = {};\n Object.assign(packageJson.dependencies, {\n \"typeorm\": require(\"../package.json\").version,\n \"reflect-metadata\": \"^0.1.10\"\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\"] = \"^4.0.3\";\n break;\n case \"better-sqlite3\":\n packageJson.dependencies[\"better-sqlite3\"] = \"^7.0.0\";\n break;\n case \"oracle\":\n packageJson.dependencies[\"oracledb\"] = \"^1.13.1\";\n break;\n case \"mssql\":\n packageJson.dependencies[\"mssql\"] = \"^4.0.4\";\n break;\n case \"mongodb\":\n packageJson.dependencies[\"mongodb\"] = \"^3.0.8\";\n break;\n }\n\n if (express) {\n packageJson.dependencies[\"express\"] = \"^4.15.4\";\n packageJson.dependencies[\"body-parser\"] = \"^1.18.1\";\n }\n\n if (!packageJson.scripts) packageJson.scripts = {};\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */\"ts-node src/index.ts\"\n });\n return JSON.stringify(packageJson, undefined, 3);\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/commands/InitCommand.ts"],"names":[],"mappings":"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","file":"InitCommand.js","sourcesContent":["import { CommandUtils } from \"./CommandUtils\";\nimport { ObjectLiteral } from \"../common/ObjectLiteral\";\nimport * as path from \"path\";\nimport * as yargs from \"yargs\";\nimport chalk from \"chalk\";\nimport { exec } from \"child_process\";\nimport { TypeORMError } from \"../error/TypeORMError\";\n\n/**\n * Generates a new project with TypeORM.\n */\nexport class InitCommand implements yargs.CommandModule {\n command = \"init\";\n describe = \"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(\"c\", {\n alias: \"connection\",\n default: \"default\",\n describe: \"Name of the connection on which to run a query\"\n })\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: \"Indicates if express should be included in the project.\"\n })\n .option(\"docker\", {\n describe: \"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 }\n\n async handler(args: yargs.Arguments) {\n try {\n const database: string = args.database as any || \"mysql\";\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 ? path.basename(args.name as any) : undefined;\n const installNpm = args.pm === \"yarn\" ? false : true;\n await CommandUtils.createFile(basePath + \"/package.json\", InitCommand.getPackageJsonTemplate(projectName), false);\n if (isDocker)\n await CommandUtils.createFile(basePath + \"/docker-compose.yml\", InitCommand.getDockerComposeTemplate(database), false);\n await CommandUtils.createFile(basePath + \"/.gitignore\", InitCommand.getGitIgnoreFile());\n await CommandUtils.createFile(basePath + \"/README.md\", InitCommand.getReadmeTemplate({ docker: isDocker }), false);\n await CommandUtils.createFile(basePath + \"/tsconfig.json\", InitCommand.getTsConfigTemplate());\n await CommandUtils.createFile(basePath + \"/ormconfig.json\", InitCommand.getOrmConfigTemplate(database));\n await CommandUtils.createFile(basePath + \"/src/entity/User.ts\", InitCommand.getUserEntityTemplate(database));\n await CommandUtils.createFile(basePath + \"/src/index.ts\", InitCommand.getAppIndexTemplate(isExpress));\n await CommandUtils.createDirectories(basePath + \"/src/migration\");\n\n // generate extra files for express application\n if (isExpress) {\n await CommandUtils.createFile(basePath + \"/src/routes.ts\", InitCommand.getRoutesTemplate());\n await CommandUtils.createFile(basePath + \"/src/controller/UserController.ts\", InitCommand.getControllerTemplate());\n }\n\n const packageJsonContents = await CommandUtils.readFile(basePath + \"/package.json\");\n await CommandUtils.createFile(basePath + \"/package.json\", InitCommand.appendPackageJson(packageJsonContents, database, isExpress));\n\n if (args.name) {\n console.log(chalk.green(`Project created inside ${chalk.blue(basePath)} directory.`));\n\n } else {\n console.log(chalk.green(`Project created inside current directory.`));\n }\n\n if (args.pm && installNpm) {\n await InitCommand.executeCommand(\"npm install\");\n } else {\n await InitCommand.executeCommand(\"yarn install\");\n }\n\n } catch (err) {\n console.log(chalk.black.bgRed(\"Error during project initialization:\"));\n console.error(err);\n process.exit(1);\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n\n protected static executeCommand(command: string) {\n return new Promise<string>((ok, fail) => {\n exec(command, (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 getOrmConfigTemplate(database: string): string {\n const options: ObjectLiteral = {};\n switch (database) {\n case \"mysql\":\n Object.assign(options, {\n type: \"mysql\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",\n });\n break;\n case \"mariadb\":\n Object.assign(options, {\n type: \"mariadb\",\n host: \"localhost\",\n port: 3306,\n username: \"test\",\n password: \"test\",\n database: \"test\",\n });\n break;\n case \"sqlite\":\n Object.assign(options, {\n type: \"sqlite\",\n \"database\": \"database.sqlite\",\n });\n break;\n case \"better-sqlite3\":\n Object.assign(options, {\n type: \"better-sqlite3\",\n \"database\": \"database.sqlite\",\n });\n break;\n case \"postgres\":\n Object.assign(options, {\n \"type\": \"postgres\",\n \"host\": \"localhost\",\n \"port\": 5432,\n \"username\": \"test\",\n \"password\": \"test\",\n \"database\": \"test\",\n });\n break;\n case \"cockroachdb\":\n Object.assign(options, {\n \"type\": \"cockroachdb\",\n \"host\": \"localhost\",\n \"port\": 26257,\n \"username\": \"root\",\n \"password\": \"\",\n \"database\": \"defaultdb\",\n });\n break;\n case \"mssql\":\n Object.assign(options, {\n \"type\": \"mssql\",\n \"host\": \"localhost\",\n \"username\": \"sa\",\n \"password\": \"Admin12345\",\n \"database\": \"tempdb\",\n });\n break;\n case \"oracle\":\n Object.assign(options, {\n \"type\": \"oracle\",\n \"host\": \"localhost\",\n \"username\": \"system\",\n \"password\": \"oracle\",\n \"port\": 1521,\n \"sid\": \"xe.oracle.docker\",\n });\n break;\n case \"mongodb\":\n Object.assign(options, {\n \"type\": \"mongodb\",\n \"database\": \"test\",\n });\n break;\n }\n Object.assign(options, {\n synchronize: true,\n logging: false,\n entities: [\n \"src/entity/**/*.ts\"\n ],\n migrations: [\n \"src/migration/**/*.ts\"\n ],\n subscribers: [\n \"src/subscriber/**/*.ts\"\n ],\n cli: {\n entitiesDir: \"src/entity\",\n migrationsDir: \"src/migration\",\n subscribersDir: \"src/subscriber\"\n }\n });\n return JSON.stringify(options, undefined, 3);\n }\n\n /**\n * Gets contents of the ormconfig file.\n */\n protected static getTsConfigTemplate(): string {\n return JSON.stringify({\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, 3);\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, ${ database === \"mongodb\" ? \"ObjectIdColumn, ObjectID\" : \"PrimaryGeneratedColumn\" }, Column} from \"typeorm\";\n\n@Entity()\nexport class User {\n\n ${ database === \"mongodb\" ? \"@ObjectIdColumn()\" : \"@PrimaryGeneratedColumn()\" }\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(): string {\n return `import {UserController} from \"./controller/UserController\";\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(): string {\n return `import {getRepository} from \"typeorm\";\nimport {NextFunction, Request, Response} from \"express\";\nimport {User} from \"../entity/User\";\n\nexport class UserController {\n\n private userRepository = 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 return this.userRepository.findOne(request.params.id);\n }\n\n async save(request: Request, response: Response, next: NextFunction) {\n return this.userRepository.save(request.body);\n }\n\n async remove(request: Request, response: Response, next: NextFunction) {\n let userToRemove = await this.userRepository.findOne(request.params.id);\n await this.userRepository.remove(userToRemove);\n }\n\n}`;\n }\n\n /**\n * Gets contents of the main (index) application file.\n */\n protected static getAppIndexTemplate(express: boolean): string {\n if (express) {\n return `import \"reflect-metadata\";\nimport {createConnection} from \"typeorm\";\nimport * as express from \"express\";\nimport * as bodyParser from \"body-parser\";\nimport {Request, Response} from \"express\";\nimport {Routes} from \"./routes\";\nimport {User} from \"./entity/User\";\n\ncreateConnection().then(async connection => {\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 connection.manager.save(connection.manager.create(User, {\n firstName: \"Timber\",\n lastName: \"Saw\",\n age: 27\n }));\n await connection.manager.save(connection.manager.create(User, {\n firstName: \"Phantom\",\n lastName: \"Assassin\",\n age: 24\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\n } else {\n return `import \"reflect-metadata\";\nimport {createConnection} from \"typeorm\";\nimport {User} from \"./entity/User\";\n\ncreateConnection().then(async connection => {\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 connection.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 connection.manager.find(User);\n console.log(\"Loaded users: \", users);\n\n console.log(\"Here you can setup and run express/koa/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(projectName?: string): string {\n return JSON.stringify({\n name: projectName || \"new-typeorm-project\",\n version: \"0.0.1\",\n description: \"Awesome project developed with TypeORM.\",\n devDependencies: {\n },\n dependencies: {\n },\n scripts: {\n }\n }, undefined, 3);\n }\n\n /**\n * Gets contents of the new docker-compose.yml file.\n */\n protected static getDockerComposeTemplate(database: string): string {\n\n switch (database) {\n case \"mysql\":\n return `version: '3'\nservices:\n\n mysql:\n image: \"mysql:5.7.10\"\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.1.16\"\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:9.6.1\"\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:v2.1.4\"\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(`You cannot initialize a project with docker for Oracle driver yet.`); // 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:4.0.6\"\n container_name: \"typeorm-mongodb\"\n ports:\n - \"27017:27017\"\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 \\`ormconfig.json\\` 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(packageJsonContents: string, database: string, express: boolean /*, docker: boolean*/): string {\n const packageJson = JSON.parse(packageJsonContents);\n\n if (!packageJson.devDependencies) packageJson.devDependencies = {};\n Object.assign(packageJson.devDependencies, {\n \"ts-node\": \"3.3.0\",\n \"@types/node\": \"^8.0.29\",\n \"typescript\": \"3.3.3333\"\n });\n\n if (!packageJson.dependencies) packageJson.dependencies = {};\n Object.assign(packageJson.dependencies, {\n \"typeorm\": require(\"../package.json\").version,\n \"reflect-metadata\": \"^0.1.10\"\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\"] = \"^4.0.3\";\n break;\n case \"better-sqlite3\":\n packageJson.dependencies[\"better-sqlite3\"] = \"^7.0.0\";\n break;\n case \"oracle\":\n packageJson.dependencies[\"oracledb\"] = \"^1.13.1\";\n break;\n case \"mssql\":\n packageJson.dependencies[\"mssql\"] = \"^4.0.4\";\n break;\n case \"mongodb\":\n packageJson.dependencies[\"mongodb\"] = \"^3.0.8\";\n break;\n }\n\n if (express) {\n packageJson.dependencies[\"express\"] = \"^4.15.4\";\n packageJson.dependencies[\"body-parser\"] = \"^1.18.1\";\n }\n\n if (!packageJson.scripts) packageJson.scripts = {};\n Object.assign(packageJson.scripts, {\n start: /*(docker ? \"docker-compose up && \" : \"\") + */\"ts-node src/index.ts\",\n typeorm: \"node --require ts-node/register ./node_modules/typeorm/cli.js\"\n });\n return JSON.stringify(packageJson, undefined, 3);\n }\n\n}\n"],"sourceRoot":".."}
@@ -2320,7 +2320,7 @@ var CockroachQueryRunner = /** @class */ (function (_super) {
2320
2320
  tableColumn.generationStrategy = "uuid";
2321
2321
  }
2322
2322
  else {
2323
- tableColumn.default = dbColumn["column_default"].replace(/:::.*/, "");
2323
+ tableColumn.default = dbColumn["column_default"].replace(/:::[\w\s\[\]\"]+/g, "");
2324
2324
  tableColumn.default = tableColumn.default.replace(/^(-?[\d\.]+)$/, "($1)");
2325
2325
  }
2326
2326
  }