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

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,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"}})});
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}()});
@@ -8,14 +8,13 @@
8
8
  */
9
9
 
10
10
  module.exports = {
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",
11
+ "@nocobase/client": "1.6.0-alpha.2",
12
+ "@nocobase/database": "1.6.0-alpha.2",
13
+ "@nocobase/plugin-error-handler": "1.6.0-alpha.2",
14
+ "@nocobase/server": "1.6.0-alpha.2",
16
15
  "lodash": "4.17.21",
17
- "@nocobase/test": "1.5.0-beta.1",
18
- "@nocobase/utils": "1.5.0-beta.1",
16
+ "@nocobase/test": "1.6.0-alpha.2",
17
+ "@nocobase/utils": "1.6.0-alpha.2",
19
18
  "sequelize": "6.35.2",
20
19
  "dayjs": "1.11.10"
21
20
  };
@@ -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
- onSync(message: any): Promise<void>;
14
+ handleSyncMessage(message: any): Promise<void>;
15
15
  beforeLoad(): Promise<void>;
16
16
  load(): Promise<void>;
17
17
  install(): Promise<void>;
@@ -42,7 +42,6 @@ __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");
46
45
  var import_lodash = __toESM(require("lodash"));
47
46
  var import_path = __toESM(require("path"));
48
47
  var import__ = require(".");
@@ -61,9 +60,9 @@ class PluginDataSourceMainServer extends import_server.Plugin {
61
60
  setLoadFilter(filter) {
62
61
  this.loadFilter = filter;
63
62
  }
64
- async onSync(message) {
63
+ async handleSyncMessage(message) {
65
64
  const { type, collectionName } = message;
66
- if (type === "newCollection") {
65
+ if (type === "syncCollection") {
67
66
  const collectionModel = await this.app.db.getCollection("collections").repository.findOne({
68
67
  filter: {
69
68
  name: collectionName
@@ -71,6 +70,22 @@ class PluginDataSourceMainServer extends import_server.Plugin {
71
70
  });
72
71
  await collectionModel.load();
73
72
  }
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
+ }
74
89
  }
75
90
  async beforeLoad() {
76
91
  this.app.db.registerRepositories({
@@ -95,10 +110,15 @@ class PluginDataSourceMainServer extends import_server.Plugin {
95
110
  await model.migrate({
96
111
  transaction
97
112
  });
98
- this.app.syncManager.publish(this.name, {
99
- type: "newCollection",
100
- collectionName: model.get("name")
101
- });
113
+ this.sendSyncMessage(
114
+ {
115
+ type: "syncCollection",
116
+ collectionName: model.get("name")
117
+ },
118
+ {
119
+ transaction
120
+ }
121
+ );
102
122
  }
103
123
  }
104
124
  );
@@ -112,6 +132,15 @@ class PluginDataSourceMainServer extends import_server.Plugin {
112
132
  removeOptions["cascade"] = true;
113
133
  }
114
134
  await model.remove(removeOptions);
135
+ this.sendSyncMessage(
136
+ {
137
+ type: "removeCollection",
138
+ collectionName: model.get("name")
139
+ },
140
+ {
141
+ transaction: options.transaction
142
+ }
143
+ );
115
144
  });
116
145
  this.app.db.on("fields.beforeCreate", (0, import_beforeCreateCheckFieldInMySQL.beforeCreateCheckFieldInMySQL)(this.app.db));
117
146
  this.app.db.on("fields.beforeCreate", (0, import_hooks.beforeCreateForReverseField)(this.app.db));
@@ -222,14 +251,33 @@ class PluginDataSourceMainServer extends import_server.Plugin {
222
251
  }
223
252
  };
224
253
  await collection.sync(syncOptions);
254
+ this.sendSyncMessage(
255
+ {
256
+ type: "syncCollection",
257
+ collectionName: model.get("collectionName")
258
+ },
259
+ {
260
+ transaction
261
+ }
262
+ );
225
263
  }
226
264
  });
227
265
  this.app.db.on("fields.beforeDestroy", (0, import_beforeDestoryField.beforeDestoryField)(this.app.db));
228
266
  this.app.db.on("fields.beforeDestroy", (0, import_hooks.beforeDestroyForeignKey)(this.app.db));
229
- const mutex = new import_async_mutex.Mutex();
230
267
  this.app.db.on("fields.beforeDestroy", async (model, options) => {
231
- await mutex.runExclusive(async () => {
268
+ const lockKey = `${this.name}:fields.beforeDestroy:${model.get("collectionName")}`;
269
+ await this.app.lockManager.runExclusive(lockKey, async () => {
232
270
  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
+ );
233
281
  });
234
282
  });
235
283
  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-beta.1",
7
+ "version": "1.6.0-alpha.2",
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",
15
14
  "toposort": "^2.0.2"
16
15
  },
17
16
  "peerDependencies": {
18
17
  "@nocobase/client": "1.x",
19
18
  "@nocobase/database": "1.x",
20
19
  "@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": "10c6f1f3d90e91f3aabfa80449c7ef062e90f6af",
25
+ "gitHead": "08bbc34c21727fc0ad0880f397a42bf7741091ee",
26
26
  "keywords": [
27
27
  "Data sources"
28
28
  ]