typeorm 0.3.26 → 0.3.27-dev.1f90467

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.
@@ -35,10 +35,32 @@ export async function importOrRequireFile(filePath) {
35
35
  }
36
36
  return tryToRequire();
37
37
  }
38
+ const packageJsonCache = new Map();
39
+ const MAX_CACHE_SIZE = 1000;
40
+ function setPackageJsonCache(paths, packageJson) {
41
+ for (const path of paths) {
42
+ // Simple LRU-like behavior: if we're at capacity, remove oldest entry
43
+ if (packageJsonCache.size >= MAX_CACHE_SIZE &&
44
+ !packageJsonCache.has(path)) {
45
+ const firstKey = packageJsonCache.keys().next().value;
46
+ if (firstKey)
47
+ packageJsonCache.delete(firstKey);
48
+ }
49
+ packageJsonCache.set(path, packageJson);
50
+ }
51
+ }
38
52
  async function getNearestPackageJson(filePath) {
39
53
  let currentPath = filePath;
54
+ const paths = [];
40
55
  while (currentPath !== path.dirname(currentPath)) {
41
56
  currentPath = path.dirname(currentPath);
57
+ // Check if we have already cached the package.json for this path
58
+ if (packageJsonCache.has(currentPath)) {
59
+ setPackageJsonCache(paths, packageJsonCache.get(currentPath));
60
+ return packageJsonCache.get(currentPath);
61
+ }
62
+ // Add the current path to the list of paths to cache
63
+ paths.push(currentPath);
42
64
  const potentialPackageJson = path.join(currentPath, "package.json");
43
65
  try {
44
66
  const stats = await fs.stat(potentialPackageJson);
@@ -46,9 +68,14 @@ async function getNearestPackageJson(filePath) {
46
68
  continue;
47
69
  }
48
70
  try {
49
- return JSON.parse(await fs.readFile(potentialPackageJson, "utf8"));
71
+ const parsedPackage = JSON.parse(await fs.readFile(potentialPackageJson, "utf8"));
72
+ // Cache the parsed package.json object and return it
73
+ setPackageJsonCache(paths, parsedPackage);
74
+ return parsedPackage;
50
75
  }
51
76
  catch {
77
+ // If parsing fails, we still cache null to avoid repeated attempts
78
+ setPackageJsonCache(paths, null);
52
79
  return null;
53
80
  }
54
81
  }
@@ -57,6 +84,7 @@ async function getNearestPackageJson(filePath) {
57
84
  }
58
85
  }
59
86
  // the top of the file tree is reached
87
+ setPackageJsonCache(paths, null);
60
88
  return null;
61
89
  }
62
90
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/util/ImportUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,QAAgB;IAEhB,MAAM,WAAW,GAAG,KAAK,IAA2B,EAAE;QAClD,qFAAqF;QACrF,oDAAoD;QACpD,OAAO;YACH,8DAA8D;YAC9D,MAAM,QAAQ,CAAC,qCAAqC,CAAC,EAAE,CACnD,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC1B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC3C;YACD,KAAK;SACR,CAAA;IACL,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAsB,EAAE;QACzC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;IAE5E,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,WAAW,EAAE,CAAA;SAC/D,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,YAAY,EAAE,CAAA;SACrE,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QAEzD,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAI,WAAmB,EAAE,IAAI,KAAK,QAAQ,CAAA;YAExD,IAAI,QAAQ;gBAAE,OAAO,WAAW,EAAE,CAAA;;gBAC7B,OAAO,YAAY,EAAE,CAAA;QAC9B,CAAC;;YAAM,OAAO,YAAY,EAAE,CAAA;IAChC,CAAC;IAED,OAAO,YAAY,EAAE,CAAA;AACzB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IACjD,IAAI,WAAW,GAAG,QAAQ,CAAA;IAE1B,OAAO,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACvC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QAEnE,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,SAAQ;YACZ,CAAC;YAED,IAAI,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CACb,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAClD,CAAA;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,IAAI,CAAA;YACf,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,SAAQ;QACZ,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,OAAO,IAAI,CAAA;AACf,CAAC","file":"ImportUtils.js","sourcesContent":["import fs from \"fs/promises\"\nimport path from \"path\"\nimport { pathToFileURL } from \"url\"\n\nexport async function importOrRequireFile(\n filePath: string,\n): Promise<[any, \"esm\" | \"commonjs\"]> {\n const tryToImport = async (): Promise<[any, \"esm\"]> => {\n // `Function` is required to make sure the `import` statement wil stay `import` after\n // transpilation and won't be converted to `require`\n return [\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n await Function(\"return filePath => import(filePath)\")()(\n filePath.startsWith(\"file://\")\n ? filePath\n : pathToFileURL(filePath).toString(),\n ),\n \"esm\",\n ]\n }\n const tryToRequire = (): [any, \"commonjs\"] => {\n return [require(filePath), \"commonjs\"]\n }\n\n const extension = filePath.substring(filePath.lastIndexOf(\".\") + \".\".length)\n\n if (extension === \"mjs\" || extension === \"mts\") return tryToImport()\n else if (extension === \"cjs\" || extension === \"cts\") return tryToRequire()\n else if (extension === \"js\" || extension === \"ts\") {\n const packageJson = await getNearestPackageJson(filePath)\n\n if (packageJson != null) {\n const isModule = (packageJson as any)?.type === \"module\"\n\n if (isModule) return tryToImport()\n else return tryToRequire()\n } else return tryToRequire()\n }\n\n return tryToRequire()\n}\n\nasync function getNearestPackageJson(filePath: string): Promise<object | null> {\n let currentPath = filePath\n\n while (currentPath !== path.dirname(currentPath)) {\n currentPath = path.dirname(currentPath)\n const potentialPackageJson = path.join(currentPath, \"package.json\")\n\n try {\n const stats = await fs.stat(potentialPackageJson)\n if (!stats.isFile()) {\n continue\n }\n\n try {\n return JSON.parse(\n await fs.readFile(potentialPackageJson, \"utf8\"),\n )\n } catch {\n return null\n }\n } catch {\n continue\n }\n }\n\n // the top of the file tree is reached\n return null\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/util/ImportUtils.ts"],"names":[],"mappings":"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","file":"ImportUtils.js","sourcesContent":["import fs from \"fs/promises\"\nimport path from \"path\"\nimport { pathToFileURL } from \"url\"\n\nexport async function importOrRequireFile(\n filePath: string,\n): Promise<[any, \"esm\" | \"commonjs\"]> {\n const tryToImport = async (): Promise<[any, \"esm\"]> => {\n // `Function` is required to make sure the `import` statement wil stay `import` after\n // transpilation and won't be converted to `require`\n return [\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n await Function(\"return filePath => import(filePath)\")()(\n filePath.startsWith(\"file://\")\n ? filePath\n : pathToFileURL(filePath).toString(),\n ),\n \"esm\",\n ]\n }\n const tryToRequire = (): [any, \"commonjs\"] => {\n return [require(filePath), \"commonjs\"]\n }\n\n const extension = filePath.substring(filePath.lastIndexOf(\".\") + \".\".length)\n\n if (extension === \"mjs\" || extension === \"mts\") return tryToImport()\n else if (extension === \"cjs\" || extension === \"cts\") return tryToRequire()\n else if (extension === \"js\" || extension === \"ts\") {\n const packageJson = await getNearestPackageJson(filePath)\n\n if (packageJson != null) {\n const isModule = (packageJson as any)?.type === \"module\"\n\n if (isModule) return tryToImport()\n else return tryToRequire()\n } else return tryToRequire()\n }\n\n return tryToRequire()\n}\n\nconst packageJsonCache = new Map<string, object | null>()\nconst MAX_CACHE_SIZE = 1000\n\nfunction setPackageJsonCache(paths: string[], packageJson: object | null) {\n for (const path of paths) {\n // Simple LRU-like behavior: if we're at capacity, remove oldest entry\n if (\n packageJsonCache.size >= MAX_CACHE_SIZE &&\n !packageJsonCache.has(path)\n ) {\n const firstKey = packageJsonCache.keys().next().value\n if (firstKey) packageJsonCache.delete(firstKey)\n }\n packageJsonCache.set(path, packageJson)\n }\n}\n\nasync function getNearestPackageJson(filePath: string): Promise<object | null> {\n let currentPath = filePath\n const paths: string[] = []\n\n while (currentPath !== path.dirname(currentPath)) {\n currentPath = path.dirname(currentPath)\n\n // Check if we have already cached the package.json for this path\n if (packageJsonCache.has(currentPath)) {\n setPackageJsonCache(paths, packageJsonCache.get(currentPath)!)\n return packageJsonCache.get(currentPath)!\n }\n\n // Add the current path to the list of paths to cache\n paths.push(currentPath)\n\n const potentialPackageJson = path.join(currentPath, \"package.json\")\n\n try {\n const stats = await fs.stat(potentialPackageJson)\n if (!stats.isFile()) {\n continue\n }\n\n try {\n const parsedPackage = JSON.parse(\n await fs.readFile(potentialPackageJson, \"utf8\"),\n )\n // Cache the parsed package.json object and return it\n setPackageJsonCache(paths, parsedPackage)\n return parsedPackage\n } catch {\n // If parsing fails, we still cache null to avoid repeated attempts\n setPackageJsonCache(paths, null)\n return null\n }\n } catch {\n continue\n }\n }\n\n // the top of the file tree is reached\n setPackageJsonCache(paths, null)\n return null\n}\n"],"sourceRoot":".."}
@@ -8,6 +8,11 @@ export interface VirtualColumnOptions {
8
8
  * Column type. Must be one of the value from the ColumnTypes class.
9
9
  */
10
10
  type?: ColumnType;
11
+ /**
12
+ * Indicates if column is always selected by QueryBuilder and find operations.
13
+ * Default value is "true".
14
+ */
15
+ select?: boolean;
11
16
  /**
12
17
  * Return type of HSTORE column.
13
18
  * Returns value as string or as object.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/decorator/options/VirtualColumnOptions.ts"],"names":[],"mappings":"","file":"VirtualColumnOptions.js","sourcesContent":["import { ColumnType } from \"../../driver/types/ColumnTypes\"\nimport { ValueTransformer } from \"./ValueTransformer\"\n\n/**\n * Describes all calculated column's options.\n */\nexport interface VirtualColumnOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: ColumnType\n\n /**\n * Return type of HSTORE column.\n * Returns value as string or as object.\n */\n hstoreType?: \"object\" | \"string\"\n\n /**\n * Query to be used to populate the column data. This query is used when generating the relational db script.\n * The query function is called with the current entities alias either defined by the Entity Decorator or automatically\n * @See https://typeorm.io/decorator-reference#virtualcolumn for more details.\n */\n query: (alias: string) => string\n\n /**\n * Specifies a value transformer(s) that is to be used to unmarshal\n * this column when reading from the database.\n */\n transformer?: ValueTransformer | ValueTransformer[]\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/decorator/options/VirtualColumnOptions.ts"],"names":[],"mappings":"","file":"VirtualColumnOptions.js","sourcesContent":["import { ColumnType } from \"../../driver/types/ColumnTypes\"\nimport { ValueTransformer } from \"./ValueTransformer\"\n\n/**\n * Describes all calculated column's options.\n */\nexport interface VirtualColumnOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: ColumnType\n\n /**\n * Indicates if column is always selected by QueryBuilder and find operations.\n * Default value is \"true\".\n */\n select?: boolean\n\n /**\n * Return type of HSTORE column.\n * Returns value as string or as object.\n */\n hstoreType?: \"object\" | \"string\"\n\n /**\n * Query to be used to populate the column data. This query is used when generating the relational db script.\n * The query function is called with the current entities alias either defined by the Entity Decorator or automatically\n * @See https://typeorm.io/decorator-reference#virtualcolumn for more details.\n */\n query: (alias: string) => string\n\n /**\n * Specifies a value transformer(s) that is to be used to unmarshal\n * this column when reading from the database.\n */\n transformer?: ValueTransformer | ValueTransformer[]\n}\n"],"sourceRoot":"../.."}
package/package.json CHANGED
@@ -1,267 +1 @@
1
- {
2
- "name": "typeorm",
3
- "version": "0.3.26",
4
- "description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.",
5
- "homepage": "https://typeorm.io",
6
- "bugs": {
7
- "url": "https://github.com/typeorm/typeorm/issues"
8
- },
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/typeorm/typeorm.git"
12
- },
13
- "funding": "https://opencollective.com/typeorm",
14
- "license": "MIT",
15
- "author": {
16
- "name": "Umed Khudoiberdiev",
17
- "email": "pleerock.me@gmail.com"
18
- },
19
- "exports": {
20
- ".": {
21
- "types": "./index.d.ts",
22
- "node": {
23
- "types": "./index.d.ts",
24
- "import": "./index.mjs",
25
- "require": "./index.js"
26
- },
27
- "browser": {
28
- "require": "./index.js",
29
- "import": "./browser/index.js",
30
- "default": "./index.js"
31
- }
32
- },
33
- "./browser": {
34
- "types": "./index.d.ts",
35
- "default": "./browser/index.js"
36
- },
37
- "./*.js": "./*.js",
38
- "./*": {
39
- "require": "./*.js",
40
- "import": "./*"
41
- }
42
- },
43
- "main": "./index.js",
44
- "module": "./index.mjs",
45
- "browser": {
46
- "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
47
- "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
48
- "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
49
- "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
50
- "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
51
- "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
52
- "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
53
- "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js",
54
- "./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js",
55
- "./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js",
56
- "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
57
- "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
58
- "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
59
- "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
60
- "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
61
- "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
62
- "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js",
63
- "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js",
64
- "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js",
65
- "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js",
66
- "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js",
67
- "./index.js": "./browser/index.js",
68
- "./index.mjs": "./browser/index.js"
69
- },
70
- "types": "./index.d.ts",
71
- "bin": {
72
- "typeorm": "./cli.js",
73
- "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js",
74
- "typeorm-ts-node-esm": "./cli-ts-node-esm.js"
75
- },
76
- "scripts": {
77
- "changelog": "standard-changelog",
78
- "compile": "rimraf ./build && tsc",
79
- "docs:dev": "cd docs && npm run start",
80
- "format": "prettier --cache --write \"./**/*.ts\"",
81
- "format:ci": "prettier --check \"./**/*.ts\"",
82
- "lint": "eslint .",
83
- "pack": "gulp pack",
84
- "package": "gulp package",
85
- "pre-commit": "lint-staged",
86
- "prepare": "husky",
87
- "publish:preview": "pkg-pr-new publish './build/package' --pnpm --template='./sample/playground'",
88
- "test": "npm run compile && npm run test:fast --",
89
- "test:ci": "mocha --bail",
90
- "test:fast": "mocha",
91
- "typecheck": "tsc --noEmit",
92
- "watch": "tsc --watch"
93
- },
94
- "dependencies": {
95
- "@sqltools/formatter": "^1.2.5",
96
- "ansis": "^3.17.0",
97
- "app-root-path": "^3.1.0",
98
- "buffer": "^6.0.3",
99
- "dayjs": "^1.11.13",
100
- "debug": "^4.4.0",
101
- "dedent": "^1.6.0",
102
- "dotenv": "^16.4.7",
103
- "glob": "^10.4.5",
104
- "sha.js": "^2.4.11",
105
- "sql-highlight": "^6.0.0",
106
- "tslib": "^2.8.1",
107
- "uuid": "^11.1.0",
108
- "yargs": "^17.7.2"
109
- },
110
- "devDependencies": {
111
- "@eslint/js": "^9.29.0",
112
- "@sap/hana-client": "^2.25.22",
113
- "@tsconfig/node16": "^16.1.4",
114
- "@types/chai": "^4.3.20",
115
- "@types/chai-as-promised": "^7.1.8",
116
- "@types/debug": "^4.1.12",
117
- "@types/gulp-rename": "^2.0.6",
118
- "@types/gulp-sourcemaps": "^0.0.38",
119
- "@types/mocha": "^10.0.10",
120
- "@types/node": "^16.18.126",
121
- "@types/sha.js": "^2.4.4",
122
- "@types/sinon": "^10.0.20",
123
- "@types/sinon-chai": "^4.0.0",
124
- "@types/source-map-support": "^0.5.10",
125
- "@types/yargs": "^17.0.33",
126
- "better-sqlite3": "^8.7.0",
127
- "chai": "^4.5.0",
128
- "chai-as-promised": "^7.1.2",
129
- "class-transformer": "^0.5.1",
130
- "eslint": "^9.29.0",
131
- "globals": "^16.2.0",
132
- "gulp": "^4.0.2",
133
- "gulp-rename": "^2.0.0",
134
- "gulp-replace": "^1.1.4",
135
- "gulp-shell": "^0.8.0",
136
- "gulp-sourcemaps": "^3.0.0",
137
- "gulp-typescript": "^6.0.0-alpha.1",
138
- "gulpclass": "^0.2.0",
139
- "husky": "^9.1.7",
140
- "lint-staged": "^15.5.2",
141
- "mocha": "^10.8.2",
142
- "mongodb": "^6.15.0",
143
- "mssql": "^11.0.1",
144
- "mysql": "^2.18.1",
145
- "mysql2": "^3.14.0",
146
- "nyc": "^17.1.0",
147
- "oracledb": "^6.8.0",
148
- "pg": "^8.14.1",
149
- "pg-query-stream": "^4.8.1",
150
- "pkg-pr-new": "^0.0.43",
151
- "prettier": "^2.8.8",
152
- "redis": "^5.7.0",
153
- "reflect-metadata": "^0.2.2",
154
- "remap-istanbul": "^0.13.0",
155
- "rimraf": "^5.0.10",
156
- "sinon": "^15.2.0",
157
- "sinon-chai": "^3.7.0",
158
- "sort-package-json": "^2.15.1",
159
- "source-map-support": "^0.5.21",
160
- "sql.js": "^1.13.0",
161
- "sqlite3": "^5.1.7",
162
- "standard-changelog": "^6.0.0",
163
- "ts-node": "^10.9.2",
164
- "typescript": "^5.8.3",
165
- "typescript-eslint": "^8.34.1"
166
- },
167
- "peerDependencies": {
168
- "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0",
169
- "@sap/hana-client": "^2.14.22",
170
- "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0",
171
- "ioredis": "^5.0.4",
172
- "mongodb": "^5.8.0 || ^6.0.0",
173
- "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1",
174
- "mysql2": "^2.2.5 || ^3.0.1",
175
- "oracledb": "^6.3.0",
176
- "pg": "^8.5.1",
177
- "pg-native": "^3.0.0",
178
- "pg-query-stream": "^4.0.0",
179
- "redis": "^3.1.1 || ^4.0.0 || ^5.0.14",
180
- "reflect-metadata": "^0.1.14 || ^0.2.0",
181
- "sql.js": "^1.4.0",
182
- "sqlite3": "^5.0.3",
183
- "ts-node": "^10.7.0",
184
- "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0"
185
- },
186
- "peerDependenciesMeta": {
187
- "@google-cloud/spanner": {
188
- "optional": true
189
- },
190
- "@sap/hana-client": {
191
- "optional": true
192
- },
193
- "better-sqlite3": {
194
- "optional": true
195
- },
196
- "ioredis": {
197
- "optional": true
198
- },
199
- "mongodb": {
200
- "optional": true
201
- },
202
- "mssql": {
203
- "optional": true
204
- },
205
- "mysql2": {
206
- "optional": true
207
- },
208
- "oracledb": {
209
- "optional": true
210
- },
211
- "pg": {
212
- "optional": true
213
- },
214
- "pg-native": {
215
- "optional": true
216
- },
217
- "pg-query-stream": {
218
- "optional": true
219
- },
220
- "redis": {
221
- "optional": true
222
- },
223
- "sql.js": {
224
- "optional": true
225
- },
226
- "sqlite3": {
227
- "optional": true
228
- },
229
- "ts-node": {
230
- "optional": true
231
- },
232
- "typeorm-aurora-data-api-driver": {
233
- "optional": true
234
- }
235
- },
236
- "engines": {
237
- "node": ">=16.13.0"
238
- },
239
- "collective": {
240
- "type": "opencollective",
241
- "url": "https://opencollective.com/typeorm",
242
- "logo": "https://opencollective.com/opencollective/logo.txt"
243
- },
244
- "readmeFilename": "README.md",
245
- "tags": [
246
- "orm",
247
- "typescript",
248
- "typescript-orm",
249
- "mariadb",
250
- "mariadb-orm",
251
- "mysql",
252
- "mysql-orm",
253
- "oracle",
254
- "oracle-orm",
255
- "postgresql",
256
- "postgresql-orm",
257
- "sap-hana",
258
- "sap-hana-orm",
259
- "spanner",
260
- "cloud-spanner",
261
- "cloud-spanner-orm",
262
- "sqlite",
263
- "sqlite-orm",
264
- "sql-server",
265
- "sql-server-orm"
266
- ]
267
- }
1
+ { "name": "typeorm", "version": "0.3.27-dev.1f90467", "description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.", "homepage": "https://typeorm.io", "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "funding": "https://opencollective.com/typeorm", "license": "MIT", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "types": "./index.d.ts", "react-native": { "default": "./browser/index.js" }, "node": { "types": "./index.d.ts", "import": "./index.mjs", "require": "./index.js" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "types": "./index.d.ts", "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "scripts": { "changelog": "standard-changelog", "compile": "rimraf ./build && tsc", "docs:dev": "cd docs && npm run start", "format": "prettier --cache --write \"./**/*.ts\"", "format:ci": "prettier --check \"./**/*.ts\"", "lint": "eslint .", "pack": "gulp pack", "package": "gulp package", "pre-commit": "lint-staged", "prepare": "husky", "publish:preview": "pkg-pr-new publish './build/package' --pnpm --template='./sample/playground'", "test": "npm run compile && npm run test:fast --", "test:ci": "mocha --bail", "test:fast": "mocha", "typecheck": "tsc --noEmit", "watch": "tsc --watch" }, "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dedent": "^1.6.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "devDependencies": { "@eslint/js": "^9.29.0", "@sap/hana-client": "^2.25.22", "@tsconfig/node16": "^16.1.4", "@types/chai": "^4.3.20", "@types/chai-as-promised": "^7.1.8", "@types/debug": "^4.1.12", "@types/gulp-rename": "^2.0.6", "@types/gulp-sourcemaps": "^0.0.38", "@types/mocha": "^10.0.10", "@types/node": "^16.18.126", "@types/sha.js": "^2.4.4", "@types/sinon": "^10.0.20", "@types/sinon-chai": "^4.0.0", "@types/source-map-support": "^0.5.10", "@types/yargs": "^17.0.33", "better-sqlite3": "^8.7.0", "chai": "^4.5.0", "chai-as-promised": "^7.1.2", "class-transformer": "^0.5.1", "eslint": "^9.29.0", "globals": "^16.2.0", "gulp": "^4.0.2", "gulp-rename": "^2.0.0", "gulp-replace": "^1.1.4", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^9.1.7", "lint-staged": "^15.5.2", "mocha": "^10.8.2", "mongodb": "^6.15.0", "mssql": "^11.0.1", "mysql": "^2.18.1", "mysql2": "^3.14.0", "nyc": "^17.1.0", "oracledb": "^6.8.0", "pg": "^8.14.1", "pg-query-stream": "^4.8.1", "pkg-pr-new": "^0.0.43", "prettier": "^2.8.8", "redis": "^5.7.0", "reflect-metadata": "^0.2.2", "remap-istanbul": "^0.13.0", "rimraf": "^5.0.10", "sinon": "^15.2.0", "sinon-chai": "^3.7.0", "sort-package-json": "^2.15.1", "source-map-support": "^0.5.21", "sql.js": "^1.13.0", "sqlite3": "^5.1.7", "standard-changelog": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.8.3", "typescript-eslint": "^8.34.1" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.14.22", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0 || ^5.0.14", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "engines": { "node": ">=16.13.0" }, "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "readmeFilename": "README.md", "tags": [ "orm", "typescript", "typescript-orm", "mariadb", "mariadb-orm", "mysql", "mysql-orm", "oracle", "oracle-orm", "postgresql", "postgresql-orm", "sap-hana", "sap-hana-orm", "spanner", "cloud-spanner", "cloud-spanner-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm" ] }
@@ -907,6 +907,11 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
907
907
  const hasOffset = this.expressionMap.offset !== undefined &&
908
908
  this.expressionMap.offset !== null &&
909
909
  this.expressionMap.offset > 0;
910
+ if (entitiesAndRaw.entities.length === 0 && (hasSkip || hasOffset)) {
911
+ // when skip or offset were used and no results found, we need to execute a full count
912
+ // (the given offset may have exceeded the actual number of rows)
913
+ return undefined;
914
+ }
910
915
  // offset overrides skip when no join is defined
911
916
  const previousResults = hasOffset
912
917
  ? this.expressionMap.offset
@@ -1670,12 +1675,9 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
1670
1675
  return finalSelects;
1671
1676
  }
1672
1677
  findEntityColumnSelects(aliasName, metadata) {
1673
- const mainSelect = this.expressionMap.selects.find((select) => select.selection === aliasName);
1674
- if (mainSelect)
1675
- return [mainSelect];
1676
- return this.expressionMap.selects.filter((select) => {
1677
- return metadata.columns.some((column) => select.selection === aliasName + "." + column.propertyPath);
1678
- });
1678
+ return this.expressionMap.selects.filter((select) => select.selection === aliasName ||
1679
+ metadata.columns.some((column) => select.selection ===
1680
+ aliasName + "." + column.propertyPath));
1679
1681
  }
1680
1682
  computeCountExpression() {
1681
1683
  const mainAlias = this.expressionMap.mainAlias.name; // todo: will this work with "fromTableName"?