@withstudiocms/sdk 0.0.0-beta.0 → 0.1.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/LICENSE +21 -0
- package/README.md +21 -0
- package/dist/cache.d.ts +109 -0
- package/dist/cache.js +94 -0
- package/dist/consts.d.ts +37 -0
- package/dist/consts.js +35 -0
- package/dist/context.d.ts +208 -0
- package/dist/context.js +40 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.js +6 -0
- package/dist/index.d.ts +1024 -0
- package/dist/index.js +24 -0
- package/dist/lib/diff.d.ts +39 -0
- package/dist/lib/diff.js +29 -0
- package/dist/lib/logger.d.ts +31 -0
- package/dist/lib/logger.js +131 -0
- package/dist/lib/pluginUtils.d.ts +222 -0
- package/dist/lib/pluginUtils.js +87 -0
- package/dist/lib/storage-manager.d.ts +10 -0
- package/dist/lib/storage-manager.js +17 -0
- package/dist/migrations/20251025T040912_init.d.ts +17 -0
- package/dist/migrations/20251025T040912_init.js +260 -0
- package/dist/migrations/20251130T150847_drop_deprecated.d.ts +13 -0
- package/dist/migrations/20251130T150847_drop_deprecated.js +262 -0
- package/dist/migrations/20251221T002125_url-mapping.d.ts +13 -0
- package/dist/migrations/20251221T002125_url-mapping.js +228 -0
- package/dist/migrator.d.ts +25 -0
- package/dist/migrator.js +21 -0
- package/dist/modules/auth/index.d.ts +419 -0
- package/dist/modules/auth/index.js +436 -0
- package/dist/modules/clear/index.d.ts +72 -0
- package/dist/modules/clear/index.js +52 -0
- package/dist/modules/config/consts.d.ts +32 -0
- package/dist/modules/config/consts.js +18 -0
- package/dist/modules/config/index.d.ts +100 -0
- package/dist/modules/config/index.js +224 -0
- package/dist/modules/config/templates/mailer.d.ts +36 -0
- package/dist/modules/config/templates/mailer.js +218 -0
- package/dist/modules/config/type-utils.d.ts +13 -0
- package/dist/modules/config/type-utils.js +11 -0
- package/dist/modules/delete/index.d.ts +141 -0
- package/dist/modules/delete/index.js +279 -0
- package/dist/modules/diffTracking/index.d.ts +188 -0
- package/dist/modules/diffTracking/index.js +277 -0
- package/dist/modules/get/index.d.ts +372 -0
- package/dist/modules/get/index.js +579 -0
- package/dist/modules/index.d.ts +883 -0
- package/dist/modules/index.js +37 -0
- package/dist/modules/init/index.d.ts +60 -0
- package/dist/modules/init/index.js +38 -0
- package/dist/modules/middleware/index.d.ts +56 -0
- package/dist/modules/middleware/index.js +50 -0
- package/dist/modules/notificationSettings/index.d.ts +57 -0
- package/dist/modules/notificationSettings/index.js +39 -0
- package/dist/modules/plugins/index.d.ts +167 -0
- package/dist/modules/plugins/index.js +272 -0
- package/dist/modules/post/index.d.ts +306 -0
- package/dist/modules/post/index.js +337 -0
- package/dist/modules/resetTokenBucket/index.d.ts +91 -0
- package/dist/modules/resetTokenBucket/index.js +96 -0
- package/dist/modules/rest_api/index.d.ts +92 -0
- package/dist/modules/rest_api/index.js +117 -0
- package/dist/modules/update/index.d.ts +184 -0
- package/dist/modules/update/index.js +192 -0
- package/dist/modules/util/collectors.d.ts +125 -0
- package/dist/modules/util/collectors.js +168 -0
- package/dist/modules/util/folderTree.d.ts +100 -0
- package/dist/modules/util/folderTree.js +176 -0
- package/dist/modules/util/generators.d.ts +83 -0
- package/dist/modules/util/generators.js +106 -0
- package/dist/modules/util/getFromNPM.d.ts +199 -0
- package/dist/modules/util/getFromNPM.js +106 -0
- package/dist/modules/util/index.d.ts +100 -0
- package/dist/modules/util/index.js +20 -0
- package/dist/modules/util/parsers.d.ts +60 -0
- package/dist/modules/util/parsers.js +43 -0
- package/dist/modules/util/slugify.d.ts +22 -0
- package/dist/modules/util/slugify.js +19 -0
- package/dist/modules/util/users.d.ts +99 -0
- package/dist/modules/util/users.js +78 -0
- package/dist/tables.d.ts +433 -0
- package/dist/tables.js +169 -0
- package/dist/types.d.ts +359 -0
- package/dist/types.js +10 -0
- package/package.json +67 -7
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
import { Effect, Schema } from "@withstudiocms/effect";
|
|
2
|
+
import CacheService from "../../cache.js";
|
|
3
|
+
import { cacheKeyGetters, cacheTags } from "../../consts.js";
|
|
4
|
+
import { DBClientLive, SDKDefaults } from "../../context.js";
|
|
5
|
+
import {
|
|
6
|
+
StudioCMSPageData,
|
|
7
|
+
StudioCMSPageDataCategories,
|
|
8
|
+
StudioCMSPageDataTags,
|
|
9
|
+
StudioCMSPageFolderStructure,
|
|
10
|
+
StudioCMSPermissions,
|
|
11
|
+
StudioCMSUsersTable
|
|
12
|
+
} from "../../tables.js";
|
|
13
|
+
import SDKConfigModule from "../config/index.js";
|
|
14
|
+
import { SDKCollectors } from "../util/collectors.js";
|
|
15
|
+
import { SDKFolderTree } from "../util/folderTree.js";
|
|
16
|
+
import { GetFromNPM } from "../util/getFromNPM.js";
|
|
17
|
+
import { SDKUsers } from "../util/users.js";
|
|
18
|
+
const ranks = ["owner", "admin", "editor", "visitor"];
|
|
19
|
+
class PaginateError extends Error {
|
|
20
|
+
_tag = "PaginateError";
|
|
21
|
+
}
|
|
22
|
+
class KillSwitch {
|
|
23
|
+
_tag = "KillSwitch";
|
|
24
|
+
}
|
|
25
|
+
const SDKGetModule = Effect.gen(function* () {
|
|
26
|
+
const [
|
|
27
|
+
{ withCodec, withDecoder },
|
|
28
|
+
{ verifyRank, combineRanks },
|
|
29
|
+
{ collectUserData, collectPageData },
|
|
30
|
+
{ siteConfig: sdkSiteConfig },
|
|
31
|
+
{ GhostUserDefaults },
|
|
32
|
+
{ memoize },
|
|
33
|
+
{ buildFolderTree, getAvailableFolders, addPageToFolderTree },
|
|
34
|
+
{ getVersion }
|
|
35
|
+
] = yield* Effect.all([
|
|
36
|
+
DBClientLive,
|
|
37
|
+
SDKUsers,
|
|
38
|
+
SDKCollectors,
|
|
39
|
+
SDKConfigModule,
|
|
40
|
+
SDKDefaults,
|
|
41
|
+
CacheService,
|
|
42
|
+
SDKFolderTree,
|
|
43
|
+
GetFromNPM
|
|
44
|
+
]);
|
|
45
|
+
const _getUsers = withDecoder({
|
|
46
|
+
decoder: Schema.Array(StudioCMSUsersTable.Select),
|
|
47
|
+
callbackFn: (db) => db((client) => client.selectFrom("StudioCMSUsersTable").selectAll().execute())
|
|
48
|
+
});
|
|
49
|
+
const _getUserById = withCodec({
|
|
50
|
+
encoder: Schema.String,
|
|
51
|
+
decoder: Schema.UndefinedOr(StudioCMSUsersTable.Select),
|
|
52
|
+
callbackFn: (db, userId) => db(
|
|
53
|
+
(client) => client.selectFrom("StudioCMSUsersTable").selectAll().where("id", "=", userId).executeTakeFirst()
|
|
54
|
+
)
|
|
55
|
+
});
|
|
56
|
+
const _getUserByUsername = withCodec({
|
|
57
|
+
encoder: Schema.String,
|
|
58
|
+
decoder: Schema.UndefinedOr(StudioCMSUsersTable.Select),
|
|
59
|
+
callbackFn: (db, username) => db(
|
|
60
|
+
(client) => client.selectFrom("StudioCMSUsersTable").selectAll().where("username", "=", username).executeTakeFirst()
|
|
61
|
+
)
|
|
62
|
+
});
|
|
63
|
+
const _getUserByEmail = withCodec({
|
|
64
|
+
encoder: Schema.String,
|
|
65
|
+
decoder: Schema.UndefinedOr(StudioCMSUsersTable.Select),
|
|
66
|
+
callbackFn: (db, email) => db(
|
|
67
|
+
(client) => client.selectFrom("StudioCMSUsersTable").selectAll().where("email", "=", email).executeTakeFirst()
|
|
68
|
+
)
|
|
69
|
+
});
|
|
70
|
+
const _getCurrentPermissions = withDecoder({
|
|
71
|
+
decoder: Schema.Array(StudioCMSPermissions.Select),
|
|
72
|
+
callbackFn: (db) => db((client) => client.selectFrom("StudioCMSPermissions").selectAll().execute())
|
|
73
|
+
});
|
|
74
|
+
const _getFolder = withCodec({
|
|
75
|
+
encoder: Schema.String,
|
|
76
|
+
decoder: Schema.UndefinedOr(StudioCMSPageFolderStructure.Select),
|
|
77
|
+
callbackFn: (db, folderId) => db(
|
|
78
|
+
(client) => client.selectFrom("StudioCMSPageFolderStructure").selectAll().where("id", "=", folderId).executeTakeFirst()
|
|
79
|
+
)
|
|
80
|
+
});
|
|
81
|
+
const _getAllPagesPaginated = withCodec({
|
|
82
|
+
encoder: Schema.Struct({
|
|
83
|
+
limit: Schema.Number,
|
|
84
|
+
offset: Schema.Number
|
|
85
|
+
}),
|
|
86
|
+
decoder: Schema.Array(StudioCMSPageData.Select),
|
|
87
|
+
callbackFn: (db, { limit, offset }) => db(
|
|
88
|
+
(client) => client.selectFrom("StudioCMSPageData").selectAll().orderBy("title", "asc").limit(limit).offset(offset).execute()
|
|
89
|
+
)
|
|
90
|
+
});
|
|
91
|
+
const _getAllPagesBase = withDecoder({
|
|
92
|
+
decoder: Schema.Array(StudioCMSPageData.Select),
|
|
93
|
+
callbackFn: (db) => db(
|
|
94
|
+
(client) => client.selectFrom("StudioCMSPageData").selectAll().orderBy("title", "asc").execute()
|
|
95
|
+
)
|
|
96
|
+
});
|
|
97
|
+
const _getPageByIdFromDB = withCodec({
|
|
98
|
+
encoder: Schema.String,
|
|
99
|
+
decoder: Schema.UndefinedOr(StudioCMSPageData.Select),
|
|
100
|
+
callbackFn: (db, pageId) => db(
|
|
101
|
+
(client) => client.selectFrom("StudioCMSPageData").selectAll().where("id", "=", pageId).executeTakeFirst()
|
|
102
|
+
)
|
|
103
|
+
});
|
|
104
|
+
const _getPageBySlugFromDB = withCodec({
|
|
105
|
+
encoder: Schema.String,
|
|
106
|
+
decoder: Schema.UndefinedOr(StudioCMSPageData.Select),
|
|
107
|
+
callbackFn: (db, slug) => db(
|
|
108
|
+
(client) => client.selectFrom("StudioCMSPageData").selectAll().where("slug", "=", slug).executeTakeFirst()
|
|
109
|
+
)
|
|
110
|
+
});
|
|
111
|
+
const _getPageByPackageFromDB = withCodec({
|
|
112
|
+
encoder: Schema.String,
|
|
113
|
+
decoder: Schema.UndefinedOr(StudioCMSPageData.Select),
|
|
114
|
+
callbackFn: (db, packageId) => db(
|
|
115
|
+
(client) => client.selectFrom("StudioCMSPageData").selectAll().where("package", "=", packageId).executeTakeFirst()
|
|
116
|
+
)
|
|
117
|
+
});
|
|
118
|
+
const _getFolderByNameOrId = withCodec({
|
|
119
|
+
encoder: Schema.String,
|
|
120
|
+
decoder: StudioCMSPageFolderStructure.Select,
|
|
121
|
+
callbackFn: (db, folderId) => db(
|
|
122
|
+
(client) => client.selectFrom("StudioCMSPageFolderStructure").selectAll().where((eb) => eb.or([eb("id", "=", folderId), eb("name", "=", folderId)])).executeTakeFirstOrThrow()
|
|
123
|
+
)
|
|
124
|
+
});
|
|
125
|
+
const _verifyRank = (rank) => Effect.fn(
|
|
126
|
+
({
|
|
127
|
+
users,
|
|
128
|
+
permissions
|
|
129
|
+
}) => verifyRank(users, permissions, rank)
|
|
130
|
+
);
|
|
131
|
+
const _getPermissionsByRank = (rank) => Effect.all({
|
|
132
|
+
permissions: _getCurrentPermissions(),
|
|
133
|
+
users: _getUsers()
|
|
134
|
+
}).pipe(Effect.flatMap(_verifyRank(rank)));
|
|
135
|
+
const _combineRanks = ([rank, users]) => combineRanks(rank, users);
|
|
136
|
+
const _processAndVerifyRanks = (ranks2) => Effect.fn(
|
|
137
|
+
({
|
|
138
|
+
users,
|
|
139
|
+
permissions
|
|
140
|
+
}) => Effect.forEach(
|
|
141
|
+
ranks2,
|
|
142
|
+
(rank) => verifyRank(users, permissions, rank).pipe(Effect.map((res) => [rank, res]))
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
const _getCombinedRanks = Effect.fn(
|
|
146
|
+
() => Effect.all({
|
|
147
|
+
permissions: _getCurrentPermissions(),
|
|
148
|
+
users: _getUsers()
|
|
149
|
+
}).pipe(
|
|
150
|
+
Effect.flatMap(_processAndVerifyRanks(ranks)),
|
|
151
|
+
Effect.flatMap(Effect.forEach(_combineRanks)),
|
|
152
|
+
Effect.map((data) => data.flat())
|
|
153
|
+
)
|
|
154
|
+
);
|
|
155
|
+
const _filterOutGhostUser = Effect.fn(
|
|
156
|
+
(users) => Effect.succeed(users.filter((user) => user.id !== GhostUserDefaults.id))
|
|
157
|
+
);
|
|
158
|
+
const _getAllUsers = Effect.fn(
|
|
159
|
+
() => _getUsers().pipe(
|
|
160
|
+
Effect.flatMap(_filterOutGhostUser),
|
|
161
|
+
Effect.flatMap(Effect.forEach(collectUserData))
|
|
162
|
+
)
|
|
163
|
+
);
|
|
164
|
+
const _getUserByIdExposed = Effect.fn(
|
|
165
|
+
(userId) => _getUserById(userId).pipe(
|
|
166
|
+
Effect.flatMap((user) => user ? collectUserData(user) : Effect.succeed(void 0))
|
|
167
|
+
)
|
|
168
|
+
);
|
|
169
|
+
const _getUserByUsernameExposed = Effect.fn(
|
|
170
|
+
(username) => _getUserByUsername(username).pipe(
|
|
171
|
+
Effect.flatMap((user) => user ? collectUserData(user) : Effect.succeed(void 0))
|
|
172
|
+
)
|
|
173
|
+
);
|
|
174
|
+
const _getUserByEmailExposed = Effect.fn(
|
|
175
|
+
(email) => _getUserByEmail(email).pipe(
|
|
176
|
+
Effect.flatMap((user) => user ? collectUserData(user) : Effect.succeed(void 0))
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
const validatePagination = Effect.fn(function* (paginate) {
|
|
180
|
+
if (paginate.limit < 0 || paginate.offset < 0) {
|
|
181
|
+
return yield* Effect.fail(new PaginateError("Pagination values must be non-negative"));
|
|
182
|
+
}
|
|
183
|
+
if (paginate.limit === 0) {
|
|
184
|
+
paginate.limit = 10;
|
|
185
|
+
}
|
|
186
|
+
return paginate;
|
|
187
|
+
});
|
|
188
|
+
const __filterPagesByDraft = Effect.fn(
|
|
189
|
+
(pages, includeDrafts) => Effect.succeed(pages.filter(({ draft }) => includeDrafts || draft !== true))
|
|
190
|
+
);
|
|
191
|
+
function convertCombinedPageDataToMetaOnly(data) {
|
|
192
|
+
if (Array.isArray(data)) {
|
|
193
|
+
return data.map(
|
|
194
|
+
({ defaultContent, multiLangContent, ...data2 }) => data2
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
const { defaultContent: _dump1, multiLangContent: _dump2, ...metaOnlyData } = data;
|
|
198
|
+
return metaOnlyData;
|
|
199
|
+
}
|
|
200
|
+
const __getPagesPossiblyPaginated = (paginate) => paginate ? validatePagination(paginate).pipe(Effect.flatMap(_getAllPagesPaginated)) : _getAllPagesBase();
|
|
201
|
+
function _getAllPages(includeDrafts = false, metaOnly = false, paginate) {
|
|
202
|
+
return __getPagesPossiblyPaginated(paginate).pipe(
|
|
203
|
+
Effect.flatMap(
|
|
204
|
+
(pagesRaw) => Effect.all({
|
|
205
|
+
pages: __filterPagesByDraft(pagesRaw, includeDrafts),
|
|
206
|
+
tree: GET.folderTree()
|
|
207
|
+
})
|
|
208
|
+
),
|
|
209
|
+
Effect.flatMap(
|
|
210
|
+
({ pages, tree }) => Effect.forEach(
|
|
211
|
+
pages,
|
|
212
|
+
(page) => memoize(cacheKeyGetters.page(page.id), collectPageData(page, tree), {
|
|
213
|
+
tags: cacheTags.pages
|
|
214
|
+
})
|
|
215
|
+
)
|
|
216
|
+
),
|
|
217
|
+
Effect.map((data) => metaOnly ? convertCombinedPageDataToMetaOnly(data) : data)
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
function _getPageById(id, metaOnly = false) {
|
|
221
|
+
return _getPageByIdFromDB(id).pipe(
|
|
222
|
+
Effect.flatMap((page) => page ? Effect.succeed(page) : Effect.fail(new KillSwitch())),
|
|
223
|
+
Effect.flatMap(
|
|
224
|
+
(page) => GET.folderTree().pipe(
|
|
225
|
+
Effect.flatMap(
|
|
226
|
+
(tree) => memoize(cacheKeyGetters.page(page.id), collectPageData(page, tree), {
|
|
227
|
+
tags: cacheTags.pages
|
|
228
|
+
})
|
|
229
|
+
)
|
|
230
|
+
)
|
|
231
|
+
),
|
|
232
|
+
Effect.map((data) => metaOnly === true ? convertCombinedPageDataToMetaOnly(data) : data),
|
|
233
|
+
Effect.catchTag("KillSwitch", () => Effect.succeed(void 0))
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
function _getPageBySlug(slug, metaOnly = false) {
|
|
237
|
+
return _getPageBySlugFromDB(slug).pipe(
|
|
238
|
+
Effect.flatMap((page) => page ? Effect.succeed(page) : Effect.fail(new KillSwitch())),
|
|
239
|
+
Effect.flatMap(
|
|
240
|
+
(page) => GET.folderTree().pipe(
|
|
241
|
+
Effect.flatMap(
|
|
242
|
+
(tree) => memoize(cacheKeyGetters.page(page.id), collectPageData(page, tree), {
|
|
243
|
+
tags: cacheTags.pages
|
|
244
|
+
})
|
|
245
|
+
)
|
|
246
|
+
)
|
|
247
|
+
),
|
|
248
|
+
Effect.map((data) => metaOnly === true ? convertCombinedPageDataToMetaOnly(data) : data),
|
|
249
|
+
Effect.catchTag("KillSwitch", () => Effect.succeed(void 0))
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
function _getPackagesPages(packageName, metaOnly = false) {
|
|
253
|
+
return _getPageByPackageFromDB(packageName).pipe(
|
|
254
|
+
Effect.flatMap((page) => page ? Effect.succeed(page) : Effect.fail(new KillSwitch())),
|
|
255
|
+
Effect.flatMap(
|
|
256
|
+
(page) => GET.folderTree().pipe(
|
|
257
|
+
Effect.flatMap(
|
|
258
|
+
(tree) => memoize(cacheKeyGetters.page(page.id), collectPageData(page, tree), {
|
|
259
|
+
tags: cacheTags.pages
|
|
260
|
+
})
|
|
261
|
+
)
|
|
262
|
+
)
|
|
263
|
+
),
|
|
264
|
+
Effect.map((data) => metaOnly === true ? convertCombinedPageDataToMetaOnly(data) : data),
|
|
265
|
+
Effect.catchTag("KillSwitch", () => Effect.succeed([]))
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
function _folderPages(idOrName, includeDrafts = false, metaOnly = false, paginate) {
|
|
269
|
+
return _getFolderByNameOrId(idOrName).pipe(
|
|
270
|
+
Effect.flatMap(
|
|
271
|
+
({ id: folderId }) => __getPagesPossiblyPaginated(paginate).pipe(
|
|
272
|
+
Effect.flatMap(
|
|
273
|
+
(pagesRaw) => __filterPagesByDraft(
|
|
274
|
+
pagesRaw.filter((page) => page.parentFolder === folderId),
|
|
275
|
+
includeDrafts
|
|
276
|
+
)
|
|
277
|
+
),
|
|
278
|
+
Effect.flatMap(
|
|
279
|
+
(pages) => Effect.all({
|
|
280
|
+
pages: Effect.succeed(pages),
|
|
281
|
+
tree: GET.folderTree()
|
|
282
|
+
})
|
|
283
|
+
),
|
|
284
|
+
Effect.flatMap(
|
|
285
|
+
({ pages, tree }) => Effect.forEach(
|
|
286
|
+
pages,
|
|
287
|
+
(page) => memoize(cacheKeyGetters.page(page.id), collectPageData(page, tree), {
|
|
288
|
+
tags: cacheTags.pages
|
|
289
|
+
})
|
|
290
|
+
)
|
|
291
|
+
),
|
|
292
|
+
Effect.map((data) => metaOnly ? convertCombinedPageDataToMetaOnly(data) : data)
|
|
293
|
+
)
|
|
294
|
+
)
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
const _pageFolderTree = (excludeDrafts = false) => Effect.gen(function* () {
|
|
298
|
+
const includeDrafts = !excludeDrafts;
|
|
299
|
+
const [tree, pages] = yield* Effect.all([GET.folderTree(), _getAllPages(includeDrafts)]);
|
|
300
|
+
for (const page of pages) {
|
|
301
|
+
if (page.parentFolder) {
|
|
302
|
+
yield* addPageToFolderTree(tree, page.parentFolder, {
|
|
303
|
+
id: page.id,
|
|
304
|
+
name: page.title,
|
|
305
|
+
page: true,
|
|
306
|
+
pageData: page,
|
|
307
|
+
children: []
|
|
308
|
+
});
|
|
309
|
+
} else {
|
|
310
|
+
tree.push({
|
|
311
|
+
id: page.id,
|
|
312
|
+
name: page.title,
|
|
313
|
+
page: true,
|
|
314
|
+
pageData: page,
|
|
315
|
+
children: []
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return tree;
|
|
320
|
+
});
|
|
321
|
+
const getAllCategories = () => memoize(
|
|
322
|
+
cacheKeyGetters.categories(),
|
|
323
|
+
withDecoder({
|
|
324
|
+
decoder: Schema.Array(StudioCMSPageDataCategories.Select),
|
|
325
|
+
callbackFn: (db) => db((client) => client.selectFrom("StudioCMSPageDataCategories").selectAll().execute())
|
|
326
|
+
})(),
|
|
327
|
+
{ tags: [...cacheTags.categories, ...cacheTags.taxonomy] }
|
|
328
|
+
);
|
|
329
|
+
const getCategoryById = Effect.fn(
|
|
330
|
+
(categoryId) => memoize(
|
|
331
|
+
cacheKeyGetters.categoryById(categoryId),
|
|
332
|
+
withCodec({
|
|
333
|
+
encoder: Schema.Number,
|
|
334
|
+
decoder: Schema.UndefinedOr(StudioCMSPageDataCategories.Select),
|
|
335
|
+
callbackFn: (db, categoryId2) => db(
|
|
336
|
+
(client) => client.selectFrom("StudioCMSPageDataCategories").selectAll().where("id", "=", categoryId2).executeTakeFirst()
|
|
337
|
+
)
|
|
338
|
+
})(categoryId),
|
|
339
|
+
{ tags: [...cacheTags.categories, ...cacheTags.taxonomy] }
|
|
340
|
+
)
|
|
341
|
+
);
|
|
342
|
+
const getCategoryBySlug = Effect.fn(
|
|
343
|
+
(slug) => memoize(
|
|
344
|
+
cacheKeyGetters.categoryBySlug(slug),
|
|
345
|
+
withCodec({
|
|
346
|
+
encoder: Schema.String,
|
|
347
|
+
decoder: Schema.UndefinedOr(StudioCMSPageDataCategories.Select),
|
|
348
|
+
callbackFn: (db, slug2) => db(
|
|
349
|
+
(client) => client.selectFrom("StudioCMSPageDataCategories").selectAll().where("slug", "=", slug2).executeTakeFirst()
|
|
350
|
+
)
|
|
351
|
+
})(slug),
|
|
352
|
+
{ tags: [...cacheTags.categories, ...cacheTags.taxonomy] }
|
|
353
|
+
)
|
|
354
|
+
);
|
|
355
|
+
const getAllTags = () => memoize(
|
|
356
|
+
cacheKeyGetters.tags(),
|
|
357
|
+
withDecoder({
|
|
358
|
+
decoder: Schema.Array(StudioCMSPageDataTags.Select),
|
|
359
|
+
callbackFn: (db) => db((client) => client.selectFrom("StudioCMSPageDataTags").selectAll().execute())
|
|
360
|
+
})(),
|
|
361
|
+
{ tags: [...cacheTags.tags, ...cacheTags.taxonomy] }
|
|
362
|
+
);
|
|
363
|
+
const getTagById = Effect.fn(
|
|
364
|
+
(tagId) => memoize(
|
|
365
|
+
cacheKeyGetters.tagById(tagId),
|
|
366
|
+
withCodec({
|
|
367
|
+
encoder: Schema.Number,
|
|
368
|
+
decoder: Schema.UndefinedOr(StudioCMSPageDataTags.Select),
|
|
369
|
+
callbackFn: (db, tagId2) => db(
|
|
370
|
+
(client) => client.selectFrom("StudioCMSPageDataTags").selectAll().where("id", "=", tagId2).executeTakeFirst()
|
|
371
|
+
)
|
|
372
|
+
})(tagId),
|
|
373
|
+
{ tags: [...cacheTags.tags, ...cacheTags.taxonomy] }
|
|
374
|
+
)
|
|
375
|
+
);
|
|
376
|
+
const getTagBySlug = Effect.fn(
|
|
377
|
+
(slug) => memoize(
|
|
378
|
+
cacheKeyGetters.tagBySlug(slug),
|
|
379
|
+
withCodec({
|
|
380
|
+
encoder: Schema.String,
|
|
381
|
+
decoder: Schema.UndefinedOr(StudioCMSPageDataTags.Select),
|
|
382
|
+
callbackFn: (db, slug2) => db(
|
|
383
|
+
(client) => client.selectFrom("StudioCMSPageDataTags").selectAll().where("slug", "=", slug2).executeTakeFirst()
|
|
384
|
+
)
|
|
385
|
+
})(slug),
|
|
386
|
+
{ tags: [...cacheTags.tags, ...cacheTags.taxonomy] }
|
|
387
|
+
)
|
|
388
|
+
);
|
|
389
|
+
const GET = {
|
|
390
|
+
/**
|
|
391
|
+
* Lists of permissions categorized by user ranks.
|
|
392
|
+
*/
|
|
393
|
+
permissionsLists: {
|
|
394
|
+
/**
|
|
395
|
+
* Retrieves all combined ranks with their corresponding users.
|
|
396
|
+
*
|
|
397
|
+
* @returns An array of combined rank records.
|
|
398
|
+
*/
|
|
399
|
+
all: _getCombinedRanks,
|
|
400
|
+
// Dynamically generate functions for each rank (e.g., owners, admins, editors, visitors)
|
|
401
|
+
...ranks.reduce((acc, rank) => {
|
|
402
|
+
acc[`${rank}s`] = () => _getPermissionsByRank(rank);
|
|
403
|
+
return acc;
|
|
404
|
+
}, {})
|
|
405
|
+
},
|
|
406
|
+
/**
|
|
407
|
+
* User-related GET operations.
|
|
408
|
+
*/
|
|
409
|
+
users: {
|
|
410
|
+
/**
|
|
411
|
+
* Retrieves all users excluding the ghost user.
|
|
412
|
+
*
|
|
413
|
+
* @returns An array of user data records.
|
|
414
|
+
*/
|
|
415
|
+
all: _getAllUsers,
|
|
416
|
+
/**
|
|
417
|
+
* Retrieves a user by their ID.
|
|
418
|
+
*
|
|
419
|
+
* @param userId - The ID of the user to fetch.
|
|
420
|
+
* @returns The user data record if found, otherwise undefined.
|
|
421
|
+
*/
|
|
422
|
+
byId: _getUserByIdExposed,
|
|
423
|
+
/**
|
|
424
|
+
* Retrieves a user by their username.
|
|
425
|
+
*
|
|
426
|
+
* @param username - The username of the user to fetch.
|
|
427
|
+
* @returns The user data record if found, otherwise undefined.
|
|
428
|
+
*/
|
|
429
|
+
byUsername: _getUserByUsernameExposed,
|
|
430
|
+
/**
|
|
431
|
+
* Retrieves a user by their email.
|
|
432
|
+
*
|
|
433
|
+
* @param email - The email of the user to fetch.
|
|
434
|
+
* @returns The user data record if found, otherwise undefined.
|
|
435
|
+
*/
|
|
436
|
+
byEmail: _getUserByEmailExposed
|
|
437
|
+
},
|
|
438
|
+
/**
|
|
439
|
+
* Retrieves a folder by its ID.
|
|
440
|
+
*
|
|
441
|
+
* @param folderId - The ID of the folder to fetch.
|
|
442
|
+
* @returns The folder record if found, otherwise undefined.
|
|
443
|
+
*/
|
|
444
|
+
folder: Effect.fn(
|
|
445
|
+
(folderId) => memoize(cacheKeyGetters.folder(folderId), _getFolder(folderId), {
|
|
446
|
+
tags: cacheTags.folder
|
|
447
|
+
})
|
|
448
|
+
),
|
|
449
|
+
/**
|
|
450
|
+
* Retrieves the folder tree structure.
|
|
451
|
+
*
|
|
452
|
+
* @returns The folder tree structure.
|
|
453
|
+
*/
|
|
454
|
+
folderTree: () => buildFolderTree,
|
|
455
|
+
/**
|
|
456
|
+
* Retrieves a list of folders.
|
|
457
|
+
*
|
|
458
|
+
* @returns An array of folder records.
|
|
459
|
+
*/
|
|
460
|
+
folderList: () => memoize(cacheKeyGetters.folderList(), getAvailableFolders, {
|
|
461
|
+
tags: cacheTags.folderList
|
|
462
|
+
}),
|
|
463
|
+
/**
|
|
464
|
+
* Retrieves the site configuration.
|
|
465
|
+
*
|
|
466
|
+
* @returns The site configuration object.
|
|
467
|
+
*/
|
|
468
|
+
siteConfig: sdkSiteConfig.get,
|
|
469
|
+
/**
|
|
470
|
+
* Retrieves the latest version of StudioCMS from NPM.
|
|
471
|
+
*
|
|
472
|
+
* @returns The latest version string.
|
|
473
|
+
*/
|
|
474
|
+
latestVersion: () => getVersion("studiocms"),
|
|
475
|
+
/**
|
|
476
|
+
* Retrieves all pages.
|
|
477
|
+
*
|
|
478
|
+
* @returns An array of page data records.
|
|
479
|
+
*/
|
|
480
|
+
pages: _getAllPages,
|
|
481
|
+
/**
|
|
482
|
+
* Utilities to get pages by specific criteria.
|
|
483
|
+
*/
|
|
484
|
+
page: {
|
|
485
|
+
/**
|
|
486
|
+
* Retrieves a page by its ID.
|
|
487
|
+
*
|
|
488
|
+
* @param id - The ID of the page to fetch.
|
|
489
|
+
* @returns The page data record if found, otherwise undefined.
|
|
490
|
+
*/
|
|
491
|
+
byId: _getPageById,
|
|
492
|
+
/**
|
|
493
|
+
* Retrieves a page by its slug.
|
|
494
|
+
*
|
|
495
|
+
* @param slug - The slug of the page to fetch.
|
|
496
|
+
* @returns The page data record if found, otherwise undefined.
|
|
497
|
+
*/
|
|
498
|
+
bySlug: _getPageBySlug
|
|
499
|
+
},
|
|
500
|
+
/**
|
|
501
|
+
* Retrieves pages associated with a specific package.
|
|
502
|
+
*
|
|
503
|
+
* @param packageName - The name of the package to fetch pages for.
|
|
504
|
+
* @returns An array of page data records associated with the specified package.
|
|
505
|
+
*/
|
|
506
|
+
packagePages: _getPackagesPages,
|
|
507
|
+
/**
|
|
508
|
+
* Retrieves pages within a specific folder.
|
|
509
|
+
*
|
|
510
|
+
* @param idOrName - The ID or name of the folder.
|
|
511
|
+
* @returns An array of page data records within the specified folder.
|
|
512
|
+
*/
|
|
513
|
+
folderPages: _folderPages,
|
|
514
|
+
/**
|
|
515
|
+
* Retrieves the page folder tree structure.
|
|
516
|
+
*
|
|
517
|
+
* @returns The page folder tree structure.
|
|
518
|
+
*/
|
|
519
|
+
pageFolderTree: _pageFolderTree,
|
|
520
|
+
/**
|
|
521
|
+
* Category-related GET operations.
|
|
522
|
+
*/
|
|
523
|
+
categories: {
|
|
524
|
+
/**
|
|
525
|
+
* Retrieves all categories.
|
|
526
|
+
*
|
|
527
|
+
* @returns An array of category records.
|
|
528
|
+
*/
|
|
529
|
+
getAll: getAllCategories,
|
|
530
|
+
/**
|
|
531
|
+
* Retrieves a category by its ID.
|
|
532
|
+
*
|
|
533
|
+
* @param categoryId - The ID of the category to fetch.
|
|
534
|
+
* @returns The category record if found, otherwise undefined.
|
|
535
|
+
*/
|
|
536
|
+
byId: getCategoryById,
|
|
537
|
+
/**
|
|
538
|
+
* Retrieves a category by its slug.
|
|
539
|
+
*
|
|
540
|
+
* @param slug - The slug of the category to fetch.
|
|
541
|
+
* @returns The category record if found, otherwise undefined.
|
|
542
|
+
*/
|
|
543
|
+
bySlug: getCategoryBySlug
|
|
544
|
+
},
|
|
545
|
+
/**
|
|
546
|
+
* Tag-related GET operations.
|
|
547
|
+
*/
|
|
548
|
+
tags: {
|
|
549
|
+
/**
|
|
550
|
+
* Retrieves all tags.
|
|
551
|
+
*
|
|
552
|
+
* @returns An array of tag records.
|
|
553
|
+
*/
|
|
554
|
+
getAll: getAllTags,
|
|
555
|
+
/**
|
|
556
|
+
* Retrieves a tag by its ID.
|
|
557
|
+
*
|
|
558
|
+
* @param tagId - The ID of the tag to fetch.
|
|
559
|
+
* @returns The tag record if found, otherwise undefined.
|
|
560
|
+
*/
|
|
561
|
+
byId: getTagById,
|
|
562
|
+
/**
|
|
563
|
+
* Retrieves a tag by its slug.
|
|
564
|
+
*
|
|
565
|
+
* @param slug - The slug of the tag to fetch.
|
|
566
|
+
* @returns The tag record if found, otherwise undefined.
|
|
567
|
+
*/
|
|
568
|
+
bySlug: getTagBySlug
|
|
569
|
+
}
|
|
570
|
+
};
|
|
571
|
+
return GET;
|
|
572
|
+
});
|
|
573
|
+
var get_default = SDKGetModule;
|
|
574
|
+
export {
|
|
575
|
+
KillSwitch,
|
|
576
|
+
PaginateError,
|
|
577
|
+
SDKGetModule,
|
|
578
|
+
get_default as default
|
|
579
|
+
};
|