@mikro-orm/sql 7.0.14-dev.9 → 7.0.15-dev.0

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.
@@ -30,7 +30,8 @@ export declare abstract class AbstractSqlPlatform extends Platform {
30
30
  getSearchJsonPropertyKey(path: string[], type: string, aliased: boolean, value?: unknown): string | RawQueryFragment;
31
31
  /**
32
32
  * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
33
- * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
33
+ * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes
34
+ * with embedded `\` and `"` escaped per the JSON path string syntax.
34
35
  * @internal
35
36
  */
36
37
  quoteJsonKey(key: string): string;
@@ -66,18 +66,23 @@ export class AbstractSqlPlatform extends Platform {
66
66
  }
67
67
  getSearchJsonPropertyKey(path, type, aliased, value) {
68
68
  const [a, ...b] = path;
69
+ const jsonPath = this.quoteValue(`$.${b.map(this.quoteJsonKey).join('.')}`);
69
70
  if (aliased) {
70
- return raw(alias => `json_extract(${this.quoteIdentifier(`${alias}.${a}`)}, '$.${b.map(this.quoteJsonKey).join('.')}')`);
71
+ return raw(alias => `json_extract(${this.quoteIdentifier(`${alias}.${a}`)}, ${jsonPath})`);
71
72
  }
72
- return raw(`json_extract(${this.quoteIdentifier(a)}, '$.${b.map(this.quoteJsonKey).join('.')}')`);
73
+ return raw(`json_extract(${this.quoteIdentifier(a)}, ${jsonPath})`);
73
74
  }
74
75
  /**
75
76
  * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
76
- * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
77
+ * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes
78
+ * with embedded `\` and `"` escaped per the JSON path string syntax.
77
79
  * @internal
78
80
  */
79
81
  quoteJsonKey(key) {
80
- return /^[a-z]\w*$/i.exec(key) ? key : `"${key}"`;
82
+ if (/^[a-z]\w*$/i.test(key)) {
83
+ return key;
84
+ }
85
+ return `"${key.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`;
81
86
  }
82
87
  getJsonIndexDefinition(index) {
83
88
  return index.columnNames.map(column => {
@@ -243,9 +243,9 @@ export class BasePostgreSqlPlatform extends AbstractSqlPlatform {
243
243
  lastOperator = '->';
244
244
  }
245
245
  if (path.length === 0) {
246
- return cast(`${root}${lastOperator}'${last}'`);
246
+ return cast(`${root}${lastOperator}${this.quoteValue(last)}`);
247
247
  }
248
- return cast(`${root}->${path.map(a => this.quoteValue(a)).join('->')}${lastOperator}'${last}'`);
248
+ return cast(`${root}->${path.map(a => this.quoteValue(a)).join('->')}${lastOperator}${this.quoteValue(last)}`);
249
249
  }
250
250
  getJsonIndexDefinition(index) {
251
251
  return index.columnNames.map(column => {
@@ -265,7 +265,8 @@ export class BasePostgreSqlPlatform extends AbstractSqlPlatform {
265
265
  if (RawQueryFragment.isKnownFragment(id)) {
266
266
  return super.quoteIdentifier(id);
267
267
  }
268
- return `${quote}${id.toString().replace('.', `${quote}.${quote}`)}${quote}`;
268
+ const escaped = id.toString().replaceAll(quote, quote + quote);
269
+ return `${quote}${escaped.replace('.', `${quote}.${quote}`)}${quote}`;
269
270
  }
270
271
  pad(number, digits) {
271
272
  return String(number).padStart(digits, '0');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/sql",
3
- "version": "7.0.14-dev.9",
3
+ "version": "7.0.15-dev.0",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "keywords": [
6
6
  "data-mapper",
@@ -47,13 +47,13 @@
47
47
  "copy": "node ../../scripts/copy.mjs"
48
48
  },
49
49
  "dependencies": {
50
- "kysely": "0.28.16"
50
+ "kysely": "0.28.17"
51
51
  },
52
52
  "devDependencies": {
53
- "@mikro-orm/core": "^7.0.13"
53
+ "@mikro-orm/core": "^7.0.14"
54
54
  },
55
55
  "peerDependencies": {
56
- "@mikro-orm/core": "7.0.14-dev.9"
56
+ "@mikro-orm/core": "7.0.15-dev.0"
57
57
  },
58
58
  "engines": {
59
59
  "node": ">= 22.17.0"