@90soft/parse-server-kit 2.8.1 → 2.8.2
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.
|
@@ -21,6 +21,16 @@ export declare function validateEntityRoutes(req: Request, res: Response, next:
|
|
|
21
21
|
/**
|
|
22
22
|
* Extracts master key from the request body during JSON parsing.
|
|
23
23
|
* Used as the `verify` callback in express.json().
|
|
24
|
+
*
|
|
25
|
+
* **Scans before it parses.** body-parser hands this the raw buffer and then
|
|
26
|
+
* parses that same buffer itself — so a `JSON.parse` here is a second, complete
|
|
27
|
+
* parse of every request body in the system, and it exists only to look for one
|
|
28
|
+
* key that is absent from virtually every request.
|
|
29
|
+
*
|
|
30
|
+
* `Buffer.includes` searches bytes: no string allocation, no parse, no object.
|
|
31
|
+
* If neither marker is present there is nothing to extract, and the body is
|
|
32
|
+
* left entirely to body-parser. Only a body that actually mentions a master key
|
|
33
|
+
* pays for parsing.
|
|
24
34
|
*/
|
|
25
35
|
export declare function extractMasterKey(req: any, res: Response, buf: Buffer, encoding: BufferEncoding): void;
|
|
26
36
|
/**
|
|
@@ -31,6 +41,9 @@ export declare function extractMasterKey(req: any, res: Response, buf: Buffer, e
|
|
|
31
41
|
export declare function restrictRoutes(req: any, res: Response, next: NextFunction): void | express.Response<any, Record<string, any>>;
|
|
32
42
|
/**
|
|
33
43
|
* Conditionally applies JSON parsing middleware, skipping file upload routes.
|
|
44
|
+
*
|
|
45
|
+
* The mount-path check stays per-request: `process.env.mountPath` is read at
|
|
46
|
+
* call time, so configuration set after import is still honoured.
|
|
34
47
|
*/
|
|
35
48
|
export declare function conditionalJsonMiddleware(req: Request, res: Response, next: NextFunction): void;
|
|
36
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAoBnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAgDnB;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAoBnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAgDnB;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAiBzB;AAwCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAeD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAOnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAWnE"}
|
|
@@ -85,11 +85,25 @@ function validateEntityRoutes(req, res, next) {
|
|
|
85
85
|
req._entityRouteHandled = true;
|
|
86
86
|
return next();
|
|
87
87
|
}
|
|
88
|
+
/** The only two body keys that can carry a master key. */
|
|
89
|
+
const MASTER_KEY_MARKERS = ['masterKey', '_MasterKey'];
|
|
88
90
|
/**
|
|
89
91
|
* Extracts master key from the request body during JSON parsing.
|
|
90
92
|
* Used as the `verify` callback in express.json().
|
|
93
|
+
*
|
|
94
|
+
* **Scans before it parses.** body-parser hands this the raw buffer and then
|
|
95
|
+
* parses that same buffer itself — so a `JSON.parse` here is a second, complete
|
|
96
|
+
* parse of every request body in the system, and it exists only to look for one
|
|
97
|
+
* key that is absent from virtually every request.
|
|
98
|
+
*
|
|
99
|
+
* `Buffer.includes` searches bytes: no string allocation, no parse, no object.
|
|
100
|
+
* If neither marker is present there is nothing to extract, and the body is
|
|
101
|
+
* left entirely to body-parser. Only a body that actually mentions a master key
|
|
102
|
+
* pays for parsing.
|
|
91
103
|
*/
|
|
92
104
|
function extractMasterKey(req, res, buf, encoding) {
|
|
105
|
+
if (!MASTER_KEY_MARKERS.some(marker => buf.includes(marker)))
|
|
106
|
+
return;
|
|
93
107
|
try {
|
|
94
108
|
const body = JSON.parse(buf.toString(encoding));
|
|
95
109
|
if (body && (body.masterKey || body._MasterKey)) {
|
|
@@ -97,6 +111,11 @@ function extractMasterKey(req, res, buf, encoding) {
|
|
|
97
111
|
}
|
|
98
112
|
}
|
|
99
113
|
catch (err) {
|
|
114
|
+
// NOTE: this both sends a response and throws, which leaves Express with
|
|
115
|
+
// "Cannot set headers after they are sent". Pre-existing; left as-is
|
|
116
|
+
// deliberately so this stays a performance change only. Malformed JSON
|
|
117
|
+
// without a marker now reaches body-parser instead, which answers 400
|
|
118
|
+
// cleanly — so this path is merely reached far less often than before.
|
|
100
119
|
throw res.status(400).json({ message: 'Error parsing JSON body' });
|
|
101
120
|
}
|
|
102
121
|
}
|
|
@@ -158,18 +177,29 @@ function restrictRoutes(req, res, next) {
|
|
|
158
177
|
}
|
|
159
178
|
return res.status(403).json({ message: 'Route not allowed' });
|
|
160
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* One parser, built once at import.
|
|
182
|
+
*
|
|
183
|
+
* A body-parser instance carries no per-request state — `app.use(express.json())`
|
|
184
|
+
* is the intended usage. Calling the factory inside the handler rebuilt it on
|
|
185
|
+
* every single request, which is pure allocation for no behavioural difference.
|
|
186
|
+
*/
|
|
187
|
+
const jsonParser = express_1.default.json({
|
|
188
|
+
limit: '10mb',
|
|
189
|
+
type: ['text/plain'],
|
|
190
|
+
verify: extractMasterKey,
|
|
191
|
+
});
|
|
161
192
|
/**
|
|
162
193
|
* Conditionally applies JSON parsing middleware, skipping file upload routes.
|
|
194
|
+
*
|
|
195
|
+
* The mount-path check stays per-request: `process.env.mountPath` is read at
|
|
196
|
+
* call time, so configuration set after import is still honoured.
|
|
163
197
|
*/
|
|
164
198
|
function conditionalJsonMiddleware(req, res, next) {
|
|
165
199
|
if (req.path.startsWith(`${process.env.mountPath}/files`)) {
|
|
166
200
|
return next();
|
|
167
201
|
}
|
|
168
|
-
|
|
169
|
-
limit: '10mb',
|
|
170
|
-
type: ['text/plain'],
|
|
171
|
-
verify: extractMasterKey,
|
|
172
|
-
})(req, res, next);
|
|
202
|
+
return jsonParser(req, res, next);
|
|
173
203
|
}
|
|
174
204
|
/**
|
|
175
205
|
* Removes the {result: ...} wrapper from Parse Server cloud function responses.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":";;;;;AAUA,wDAuBC;AAeD,oDAmDC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":";;;;;AAUA,wDAuBC;AAeD,oDAmDC;AAmBD,4CAqBC;AA6CD,wCAwBC;AAqBD,8DAUC;AAMD,wDAWC;AAhQD,sDAAiE;AACjE,+DAAkE;AAClE,iEAA2D;AAE3D,2CAA2C;AAE3C;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,GAAY,EACZ,GAAa,EACb,IAAkB;IAElB,qDAAqD;IACrD,IAAK,GAAW,CAAC,mBAAmB,EAAE,CAAC;QACrC,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,qCAAqB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,oBAAoB,EAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAoB,CAAC,EAAE,CAAC;QAChE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,oBAAoB,EAAC,CAAC,CAAC;IAC/D,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAClC,GAAY,EACZ,GAAa,EACb,IAAkB;IAElB,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;IAE3B,0DAA0D;IAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,8BAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,YAAY,GAAG,8BAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,iBAAiB,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,qCAAqB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,oBAAoB,EAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAoB,CAAC,EAAE,CAAC;QAChE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,oBAAoB,EAAC,CAAC,CAAC;IAC/D,CAAC;IAED,sEAAsE;IACtE,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,mBAAmB;IAC3C,CAAC;IAED,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,GAAG,CAAC,GAAG,GAAG,cAAc,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAE9E,yEAAyE;IACzE,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,IAAI,GAAG,EAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,EAAC,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACnB,GAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACxC,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,0DAA0D;AAC1D,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,SAAgB,gBAAgB,CAC9B,GAAQ,EACR,GAAa,EACb,GAAW,EACX,QAAwB;IAExB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO;IAErE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,qEAAqE;QACrE,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,yBAAyB,EAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,YAAY,CAAC,GAAQ;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAElE,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CACV,yEAAyE;gBACvE,0EAA0E;gBAC1E,mEAAmE,CACtE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAEhC;;;;GAIG;AACH,SAAgB,cAAc,CAAC,GAAQ,EAAE,GAAa,EAAE,IAAkB;IACxE,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE1D,uCAAuC;IACvC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,yCAAyC;IACzC,IAAI,8BAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,wEAAwE;IACxE,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,mBAAmB,EAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,iBAAO,CAAC,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,CAAC,YAAY,CAAC;IACpB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,GAAY,EACZ,GAAa,EACb,IAAkB;IAElB,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS;IAClE,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAS,EAAE,EAAE;QACvB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACzD,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;AACT,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@90soft/parse-server-kit",
|
|
3
|
-
"version": "2.8.
|
|
4
|
-
"description": "Complete decorator-driven development kit for Parse Server — models, cloud functions, triggers, cron, routing, ACL, Swagger, and more.",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist",
|
|
9
|
-
"CLAUDE.md"
|
|
10
|
-
],
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc",
|
|
13
|
-
"test": "jest",
|
|
14
|
-
"test:integration": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.integration.config.js",
|
|
15
|
-
"test:all": "npm test && npm run test:integration",
|
|
16
|
-
"prepublishOnly": "npm run build"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"parse-server",
|
|
20
|
-
"decorators",
|
|
21
|
-
"typescript",
|
|
22
|
-
"backend",
|
|
23
|
-
"cloud-functions",
|
|
24
|
-
"mongodb",
|
|
25
|
-
"acl",
|
|
26
|
-
"swagger",
|
|
27
|
-
"cron"
|
|
28
|
-
],
|
|
29
|
-
"author": "90Soft",
|
|
30
|
-
"license": "MIT",
|
|
31
|
-
"repository": {
|
|
32
|
-
"type": "git",
|
|
33
|
-
"url": "https://git.90-soft.com/90_soft/parse-server-kit.git"
|
|
34
|
-
},
|
|
35
|
-
"engines": {
|
|
36
|
-
"node": ">=18.0.0"
|
|
37
|
-
},
|
|
38
|
-
"peerDependencies": {
|
|
39
|
-
"@types/parse": ">=3.0.0",
|
|
40
|
-
"express": ">=4.0.0",
|
|
41
|
-
"node-cron": ">=3.0.0",
|
|
42
|
-
"parse": ">=5.0.0",
|
|
43
|
-
"parse-server": ">=8.3.0",
|
|
44
|
-
"reflect-metadata": ">=0.1.13",
|
|
45
|
-
"swagger-ui-express": ">=4.0.0"
|
|
46
|
-
},
|
|
47
|
-
"peerDependenciesMeta": {
|
|
48
|
-
"@types/parse": {
|
|
49
|
-
"optional": true
|
|
50
|
-
},
|
|
51
|
-
"node-cron": {
|
|
52
|
-
"optional": true
|
|
53
|
-
},
|
|
54
|
-
"swagger-ui-express": {
|
|
55
|
-
"optional": true
|
|
56
|
-
},
|
|
57
|
-
"parse-server": {
|
|
58
|
-
"optional": true
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"devDependencies": {
|
|
62
|
-
"@types/express": "^5.0.0",
|
|
63
|
-
"@types/jest": "^29.5.0",
|
|
64
|
-
"@types/node": "^20.0.0",
|
|
65
|
-
"express": "^5.0.0",
|
|
66
|
-
"jest": "^29.7.0",
|
|
67
|
-
"mongodb-memory-server": "^11.2.0",
|
|
68
|
-
"node-cron": "^4.0.0",
|
|
69
|
-
"parse": "^5.3.0",
|
|
70
|
-
"parse-server": "^9.10.0",
|
|
71
|
-
"reflect-metadata": "^0.2.2",
|
|
72
|
-
"swagger-ui-express": "^5.0.1",
|
|
73
|
-
"ts-jest": "^29.2.0",
|
|
74
|
-
"typescript": "^5.5.0"
|
|
75
|
-
}
|
|
76
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@90soft/parse-server-kit",
|
|
3
|
+
"version": "2.8.2",
|
|
4
|
+
"description": "Complete decorator-driven development kit for Parse Server — models, cloud functions, triggers, cron, routing, ACL, Swagger, and more.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"CLAUDE.md"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"test:integration": "NODE_OPTIONS=--experimental-vm-modules jest --config jest.integration.config.js",
|
|
15
|
+
"test:all": "npm test && npm run test:integration",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"parse-server",
|
|
20
|
+
"decorators",
|
|
21
|
+
"typescript",
|
|
22
|
+
"backend",
|
|
23
|
+
"cloud-functions",
|
|
24
|
+
"mongodb",
|
|
25
|
+
"acl",
|
|
26
|
+
"swagger",
|
|
27
|
+
"cron"
|
|
28
|
+
],
|
|
29
|
+
"author": "90Soft",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://git.90-soft.com/90_soft/parse-server-kit.git"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18.0.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@types/parse": ">=3.0.0",
|
|
40
|
+
"express": ">=4.0.0",
|
|
41
|
+
"node-cron": ">=3.0.0",
|
|
42
|
+
"parse": ">=5.0.0",
|
|
43
|
+
"parse-server": ">=8.3.0",
|
|
44
|
+
"reflect-metadata": ">=0.1.13",
|
|
45
|
+
"swagger-ui-express": ">=4.0.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"@types/parse": {
|
|
49
|
+
"optional": true
|
|
50
|
+
},
|
|
51
|
+
"node-cron": {
|
|
52
|
+
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"swagger-ui-express": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"parse-server": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/express": "^5.0.0",
|
|
63
|
+
"@types/jest": "^29.5.0",
|
|
64
|
+
"@types/node": "^20.0.0",
|
|
65
|
+
"express": "^5.0.0",
|
|
66
|
+
"jest": "^29.7.0",
|
|
67
|
+
"mongodb-memory-server": "^11.2.0",
|
|
68
|
+
"node-cron": "^4.0.0",
|
|
69
|
+
"parse": "^5.3.0",
|
|
70
|
+
"parse-server": "^9.10.0",
|
|
71
|
+
"reflect-metadata": "^0.2.2",
|
|
72
|
+
"swagger-ui-express": "^5.0.1",
|
|
73
|
+
"ts-jest": "^29.2.0",
|
|
74
|
+
"typescript": "^5.5.0"
|
|
75
|
+
}
|
|
76
|
+
}
|