@visiblebase/core 0.2.0 → 0.2.3

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 (57) hide show
  1. package/README.md +12 -11
  2. package/bin/core/auth/authenticator.d.ts +17 -6
  3. package/bin/core/auth/authenticator.d.ts.map +1 -1
  4. package/bin/core/auth/authenticator.js +49 -30
  5. package/bin/core/auth/authenticator.js.map +1 -1
  6. package/bin/core/base/base.d.ts +11 -40
  7. package/bin/core/base/base.d.ts.map +1 -1
  8. package/bin/core/base/base.js +146 -102
  9. package/bin/core/base/base.js.map +1 -1
  10. package/bin/core/runtime.d.ts +10 -0
  11. package/bin/core/runtime.d.ts.map +1 -1
  12. package/bin/index.d.ts +5 -14
  13. package/bin/index.d.ts.map +1 -1
  14. package/bin/index.js +5 -14
  15. package/bin/index.js.map +1 -1
  16. package/bin/service/action.d.ts +44 -0
  17. package/bin/service/action.d.ts.map +1 -0
  18. package/bin/service/action.js +48 -0
  19. package/bin/service/action.js.map +1 -0
  20. package/bin/service/ai/ai-service.d.ts +36 -60
  21. package/bin/service/ai/ai-service.d.ts.map +1 -1
  22. package/bin/service/ai/ai-service.js +194 -120
  23. package/bin/service/ai/ai-service.js.map +1 -1
  24. package/bin/service/ai/provider.d.ts +24 -58
  25. package/bin/service/ai/provider.d.ts.map +1 -1
  26. package/bin/service/ai/provider.js +20 -41
  27. package/bin/service/ai/provider.js.map +1 -1
  28. package/bin/service/ai/types.d.ts +57 -35
  29. package/bin/service/ai/types.d.ts.map +1 -1
  30. package/bin/service/ai/types.js +1 -1
  31. package/bin/service/env/env-service.d.ts +0 -4
  32. package/bin/service/env/env-service.d.ts.map +1 -1
  33. package/bin/service/env/env-service.js +15 -25
  34. package/bin/service/env/env-service.js.map +1 -1
  35. package/bin/service/hook.d.ts +8 -5
  36. package/bin/service/hook.d.ts.map +1 -1
  37. package/bin/service/hook.js +11 -14
  38. package/bin/service/hook.js.map +1 -1
  39. package/bin/service/plugin.d.ts +20 -96
  40. package/bin/service/plugin.d.ts.map +1 -1
  41. package/bin/service/plugin.js +24 -61
  42. package/bin/service/plugin.js.map +1 -1
  43. package/bin/service/products/products-service.d.ts +0 -5
  44. package/bin/service/products/products-service.d.ts.map +1 -1
  45. package/bin/service/products/products-service.js +19 -25
  46. package/bin/service/products/products-service.js.map +1 -1
  47. package/bin/service/service.d.ts +76 -65
  48. package/bin/service/service.d.ts.map +1 -1
  49. package/bin/service/service.js +47 -80
  50. package/bin/service/service.js.map +1 -1
  51. package/bin/service/types.d.ts +2 -8
  52. package/bin/service/types.d.ts.map +1 -1
  53. package/bin/store/db.d.ts +5 -4
  54. package/bin/store/db.d.ts.map +1 -1
  55. package/bin/store/db.js +3 -2
  56. package/bin/store/db.js.map +1 -1
  57. package/package.json +8 -9
@@ -1,35 +1,46 @@
1
1
  /**
2
2
  * Service — SDK 核心单元。
3
3
  *
4
- * 每个 Service = 路由 + 数据库表 + hook + 自初始化。
5
- * 只有一个 Context 类型,所有 handler 共用。
4
+ * 每个 Service = 一组 Action + 数据库表 + hook
5
+ * Action Service 的一等能力单元,可独立被 client 调用。
6
6
  * Service 需要的基础设施(DB、Auth、Env)由 Base 直接设为属性。
7
7
  */
8
8
  import { Hook } from "./hook.js";
9
+ import { Action } from "./action.js";
10
+ /**
11
+ * 归一化 action 鉴权配置。
12
+ *
13
+ * 关键说明(中文)
14
+ * - 默认值仍然是 `["user"]`
15
+ * - `[]` 表示 guest / user / admin 都可访问
16
+ * - 返回值会去重,方便 Base 在路由层统一处理
17
+ */
18
+ export function normalizeRouteAuth(auth) {
19
+ if (auth === undefined)
20
+ return ["user"];
21
+ return [...new Set(auth)];
22
+ }
9
23
  // ===========================================================================
10
24
  // Service
11
25
  // ===========================================================================
12
26
  export class Service {
13
27
  id;
14
28
  name;
29
+ /** Service 级 hook,该 Service 下所有 Action 共享 */
15
30
  hook = new Hook();
16
31
  tables;
17
32
  env;
18
- /**
19
- * 数据库查询接口(Base 初始化后设置)。
20
- */
33
+ /** Action 注册表 */
34
+ actionMap = new Map();
35
+ // ========== Base 注入 ==========
21
36
  _db;
22
- /** 数据库底层连接,用于 DDL(Base 初始化后设置) */
23
37
  _client;
24
- /**
25
- * 鉴权器(Base 初始化后设置)。
26
- */
27
38
  _authenticator;
28
- /**
29
- * Runtime 环境变量(Base 初始化后设置)。
30
- */
31
39
  _env;
32
- routes = [];
40
+ /** 原始数据库实例(better-sqlite3 / D1 等) */
41
+ _raw;
42
+ /** 服务公网 URL */
43
+ _baseURL;
33
44
  constructor(options) {
34
45
  this.id = options.id;
35
46
  this.name = options.name ?? options.id;
@@ -37,78 +48,34 @@ export class Service {
37
48
  this.env = options.env;
38
49
  }
39
50
  // ========== 生命周期 ==========
51
+ async _onInit() { }
52
+ // ========== Action 注册 ==========
40
53
  /**
41
- * 初始化回调(可选)。Base 在设置 _database/_client/_authenticator/_env 后调用。
42
- * Service 在此创建自己的 Store、种子数据等。默认空实现。
54
+ * 注册一个 Action(默认 POST,auth=["user"])。
43
55
  */
44
- async _onInit() { }
45
- // ========== 路由快捷方法 ==========
46
- get(path, handler, opts) {
47
- return this._add("GET", path, handler, opts);
48
- }
49
- post(path, handler, opts) {
50
- return this._add("POST", path, handler, opts);
51
- }
52
- put(path, handler, opts) {
53
- return this._add("PUT", path, handler, opts);
54
- }
55
- patch(path, handler, opts) {
56
- return this._add("PATCH", path, handler, opts);
56
+ action(id, fn, opts) {
57
+ if (this.actionMap.has(id)) {
58
+ throw new Error(`Duplicate action: ${this.id}.${id}`);
59
+ }
60
+ const action = new Action(id, fn);
61
+ this.actionMap.set(id, {
62
+ action,
63
+ method: opts?.method ?? "POST",
64
+ auth: normalizeRouteAuth(opts?.auth),
65
+ });
66
+ return action;
57
67
  }
58
- delete(path, handler, opts) {
59
- return this._add("DELETE", path, handler, opts);
68
+ /** 获取已注册的 Action */
69
+ get(id) {
70
+ return this.actionMap.get(id)?.action;
60
71
  }
61
- // ========== 内部方法 ==========
62
- _listRoutes() {
63
- return this.routes;
72
+ /** 列出所有已注册的 Action */
73
+ list() {
74
+ return [...this.actionMap.values()].map((e) => e.action);
64
75
  }
65
- _add(method, path, handler, opts) {
66
- this.routes.push({
67
- method,
68
- path: normalizeRoutePath(path),
69
- auth: opts?.auth ?? "user",
70
- handler: wrapHandler(handler, this),
71
- });
72
- return this;
76
+ /** 列出 Action 及其元数据(Base 内部使用) */
77
+ _listActionDefs() {
78
+ return [...this.actionMap.values()];
73
79
  }
74
80
  }
75
- // ===========================================================================
76
- // wrapHandler
77
- // ===========================================================================
78
- function wrapHandler(handler, service) {
79
- return async (routeCtx) => {
80
- const input = routeCtx.request.method === "GET" ? {} : await routeCtx.json();
81
- const db = {};
82
- if (service.tables) {
83
- for (const name of Object.keys(service.tables)) {
84
- db[name] = await routeCtx.table(name);
85
- }
86
- }
87
- const result = await handler({
88
- input, db,
89
- user: routeCtx.user,
90
- product: routeCtx.product,
91
- request: routeCtx.request,
92
- env: (key) => routeCtx.env(key),
93
- });
94
- if (result instanceof Response)
95
- return result;
96
- return routeCtx.jsonResponse(result, 200);
97
- };
98
- }
99
- // ===========================================================================
100
- // 工具
101
- // ===========================================================================
102
- function normalizeRoutePath(pathname) {
103
- const trimmed = pathname.trim();
104
- if (!trimmed || trimmed === "/")
105
- return "/";
106
- return `/${trimmed.replace(/^\/+/, "").replace(/\/+$/, "")}`;
107
- }
108
- export function serviceRouteFullPath(serviceId, route) {
109
- const prefix = route.auth === "admin"
110
- ? `/api/admin/services/${serviceId}`
111
- : `/v1/services/${serviceId}`;
112
- return route.path === "/" ? prefix : `${prefix}${route.path}`;
113
- }
114
81
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAyEpD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACtB,6CAA6C;IACpC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,MAAM,CAA+C;IACrD,GAAG,CAAoB;IAEhC,iBAAiB;IACT,SAAS,GAAG,IAAI,GAAG,EAAuE,CAAC;IAEnG,gCAAgC;IAEhC,GAAG,CAAY;IACf,OAAO,CAAyB;IAChC,cAAc,CAAiB;IAC/B,IAAI,CAA4C;IAEhD,qCAAqC;IACrC,IAAI,CAAW;IAEf,eAAe;IACf,QAAQ,CAAU;IAElB,YAAY,OAKX;QACC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC,kCAAkC;IAElC;;OAEG;IACH,MAAM,CAAC,EAAU,EAAE,EAAY,EAAE,IAAoB;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE;YACrB,MAAM;YACN,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM;YAC9B,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC;IAED,sBAAsB;IACtB,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,iCAAiC;IACjC,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -5,13 +5,7 @@ import type { Context } from "./service.js";
5
5
  /**
6
6
  * Hook 回调函数。
7
7
  *
8
- * before/after 可返回新 Context 替换当前;onError 返回值被忽略。
8
+ * 接收 Context,不返回值。如需修改上下文,直接在 ctx 上改。
9
9
  */
10
- export type HookFn = (ctx: Context) => void | Context | Promise<void | Context>;
11
- /**
12
- * AI 模型 handler。
13
- *
14
- * 接收 Context(含 model 信息),返回结果或 Response(streaming)。
15
- */
16
- export type ServiceHandler<TResult = unknown> = (ctx: Context) => TResult | Promise<TResult>;
10
+ export type HookFn = (ctx: Context) => void | Promise<void>;
17
11
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,CACnB,GAAG,EAAE,OAAO,KACT,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,OAAO,IAAI,CAC9C,GAAG,EAAE,OAAO,KACT,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/bin/store/db.d.ts CHANGED
@@ -8,12 +8,12 @@ import type { SQL } from "drizzle-orm";
8
8
  /**
9
9
  * 底层数据库客户端接口。
10
10
  *
11
- * SQLite 用 exec()(同步),Postgres 用 unsafe()(异步)。
11
+ * SQLite 用 exec()(同步),D1 用 exec()(异步),Postgres 用 unsafe()(异步)。
12
12
  * 适配器只需要提供其中一个方法即可。
13
13
  */
14
14
  export interface DbClient {
15
- /** SQLite 同步执行 DDL */
16
- exec?(sql: string): void;
15
+ /** SQLite / D1 执行 DDL(D1 返回 Promise<void>,SQLite 返回 void) */
16
+ exec?(sql: string): void | Promise<void>;
17
17
  /** Postgres 异步执行 DDL */
18
18
  unsafe?(sql: string, params?: unknown[]): Promise<unknown>;
19
19
  /** 关闭连接(可选) */
@@ -52,7 +52,8 @@ export interface Database {
52
52
  /**
53
53
  * 执行 DDL 语句。
54
54
  *
55
- * 自动适配同步(SQLite exec)和异步(Postgres unsafe)两种驱动。
55
+ * 自动适配同步(SQLite exec)、异步(D1 exec、Postgres unsafe)驱动。
56
+ * D1 的 exec() 返回 Promise,统一 await 兼容所有情况。
56
57
  *
57
58
  * @param db - 包含 $client 的数据库实例
58
59
  * @param ddl - 要执行的 DDL SQL 字符串
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAMvC;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wBAAwB;IACxB,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,eAAe;IACf,KAAK,CAAC,IAAI,IAAI,CAAC;IACf,kBAAkB;IAClB,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAMD,UAAU,KAAM,SAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,SAAS,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,IAAI;QAAE,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,CAAC;IACtC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtG,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YAAE,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;IACxG,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;CACpE;AAMD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAMvC;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,6DAA6D;IAC7D,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,wBAAwB;IACxB,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,eAAe;IACf,KAAK,CAAC,IAAI,IAAI,CAAC;IACf,kBAAkB;IAClB,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAMD,UAAU,KAAM,SAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,SAAS,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,IAAI;QAAE,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,CAAC;IACtC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtG,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YAAE,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;IACxG,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;CACpE;AAMD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF"}
package/bin/store/db.js CHANGED
@@ -10,7 +10,8 @@
10
10
  /**
11
11
  * 执行 DDL 语句。
12
12
  *
13
- * 自动适配同步(SQLite exec)和异步(Postgres unsafe)两种驱动。
13
+ * 自动适配同步(SQLite exec)、异步(D1 exec、Postgres unsafe)驱动。
14
+ * D1 的 exec() 返回 Promise,统一 await 兼容所有情况。
14
15
  *
15
16
  * @param db - 包含 $client 的数据库实例
16
17
  * @param ddl - 要执行的 DDL SQL 字符串
@@ -18,7 +19,7 @@
18
19
  export async function executeDDL(db, ddl) {
19
20
  const c = db.$client;
20
21
  if (typeof c?.exec === "function") {
21
- c.exec(ddl);
22
+ await c.exec(ddl);
22
23
  return;
23
24
  }
24
25
  if (typeof c?.unsafe === "function") {
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAyB,EAAE,GAAW;IACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IACrB,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAyB,EAAE,GAAW;IACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IACrB,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACjE,IAAI,OAAO,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;AAC/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visiblebase/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.3",
4
4
  "description": "VisibleBase runtime-agnostic AI gateway core.",
5
5
  "type": "module",
6
6
  "main": "./bin/index.js",
@@ -33,13 +33,6 @@
33
33
  "runtime",
34
34
  "gateway"
35
35
  ],
36
- "scripts": {
37
- "build": "tsc",
38
- "dev": "tsc --watch",
39
- "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
40
- "test": "tsc && tsc -p tsconfig.test.json && node --test test/*.test.mjs",
41
- "prepack": "npm run build"
42
- },
43
36
  "license": "MIT",
44
37
  "devDependencies": {
45
38
  "typescript": "^5.7.0"
@@ -48,5 +41,11 @@
48
41
  "ai": "^6.0.168",
49
42
  "drizzle-orm": "^0.45.2",
50
43
  "hono": "^4.1.0"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc",
47
+ "dev": "tsc --watch",
48
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
49
+ "test": "tsc && tsc -p tsconfig.test.json && node --test test/*.test.mjs"
51
50
  }
52
- }
51
+ }