@objectql/core 1.1.0 → 1.2.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 (48) hide show
  1. package/CHANGELOG.md +4 -10
  2. package/dist/index.d.ts +14 -11
  3. package/dist/index.js +222 -34
  4. package/dist/index.js.map +1 -1
  5. package/dist/loader.d.ts +23 -5
  6. package/dist/loader.js +201 -9
  7. package/dist/loader.js.map +1 -1
  8. package/dist/repository.d.ts +3 -5
  9. package/dist/repository.js +107 -112
  10. package/dist/repository.js.map +1 -1
  11. package/jest.config.js +3 -0
  12. package/package.json +10 -7
  13. package/src/index.ts +261 -41
  14. package/src/loader.ts +194 -10
  15. package/src/repository.ts +123 -127
  16. package/test/action.test.ts +58 -0
  17. package/test/hook.test.ts +60 -0
  18. package/test/utils.ts +54 -0
  19. package/tsconfig.json +4 -3
  20. package/tsconfig.tsbuildinfo +1 -1
  21. package/README.md +0 -53
  22. package/dist/driver.d.ts +0 -17
  23. package/dist/driver.js +0 -3
  24. package/dist/driver.js.map +0 -1
  25. package/dist/metadata.d.ts +0 -104
  26. package/dist/metadata.js +0 -3
  27. package/dist/metadata.js.map +0 -1
  28. package/dist/query.d.ts +0 -10
  29. package/dist/query.js +0 -3
  30. package/dist/query.js.map +0 -1
  31. package/dist/registry.d.ts +0 -4
  32. package/dist/registry.js +0 -8
  33. package/dist/registry.js.map +0 -1
  34. package/dist/types.d.ts +0 -83
  35. package/dist/types.js +0 -6
  36. package/dist/types.js.map +0 -1
  37. package/src/driver.ts +0 -24
  38. package/src/metadata.ts +0 -143
  39. package/src/query.ts +0 -11
  40. package/src/registry.ts +0 -6
  41. package/src/types.ts +0 -115
  42. package/test/dynamic.test.ts +0 -34
  43. package/test/fixtures/project.action.ts +0 -6
  44. package/test/fixtures/project.object.yml +0 -41
  45. package/test/loader.test.ts +0 -22
  46. package/test/metadata.test.ts +0 -49
  47. package/test/mock-driver.ts +0 -86
  48. package/test/repository.test.ts +0 -150
package/CHANGELOG.md CHANGED
@@ -1,18 +1,12 @@
1
1
  # @objectql/core
2
2
 
3
- ## 1.1.0
3
+ ## 1.2.0
4
4
 
5
5
  ### Minor Changes
6
6
 
7
- - add metadata loader
7
+ - 7df2977: 拆分 objectos
8
8
 
9
9
  ### Patch Changes
10
10
 
11
- - Updated dependencies
12
- - @objectql/metadata@0.2.0
13
-
14
- ## 1.0.0
15
-
16
- ### Major Changes
17
-
18
- - first release
11
+ - Updated dependencies [7df2977]
12
+ - @objectql/types@1.2.0
package/dist/index.d.ts CHANGED
@@ -1,26 +1,29 @@
1
- export * from './metadata';
2
- export * from './types';
3
- export * from './driver';
4
- export * from './repository';
5
- export * from './query';
6
- export * from './registry';
1
+ import { ObjectRegistry, Driver, ObjectConfig, ObjectQLContext, ObjectQLContextOptions, IObjectQL, ObjectQLConfig, ObjectQLPlugin, HookName, HookHandler, HookContext, ActionHandler, ActionContext } from '@objectql/types';
7
2
  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
3
  export declare class ObjectQL implements IObjectQL {
13
- metadata: MetadataRegistry;
4
+ metadata: ObjectRegistry;
14
5
  private loader;
15
6
  private datasources;
7
+ private hooks;
8
+ private actions;
9
+ private pluginsList;
16
10
  constructor(config: ObjectQLConfig);
11
+ private loadPluginFromPackage;
17
12
  addPackage(name: string): void;
13
+ use(plugin: ObjectQLPlugin): void;
18
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
19
  loadFromDirectory(dir: string, packageName?: string): void;
20
20
  createContext(options: ObjectQLContextOptions): ObjectQLContext;
21
21
  registerObject(object: ObjectConfig): void;
22
+ unregisterObject(name: string): void;
22
23
  getObject(name: string): ObjectConfig | undefined;
23
24
  getConfigs(): Record<string, ObjectConfig>;
24
25
  datasource(name: string): Driver;
25
26
  init(): Promise<void>;
27
+ private loadDriverFromConnection;
26
28
  }
29
+ export * from './repository';
package/dist/index.js CHANGED
@@ -15,38 +15,165 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
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);
18
+ const types_1 = require("@objectql/types");
19
+ const loader_1 = require("./loader");
24
20
  __exportStar(require("./loader"), exports);
25
21
  const repository_1 = require("./repository");
26
- const loader_1 = require("./loader");
27
- const registry_1 = require("./registry");
28
22
  class ObjectQL {
29
23
  constructor(config) {
30
24
  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;
25
+ this.hooks = {};
26
+ this.actions = {};
27
+ this.pluginsList = [];
28
+ this.metadata = config.registry || new types_1.ObjectRegistry();
29
+ this.loader = new loader_1.ObjectLoader(this.metadata);
30
+ this.datasources = config.datasources || {};
31
+ if (config.connection) {
32
+ this.loadDriverFromConnection(config.connection);
33
+ }
34
+ // 1. Load Presets/Packages first (Base Layer)
35
+ if (config.packages) {
36
+ for (const name of config.packages) {
37
+ this.addPackage(name);
38
+ }
39
+ }
40
+ if (config.presets) {
41
+ for (const name of config.presets) {
42
+ this.addPackage(name);
43
+ }
44
+ }
45
+ if (config.plugins) {
46
+ for (const plugin of config.plugins) {
47
+ if (typeof plugin === 'string') {
48
+ this.loadPluginFromPackage(plugin);
49
+ }
50
+ else {
51
+ this.use(plugin);
52
+ }
53
+ }
54
+ }
55
+ // 2. Load Local Sources (Application Layer - can override presets)
56
+ if (config.source) {
57
+ const sources = Array.isArray(config.source) ? config.source : [config.source];
58
+ for (const src of sources) {
59
+ this.loader.load(src);
60
+ }
61
+ }
62
+ // 3. Load In-Memory Objects (Dynamic Layer - highest priority)
34
63
  if (config.objects) {
35
64
  for (const [key, obj] of Object.entries(config.objects)) {
36
65
  this.registerObject(obj);
37
66
  }
38
67
  }
39
- if (config.packages) {
40
- for (const name of config.packages) {
41
- this.addPackage(name);
68
+ }
69
+ loadPluginFromPackage(packageName) {
70
+ let mod;
71
+ try {
72
+ const modulePath = require.resolve(packageName, { paths: [process.cwd()] });
73
+ mod = require(modulePath);
74
+ }
75
+ catch (e) {
76
+ throw new Error(`Failed to resolve plugin '${packageName}': ${e}`);
77
+ }
78
+ // Helper to find plugin instance
79
+ const findPlugin = (candidate) => {
80
+ if (!candidate)
81
+ return undefined;
82
+ // 1. Try treating as Class
83
+ if (typeof candidate === 'function') {
84
+ try {
85
+ const inst = new candidate();
86
+ if (inst && typeof inst.setup === 'function') {
87
+ return inst; // Found it!
88
+ }
89
+ }
90
+ catch (e) {
91
+ // Not a constructor or instantiation failed
92
+ }
93
+ }
94
+ // 2. Try treating as Instance
95
+ if (candidate && typeof candidate.setup === 'function') {
96
+ if (candidate.name)
97
+ return candidate;
42
98
  }
99
+ return undefined;
100
+ };
101
+ // Search in default, module root, and all named exports
102
+ let instance = findPlugin(mod.default) || findPlugin(mod);
103
+ if (!instance && mod && typeof mod === 'object') {
104
+ for (const key of Object.keys(mod)) {
105
+ if (key === 'default')
106
+ continue;
107
+ instance = findPlugin(mod[key]);
108
+ if (instance)
109
+ break;
110
+ }
111
+ }
112
+ if (instance) {
113
+ instance._packageName = packageName;
114
+ this.use(instance);
115
+ }
116
+ else {
117
+ console.error(`[PluginLoader] Failed to find ObjectQLPlugin in '${packageName}'. Exports:`, Object.keys(mod));
118
+ throw new Error(`Plugin '${packageName}' must export a class or object implementing ObjectQLPlugin.`);
43
119
  }
44
120
  }
45
121
  addPackage(name) {
46
122
  this.loader.loadPackage(name);
47
123
  }
124
+ use(plugin) {
125
+ this.pluginsList.push(plugin);
126
+ }
48
127
  removePackage(name) {
49
128
  this.metadata.unregisterPackage(name);
129
+ // Remove hooks
130
+ for (const event of Object.keys(this.hooks)) {
131
+ this.hooks[event] = this.hooks[event].filter(h => h.packageName !== name);
132
+ }
133
+ // Remove actions
134
+ for (const key of Object.keys(this.actions)) {
135
+ if (this.actions[key].packageName === name) {
136
+ delete this.actions[key];
137
+ }
138
+ }
139
+ }
140
+ on(event, objectName, handler, packageName) {
141
+ if (!this.hooks[event]) {
142
+ this.hooks[event] = [];
143
+ }
144
+ this.hooks[event].push({ objectName, handler, packageName });
145
+ }
146
+ async triggerHook(event, objectName, ctx) {
147
+ // 1. Registry Hooks (File-based)
148
+ const fileHooks = this.metadata.get('hook', objectName);
149
+ if (fileHooks && typeof fileHooks[event] === 'function') {
150
+ await fileHooks[event](ctx);
151
+ }
152
+ // 2. Programmatic Hooks
153
+ const hooks = this.hooks[event] || [];
154
+ for (const hook of hooks) {
155
+ if (hook.objectName === '*' || hook.objectName === objectName) {
156
+ await hook.handler(ctx);
157
+ }
158
+ }
159
+ }
160
+ registerAction(objectName, actionName, handler, packageName) {
161
+ const key = `${objectName}:${actionName}`;
162
+ this.actions[key] = { handler, packageName };
163
+ }
164
+ async executeAction(objectName, actionName, ctx) {
165
+ // 1. Programmatic
166
+ const key = `${objectName}:${actionName}`;
167
+ const actionEntry = this.actions[key];
168
+ if (actionEntry) {
169
+ return await actionEntry.handler(ctx);
170
+ }
171
+ // 2. Registry (File-based)
172
+ const fileActions = this.metadata.get('action', objectName);
173
+ if (fileActions && typeof fileActions[actionName] === 'function') {
174
+ return await fileActions[actionName](ctx);
175
+ }
176
+ throw new Error(`Action '${actionName}' not found for object '${objectName}'`);
50
177
  }
51
178
  loadFromDirectory(dir, packageName) {
52
179
  this.loader.load(dir, packageName);
@@ -57,7 +184,6 @@ class ObjectQL {
57
184
  spaceId: options.spaceId,
58
185
  roles: options.roles || [],
59
186
  isSystem: options.isSystem,
60
- ignoreTriggers: options.ignoreTriggers,
61
187
  object: (name) => {
62
188
  return new repository_1.ObjectRepository(name, ctx, this);
63
189
  },
@@ -111,6 +237,9 @@ class ObjectQL {
111
237
  content: object
112
238
  });
113
239
  }
240
+ unregisterObject(name) {
241
+ this.metadata.unregister('object', name);
242
+ }
114
243
  getObject(name) {
115
244
  return this.metadata.get('object', name);
116
245
  }
@@ -130,30 +259,89 @@ class ObjectQL {
130
259
  return driver;
131
260
  }
132
261
  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
- }
262
+ // 0. Init Plugins
263
+ for (const plugin of this.pluginsList) {
264
+ console.log(`Initializing plugin '${plugin.name}'...`);
265
+ let app = this;
266
+ const pkgName = plugin._packageName;
267
+ if (pkgName) {
268
+ app = new Proxy(this, {
269
+ get(target, prop) {
270
+ if (prop === 'on') {
271
+ return (event, obj, handler) => target.on(event, obj, handler, pkgName);
146
272
  }
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);
273
+ if (prop === 'registerAction') {
274
+ return (obj, act, handler) => target.registerAction(obj, act, handler, pkgName);
275
+ }
276
+ const value = target[prop];
277
+ return typeof value === 'function' ? value.bind(target) : value;
152
278
  }
153
- }
279
+ });
280
+ }
281
+ await plugin.setup(app);
282
+ }
283
+ const objects = this.metadata.list('object');
284
+ // 1. Init Drivers (e.g. Sync Schema)
285
+ // Let's pass all objects to all configured drivers.
286
+ for (const [name, driver] of Object.entries(this.datasources)) {
287
+ if (driver.init) {
288
+ console.log(`Initializing driver '${name}'...`);
289
+ await driver.init(objects);
290
+ }
291
+ }
292
+ }
293
+ loadDriverFromConnection(connection) {
294
+ let driverPackage = '';
295
+ let driverClass = '';
296
+ let driverConfig = {};
297
+ if (connection.startsWith('mongodb://')) {
298
+ driverPackage = '@objectql/driver-mongo';
299
+ driverClass = 'MongoDriver';
300
+ driverConfig = { url: connection };
301
+ }
302
+ else if (connection.startsWith('sqlite://')) {
303
+ driverPackage = '@objectql/driver-knex';
304
+ driverClass = 'KnexDriver';
305
+ const filename = connection.replace('sqlite://', '');
306
+ driverConfig = {
307
+ client: 'sqlite3',
308
+ connection: { filename },
309
+ useNullAsDefault: true
310
+ };
311
+ }
312
+ else if (connection.startsWith('postgres://') || connection.startsWith('postgresql://')) {
313
+ driverPackage = '@objectql/driver-knex';
314
+ driverClass = 'KnexDriver';
315
+ driverConfig = {
316
+ client: 'pg',
317
+ connection: connection
318
+ };
319
+ }
320
+ else if (connection.startsWith('mysql://')) {
321
+ driverPackage = '@objectql/driver-knex';
322
+ driverClass = 'KnexDriver';
323
+ driverConfig = {
324
+ client: 'mysql2',
325
+ connection: connection
326
+ };
327
+ }
328
+ else {
329
+ throw new Error(`Unsupported connection protocol: ${connection}`);
330
+ }
331
+ try {
332
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
333
+ const pkg = require(driverPackage);
334
+ const DriverClass = pkg[driverClass];
335
+ if (!DriverClass) {
336
+ throw new Error(`${driverClass} not found in ${driverPackage}`);
154
337
  }
338
+ this.datasources['default'] = new DriverClass(driverConfig);
339
+ }
340
+ catch (e) {
341
+ throw new Error(`Failed to load driver ${driverPackage}. Please install it: npm install ${driverPackage}. Error: ${e.message}`);
155
342
  }
156
343
  }
157
344
  }
158
345
  exports.ObjectQL = ObjectQL;
346
+ __exportStar(require("./repository"), exports);
159
347
  //# 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":"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"}
package/dist/loader.d.ts CHANGED
@@ -1,7 +1,25 @@
1
- import { MetadataRegistry } from './registry';
2
- import { ObjectConfig } from './types';
3
- import { MetadataLoader as BaseLoader } from '@objectql/metadata';
4
- export declare class MetadataLoader extends BaseLoader {
5
- constructor(registry: MetadataRegistry);
1
+ import { ObjectRegistry, ObjectConfig } from '@objectql/types';
2
+ export interface LoaderHandlerContext {
3
+ file: string;
4
+ content: string;
5
+ registry: ObjectRegistry;
6
+ packageName?: string;
7
+ }
8
+ export type LoaderHandler = (ctx: LoaderHandlerContext) => void;
9
+ export interface LoaderPlugin {
10
+ name: string;
11
+ glob: string[];
12
+ handler: LoaderHandler;
13
+ options?: any;
14
+ }
15
+ export declare class ObjectLoader {
16
+ protected registry: ObjectRegistry;
17
+ private plugins;
18
+ constructor(registry: ObjectRegistry);
19
+ private registerBuiltinPlugins;
20
+ use(plugin: LoaderPlugin): void;
21
+ load(dir: string, packageName?: string): void;
22
+ loadPackage(packageName: string): void;
23
+ private runPlugin;
6
24
  }
7
25
  export declare function loadObjectConfigs(dir: string): Record<string, ObjectConfig>;
package/dist/loader.js CHANGED
@@ -1,19 +1,211 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetadataLoader = void 0;
36
+ exports.ObjectLoader = void 0;
4
37
  exports.loadObjectConfigs = loadObjectConfigs;
5
- const registry_1 = require("./registry");
6
- const metadata_1 = require("@objectql/metadata");
7
- class MetadataLoader extends metadata_1.MetadataLoader {
38
+ const fs = __importStar(require("fs"));
39
+ const glob = __importStar(require("fast-glob"));
40
+ const path = __importStar(require("path"));
41
+ const types_1 = require("@objectql/types");
42
+ const yaml = __importStar(require("js-yaml"));
43
+ class ObjectLoader {
8
44
  constructor(registry) {
9
- super(registry);
10
- (0, metadata_1.registerObjectQLPlugins)(this);
45
+ this.registry = registry;
46
+ this.plugins = [];
47
+ this.registerBuiltinPlugins();
48
+ }
49
+ registerBuiltinPlugins() {
50
+ // Objects
51
+ this.use({
52
+ name: 'object',
53
+ glob: ['**/*.object.yml', '**/*.object.yaml'],
54
+ handler: (ctx) => {
55
+ try {
56
+ const doc = yaml.load(ctx.content);
57
+ if (!doc)
58
+ return;
59
+ if (doc.name && doc.fields) {
60
+ registerObject(ctx.registry, doc, ctx.file, ctx.packageName || ctx.registry.getEntry('package-map', ctx.file)?.package);
61
+ }
62
+ else {
63
+ for (const [key, value] of Object.entries(doc)) {
64
+ if (typeof value === 'object' && value.fields) {
65
+ const obj = value;
66
+ if (!obj.name)
67
+ obj.name = key;
68
+ registerObject(ctx.registry, obj, ctx.file, ctx.packageName);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ catch (e) {
74
+ console.error(`Error loading object from ${ctx.file}:`, e);
75
+ }
76
+ }
77
+ });
78
+ // Hooks
79
+ this.use({
80
+ name: 'hook',
81
+ glob: ['**/*.hook.ts', '**/*.hook.js'],
82
+ handler: (ctx) => {
83
+ const basename = path.basename(ctx.file);
84
+ // Extract object name from filename: user.hook.ts -> user
85
+ const objectName = basename.replace(/\.hook\.(ts|js)$/, '');
86
+ try {
87
+ const mod = require(ctx.file);
88
+ // Support default export or named exports
89
+ const hooks = mod.default || mod;
90
+ ctx.registry.register('hook', {
91
+ type: 'hook',
92
+ id: objectName, // Hook ID is the object name
93
+ path: ctx.file,
94
+ package: ctx.packageName,
95
+ content: hooks
96
+ });
97
+ }
98
+ catch (e) {
99
+ console.error(`Error loading hook from ${ctx.file}:`, e);
100
+ }
101
+ }
102
+ });
103
+ // Actions
104
+ this.use({
105
+ name: 'action',
106
+ glob: ['**/*.action.ts', '**/*.action.js'],
107
+ handler: (ctx) => {
108
+ const basename = path.basename(ctx.file);
109
+ // Extract object name: invoice.action.ts -> invoice
110
+ const objectName = basename.replace(/\.action\.(ts|js)$/, '');
111
+ try {
112
+ const mod = require(ctx.file);
113
+ // Action file exports multiple actions
114
+ // export const approve = { ... };
115
+ // export const reject = { ... };
116
+ const actions = {};
117
+ for (const [key, value] of Object.entries(mod)) {
118
+ if (key === 'default')
119
+ continue;
120
+ if (typeof value === 'object' && value.handler) {
121
+ actions[key] = value;
122
+ }
123
+ }
124
+ if (Object.keys(actions).length > 0) {
125
+ ctx.registry.register('action', {
126
+ type: 'action',
127
+ id: objectName, // Action collection ID is the object name
128
+ path: ctx.file,
129
+ package: ctx.packageName,
130
+ content: actions
131
+ });
132
+ }
133
+ }
134
+ catch (e) {
135
+ console.error(`Error loading action from ${ctx.file}:`, e);
136
+ }
137
+ }
138
+ });
139
+ }
140
+ use(plugin) {
141
+ this.plugins.push(plugin);
142
+ }
143
+ load(dir, packageName) {
144
+ for (const plugin of this.plugins) {
145
+ this.runPlugin(plugin, dir, packageName);
146
+ }
147
+ }
148
+ loadPackage(packageName) {
149
+ try {
150
+ const entryPath = require.resolve(packageName, { paths: [process.cwd()] });
151
+ // clean cache
152
+ delete require.cache[entryPath];
153
+ const packageDir = path.dirname(entryPath);
154
+ this.load(packageDir, packageName);
155
+ }
156
+ catch (e) {
157
+ // fallback to directory
158
+ this.load(packageName, packageName);
159
+ }
160
+ }
161
+ runPlugin(plugin, dir, packageName) {
162
+ const files = glob.sync(plugin.glob, {
163
+ cwd: dir,
164
+ absolute: true
165
+ });
166
+ for (const file of files) {
167
+ try {
168
+ const ctx = {
169
+ file,
170
+ content: '',
171
+ registry: this.registry,
172
+ packageName
173
+ };
174
+ // Pre-read for convenience
175
+ if (!file.match(/\.(js|ts|node)$/)) {
176
+ ctx.content = fs.readFileSync(file, 'utf8');
177
+ }
178
+ plugin.handler(ctx);
179
+ }
180
+ catch (e) {
181
+ console.error(`Error in loader plugin '${plugin.name}' processing ${file}:`, e);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ exports.ObjectLoader = ObjectLoader;
187
+ function registerObject(registry, obj, file, packageName) {
188
+ // Normalize fields
189
+ if (obj.fields) {
190
+ for (const [key, field] of Object.entries(obj.fields)) {
191
+ if (typeof field === 'object' && field !== null) {
192
+ if (!field.name) {
193
+ field.name = key;
194
+ }
195
+ }
196
+ }
11
197
  }
198
+ registry.register('object', {
199
+ type: 'object',
200
+ id: obj.name,
201
+ path: file,
202
+ package: packageName,
203
+ content: obj
204
+ });
12
205
  }
13
- exports.MetadataLoader = MetadataLoader;
14
206
  function loadObjectConfigs(dir) {
15
- const registry = new registry_1.MetadataRegistry();
16
- const loader = new MetadataLoader(registry);
207
+ const registry = new types_1.ObjectRegistry();
208
+ const loader = new ObjectLoader(registry);
17
209
  loader.load(dir);
18
210
  const result = {};
19
211
  for (const obj of registry.list('object')) {