@nodefony/mongoose 10.0.0-alpha.2 → 10.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/{_@oxc-project_runtime@0.148.0 → _@oxc-project_runtime@0.149.0}/helpers/esm/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.148.0 → _@oxc-project_runtime@0.149.0}/helpers/esm/decorateMetadata.js +1 -1
- package/dist/index.js +2 -2
- package/dist/nodefony/config/config.js +1 -1
- package/dist/nodefony/entity/sessionEntity.js +1 -1
- package/dist/nodefony/registerStores.js +1 -1
- package/dist/nodefony/service/MongooseService.js +25 -11
- package/dist/types/index.d.ts +1 -1
- package/dist/types/nodefony/config/config.d.ts +2 -2
- package/dist/types/nodefony/service/MongooseService.d.ts +8 -2
- package/docs/configuration.md +9 -9
- package/package.json +11 -11
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
|
|
2
2
|
function __decorate(decorators, target, key, desc) {
|
|
3
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateMetadata.js
|
|
2
2
|
function __decorateMetadata(k, v) {
|
|
3
3
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
4
4
|
}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,8 @@ import { MongooseTokenStore } from "./nodefony/src/MongooseTokenStore.js";
|
|
|
12
12
|
import { MongooseWebAuthnCredentialStore } from "./nodefony/src/MongooseWebAuthnCredentialStore.js";
|
|
13
13
|
import { MongooseWebhookStore } from "./nodefony/src/MongooseWebhookStore.js";
|
|
14
14
|
import { FRAMEWORK_CONNECTOR, registerMongooseFrameworkStores } from "./nodefony/registerStores.js";
|
|
15
|
-
import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.
|
|
16
|
-
import __decorate from "./_virtual/_@oxc-project_runtime@0.
|
|
15
|
+
import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateMetadata.js";
|
|
16
|
+
import __decorate from "./_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
|
|
17
17
|
import sessionEntity_default, { SESSION_CONNECTOR, sessionSchema as schema } from "./nodefony/entity/sessionEntity.js";
|
|
18
18
|
import SessionStorage from "./nodefony/src/SessionStorage.js";
|
|
19
19
|
import { createUserEntity, registerUserEntity, userSchema } from "./nodefony/entity/userEntity.js";
|
|
@@ -13,7 +13,7 @@ import { z } from "zod";
|
|
|
13
13
|
* (`interfaces/IMongooseConfig.ts`) importent le schéma D'ICI (nœud bas : ce fichier
|
|
14
14
|
* n'importe que `zod` → pas de cycle).
|
|
15
15
|
*
|
|
16
|
-
* Le type TS est dérivé via `z.infer<>` ({@link
|
|
16
|
+
* Le type TS est dérivé via `z.infer<>` ({@link IMongooseConfig}), et la config est
|
|
17
17
|
* validée au boot du Module class (hook `onKernelRegister`, via le builder
|
|
18
18
|
* {@link defineMongooseConfig}) → plante propre avec messages clairs si la config
|
|
19
19
|
* est invalide, plutôt qu'un `undefined.x` silencieux en runtime.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
|
|
2
2
|
import { entity } from "@nodefony/orm-core";
|
|
3
3
|
//#region nodefony/entity/sessionEntity.ts
|
|
4
4
|
/** ORM cible du stockage de session (connecteur par défaut du module). */
|
|
@@ -44,7 +44,7 @@ function resolveConnectedOrm(store) {
|
|
|
44
44
|
throw new Error(`${store} : ORM "${FRAMEWORK_CONNECTOR}" introuvable — charger @nodefony/mongoose AVANT @nodefony/security dans le manifeste "modules".`);
|
|
45
45
|
}
|
|
46
46
|
if (!(orm instanceof MongooseOrm)) throw new Error(`${store} : l'ORM "${FRAMEWORK_CONNECTOR}" n'est pas un MongooseOrm (connecteur homonyme d'un autre driver ?).`);
|
|
47
|
-
if (!orm.isConnected()) throw new Error(`${store} : ORM "${FRAMEWORK_CONNECTOR}"
|
|
47
|
+
if (!orm.isConnected()) throw new Error(`${store} : ORM "${FRAMEWORK_CONNECTOR}" enregistré mais NON CONNECTÉ. Deux causes constatables : soit ce run n'a pas déclaré \`externalServices\` (une commande qui lit ou écrit des données le déclare via CONSOLE_DATA_RUN_PROFILE), soit le store a été demandé avant la connexion (ordre de boot). Un store "auto" n'atteint jamais ce point : seule une demande EXPLICITE le fait.`);
|
|
48
48
|
return orm;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MongooseOrm } from "../src/orm-core/MongooseOrm.js";
|
|
2
2
|
import mongoose from "mongoose";
|
|
3
|
-
import { Service } from "nodefony";
|
|
4
|
-
import { queryFlowMonitor, resolveOrmFlowEnabled } from "@nodefony/orm-core";
|
|
3
|
+
import { Service, runNeedsExternalServices } from "nodefony";
|
|
4
|
+
import { diagnoseConnectionFailure, parseConnectionTarget, queryFlowMonitor, resolveOrmFlowEnabled } from "@nodefony/orm-core";
|
|
5
5
|
//#region nodefony/service/MongooseService.ts
|
|
6
6
|
const serviceName = "mongoose";
|
|
7
7
|
/**
|
|
@@ -25,10 +25,7 @@ var MongooseService = class MongooseService extends Service {
|
|
|
25
25
|
this.module = module;
|
|
26
26
|
this.module.hookKernel("onBoot", async () => {
|
|
27
27
|
queryFlowMonitor.setEnabled(resolveOrmFlowEnabled(this.kernel));
|
|
28
|
-
await this.connectAll(
|
|
29
|
-
this.log(e, "ERROR");
|
|
30
|
-
throw e;
|
|
31
|
-
});
|
|
28
|
+
await this.connectAll(runNeedsExternalServices(this.kernel));
|
|
32
29
|
});
|
|
33
30
|
this.kernel?.once("onTerminate", async () => {
|
|
34
31
|
await this.disconnectAll().catch(() => {});
|
|
@@ -38,12 +35,18 @@ var MongooseService = class MongooseService extends Service {
|
|
|
38
35
|
#config() {
|
|
39
36
|
return this.module.config;
|
|
40
37
|
}
|
|
41
|
-
/**
|
|
42
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Connecte tous les connecteurs déclarés en config (validée Zod).
|
|
40
|
+
*
|
|
41
|
+
* @param connect - `false` pour ENREGISTRER les ORM sans ouvrir de connexion
|
|
42
|
+
* (boot d'un run qui n'a pas déclaré `externalServices`). Défaut `true` :
|
|
43
|
+
* un appel direct est un ordre.
|
|
44
|
+
*/
|
|
45
|
+
async connectAll(connect = true) {
|
|
43
46
|
const config = this.#config();
|
|
44
47
|
if (config?.debug) mongoose.set("debug", true);
|
|
45
48
|
const connectors = config?.connectors ?? {};
|
|
46
|
-
for (const [name, cfg] of Object.entries(connectors)) await this.#connectOne(name, cfg);
|
|
49
|
+
for (const [name, cfg] of Object.entries(connectors)) await this.#connectOne(name, cfg, connect);
|
|
47
50
|
}
|
|
48
51
|
/** Assemble l'URI de connexion à partir de la config (`uri` ou composants). */
|
|
49
52
|
static buildUri(cfg) {
|
|
@@ -74,10 +77,21 @@ var MongooseService = class MongooseService extends Service {
|
|
|
74
77
|
};
|
|
75
78
|
}
|
|
76
79
|
/** Connecte un connecteur (URI + options d'auth/pool). */
|
|
77
|
-
async #connectOne(name, cfg) {
|
|
80
|
+
async #connectOne(name, cfg, connect = true) {
|
|
78
81
|
const uri = MongooseService.buildUri(cfg);
|
|
79
82
|
const orm = new MongooseOrm(name, uri, MongooseService.buildConnectOptions(cfg));
|
|
80
|
-
|
|
83
|
+
if (!connect) {
|
|
84
|
+
this.#orms.set(name, orm);
|
|
85
|
+
this.log(`Mongoose « ${name} » enregistré SANS connexion (${orm.safeTarget()}) — ce run n'a pas déclaré \`externalServices\`.`, "DEBUG");
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
await orm.connect();
|
|
90
|
+
} catch (e) {
|
|
91
|
+
const diagnosis = diagnoseConnectionFailure(e, parseConnectionTarget(uri));
|
|
92
|
+
const cause = e instanceof Error ? e.message : String(e);
|
|
93
|
+
throw new Error(`Mongoose : le connecteur "${name}" (${orm.safeTarget()}) n'a pas pu se connecter — ${diagnosis.explanation} Cause : ${cause}`, { cause: e });
|
|
94
|
+
}
|
|
81
95
|
this.#orms.set(name, orm);
|
|
82
96
|
this.log(`Mongoose ORM "${name}" connected (${orm.safeTarget()})`, "INFO");
|
|
83
97
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ declare class Mongoose extends Module<IMongooseConfig> {
|
|
|
51
51
|
export default Mongoose;
|
|
52
52
|
export { mongoose, MongooseService };
|
|
53
53
|
export { defineMongooseConfig, mongooseConfigJsonSchema };
|
|
54
|
-
export { mongooseConfigSchema
|
|
54
|
+
export { mongooseConfigSchema } from "./nodefony/config/config.js";
|
|
55
55
|
export type { IMongooseConfig, IMongooseConfigInput, IMongooseConnectorConfig, } from "./nodefony/interfaces/IMongooseConfig.js";
|
|
56
56
|
export { default as SessionStorage } from "./nodefony/src/SessionStorage.js";
|
|
57
57
|
export { default as SessionEntity, sessionSchema, SESSION_CONNECTOR, } from "./nodefony/entity/sessionEntity.js";
|
|
@@ -12,10 +12,10 @@ export declare const mongooseConfigSchema: z.ZodObject<{
|
|
|
12
12
|
frameworkEntities: z.ZodDefault<z.ZodBoolean>;
|
|
13
13
|
}, z.core.$strict>;
|
|
14
14
|
/** Type de sortie (config normalisée + défauts appliqués). */
|
|
15
|
-
export type
|
|
15
|
+
export type IMongooseConfig = z.infer<typeof mongooseConfigSchema>;
|
|
16
16
|
/**
|
|
17
17
|
* Défauts du module, matérialisés depuis le schéma (source unique). Toujours
|
|
18
18
|
* valides par construction ; passés au `super(..., config)` du Module class.
|
|
19
19
|
*/
|
|
20
|
-
declare const config:
|
|
20
|
+
declare const config: IMongooseConfig;
|
|
21
21
|
export default config;
|
|
@@ -19,8 +19,14 @@ declare class MongooseService extends Service {
|
|
|
19
19
|
#private;
|
|
20
20
|
module: Module;
|
|
21
21
|
constructor(module: Module);
|
|
22
|
-
/**
|
|
23
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Connecte tous les connecteurs déclarés en config (validée Zod).
|
|
24
|
+
*
|
|
25
|
+
* @param connect - `false` pour ENREGISTRER les ORM sans ouvrir de connexion
|
|
26
|
+
* (boot d'un run qui n'a pas déclaré `externalServices`). Défaut `true` :
|
|
27
|
+
* un appel direct est un ordre.
|
|
28
|
+
*/
|
|
29
|
+
connectAll(connect?: boolean): Promise<void>;
|
|
24
30
|
/** Assemble l'URI de connexion à partir de la config (`uri` ou composants). */
|
|
25
31
|
static buildUri(cfg: IMongooseConnectorConfig): string;
|
|
26
32
|
/**
|
package/docs/configuration.md
CHANGED
|
@@ -109,7 +109,7 @@ Le schéma (`mongooseConfigSchema` (`config.ts:83`)) porte les valeurs d'usine s
|
|
|
109
109
|
`.default(…)`, et chaque champ son `.describe(…)`. Les défauts effectifs du module ne sont pas
|
|
110
110
|
retapés à la main : ils sont **matérialisés depuis le schéma lui-même**
|
|
111
111
|
(`mongooseConfigSchema.parse({})` (`config.ts:122`)). Changer un défaut = changer le `.default()`,
|
|
112
|
-
et nulle part ailleurs. Le type TypeScript suit le même chemin : `
|
|
112
|
+
et nulle part ailleurs. Le type TypeScript suit le même chemin : `IMongooseConfig` (`config.ts:131`)
|
|
113
113
|
est **inféré** du schéma, jamais redéclaré.
|
|
114
114
|
|
|
115
115
|
Le builder (`defineMongooseConfig()` (`defineModuleConfig.ts:61`)) tient en trois gestes — valider,
|
|
@@ -267,7 +267,7 @@ ainsi qu'une application lit une base métier et écrit dans une base d'archives
|
|
|
267
267
|
L'adresse se donne de deux façons, jamais les deux à la fois utilement :
|
|
268
268
|
|
|
269
269
|
- **En pièces détachées** — `host`, `port`, `dbname` : lisible, adapté au développement. Le service
|
|
270
|
-
les assemble en `mongodb://hôte:port/base` (`MongooseService.buildUri()` (`MongooseService.ts:
|
|
270
|
+
les assemble en `mongodb://hôte:port/base` (`MongooseService.buildUri()` (`MongooseService.ts:94`)).
|
|
271
271
|
- **En une URI** — `uri` (`config.ts:41`) : la seule forme capable d'exprimer un replica set, un
|
|
272
272
|
`mongodb+srv`, des options de requête. **Dès qu'`uri` est présent, les trois autres champs ne sont
|
|
273
273
|
plus lus du tout.**
|
|
@@ -320,7 +320,7 @@ description des options du driver.
|
|
|
320
320
|
|
|
321
321
|
### `debug` — voir passer les requêtes
|
|
322
322
|
|
|
323
|
-
`debug` (`config.ts:85`) active la trace intégrée de Mongoose (`connectAll()` (`MongooseService.ts:
|
|
323
|
+
`debug` (`config.ts:85`) active la trace intégrée de Mongoose (`connectAll()` (`MongooseService.ts:81`)).
|
|
324
324
|
Chaque opération part sur la sortie standard, avec sa collection, son filtre et ses champs.
|
|
325
325
|
|
|
326
326
|
C'est un **réglage de processus, pas de connecteur** : il vaut pour toutes les connexions à la fois.
|
|
@@ -405,7 +405,7 @@ NF__MONGOOSE__CONNECTORS__NODEFONY__DBNAME=recette # champ imbriqué
|
|
|
405
405
|
NF__MONGOOSE__CONNECTORS__NODEFONY__PORT=27018 # coercé en nombre
|
|
406
406
|
```
|
|
407
407
|
|
|
408
|
-
Ces overrides sont posés **avant** la validation Zod (`Kernel.applyEnvConfigOverrides()` (`Kernel.ts:
|
|
408
|
+
Ces overrides sont posés **avant** la validation Zod (`Kernel.applyEnvConfigOverrides()` (`Kernel.ts:1708`)) :
|
|
409
409
|
une valeur aberrante est donc rejetée comme si tu l'avais écrite dans ton fichier. C'est voulu — un
|
|
410
410
|
réglage d'environnement invalide doit casser aussi fort qu'un réglage de code.
|
|
411
411
|
|
|
@@ -436,7 +436,7 @@ De la plus faible à la plus forte priorité :
|
|
|
436
436
|
|
|
437
437
|
1. **Les défauts du schéma** — `localhost:27017/nodefony`, `debug: false`, `frameworkEntities: true`.
|
|
438
438
|
2. **Ta config d'app** — `use("@nodefony/mongoose", { … })`, fusionnée en profondeur sous les défauts
|
|
439
|
-
(`Kernel.loadModulesFromManifest()` (`Kernel.ts:
|
|
439
|
+
(`Kernel.loadModulesFromManifest()` (`Kernel.ts:1600`)).
|
|
440
440
|
3. **Un override venu d'un autre module** — la clé `module-mongoose` dans la config d'un module tiers.
|
|
441
441
|
4. **`NF__MONGOOSE__…`** — l'override générique d'environnement.
|
|
442
442
|
5. **La validation Zod** — types, bornes, défauts des champs restés absents.
|
|
@@ -549,9 +549,9 @@ use("@nodefony/mongoose", {
|
|
|
549
549
|
```
|
|
550
550
|
|
|
551
551
|
Les deux connexions s'ouvrent en série au démarrage, dans l'ordre de déclaration
|
|
552
|
-
(`connectAll()` (`MongooseService.ts:
|
|
553
|
-
(`disconnectAll()` (`MongooseService.ts:
|
|
554
|
-
(`getOrm()` (`MongooseService.ts:
|
|
552
|
+
(`connectAll()` (`MongooseService.ts:81`)), et se ferment toutes à l'arrêt
|
|
553
|
+
(`disconnectAll()` (`MongooseService.ts:181`)). Un service peut demander l'une ou l'autre par son nom
|
|
554
|
+
(`getOrm()` (`MongooseService.ts:189`)), mais l'usage courant reste le registre d'ORM.
|
|
555
555
|
|
|
556
556
|
## 🔐 Le secret de connexion
|
|
557
557
|
|
|
@@ -665,7 +665,7 @@ coûteux à diagnostiquer qu'un serveur qui refuse de démarrer.
|
|
|
665
665
|
|
|
666
666
|
Le cas courant : la config est parfaite, mais Mongo n'est pas joignable — conteneur pas encore prêt,
|
|
667
667
|
réseau coupé, identifiants périmés. Le comportement **dépend de l'environnement**, arbitré par la
|
|
668
|
-
politique de boot du cœur (`Kernel.isBootErrorFatal()` (`Kernel.ts:
|
|
668
|
+
politique de boot du cœur (`Kernel.isBootErrorFatal()` (`Kernel.ts:2757`)) :
|
|
669
669
|
|
|
670
670
|
| Environnement | Ce qui se passe |
|
|
671
671
|
| ------------------- | -------------------------------------------------------------------------------------- |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodefony/mongoose",
|
|
3
|
-
"version": "10.0.0-alpha.
|
|
3
|
+
"version": "10.0.0-alpha.4",
|
|
4
4
|
"description": "Moteur MongoDB de Nodefony sur Mongoose : dépôts typés conformes au contrat orm-core",
|
|
5
5
|
"nodefony": {
|
|
6
6
|
"storeKind": "durable",
|
|
@@ -52,22 +52,22 @@
|
|
|
52
52
|
"zod": "^4.4.3"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@nodefony/http": "^10.0.0-alpha.
|
|
56
|
-
"@nodefony/orm-core": "^10.0.0-alpha.
|
|
57
|
-
"@nodefony/security": "^10.0.0-alpha.
|
|
58
|
-
"@nodefony/user": "^10.0.0-alpha.
|
|
55
|
+
"@nodefony/http": "^10.0.0-alpha.4",
|
|
56
|
+
"@nodefony/orm-core": "^10.0.0-alpha.4",
|
|
57
|
+
"@nodefony/security": "^10.0.0-alpha.4",
|
|
58
|
+
"@nodefony/user": "^10.0.0-alpha.4",
|
|
59
59
|
"@types/node": "26.4.1",
|
|
60
60
|
"mongodb-memory-server": "11.2.0",
|
|
61
|
-
"nodefony": "^10.0.0-alpha.
|
|
61
|
+
"nodefony": "^10.0.0-alpha.4",
|
|
62
62
|
"rimraf": "6.1.3",
|
|
63
63
|
"vitest": "5.0.0"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"@nodefony/http": "^10.0.0-alpha.
|
|
67
|
-
"@nodefony/orm-core": "^10.0.0-alpha.
|
|
68
|
-
"@nodefony/security": "^10.0.0-alpha.
|
|
69
|
-
"@nodefony/user": "^10.0.0-alpha.
|
|
70
|
-
"nodefony": "^10.0.0-alpha.
|
|
66
|
+
"@nodefony/http": "^10.0.0-alpha.4",
|
|
67
|
+
"@nodefony/orm-core": "^10.0.0-alpha.4",
|
|
68
|
+
"@nodefony/security": "^10.0.0-alpha.4",
|
|
69
|
+
"@nodefony/user": "^10.0.0-alpha.4",
|
|
70
|
+
"nodefony": "^10.0.0-alpha.4"
|
|
71
71
|
},
|
|
72
72
|
"repository": {
|
|
73
73
|
"type": "git",
|