rest_api_faker 0.0.4 → 0.0.6-alpha
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/README.md +30 -2
- package/bin/rest_api_faker.js +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +354 -1825
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +133 -0
- package/dist/config.js.map +1 -0
- package/dist/database.d.ts +29 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +216 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +6 -7
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -46
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +4 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +42 -0
- package/dist/loader.js.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +61 -0
- package/dist/logger.js.map +1 -0
- package/dist/query.d.ts +19 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +289 -0
- package/dist/query.js.map +1 -0
- package/dist/relationships.d.ts +10 -0
- package/dist/relationships.d.ts.map +1 -0
- package/dist/relationships.js +95 -0
- package/dist/relationships.js.map +1 -0
- package/dist/rewriter.d.ts +5 -0
- package/dist/rewriter.d.ts.map +1 -0
- package/dist/rewriter.js +135 -0
- package/dist/rewriter.js.map +1 -0
- package/dist/router.d.ts +9 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +275 -0
- package/dist/router.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +90 -0
- package/dist/server.js.map +1 -0
- package/dist/static.d.ts +8 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/static.js +148 -0
- package/dist/static.js.map +1 -0
- package/package.json +13 -14
package/dist/database.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { Low } from 'lowdb';
|
|
2
|
+
import { JSONFile } from 'lowdb/node';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { resolve, extname } from 'path';
|
|
5
|
+
import { pathToFileURL } from 'url';
|
|
6
|
+
export class Database {
|
|
7
|
+
db;
|
|
8
|
+
filePath;
|
|
9
|
+
options;
|
|
10
|
+
constructor(source, options = {}) {
|
|
11
|
+
this.options = {
|
|
12
|
+
idField: options.idField || 'id',
|
|
13
|
+
foreignKeySuffix: options.foreignKeySuffix || 'Id',
|
|
14
|
+
autoSave: options.autoSave !== undefined ? options.autoSave : true,
|
|
15
|
+
};
|
|
16
|
+
if (typeof source === 'string') {
|
|
17
|
+
this.filePath = resolve(source);
|
|
18
|
+
const adapter = new JSONFile(this.filePath);
|
|
19
|
+
this.db = new Low(adapter, {});
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.filePath = '';
|
|
23
|
+
const adapter = new JSONFile(':memory:');
|
|
24
|
+
this.db = new Low(adapter, source);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async init() {
|
|
28
|
+
if (this.filePath && !existsSync(this.filePath)) {
|
|
29
|
+
const ext = this.filePath.endsWith('.js') ? '.js' : '.json';
|
|
30
|
+
throw new Error(`Database file not found: ${this.filePath}\n` +
|
|
31
|
+
`\nMake sure the file exists and the path is correct.\n` +
|
|
32
|
+
`Expected format: ${ext === '.js' ? 'JavaScript module exporting data' : 'JSON file with data structure'}`);
|
|
33
|
+
}
|
|
34
|
+
if (this.filePath) {
|
|
35
|
+
const ext = extname(this.filePath).toLowerCase();
|
|
36
|
+
if (ext === '.js' || ext === '.mjs' || ext === '.cjs' || ext === '.ts') {
|
|
37
|
+
try {
|
|
38
|
+
const fileUrl = pathToFileURL(this.filePath).href;
|
|
39
|
+
const module = (await import(fileUrl));
|
|
40
|
+
const data = module.default ?? module;
|
|
41
|
+
if (typeof data === 'function') {
|
|
42
|
+
const result = await Promise.resolve(data());
|
|
43
|
+
if (typeof result !== 'object' || result === null) {
|
|
44
|
+
throw new Error('JavaScript module function must return an object');
|
|
45
|
+
}
|
|
46
|
+
this.db.data = result;
|
|
47
|
+
}
|
|
48
|
+
else if (typeof data === 'object' && data !== null) {
|
|
49
|
+
this.db.data = data;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error('JavaScript module must export an object or function');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new Error(`Failed to load JavaScript module: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
await this.db.read();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
await this.db.read();
|
|
65
|
+
}
|
|
66
|
+
if (typeof this.db.data !== 'object') {
|
|
67
|
+
this.db.data = {};
|
|
68
|
+
}
|
|
69
|
+
for (const key in this.db.data) {
|
|
70
|
+
const value = this.db.data[key];
|
|
71
|
+
if (value !== null && typeof value !== 'object') {
|
|
72
|
+
throw new Error(`Invalid data structure: ${key} must be an array or object`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
getData() {
|
|
77
|
+
return this.db.data;
|
|
78
|
+
}
|
|
79
|
+
getCollection(name) {
|
|
80
|
+
return this.db.data[name];
|
|
81
|
+
}
|
|
82
|
+
getById(collectionName, id) {
|
|
83
|
+
const collection = this.db.data[collectionName];
|
|
84
|
+
if (!Array.isArray(collection)) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return collection.find((item) => {
|
|
88
|
+
if (typeof item !== 'object' || item === null) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const record = item;
|
|
92
|
+
return record[this.options.idField] === id || record[this.options.idField] === Number(id);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
generateId(collectionName) {
|
|
96
|
+
const collection = this.db.data[collectionName];
|
|
97
|
+
if (!Array.isArray(collection)) {
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
let maxId = 0;
|
|
101
|
+
for (const item of collection) {
|
|
102
|
+
if (typeof item === 'object' && item !== null) {
|
|
103
|
+
const record = item;
|
|
104
|
+
const idValue = record[this.options.idField];
|
|
105
|
+
if (typeof idValue === 'number' && idValue > maxId) {
|
|
106
|
+
maxId = idValue;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return maxId + 1;
|
|
111
|
+
}
|
|
112
|
+
async create(collectionName, data) {
|
|
113
|
+
let collection = this.db.data[collectionName];
|
|
114
|
+
if (!collection) {
|
|
115
|
+
collection = [];
|
|
116
|
+
this.db.data[collectionName] = collection;
|
|
117
|
+
}
|
|
118
|
+
if (!Array.isArray(collection)) {
|
|
119
|
+
throw new Error(`Cannot create in ${collectionName}: not a collection`);
|
|
120
|
+
}
|
|
121
|
+
const idValue = data[this.options.idField] !== undefined
|
|
122
|
+
? data[this.options.idField]
|
|
123
|
+
: this.generateId(collectionName);
|
|
124
|
+
const existingItem = this.getById(collectionName, idValue);
|
|
125
|
+
if (existingItem) {
|
|
126
|
+
throw new Error(`Item with ${this.options.idField}=${String(idValue)} already exists`);
|
|
127
|
+
}
|
|
128
|
+
const newItem = { ...data, [this.options.idField]: idValue };
|
|
129
|
+
collection.push(newItem);
|
|
130
|
+
await this.save();
|
|
131
|
+
return newItem;
|
|
132
|
+
}
|
|
133
|
+
async update(collectionName, id, data) {
|
|
134
|
+
const collection = this.db.data[collectionName];
|
|
135
|
+
if (!Array.isArray(collection)) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const index = collection.findIndex((item) => {
|
|
139
|
+
if (typeof item !== 'object' || item === null) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
const record = item;
|
|
143
|
+
return record[this.options.idField] === id || record[this.options.idField] === Number(id);
|
|
144
|
+
});
|
|
145
|
+
if (index === -1) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const originalItem = collection[index];
|
|
149
|
+
const originalId = originalItem[this.options.idField];
|
|
150
|
+
const updatedItem = { ...data, [this.options.idField]: originalId };
|
|
151
|
+
collection[index] = updatedItem;
|
|
152
|
+
await this.save();
|
|
153
|
+
return updatedItem;
|
|
154
|
+
}
|
|
155
|
+
async patch(collectionName, id, data) {
|
|
156
|
+
const collection = this.db.data[collectionName];
|
|
157
|
+
if (!Array.isArray(collection)) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
const index = collection.findIndex((item) => {
|
|
161
|
+
if (typeof item !== 'object' || item === null) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
const record = item;
|
|
165
|
+
return record[this.options.idField] === id || record[this.options.idField] === Number(id);
|
|
166
|
+
});
|
|
167
|
+
if (index === -1) {
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
const currentItem = collection[index];
|
|
171
|
+
const { [this.options.idField]: _ignoredId, ...patchData } = data;
|
|
172
|
+
const patchedItem = { ...currentItem, ...patchData };
|
|
173
|
+
collection[index] = patchedItem;
|
|
174
|
+
await this.save();
|
|
175
|
+
return patchedItem;
|
|
176
|
+
}
|
|
177
|
+
async delete(collectionName, id) {
|
|
178
|
+
const collection = this.db.data[collectionName];
|
|
179
|
+
if (!Array.isArray(collection)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
const index = collection.findIndex((item) => {
|
|
183
|
+
if (typeof item !== 'object' || item === null) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const record = item;
|
|
187
|
+
return record[this.options.idField] === id || record[this.options.idField] === Number(id);
|
|
188
|
+
});
|
|
189
|
+
if (index === -1) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
collection.splice(index, 1);
|
|
193
|
+
await this.save();
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
async updateSingular(resourceName, data) {
|
|
197
|
+
this.db.data[resourceName] = data;
|
|
198
|
+
await this.save();
|
|
199
|
+
return data;
|
|
200
|
+
}
|
|
201
|
+
async save() {
|
|
202
|
+
if (this.options.autoSave) {
|
|
203
|
+
await this.db.write();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
isCollection(name) {
|
|
207
|
+
return Array.isArray(this.db.data[name]);
|
|
208
|
+
}
|
|
209
|
+
getIdField() {
|
|
210
|
+
return this.options.idField;
|
|
211
|
+
}
|
|
212
|
+
getForeignKeySuffix() {
|
|
213
|
+
return this.options.foreignKeySuffix;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
declare function create(): void;
|
|
2
|
-
declare function router(): void;
|
|
3
|
-
declare function defaults(): void;
|
|
4
|
-
declare function rewriter(): void;
|
|
5
|
-
declare const bodyParser: {};
|
|
6
|
-
|
|
7
|
-
export { bodyParser, create, defaults, rewriter, router };
|
|
1
|
+
export declare function create(): void;
|
|
2
|
+
export declare function router(): void;
|
|
3
|
+
export declare function defaults(): void;
|
|
4
|
+
export declare function rewriter(): void;
|
|
5
|
+
export declare const bodyParser: {};
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED,eAAO,MAAM,UAAU,IAAK,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,51 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
bodyParser: () => bodyParser,
|
|
24
|
-
create: () => create,
|
|
25
|
-
defaults: () => defaults,
|
|
26
|
-
rewriter: () => rewriter,
|
|
27
|
-
router: () => router
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(index_exports);
|
|
30
|
-
function create() {
|
|
31
|
-
throw new Error("Not implemented yet - coming in Phase 7");
|
|
1
|
+
export function create() {
|
|
2
|
+
throw new Error('Not implemented yet - coming in Phase 7');
|
|
32
3
|
}
|
|
33
|
-
function router() {
|
|
34
|
-
|
|
4
|
+
export function router() {
|
|
5
|
+
throw new Error('Not implemented yet - coming in Phase 7');
|
|
35
6
|
}
|
|
36
|
-
function defaults() {
|
|
37
|
-
|
|
7
|
+
export function defaults() {
|
|
8
|
+
throw new Error('Not implemented yet - coming in Phase 7');
|
|
38
9
|
}
|
|
39
|
-
function rewriter() {
|
|
40
|
-
|
|
10
|
+
export function rewriter() {
|
|
11
|
+
throw new Error('Not implemented yet - coming in Phase 7');
|
|
41
12
|
}
|
|
42
|
-
|
|
43
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
44
|
-
0 && (module.exports = {
|
|
45
|
-
bodyParser,
|
|
46
|
-
create,
|
|
47
|
-
defaults,
|
|
48
|
-
rewriter,
|
|
49
|
-
router
|
|
50
|
-
});
|
|
13
|
+
export const bodyParser = {};
|
|
51
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,MAAM;IACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAczC,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBnE;AA4BD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgCjF"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { pathToFileURL } from 'node:url';
|
|
2
|
+
export async function loadModule(filePath) {
|
|
3
|
+
try {
|
|
4
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
5
|
+
const module = (await import(fileUrl));
|
|
6
|
+
return module;
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
10
|
+
throw new Error(`Failed to load module '${filePath}': ${message}\n` +
|
|
11
|
+
`\nMake sure:\n` +
|
|
12
|
+
` - The file exists and is a valid JavaScript file\n` +
|
|
13
|
+
` - The file doesn't have syntax errors\n` +
|
|
14
|
+
` - All dependencies are installed`, { cause: error });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function loadMiddlewares(filePath) {
|
|
18
|
+
const module = await loadModule(filePath);
|
|
19
|
+
let middlewareExport;
|
|
20
|
+
if (typeof module === 'object' && module !== null && 'default' in module) {
|
|
21
|
+
const defaultExport = module.default;
|
|
22
|
+
if (typeof defaultExport === 'object' && defaultExport !== null && 'default' in defaultExport) {
|
|
23
|
+
middlewareExport = defaultExport.default;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
middlewareExport = defaultExport;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
middlewareExport = module;
|
|
31
|
+
}
|
|
32
|
+
const middlewares = Array.isArray(middlewareExport) ? middlewareExport : [middlewareExport];
|
|
33
|
+
for (let i = 0; i < middlewares.length; i++) {
|
|
34
|
+
const mw = middlewares[i];
|
|
35
|
+
if (typeof mw !== 'function') {
|
|
36
|
+
const indexStr = String(i);
|
|
37
|
+
throw new Error(`Middleware file '${filePath}' at index ${indexStr} is not a function, got ${typeof mw}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return middlewares;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAezC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAoD,CAAC;QAC1F,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,MAAM,OAAO,IAAI;YACjD,gBAAgB;YAChB,sDAAsD;YACtD,2CAA2C;YAC3C,oCAAoC,EACtC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC;AA4BD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAG1C,IAAI,gBAAyB,CAAC;IAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACzE,MAAM,aAAa,GAAI,MAA+B,CAAC,OAAO,CAAC;QAE/D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YAC9F,gBAAgB,GAAI,aAAsC,CAAC,OAAO,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,gBAAgB,GAAG,aAAa,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gBAAgB,GAAG,MAAM,CAAC;IAC5B,CAAC;IAGD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAG5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAY,WAAW,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,cAAc,QAAQ,2BAA2B,OAAO,EAAE,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,WAA+B,CAAC;AACzC,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LogLevel = 'trace' | 'debug' | 'info';
|
|
2
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
3
|
+
export declare const logger: {
|
|
4
|
+
success(message: string): void;
|
|
5
|
+
error(message: string): void;
|
|
6
|
+
warn(message: string): void;
|
|
7
|
+
info(message: string): void;
|
|
8
|
+
debug(message: string): void;
|
|
9
|
+
trace(message: string): void;
|
|
10
|
+
log(message: string): void;
|
|
11
|
+
request(method: string, url: string): void;
|
|
12
|
+
banner(lines: string[]): void;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AA4BlD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAkBD,eAAO,MAAM,MAAM;qBAYA,MAAM,GAAG,IAAI;mBAef,MAAM,GAAG,IAAI;kBAed,MAAM,GAAG,IAAI;kBAeb,MAAM,GAAG,IAAI;mBAeZ,MAAM,GAAG,IAAI;mBAiBb,MAAM,GAAG,IAAI;iBAiBf,MAAM,GAAG,IAAI;oBAgBV,MAAM,OAAO,MAAM,GAAG,IAAI;kBAoB5B,MAAM,EAAE,GAAG,IAAI;CAgB9B,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
let currentLogLevel = 'info';
|
|
3
|
+
const LOG_LEVELS = {
|
|
4
|
+
trace: 0,
|
|
5
|
+
debug: 1,
|
|
6
|
+
info: 2,
|
|
7
|
+
};
|
|
8
|
+
export function setLogLevel(level) {
|
|
9
|
+
currentLogLevel = level;
|
|
10
|
+
}
|
|
11
|
+
function shouldLog(messageLevel) {
|
|
12
|
+
return LOG_LEVELS[messageLevel] >= LOG_LEVELS[currentLogLevel];
|
|
13
|
+
}
|
|
14
|
+
export const logger = {
|
|
15
|
+
success(message) {
|
|
16
|
+
console.log(pc.green(`✓ ${message}`));
|
|
17
|
+
},
|
|
18
|
+
error(message) {
|
|
19
|
+
console.error(pc.red(`✗ ${message}`));
|
|
20
|
+
},
|
|
21
|
+
warn(message) {
|
|
22
|
+
console.warn(pc.yellow(`⚠ ${message}`));
|
|
23
|
+
},
|
|
24
|
+
info(message) {
|
|
25
|
+
console.log(pc.cyan(`ℹ ${message}`));
|
|
26
|
+
},
|
|
27
|
+
debug(message) {
|
|
28
|
+
if (shouldLog('debug')) {
|
|
29
|
+
console.log(pc.dim(pc.gray(`🐛 ${message}`)));
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
trace(message) {
|
|
33
|
+
if (shouldLog('trace')) {
|
|
34
|
+
console.log(pc.magenta(`🔍 ${message}`));
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
log(message) {
|
|
38
|
+
console.log(message);
|
|
39
|
+
},
|
|
40
|
+
request(method, url) {
|
|
41
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
42
|
+
console.log(pc.gray(`[${timestamp}] ${method} ${url}`));
|
|
43
|
+
},
|
|
44
|
+
banner(lines) {
|
|
45
|
+
console.log();
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
if (line.includes('http://') || line.includes('https://')) {
|
|
48
|
+
const colored = line.replace(/(https?:\/\/[^\s]+)/g, (url) => pc.cyan(url));
|
|
49
|
+
console.log(colored);
|
|
50
|
+
}
|
|
51
|
+
else if (line.startsWith('🚀')) {
|
|
52
|
+
console.log(pc.bold(line));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log(line);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
console.log();
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAU5B,IAAI,eAAe,GAAa,MAAM,CAAC;AAKvC,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;CACR,CAAC;AAcF,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,eAAe,GAAG,KAAK,CAAC;AAC1B,CAAC;AAQD,SAAS,SAAS,CAAC,YAAsB;IACvC,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC;AACjE,CAAC;AAQD,MAAM,CAAC,MAAM,MAAM,GAAG;IAYpB,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAaD,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAaD,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAaD,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAaD,KAAK,CAAC,OAAe;QACnB,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAaD,KAAK,CAAC,OAAe;QACnB,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAaD,GAAG,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAcD,OAAO,CAAC,MAAc,EAAE,GAAW;QACjC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAiBD,MAAM,CAAC,KAAe;QACpB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;CACF,CAAC"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
export interface QueryOptions {
|
|
3
|
+
filters: Record<string, string | string[]>;
|
|
4
|
+
operators: Record<string, Record<string, string>>;
|
|
5
|
+
sort: string[];
|
|
6
|
+
order: string[];
|
|
7
|
+
page?: number;
|
|
8
|
+
limit?: number;
|
|
9
|
+
start?: number;
|
|
10
|
+
end?: number;
|
|
11
|
+
q?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function parseQuery(req: Request): QueryOptions;
|
|
14
|
+
export declare function applyQuery<T>(data: T[], options: QueryOptions): {
|
|
15
|
+
data: T[];
|
|
16
|
+
total: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function generateLinkHeader(req: Request, page: number, limit: number, total: number): string;
|
|
19
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAWD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAmIrD;AA6JD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAwF5F;AAcD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,CA8BR"}
|