@tulipes/core 0.1.2 → 0.1.3
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/cli/init.js +161 -5
- package/dist/cli/init.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/init.js
CHANGED
|
@@ -76,8 +76,12 @@ function renderProject(name, coreVersion) {
|
|
|
76
76
|
check: "tulipes env:check",
|
|
77
77
|
typecheck: "tsc --noEmit",
|
|
78
78
|
},
|
|
79
|
-
dependencies: {
|
|
79
|
+
dependencies: {
|
|
80
|
+
"@tulipes/core": core,
|
|
81
|
+
express: "^5",
|
|
82
|
+
},
|
|
80
83
|
devDependencies: {
|
|
84
|
+
"@types/express": "^5",
|
|
81
85
|
"@types/node": "^24",
|
|
82
86
|
tsx: "^4",
|
|
83
87
|
typescript: "^7",
|
|
@@ -98,6 +102,20 @@ function renderProject(name, coreVersion) {
|
|
|
98
102
|
},
|
|
99
103
|
include: ["app.ts", "worker.ts", "types", "modules", "config"],
|
|
100
104
|
})],
|
|
105
|
+
[".yarnrc.yml", [
|
|
106
|
+
`nodeLinker: node-modules`,
|
|
107
|
+
``,
|
|
108
|
+
`# tsx (esbuild) and bullmq's native helpers need their install scripts;`,
|
|
109
|
+
`# stated explicitly so a restrictive global yarn config can't break dev.`,
|
|
110
|
+
`enableScripts: true`,
|
|
111
|
+
``,
|
|
112
|
+
`# Yarn's release-age gate quarantines freshly published packages, which`,
|
|
113
|
+
`# would block brand-new @tulipes releases from installing. Preapprove the`,
|
|
114
|
+
`# framework scope only — the gate stays active for everything else.`,
|
|
115
|
+
`npmPreapprovedPackages:`,
|
|
116
|
+
` - "@tulipes/*"`,
|
|
117
|
+
``,
|
|
118
|
+
].join("\n")],
|
|
101
119
|
[".gitignore", [
|
|
102
120
|
"node_modules/",
|
|
103
121
|
"dist/",
|
|
@@ -128,18 +146,156 @@ function renderProject(name, coreVersion) {
|
|
|
128
146
|
`import type { AppConfigFn } from "@tulipes/core/boot";`,
|
|
129
147
|
``,
|
|
130
148
|
`/**`,
|
|
131
|
-
` *
|
|
132
|
-
`
|
|
149
|
+
` * ── The app-wide config seed ──────────────────────────────────────────`,
|
|
150
|
+
` *`,
|
|
151
|
+
` * Runs FIRST in boot phase 6, before any module.config.ts factory, and`,
|
|
152
|
+
` * whatever it returns becomes the base of the global config. Every`,
|
|
153
|
+
` * module then reads it through \`ctx.config.<key>\`:`,
|
|
154
|
+
` *`,
|
|
155
|
+
` * export default function usersRoutes({ config }: Ctx) {`,
|
|
156
|
+
` * const router = Router();`,
|
|
157
|
+
` * router.get(\`\${config.api!.prefix}/users\`, handler);`,
|
|
158
|
+
` * }`,
|
|
159
|
+
` *`,
|
|
160
|
+
` * The framework itself reads exactly ONE field: \`app.name\`, for the`,
|
|
161
|
+
` * startup banner. Everything else below is convention — YOUR keys, read`,
|
|
162
|
+
` * by YOUR modules. Rename them, delete them, invent new ones freely;`,
|
|
163
|
+
` * nothing in core depends on them.`,
|
|
164
|
+
` *`,
|
|
165
|
+
` * Config that belongs to one feature does NOT go here — it goes in that`,
|
|
166
|
+
` * module's \`module.config.ts\`, where codegen types it automatically.`,
|
|
167
|
+
` * This file is for values two or more modules share.`,
|
|
168
|
+
` *`,
|
|
169
|
+
` * Values can be hardcoded (below) or driven by the environment. To make`,
|
|
170
|
+
` * any of them env-driven, declare the variable in a module's`,
|
|
171
|
+
` * meta.variables.json first, then read it here with`,
|
|
172
|
+
` * \`Environment.get("NAME")\` — reads of undeclared variables throw on`,
|
|
173
|
+
` * purpose, so a typo can never boot.`,
|
|
133
174
|
` */`,
|
|
134
|
-
|
|
175
|
+
`// \`satisfies\` (not a type annotation) so TypeScript keeps the exact`,
|
|
176
|
+
`// shape of this object for the augmentation at the bottom of the file.`,
|
|
177
|
+
`const appConfig = ((Environment) => ({`,
|
|
178
|
+
` /**`,
|
|
179
|
+
` * Identity. \`name\` is the one field core consumes — it titles the`,
|
|
180
|
+
` * startup banner ("▲ ${name}"). The rest is yours: stamp \`version\``,
|
|
181
|
+
` * into a /health payload, switch behaviour on \`env\`, etc.`,
|
|
182
|
+
` */`,
|
|
135
183
|
` app: {`,
|
|
136
184
|
` name: ${JSON.stringify(name)},`,
|
|
185
|
+
` version: "0.1.0",`,
|
|
186
|
+
` description: "A Tulipes API",`,
|
|
187
|
+
` // development | staging | production | test — resolved from APP_ENV`,
|
|
137
188
|
` env: Environment.appEnv,`,
|
|
189
|
+
` // Read a declared variable (PORT lives in modules/core/meta.variables.json)`,
|
|
190
|
+
` port: Environment.get("PORT"),`,
|
|
191
|
+
` },`,
|
|
192
|
+
``,
|
|
193
|
+
` /**`,
|
|
194
|
+
` * Route prefixing. Modules build their paths from this instead of`,
|
|
195
|
+
` * hardcoding "/api/v1", so versioning the whole API is a one-line`,
|
|
196
|
+
` * change here: \`router.get(\\\`\${config.api!.prefix}/users\\\`, …)\`.`,
|
|
197
|
+
` */`,
|
|
198
|
+
` api: {`,
|
|
199
|
+
` prefix: "/api/v1",`,
|
|
200
|
+
` // Where the docs/collection live, if you expose them`,
|
|
201
|
+
` docsPath: "/api/docs",`,
|
|
202
|
+
` },`,
|
|
203
|
+
``,
|
|
204
|
+
` /**`,
|
|
205
|
+
` * HTTP behaviour consumed by the sys security module`,
|
|
206
|
+
` * (modules/security/routes/security.routes.ts). Change the body limit`,
|
|
207
|
+
` * or CORS origins here rather than editing that file.`,
|
|
208
|
+
` */`,
|
|
209
|
+
` http: {`,
|
|
210
|
+
` // Passed to express.json({ limit }) — a parser without a cap is a`,
|
|
211
|
+
` // memory-exhaustion invitation.`,
|
|
212
|
+
` bodyLimit: "1mb",`,
|
|
213
|
+
` // Browser origins allowed to call this API. Add a cors() middleware`,
|
|
214
|
+
` // in the security module and feed it this list.`,
|
|
215
|
+
` corsOrigins: ["http://localhost:5173"],`,
|
|
216
|
+
` // Set true behind nginx/a load balancer so req.ip is the real client`,
|
|
217
|
+
` // (app.set("trust proxy", config.http!.trustProxy)).`,
|
|
218
|
+
` trustProxy: false,`,
|
|
219
|
+
` // Seconds a request may run before you abort it, if you add a timeout`,
|
|
220
|
+
` // middleware.`,
|
|
221
|
+
` requestTimeout: 30,`,
|
|
222
|
+
` },`,
|
|
223
|
+
``,
|
|
224
|
+
` /**`,
|
|
225
|
+
` * List-endpoint defaults, so every module paginates identically and`,
|
|
226
|
+
` * no caller can ask for 10 000 rows at once.`,
|
|
227
|
+
` */`,
|
|
228
|
+
` pagination: {`,
|
|
229
|
+
` defaultLimit: 20,`,
|
|
230
|
+
` maxLimit: 100,`,
|
|
138
231
|
` },`,
|
|
139
|
-
|
|
232
|
+
``,
|
|
233
|
+
` /**`,
|
|
234
|
+
` * Cross-cutting security knobs. Secrets themselves never live here —`,
|
|
235
|
+
` * declare them as \`"type": "secret"\` variables in meta.variables.json`,
|
|
236
|
+
` * (redacted in logs and the banner) and read them where needed.`,
|
|
237
|
+
` */`,
|
|
238
|
+
` security: {`,
|
|
239
|
+
` // Token lifetimes for an auth module, in seconds`,
|
|
240
|
+
` accessTokenTtl: 900, // 15 minutes`,
|
|
241
|
+
` refreshTokenTtl: 2_592_000, // 30 days`,
|
|
242
|
+
` // bcrypt/argon cost factor`,
|
|
243
|
+
` passwordRounds: 12,`,
|
|
244
|
+
` // Rate limiting, if you mount a limiter in the security module`,
|
|
245
|
+
` rateLimit: { windowSeconds: 60, max: 100 },`,
|
|
246
|
+
` },`,
|
|
247
|
+
``,
|
|
248
|
+
` /**`,
|
|
249
|
+
` * Public-facing URLs. Anything that builds a link a human will click —`,
|
|
250
|
+
` * password-reset emails, webhook callbacks, OAuth redirects — reads`,
|
|
251
|
+
` * these instead of guessing the host from a request.`,
|
|
252
|
+
` */`,
|
|
253
|
+
` urls: {`,
|
|
254
|
+
` api: \`http://localhost:\${Environment.get("PORT")}\`,`,
|
|
255
|
+
` frontend: "http://localhost:5173",`,
|
|
256
|
+
` },`,
|
|
257
|
+
``,
|
|
258
|
+
` /**`,
|
|
259
|
+
` * Upload constraints shared by every module that accepts files.`,
|
|
260
|
+
` */`,
|
|
261
|
+
` uploads: {`,
|
|
262
|
+
` maxSizeMb: 10,`,
|
|
263
|
+
` allowedMimeTypes: ["image/png", "image/jpeg", "application/pdf"],`,
|
|
264
|
+
` },`,
|
|
265
|
+
``,
|
|
266
|
+
` /**`,
|
|
267
|
+
` * Feature flags. Cheap way to ship dark code: a module checks`,
|
|
268
|
+
` * \`config.features!.signup\` before mounting a route. Flip per`,
|
|
269
|
+
` * environment by reading a declared boolean variable instead of a`,
|
|
270
|
+
` * literal.`,
|
|
271
|
+
` */`,
|
|
272
|
+
` features: {`,
|
|
273
|
+
` signup: true,`,
|
|
274
|
+
` maintenanceMode: false,`,
|
|
275
|
+
` },`,
|
|
276
|
+
``,
|
|
277
|
+
` /**`,
|
|
278
|
+
` * Localization defaults for modules that render text (emails, errors).`,
|
|
279
|
+
` */`,
|
|
280
|
+
` i18n: {`,
|
|
281
|
+
` defaultLocale: "en",`,
|
|
282
|
+
` supportedLocales: ["en", "fr"],`,
|
|
283
|
+
` },`,
|
|
284
|
+
`})) satisfies AppConfigFn;`,
|
|
140
285
|
``,
|
|
141
286
|
`export default appConfig;`,
|
|
142
287
|
``,
|
|
288
|
+
`/**`,
|
|
289
|
+
` * Types the keys above at every call site: \`ctx.config.api?.prefix\` is a`,
|
|
290
|
+
` * string, not \`unknown\`. \`tulipes sync\` does this automatically for`,
|
|
291
|
+
` * module.config.ts factories; the app-level seed types itself here.`,
|
|
292
|
+
` * Optional (Partial) because the config object is empty until this`,
|
|
293
|
+
` * factory has run.`,
|
|
294
|
+
` */`,
|
|
295
|
+
`declare module "@tulipes/core/config" {`,
|
|
296
|
+
` interface GlobalConfig extends Partial<ReturnType<typeof appConfig>> {}`,
|
|
297
|
+
`}`,
|
|
298
|
+
``,
|
|
143
299
|
].join("\n")],
|
|
144
300
|
[".envs/.env.development", [
|
|
145
301
|
`# Development mode — committed on purpose; values here are dev defaults.`,
|
package/dist/cli/init.js.map
CHANGED
|
@@ -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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"}
|