@nara-web/core 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/App.d.ts +11 -29
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +24 -237
  4. package/dist/App.js.map +1 -1
  5. package/dist/BaseController.d.ts +5 -26
  6. package/dist/BaseController.d.ts.map +1 -1
  7. package/dist/BaseController.js +6 -56
  8. package/dist/BaseController.js.map +1 -1
  9. package/dist/adapters.d.ts +7 -0
  10. package/dist/adapters.d.ts.map +1 -0
  11. package/dist/{adapters/types.js → adapters.js} +1 -1
  12. package/dist/adapters.js.map +1 -0
  13. package/dist/errors.d.ts +7 -23
  14. package/dist/errors.d.ts.map +1 -1
  15. package/dist/errors.js +21 -73
  16. package/dist/errors.js.map +1 -1
  17. package/dist/index.d.ts +7 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +20 -16
  20. package/dist/index.js.map +1 -1
  21. package/dist/response.d.ts +6 -27
  22. package/dist/response.d.ts.map +1 -1
  23. package/dist/response.js +11 -54
  24. package/dist/response.js.map +1 -1
  25. package/dist/types.d.ts +9 -20
  26. package/dist/types.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/App.ts +67 -0
  29. package/src/BaseController.ts +15 -0
  30. package/src/adapters.ts +7 -0
  31. package/src/errors.ts +41 -0
  32. package/src/index.ts +38 -2
  33. package/src/response.ts +25 -0
  34. package/src/types.ts +9 -55
  35. package/tsconfig.tsbuildinfo +1 -1
  36. package/dist/Router.d.ts +0 -32
  37. package/dist/Router.d.ts.map +0 -1
  38. package/dist/Router.js +0 -100
  39. package/dist/Router.js.map +0 -1
  40. package/dist/adapters/svelte.d.ts +0 -3
  41. package/dist/adapters/svelte.d.ts.map +0 -1
  42. package/dist/adapters/svelte.js +0 -18
  43. package/dist/adapters/svelte.js.map +0 -1
  44. package/dist/adapters/types.d.ts +0 -9
  45. package/dist/adapters/types.d.ts.map +0 -1
  46. package/dist/adapters/types.js.map +0 -1
  47. package/src/adapters/types.ts +0 -31
package/dist/App.d.ts CHANGED
@@ -1,41 +1,23 @@
1
- import HyperExpress from "hyper-express";
2
- import type { Env } from "@config";
3
- import type { NaraRequest, NaraResponse } from "./types";
4
- import type { FrontendAdapter } from "./adapters/types";
1
+ import HyperExpress from 'hyper-express';
2
+ import type { NaraHandler, NaraMiddleware } from './types';
3
+ import type { FrontendAdapter } from './adapters';
5
4
  export interface AppOptions {
6
5
  port?: number;
7
- https?: boolean;
8
- cors?: boolean;
9
6
  adapter?: FrontendAdapter;
10
- securityHeaders?: boolean;
11
- requestLogging?: boolean;
12
- rateLimit?: boolean;
13
- csrf?: boolean;
14
- routes?: HyperExpress.Router;
15
- shutdownTimeout?: number;
16
- errorHandler?: (req: NaraRequest, res: NaraResponse, error: unknown) => void;
17
7
  }
18
8
  export declare class NaraApp {
19
9
  private server;
20
- private env;
21
- private options;
22
- private isShuttingDown;
23
- private isStarted;
10
+ private port;
11
+ private adapter?;
24
12
  constructor(options?: AppOptions);
25
- private logEnvSummary;
26
- private createServer;
27
- private applyDefaultMiddlewares;
28
- private setupErrorHandler;
29
- private setupSignalHandlers;
30
- private gracefulShutdown;
31
- use(middleware: Parameters<HyperExpress.Server["use"]>[0]): this;
32
- use(path: string, middleware: Parameters<HyperExpress.Server["use"]>[0]): this;
33
- mount(router: HyperExpress.Router, prefix?: string): this;
13
+ use(middleware: NaraMiddleware): this;
14
+ get(path: string, ...handlers: NaraHandler[]): this;
15
+ post(path: string, ...handlers: NaraHandler[]): this;
16
+ put(path: string, ...handlers: NaraHandler[]): this;
17
+ patch(path: string, ...handlers: NaraHandler[]): this;
18
+ delete(path: string, ...handlers: NaraHandler[]): this;
34
19
  start(): Promise<void>;
35
- close(): Promise<void>;
36
20
  getServer(): HyperExpress.Server;
37
- getEnv(): Env;
38
- isRunning(): boolean;
39
21
  }
40
22
  export declare function createApp(options?: AppOptions): NaraApp;
41
23
  //# sourceMappingURL=App.d.ts.map
package/dist/App.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"AAeA,OAAO,YAAY,MAAM,eAAe,CAAC;AAKzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAQnC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD,MAAM,WAAW,UAAU;IAIzB,IAAI,CAAC,EAAE,MAAM,CAAC;IAMd,KAAK,CAAC,EAAE,OAAO,CAAC;IAMhB,IAAI,CAAC,EAAE,OAAO,CAAC;IAKf,OAAO,CAAC,EAAE,eAAe,CAAC;IAM1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAM1B,cAAc,CAAC,EAAE,OAAO,CAAC;IAMzB,SAAS,CAAC,EAAE,OAAO,CAAC;IAOpB,IAAI,CAAC,EAAE,OAAO,CAAC;IAMf,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAM7B,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,YAAY,CAAC,EAAE,CACb,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,OAAO,KACX,IAAI,CAAC;CACX;AA4BD,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAA8H;IAC7I,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,CAAC,EAAE,UAAU;IAoChC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,uBAAuB;IA6C/B,OAAO,CAAC,iBAAiB;IAkFzB,OAAO,CAAC,mBAAmB;YA0Bb,gBAAgB;IAyD9B,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAChE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAkB9E,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,SAAS,IAAI,YAAY,CAAC,MAAM;IAOhC,MAAM,IAAI,GAAG;IAOb,SAAS,IAAI,OAAO;CAGrB;AA8BD,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAEvD"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAA6B,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAC,CAAkB;gBAEtB,OAAO,GAAE,UAAe;IAUpC,GAAG,CAAC,UAAU,EAAE,cAAc;IAK9B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE;IAK5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE;IAK7C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE;IAK5C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE;IAK9C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE;IAKzC,KAAK;IAKX,SAAS;CAGV;AAED,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAEvD"}
package/dist/App.js CHANGED
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
@@ -39,226 +6,46 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.NaraApp = void 0;
40
7
  exports.createApp = createApp;
41
8
  const hyper_express_1 = __importDefault(require("hyper-express"));
42
- const cors_1 = __importDefault(require("cors"));
43
- const path_1 = __importDefault(require("path"));
44
- const _config_1 = require("@config");
45
- const Logger_1 = __importDefault(require("@services/Logger"));
46
- const securityHeaders_1 = require("@middlewares/securityHeaders");
47
- const requestLogger_1 = require("@middlewares/requestLogger");
48
- const rateLimit_1 = require("@middlewares/rateLimit");
49
- const csrf_1 = require("@middlewares/csrf");
50
- const errors_1 = require("./errors");
51
- const response_1 = require("./response");
52
- const DEFAULT_OPTIONS = {
53
- port: 5555,
54
- https: false,
55
- cors: true,
56
- adapter: undefined,
57
- securityHeaders: true,
58
- requestLogging: true,
59
- rateLimit: false,
60
- csrf: false,
61
- shutdownTimeout: 10000,
62
- };
63
9
  class NaraApp {
64
- constructor(options) {
65
- this.isShuttingDown = false;
66
- this.isStarted = false;
67
- this.env = (0, _config_1.initEnv)();
68
- this.options = {
69
- ...DEFAULT_OPTIONS,
70
- port: this.env.PORT,
71
- https: this.env.HAS_CERTIFICATE === "true",
72
- ...options,
73
- };
74
- this.logEnvSummary();
75
- this.server = this.createServer();
76
- this.setupErrorHandler();
77
- this.setupSignalHandlers();
78
- this.applyDefaultMiddlewares();
79
- if (this.options.routes) {
80
- this.mount(this.options.routes);
81
- }
82
- }
83
- logEnvSummary() {
84
- const featureWarnings = (0, _config_1.checkFeatureConfig)(this.env);
85
- if (featureWarnings.length > 0) {
86
- console.log("\n⚠️ Optional features not configured:");
87
- featureWarnings.forEach((w) => console.log(` - ${w}`));
88
- console.log("");
10
+ constructor(options = {}) {
11
+ this.server = new hyper_express_1.default.Server();
12
+ this.port = options.port || 3000;
13
+ this.adapter = options.adapter;
14
+ if (this.adapter) {
15
+ this.server.use(this.adapter.middleware());
89
16
  }
90
17
  }
91
- createServer() {
92
- const serverOptions = {
93
- max_body_length: _config_1.SERVER.MAX_BODY_SIZE,
94
- };
95
- if (this.options.https) {
96
- serverOptions.key_file_name = path_1.default.join(process.cwd(), "localhost+1-key.pem");
97
- serverOptions.cert_file_name = path_1.default.join(process.cwd(), "localhost+1.pem");
98
- }
99
- return new hyper_express_1.default.Server(serverOptions);
100
- }
101
- applyDefaultMiddlewares() {
102
- if (this.options.securityHeaders) {
103
- this.server.use((0, securityHeaders_1.securityHeaders)());
104
- }
105
- if (this.options.requestLogging) {
106
- this.server.use((0, requestLogger_1.requestLogger)());
107
- }
108
- if (this.options.cors) {
109
- this.server.use((0, cors_1.default)());
110
- }
111
- if (this.options.rateLimit) {
112
- this.server.use((0, rateLimit_1.rateLimit)());
113
- }
114
- if (this.options.csrf) {
115
- this.server.use((0, csrf_1.csrf)());
116
- }
117
- if (this.options.adapter) {
118
- this.server.use(this.options.adapter.middleware());
119
- this.server.use((_req, res, next) => {
120
- this.options.adapter?.extendResponse(res);
121
- next();
122
- });
123
- }
18
+ use(middleware) {
19
+ this.server.use(middleware);
20
+ return this;
124
21
  }
125
- setupErrorHandler() {
126
- const customHandler = this.options.errorHandler;
127
- this.server.set_error_handler((req, res, error) => {
128
- if (customHandler) {
129
- return customHandler(req, res, error);
130
- }
131
- const isDevelopment = this.env.NODE_ENV === "development";
132
- if ((0, errors_1.isHttpError)(error)) {
133
- Logger_1.default.warn("HTTP error", {
134
- name: error.name,
135
- message: error.message,
136
- statusCode: error.statusCode,
137
- code: error.code,
138
- path: req.path,
139
- method: req.method,
140
- });
141
- if (error instanceof errors_1.ValidationError) {
142
- const isInertia = req.headers["x-inertia"] === "true";
143
- if (isInertia) {
144
- const referer = req.headers["referer"] || "/";
145
- const errorMsg = error.errors
146
- ? Object.values(error.errors).flat().join(", ")
147
- : error.message;
148
- return res
149
- .cookie("error", errorMsg, 5000)
150
- .redirect(referer);
151
- }
152
- return (0, response_1.jsonValidationError)(res, error.message, error.errors);
153
- }
154
- return (0, response_1.jsonError)(res, error.message, error.statusCode, error.code);
155
- }
156
- const err = error;
157
- const statusCode = error.statusCode ||
158
- (error.code === "SQLITE_ERROR" ? 500 : 500);
159
- Logger_1.default.error("Unhandled request error", {
160
- err: err,
161
- path: req.path,
162
- method: req.method,
163
- statusCode,
164
- userAgent: req.headers["user-agent"],
165
- });
166
- return (0, response_1.jsonError)(res, isDevelopment ? err.message : "Internal Server Error", statusCode, error.code);
167
- });
22
+ get(path, ...handlers) {
23
+ this.server.get(path, ...handlers);
24
+ return this;
168
25
  }
169
- setupSignalHandlers() {
170
- process.on("SIGTERM", () => this.gracefulShutdown("SIGTERM", 0));
171
- process.on("SIGINT", () => this.gracefulShutdown("SIGINT", 0));
172
- process.on("uncaughtException", async (error) => {
173
- Logger_1.default.fatal("Uncaught exception", error);
174
- await this.gracefulShutdown("uncaughtException", 1);
175
- });
176
- process.on("unhandledRejection", async (reason) => {
177
- Logger_1.default.fatal("Unhandled promise rejection", { reason });
178
- await this.gracefulShutdown("unhandledRejection", 1);
179
- });
26
+ post(path, ...handlers) {
27
+ this.server.post(path, ...handlers);
28
+ return this;
180
29
  }
181
- async gracefulShutdown(signal, exitCode = 0) {
182
- if (this.isShuttingDown) {
183
- Logger_1.default.warn("Shutdown already in progress, ignoring signal", { signal });
184
- return;
185
- }
186
- this.isShuttingDown = true;
187
- const timeoutMs = this.options.shutdownTimeout;
188
- Logger_1.default.info(`${signal} received, starting graceful shutdown...`);
189
- console.log(`\n⏳ Shutting down gracefully (max ${timeoutMs / 1000}s)...`);
190
- const forceExitTimeout = setTimeout(() => {
191
- Logger_1.default.error("Graceful shutdown timeout exceeded, forcing exit");
192
- console.log("❌ Shutdown timeout exceeded, forcing exit");
193
- process.exit(exitCode || 1);
194
- }, timeoutMs);
195
- try {
196
- Logger_1.default.info("Closing server (stop accepting new connections)...");
197
- await this.server.close();
198
- Logger_1.default.info("Server closed successfully");
199
- Logger_1.default.info("Closing database connections...");
200
- const DB = (await Promise.resolve().then(() => __importStar(require("@services/DB")))).default;
201
- await DB.destroy();
202
- Logger_1.default.info("Database connections closed");
203
- Logger_1.default.info("Flushing logs...");
204
- await Logger_1.default.flush();
205
- clearTimeout(forceExitTimeout);
206
- console.log("✅ Graceful shutdown complete");
207
- process.exit(exitCode);
208
- }
209
- catch (error) {
210
- Logger_1.default.error("Error during graceful shutdown", error);
211
- clearTimeout(forceExitTimeout);
212
- process.exit(exitCode || 1);
213
- }
30
+ put(path, ...handlers) {
31
+ this.server.put(path, ...handlers);
32
+ return this;
214
33
  }
215
- use(...args) {
216
- this.server.use(...args);
34
+ patch(path, ...handlers) {
35
+ this.server.patch(path, ...handlers);
217
36
  return this;
218
37
  }
219
- mount(router, prefix) {
220
- if (prefix) {
221
- this.server.use(prefix, router);
222
- }
223
- else {
224
- this.server.use(router);
225
- }
38
+ delete(path, ...handlers) {
39
+ this.server.delete(path, ...handlers);
226
40
  return this;
227
41
  }
228
42
  async start() {
229
- if (this.isStarted) {
230
- Logger_1.default.warn("Server already started");
231
- return;
232
- }
233
- const port = this.options.port;
234
- try {
235
- await this.server.listen(port);
236
- this.isStarted = true;
237
- const envSummary = (0, _config_1.getEnvSummary)(this.env);
238
- Logger_1.default.info("Server started successfully", {
239
- ...envSummary,
240
- nodeVersion: process.version,
241
- });
242
- const protocol = this.options.https ? "https" : "http";
243
- console.log(`\n🚀 Server is running at ${protocol}://localhost:${port}\n`);
244
- }
245
- catch (err) {
246
- Logger_1.default.fatal("Failed to start server", err);
247
- process.exit(1);
248
- }
249
- }
250
- async close() {
251
- await this.gracefulShutdown("close", 0);
43
+ await this.server.listen(this.port);
44
+ console.log(`🚀 Server running on http://localhost:${this.port}`);
252
45
  }
253
46
  getServer() {
254
47
  return this.server;
255
48
  }
256
- getEnv() {
257
- return this.env;
258
- }
259
- isRunning() {
260
- return this.isStarted && !this.isShuttingDown;
261
- }
262
49
  }
263
50
  exports.NaraApp = NaraApp;
264
51
  function createApp(options) {
package/dist/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":";;;;;;AAgEA,8BAEC;AAlED,kEAAyC;AASzC,MAAa,OAAO;IAKlB,YAAY,UAAsB,EAAE;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAY,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAE/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,UAA0B;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,GAAG,QAAuB;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,QAAe,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,GAAG,QAAuB;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAe,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,GAAG,QAAuB;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,QAAe,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,GAAG,QAAuB;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAe,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,GAAG,QAAuB;QAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,QAAe,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AArDD,0BAqDC;AAED,SAAgB,SAAS,CAAC,OAAoB;IAC5C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -1,28 +1,7 @@
1
- import type { NaraRequest, NaraResponse, NaraResponseWithInertia, User } from './types';
2
- import type { Validator } from '@validators/validate';
3
- export type AuthenticatedRequest = NaraRequest & {
4
- user: User;
5
- };
6
- export type AdminRequest = NaraRequest & {
7
- user: User & {
8
- is_admin: true;
9
- };
10
- };
11
- export interface PaginationParams {
12
- page: number;
13
- limit: number;
14
- search: string;
1
+ import type { NaraResponse } from './types';
2
+ export declare class BaseController {
3
+ protected json(res: NaraResponse, data: any, status?: number): boolean;
4
+ protected success(res: NaraResponse, data: any, message?: string): boolean;
5
+ protected error(res: NaraResponse, message: string, status?: number): boolean;
15
6
  }
16
- export declare abstract class BaseController {
17
- constructor();
18
- protected requireInertia(res: NaraResponse): asserts res is NaraResponseWithInertia;
19
- protected requireAuth(req: NaraRequest): asserts req is AuthenticatedRequest;
20
- protected requireAdmin(req: NaraRequest): asserts req is AdminRequest;
21
- protected getBody<T>(req: NaraRequest, schema: Validator<T>): Promise<T>;
22
- protected getPaginationParams(req: NaraRequest): PaginationParams;
23
- protected getQueryParam(req: NaraRequest, key: string, defaultValue?: string): string;
24
- protected getParam(req: NaraRequest, key: string): string | undefined;
25
- protected getRequiredParam(req: NaraRequest, key: string): string;
26
- }
27
- export default BaseController;
28
7
  //# sourceMappingURL=BaseController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseController.d.ts","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAExF,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAMxE,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAKhE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,IAAI,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAK7E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,8BAAsB,cAAc;;IAuBlC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,IAAI,uBAAuB;IAsBnF,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,oBAAoB;IAsB5E,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY;cAwBrD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA8B9E,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,gBAAgB;IAoBjE,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,GAAG,MAAM;IAezF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAkBrE,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;CASlE;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"BaseController.d.ts","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,qBAAa,cAAc;IACzB,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,SAAM;IAIzD,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,SAAY;IAInE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM;CAGjE"}
@@ -1,66 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseController = void 0;
4
- const errors_1 = require("./errors");
5
- const _config_1 = require("@config");
6
4
  class BaseController {
7
- constructor() {
8
- const prototype = Object.getPrototypeOf(this);
9
- const propertyNames = Object.getOwnPropertyNames(prototype);
10
- for (const name of propertyNames) {
11
- const descriptor = Object.getOwnPropertyDescriptor(prototype, name);
12
- if (name !== 'constructor' && descriptor && typeof descriptor.value === 'function') {
13
- this[name] = this[name].bind(this);
14
- }
15
- }
5
+ json(res, data, status = 200) {
6
+ return res.status(status).json(data);
16
7
  }
17
- requireInertia(res) {
18
- if (typeof res.inertia !== 'function') {
19
- throw new Error('Inertia support is not enabled. Please provide a FrontendAdapter (e.g., svelteAdapter) to NaraApp.');
20
- }
8
+ success(res, data, message = 'Success') {
9
+ return res.json({ success: true, message, data });
21
10
  }
22
- requireAuth(req) {
23
- if (!req.user) {
24
- throw new errors_1.AuthError();
25
- }
26
- }
27
- requireAdmin(req) {
28
- this.requireAuth(req);
29
- if (!req.user.is_admin) {
30
- throw new errors_1.ForbiddenError();
31
- }
32
- }
33
- async getBody(req, schema) {
34
- const raw = await req.json();
35
- const result = schema(raw);
36
- if (!result.success) {
37
- throw new errors_1.ValidationError('Validation failed', result.errors);
38
- }
39
- return result.data;
40
- }
41
- getPaginationParams(req) {
42
- const page = parseInt(req.query.page) || _config_1.PAGINATION.DEFAULT_PAGE;
43
- const rawLimit = parseInt(req.query.limit) || _config_1.PAGINATION.DEFAULT_PAGE_SIZE;
44
- const limit = Math.min(rawLimit, _config_1.PAGINATION.MAX_PAGE_SIZE);
45
- const search = req.query.search || '';
46
- return { page, limit, search };
47
- }
48
- getQueryParam(req, key, defaultValue = '') {
49
- return req.query[key] || defaultValue;
50
- }
51
- getParam(req, key) {
52
- return req.params[key];
53
- }
54
- getRequiredParam(req, key) {
55
- const value = req.params[key];
56
- if (!value) {
57
- throw new errors_1.ValidationError(`Parameter '${key}' is required`, {
58
- [key]: [`${key} wajib diisi`]
59
- });
60
- }
61
- return value;
11
+ error(res, message, status = 400) {
12
+ return res.status(status).json({ success: false, message });
62
13
  }
63
14
  }
64
15
  exports.BaseController = BaseController;
65
- exports.default = BaseController;
66
16
  //# sourceMappingURL=BaseController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IACf,IAAI,CAAC,GAAiB,EAAE,IAAS,EAAE,MAAM,GAAG,GAAG;QACvD,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAES,OAAO,CAAC,GAAiB,EAAE,IAAS,EAAE,OAAO,GAAG,SAAS;QACjE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,GAAiB,EAAE,OAAe,EAAE,MAAM,GAAG,GAAG;QAC9D,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAZD,wCAYC"}
@@ -0,0 +1,7 @@
1
+ import type { NaraMiddleware, NaraResponse } from './types';
2
+ export interface FrontendAdapter {
3
+ name: string;
4
+ middleware: () => NaraMiddleware;
5
+ extendResponse?: (res: NaraResponse) => void;
6
+ }
7
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;CAC9C"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":""}
package/dist/errors.d.ts CHANGED
@@ -1,18 +1,11 @@
1
1
  export declare class HttpError extends Error {
2
- readonly statusCode: number;
3
- readonly code: string;
4
- constructor(message: string, statusCode?: number, code?: string);
5
- toJSON(): Record<string, unknown>;
2
+ statusCode: number;
3
+ constructor(statusCode: number, message: string);
6
4
  }
7
- export declare class ValidationError extends HttpError {
8
- readonly errors: Record<string, string[]>;
9
- constructor(message?: string, errors?: Record<string, string[]>);
10
- toJSON(): Record<string, unknown>;
11
- }
12
- export declare class AuthError extends HttpError {
5
+ export declare class NotFoundError extends HttpError {
13
6
  constructor(message?: string);
14
7
  }
15
- export declare class NotFoundError extends HttpError {
8
+ export declare class UnauthorizedError extends HttpError {
16
9
  constructor(message?: string);
17
10
  }
18
11
  export declare class ForbiddenError extends HttpError {
@@ -21,17 +14,8 @@ export declare class ForbiddenError extends HttpError {
21
14
  export declare class BadRequestError extends HttpError {
22
15
  constructor(message?: string);
23
16
  }
24
- export declare class ConflictError extends HttpError {
25
- constructor(message?: string);
26
- }
27
- export declare class TooManyRequestsError extends HttpError {
28
- readonly retryAfter?: number;
29
- constructor(message?: string, retryAfter?: number);
30
- toJSON(): Record<string, unknown>;
31
- }
32
- export declare class InternalError extends HttpError {
33
- constructor(message?: string);
17
+ export declare class ValidationError extends HttpError {
18
+ errors: Record<string, string[]>;
19
+ constructor(errors: Record<string, string[]>, message?: string);
34
20
  }
35
- export declare function isHttpError(error: unknown): error is HttpError;
36
- export declare function isValidationError(error: unknown): error is ValidationError;
37
21
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAgBA,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,EAAE,IAAI,GAAE,MAAqB;IAWlF,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlC;AAcD,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,SAAgB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAErC,OAAO,GAAE,MAA4B,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAMxF,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMlC;AAWD,qBAAa,SAAU,SAAQ,SAAS;gBAC1B,OAAO,GAAE,MAAuB;CAI7C;AAWD,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,GAAE,MAAoB;CAI1C;AAWD,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,GAAE,MAAoB;CAI1C;AAWD,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,GAAE,MAAsB;CAI5C;AAWD,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,GAAE,MAAmB;CAIzC;AAUD,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAExB,OAAO,GAAE,MAA4B,EAAE,UAAU,CAAC,EAAE,MAAM;IAMtE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMlC;AAUD,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,GAAE,MAAgC;CAItD;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IACf,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIvD;AAED,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,SAAc;CAIlC;AAED,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,OAAO,SAAiB;CAIrC;AAED,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,SAAc;CAIlC;AAED,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,SAAgB;CAIpC;AAED,qBAAa,eAAgB,SAAQ,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAAhC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,SAAsB;CAInF"}