@90soft/parse-server-kit 2.1.0 → 2.3.0
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/decorators/routeDecorator.d.ts +4 -15
- package/dist/decorators/routeDecorator.d.ts.map +1 -1
- package/dist/decorators/routeDecorator.js +32 -74
- package/dist/decorators/routeDecorator.js.map +1 -1
- package/dist/middleware/middleware.d.ts +2 -2
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +1 -7
- package/dist/middleware/middleware.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,35 +1,24 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
/**
|
|
3
3
|
* @Route class decorator.
|
|
4
|
-
* Accepts a Parse model class (reads
|
|
4
|
+
* Accepts a Parse model class (reads JS class name) or a custom string.
|
|
5
5
|
*/
|
|
6
6
|
export declare function Route(target: Function | string): (constructor: Function) => void;
|
|
7
7
|
/**
|
|
8
8
|
* Global route registry — maps route prefixes to function names.
|
|
9
|
-
* Built during decorator phase, consumed during server init.
|
|
10
9
|
*/
|
|
11
10
|
export declare class RouteRegistry {
|
|
12
|
-
private static
|
|
11
|
+
private static entries;
|
|
13
12
|
private static routeMap;
|
|
14
13
|
private static registeredPrefixes;
|
|
15
|
-
static register(
|
|
14
|
+
static register(jsClassName: string, prefix: string, methodNames: string[]): void;
|
|
16
15
|
/**
|
|
17
16
|
* Called after CloudFunctionRegistry.initialize().
|
|
18
|
-
*
|
|
17
|
+
* Uses definitive method lists — no string matching guesswork.
|
|
19
18
|
*/
|
|
20
19
|
static initialize(): void;
|
|
21
|
-
/**
|
|
22
|
-
* Look up a cloud function name by route path.
|
|
23
|
-
* '/students/create' → 'createStudent'
|
|
24
|
-
*/
|
|
25
20
|
static resolve(routePath: string): string | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Check if a path starts with a registered route prefix.
|
|
28
|
-
*/
|
|
29
21
|
static isRegisteredPrefix(path: string): boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Get all registered prefixes (for restrictRoutes middleware).
|
|
32
|
-
*/
|
|
33
22
|
static getPrefixes(): string[];
|
|
34
23
|
}
|
|
35
24
|
//# sourceMappingURL=routeDecorator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/routeDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"routeDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/routeDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAiC1B;;;GAGG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,IAC5B,aAAa,QAAQ,UAuBvC;AAED;;GAEG;AACH,qBAAa,aAAa;IAExB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAqE;IAE3F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA0B;IAE3D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;IAI1E;;;OAGG;IACH,MAAM,CAAC,UAAU;IA4BjB,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOhD,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;CAG/B"}
|
|
@@ -8,19 +8,14 @@ const cloudRegistry_1 = require("./cloudRegistry");
|
|
|
8
8
|
* @Route decorator — maps cloud functions to entity-based routes.
|
|
9
9
|
*
|
|
10
10
|
* Usage:
|
|
11
|
-
* @Route(Student) // reads
|
|
11
|
+
* @Route(Student) // reads JS class name → 'Student' → /api/students/*
|
|
12
12
|
* @Route('school-students') // custom string → /api/school-students/*
|
|
13
13
|
*
|
|
14
|
-
* The decorator
|
|
15
|
-
*
|
|
16
|
-
* the decorated class with that prefix.
|
|
17
|
-
*
|
|
18
|
-
* At server init, CloudFunctionRegistry builds a route map:
|
|
19
|
-
* /students/create → createStudent
|
|
20
|
-
* /students/list → listStudents
|
|
14
|
+
* The decorator captures the class's static method names and registers them
|
|
15
|
+
* with RouteRegistry. At server init, the registry builds the route map.
|
|
21
16
|
*/
|
|
22
17
|
/**
|
|
23
|
-
* Convert PascalCase to kebab-case plural.
|
|
18
|
+
* Convert PascalCase to kebab-case plural for route prefix.
|
|
24
19
|
* 'Student' → 'students'
|
|
25
20
|
* 'MenuItem' → 'menu-items'
|
|
26
21
|
* 'MeetingMinute' → 'meeting-minutes'
|
|
@@ -29,8 +24,6 @@ function toKebabPlural(name) {
|
|
|
29
24
|
const kebab = name
|
|
30
25
|
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
31
26
|
.toLowerCase();
|
|
32
|
-
// Simple pluralize: add 's' (covers most cases)
|
|
33
|
-
// Words ending in 'y' → 'ies', 's'/'sh'/'ch'/'x' → 'es'
|
|
34
27
|
if (kebab.endsWith('y') && !kebab.endsWith('ay') && !kebab.endsWith('ey') && !kebab.endsWith('oy')) {
|
|
35
28
|
return kebab.slice(0, -1) + 'ies';
|
|
36
29
|
}
|
|
@@ -39,85 +32,60 @@ function toKebabPlural(name) {
|
|
|
39
32
|
}
|
|
40
33
|
return kebab + 's';
|
|
41
34
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Extract action name from a cloud function name.
|
|
44
|
-
* 'createStudent' → 'create'
|
|
45
|
-
* 'listStudents' → 'list'
|
|
46
|
-
* 'getStudent' → 'get'
|
|
47
|
-
* 'updateStudent' → 'update'
|
|
48
|
-
* 'deleteStudent' → 'delete'
|
|
49
|
-
* 'searchStudents' → 'search'
|
|
50
|
-
* 'customAction' → 'customAction' (fallback: use full name)
|
|
51
|
-
*/
|
|
52
|
-
function extractAction(functionName, className) {
|
|
53
|
-
const classLower = className.toLowerCase();
|
|
54
|
-
const fnLower = functionName.toLowerCase();
|
|
55
|
-
// Standard CRUD prefixes
|
|
56
|
-
const prefixes = ['create', 'get', 'list', 'update', 'delete', 'search'];
|
|
57
|
-
for (const prefix of prefixes) {
|
|
58
|
-
if (fnLower.startsWith(prefix) && fnLower.includes(classLower)) {
|
|
59
|
-
return prefix;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Pluralized form (e.g., 'listStudents' where className is 'Student')
|
|
63
|
-
for (const prefix of prefixes) {
|
|
64
|
-
if (fnLower.startsWith(prefix)) {
|
|
65
|
-
return prefix;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Fallback: return the full function name as the action
|
|
69
|
-
return functionName;
|
|
70
|
-
}
|
|
71
35
|
/**
|
|
72
36
|
* @Route class decorator.
|
|
73
|
-
* Accepts a Parse model class (reads
|
|
37
|
+
* Accepts a Parse model class (reads JS class name) or a custom string.
|
|
74
38
|
*/
|
|
75
39
|
function Route(target) {
|
|
76
40
|
return function (constructor) {
|
|
77
41
|
let prefix;
|
|
78
|
-
let
|
|
42
|
+
let jsClassName;
|
|
79
43
|
if (typeof target === 'string') {
|
|
80
44
|
prefix = target;
|
|
81
|
-
|
|
45
|
+
jsClassName = target;
|
|
82
46
|
}
|
|
83
47
|
else {
|
|
84
|
-
//
|
|
85
|
-
className
|
|
86
|
-
|
|
48
|
+
// Use JS class name (target.name), NOT Parse className
|
|
49
|
+
// Parse className could be '_User' which breaks matching
|
|
50
|
+
jsClassName = target.name;
|
|
51
|
+
prefix = toKebabPlural(jsClassName);
|
|
87
52
|
}
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
53
|
+
// Capture static method names from the decorated class
|
|
54
|
+
const methodNames = Object.getOwnPropertyNames(constructor)
|
|
55
|
+
.filter(name => {
|
|
56
|
+
if (name === 'length' || name === 'name' || name === 'prototype')
|
|
57
|
+
return false;
|
|
58
|
+
return typeof constructor[name] === 'function';
|
|
59
|
+
});
|
|
60
|
+
RouteRegistry.register(jsClassName, prefix, methodNames);
|
|
91
61
|
};
|
|
92
62
|
}
|
|
93
63
|
/**
|
|
94
64
|
* Global route registry — maps route prefixes to function names.
|
|
95
|
-
* Built during decorator phase, consumed during server init.
|
|
96
65
|
*/
|
|
97
66
|
class RouteRegistry {
|
|
98
|
-
static register(
|
|
99
|
-
this.
|
|
67
|
+
static register(jsClassName, prefix, methodNames) {
|
|
68
|
+
this.entries.set(jsClassName, { prefix, methodNames });
|
|
100
69
|
}
|
|
101
70
|
/**
|
|
102
71
|
* Called after CloudFunctionRegistry.initialize().
|
|
103
|
-
*
|
|
72
|
+
* Uses definitive method lists — no string matching guesswork.
|
|
104
73
|
*/
|
|
105
74
|
static initialize() {
|
|
106
75
|
const functions = cloudRegistry_1.CloudFunctionRegistry.getFunctions();
|
|
107
76
|
for (const fn of functions) {
|
|
108
|
-
// Find which
|
|
77
|
+
// Find which class owns this function by checking method name lists
|
|
109
78
|
let matchedPrefix = null;
|
|
110
79
|
let matchedClassName = null;
|
|
111
|
-
for (const [
|
|
112
|
-
if (fn.name
|
|
80
|
+
for (const [jsClassName, { prefix, methodNames }] of this.entries) {
|
|
81
|
+
if (methodNames.includes(fn.name)) {
|
|
113
82
|
matchedPrefix = prefix;
|
|
114
|
-
matchedClassName =
|
|
83
|
+
matchedClassName = jsClassName;
|
|
115
84
|
break;
|
|
116
85
|
}
|
|
117
86
|
}
|
|
118
|
-
if (matchedPrefix
|
|
119
|
-
const
|
|
120
|
-
const routePath = `/${matchedPrefix}/${action}`;
|
|
87
|
+
if (matchedPrefix) {
|
|
88
|
+
const routePath = `/${matchedPrefix}/${fn.name}`;
|
|
121
89
|
this.routeMap.set(routePath, fn.name);
|
|
122
90
|
this.registeredPrefixes.add(`/${matchedPrefix}`);
|
|
123
91
|
fn.routePrefix = matchedPrefix;
|
|
@@ -126,16 +94,9 @@ class RouteRegistry {
|
|
|
126
94
|
}
|
|
127
95
|
console.log(`Route registry: ${this.routeMap.size} routes registered`);
|
|
128
96
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Look up a cloud function name by route path.
|
|
131
|
-
* '/students/create' → 'createStudent'
|
|
132
|
-
*/
|
|
133
97
|
static resolve(routePath) {
|
|
134
98
|
return this.routeMap.get(routePath);
|
|
135
99
|
}
|
|
136
|
-
/**
|
|
137
|
-
* Check if a path starts with a registered route prefix.
|
|
138
|
-
*/
|
|
139
100
|
static isRegisteredPrefix(path) {
|
|
140
101
|
for (const prefix of this.registeredPrefixes) {
|
|
141
102
|
if (path.startsWith(prefix))
|
|
@@ -143,18 +104,15 @@ class RouteRegistry {
|
|
|
143
104
|
}
|
|
144
105
|
return false;
|
|
145
106
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Get all registered prefixes (for restrictRoutes middleware).
|
|
148
|
-
*/
|
|
149
107
|
static getPrefixes() {
|
|
150
108
|
return Array.from(this.registeredPrefixes);
|
|
151
109
|
}
|
|
152
110
|
}
|
|
153
111
|
exports.RouteRegistry = RouteRegistry;
|
|
154
|
-
//
|
|
155
|
-
RouteRegistry.
|
|
156
|
-
// route path → function name
|
|
112
|
+
// jsClassName → { prefix, methodNames }
|
|
113
|
+
RouteRegistry.entries = new Map();
|
|
114
|
+
// route path → function name
|
|
157
115
|
RouteRegistry.routeMap = new Map();
|
|
158
|
-
//
|
|
116
|
+
// registered route prefixes
|
|
159
117
|
RouteRegistry.registeredPrefixes = new Set();
|
|
160
118
|
//# sourceMappingURL=routeDecorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeDecorator.js","sourceRoot":"","sources":["../../src/decorators/routeDecorator.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"routeDecorator.js","sourceRoot":"","sources":["../../src/decorators/routeDecorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ export declare function restrictRoutes(req: any, res: Response, next: NextFuncti
|
|
|
35
35
|
export declare function conditionalJsonMiddleware(req: Request, res: Response, next: NextFunction): void;
|
|
36
36
|
/**
|
|
37
37
|
* Removes the {result: ...} wrapper from Parse Server cloud function responses.
|
|
38
|
-
*
|
|
38
|
+
* Applied unconditionally — Parse always wraps cloud function results.
|
|
39
39
|
*/
|
|
40
|
-
export declare function removeResultMiddleware(req: any, res: any, next: any):
|
|
40
|
+
export declare function removeResultMiddleware(req: any, res: any, next: any): void;
|
|
41
41
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -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;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAUzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAWnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,
|
|
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;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAUzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAWnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAWnE"}
|
|
@@ -140,15 +140,9 @@ function conditionalJsonMiddleware(req, res, next) {
|
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
142
|
* Removes the {result: ...} wrapper from Parse Server cloud function responses.
|
|
143
|
-
*
|
|
143
|
+
* Applied unconditionally — Parse always wraps cloud function results.
|
|
144
144
|
*/
|
|
145
145
|
function removeResultMiddleware(req, res, next) {
|
|
146
|
-
const mountPath = process.env.mountPath || '/api';
|
|
147
|
-
const pathAfterMount = req.path.replace(mountPath, '');
|
|
148
|
-
const isEntityRoute = routeDecorator_1.RouteRegistry.isRegisteredPrefix(pathAfterMount);
|
|
149
|
-
const isFunctionRoute = req.path.includes('/functions');
|
|
150
|
-
if (!isEntityRoute && !isFunctionRoute)
|
|
151
|
-
return next();
|
|
152
146
|
const originalJson = res.json.bind(res);
|
|
153
147
|
res.json = (body) => {
|
|
154
148
|
if (body && typeof body === 'object' && 'result' in body) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":";;;;;AAUA,wDAuBC;AAeD,oDAmDC;AAMD,4CAcC;AAOD,wCAwBC;AAKD,8DAcC;AAMD,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@90soft/parse-server-kit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Complete decorator-driven development kit for Parse Server — models, cloud functions, triggers, cron, routing, ACL, Swagger, and more.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|