vonosan 0.1.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.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/client/composables/useVonosanFetch.d.ts +24 -0
- package/dist/client/composables/useVonosanFetch.d.ts.map +1 -0
- package/dist/client/composables/useVonosanFetch.js +49 -0
- package/dist/client/composables/useVonosanFetch.js.map +1 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/use-config.d.ts +31 -0
- package/dist/config/use-config.d.ts.map +1 -0
- package/dist/config/use-config.js +49 -0
- package/dist/config/use-config.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/module-system/define-module.d.ts +82 -0
- package/dist/module-system/define-module.d.ts.map +1 -0
- package/dist/module-system/define-module.js +37 -0
- package/dist/module-system/define-module.js.map +1 -0
- package/dist/module-system/index.d.ts +14 -0
- package/dist/module-system/index.d.ts.map +1 -0
- package/dist/module-system/index.js +13 -0
- package/dist/module-system/index.js.map +1 -0
- package/dist/module-system/module-registry.d.ts +37 -0
- package/dist/module-system/module-registry.d.ts.map +1 -0
- package/dist/module-system/module-registry.js +68 -0
- package/dist/module-system/module-registry.js.map +1 -0
- package/dist/module-system/vite-integration.d.ts.map +1 -0
- package/dist/module-system/vite-integration.js +67 -0
- package/dist/module-system/vite-integration.js.map +1 -0
- package/package.json +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bowofade Oyerinde
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# vonosan
|
|
2
|
+
|
|
3
|
+
Vonosan core runtime — config, composables, SSR helpers, and Vite plugin for building fullstack Vue applications.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔧 **Vite Plugin** — First-class Vite integration for dev and production builds
|
|
8
|
+
- 🖥️ **SSR Helpers** — Server-side rendering utilities with streaming support
|
|
9
|
+
- 🧩 **Composables** — Vue composables for state, head, routing, and more
|
|
10
|
+
- 🌐 **Server Runtime** — Hono-based server with middleware, sessions, and DB integration
|
|
11
|
+
- 📦 **Module System** — Extensible module architecture
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install vonosan
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Exports
|
|
20
|
+
|
|
21
|
+
| Entry | Description |
|
|
22
|
+
| ------------- | ---------------------------------- |
|
|
23
|
+
| `vonosan` | Core config and shared utilities |
|
|
24
|
+
| `vonosan/vite` | Vite plugin |
|
|
25
|
+
| `vonosan/server` | Server runtime (Hono, middleware) |
|
|
26
|
+
| `vonosan/client` | Client-side composables |
|
|
27
|
+
| `vonosan/types` | TypeScript type definitions |
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
// vite.config.ts
|
|
33
|
+
import { vonosanPlugin } from "vonosan/vite";
|
|
34
|
+
|
|
35
|
+
export default {
|
|
36
|
+
plugins: [vonosanPlugin()],
|
|
37
|
+
};
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Peer Dependencies
|
|
41
|
+
|
|
42
|
+
- **Required**: `vue`, `vue-router`
|
|
43
|
+
- **Optional**: `hono`, `@unhead/vue`, `pinia`, `drizzle-orm`, `zod`
|
|
44
|
+
|
|
45
|
+
## License
|
|
46
|
+
|
|
47
|
+
MIT © Bowofade Oyerinde
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Typed fetch wrapper that handles SSR/client URL differences.
|
|
12
|
+
*
|
|
13
|
+
* - On server: uses relative URLs (same process)
|
|
14
|
+
* - On client: uses absolute URLs (cross-origin safe)
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```ts
|
|
18
|
+
* const users = await useVonosanFetch<User[]>('/api/v1/users')
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function useVonosanFetch<T = unknown>(url: string, options?: RequestInit & {
|
|
22
|
+
baseUrl?: string;
|
|
23
|
+
}): Promise<T>;
|
|
24
|
+
//# sourceMappingURL=useVonosanFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVonosanFetch.d.ts","sourceRoot":"","sources":["../../../src/client/composables/useVonosanFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,CAAC,GAAG,OAAO,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAW,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC,CAAC,CAAC,CA6BZ"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Typed fetch wrapper that handles SSR/client URL differences.
|
|
12
|
+
*
|
|
13
|
+
* - On server: uses relative URLs (same process)
|
|
14
|
+
* - On client: uses absolute URLs (cross-origin safe)
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```ts
|
|
18
|
+
* const users = await useVonosanFetch<User[]>('/api/v1/users')
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export async function useVonosanFetch(url, options = {}) {
|
|
22
|
+
const { baseUrl, ...fetchOptions } = options;
|
|
23
|
+
// Resolve the full URL
|
|
24
|
+
let fullUrl;
|
|
25
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
26
|
+
fullUrl = url;
|
|
27
|
+
}
|
|
28
|
+
else if (import.meta.env.SSR) {
|
|
29
|
+
// On server: use the configured base URL or localhost
|
|
30
|
+
const base = baseUrl ?? process.env.APP_URL ?? 'http://localhost:4000';
|
|
31
|
+
fullUrl = `${base}${url}`;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// On client: relative URL works fine
|
|
35
|
+
fullUrl = url;
|
|
36
|
+
}
|
|
37
|
+
const response = await fetch(fullUrl, {
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
...fetchOptions.headers,
|
|
41
|
+
},
|
|
42
|
+
...fetchOptions,
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`[vonosan] useVonosanFetch: ${response.status} ${response.statusText} — ${url}`);
|
|
46
|
+
}
|
|
47
|
+
return response.json();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useVonosanFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVonosanFetch.js","sourceRoot":"","sources":["../../../src/client/composables/useVonosanFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,UAA8C,EAAE;IAEhD,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAA;IAE5C,uBAAuB;IACvB,IAAI,OAAe,CAAA;IACnB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,OAAO,GAAG,GAAG,CAAA;IACf,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC/B,sDAAsD;QACtD,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAuB,CAAA;QACtE,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAA;IAC3B,CAAC;SAAM,CAAC;QACN,qCAAqC;QACrC,OAAO,GAAG,GAAG,CAAA;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;QACpC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,YAAY,CAAC,OAAO;SACxB;QACD,GAAG,YAAY;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,GAAG,EAAE,CAAC,CAAA;IAClG,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// vonosan/client — client-side composables and utilities
|
|
11
|
+
export { useAsyncData } from './composables/useAsyncData.js';
|
|
12
|
+
export { useVonosanFetch } from './composables/useVonosanFetch.js';
|
|
13
|
+
export { useCookie } from './composables/useCookie.js';
|
|
14
|
+
export { useState, serializeVonoState, clearVonoState } from './composables/useState.js';
|
|
15
|
+
export { navigateTo, setSSRRedirectHandler } from './composables/navigateTo.js';
|
|
16
|
+
export { useSeo } from './composables/useSeo.js';
|
|
17
|
+
export { useRouteRules } from './composables/useRouteRules.js';
|
|
18
|
+
export { useFormErrors } from './composables/useFormErrors.js';
|
|
19
|
+
export { hydratePinia, serializePiniaState } from './pinia-hydration.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yDAAyD;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import type { VonosanConfig } from '../types/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Keys that are safe to expose to the client (no secrets).
|
|
13
|
+
* Server-only keys (JWT_SECRET, DB credentials, etc.) are stripped.
|
|
14
|
+
*/
|
|
15
|
+
declare const PUBLIC_CONFIG_KEYS: Array<keyof VonosanConfig>;
|
|
16
|
+
export type PublicVonosanConfig = Pick<VonosanConfig, typeof PUBLIC_CONFIG_KEYS[number]>;
|
|
17
|
+
/**
|
|
18
|
+
* Access the Vono config.
|
|
19
|
+
*
|
|
20
|
+
* On the server: returns the full config.
|
|
21
|
+
* On the client: returns only public-safe keys (no secrets).
|
|
22
|
+
*
|
|
23
|
+
* Usage in Vue components / composables:
|
|
24
|
+
* ```ts
|
|
25
|
+
* const config = useVonosanConfig()
|
|
26
|
+
* console.log(config.app.name)
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function useVonosanConfig(): PublicVonosanConfig;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=use-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-config.d.ts","sourceRoot":"","sources":["../../src/config/use-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;GAGG;AACH,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,MAAM,aAAa,CAMlD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAA;AAExF;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAgBtD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { getResolvedConfig } from './define-config.js';
|
|
11
|
+
/**
|
|
12
|
+
* Keys that are safe to expose to the client (no secrets).
|
|
13
|
+
* Server-only keys (JWT_SECRET, DB credentials, etc.) are stripped.
|
|
14
|
+
*/
|
|
15
|
+
const PUBLIC_CONFIG_KEYS = [
|
|
16
|
+
'app',
|
|
17
|
+
'mode',
|
|
18
|
+
'runtime',
|
|
19
|
+
'ui',
|
|
20
|
+
'docs',
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Access the Vono config.
|
|
24
|
+
*
|
|
25
|
+
* On the server: returns the full config.
|
|
26
|
+
* On the client: returns only public-safe keys (no secrets).
|
|
27
|
+
*
|
|
28
|
+
* Usage in Vue components / composables:
|
|
29
|
+
* ```ts
|
|
30
|
+
* const config = useVonosanConfig()
|
|
31
|
+
* console.log(config.app.name)
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function useVonosanConfig() {
|
|
35
|
+
const full = getResolvedConfig();
|
|
36
|
+
// On the client, only expose public keys
|
|
37
|
+
if (typeof window !== 'undefined') {
|
|
38
|
+
const publicConfig = {};
|
|
39
|
+
for (const key of PUBLIC_CONFIG_KEYS) {
|
|
40
|
+
if (key in full) {
|
|
41
|
+
publicConfig[key] = full[key];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return publicConfig;
|
|
45
|
+
}
|
|
46
|
+
// On the server, return the full config
|
|
47
|
+
return full;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=use-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-config.js","sourceRoot":"","sources":["../../src/config/use-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;GAGG;AACH,MAAM,kBAAkB,GAA+B;IACrD,KAAK;IACL,MAAM;IACN,SAAS;IACT,IAAI;IACJ,MAAM;CACP,CAAA;AAID;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAEhC,yCAAyC;IACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,YAAY,GAA2B,EAAE,CAAA;QAC/C,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACf,YAAwC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,YAAmC,CAAA;IAC5C,CAAC;IAED,wCAAwC;IACxC,OAAO,IAA2B,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC9E,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,cAAc,kBAAkB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// Main vonosan entry — config and composables
|
|
11
|
+
export { defineVonosanConfig, getResolvedConfig } from './config/define-config.js';
|
|
12
|
+
export { useVonosanConfig } from './config/use-config.js';
|
|
13
|
+
export { env, envNumber, envBool, envRequired } from './config/env-helpers.js';
|
|
14
|
+
export * from './types/index.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG9E,cAAc,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import type { ZodSchema } from 'zod';
|
|
11
|
+
export type VonosanLifecycleHook = 'app:created' | 'app:ready' | 'build:before' | 'build:after' | 'routes:resolved';
|
|
12
|
+
export interface VonosanModuleHooks {
|
|
13
|
+
'app:created'?: (...args: unknown[]) => void | Promise<void>;
|
|
14
|
+
'app:ready'?: (...args: unknown[]) => void | Promise<void>;
|
|
15
|
+
'build:before'?: (...args: unknown[]) => void | Promise<void>;
|
|
16
|
+
'build:after'?: (...args: unknown[]) => void | Promise<void>;
|
|
17
|
+
'routes:resolved'?: (...args: unknown[]) => void | Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface VonosanModuleDefinition {
|
|
20
|
+
/** Unique module identifier, e.g. '@vonosan/auth' */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Semver version string */
|
|
23
|
+
version: string;
|
|
24
|
+
/** Other module names this module depends on */
|
|
25
|
+
requires?: string[];
|
|
26
|
+
/** Hono middleware to register globally */
|
|
27
|
+
middleware?: Array<(...args: unknown[]) => unknown>;
|
|
28
|
+
/** Zod schemas exported by this module */
|
|
29
|
+
schemas?: Record<string, ZodSchema>;
|
|
30
|
+
/** Server-side auto-imports to inject */
|
|
31
|
+
serverImports?: Array<{
|
|
32
|
+
from: string;
|
|
33
|
+
imports: string[];
|
|
34
|
+
}>;
|
|
35
|
+
/** Client-side auto-imports to inject */
|
|
36
|
+
clientImports?: Array<{
|
|
37
|
+
from: string;
|
|
38
|
+
imports: string[];
|
|
39
|
+
}>;
|
|
40
|
+
/** Page components to register */
|
|
41
|
+
pages?: Array<{
|
|
42
|
+
path: string;
|
|
43
|
+
component: string;
|
|
44
|
+
}>;
|
|
45
|
+
/** Vue components to register */
|
|
46
|
+
components?: Array<{
|
|
47
|
+
name: string;
|
|
48
|
+
path: string;
|
|
49
|
+
}>;
|
|
50
|
+
/** API routes to register */
|
|
51
|
+
routes?: Array<{
|
|
52
|
+
path: string;
|
|
53
|
+
handler: string;
|
|
54
|
+
}>;
|
|
55
|
+
/** Drizzle migration files */
|
|
56
|
+
migrations?: string[];
|
|
57
|
+
/** Zod schema for module config validation */
|
|
58
|
+
configSchema?: ZodSchema;
|
|
59
|
+
/** Setup function called when the module is initialized */
|
|
60
|
+
setup?: (options?: Record<string, unknown>) => void | Promise<void>;
|
|
61
|
+
/** Lifecycle hooks */
|
|
62
|
+
hooks?: VonosanModuleHooks;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* defineVonosanModule — validates and returns the module definition.
|
|
66
|
+
*
|
|
67
|
+
* Throws if required fields (name, version) are missing.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* export default defineVonosanModule({
|
|
72
|
+
* name: '@vonosan/auth',
|
|
73
|
+
* version: '0.1.0',
|
|
74
|
+
* setup: async () => { ... },
|
|
75
|
+
* hooks: {
|
|
76
|
+
* 'app:ready': (app) => { ... },
|
|
77
|
+
* },
|
|
78
|
+
* })
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function defineVonosanModule(definition: VonosanModuleDefinition): VonosanModuleDefinition;
|
|
82
|
+
//# sourceMappingURL=define-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-module.d.ts","sourceRoot":"","sources":["../../src/module-system/define-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAIpC,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,WAAW,GACX,cAAc,GACd,aAAa,GACb,iBAAiB,CAAA;AAErB,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IAEZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IAEf,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAA;IAEnD,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEnC,yCAAyC;IACzC,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAE1D,yCAAyC;IACzC,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAE1D,kCAAkC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAElD,iCAAiC;IACjC,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAElD,6BAA6B;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAEjD,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IAErB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,SAAS,CAAA;IAExB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnE,sBAAsB;IACtB,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAC3B;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,uBAAuB,GAAG,uBAAuB,CAUhG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// ─── defineVonosanModule ────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* defineVonosanModule — validates and returns the module definition.
|
|
13
|
+
*
|
|
14
|
+
* Throws if required fields (name, version) are missing.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* export default defineVonosanModule({
|
|
19
|
+
* name: '@vonosan/auth',
|
|
20
|
+
* version: '0.1.0',
|
|
21
|
+
* setup: async () => { ... },
|
|
22
|
+
* hooks: {
|
|
23
|
+
* 'app:ready': (app) => { ... },
|
|
24
|
+
* },
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function defineVonosanModule(definition) {
|
|
29
|
+
if (!definition.name) {
|
|
30
|
+
throw new Error('[vonosan] defineVonosanModule: "name" is required');
|
|
31
|
+
}
|
|
32
|
+
if (!definition.version) {
|
|
33
|
+
throw new Error(`[vonosan] defineVonosanModule: "version" is required for module "${definition.name}"`);
|
|
34
|
+
}
|
|
35
|
+
return definition;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=define-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-module.js","sourceRoot":"","sources":["../../src/module-system/define-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiEH,2EAA2E;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAmC;IACrE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oEAAoE,UAAU,CAAC,IAAI,GAAG,CAAC,CAAA;IACzG,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export { defineVonosanModule } from './define-module.js';
|
|
11
|
+
export { registerModule, getModules, runHook, clearRegistry } from './module-registry.js';
|
|
12
|
+
export { applyModulesToViteConfig } from './vite-integration.js';
|
|
13
|
+
export type { VonosanModuleDefinition, VonosanModuleHooks, VonosanLifecycleHook } from './define-module.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/module-system/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export { defineVonosanModule } from './define-module.js';
|
|
11
|
+
export { registerModule, getModules, runHook, clearRegistry } from './module-registry.js';
|
|
12
|
+
export { applyModulesToViteConfig } from './vite-integration.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/module-system/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import type { VonosanModuleDefinition, VonosanLifecycleHook } from './define-module.js';
|
|
11
|
+
/**
|
|
12
|
+
* registerModule — adds a module to the global registry.
|
|
13
|
+
*
|
|
14
|
+
* Throws if a module with the same name is already registered.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerModule(module: VonosanModuleDefinition): void;
|
|
17
|
+
/**
|
|
18
|
+
* getModules — returns all registered modules.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getModules(): VonosanModuleDefinition[];
|
|
21
|
+
/**
|
|
22
|
+
* runHook — runs all registered hooks for a lifecycle event.
|
|
23
|
+
*
|
|
24
|
+
* Hooks are called in registration order.
|
|
25
|
+
* Errors in individual hooks are caught and logged — they do not
|
|
26
|
+
* prevent other hooks from running.
|
|
27
|
+
*
|
|
28
|
+
* @param hookName — lifecycle event name
|
|
29
|
+
* @param args — arguments passed to each hook handler
|
|
30
|
+
*/
|
|
31
|
+
export declare function runHook(hookName: VonosanLifecycleHook, ...args: unknown[]): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* clearRegistry — resets the module registry.
|
|
34
|
+
* Intended for use in tests only.
|
|
35
|
+
*/
|
|
36
|
+
export declare function clearRegistry(): void;
|
|
37
|
+
//# sourceMappingURL=module-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-registry.d.ts","sourceRoot":"","sources":["../../src/module-system/module-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AASvF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAYpE;AAID;;GAEG;AACH,wBAAgB,UAAU,IAAI,uBAAuB,EAAE,CAEtD;AAID;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/F;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { Logger } from '../shared/utils/logger.js';
|
|
11
|
+
// ─── Registry state ──────────────────────────────────────────────────
|
|
12
|
+
const registry = [];
|
|
13
|
+
// ─── registerModule ──────────────────────────────────────────────────
|
|
14
|
+
/**
|
|
15
|
+
* registerModule — adds a module to the global registry.
|
|
16
|
+
*
|
|
17
|
+
* Throws if a module with the same name is already registered.
|
|
18
|
+
*/
|
|
19
|
+
export function registerModule(module) {
|
|
20
|
+
const existing = registry.find((m) => m.name === module.name);
|
|
21
|
+
if (existing) {
|
|
22
|
+
throw new Error(`[vonosan] Module "${module.name}" is already registered. ` +
|
|
23
|
+
`Each module can only be registered once.`);
|
|
24
|
+
}
|
|
25
|
+
registry.push(module);
|
|
26
|
+
Logger.info(`[vonosan] Module registered: ${module.name}@${module.version}`);
|
|
27
|
+
}
|
|
28
|
+
// ─── getModules ──────────────────────────────────────────────────────
|
|
29
|
+
/**
|
|
30
|
+
* getModules — returns all registered modules.
|
|
31
|
+
*/
|
|
32
|
+
export function getModules() {
|
|
33
|
+
return [...registry];
|
|
34
|
+
}
|
|
35
|
+
// ─── runHook ─────────────────────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* runHook — runs all registered hooks for a lifecycle event.
|
|
38
|
+
*
|
|
39
|
+
* Hooks are called in registration order.
|
|
40
|
+
* Errors in individual hooks are caught and logged — they do not
|
|
41
|
+
* prevent other hooks from running.
|
|
42
|
+
*
|
|
43
|
+
* @param hookName — lifecycle event name
|
|
44
|
+
* @param args — arguments passed to each hook handler
|
|
45
|
+
*/
|
|
46
|
+
export async function runHook(hookName, ...args) {
|
|
47
|
+
for (const module of registry) {
|
|
48
|
+
const hook = module.hooks?.[hookName];
|
|
49
|
+
if (!hook)
|
|
50
|
+
continue;
|
|
51
|
+
try {
|
|
52
|
+
await hook(...args);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
Logger.error(`[vonosan] Hook "${hookName}" failed in module "${module.name}"`, {
|
|
56
|
+
error: String(err),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* clearRegistry — resets the module registry.
|
|
63
|
+
* Intended for use in tests only.
|
|
64
|
+
*/
|
|
65
|
+
export function clearRegistry() {
|
|
66
|
+
registry.length = 0;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=module-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-registry.js","sourceRoot":"","sources":["../../src/module-system/module-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,wEAAwE;AAExE,MAAM,QAAQ,GAA8B,EAAE,CAAA;AAE9C,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAC,IAAI,2BAA2B;YACzD,0CAA0C,CAC7C,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AAC9E,CAAC;AAED,wEAAwE;AAExE;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;AACtB,CAAC;AAED,wEAAwE;AAExE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAA8B,EAAE,GAAG,IAAe;IAC9E,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAA;QAErC,IAAI,CAAC,IAAI;YAAE,SAAQ;QAEnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,uBAAuB,MAAM,CAAC,IAAI,GAAG,EAAE;gBAC7E,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;aACnB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-integration.d.ts","sourceRoot":"","sources":["../../src/module-system/vite-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAKjE;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,EAAE,EAClC,MAAM,EAAE,UAAU,GACjB,UAAU,CAmDZ"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { Logger } from '../shared/utils/logger.js';
|
|
11
|
+
// ─── applyModulesToViteConfig ────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* applyModulesToViteConfig — merges module schemas, routes,
|
|
14
|
+
* auto-imports, and pages into the Vite config at build time.
|
|
15
|
+
*
|
|
16
|
+
* Called by the Vonosan Vite plugin when building the project.
|
|
17
|
+
*
|
|
18
|
+
* @param modules — registered VonosanModuleDefinition array
|
|
19
|
+
* @param config — existing Vite UserConfig to merge into
|
|
20
|
+
* @returns merged Vite config
|
|
21
|
+
*/
|
|
22
|
+
export function applyModulesToViteConfig(modules, config) {
|
|
23
|
+
const merged = { ...config };
|
|
24
|
+
// Collect all server-side auto-imports from modules
|
|
25
|
+
const serverImports = [];
|
|
26
|
+
const clientImports = [];
|
|
27
|
+
for (const module of modules) {
|
|
28
|
+
if (module.serverImports?.length) {
|
|
29
|
+
serverImports.push(...module.serverImports);
|
|
30
|
+
Logger.info(`[vonosan] Merging server imports from module: ${module.name}`);
|
|
31
|
+
}
|
|
32
|
+
if (module.clientImports?.length) {
|
|
33
|
+
clientImports.push(...module.clientImports);
|
|
34
|
+
Logger.info(`[vonosan] Merging client imports from module: ${module.name}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Merge into Vite config via the resolve.alias or plugin options
|
|
38
|
+
// The actual unplugin-auto-import config is handled by the Vonosan Vite plugin;
|
|
39
|
+
// here we attach the collected imports as metadata for the plugin to consume.
|
|
40
|
+
if (serverImports.length > 0 || clientImports.length > 0) {
|
|
41
|
+
merged.define = {
|
|
42
|
+
...merged.define,
|
|
43
|
+
'__VONO_MODULE_SERVER_IMPORTS__': JSON.stringify(serverImports),
|
|
44
|
+
'__VONO_MODULE_CLIENT_IMPORTS__': JSON.stringify(clientImports),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Collect page routes from modules
|
|
48
|
+
const modulePages = modules.flatMap((m) => m.pages ?? []);
|
|
49
|
+
if (modulePages.length > 0) {
|
|
50
|
+
merged.define = {
|
|
51
|
+
...merged.define,
|
|
52
|
+
'__VONO_MODULE_PAGES__': JSON.stringify(modulePages),
|
|
53
|
+
};
|
|
54
|
+
Logger.info(`[vonosan] Registered ${modulePages.length} page(s) from modules`);
|
|
55
|
+
}
|
|
56
|
+
// Collect API routes from modules
|
|
57
|
+
const moduleRoutes = modules.flatMap((m) => m.routes ?? []);
|
|
58
|
+
if (moduleRoutes.length > 0) {
|
|
59
|
+
merged.define = {
|
|
60
|
+
...merged.define,
|
|
61
|
+
'__VONO_MODULE_ROUTES__': JSON.stringify(moduleRoutes),
|
|
62
|
+
};
|
|
63
|
+
Logger.info(`[vonosan] Registered ${moduleRoutes.length} route(s) from modules`);
|
|
64
|
+
}
|
|
65
|
+
return merged;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=vite-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-integration.js","sourceRoot":"","sources":["../../src/module-system/vite-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,wEAAwE;AAExE;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAkC,EAClC,MAAkB;IAElB,MAAM,MAAM,GAAe,EAAE,GAAG,MAAM,EAAE,CAAA;IAExC,oDAAoD;IACpD,MAAM,aAAa,GAA+C,EAAE,CAAA;IACpE,MAAM,aAAa,GAA+C,EAAE,CAAA;IAEpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,iDAAiD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7E,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,iDAAiD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,gFAAgF;IAChF,8EAA8E;IAC9E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAC/D,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;SAChE,CAAA;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACzD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SACrD,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,MAAM,uBAAuB,CAAC,CAAA;IAChF,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACvD,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,MAAM,wBAAwB,CAAC,CAAA;IAClF,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vonosan",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Vonosan core runtime — config, composables, SSR helpers, Vite plugin",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Bowofade Oyerinde",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/oyenet1/vonosan.git",
|
|
11
|
+
"directory": "packages/vonosan"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/oyenet1/vonosan#readme",
|
|
14
|
+
"keywords": ["vonosan", "vue", "vite", "ssr", "framework", "hono", "fullstack"],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./vite": {
|
|
21
|
+
"import": "./dist/vite/index.js",
|
|
22
|
+
"types": "./dist/vite/index.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./server": {
|
|
25
|
+
"import": "./dist/server/index.js",
|
|
26
|
+
"types": "./dist/server/index.d.ts"
|
|
27
|
+
},
|
|
28
|
+
"./client": {
|
|
29
|
+
"import": "./dist/client/index.js",
|
|
30
|
+
"types": "./dist/client/index.d.ts"
|
|
31
|
+
},
|
|
32
|
+
"./types": {
|
|
33
|
+
"import": "./dist/types/index.js",
|
|
34
|
+
"types": "./dist/types/index.d.ts"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"main": "./dist/index.js",
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"!dist/__tests__",
|
|
42
|
+
"!dist/**/__tests__"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc -p tsconfig.json",
|
|
46
|
+
"dev": "tsc -p tsconfig.json --watch"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"@unhead/vue": ">=2.0.0",
|
|
50
|
+
"drizzle-orm": ">=0.44.0",
|
|
51
|
+
"hono": ">=4.8.0",
|
|
52
|
+
"pinia": ">=3.0.0",
|
|
53
|
+
"vue": ">=3.5.0",
|
|
54
|
+
"vue-router": ">=5.0.0",
|
|
55
|
+
"zod": ">=4.0.0"
|
|
56
|
+
},
|
|
57
|
+
"peerDependenciesMeta": {
|
|
58
|
+
"@unhead/vue": { "optional": true },
|
|
59
|
+
"drizzle-orm": { "optional": true },
|
|
60
|
+
"hono": { "optional": true },
|
|
61
|
+
"pinia": { "optional": true },
|
|
62
|
+
"zod": { "optional": true }
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@types/bun": "1.2.14",
|
|
66
|
+
"@types/node": "25.5.2",
|
|
67
|
+
"@unhead/ssr": "2.0.10",
|
|
68
|
+
"@unhead/vue": "2.0.10",
|
|
69
|
+
"drizzle-orm": "0.44.5",
|
|
70
|
+
"hono": "4.8.10",
|
|
71
|
+
"pinia": "3.0.2",
|
|
72
|
+
"typescript": "5.8.3",
|
|
73
|
+
"vue": "3.5.13",
|
|
74
|
+
"vue-router": "5.0.0",
|
|
75
|
+
"zod": "4.1.8"
|
|
76
|
+
}
|
|
77
|
+
}
|