@mhmdalimansour/mock-mock 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/data-generator.js +2 -2
- package/dist/server/data-generator.js.map +1 -1
- package/dist/server/data-store.d.ts +30 -0
- package/dist/server/data-store.d.ts.map +1 -0
- package/dist/server/data-store.js +132 -0
- package/dist/server/data-store.js.map +1 -0
- package/dist/server/mock-server.d.ts.map +1 -1
- package/dist/server/mock-server.js +69 -12
- package/dist/server/mock-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,8 +16,8 @@ function generateFakeData(template) {
|
|
|
16
16
|
// Return empty array
|
|
17
17
|
return [];
|
|
18
18
|
}
|
|
19
|
-
// Generate
|
|
20
|
-
const itemCount = faker_1.faker.number.int({ min:
|
|
19
|
+
// Generate 15-30 items based on the first template item (fallback path)
|
|
20
|
+
const itemCount = faker_1.faker.number.int({ min: 15, max: 30 });
|
|
21
21
|
return Array.from({ length: itemCount }, () => generateFakeData(template[0]));
|
|
22
22
|
}
|
|
23
23
|
// Handle objects
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-generator.js","sourceRoot":"","sources":["../../src/server/data-generator.ts"],"names":[],"mappings":";;AAMA,4CA6BC;AAnCD,2CAAwC;AAExC;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,QAAiB;IAChD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,qBAAqB;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"data-generator.js","sourceRoot":"","sources":["../../src/server/data-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MockEndpoint } from '../parser/schema-types';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory store that generates data once per server run.
|
|
4
|
+
* Provides stateful GET / POST / PUT / PATCH / DELETE semantics.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DataStore {
|
|
7
|
+
private collections;
|
|
8
|
+
/**
|
|
9
|
+
* Scan the schema for GET-array endpoints and pre-generate 15-30 records
|
|
10
|
+
* for each discovered collection. Called once on server start.
|
|
11
|
+
*/
|
|
12
|
+
initFromSchema(schema: MockEndpoint[]): void;
|
|
13
|
+
hasCollection(key: string): boolean;
|
|
14
|
+
getCollection(key: string): Record<string, unknown>[] | null;
|
|
15
|
+
getItem(key: string, id: string | number): Record<string, unknown> | null;
|
|
16
|
+
addItem(key: string, body: Record<string, unknown>): Record<string, unknown>;
|
|
17
|
+
updateItem(key: string, id: string | number, updates: Record<string, unknown>): Record<string, unknown> | null;
|
|
18
|
+
deleteItem(key: string, id: string | number): boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Derive a stable collection key from an endpoint path.
|
|
22
|
+
* Returns the last non-parameter path segment.
|
|
23
|
+
* Examples:
|
|
24
|
+
* /api/users → "users"
|
|
25
|
+
* /api/users/{id} → "users"
|
|
26
|
+
* /api/users/:id → "users"
|
|
27
|
+
* /api/users/:id/posts → "posts"
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractCollectionKey(path: string): string;
|
|
30
|
+
//# sourceMappingURL=data-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.d.ts","sourceRoot":"","sources":["../../src/server/data-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOtD;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAsC;IAEzD;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAuB5C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsB5E,UAAU,CACR,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;CAQtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASzD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataStore = void 0;
|
|
4
|
+
exports.extractCollectionKey = extractCollectionKey;
|
|
5
|
+
const faker_1 = require("@faker-js/faker");
|
|
6
|
+
const data_generator_1 = require("./data-generator");
|
|
7
|
+
/**
|
|
8
|
+
* In-memory store that generates data once per server run.
|
|
9
|
+
* Provides stateful GET / POST / PUT / PATCH / DELETE semantics.
|
|
10
|
+
*/
|
|
11
|
+
class DataStore {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.collections = new Map();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Scan the schema for GET-array endpoints and pre-generate 15-30 records
|
|
17
|
+
* for each discovered collection. Called once on server start.
|
|
18
|
+
*/
|
|
19
|
+
initFromSchema(schema) {
|
|
20
|
+
for (const endpoint of schema) {
|
|
21
|
+
if (endpoint.method === 'GET' &&
|
|
22
|
+
Array.isArray(endpoint.response) &&
|
|
23
|
+
endpoint.response.length > 0) {
|
|
24
|
+
const key = extractCollectionKey(endpoint.path);
|
|
25
|
+
if (!this.collections.has(key)) {
|
|
26
|
+
const template = endpoint.response[0];
|
|
27
|
+
const count = faker_1.faker.number.int({ min: 15, max: 30 });
|
|
28
|
+
const items = Array.from({ length: count }, (_, i) => {
|
|
29
|
+
const item = (0, data_generator_1.generateFakeData)(template);
|
|
30
|
+
const idField = findIdField(item) ?? 'id';
|
|
31
|
+
item[idField] = i + 1;
|
|
32
|
+
return item;
|
|
33
|
+
});
|
|
34
|
+
this.collections.set(key, { items, template });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
hasCollection(key) {
|
|
40
|
+
return this.collections.has(key);
|
|
41
|
+
}
|
|
42
|
+
getCollection(key) {
|
|
43
|
+
return this.collections.get(key)?.items ?? null;
|
|
44
|
+
}
|
|
45
|
+
getItem(key, id) {
|
|
46
|
+
const col = this.collections.get(key);
|
|
47
|
+
if (!col)
|
|
48
|
+
return null;
|
|
49
|
+
return col.items.find(item => matchesId(item, id)) ?? null;
|
|
50
|
+
}
|
|
51
|
+
addItem(key, body) {
|
|
52
|
+
const col = this.collections.get(key);
|
|
53
|
+
if (!col) {
|
|
54
|
+
const newItem = { id: 1, ...body };
|
|
55
|
+
this.collections.set(key, { items: [newItem], template: body });
|
|
56
|
+
return newItem;
|
|
57
|
+
}
|
|
58
|
+
const maxId = col.items.reduce((max, item) => {
|
|
59
|
+
const f = findIdField(item);
|
|
60
|
+
const v = f ? Number(item[f]) : 0;
|
|
61
|
+
return Math.max(max, isNaN(v) ? 0 : v);
|
|
62
|
+
}, 0);
|
|
63
|
+
const newItem = {
|
|
64
|
+
...(0, data_generator_1.generateFakeData)(col.template),
|
|
65
|
+
...body,
|
|
66
|
+
};
|
|
67
|
+
const idField = findIdField(newItem) ?? 'id';
|
|
68
|
+
newItem[idField] = maxId + 1;
|
|
69
|
+
col.items.push(newItem);
|
|
70
|
+
return newItem;
|
|
71
|
+
}
|
|
72
|
+
updateItem(key, id, updates) {
|
|
73
|
+
const col = this.collections.get(key);
|
|
74
|
+
if (!col)
|
|
75
|
+
return null;
|
|
76
|
+
const idx = col.items.findIndex(item => matchesId(item, id));
|
|
77
|
+
if (idx === -1)
|
|
78
|
+
return null;
|
|
79
|
+
col.items[idx] = { ...col.items[idx], ...updates };
|
|
80
|
+
// Ensure the ID field stays intact
|
|
81
|
+
const idField = findIdField(col.items[idx]) ?? 'id';
|
|
82
|
+
col.items[idx][idField] = coerceId(id);
|
|
83
|
+
return col.items[idx];
|
|
84
|
+
}
|
|
85
|
+
deleteItem(key, id) {
|
|
86
|
+
const col = this.collections.get(key);
|
|
87
|
+
if (!col)
|
|
88
|
+
return false;
|
|
89
|
+
const idx = col.items.findIndex(item => matchesId(item, id));
|
|
90
|
+
if (idx === -1)
|
|
91
|
+
return false;
|
|
92
|
+
col.items.splice(idx, 1);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.DataStore = DataStore;
|
|
97
|
+
/**
|
|
98
|
+
* Derive a stable collection key from an endpoint path.
|
|
99
|
+
* Returns the last non-parameter path segment.
|
|
100
|
+
* Examples:
|
|
101
|
+
* /api/users → "users"
|
|
102
|
+
* /api/users/{id} → "users"
|
|
103
|
+
* /api/users/:id → "users"
|
|
104
|
+
* /api/users/:id/posts → "posts"
|
|
105
|
+
*/
|
|
106
|
+
function extractCollectionKey(path) {
|
|
107
|
+
const segments = path.replace(/^\//, '').split('/');
|
|
108
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
109
|
+
const seg = segments[i];
|
|
110
|
+
if (!seg.startsWith(':') && !seg.startsWith('{')) {
|
|
111
|
+
return seg;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return path;
|
|
115
|
+
}
|
|
116
|
+
function findIdField(item) {
|
|
117
|
+
if ('id' in item)
|
|
118
|
+
return 'id';
|
|
119
|
+
const key = Object.keys(item).find(k => k.toLowerCase() === 'id' || k.toLowerCase().endsWith('id'));
|
|
120
|
+
return key ?? null;
|
|
121
|
+
}
|
|
122
|
+
function matchesId(item, id) {
|
|
123
|
+
const field = findIdField(item);
|
|
124
|
+
if (!field)
|
|
125
|
+
return false;
|
|
126
|
+
return String(item[field]) === String(id);
|
|
127
|
+
}
|
|
128
|
+
function coerceId(id) {
|
|
129
|
+
const n = Number(id);
|
|
130
|
+
return isNaN(n) ? id : n;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store.js","sourceRoot":"","sources":["../../src/server/data-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/server/mock-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAgB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/server/mock-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAgB,MAAM,wBAAwB,CAAC;AAclE,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI,CAwI/G"}
|
|
@@ -9,6 +9,7 @@ const cors_1 = __importDefault(require("cors"));
|
|
|
9
9
|
const axios_1 = __importDefault(require("axios"));
|
|
10
10
|
const readline_1 = __importDefault(require("readline"));
|
|
11
11
|
const data_generator_1 = require("./data-generator");
|
|
12
|
+
const data_store_1 = require("./data-store");
|
|
12
13
|
let responseDelay = 0;
|
|
13
14
|
function convertPathParams(path) {
|
|
14
15
|
return path.replace(/\{([^}]+)\}/g, ':$1');
|
|
@@ -18,13 +19,16 @@ function sleep(ms) {
|
|
|
18
19
|
}
|
|
19
20
|
function startMockServer(schema, port, fallbackUrl, delay = 0) {
|
|
20
21
|
responseDelay = delay;
|
|
22
|
+
// ── Generate all collections once, before any request hits ──────────────
|
|
23
|
+
const store = new data_store_1.DataStore();
|
|
24
|
+
store.initFromSchema(schema);
|
|
21
25
|
const app = (0, express_1.default)();
|
|
22
26
|
app.use((0, cors_1.default)());
|
|
23
27
|
app.use(express_1.default.json());
|
|
24
28
|
app.use(express_1.default.urlencoded({ extended: true }));
|
|
25
29
|
console.log('\n📡 Registering endpoints:\n');
|
|
26
30
|
for (const endpoint of schema) {
|
|
27
|
-
registerEndpoint(app, endpoint);
|
|
31
|
+
registerEndpoint(app, endpoint, store);
|
|
28
32
|
const expressPath = convertPathParams(endpoint.path);
|
|
29
33
|
console.log(` ${endpoint.method.padEnd(6)} ${expressPath}`);
|
|
30
34
|
}
|
|
@@ -36,7 +40,7 @@ function startMockServer(schema, port, fallbackUrl, delay = 0) {
|
|
|
36
40
|
method: ep.method,
|
|
37
41
|
path: expressPath,
|
|
38
42
|
example: `http://localhost:${port}${examplePath}`,
|
|
39
|
-
description: `Replace {paramName} with actual values
|
|
43
|
+
description: `Replace {paramName} with actual values`,
|
|
40
44
|
};
|
|
41
45
|
});
|
|
42
46
|
res.json({
|
|
@@ -46,7 +50,7 @@ function startMockServer(schema, port, fallbackUrl, delay = 0) {
|
|
|
46
50
|
baseUrl: `http://localhost:${port}`,
|
|
47
51
|
fallbackUrl: fallbackUrl || null,
|
|
48
52
|
delay: `${responseDelay}ms`,
|
|
49
|
-
endpoints: endpointList
|
|
53
|
+
endpoints: endpointList,
|
|
50
54
|
});
|
|
51
55
|
});
|
|
52
56
|
app.get('/_config/delay', (_req, res) => {
|
|
@@ -117,14 +121,12 @@ function startMockServer(schema, port, fallbackUrl, delay = 0) {
|
|
|
117
121
|
console.log('Press Ctrl+C to stop the server\n');
|
|
118
122
|
setupStdinDelayControl();
|
|
119
123
|
});
|
|
120
|
-
// Graceful shutdown on Ctrl+C (SIGINT) or SIGTERM
|
|
121
124
|
const shutdown = () => {
|
|
122
125
|
console.log('\n\n🛑 Shutting down mock server...');
|
|
123
126
|
server.close(() => {
|
|
124
127
|
console.log('✅ Server stopped gracefully\n');
|
|
125
128
|
process.exit(0);
|
|
126
129
|
});
|
|
127
|
-
// Force close after 5 seconds if graceful shutdown fails
|
|
128
130
|
setTimeout(() => {
|
|
129
131
|
console.error('⚠️ Forced shutdown after timeout');
|
|
130
132
|
process.exit(1);
|
|
@@ -134,17 +136,73 @@ function startMockServer(schema, port, fallbackUrl, delay = 0) {
|
|
|
134
136
|
process.on('SIGTERM', shutdown);
|
|
135
137
|
}
|
|
136
138
|
/**
|
|
137
|
-
* Registers a single endpoint with Express
|
|
139
|
+
* Registers a single endpoint with Express, backed by the shared DataStore.
|
|
140
|
+
*
|
|
141
|
+
* Behaviour per HTTP method:
|
|
142
|
+
* GET (no path params) → return the full cached collection (consistent across refreshes)
|
|
143
|
+
* GET (with :id) → return the matching item from the cache
|
|
144
|
+
* POST → insert a new item into the cache, return it
|
|
145
|
+
* PUT / PATCH → merge req.body into the cached item, return it
|
|
146
|
+
* DELETE → remove the item from the cache, return 204
|
|
147
|
+
*
|
|
148
|
+
* Falls back to on-the-fly fake data generation when there is no matching
|
|
149
|
+
* cached collection (e.g. the endpoint has no corresponding GET-array pair).
|
|
138
150
|
*/
|
|
139
|
-
function registerEndpoint(app, endpoint) {
|
|
151
|
+
function registerEndpoint(app, endpoint, store) {
|
|
140
152
|
const { method, path, response, status = 200 } = endpoint;
|
|
141
153
|
const expressPath = convertPathParams(path);
|
|
142
|
-
const
|
|
154
|
+
const collectionKey = (0, data_store_1.extractCollectionKey)(path);
|
|
155
|
+
const hasPathParams = expressPath.includes(':');
|
|
156
|
+
const handler = async (req, res) => {
|
|
143
157
|
if (responseDelay > 0) {
|
|
144
158
|
await sleep(responseDelay);
|
|
145
159
|
}
|
|
146
|
-
|
|
147
|
-
|
|
160
|
+
// Detect the first path parameter name (usually "id")
|
|
161
|
+
const paramNames = Object.keys(req.params);
|
|
162
|
+
const idParam = paramNames.find(p => p.toLowerCase() === 'id') ?? paramNames[0];
|
|
163
|
+
const idValue = idParam ? req.params[idParam] : null;
|
|
164
|
+
switch (method) {
|
|
165
|
+
case 'GET': {
|
|
166
|
+
if (!hasPathParams && store.hasCollection(collectionKey)) {
|
|
167
|
+
return res.status(status).json(store.getCollection(collectionKey));
|
|
168
|
+
}
|
|
169
|
+
if (hasPathParams && idValue) {
|
|
170
|
+
const item = store.getItem(collectionKey, idValue);
|
|
171
|
+
if (item)
|
|
172
|
+
return res.status(status).json(item);
|
|
173
|
+
// ID not in store — generate a one-off fake item
|
|
174
|
+
return res.status(status).json((0, data_generator_1.generateFakeData)(response));
|
|
175
|
+
}
|
|
176
|
+
return res.status(status).json((0, data_generator_1.generateFakeData)(response));
|
|
177
|
+
}
|
|
178
|
+
case 'POST': {
|
|
179
|
+
const body = req.body && typeof req.body === 'object' ? req.body : {};
|
|
180
|
+
const newItem = store.addItem(collectionKey, body);
|
|
181
|
+
return res.status(status).json(newItem);
|
|
182
|
+
}
|
|
183
|
+
case 'PUT':
|
|
184
|
+
case 'PATCH': {
|
|
185
|
+
if (idValue) {
|
|
186
|
+
const body = req.body && typeof req.body === 'object' ? req.body : {};
|
|
187
|
+
const updated = store.updateItem(collectionKey, idValue, body);
|
|
188
|
+
if (updated)
|
|
189
|
+
return res.status(status).json(updated);
|
|
190
|
+
return res.status(404).json({ error: 'Not found' });
|
|
191
|
+
}
|
|
192
|
+
return res.status(status).json((0, data_generator_1.generateFakeData)(response));
|
|
193
|
+
}
|
|
194
|
+
case 'DELETE': {
|
|
195
|
+
if (idValue) {
|
|
196
|
+
const deleted = store.deleteItem(collectionKey, idValue);
|
|
197
|
+
if (deleted)
|
|
198
|
+
return res.status(204).send();
|
|
199
|
+
return res.status(404).json({ error: 'Not found' });
|
|
200
|
+
}
|
|
201
|
+
return res.status(status).json((0, data_generator_1.generateFakeData)(response));
|
|
202
|
+
}
|
|
203
|
+
default:
|
|
204
|
+
return res.status(status).json((0, data_generator_1.generateFakeData)(response));
|
|
205
|
+
}
|
|
148
206
|
};
|
|
149
207
|
switch (method) {
|
|
150
208
|
case 'GET':
|
|
@@ -162,8 +220,7 @@ function registerEndpoint(app, endpoint) {
|
|
|
162
220
|
case 'DELETE':
|
|
163
221
|
app.delete(expressPath, handler);
|
|
164
222
|
break;
|
|
165
|
-
default:
|
|
166
|
-
throw new Error(`Unsupported HTTP method: ${method}`);
|
|
223
|
+
default: throw new Error(`Unsupported HTTP method: ${method}`);
|
|
167
224
|
}
|
|
168
225
|
}
|
|
169
226
|
function setupStdinDelayControl() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../src/server/mock-server.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../src/server/mock-server.ts"],"names":[],"mappings":"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"}
|