@nocobase/plugin-data-source-main 1.5.0-alpha.4 → 1.5.0-beta.1

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.
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client")):"function"==typeof define&&define.amd?define("@nocobase/plugin-data-source-main",["@nocobase/client"],t):"object"==typeof exports?exports["@nocobase/plugin-data-source-main"]=t(require("@nocobase/client")):e["@nocobase/plugin-data-source-main"]=t(e["@nocobase/client"])}(self,function(e){return function(){"use strict";var t={772:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};r.r(o);var u=r(772);function i(e,t,n,r,o,u,i){try{var c=e[u](i),a=c.value}catch(e){n(e);return}c.done?t(a):Promise.resolve(a).then(r,o)}function c(e,t,n){return(c=s()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&l(o,n.prototype),o}).apply(null,arguments)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function p(e){var t="function"==typeof Map?new Map:void 0;return(p=function(e){var n;if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return c(e,arguments,f(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),l(r,e)})(e)}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}var b=function(e){var t,n,r;function o(){var e,t,n;return!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,o),e=this,t=o,n=arguments,t=f(t),function(e,t){return t&&("object"===function(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}(t)||"function"==typeof t)?t:function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,n||[],f(e).constructor):t.apply(e,n))}return!function(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(o,e),t=o,n=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var n,r,o,u,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return u={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function c(u){return function(c){return function(u){if(n)throw TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=t.call(e,i)}catch(e){u=[6,e],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}(this,function(e){return[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var u=e.apply(t,n);function c(e){i(u,r,o,c,a,"next",e)}function a(e){i(u,r,o,c,a,"throw",e)}c(void 0)})})()}}],a(t.prototype,n),o}(p(u.Plugin));return o.default=b,o}()});
10
+ (function(e,n){typeof exports=="object"&&typeof module!="undefined"?n(exports,require("@nocobase/client")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client"],n):(e=typeof globalThis!="undefined"?globalThis:e||self,n(e["@nocobase/plugin-data-source-main"]={},e["@nocobase/client"]))})(this,function(e,n){"use strict";var a=(e,n,o)=>new Promise((u,d)=>{var c=i=>{try{t(o.next(i))}catch(s){d(s)}},l=i=>{try{t(o.throw(i))}catch(s){d(s)}},t=i=>i.done?u(i.value):Promise.resolve(i.value).then(c,l);t((o=o.apply(e,n)).next())});class o extends n.Plugin{load(){return a(this,null,function*(){})}}e.default=o,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -8,13 +8,14 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "1.5.0-alpha.4",
12
- "@nocobase/database": "1.5.0-alpha.4",
13
- "@nocobase/plugin-error-handler": "1.5.0-alpha.4",
14
- "@nocobase/server": "1.5.0-alpha.4",
11
+ "@nocobase/client": "1.5.0-beta.1",
12
+ "@nocobase/database": "1.5.0-beta.1",
13
+ "@nocobase/plugin-error-handler": "1.5.0-beta.1",
14
+ "@nocobase/server": "1.5.0-beta.1",
15
+ "async-mutex": "0.3.2",
15
16
  "lodash": "4.17.21",
16
- "@nocobase/test": "1.5.0-alpha.4",
17
- "@nocobase/utils": "1.5.0-alpha.4",
17
+ "@nocobase/test": "1.5.0-beta.1",
18
+ "@nocobase/utils": "1.5.0-beta.1",
18
19
  "sequelize": "6.35.2",
19
20
  "dayjs": "1.11.10"
20
21
  };
@@ -11,7 +11,7 @@ import { Plugin } from '@nocobase/server';
11
11
  export declare class PluginDataSourceMainServer extends Plugin {
12
12
  private loadFilter;
13
13
  setLoadFilter(filter: Filter): void;
14
- handleSyncMessage(message: any): Promise<void>;
14
+ onSync(message: any): Promise<void>;
15
15
  beforeLoad(): Promise<void>;
16
16
  load(): Promise<void>;
17
17
  install(): Promise<void>;
@@ -42,6 +42,7 @@ __export(server_exports, {
42
42
  module.exports = __toCommonJS(server_exports);
43
43
  var import_database = require("@nocobase/database");
44
44
  var import_server = require("@nocobase/server");
45
+ var import_async_mutex = require("async-mutex");
45
46
  var import_lodash = __toESM(require("lodash"));
46
47
  var import_path = __toESM(require("path"));
47
48
  var import__ = require(".");
@@ -60,9 +61,9 @@ class PluginDataSourceMainServer extends import_server.Plugin {
60
61
  setLoadFilter(filter) {
61
62
  this.loadFilter = filter;
62
63
  }
63
- async handleSyncMessage(message) {
64
+ async onSync(message) {
64
65
  const { type, collectionName } = message;
65
- if (type === "syncCollection") {
66
+ if (type === "newCollection") {
66
67
  const collectionModel = await this.app.db.getCollection("collections").repository.findOne({
67
68
  filter: {
68
69
  name: collectionName
@@ -70,22 +71,6 @@ class PluginDataSourceMainServer extends import_server.Plugin {
70
71
  });
71
72
  await collectionModel.load();
72
73
  }
73
- if (type === "removeField") {
74
- const { collectionName: collectionName2, fieldName } = message;
75
- const collection = this.app.db.getCollection(collectionName2);
76
- if (!collection) {
77
- return;
78
- }
79
- return collection.removeFieldFromDb(fieldName);
80
- }
81
- if (type === "removeCollection") {
82
- const { collectionName: collectionName2 } = message;
83
- const collection = this.app.db.getCollection(collectionName2);
84
- if (!collection) {
85
- return;
86
- }
87
- collection.remove();
88
- }
89
74
  }
90
75
  async beforeLoad() {
91
76
  this.app.db.registerRepositories({
@@ -110,15 +95,10 @@ class PluginDataSourceMainServer extends import_server.Plugin {
110
95
  await model.migrate({
111
96
  transaction
112
97
  });
113
- this.sendSyncMessage(
114
- {
115
- type: "syncCollection",
116
- collectionName: model.get("name")
117
- },
118
- {
119
- transaction
120
- }
121
- );
98
+ this.app.syncManager.publish(this.name, {
99
+ type: "newCollection",
100
+ collectionName: model.get("name")
101
+ });
122
102
  }
123
103
  }
124
104
  );
@@ -132,15 +112,6 @@ class PluginDataSourceMainServer extends import_server.Plugin {
132
112
  removeOptions["cascade"] = true;
133
113
  }
134
114
  await model.remove(removeOptions);
135
- this.sendSyncMessage(
136
- {
137
- type: "removeCollection",
138
- collectionName: model.get("name")
139
- },
140
- {
141
- transaction: options.transaction
142
- }
143
- );
144
115
  });
145
116
  this.app.db.on("fields.beforeCreate", (0, import_beforeCreateCheckFieldInMySQL.beforeCreateCheckFieldInMySQL)(this.app.db));
146
117
  this.app.db.on("fields.beforeCreate", (0, import_hooks.beforeCreateForReverseField)(this.app.db));
@@ -251,33 +222,14 @@ class PluginDataSourceMainServer extends import_server.Plugin {
251
222
  }
252
223
  };
253
224
  await collection.sync(syncOptions);
254
- this.sendSyncMessage(
255
- {
256
- type: "syncCollection",
257
- collectionName: model.get("collectionName")
258
- },
259
- {
260
- transaction
261
- }
262
- );
263
225
  }
264
226
  });
265
227
  this.app.db.on("fields.beforeDestroy", (0, import_beforeDestoryField.beforeDestoryField)(this.app.db));
266
228
  this.app.db.on("fields.beforeDestroy", (0, import_hooks.beforeDestroyForeignKey)(this.app.db));
229
+ const mutex = new import_async_mutex.Mutex();
267
230
  this.app.db.on("fields.beforeDestroy", async (model, options) => {
268
- const lockKey = `${this.name}:fields.beforeDestroy:${model.get("collectionName")}`;
269
- await this.app.lockManager.runExclusive(lockKey, async () => {
231
+ await mutex.runExclusive(async () => {
270
232
  await model.remove(options);
271
- this.sendSyncMessage(
272
- {
273
- type: "removeField",
274
- collectionName: model.get("collectionName"),
275
- fieldName: model.get("name")
276
- },
277
- {
278
- transaction: options.transaction
279
- }
280
- );
281
233
  });
282
234
  });
283
235
  this.app.db.on("fields.afterDestroy", async (model, options) => {
package/package.json CHANGED
@@ -4,25 +4,25 @@
4
4
  "displayName.zh-CN": "数据源:主数据库",
5
5
  "description": "NocoBase main database, supports relational databases such as PostgreSQL, MySQL, MariaDB and so on.",
6
6
  "description.zh-CN": "NocoBase 主数据库,支持 PostgreSQL、MySQL、MariaDB 等关系型数据库。",
7
- "version": "1.5.0-alpha.4",
7
+ "version": "1.5.0-beta.1",
8
8
  "main": "./dist/server/index.js",
9
9
  "homepage": "https://docs.nocobase.com/handbook/data-source-main",
10
10
  "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/data-source-main",
11
11
  "license": "AGPL-3.0",
12
12
  "devDependencies": {
13
13
  "@hapi/topo": "^6.0.0",
14
+ "async-mutex": "^0.3.2",
14
15
  "toposort": "^2.0.2"
15
16
  },
16
17
  "peerDependencies": {
17
18
  "@nocobase/client": "1.x",
18
19
  "@nocobase/database": "1.x",
19
20
  "@nocobase/plugin-error-handler": "1.x",
20
- "@nocobase/plugin-field-sort": "1.x",
21
21
  "@nocobase/server": "1.x",
22
22
  "@nocobase/test": "1.x",
23
23
  "@nocobase/utils": "1.x"
24
24
  },
25
- "gitHead": "22b9bce1c6c075afdc738766eb47853adaeb0876",
25
+ "gitHead": "10c6f1f3d90e91f3aabfa80449c7ef062e90f6af",
26
26
  "keywords": [
27
27
  "Data sources"
28
28
  ]