@90soft/parse-server-kit 2.3.1 → 2.4.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.
@@ -0,0 +1,28 @@
1
+ interface UniqueIndexInfo {
2
+ className: string;
3
+ field: string;
4
+ indexName: string;
5
+ }
6
+ interface CompoundIndexInfo {
7
+ className: string;
8
+ fields: string[];
9
+ indexName: string;
10
+ unique: boolean;
11
+ sparse: boolean;
12
+ partialFilterNulls: boolean;
13
+ }
14
+ /**
15
+ * Get all unique indexes defined in models via @ParseField({ unique: true })
16
+ */
17
+ export declare function getUniqueIndexes(): UniqueIndexInfo[];
18
+ /**
19
+ * Get all compound indexes defined in models via @ParseClass({ compoundIndexes: [...] })
20
+ */
21
+ export declare function getCompoundIndexes(): CompoundIndexInfo[];
22
+ /**
23
+ * Apply unique and compound indexes to MongoDB.
24
+ * Call after Parse Server is initialized.
25
+ */
26
+ export declare function applyUniqueIndexes(parseServerInstance?: any): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=indexes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../src/database/indexes.ts"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAmBpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAwBxD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,mBAAmB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFjF"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUniqueIndexes = getUniqueIndexes;
4
+ exports.getCompoundIndexes = getCompoundIndexes;
5
+ exports.applyUniqueIndexes = applyUniqueIndexes;
6
+ const parseDecorators_1 = require("../decorators/parseDecorators");
7
+ const schemaTypes_1 = require("../decorators/types/schemaTypes");
8
+ const helper_1 = require("../utils/helper");
9
+ /**
10
+ * Get all unique indexes defined in models via @ParseField({ unique: true })
11
+ */
12
+ function getUniqueIndexes() {
13
+ const uniqueIndexes = [];
14
+ for (const className of schemaTypes_1.classNames) {
15
+ const classConstructor = Parse.Object.extend(className);
16
+ const schema = (0, parseDecorators_1.getSchemaDefinition)(classConstructor);
17
+ if (schema.uniqueFields && schema.uniqueFields.length > 0) {
18
+ for (const field of schema.uniqueFields) {
19
+ uniqueIndexes.push({
20
+ className: schema.className,
21
+ field,
22
+ indexName: `${field}_unique`,
23
+ });
24
+ }
25
+ }
26
+ }
27
+ return uniqueIndexes;
28
+ }
29
+ /**
30
+ * Get all compound indexes defined in models via @ParseClass({ compoundIndexes: [...] })
31
+ */
32
+ function getCompoundIndexes() {
33
+ const compoundIndexes = [];
34
+ for (const className of schemaTypes_1.classNames) {
35
+ const classConstructor = Parse.Object.extend(className);
36
+ const schema = (0, parseDecorators_1.getSchemaDefinition)(classConstructor);
37
+ if (schema.compoundIndexes && schema.compoundIndexes.length > 0) {
38
+ for (const compound of schema.compoundIndexes) {
39
+ const suffix = compound.unique ? '_unique' : '_index';
40
+ const indexName = compound.name || `${compound.fields.join('_')}${suffix}`;
41
+ compoundIndexes.push({
42
+ className: schema.className,
43
+ fields: compound.fields,
44
+ indexName,
45
+ unique: compound.unique ?? false,
46
+ sparse: compound.sparse ?? false,
47
+ partialFilterNulls: compound.partialFilterNulls ?? false,
48
+ });
49
+ }
50
+ }
51
+ }
52
+ return compoundIndexes;
53
+ }
54
+ /**
55
+ * Apply unique and compound indexes to MongoDB.
56
+ * Call after Parse Server is initialized.
57
+ */
58
+ async function applyUniqueIndexes(parseServerInstance) {
59
+ const uniqueIndexes = getUniqueIndexes();
60
+ const compoundIndexes = getCompoundIndexes();
61
+ const totalIndexes = uniqueIndexes.length + compoundIndexes.length;
62
+ if (totalIndexes === 0) {
63
+ console.log('[Indexes] No indexes to apply');
64
+ return;
65
+ }
66
+ console.log(`[Indexes] Applying ${uniqueIndexes.length} unique + ${compoundIndexes.length} compound index(es)...`);
67
+ try {
68
+ const config = parseServerInstance?.config;
69
+ const adapter = config?.databaseController?.adapter || config?.database?.adapter;
70
+ const db = adapter?.database || adapter?.client?.db() || adapter?.mongoClient?.db();
71
+ if (!db) {
72
+ console.warn('[Indexes] Could not access database adapter.');
73
+ logManualIndexCommands(uniqueIndexes, compoundIndexes);
74
+ return;
75
+ }
76
+ // Apply single-field unique indexes
77
+ for (const { className, field, indexName } of uniqueIndexes) {
78
+ const collection = db.collection(className);
79
+ const [, existingIndexes] = await (0, helper_1.catchError)(collection.indexes());
80
+ if (existingIndexes) {
81
+ const conflictingIndex = existingIndexes.find((idx) => idx.key[field] && !idx.unique && idx.name !== '_id_');
82
+ if (conflictingIndex) {
83
+ console.log(`[Indexes] Dropping non-unique index: ${conflictingIndex.name}`);
84
+ await (0, helper_1.catchError)(collection.dropIndex(conflictingIndex.name));
85
+ }
86
+ }
87
+ const [createErr] = await (0, helper_1.catchError)(collection.createIndex({ [field]: 1 }, { unique: true, name: indexName, background: true }));
88
+ if (createErr) {
89
+ if (createErr.code === 85 || createErr.code === 86) {
90
+ console.log(`[Indexes] Index exists: ${className}.${field}`);
91
+ }
92
+ else {
93
+ console.error(`[Indexes] Failed: ${className}.${field}:`, createErr.message);
94
+ }
95
+ }
96
+ else {
97
+ console.log(`[Indexes] Created unique index: ${className}.${field}`);
98
+ }
99
+ }
100
+ // Apply compound indexes
101
+ for (const { className, fields, indexName, unique, sparse, partialFilterNulls } of compoundIndexes) {
102
+ const collection = db.collection(className);
103
+ const keySpec = {};
104
+ for (const field of fields)
105
+ keySpec[field] = 1;
106
+ const indexOptions = { unique, name: indexName, background: true };
107
+ if (sparse)
108
+ indexOptions.sparse = true;
109
+ if (partialFilterNulls) {
110
+ const partialFilter = {};
111
+ for (const field of fields)
112
+ partialFilter[field] = { $exists: true };
113
+ indexOptions.partialFilterExpression = partialFilter;
114
+ }
115
+ const [compoundErr] = await (0, helper_1.catchError)(collection.createIndex(keySpec, indexOptions));
116
+ if (compoundErr) {
117
+ if (compoundErr.code === 85 || compoundErr.code === 86) {
118
+ console.log(`[Indexes] Index exists: ${className}.[${fields.join(', ')}]`);
119
+ }
120
+ else {
121
+ console.error(`[Indexes] Failed: ${className}.[${fields.join(', ')}]:`, compoundErr.message);
122
+ }
123
+ }
124
+ else {
125
+ const type = unique ? 'unique compound' : 'compound';
126
+ console.log(`[Indexes] Created ${type} index: ${className}.[${fields.join(', ')}]`);
127
+ }
128
+ }
129
+ console.log('[Indexes] Complete');
130
+ }
131
+ catch (error) {
132
+ console.error('[Indexes] Error:', error.message);
133
+ logManualIndexCommands(uniqueIndexes, compoundIndexes);
134
+ }
135
+ }
136
+ function logManualIndexCommands(indexes, compoundIndexes = []) {
137
+ console.log('[Indexes] Manual MongoDB commands:');
138
+ for (const { className, field, indexName } of indexes) {
139
+ console.log(` db.${className}.createIndex({ ${field}: 1 }, { unique: true, name: "${indexName}" })`);
140
+ }
141
+ for (const { className, fields, indexName, unique, sparse, partialFilterNulls } of compoundIndexes) {
142
+ const keySpec = fields.map(f => `${f}: 1`).join(', ');
143
+ const opts = [`name: "${indexName}"`, unique && 'unique: true', sparse && 'sparse: true'].filter(Boolean).join(', ');
144
+ console.log(` db.${className}.createIndex({ ${keySpec} }, { ${opts} })`);
145
+ }
146
+ }
147
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/database/indexes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface SchemaConfigOptions {
2
+ /** Role name that can manage _Role class. Default: 'SuperAdmin' */
3
+ adminRole?: string;
4
+ /** Lock schema in production — reject new classes/fields. Default: false */
5
+ lockSchemas?: boolean;
6
+ /** Enforce schema on start — create missing classes/fields. Default: true */
7
+ strict?: boolean;
8
+ /** Drop and recreate fields with wrong type. DANGEROUS. Default: false */
9
+ recreateModifiedFields?: boolean;
10
+ /** Delete fields not in schema. DANGEROUS. Default: false */
11
+ deleteExtraFields?: boolean;
12
+ }
13
+ /**
14
+ * Creates Parse Server schema configuration from decorator metadata.
15
+ * Reads all @ParseClass and @ParseField decorators automatically.
16
+ */
17
+ export declare function createSchemaConfig(options?: SchemaConfigOptions): {
18
+ definitions: ({
19
+ compoundIndexes?: import("../decorators/types/schemaTypes").CompoundIndex[] | undefined;
20
+ uniqueFields?: string[] | undefined;
21
+ indexes?: Record<string, Record<string, 1 | -1>> | undefined;
22
+ classLevelPermissions?: import("../decorators/types/schemaTypes").classLevelPermissions | undefined;
23
+ className: any;
24
+ fields: any;
25
+ } | {
26
+ className: string;
27
+ fields: {};
28
+ classLevelPermissions: {
29
+ find: {
30
+ [x: string]: boolean;
31
+ };
32
+ get: {
33
+ [x: string]: boolean;
34
+ };
35
+ count: {
36
+ [x: string]: boolean;
37
+ };
38
+ create: {
39
+ [x: string]: boolean;
40
+ };
41
+ update: {
42
+ [x: string]: boolean;
43
+ };
44
+ delete: {
45
+ [x: string]: boolean;
46
+ };
47
+ protectedFields: {};
48
+ };
49
+ })[];
50
+ lockSchemas: boolean;
51
+ strict: boolean;
52
+ recreateModifiedFields: boolean;
53
+ deleteExtraFields: boolean;
54
+ };
55
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCnE"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSchemaConfig = createSchemaConfig;
4
+ const parseDecorators_1 = require("../decorators/parseDecorators");
5
+ const schemaTypes_1 = require("../decorators/types/schemaTypes");
6
+ /**
7
+ * Creates Parse Server schema configuration from decorator metadata.
8
+ * Reads all @ParseClass and @ParseField decorators automatically.
9
+ */
10
+ function createSchemaConfig(options = {}) {
11
+ const { adminRole = 'SuperAdmin', lockSchemas = false, strict = true, recreateModifiedFields = false, deleteExtraFields = false, } = options;
12
+ return {
13
+ definitions: [
14
+ {
15
+ className: '_Role',
16
+ fields: {},
17
+ classLevelPermissions: {
18
+ find: { [`role:${adminRole}`]: true },
19
+ get: { [`role:${adminRole}`]: true },
20
+ count: { [`role:${adminRole}`]: true },
21
+ create: { [`role:${adminRole}`]: true },
22
+ update: { [`role:${adminRole}`]: true },
23
+ delete: { [`role:${adminRole}`]: true },
24
+ protectedFields: {},
25
+ },
26
+ },
27
+ ...schemaTypes_1.classNames.map(className => {
28
+ const classConstructor = Parse.Object.extend(className);
29
+ return (0, parseDecorators_1.getSchemaDefinition)(classConstructor);
30
+ }),
31
+ ],
32
+ lockSchemas,
33
+ strict,
34
+ recreateModifiedFields,
35
+ deleteExtraFields,
36
+ };
37
+ }
38
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":";;AAoBA,gDAkCC;AAtDD,mEAAkE;AAClE,iEAA2D;AAe3D;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,UAA+B,EAAE;IAClE,MAAM,EACJ,SAAS,GAAG,YAAY,EACxB,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,IAAI,EACb,sBAAsB,GAAG,KAAK,EAC9B,iBAAiB,GAAG,KAAK,GAC1B,GAAG,OAAO,CAAC;IAEZ,OAAO;QACL,WAAW,EAAE;YACX;gBACE,SAAS,EAAE,OAAO;gBAClB,MAAM,EAAE,EAAE;gBACV,qBAAqB,EAAE;oBACrB,IAAI,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBACnC,GAAG,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBAClC,KAAK,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBACpC,MAAM,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBACrC,MAAM,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBACrC,MAAM,EAAE,EAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAC;oBACrC,eAAe,EAAE,EAAE;iBACpB;aACF;YACD,GAAG,wBAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAC5B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACxD,OAAO,IAAA,qCAAmB,EAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC,CAAC;SACH;QACD,WAAW;QACX,MAAM;QACN,sBAAsB;QACtB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -21,6 +21,9 @@ export { catchError, getUserRoles, getUsersRoles, formatCount, generateRandomPas
21
21
  export { importFiles } from './utils/dynamicImport';
22
22
  export { validateFunctionRoutes, validateEntityRoutes, restrictRoutes, removeResultMiddleware, conditionalJsonMiddleware } from './middleware/middleware';
23
23
  export { checkRateLimit } from './middleware/rateLimit';
24
+ export { createSchemaConfig } from './database/schema';
25
+ export type { SchemaConfigOptions } from './database/schema';
26
+ export { applyUniqueIndexes, getUniqueIndexes, getCompoundIndexes } from './database/indexes';
24
27
  export { SwaggerRegistry } from './swagger/swaggerRegistry';
25
28
  export type { SwaggerModelSchema, SwaggerPropertySchema, SwaggerFunctionSchema } from './swagger/swaggerRegistry';
26
29
  export { generateSwaggerSpec, getSwaggerJson } from './swagger/swaggerSpec';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjI,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3G,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAC9E,WAAW,EAAE,UAAU,EAAE,WAAW,EACpC,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAChE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EACnF,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEpI,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtH,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1H,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAC3D,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EACnE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjI,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3G,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAC9E,WAAW,EAAE,UAAU,EAAE,WAAW,EACpC,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAChE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EACnF,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEpI,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtH,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1H,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAC3D,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EACnE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // @90soft/parse-server-kit — complete toolkit for Parse Server
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.importFiles = exports.sleep = exports.generateRandomString = exports.generateRandomInteger = exports.generateRandomPassword = exports.formatCount = exports.getUsersRoles = exports.getUserRoles = exports.catchError = exports.MAX_QUERY_LIMIT = exports.roleKey = exports.UserRoles = exports.implementACL = exports.BaseModel = exports.applyMongoValidators = exports.getValidators = exports.validateOrThrow = exports.validateObject = exports.classNames = exports.RouteRegistry = exports.Route = exports.CronRegistry = exports.CronSchedule = exports.Cron = exports.TriggerRegistry = exports.AfterEvent = exports.BeforeSubscribe = exports.BeforeConnect = exports.AfterDeleteFile = exports.BeforeDeleteFile = exports.AfterSaveFile = exports.BeforeSaveFile = exports.AfterLogout = exports.AfterLogin = exports.BeforeLogin = exports.AfterFind = exports.BeforeFind = exports.AfterDelete = exports.BeforeDelete = exports.AfterSave = exports.BeforeSave = exports.CloudFunctionRegistry = exports.onFunctionRegistered = exports.ProtectedCloudFunction = exports.CloudFunction = exports.onFieldRegistered = exports.onClassRegistered = exports.getSchemaDefinition = exports.ParseField = exports.ParseClass = void 0;
5
- exports.setupSwagger = exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = exports.checkRateLimit = exports.conditionalJsonMiddleware = exports.removeResultMiddleware = exports.restrictRoutes = exports.validateEntityRoutes = exports.validateFunctionRoutes = void 0;
5
+ exports.setupSwagger = exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = exports.getCompoundIndexes = exports.getUniqueIndexes = exports.applyUniqueIndexes = exports.createSchemaConfig = exports.checkRateLimit = exports.conditionalJsonMiddleware = exports.removeResultMiddleware = exports.restrictRoutes = exports.validateEntityRoutes = exports.validateFunctionRoutes = void 0;
6
6
  // ── Decorators ──
7
7
  var parseDecorators_1 = require("./decorators/parseDecorators");
8
8
  Object.defineProperty(exports, "ParseClass", { enumerable: true, get: function () { return parseDecorators_1.ParseClass; } });
@@ -82,6 +82,13 @@ Object.defineProperty(exports, "removeResultMiddleware", { enumerable: true, get
82
82
  Object.defineProperty(exports, "conditionalJsonMiddleware", { enumerable: true, get: function () { return middleware_1.conditionalJsonMiddleware; } });
83
83
  var rateLimit_1 = require("./middleware/rateLimit");
84
84
  Object.defineProperty(exports, "checkRateLimit", { enumerable: true, get: function () { return rateLimit_1.checkRateLimit; } });
85
+ // ── Database ──
86
+ var schema_1 = require("./database/schema");
87
+ Object.defineProperty(exports, "createSchemaConfig", { enumerable: true, get: function () { return schema_1.createSchemaConfig; } });
88
+ var indexes_1 = require("./database/indexes");
89
+ Object.defineProperty(exports, "applyUniqueIndexes", { enumerable: true, get: function () { return indexes_1.applyUniqueIndexes; } });
90
+ Object.defineProperty(exports, "getUniqueIndexes", { enumerable: true, get: function () { return indexes_1.getUniqueIndexes; } });
91
+ Object.defineProperty(exports, "getCompoundIndexes", { enumerable: true, get: function () { return indexes_1.getCompoundIndexes; } });
85
92
  // ── Swagger ──
86
93
  var swaggerRegistry_1 = require("./swagger/swaggerRegistry");
87
94
  Object.defineProperty(exports, "SwaggerRegistry", { enumerable: true, get: function () { return swaggerRegistry_1.SwaggerRegistry; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;;AAE/D,mBAAmB;AACnB,gEAAiI;AAAxH,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAG1F,8DAA0G;AAAjG,+GAAA,aAAa,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AACpE,4DAAmE;AAA1D,sHAAA,qBAAqB,OAAA;AAE9B,kEAGoF;AAH3E,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAC9E,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AACpC,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAChE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,8GAAA,UAAU,OAAA;AAC5C,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAExB,4DAA8E;AAArE,qGAAA,IAAI,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,6GAAA,YAAY,OAAA;AAEzC,8DAAmE;AAA1D,uGAAA,KAAK,OAAA;AAAE,+GAAA,aAAa,OAAA;AAE7B,cAAc;AACd,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AASnB,mBAAmB;AACnB,sEAA0H;AAAjH,iHAAA,cAAc,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7E,eAAe;AACf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAElB,0BAA0B;AAC1B,mCAA2C;AAAlC,mGAAA,YAAY,OAAA;AACrB,+CAAwE;AAA/D,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAAE,4GAAA,eAAe,OAAA;AAG5C,kBAAkB;AAClB,yCACqG;AAD5F,oGAAA,UAAU,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC3D,gHAAA,sBAAsB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,+FAAA,KAAK,OAAA;AAC5E,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,sDACqF;AAD5E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,4GAAA,cAAc,OAAA;AACnE,oHAAA,sBAAsB,OAAA;AAAE,uHAAA,yBAAyB,OAAA;AACnD,oDAAwD;AAA/C,2GAAA,cAAc,OAAA;AAEvB,gBAAgB;AAChB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AAExB,qDAA4E;AAAnE,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAC5C,yCAA+C;AAAtC,qGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;;AAE/D,mBAAmB;AACnB,gEAAiI;AAAxH,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAG1F,8DAA0G;AAAjG,+GAAA,aAAa,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AACpE,4DAAmE;AAA1D,sHAAA,qBAAqB,OAAA;AAE9B,kEAGoF;AAH3E,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAC9E,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AACpC,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAChE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,8GAAA,UAAU,OAAA;AAC5C,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAExB,4DAA8E;AAArE,qGAAA,IAAI,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,6GAAA,YAAY,OAAA;AAEzC,8DAAmE;AAA1D,uGAAA,KAAK,OAAA;AAAE,+GAAA,aAAa,OAAA;AAE7B,cAAc;AACd,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AASnB,mBAAmB;AACnB,sEAA0H;AAAjH,iHAAA,cAAc,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7E,eAAe;AACf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAElB,0BAA0B;AAC1B,mCAA2C;AAAlC,mGAAA,YAAY,OAAA;AACrB,+CAAwE;AAA/D,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAAE,4GAAA,eAAe,OAAA;AAG5C,kBAAkB;AAClB,yCACqG;AAD5F,oGAAA,UAAU,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC3D,gHAAA,sBAAsB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,+FAAA,KAAK,OAAA;AAC5E,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,sDACqF;AAD5E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,4GAAA,cAAc,OAAA;AACnE,oHAAA,sBAAsB,OAAA;AAAE,uHAAA,yBAAyB,OAAA;AACnD,oDAAwD;AAA/C,2GAAA,cAAc,OAAA;AAEvB,iBAAiB;AACjB,4CAAuD;AAA9C,4GAAA,kBAAkB,OAAA;AAE3B,8CAA8F;AAArF,6GAAA,kBAAkB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAEjE,gBAAgB;AAChB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AAExB,qDAA4E;AAAnE,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAC5C,yCAA+C;AAAtC,qGAAA,YAAY,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@90soft/parse-server-kit",
3
- "version": "2.3.1",
3
+ "version": "2.4.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",