typeorm 0.3.12-dev.0eb7441 → 0.3.12-dev.12fdd73
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/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
- package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/mongodb/MongoDriver.d.ts +1 -1
- package/browser/driver/mongodb/MongoDriver.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.d.ts +1 -1
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.d.ts +1 -1
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.d.ts +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/find-options/FindOperatorType.d.ts +1 -1
- package/browser/find-options/FindOperatorType.js.map +1 -1
- package/browser/find-options/operator/JsonContains.d.ts +6 -0
- package/browser/find-options/operator/JsonContains.js +10 -0
- package/browser/find-options/operator/JsonContains.js.map +1 -0
- package/browser/index.d.ts +2 -0
- package/browser/index.js +2 -0
- package/browser/index.js.map +1 -1
- package/browser/logger/AbstractLogger.d.ts +49 -0
- package/browser/logger/AbstractLogger.js +230 -0
- package/browser/logger/AbstractLogger.js.map +1 -0
- package/browser/logger/AdvancedConsoleLogger.d.ts +5 -33
- package/browser/logger/AdvancedConsoleLogger.js +41 -106
- package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
- package/browser/logger/DebugLogger.d.ts +9 -29
- package/browser/logger/DebugLogger.js +56 -74
- package/browser/logger/DebugLogger.js.map +1 -1
- package/browser/logger/FileLogger.d.ts +6 -32
- package/browser/logger/FileLogger.js +50 -97
- package/browser/logger/FileLogger.js.map +1 -1
- package/browser/logger/Logger.d.ts +31 -0
- package/browser/logger/Logger.js.map +1 -1
- package/browser/logger/LoggerOptions.d.ts +2 -1
- package/browser/logger/LoggerOptions.js.map +1 -1
- package/browser/logger/SimpleConsoleLogger.d.ts +5 -33
- package/browser/logger/SimpleConsoleLogger.js +43 -106
- package/browser/logger/SimpleConsoleLogger.js.map +1 -1
- package/browser/persistence/SubjectTopoligicalSorter.js +2 -6
- package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
- package/browser/platform/PlatformTools.d.ts +2 -0
- package/browser/platform/PlatformTools.js +6 -0
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/QueryBuilder.js +2 -0
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/WhereClause.d.ts +1 -1
- package/browser/query-builder/WhereClause.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/mongodb/MongoDriver.d.ts +1 -1
- package/driver/mongodb/MongoDriver.js.map +1 -1
- package/driver/oracle/OracleDriver.d.ts +1 -1
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +1 -1
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.d.ts +1 -1
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +1 -1
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.d.ts +1 -1
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/find-options/FindOperatorType.d.ts +1 -1
- package/find-options/FindOperatorType.js.map +1 -1
- package/find-options/operator/JsonContains.d.ts +6 -0
- package/find-options/operator/JsonContains.js +14 -0
- package/find-options/operator/JsonContains.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/index.mjs +4 -0
- package/logger/AbstractLogger.d.ts +49 -0
- package/logger/AbstractLogger.js +234 -0
- package/logger/AbstractLogger.js.map +1 -0
- package/logger/AdvancedConsoleLogger.d.ts +5 -33
- package/logger/AdvancedConsoleLogger.js +41 -106
- package/logger/AdvancedConsoleLogger.js.map +1 -1
- package/logger/DebugLogger.d.ts +9 -29
- package/logger/DebugLogger.js +56 -75
- package/logger/DebugLogger.js.map +1 -1
- package/logger/FileLogger.d.ts +6 -32
- package/logger/FileLogger.js +50 -97
- package/logger/FileLogger.js.map +1 -1
- package/logger/Logger.d.ts +31 -0
- package/logger/Logger.js.map +1 -1
- package/logger/LoggerOptions.d.ts +2 -1
- package/logger/LoggerOptions.js.map +1 -1
- package/logger/SimpleConsoleLogger.d.ts +5 -33
- package/logger/SimpleConsoleLogger.js +43 -106
- package/logger/SimpleConsoleLogger.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectTopoligicalSorter.js +2 -6
- package/persistence/SubjectTopoligicalSorter.js.map +1 -1
- package/platform/PlatformTools.d.ts +2 -0
- package/platform/PlatformTools.js +6 -0
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/QueryBuilder.js +2 -0
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/WhereClause.d.ts +1 -1
- package/query-builder/WhereClause.js.map +1 -1
|
@@ -1,115 +1,52 @@
|
|
|
1
|
+
import { AbstractLogger } from "./AbstractLogger";
|
|
1
2
|
/**
|
|
2
3
|
* Performs logging of the events in TypeORM.
|
|
3
4
|
* This version of logger uses console to log events and does not use syntax highlighting.
|
|
4
5
|
*/
|
|
5
|
-
export class SimpleConsoleLogger {
|
|
6
|
-
// -------------------------------------------------------------------------
|
|
7
|
-
// Constructor
|
|
8
|
-
// -------------------------------------------------------------------------
|
|
9
|
-
constructor(options) {
|
|
10
|
-
this.options = options;
|
|
11
|
-
}
|
|
12
|
-
// -------------------------------------------------------------------------
|
|
13
|
-
// Public Methods
|
|
14
|
-
// -------------------------------------------------------------------------
|
|
15
|
-
/**
|
|
16
|
-
* Logs query and parameters used in it.
|
|
17
|
-
*/
|
|
18
|
-
logQuery(query, parameters, queryRunner) {
|
|
19
|
-
if (this.options === "all" ||
|
|
20
|
-
this.options === true ||
|
|
21
|
-
(Array.isArray(this.options) &&
|
|
22
|
-
this.options.indexOf("query") !== -1)) {
|
|
23
|
-
const sql = query +
|
|
24
|
-
(parameters && parameters.length
|
|
25
|
-
? " -- PARAMETERS: " + this.stringifyParams(parameters)
|
|
26
|
-
: "");
|
|
27
|
-
console.log("query" + ": " + sql);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Logs query that is failed.
|
|
32
|
-
*/
|
|
33
|
-
logQueryError(error, query, parameters, queryRunner) {
|
|
34
|
-
if (this.options === "all" ||
|
|
35
|
-
this.options === true ||
|
|
36
|
-
(Array.isArray(this.options) &&
|
|
37
|
-
this.options.indexOf("error") !== -1)) {
|
|
38
|
-
const sql = query +
|
|
39
|
-
(parameters && parameters.length
|
|
40
|
-
? " -- PARAMETERS: " + this.stringifyParams(parameters)
|
|
41
|
-
: "");
|
|
42
|
-
console.log(`query failed: ` + sql);
|
|
43
|
-
console.log(`error:`, error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Logs query that is slow.
|
|
48
|
-
*/
|
|
49
|
-
logQuerySlow(time, query, parameters, queryRunner) {
|
|
50
|
-
const sql = query +
|
|
51
|
-
(parameters && parameters.length
|
|
52
|
-
? " -- PARAMETERS: " + this.stringifyParams(parameters)
|
|
53
|
-
: "");
|
|
54
|
-
console.log(`query is slow: ` + sql);
|
|
55
|
-
console.log(`execution time: ` + time);
|
|
56
|
-
}
|
|
6
|
+
export class SimpleConsoleLogger extends AbstractLogger {
|
|
57
7
|
/**
|
|
58
|
-
*
|
|
8
|
+
* Write log to specific output.
|
|
59
9
|
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
// Protected Methods
|
|
101
|
-
// -------------------------------------------------------------------------
|
|
102
|
-
/**
|
|
103
|
-
* Converts parameters to a string.
|
|
104
|
-
* Sometimes parameters can have circular objects and therefor we are handle this case too.
|
|
105
|
-
*/
|
|
106
|
-
stringifyParams(parameters) {
|
|
107
|
-
try {
|
|
108
|
-
return JSON.stringify(parameters);
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
// most probably circular objects in parameters
|
|
112
|
-
return parameters;
|
|
10
|
+
writeLog(level, logMessage, queryRunner) {
|
|
11
|
+
var _a;
|
|
12
|
+
const messages = this.prepareLogMessages(logMessage, {
|
|
13
|
+
highlightSql: false,
|
|
14
|
+
});
|
|
15
|
+
for (let message of messages) {
|
|
16
|
+
switch ((_a = message.type) !== null && _a !== void 0 ? _a : level) {
|
|
17
|
+
case "log":
|
|
18
|
+
case "schema-build":
|
|
19
|
+
case "migration":
|
|
20
|
+
console.log(message.message);
|
|
21
|
+
break;
|
|
22
|
+
case "info":
|
|
23
|
+
case "query":
|
|
24
|
+
if (message.prefix) {
|
|
25
|
+
console.info(message.prefix, message.message);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.info(message.message);
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
case "warn":
|
|
32
|
+
case "query-slow":
|
|
33
|
+
if (message.prefix) {
|
|
34
|
+
console.warn(message.prefix, message.message);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.warn(message.message);
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case "error":
|
|
41
|
+
case "query-error":
|
|
42
|
+
if (message.prefix) {
|
|
43
|
+
console.error(message.prefix, message.message);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.error(message.message);
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
113
50
|
}
|
|
114
51
|
}
|
|
115
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/logger/SimpleConsoleLogger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../browser/src/logger/SimpleConsoleLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACnD;;OAEG;IACO,QAAQ,CACd,KAAe,EACf,UAAqC,EACrC,WAAyB;;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;YACjD,YAAY,EAAE,KAAK;SACtB,CAAC,CAAA;QAEF,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;YAC1B,QAAQ,MAAA,OAAO,CAAC,IAAI,mCAAI,KAAK,EAAE;gBAC3B,KAAK,KAAK,CAAC;gBACX,KAAK,cAAc,CAAC;gBACpB,KAAK,WAAW;oBACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;oBAC5B,MAAK;gBAET,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO;oBACR,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;qBAChD;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;qBAChC;oBACD,MAAK;gBAET,KAAK,MAAM,CAAC;gBACZ,KAAK,YAAY;oBACb,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;qBAChD;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;qBAChC;oBACD,MAAK;gBAET,KAAK,OAAO,CAAC;gBACb,KAAK,aAAa;oBACd,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;qBACjD;yBAAM;wBACH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;qBACjC;oBACD,MAAK;aACZ;SACJ;IACL,CAAC;CACJ","file":"SimpleConsoleLogger.js","sourcesContent":["import { AbstractLogger } from \"./AbstractLogger\"\nimport { LogLevel, LogMessage } from \"./Logger\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\n\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and does not use syntax highlighting.\n */\nexport class SimpleConsoleLogger extends AbstractLogger {\n /**\n * Write log to specific output.\n */\n protected writeLog(\n level: LogLevel,\n logMessage: LogMessage | LogMessage[],\n queryRunner?: QueryRunner,\n ) {\n const messages = this.prepareLogMessages(logMessage, {\n highlightSql: false,\n })\n\n for (let message of messages) {\n switch (message.type ?? level) {\n case \"log\":\n case \"schema-build\":\n case \"migration\":\n console.log(message.message)\n break\n\n case \"info\":\n case \"query\":\n if (message.prefix) {\n console.info(message.prefix, message.message)\n } else {\n console.info(message.message)\n }\n break\n\n case \"warn\":\n case \"query-slow\":\n if (message.prefix) {\n console.warn(message.prefix, message.message)\n } else {\n console.warn(message.message)\n }\n break\n\n case \"error\":\n case \"query-error\":\n if (message.prefix) {\n console.error(message.prefix, message.message)\n } else {\n console.error(message.message)\n }\n break\n }\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -39,12 +39,8 @@ export class SubjectTopoligicalSorter {
|
|
|
39
39
|
// go thought each of them and find all subjects with sorted entity target
|
|
40
40
|
// add those sorted targets and remove them from original array of targets
|
|
41
41
|
sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {
|
|
42
|
-
const entityTargetSubjects = this.subjects.filter((subject) =>
|
|
43
|
-
|
|
44
|
-
return subject.metadata.targetName === sortedEntityTarget ||
|
|
45
|
-
((_a = subject.metadata.parentEntityMetadata) === null || _a === void 0 ? void 0 : _a.targetName) ===
|
|
46
|
-
sortedEntityTarget;
|
|
47
|
-
});
|
|
42
|
+
const entityTargetSubjects = this.subjects.filter((subject) => subject.metadata.targetName === sortedEntityTarget ||
|
|
43
|
+
subject.metadata.inheritanceTree.some((s) => s.name === sortedEntityTarget));
|
|
48
44
|
sortedSubjects.push(...entityTargetSubjects);
|
|
49
45
|
this.removeAlreadySorted(entityTargetSubjects);
|
|
50
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import { Subject } from \"./Subject\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.parentEntityMetadata?.targetName ===\n sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n function uniqueNodes(arr: any[]) {\n let res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n sorted = new Array(cursor),\n visited: any = {},\n i = cursor\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, [])\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited[i]) return\n visited[i] = true\n\n // outgoing edges\n let outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n let preds = predecessors.concat(node)\n do {\n let child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import { Subject } from \"./Subject\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.inheritanceTree.some(\n (s) => s.name === sortedEntityTarget,\n ),\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n function uniqueNodes(arr: any[]) {\n let res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n sorted = new Array(cursor),\n visited: any = {},\n i = cursor\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, [])\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited[i]) return\n visited[i] = true\n\n // outgoing edges\n let outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n let preds = predecessors.concat(node)\n do {\n let child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -63,6 +63,8 @@ export declare class PlatformTools {
|
|
|
63
63
|
static logError(prefix: string, error: any): void;
|
|
64
64
|
static logWarn(prefix: string, warning: any): void;
|
|
65
65
|
static log(message: string): void;
|
|
66
|
+
static info(info: any): string;
|
|
67
|
+
static error(error: any): string;
|
|
66
68
|
static warn(message: string): string;
|
|
67
69
|
static logCmdErr(prefix: string, err?: any): void;
|
|
68
70
|
}
|
|
@@ -198,6 +198,12 @@ export class PlatformTools {
|
|
|
198
198
|
static log(message) {
|
|
199
199
|
console.log(chalk.underline(message));
|
|
200
200
|
}
|
|
201
|
+
static info(info) {
|
|
202
|
+
return chalk.gray(info);
|
|
203
|
+
}
|
|
204
|
+
static error(error) {
|
|
205
|
+
return chalk.red(error);
|
|
206
|
+
}
|
|
201
207
|
static warn(message) {
|
|
202
208
|
return chalk.yellow(message);
|
|
203
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/platform/PlatformTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAS,MAAM,eAAe,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,aAAa;IAMtB;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACpB,OAAO,MAAM,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,IAAY;QACpB,2HAA2H;QAC3H,8FAA8F;QAC9F,kCAAkC;QAElC,IAAI;YACA,wEAAwE;YACxE,QAAQ,IAAI,EAAE;gBACV;;mBAEG;gBACH,KAAK,SAAS;oBACV,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAA;gBAE3C;;mBAEG;gBACH,KAAK,SAAS;oBACV,OAAO,OAAO,CAAC,SAAS,CAAC,CAAA;gBAE7B;;mBAEG;gBACH,KAAK,kBAAkB;oBACnB,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAA;gBAEtC,KAAK,UAAU;oBACX,OAAO,OAAO,CAAC,UAAU,CAAC,CAAA;gBAE9B;;mBAEG;gBACH,KAAK,OAAO;oBACR,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;gBAE3B,KAAK,QAAQ;oBACT,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAE5B;;mBAEG;gBACH,KAAK,UAAU;oBACX,OAAO,OAAO,CAAC,UAAU,CAAC,CAAA;gBAE9B;;mBAEG;gBACH,KAAK,IAAI;oBACL,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;gBAExB,KAAK,WAAW;oBACZ,OAAO,OAAO,CAAC,WAAW,CAAC,CAAA;gBAE/B,KAAK,iBAAiB;oBAClB,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAA;gBAErC,KAAK,gCAAgC;oBACjC,OAAO,OAAO,CAAC,gCAAgC,CAAC,CAAA;gBAEpD;;mBAEG;gBACH,KAAK,OAAO;oBACR,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;gBAE3B,KAAK,SAAS;oBACV,OAAO,OAAO,CAAC,SAAS,CAAC,CAAA;gBAE7B;;mBAEG;gBACH,KAAK,gBAAgB;oBACjB,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAA;gBAEpC;;mBAEG;gBACH,KAAK,SAAS;oBACV,OAAO,OAAO,CAAC,SAAS,CAAC,CAAA;gBAE7B;;mBAEG;gBACH,KAAK,QAAQ;oBACT,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAE5B;;mBAEG;gBACH,KAAK,OAAO;oBACR,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;gBAE3B;;mBAEG;gBACH,KAAK,6BAA6B;oBAC9B,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAA;aACpD;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CACvB,OAAO,CAAC,GAAG,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAC1C,CAAC,CAAA;SACL;QAED,4FAA4F;QAC5F,6FAA6F;QAC7F,8FAA8F;QAC9F,YAAY;QACZ,MAAM,IAAI,SAAS,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,OAAe;QAC5B,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,QAAgB;QAChC,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,IAAS;QAC7C,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,IAAS;QAC1C,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,IAAI,GAAG;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,EAAE,EAAE,CAAA;YACR,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,OAAe;QACzB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAY;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,GAAW;QAC3B,MAAM,KAAK,GAAU;YACjB,OAAO,EAAE,KAAK,CAAC,UAAU;YACzB,OAAO,EAAE,KAAK,CAAC,UAAU;YACzB,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,KAAK,CAAC,aAAa;YACzB,QAAQ,EAAE,KAAK,CAAC,aAAa;YAC7B,OAAO,EAAE,KAAK,CAAC,IAAI;SACtB,CAAA;QACD,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY;QAC7B,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,IAAS;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,KAAU;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,OAAY;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,OAAe;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe;QACvB,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAc,EAAE,GAAS;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QACtC,IAAI,GAAG;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;;AA5OD;;GAEG;AACI,kBAAI,GAAuB,MAAM,CAAA","file":"PlatformTools.js","sourcesContent":["import * as path from \"path\"\nimport * as fs from \"fs\"\nimport dotenv from \"dotenv\"\nimport chalk from \"chalk\"\nimport { highlight, Theme } from \"cli-highlight\"\n\nexport { ReadStream } from \"fs\"\nexport { EventEmitter } from \"events\"\nexport { Readable, Writable } from \"stream\"\n\n/**\n * Platform-specific tools.\n */\nexport class PlatformTools {\n /**\n * Type of the currently running platform.\n */\n static type: \"browser\" | \"node\" = \"node\"\n\n /**\n * Gets global variable where global stuff can be stored.\n */\n static getGlobalVariable(): any {\n return global\n }\n\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n static load(name: string): any {\n // if name is not absolute or relative, then try to load package from the node_modules of the directory we are currently in\n // this is useful when we are using typeorm package globally installed and it accesses drivers\n // that are not installed globally\n\n try {\n // switch case to explicit require statements for webpack compatibility.\n switch (name) {\n /**\n * spanner\n */\n case \"spanner\":\n return require(\"@google-cloud/spanner\")\n\n /**\n * mongodb\n */\n case \"mongodb\":\n return require(\"mongodb\")\n\n /**\n * hana\n */\n case \"@sap/hana-client\":\n return require(\"@sap/hana-client\")\n\n case \"hdb-pool\":\n return require(\"hdb-pool\")\n\n /**\n * mysql\n */\n case \"mysql\":\n return require(\"mysql\")\n\n case \"mysql2\":\n return require(\"mysql2\")\n\n /**\n * oracle\n */\n case \"oracledb\":\n return require(\"oracledb\")\n\n /**\n * postgres\n */\n case \"pg\":\n return require(\"pg\")\n\n case \"pg-native\":\n return require(\"pg-native\")\n\n case \"pg-query-stream\":\n return require(\"pg-query-stream\")\n\n case \"typeorm-aurora-data-api-driver\":\n return require(\"typeorm-aurora-data-api-driver\")\n\n /**\n * redis\n */\n case \"redis\":\n return require(\"redis\")\n\n case \"ioredis\":\n return require(\"ioredis\")\n\n /**\n * better-sqlite3\n */\n case \"better-sqlite3\":\n return require(\"better-sqlite3\")\n\n /**\n * sqlite\n */\n case \"sqlite3\":\n return require(\"sqlite3\")\n\n /**\n * sql.js\n */\n case \"sql.js\":\n return require(\"sql.js\")\n\n /**\n * sqlserver\n */\n case \"mssql\":\n return require(\"mssql\")\n\n /**\n * react-native-sqlite\n */\n case \"react-native-sqlite-storage\":\n return require(\"react-native-sqlite-storage\")\n }\n } catch (err) {\n return require(path.resolve(\n process.cwd() + \"/node_modules/\" + name,\n ))\n }\n\n // If nothing above matched and we get here, the package was not listed within PlatformTools\n // and is an Invalid Package. To make it explicit that this is NOT the intended use case for\n // PlatformTools.load - it's not just a way to replace `require` all willy-nilly - let's throw\n // an error.\n throw new TypeError(`Invalid Package for PlatformTools.load: ${name}`)\n }\n\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n static pathNormalize(pathStr: string): string {\n return path.normalize(pathStr)\n }\n\n /**\n * Gets file extension. Does \"path.extname\".\n */\n static pathExtname(pathStr: string): string {\n return path.extname(pathStr)\n }\n\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n static pathResolve(pathStr: string): string {\n return path.resolve(pathStr)\n }\n\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n static fileExist(pathStr: string): boolean {\n return fs.existsSync(pathStr)\n }\n\n static readFileSync(filename: string): Buffer {\n return fs.readFileSync(filename)\n }\n\n static appendFileSync(filename: string, data: any): void {\n fs.appendFileSync(filename, data)\n }\n\n static async writeFile(path: string, data: any): Promise<void> {\n return new Promise<void>((ok, fail) => {\n fs.writeFile(path, data, (err) => {\n if (err) fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads a dotenv file into the environment variables.\n *\n * @param path The file to load as a dotenv configuration\n */\n static dotenv(pathStr: string): void {\n dotenv.config({ path: pathStr })\n }\n\n /**\n * Gets environment variable.\n */\n static getEnvVariable(name: string): any {\n return process.env[name]\n }\n\n /**\n * Highlights sql string to be print in the console.\n */\n static highlightSql(sql: string) {\n const theme: Theme = {\n keyword: chalk.blueBright,\n literal: chalk.blueBright,\n string: chalk.white,\n type: chalk.magentaBright,\n built_in: chalk.magentaBright,\n comment: chalk.gray,\n }\n return highlight(sql, { theme: theme, language: \"sql\" })\n }\n\n /**\n * Highlights json string to be print in the console.\n */\n static highlightJson(json: string) {\n return highlight(json, { language: \"json\" })\n }\n\n /**\n * Logging functions needed by AdvancedConsoleLogger\n */\n static logInfo(prefix: string, info: any) {\n console.log(chalk.gray.underline(prefix), info)\n }\n\n static logError(prefix: string, error: any) {\n console.log(chalk.underline.red(prefix), error)\n }\n\n static logWarn(prefix: string, warning: any) {\n console.log(chalk.underline.yellow(prefix), warning)\n }\n\n static log(message: string) {\n console.log(chalk.underline(message))\n }\n\n static warn(message: string) {\n return chalk.yellow(message)\n }\n\n static logCmdErr(prefix: string, err?: any) {\n console.log(chalk.black.bgRed(prefix))\n if (err) console.error(err)\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/platform/PlatformTools.ts"],"names":[],"mappings":"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","file":"PlatformTools.js","sourcesContent":["import * as path from \"path\"\nimport * as fs from \"fs\"\nimport dotenv from \"dotenv\"\nimport chalk from \"chalk\"\nimport { highlight, Theme } from \"cli-highlight\"\n\nexport { ReadStream } from \"fs\"\nexport { EventEmitter } from \"events\"\nexport { Readable, Writable } from \"stream\"\n\n/**\n * Platform-specific tools.\n */\nexport class PlatformTools {\n /**\n * Type of the currently running platform.\n */\n static type: \"browser\" | \"node\" = \"node\"\n\n /**\n * Gets global variable where global stuff can be stored.\n */\n static getGlobalVariable(): any {\n return global\n }\n\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n static load(name: string): any {\n // if name is not absolute or relative, then try to load package from the node_modules of the directory we are currently in\n // this is useful when we are using typeorm package globally installed and it accesses drivers\n // that are not installed globally\n\n try {\n // switch case to explicit require statements for webpack compatibility.\n switch (name) {\n /**\n * spanner\n */\n case \"spanner\":\n return require(\"@google-cloud/spanner\")\n\n /**\n * mongodb\n */\n case \"mongodb\":\n return require(\"mongodb\")\n\n /**\n * hana\n */\n case \"@sap/hana-client\":\n return require(\"@sap/hana-client\")\n\n case \"hdb-pool\":\n return require(\"hdb-pool\")\n\n /**\n * mysql\n */\n case \"mysql\":\n return require(\"mysql\")\n\n case \"mysql2\":\n return require(\"mysql2\")\n\n /**\n * oracle\n */\n case \"oracledb\":\n return require(\"oracledb\")\n\n /**\n * postgres\n */\n case \"pg\":\n return require(\"pg\")\n\n case \"pg-native\":\n return require(\"pg-native\")\n\n case \"pg-query-stream\":\n return require(\"pg-query-stream\")\n\n case \"typeorm-aurora-data-api-driver\":\n return require(\"typeorm-aurora-data-api-driver\")\n\n /**\n * redis\n */\n case \"redis\":\n return require(\"redis\")\n\n case \"ioredis\":\n return require(\"ioredis\")\n\n /**\n * better-sqlite3\n */\n case \"better-sqlite3\":\n return require(\"better-sqlite3\")\n\n /**\n * sqlite\n */\n case \"sqlite3\":\n return require(\"sqlite3\")\n\n /**\n * sql.js\n */\n case \"sql.js\":\n return require(\"sql.js\")\n\n /**\n * sqlserver\n */\n case \"mssql\":\n return require(\"mssql\")\n\n /**\n * react-native-sqlite\n */\n case \"react-native-sqlite-storage\":\n return require(\"react-native-sqlite-storage\")\n }\n } catch (err) {\n return require(path.resolve(\n process.cwd() + \"/node_modules/\" + name,\n ))\n }\n\n // If nothing above matched and we get here, the package was not listed within PlatformTools\n // and is an Invalid Package. To make it explicit that this is NOT the intended use case for\n // PlatformTools.load - it's not just a way to replace `require` all willy-nilly - let's throw\n // an error.\n throw new TypeError(`Invalid Package for PlatformTools.load: ${name}`)\n }\n\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n static pathNormalize(pathStr: string): string {\n return path.normalize(pathStr)\n }\n\n /**\n * Gets file extension. Does \"path.extname\".\n */\n static pathExtname(pathStr: string): string {\n return path.extname(pathStr)\n }\n\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n static pathResolve(pathStr: string): string {\n return path.resolve(pathStr)\n }\n\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n static fileExist(pathStr: string): boolean {\n return fs.existsSync(pathStr)\n }\n\n static readFileSync(filename: string): Buffer {\n return fs.readFileSync(filename)\n }\n\n static appendFileSync(filename: string, data: any): void {\n fs.appendFileSync(filename, data)\n }\n\n static async writeFile(path: string, data: any): Promise<void> {\n return new Promise<void>((ok, fail) => {\n fs.writeFile(path, data, (err) => {\n if (err) fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads a dotenv file into the environment variables.\n *\n * @param path The file to load as a dotenv configuration\n */\n static dotenv(pathStr: string): void {\n dotenv.config({ path: pathStr })\n }\n\n /**\n * Gets environment variable.\n */\n static getEnvVariable(name: string): any {\n return process.env[name]\n }\n\n /**\n * Highlights sql string to be print in the console.\n */\n static highlightSql(sql: string) {\n const theme: Theme = {\n keyword: chalk.blueBright,\n literal: chalk.blueBright,\n string: chalk.white,\n type: chalk.magentaBright,\n built_in: chalk.magentaBright,\n comment: chalk.gray,\n }\n return highlight(sql, { theme: theme, language: \"sql\" })\n }\n\n /**\n * Highlights json string to be print in the console.\n */\n static highlightJson(json: string) {\n return highlight(json, { language: \"json\" })\n }\n\n /**\n * Logging functions needed by AdvancedConsoleLogger\n */\n static logInfo(prefix: string, info: any) {\n console.log(chalk.gray.underline(prefix), info)\n }\n\n static logError(prefix: string, error: any) {\n console.log(chalk.underline.red(prefix), error)\n }\n\n static logWarn(prefix: string, warning: any) {\n console.log(chalk.underline.yellow(prefix), warning)\n }\n\n static log(message: string) {\n console.log(chalk.underline(message))\n }\n\n static info(info: any) {\n return chalk.gray(info)\n }\n\n static error(error: any) {\n return chalk.red(error)\n }\n\n static warn(message: string) {\n return chalk.yellow(message)\n }\n\n static logCmdErr(prefix: string, err?: any) {\n console.log(chalk.black.bgRed(prefix))\n if (err) console.error(err)\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -679,6 +679,8 @@ export class QueryBuilder {
|
|
|
679
679
|
return `${condition.parameters[0]} <= ${condition.parameters[1]}`;
|
|
680
680
|
case "arrayContains":
|
|
681
681
|
return `${condition.parameters[0]} @> ${condition.parameters[1]}`;
|
|
682
|
+
case "jsonContains":
|
|
683
|
+
return `${condition.parameters[0]} ::jsonb @> ${condition.parameters[1]}`;
|
|
682
684
|
case "arrayContainedBy":
|
|
683
685
|
return `${condition.parameters[0]} <@ ${condition.parameters[1]}`;
|
|
684
686
|
case "arrayOverlap":
|