@nocobase/plugin-data-source-main 1.0.0-alpha.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.
Files changed (91) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +9 -0
  3. package/README.zh-CN.md +9 -0
  4. package/client.d.ts +2 -0
  5. package/client.js +1 -0
  6. package/dist/client/index.d.ts +5 -0
  7. package/dist/client/index.js +1 -0
  8. package/dist/externalVersion.js +13 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +39 -0
  11. package/dist/server/collections/collectionCategories.d.ts +3 -0
  12. package/dist/server/collections/collectionCategories.js +52 -0
  13. package/dist/server/collections/collections.d.ts +3 -0
  14. package/dist/server/collections/collections.js +92 -0
  15. package/dist/server/collections/fields.d.ts +3 -0
  16. package/dist/server/collections/fields.js +94 -0
  17. package/dist/server/hooks/afterCreateForForeignKeyField.d.ts +2 -0
  18. package/dist/server/hooks/afterCreateForForeignKeyField.js +208 -0
  19. package/dist/server/hooks/afterCreateForReverseField.d.ts +4 -0
  20. package/dist/server/hooks/afterCreateForReverseField.js +37 -0
  21. package/dist/server/hooks/afterDestroyForForeignKeyField.d.ts +2 -0
  22. package/dist/server/hooks/afterDestroyForForeignKeyField.js +89 -0
  23. package/dist/server/hooks/beforeCreateForChildrenCollection.d.ts +5 -0
  24. package/dist/server/hooks/beforeCreateForChildrenCollection.js +58 -0
  25. package/dist/server/hooks/beforeCreateForReverseField.d.ts +4 -0
  26. package/dist/server/hooks/beforeCreateForReverseField.js +64 -0
  27. package/dist/server/hooks/beforeCreateForValidateField.d.ts +7 -0
  28. package/dist/server/hooks/beforeCreateForValidateField.js +67 -0
  29. package/dist/server/hooks/beforeCreateForViewCollection.d.ts +5 -0
  30. package/dist/server/hooks/beforeCreateForViewCollection.js +30 -0
  31. package/dist/server/hooks/beforeDestroyForeignKey.d.ts +2 -0
  32. package/dist/server/hooks/beforeDestroyForeignKey.js +66 -0
  33. package/dist/server/hooks/beforeInitOptions.d.ts +15 -0
  34. package/dist/server/hooks/beforeInitOptions.js +128 -0
  35. package/dist/server/hooks/index.d.ts +5 -0
  36. package/dist/server/hooks/index.js +29 -0
  37. package/dist/server/index.d.ts +4 -0
  38. package/dist/server/index.js +45 -0
  39. package/dist/server/migrations/20220613103214-alert-sub-table.d.ts +5 -0
  40. package/dist/server/migrations/20220613103214-alert-sub-table.js +41 -0
  41. package/dist/server/migrations/20220704225714-drop-foreign-keys.d.ts +5 -0
  42. package/dist/server/migrations/20220704225714-drop-foreign-keys.js +70 -0
  43. package/dist/server/migrations/20221101111110-update-foreign-fields.d.ts +5 -0
  44. package/dist/server/migrations/20221101111110-update-foreign-fields.js +65 -0
  45. package/dist/server/migrations/20221104151410-update-collections-hidden.d.ts +5 -0
  46. package/dist/server/migrations/20221104151410-update-collections-hidden.js +48 -0
  47. package/dist/server/migrations/20221121111110-update-fk-type.d.ts +5 -0
  48. package/dist/server/migrations/20221121111110-update-fk-type.js +146 -0
  49. package/dist/server/migrations/20221121111113-update-id-to-bigint.d.ts +5 -0
  50. package/dist/server/migrations/20221121111113-update-id-to-bigint.js +180 -0
  51. package/dist/server/migrations/20221221103220-timestamps.d.ts +5 -0
  52. package/dist/server/migrations/20221221103220-timestamps.js +46 -0
  53. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.d.ts +5 -0
  54. package/dist/server/migrations/20230225111112-drop-ui-schema-relation.js +88 -0
  55. package/dist/server/migrations/20230509111114-alert-ui-schema.d.ts +5 -0
  56. package/dist/server/migrations/20230509111114-alert-ui-schema.js +78 -0
  57. package/dist/server/migrations/20230623145414-number-step.d.ts +5 -0
  58. package/dist/server/migrations/20230623145414-number-step.js +72 -0
  59. package/dist/server/migrations/20230704222935-tableoid.d.ts +5 -0
  60. package/dist/server/migrations/20230704222935-tableoid.js +74 -0
  61. package/dist/server/migrations/20230918024546-set-collection-schema.d.ts +5 -0
  62. package/dist/server/migrations/20230918024546-set-collection-schema.js +46 -0
  63. package/dist/server/migrations/20240220153103-install-main-datasource.d.ts +6 -0
  64. package/dist/server/migrations/20240220153103-install-main-datasource.js +42 -0
  65. package/dist/server/migrations/20240419182147-fix-created-by-field-target.d.ts +6 -0
  66. package/dist/server/migrations/20240419182147-fix-created-by-field-target.js +40 -0
  67. package/dist/server/migrations/20240420105949-add-sort-field.d.ts +6 -0
  68. package/dist/server/migrations/20240420105949-add-sort-field.js +72 -0
  69. package/dist/server/models/collection.d.ts +19 -0
  70. package/dist/server/models/collection.js +185 -0
  71. package/dist/server/models/field.d.ts +18 -0
  72. package/dist/server/models/field.js +164 -0
  73. package/dist/server/models/index.d.ts +2 -0
  74. package/dist/server/models/index.js +23 -0
  75. package/dist/server/repositories/collection-repository.d.ts +12 -0
  76. package/dist/server/repositories/collection-repository.js +159 -0
  77. package/dist/server/repositories/index.d.ts +1 -0
  78. package/dist/server/repositories/index.js +21 -0
  79. package/dist/server/resourcers/collections.d.ts +4 -0
  80. package/dist/server/resourcers/collections.js +93 -0
  81. package/dist/server/resourcers/sql.d.ts +10 -0
  82. package/dist/server/resourcers/sql.js +106 -0
  83. package/dist/server/resourcers/views.d.ts +9 -0
  84. package/dist/server/resourcers/views.js +107 -0
  85. package/dist/server/server.d.ts +11 -0
  86. package/dist/server/server.js +345 -0
  87. package/dist/swagger/index.d.ts +405 -0
  88. package/dist/swagger/index.js +431 -0
  89. package/package.json +29 -0
  90. package/server.d.ts +2 -0
  91. package/server.js +1 -0
package/client.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './dist/client';
2
+ export { default } from './dist/client';
package/client.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/client/index.js');
@@ -0,0 +1,5 @@
1
+ import { Plugin } from '@nocobase/client';
2
+ declare class PluginDataSourceMainClient extends Plugin {
3
+ load(): Promise<void>;
4
+ }
5
+ export default PluginDataSourceMainClient;
@@ -0,0 +1 @@
1
+ (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"}})});
@@ -0,0 +1,13 @@
1
+ module.exports = {
2
+ "@nocobase/client": "1.0.0-alpha.1",
3
+ "@nocobase/database": "1.0.0-alpha.1",
4
+ "@nocobase/plugin-error-handler": "1.0.0-alpha.1",
5
+ "@nocobase/server": "1.0.0-alpha.1",
6
+ "async-mutex": "0.3.2",
7
+ "lodash": "4.17.21",
8
+ "@nocobase/test": "1.0.0-alpha.1",
9
+ "@nocobase/utils": "1.0.0-alpha.1",
10
+ "sequelize": "6.35.2",
11
+ "@nocobase/actions": "1.0.0-alpha.1",
12
+ "dayjs": "1.11.10"
13
+ };
@@ -0,0 +1,2 @@
1
+ export * from './server';
2
+ export { default } from './server';
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var src_exports = {};
30
+ __export(src_exports, {
31
+ default: () => import_server.default
32
+ });
33
+ module.exports = __toCommonJS(src_exports);
34
+ __reExport(src_exports, require("./server"), module.exports);
35
+ var import_server = __toESM(require("./server"));
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ ...require("./server")
39
+ });
@@ -0,0 +1,3 @@
1
+ import { CollectionOptions } from '@nocobase/database';
2
+ declare const _default: CollectionOptions;
3
+ export default _default;
@@ -0,0 +1,52 @@
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 collectionCategories_exports = {};
19
+ __export(collectionCategories_exports, {
20
+ default: () => collectionCategories_default
21
+ });
22
+ module.exports = __toCommonJS(collectionCategories_exports);
23
+ var collectionCategories_default = {
24
+ dumpRules: {
25
+ group: "required"
26
+ },
27
+ shared: true,
28
+ name: "collectionCategories",
29
+ autoGenId: true,
30
+ sortable: true,
31
+ fields: [
32
+ {
33
+ type: "string",
34
+ name: "name",
35
+ translation: true
36
+ },
37
+ {
38
+ type: "string",
39
+ name: "color",
40
+ defaultValue: "default"
41
+ },
42
+ {
43
+ type: "belongsToMany",
44
+ name: "collections",
45
+ target: "collections",
46
+ foreignKey: "categoryId",
47
+ otherKey: "collectionName",
48
+ targetKey: "name",
49
+ through: "collectionCategory"
50
+ }
51
+ ]
52
+ };
@@ -0,0 +1,3 @@
1
+ import { CollectionOptions } from '@nocobase/database';
2
+ declare const _default: CollectionOptions;
3
+ export default _default;
@@ -0,0 +1,92 @@
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 collections_exports = {};
19
+ __export(collections_exports, {
20
+ default: () => collections_default
21
+ });
22
+ module.exports = __toCommonJS(collections_exports);
23
+ var collections_default = {
24
+ dumpRules: "required",
25
+ shared: true,
26
+ name: "collections",
27
+ sortable: "sort",
28
+ autoGenId: false,
29
+ model: "CollectionModel",
30
+ repository: "CollectionRepository",
31
+ timestamps: false,
32
+ filterTargetKey: "name",
33
+ fields: [
34
+ {
35
+ type: "uid",
36
+ name: "key",
37
+ primaryKey: true
38
+ },
39
+ {
40
+ type: "uid",
41
+ name: "name",
42
+ unique: true,
43
+ prefix: "t_"
44
+ },
45
+ {
46
+ type: "string",
47
+ name: "title",
48
+ required: true,
49
+ translation: true
50
+ },
51
+ {
52
+ type: "boolean",
53
+ name: "inherit",
54
+ defaultValue: false
55
+ },
56
+ {
57
+ type: "boolean",
58
+ name: "hidden",
59
+ defaultValue: false
60
+ },
61
+ {
62
+ type: "json",
63
+ name: "options",
64
+ defaultValue: {}
65
+ },
66
+ {
67
+ type: "string",
68
+ name: "description",
69
+ allowNull: true
70
+ },
71
+ {
72
+ type: "hasMany",
73
+ name: "fields",
74
+ target: "fields",
75
+ sourceKey: "name",
76
+ targetKey: "name",
77
+ foreignKey: "collectionName",
78
+ sortBy: "sort"
79
+ },
80
+ {
81
+ type: "belongsToMany",
82
+ name: "category",
83
+ target: "collectionCategories",
84
+ sourceKey: "name",
85
+ foreignKey: "collectionName",
86
+ otherKey: "categoryId",
87
+ targetKey: "id",
88
+ sortBy: "sort",
89
+ through: "collectionCategory"
90
+ }
91
+ ]
92
+ };
@@ -0,0 +1,3 @@
1
+ import { CollectionOptions } from '@nocobase/database';
2
+ declare const _default: CollectionOptions;
3
+ export default _default;
@@ -0,0 +1,94 @@
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 fields_exports = {};
19
+ __export(fields_exports, {
20
+ default: () => fields_default
21
+ });
22
+ module.exports = __toCommonJS(fields_exports);
23
+ var fields_default = {
24
+ dumpRules: "required",
25
+ shared: true,
26
+ name: "fields",
27
+ autoGenId: false,
28
+ model: "FieldModel",
29
+ timestamps: false,
30
+ sortable: {
31
+ name: "sort",
32
+ scopeKey: "collectionName"
33
+ },
34
+ indexes: [
35
+ {
36
+ type: "UNIQUE",
37
+ fields: ["collectionName", "name"]
38
+ }
39
+ ],
40
+ fields: [
41
+ {
42
+ type: "uid",
43
+ name: "key",
44
+ primaryKey: true
45
+ },
46
+ {
47
+ type: "uid",
48
+ name: "name",
49
+ prefix: "f_"
50
+ },
51
+ {
52
+ type: "string",
53
+ name: "type"
54
+ },
55
+ {
56
+ type: "string",
57
+ name: "interface",
58
+ allowNull: true
59
+ },
60
+ {
61
+ type: "string",
62
+ name: "description",
63
+ allowNull: true
64
+ },
65
+ {
66
+ type: "belongsTo",
67
+ name: "collection",
68
+ target: "collections",
69
+ foreignKey: "collectionName",
70
+ targetKey: "name",
71
+ onDelete: "CASCADE"
72
+ },
73
+ {
74
+ type: "hasMany",
75
+ name: "children",
76
+ target: "fields",
77
+ sourceKey: "key",
78
+ foreignKey: "parentKey"
79
+ },
80
+ {
81
+ type: "hasOne",
82
+ name: "reverseField",
83
+ target: "fields",
84
+ sourceKey: "key",
85
+ foreignKey: "reverseKey"
86
+ },
87
+ {
88
+ type: "json",
89
+ name: "options",
90
+ defaultValue: {},
91
+ translation: true
92
+ }
93
+ ]
94
+ };
@@ -0,0 +1,2 @@
1
+ import Database from '@nocobase/database';
2
+ export declare function afterCreateForForeignKeyField(db: Database): (model: any, options: any) => Promise<void>;
@@ -0,0 +1,208 @@
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 afterCreateForForeignKeyField_exports = {};
19
+ __export(afterCreateForForeignKeyField_exports, {
20
+ afterCreateForForeignKeyField: () => afterCreateForForeignKeyField
21
+ });
22
+ module.exports = __toCommonJS(afterCreateForForeignKeyField_exports);
23
+ function afterCreateForForeignKeyField(db) {
24
+ function generateFkOptions(collectionName, foreignKey) {
25
+ const collection = db.getCollection(collectionName);
26
+ if (!collection) {
27
+ throw new Error("collection not found");
28
+ }
29
+ const M = collection.model;
30
+ const attr = M.rawAttributes[foreignKey];
31
+ if (!attr) {
32
+ throw new Error(`${collectionName}.${foreignKey} does not exists`);
33
+ }
34
+ return attribute2field(attr);
35
+ }
36
+ function attribute2field(attribute) {
37
+ let type = "bigInt";
38
+ if (attribute.type.constructor.name === "INTEGER") {
39
+ type = "integer";
40
+ } else if (attribute.type.constructor.name === "STRING") {
41
+ type = "string";
42
+ } else if (attribute.type.constructor.name === "UUID") {
43
+ type = "uuid";
44
+ }
45
+ const name = attribute.fieldName;
46
+ const data = {
47
+ interface: "integer",
48
+ name,
49
+ type,
50
+ uiSchema: {
51
+ type: "number",
52
+ title: name,
53
+ "x-component": "InputNumber",
54
+ "x-read-pretty": true
55
+ }
56
+ };
57
+ if (type === "string") {
58
+ data["interface"] = "input";
59
+ data["uiSchema"] = {
60
+ type: "string",
61
+ title: name,
62
+ "x-component": "Input",
63
+ "x-read-pretty": true
64
+ };
65
+ }
66
+ if (type === "uuid") {
67
+ data["interface"] = "uuid";
68
+ data["uiSchema"] = {
69
+ type: "string",
70
+ title: name,
71
+ "x-component": "Input",
72
+ "x-read-pretty": true
73
+ };
74
+ }
75
+ return data;
76
+ }
77
+ async function createFieldIfNotExists({ values, transaction }) {
78
+ const { collectionName, name } = values;
79
+ if (!collectionName || !name) {
80
+ throw new Error(`field options invalid`);
81
+ }
82
+ const r = db.getRepository("fields");
83
+ const instance = await r.findOne({
84
+ filter: {
85
+ collectionName,
86
+ name
87
+ },
88
+ transaction
89
+ });
90
+ if (instance) {
91
+ if (instance.type !== values.type) {
92
+ throw new Error(`fk type invalid`);
93
+ }
94
+ instance.set("sort", 1);
95
+ instance.set("isForeignKey", true);
96
+ await instance.save({ transaction });
97
+ } else {
98
+ const creatInstance = await r.create({
99
+ values: {
100
+ isForeignKey: true,
101
+ ...values
102
+ },
103
+ transaction
104
+ });
105
+ creatInstance.set("sort", 1);
106
+ await creatInstance.save({ transaction });
107
+ }
108
+ await r.update({
109
+ filter: {
110
+ collectionName,
111
+ options: {
112
+ primaryKey: true
113
+ }
114
+ },
115
+ values: {
116
+ sort: 0
117
+ },
118
+ transaction
119
+ });
120
+ }
121
+ const hook = async (model, { transaction, context }) => {
122
+ if (!context) {
123
+ return;
124
+ }
125
+ const {
126
+ type,
127
+ interface: interfaceType,
128
+ collectionName,
129
+ target,
130
+ through,
131
+ foreignKey,
132
+ otherKey,
133
+ source
134
+ } = model.get();
135
+ if (source)
136
+ return;
137
+ if (["oho", "o2m"].includes(interfaceType)) {
138
+ const values = generateFkOptions(target, foreignKey);
139
+ await createFieldIfNotExists({
140
+ values: {
141
+ collectionName: target,
142
+ ...values
143
+ },
144
+ transaction
145
+ });
146
+ } else if (["obo", "m2o"].includes(interfaceType)) {
147
+ const values = generateFkOptions(collectionName, foreignKey);
148
+ await createFieldIfNotExists({
149
+ values: { collectionName, ...values },
150
+ transaction
151
+ });
152
+ } else if (["linkTo", "m2m"].includes(interfaceType)) {
153
+ if (type !== "belongsToMany") {
154
+ return;
155
+ }
156
+ const r = db.getRepository("collections");
157
+ const instance = await r.findOne({
158
+ filter: {
159
+ name: through
160
+ },
161
+ transaction
162
+ });
163
+ if (!instance) {
164
+ await r.create({
165
+ values: {
166
+ name: through,
167
+ title: through,
168
+ timestamps: true,
169
+ autoGenId: false,
170
+ hidden: true,
171
+ autoCreate: true,
172
+ isThrough: true,
173
+ sortable: false
174
+ },
175
+ context,
176
+ transaction
177
+ });
178
+ }
179
+ const opts1 = generateFkOptions(through, foreignKey);
180
+ const opts2 = generateFkOptions(through, otherKey);
181
+ await createFieldIfNotExists({
182
+ values: {
183
+ collectionName: through,
184
+ ...opts1
185
+ },
186
+ transaction
187
+ });
188
+ await createFieldIfNotExists({
189
+ values: {
190
+ collectionName: through,
191
+ ...opts2
192
+ },
193
+ transaction
194
+ });
195
+ }
196
+ };
197
+ return async (model, options) => {
198
+ try {
199
+ await hook(model, options);
200
+ } catch (error) {
201
+ console.log(error);
202
+ }
203
+ };
204
+ }
205
+ // Annotate the CommonJS export names for ESM import in node:
206
+ 0 && (module.exports = {
207
+ afterCreateForForeignKeyField
208
+ });
@@ -0,0 +1,4 @@
1
+ import Database from '@nocobase/database';
2
+ export declare function afterCreateForReverseField(db: Database): (model: any, { transaction }: {
3
+ transaction: any;
4
+ }) => Promise<void>;
@@ -0,0 +1,37 @@
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 afterCreateForReverseField_exports = {};
19
+ __export(afterCreateForReverseField_exports, {
20
+ afterCreateForReverseField: () => afterCreateForReverseField
21
+ });
22
+ module.exports = __toCommonJS(afterCreateForReverseField_exports);
23
+ function afterCreateForReverseField(db) {
24
+ return async (model, { transaction }) => {
25
+ const Field = db.getCollection("fields");
26
+ const reverseKey = model.get("reverseKey");
27
+ if (!reverseKey) {
28
+ return;
29
+ }
30
+ const reverse = await Field.model.findByPk(reverseKey, { transaction });
31
+ await reverse.update({ reverseKey: model.get("key") }, { hooks: false, transaction });
32
+ };
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ afterCreateForReverseField
37
+ });
@@ -0,0 +1,2 @@
1
+ import Database from '@nocobase/database';
2
+ export declare function afterDestroyForForeignKeyField(db: Database): (model: any, opts: any) => Promise<void>;
@@ -0,0 +1,89 @@
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 afterDestroyForForeignKeyField_exports = {};
19
+ __export(afterDestroyForForeignKeyField_exports, {
20
+ afterDestroyForForeignKeyField: () => afterDestroyForForeignKeyField
21
+ });
22
+ module.exports = __toCommonJS(afterDestroyForForeignKeyField_exports);
23
+ async function destroyFields(db, transaction, fieldRecords) {
24
+ const fieldsRepo = db.getRepository("fields");
25
+ for (const fieldRecord of fieldRecords) {
26
+ await fieldsRepo.destroy({
27
+ filter: {
28
+ name: fieldRecord.get("name"),
29
+ collectionName: fieldRecord.get("collectionName")
30
+ },
31
+ transaction
32
+ });
33
+ }
34
+ }
35
+ function afterDestroyForForeignKeyField(db) {
36
+ return async (model, opts) => {
37
+ const { transaction } = opts;
38
+ const options = model.get("options");
39
+ if (!(options == null ? void 0 : options.isForeignKey)) {
40
+ return;
41
+ }
42
+ const collectionRepo = db.getRepository("collections");
43
+ const foreignKey = model.get("name");
44
+ const foreignKeyCollectionName = model.get("collectionName");
45
+ const collectionRecord = await collectionRepo.findOne({
46
+ filter: {
47
+ name: foreignKeyCollectionName
48
+ },
49
+ transaction
50
+ });
51
+ const collectionOptions = collectionRecord.get("options");
52
+ const fieldsRepo = db.getRepository("fields");
53
+ if (collectionOptions == null ? void 0 : collectionOptions.isThrough) {
54
+ const fieldRecords = await fieldsRepo.find({
55
+ filter: {
56
+ options: { through: foreignKeyCollectionName, foreignKey }
57
+ },
58
+ transaction
59
+ });
60
+ await destroyFields(db, transaction, fieldRecords);
61
+ } else {
62
+ await destroyFields(
63
+ db,
64
+ transaction,
65
+ await fieldsRepo.find({
66
+ filter: {
67
+ collectionName: foreignKeyCollectionName,
68
+ options: { foreignKey }
69
+ },
70
+ transaction
71
+ })
72
+ );
73
+ await destroyFields(
74
+ db,
75
+ transaction,
76
+ await fieldsRepo.find({
77
+ filter: {
78
+ options: { foreignKey, target: foreignKeyCollectionName }
79
+ },
80
+ transaction
81
+ })
82
+ );
83
+ }
84
+ };
85
+ }
86
+ // Annotate the CommonJS export names for ESM import in node:
87
+ 0 && (module.exports = {
88
+ afterDestroyForForeignKeyField
89
+ });
@@ -0,0 +1,5 @@
1
+ import Database from '@nocobase/database';
2
+ export declare function beforeCreateForChildrenCollection(db: Database): (model: any, { transaction, context }: {
3
+ transaction: any;
4
+ context: any;
5
+ }) => Promise<void>;