@aphexcms/cms-core 0.1.12 → 0.1.14
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/LICENSE +21 -0
- package/dist/api/documents.d.ts +1 -0
- package/dist/api/documents.d.ts.map +1 -1
- package/dist/api/documents.js +9 -1
- package/dist/api/types.d.ts +24 -2
- package/dist/api/types.d.ts.map +1 -1
- package/dist/auth/auth-hooks.d.ts.map +1 -1
- package/dist/auth/auth-hooks.js +18 -4
- package/dist/cli/generate-types.js +218 -0
- package/dist/cli/index.js +86 -0
- package/dist/components/AdminApp.svelte +15 -12
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentEditor.svelte +60 -14
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ImageField.svelte +22 -13
- package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ReferenceField.svelte +2 -3
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +8 -1
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -1
- package/dist/db/interfaces/asset.d.ts +22 -0
- package/dist/db/interfaces/asset.d.ts.map +1 -1
- package/dist/db/interfaces/document.d.ts +25 -0
- package/dist/db/interfaces/document.d.ts.map +1 -1
- package/dist/field-validation/utils.d.ts +19 -1
- package/dist/field-validation/utils.d.ts.map +1 -1
- package/dist/field-validation/utils.js +33 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +80 -12
- package/dist/lib/auth/provider.js +1 -0
- package/dist/lib/db/index.js +4 -0
- package/dist/lib/db/interfaces/asset.js +1 -0
- package/dist/lib/db/interfaces/document.js +1 -0
- package/dist/lib/db/interfaces/index.js +1 -0
- package/dist/lib/db/interfaces/organization.js +1 -0
- package/dist/lib/db/interfaces/schema.js +1 -0
- package/dist/lib/db/interfaces/user.js +1 -0
- package/dist/lib/email/index.js +4 -0
- package/dist/lib/email/interfaces/email.js +1 -0
- package/dist/lib/field-validation/rule.js +221 -0
- package/dist/lib/field-validation/utils.js +99 -0
- package/dist/lib/storage/interfaces/index.js +2 -0
- package/dist/lib/storage/interfaces/storage.js +1 -0
- package/dist/lib/types/asset.js +2 -0
- package/dist/lib/types/auth.js +41 -0
- package/dist/lib/types/config.js +1 -0
- package/dist/lib/types/document.js +1 -0
- package/dist/lib/types/filters.js +5 -0
- package/dist/lib/types/index.js +9 -0
- package/dist/lib/types/organization.js +3 -0
- package/dist/lib/types/schemas.js +1 -0
- package/dist/lib/types/sidebar.js +1 -0
- package/dist/lib/types/user.js +1 -0
- package/dist/local-api/auth-helpers.d.ts +65 -0
- package/dist/local-api/auth-helpers.d.ts.map +1 -0
- package/dist/local-api/auth-helpers.js +102 -0
- package/dist/local-api/collection-api.d.ts +138 -0
- package/dist/local-api/collection-api.d.ts.map +1 -0
- package/dist/local-api/collection-api.js +276 -0
- package/dist/local-api/index.d.ts +108 -0
- package/dist/local-api/index.d.ts.map +1 -0
- package/dist/local-api/index.js +157 -0
- package/dist/local-api/permissions.d.ts +45 -0
- package/dist/local-api/permissions.d.ts.map +1 -0
- package/dist/local-api/permissions.js +117 -0
- package/dist/local-api/types.d.ts +65 -0
- package/dist/local-api/types.d.ts.map +1 -0
- package/dist/local-api/types.js +4 -0
- package/dist/routes/documents-by-id.d.ts.map +1 -1
- package/dist/routes/documents-by-id.js +84 -63
- package/dist/routes/documents-publish.d.ts.map +1 -1
- package/dist/routes/documents-publish.js +57 -72
- package/dist/routes/documents-query.d.ts +24 -0
- package/dist/routes/documents-query.d.ts.map +1 -0
- package/dist/routes/documents-query.js +95 -0
- package/dist/routes/documents.d.ts.map +1 -1
- package/dist/routes/documents.js +80 -75
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +2 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/types/config.d.ts +18 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/document.d.ts +1 -0
- package/dist/types/document.d.ts.map +1 -1
- package/dist/types/filters.d.ts +173 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +5 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/package.json +101 -95
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RequestHandler } from '@sveltejs/kit';
|
|
2
|
+
/**
|
|
3
|
+
* POST /api/documents/query - Advanced document querying with complex filters
|
|
4
|
+
*
|
|
5
|
+
* Accepts LocalAPI FindOptions in request body for full filtering power
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* POST /api/documents/query
|
|
9
|
+
* {
|
|
10
|
+
* "type": "page",
|
|
11
|
+
* "where": {
|
|
12
|
+
* "status": { "equals": "published" },
|
|
13
|
+
* "hero.heading": { "contains": "Welcome" },
|
|
14
|
+
* "publishedAt": { "gte": "2024-01-01" }
|
|
15
|
+
* },
|
|
16
|
+
* "limit": 20,
|
|
17
|
+
* "page": 1,
|
|
18
|
+
* "sort": ["-publishedAt", "title"],
|
|
19
|
+
* "depth": 1,
|
|
20
|
+
* "perspective": "published"
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export declare const POST: RequestHandler;
|
|
24
|
+
//# sourceMappingURL=documents-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents-query.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AASpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,IAAI,EAAE,cAqFlB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Aphex CMS Document Query API - Complex filtering with POST
|
|
2
|
+
import { json } from '@sveltejs/kit';
|
|
3
|
+
import { authToContext } from '../local-api/auth-helpers.js';
|
|
4
|
+
import { PermissionError } from '../local-api/permissions.js';
|
|
5
|
+
// Default values
|
|
6
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
7
|
+
const DEFAULT_PAGE = 1;
|
|
8
|
+
/**
|
|
9
|
+
* POST /api/documents/query - Advanced document querying with complex filters
|
|
10
|
+
*
|
|
11
|
+
* Accepts LocalAPI FindOptions in request body for full filtering power
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* POST /api/documents/query
|
|
15
|
+
* {
|
|
16
|
+
* "type": "page",
|
|
17
|
+
* "where": {
|
|
18
|
+
* "status": { "equals": "published" },
|
|
19
|
+
* "hero.heading": { "contains": "Welcome" },
|
|
20
|
+
* "publishedAt": { "gte": "2024-01-01" }
|
|
21
|
+
* },
|
|
22
|
+
* "limit": 20,
|
|
23
|
+
* "page": 1,
|
|
24
|
+
* "sort": ["-publishedAt", "title"],
|
|
25
|
+
* "depth": 1,
|
|
26
|
+
* "perspective": "published"
|
|
27
|
+
* }
|
|
28
|
+
*/
|
|
29
|
+
export const POST = async ({ request, locals }) => {
|
|
30
|
+
try {
|
|
31
|
+
const { localAPI } = locals.aphexCMS;
|
|
32
|
+
const context = authToContext(locals.auth);
|
|
33
|
+
const body = await request.json();
|
|
34
|
+
// Extract document type
|
|
35
|
+
const documentType = body.type;
|
|
36
|
+
if (!documentType) {
|
|
37
|
+
return json({
|
|
38
|
+
success: false,
|
|
39
|
+
error: 'Bad Request',
|
|
40
|
+
message: 'Document type is required in request body'
|
|
41
|
+
}, { status: 400 });
|
|
42
|
+
}
|
|
43
|
+
// Check if collection exists
|
|
44
|
+
if (!localAPI.hasCollection(documentType)) {
|
|
45
|
+
return json({
|
|
46
|
+
success: false,
|
|
47
|
+
error: 'Invalid document type',
|
|
48
|
+
message: `Collection '${documentType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
|
|
49
|
+
}, { status: 400 });
|
|
50
|
+
}
|
|
51
|
+
// Parse pagination - support both page-based and offset-based
|
|
52
|
+
const page = body.page ? Math.max(1, parseInt(body.page)) : DEFAULT_PAGE;
|
|
53
|
+
const pageSize = body.pageSize || body.limit || DEFAULT_PAGE_SIZE;
|
|
54
|
+
const offset = body.offset !== undefined ? body.offset : (page - 1) * pageSize;
|
|
55
|
+
// Build FindOptions from request body
|
|
56
|
+
const findOptions = {
|
|
57
|
+
where: body.where,
|
|
58
|
+
limit: pageSize,
|
|
59
|
+
offset: offset,
|
|
60
|
+
sort: body.sort,
|
|
61
|
+
depth: body.depth !== undefined ? Math.max(0, Math.min(body.depth, 5)) : 0,
|
|
62
|
+
select: body.select,
|
|
63
|
+
perspective: body.perspective || 'draft'
|
|
64
|
+
};
|
|
65
|
+
// Query via LocalAPI
|
|
66
|
+
const result = await localAPI.collections[documentType].find(context, findOptions);
|
|
67
|
+
return json({
|
|
68
|
+
success: true,
|
|
69
|
+
data: result.docs,
|
|
70
|
+
pagination: {
|
|
71
|
+
total: result.totalDocs,
|
|
72
|
+
page: result.page,
|
|
73
|
+
pageSize: result.limit,
|
|
74
|
+
totalPages: result.totalPages,
|
|
75
|
+
hasNextPage: result.hasNextPage,
|
|
76
|
+
hasPrevPage: result.hasPrevPage
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('Failed to query documents:', error);
|
|
82
|
+
if (error instanceof PermissionError) {
|
|
83
|
+
return json({
|
|
84
|
+
success: false,
|
|
85
|
+
error: 'Forbidden',
|
|
86
|
+
message: error.message
|
|
87
|
+
}, { status: 403 });
|
|
88
|
+
}
|
|
89
|
+
return json({
|
|
90
|
+
success: false,
|
|
91
|
+
error: 'Failed to query documents',
|
|
92
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
93
|
+
}, { status: 500 });
|
|
94
|
+
}
|
|
95
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AASpD,eAAO,MAAM,GAAG,EAAE,cAiGjB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,cAsElB,CAAC"}
|
package/dist/routes/documents.js
CHANGED
|
@@ -1,63 +1,81 @@
|
|
|
1
1
|
// Aphex CMS Document API Handlers
|
|
2
2
|
import { json } from '@sveltejs/kit';
|
|
3
|
-
import {
|
|
3
|
+
import { authToContext } from '../local-api/auth-helpers.js';
|
|
4
|
+
import { PermissionError } from '../local-api/permissions.js';
|
|
4
5
|
// Default values for API
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
// GET /api/documents -
|
|
6
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
7
|
+
const DEFAULT_PAGE = 1;
|
|
8
|
+
// GET /api/documents - Simple document listing with basic filters
|
|
8
9
|
export const GET = async ({ url, locals }) => {
|
|
9
10
|
try {
|
|
10
|
-
const {
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const { localAPI } = locals.aphexCMS;
|
|
12
|
+
const context = authToContext(locals.auth);
|
|
13
|
+
// Parse query params
|
|
14
|
+
const docType = url.searchParams.get('type') || url.searchParams.get('docType');
|
|
15
|
+
const status = url.searchParams.get('status');
|
|
16
|
+
const pageParam = url.searchParams.get('page');
|
|
17
|
+
const pageSizeParam = url.searchParams.get('pageSize') || url.searchParams.get('limit');
|
|
18
|
+
const depthParam = url.searchParams.get('depth');
|
|
19
|
+
const sortParam = url.searchParams.get('sort');
|
|
20
|
+
const perspective = url.searchParams.get('perspective') || 'draft';
|
|
21
|
+
// Parse pagination
|
|
22
|
+
const page = pageParam ? Math.max(1, parseInt(pageParam)) : DEFAULT_PAGE;
|
|
23
|
+
const pageSize = pageSizeParam ? parseInt(pageSizeParam) : DEFAULT_PAGE_SIZE;
|
|
24
|
+
const offset = (page - 1) * pageSize;
|
|
25
|
+
// Parse depth (clamp between 0-5)
|
|
26
|
+
const depth = depthParam ? Math.max(0, Math.min(parseInt(depthParam), 5)) : 0;
|
|
27
|
+
if (!docType) {
|
|
13
28
|
return json({
|
|
14
29
|
success: false,
|
|
15
|
-
error: '
|
|
16
|
-
message: '
|
|
17
|
-
}, { status:
|
|
30
|
+
error: 'Bad Request',
|
|
31
|
+
message: 'Document type is required. Use ?type=page or ?docType=page'
|
|
32
|
+
}, { status: 400 });
|
|
18
33
|
}
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
: undefined
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
depth: isNaN(depth) ? 0 : Math.max(0, Math.min(depth, 5)) // Clamp between 0-5 for safety
|
|
43
|
-
};
|
|
44
|
-
const documents = await databaseAdapter.findManyDoc(auth.organizationId, filters);
|
|
34
|
+
// Get collection API (TypeScript-safe)
|
|
35
|
+
const collection = localAPI.collections[docType];
|
|
36
|
+
if (!collection) {
|
|
37
|
+
return json({
|
|
38
|
+
success: false,
|
|
39
|
+
error: 'Invalid document type',
|
|
40
|
+
message: `Collection '${docType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
|
|
41
|
+
}, { status: 400 });
|
|
42
|
+
}
|
|
43
|
+
// Build where clause from query params
|
|
44
|
+
const where = {};
|
|
45
|
+
if (status) {
|
|
46
|
+
where.status = { equals: status };
|
|
47
|
+
}
|
|
48
|
+
// Query via LocalAPI
|
|
49
|
+
const result = await collection.find(context, {
|
|
50
|
+
where: Object.keys(where).length > 0 ? where : undefined,
|
|
51
|
+
limit: pageSize,
|
|
52
|
+
offset: offset,
|
|
53
|
+
depth: depth,
|
|
54
|
+
sort: sortParam || undefined,
|
|
55
|
+
perspective
|
|
56
|
+
});
|
|
45
57
|
return json({
|
|
46
58
|
success: true,
|
|
47
|
-
data:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
59
|
+
data: result.docs,
|
|
60
|
+
pagination: {
|
|
61
|
+
total: result.totalDocs,
|
|
62
|
+
page: result.page,
|
|
63
|
+
pageSize: result.limit,
|
|
64
|
+
totalPages: result.totalPages,
|
|
65
|
+
hasNextPage: result.hasNextPage,
|
|
66
|
+
hasPrevPage: result.hasPrevPage
|
|
56
67
|
}
|
|
57
68
|
});
|
|
58
69
|
}
|
|
59
70
|
catch (error) {
|
|
60
71
|
console.error('Failed to fetch documents:', error);
|
|
72
|
+
if (error instanceof PermissionError) {
|
|
73
|
+
return json({
|
|
74
|
+
success: false,
|
|
75
|
+
error: 'Forbidden',
|
|
76
|
+
message: error.message
|
|
77
|
+
}, { status: 403 });
|
|
78
|
+
}
|
|
61
79
|
return json({
|
|
62
80
|
success: false,
|
|
63
81
|
error: 'Failed to fetch documents',
|
|
@@ -68,27 +86,13 @@ export const GET = async ({ url, locals }) => {
|
|
|
68
86
|
// POST /api/documents - Create new document
|
|
69
87
|
export const POST = async ({ request, locals }) => {
|
|
70
88
|
try {
|
|
71
|
-
const {
|
|
72
|
-
const
|
|
73
|
-
if (!auth) {
|
|
74
|
-
return json({
|
|
75
|
-
success: false,
|
|
76
|
-
error: 'Unauthorized',
|
|
77
|
-
message: 'Authentication required'
|
|
78
|
-
}, { status: 401 });
|
|
79
|
-
}
|
|
80
|
-
// Check write permissions (viewers are read-only)
|
|
81
|
-
if (!canWrite(auth)) {
|
|
82
|
-
return json({
|
|
83
|
-
success: false,
|
|
84
|
-
error: 'Forbidden',
|
|
85
|
-
message: 'You do not have permission to create documents. Viewers have read-only access.'
|
|
86
|
-
}, { status: 403 });
|
|
87
|
-
}
|
|
89
|
+
const { localAPI } = locals.aphexCMS;
|
|
90
|
+
const context = authToContext(locals.auth);
|
|
88
91
|
const body = await request.json();
|
|
89
92
|
// Validate required fields (support both old and new format)
|
|
90
93
|
const documentType = body.type;
|
|
91
94
|
const documentData = body.draftData || body.data;
|
|
95
|
+
const shouldPublish = body.publish || false;
|
|
92
96
|
if (!documentType || !documentData) {
|
|
93
97
|
return json({
|
|
94
98
|
success: false,
|
|
@@ -96,24 +100,18 @@ export const POST = async ({ request, locals }) => {
|
|
|
96
100
|
message: 'Document type and data are required'
|
|
97
101
|
}, { status: 400 });
|
|
98
102
|
}
|
|
99
|
-
//
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
if (!schema) {
|
|
103
|
+
// Get collection API (TypeScript-safe)
|
|
104
|
+
const collection = localAPI.collections[documentType];
|
|
105
|
+
if (!collection) {
|
|
103
106
|
return json({
|
|
104
107
|
success: false,
|
|
105
108
|
error: 'Invalid document type',
|
|
106
|
-
message: `
|
|
109
|
+
message: `Collection '${documentType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
|
|
107
110
|
}, { status: 400 });
|
|
108
111
|
}
|
|
109
|
-
//
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const newDocument = await databaseAdapter.createDocument({
|
|
113
|
-
type: documentType,
|
|
114
|
-
draftData: documentData,
|
|
115
|
-
organizationId: auth.organizationId,
|
|
116
|
-
createdBy: auth.type === 'session' ? auth.user.id : undefined
|
|
112
|
+
// Create via LocalAPI (permission checks happen inside)
|
|
113
|
+
const newDocument = await collection.create(context, documentData, {
|
|
114
|
+
publish: shouldPublish
|
|
117
115
|
});
|
|
118
116
|
return json({
|
|
119
117
|
success: true,
|
|
@@ -122,6 +120,13 @@ export const POST = async ({ request, locals }) => {
|
|
|
122
120
|
}
|
|
123
121
|
catch (error) {
|
|
124
122
|
console.error('Failed to create document:', error);
|
|
123
|
+
if (error instanceof PermissionError) {
|
|
124
|
+
return json({
|
|
125
|
+
success: false,
|
|
126
|
+
error: 'Forbidden',
|
|
127
|
+
message: error.message
|
|
128
|
+
}, { status: 403 });
|
|
129
|
+
}
|
|
125
130
|
return json({
|
|
126
131
|
success: false,
|
|
127
132
|
error: 'Failed to create document',
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * as documents from './documents.js';
|
|
2
2
|
export * as documentsById from './documents-by-id.js';
|
|
3
|
+
export * as documentsQuery from './documents-query.js';
|
|
4
|
+
export * as documentsPublish from './documents-publish.js';
|
|
3
5
|
export * as assets from './assets.js';
|
|
4
6
|
export * as schemas from './schemas.js';
|
|
5
7
|
export * as schemasByType from './schemas-by-type.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAGnC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC"}
|
package/dist/routes/index.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
// Document management routes
|
|
4
4
|
export * as documents from './documents.js';
|
|
5
5
|
export * as documentsById from './documents-by-id.js';
|
|
6
|
+
export * as documentsQuery from './documents-query.js';
|
|
7
|
+
export * as documentsPublish from './documents-publish.js';
|
|
6
8
|
// Asset management routes
|
|
7
9
|
export * as assets from './assets.js';
|
|
8
10
|
// Schema information routes
|
package/dist/server/index.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export { AssetService } from '../services/asset-service.js';
|
|
|
13
13
|
export * from '../routes-exports.js';
|
|
14
14
|
export * from '../schema-utils/index.js';
|
|
15
15
|
export { createHashForPublishing } from '../utils/content-hash.js';
|
|
16
|
+
export { LocalAPI, createLocalAPI, getLocalAPI, CollectionAPI, PermissionChecker, PermissionError, type Collections, type LocalAPIContext, type CreateOptions, type UpdateOptions } from '../local-api/index.js';
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/server/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAG5D,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/server/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAG5D,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,MAAM,oBAAoB,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -26,3 +26,5 @@ export * from '../routes-exports.js';
|
|
|
26
26
|
export * from '../schema-utils/index.js';
|
|
27
27
|
// Content hash utilities (server-side)
|
|
28
28
|
export { createHashForPublishing } from '../utils/content-hash.js';
|
|
29
|
+
// Local API (unified operations layer)
|
|
30
|
+
export { LocalAPI, createLocalAPI, getLocalAPI, CollectionAPI, PermissionChecker, PermissionError } from '../local-api/index.js';
|
package/dist/types/config.d.ts
CHANGED
|
@@ -14,6 +14,23 @@ export interface CMSPlugin {
|
|
|
14
14
|
[key: string]: any;
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Plugin reference with options
|
|
19
|
+
* Example: { name: '@aphexcms/graphql-plugin', options: { endpoint: '/api/graphql' } }
|
|
20
|
+
*/
|
|
21
|
+
export interface CMSPluginReference {
|
|
22
|
+
name: string;
|
|
23
|
+
options?: {
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Plugin configuration - supports three formats:
|
|
29
|
+
* 1. String reference: '@aphexcms/graphql-plugin' (loaded at runtime)
|
|
30
|
+
* 2. Plugin reference with options: { name: '@aphexcms/graphql-plugin', options: {...} }
|
|
31
|
+
* 3. Instantiated plugin: createGraphQLPlugin({...}) (traditional, but causes large bundles)
|
|
32
|
+
*/
|
|
33
|
+
export type CMSPluginConfig = string | CMSPluginReference | CMSPlugin;
|
|
17
34
|
export interface CMSConfig {
|
|
18
35
|
schemaTypes: SchemaType[];
|
|
19
36
|
database: DatabaseAdapter;
|
|
@@ -30,7 +47,7 @@ export interface CMSConfig {
|
|
|
30
47
|
fonts?: Record<string, string>;
|
|
31
48
|
};
|
|
32
49
|
};
|
|
33
|
-
plugins?:
|
|
50
|
+
plugins?: CMSPluginConfig[];
|
|
34
51
|
auth?: {
|
|
35
52
|
provider: AuthProvider;
|
|
36
53
|
loginUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/types/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC1E,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE;YACV,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,KAAK,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC/B,CAAC;KACF,CAAC;IACF,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/types/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC1E,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,SAAS;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE;YACV,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,KAAK,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC/B,CAAC;KACF,CAAC;IACF,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE;QACN,QAAQ,EAAE,YAAY,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE;QACV;;;;WAIG;QACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACF"}
|
package/dist/types/document.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/lib/types/document.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/lib/types/document.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valid filter value types
|
|
3
|
+
*/
|
|
4
|
+
export type FilterValue = string | number | boolean | Date | null;
|
|
5
|
+
/**
|
|
6
|
+
* Field filter operators with type-safe constraints
|
|
7
|
+
* Each adapter will parse these into their specific query language
|
|
8
|
+
*/
|
|
9
|
+
export interface FieldFilter<T = unknown> {
|
|
10
|
+
equals?: T;
|
|
11
|
+
not_equals?: T;
|
|
12
|
+
in?: T[];
|
|
13
|
+
not_in?: T[];
|
|
14
|
+
exists?: boolean;
|
|
15
|
+
greater_than?: T extends number | Date ? T : number | Date;
|
|
16
|
+
greater_than_equal?: T extends number | Date ? T : number | Date;
|
|
17
|
+
less_than?: T extends number | Date ? T : number | Date;
|
|
18
|
+
less_than_equal?: T extends number | Date ? T : number | Date;
|
|
19
|
+
like?: T extends string ? string : string;
|
|
20
|
+
contains?: T extends string ? string : string;
|
|
21
|
+
starts_with?: T extends string ? string : string;
|
|
22
|
+
ends_with?: T extends string ? string : string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* WHERE clause for filtering (database-agnostic)
|
|
26
|
+
* Each adapter will parse this into their specific query language
|
|
27
|
+
*
|
|
28
|
+
* Examples:
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Simple field filters
|
|
31
|
+
* { title: { contains: 'blog' } }
|
|
32
|
+
* { status: { equals: 'published' } }
|
|
33
|
+
*
|
|
34
|
+
* // Multiple conditions (implicit AND)
|
|
35
|
+
* {
|
|
36
|
+
* status: { equals: 'published' },
|
|
37
|
+
* publishedAt: { greater_than: new Date('2024-01-01') }
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // Nested OR logic
|
|
41
|
+
* {
|
|
42
|
+
* status: { equals: 'published' },
|
|
43
|
+
* or: [
|
|
44
|
+
* { 'author.name': { equals: 'John' } },
|
|
45
|
+
* { 'author.name': { equals: 'Jane' } }
|
|
46
|
+
* ]
|
|
47
|
+
* }
|
|
48
|
+
*
|
|
49
|
+
* // Nested AND logic
|
|
50
|
+
* {
|
|
51
|
+
* and: [
|
|
52
|
+
* { 'seo.title': { contains: 'blog' } },
|
|
53
|
+
* { content: { exists: true } }
|
|
54
|
+
* ]
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export interface Where<T = unknown> {
|
|
59
|
+
and?: Where<T>[];
|
|
60
|
+
or?: Where<T>[];
|
|
61
|
+
[field: string]: FieldFilter<unknown> | FilterValue | FieldFilter<unknown>[] | Where<T>[] | undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Helper type to flatten object into dot-notation paths
|
|
65
|
+
* Limits depth to 3 levels to avoid infinite recursion and improve performance
|
|
66
|
+
*/
|
|
67
|
+
type DotNotation<T, D extends number = 3> = D extends 0 ? never : T extends object ? {
|
|
68
|
+
[K in keyof T & string]: K | (T[K] extends object ? T[K] extends Array<any> ? never : `${K}.${DotNotation<T[K], Prev[D]>}` : never);
|
|
69
|
+
}[keyof T & string] : never;
|
|
70
|
+
type Prev = [never, 0, 1, 2, 3];
|
|
71
|
+
/**
|
|
72
|
+
* Helper type to extract the value type at a given path
|
|
73
|
+
* Handles both direct keys and dot-notation paths
|
|
74
|
+
*/
|
|
75
|
+
type PathValue<T, P> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? PathValue<T[K], Rest> : unknown : P extends keyof T ? T[P] : unknown;
|
|
76
|
+
/**
|
|
77
|
+
* Type-safe WHERE clause with autocomplete for field names
|
|
78
|
+
* Provides autocomplete for known fields while still allowing dynamic field names
|
|
79
|
+
*/
|
|
80
|
+
export type WhereTyped<T> = {
|
|
81
|
+
and?: WhereTyped<T>[];
|
|
82
|
+
or?: WhereTyped<T>[];
|
|
83
|
+
} & {
|
|
84
|
+
[K in DotNotation<T> | (keyof T & string)]?: FieldFilter<PathValue<T, K>> | FilterValue;
|
|
85
|
+
} & {
|
|
86
|
+
[field: string]: FieldFilter<unknown> | FilterValue | WhereTyped<T>[] | undefined;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Options for find operations (database-agnostic)
|
|
90
|
+
*/
|
|
91
|
+
export interface FindOptions<T = unknown> {
|
|
92
|
+
/**
|
|
93
|
+
* Filter conditions
|
|
94
|
+
* When T is provided, you get autocomplete on field names!
|
|
95
|
+
*/
|
|
96
|
+
where?: WhereTyped<T>;
|
|
97
|
+
/**
|
|
98
|
+
* Maximum number of results to return
|
|
99
|
+
* @default 50
|
|
100
|
+
*/
|
|
101
|
+
limit?: number;
|
|
102
|
+
/**
|
|
103
|
+
* Number of results to skip (for pagination)
|
|
104
|
+
* @default 0
|
|
105
|
+
*/
|
|
106
|
+
offset?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Sort order
|
|
109
|
+
* - Single field: 'title' (ascending) or '-publishedAt' (descending)
|
|
110
|
+
* - Multiple fields: ['title', '-publishedAt']
|
|
111
|
+
*/
|
|
112
|
+
sort?: string | string[];
|
|
113
|
+
/**
|
|
114
|
+
* Reference resolution depth
|
|
115
|
+
* - 0: No reference resolution
|
|
116
|
+
* - 1: Resolve first-level references
|
|
117
|
+
* - 2: Resolve second-level references
|
|
118
|
+
* @default 0
|
|
119
|
+
*/
|
|
120
|
+
depth?: number;
|
|
121
|
+
/**
|
|
122
|
+
* Field selection (projection)
|
|
123
|
+
* - Only return specified fields
|
|
124
|
+
* - Example: ['id', 'title', 'slug']
|
|
125
|
+
*/
|
|
126
|
+
select?: string[];
|
|
127
|
+
/**
|
|
128
|
+
* Perspective to query
|
|
129
|
+
* - 'draft': Query draft data
|
|
130
|
+
* - 'published': Query published data
|
|
131
|
+
* @default 'draft'
|
|
132
|
+
*/
|
|
133
|
+
perspective?: 'draft' | 'published';
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Result from find operations with pagination metadata
|
|
137
|
+
*/
|
|
138
|
+
export interface FindResult<T> {
|
|
139
|
+
/**
|
|
140
|
+
* Array of documents matching the query
|
|
141
|
+
*/
|
|
142
|
+
docs: T[];
|
|
143
|
+
/**
|
|
144
|
+
* Total number of documents matching the query (without limit/offset)
|
|
145
|
+
*/
|
|
146
|
+
totalDocs: number;
|
|
147
|
+
/**
|
|
148
|
+
* Maximum number of results returned per page
|
|
149
|
+
*/
|
|
150
|
+
limit: number;
|
|
151
|
+
/**
|
|
152
|
+
* Number of results skipped
|
|
153
|
+
*/
|
|
154
|
+
offset: number;
|
|
155
|
+
/**
|
|
156
|
+
* Current page number (1-indexed)
|
|
157
|
+
*/
|
|
158
|
+
page: number;
|
|
159
|
+
/**
|
|
160
|
+
* Total number of pages
|
|
161
|
+
*/
|
|
162
|
+
totalPages: number;
|
|
163
|
+
/**
|
|
164
|
+
* Whether there is a next page
|
|
165
|
+
*/
|
|
166
|
+
hasNextPage: boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Whether there is a previous page
|
|
169
|
+
*/
|
|
170
|
+
hasPrevPage: boolean;
|
|
171
|
+
}
|
|
172
|
+
export {};
|
|
173
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/lib/types/filters.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
package/dist/types/index.js
CHANGED