@nest-boot/mikro-orm 7.7.7 → 8.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/index.d.ts +7 -7
  2. package/dist/index.js +7 -25
  3. package/dist/index.js.map +1 -1
  4. package/dist/interfaces/id-entity.interface.d.ts +0 -2
  5. package/dist/interfaces/id-entity.interface.js +1 -2
  6. package/dist/interfaces/index.d.ts +2 -2
  7. package/dist/interfaces/index.js +2 -18
  8. package/dist/interfaces/index.js.map +1 -1
  9. package/dist/interfaces/mikro-orm-module-options.interface.d.ts +0 -1
  10. package/dist/interfaces/mikro-orm-module-options.interface.js +1 -2
  11. package/dist/mikro-orm.module-definition.d.ts +8 -2
  12. package/dist/mikro-orm.module-definition.js +5 -8
  13. package/dist/mikro-orm.module-definition.js.map +1 -1
  14. package/dist/mikro-orm.module.d.ts +3 -39
  15. package/dist/mikro-orm.module.js +84 -90
  16. package/dist/mikro-orm.module.js.map +1 -1
  17. package/dist/property-types/index.d.ts +1 -1
  18. package/dist/property-types/index.js +1 -17
  19. package/dist/property-types/index.js.map +1 -1
  20. package/dist/property-types/vector.type.d.ts +0 -16
  21. package/dist/property-types/vector.type.js +3 -22
  22. package/dist/property-types/vector.type.js.map +1 -1
  23. package/dist/services/entity.service.d.ts +4 -73
  24. package/dist/services/entity.service.js +115 -198
  25. package/dist/services/entity.service.js.map +1 -1
  26. package/dist/types/chunk-by-id-options.type.d.ts +0 -1
  27. package/dist/types/chunk-by-id-options.type.js +1 -2
  28. package/dist/types/id-or-entity.type.d.ts +1 -2
  29. package/dist/types/id-or-entity.type.js +1 -2
  30. package/dist/types/index.d.ts +2 -2
  31. package/dist/types/index.js +2 -18
  32. package/dist/types/index.js.map +1 -1
  33. package/dist/utils/load-config-from-env.util.d.ts +0 -29
  34. package/dist/utils/load-config-from-env.util.js +10 -62
  35. package/dist/utils/load-config-from-env.util.js.map +1 -1
  36. package/dist/utils/load-default-config.util.d.ts +0 -1
  37. package/dist/utils/load-default-config.util.js +5 -9
  38. package/dist/utils/load-default-config.util.js.map +1 -1
  39. package/package.json +48 -36
  40. package/dist/property-types/vector.type.spec.d.ts +0 -1
  41. package/dist/property-types/vector.type.spec.js +0 -34
  42. package/dist/property-types/vector.type.spec.js.map +0 -1
  43. package/dist/services/entity.service.spec.d.ts +0 -1
  44. package/dist/services/entity.service.spec.js +0 -327
  45. package/dist/services/entity.service.spec.js.map +0 -1
  46. package/dist/tsconfig.build.tsbuildinfo +0 -1
  47. package/dist/utils/load-config-from-env.util.spec.d.ts +0 -1
  48. package/dist/utils/load-config-from-env.util.spec.js +0 -302
  49. package/dist/utils/load-config-from-env.util.spec.js.map +0 -1
@@ -1 +0,0 @@
1
- export {};
@@ -1,302 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const promises_1 = require("node:fs/promises");
4
- const node_os_1 = require("node:os");
5
- const node_path_1 = require("node:path");
6
- const better_sqlite_1 = require("@mikro-orm/better-sqlite");
7
- const core_1 = require("@mikro-orm/core");
8
- const mysql_1 = require("@mikro-orm/mysql");
9
- const postgresql_1 = require("@mikro-orm/postgresql");
10
- const reflection_1 = require("@mikro-orm/reflection");
11
- const load_config_from_env_util_1 = require("./load-config-from-env.util");
12
- const ORIGINAL_ENV = process.env;
13
- async function withTlsFiles(callback) {
14
- const directory = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "nest-boot-mikro-orm-"));
15
- const paths = {
16
- clientCert: (0, node_path_1.join)(directory, "client.crt"),
17
- clientKey: (0, node_path_1.join)(directory, "client.key"),
18
- rootCert: (0, node_path_1.join)(directory, "root.crt"),
19
- };
20
- try {
21
- await Promise.all([
22
- (0, promises_1.writeFile)(paths.rootCert, "root certificate"),
23
- (0, promises_1.writeFile)(paths.clientCert, "client certificate"),
24
- (0, promises_1.writeFile)(paths.clientKey, "client key"),
25
- ]);
26
- await callback(paths);
27
- }
28
- finally {
29
- await (0, promises_1.rm)(directory, { force: true, recursive: true });
30
- }
31
- }
32
- describe("loadConfigFromEnv", () => {
33
- beforeEach(() => {
34
- process.env = { ...ORIGINAL_ENV };
35
- delete process.env.DATABASE_URL;
36
- });
37
- afterAll(() => {
38
- process.env = ORIGINAL_ENV;
39
- });
40
- it("should load URL-based MySQL config", async () => {
41
- process.env.DATABASE_URL =
42
- "mysql://user%40example.com:p%40ss%2Fword@localhost:3306/app";
43
- const config = await (0, load_config_from_env_util_1.loadConfigFromEnv)();
44
- expect(config).toMatchObject({
45
- colors: false,
46
- dataloader: core_1.DataloaderType.ALL,
47
- dbName: "app",
48
- debug: false,
49
- driver: mysql_1.MySqlDriver,
50
- entities: ["dist/**/*.entity.js"],
51
- entitiesTs: ["src/**/*.entity.ts"],
52
- host: "localhost",
53
- metadataProvider: reflection_1.TsMorphMetadataProvider,
54
- migrations: {
55
- path: "dist/database/migrations",
56
- pathTs: "src/database/migrations",
57
- snapshot: false,
58
- },
59
- seeder: {
60
- defaultSeeder: "DatabaseSeeder",
61
- path: "dist/database/seeders",
62
- pathTs: "src/database/seeders",
63
- },
64
- password: "p@ss/word",
65
- port: 3306,
66
- timezone: "UTC",
67
- user: "user@example.com",
68
- });
69
- expect(config).not.toHaveProperty("clientUrl");
70
- expect(config.seeder?.fileName?.("CustomSeeder")).toBe("CustomSeeder");
71
- });
72
- it("should load URL-based PostgreSQL config", async () => {
73
- process.env.DATABASE_URL =
74
- "postgresql://user:pass@[2001:db8::1]:5432/app?schema=tenant&sslmode=require&application_name=nest-boot";
75
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
76
- dbName: "app",
77
- driver: postgresql_1.PostgreSqlDriver,
78
- driverOptions: {
79
- connection: {
80
- application_name: "nest-boot",
81
- ssl: {},
82
- },
83
- },
84
- host: "2001:db8::1",
85
- password: "pass",
86
- port: 5432,
87
- schema: "tenant",
88
- user: "user",
89
- });
90
- });
91
- it("should load the postgres PostgreSQL URI form", async () => {
92
- process.env.DATABASE_URL = "postgres://user:pass@localhost/app";
93
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
94
- dbName: "app",
95
- driver: postgresql_1.PostgreSqlDriver,
96
- host: "localhost",
97
- password: "pass",
98
- user: "user",
99
- });
100
- });
101
- it("should load a file URL as SQLite config", async () => {
102
- process.env.DATABASE_URL = "file:///var/lib/nest-boot/app%20data.db";
103
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
104
- dbName: "/var/lib/nest-boot/app data.db",
105
- driver: better_sqlite_1.BetterSqliteDriver,
106
- });
107
- });
108
- it.each([
109
- ["mysql", "ssl-mode=DISABLED", { ssl: false }],
110
- ["mysql", "ssl-mode=REQUIRED", { ssl: { rejectUnauthorized: false } }],
111
- ["postgresql", "sslmode=disable", { ssl: false }],
112
- ["postgresql", "sslmode=require", { ssl: { rejectUnauthorized: false } }],
113
- ["postgresql", "sslmode=verify-full", { ssl: {} }],
114
- ])("should parse %s driver query option %s", async (protocol, query, expected) => {
115
- process.env.DATABASE_URL = `${protocol}://user:pass@localhost/app?${query}`;
116
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
117
- driverOptions: {
118
- connection: expected,
119
- },
120
- });
121
- });
122
- it("should preserve omitted URL credentials and port", async () => {
123
- process.env.DATABASE_URL = "postgresql://db.internal";
124
- const config = await (0, load_config_from_env_util_1.loadConfigFromEnv)();
125
- expect(config).toMatchObject({
126
- dbName: undefined,
127
- host: "db.internal",
128
- password: "",
129
- port: 0,
130
- user: "",
131
- });
132
- const mikroOrmConfig = new core_1.Configuration(config, false);
133
- expect(mikroOrmConfig.getDriver().getConnection().getConnectionOptions()).toMatchObject({
134
- host: "db.internal",
135
- password: "",
136
- port: 0,
137
- user: "",
138
- });
139
- });
140
- it("should load PostgreSQL TLS files into structured SSL options", async () => {
141
- await withTlsFiles(async ({ clientCert, clientKey, rootCert }) => {
142
- const databaseUrl = new URL("postgresql://user:pass@localhost/app");
143
- databaseUrl.searchParams.set("sslmode", "verify-full");
144
- databaseUrl.searchParams.set("sslrootcert", rootCert);
145
- databaseUrl.searchParams.set("sslcert", clientCert);
146
- databaseUrl.searchParams.set("sslkey", clientKey);
147
- process.env.DATABASE_URL = databaseUrl.href;
148
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
149
- driverOptions: {
150
- connection: {
151
- ssl: {
152
- ca: "root certificate",
153
- cert: "client certificate",
154
- key: "client key",
155
- },
156
- },
157
- },
158
- });
159
- });
160
- });
161
- it.each(["require", "verify-ca"])("should map PostgreSQL sslmode=%s with a root certificate", async (sslMode) => {
162
- await withTlsFiles(async ({ rootCert }) => {
163
- const databaseUrl = new URL("postgresql://user:pass@localhost/app");
164
- databaseUrl.searchParams.set("sslmode", sslMode);
165
- databaseUrl.searchParams.set("sslrootcert", rootCert);
166
- process.env.DATABASE_URL = databaseUrl.href;
167
- const config = await (0, load_config_from_env_util_1.loadConfigFromEnv)();
168
- const connection = config.driverOptions?.connection;
169
- const ssl = connection.ssl;
170
- expect(ssl).toMatchObject({
171
- ca: "root certificate",
172
- checkServerIdentity: expect.any(Function),
173
- });
174
- const checkServerIdentity = ssl.checkServerIdentity;
175
- checkServerIdentity();
176
- });
177
- });
178
- it("should load MySQL TLS files into structured SSL options", async () => {
179
- await withTlsFiles(async ({ clientCert, clientKey, rootCert }) => {
180
- const databaseUrl = new URL("mysql://user:pass@localhost/app");
181
- databaseUrl.searchParams.set("ssl-ca", rootCert);
182
- databaseUrl.searchParams.set("ssl-cert", clientCert);
183
- databaseUrl.searchParams.set("ssl-key", clientKey);
184
- process.env.DATABASE_URL = databaseUrl.href;
185
- const config = await (0, load_config_from_env_util_1.loadConfigFromEnv)();
186
- expect(config.driverOptions).toEqual({
187
- connection: {
188
- ssl: {
189
- ca: "root certificate",
190
- cert: "client certificate",
191
- key: "client key",
192
- rejectUnauthorized: true,
193
- verifyIdentity: false,
194
- },
195
- },
196
- });
197
- });
198
- });
199
- it.each([
200
- ["VERIFY_CA", false],
201
- ["VERIFY_IDENTITY", true],
202
- ])("should map MySQL ssl-mode=%s with a CA certificate", async (sslMode, verifyIdentity) => {
203
- await withTlsFiles(async ({ rootCert }) => {
204
- const databaseUrl = new URL("mysql://user:pass@localhost/app");
205
- databaseUrl.searchParams.set("ssl-mode", sslMode);
206
- databaseUrl.searchParams.set("ssl-ca", rootCert);
207
- process.env.DATABASE_URL = databaseUrl.href;
208
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
209
- driverOptions: {
210
- connection: {
211
- ssl: {
212
- ca: "root certificate",
213
- rejectUnauthorized: true,
214
- verifyIdentity,
215
- },
216
- },
217
- },
218
- });
219
- });
220
- });
221
- it("should not read MySQL TLS files when SSL is disabled", async () => {
222
- process.env.DATABASE_URL =
223
- "mysql://user:pass@localhost/app?ssl-mode=DISABLED&ssl-ca=/missing/ca.pem";
224
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
225
- driverOptions: {
226
- connection: {
227
- ssl: false,
228
- },
229
- },
230
- });
231
- });
232
- it("should reject unsupported MySQL SSL modes", async () => {
233
- process.env.DATABASE_URL =
234
- "mysql://user:pass@localhost/app?ssl-mode=VERIFY_HOSTNAME";
235
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow("Unsupported MySQL ssl-mode: VERIFY_HOSTNAME");
236
- });
237
- it.each([
238
- ["mysql://user:pass@localhost/app?ssl-mode=PREFERRED", "PREFERRED"],
239
- ["postgresql://user:pass@localhost/app?sslmode=allow", "allow"],
240
- ["postgresql://user:pass@localhost/app?sslmode=prefer", "prefer"],
241
- ])("should reject SSL fallback mode %s that structured options cannot express", async (databaseUrl, sslMode) => {
242
- process.env.DATABASE_URL = databaseUrl;
243
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow(`Unsupported ${databaseUrl.startsWith("mysql:") ? "MySQL ssl-mode" : "PostgreSQL sslmode"}: ${sslMode}`);
244
- });
245
- it.each(["VERIFY_CA", "VERIFY_IDENTITY"])("should require ssl-ca for MySQL ssl-mode=%s", async (sslMode) => {
246
- process.env.DATABASE_URL = `mysql://user:pass@localhost/app?ssl-mode=${sslMode}`;
247
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow(`MySQL ssl-mode=${sslMode} requires ssl-ca`);
248
- });
249
- it("should require sslrootcert for PostgreSQL verify-ca", async () => {
250
- process.env.DATABASE_URL =
251
- "postgresql://user:pass@localhost/app?sslmode=verify-ca";
252
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow("PostgreSQL sslmode=verify-ca requires sslrootcert");
253
- });
254
- it.each([
255
- [
256
- "mysql://user:pass@localhost/app?ssl=true",
257
- "Unsupported MySQL DATABASE_URL parameter: ssl",
258
- ],
259
- [
260
- "mysql://user:pass@localhost/app?multipleStatements=false",
261
- "Unsupported MySQL DATABASE_URL parameter: multipleStatements",
262
- ],
263
- [
264
- "postgresql://user:pass@localhost/app?ssl=true",
265
- "Unsupported PostgreSQL DATABASE_URL parameter: ssl",
266
- ],
267
- [
268
- "postgresql://user:pass@localhost/app?ssl=1",
269
- "Unsupported PostgreSQL DATABASE_URL parameter: ssl",
270
- ],
271
- [
272
- "postgresql://user:pass@localhost/app?uselibpqcompat=true",
273
- "Unsupported PostgreSQL DATABASE_URL parameter: uselibpqcompat",
274
- ],
275
- [
276
- "postgresql://user:pass@localhost/app?sslmode=no-verify",
277
- "Unsupported PostgreSQL sslmode: no-verify",
278
- ],
279
- ])("should reject non-standard database URL options", async (url, error) => {
280
- process.env.DATABASE_URL = url;
281
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow(error);
282
- });
283
- it.each(["mysql2://localhost/app", "sqlite:///var/lib/app.db"])("should reject non-standard database URL %s", async (databaseUrl) => {
284
- process.env.DATABASE_URL = databaseUrl;
285
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow(`Unsupported DATABASE_URL protocol: ${new URL(databaseUrl).protocol}`);
286
- });
287
- it("should reject unsupported database URL protocols", async () => {
288
- process.env.DATABASE_URL = "mongodb://localhost/app";
289
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).rejects.toThrow("Unsupported DATABASE_URL protocol: mongodb:");
290
- });
291
- it("should return undefined connection fields when DATABASE_URL is absent", async () => {
292
- await expect((0, load_config_from_env_util_1.loadConfigFromEnv)()).resolves.toMatchObject({
293
- dbName: undefined,
294
- driver: undefined,
295
- host: undefined,
296
- password: undefined,
297
- port: undefined,
298
- user: undefined,
299
- });
300
- });
301
- });
302
- //# sourceMappingURL=load-config-from-env.util.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-config-from-env.util.spec.js","sourceRoot":"","sources":["../../src/utils/load-config-from-env.util.spec.ts"],"names":[],"mappings":"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"}