alp-node 8.0.0 → 9.0.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.
- package/CHANGELOG.md +20 -0
- package/dist/{AlpNodeApp-node20.mjs → AlpNodeApp-node.mjs} +97 -77
- package/dist/AlpNodeApp-node.mjs.map +1 -0
- package/dist/definitions/AlpNodeApp.d.ts +2 -2
- package/dist/definitions/AlpNodeApp.d.ts.map +1 -1
- package/dist/{index-node20.mjs → index-node.mjs} +128 -104
- package/dist/index-node.mjs.map +1 -0
- package/package.json +16 -15
- package/src/AlpNodeApp.ts +5 -2
- package/src/params/ParamValidationResult.test.ts +10 -7
- package/dist/AlpNodeApp-node20.mjs.map +0 -1
- package/dist/index-node20.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [9.0.1](https://github.com/christophehurpeau/alp/compare/alp-node@9.0.0...alp-node@9.0.1) (2025-11-12)
|
|
7
|
+
|
|
8
|
+
Note: no notable changes
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## [9.0.0](https://github.com/christophehurpeau/alp/compare/alp-node@8.0.0...alp-node@9.0.0) (2025-10-27)
|
|
12
|
+
|
|
13
|
+
### ⚠ BREAKING CHANGES
|
|
14
|
+
|
|
15
|
+
* drop node 20 and build using esbuild
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* drop node 20 and build using esbuild ([812c4c1](https://github.com/christophehurpeau/alp/commit/812c4c1b0ad19984e389af4382a8d1e60643e4f1))
|
|
20
|
+
* update nightingale packages to version 16 across multiple packages ([2f59b01](https://github.com/christophehurpeau/alp/commit/2f59b01c9c407da7c59c608a12d716058fff9c70))
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
* clarify typings ([862b7e2](https://github.com/christophehurpeau/alp/commit/862b7e2ffe2dca85535c33bfd8a2d858c066fcbc))
|
|
25
|
+
|
|
6
26
|
## [8.0.0](https://github.com/christophehurpeau/alp/compare/alp-node@7.0.0...alp-node@8.0.0) (2025-08-02)
|
|
7
27
|
|
|
8
28
|
### ⚠ BREAKING CHANGES
|
|
@@ -18,24 +18,17 @@ async function alpNodeErrors(ctx, next) {
|
|
|
18
18
|
try {
|
|
19
19
|
await next();
|
|
20
20
|
} catch (error) {
|
|
21
|
-
// eslint-disable-next-line no-ex-assign
|
|
22
21
|
if (!error) error = new Error("Unknown error");
|
|
23
|
-
// eslint-disable-next-line no-ex-assign
|
|
24
22
|
if (typeof error === "string") error = new Error(error);
|
|
25
23
|
ctx.status = error.status || 500;
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
27
24
|
logger$3.error(error);
|
|
28
25
|
switch (ctx.request.accepts("html", "text", "json")) {
|
|
29
26
|
case "json":
|
|
30
27
|
ctx.type = "application/json";
|
|
31
28
|
if (process.env.NODE_ENV !== "production" || error.expose) {
|
|
32
|
-
ctx.body = {
|
|
33
|
-
error: error.message
|
|
34
|
-
};
|
|
29
|
+
ctx.body = { error: error.message };
|
|
35
30
|
} else {
|
|
36
|
-
ctx.body = {
|
|
37
|
-
error: STATUS_CODES[ctx.status]
|
|
38
|
-
};
|
|
31
|
+
ctx.body = { error: STATUS_CODES[ctx.status] };
|
|
39
32
|
}
|
|
40
33
|
break;
|
|
41
34
|
case "html":
|
|
@@ -68,18 +61,24 @@ function alpLanguage(app) {
|
|
|
68
61
|
if (!availableLanguages) {
|
|
69
62
|
throw new Error('Missing config "availableLanguages"');
|
|
70
63
|
}
|
|
71
|
-
defineLazyProperty(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
64
|
+
defineLazyProperty(
|
|
65
|
+
app.context,
|
|
66
|
+
"language",
|
|
67
|
+
function language() {
|
|
68
|
+
return this.acceptsLanguages(availableLanguages) || availableLanguages[0] || "en";
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
defineLazyProperty(
|
|
72
|
+
app.context,
|
|
73
|
+
"firstAcceptedLanguage",
|
|
74
|
+
function firstAcceptedLanguage() {
|
|
75
|
+
return this.acceptsLanguages()[0] || availableLanguages[0] || "en";
|
|
76
|
+
}
|
|
77
|
+
);
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
const logger$2 = new Logger("alp:listen");
|
|
80
|
-
const createServer = (callback, socketPath, tls, dirname = ""
|
|
81
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
82
|
-
) => {
|
|
81
|
+
const createServer = (callback, socketPath, tls, dirname = "") => {
|
|
83
82
|
const createHttpServer = !socketPath && tls ? createServer$1 : createServer$2;
|
|
84
83
|
if (!tls) {
|
|
85
84
|
return createHttpServer(callback);
|
|
@@ -91,35 +90,28 @@ const createServer = (callback, socketPath, tls, dirname = ""
|
|
|
91
90
|
return createHttpServer(options, callback);
|
|
92
91
|
};
|
|
93
92
|
function alpListen(config, callback, dirname) {
|
|
94
|
-
return new Promise(resolve => {
|
|
93
|
+
return new Promise((resolve) => {
|
|
95
94
|
const socketPath = config.get("socketPath");
|
|
96
95
|
const port = config.get("port");
|
|
97
96
|
const hostname = config.get("hostname");
|
|
98
97
|
const tls = config.get("tls");
|
|
99
|
-
logger$2.info("Creating server", socketPath ? {
|
|
100
|
-
socketPath
|
|
101
|
-
} : {
|
|
102
|
-
port
|
|
103
|
-
});
|
|
98
|
+
logger$2.info("Creating server", socketPath ? { socketPath } : { port });
|
|
104
99
|
const server = createServer(callback, socketPath, tls, dirname);
|
|
105
100
|
if (socketPath) {
|
|
106
101
|
try {
|
|
107
102
|
unlinkSync(socketPath);
|
|
108
|
-
} catch {
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
109
105
|
server.listen(socketPath, () => {
|
|
110
106
|
if (socketPath) {
|
|
111
107
|
chmodSync(socketPath, "777");
|
|
112
108
|
}
|
|
113
|
-
logger$2.info("Server listening", {
|
|
114
|
-
socketPath
|
|
115
|
-
});
|
|
109
|
+
logger$2.info("Server listening", { socketPath });
|
|
116
110
|
resolve(server);
|
|
117
111
|
});
|
|
118
112
|
} else {
|
|
119
113
|
server.listen(port, hostname, () => {
|
|
120
|
-
logger$2.info("Server listening", {
|
|
121
|
-
port
|
|
122
|
-
});
|
|
114
|
+
logger$2.info("Server listening", { port });
|
|
123
115
|
resolve(server);
|
|
124
116
|
});
|
|
125
117
|
}
|
|
@@ -127,25 +119,22 @@ function alpListen(config, callback, dirname) {
|
|
|
127
119
|
}
|
|
128
120
|
|
|
129
121
|
class ParamValidationResult {
|
|
122
|
+
_errors;
|
|
130
123
|
_error(name, key, value) {
|
|
131
124
|
if (!this._errors) {
|
|
132
125
|
this._errors = {};
|
|
133
126
|
}
|
|
134
|
-
this._errors[name] = {
|
|
135
|
-
error: key,
|
|
136
|
-
value
|
|
137
|
-
};
|
|
127
|
+
this._errors[name] = { error: key, value };
|
|
138
128
|
}
|
|
139
129
|
getErrors() {
|
|
140
130
|
return this._errors;
|
|
141
131
|
}
|
|
142
132
|
hasErrors() {
|
|
143
|
-
return this._errors !==
|
|
133
|
+
return this._errors !== void 0;
|
|
144
134
|
}
|
|
145
135
|
isValid() {
|
|
146
|
-
return this._errors ===
|
|
136
|
+
return this._errors === void 0;
|
|
147
137
|
}
|
|
148
|
-
|
|
149
138
|
// string(name: string): ParamValueStringValidator {
|
|
150
139
|
// return new ParamValueStringValidator(this, name, this.context.param(name));
|
|
151
140
|
// }
|
|
@@ -161,18 +150,20 @@ class ParamValidationResult {
|
|
|
161
150
|
}
|
|
162
151
|
|
|
163
152
|
class ParamValid extends ParamValidationResult {
|
|
153
|
+
context;
|
|
164
154
|
constructor(context) {
|
|
165
155
|
super();
|
|
166
156
|
this.context = context;
|
|
167
157
|
}
|
|
168
158
|
_error() {
|
|
169
|
-
this.context.throw(400, "Invalid params", {
|
|
170
|
-
validator: this
|
|
171
|
-
});
|
|
159
|
+
this.context.throw(400, "Invalid params", { validator: this });
|
|
172
160
|
}
|
|
173
161
|
}
|
|
174
162
|
|
|
175
163
|
class ParamValueValidator {
|
|
164
|
+
validationResult;
|
|
165
|
+
name;
|
|
166
|
+
value;
|
|
176
167
|
constructor(validationResult, name, value) {
|
|
177
168
|
this.validationResult = validationResult;
|
|
178
169
|
this.name = name;
|
|
@@ -196,22 +187,34 @@ class ParamValueStringValidator extends ParamValueValidator {
|
|
|
196
187
|
}
|
|
197
188
|
|
|
198
189
|
class ParamValueFromContext {
|
|
190
|
+
validationResult;
|
|
191
|
+
context;
|
|
199
192
|
constructor(context, validationResult) {
|
|
200
193
|
this.validationResult = validationResult;
|
|
201
194
|
this.context = context;
|
|
202
195
|
}
|
|
203
196
|
namedParam(name) {
|
|
204
|
-
return new ParamValueStringValidator(
|
|
197
|
+
return new ParamValueStringValidator(
|
|
198
|
+
this.validationResult,
|
|
199
|
+
name,
|
|
200
|
+
this.context.namedRouteParam(name)
|
|
201
|
+
);
|
|
205
202
|
}
|
|
206
203
|
otherParam(position) {
|
|
207
|
-
return new ParamValueStringValidator(
|
|
204
|
+
return new ParamValueStringValidator(
|
|
205
|
+
this.validationResult,
|
|
206
|
+
String(position),
|
|
207
|
+
this.context.otherRouteParam(position)
|
|
208
|
+
);
|
|
208
209
|
}
|
|
209
210
|
queryParam(name) {
|
|
210
|
-
return new ParamValueStringValidator(
|
|
211
|
+
return new ParamValueStringValidator(
|
|
212
|
+
this.validationResult,
|
|
213
|
+
name,
|
|
214
|
+
this.context.queryParam(name)
|
|
215
|
+
);
|
|
211
216
|
}
|
|
212
|
-
|
|
213
217
|
// bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {
|
|
214
|
-
|
|
215
218
|
// }
|
|
216
219
|
}
|
|
217
220
|
|
|
@@ -227,28 +230,39 @@ function alpParams(app) {
|
|
|
227
230
|
},
|
|
228
231
|
queryParam(name) {
|
|
229
232
|
const searchParams = this.request.searchParams;
|
|
230
|
-
return searchParams.get(name) ??
|
|
233
|
+
return searchParams.get(name) ?? void 0;
|
|
231
234
|
},
|
|
232
235
|
bodyParam(name) {
|
|
233
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access
|
|
234
236
|
return this.body[name];
|
|
235
237
|
}
|
|
236
238
|
});
|
|
237
|
-
defineLazyProperty(
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
239
|
+
defineLazyProperty(
|
|
240
|
+
app.request,
|
|
241
|
+
"searchParams",
|
|
242
|
+
function searchParams() {
|
|
243
|
+
return new URLSearchParams(this.search);
|
|
244
|
+
}
|
|
245
|
+
);
|
|
246
|
+
defineLazyProperty(
|
|
247
|
+
app.context,
|
|
248
|
+
"params",
|
|
249
|
+
function params() {
|
|
250
|
+
return new ParamValueFromContext(this, new ParamValidationResult());
|
|
251
|
+
}
|
|
252
|
+
);
|
|
253
|
+
defineLazyProperty(
|
|
254
|
+
app.context,
|
|
255
|
+
"validParams",
|
|
256
|
+
function validParams() {
|
|
257
|
+
return new ParamValueFromContext(this, new ParamValid(this));
|
|
258
|
+
}
|
|
259
|
+
);
|
|
246
260
|
}
|
|
247
261
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
262
|
+
const IntlMessageFormat = (
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
264
|
+
IntlMessageFormatDefault.default || IntlMessageFormatDefault
|
|
265
|
+
);
|
|
252
266
|
function load(translations, language) {
|
|
253
267
|
const result = {};
|
|
254
268
|
(function loadMap(record, prefix) {
|
|
@@ -257,7 +271,10 @@ function load(translations, language) {
|
|
|
257
271
|
loadMap(value, `${prefix}${key}.`);
|
|
258
272
|
return;
|
|
259
273
|
}
|
|
260
|
-
result[`${prefix}${key}`] = new IntlMessageFormat(
|
|
274
|
+
result[`${prefix}${key}`] = new IntlMessageFormat(
|
|
275
|
+
value,
|
|
276
|
+
language
|
|
277
|
+
);
|
|
261
278
|
});
|
|
262
279
|
})(translations, "");
|
|
263
280
|
return result;
|
|
@@ -266,23 +283,20 @@ function load(translations, language) {
|
|
|
266
283
|
const logger$1 = new Logger("alp:translate");
|
|
267
284
|
function alpTranslate(dirname) {
|
|
268
285
|
dirname = dirname.replace(/\/*$/, "/");
|
|
269
|
-
return app => {
|
|
270
|
-
const appTranslations = new Map();
|
|
286
|
+
return (app) => {
|
|
287
|
+
const appTranslations = /* @__PURE__ */ new Map();
|
|
271
288
|
Object.assign(app.context, {
|
|
272
289
|
t(id, args) {
|
|
273
290
|
const msg = appTranslations.get(this.language)?.[id];
|
|
274
291
|
if (!msg) {
|
|
275
|
-
logger$1.warn("invalid msg", {
|
|
276
|
-
language: this.language,
|
|
277
|
-
id
|
|
278
|
-
});
|
|
292
|
+
logger$1.warn("invalid msg", { language: this.language, id });
|
|
279
293
|
return id;
|
|
280
294
|
}
|
|
281
295
|
return msg.format(args);
|
|
282
296
|
}
|
|
283
297
|
});
|
|
284
298
|
const config = app.config;
|
|
285
|
-
config.get("availableLanguages").forEach(language => {
|
|
299
|
+
config.get("availableLanguages").forEach((language) => {
|
|
286
300
|
const translations = app.loadConfigSync(dirname + language);
|
|
287
301
|
appTranslations.set(language, load(translations, language));
|
|
288
302
|
});
|
|
@@ -292,6 +306,12 @@ function alpTranslate(dirname) {
|
|
|
292
306
|
|
|
293
307
|
const logger = new Logger("alp");
|
|
294
308
|
class AlpNodeApp extends Koa {
|
|
309
|
+
dirname;
|
|
310
|
+
certPath;
|
|
311
|
+
publicPath;
|
|
312
|
+
config;
|
|
313
|
+
_server;
|
|
314
|
+
router;
|
|
295
315
|
/**
|
|
296
316
|
* @param {Object} [options]
|
|
297
317
|
* @param {string} [options.certPath] directory of the ssl certificates
|
|
@@ -323,12 +343,11 @@ class AlpNodeApp extends Koa {
|
|
|
323
343
|
}
|
|
324
344
|
createContext(req, res) {
|
|
325
345
|
const ctx = super.createContext(req, res);
|
|
326
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
327
346
|
ctx.sanitizedState = {};
|
|
328
347
|
return ctx;
|
|
329
348
|
}
|
|
330
349
|
servePublic() {
|
|
331
|
-
this.use(serve(this.publicPath));
|
|
350
|
+
this.use(serve(this.publicPath));
|
|
332
351
|
}
|
|
333
352
|
catchErrors() {
|
|
334
353
|
this.use(alpNodeErrors);
|
|
@@ -336,7 +355,6 @@ class AlpNodeApp extends Koa {
|
|
|
336
355
|
listen() {
|
|
337
356
|
throw new Error("Use start instead");
|
|
338
357
|
}
|
|
339
|
-
|
|
340
358
|
/**
|
|
341
359
|
* Close server and emit close event
|
|
342
360
|
*/
|
|
@@ -349,19 +367,21 @@ class AlpNodeApp extends Koa {
|
|
|
349
367
|
async start(fn) {
|
|
350
368
|
await fn();
|
|
351
369
|
try {
|
|
352
|
-
const server = await alpListen(
|
|
370
|
+
const server = await alpListen(
|
|
371
|
+
this.config,
|
|
372
|
+
this.callback(),
|
|
373
|
+
this.certPath
|
|
374
|
+
);
|
|
353
375
|
this._server = server;
|
|
354
376
|
logger.success("started");
|
|
355
377
|
if (process.send) process.send("ready");
|
|
356
378
|
return server;
|
|
357
379
|
} catch (error) {
|
|
358
|
-
logger.error("start fail", {
|
|
359
|
-
err: error
|
|
360
|
-
});
|
|
380
|
+
logger.error("start fail", { err: error });
|
|
361
381
|
throw error;
|
|
362
382
|
}
|
|
363
383
|
}
|
|
364
384
|
}
|
|
365
385
|
|
|
366
386
|
export { AlpNodeApp };
|
|
367
|
-
//# sourceMappingURL=AlpNodeApp-
|
|
387
|
+
//# sourceMappingURL=AlpNodeApp-node.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlpNodeApp-node.mjs","sources":["../src/errors.ts","../src/language.ts","../src/listen.ts","../src/params/ParamValidationResult.ts","../src/params/ParamValid.ts","../src/params/ParamValueValidator.ts","../src/params/ParamValueStringValidator.ts","../src/params/ParamValueFromContext.ts","../src/params/index.ts","../src/translate/load.ts","../src/translate/index.ts","../src/AlpNodeApp.ts"],"sourcesContent":["import { STATUS_CODES } from \"node:http\";\nimport ErrorHtmlRenderer from \"error-html\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Context } from \"./AlpNodeApp\";\nimport type { HtmlError } from \"./types\";\n\nconst logger = new Logger(\"alp:errors\");\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n ctx: Context,\n next: () => Promise<void> | void,\n): Promise<void> {\n try {\n await next();\n } catch (error: unknown) {\n // eslint-disable-next-line no-ex-assign\n if (!error) error = new Error(\"Unknown error\");\n // eslint-disable-next-line no-ex-assign\n if (typeof error === \"string\") error = new Error(error);\n\n ctx.status = (error as HtmlError).status || 500;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n logger.error(error as any);\n\n switch (ctx.request.accepts(\"html\", \"text\", \"json\")) {\n case \"json\":\n ctx.type = \"application/json\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = { error: (error as Error).message };\n } else {\n ctx.body = { error: STATUS_CODES[ctx.status] };\n }\n\n break;\n\n case \"html\":\n ctx.type = \"text/html\";\n if (process.env.NODE_ENV !== \"production\") {\n ctx.body = errorHtmlRenderer.render(error as Error);\n } else if ((error as HtmlError).expose) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n\n case \"text\":\n case false:\n default:\n ctx.type = \"text/plain\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n }\n }\n}\n","import type { Context } from \"koa\";\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp } from \"./AlpNodeApp\";\n\nexport interface AlpLanguageContext {\n readonly firstAcceptedLanguage: string;\n readonly language: string;\n}\nexport default function alpLanguage(app: AlpNodeApp): void {\n const config = app.context.config;\n const availableLanguages: string[] = config.get(\"availableLanguages\");\n if (!availableLanguages) {\n throw new Error('Missing config \"availableLanguages\"');\n }\n\n defineLazyProperty(\n app.context,\n \"language\",\n function language(this: Context): string {\n return (\n this.acceptsLanguages(availableLanguages) ||\n availableLanguages[0] ||\n \"en\"\n );\n },\n );\n\n defineLazyProperty(\n app.context,\n \"firstAcceptedLanguage\",\n function firstAcceptedLanguage(this: Context): string {\n return this.acceptsLanguages()[0] || availableLanguages[0] || \"en\";\n },\n );\n}\n","import { chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { createServer as createServerHttp } from \"node:http\";\nimport type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport { createServer as createServerHttps } from \"node:https\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Config } from \"./config\";\n\nconst logger = new Logger(\"alp:listen\");\n\ntype RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createServer = (\n callback: RequestListener,\n socketPath?: string,\n tls?: boolean,\n dirname = \"\",\n // eslint-disable-next-line @typescript-eslint/max-params\n): Server => {\n const createHttpServer =\n !socketPath && tls ? createServerHttps : createServerHttp;\n\n if (!tls) {\n return (createHttpServer as typeof createServerHttps)(callback);\n }\n\n const options = {\n key: readFileSync(`${dirname}/server.key`),\n cert: readFileSync(`${dirname}/server.crt`),\n };\n\n return (createHttpServer as typeof createServerHttps)(options, callback);\n};\n\nexport default function alpListen(\n config: Config,\n callback: RequestListener,\n dirname?: string,\n): Promise<Server> {\n return new Promise((resolve) => {\n const socketPath = config.get<string>(\"socketPath\");\n const port = config.get<number>(\"port\");\n const hostname = config.get<string>(\"hostname\");\n const tls = config.get<boolean>(\"tls\");\n\n logger.info(\"Creating server\", socketPath ? { socketPath } : { port });\n const server = createServer(callback, socketPath, tls, dirname);\n\n if (socketPath) {\n try {\n unlinkSync(socketPath);\n } catch {}\n\n server.listen(socketPath, () => {\n if (socketPath) {\n chmodSync(socketPath, \"777\");\n }\n\n logger.info(\"Server listening\", { socketPath });\n resolve(server);\n });\n } else {\n server.listen(port, hostname, () => {\n logger.info(\"Server listening\", { port });\n resolve(server);\n });\n }\n });\n}\n","export type Errors = Record<string, any>;\n\nexport class ParamValidationResult {\n _errors?: Errors;\n\n _error(name: string, key: string, value: unknown): void {\n if (!this._errors) {\n this._errors = {};\n }\n\n this._errors[name] = { error: key, value };\n }\n\n getErrors(): Errors | undefined {\n return this._errors;\n }\n\n hasErrors(): boolean {\n return this._errors !== undefined;\n }\n\n isValid(): boolean {\n return this._errors === undefined;\n }\n\n // string(name: string): ParamValueStringValidator {\n // return new ParamValueStringValidator(this, name, this.context.param(name));\n // }\n /* int(name, position) {\n return new ParamValueIntValidator(this, name, this.context.param(name, position));\n }\n model(modelName, name) {\n name = name || S.string.lcFirst(modelName);\n console.log('paramvalidator model', modelName, M[modelName]);\n let data = this.context.getOrPostParam(name);\n return new ParamValueModelValidator(this, name, !data ? null : new M[modelName](data));\n } */\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValid extends ParamValidationResult {\n context: Context;\n\n constructor(context: Context) {\n super();\n this.context = context;\n }\n\n override _error(): void {\n this.context.throw(400, \"Invalid params\", { validator: this });\n }\n}\n","import type { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValueValidator<T> {\n readonly validationResult: ParamValidationResult;\n\n readonly name: string;\n\n readonly value: T;\n\n constructor(validationResult: ParamValidationResult, name: string, value: T) {\n this.validationResult = validationResult;\n this.name = name;\n this.value = value;\n }\n\n isValid(): boolean {\n return this.validationResult.isValid();\n }\n\n _error(key: string): void {\n this.validationResult._error(this.name, key, this.value);\n }\n}\n","import ParamValueValidator from \"./ParamValueValidator\";\n\nexport default class ParamValueStringValidator<\n T extends string = string,\n> extends ParamValueValidator<T | null | undefined> {\n notEmpty(): ParamValueValidator<T> {\n if (this.value == null || this.value.trim() === \"\") {\n this._error(\"notEmpty\");\n }\n\n return this as ParamValueValidator<T>;\n }\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport type { ParamValidationResult } from \"./ParamValidationResult\";\nimport ParamValueStringValidator from \"./ParamValueStringValidator\";\n\nexport class ParamValueFromContext {\n readonly validationResult: ParamValidationResult;\n\n readonly context: Context;\n\n constructor(context: Context, validationResult: ParamValidationResult) {\n this.validationResult = validationResult;\n this.context = context;\n }\n\n namedParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.namedRouteParam(name),\n );\n }\n\n otherParam(position: number): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n String(position),\n this.context.otherRouteParam(position),\n );\n }\n\n queryParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.queryParam(name),\n );\n }\n\n // bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {\n\n // }\n}\n","import { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport ParamValid from \"./ParamValid\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\nimport { ParamValueFromContext } from \"./ParamValueFromContext\";\n\nexport interface AlpParamsContext {\n params: ParamValueFromContext;\n validParams: ParamValueFromContext;\n namedRouteParam: (name: string) => string | undefined;\n otherRouteParam: (position: number) => string | undefined;\n /** @deprecated use namedRouteParam */\n namedParam: never;\n /** @deprecated use otherRouteParam */\n otherParam: never;\n queryParam: (name: string) => string | undefined;\n bodyParam: <T>(name: string) => T | undefined;\n}\n\nexport interface AlpParamsRequest {\n searchParams: URLSearchParams;\n}\n\nexport default function alpParams(app: AlpNodeApp): void {\n Object.assign(app.context, {\n namedRouteParam(this: Context, name: string): string | undefined {\n const namedParams = this.route.namedParams;\n return namedParams?.get(name);\n },\n\n otherRouteParam(this: Context, position: number): string | undefined {\n const otherParams = this.route.otherParams;\n return otherParams?.[position - 1];\n },\n\n queryParam(this: Context, name: string): string | undefined {\n const searchParams = this.request.searchParams;\n return searchParams.get(name) ?? undefined;\n },\n\n bodyParam<T>(this: Context, name: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (this.body as any)[name];\n },\n });\n\n defineLazyProperty(\n app.request,\n \"searchParams\",\n function searchParams(this: Context[\"request\"]): URLSearchParams {\n return new URLSearchParams(this.search);\n },\n );\n\n defineLazyProperty(\n app.context,\n \"params\",\n function params(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValidationResult());\n },\n );\n\n defineLazyProperty(\n app.context,\n \"validParams\",\n function validParams(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValid(this));\n },\n );\n}\n","import IntlMessageFormatDefault from \"intl-messageformat\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst IntlMessageFormat: typeof IntlMessageFormatDefault =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (IntlMessageFormatDefault as any).default || IntlMessageFormatDefault;\n\nexport type Translations = Readonly<Record<string, IntlMessageFormatDefault>>;\n\nexport default function load(\n translations: Readonly<Record<string, unknown>>,\n language: string,\n): Translations {\n const result: Record<string, IntlMessageFormatDefault> = {};\n\n (function loadMap(record: Record<string, unknown>, prefix: string) {\n Object.entries(record).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n loadMap(value as Record<string, unknown>, `${prefix}${key}.`);\n return;\n }\n\n result[`${prefix}${key}`] = new IntlMessageFormat(\n value as string,\n language,\n );\n });\n })(translations, \"\");\n\n return result;\n}\n","import { Logger } from \"nightingale-logger\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport type { Translations } from \"./load\";\nimport load from \"./load\";\n\nconst logger = new Logger(\"alp:translate\");\n\ntype Args = Record<string, any>;\n\nexport interface TranslateBaseContext {\n t: (id: string, args: Args) => string;\n}\nexport interface TranslateContext {\n readonly language: string;\n}\n\nexport default function alpTranslate(\n dirname: string,\n): (app: AlpNodeApp) => void {\n dirname = dirname.replace(/\\/*$/, \"/\");\n return (app: AlpNodeApp) => {\n const appTranslations = new Map<string, Translations>();\n\n Object.assign(app.context, {\n t(this: Context, id: string, args: Args): string {\n const msg = appTranslations.get(this.language)?.[id];\n if (!msg) {\n logger.warn(\"invalid msg\", { language: this.language, id });\n return id;\n }\n\n return msg.format(args) as string;\n },\n });\n\n const config = app.config;\n\n config.get<string[]>(\"availableLanguages\").forEach((language) => {\n const translations = app.loadConfigSync(dirname + language);\n appTranslations.set(language, load(translations, language));\n });\n\n return appTranslations;\n };\n}\n","import type {\n IncomingMessage,\n RequestListener,\n Server,\n ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport Koa from \"koa\";\nimport type { DefaultContext, DefaultState, ParameterizedContext } from \"koa\";\nimport compress from \"koa-compress\";\nimport serve from \"koa-static\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Router } from \"router-segments\";\nimport type { Config } from \"./config\";\nimport errors from \"./errors\";\nimport type { AlpLanguageContext } from \"./language\";\nimport language from \"./language\";\nimport _listen from \"./listen\";\nimport type { AlpParamsContext, AlpParamsRequest } from \"./params/index\";\nimport params from \"./params/index\";\nimport type {\n AlpRouteRef,\n RouterContext as AlpRouterContext,\n UrlGenerator,\n} from \"./router\";\nimport type { TranslateBaseContext, TranslateContext } from \"./translate/index\";\nimport translate from \"./translate/index\";\nimport type {\n Context as AlpContext,\n ContextSanitizedState,\n ContextState,\n NodeApplication,\n NodeConfig,\n} from \"./types\";\n\nconst logger = new Logger(\"alp\");\n\nexport interface AlpNodeAppOptions {\n appDirname: string;\n packageDirname: string;\n config: Config & NodeConfig;\n certPath?: string;\n publicPath?: string;\n}\n\ndeclare module \"koa\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface DefaultState extends ContextState {}\n\n interface DefaultContext\n extends AlpContext,\n AlpParamsContext,\n AlpRouterContext,\n AlpLanguageContext,\n TranslateContext {}\n\n interface BaseContext extends AlpContext, TranslateBaseContext {\n urlGenerator: UrlGenerator;\n redirectTo: <P extends Record<string, unknown>>(\n to: string,\n params?: P,\n ) => void;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface BaseRequest extends AlpParamsRequest {}\n}\n\nexport class AlpNodeApp\n extends Koa<DefaultState, DefaultContext>\n implements NodeApplication\n{\n dirname: string;\n\n certPath: string;\n\n publicPath: string;\n\n config: Config & NodeConfig;\n\n _server?: Server;\n\n router?: Router<any, AlpRouteRef>;\n\n /**\n * @param {Object} [options]\n * @param {string} [options.certPath] directory of the ssl certificates\n * @param {string} [options.publicPath] directory of public files\n */\n constructor({\n appDirname,\n packageDirname,\n config,\n certPath,\n publicPath,\n }: AlpNodeAppOptions) {\n super();\n\n this.dirname = path.normalize(appDirname);\n this.certPath = certPath || `${packageDirname}/config/cert`;\n this.publicPath = publicPath || `${packageDirname}/public/`;\n\n this.config = config;\n this.context.config = this.config;\n\n params(this);\n language(this);\n translate(\"locales\")(this);\n\n this.use(compress());\n }\n\n existsConfigSync(name: string): ReturnType<Config[\"existsConfigSync\"]> {\n return this.config.existsConfigSync(name);\n }\n\n loadConfigSync(name: string): ReturnType<Config[\"loadConfigSync\"]> {\n return this.config.loadConfigSync(name);\n }\n\n override createContext<StateT = DefaultState>(\n req: IncomingMessage,\n res: ServerResponse,\n ): ParameterizedContext<StateT> {\n const ctx = super.createContext<StateT>(req, res);\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ctx.sanitizedState = {} as ContextSanitizedState;\n return ctx;\n }\n\n servePublic(): void {\n this.use(serve(this.publicPath)); // static files\n }\n\n catchErrors(): void {\n this.use(errors);\n }\n\n override listen(): never {\n throw new Error(\"Use start instead\");\n }\n\n /**\n * Close server and emit close event\n */\n close(): void {\n if (this._server) {\n this._server.close();\n this.emit(\"close\");\n }\n }\n\n async start(fn: () => Promise<void> | void): Promise<Server> {\n await fn();\n try {\n const server = await _listen(\n this.config,\n this.callback() as RequestListener,\n this.certPath,\n );\n this._server = server;\n logger.success(\"started\");\n if (process.send) process.send(\"ready\");\n return server;\n } catch (error: unknown) {\n logger.error(\"start fail\", { err: error });\n throw error;\n }\n }\n}\n\nexport type { Context } from \"koa\";\n\nexport { type NodeApplication } from \"./types\";\n"],"names":["logger","createServerHttps","createServerHttp","params","language","translate","errors","_listen"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IncomingMessage, Server, ServerResponse } from "node:http";
|
|
2
2
|
import Koa from "koa";
|
|
3
|
-
import type { DefaultState, ParameterizedContext } from "koa";
|
|
3
|
+
import type { DefaultContext, DefaultState, ParameterizedContext } from "koa";
|
|
4
4
|
import type { Router } from "router-segments";
|
|
5
5
|
import type { Config } from "./config";
|
|
6
6
|
import type { AlpLanguageContext } from "./language";
|
|
@@ -27,7 +27,7 @@ declare module "koa" {
|
|
|
27
27
|
interface BaseRequest extends AlpParamsRequest {
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
export declare class AlpNodeApp extends Koa<
|
|
30
|
+
export declare class AlpNodeApp extends Koa<DefaultState, DefaultContext> implements NodeApplication {
|
|
31
31
|
dirname: string;
|
|
32
32
|
certPath: string;
|
|
33
33
|
publicPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlpNodeApp.d.ts","sourceRoot":"","sources":["../../src/AlpNodeApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,MAAM,EACN,cAAc,EACf,MAAM,WAAW,CAAC;AAEnB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"AlpNodeApp.d.ts","sourceRoot":"","sources":["../../src/AlpNodeApp.ts"],"names":[],"mappings":"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"}
|