@tachybase/module-collection 0.23.8

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 (90) hide show
  1. package/.turbo/turbo-build.log +14 -0
  2. package/LICENSE +201 -0
  3. package/README.md +9 -0
  4. package/README.zh-CN.md +9 -0
  5. package/client.d.ts +2 -0
  6. package/client.js +1 -0
  7. package/dist/client/index.d.ts +5 -0
  8. package/dist/client/index.js +1 -0
  9. package/dist/externalVersion.js +14 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.js +39 -0
  12. package/dist/server/actions/collectionImportExportMeta.d.ts +2 -0
  13. package/dist/server/actions/collectionImportExportMeta.js +226 -0
  14. package/dist/server/collections/collectionCategories.d.ts +3 -0
  15. package/dist/server/collections/collectionCategories.js +52 -0
  16. package/dist/server/collections/collections.d.ts +3 -0
  17. package/dist/server/collections/collections.js +92 -0
  18. package/dist/server/collections/fields.d.ts +3 -0
  19. package/dist/server/collections/fields.js +94 -0
  20. package/dist/server/hooks/afterCreateForForeignKeyField.d.ts +2 -0
  21. package/dist/server/hooks/afterCreateForForeignKeyField.js +195 -0
  22. package/dist/server/hooks/afterCreateForReverseField.d.ts +4 -0
  23. package/dist/server/hooks/afterCreateForReverseField.js +37 -0
  24. package/dist/server/hooks/afterDestroyForForeignKeyField.d.ts +2 -0
  25. package/dist/server/hooks/afterDestroyForForeignKeyField.js +89 -0
  26. package/dist/server/hooks/beforeCreateForChildrenCollection.d.ts +5 -0
  27. package/dist/server/hooks/beforeCreateForChildrenCollection.js +58 -0
  28. package/dist/server/hooks/beforeCreateForReverseField.d.ts +4 -0
  29. package/dist/server/hooks/beforeCreateForReverseField.js +64 -0
  30. package/dist/server/hooks/beforeCreateForValidateField.d.ts +4 -0
  31. package/dist/server/hooks/beforeCreateForValidateField.js +48 -0
  32. package/dist/server/hooks/beforeCreateForViewCollection.d.ts +5 -0
  33. package/dist/server/hooks/beforeCreateForViewCollection.js +30 -0
  34. package/dist/server/hooks/beforeDestroyForeignKey.d.ts +2 -0
  35. package/dist/server/hooks/beforeDestroyForeignKey.js +66 -0
  36. package/dist/server/hooks/beforeInitOptions.d.ts +29 -0
  37. package/dist/server/hooks/beforeInitOptions.js +233 -0
  38. package/dist/server/hooks/index.d.ts +6 -0
  39. package/dist/server/hooks/index.js +31 -0
  40. package/dist/server/index.d.ts +4 -0
  41. package/dist/server/index.js +45 -0
  42. package/dist/server/migrations/20220613103214-alert-sub-table.d.ts +5 -0
  43. package/dist/server/migrations/20220613103214-alert-sub-table.js +40 -0
  44. package/dist/server/migrations/20220704225714-drop-foreign-keys.d.ts +5 -0
  45. package/dist/server/migrations/20220704225714-drop-foreign-keys.js +67 -0
  46. package/dist/server/migrations/20221101111110-update-foreign-fields.d.ts +5 -0
  47. package/dist/server/migrations/20221101111110-update-foreign-fields.js +64 -0
  48. package/dist/server/migrations/20221104151410-update-collections-hidden.d.ts +5 -0
  49. package/dist/server/migrations/20221104151410-update-collections-hidden.js +47 -0
  50. package/dist/server/migrations/20221121111110-update-fk-type.d.ts +5 -0
  51. package/dist/server/migrations/20221121111110-update-fk-type.js +144 -0
  52. package/dist/server/migrations/20221121111113-update-id-to-bigint.d.ts +5 -0
  53. package/dist/server/migrations/20221121111113-update-id-to-bigint.js +178 -0
  54. package/dist/server/migrations/20221221103220-timestamps.d.ts +5 -0
  55. package/dist/server/migrations/20221221103220-timestamps.js +45 -0
  56. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.d.ts +5 -0
  57. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.js +87 -0
  58. package/dist/server/migrations/20230509111114-alert-ui-schema.d.ts +5 -0
  59. package/dist/server/migrations/20230509111114-alert-ui-schema.js +77 -0
  60. package/dist/server/migrations/20230623145414-number-step.d.ts +5 -0
  61. package/dist/server/migrations/20230623145414-number-step.js +71 -0
  62. package/dist/server/migrations/20230704222935-tableoid.d.ts +5 -0
  63. package/dist/server/migrations/20230704222935-tableoid.js +73 -0
  64. package/dist/server/migrations/20230918024546-set-collection-schema.d.ts +5 -0
  65. package/dist/server/migrations/20230918024546-set-collection-schema.js +45 -0
  66. package/dist/server/migrations/20240220153103-install-main-datasource.d.ts +6 -0
  67. package/dist/server/migrations/20240220153103-install-main-datasource.js +41 -0
  68. package/dist/server/models/collection.d.ts +23 -0
  69. package/dist/server/models/collection.js +221 -0
  70. package/dist/server/models/field.d.ts +22 -0
  71. package/dist/server/models/field.js +188 -0
  72. package/dist/server/models/index.d.ts +2 -0
  73. package/dist/server/models/index.js +23 -0
  74. package/dist/server/repositories/collection-repository.d.ts +12 -0
  75. package/dist/server/repositories/collection-repository.js +135 -0
  76. package/dist/server/repositories/index.d.ts +1 -0
  77. package/dist/server/repositories/index.js +21 -0
  78. package/dist/server/resourcers/collections.d.ts +4 -0
  79. package/dist/server/resourcers/collections.js +93 -0
  80. package/dist/server/resourcers/sql.d.ts +10 -0
  81. package/dist/server/resourcers/sql.js +108 -0
  82. package/dist/server/resourcers/views.d.ts +9 -0
  83. package/dist/server/resourcers/views.js +98 -0
  84. package/dist/server/server.d.ts +11 -0
  85. package/dist/server/server.js +332 -0
  86. package/dist/swagger/index.d.ts +405 -0
  87. package/dist/swagger/index.js +431 -0
  88. package/package.json +34 -0
  89. package/server.d.ts +2 -0
  90. package/server.js +1 -0
@@ -0,0 +1,98 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var views_exports = {};
19
+ __export(views_exports, {
20
+ default: () => views_default
21
+ });
22
+ module.exports = __toCommonJS(views_exports);
23
+ var import_database = require("@tachybase/database");
24
+ var views_default = {
25
+ name: "dbViews",
26
+ actions: {
27
+ async get(ctx, next) {
28
+ const { filterByTk, schema } = ctx.action.params;
29
+ const db = ctx.app.db;
30
+ const fields = await import_database.ViewFieldInference.inferFields({
31
+ db,
32
+ viewName: filterByTk,
33
+ viewSchema: schema
34
+ });
35
+ ctx.body = {
36
+ fields,
37
+ sources: [
38
+ ...new Set(
39
+ Object.values(fields).map((field) => field.source).filter(Boolean).map((source) => source.split(".")[0])
40
+ )
41
+ ]
42
+ };
43
+ await next();
44
+ },
45
+ list: async function(ctx, next) {
46
+ const db = ctx.app.db;
47
+ const dbViews = await db.queryInterface.listViews();
48
+ const viewCollections = Array.from(db.collections.values()).filter((collection) => collection.isView());
49
+ ctx.body = dbViews.map((dbView) => {
50
+ return {
51
+ ...dbView
52
+ };
53
+ }).filter((dbView) => {
54
+ return !viewCollections.find((collection) => {
55
+ const viewName = dbView.name;
56
+ const schema = dbView.schema;
57
+ const collectionViewName = collection.options.viewName || collection.options.name;
58
+ return collectionViewName === viewName && collection.options.schema === schema;
59
+ });
60
+ });
61
+ await next();
62
+ },
63
+ async query(ctx, next) {
64
+ const { filterByTk, fieldTypes, schema = "public", page = 1, pageSize = 10 } = ctx.action.params;
65
+ const offset = (page - 1) * pageSize;
66
+ const limit = 1 * pageSize;
67
+ const sql = `SELECT *
68
+ FROM ${ctx.app.db.utils.quoteTable(
69
+ ctx.app.db.utils.addSchema(filterByTk, schema)
70
+ )} LIMIT ${limit} OFFSET ${offset}`;
71
+ const rawValues = await ctx.app.db.sequelize.query(sql, { type: "SELECT" });
72
+ if (fieldTypes) {
73
+ for (const raw of rawValues) {
74
+ const fakeInstance = {
75
+ dataValues: raw,
76
+ getDataValue: (key) => raw[key]
77
+ };
78
+ for (const fieldName of Object.keys(fieldTypes)) {
79
+ const fieldType = fieldTypes[fieldName];
80
+ const FieldClass = ctx.app.db.fieldTypes.get(fieldType);
81
+ const fieldOptions = new FieldClass(
82
+ { name: fieldName },
83
+ {
84
+ db: ctx.app.db
85
+ }
86
+ ).options;
87
+ if (fieldOptions.get) {
88
+ const newValue = fieldOptions.get.apply(fakeInstance);
89
+ raw[fieldName] = newValue;
90
+ }
91
+ }
92
+ }
93
+ }
94
+ ctx.body = rawValues;
95
+ await next();
96
+ }
97
+ }
98
+ };
@@ -0,0 +1,11 @@
1
+ import { Filter } from '@tachybase/database';
2
+ import { Plugin } from '@tachybase/server';
3
+ export declare class CollectionManagerPlugin extends Plugin {
4
+ schema: string;
5
+ private loadFilter;
6
+ setLoadFilter(filter: Filter): void;
7
+ beforeLoad(): Promise<void>;
8
+ load(): Promise<void>;
9
+ install(): Promise<void>;
10
+ }
11
+ export default CollectionManagerPlugin;
@@ -0,0 +1,332 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var server_exports = {};
29
+ __export(server_exports, {
30
+ CollectionManagerPlugin: () => CollectionManagerPlugin,
31
+ default: () => server_default
32
+ });
33
+ module.exports = __toCommonJS(server_exports);
34
+ var import_path = __toESM(require("path"));
35
+ var process = __toESM(require("process"));
36
+ var import_worker_threads = require("worker_threads");
37
+ var import_database = require("@tachybase/database");
38
+ var import_server = require("@tachybase/server");
39
+ var import_async_mutex = require("async-mutex");
40
+ var import_lodash = __toESM(require("lodash"));
41
+ var import__ = require(".");
42
+ var import_collectionImportExportMeta = require("./actions/collectionImportExportMeta");
43
+ var import_hooks = require("./hooks");
44
+ var import_beforeCreateForValidateField = require("./hooks/beforeCreateForValidateField");
45
+ var import_beforeCreateForViewCollection = require("./hooks/beforeCreateForViewCollection");
46
+ var import_models = require("./models");
47
+ var import_collections = __toESM(require("./resourcers/collections"));
48
+ var import_sql = __toESM(require("./resourcers/sql"));
49
+ var import_views = __toESM(require("./resourcers/views"));
50
+ class CollectionManagerPlugin extends import_server.Plugin {
51
+ schema;
52
+ loadFilter = {};
53
+ setLoadFilter(filter) {
54
+ this.loadFilter = filter;
55
+ }
56
+ async beforeLoad() {
57
+ if (this.app.db.inDialect("postgres")) {
58
+ this.schema = process.env.COLLECTION_MANAGER_SCHEMA || this.db.options.schema || "public";
59
+ }
60
+ this.app.db.registerRepositories({
61
+ CollectionRepository: import__.CollectionRepository
62
+ });
63
+ this.app.db.registerModels({
64
+ CollectionModel: import_models.CollectionModel,
65
+ FieldModel: import_models.FieldModel
66
+ });
67
+ this.db.addMigrations({
68
+ namespace: "collection-manager",
69
+ directory: import_path.default.resolve(__dirname, "./migrations"),
70
+ context: {
71
+ plugin: this
72
+ }
73
+ });
74
+ this.app.db.on("collections.beforeCreate", async (model) => {
75
+ if (this.app.db.inDialect("postgres") && this.schema && model.get("from") !== "db2cm" && !model.get("schema")) {
76
+ model.set("schema", this.schema);
77
+ }
78
+ });
79
+ this.app.db.on("collections.beforeCreate", (0, import_beforeCreateForViewCollection.beforeCreateForViewCollection)(this.db));
80
+ this.app.db.on(
81
+ "collections.afterCreateWithAssociations",
82
+ async (model, { context, transaction }) => {
83
+ if (context) {
84
+ await model.migrate({
85
+ transaction
86
+ });
87
+ }
88
+ }
89
+ );
90
+ this.app.db.on("collections.beforeDestroy", async (model, options) => {
91
+ const removeOptions = {};
92
+ if (options.transaction) {
93
+ removeOptions["transaction"] = options.transaction;
94
+ }
95
+ const cascade = import_lodash.default.get(options, "context.action.params.cascade", false);
96
+ if (cascade === true || cascade === "true") {
97
+ removeOptions["cascade"] = true;
98
+ }
99
+ await model.remove(removeOptions);
100
+ });
101
+ this.app.db.on("fields.beforeCreate", (0, import_hooks.beforeCreateForReverseField)(this.app.db));
102
+ this.app.db.on("fields.beforeCreate", async (model, options) => {
103
+ const collectionName = model.get("collectionName");
104
+ const collection = this.app.db.getCollection(collectionName);
105
+ if (!collection) {
106
+ return;
107
+ }
108
+ if (collection.isInherited() && collection.parentFields().has(model.get("name"))) {
109
+ model.set("overriding", true);
110
+ }
111
+ });
112
+ this.app.db.on("fields.beforeValidate", async (model) => {
113
+ if (model.get("name") && model.get("name").includes(".")) {
114
+ model.set("field", model.get("name"));
115
+ model.set("name", model.get("name").replace(/\./g, "_"));
116
+ }
117
+ });
118
+ this.app.db.on("fields.beforeCreate", async (model, options) => {
119
+ if (model.get("source")) return;
120
+ const type = model.get("type");
121
+ const fn = import_hooks.beforeInitOptions[type];
122
+ if (fn) {
123
+ await fn(model, { database: this.app.db });
124
+ }
125
+ });
126
+ this.app.db.on("fields.beforeCreate", (0, import_beforeCreateForValidateField.beforeCreateForValidateField)(this.app.db));
127
+ this.app.db.on("fields.afterCreate", (0, import_hooks.afterCreateForReverseField)(this.app.db));
128
+ this.app.db.on("fields.afterCreate", async (model, { context, transaction }) => {
129
+ if (context) {
130
+ await model.migrate({
131
+ isNew: true,
132
+ transaction
133
+ });
134
+ }
135
+ });
136
+ this.app.db.on("fields.afterCreate", (0, import_hooks.afterCreateForForeignKeyField)(this.app.db));
137
+ this.app.db.on("fields.beforeUpdate", async (model, options) => {
138
+ const newValue = options.values;
139
+ if (model.get("reverseKey") && import_lodash.default.get(newValue, "reverseField") && !import_lodash.default.get(newValue, "reverseField.key")) {
140
+ const field = await this.app.db.getModel("fields").findByPk(model.get("reverseKey"), { transaction: options.transaction });
141
+ if (field) {
142
+ throw new Error("cant update field without a reverseField key");
143
+ }
144
+ }
145
+ if (model.get("sortable") && model.get("type") === "hasMany") {
146
+ model.set("sortBy", model.get("foreignKey") + "Sort");
147
+ }
148
+ });
149
+ this.app.db.on("fields.afterUpdate", async (model, { context, transaction }) => {
150
+ const prevOptions = model.previous("options");
151
+ const currentOptions = model.get("options");
152
+ if (context) {
153
+ const prev = prevOptions["unique"];
154
+ const next = currentOptions["unique"];
155
+ if (Boolean(prev) !== Boolean(next)) {
156
+ await model.syncUniqueIndex({ transaction });
157
+ }
158
+ }
159
+ const prevDefaultValue = prevOptions["defaultValue"];
160
+ const currentDefaultValue = currentOptions["defaultValue"];
161
+ if (prevDefaultValue !== currentDefaultValue) {
162
+ await model.syncDefaultValue({ transaction, defaultValue: currentDefaultValue });
163
+ }
164
+ const prevOnDelete = prevOptions["onDelete"];
165
+ const currentOnDelete = currentOptions["onDelete"];
166
+ if (prevOnDelete !== currentOnDelete) {
167
+ await model.syncReferenceCheckOption({ transaction });
168
+ }
169
+ if (model.get("type") === "hasMany" && model.get("sortable") && model.get("sortBy")) {
170
+ await model.syncSortByField({ transaction });
171
+ }
172
+ });
173
+ this.app.db.on("fields.afterSaveWithAssociations", async (model, { context, transaction }) => {
174
+ if (context) {
175
+ await model.load({ transaction });
176
+ }
177
+ });
178
+ this.app.db.on("fields.beforeDestroy", (0, import_hooks.beforeDestroyForeignKey)(this.app.db));
179
+ const mutex = new import_async_mutex.Mutex();
180
+ this.app.db.on("fields.beforeDestroy", async (model, options) => {
181
+ await mutex.runExclusive(async () => {
182
+ await model.remove(options);
183
+ });
184
+ });
185
+ this.app.db.on("fields.afterDestroy", async (model, options) => {
186
+ const { transaction } = options;
187
+ const collectionName = model.get("collectionName");
188
+ const childCollections = this.db.inheritanceMap.getChildren(collectionName);
189
+ const childShouldRemoveField = Array.from(childCollections).filter((item) => {
190
+ const parents = Array.from(this.db.inheritanceMap.getParents(item)).map((parent) => {
191
+ const collection = this.db.getCollection(parent);
192
+ const field = collection.getField(model.get("name"));
193
+ return field;
194
+ }).filter(Boolean);
195
+ return parents.length === 0;
196
+ });
197
+ await this.db.getCollection("fields").repository.destroy({
198
+ filter: {
199
+ name: model.get("name"),
200
+ collectionName: {
201
+ $in: childShouldRemoveField
202
+ },
203
+ options: {
204
+ overriding: true
205
+ }
206
+ },
207
+ transaction
208
+ });
209
+ });
210
+ const loadCollections = async () => {
211
+ this.log.debug("loading custom collections", { method: "loadCollections" });
212
+ this.app.setMaintainingMessage("loading custom collections");
213
+ await this.app.db.getRepository("collections").load({
214
+ filter: this.loadFilter
215
+ });
216
+ };
217
+ this.app.on("beforeStart", loadCollections);
218
+ if (!import_worker_threads.isMainThread) {
219
+ return;
220
+ }
221
+ this.app.resourcer.use(
222
+ async (ctx, next) => {
223
+ const { resourceName, actionName } = ctx.action;
224
+ if (resourceName === "collections.fields" && actionName === "update") {
225
+ const { updateAssociationValues = [] } = ctx.action.params;
226
+ updateAssociationValues.push("uiSchema");
227
+ ctx.action.mergeParams({
228
+ updateAssociationValues
229
+ });
230
+ }
231
+ await next();
232
+ },
233
+ { tag: "appendUISchemaOnFieldUpdate" }
234
+ );
235
+ this.app.acl.allow("collections", "list", "loggedIn");
236
+ this.app.acl.allow("collectionCategories", "list", "loggedIn");
237
+ this.app.resourcer.define(import_collectionImportExportMeta.collectionImportExportMeta);
238
+ }
239
+ async load() {
240
+ await this.importCollections(import_path.default.resolve(__dirname, "./collections"));
241
+ this.db.getRepository("collections").setApp(this.app);
242
+ const errorHandlerPlugin = this.app.getPlugin("error-handler");
243
+ errorHandlerPlugin.errorHandler.register(
244
+ (err) => {
245
+ return err instanceof import_database.UniqueConstraintError;
246
+ },
247
+ (err, ctx) => {
248
+ return ctx.throw(400, ctx.t(`The value of ${Object.keys(err.fields)} field duplicated`));
249
+ }
250
+ );
251
+ this.app.resourcer.use(
252
+ async (ctx, next) => {
253
+ if (ctx.action.resourceName === "collections.fields" && ["create", "update"].includes(ctx.action.actionName)) {
254
+ ctx.action.mergeParams({
255
+ updateAssociationValues: ["reverseField"]
256
+ });
257
+ }
258
+ await next();
259
+ },
260
+ { tag: "setReverseFieldOnFieldChange" }
261
+ );
262
+ this.app.resource(import_views.default);
263
+ this.app.resource(import_sql.default);
264
+ this.app.actions(import_collections.default);
265
+ const handleFieldSource = (fields) => {
266
+ var _a;
267
+ for (const field of import_lodash.default.castArray(fields)) {
268
+ if (field.get("source")) {
269
+ const [collectionSource, fieldSource] = field.get("source").split(".");
270
+ const collectionField = (_a = this.app.db.getCollection(collectionSource)) == null ? void 0 : _a.getField(fieldSource);
271
+ if (!collectionField) {
272
+ continue;
273
+ }
274
+ const newOptions = {};
275
+ import_lodash.default.merge(newOptions, import_lodash.default.omit(collectionField.options, "name"));
276
+ import_lodash.default.mergeWith(newOptions, field.get(), (objValue, srcValue) => {
277
+ if (srcValue === null) {
278
+ return objValue;
279
+ }
280
+ });
281
+ field.set("options", newOptions);
282
+ }
283
+ }
284
+ };
285
+ this.app.resourcer.use(
286
+ async (ctx, next) => {
287
+ var _a, _b;
288
+ await next();
289
+ if (ctx.action.resourceName === "collections" && ctx.action.actionName === "list" && ((_a = ctx.action.params) == null ? void 0 : _a.paginate) === "false") {
290
+ for (const collection of ctx.body) {
291
+ if (collection.get("view")) {
292
+ const fields = collection.fields;
293
+ handleFieldSource(fields);
294
+ }
295
+ }
296
+ }
297
+ if (ctx.action.resourceName === "collections.fields" && ctx.action.actionName === "list") {
298
+ handleFieldSource(((_b = ctx.action.params) == null ? void 0 : _b.paginate) === "false" ? ctx.body : ctx.body.rows);
299
+ }
300
+ if (ctx.action.resourceName === "collections.fields" && ctx.action.actionName === "get") {
301
+ handleFieldSource(ctx.body);
302
+ }
303
+ },
304
+ { tag: "handleFieldSourceOnListAndGet" }
305
+ );
306
+ this.app.db.extendCollection({
307
+ name: "collectionCategory",
308
+ dumpRules: "required",
309
+ origin: this.options.packageName
310
+ });
311
+ }
312
+ async install() {
313
+ const dataSourcesCollection = this.app.db.getCollection("dataSources");
314
+ if (dataSourcesCollection) {
315
+ await dataSourcesCollection.repository.firstOrCreate({
316
+ filterKeys: ["key"],
317
+ values: {
318
+ key: "main",
319
+ type: "main",
320
+ displayName: '{{t("Main")}}',
321
+ fixed: true,
322
+ options: {}
323
+ }
324
+ });
325
+ }
326
+ }
327
+ }
328
+ var server_default = CollectionManagerPlugin;
329
+ // Annotate the CommonJS export names for ESM import in node:
330
+ 0 && (module.exports = {
331
+ CollectionManagerPlugin
332
+ });