tsledge 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.
@@ -0,0 +1,15 @@
1
+ import { HTTPRequestConfig } from './types';
2
+ /**
3
+ * Converts an object to a URL-encoded string for form submission.
4
+ * With content type application/x-www-form-urlencoded, the body should be a string in the format of key=value&key2=value2.
5
+ * @param obj
6
+ * @returns
7
+ */
8
+ export declare function formDataParser(obj: Record<string, any>): string;
9
+ /**
10
+ * Executes the HTTP request using axios or fetch as fallback
11
+ * @param config RequestConfig
12
+ * @returns Promise<T> The response data
13
+ */
14
+ export declare function httpRequest<T = any>(config: HTTPRequestConfig): Promise<T>;
15
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAgEhF"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formDataParser = formDataParser;
4
+ exports.httpRequest = httpRequest;
5
+ /**
6
+ * Converts an object to a URL-encoded string for form submission.
7
+ * With content type application/x-www-form-urlencoded, the body should be a string in the format of key=value&key2=value2.
8
+ * @param obj
9
+ * @returns
10
+ */
11
+ function formDataParser(obj) {
12
+ return new URLSearchParams(obj).toString();
13
+ }
14
+ /**
15
+ * Executes the HTTP request using axios or fetch as fallback
16
+ * @param config RequestConfig
17
+ * @returns Promise<T> The response data
18
+ */
19
+ async function httpRequest(config) {
20
+ const url = new URL(config.url);
21
+ if (config.urlSearchParams) {
22
+ Object.keys(config.urlSearchParams).forEach((key) => {
23
+ url.searchParams.set(key, String(config.urlSearchParams[key]));
24
+ });
25
+ }
26
+ let body;
27
+ let defaultContentType = 'application/x-www-form-urlencoded';
28
+ if (config.body) {
29
+ if (typeof config.body === 'object') {
30
+ body = JSON.stringify(config.body);
31
+ defaultContentType = 'application/json';
32
+ }
33
+ else {
34
+ body = String(config.body);
35
+ }
36
+ }
37
+ const fetchImpl = globalThis.fetch;
38
+ if (!fetchImpl) {
39
+ throw new Error('fetch() is not available. Please use Node.js 18+ or add a fetch polyfill.');
40
+ }
41
+ const defaultHeaders = {};
42
+ if (!config.headers ||
43
+ !Object.keys(config.headers).find((key) => key.toLowerCase() === 'content-type')) {
44
+ defaultHeaders['Content-Type'] = defaultContentType;
45
+ }
46
+ const response = await fetchImpl(url.toString(), {
47
+ method: config.method?.toUpperCase() || 'GET',
48
+ body,
49
+ headers: {
50
+ ...defaultHeaders,
51
+ ...config.headers,
52
+ },
53
+ });
54
+ const contentType = response.headers.get('content-type') || '';
55
+ const isJson = contentType.includes('application/json');
56
+ const isBlob = contentType.includes('application/octet-stream');
57
+ if (!response.ok) {
58
+ const text = await response.text().catch(() => '');
59
+ throw new Error(`HTTP ${response.status} ${response.statusText}: ${text}`);
60
+ }
61
+ let result;
62
+ if (isJson) {
63
+ result = await response.json().catch(async (error) => {
64
+ throw new Error(`Failed to parse JSON response: ${error.message}`);
65
+ });
66
+ }
67
+ else if (isBlob) {
68
+ result = await response.blob().catch(async (error) => {
69
+ throw new Error(`Failed to get blob response: ${error.message}`);
70
+ });
71
+ }
72
+ else {
73
+ result = await response.text().catch(async (error) => {
74
+ throw new Error(`Failed to get text response: ${error.message}`);
75
+ });
76
+ }
77
+ return result;
78
+ }
79
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './query-builder';
2
2
  export * from './types';
3
+ export * from './http';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./query-builder"), exports);
18
18
  __exportStar(require("./types"), exports);
19
+ __exportStar(require("./http"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,0CAAwB;AACxB,yCAAuB"}
@@ -1,4 +1,4 @@
1
- import mongoose from "mongoose";
1
+ import mongoose from 'mongoose';
2
2
  export interface DefaultResponseBody extends Record<string, any> {
3
3
  data?: any[] | any;
4
4
  meta?: {
@@ -30,4 +30,29 @@ export interface QueryBuilderConfig<T = any> {
30
30
  eachFunc?: (doc: any) => any;
31
31
  asyncEachFunc?: (doc: any) => Promise<any>;
32
32
  }
33
+ export declare enum HttpMethod {
34
+ POST = "post",
35
+ GET = "get",
36
+ DELETE = "delete",
37
+ PUT = "put"
38
+ }
39
+ export interface HTTPRequestConfig {
40
+ url: string;
41
+ method?: HttpMethod;
42
+ /**
43
+ * Optional query parameters to be appended to the URL. They will be automatically URL-encoded. For example, { search: 'test', page: '1' } will result in ?search=test&page=1 being appended to the URL.
44
+ */
45
+ urlSearchParams?: Record<string, string>;
46
+ /**
47
+ * The body can be an object or a string. If it's an object, it will be automatically stringified as JSON and the Content-Type header will be set to application/json. If it's a string, it will be sent as-is and the Content-Type header will default to application/x-www-form-urlencoded unless explicitly set in the headers.
48
+ */
49
+ body?: any;
50
+ /**
51
+ * Optional headers to include in the request. If the body is an object and Content-Type is not explicitly set, it will default to application/json. If the body is a string and Content-Type is not explicitly set, it will default to application/x-www-form-urlencoded. You can override these defaults by providing your own Content-Type header.
52
+ */
53
+ headers?: Record<string, string>;
54
+ }
55
+ export type KeysEnum<T> = {
56
+ [P in keyof Required<T>]: any;
57
+ };
33
58
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;gBAEP,OAAO,EAAE,CAAC,EAAE,IAAI,GAAE,MAAY;IAK1C,YAAY,CAAC,GAAG,EAAE,GAAG;IAOrB,KAAK;IAGL,KAAK;IAGL,KAAK;IAGL,KAAK;CAGN;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAEtE,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG;IAC/B,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;gBAEF,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB;CAK9F;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC5C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;gBAEP,OAAO,EAAE,CAAC,EAAE,IAAI,GAAE,MAAY;IAK1C,YAAY,CAAC,GAAG,EAAE,GAAG;IAOrB,KAAK;IAGL,KAAK;IAGL,KAAK;IAGL,KAAK;CAGN;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAEtE,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG;IAC/B,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;gBAEF,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB;CAK9F;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC5C;AAED,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC;IACX;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;CAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JoinRelation = exports.Codec = void 0;
3
+ exports.HttpMethod = exports.JoinRelation = exports.Codec = void 0;
4
4
  class Codec {
5
5
  content;
6
6
  returnCode;
@@ -39,4 +39,11 @@ class JoinRelation {
39
39
  }
40
40
  }
41
41
  exports.JoinRelation = JoinRelation;
42
+ var HttpMethod;
43
+ (function (HttpMethod) {
44
+ HttpMethod["POST"] = "post";
45
+ HttpMethod["GET"] = "get";
46
+ HttpMethod["DELETE"] = "delete";
47
+ HttpMethod["PUT"] = "put";
48
+ })(HttpMethod || (exports.HttpMethod = HttpMethod = {}));
42
49
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";;;AAQA,MAAa,KAAK;IAChB,OAAO,CAAI;IACX,UAAU,CAAS;IAEnB,YAAY,OAAU,EAAE,OAAe,GAAG;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,GAAQ;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;CACF;AA5BD,sBA4BC;AAKD,MAAa,YAAY;IACvB,GAAG,CAAoB;IACvB,UAAU,CAAS;IACnB,KAAK,CAAS;IAEd,YAAY,UAAkB,EAAE,GAAsB,EAAE,QAA4B,SAAS;QAC3F,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IACnD,CAAC;CACF;AAVD,oCAUC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";;;AAQA,MAAa,KAAK;IAChB,OAAO,CAAI;IACX,UAAU,CAAS;IAEnB,YAAY,OAAU,EAAE,OAAe,GAAG;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,GAAQ;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1D,CAAC;CACF;AA5BD,sBA4BC;AAKD,MAAa,YAAY;IACvB,GAAG,CAAoB;IACvB,UAAU,CAAS;IACnB,KAAK,CAAS;IAEd,YAAY,UAAkB,EAAE,GAAsB,EAAE,QAA4B,SAAS;QAC3F,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IACnD,CAAC;CACF;AAVD,oCAUC;AASD,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,+BAAiB,CAAA;IACjB,yBAAW,CAAA;AACb,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB"}
@@ -1,2 +1,6 @@
1
+ /**
2
+ * Connects to MongoDB using Mongoose
3
+ * @param uri
4
+ */
1
5
  export declare function connectMongoDB(uri: string): Promise<void>;
2
6
  //# sourceMappingURL=mongodb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/db/mongodb.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,iBAY/C"}
1
+ {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/db/mongodb.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,iBAY/C"}
@@ -6,17 +6,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.connectMongoDB = connectMongoDB;
7
7
  const mongoose_1 = __importDefault(require("mongoose"));
8
8
  const exitCodes_1 = require("../exitCodes");
9
+ const utils_1 = require("../utils");
10
+ /**
11
+ * Connects to MongoDB using Mongoose
12
+ * @param uri
13
+ */
9
14
  async function connectMongoDB(uri) {
10
15
  if (uri == null || uri == undefined || uri.length == 0) {
11
- console.error(`🛑 [${new Date().toISOString()}] Error: MongoDB URI is not provided`);
16
+ console.error(`🛑 [${(0, utils_1.getCurrentDateString)()}] Error: MongoDB URI is not provided`);
12
17
  process.exit(exitCodes_1.EXIT_CODE_INVALID_CONFIG);
13
18
  }
14
19
  try {
15
20
  await mongoose_1.default.connect(uri);
16
- console.log(`✅ [${new Date().toISOString()}] MongoDB connected`);
21
+ console.log(`✅ [${(0, utils_1.getCurrentDateString)()}] MongoDB connected`);
17
22
  }
18
23
  catch (err) {
19
- console.error(`🛑 [${new Date().toISOString()}] Error: MongoDB connection failed`, err);
24
+ console.error(`🛑 [${(0, utils_1.getCurrentDateString)()}] Error: MongoDB connection failed`, err);
20
25
  process.exit(exitCodes_1.EXIT_CODE_GENERAL_ERROR);
21
26
  }
22
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/db/mongodb.ts"],"names":[],"mappings":";;;;;AAGA,wCAYC;AAfD,wDAAgC;AAChC,4CAAiF;AAE1E,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,IAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,oCAAwB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,mCAAuB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/db/mongodb.ts"],"names":[],"mappings":";;;;;AAQA,wCAYC;AApBD,wDAAgC;AAChC,4CAAiF;AACjF,oCAAgD;AAEhD;;;GAGG;AACI,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,IAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,OAAO,IAAA,4BAAoB,GAAE,sCAAsC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,oCAAwB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,IAAA,4BAAoB,GAAE,qBAAqB,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,OAAO,IAAA,4BAAoB,GAAE,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,mCAAuB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { FluentAPIPath, FluentExpressRequest } from './types';
2
+ import { PromiseDefaultCodec, QueryBuilder } from '../core/index';
3
+ export declare class FluentPatternHandler {
4
+ private static _singleton;
5
+ private _paths;
6
+ /**
7
+ * Constructor for QueryPatternExecutor.
8
+ * @param paths - Array of query pattern paths for filtering.
9
+ */
10
+ constructor(paths?: FluentAPIPath[]);
11
+ static getInstance(): FluentPatternHandler;
12
+ /**
13
+ * Parses and validates query parameters from the request.
14
+ * @param query - The query object from the request.
15
+ * @returns Parsed query parameters.
16
+ */
17
+ private _parseFluentRequestQuery;
18
+ /**
19
+ * Applies filters to the query builder based on parsed parameters and options.
20
+ * @param queryBuilder - The QueryBuilder instance.
21
+ * @param params - Parsed query parameters.
22
+ * @param config - Query request configuration.
23
+ */
24
+ private _applyParameters;
25
+ /**
26
+ * Retrieves filter fields for the given model from the paths configuration.
27
+ * @param model - The Mongoose model.
28
+ * @returns Array of filter fields.
29
+ */
30
+ private _getFilterFieldsForModel;
31
+ /**
32
+ * Builds execution parameters for the query builder.
33
+ * @param params - Parsed query parameters.
34
+ * @returns Execution parameters.
35
+ */
36
+ private _buildExecutionConfig;
37
+ /**
38
+ * Executes the query builder with the applied filters and execution parameters.
39
+ * @param req
40
+ * @param queryBuilder
41
+ * @returns
42
+ */
43
+ exec<T = any>(req: FluentExpressRequest, queryBuilder: QueryBuilder): PromiseDefaultCodec;
44
+ }
45
+ //# sourceMappingURL=fluent-pattern-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluent-pattern-handler.d.ts","sourceRoot":"","sources":["../../src/fluent-interface/fluent-pattern-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,oBAAoB,EAErB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8B,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY9F,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAuB;IAChD,OAAO,CAAC,MAAM,CAAkB;IAEhC;;;OAGG;gBACS,KAAK,GAAE,aAAa,EAAO;WAUzB,WAAW,IAAI,oBAAoB;IASjD;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAsChC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;;OAKG;IACU,IAAI,CAAC,CAAC,GAAG,GAAG,EACvB,GAAG,EAAE,oBAAoB,EACzB,YAAY,EAAE,YAAY,GACzB,mBAAmB;CAWvB"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FluentPatternHandler = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const types_1 = require("./types");
9
+ const index_1 = require("../core/index");
10
+ class FluentPatternHandler {
11
+ static _singleton;
12
+ _paths;
13
+ /**
14
+ * Constructor for QueryPatternExecutor.
15
+ * @param paths - Array of query pattern paths for filtering.
16
+ */
17
+ constructor(paths = []) {
18
+ if (FluentPatternHandler._singleton) {
19
+ throw new Error('FluentPatternHandler is a singleton class. Use FluentPatternHandler.getInstance() to access the instance.');
20
+ }
21
+ this._paths = paths;
22
+ FluentPatternHandler._singleton = this;
23
+ }
24
+ static getInstance() {
25
+ if (FluentPatternHandler._singleton == undefined) {
26
+ throw new Error('FluentPatternHandler instance has not been created yet. Please create an instance before calling getInstance().');
27
+ }
28
+ return FluentPatternHandler._singleton;
29
+ }
30
+ /**
31
+ * Parses and validates query parameters from the request.
32
+ * @param query - The query object from the request.
33
+ * @returns Parsed query parameters.
34
+ */
35
+ _parseFluentRequestQuery(query) {
36
+ const { filter, limit = '5', offset = '0', id, excluded: excludedJSON, ids: idsJSON } = query;
37
+ const queryKeys = Object.keys(types_1.fluentRequestQueryAttributes);
38
+ let filterFields = {};
39
+ for (const [key, value] of Object.entries(query)) {
40
+ if (queryKeys.includes(key))
41
+ continue;
42
+ if (value == undefined)
43
+ continue;
44
+ try {
45
+ filterFields[key] = typeof value === 'string' ? value : JSON.stringify(value);
46
+ }
47
+ catch (e) {
48
+ filterFields[key] = String(value);
49
+ }
50
+ }
51
+ let excluded;
52
+ if (excludedJSON) {
53
+ try {
54
+ excluded = JSON.parse(excludedJSON);
55
+ if (!Array.isArray(excluded))
56
+ throw new Error('Excluded must be an array');
57
+ }
58
+ catch (error) {
59
+ console.warn('[QueryPatternExecutor] Invalid excluded parameter:', error);
60
+ }
61
+ }
62
+ let ids;
63
+ if (idsJSON) {
64
+ try {
65
+ ids = JSON.parse(idsJSON);
66
+ if (!Array.isArray(ids))
67
+ throw new Error('Ids must be an array');
68
+ }
69
+ catch (error) {
70
+ console.warn('[QueryPatternExecutor] Invalid ids parameter:', error);
71
+ }
72
+ }
73
+ return { filter, limit, offset, id, excluded, ids, filterFields };
74
+ }
75
+ /**
76
+ * Applies filters to the query builder based on parsed parameters and options.
77
+ * @param queryBuilder - The QueryBuilder instance.
78
+ * @param params - Parsed query parameters.
79
+ * @param config - Query request configuration.
80
+ */
81
+ _applyParameters(queryBuilder, params) {
82
+ const { id, ids, filter, excluded } = params;
83
+ if (id) {
84
+ queryBuilder.match({ _id: new mongoose_1.default.Types.ObjectId(id) });
85
+ }
86
+ else if (ids && ids.length > 0) {
87
+ const objectIds = ids.map((id) => new mongoose_1.default.Types.ObjectId(id));
88
+ queryBuilder.match({ _id: { $in: objectIds } });
89
+ }
90
+ else {
91
+ // get allowed filter fields
92
+ const modelFilterFields = this._getFilterFieldsForModel(queryBuilder.getConfig().model);
93
+ // possible fields filtered by parameter "?filter="
94
+ if (filter && modelFilterFields.length > 0) {
95
+ const ors = modelFilterFields.map((field) => ({
96
+ [field]: { $regex: filter, $options: 'i' },
97
+ }));
98
+ queryBuilder.match({ $or: ors });
99
+ }
100
+ // custom filter, but only for allowed fields specified via query parameters (e.g. '?username=')
101
+ if (params.filterFields && Object.keys(params.filterFields).length > 0) {
102
+ for (const [field, value] of Object.entries(params.filterFields)) {
103
+ if (!modelFilterFields.includes(field)) {
104
+ continue;
105
+ }
106
+ const match = {};
107
+ match[field] = { $regex: value, $options: 'i' };
108
+ queryBuilder.match(match);
109
+ }
110
+ }
111
+ if (excluded && excluded.length > 0) {
112
+ const objectIds = excluded.map((id) => new mongoose_1.default.Types.ObjectId(id));
113
+ queryBuilder.match({ _id: { $nin: objectIds } });
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Retrieves filter fields for the given model from the paths configuration.
119
+ * @param model - The Mongoose model.
120
+ * @returns Array of filter fields.
121
+ */
122
+ _getFilterFieldsForModel(model) {
123
+ for (const path of this._paths) {
124
+ if (path.model.collection.name === model.collection.name) {
125
+ if (path.filters) {
126
+ return path.filters;
127
+ }
128
+ return [];
129
+ }
130
+ }
131
+ return [];
132
+ }
133
+ /**
134
+ * Builds execution parameters for the query builder.
135
+ * @param params - Parsed query parameters.
136
+ * @returns Execution parameters.
137
+ */
138
+ _buildExecutionConfig(params) {
139
+ const { id, limit, offset } = params;
140
+ return {
141
+ isOne: Boolean(id),
142
+ limit: limit === 'full' ? undefined : parseInt(limit || '5', 10),
143
+ skip: parseInt(offset || '0', 10),
144
+ };
145
+ }
146
+ /**
147
+ * Executes the query builder with the applied filters and execution parameters.
148
+ * @param req
149
+ * @param queryBuilder
150
+ * @returns
151
+ */
152
+ async exec(req, queryBuilder) {
153
+ try {
154
+ const queryParams = this._parseFluentRequestQuery(req.query);
155
+ this._applyParameters(queryBuilder, queryParams);
156
+ const execConfig = this._buildExecutionConfig(queryParams);
157
+ return await queryBuilder.exec(execConfig);
158
+ }
159
+ catch (err) {
160
+ console.error('[ERROR - QueryPatternExecutor]', err);
161
+ return new index_1.Codec({ data: [], meta: { total: 0 } }, 500);
162
+ }
163
+ }
164
+ }
165
+ exports.FluentPatternHandler = FluentPatternHandler;
166
+ //# sourceMappingURL=fluent-pattern-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluent-pattern-handler.js","sourceRoot":"","sources":["../../src/fluent-interface/fluent-pattern-handler.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export * from './fluent-pattern-executor';
1
+ export * from './fluent-pattern-handler';
2
2
  export * from './types';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fluent-interface/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fluent-interface/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC"}
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./fluent-pattern-executor"), exports);
17
+ __exportStar(require("./fluent-pattern-handler"), exports);
18
18
  __exportStar(require("./types"), exports);
19
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fluent-interface/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fluent-interface/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,0CAAwB"}
@@ -1,6 +1,6 @@
1
1
  import mongoose from 'mongoose';
2
2
  import { Request, Response } from 'express';
3
- import { DefaultResponseBody } from '../core';
3
+ import { DefaultResponseBody, KeysEnum } from '../core/index';
4
4
  export interface FluentRequestParams extends Record<string, string> {
5
5
  collection: string;
6
6
  }
@@ -15,9 +15,13 @@ export interface FluentRequestQuery {
15
15
  order?: string;
16
16
  excluded?: string;
17
17
  }
18
+ /**
19
+ * Attributes of FluentRequestQuery used for validation and parsing.
20
+ */
21
+ export declare const fluentRequestQueryAttributes: KeysEnum<FluentRequestQuery>;
18
22
  export interface FluentAPIPath<T = any> {
19
23
  model: mongoose.Model<T>;
20
- filters?: Record<string, any>;
24
+ filters?: string[];
21
25
  }
22
26
  export type FluentExpressRequest = Request<FluentRequestParams, DefaultResponseBody, FluentRequestBody, FluentRequestQuery>;
23
27
  export type FluentExpressResponse = Response<DefaultResponseBody>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fluent-interface/types.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,iBAAiB;CAAG;AAErC,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IAEpC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fluent-interface/types.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;CAAG;AAErC,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,kBAAkB,CAQrE,CAAC;AAEF,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IAEpC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC"}
@@ -1,3 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fluentRequestQueryAttributes = void 0;
4
+ /**
5
+ * Attributes of FluentRequestQuery used for validation and parsing.
6
+ */
7
+ exports.fluentRequestQueryAttributes = {
8
+ id: '',
9
+ ids: '',
10
+ filter: '',
11
+ offset: '',
12
+ limit: '',
13
+ order: '',
14
+ excluded: '',
15
+ };
3
16
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/fluent-interface/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/fluent-interface/types.ts"],"names":[],"mappings":";;;AAoBA;;GAEG;AACU,QAAA,4BAA4B,GAAiC;IACxE,EAAE,EAAE,EAAE;IACN,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAc5E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,QAG3E"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAc5E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,QAG3E"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requestLogger = requestLogger;
4
4
  exports.errorLogger = errorLogger;
5
+ const utils_1 = require("../utils");
5
6
  function requestLogger(req, res, next) {
6
7
  res.on('finish', () => {
7
8
  const now = new Date().toISOString();
@@ -23,7 +24,7 @@ function requestLogger(req, res, next) {
23
24
  next();
24
25
  }
25
26
  function errorLogger(err, req, res, next) {
26
- console.error(`🛑 [${new Date().toISOString()}] Error in ${req.method} ${req.originalUrl}:`, err);
27
+ console.error(`🛑 [${(0, utils_1.getCurrentDateString)()}] Error in ${req.method} ${req.originalUrl}:`, err);
27
28
  res.status(500).json();
28
29
  }
29
30
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":";;AAEA,sCAcC;AAED,kCAGC;AAnBD,SAAgB,aAAa,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC3E,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAC3D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,GAAG,CAAC;aAC/D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;QAE7C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAgB,WAAW,CAAC,GAAQ,EAAE,GAAQ,EAAE,GAAQ,EAAE,IAAkB;IAC1E,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC;IAClG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":";;AAGA,sCAcC;AAED,kCAGC;AArBD,oCAAgD;AAEhD,SAAgB,aAAa,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC3E,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAC3D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,GAAG,CAAC;aAC/D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC;QAE7C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAgB,WAAW,CAAC,GAAQ,EAAE,GAAQ,EAAE,GAAQ,EAAE,IAAkB;IAC1E,OAAO,CAAC,KAAK,CAAC,OAAO,IAAA,4BAAoB,GAAE,cAAc,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC;IAChG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Niklas Wockenfuß",
3
3
  "homepage": "https://niklaswockenfuss.de/",
4
4
  "name": "tsledge",
5
- "version": "0.1.2",
5
+ "version": "0.1.4",
6
6
  "license": "MIT",
7
7
  "description": "My playground and some helpful tools for web development ",
8
8
  "main": "dist/index.js",
@@ -18,7 +18,8 @@
18
18
  "scripts": {
19
19
  "dev": "ts-node-dev --respawn tests/main.ts",
20
20
  "repl": "ts-node --project tsconfig.json ./scripts/repl.ts",
21
- "build": "tsc"
21
+ "build": "tsc",
22
+ "npmjs": "tsc && npm publish"
22
23
  },
23
24
  "dependencies": {
24
25
  "cors": "^2.8.6",