@objectstack/hono 1.0.2 → 1.0.5

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.
@@ -0,0 +1,22 @@
1
+
2
+ > @objectstack/hono@1.0.5 build /home/runner/work/spec/spec/packages/adapters/hono
3
+ > tsup --config ../../../tsup.config.ts
4
+
5
+ CLI Building entry: src/index.ts
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.1
8
+ CLI Using tsup config: /home/runner/work/spec/spec/tsup.config.ts
9
+ CLI Target: es2020
10
+ CLI Cleaning output folder
11
+ ESM Build start
12
+ CJS Build start
13
+ ESM dist/index.mjs 5.72 KB
14
+ ESM dist/index.mjs.map 11.90 KB
15
+ ESM ⚡️ Build success in 55ms
16
+ CJS dist/index.js 6.82 KB
17
+ CJS dist/index.js.map 11.94 KB
18
+ CJS ⚡️ Build success in 55ms
19
+ DTS Build start
20
+ DTS ⚡️ Build success in 9270ms
21
+ DTS dist/index.d.mts 664.00 B
22
+ DTS dist/index.d.ts 664.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @objectstack/hono
2
2
 
3
+ ## 1.0.5
4
+
5
+ ### Patch Changes
6
+
7
+ - b1d24bd: refactor: migrate build system from tsc to tsup for faster builds
8
+ - Replaced `tsc` with `tsup` (using esbuild) across all packages
9
+ - Added shared `tsup.config.ts` in workspace root
10
+ - Added `tsup` as workspace dev dependency
11
+ - significantly improved build performance
12
+ - Updated dependencies [b1d24bd]
13
+ - Updated dependencies [877b864]
14
+ - @objectstack/runtime@1.0.5
15
+
16
+ ## 1.0.4
17
+
18
+ ### Patch Changes
19
+
20
+ - @objectstack/runtime@1.0.4
21
+
22
+ ## 1.0.3
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies [fb2eabd]
27
+ - @objectstack/runtime@1.0.3
28
+
3
29
  ## 1.0.2
4
30
 
5
31
  ### Patch Changes
@@ -0,0 +1,19 @@
1
+ import * as hono_types from 'hono/types';
2
+ import { Hono } from 'hono';
3
+ import { ObjectKernel } from '@objectstack/runtime';
4
+
5
+ interface ObjectStackHonoOptions {
6
+ kernel: ObjectKernel;
7
+ prefix?: string;
8
+ }
9
+ /**
10
+ * Creates a Hono application tailored for ObjectStack
11
+ * Fully compliant with @objectstack/spec
12
+ */
13
+ declare function createHonoApp(options: ObjectStackHonoOptions): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
14
+ /**
15
+ * Middleware mode for existing Hono apps
16
+ */
17
+ declare function objectStackMiddleware(kernel: ObjectKernel): (c: any, next: any) => Promise<void>;
18
+
19
+ export { type ObjectStackHonoOptions, createHonoApp, objectStackMiddleware };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
+ import * as hono_types from 'hono/types';
1
2
  import { Hono } from 'hono';
2
- import { type ObjectKernel } from '@objectstack/runtime';
3
- export interface ObjectStackHonoOptions {
3
+ import { ObjectKernel } from '@objectstack/runtime';
4
+
5
+ interface ObjectStackHonoOptions {
4
6
  kernel: ObjectKernel;
5
7
  prefix?: string;
6
8
  }
@@ -8,9 +10,10 @@ export interface ObjectStackHonoOptions {
8
10
  * Creates a Hono application tailored for ObjectStack
9
11
  * Fully compliant with @objectstack/spec
10
12
  */
11
- export declare function createHonoApp(options: ObjectStackHonoOptions): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
13
+ declare function createHonoApp(options: ObjectStackHonoOptions): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
12
14
  /**
13
15
  * Middleware mode for existing Hono apps
14
16
  */
15
- export declare function objectStackMiddleware(kernel: ObjectKernel): (c: any, next: any) => Promise<void>;
16
- //# sourceMappingURL=index.d.ts.map
17
+ declare function objectStackMiddleware(kernel: ObjectKernel): (c: any, next: any) => Promise<void>;
18
+
19
+ export { type ObjectStackHonoOptions, createHonoApp, objectStackMiddleware };
package/dist/index.js CHANGED
@@ -1,183 +1,179 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createHonoApp = createHonoApp;
4
- exports.objectStackMiddleware = objectStackMiddleware;
5
- const hono_1 = require("hono");
6
- const cors_1 = require("hono/cors");
7
- const runtime_1 = require("@objectstack/runtime");
8
- /**
9
- * Creates a Hono application tailored for ObjectStack
10
- * Fully compliant with @objectstack/spec
11
- */
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createHonoApp: () => createHonoApp,
24
+ objectStackMiddleware: () => objectStackMiddleware
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+ var import_hono = require("hono");
28
+ var import_cors = require("hono/cors");
29
+ var import_runtime = require("@objectstack/runtime");
12
30
  function createHonoApp(options) {
13
- const app = new hono_1.Hono();
14
- const { prefix = '/api' } = options;
15
- const dispatcher = new runtime_1.HttpDispatcher(options.kernel);
16
- app.use('*', (0, cors_1.cors)());
17
- // --- Helper for Response Normalization ---
18
- const normalizeResponse = (c, result) => {
19
- if (result.handled) {
20
- if (result.response) {
21
- return c.json(result.response.body, result.response.status, result.response.headers);
22
- }
23
- if (result.result) {
24
- const res = result.result;
25
- // Redirect
26
- if (res.type === 'redirect' && res.url) {
27
- return c.redirect(res.url);
28
- }
29
- // Stream
30
- if (res.type === 'stream' && res.stream) {
31
- return c.body(res.stream, 200, res.headers);
32
- }
33
- // Hono handles standard Response objects
34
- return res;
35
- }
36
- }
37
- return c.json({ success: false, error: { message: 'Not Found', code: 404 } }, 404);
38
- };
39
- // --- 0. Discovery Endpoint ---
40
- app.get(prefix, (c) => {
41
- return c.json(dispatcher.getDiscoveryInfo(prefix));
42
- });
43
- // --- 1. Auth ---
44
- app.all(`${prefix}/auth/*`, async (c) => {
45
- try {
46
- // subpath from /api/auth/login -> login
47
- const path = c.req.path.substring(c.req.path.indexOf('/auth/') + 6);
48
- const body = await c.req.parseBody().catch(() => ({}));
49
- const result = await dispatcher.handleAuth(path, c.req.method, body, { request: c.req.raw });
50
- return normalizeResponse(c, result);
51
- }
52
- catch (err) {
53
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
54
- }
55
- });
56
- // --- 2. GraphQL ---
57
- app.post(`${prefix}/graphql`, async (c) => {
58
- try {
59
- const body = await c.req.json();
60
- const result = await dispatcher.handleGraphQL(body, { request: c.req.raw });
61
- return c.json(result);
62
- }
63
- catch (err) {
64
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
65
- }
66
- });
67
- // --- 3. Metadata Endpoints ---
68
- app.all(`${prefix}/metadata*`, async (c) => {
69
- try {
70
- const path = c.req.path.substring(c.req.path.indexOf('/metadata') + 9);
71
- const method = c.req.method;
72
- let body = undefined;
73
- if (method === 'PUT' || method === 'POST') {
74
- // Attempt to parse JSON body
75
- try {
76
- body = await c.req.json();
77
- }
78
- catch (e) {
79
- // Ignore parse errors, body remains undefined or empty
80
- body = {};
81
- }
82
- }
83
- const result = await dispatcher.handleMetadata(path, { request: c.req.raw }, method, body);
84
- return normalizeResponse(c, result);
85
- }
86
- catch (err) {
87
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
88
- }
89
- });
90
- // --- 4. Data Endpoints ---
91
- app.all(`${prefix}/data*`, async (c) => {
92
- try {
93
- const path = c.req.path.substring(c.req.path.indexOf('/data') + 5);
94
- const method = c.req.method;
95
- let body = {};
96
- if (method === 'POST' || method === 'PATCH') {
97
- body = await c.req.json().catch(() => ({}));
98
- }
99
- const query = c.req.query();
100
- const result = await dispatcher.handleData(path, method, body, query, { request: c.req.raw });
101
- return normalizeResponse(c, result);
102
- }
103
- catch (err) {
104
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
105
- }
106
- });
107
- // --- 5. Analytics Endpoints ---
108
- app.all(`${prefix}/analytics*`, async (c) => {
109
- try {
110
- const path = c.req.path.substring(c.req.path.indexOf('/analytics') + 10);
111
- const method = c.req.method;
112
- let body = {};
113
- if (method === 'POST') {
114
- body = await c.req.json().catch(() => ({}));
115
- }
116
- const result = await dispatcher.handleAnalytics(path, method, body, { request: c.req.raw });
117
- return normalizeResponse(c, result);
118
- }
119
- catch (err) {
120
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
121
- }
122
- });
123
- // --- 6. Hub Endpoints ---
124
- app.all(`${prefix}/hub*`, async (c) => {
125
- try {
126
- const path = c.req.path.substring(c.req.path.indexOf('/hub') + 4);
127
- const method = c.req.method;
128
- let body = {};
129
- if (method === 'POST' || method === 'PATCH' || method === 'PUT') {
130
- body = await c.req.json().catch(() => ({}));
131
- }
132
- const query = c.req.query();
133
- const result = await dispatcher.handleHub(path, method, body, query, { request: c.req.raw });
134
- return normalizeResponse(c, result);
135
- }
136
- catch (err) {
137
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
138
- }
139
- });
140
- // --- 7. Automation Endpoints ---
141
- app.all(`${prefix}/automation*`, async (c) => {
142
- try {
143
- const path = c.req.path.substring(c.req.path.indexOf('/automation') + 11);
144
- const method = c.req.method;
145
- let body = {};
146
- if (method === 'POST') {
147
- body = await c.req.json().catch(() => ({}));
148
- }
149
- const result = await dispatcher.handleAutomation(path, method, body, { request: c.req.raw });
150
- return normalizeResponse(c, result);
151
- }
152
- catch (err) {
153
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
154
- }
155
- });
156
- // --- 8. Storage Endpoints ---
157
- app.all(`${prefix}/storage*`, async (c) => {
31
+ const app = new import_hono.Hono();
32
+ const { prefix = "/api" } = options;
33
+ const dispatcher = new import_runtime.HttpDispatcher(options.kernel);
34
+ app.use("*", (0, import_cors.cors)());
35
+ const normalizeResponse = (c, result) => {
36
+ if (result.handled) {
37
+ if (result.response) {
38
+ return c.json(result.response.body, result.response.status, result.response.headers);
39
+ }
40
+ if (result.result) {
41
+ const res = result.result;
42
+ if (res.type === "redirect" && res.url) {
43
+ return c.redirect(res.url);
44
+ }
45
+ if (res.type === "stream" && res.stream) {
46
+ return c.body(res.stream, 200, res.headers);
47
+ }
48
+ return res;
49
+ }
50
+ }
51
+ return c.json({ success: false, error: { message: "Not Found", code: 404 } }, 404);
52
+ };
53
+ app.get(prefix, (c) => {
54
+ return c.json(dispatcher.getDiscoveryInfo(prefix));
55
+ });
56
+ app.all(`${prefix}/auth/*`, async (c) => {
57
+ try {
58
+ const path = c.req.path.substring(c.req.path.indexOf("/auth/") + 6);
59
+ const body = await c.req.parseBody().catch(() => ({}));
60
+ const result = await dispatcher.handleAuth(path, c.req.method, body, { request: c.req.raw });
61
+ return normalizeResponse(c, result);
62
+ } catch (err) {
63
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
64
+ }
65
+ });
66
+ app.post(`${prefix}/graphql`, async (c) => {
67
+ try {
68
+ const body = await c.req.json();
69
+ const result = await dispatcher.handleGraphQL(body, { request: c.req.raw });
70
+ return c.json(result);
71
+ } catch (err) {
72
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
73
+ }
74
+ });
75
+ app.all(`${prefix}/metadata*`, async (c) => {
76
+ try {
77
+ const path = c.req.path.substring(c.req.path.indexOf("/metadata") + 9);
78
+ const method = c.req.method;
79
+ let body = void 0;
80
+ if (method === "PUT" || method === "POST") {
158
81
  try {
159
- const path = c.req.path.substring(c.req.path.indexOf('/storage') + 8);
160
- const method = c.req.method;
161
- let file = undefined;
162
- if (method === 'POST' && path.includes('upload')) {
163
- const body = await c.req.parseBody();
164
- file = body['file'];
165
- }
166
- const result = await dispatcher.handleStorage(path, method, file, { request: c.req.raw });
167
- return normalizeResponse(c, result);
168
- }
169
- catch (err) {
170
- return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
171
- }
172
- });
173
- return app;
82
+ body = await c.req.json();
83
+ } catch (e) {
84
+ body = {};
85
+ }
86
+ }
87
+ const result = await dispatcher.handleMetadata(path, { request: c.req.raw }, method, body);
88
+ return normalizeResponse(c, result);
89
+ } catch (err) {
90
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
91
+ }
92
+ });
93
+ app.all(`${prefix}/data*`, async (c) => {
94
+ try {
95
+ const path = c.req.path.substring(c.req.path.indexOf("/data") + 5);
96
+ const method = c.req.method;
97
+ let body = {};
98
+ if (method === "POST" || method === "PATCH") {
99
+ body = await c.req.json().catch(() => ({}));
100
+ }
101
+ const query = c.req.query();
102
+ const result = await dispatcher.handleData(path, method, body, query, { request: c.req.raw });
103
+ return normalizeResponse(c, result);
104
+ } catch (err) {
105
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
106
+ }
107
+ });
108
+ app.all(`${prefix}/analytics*`, async (c) => {
109
+ try {
110
+ const path = c.req.path.substring(c.req.path.indexOf("/analytics") + 10);
111
+ const method = c.req.method;
112
+ let body = {};
113
+ if (method === "POST") {
114
+ body = await c.req.json().catch(() => ({}));
115
+ }
116
+ const result = await dispatcher.handleAnalytics(path, method, body, { request: c.req.raw });
117
+ return normalizeResponse(c, result);
118
+ } catch (err) {
119
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
120
+ }
121
+ });
122
+ app.all(`${prefix}/hub*`, async (c) => {
123
+ try {
124
+ const path = c.req.path.substring(c.req.path.indexOf("/hub") + 4);
125
+ const method = c.req.method;
126
+ let body = {};
127
+ if (method === "POST" || method === "PATCH" || method === "PUT") {
128
+ body = await c.req.json().catch(() => ({}));
129
+ }
130
+ const query = c.req.query();
131
+ const result = await dispatcher.handleHub(path, method, body, query, { request: c.req.raw });
132
+ return normalizeResponse(c, result);
133
+ } catch (err) {
134
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
135
+ }
136
+ });
137
+ app.all(`${prefix}/automation*`, async (c) => {
138
+ try {
139
+ const path = c.req.path.substring(c.req.path.indexOf("/automation") + 11);
140
+ const method = c.req.method;
141
+ let body = {};
142
+ if (method === "POST") {
143
+ body = await c.req.json().catch(() => ({}));
144
+ }
145
+ const result = await dispatcher.handleAutomation(path, method, body, { request: c.req.raw });
146
+ return normalizeResponse(c, result);
147
+ } catch (err) {
148
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
149
+ }
150
+ });
151
+ app.all(`${prefix}/storage*`, async (c) => {
152
+ try {
153
+ const path = c.req.path.substring(c.req.path.indexOf("/storage") + 8);
154
+ const method = c.req.method;
155
+ let file = void 0;
156
+ if (method === "POST" && path.includes("upload")) {
157
+ const body = await c.req.parseBody();
158
+ file = body["file"];
159
+ }
160
+ const result = await dispatcher.handleStorage(path, method, file, { request: c.req.raw });
161
+ return normalizeResponse(c, result);
162
+ } catch (err) {
163
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
164
+ }
165
+ });
166
+ return app;
174
167
  }
175
- /**
176
- * Middleware mode for existing Hono apps
177
- */
178
168
  function objectStackMiddleware(kernel) {
179
- return async (c, next) => {
180
- c.set('objectStack', kernel);
181
- await next();
182
- };
169
+ return async (c, next) => {
170
+ c.set("objectStack", kernel);
171
+ await next();
172
+ };
183
173
  }
174
+ // Annotate the CommonJS export names for ESM import in node:
175
+ 0 && (module.exports = {
176
+ createHonoApp,
177
+ objectStackMiddleware
178
+ });
179
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport { type ObjectKernel, HttpDispatcher, HttpDispatcherResult } from '@objectstack/runtime';\n\nexport interface ObjectStackHonoOptions {\n kernel: ObjectKernel;\n prefix?: string;\n}\n\n/**\n * Creates a Hono application tailored for ObjectStack\n * Fully compliant with @objectstack/spec\n */\nexport function createHonoApp(options: ObjectStackHonoOptions) {\n const app = new Hono();\n const { prefix = '/api' } = options;\n const dispatcher = new HttpDispatcher(options.kernel);\n\n app.use('*', cors());\n\n // --- Helper for Response Normalization ---\n const normalizeResponse = (c: any, result: HttpDispatcherResult) => {\n if (result.handled) {\n if (result.response) {\n return c.json(result.response.body, result.response.status as any, result.response.headers);\n }\n if (result.result) {\n const res = result.result;\n // Redirect\n if (res.type === 'redirect' && res.url) {\n return c.redirect(res.url);\n }\n // Stream\n if (res.type === 'stream' && res.stream) {\n return c.body(res.stream, 200, res.headers);\n }\n \n // Hono handles standard Response objects\n return res;\n }\n }\n return c.json({ success: false, error: { message: 'Not Found', code: 404 } }, 404);\n }\n\n // --- 0. Discovery Endpoint ---\n app.get(prefix, (c) => {\n return c.json(dispatcher.getDiscoveryInfo(prefix));\n });\n\n // --- 1. Auth ---\n app.all(`${prefix}/auth/*`, async (c) => {\n try {\n // subpath from /api/auth/login -> login\n const path = c.req.path.substring(c.req.path.indexOf('/auth/') + 6);\n const body = await c.req.parseBody().catch(() => ({})); \n \n const result = await dispatcher.handleAuth(path, c.req.method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 2. GraphQL ---\n app.post(`${prefix}/graphql`, async (c) => {\n try {\n const body = await c.req.json();\n const result = await dispatcher.handleGraphQL(body, { request: c.req.raw });\n return c.json(result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 3. Metadata Endpoints ---\n app.all(`${prefix}/metadata*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/metadata') + 9);\n const method = c.req.method;\n let body = undefined;\n \n if (method === 'PUT' || method === 'POST') {\n // Attempt to parse JSON body\n try {\n body = await c.req.json();\n } catch (e) {\n // Ignore parse errors, body remains undefined or empty\n body = {};\n }\n }\n\n const result = await dispatcher.handleMetadata(path, { request: c.req.raw }, method, body);\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 4. Data Endpoints ---\n app.all(`${prefix}/data*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/data') + 5);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST' || method === 'PATCH') {\n body = await c.req.json().catch(() => ({}));\n }\n const query = c.req.query();\n\n const result = await dispatcher.handleData(path, method, body, query, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 5. Analytics Endpoints ---\n app.all(`${prefix}/analytics*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/analytics') + 10);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST') {\n body = await c.req.json().catch(() => ({}));\n }\n\n const result = await dispatcher.handleAnalytics(path, method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 6. Hub Endpoints ---\n app.all(`${prefix}/hub*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/hub') + 4);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST' || method === 'PATCH' || method === 'PUT') {\n body = await c.req.json().catch(() => ({}));\n }\n const query = c.req.query();\n\n const result = await dispatcher.handleHub(path, method, body, query, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 7. Automation Endpoints ---\n app.all(`${prefix}/automation*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/automation') + 11);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST') {\n body = await c.req.json().catch(() => ({}));\n }\n\n const result = await dispatcher.handleAutomation(path, method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 8. Storage Endpoints ---\n app.all(`${prefix}/storage*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/storage') + 8);\n const method = c.req.method;\n \n let file: any = undefined;\n if (method === 'POST' && path.includes('upload')) {\n const body = await c.req.parseBody();\n file = body['file'];\n }\n\n const result = await dispatcher.handleStorage(path, method, file, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n return app;\n}\n\n/**\n * Middleware mode for existing Hono apps\n */\nexport function objectStackMiddleware(kernel: ObjectKernel) {\n return async (c: any, next: any) => {\n c.set('objectStack', kernel);\n await next();\n };\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,153 @@
1
+ // src/index.ts
2
+ import { Hono } from "hono";
3
+ import { cors } from "hono/cors";
4
+ import { HttpDispatcher } from "@objectstack/runtime";
5
+ function createHonoApp(options) {
6
+ const app = new Hono();
7
+ const { prefix = "/api" } = options;
8
+ const dispatcher = new HttpDispatcher(options.kernel);
9
+ app.use("*", cors());
10
+ const normalizeResponse = (c, result) => {
11
+ if (result.handled) {
12
+ if (result.response) {
13
+ return c.json(result.response.body, result.response.status, result.response.headers);
14
+ }
15
+ if (result.result) {
16
+ const res = result.result;
17
+ if (res.type === "redirect" && res.url) {
18
+ return c.redirect(res.url);
19
+ }
20
+ if (res.type === "stream" && res.stream) {
21
+ return c.body(res.stream, 200, res.headers);
22
+ }
23
+ return res;
24
+ }
25
+ }
26
+ return c.json({ success: false, error: { message: "Not Found", code: 404 } }, 404);
27
+ };
28
+ app.get(prefix, (c) => {
29
+ return c.json(dispatcher.getDiscoveryInfo(prefix));
30
+ });
31
+ app.all(`${prefix}/auth/*`, async (c) => {
32
+ try {
33
+ const path = c.req.path.substring(c.req.path.indexOf("/auth/") + 6);
34
+ const body = await c.req.parseBody().catch(() => ({}));
35
+ const result = await dispatcher.handleAuth(path, c.req.method, body, { request: c.req.raw });
36
+ return normalizeResponse(c, result);
37
+ } catch (err) {
38
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
39
+ }
40
+ });
41
+ app.post(`${prefix}/graphql`, async (c) => {
42
+ try {
43
+ const body = await c.req.json();
44
+ const result = await dispatcher.handleGraphQL(body, { request: c.req.raw });
45
+ return c.json(result);
46
+ } catch (err) {
47
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
48
+ }
49
+ });
50
+ app.all(`${prefix}/metadata*`, async (c) => {
51
+ try {
52
+ const path = c.req.path.substring(c.req.path.indexOf("/metadata") + 9);
53
+ const method = c.req.method;
54
+ let body = void 0;
55
+ if (method === "PUT" || method === "POST") {
56
+ try {
57
+ body = await c.req.json();
58
+ } catch (e) {
59
+ body = {};
60
+ }
61
+ }
62
+ const result = await dispatcher.handleMetadata(path, { request: c.req.raw }, method, body);
63
+ return normalizeResponse(c, result);
64
+ } catch (err) {
65
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
66
+ }
67
+ });
68
+ app.all(`${prefix}/data*`, async (c) => {
69
+ try {
70
+ const path = c.req.path.substring(c.req.path.indexOf("/data") + 5);
71
+ const method = c.req.method;
72
+ let body = {};
73
+ if (method === "POST" || method === "PATCH") {
74
+ body = await c.req.json().catch(() => ({}));
75
+ }
76
+ const query = c.req.query();
77
+ const result = await dispatcher.handleData(path, method, body, query, { request: c.req.raw });
78
+ return normalizeResponse(c, result);
79
+ } catch (err) {
80
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
81
+ }
82
+ });
83
+ app.all(`${prefix}/analytics*`, async (c) => {
84
+ try {
85
+ const path = c.req.path.substring(c.req.path.indexOf("/analytics") + 10);
86
+ const method = c.req.method;
87
+ let body = {};
88
+ if (method === "POST") {
89
+ body = await c.req.json().catch(() => ({}));
90
+ }
91
+ const result = await dispatcher.handleAnalytics(path, method, body, { request: c.req.raw });
92
+ return normalizeResponse(c, result);
93
+ } catch (err) {
94
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
95
+ }
96
+ });
97
+ app.all(`${prefix}/hub*`, async (c) => {
98
+ try {
99
+ const path = c.req.path.substring(c.req.path.indexOf("/hub") + 4);
100
+ const method = c.req.method;
101
+ let body = {};
102
+ if (method === "POST" || method === "PATCH" || method === "PUT") {
103
+ body = await c.req.json().catch(() => ({}));
104
+ }
105
+ const query = c.req.query();
106
+ const result = await dispatcher.handleHub(path, method, body, query, { request: c.req.raw });
107
+ return normalizeResponse(c, result);
108
+ } catch (err) {
109
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
110
+ }
111
+ });
112
+ app.all(`${prefix}/automation*`, async (c) => {
113
+ try {
114
+ const path = c.req.path.substring(c.req.path.indexOf("/automation") + 11);
115
+ const method = c.req.method;
116
+ let body = {};
117
+ if (method === "POST") {
118
+ body = await c.req.json().catch(() => ({}));
119
+ }
120
+ const result = await dispatcher.handleAutomation(path, method, body, { request: c.req.raw });
121
+ return normalizeResponse(c, result);
122
+ } catch (err) {
123
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
124
+ }
125
+ });
126
+ app.all(`${prefix}/storage*`, async (c) => {
127
+ try {
128
+ const path = c.req.path.substring(c.req.path.indexOf("/storage") + 8);
129
+ const method = c.req.method;
130
+ let file = void 0;
131
+ if (method === "POST" && path.includes("upload")) {
132
+ const body = await c.req.parseBody();
133
+ file = body["file"];
134
+ }
135
+ const result = await dispatcher.handleStorage(path, method, file, { request: c.req.raw });
136
+ return normalizeResponse(c, result);
137
+ } catch (err) {
138
+ return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);
139
+ }
140
+ });
141
+ return app;
142
+ }
143
+ function objectStackMiddleware(kernel) {
144
+ return async (c, next) => {
145
+ c.set("objectStack", kernel);
146
+ await next();
147
+ };
148
+ }
149
+ export {
150
+ createHonoApp,
151
+ objectStackMiddleware
152
+ };
153
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport { type ObjectKernel, HttpDispatcher, HttpDispatcherResult } from '@objectstack/runtime';\n\nexport interface ObjectStackHonoOptions {\n kernel: ObjectKernel;\n prefix?: string;\n}\n\n/**\n * Creates a Hono application tailored for ObjectStack\n * Fully compliant with @objectstack/spec\n */\nexport function createHonoApp(options: ObjectStackHonoOptions) {\n const app = new Hono();\n const { prefix = '/api' } = options;\n const dispatcher = new HttpDispatcher(options.kernel);\n\n app.use('*', cors());\n\n // --- Helper for Response Normalization ---\n const normalizeResponse = (c: any, result: HttpDispatcherResult) => {\n if (result.handled) {\n if (result.response) {\n return c.json(result.response.body, result.response.status as any, result.response.headers);\n }\n if (result.result) {\n const res = result.result;\n // Redirect\n if (res.type === 'redirect' && res.url) {\n return c.redirect(res.url);\n }\n // Stream\n if (res.type === 'stream' && res.stream) {\n return c.body(res.stream, 200, res.headers);\n }\n \n // Hono handles standard Response objects\n return res;\n }\n }\n return c.json({ success: false, error: { message: 'Not Found', code: 404 } }, 404);\n }\n\n // --- 0. Discovery Endpoint ---\n app.get(prefix, (c) => {\n return c.json(dispatcher.getDiscoveryInfo(prefix));\n });\n\n // --- 1. Auth ---\n app.all(`${prefix}/auth/*`, async (c) => {\n try {\n // subpath from /api/auth/login -> login\n const path = c.req.path.substring(c.req.path.indexOf('/auth/') + 6);\n const body = await c.req.parseBody().catch(() => ({})); \n \n const result = await dispatcher.handleAuth(path, c.req.method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 2. GraphQL ---\n app.post(`${prefix}/graphql`, async (c) => {\n try {\n const body = await c.req.json();\n const result = await dispatcher.handleGraphQL(body, { request: c.req.raw });\n return c.json(result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 3. Metadata Endpoints ---\n app.all(`${prefix}/metadata*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/metadata') + 9);\n const method = c.req.method;\n let body = undefined;\n \n if (method === 'PUT' || method === 'POST') {\n // Attempt to parse JSON body\n try {\n body = await c.req.json();\n } catch (e) {\n // Ignore parse errors, body remains undefined or empty\n body = {};\n }\n }\n\n const result = await dispatcher.handleMetadata(path, { request: c.req.raw }, method, body);\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 4. Data Endpoints ---\n app.all(`${prefix}/data*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/data') + 5);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST' || method === 'PATCH') {\n body = await c.req.json().catch(() => ({}));\n }\n const query = c.req.query();\n\n const result = await dispatcher.handleData(path, method, body, query, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 5. Analytics Endpoints ---\n app.all(`${prefix}/analytics*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/analytics') + 10);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST') {\n body = await c.req.json().catch(() => ({}));\n }\n\n const result = await dispatcher.handleAnalytics(path, method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 6. Hub Endpoints ---\n app.all(`${prefix}/hub*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/hub') + 4);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST' || method === 'PATCH' || method === 'PUT') {\n body = await c.req.json().catch(() => ({}));\n }\n const query = c.req.query();\n\n const result = await dispatcher.handleHub(path, method, body, query, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 7. Automation Endpoints ---\n app.all(`${prefix}/automation*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/automation') + 11);\n const method = c.req.method;\n \n let body = {};\n if (method === 'POST') {\n body = await c.req.json().catch(() => ({}));\n }\n\n const result = await dispatcher.handleAutomation(path, method, body, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n // --- 8. Storage Endpoints ---\n app.all(`${prefix}/storage*`, async (c) => {\n try {\n const path = c.req.path.substring(c.req.path.indexOf('/storage') + 8);\n const method = c.req.method;\n \n let file: any = undefined;\n if (method === 'POST' && path.includes('upload')) {\n const body = await c.req.parseBody();\n file = body['file'];\n }\n\n const result = await dispatcher.handleStorage(path, method, file, { request: c.req.raw });\n return normalizeResponse(c, result);\n } catch (err: any) {\n return c.json({ success: false, error: { message: err.message, code: err.statusCode || 500 } }, err.statusCode || 500);\n }\n });\n\n return app;\n}\n\n/**\n * Middleware mode for existing Hono apps\n */\nexport function objectStackMiddleware(kernel: ObjectKernel) {\n return async (c: any, next: any) => {\n c.set('objectStack', kernel);\n await next();\n };\n}\n"],"mappings":";AAAA,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAA4B,sBAA4C;AAWjE,SAAS,cAAc,SAAiC;AAC7D,QAAM,MAAM,IAAI,KAAK;AACrB,QAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,QAAM,aAAa,IAAI,eAAe,QAAQ,MAAM;AAEpD,MAAI,IAAI,KAAK,KAAK,CAAC;AAGnB,QAAM,oBAAoB,CAAC,GAAQ,WAAiC;AAChE,QAAI,OAAO,SAAS;AAChB,UAAI,OAAO,UAAU;AAChB,eAAO,EAAE,KAAK,OAAO,SAAS,MAAM,OAAO,SAAS,QAAe,OAAO,SAAS,OAAO;AAAA,MAC/F;AACA,UAAI,OAAO,QAAQ;AACf,cAAM,MAAM,OAAO;AAEnB,YAAI,IAAI,SAAS,cAAc,IAAI,KAAK;AACpC,iBAAO,EAAE,SAAS,IAAI,GAAG;AAAA,QAC7B;AAEA,YAAI,IAAI,SAAS,YAAY,IAAI,QAAQ;AACrC,iBAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,IAAI,OAAO;AAAA,QAC9C;AAGA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,aAAa,MAAM,IAAI,EAAE,GAAG,GAAG;AAAA,EACrF;AAGA,MAAI,IAAI,QAAQ,CAAC,MAAM;AACrB,WAAO,EAAE,KAAK,WAAW,iBAAiB,MAAM,CAAC;AAAA,EACnD,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,WAAW,OAAO,MAAM;AACvC,QAAI;AAEF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,QAAQ,IAAI,CAAC;AAClE,YAAM,OAAO,MAAM,EAAE,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC,EAAE;AAErD,YAAM,SAAS,MAAM,WAAW,WAAW,MAAM,EAAE,IAAI,QAAQ,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC3F,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,KAAK,GAAG,MAAM,YAAY,OAAO,MAAM;AACzC,QAAI;AACF,YAAM,OAAO,MAAM,EAAE,IAAI,KAAK;AAC9B,YAAM,SAAS,MAAM,WAAW,cAAc,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC1E,aAAO,EAAE,KAAK,MAAM;AAAA,IACtB,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,cAAc,OAAO,MAAM;AAC1C,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,WAAW,IAAI,CAAC;AACrE,YAAM,SAAS,EAAE,IAAI;AACrB,UAAI,OAAO;AAEX,UAAI,WAAW,SAAS,WAAW,QAAQ;AAEvC,YAAI;AACF,iBAAO,MAAM,EAAE,IAAI,KAAK;AAAA,QAC1B,SAAS,GAAG;AAEV,iBAAO,CAAC;AAAA,QACV;AAAA,MACJ;AAEA,YAAM,SAAS,MAAM,WAAW,eAAe,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,GAAG,QAAQ,IAAI;AACzF,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,UAAU,OAAO,MAAM;AACtC,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,OAAO,IAAI,CAAC;AACjE,YAAM,SAAS,EAAE,IAAI;AAErB,UAAI,OAAO,CAAC;AACZ,UAAI,WAAW,UAAU,WAAW,SAAS;AACzC,eAAO,MAAM,EAAE,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC9C;AACA,YAAM,QAAQ,EAAE,IAAI,MAAM;AAE1B,YAAM,SAAS,MAAM,WAAW,WAAW,MAAM,QAAQ,MAAM,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC5F,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,eAAe,OAAO,MAAM;AAC3C,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,YAAY,IAAI,EAAE;AACvE,YAAM,SAAS,EAAE,IAAI;AAErB,UAAI,OAAO,CAAC;AACZ,UAAI,WAAW,QAAQ;AACnB,eAAO,MAAM,EAAE,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC9C;AAEA,YAAM,SAAS,MAAM,WAAW,gBAAgB,MAAM,QAAQ,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC1F,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,SAAS,OAAO,MAAM;AACrC,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,MAAM,IAAI,CAAC;AAChE,YAAM,SAAS,EAAE,IAAI;AAErB,UAAI,OAAO,CAAC;AACZ,UAAI,WAAW,UAAU,WAAW,WAAW,WAAW,OAAO;AAC7D,eAAO,MAAM,EAAE,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC9C;AACA,YAAM,QAAQ,EAAE,IAAI,MAAM;AAE1B,YAAM,SAAS,MAAM,WAAW,UAAU,MAAM,QAAQ,MAAM,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC3F,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,gBAAgB,OAAO,MAAM;AAC1C,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,aAAa,IAAI,EAAE;AACxE,YAAM,SAAS,EAAE,IAAI;AAErB,UAAI,OAAO,CAAC;AACZ,UAAI,WAAW,QAAQ;AACnB,eAAO,MAAM,EAAE,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MAC9C;AAEA,YAAM,SAAS,MAAM,WAAW,iBAAiB,MAAM,QAAQ,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AAC3F,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACJ,CAAC;AAGD,MAAI,IAAI,GAAG,MAAM,aAAa,OAAO,MAAM;AACzC,QAAI;AACF,YAAM,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ,UAAU,IAAI,CAAC;AACpE,YAAM,SAAS,EAAE,IAAI;AAErB,UAAI,OAAY;AAChB,UAAI,WAAW,UAAU,KAAK,SAAS,QAAQ,GAAG;AAC9C,cAAM,OAAO,MAAM,EAAE,IAAI,UAAU;AACnC,eAAO,KAAK,MAAM;AAAA,MACtB;AAEA,YAAM,SAAS,MAAM,WAAW,cAAc,MAAM,QAAQ,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;AACxF,aAAO,kBAAkB,GAAG,MAAM;AAAA,IACpC,SAAS,KAAU;AACjB,aAAO,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,cAAc,IAAI,EAAE,GAAG,IAAI,cAAc,GAAG;AAAA,IACvH;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAKO,SAAS,sBAAsB,QAAsB;AAC1D,SAAO,OAAO,GAAQ,SAAc;AAClC,MAAE,IAAI,eAAe,MAAM;AAC3B,UAAM,KAAK;AAAA,EACb;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/hono",
3
- "version": "1.0.2",
3
+ "version": "1.0.5",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,14 +13,14 @@
13
13
  },
14
14
  "peerDependencies": {
15
15
  "hono": "^4.0.0",
16
- "@objectstack/runtime": "1.0.2"
16
+ "@objectstack/runtime": "1.0.5"
17
17
  },
18
18
  "devDependencies": {
19
19
  "hono": "^4.0.0",
20
20
  "typescript": "^5.0.0",
21
- "@objectstack/runtime": "1.0.2"
21
+ "@objectstack/runtime": "1.0.5"
22
22
  },
23
23
  "scripts": {
24
- "build": "tsc"
24
+ "build": "tsup --config ../../../tsup.config.ts"
25
25
  }
26
26
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,KAAK,YAAY,EAAwC,MAAM,sBAAsB,CAAC;AAE/F,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,sBAAsB,8EAmL5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,IAC1C,GAAG,GAAG,EAAE,MAAM,GAAG,mBAIhC"}