From 549a0feb2d15d5200155ba670be7e5d7cca5e3ab Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Nov 2020 23:10:09 +0000 Subject: [PATCH 01/17] chore(deps): update dependency eslint to v7.14.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5727fc15d831..f92b17493c72 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "@typescript-eslint/parser": "3.10.0", "conditional-type-checks": "1.0.5", "coveralls": "3.1.0", - "eslint": "7.13.0", + "eslint": "7.14.0", "eslint-plugin-jsdoc": "30.7.8", "fs-extra": "9.0.1", "husky": "4.3.0", diff --git a/yarn.lock b/yarn.lock index f30c5242abb5..4f7d30febb52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3575,10 +3575,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@7.13.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da" - integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== +eslint@7.14.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.14.0.tgz#2d2cac1d28174c510a97b377f122a5507958e344" + integrity sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.2.1" From c1389182da6ac802b2599ec97e6a42559638a442 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Nov 2020 09:14:15 +0100 Subject: [PATCH 02/17] chore(deps): update dependency run-rs to v0.7.2 (#1108) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f92b17493c72..9fcdb66712f3 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "lerna": "3.22.1", "lint-staged": "10.5.1", "rimraf": "3.0.2", - "run-rs": "0.7.1", + "run-rs": "0.7.2", "ts-jest": "26.4.4", "ts-node": "9.0.0", "typescript": "4.1.2", diff --git a/yarn.lock b/yarn.lock index 4f7d30febb52..b81c1e75262a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6314,7 +6314,7 @@ mongodb-core@^3.1.2: optionalDependencies: saslprep "^1.0.0" -mongodb-topology-manager@2.x: +mongodb-topology-manager@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mongodb-topology-manager/-/mongodb-topology-manager-2.1.0.tgz#5dee0d517d1474f3003d96cc20c7a41ea9d263e9" integrity sha512-s2PelP303LsyJIsReIDUyHhdGPN1xoBY5RynfDKpgT2Wz/D0vaQZN+x0AK6lzj7ro7c8hPFzvHyGA5bJ7JWUug== @@ -7904,17 +7904,17 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -run-rs@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/run-rs/-/run-rs-0.7.1.tgz#ee26b5700e7eeba617a885a143a3827fcc00db06" - integrity sha512-EeSxBUpbdbaPrVXRe88FfH1Am9IAzxlzZGNRPJLqkJiqpz64iPBaasDYpKBYy929Gar89iF8Ft+0w6cXbLXg3Q== +run-rs@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/run-rs/-/run-rs-0.7.2.tgz#e1d901fd5f4f7ef8169d52a2fe8668a5725f8b5a" + integrity sha512-hvlhT4x7u2SqvC7tD7IKKAWTYI3cdA+EcmwQgVrMkRIpIznuB9/UvlhT+J/+leW93JfDYqMNB4QctMPJy2E2rg== dependencies: chalk "2.4.1" co "4.6.0" commander "2.15.1" moment "2.22.2" mongodb "3.3.x" - mongodb-topology-manager "2.x" + mongodb-topology-manager "2.1.0" prettyjson "1.2.1" rxjs@^6.4.0, rxjs@^6.6.3: From 447530c43d50944f66798c3bb765eb37b2bf09f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Nov 2020 09:14:30 +0100 Subject: [PATCH 03/17] chore(deps): update dependency ts-morph to v9 (#1109) Co-authored-by: Renovate Bot --- packages/reflection/package.json | 2 +- yarn.lock | 53 +++++++++++++++----------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/packages/reflection/package.json b/packages/reflection/package.json index e66c3aa3604b..0d453a8d8280 100644 --- a/packages/reflection/package.json +++ b/packages/reflection/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "globby": "11.0.1", - "ts-morph": "8.2.0" + "ts-morph": "9.0.0" }, "devDependencies": { "@mikro-orm/core": "^4.3.1" diff --git a/yarn.lock b/yarn.lock index b81c1e75262a..9a4fce20e3aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1574,17 +1574,17 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@ts-morph/common@~0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.6.0.tgz#cbd4ee57c5ef971511b9c5778e0bb8eb27de4783" - integrity sha512-pI35nZz5bs3tL3btSVX2cWkAE8rc80F+Fn4TwSC6bQvn7fgn9IyLXVcAfpG6X6NBY5wN9TkSWXn/QYUkBvR/Fw== +"@ts-morph/common@~0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.7.0.tgz#fe50e04666e8ee6bbc61dd101679c4cdb08aad7d" + integrity sha512-1EJYuiAjfOxrxB0VRZR4KVvPr4S7ylQv9M0IvUiBVB1HTcXAgWfineqx8n/tNIu5OhNjPQ8w9Qd7JzHbcVa64g== dependencies: "@dsherret/to-absolute-glob" "^2.0.2" fast-glob "^3.2.4" - fs-extra "^9.0.1" is-negated-glob "^1.0.0" - multimatch "^4.0.0" - typescript "~4.0.2" + mkdirp "^1.0.4" + multimatch "^5.0.0" + typescript "~4.1.2" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.10" @@ -2749,10 +2749,10 @@ co@4.6.0, co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -code-block-writer@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-10.1.0.tgz#54fc410ebef2af836d9c2314ac40af7d7b37eee9" - integrity sha512-RG9hpXtWFeUWhuUav1YuP/vGcyncW+t90yJLk9fNZs1De2OuHTHKAKThVCokt29PYq5RoJ0QSZaIZ+rvPO23hA== +code-block-writer@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f" + integrity sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw== code-point-at@^1.0.0: version "1.1.0" @@ -4059,7 +4059,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.0.1, fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@9.0.1, fs-extra@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== @@ -6269,7 +6269,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@1.x: +mkdirp@*, mkdirp@1.x, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -6382,10 +6382,10 @@ multimatch@^3.0.0: arrify "^1.0.1" minimatch "^3.0.4" -multimatch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" - integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" array-differ "^3.0.0" @@ -8853,14 +8853,14 @@ ts-jest@26.4.4: semver "7.x" yargs-parser "20.x" -ts-morph@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-8.2.0.tgz#41d83cd501cbd897eb029ac489d6d5b927555c57" - integrity sha512-NHHWu+7I2/AOZiTni5w3f+xCfIxrkzPCcQbTGa81Yk3pr23a4h9xLLEE6tIGuYIubWjkjr9QVC3ITqgmA5touQ== +ts-morph@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-9.0.0.tgz#0cc2d4a78ed75899bf963cbaa0d920339764950f" + integrity sha512-uhu0I4EDTdHCMptsR1GuEZU3gSKS5p0n41EOEZ69y5klmOAHNzntI0ivcZL5Ip9+G+o8dgQScAKSHeHXN2vEDw== dependencies: "@dsherret/to-absolute-glob" "^2.0.2" - "@ts-morph/common" "~0.6.0" - code-block-writer "^10.1.0" + "@ts-morph/common" "~0.7.0" + code-block-writer "^10.1.1" ts-node@9.0.0: version "9.0.0" @@ -8963,16 +8963,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.1.2: +typescript@4.1.2, typescript@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== -typescript@~4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" - integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== - uglify-js@^3.1.4: version "3.11.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.4.tgz#b47b7ae99d4bd1dca65b53aaa69caa0909e6fadf" From 2a17c59cf2db4c6c211ca80ad9c82d64c94289df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Mon, 23 Nov 2020 16:49:01 +0100 Subject: [PATCH 04/17] fix(sql): allow using raw value for JSON prop with custom type Closes #1112 --- packages/core/src/platforms/Platform.ts | 4 ++++ packages/knex/src/query/QueryBuilder.ts | 5 ++++- packages/knex/src/query/QueryBuilderHelper.ts | 2 +- tests/QueryBuilder.test.ts | 8 ++++++++ tests/entities-sql/Book2.ts | 4 ++-- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/core/src/platforms/Platform.ts b/packages/core/src/platforms/Platform.ts index 2c7e2db3f754..c458a4665907 100644 --- a/packages/core/src/platforms/Platform.ts +++ b/packages/core/src/platforms/Platform.ts @@ -125,6 +125,10 @@ export abstract class Platform { return prop.columnTypes && prop.columnTypes[0] === 'bigint'; } + isRaw(value: any): boolean { + return '__raw' in value; + } + getBigIntTypeDeclarationSQL(): string { return 'bigint'; } diff --git a/packages/knex/src/query/QueryBuilder.ts b/packages/knex/src/query/QueryBuilder.ts index 66f1f0945bd1..3172e5fa2c5a 100644 --- a/packages/knex/src/query/QueryBuilder.ts +++ b/packages/knex/src/query/QueryBuilder.ts @@ -238,7 +238,10 @@ export class QueryBuilder = AnyEntity> { } raw(sql: string): Raw { - return this.knex.raw(sql); + const raw = this.knex.raw(sql); + (raw as Dictionary).__raw = true; // tag it as there is now way to check via `instanceof` + + return raw; } limit(limit?: number, offset = 0): this { diff --git a/packages/knex/src/query/QueryBuilderHelper.ts b/packages/knex/src/query/QueryBuilderHelper.ts index fe93de63b85d..0596bf153bb7 100644 --- a/packages/knex/src/query/QueryBuilderHelper.ts +++ b/packages/knex/src/query/QueryBuilderHelper.ts @@ -78,7 +78,7 @@ export class QueryBuilderHelper { return; } - if (prop.customType && convertCustomTypes) { + if (prop.customType && convertCustomTypes && !this.platform.isRaw(data[k])) { data[k] = prop.customType.convertToDatabaseValue(data[k], this.platform, true); } diff --git a/tests/QueryBuilder.test.ts b/tests/QueryBuilder.test.ts index d070899d412d..0fe1938bd0cf 100644 --- a/tests/QueryBuilder.test.ts +++ b/tests/QueryBuilder.test.ts @@ -1141,6 +1141,14 @@ describe('QueryBuilder', () => { expect(qb.getParams()).toEqual(['123']); }); + test('update query with JSON type and raw value', async () => { + const qb = orm.em.createQueryBuilder(Book2); + const raw = qb.raw(`jsonb_set(payload, '$.{consumed}', 123)`); + qb.update({ meta: raw }).where({ uuid: '456' }); + expect(qb.getQuery()).toEqual('update `book2` set `meta` = jsonb_set(payload, \'$.{consumed}\', 123) where `uuid_pk` = ?'); + expect(qb.getParams()).toEqual(['456']); + }); + test('update query with auto-joining', async () => { const qb = orm.em.createQueryBuilder(Publisher2); qb.update({ name: 'test 123', type: PublisherType.GLOBAL }).where({ books: { author: 123 } }); diff --git a/tests/entities-sql/Book2.ts b/tests/entities-sql/Book2.ts index 37763effda68..8709671aa94b 100644 --- a/tests/entities-sql/Book2.ts +++ b/tests/entities-sql/Book2.ts @@ -1,5 +1,5 @@ import { v4 } from 'uuid'; -import { Cascade, Collection, Entity, Filter, Formula, IdentifiedReference, ManyToMany, ManyToOne, OneToOne, PrimaryKey, Property, QueryOrder } from '@mikro-orm/core'; +import { Cascade, Collection, Entity, Filter, Formula, IdentifiedReference, JsonType, ManyToMany, ManyToOne, OneToOne, PrimaryKey, Property, QueryOrder } from '@mikro-orm/core'; import { Publisher2 } from './Publisher2'; import { Author2 } from './Author2'; import { BookTag2 } from './BookTag2'; @@ -33,7 +33,7 @@ export class Book2 { @Property({ type: 'double', nullable: true }) double?: number; - @Property({ nullable: true }) + @Property({ nullable: true, type: JsonType }) meta?: Book2Meta; @ManyToOne({ entity: 'Author2', cascade: [] }) From 3c44ffb91384491837d381307fc2743e6cfcdd6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Mon, 23 Nov 2020 17:44:20 +0100 Subject: [PATCH 05/17] test: add test for #932 (qb and FK as PK) --- tests/composite-keys.mysql.test.ts | 30 ++++++++++++++++++++++++++++++ tests/entities-sql/Address2.ts | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/composite-keys.mysql.test.ts b/tests/composite-keys.mysql.test.ts index e8730bb91b8f..3f48fc70d474 100644 --- a/tests/composite-keys.mysql.test.ts +++ b/tests/composite-keys.mysql.test.ts @@ -350,6 +350,36 @@ describe('composite keys in mysql', () => { await expect(user.cars.loadCount()).resolves.toEqual(1); }); + test('qb.leftJoinAndSelect() with FK as PK', async () => { + const author = new Author2('n', 'e'); + author.id = 5; + author.address = new Address2(author, 'v1'); + await orm.em.persistAndFlush(author); + orm.em.clear(); + + const addr1 = await orm.em.createQueryBuilder(Address2, 'addr') + .select('addr.*') + .leftJoinAndSelect('addr.author', 'a') + .where({ 'a.id': author.id }) + .getSingleResult(); + expect(addr1!.value).toBe('v1'); + expect(addr1!.author.id).toBe(5); + expect(addr1!.author.name).toBe('n'); + expect(addr1!.author.email).toBe('e'); + orm.em.clear(); + + const a1 = await orm.em.createQueryBuilder(Author2, 'a') + .select('a.*') + .leftJoinAndSelect('a.address', 'addr') + .where({ id: author.id }) + .getSingleResult(); + expect(a1!.id).toBe(5); + expect(a1!.name).toBe('n'); + expect(a1!.email).toBe('e'); + expect(a1!.address!.value).toBe('v1'); + expect(a1!.address!.author).toBe(a1); + }); + afterAll(async () => orm.close(true)); }); diff --git a/tests/entities-sql/Address2.ts b/tests/entities-sql/Address2.ts index fde24e59f7c0..3110e8f49785 100644 --- a/tests/entities-sql/Address2.ts +++ b/tests/entities-sql/Address2.ts @@ -4,7 +4,7 @@ import { Author2 } from './Author2'; @Entity({ comment: 'This is address table' }) export class Address2 { - @OneToOne({ entity: () => Author2, primary: true, joinColumn: 'author_id', unique: 'address2_author_id_unique' }) + @OneToOne({ entity: () => Author2, primary: true, joinColumn: 'author_id', unique: 'address2_author_id_unique', eager: true }) author: Author2; @Property({ comment: 'This is address property' }) From d4d9c48bd17ad2cca5b9c134c2ca433040bf32ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Mon, 23 Nov 2020 23:27:15 +0100 Subject: [PATCH 06/17] fix(core): fix serialization of properties with same name Closes #1115 --- packages/core/src/entity/EntityTransformer.ts | 28 +++++----- tests/issues/GH1115.test.ts | 51 +++++++++++++++++++ 2 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 tests/issues/GH1115.test.ts diff --git a/packages/core/src/entity/EntityTransformer.ts b/packages/core/src/entity/EntityTransformer.ts index d44cd586fb48..4391481ef5c7 100644 --- a/packages/core/src/entity/EntityTransformer.ts +++ b/packages/core/src/entity/EntityTransformer.ts @@ -12,13 +12,13 @@ import { Utils } from '../utils/Utils'; */ export class SerializationContext> { - readonly path: string[] = []; + readonly path: [string, string][] = []; constructor(private readonly populate: PopulateOptions[]) { } - visit(prop: string): boolean { - if (!this.path.find(item => prop === item)) { - this.path.push(prop); + visit(entityName: string, prop: string): boolean { + if (!this.path.find(([cls, item]) => entityName === cls && prop === item)) { + this.path.push([entityName, prop]); return false; } @@ -27,16 +27,16 @@ export class SerializationContext> { return true; } - this.path.push(prop); + this.path.push([entityName, prop]); return false; } - leave(path: string) { + leave(entityName: string, prop: string) { const last = this.path.pop(); /* istanbul ignore next */ - if (last !== path) { - throw new Error(`Trying to leave wrong property: ${path} instead of ${last}`); + if (!last || last[0] !== entityName || last[1] !== prop) { + throw new Error(`Trying to leave wrong property: ${entityName}.${prop} instead of ${last}`); } } @@ -60,7 +60,7 @@ export class SerializationContext> { .forEach(item => this.propagate(root, item)); } - private isMarkedAsPopulated(path: string): boolean { + private isMarkedAsPopulated(prop: string): boolean { let populate: PopulateOptions[] | undefined = this.populate; for (const segment of this.path) { @@ -68,14 +68,14 @@ export class SerializationContext> { return false; } - const exists = populate.find(p => p.field === segment) as PopulateOptions; + const exists = populate.find(p => p.field === segment[1]) as PopulateOptions; if (exists) { populate = exists.children; } } - return !!populate?.find(p => p.field === path); + return !!populate?.find(p => p.field === prop); } } @@ -113,7 +113,7 @@ export class EntityTransformer { }) .forEach(([pk, value]) => ret[this.propertyName(meta, pk, entity.__platform!)] = value as unknown as T[keyof T]); - if ((!wrapped.isInitialized() && wrapped.hasPrimaryKey())) { + if (!wrapped.isInitialized() && wrapped.hasPrimaryKey()) { return ret; } @@ -121,14 +121,14 @@ export class EntityTransformer { Object.keys(entity) .filter(prop => this.isVisible(meta, prop as keyof T & string, ignoreFields)) .map(prop => { - const cycle = root!.visit(prop); + const cycle = root!.visit(meta.className, prop); if (cycle) { return [prop, undefined]; } const val = EntityTransformer.processProperty(prop as keyof T & string, entity); - root!.leave(prop); + root!.leave(meta.className, prop); return [prop, val]; }) diff --git a/tests/issues/GH1115.test.ts b/tests/issues/GH1115.test.ts new file mode 100644 index 000000000000..39601ae6c30e --- /dev/null +++ b/tests/issues/GH1115.test.ts @@ -0,0 +1,51 @@ +import { Entity, ManyToOne, MikroORM, PrimaryKey, Property } from '@mikro-orm/core'; +import { AbstractSqlDriver } from '@mikro-orm/knex'; + +@Entity() +export class B { + + @PrimaryKey() + id!: number; + + @Property() + property!: string; + +} + +@Entity() +export class A { + + @PrimaryKey() + id!: number; + + @ManyToOne(() => B) + property!: B; + +} + +describe('GH issue 1115', () => { + + let orm: MikroORM; + + beforeAll(async () => { + orm = await MikroORM.init({ + entities: [A, B], + dbName: ':memory:', + type: 'sqlite', + }); + await orm.getSchemaGenerator().createSchema(); + }); + + afterAll(() => orm.close(true)); + + test('findAll({ populate: true }) should return all properties on child even when it has the same name in the parent', async () => { + const b = orm.em.create(B, { property: 'foo' }); + const a = orm.em.create(A, { property: b }); + await orm.em.persistAndFlush(a); + orm.em.clear(); + + const user = await orm.em.findOne(A, { id: 1 }, { populate: true }); + const data = JSON.parse(JSON.stringify(user)); + await expect(data.property).toEqual({ id: 1, property: 'foo' }); + }); +}); From 55044366242f6592565f85ad035e059ec3081ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 00:10:45 +0100 Subject: [PATCH 07/17] fix(core): fix computing changesets with reference as PK Using reference wrapped in FK as PK was not properly expanded to the PK value. Closes #1111 --- packages/core/src/utils/Utils.ts | 4 +- tests/issues/GH1111.test.ts | 112 +++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 tests/issues/GH1111.test.ts diff --git a/packages/core/src/utils/Utils.ts b/packages/core/src/utils/Utils.ts index cbda730003d8..9ce9ed37cda2 100644 --- a/packages/core/src/utils/Utils.ts +++ b/packages/core/src/utils/Utils.ts @@ -405,7 +405,7 @@ export class Utils { static getPrimaryKeyValues>(entity: T, primaryKeys: string[], allowScalar = false) { if (allowScalar && primaryKeys.length === 1) { - if (Utils.isEntity(entity[primaryKeys[0]])) { + if (Utils.isEntity(entity[primaryKeys[0]], true)) { return entity[primaryKeys[0]].__helper!.getPrimaryKey(); } @@ -413,7 +413,7 @@ export class Utils { } return primaryKeys.map(pk => { - if (Utils.isEntity(entity[pk])) { + if (Utils.isEntity(entity[pk], true)) { return entity[pk].__helper!.getPrimaryKey(); } diff --git a/tests/issues/GH1111.test.ts b/tests/issues/GH1111.test.ts new file mode 100644 index 000000000000..21207abbbdd0 --- /dev/null +++ b/tests/issues/GH1111.test.ts @@ -0,0 +1,112 @@ +import { Collection, Entity, IdentifiedReference, Logger, ManyToOne, MikroORM, OneToMany, OneToOne, PrimaryKey, PrimaryKeyProp, PrimaryKeyType, Property, Reference } from '@mikro-orm/core'; +import { AbstractSqlDriver, SchemaGenerator } from '@mikro-orm/knex'; + +@Entity() +class Node { + + @PrimaryKey() + id!: number; + +} + +@Entity() +class A { + + [PrimaryKeyType]: number; + [PrimaryKeyProp]: 'node'; + @OneToOne({ entity: () => Node, wrappedReference: true, primary: true, onDelete: 'cascade', onUpdateIntegrity: 'cascade' }) + node!: IdentifiedReference; + + @OneToMany('B', 'a', { eager: true, orphanRemoval: true }) + bs = new Collection(this); + + @Property() + name!: string; + +} + +@Entity() +class B { + + @PrimaryKey() + id!: number; + + @ManyToOne({ entity: () => A }) + a!: A; + + @Property() + type!: number; + +} + + +describe('GH issue 1111', () => { + + let orm: MikroORM; + const log = jest.fn(); + + beforeAll(async () => { + orm = await MikroORM.init({ + entities: [Node, A, B], + dbName: `mikro_orm_test_gh_1111`, + type: 'postgresql', + cache: { enabled: false }, + }); + const logger = new Logger(log, ['query', 'query-params']); + Object.assign(orm.config, { logger }); + + await new SchemaGenerator(orm.em).ensureDatabase(); + }); + + + beforeEach(async () => { + await orm.getSchemaGenerator().dropSchema(); + await orm.getSchemaGenerator().createSchema(); + }); + + afterAll(() => orm.close(true)); + + test('FK as PK with IdentifiedReference - single insert', async () => { + const a1 = new A(); + a1.name = 'test'; + a1.node = Reference.create(new Node()); + await orm.em.persistAndFlush(a1); + + expect(a1.node.unwrap().id).toBeTruthy(); + + const b1 = new B(); + b1.type = 4; + + a1.bs.add(b1); + + await orm.em.flush(); + orm.em.clear(); + + const a2 = await orm.em.findOneOrFail(A, { name: 'test' }, ['bs']); + expect(a2.bs.count()).toBe(1); + }); + + test('FK as PK with IdentifiedReference - multiple inserts', async () => { + const a1 = new A(); + a1.name = 'test'; + a1.node = Reference.create(new Node()); + await orm.em.persistAndFlush(a1); + + expect(a1.node.unwrap().id).toBeTruthy(); + + const b1 = new B(); + b1.type = 4; + + const b2 = new B(); + b2.type = 4; + + a1.bs.add(b1, b2); + + await orm.em.flush(); + orm.em.clear(); + + const a2 = await orm.em.findOneOrFail(A, { name: 'test' }, ['bs']); + expect(a2.bs.count()).toBe(2); + }); + +}); From 6e5a63f846257cbe1cde4249dce40dcafbf19267 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 24 Nov 2020 00:06:05 +0000 Subject: [PATCH 08/17] chore(deps): update dependency @types/webpack-env to v1.16.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9fcdb66712f3..27142d8505b8 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "@types/pg": "7.14.7", "@types/sqlstring": "2.2.1", "@types/uuid": "8.3.0", - "@types/webpack-env": "1.15.3", + "@types/webpack-env": "1.16.0", "@typescript-eslint/eslint-plugin": "3.10.0", "@typescript-eslint/parser": "3.10.0", "conditional-type-checks": "1.0.5", diff --git a/yarn.lock b/yarn.lock index 9a4fce20e3aa..d369e8258774 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1829,10 +1829,10 @@ resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.1.0.tgz#3d776127dbce7dd31fc06f86d3428b072e631eba" integrity sha512-gHUHI6pJaANIO2r6WcbT7+WMgbL9GZooR4tWpuBOETpDIqFNxwaJluE+6rj6VGYe8k6OkfhbHz2Fkm8kl06Igw== -"@types/webpack-env@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.3.tgz#fb602cd4c2f0b7c0fb857e922075fdf677d25d84" - integrity sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ== +"@types/webpack-env@1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" + integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== "@types/yargs-parser@*": version "15.0.0" From ed12748354bf71f664c2ae5da619a218d1538aa7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 24 Nov 2020 05:23:56 +0000 Subject: [PATCH 09/17] chore(deps): update dependency lint-staged to v10.5.2 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 27142d8505b8..6846a1778d08 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "husky": "4.3.0", "jest": "26.6.3", "lerna": "3.22.1", - "lint-staged": "10.5.1", + "lint-staged": "10.5.2", "rimraf": "3.0.2", "run-rs": "0.7.2", "ts-jest": "26.4.4", diff --git a/yarn.lock b/yarn.lock index d369e8258774..0d289ae4bd6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5755,10 +5755,10 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@10.5.1: - version "10.5.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.1.tgz#901e915c2360072dded0e7d752a0d9a49e079daa" - integrity sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw== +lint-staged@10.5.2: + version "10.5.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.2.tgz#acfaa0093af3262aee3130b2e22438941530bdd1" + integrity sha512-e8AYR1TDlzwB8VVd38Xu2lXDZf6BcshVqKVuBQThDJRaJLobqKnpbm4dkwJ2puypQNbLr9KF/9mfA649mAGvjA== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" From 46fe98b13b133fbe8a07d118dacf47b893357d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 11:24:02 +0100 Subject: [PATCH 10/17] docs: add `primary` to m:1 and 1:1 decorator options Related: #1121 --- docs/docs/decorators.md | 2 ++ docs/versioned_docs/version-4.0/decorators.md | 2 ++ docs/versioned_docs/version-4.1/decorators.md | 2 ++ docs/versioned_docs/version-4.2/decorators.md | 2 ++ docs/versioned_docs/version-4.3/decorators.md | 2 ++ 5 files changed, 10 insertions(+) diff --git a/docs/docs/decorators.md b/docs/docs/decorators.md index 6e22579d39b8..ecc2e816fde7 100644 --- a/docs/docs/decorators.md +++ b/docs/docs/decorators.md @@ -223,6 +223,7 @@ See [Defining Entities](relationships.md#manytoone) for more examples. | `eager` | `boolean` | yes | Always load the relationship. | | `inversedBy` | `(string & keyof T) ` | ` (e: T) => any` | yes | Point to the inverse side property name. | | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | @@ -257,6 +258,7 @@ See [Defining Entities](relationships.md#onetoone) for more examples, including | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | | `orphanRemoval` | `boolean` | yes | Remove the entity when it gets disconnected from the relationship (see [Cascading](cascading.md#orphan-removal)). | | `joinColumn` | `string` | yes | Override default database column name on the owning side (see [Naming Strategy](naming-strategy.md)). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | diff --git a/docs/versioned_docs/version-4.0/decorators.md b/docs/versioned_docs/version-4.0/decorators.md index 6e22579d39b8..ecc2e816fde7 100644 --- a/docs/versioned_docs/version-4.0/decorators.md +++ b/docs/versioned_docs/version-4.0/decorators.md @@ -223,6 +223,7 @@ See [Defining Entities](relationships.md#manytoone) for more examples. | `eager` | `boolean` | yes | Always load the relationship. | | `inversedBy` | `(string & keyof T) ` | ` (e: T) => any` | yes | Point to the inverse side property name. | | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | @@ -257,6 +258,7 @@ See [Defining Entities](relationships.md#onetoone) for more examples, including | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | | `orphanRemoval` | `boolean` | yes | Remove the entity when it gets disconnected from the relationship (see [Cascading](cascading.md#orphan-removal)). | | `joinColumn` | `string` | yes | Override default database column name on the owning side (see [Naming Strategy](naming-strategy.md)). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | diff --git a/docs/versioned_docs/version-4.1/decorators.md b/docs/versioned_docs/version-4.1/decorators.md index 6e22579d39b8..ecc2e816fde7 100644 --- a/docs/versioned_docs/version-4.1/decorators.md +++ b/docs/versioned_docs/version-4.1/decorators.md @@ -223,6 +223,7 @@ See [Defining Entities](relationships.md#manytoone) for more examples. | `eager` | `boolean` | yes | Always load the relationship. | | `inversedBy` | `(string & keyof T) ` | ` (e: T) => any` | yes | Point to the inverse side property name. | | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | @@ -257,6 +258,7 @@ See [Defining Entities](relationships.md#onetoone) for more examples, including | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | | `orphanRemoval` | `boolean` | yes | Remove the entity when it gets disconnected from the relationship (see [Cascading](cascading.md#orphan-removal)). | | `joinColumn` | `string` | yes | Override default database column name on the owning side (see [Naming Strategy](naming-strategy.md)). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | diff --git a/docs/versioned_docs/version-4.2/decorators.md b/docs/versioned_docs/version-4.2/decorators.md index 6e22579d39b8..ecc2e816fde7 100644 --- a/docs/versioned_docs/version-4.2/decorators.md +++ b/docs/versioned_docs/version-4.2/decorators.md @@ -223,6 +223,7 @@ See [Defining Entities](relationships.md#manytoone) for more examples. | `eager` | `boolean` | yes | Always load the relationship. | | `inversedBy` | `(string & keyof T) ` | ` (e: T) => any` | yes | Point to the inverse side property name. | | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | @@ -257,6 +258,7 @@ See [Defining Entities](relationships.md#onetoone) for more examples, including | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | | `orphanRemoval` | `boolean` | yes | Remove the entity when it gets disconnected from the relationship (see [Cascading](cascading.md#orphan-removal)). | | `joinColumn` | `string` | yes | Override default database column name on the owning side (see [Naming Strategy](naming-strategy.md)). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | diff --git a/docs/versioned_docs/version-4.3/decorators.md b/docs/versioned_docs/version-4.3/decorators.md index 6e22579d39b8..ecc2e816fde7 100644 --- a/docs/versioned_docs/version-4.3/decorators.md +++ b/docs/versioned_docs/version-4.3/decorators.md @@ -223,6 +223,7 @@ See [Defining Entities](relationships.md#manytoone) for more examples. | `eager` | `boolean` | yes | Always load the relationship. | | `inversedBy` | `(string & keyof T) ` | ` (e: T) => any` | yes | Point to the inverse side property name. | | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | @@ -257,6 +258,7 @@ See [Defining Entities](relationships.md#onetoone) for more examples, including | `wrappedReference` | `boolean` | yes | Wrap the entity in [`Reference` wrapper](entity-references.md). | | `orphanRemoval` | `boolean` | yes | Remove the entity when it gets disconnected from the relationship (see [Cascading](cascading.md#orphan-removal)). | | `joinColumn` | `string` | yes | Override default database column name on the owning side (see [Naming Strategy](naming-strategy.md)). | +| `primary` | `boolean` | yes | Use this relation as primary key. | | `onDelete` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | | `onUpdateIntegrity` | `string` | yes | [Referential integrity](cascading.md#declarative-referential-integrity). | From b1e86ffcb32657f4abde83fd8be6bab63aa97032 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Nov 2020 13:35:35 +0100 Subject: [PATCH 11/17] chore(deps): update docusaurus monorepo to v2.0.0-alpha.69 (#1122) Co-authored-by: Renovate Bot --- docs/package.json | 6 +- docs/yarn.lock | 361 ++++++++++++++++++++-------------------------- 2 files changed, 158 insertions(+), 209 deletions(-) diff --git a/docs/package.json b/docs/package.json index a789e39963de..dd1419806a24 100755 --- a/docs/package.json +++ b/docs/package.json @@ -9,9 +9,9 @@ "deploy": "node --max_old_space_size=16000 node_modules/@docusaurus/core/bin/docusaurus deploy" }, "dependencies": { - "@docusaurus/core": "2.0.0-alpha.68", - "@docusaurus/plugin-client-redirects": "2.0.0-alpha.68", - "@docusaurus/preset-classic": "2.0.0-alpha.68", + "@docusaurus/core": "2.0.0-alpha.69", + "@docusaurus/plugin-client-redirects": "2.0.0-alpha.69", + "@docusaurus/preset-classic": "2.0.0-alpha.69", "classnames": "2.2.6", "docusaurus-plugin-typedoc": "0.4.0", "react": "16.14.0", diff --git a/docs/yarn.lock b/docs/yarn.lock index 0ba25e9e0304..5ae7d1542004 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -1716,7 +1716,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0": +"@babel/runtime@^7.1.2": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== @@ -1814,10 +1814,10 @@ "@francoischalifour/autocomplete-preset-algolia" "^1.0.0-alpha.28" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.68.tgz#7773c43dfd5b92ee97e3221b0062ba17197bff88" - integrity sha512-zh6zca9sAISK6sAJprOQMFmWZU3UVQLohcvO65KaueWoV5B0L1sxVUz4F/zcmVzbiNwCJzqK7QGT2zOD1BBY2w== +"@docusaurus/core@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.69.tgz#1452b9b2f2c5f67f75a45275e7eb5943c1f43a24" + integrity sha512-dJGbZ91QH9I5Nrhm0W6ZHe4j8Qv0RBclQkx3WayExxFSHgQUlBM0hBReJxAbTKc1uSJgG7OPpEWnzbZjyK9t/Q== dependencies: "@babel/core" "^7.12.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" @@ -1829,10 +1829,10 @@ "@babel/preset-typescript" "^7.12.1" "@babel/runtime" "^7.12.5" "@babel/runtime-corejs3" "^7.12.5" - "@docusaurus/cssnano-preset" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" + "@docusaurus/cssnano-preset" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" "@endiliey/static-site-generator-webpack-plugin" "^4.0.0" "@svgr/webpack" "^5.4.0" babel-loader "^8.2.1" @@ -1851,7 +1851,7 @@ eta "^1.11.0" express "^4.17.1" file-loader "^6.2.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" globby "^10.0.1" html-minifier-terser "^5.1.1" html-tags "^3.1.0" @@ -1879,7 +1879,7 @@ react-loadable-ssr-addon "^0.3.0" react-router "^5.2.0" react-router-config "^5.1.1" - react-router-dom "^5.1.2" + react-router-dom "^5.2.0" resolve-pathname "^3.0.0" semver "^6.3.0" serve-handler "^6.1.3" @@ -1895,30 +1895,30 @@ webpack-merge "^4.2.2" webpackbar "^4.0.0" -"@docusaurus/cssnano-preset@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-alpha.68.tgz#8b31e25eb15c24f93598e731c90d45422aba69a9" - integrity sha512-hlZqMLRxJNGNNTp0pcE0vraN5d4m/9lkgtLY0dBUey0eeLyvyW82VBrXQFBeJQ4J7ZG5fCbXfwDjszdLpddBMw== +"@docusaurus/cssnano-preset@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-alpha.69.tgz#19bc826850c9107c7bae507589284ac6f66b8485" + integrity sha512-Gv75LL4e2XnApNMPQ1mYVotH+0RKsg3WewPh7zSfEJvyzD6F+SHxIcu+tNSwkRMexlCLy6BHgOyEwvhom+VoaA== dependencies: cssnano-preset-advanced "^4.0.7" postcss "^7.0.2" postcss-combine-duplicated-selectors "^9.1.0" postcss-sort-media-queries "^1.7.26" -"@docusaurus/mdx-loader@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.68.tgz#dc80624d325bb62150f9b1f73151c8fda85117f7" - integrity sha512-YE/Auo0bt1qrpjE+cjQJBGp+pEwwJiFQMuWZSlNwhaxLICxqejWqFHWCbD2E+wAUEYr/CzFRLHot0FOYSqWHiA== +"@docusaurus/mdx-loader@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.69.tgz#cf882670d2cb05902197776bba471d04696ceae9" + integrity sha512-yieXX7RhzLasN1bBj/tMj43l+DRu3VEyFRC63khYwfAZyhKtlMEL9eEaKMN3eqvnZD2u6G+nxXafwpqLdqNAWg== dependencies: "@babel/parser" "^7.12.5" "@babel/traverse" "^7.12.5" - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" "@mdx-js/mdx" "^1.6.21" "@mdx-js/react" "^1.6.21" escape-html "^1.0.3" file-loader "^6.2.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" github-slugger "^1.3.0" gray-matter "^4.0.2" loader-utils "^2.0.0" @@ -1929,35 +1929,35 @@ url-loader "^4.1.1" webpack "^4.44.1" -"@docusaurus/plugin-client-redirects@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.0.0-alpha.68.tgz#037ee7a31c7e7c56427a003309f712e625c51be0" - integrity sha512-HY0bk1vLw5/cwr7UoyCSAzRsIncUNTUZqCmKNc0w3mFWJ1eLmcJ8M7Z5cG6lhGZXz4jYx362fwrRvBSNF9CFcA== +"@docusaurus/plugin-client-redirects@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.0.0-alpha.69.tgz#a31c1f4b11d98b362803d8878dafb952d4a3508e" + integrity sha512-ll4DNRKg0J6rRZdsviS6BG3LkA6sxSua/qYPr0ZymPMoaKJZLlyTmuLVKCwftIziri/khPL2J/Z+jQEJIBKWIQ== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" chalk "^3.0.0" eta "^1.11.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" globby "^10.0.1" joi "^17.2.1" lodash "^4.17.20" -"@docusaurus/plugin-content-blog@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.68.tgz#50216523d5f751c34d2448529af51d8f59d89c4a" - integrity sha512-z6mPO97JBPA+T/6XdnaKYFRIoBy3gLIuY9bJAXytwOzqdv6JDJPBrFRTcphD/RDJxu2HbtVkbGPG+gNA0NVbrQ== +"@docusaurus/plugin-content-blog@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.69.tgz#ba96b65c1d19452487330c860677ee20a5af5275" + integrity sha512-zN3c8ZiYpOid5f6YbxGZhVN8E5a4HmkyVJWTXts5tE0pdeiTuk0cfB5Iko4rnIDTztz7pJJCToIzKu07DcImww== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/mdx-loader" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/mdx-loader" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" chalk "^3.0.0" feed "^4.2.1" - fs-extra "^8.1.0" + fs-extra "^9.0.1" globby "^10.0.1" joi "^17.2.1" loader-utils "^1.2.3" @@ -1966,19 +1966,19 @@ remark-admonitions "^1.2.1" webpack "^4.44.1" -"@docusaurus/plugin-content-docs@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.68.tgz#d37e58c098ed385d64b3e9bbb1476d864705fed3" - integrity sha512-fL1NFPz07od3H0deOC819LM/AsaXxTI+oEzGIs9zJs66glbYgf93VjkvhgC/dz03VrFlFTXn1RSBoluiD+oIag== +"@docusaurus/plugin-content-docs@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.69.tgz#5ef4d293765d02e11ffb2a201c491a34f92e2a83" + integrity sha512-u+2juUJWFd/v/x8NU4UzQf6k5tc21oZj6s/IFQDTse/5QeHkMrkw0aqUeHbGWet4foBRnx+021vmrPPqxeV/dQ== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/mdx-loader" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/mdx-loader" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" chalk "^3.0.0" execa "^3.4.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" globby "^10.0.1" import-fresh "^3.2.2" joi "^17.2.1" @@ -1994,16 +1994,16 @@ utility-types "^3.10.0" webpack "^4.44.1" -"@docusaurus/plugin-content-pages@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.68.tgz#a72ef246a941e644a7e1fc48042bd14e2360e89d" - integrity sha512-nAXEe2on2lPCJmEAhvFeclpfBbDxHrLEmgCNW3ciPc3F9irwBrKu7xS3fRjD3WTghAa0CsYvAt+aQd4LlXalDg== +"@docusaurus/plugin-content-pages@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.69.tgz#215c52c7788b3794dc692ceb3d0a563adddc0435" + integrity sha512-RmEuhKFGagLyH42ggTweWHjaf82qbD9Xp7rXx10iHAUW2bJsMyGioag6gAw0Q+DeMMeHtMJdPsU99cuYqUdTpw== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/mdx-loader" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/mdx-loader" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" globby "^10.0.1" joi "^17.2.1" loader-utils "^1.2.3" @@ -2012,103 +2012,103 @@ slash "^3.0.0" webpack "^4.44.1" -"@docusaurus/plugin-debug@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.68.tgz#c98dd79d020110b259135dc8f53c841ec1034f4e" - integrity sha512-km/QJJ03ipGaFBjMIweCSpUz1B+yQWUax6EdI7BRODXotm+uqBNoUQNK35Ob0j6WIqShaLbiU5TL+aONKvzVbg== +"@docusaurus/plugin-debug@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.69.tgz#643c3119d688ffa318eeb7d719942e1e24ad5a95" + integrity sha512-wvLBvntbuh25RCkKEeuwLl2h9OzMXZLIQWNa6FvAtmc8Xaomn3JkYnWn/fAKiBiOExN1ZEf9XomKVLNIUJ9xOg== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" react-json-view "^1.19.1" -"@docusaurus/plugin-google-analytics@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.68.tgz#ec233219b5b19c9eaf9919dff07636ea9cdeb108" - integrity sha512-RyPIcUNkH0j/giVoWVgCz2yQm9yEssWGkPQUUGPcJVt/kgVMpPOnHPjV59fzBd5MkBK/yI5+1Wjoo+prVPUZkg== +"@docusaurus/plugin-google-analytics@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.69.tgz#031e0e4431842b1c9ba99fb6dd6dd258ee91f05e" + integrity sha512-CrGy8DeJqMZdNmbLNyfgLtjMcapOoqY8jbJiKYCELI8SZ8Ns28i8Yh5W9qe4KxGqSQXvVWHg36xJVG/xAF/6jA== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" -"@docusaurus/plugin-google-gtag@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.68.tgz#66675f58082a605568c0f0eee8fa9d66d0430734" - integrity sha512-GzAiXS58G5KZwvl4VBcWx8ZMnuIEIu/3J+bP0AQnr/WSwC1uotyDiq5NEUPcuYzJrhi9qJb4YU+lYQsPI/4AVA== +"@docusaurus/plugin-google-gtag@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.69.tgz#b6d9c77e99f60dbffe2622f0567fce589bc420b3" + integrity sha512-mDAKBRkB3UJMuAUPqC43mNr8PPu3QuUbCLisJIvg7VMp9XoAcOImNZWmY2Smd+Law2tJkW3cBFPvm3fcVvJ1vA== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" -"@docusaurus/plugin-sitemap@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.68.tgz#2584ea37c44753e044fd8a52c24c4cdcd4a616ae" - integrity sha512-t+F8P54yvHgTFMJ/87d7ODuGUOMed7Jtb6f1BYBpQw0VvBA0JqwywnhTkVm7S14o5wrpLs4RjrxNbg+O7XFatQ== +"@docusaurus/plugin-sitemap@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.69.tgz#ffda02b4be468b3dfeed8fde3c2f2971ee839078" + integrity sha512-DqrXm1PiWWNN5wbY1iVg0sdkCL3KZEj7uyjmZfXIfMQaEF2ErqJDY07QAwANrl27huPQmmc9tYwW3FqgKbVlbA== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - fs-extra "^8.1.0" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + fs-extra "^9.0.1" joi "^17.2.1" sitemap "^3.2.2" -"@docusaurus/preset-classic@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.68.tgz#1c807f648c2ac3efc8ff06326074097a06fe7b5a" - integrity sha512-Sf5rRh9HSW5ANsy0HuZbzVxJgec6WqnEIdhqU/1x3H13cLRCl4N5KMZn/8EWzzy11ynFeJ9y88nM/2Eh8bcitg== - dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/plugin-content-blog" "2.0.0-alpha.68" - "@docusaurus/plugin-content-docs" "2.0.0-alpha.68" - "@docusaurus/plugin-content-pages" "2.0.0-alpha.68" - "@docusaurus/plugin-debug" "2.0.0-alpha.68" - "@docusaurus/plugin-google-analytics" "2.0.0-alpha.68" - "@docusaurus/plugin-google-gtag" "2.0.0-alpha.68" - "@docusaurus/plugin-sitemap" "2.0.0-alpha.68" - "@docusaurus/theme-classic" "2.0.0-alpha.68" - "@docusaurus/theme-search-algolia" "2.0.0-alpha.68" - -"@docusaurus/theme-classic@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.68.tgz#e9afe258e9a3ecd096dd13984798351b0601cda2" - integrity sha512-tbuaLD3zNEy9/5M41cr7Mtv/cuSmqVFRzUo99DJoO0Fd7ud3yMKc79mNlsL9SqFMmAh9m0+sm7Ggm+R6oqWsPw== - dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/plugin-content-blog" "2.0.0-alpha.68" - "@docusaurus/plugin-content-docs" "2.0.0-alpha.68" - "@docusaurus/plugin-content-pages" "2.0.0-alpha.68" - "@docusaurus/theme-common" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" - "@docusaurus/utils-validation" "2.0.0-alpha.68" +"@docusaurus/preset-classic@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.69.tgz#f8ecfd610852e6754037f006edc38dc4d6146da6" + integrity sha512-4RiLXB+1vYzgTxGRnZqrYU/7gSsqUWYbofy7Ce5i4NF+L65B0mnBGaBhU0j1ZQJUMuozByRbf54wExZB25Re0A== + dependencies: + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.69" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.69" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.69" + "@docusaurus/plugin-debug" "2.0.0-alpha.69" + "@docusaurus/plugin-google-analytics" "2.0.0-alpha.69" + "@docusaurus/plugin-google-gtag" "2.0.0-alpha.69" + "@docusaurus/plugin-sitemap" "2.0.0-alpha.69" + "@docusaurus/theme-classic" "2.0.0-alpha.69" + "@docusaurus/theme-search-algolia" "2.0.0-alpha.69" + +"@docusaurus/theme-classic@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.69.tgz#64885b973df695e52356e3484fd9a03101b86e58" + integrity sha512-BterTyQvGrHS4oC/USXDG6GHt90oWUFyDg7oQ8WAa2zfkZTgcM3LiZeUYbn8vwy/HVU7hOWCixPTtY3R9iNZ9Q== + dependencies: + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.69" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.69" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.69" + "@docusaurus/theme-common" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" + "@docusaurus/utils-validation" "2.0.0-alpha.69" "@mdx-js/mdx" "^1.6.21" "@mdx-js/react" "^1.6.21" "@types/react-toggle" "^4.0.2" clsx "^1.1.1" copy-text-to-clipboard "^2.2.0" - infima "0.2.0-alpha.17" + infima "0.2.0-alpha.18" joi "^17.2.1" lodash "^4.17.19" parse-numeric-range "^1.2.0" prism-react-renderer "^1.1.1" prismjs "^1.22.0" prop-types "^15.7.2" - react-router-dom "^5.1.2" + react-router-dom "^5.2.0" react-toggle "^4.1.1" -"@docusaurus/theme-common@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-alpha.68.tgz#7815737396ef863446e695d41546349c55f02dc1" - integrity sha512-finmKDPZZUJgmcWZGQmiFGBOj3Iclzz63wNuot5ijfIHkqRRVKQnexUHrWlqSXyaXvZCKG0eLf9m0na5pG0ygA== +"@docusaurus/theme-common@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-alpha.69.tgz#4fd13db9fdd2b94e2010cd579ccfacde41824839" + integrity sha512-6Pq+gmmYOey86z0HaOOyIWMg+ftcl8KR0bamNQD3wkBtiEy7ymcHMlck887W+fFxttWLPo4+/HzfYFUqSoCHkQ== dependencies: - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/plugin-content-blog" "2.0.0-alpha.68" - "@docusaurus/plugin-content-docs" "2.0.0-alpha.68" - "@docusaurus/plugin-content-pages" "2.0.0-alpha.68" - "@docusaurus/types" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.69" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.69" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.69" + "@docusaurus/types" "2.0.0-alpha.69" -"@docusaurus/theme-search-algolia@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.68.tgz#f4a039afe4a9b46f7812cd08b2e884c5ffcad6c6" - integrity sha512-RJ3ETR53gM31w27qwQVl7u5ZFHOOMTpJlC8m0rBNVjX07StADG78AHtak11O4m9jQRFxmCV7AUv6F3PxsfUdXQ== +"@docusaurus/theme-search-algolia@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.69.tgz#955da97fd3052118fee1b5ffa1abfa33043fd67a" + integrity sha512-hPg54EwZudgqjs7D6QbWMbG3XmI10XtcqED9VMg6R3LPBG3317UhtuEGa1jJrF6hDN/HHbzWZOQ00LLBHpf9+Q== dependencies: "@docsearch/react" "^1.0.0-alpha.27" - "@docusaurus/core" "2.0.0-alpha.68" - "@docusaurus/utils" "2.0.0-alpha.68" + "@docusaurus/core" "2.0.0-alpha.69" + "@docusaurus/utils" "2.0.0-alpha.69" algoliasearch "^4.0.0" algoliasearch-helper "^3.1.1" clsx "^1.1.1" @@ -2116,34 +2116,34 @@ joi "^17.2.1" lodash "^4.17.19" -"@docusaurus/types@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.68.tgz#8709de8b7e6a535f3e835ef20b04b6f12bf328af" - integrity sha512-UcUuwJx2cjwbWBeXi2vNgpNn8XK1UheQ9v+DPWkHwcYHK4fgNuihf2BoA/PYmd8faclZTYuYV14waje31zmxbA== +"@docusaurus/types@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.69.tgz#05d1a28f325600185b3cb4088326c865fb4b54a9" + integrity sha512-8TgHmUMH5q+5D93nyugk/dtUeGPblRE++gxxrwjNYnJucRUNDKRC8kJhEozODGcSfXddTeMalPvbRKSz9Pxj2g== dependencies: "@types/webpack" "^4.41.0" commander "^4.0.1" querystring "0.2.0" webpack-merge "^4.2.2" -"@docusaurus/utils-validation@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.68.tgz#3497bd208dcd80233c44d4ca755bad91ec466d04" - integrity sha512-w0Nvl06+4yuBzTRmwAeuHtjEaCChVkAkJZOhVBChTdSgTTvpLKxFTxPXgRzeLaI0gkxHyTSHbmwcSqs1o7cT9A== +"@docusaurus/utils-validation@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.69.tgz#35adab0f2b787dfdcf508ea0aa3552578be583a5" + integrity sha512-kjSZS8WOCVlqCLHOhbIDqztmSAPkBva51oT/oohs4WaNdvT6e0PdLycUA2Dg3pXLw1FXsiMxluCYyC8BGX0B+Q== dependencies: - "@docusaurus/utils" "2.0.0-alpha.68" + "@docusaurus/utils" "2.0.0-alpha.69" chalk "^3.0.0" joi "^17.2.1" -"@docusaurus/utils@2.0.0-alpha.68": - version "2.0.0-alpha.68" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.68.tgz#2c806521edb0ef27c612c0d6380319cb9d8ded4a" - integrity sha512-Lp4LV2j4wkZtG2GofL3fnLF+Fmj+NAZjt3i0EyPE0dAyW6SW0oyoZQFtoZoEcxFGVViEM3VhXtsHdJxA6TDlFw== +"@docusaurus/utils@2.0.0-alpha.69": + version "2.0.0-alpha.69" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.69.tgz#9532cd489742beede570575ab70265dacecb3f24" + integrity sha512-RpxqcjPT0L+MxLyS/4QOHp/2hlKPcPoDyvfqtTJiS9DPtUzkH573a5/yMbfzz8IbPeYWRCPL2qxWtmN7XCZ/sQ== dependencies: - "@docusaurus/types" "2.0.0-alpha.68" + "@docusaurus/types" "2.0.0-alpha.69" chalk "^3.0.0" escape-string-regexp "^2.0.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" gray-matter "^4.0.2" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" @@ -5377,15 +5377,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -5640,11 +5631,6 @@ gray-matter@^4.0.2: section-matter "^1.0.0" strip-bom-string "^1.0.0" -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - gzip-size@5.1.1, gzip-size@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" @@ -6168,10 +6154,10 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -infima@0.2.0-alpha.17: - version "0.2.0-alpha.17" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.17.tgz#c3b472e6504cb142c673c1d4a1f118fe2a60a961" - integrity sha512-pzUfgqbgFSP5GqA5D617+pjPvuFNRdOKBkQ9PuErvQfLPPBCVncR+tyDveUleCYrE1Uk7fKSjSpRM35GGHyypA== +infima@0.2.0-alpha.18: + version "0.2.0-alpha.18" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.18.tgz#8ac62711f13ef99b1f4a45b3ac14571722a2ccf6" + integrity sha512-ndSEffXzjgM/eiSm5jpLTX6ON9MmylzxqBnV2bTiC3kCSyDYdvzTs+bSwf+C4TWayuqnRTnBK1JUePo3m6Bnfg== inflight@^1.0.4: version "1.0.6" @@ -6768,13 +6754,6 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -7376,15 +7355,6 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mini-create-react-context@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" - integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== - dependencies: - "@babel/runtime" "^7.4.0" - gud "^1.0.0" - tiny-warning "^1.0.2" - mini-create-react-context@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" @@ -9288,36 +9258,20 @@ react-router-config@^5.1.1: dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" - integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== - dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.1.2" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" - integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" - hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.3.0" - path-to-regexp "^1.7.0" prop-types "^15.6.2" - react-is "^16.6.0" + react-router "5.2.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@^5.2.0: +react-router@5.2.0, react-router@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== @@ -10601,7 +10555,7 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: +tiny-warning@^1.0.0, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== @@ -10938,11 +10892,6 @@ unist-util-visit@^2.0.1: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" From 2119a65f29dcb583a3a28e8dadb3c68240634632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 16:57:55 +0100 Subject: [PATCH 12/17] fix(core): fix comparison of object properties and bigints When comparing object types, we did not consider `null === undefined`, also the bigints in sqlite were wrongly hydrated, causing extra update queries when nothing changed. Closes #1117 --- packages/core/src/hydration/ObjectHydrator.ts | 10 +++++++ packages/core/src/utils/Utils.ts | 3 +- packages/sqlite/src/SqliteConnection.ts | 1 - tests/issues/GH940.test.ts | 29 ++++++++++++++----- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/packages/core/src/hydration/ObjectHydrator.ts b/packages/core/src/hydration/ObjectHydrator.ts index 4d51a336edbc..61f212e497ce 100644 --- a/packages/core/src/hydration/ObjectHydrator.ts +++ b/packages/core/src/hydration/ObjectHydrator.ts @@ -86,6 +86,16 @@ export class ObjectHydrator extends Hydrator { lines.push(` }`); } } + + if (prop.customType) { + context.set(`convertToJSValue_${prop.name}`, (val: any) => prop.customType.convertToJSValue(val, this.platform)); + context.set(`convertToDatabaseValue_${prop.name}`, (val: any) => prop.customType.convertToDatabaseValue(val, this.platform)); + + lines.push(` if (data.${prop.name} != null && convertCustomTypes) {`); + lines.push(` const value = convertToJSValue_${prop.name}(data.${prop.name});`); + lines.push(` data.${prop.name} = convertToDatabaseValue_${prop.name}(value);`); // make sure the value is comparable + lines.push(` }`); + } } else if (prop.reference === ReferenceType.ONE_TO_MANY || prop.reference === ReferenceType.MANY_TO_MANY) { lines.push(...this.createCollectionItemMapper(prop)); lines.push(` if (Array.isArray(data.${prop.name})) {`); diff --git a/packages/core/src/utils/Utils.ts b/packages/core/src/utils/Utils.ts index 9ce9ed37cda2..5fdf37d011cf 100644 --- a/packages/core/src/utils/Utils.ts +++ b/packages/core/src/utils/Utils.ts @@ -14,7 +14,8 @@ import { Platform } from '../platforms'; export const ObjectBindingPattern = Symbol('ObjectBindingPattern'); export function compareObjects(a: any, b: any) { - if (a === b) { + // eslint-disable-next-line eqeqeq + if (a === b || (a == null && b == null)) { return true; } diff --git a/packages/sqlite/src/SqliteConnection.ts b/packages/sqlite/src/SqliteConnection.ts index f65a46f7357f..48888e71a030 100644 --- a/packages/sqlite/src/SqliteConnection.ts +++ b/packages/sqlite/src/SqliteConnection.ts @@ -4,7 +4,6 @@ import { AbstractSqlConnection, Knex, MonkeyPatchable } from '@mikro-orm/knex'; export class SqliteConnection extends AbstractSqlConnection { - // static readonly RUN_QUERY_RE = '^insert into|update|delete'; static readonly RUN_QUERY_RE = /^insert into|^update|^delete|^truncate/; async connect(): Promise { diff --git a/tests/issues/GH940.test.ts b/tests/issues/GH940.test.ts index 703551bda9a0..0ef99bf5caeb 100644 --- a/tests/issues/GH940.test.ts +++ b/tests/issues/GH940.test.ts @@ -1,4 +1,4 @@ -import { BigIntType, Collection, Entity, ManyToOne, MikroORM, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; +import { BigIntType, Collection, Entity, Logger, ManyToOne, MikroORM, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; import { SchemaGenerator, SqliteDriver } from '@mikro-orm/sqlite'; @Entity() @@ -18,20 +18,20 @@ class UserOrganization { @PrimaryKey({ type: BigIntType }) id!: string; - @ManyToOne(() => User) - user: User; + @ManyToOne(() => User, { nullable: true }) + user?: User; @Property() isAdmin: boolean; - constructor(user: User, isAdmin: boolean) { + constructor(user?: User, isAdmin = false) { this.user = user; this.isAdmin = isAdmin; } } -describe('GH issue 940', () => { +describe('GH issue 940, 1117', () => { let orm: MikroORM; @@ -40,7 +40,6 @@ describe('GH issue 940', () => { entities: [User, UserOrganization], dbName: `:memory:`, type: 'sqlite', - port: 3307, }); await new SchemaGenerator(orm.em).createSchema(); }); @@ -48,7 +47,6 @@ describe('GH issue 940', () => { afterAll(async () => await orm.close(true)); test('A boolean in the nested where conditions is kept even if the primary key is BigIntType', async () => { - const user1 = new User(); const user2 = new User(); const user1org = new UserOrganization(user1, true); @@ -67,4 +65,21 @@ describe('GH issue 940', () => { ]); }); + test('bigint type is correctly diffed (null vs undefined) - GH #1117', async () => { + const user1 = new User(); + const user2 = new User(); + const org1 = new UserOrganization(user1, true); + const org2 = new UserOrganization(user2, false); + const org3 = new UserOrganization(); + await orm.em.persistAndFlush([org1, org2, org3]); + orm.em.clear(); + + const orgs = await orm.em.find(UserOrganization, {}); + const mock = jest.fn(); + const logger = new Logger(mock, ['query', 'query-params']); + Object.assign(orm.config, { logger }); + await orm.em.flush(); + expect(mock.mock.calls).toHaveLength(0); + }); + }); From 4ef8980301e64dda8578d75b4f35bff52326edd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 18:16:34 +0100 Subject: [PATCH 13/17] refactor: improve `Platform.isRaw()` --- packages/core/src/platforms/Platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/platforms/Platform.ts b/packages/core/src/platforms/Platform.ts index c458a4665907..99a205666f92 100644 --- a/packages/core/src/platforms/Platform.ts +++ b/packages/core/src/platforms/Platform.ts @@ -126,7 +126,7 @@ export abstract class Platform { } isRaw(value: any): boolean { - return '__raw' in value; + return typeof value === 'object' && '__raw' in value; } getBigIntTypeDeclarationSQL(): string { From 86ec3b3a543a1091d5ec500287e9ee870ddde186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 20:11:12 +0100 Subject: [PATCH 14/17] fix(core): do not use custom toJSON when storing result cache When we stored cached entities, previously custom toJSON methods of its relations would be called. Those methods might not produce a valid DTO that can be used as input for `em.create()`. This introduces new method on the `WrappedEntity` helper: `toPOJO`, that acts like `toObject`, but never uses custom overridden methods. --- packages/core/src/EntityManager.ts | 4 ++-- packages/core/src/entity/EntityTransformer.ts | 24 ++++++++++++------- packages/core/src/entity/WrappedEntity.ts | 4 ++++ packages/core/src/typings.ts | 1 + tests/EntityManager.postgre.test.ts | 12 ++++++---- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/packages/core/src/EntityManager.ts b/packages/core/src/EntityManager.ts index 239fb25e09b5..4818023c4956 100644 --- a/packages/core/src/EntityManager.ts +++ b/packages/core/src/EntityManager.ts @@ -126,7 +126,7 @@ export class EntityManager { const unique = Utils.unique(ret); await this.entityLoader.populate(entityName, unique, options.populate as unknown as PopulateOptions[], { ...options, where, convertCustomTypes: false }); - await this.storeCache(options.cache, cached!, () => unique.map(e => e.__helper!.toObject())); + await this.storeCache(options.cache, cached!, () => unique.map(e => e.__helper!.toPOJO())); return unique as Loaded[]; } @@ -285,7 +285,7 @@ export class EntityManager { entity = this.getEntityFactory().create(entityName, data as EntityData, { refresh: options.refresh, merge: true, convertCustomTypes: true }); this.getUnitOfWork().registerManaged(entity, data as EntityData, options.refresh); await this.lockAndPopulate(entityName, entity, where, options); - await this.storeCache(options.cache, cached!, () => entity!.__helper!.toObject()); + await this.storeCache(options.cache, cached!, () => entity!.__helper!.toPOJO()); return entity as Loaded; } diff --git a/packages/core/src/entity/EntityTransformer.ts b/packages/core/src/entity/EntityTransformer.ts index 4391481ef5c7..14f1d11835c3 100644 --- a/packages/core/src/entity/EntityTransformer.ts +++ b/packages/core/src/entity/EntityTransformer.ts @@ -82,7 +82,7 @@ export class SerializationContext> { export class EntityTransformer { - static toObject>(entity: T, ignoreFields: string[] = []): EntityData { + static toObject>(entity: T, ignoreFields: string[] = [], raw = false): EntityData { const wrapped = entity.__helper!; let contextCreated = false; @@ -104,7 +104,7 @@ export class EntityTransformer { if (meta.properties[pk].serializer) { value = meta.properties[pk].serializer!(entity[pk]); } else if (Utils.isEntity(entity[pk], true)) { - value = EntityTransformer.processEntity(pk, entity, entity.__platform!); + value = EntityTransformer.processEntity(pk, entity, entity.__platform!, raw); } else { value = entity.__platform!.normalizePrimaryKey(entity[pk] as unknown as IPrimaryKey); } @@ -127,7 +127,7 @@ export class EntityTransformer { return [prop, undefined]; } - const val = EntityTransformer.processProperty(prop as keyof T & string, entity); + const val = EntityTransformer.processProperty(prop as keyof T & string, entity, raw); root!.leave(meta.className, prop); return [prop, val]; @@ -169,7 +169,7 @@ export class EntityTransformer { return prop; } - private static processProperty>(prop: keyof T & string, entity: T): T[keyof T] | undefined { + private static processProperty>(prop: keyof T & string, entity: T, raw: boolean): T[keyof T] | undefined { const property = entity.__meta!.properties[prop]; /* istanbul ignore next */ @@ -180,7 +180,7 @@ export class EntityTransformer { } if (Utils.isCollection(entity[prop])) { - return EntityTransformer.processCollection(prop, entity); + return EntityTransformer.processCollection(prop, entity, raw); } /* istanbul ignore next */ @@ -191,16 +191,20 @@ export class EntityTransformer { } if (Utils.isEntity(entity[prop], true)) { - return EntityTransformer.processEntity(prop, entity, entity.__platform!); + return EntityTransformer.processEntity(prop, entity, entity.__platform!, raw); } return entity[prop]; } - private static processEntity>(prop: keyof T, entity: T, platform: Platform): T[keyof T] | undefined { + private static processEntity>(prop: keyof T, entity: T, platform: Platform, raw: boolean): T[keyof T] | undefined { const child = entity[prop] as unknown as T | Reference; const wrapped = (child as T).__helper!; + if (raw && wrapped.isInitialized() && child !== entity) { + return wrapped.toPOJO() as T[keyof T]; + } + if (wrapped.isInitialized() && wrapped.__populated && child !== entity && !wrapped.__lazyInitialized) { const args = [...wrapped.__meta.toJsonParams.map(() => undefined)]; return wrap(child).toJSON(...args) as T[keyof T]; @@ -209,9 +213,13 @@ export class EntityTransformer { return platform.normalizePrimaryKey(wrapped.getPrimaryKey() as IPrimaryKey) as unknown as T[keyof T]; } - private static processCollection>(prop: keyof T, entity: T): T[keyof T] | undefined { + private static processCollection>(prop: keyof T, entity: T, raw: boolean): T[keyof T] | undefined { const col = entity[prop] as unknown as Collection; + if (raw && col.isInitialized(true)) { + return col.getItems().map(item => wrap(item).toPOJO()) as unknown as T[keyof T]; + } + if (col.isInitialized(true) && col.shouldPopulate()) { return col.toArray() as unknown as T[keyof T]; } diff --git a/packages/core/src/entity/WrappedEntity.ts b/packages/core/src/entity/WrappedEntity.ts index 49ef207eacb8..c4245242f3ea 100644 --- a/packages/core/src/entity/WrappedEntity.ts +++ b/packages/core/src/entity/WrappedEntity.ts @@ -44,6 +44,10 @@ export class WrappedEntity, PK extends keyof T> { return EntityTransformer.toObject(this.entity, ignoreFields) as EntityData; } + toPOJO(): EntityData { + return EntityTransformer.toObject(this.entity, [], true) as EntityData; + } + toJSON(...args: any[]): EntityData & Dictionary { // toJSON methods is added to thee prototype during discovery to support automatic serialization via JSON.stringify() return (this.entity as Dictionary).toJSON(...args); diff --git a/packages/core/src/typings.ts b/packages/core/src/typings.ts index e58cfd5f3285..95f101a697eb 100644 --- a/packages/core/src/typings.ts +++ b/packages/core/src/typings.ts @@ -83,6 +83,7 @@ export interface IWrappedEntity, PK extends keyof T, P ex toReference(): IdentifiedReference & LoadedReference; toObject(ignoreFields?: string[]): Dictionary; toJSON(...args: any[]): Dictionary; + toPOJO(): Dictionary; assign(data: any, options?: AssignOptions | boolean): T; } diff --git a/tests/EntityManager.postgre.test.ts b/tests/EntityManager.postgre.test.ts index 4778fe9acee4..da68f94a74a1 100644 --- a/tests/EntityManager.postgre.test.ts +++ b/tests/EntityManager.postgre.test.ts @@ -18,6 +18,10 @@ describe('EntityManagerPostgre', () => { const book1 = new Book2('My Life on The Wall, part 1', author); const book2 = new Book2('My Life on The Wall, part 2', author); const book3 = new Book2('My Life on The Wall, part 3', author); + const publisher = new Publisher2(); + book1.publisher = wrap(publisher).toReference(); + book2.publisher = wrap(publisher).toReference(); + book3.publisher = wrap(publisher).toReference(); const tag1 = new BookTag2('silly'); const tag2 = new BookTag2('funny'); const tag3 = new BookTag2('sick'); @@ -1287,22 +1291,22 @@ describe('EntityManagerPostgre', () => { const logger = new Logger(mock, ['query']); Object.assign(orm.config, { logger }); - const res1 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags'], cache: 50, strategy: LoadStrategy.JOINED }); + const res1 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags', 'publisher'], cache: 50, strategy: LoadStrategy.JOINED }); expect(mock.mock.calls).toHaveLength(1); orm.em.clear(); - const res2 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags'], cache: 50, strategy: LoadStrategy.JOINED }); + const res2 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags', 'publisher'], cache: 50, strategy: LoadStrategy.JOINED }); expect(mock.mock.calls).toHaveLength(1); // cache hit, no new query fired expect(res1.map(e => wrap(e).toObject())).toEqual(res2.map(e => wrap(e).toObject())); orm.em.clear(); - const res3 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags'], cache: 50, strategy: LoadStrategy.JOINED }); + const res3 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags', 'publisher'], cache: 50, strategy: LoadStrategy.JOINED }); expect(mock.mock.calls).toHaveLength(1); // cache hit, no new query fired expect(res1.map(e => wrap(e).toObject())).toEqual(res3.map(e => wrap(e).toObject())); orm.em.clear(); await new Promise(r => setTimeout(r, 100)); // wait for cache to expire - const res4 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags'], cache: 50, strategy: LoadStrategy.JOINED }); + const res4 = await orm.em.find(Book2, { author: { name: 'Jon Snow' } }, { populate: ['author', 'tags', 'publisher'], cache: 50, strategy: LoadStrategy.JOINED }); expect(mock.mock.calls).toHaveLength(2); // cache miss, new query fired expect(res1.map(e => wrap(e).toObject())).toEqual(res4.map(e => wrap(e).toObject())); }); From 6e6c8106ff7f5b4481cb77aeb9c69f81efba19b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 20:27:26 +0100 Subject: [PATCH 15/17] refactor: add `BaseEntity.toPOJO()` --- packages/core/src/entity/BaseEntity.ts | 4 ++++ packages/core/src/entity/WrappedEntity.ts | 2 +- packages/core/src/typings.ts | 2 +- tests/issues/GH1003.test.ts | 11 +++++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/core/src/entity/BaseEntity.ts b/packages/core/src/entity/BaseEntity.ts index 7b77ab19bfb9..a0770a059d3a 100644 --- a/packages/core/src/entity/BaseEntity.ts +++ b/packages/core/src/entity/BaseEntity.ts @@ -28,6 +28,10 @@ export abstract class BaseEntity, PK extends keyof T, P e return this.toObject(...args); } + toPOJO(): EntityData { + return (this as unknown as T).__helper!.toPOJO(); + } + assign(data: EntityData, options?: AssignOptions): T { return EntityAssigner.assign(this as unknown as T, data, options); } diff --git a/packages/core/src/entity/WrappedEntity.ts b/packages/core/src/entity/WrappedEntity.ts index c4245242f3ea..7ce6cee6e5ab 100644 --- a/packages/core/src/entity/WrappedEntity.ts +++ b/packages/core/src/entity/WrappedEntity.ts @@ -45,7 +45,7 @@ export class WrappedEntity, PK extends keyof T> { } toPOJO(): EntityData { - return EntityTransformer.toObject(this.entity, [], true) as EntityData; + return EntityTransformer.toObject(this.entity, [], true); } toJSON(...args: any[]): EntityData & Dictionary { diff --git a/packages/core/src/typings.ts b/packages/core/src/typings.ts index 95f101a697eb..882e43b44743 100644 --- a/packages/core/src/typings.ts +++ b/packages/core/src/typings.ts @@ -83,7 +83,7 @@ export interface IWrappedEntity, PK extends keyof T, P ex toReference(): IdentifiedReference & LoadedReference; toObject(ignoreFields?: string[]): Dictionary; toJSON(...args: any[]): Dictionary; - toPOJO(): Dictionary; + toPOJO(): EntityData; assign(data: any, options?: AssignOptions | boolean): T; } diff --git a/tests/issues/GH1003.test.ts b/tests/issues/GH1003.test.ts index 2ca210e85bb4..6905b66c2b98 100644 --- a/tests/issues/GH1003.test.ts +++ b/tests/issues/GH1003.test.ts @@ -66,6 +66,17 @@ describe('GH issue 1003', () => { orm.em.persist(newChild); expect(removeStack.size).toBe(1); await orm.em.flush(); + expect(newChild.toPOJO()).toEqual({ + id: 'newChildId', + parent: { + id: 'parentId', + children: [ + { id: 'childId2', parent: { id: 'parentId' } }, + { id: 'newChildId' }, + ], + }, + }) + ; }); }); From 6f6a204b6a73a6bbfea65f5511c5fe1f29a9a199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 20:55:25 +0100 Subject: [PATCH 16/17] fix(core): disable propagation when `mapToPk` is used Closes #1124 --- packages/core/src/entity/EntityHelper.ts | 2 +- packages/core/src/hydration/ObjectHydrator.ts | 2 +- tests/issues/GH1124.test.ts | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 tests/issues/GH1124.test.ts diff --git a/packages/core/src/entity/EntityHelper.ts b/packages/core/src/entity/EntityHelper.ts index 1339ee662eb5..80579c650d92 100644 --- a/packages/core/src/entity/EntityHelper.ts +++ b/packages/core/src/entity/EntityHelper.ts @@ -79,7 +79,7 @@ export class EntityHelper { private static defineReferenceProperties>(meta: EntityMetadata): void { Object .values(meta.properties) - .filter(prop => [ReferenceType.ONE_TO_ONE, ReferenceType.MANY_TO_ONE].includes(prop.reference) && (prop.inversedBy || prop.mappedBy)) + .filter(prop => [ReferenceType.ONE_TO_ONE, ReferenceType.MANY_TO_ONE].includes(prop.reference) && (prop.inversedBy || prop.mappedBy) && !prop.mapToPk) .forEach(prop => { Object.defineProperty(meta.prototype, prop.name, { set(val: AnyEntity) { diff --git a/packages/core/src/hydration/ObjectHydrator.ts b/packages/core/src/hydration/ObjectHydrator.ts index 61f212e497ce..300890e09d11 100644 --- a/packages/core/src/hydration/ObjectHydrator.ts +++ b/packages/core/src/hydration/ObjectHydrator.ts @@ -76,7 +76,7 @@ export class ObjectHydrator extends Hydrator { lines.push(` }`); lines.push(` }`); - if (prop.reference === ReferenceType.ONE_TO_ONE) { + if (prop.reference === ReferenceType.ONE_TO_ONE && !prop.mapToPk) { const meta2 = this.metadata.get(prop.type); const prop2 = meta2.properties[prop.inversedBy || prop.mappedBy]; diff --git a/tests/issues/GH1124.test.ts b/tests/issues/GH1124.test.ts new file mode 100644 index 000000000000..ad67171c4826 --- /dev/null +++ b/tests/issues/GH1124.test.ts @@ -0,0 +1,46 @@ +import { Entity, MikroORM, OneToOne, PrimaryKey } from '@mikro-orm/core'; +import { AbstractSqlDriver } from '@mikro-orm/knex'; + +@Entity() +export class B { + + @OneToOne({ entity: 'A', joinColumn: 'id', primary: true, mapToPk: true }) + id!: number; + +} + +@Entity() +export class A { + + @PrimaryKey() + id!: number; + + @OneToOne({ entity: 'B', mappedBy: 'id' }) + entity!: B; + +} + +describe('GH issue 1124', () => { + + let orm: MikroORM; + + beforeAll(async () => { + orm = await MikroORM.init({ + entities: [A, B], + dbName: ':memory:', + type: 'sqlite', + }); + await orm.getSchemaGenerator().createSchema(); + }); + + afterAll(() => orm.close(true)); + + test('According to docs we can use mapToPk option on M:1 and 1:1 relations and it does not work for 1:1', async () => { + const a = orm.em.create(A, { entity: new B() }); + await orm.em.persistAndFlush(a); + orm.em.clear(); + + const entity = await orm.em.findOneOrFail(A, { id: 1 }); + expect(entity.entity).toMatchObject({ id: 1 }); + }); +}); From 4f3acd2a23424d077e4f740004bed03b2c5cdb79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 24 Nov 2020 22:58:35 +0100 Subject: [PATCH 17/17] chore(release): v4.3.2 --- CHANGELOG.md | 16 ++++++++++++++++ lerna.json | 2 +- packages/cli/CHANGELOG.md | 8 ++++++++ packages/cli/package.json | 10 +++++----- packages/core/CHANGELOG.md | 16 ++++++++++++++++ packages/core/package.json | 2 +- packages/entity-generator/CHANGELOG.md | 8 ++++++++ packages/entity-generator/package.json | 6 +++--- packages/knex/CHANGELOG.md | 11 +++++++++++ packages/knex/package.json | 4 ++-- packages/mariadb/CHANGELOG.md | 8 ++++++++ packages/mariadb/package.json | 6 +++--- packages/migrations/CHANGELOG.md | 8 ++++++++ packages/migrations/package.json | 6 +++--- packages/mikro-orm/CHANGELOG.md | 8 ++++++++ packages/mikro-orm/package.json | 12 ++++++------ packages/mongodb/CHANGELOG.md | 8 ++++++++ packages/mongodb/package.json | 4 ++-- packages/mysql-base/CHANGELOG.md | 8 ++++++++ packages/mysql-base/package.json | 6 +++--- packages/mysql/CHANGELOG.md | 8 ++++++++ packages/mysql/package.json | 6 +++--- packages/postgresql/CHANGELOG.md | 8 ++++++++ packages/postgresql/package.json | 6 +++--- packages/reflection/CHANGELOG.md | 8 ++++++++ packages/reflection/package.json | 4 ++-- packages/sqlite/CHANGELOG.md | 11 +++++++++++ packages/sqlite/package.json | 6 +++--- 28 files changed, 174 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a48d29d029df..1a32630f6a61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + + +### Bug Fixes + +* **core:** disable propagation when `mapToPk` is used ([6f6a204](https://github.com/mikro-orm/mikro-orm/commit/6f6a204b6a73a6bbfea65f5511c5fe1f29a9a199)), closes [#1124](https://github.com/mikro-orm/mikro-orm/issues/1124) +* **core:** do not use custom toJSON when storing result cache ([86ec3b3](https://github.com/mikro-orm/mikro-orm/commit/86ec3b3a543a1091d5ec500287e9ee870ddde186)) +* **core:** fix comparison of object properties and bigints ([2119a65](https://github.com/mikro-orm/mikro-orm/commit/2119a65f29dcb583a3a28e8dadb3c68240634632)), closes [#1117](https://github.com/mikro-orm/mikro-orm/issues/1117) +* **core:** fix computing changesets with reference as PK ([5504436](https://github.com/mikro-orm/mikro-orm/commit/55044366242f6592565f85ad035e059ec3081ee0)), closes [#1111](https://github.com/mikro-orm/mikro-orm/issues/1111) +* **core:** fix serialization of properties with same name ([d4d9c48](https://github.com/mikro-orm/mikro-orm/commit/d4d9c48bd17ad2cca5b9c134c2ca433040bf32ee)), closes [#1115](https://github.com/mikro-orm/mikro-orm/issues/1115) +* **sql:** allow using raw value for JSON prop with custom type ([2a17c59](https://github.com/mikro-orm/mikro-orm/commit/2a17c59cf2db4c6c211ca80ad9c82d64c94289df)), closes [#1112](https://github.com/mikro-orm/mikro-orm/issues/1112) + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) diff --git a/lerna.json b/lerna.json index 8868fb64fe16..2d340f62a509 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "4.3.1", + "version": "4.3.2", "command": { "version": { "conventionalCommits": true, diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b96a6389ac94..4f7346df298b 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/cli + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/cli diff --git a/packages/cli/package.json b/packages/cli/package.json index ad0841b2b107..cd7d772f14c3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/cli", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -50,10 +50,10 @@ "access": "public" }, "dependencies": { - "@mikro-orm/core": "^4.3.1", - "@mikro-orm/entity-generator": "^4.3.1", - "@mikro-orm/knex": "^4.3.1", - "@mikro-orm/migrations": "^4.3.1", + "@mikro-orm/core": "^4.3.2", + "@mikro-orm/entity-generator": "^4.3.2", + "@mikro-orm/knex": "^4.3.2", + "@mikro-orm/migrations": "^4.3.2", "ansi-colors": "4.1.1", "cli-table3": "0.6.0", "fs-extra": "9.0.1", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 80b9382ff904..415eff71a109 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + + +### Bug Fixes + +* **core:** disable propagation when `mapToPk` is used ([6f6a204](https://github.com/mikro-orm/mikro-orm/commit/6f6a204b6a73a6bbfea65f5511c5fe1f29a9a199)), closes [#1124](https://github.com/mikro-orm/mikro-orm/issues/1124) +* **core:** do not use custom toJSON when storing result cache ([86ec3b3](https://github.com/mikro-orm/mikro-orm/commit/86ec3b3a543a1091d5ec500287e9ee870ddde186)) +* **core:** fix comparison of object properties and bigints ([2119a65](https://github.com/mikro-orm/mikro-orm/commit/2119a65f29dcb583a3a28e8dadb3c68240634632)), closes [#1117](https://github.com/mikro-orm/mikro-orm/issues/1117) +* **core:** fix computing changesets with reference as PK ([5504436](https://github.com/mikro-orm/mikro-orm/commit/55044366242f6592565f85ad035e059ec3081ee0)), closes [#1111](https://github.com/mikro-orm/mikro-orm/issues/1111) +* **core:** fix serialization of properties with same name ([d4d9c48](https://github.com/mikro-orm/mikro-orm/commit/d4d9c48bd17ad2cca5b9c134c2ca433040bf32ee)), closes [#1115](https://github.com/mikro-orm/mikro-orm/issues/1115) +* **sql:** allow using raw value for JSON prop with custom type ([2a17c59](https://github.com/mikro-orm/mikro-orm/commit/2a17c59cf2db4c6c211ca80ad9c82d64c94289df)), closes [#1112](https://github.com/mikro-orm/mikro-orm/issues/1112) + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) diff --git a/packages/core/package.json b/packages/core/package.json index f6132cb4621f..20affca30409 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/core", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/packages/entity-generator/CHANGELOG.md b/packages/entity-generator/CHANGELOG.md index 3639a1f5c81e..a66540fc05fb 100644 --- a/packages/entity-generator/CHANGELOG.md +++ b/packages/entity-generator/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/entity-generator + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/entity-generator diff --git a/packages/entity-generator/package.json b/packages/entity-generator/package.json index c38f3d9cfea8..8184a8d7a265 100644 --- a/packages/entity-generator/package.json +++ b/packages/entity-generator/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/entity-generator", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,11 +47,11 @@ "access": "public" }, "dependencies": { - "@mikro-orm/knex": "^4.3.1", + "@mikro-orm/knex": "^4.3.2", "fs-extra": "9.0.1" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/knex/CHANGELOG.md b/packages/knex/CHANGELOG.md index 646500c7d3e3..6b30d0a9338f 100644 --- a/packages/knex/CHANGELOG.md +++ b/packages/knex/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + + +### Bug Fixes + +* **sql:** allow using raw value for JSON prop with custom type ([2a17c59](https://github.com/mikro-orm/mikro-orm/commit/2a17c59cf2db4c6c211ca80ad9c82d64c94289df)), closes [#1112](https://github.com/mikro-orm/mikro-orm/issues/1112) + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) diff --git a/packages/knex/package.json b/packages/knex/package.json index aff9aaaa09af..97ba4f3183bd 100644 --- a/packages/knex/package.json +++ b/packages/knex/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/knex", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -52,7 +52,7 @@ "sqlstring": "2.3.2" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0", diff --git a/packages/mariadb/CHANGELOG.md b/packages/mariadb/CHANGELOG.md index c3469909573e..402688d1fab1 100644 --- a/packages/mariadb/CHANGELOG.md +++ b/packages/mariadb/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/mariadb + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/mariadb diff --git a/packages/mariadb/package.json b/packages/mariadb/package.json index bc8792ad5b29..b36f0ad061fd 100644 --- a/packages/mariadb/package.json +++ b/packages/mariadb/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/mariadb", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,11 +47,11 @@ "access": "public" }, "dependencies": { - "@mikro-orm/mysql-base": "^4.3.1", + "@mikro-orm/mysql-base": "^4.3.2", "mariadb": "2.5.1" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/migrations/CHANGELOG.md b/packages/migrations/CHANGELOG.md index 427d70a55b91..4f31e2c2f12f 100644 --- a/packages/migrations/CHANGELOG.md +++ b/packages/migrations/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/migrations + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/migrations diff --git a/packages/migrations/package.json b/packages/migrations/package.json index 16e5b5ae41eb..ed108a11f632 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/migrations", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,13 +47,13 @@ "access": "public" }, "dependencies": { - "@mikro-orm/knex": "^4.3.1", + "@mikro-orm/knex": "^4.3.2", "@types/umzug": "2.3.0", "fs-extra": "9.0.1", "umzug": "2.3.0" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/mikro-orm/CHANGELOG.md b/packages/mikro-orm/CHANGELOG.md index b3da4e26a821..94503148b34d 100644 --- a/packages/mikro-orm/CHANGELOG.md +++ b/packages/mikro-orm/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package mikro-orm + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package mikro-orm diff --git a/packages/mikro-orm/package.json b/packages/mikro-orm/package.json index d7fc9020777c..45d25d0796d0 100644 --- a/packages/mikro-orm/package.json +++ b/packages/mikro-orm/package.json @@ -1,6 +1,6 @@ { "name": "mikro-orm", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,11 +47,11 @@ "access": "public" }, "dependencies": { - "@mikro-orm/cli": "^4.3.1", - "@mikro-orm/core": "^4.3.1", - "@mikro-orm/entity-generator": "^4.3.1", - "@mikro-orm/migrations": "^4.3.1", - "@mikro-orm/reflection": "^4.3.1" + "@mikro-orm/cli": "^4.3.2", + "@mikro-orm/core": "^4.3.2", + "@mikro-orm/entity-generator": "^4.3.2", + "@mikro-orm/migrations": "^4.3.2", + "@mikro-orm/reflection": "^4.3.2" }, "peerDependencies": { "@mikro-orm/mariadb": "^4.0.0", diff --git a/packages/mongodb/CHANGELOG.md b/packages/mongodb/CHANGELOG.md index b222bfc5dda6..e2a5e3e9550f 100644 --- a/packages/mongodb/CHANGELOG.md +++ b/packages/mongodb/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/mongodb + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/mongodb diff --git a/packages/mongodb/package.json b/packages/mongodb/package.json index a37b96ebd578..3de51e2f9d64 100644 --- a/packages/mongodb/package.json +++ b/packages/mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/mongodb", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -51,7 +51,7 @@ "mongodb": "3.6.3" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/mysql-base/CHANGELOG.md b/packages/mysql-base/CHANGELOG.md index 27bde785662c..5e815b65db32 100644 --- a/packages/mysql-base/CHANGELOG.md +++ b/packages/mysql-base/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/mysql-base + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/mysql-base diff --git a/packages/mysql-base/package.json b/packages/mysql-base/package.json index 26aa365b7483..c07f69d8c5a5 100644 --- a/packages/mysql-base/package.json +++ b/packages/mysql-base/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/mysql-base", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,10 +47,10 @@ "access": "public" }, "dependencies": { - "@mikro-orm/knex": "^4.3.1" + "@mikro-orm/knex": "^4.3.2" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0", diff --git a/packages/mysql/CHANGELOG.md b/packages/mysql/CHANGELOG.md index 8b04f25f211b..df23b72e4df2 100644 --- a/packages/mysql/CHANGELOG.md +++ b/packages/mysql/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/mysql + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/mysql diff --git a/packages/mysql/package.json b/packages/mysql/package.json index 29b50c4b4c4f..15a5c98ae638 100644 --- a/packages/mysql/package.json +++ b/packages/mysql/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/mysql", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,11 +47,11 @@ "access": "public" }, "dependencies": { - "@mikro-orm/mysql-base": "^4.3.1", + "@mikro-orm/mysql-base": "^4.3.2", "mysql2": "2.2.5" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/postgresql/CHANGELOG.md b/packages/postgresql/CHANGELOG.md index 6c705798d1d0..e87e43df2856 100644 --- a/packages/postgresql/CHANGELOG.md +++ b/packages/postgresql/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/postgresql + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) diff --git a/packages/postgresql/package.json b/packages/postgresql/package.json index 174ada4c785a..ed1a561692df 100644 --- a/packages/postgresql/package.json +++ b/packages/postgresql/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/postgresql", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,11 +47,11 @@ "access": "public" }, "dependencies": { - "@mikro-orm/knex": "^4.3.1", + "@mikro-orm/knex": "^4.3.2", "pg": "8.5.1" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/reflection/CHANGELOG.md b/packages/reflection/CHANGELOG.md index a9512250d8bf..4e139c4cb2f9 100644 --- a/packages/reflection/CHANGELOG.md +++ b/packages/reflection/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + +**Note:** Version bump only for package @mikro-orm/reflection + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) diff --git a/packages/reflection/package.json b/packages/reflection/package.json index 0d453a8d8280..2a0bceac0dec 100644 --- a/packages/reflection/package.json +++ b/packages/reflection/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/reflection", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -51,7 +51,7 @@ "ts-morph": "9.0.0" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0" diff --git a/packages/sqlite/CHANGELOG.md b/packages/sqlite/CHANGELOG.md index 3c6b622edad4..6e69c8e215fb 100644 --- a/packages/sqlite/CHANGELOG.md +++ b/packages/sqlite/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.2](https://github.com/mikro-orm/mikro-orm/compare/v4.3.1...v4.3.2) (2020-11-24) + + +### Bug Fixes + +* **core:** fix comparison of object properties and bigints ([2119a65](https://github.com/mikro-orm/mikro-orm/commit/2119a65f29dcb583a3a28e8dadb3c68240634632)), closes [#1117](https://github.com/mikro-orm/mikro-orm/issues/1117) + + + + + ## [4.3.1](https://github.com/mikro-orm/mikro-orm/compare/v4.3.0...v4.3.1) (2020-11-20) **Note:** Version bump only for package @mikro-orm/sqlite diff --git a/packages/sqlite/package.json b/packages/sqlite/package.json index 818f98fa1045..afffb54a864c 100644 --- a/packages/sqlite/package.json +++ b/packages/sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@mikro-orm/sqlite", - "version": "4.3.1", + "version": "4.3.2", "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.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -47,13 +47,13 @@ "access": "public" }, "dependencies": { - "@mikro-orm/knex": "^4.3.1", + "@mikro-orm/knex": "^4.3.2", "fs-extra": "9.0.1", "sqlite3": "5.0.0", "sqlstring-sqlite": "0.1.1" }, "devDependencies": { - "@mikro-orm/core": "^4.3.1" + "@mikro-orm/core": "^4.3.2" }, "peerDependencies": { "@mikro-orm/core": "^4.0.0"