@tulipes/core 0.1.2 → 0.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
package/dist/cli/main.js CHANGED
@@ -12,6 +12,7 @@ const HELP = `tulipes — module-based express framework
12
12
 
13
13
  Usage:
14
14
  tulipes init [dir] scaffold a new application (boots with zero infrastructure)
15
+ tulipes init [dir] --full ...and the contracts needing mongo + redis (models, queues)
15
16
  tulipes sync regenerate types/config.d.ts and .env.example
16
17
  tulipes env:check validate env against every meta.variables.json (CI-friendly)
17
18
  tulipes new module <name> scaffold a module under ./modules
@@ -21,8 +22,11 @@ export async function main(argv) {
21
22
  const [command, ...rest] = argv;
22
23
  const rootDir = process.cwd();
23
24
  switch (command) {
24
- case "init":
25
- return runInit(rootDir, rest[0]);
25
+ case "init": {
26
+ const full = rest.includes("--full");
27
+ const target = rest.find((arg) => !arg.startsWith("-"));
28
+ return runInit(rootDir, target, { full });
29
+ }
26
30
  case "sync":
27
31
  return runSync(rootDir);
28
32
  case "env:check":
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;GAIG;AACH,MAAM,IAAI,GAAG;;;;;;;;CAQZ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAuB;IAChD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9B,KAAK,KAAK;YACR,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC9C,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,QAAQ,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;GAIG;AACH,MAAM,IAAI,GAAG;;;;;;;;;CASZ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAuB;IAChD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9B,KAAK,KAAK;YACR,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC9C,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,QAAQ,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -16,6 +16,17 @@ export class HttpError extends Error {
16
16
  this.details = details;
17
17
  }
18
18
  }
19
+ /**
20
+ * A 4xx carried on a non-HttpError (express, body-parser, multer…), or
21
+ * undefined when the error is ours to own as a 500.
22
+ */
23
+ function clientErrorStatus(error) {
24
+ const candidate = error
25
+ ?.status ?? error?.statusCode;
26
+ return typeof candidate === "number" && candidate >= 400 && candidate <= 499
27
+ ? candidate
28
+ : undefined;
29
+ }
19
30
  /** Terminal 404 — anything no router claimed. */
20
31
  export function notFoundHandler() {
21
32
  return (req, _res, next) => {
@@ -37,6 +48,16 @@ export function errorHandler(appEnv) {
37
48
  });
38
49
  return;
39
50
  }
51
+ // Express middleware signals client faults with a numeric status on the
52
+ // error — a body over the parser's limit is 413, malformed JSON is 400.
53
+ // Flattening those to 500 would blame the server for the caller's
54
+ // mistake, so 4xx statuses are honored and their messages passed
55
+ // through (they describe the request, never our internals).
56
+ const status = clientErrorStatus(error);
57
+ if (status !== undefined) {
58
+ res.status(status).json({ error: error.message });
59
+ return;
60
+ }
40
61
  console.error("[http] unhandled error:", error);
41
62
  res.status(500).json({
42
63
  error: revealInternals
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAS;IACf,OAAO,CAAW;IAE3B,YAAY,MAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,eAAe,GAAG,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,CAAC;IAEtE,OAAO,CAAC,KAAc,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;aAC/D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,eAAe;gBACpB,CAAC,CAAC,aAAc,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3D,CAAC,CAAC,uBAAuB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAS;IACf,OAAO,CAAW;IAE3B,YAAY,MAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,SAAS,GAAI,KAA2D;QAC5E,EAAE,MAAM,IAAK,KAAyC,EAAE,UAAU,CAAC;IAErE,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG;QAC1E,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,eAAe,GAAG,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,CAAC;IAEtE,OAAO,CAAC,KAAc,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;aAC/D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,wEAAwE;QACxE,kEAAkE;QAClE,iEAAiE;QACjE,4DAA4D;QAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,eAAe;gBACpB,CAAC,CAAC,aAAc,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3D,CAAC,CAAC,uBAAuB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tulipes/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Module-based Express framework: convention-driven boot pipeline, env contracts, ACL, queues, sockets and CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,7 +20,8 @@
20
20
  "./errors": "./dist/errors/index.js"
21
21
  },
22
22
  "files": [
23
- "dist"
23
+ "dist",
24
+ "templates"
24
25
  ],
25
26
  "scripts": {
26
27
  "typecheck": "tsc --noEmit",
@@ -0,0 +1,72 @@
1
+ # Working in this project
2
+
3
+ This is a **Tulipes** application (`@tulipes/core`) — a module-based Express
4
+ framework. It is convention-driven and deliberately fail-closed: almost
5
+ everything that can be validated at boot is, and a violation crashes the
6
+ process with a report rather than degrading quietly.
7
+
8
+ Writing plain Express here will fight the framework. Read the rule that
9
+ applies before you write code.
10
+
11
+ ## Non-negotiable rules
12
+
13
+ 1. **Never read `process.env` directly.** Every configuration value is
14
+ declared in a module's `meta.variables.json` and read with
15
+ `ctx.Environment.get("NAME")`. Reading an undeclared name throws on
16
+ purpose. → skill `tulipes-env-variable`
17
+ 2. **A feature is a module, not a layer.** Everything a feature needs —
18
+ routes, models, config, permissions, jobs — lives in one folder under
19
+ `modules/`. Never add a top-level `services/` or `middlewares/` folder.
20
+ → skill `tulipes-module`
21
+ 3. **Never call `mongoose.model()` yourself.** Models are declarations
22
+ picked up by the framework and read from `ctx.models`. → skill
23
+ `tulipes-model`
24
+ 4. **Global middleware belongs to a sys-tier module**, not to the
25
+ entrypoint. `app.ts` stays three lines. → skill `tulipes-endpoint`
26
+ 5. **Run `yarn sync` after touching any `meta.variables.json` or
27
+ `module.config.ts`.** It regenerates `types/config.d.ts` and
28
+ `.env.example`; stale generated types are a lie.
29
+ 6. **Errors are `HttpError`.** `throw new HttpError(404, "…")` from
30
+ anywhere in a route; the framework's terminal handler renders it.
31
+ Never hand-roll an error-response shape.
32
+ 7. **Cross-module imports use the package name** (`@app/users`), never a
33
+ relative path that climbs out of the module. The workspace boundary is
34
+ what keeps modules independent.
35
+
36
+ ## Where things go
37
+
38
+ | Decision | Location |
39
+ |---|---|
40
+ | Value differs per deployment (URL, secret, toggle) | that module's `meta.variables.json` |
41
+ | Policy shared by ≥2 modules (pagination, body limit) | `config/app.config.ts` |
42
+ | Config for one feature | that module's `module.config.ts` |
43
+ | Middleware for every request | a sys-tier module's routes file |
44
+ | Middleware for one feature's routes | that module's own `Router` |
45
+ | Helper used by ≥2 modules | `lib/` |
46
+ | Helper used by one module | that module's `helpers/` |
47
+
48
+ ## Boot order (why load order matters)
49
+
50
+ `sys` modules load before `app` modules; within a tier, lower `priority`
51
+ first; then `dependsOn` topological order. Config → ACL → database →
52
+ queues → routes. If code needs something another module provides, declare
53
+ `dependsOn` — do not rely on luck.
54
+
55
+ ## Commands
56
+
57
+ | Command | Use |
58
+ |---|---|
59
+ | `yarn dev` | run the web process (regenerates types first) |
60
+ | `yarn worker` | run the queue-consumer process |
61
+ | `yarn sync` | regenerate `types/config.d.ts` + `.env.example` |
62
+ | `yarn check` | validate the environment without booting |
63
+ | `yarn typecheck` | typecheck the whole app |
64
+ | `yarn tulipes new module <name>` | scaffold a module |
65
+
66
+ ## Verifying your work
67
+
68
+ A change is not done until the app boots. Run `yarn typecheck`, then
69
+ `yarn dev` and confirm the startup banner lists what you added (modules,
70
+ queues, sockets, roles). Boot failures print an aggregate report naming
71
+ every problem at once — read all of it before fixing anything. → skill
72
+ `tulipes-boot-errors`
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: tulipes-boot-errors
3
+ description: Use when a Tulipes app fails to boot, when a route/model/queue you added is not being picked up, or when reading a TulipesBootError report. Maps each boot phase's crash message to its cause and fix.
4
+ ---
5
+
6
+ # Diagnosing a boot failure
7
+
8
+ Boot crashes with a `TulipesBootError` naming the phase and listing
9
+ **every** problem found in that phase:
10
+
11
+ ```
12
+ TulipesBootError: Boot aborted during "environment" — 3 issue(s):
13
+ ✖ [core] required variable "MONGO_URI" has no value (…)
14
+ ✖ [users] variable "USERS_MAX_SESSIONS": "abc" is not a number
15
+ ✖ [users] required variable "USERS_ADMIN_EMAIL" has no value (…)
16
+ ```
17
+
18
+ **Read the whole list before changing anything.** The report is complete
19
+ for that phase — fixing one line at a time wastes restarts. Phases run in
20
+ order and stop at the first failing one, so a later phase may still hold
21
+ problems the report has not reached yet.
22
+
23
+ ## By phase
24
+
25
+ | Phase | Typical message | Cause and fix |
26
+ |---|---|---|
27
+ | `environment` | `required variable "X" has no value` | Declared `required` but nothing supplies it. Add it to `.envs/.env.<APP_ENV>`, or give the spec a `default`. |
28
+ | `environment` | `"abc" is not a number` / `not one of: …` | Value fails its declared `type`/`enum`. Fix the value or the spec. |
29
+ | `environment` | `variable "X" is already declared by module "y"` | Two modules declare the same name. Delete the duplicate; read the other module's variable instead. |
30
+ | `module graph` | `dependsOn "x" — no such module exists` | Typo, or you used the package name. `dependsOn` takes short names (`"users"`). |
31
+ | `module graph` | `dependency cycle: a → b → a` | Mutual dependency. Move the shared part to `lib/` or a third module. |
32
+ | `module graph` | `sys module cannot depend on app module` | A sys module needs something app-tier. Either it is not really sys, or the dependency belongs in `lib/`. |
33
+ | `config` | `module.config must default-export a function` | Missing/misspelled `export default`. |
34
+ | `acl` | `allow() on unknown role "x"` | Role never defined. Define it in the sys `core` module, and `dependsOn` that module. |
35
+ | `acl` | `already granted … duplicate grant` | Two modules grant the same role+resource. Namespace the resource by module. |
36
+ | `database` | `connection failed` | Mongo unreachable or `MONGO_URI` wrong. Check the service is running. |
37
+ | `database` | `modules declare models but "MONGO_URI" is not declared` | Add the variable to the sys `core` module's meta file. |
38
+ | `queues` | `queue name … is invalid` | Queue names use `.`, not `:`. |
39
+ | `routes` | `must default-export a routes function` | Missing `export default` in a `*.routes.ts`. |
40
+
41
+ ## "My file is being ignored"
42
+
43
+ The framework discovers files by convention. If something you added never
44
+ runs, check in this order:
45
+
46
+ 1. **Filename suffix** — `*.routes.ts`, `*.model.ts`, `*.queues.ts`,
47
+ `*.sockets.ts`, `*.bootstrap.ts`, `module.config.ts`, `module.acl.ts`.
48
+ A file named `users.route.ts` (no `s`) is invisible.
49
+ 2. **Directory** — routes in `routes/`, models in `models/`, and so on.
50
+ Nested subfolders are not scanned.
51
+ 3. **The module is registered** — it needs a `package.json` and a
52
+ `yarn install` after creation. The startup banner lists every module it
53
+ found; if yours is missing, the problem is there.
54
+ 4. **`export default`** — every contract file except models exports a
55
+ function as its default.
56
+
57
+ ## Other symptoms
58
+
59
+ - **Types are `unknown` or a new variable is not typed** → run `yarn sync`.
60
+ - **Worker exits immediately** → no processors registered; it refuses to
61
+ idle. Add a `*.queues.ts` with `process()`.
62
+ - **Env change has no effect** → `process.env` beats the file. Check for a
63
+ shell export or container variable of the same name.
64
+ - To validate configuration without booting the whole app: `yarn check`.
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: tulipes-endpoint
3
+ description: Use when adding or changing an HTTP endpoint in a Tulipes app, mounting middleware, handling request errors, or wondering where global middleware goes. Covers the routes contract, HttpError, validation and the request pipeline order.
4
+ ---
5
+
6
+ # Adding an endpoint
7
+
8
+ Routes live in `modules/<name>/routes/*.routes.ts`. The file
9
+ default-exports a function that receives the context and returns a Router.
10
+
11
+ ```ts
12
+ import { Router } from "express";
13
+ import type { Ctx } from "@tulipes/core/boot";
14
+ import { HttpError } from "@tulipes/core/http";
15
+
16
+ export default function billingRoutes({ config, models }: Ctx): Router {
17
+ const router = Router();
18
+
19
+ router.get("/invoices/:id", async (req, res) => {
20
+ const invoice = await models!.get("Invoice").findById(req.params.id).lean();
21
+ if (!invoice) throw new HttpError(404, "no such invoice");
22
+ res.json(invoice);
23
+ });
24
+
25
+ return router;
26
+ }
27
+ ```
28
+
29
+ Then `yarn dev` and hit the route. Nothing else is registered anywhere —
30
+ the framework discovers the file.
31
+
32
+ ## Errors
33
+
34
+ Throw `HttpError(status, message, details?)`. Express 5 forwards rejected
35
+ async handlers to the framework's terminal handler, so `throw` works
36
+ inside `async` routes without a try/catch.
37
+
38
+ - `HttpError` → `{ error, details? }` with your status.
39
+ - Middleware errors carrying a 4xx (oversized body → 413, malformed JSON →
40
+ 400) are passed through.
41
+ - Anything else → anonymous `500`, with the real message only in
42
+ development. **Never** catch an error just to `res.status(500).json(...)`
43
+ yourself; you would leak internals that the framework hides.
44
+
45
+ ## The request pipeline
46
+
47
+ ```
48
+ module routers, in load order:
49
+ sys modules global middleware (request ids, helmet, cors, logging, body parsing)
50
+ app modules your feature routes
51
+ notFoundHandler framework — 404 for anything unclaimed
52
+ errorHandler framework — terminal
53
+ ```
54
+
55
+ - **Middleware for every request** → a sys-tier module's routes file,
56
+ mounted on `ctx.app` (that file returns nothing). Sys modules load
57
+ first, which is what puts it ahead of all feature routes.
58
+ - **Middleware for one feature** → `router.use(...)` inside that module's
59
+ own routes file, or per-route as a handler argument.
60
+ - Never mount middleware in `app.ts`, and never reorder by moving
61
+ `app.use` calls around — ordering is `tier` + `priority`.
62
+
63
+ ## Permissions
64
+
65
+ Check with the ACL rather than ad-hoc role comparisons:
66
+
67
+ ```ts
68
+ if (!acl!.can(req.user.role, "invoices:write")) {
69
+ throw new HttpError(403, "forbidden");
70
+ }
71
+ ```
72
+
73
+ Grants are declared in `module.acl.ts` → skill `tulipes-permissions`.
74
+
75
+ ## Conventions worth following
76
+
77
+ - Validate input at the edge and throw `HttpError(422, …)` with details.
78
+ - Clamp list endpoints with the shared bounds:
79
+ `config.pagination!.defaultLimit` / `maxLimit`.
80
+ - Build paths from `config.api!.prefix` instead of hardcoding `/api/v1`.
81
+ - Keep handlers thin; put real work in `controllers/` or `helpers/` and
82
+ import it directly (the framework does not scan those folders).
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: tulipes-env-variable
3
+ description: Use when adding or changing any configuration value in a Tulipes app — API keys, connection strings, feature toggles, limits — or when tempted to read process.env. Covers meta.variables.json, the resolution precedence and typed reads.
4
+ ---
5
+
6
+ # Adding a configuration value
7
+
8
+ **Never read `process.env` directly.** Every value is declared by exactly
9
+ one module and read through the typed store. An undeclared read throws, so
10
+ a typo can never reach production as `undefined`.
11
+
12
+ ## Steps
13
+
14
+ 1. Choose the owning module. Infra shared by everything (`PORT`,
15
+ `MONGO_URI`, `REDIS_URL`) belongs to the sys `core` module; anything
16
+ feature-specific belongs to that feature's module.
17
+ 2. Declare it in that module's `meta.variables.json`:
18
+
19
+ ```json
20
+ {
21
+ "variables": [
22
+ {
23
+ "name": "STRIPE_API_KEY",
24
+ "type": "secret",
25
+ "group": "billing",
26
+ "required": true,
27
+ "description": "Server-side Stripe key"
28
+ },
29
+ {
30
+ "name": "BILLING_TRIAL_DAYS",
31
+ "type": "number",
32
+ "group": "billing",
33
+ "description": "Free trial length",
34
+ "default": 14
35
+ }
36
+ ]
37
+ }
38
+ ```
39
+
40
+ 3. Add a value to `.envs/.env.development` for anything `required`.
41
+ 4. `yarn sync` — regenerates `types/config.d.ts` (so the read is typed)
42
+ and `.env.example` (so deployments know what to set).
43
+ 5. Read it: `Environment.get("BILLING_TRIAL_DAYS")` → typed `number`.
44
+
45
+ ## Field rules
46
+
47
+ | Field | Rule |
48
+ |---|---|
49
+ | `name` | UPPER_SNAKE, and **globally unique** — two modules declaring the same name crash the boot. Do not re-declare a variable another module owns; just read it. |
50
+ | `type` | `string` · `number` · `boolean` · `enum` · `url` · `secret`. Values are coerced (`"14"` → `14`) and validated. |
51
+ | `enum` | Required with `type: "enum"`. Generates a literal union type. |
52
+ | `required` | No value anywhere → boot crash. Mutually exclusive with `default`. |
53
+ | `default` | Used when nothing supplies a value. Never put a real credential here. |
54
+ | `group` | Free-form label; groups the variable in the generated `.env.example`. |
55
+
56
+ Use `secret` for anything sensitive — those values are redacted in logs,
57
+ reports and the startup banner.
58
+
59
+ ## Precedence
60
+
61
+ `process.env` › `.envs/.env.<APP_ENV>` › `default`. Container-injected
62
+ values always win, which is why deployments need no file.
63
+
64
+ ## Where it does NOT go
65
+
66
+ - Value shared by several modules but the same everywhere (pagination
67
+ limits, body size) → `config/app.config.ts`, not a variable.
68
+ - Value used by one module and never changed per deployment → that
69
+ module's `module.config.ts`.
70
+
71
+ ## Gotchas
72
+
73
+ - `Environment.get()` on an undeclared name **throws**. If you added the
74
+ entry and still get the error, you did not run `yarn sync`, or you
75
+ edited a different module's meta file than the one you are reading from.
76
+ - `APP_ENV` (not `NODE_ENV`) selects the env file.
77
+ - A missing `required` variable is not a runtime surprise — the boot
78
+ aborts and lists every missing variable at once.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: tulipes-model
3
+ description: Use when adding or changing a database model in a Tulipes app, querying from a route or job, seeding data, or ensuring indexes. Covers the ModelDef contract, the model store and bootstrap tasks.
4
+ ---
5
+
6
+ # Adding a model
7
+
8
+ Model files are **declarations**, not registrations. Never call
9
+ `mongoose.model()` — the framework compiles the schema on its own
10
+ connection and puts it in the model store.
11
+
12
+ `modules/billing/models/invoice.model.ts`:
13
+
14
+ ```ts
15
+ import { Schema } from "mongoose";
16
+ import type { ModelDef } from "@tulipes/core/db";
17
+
18
+ const invoiceSchema = new Schema({
19
+ customer: { type: Schema.Types.ObjectId, ref: "User", required: true },
20
+ amountCents: { type: Number, required: true, min: 0 },
21
+ status: { type: String, enum: ["draft", "paid"], default: "draft", index: true },
22
+ });
23
+
24
+ export default { name: "Invoice", schema: invoiceSchema } satisfies ModelDef;
25
+ ```
26
+
27
+ Read it anywhere the context reaches:
28
+
29
+ ```ts
30
+ const Invoice = models!.get("Invoice");
31
+ ```
32
+
33
+ `models.get()` throws on an unregistered name (listing what does exist),
34
+ so a typo fails at the call site instead of returning `undefined`.
35
+
36
+ ## Requirements
37
+
38
+ - The database needs `MONGO_URI` declared (sys `core` module) and set. A
39
+ module that ships models without it is a boot refusal, not a warning.
40
+ - Model names are globally unique; two modules registering `Invoice`
41
+ crashes the boot naming both.
42
+ - Reference other modules' models by name (`ref: "User"`) — no import,
43
+ therefore no coupling.
44
+
45
+ ## Seeding and indexes
46
+
47
+ Put anything that must run after models exist but before the server
48
+ accepts traffic in `modules/<name>/bootstrap/*.bootstrap.ts`:
49
+
50
+ ```ts
51
+ import type { Ctx } from "@tulipes/core/boot";
52
+
53
+ export default async function seedPlans({ models }: Ctx): Promise<void> {
54
+ const Plan = models!.get("Plan");
55
+ await Plan.updateOne(
56
+ { code: "free" },
57
+ { $setOnInsert: { code: "free", priceCents: 0 } },
58
+ { upsert: true },
59
+ );
60
+ }
61
+ ```
62
+
63
+ **Make bootstrap tasks idempotent** — they run on every boot, in every
64
+ process, including each worker. Upsert; never blind-insert.
65
+
66
+ ## Gotchas
67
+
68
+ - Global plugins (timestamps, soft delete) only apply to schemas compiled
69
+ *after* registration, which is why `registerBasePlugins()` runs in
70
+ `app.ts` before `boot()`. Adding a plugin later than that silently
71
+ misses your models.
72
+ - Mongoose queries are lazy: `await` them, and prefer `.lean()` for reads
73
+ you only serialize.
74
+ - If the app soft-deletes, ordinary queries already exclude deleted rows;
75
+ use `.withDeleted()` / `.onlyDeleted()` to opt out deliberately.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: tulipes-module
3
+ description: Use when adding a new feature to a Tulipes app — a new module under modules/ — or when deciding whether something belongs in an existing module, a new one, or lib/. Covers the tulipes manifest key, tier, priority, dependsOn and workspace wiring.
4
+ ---
5
+
6
+ # Adding a module
7
+
8
+ A module is one feature, one folder, one workspace package. It owns its
9
+ routes, models, config, permissions and jobs, and can be deleted without
10
+ touching anything else.
11
+
12
+ ## Decide first
13
+
14
+ - **Extend an existing module** when the work is part of that feature
15
+ (another users endpoint → `modules/users`).
16
+ - **New module** when it is a separate feature with its own vocabulary.
17
+ - **`lib/`** when it is a helper with no routes/models of its own, shared
18
+ by two or more modules.
19
+
20
+ ## Steps
21
+
22
+ 1. Scaffold: `yarn tulipes new module billing`. It creates the folder,
23
+ `package.json` (scope detected from siblings), `meta.variables.json`,
24
+ `module.config.ts` and a routes file.
25
+ 2. Set ordering in `modules/billing/package.json`:
26
+
27
+ ```json
28
+ {
29
+ "name": "@app/billing",
30
+ "tulipes": { "tier": "app", "priority": 100, "dependsOn": ["users"] },
31
+ "dependencies": { "@tulipes/core": "^0.1.3", "express": "^5" }
32
+ }
33
+ ```
34
+
35
+ 3. `yarn install` — the module is a workspace, so the package manager must
36
+ link it before imports resolve.
37
+ 4. Add only what the feature needs (every file is optional): `routes/`,
38
+ `models/`, `queues/`, `sockets/`, `bootstrap/`, `module.acl.ts`.
39
+ 5. `yarn sync && yarn dev` — the banner must list the module.
40
+
41
+ ## The manifest key
42
+
43
+ | Field | Meaning |
44
+ |---|---|
45
+ | `tier` | `sys` loads before every `app` module. Use `sys` **only** for framework-level concerns: global middleware, roles, infra variables. A business feature is always `app`. |
46
+ | `priority` | Lower loads earlier within a tier. Default 100. Use it for coarse ordering, not for dependencies. |
47
+ | `dependsOn` | Short names (`"users"`, not `"@app/users"`) of modules that must load first. Declare this whenever you import from another module or read its config. |
48
+
49
+ ## Gotchas
50
+
51
+ - **`dependsOn` and the npm dependency are two different things.** To
52
+ import `@app/users` you need it in `dependencies` (resolution) *and* in
53
+ `dependsOn` (load order). Missing the first fails at import; missing the
54
+ second gives you a module whose config namespace may not exist yet.
55
+ - A `sys` module may not `dependsOn` an `app` module — that inverts the
56
+ tier guarantee and crashes the boot.
57
+ - Cycles crash the boot with the cycle printed. If two modules need each
58
+ other, the shared part belongs in `lib/` or a third module.
59
+ - The folder name is cosmetic; the **short name** (last segment of the
60
+ package name) is what `dependsOn` and the config namespace use.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: tulipes-permissions
3
+ description: Use when adding roles or permissions to a Tulipes app, guarding an endpoint by role, or deciding who may do what. Covers module.acl.ts, the global role vocabulary and module-namespaced resources.
4
+ ---
5
+
6
+ # Adding permissions
7
+
8
+ Roles are **global**, declared once by the sys `core` module. Every other
9
+ module **grants** permissions on its own resources to those roles.
10
+
11
+ `modules/core/module.acl.ts` — the vocabulary:
12
+
13
+ ```ts
14
+ import type { AclBuilder } from "@tulipes/core/acl";
15
+
16
+ export default function coreAcl(acl: AclBuilder): void {
17
+ acl.defineRole("admin").defineRole("user");
18
+ acl.allow("admin", "*");
19
+ }
20
+ ```
21
+
22
+ `modules/billing/module.acl.ts` — grants for this feature:
23
+
24
+ ```ts
25
+ import type { AclBuilder } from "@tulipes/core/acl";
26
+
27
+ export default function billingAcl(acl: AclBuilder): void {
28
+ acl.allow("user", "invoices:read");
29
+ acl.allow("accountant", "invoices:read", "invoices:write");
30
+ }
31
+ ```
32
+
33
+ Check at the edge of a handler:
34
+
35
+ ```ts
36
+ if (!acl!.can(role, "invoices:write")) throw new HttpError(403, "forbidden");
37
+ ```
38
+
39
+ ## Rules
40
+
41
+ - **Resources are namespaced by module**: `invoices:read`,
42
+ `users:write`. Match the module's short name so ownership is obvious.
43
+ - **Grant, don't define.** A feature module calling `defineRole()` usually
44
+ means the role belongs in `core` instead. Introducing a role is
45
+ deliberate and explicit — `allow()` on an unknown role is a boot error,
46
+ never an implicit creation.
47
+ - The same role+resource granted by two modules crashes the boot. Since
48
+ resources are namespaced, that always means a duplicated resource name.
49
+ - Wildcards: `*` (everything), `invoices:*` (whole namespace). Give `*`
50
+ to `admin` only.
51
+ - Unknown roles always deny at runtime — the safe answer to "can this
52
+ unheard-of role do X?" is no.
53
+
54
+ ## Gotchas
55
+
56
+ - Load order matters: roles must exist before grants, which is why `core`
57
+ is `tier: "sys", priority: 0`. If your module runs before the module
58
+ defining a role, add it to `dependsOn`.
59
+ - `acl.can()` answers *what the role may do*, not *who the caller is*.
60
+ Authentication (deciding the role) is your auth module's job.
61
+ - Roles are lowercase kebab-case; resources are `name:action`.