@objectql/core 1.1.0 → 1.3.0

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 (72) hide show
  1. package/CHANGELOG.md +15 -6
  2. package/dist/action.d.ts +7 -0
  3. package/dist/action.js +23 -0
  4. package/dist/action.js.map +1 -0
  5. package/dist/app.d.ts +28 -0
  6. package/dist/app.js +211 -0
  7. package/dist/app.js.map +1 -0
  8. package/dist/driver.d.ts +2 -17
  9. package/dist/driver.js +52 -0
  10. package/dist/driver.js.map +1 -1
  11. package/dist/hook.d.ts +8 -0
  12. package/dist/hook.js +25 -0
  13. package/dist/hook.js.map +1 -0
  14. package/dist/index.d.ts +8 -25
  15. package/dist/index.js +8 -141
  16. package/dist/index.js.map +1 -1
  17. package/dist/loader.d.ts +9 -4
  18. package/dist/loader.js +206 -9
  19. package/dist/loader.js.map +1 -1
  20. package/dist/object.d.ts +3 -0
  21. package/dist/object.js +28 -0
  22. package/dist/object.js.map +1 -0
  23. package/dist/plugin.d.ts +2 -0
  24. package/dist/plugin.js +56 -0
  25. package/dist/plugin.js.map +1 -0
  26. package/dist/remote.d.ts +8 -0
  27. package/dist/remote.js +43 -0
  28. package/dist/remote.js.map +1 -0
  29. package/dist/repository.d.ts +3 -5
  30. package/dist/repository.js +107 -112
  31. package/dist/repository.js.map +1 -1
  32. package/jest.config.js +3 -0
  33. package/package.json +11 -7
  34. package/src/action.ts +40 -0
  35. package/src/app.ts +257 -0
  36. package/src/driver.ts +51 -21
  37. package/src/hook.ts +42 -0
  38. package/src/index.ts +8 -158
  39. package/src/loader.ts +184 -9
  40. package/src/object.ts +26 -0
  41. package/src/plugin.ts +53 -0
  42. package/src/remote.ts +50 -0
  43. package/src/repository.ts +123 -127
  44. package/test/action.test.ts +58 -0
  45. package/test/fixtures/project.action.js +8 -0
  46. package/test/hook.test.ts +60 -0
  47. package/test/loader.test.ts +1 -8
  48. package/test/metadata.test.ts +1 -1
  49. package/test/mock-driver.ts +1 -1
  50. package/test/remote.test.ts +119 -0
  51. package/test/repository.test.ts +42 -49
  52. package/test/utils.ts +54 -0
  53. package/tsconfig.json +7 -3
  54. package/tsconfig.tsbuildinfo +1 -1
  55. package/README.md +0 -53
  56. package/dist/metadata.d.ts +0 -104
  57. package/dist/metadata.js +0 -3
  58. package/dist/metadata.js.map +0 -1
  59. package/dist/query.d.ts +0 -10
  60. package/dist/query.js +0 -3
  61. package/dist/query.js.map +0 -1
  62. package/dist/registry.d.ts +0 -4
  63. package/dist/registry.js +0 -8
  64. package/dist/registry.js.map +0 -1
  65. package/dist/types.d.ts +0 -83
  66. package/dist/types.js +0 -6
  67. package/dist/types.js.map +0 -1
  68. package/src/metadata.ts +0 -143
  69. package/src/query.ts +0 -11
  70. package/src/registry.ts +0 -6
  71. package/src/types.ts +0 -115
  72. package/test/fixtures/project.action.ts +0 -6
package/CHANGELOG.md CHANGED
@@ -1,18 +1,27 @@
1
1
  # @objectql/core
2
2
 
3
- ## 1.1.0
3
+ ## 1.3.0
4
4
 
5
5
  ### Minor Changes
6
6
 
7
- - add metadata loader
7
+ - Refactor core architecture: split logic into modules (driver, remote, action, hook, object, plugin).
8
+ Rename `ObjectRegistry` to `MetadataRegistry` to support generic metadata.
9
+ Add `addLoader` API to support custom metadata loaders in plugins.
10
+ Update initialization lifecycle to allow plugins to register loaders before source scanning.
8
11
 
9
12
  ### Patch Changes
10
13
 
11
14
  - Updated dependencies
12
- - @objectql/metadata@0.2.0
15
+ - @objectql/types@1.3.0
16
+ - @objectql/driver-remote@0.1.1
13
17
 
14
- ## 1.0.0
18
+ ## 1.2.0
15
19
 
16
- ### Major Changes
20
+ ### Minor Changes
21
+
22
+ - 7df2977: 拆分 objectos
23
+
24
+ ### Patch Changes
17
25
 
18
- - first release
26
+ - Updated dependencies [7df2977]
27
+ - @objectql/types@1.2.0
@@ -0,0 +1,7 @@
1
+ import { ActionContext, ActionHandler, MetadataRegistry } from '@objectql/types';
2
+ export interface ActionEntry {
3
+ handler: ActionHandler;
4
+ packageName?: string;
5
+ }
6
+ export declare function registerActionHelper(actions: Record<string, ActionEntry>, objectName: string, actionName: string, handler: ActionHandler, packageName?: string): void;
7
+ export declare function executeActionHelper(metadata: MetadataRegistry, runtimeActions: Record<string, ActionEntry>, objectName: string, actionName: string, ctx: ActionContext): Promise<any>;
package/dist/action.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerActionHelper = registerActionHelper;
4
+ exports.executeActionHelper = executeActionHelper;
5
+ function registerActionHelper(actions, objectName, actionName, handler, packageName) {
6
+ const key = `${objectName}:${actionName}`;
7
+ actions[key] = { handler, packageName };
8
+ }
9
+ async function executeActionHelper(metadata, runtimeActions, objectName, actionName, ctx) {
10
+ // 1. Programmatic
11
+ const key = `${objectName}:${actionName}`;
12
+ const actionEntry = runtimeActions[key];
13
+ if (actionEntry) {
14
+ return await actionEntry.handler(ctx);
15
+ }
16
+ // 2. Registry (File-based)
17
+ const fileActions = metadata.get('action', objectName);
18
+ if (fileActions && typeof fileActions[actionName] === 'function') {
19
+ return await fileActions[actionName](ctx);
20
+ }
21
+ throw new Error(`Action '${actionName}' not found for object '${objectName}'`);
22
+ }
23
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":";;AAOA,oDASC;AAED,kDAqBC;AAhCD,SAAgB,oBAAoB,CAChC,OAAoC,EACpC,UAAkB,EAClB,UAAkB,EAClB,OAAsB,EACtB,WAAoB;IAEpB,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACrC,QAA0B,EAC1B,cAA2C,EAC3C,UAAkB,EAClB,UAAkB,EAClB,GAAkB;IAElB,kBAAkB;IAClB,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAM,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,2BAA2B,UAAU,GAAG,CAAC,CAAC;AACnF,CAAC"}
package/dist/app.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { MetadataRegistry, Driver, ObjectConfig, ObjectQLContext, ObjectQLContextOptions, IObjectQL, ObjectQLConfig, ObjectQLPlugin, HookName, HookHandler, HookContext, ActionHandler, ActionContext, LoaderPlugin } from '@objectql/types';
2
+ export declare class ObjectQL implements IObjectQL {
3
+ metadata: MetadataRegistry;
4
+ private loader;
5
+ private datasources;
6
+ private remotes;
7
+ private hooks;
8
+ private actions;
9
+ private pluginsList;
10
+ private config;
11
+ constructor(config: ObjectQLConfig);
12
+ addPackage(name: string): void;
13
+ use(plugin: ObjectQLPlugin): void;
14
+ removePackage(name: string): void;
15
+ on(event: HookName, objectName: string, handler: HookHandler, packageName?: string): void;
16
+ triggerHook(event: HookName, objectName: string, ctx: HookContext): Promise<void>;
17
+ registerAction(objectName: string, actionName: string, handler: ActionHandler, packageName?: string): void;
18
+ executeAction(objectName: string, actionName: string, ctx: ActionContext): Promise<any>;
19
+ loadFromDirectory(dir: string, packageName?: string): void;
20
+ addLoader(plugin: LoaderPlugin): void;
21
+ createContext(options: ObjectQLContextOptions): ObjectQLContext;
22
+ registerObject(object: ObjectConfig): void;
23
+ unregisterObject(name: string): void;
24
+ getObject(name: string): ObjectConfig | undefined;
25
+ getConfigs(): Record<string, ObjectConfig>;
26
+ datasource(name: string): Driver;
27
+ init(): Promise<void>;
28
+ }
package/dist/app.js ADDED
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectQL = void 0;
4
+ const types_1 = require("@objectql/types");
5
+ const loader_1 = require("./loader");
6
+ const repository_1 = require("./repository");
7
+ const plugin_1 = require("./plugin");
8
+ const driver_1 = require("./driver");
9
+ const remote_1 = require("./remote");
10
+ const action_1 = require("./action");
11
+ const hook_1 = require("./hook");
12
+ const object_1 = require("./object");
13
+ class ObjectQL {
14
+ constructor(config) {
15
+ this.datasources = {};
16
+ this.remotes = [];
17
+ this.hooks = {};
18
+ this.actions = {};
19
+ this.pluginsList = [];
20
+ this.config = config;
21
+ this.metadata = config.registry || new types_1.MetadataRegistry();
22
+ this.loader = new loader_1.ObjectLoader(this.metadata);
23
+ this.datasources = config.datasources || {};
24
+ this.remotes = config.remotes || [];
25
+ if (config.connection) {
26
+ this.datasources['default'] = (0, driver_1.createDriverFromConnection)(config.connection);
27
+ }
28
+ // Initialize Plugin List (but don't setup yet)
29
+ if (config.plugins) {
30
+ for (const plugin of config.plugins) {
31
+ if (typeof plugin === 'string') {
32
+ this.use((0, plugin_1.loadPlugin)(plugin));
33
+ }
34
+ else {
35
+ this.use(plugin);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ addPackage(name) {
41
+ this.loader.loadPackage(name);
42
+ }
43
+ use(plugin) {
44
+ this.pluginsList.push(plugin);
45
+ }
46
+ removePackage(name) {
47
+ this.metadata.unregisterPackage(name);
48
+ // Remove hooks
49
+ for (const event of Object.keys(this.hooks)) {
50
+ this.hooks[event] = this.hooks[event].filter(h => h.packageName !== name);
51
+ }
52
+ // Remove actions
53
+ for (const key of Object.keys(this.actions)) {
54
+ if (this.actions[key].packageName === name) {
55
+ delete this.actions[key];
56
+ }
57
+ }
58
+ }
59
+ on(event, objectName, handler, packageName) {
60
+ (0, hook_1.registerHookHelper)(this.hooks, event, objectName, handler, packageName);
61
+ }
62
+ async triggerHook(event, objectName, ctx) {
63
+ await (0, hook_1.triggerHookHelper)(this.metadata, this.hooks, event, objectName, ctx);
64
+ }
65
+ registerAction(objectName, actionName, handler, packageName) {
66
+ (0, action_1.registerActionHelper)(this.actions, objectName, actionName, handler, packageName);
67
+ }
68
+ async executeAction(objectName, actionName, ctx) {
69
+ return await (0, action_1.executeActionHelper)(this.metadata, this.actions, objectName, actionName, ctx);
70
+ }
71
+ loadFromDirectory(dir, packageName) {
72
+ this.loader.load(dir, packageName);
73
+ }
74
+ addLoader(plugin) {
75
+ this.loader.use(plugin);
76
+ }
77
+ createContext(options) {
78
+ const ctx = {
79
+ userId: options.userId,
80
+ spaceId: options.spaceId,
81
+ roles: options.roles || [],
82
+ isSystem: options.isSystem,
83
+ object: (name) => {
84
+ return new repository_1.ObjectRepository(name, ctx, this);
85
+ },
86
+ transaction: async (callback) => {
87
+ const driver = this.datasources['default'];
88
+ if (!driver || !driver.beginTransaction) {
89
+ return callback(ctx);
90
+ }
91
+ let trx;
92
+ try {
93
+ trx = await driver.beginTransaction();
94
+ }
95
+ catch (e) {
96
+ throw e;
97
+ }
98
+ const trxCtx = {
99
+ ...ctx,
100
+ transactionHandle: trx,
101
+ transaction: async (cb) => cb(trxCtx)
102
+ };
103
+ try {
104
+ const result = await callback(trxCtx);
105
+ if (driver.commitTransaction)
106
+ await driver.commitTransaction(trx);
107
+ return result;
108
+ }
109
+ catch (error) {
110
+ if (driver.rollbackTransaction)
111
+ await driver.rollbackTransaction(trx);
112
+ throw error;
113
+ }
114
+ },
115
+ sudo: () => {
116
+ return this.createContext({ ...options, isSystem: true });
117
+ }
118
+ };
119
+ return ctx;
120
+ }
121
+ registerObject(object) {
122
+ (0, object_1.registerObjectHelper)(this.metadata, object);
123
+ }
124
+ unregisterObject(name) {
125
+ this.metadata.unregister('object', name);
126
+ }
127
+ getObject(name) {
128
+ return this.metadata.get('object', name);
129
+ }
130
+ getConfigs() {
131
+ return (0, object_1.getConfigsHelper)(this.metadata);
132
+ }
133
+ datasource(name) {
134
+ const driver = this.datasources[name];
135
+ if (!driver) {
136
+ throw new Error(`Datasource '${name}' not found`);
137
+ }
138
+ return driver;
139
+ }
140
+ async init() {
141
+ // 0. Init Plugins (This allows plugins to register custom loaders)
142
+ for (const plugin of this.pluginsList) {
143
+ console.log(`Initializing plugin '${plugin.name}'...`);
144
+ let app = this;
145
+ const pkgName = plugin._packageName;
146
+ if (pkgName) {
147
+ app = new Proxy(this, {
148
+ get(target, prop) {
149
+ if (prop === 'on') {
150
+ return (event, obj, handler) => target.on(event, obj, handler, pkgName);
151
+ }
152
+ if (prop === 'registerAction') {
153
+ return (obj, act, handler) => target.registerAction(obj, act, handler, pkgName);
154
+ }
155
+ const value = target[prop];
156
+ return typeof value === 'function' ? value.bind(target) : value;
157
+ }
158
+ });
159
+ }
160
+ await plugin.setup(app);
161
+ }
162
+ // 1. Load Presets/Packages (Base Layer) - AFTER plugins, so they can use new loaders
163
+ if (this.config.packages) {
164
+ for (const name of this.config.packages) {
165
+ this.addPackage(name);
166
+ }
167
+ }
168
+ if (this.config.presets) {
169
+ for (const name of this.config.presets) {
170
+ this.addPackage(name);
171
+ }
172
+ }
173
+ // 2. Load Local Sources (Application Layer)
174
+ if (this.config.source) {
175
+ const sources = Array.isArray(this.config.source) ? this.config.source : [this.config.source];
176
+ for (const src of sources) {
177
+ this.loader.load(src);
178
+ }
179
+ }
180
+ // 3. Load In-Memory Objects (Dynamic Layer)
181
+ if (this.config.objects) {
182
+ for (const [key, obj] of Object.entries(this.config.objects)) {
183
+ this.registerObject(obj);
184
+ }
185
+ }
186
+ // 4. Load Remotes
187
+ if (this.remotes.length > 0) {
188
+ console.log(`Loading ${this.remotes.length} remotes...`);
189
+ const results = await Promise.all(this.remotes.map(url => (0, remote_1.loadRemoteFromUrl)(url)));
190
+ for (const res of results) {
191
+ if (res) {
192
+ this.datasources[res.driverName] = res.driver;
193
+ for (const obj of res.objects) {
194
+ this.registerObject(obj);
195
+ }
196
+ }
197
+ }
198
+ }
199
+ const objects = this.metadata.list('object');
200
+ // 5. Init Drivers (e.g. Sync Schema)
201
+ // Let's pass all objects to all configured drivers.
202
+ for (const [name, driver] of Object.entries(this.datasources)) {
203
+ if (driver.init) {
204
+ console.log(`Initializing driver '${name}'...`);
205
+ await driver.init(objects);
206
+ }
207
+ }
208
+ }
209
+ }
210
+ exports.ObjectQL = ObjectQL;
211
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/driver.d.ts CHANGED
@@ -1,17 +1,2 @@
1
- export interface Driver {
2
- find(objectName: string, query: any, options?: any): Promise<any[]>;
3
- findOne(objectName: string, id: string | number, query?: any, options?: any): Promise<any>;
4
- create(objectName: string, data: any, options?: any): Promise<any>;
5
- update(objectName: string, id: string | number, data: any, options?: any): Promise<any>;
6
- delete(objectName: string, id: string | number, options?: any): Promise<any>;
7
- count(objectName: string, filters: any, options?: any): Promise<number>;
8
- aggregate?(objectName: string, query: any, options?: any): Promise<any>;
9
- distinct?(objectName: string, field: string, filters?: any, options?: any): Promise<any[]>;
10
- createMany?(objectName: string, data: any[], options?: any): Promise<any>;
11
- updateMany?(objectName: string, filters: any, data: any, options?: any): Promise<any>;
12
- deleteMany?(objectName: string, filters: any, options?: any): Promise<any>;
13
- findOneAndUpdate?(objectName: string, filters: any, update: any, options?: any): Promise<any>;
14
- beginTransaction?(): Promise<any>;
15
- commitTransaction?(trx: any): Promise<void>;
16
- rollbackTransaction?(trx: any): Promise<void>;
17
- }
1
+ import { Driver } from '@objectql/types';
2
+ export declare function createDriverFromConnection(connection: string): Driver;
package/dist/driver.js CHANGED
@@ -1,3 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDriverFromConnection = createDriverFromConnection;
4
+ function createDriverFromConnection(connection) {
5
+ let driverPackage = '';
6
+ let driverClass = '';
7
+ let driverConfig = {};
8
+ if (connection.startsWith('mongodb://')) {
9
+ driverPackage = '@objectql/driver-mongo';
10
+ driverClass = 'MongoDriver';
11
+ driverConfig = { url: connection };
12
+ }
13
+ else if (connection.startsWith('sqlite://')) {
14
+ driverPackage = '@objectql/driver-knex';
15
+ driverClass = 'KnexDriver';
16
+ const filename = connection.replace('sqlite://', '');
17
+ driverConfig = {
18
+ client: 'sqlite3',
19
+ connection: { filename },
20
+ useNullAsDefault: true
21
+ };
22
+ }
23
+ else if (connection.startsWith('postgres://') || connection.startsWith('postgresql://')) {
24
+ driverPackage = '@objectql/driver-knex';
25
+ driverClass = 'KnexDriver';
26
+ driverConfig = {
27
+ client: 'pg',
28
+ connection: connection
29
+ };
30
+ }
31
+ else if (connection.startsWith('mysql://')) {
32
+ driverPackage = '@objectql/driver-knex';
33
+ driverClass = 'KnexDriver';
34
+ driverConfig = {
35
+ client: 'mysql2',
36
+ connection: connection
37
+ };
38
+ }
39
+ else {
40
+ throw new Error(`Unsupported connection protocol: ${connection}`);
41
+ }
42
+ try {
43
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
44
+ const pkg = require(driverPackage);
45
+ const DriverClass = pkg[driverClass];
46
+ if (!DriverClass) {
47
+ throw new Error(`${driverClass} not found in ${driverPackage}`);
48
+ }
49
+ return new DriverClass(driverConfig);
50
+ }
51
+ catch (e) {
52
+ throw new Error(`Failed to load driver ${driverPackage}. Please install it: npm install ${driverPackage}. Error: ${e.message}`);
53
+ }
54
+ }
3
55
  //# sourceMappingURL=driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":";;AAEA,gEAmDC;AAnDD,SAAgB,0BAA0B,CAAC,UAAkB;IACzD,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,YAAY,GAAQ,EAAE,CAAC;IAE3B,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,aAAa,GAAG,wBAAwB,CAAC;QACzC,WAAW,GAAG,aAAa,CAAC;QAC5B,YAAY,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;SACI,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,aAAa,GAAG,uBAAuB,CAAC;QACxC,WAAW,GAAG,YAAY,CAAC;QAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrD,YAAY,GAAG;YACX,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,EAAE,QAAQ,EAAE;YACxB,gBAAgB,EAAE,IAAI;SACzB,CAAC;IACN,CAAC;SACI,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACtF,aAAa,GAAG,uBAAuB,CAAC;QACxC,WAAW,GAAG,YAAY,CAAC;QAC3B,YAAY,GAAG;YACX,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,UAAU;SACzB,CAAC;IACN,CAAC;SACI,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,aAAa,GAAG,uBAAuB,CAAC;QACxC,WAAW,GAAG,YAAY,CAAC;QAC3B,YAAY,GAAG;YACX,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,UAAU;SACzB,CAAC;IACN,CAAC;SACI,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC;QACD,8DAA8D;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,iBAAiB,aAAa,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,oCAAoC,aAAa,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACpI,CAAC;AACL,CAAC"}
package/dist/hook.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { HookContext, HookHandler, HookName, MetadataRegistry } from '@objectql/types';
2
+ export interface HookEntry {
3
+ objectName: string;
4
+ handler: HookHandler;
5
+ packageName?: string;
6
+ }
7
+ export declare function registerHookHelper(hooks: Record<string, HookEntry[]>, event: HookName, objectName: string, handler: HookHandler, packageName?: string): void;
8
+ export declare function triggerHookHelper(metadata: MetadataRegistry, runtimeHooks: Record<string, HookEntry[]>, event: HookName, objectName: string, ctx: HookContext): Promise<void>;
package/dist/hook.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerHookHelper = registerHookHelper;
4
+ exports.triggerHookHelper = triggerHookHelper;
5
+ function registerHookHelper(hooks, event, objectName, handler, packageName) {
6
+ if (!hooks[event]) {
7
+ hooks[event] = [];
8
+ }
9
+ hooks[event].push({ objectName, handler, packageName });
10
+ }
11
+ async function triggerHookHelper(metadata, runtimeHooks, event, objectName, ctx) {
12
+ // 1. Registry Hooks (File-based)
13
+ const fileHooks = metadata.get('hook', objectName);
14
+ if (fileHooks && typeof fileHooks[event] === 'function') {
15
+ await fileHooks[event](ctx);
16
+ }
17
+ // 2. Programmatic Hooks
18
+ const hooks = runtimeHooks[event] || [];
19
+ for (const hook of hooks) {
20
+ if (hook.objectName === '*' || hook.objectName === objectName) {
21
+ await hook.handler(ctx);
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";;AAQA,gDAWC;AAED,8CAoBC;AAjCD,SAAgB,kBAAkB,CAC9B,KAAkC,EAClC,KAAe,EACf,UAAkB,EAClB,OAAoB,EACpB,WAAoB;IAEpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5D,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACnC,QAA0B,EAC1B,YAAyC,EACzC,KAAe,EACf,UAAkB,EAClB,GAAgB;IAEhB,iCAAiC;IACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAM,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE,CAAC;QACtD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,26 +1,9 @@
1
- export * from './metadata';
2
- export * from './types';
3
- export * from './driver';
4
- export * from './repository';
5
- export * from './query';
6
- export * from './registry';
7
1
  export * from './loader';
8
- import { ObjectConfig } from './metadata';
9
- import { ObjectQLContext, ObjectQLContextOptions, IObjectQL, ObjectQLConfig } from './types';
10
- import { Driver } from './driver';
11
- import { MetadataRegistry } from './registry';
12
- export declare class ObjectQL implements IObjectQL {
13
- metadata: MetadataRegistry;
14
- private loader;
15
- private datasources;
16
- constructor(config: ObjectQLConfig);
17
- addPackage(name: string): void;
18
- removePackage(name: string): void;
19
- loadFromDirectory(dir: string, packageName?: string): void;
20
- createContext(options: ObjectQLContextOptions): ObjectQLContext;
21
- registerObject(object: ObjectConfig): void;
22
- getObject(name: string): ObjectConfig | undefined;
23
- getConfigs(): Record<string, ObjectConfig>;
24
- datasource(name: string): Driver;
25
- init(): Promise<void>;
26
- }
2
+ export * from './repository';
3
+ export * from './app';
4
+ export * from './plugin';
5
+ export * from './driver';
6
+ export * from './remote';
7
+ export * from './action';
8
+ export * from './hook';
9
+ export * from './object';
package/dist/index.js CHANGED
@@ -14,146 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ObjectQL = void 0;
18
- __exportStar(require("./metadata"), exports);
19
- __exportStar(require("./types"), exports);
20
- __exportStar(require("./driver"), exports);
21
- __exportStar(require("./repository"), exports);
22
- __exportStar(require("./query"), exports);
23
- __exportStar(require("./registry"), exports);
24
17
  __exportStar(require("./loader"), exports);
25
- const repository_1 = require("./repository");
26
- const loader_1 = require("./loader");
27
- const registry_1 = require("./registry");
28
- class ObjectQL {
29
- constructor(config) {
30
- this.datasources = {};
31
- this.metadata = config.registry || new registry_1.MetadataRegistry();
32
- this.loader = new loader_1.MetadataLoader(this.metadata);
33
- this.datasources = config.datasources;
34
- if (config.objects) {
35
- for (const [key, obj] of Object.entries(config.objects)) {
36
- this.registerObject(obj);
37
- }
38
- }
39
- if (config.packages) {
40
- for (const name of config.packages) {
41
- this.addPackage(name);
42
- }
43
- }
44
- }
45
- addPackage(name) {
46
- this.loader.loadPackage(name);
47
- }
48
- removePackage(name) {
49
- this.metadata.unregisterPackage(name);
50
- }
51
- loadFromDirectory(dir, packageName) {
52
- this.loader.load(dir, packageName);
53
- }
54
- createContext(options) {
55
- const ctx = {
56
- userId: options.userId,
57
- spaceId: options.spaceId,
58
- roles: options.roles || [],
59
- isSystem: options.isSystem,
60
- ignoreTriggers: options.ignoreTriggers,
61
- object: (name) => {
62
- return new repository_1.ObjectRepository(name, ctx, this);
63
- },
64
- transaction: async (callback) => {
65
- const driver = this.datasources['default'];
66
- if (!driver || !driver.beginTransaction) {
67
- return callback(ctx);
68
- }
69
- let trx;
70
- try {
71
- trx = await driver.beginTransaction();
72
- }
73
- catch (e) {
74
- throw e;
75
- }
76
- const trxCtx = {
77
- ...ctx,
78
- transactionHandle: trx,
79
- transaction: async (cb) => cb(trxCtx)
80
- };
81
- try {
82
- const result = await callback(trxCtx);
83
- if (driver.commitTransaction)
84
- await driver.commitTransaction(trx);
85
- return result;
86
- }
87
- catch (error) {
88
- if (driver.rollbackTransaction)
89
- await driver.rollbackTransaction(trx);
90
- throw error;
91
- }
92
- },
93
- sudo: () => {
94
- return this.createContext({ ...options, isSystem: true });
95
- }
96
- };
97
- return ctx;
98
- }
99
- registerObject(object) {
100
- // Normalize fields
101
- if (object.fields) {
102
- for (const [key, field] of Object.entries(object.fields)) {
103
- if (!field.name) {
104
- field.name = key;
105
- }
106
- }
107
- }
108
- this.metadata.register('object', {
109
- type: 'object',
110
- id: object.name,
111
- content: object
112
- });
113
- }
114
- getObject(name) {
115
- return this.metadata.get('object', name);
116
- }
117
- getConfigs() {
118
- const result = {};
119
- const objects = this.metadata.list('object');
120
- for (const obj of objects) {
121
- result[obj.name] = obj;
122
- }
123
- return result;
124
- }
125
- datasource(name) {
126
- const driver = this.datasources[name];
127
- if (!driver) {
128
- throw new Error(`Datasource '${name}' not found`);
129
- }
130
- return driver;
131
- }
132
- async init() {
133
- const ctx = this.createContext({ isSystem: true });
134
- const objects = this.metadata.list('object');
135
- for (const obj of objects) {
136
- if (obj.data && obj.data.length > 0) {
137
- console.log(`Initializing data for object ${obj.name}...`);
138
- const repo = ctx.object(obj.name);
139
- for (const record of obj.data) {
140
- try {
141
- if (record._id) {
142
- const existing = await repo.findOne(record._id);
143
- if (existing) {
144
- continue;
145
- }
146
- }
147
- await repo.create(record);
148
- console.log(`Inserted init data for ${obj.name}: ${record._id || 'unknown id'}`);
149
- }
150
- catch (e) {
151
- console.error(`Failed to insert init data for ${obj.name}:`, e);
152
- }
153
- }
154
- }
155
- }
156
- }
157
- }
158
- exports.ObjectQL = ObjectQL;
18
+ __exportStar(require("./repository"), exports);
19
+ __exportStar(require("./app"), exports);
20
+ __exportStar(require("./plugin"), exports);
21
+ __exportStar(require("./driver"), exports);
22
+ __exportStar(require("./remote"), exports);
23
+ __exportStar(require("./action"), exports);
24
+ __exportStar(require("./hook"), exports);
25
+ __exportStar(require("./object"), exports);
159
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,wCAAsB;AACtB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB"}