@nocobase/plugin-data-source-main 1.2.13-alpha → 1.3.0-alpha.20240710084543

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 (92) hide show
  1. package/package.json +2 -2
  2. package/dist/client/index.d.ts +0 -13
  3. package/dist/client/index.js +0 -10
  4. package/dist/externalVersion.js +0 -21
  5. package/dist/index.d.ts +0 -10
  6. package/dist/index.js +0 -48
  7. package/dist/locale/en-US.json +0 -4
  8. package/dist/locale/zh-CN.json +0 -4
  9. package/dist/server/collections/collectionCategories.d.ts +0 -11
  10. package/dist/server/collections/collectionCategories.js +0 -61
  11. package/dist/server/collections/collections.d.ts +0 -11
  12. package/dist/server/collections/collections.js +0 -101
  13. package/dist/server/collections/fields.d.ts +0 -11
  14. package/dist/server/collections/fields.js +0 -103
  15. package/dist/server/errors/field-is-depended-on-by-other.d.ts +0 -12
  16. package/dist/server/errors/field-is-depended-on-by-other.js +0 -44
  17. package/dist/server/errors/field-name-exists-error.d.ts +0 -13
  18. package/dist/server/errors/field-name-exists-error.js +0 -45
  19. package/dist/server/hooks/afterCreateForForeignKeyField.d.ts +0 -10
  20. package/dist/server/hooks/afterCreateForForeignKeyField.js +0 -217
  21. package/dist/server/hooks/afterCreateForReverseField.d.ts +0 -12
  22. package/dist/server/hooks/afterCreateForReverseField.js +0 -46
  23. package/dist/server/hooks/afterDestroyForForeignKeyField.d.ts +0 -10
  24. package/dist/server/hooks/afterDestroyForForeignKeyField.js +0 -98
  25. package/dist/server/hooks/beforeCreateForChildrenCollection.d.ts +0 -13
  26. package/dist/server/hooks/beforeCreateForChildrenCollection.js +0 -67
  27. package/dist/server/hooks/beforeCreateForReverseField.d.ts +0 -12
  28. package/dist/server/hooks/beforeCreateForReverseField.js +0 -73
  29. package/dist/server/hooks/beforeCreateForValidateField.d.ts +0 -15
  30. package/dist/server/hooks/beforeCreateForValidateField.js +0 -76
  31. package/dist/server/hooks/beforeCreateForViewCollection.d.ts +0 -13
  32. package/dist/server/hooks/beforeCreateForViewCollection.js +0 -39
  33. package/dist/server/hooks/beforeDestoryField.d.ts +0 -2
  34. package/dist/server/hooks/beforeDestoryField.js +0 -80
  35. package/dist/server/hooks/beforeDestroyForeignKey.d.ts +0 -10
  36. package/dist/server/hooks/beforeDestroyForeignKey.js +0 -75
  37. package/dist/server/hooks/beforeInitOptions.d.ts +0 -23
  38. package/dist/server/hooks/beforeInitOptions.js +0 -137
  39. package/dist/server/hooks/index.d.ts +0 -13
  40. package/dist/server/hooks/index.js +0 -38
  41. package/dist/server/index.d.ts +0 -12
  42. package/dist/server/index.js +0 -54
  43. package/dist/server/migrations/20220613103214-alert-sub-table.d.ts +0 -13
  44. package/dist/server/migrations/20220613103214-alert-sub-table.js +0 -50
  45. package/dist/server/migrations/20220704225714-drop-foreign-keys.d.ts +0 -13
  46. package/dist/server/migrations/20220704225714-drop-foreign-keys.js +0 -79
  47. package/dist/server/migrations/20221101111110-update-foreign-fields.d.ts +0 -13
  48. package/dist/server/migrations/20221101111110-update-foreign-fields.js +0 -74
  49. package/dist/server/migrations/20221104151410-update-collections-hidden.d.ts +0 -13
  50. package/dist/server/migrations/20221104151410-update-collections-hidden.js +0 -57
  51. package/dist/server/migrations/20221121111110-update-fk-type.d.ts +0 -13
  52. package/dist/server/migrations/20221121111110-update-fk-type.js +0 -155
  53. package/dist/server/migrations/20221121111113-update-id-to-bigint.d.ts +0 -13
  54. package/dist/server/migrations/20221121111113-update-id-to-bigint.js +0 -189
  55. package/dist/server/migrations/20221221103220-timestamps.d.ts +0 -13
  56. package/dist/server/migrations/20221221103220-timestamps.js +0 -55
  57. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.d.ts +0 -13
  58. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.js +0 -97
  59. package/dist/server/migrations/20230509111114-alert-ui-schema.d.ts +0 -13
  60. package/dist/server/migrations/20230509111114-alert-ui-schema.js +0 -87
  61. package/dist/server/migrations/20230623145414-number-step.d.ts +0 -13
  62. package/dist/server/migrations/20230623145414-number-step.js +0 -81
  63. package/dist/server/migrations/20230704222935-tableoid.d.ts +0 -13
  64. package/dist/server/migrations/20230704222935-tableoid.js +0 -83
  65. package/dist/server/migrations/20230918024546-set-collection-schema.d.ts +0 -13
  66. package/dist/server/migrations/20230918024546-set-collection-schema.js +0 -55
  67. package/dist/server/migrations/20240220153103-install-main-datasource.d.ts +0 -14
  68. package/dist/server/migrations/20240220153103-install-main-datasource.js +0 -51
  69. package/dist/server/migrations/20240419182147-fix-created-by-field-target.d.ts +0 -14
  70. package/dist/server/migrations/20240419182147-fix-created-by-field-target.js +0 -49
  71. package/dist/server/migrations/20240420105949-add-sort-field.d.ts +0 -14
  72. package/dist/server/migrations/20240420105949-add-sort-field.js +0 -81
  73. package/dist/server/migrations/20240517101001-fix-target-option-in-tree-collection.d.ts +0 -14
  74. package/dist/server/migrations/20240517101001-fix-target-option-in-tree-collection.js +0 -54
  75. package/dist/server/models/collection.d.ts +0 -27
  76. package/dist/server/models/collection.js +0 -197
  77. package/dist/server/models/field.d.ts +0 -26
  78. package/dist/server/models/field.js +0 -173
  79. package/dist/server/models/index.d.ts +0 -10
  80. package/dist/server/models/index.js +0 -32
  81. package/dist/server/repositories/collection-repository.d.ts +0 -20
  82. package/dist/server/repositories/collection-repository.js +0 -169
  83. package/dist/server/repositories/index.d.ts +0 -9
  84. package/dist/server/repositories/index.js +0 -30
  85. package/dist/server/resourcers/collections.d.ts +0 -12
  86. package/dist/server/resourcers/collections.js +0 -102
  87. package/dist/server/resourcers/views.d.ts +0 -17
  88. package/dist/server/resourcers/views.js +0 -116
  89. package/dist/server/server.d.ts +0 -19
  90. package/dist/server/server.js +0 -407
  91. package/dist/swagger/index.d.ts +0 -413
  92. package/dist/swagger/index.js +0 -440
@@ -1,407 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- var __create = Object.create;
11
- var __defProp = Object.defineProperty;
12
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
- var __getOwnPropNames = Object.getOwnPropertyNames;
14
- var __getProtoOf = Object.getPrototypeOf;
15
- var __hasOwnProp = Object.prototype.hasOwnProperty;
16
- var __export = (target, all) => {
17
- for (var name in all)
18
- __defProp(target, name, { get: all[name], enumerable: true });
19
- };
20
- var __copyProps = (to, from, except, desc) => {
21
- if (from && typeof from === "object" || typeof from === "function") {
22
- for (let key of __getOwnPropNames(from))
23
- if (!__hasOwnProp.call(to, key) && key !== except)
24
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
- }
26
- return to;
27
- };
28
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
- // If the importer is in node compatibility mode or this is not an ESM
30
- // file that has been converted to a CommonJS file using a Babel-
31
- // compatible transform (i.e. "__esModule" has not been set), then set
32
- // "default" to the CommonJS "module.exports" for node compatibility.
33
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
- mod
35
- ));
36
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
- var server_exports = {};
38
- __export(server_exports, {
39
- PluginDataSourceMainServer: () => PluginDataSourceMainServer,
40
- default: () => server_default
41
- });
42
- module.exports = __toCommonJS(server_exports);
43
- var import_database = require("@nocobase/database");
44
- var import_server = require("@nocobase/server");
45
- var import_async_mutex = require("async-mutex");
46
- var import_lodash = __toESM(require("lodash"));
47
- var import_path = __toESM(require("path"));
48
- var process = __toESM(require("process"));
49
- var import__ = require(".");
50
- var import_hooks = require("./hooks");
51
- var import_beforeCreateForValidateField = require("./hooks/beforeCreateForValidateField");
52
- var import_beforeCreateForViewCollection = require("./hooks/beforeCreateForViewCollection");
53
- var import_models = require("./models");
54
- var import_collections = __toESM(require("./resourcers/collections"));
55
- var import_views = __toESM(require("./resourcers/views"));
56
- var import_field_name_exists_error = require("./errors/field-name-exists-error");
57
- var import_beforeDestoryField = require("./hooks/beforeDestoryField");
58
- var import_field_is_depended_on_by_other = require("./errors/field-is-depended-on-by-other");
59
- class PluginDataSourceMainServer extends import_server.Plugin {
60
- schema;
61
- loadFilter = {};
62
- setLoadFilter(filter) {
63
- this.loadFilter = filter;
64
- }
65
- async beforeLoad() {
66
- if (this.app.db.inDialect("postgres")) {
67
- this.schema = process.env.COLLECTION_MANAGER_SCHEMA || this.db.options.schema || "public";
68
- }
69
- this.app.db.registerRepositories({
70
- CollectionRepository: import__.CollectionRepository
71
- });
72
- this.app.db.registerModels({
73
- CollectionModel: import_models.CollectionModel,
74
- FieldModel: import_models.FieldModel
75
- });
76
- this.db.addMigrations({
77
- namespace: "data-source-main",
78
- directory: import_path.default.resolve(__dirname, "./migrations"),
79
- context: {
80
- plugin: this
81
- }
82
- });
83
- this.app.db.on("collections.beforeCreate", async (model) => {
84
- if (this.app.db.inDialect("postgres") && this.schema && model.get("from") != "db2cm" && !model.get("schema")) {
85
- model.set("schema", this.schema);
86
- }
87
- });
88
- this.app.db.on("collections.beforeCreate", (0, import_beforeCreateForViewCollection.beforeCreateForViewCollection)(this.db));
89
- this.app.db.on(
90
- "collections.afterSaveWithAssociations",
91
- async (model, { context, transaction }) => {
92
- if (context) {
93
- await model.migrate({
94
- transaction
95
- });
96
- }
97
- }
98
- );
99
- this.app.db.on("collections.beforeDestroy", async (model, options) => {
100
- const removeOptions = {};
101
- if (options.transaction) {
102
- removeOptions["transaction"] = options.transaction;
103
- }
104
- const cascade = options.cascade || import_lodash.default.get(options, "context.action.params.cascade", false);
105
- if (cascade === true || cascade === "true") {
106
- removeOptions["cascade"] = true;
107
- }
108
- await model.remove(removeOptions);
109
- });
110
- this.app.db.on("fields.beforeCreate", (0, import_hooks.beforeCreateForReverseField)(this.app.db));
111
- this.app.db.on("fields.beforeCreate", async (model, options) => {
112
- const collectionName = model.get("collectionName");
113
- const collection = this.app.db.getCollection(collectionName);
114
- if (!collection) {
115
- return;
116
- }
117
- if (collection.isInherited() && collection.parentFields().has(model.get("name"))) {
118
- model.set("overriding", true);
119
- }
120
- });
121
- this.app.db.on("fields.beforeValidate", async (model) => {
122
- if (model.get("name") && model.get("name").includes(".")) {
123
- model.set("field", model.get("name"));
124
- model.set("name", model.get("name").replace(/\./g, "_"));
125
- }
126
- });
127
- this.app.db.on("fields.beforeCreate", async (model, options) => {
128
- if (model.get("source"))
129
- return;
130
- const type = model.get("type");
131
- const fn = import_hooks.beforeInitOptions[type];
132
- if (fn) {
133
- await fn(model, { database: this.app.db });
134
- }
135
- });
136
- this.app.db.on("fields.beforeCreate", (0, import_beforeCreateForValidateField.beforeCreateForValidateField)(this.app.db));
137
- this.app.db.on("fields.afterCreate", (0, import_hooks.afterCreateForReverseField)(this.app.db));
138
- this.app.db.on("fields.beforeCreate", async (model, options) => {
139
- const { transaction } = options;
140
- const collectionName = model.get("collectionName");
141
- const name = model.get("name");
142
- if (!collectionName || !name) {
143
- return;
144
- }
145
- const exists = await this.app.db.getRepository("fields").findOne({
146
- filter: {
147
- collectionName,
148
- name
149
- },
150
- transaction
151
- });
152
- if (exists) {
153
- throw new import_field_name_exists_error.FieldNameExistsError(name, collectionName);
154
- }
155
- });
156
- this.app.db.on("fields.beforeUpdate", (0, import_beforeCreateForValidateField.beforeUpdateForValidateField)(this.app.db));
157
- this.app.db.on("fields.beforeUpdate", async (model, options) => {
158
- const newValue = options.values;
159
- if (model.get("reverseKey") && import_lodash.default.get(newValue, "reverseField") && !import_lodash.default.get(newValue, "reverseField.key")) {
160
- const field = await this.app.db.getModel("fields").findByPk(model.get("reverseKey"), { transaction: options.transaction });
161
- if (field) {
162
- throw new Error("cant update field without a reverseField key");
163
- }
164
- }
165
- if (model.get("sortable") && model.get("type") === "hasMany") {
166
- model.set("sortBy", model.get("foreignKey") + "Sort");
167
- }
168
- });
169
- this.app.db.on("fields.afterUpdate", async (model, { context, transaction }) => {
170
- const prevOptions = model.previous("options");
171
- const currentOptions = model.get("options");
172
- if (context) {
173
- const prev = prevOptions["unique"];
174
- const next = currentOptions["unique"];
175
- if (Boolean(prev) !== Boolean(next)) {
176
- await model.syncUniqueIndex({ transaction });
177
- }
178
- }
179
- const prevDefaultValue = prevOptions["defaultValue"];
180
- const currentDefaultValue = currentOptions["defaultValue"];
181
- if (prevDefaultValue != currentDefaultValue) {
182
- await model.syncDefaultValue({ transaction, defaultValue: currentDefaultValue });
183
- }
184
- const prevOnDelete = prevOptions["onDelete"];
185
- const currentOnDelete = currentOptions["onDelete"];
186
- if (prevOnDelete != currentOnDelete) {
187
- await model.syncReferenceCheckOption({ transaction });
188
- }
189
- if (model.get("type") === "hasMany" && model.get("sortable") && model.get("sortBy")) {
190
- await model.syncSortByField({ transaction });
191
- }
192
- });
193
- const afterCreateForForeignKeyFieldHook = (0, import_hooks.afterCreateForForeignKeyField)(this.app.db);
194
- this.app.db.on("fields.afterCreate", async (model, options) => {
195
- const { context, transaction } = options;
196
- if (context) {
197
- await model.load({ transaction });
198
- await afterCreateForForeignKeyFieldHook(model, options);
199
- }
200
- });
201
- this.app.db.on("fields.afterUpdate", async (model, options) => {
202
- const { context, transaction } = options;
203
- if (context) {
204
- await model.load({ transaction });
205
- }
206
- });
207
- this.app.db.on("fields.afterSaveWithAssociations", async (model, options) => {
208
- const { context, transaction } = options;
209
- if (context) {
210
- const collection = this.app.db.getCollection(model.get("collectionName"));
211
- const syncOptions = {
212
- transaction,
213
- force: false,
214
- alter: {
215
- drop: false
216
- }
217
- };
218
- await collection.sync(syncOptions);
219
- }
220
- });
221
- this.app.db.on("fields.beforeDestroy", (0, import_beforeDestoryField.beforeDestoryField)(this.app.db));
222
- this.app.db.on("fields.beforeDestroy", (0, import_hooks.beforeDestroyForeignKey)(this.app.db));
223
- const mutex = new import_async_mutex.Mutex();
224
- this.app.db.on("fields.beforeDestroy", async (model, options) => {
225
- await mutex.runExclusive(async () => {
226
- await model.remove(options);
227
- });
228
- });
229
- this.app.db.on("fields.afterDestroy", async (model, options) => {
230
- const { transaction } = options;
231
- const collectionName = model.get("collectionName");
232
- const childCollections = this.db.inheritanceMap.getChildren(collectionName);
233
- const childShouldRemoveField = Array.from(childCollections).filter((item) => {
234
- const parents = Array.from(this.db.inheritanceMap.getParents(item)).map((parent) => {
235
- const collection = this.db.getCollection(parent);
236
- const field = collection.getField(model.get("name"));
237
- return field;
238
- }).filter(Boolean);
239
- return parents.length == 0;
240
- });
241
- await this.db.getCollection("fields").repository.destroy({
242
- filter: {
243
- name: model.get("name"),
244
- collectionName: {
245
- $in: childShouldRemoveField
246
- },
247
- options: {
248
- overriding: true
249
- }
250
- },
251
- transaction
252
- });
253
- });
254
- const loadCollections = async () => {
255
- this.log.debug("loading custom collections", { method: "loadCollections" });
256
- this.app.setMaintainingMessage("loading custom collections");
257
- await this.app.db.getRepository("collections").load({
258
- filter: this.loadFilter
259
- });
260
- };
261
- this.app.on("beforeStart", loadCollections);
262
- this.app.resourcer.use(async (ctx, next) => {
263
- const { resourceName, actionName } = ctx.action;
264
- if (resourceName === "collections.fields" && actionName === "update") {
265
- const { updateAssociationValues = [] } = ctx.action.params;
266
- updateAssociationValues.push("uiSchema");
267
- ctx.action.mergeParams({
268
- updateAssociationValues
269
- });
270
- }
271
- await next();
272
- });
273
- this.app.acl.allow("collections", "list", "loggedIn");
274
- this.app.acl.allow("collectionCategories", "list", "loggedIn");
275
- this.app.acl.registerSnippet({
276
- name: `pm.data-source-manager.data-source-main`,
277
- actions: ["collections:*", "collections.fields:*", "collectionCategories:*"]
278
- });
279
- this.app.acl.registerSnippet({
280
- name: `pm.data-source-manager.collection-view `,
281
- actions: ["dbViews:*"]
282
- });
283
- }
284
- async load() {
285
- await this.importCollections(import_path.default.resolve(__dirname, "./collections"));
286
- this.db.getRepository("collections").setApp(this.app);
287
- const errorHandlerPlugin = this.app.getPlugin("error-handler");
288
- errorHandlerPlugin.errorHandler.register(
289
- (err) => {
290
- return err instanceof import_database.UniqueConstraintError;
291
- },
292
- (err, ctx) => {
293
- return ctx.throw(400, ctx.t(`The value of ${Object.keys(err.fields)} field duplicated`));
294
- }
295
- );
296
- errorHandlerPlugin.errorHandler.register(
297
- (err) => err instanceof import_field_is_depended_on_by_other.FieldIsDependedOnByOtherError,
298
- (err, ctx) => {
299
- ctx.status = 400;
300
- ctx.body = {
301
- errors: [
302
- {
303
- message: ctx.i18n.t("field-is-depended-on-by-other", {
304
- fieldName: err.options.fieldName,
305
- fieldCollectionName: err.options.fieldCollectionName,
306
- dependedFieldName: err.options.dependedFieldName,
307
- dependedFieldCollectionName: err.options.dependedFieldCollectionName,
308
- dependedFieldAs: err.options.dependedFieldAs,
309
- ns: "data-source-main"
310
- })
311
- }
312
- ]
313
- };
314
- }
315
- );
316
- errorHandlerPlugin.errorHandler.register(
317
- (err) => err instanceof import_field_name_exists_error.FieldNameExistsError,
318
- (err, ctx) => {
319
- ctx.status = 400;
320
- ctx.body = {
321
- errors: [
322
- {
323
- message: ctx.i18n.t("field-name-exists", {
324
- name: err.value,
325
- collectionName: err.collectionName,
326
- ns: "data-source-main"
327
- })
328
- }
329
- ]
330
- };
331
- }
332
- );
333
- this.app.resourcer.use(async (ctx, next) => {
334
- if (ctx.action.resourceName === "collections.fields" && ["create", "update"].includes(ctx.action.actionName)) {
335
- ctx.action.mergeParams({
336
- updateAssociationValues: ["reverseField"]
337
- });
338
- }
339
- await next();
340
- });
341
- this.app.resource(import_views.default);
342
- this.app.actions(import_collections.default);
343
- const handleFieldSource = (fields) => {
344
- var _a;
345
- for (const field of import_lodash.default.castArray(fields)) {
346
- if (field.get("source")) {
347
- const [collectionSource, fieldSource] = field.get("source").split(".");
348
- const collectionField = (_a = this.app.db.getCollection(collectionSource)) == null ? void 0 : _a.getField(fieldSource);
349
- if (!collectionField) {
350
- continue;
351
- }
352
- const newOptions = {};
353
- import_lodash.default.merge(newOptions, import_lodash.default.omit(collectionField.options, "name"));
354
- import_lodash.default.mergeWith(newOptions, field.get(), (objValue, srcValue) => {
355
- if (srcValue === null) {
356
- return objValue;
357
- }
358
- });
359
- field.set("options", newOptions);
360
- }
361
- }
362
- };
363
- this.app.resourcer.use(async (ctx, next) => {
364
- var _a, _b;
365
- await next();
366
- if (ctx.action.resourceName === "collections" && ctx.action.actionName == "list" && ((_a = ctx.action.params) == null ? void 0 : _a.paginate) == "false") {
367
- for (const collection of ctx.body) {
368
- if (collection.get("view")) {
369
- const fields = collection.fields;
370
- handleFieldSource(fields);
371
- }
372
- }
373
- }
374
- if (ctx.action.resourceName == "collections.fields" && ctx.action.actionName == "list") {
375
- handleFieldSource(((_b = ctx.action.params) == null ? void 0 : _b.paginate) == "false" ? ctx.body : ctx.body.rows);
376
- }
377
- if (ctx.action.resourceName == "collections.fields" && ctx.action.actionName == "get") {
378
- handleFieldSource(ctx.body);
379
- }
380
- });
381
- this.app.db.extendCollection({
382
- name: "collectionCategory",
383
- dumpRules: "required",
384
- origin: this.options.packageName
385
- });
386
- }
387
- async install() {
388
- const dataSourcesCollection = this.app.db.getCollection("dataSources");
389
- if (dataSourcesCollection) {
390
- await dataSourcesCollection.repository.firstOrCreate({
391
- filterKeys: ["key"],
392
- values: {
393
- key: "main",
394
- type: "main",
395
- displayName: '{{t("Main")}}',
396
- fixed: true,
397
- options: {}
398
- }
399
- });
400
- }
401
- }
402
- }
403
- var server_default = PluginDataSourceMainServer;
404
- // Annotate the CommonJS export names for ESM import in node:
405
- 0 && (module.exports = {
406
- PluginDataSourceMainServer
407
- });