@90soft/parse-server-kit 1.0.0 → 2.0.1

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.
Files changed (86) hide show
  1. package/README.md +424 -0
  2. package/dist/decorators/cloudDecorator.d.ts +7 -0
  3. package/dist/decorators/cloudDecorator.d.ts.map +1 -0
  4. package/dist/decorators/cloudDecorator.js +77 -0
  5. package/dist/decorators/cloudDecorator.js.map +1 -0
  6. package/dist/decorators/cloudRegistry.d.ts +9 -0
  7. package/dist/decorators/cloudRegistry.d.ts.map +1 -0
  8. package/dist/decorators/cloudRegistry.js +26 -0
  9. package/dist/decorators/cloudRegistry.js.map +1 -0
  10. package/dist/decorators/cronDecorator.d.ts +6 -0
  11. package/dist/decorators/cronDecorator.d.ts.map +1 -0
  12. package/dist/decorators/cronDecorator.js +28 -0
  13. package/dist/decorators/cronDecorator.js.map +1 -0
  14. package/dist/decorators/cronRegistry.d.ts +13 -0
  15. package/dist/decorators/cronRegistry.d.ts.map +1 -0
  16. package/dist/decorators/cronRegistry.js +96 -0
  17. package/dist/decorators/cronRegistry.js.map +1 -0
  18. package/dist/decorators/routeDecorator.d.ts +35 -0
  19. package/dist/decorators/routeDecorator.d.ts.map +1 -0
  20. package/dist/decorators/routeDecorator.js +160 -0
  21. package/dist/decorators/routeDecorator.js.map +1 -0
  22. package/dist/decorators/triggerDecorator.d.ts +19 -0
  23. package/dist/decorators/triggerDecorator.d.ts.map +1 -0
  24. package/dist/decorators/triggerDecorator.js +45 -0
  25. package/dist/decorators/triggerDecorator.js.map +1 -0
  26. package/dist/decorators/triggerRegistry.d.ts +10 -0
  27. package/dist/decorators/triggerRegistry.d.ts.map +1 -0
  28. package/dist/decorators/triggerRegistry.js +87 -0
  29. package/dist/decorators/triggerRegistry.js.map +1 -0
  30. package/dist/decorators/types/cloudTypes.d.ts +32 -0
  31. package/dist/decorators/types/cloudTypes.d.ts.map +1 -0
  32. package/dist/decorators/types/cloudTypes.js +3 -0
  33. package/dist/decorators/types/cloudTypes.js.map +1 -0
  34. package/dist/decorators/types/common.d.ts +14 -0
  35. package/dist/decorators/types/common.d.ts.map +1 -0
  36. package/dist/decorators/types/common.js +3 -0
  37. package/dist/decorators/types/common.js.map +1 -0
  38. package/dist/decorators/types/cronTypes.d.ts +32 -0
  39. package/dist/decorators/types/cronTypes.d.ts.map +1 -0
  40. package/dist/decorators/types/cronTypes.js +21 -0
  41. package/dist/decorators/types/cronTypes.js.map +1 -0
  42. package/dist/decorators/types/fieldValidation.d.ts +36 -0
  43. package/dist/decorators/types/fieldValidation.d.ts.map +1 -0
  44. package/dist/decorators/types/fieldValidation.js +135 -0
  45. package/dist/decorators/types/fieldValidation.js.map +1 -0
  46. package/dist/decorators/types/triggerTypes.d.ts +14 -0
  47. package/dist/decorators/types/triggerTypes.d.ts.map +1 -0
  48. package/dist/decorators/types/triggerTypes.js +3 -0
  49. package/dist/decorators/types/triggerTypes.js.map +1 -0
  50. package/dist/index.d.ts +25 -4
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +78 -6
  53. package/dist/index.js.map +1 -1
  54. package/dist/middleware/middleware.d.ts +41 -0
  55. package/dist/middleware/middleware.d.ts.map +1 -0
  56. package/dist/middleware/middleware.js +154 -0
  57. package/dist/middleware/middleware.js.map +1 -0
  58. package/dist/swagger/index.d.ts +9 -0
  59. package/dist/swagger/index.d.ts.map +1 -0
  60. package/dist/swagger/index.js +37 -0
  61. package/dist/swagger/index.js.map +1 -0
  62. package/dist/swagger/swaggerRegistry.d.ts +79 -0
  63. package/dist/swagger/swaggerRegistry.d.ts.map +1 -0
  64. package/dist/swagger/swaggerRegistry.js +115 -0
  65. package/dist/swagger/swaggerRegistry.js.map +1 -0
  66. package/dist/swagger/swaggerSpec.d.ts +69 -0
  67. package/dist/swagger/swaggerSpec.d.ts.map +1 -0
  68. package/dist/swagger/swaggerSpec.js +174 -0
  69. package/dist/swagger/swaggerSpec.js.map +1 -0
  70. package/dist/utils/ACL.d.ts +19 -0
  71. package/dist/utils/ACL.d.ts.map +1 -0
  72. package/dist/utils/ACL.js +35 -0
  73. package/dist/utils/ACL.js.map +1 -0
  74. package/dist/utils/constants.d.ts +13 -0
  75. package/dist/utils/constants.d.ts.map +1 -0
  76. package/dist/utils/constants.js +19 -0
  77. package/dist/utils/constants.js.map +1 -0
  78. package/dist/utils/dynamicImport.d.ts +2 -0
  79. package/dist/utils/dynamicImport.d.ts.map +1 -0
  80. package/dist/utils/dynamicImport.js +21 -0
  81. package/dist/utils/dynamicImport.js.map +1 -0
  82. package/dist/utils/helper.d.ts +15 -0
  83. package/dist/utils/helper.d.ts.map +1 -0
  84. package/dist/utils/helper.js +93 -0
  85. package/dist/utils/helper.js.map +1 -0
  86. package/package.json +21 -5
@@ -0,0 +1,15 @@
1
+ export declare function formatCount(num: any, locale?: string): string;
2
+ export declare function generateRandomPassword(length?: number, includeNumbers?: boolean, includeSymbols?: boolean): string;
3
+ export declare function generateRandomInteger(length: number): string;
4
+ export declare function generateRandomString(length?: number): string;
5
+ export declare function sleep(ms: number): Promise<unknown>;
6
+ export declare function catchError<T>(promise: Promise<T>): Promise<[undefined, T] | [Error]>;
7
+ /**
8
+ * Get role names for a single user
9
+ */
10
+ export declare function getUserRoles(user: Parse.User): Promise<string[]>;
11
+ /**
12
+ * Get role names for multiple users (batch — avoids N+1)
13
+ */
14
+ export declare function getUsersRoles(users: Parse.User[]): Promise<Map<string, string[]>>;
15
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/utils/helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,SAAO,UAMlD;AAED,wBAAgB,sBAAsB,CACpC,MAAM,SAAI,EACV,cAAc,UAAO,EACrB,cAAc,UAAO,UAiBtB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,UAInD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,SAAI,GAAG,MAAM,CAOvD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKtE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAmBvF"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCount = formatCount;
4
+ exports.generateRandomPassword = generateRandomPassword;
5
+ exports.generateRandomInteger = generateRandomInteger;
6
+ exports.generateRandomString = generateRandomString;
7
+ exports.sleep = sleep;
8
+ exports.catchError = catchError;
9
+ exports.getUserRoles = getUserRoles;
10
+ exports.getUsersRoles = getUsersRoles;
11
+ function formatCount(num, locale = 'en') {
12
+ return new Intl.NumberFormat(locale, {
13
+ notation: 'compact',
14
+ compactDisplay: 'short',
15
+ maximumFractionDigits: 1,
16
+ }).format(num ?? 0);
17
+ }
18
+ function generateRandomPassword(length = 8, includeNumbers = true, includeSymbols = true) {
19
+ const lowerCaseChars = 'abcdefghijklmnopqrstuvwxyz';
20
+ const upperCaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
21
+ const numberChars = '0123456789';
22
+ const symbolChars = '!@#$%^&*()-_=+[]{}|;:,.<>?';
23
+ let charSet = lowerCaseChars + upperCaseChars;
24
+ if (includeNumbers)
25
+ charSet += numberChars;
26
+ if (includeSymbols)
27
+ charSet += symbolChars;
28
+ let password = '';
29
+ for (let i = 0; i < length; i++) {
30
+ const randomIndex = Math.floor(Math.random() * charSet.length);
31
+ password += charSet[randomIndex];
32
+ }
33
+ return password;
34
+ }
35
+ function generateRandomInteger(length) {
36
+ const min = Math.pow(10, length - 1);
37
+ const max = Math.pow(10, length) - 1;
38
+ return (Math.floor(Math.random() * (max - min + 1)) + min).toString();
39
+ }
40
+ function generateRandomString(length = 8) {
41
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
42
+ let result = '';
43
+ for (let i = 0; i < length; i++) {
44
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
45
+ }
46
+ return result;
47
+ }
48
+ function sleep(ms) {
49
+ return new Promise(resolve => setTimeout(resolve, ms));
50
+ }
51
+ async function catchError(promise) {
52
+ return promise
53
+ .then(data => {
54
+ return [undefined, data];
55
+ })
56
+ .catch(err => {
57
+ return [err];
58
+ });
59
+ }
60
+ /**
61
+ * Get role names for a single user
62
+ */
63
+ async function getUserRoles(user) {
64
+ const roleQuery = new Parse.Query('_Role');
65
+ roleQuery.equalTo('users', user);
66
+ const roles = await roleQuery.find({ useMasterKey: true });
67
+ return roles.map(r => r.get('name'));
68
+ }
69
+ /**
70
+ * Get role names for multiple users (batch — avoids N+1)
71
+ */
72
+ async function getUsersRoles(users) {
73
+ if (users.length === 0)
74
+ return new Map();
75
+ const allRoles = await new Parse.Query('_Role').limit(100).find({ useMasterKey: true });
76
+ const userRolesMap = new Map();
77
+ for (const user of users) {
78
+ userRolesMap.set(user.id, []);
79
+ }
80
+ for (const role of allRoles) {
81
+ const usersRelation = role.getUsers().query();
82
+ usersRelation.containedIn('objectId', users.map(u => u.id));
83
+ usersRelation.limit(users.length);
84
+ const roleUsers = await usersRelation.find({ useMasterKey: true });
85
+ for (const u of roleUsers) {
86
+ const existing = userRolesMap.get(u.id) || [];
87
+ existing.push(role.get('name'));
88
+ userRolesMap.set(u.id, existing);
89
+ }
90
+ }
91
+ return userRolesMap;
92
+ }
93
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/utils/helper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@90soft/parse-server-kit",
3
- "version": "1.0.0",
4
- "description": "Decorator-driven development kit for Parse Server — @ParseClass, @ParseField, BaseModel, and more.",
3
+ "version": "2.0.1",
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",
7
7
  "files": [
@@ -17,7 +17,10 @@
17
17
  "typescript",
18
18
  "backend",
19
19
  "cloud-functions",
20
- "mongodb"
20
+ "mongodb",
21
+ "acl",
22
+ "swagger",
23
+ "cron"
21
24
  ],
22
25
  "author": "90Soft",
23
26
  "license": "MIT",
@@ -27,12 +30,25 @@
27
30
  },
28
31
  "peerDependencies": {
29
32
  "parse": ">=5.0.0",
30
- "reflect-metadata": ">=0.1.13"
33
+ "reflect-metadata": ">=0.1.13",
34
+ "express": ">=4.0.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "node-cron": {
38
+ "optional": true
39
+ },
40
+ "swagger-ui-express": {
41
+ "optional": true
42
+ }
31
43
  },
32
44
  "devDependencies": {
33
45
  "typescript": "^5.5.0",
34
46
  "@types/node": "^20.0.0",
47
+ "@types/express": "^5.0.0",
35
48
  "parse": "^5.3.0",
36
- "reflect-metadata": "^0.2.2"
49
+ "reflect-metadata": "^0.2.2",
50
+ "express": "^5.0.0",
51
+ "swagger-ui-express": "^5.0.1",
52
+ "node-cron": "^4.0.0"
37
53
  }
38
54
  }