@buenojs/bueno 0.8.3 → 0.8.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.
- package/README.md +136 -16
- package/dist/cli/{index.js → bin.js} +3036 -1421
- package/dist/container/index.js +250 -0
- package/dist/context/index.js +219 -0
- package/dist/database/index.js +493 -0
- package/dist/frontend/index.js +7697 -0
- package/dist/health/index.js +364 -0
- package/dist/i18n/index.js +345 -0
- package/dist/index.js +11043 -6482
- package/dist/jobs/index.js +819 -0
- package/dist/lock/index.js +367 -0
- package/dist/logger/index.js +281 -0
- package/dist/metrics/index.js +289 -0
- package/dist/middleware/index.js +77 -0
- package/dist/migrations/index.js +571 -0
- package/dist/modules/index.js +3346 -0
- package/dist/notification/index.js +484 -0
- package/dist/observability/index.js +331 -0
- package/dist/openapi/index.js +776 -0
- package/dist/orm/index.js +1356 -0
- package/dist/router/index.js +886 -0
- package/dist/rpc/index.js +691 -0
- package/dist/schema/index.js +400 -0
- package/dist/telemetry/index.js +595 -0
- package/dist/template/index.js +640 -0
- package/dist/templates/index.js +640 -0
- package/dist/testing/index.js +1111 -0
- package/dist/types/index.js +60 -0
- package/package.json +121 -27
- package/src/cache/index.ts +2 -1
- package/src/cli/bin.ts +2 -2
- package/src/cli/commands/build.ts +183 -165
- package/src/cli/commands/dev.ts +96 -89
- package/src/cli/commands/generate.ts +142 -111
- package/src/cli/commands/help.ts +20 -16
- package/src/cli/commands/index.ts +3 -6
- package/src/cli/commands/migration.ts +124 -105
- package/src/cli/commands/new.ts +392 -438
- package/src/cli/commands/start.ts +81 -79
- package/src/cli/core/args.ts +68 -50
- package/src/cli/core/console.ts +89 -95
- package/src/cli/core/index.ts +4 -4
- package/src/cli/core/prompt.ts +65 -62
- package/src/cli/core/spinner.ts +23 -20
- package/src/cli/index.ts +46 -38
- package/src/cli/templates/database/index.ts +61 -0
- package/src/cli/templates/database/mysql.ts +14 -0
- package/src/cli/templates/database/none.ts +16 -0
- package/src/cli/templates/database/postgresql.ts +14 -0
- package/src/cli/templates/database/sqlite.ts +14 -0
- package/src/cli/templates/deploy.ts +29 -26
- package/src/cli/templates/docker.ts +41 -30
- package/src/cli/templates/frontend/index.ts +63 -0
- package/src/cli/templates/frontend/none.ts +17 -0
- package/src/cli/templates/frontend/react.ts +140 -0
- package/src/cli/templates/frontend/solid.ts +134 -0
- package/src/cli/templates/frontend/svelte.ts +131 -0
- package/src/cli/templates/frontend/vue.ts +130 -0
- package/src/cli/templates/generators/index.ts +339 -0
- package/src/cli/templates/generators/types.ts +56 -0
- package/src/cli/templates/index.ts +35 -2
- package/src/cli/templates/project/api.ts +81 -0
- package/src/cli/templates/project/default.ts +140 -0
- package/src/cli/templates/project/fullstack.ts +111 -0
- package/src/cli/templates/project/index.ts +95 -0
- package/src/cli/templates/project/minimal.ts +45 -0
- package/src/cli/templates/project/types.ts +94 -0
- package/src/cli/templates/project/website.ts +263 -0
- package/src/cli/utils/fs.ts +55 -41
- package/src/cli/utils/index.ts +3 -2
- package/src/cli/utils/strings.ts +47 -33
- package/src/cli/utils/version.ts +47 -0
- package/src/config/env-validation.ts +100 -0
- package/src/config/env.ts +169 -41
- package/src/config/index.ts +28 -20
- package/src/config/loader.ts +25 -16
- package/src/config/merge.ts +21 -10
- package/src/config/types.ts +545 -25
- package/src/config/validation.ts +215 -7
- package/src/container/forward-ref.ts +22 -22
- package/src/container/index.ts +34 -12
- package/src/context/index.ts +11 -1
- package/src/database/index.ts +7 -190
- package/src/database/orm/builder.ts +457 -0
- package/src/database/orm/casts/index.ts +130 -0
- package/src/database/orm/casts/types.ts +25 -0
- package/src/database/orm/compiler.ts +304 -0
- package/src/database/orm/hooks/index.ts +114 -0
- package/src/database/orm/index.ts +61 -0
- package/src/database/orm/model-registry.ts +59 -0
- package/src/database/orm/model.ts +821 -0
- package/src/database/orm/relationships/base.ts +146 -0
- package/src/database/orm/relationships/belongs-to-many.ts +179 -0
- package/src/database/orm/relationships/belongs-to.ts +56 -0
- package/src/database/orm/relationships/has-many.ts +45 -0
- package/src/database/orm/relationships/has-one.ts +41 -0
- package/src/database/orm/relationships/index.ts +11 -0
- package/src/database/orm/scopes/index.ts +55 -0
- package/src/events/__tests__/event-system.test.ts +235 -0
- package/src/events/config.ts +238 -0
- package/src/events/example-usage.ts +185 -0
- package/src/events/index.ts +278 -0
- package/src/events/manager.ts +385 -0
- package/src/events/registry.ts +182 -0
- package/src/events/types.ts +124 -0
- package/src/frontend/api-routes.ts +65 -23
- package/src/frontend/bundler.ts +76 -34
- package/src/frontend/console-client.ts +2 -2
- package/src/frontend/console-stream.ts +94 -38
- package/src/frontend/dev-server.ts +94 -46
- package/src/frontend/file-router.ts +61 -19
- package/src/frontend/frameworks/index.ts +37 -10
- package/src/frontend/frameworks/react.ts +10 -8
- package/src/frontend/frameworks/solid.ts +11 -9
- package/src/frontend/frameworks/svelte.ts +15 -9
- package/src/frontend/frameworks/vue.ts +13 -11
- package/src/frontend/hmr-client.ts +12 -10
- package/src/frontend/hmr.ts +146 -103
- package/src/frontend/index.ts +14 -5
- package/src/frontend/islands.ts +41 -22
- package/src/frontend/isr.ts +59 -37
- package/src/frontend/layout.ts +36 -21
- package/src/frontend/ssr/react.ts +74 -27
- package/src/frontend/ssr/solid.ts +54 -20
- package/src/frontend/ssr/svelte.ts +48 -14
- package/src/frontend/ssr/vue.ts +50 -18
- package/src/frontend/ssr.ts +83 -39
- package/src/frontend/types.ts +91 -56
- package/src/health/index.ts +21 -9
- package/src/i18n/engine.ts +305 -0
- package/src/i18n/index.ts +38 -0
- package/src/i18n/loader.ts +218 -0
- package/src/i18n/middleware.ts +164 -0
- package/src/i18n/negotiator.ts +162 -0
- package/src/i18n/types.ts +158 -0
- package/src/index.ts +179 -27
- package/src/jobs/drivers/memory.ts +315 -0
- package/src/jobs/drivers/redis.ts +459 -0
- package/src/jobs/index.ts +30 -0
- package/src/jobs/queue.ts +281 -0
- package/src/jobs/types.ts +295 -0
- package/src/jobs/worker.ts +380 -0
- package/src/logger/index.ts +1 -3
- package/src/logger/transports/index.ts +62 -22
- package/src/metrics/index.ts +25 -16
- package/src/migrations/index.ts +9 -0
- package/src/modules/filters.ts +13 -17
- package/src/modules/guards.ts +49 -26
- package/src/modules/index.ts +409 -298
- package/src/modules/interceptors.ts +58 -20
- package/src/modules/lazy.ts +11 -19
- package/src/modules/lifecycle.ts +15 -7
- package/src/modules/metadata.ts +15 -5
- package/src/modules/pipes.ts +94 -72
- package/src/notification/channels/base.ts +68 -0
- package/src/notification/channels/email.ts +105 -0
- package/src/notification/channels/push.ts +104 -0
- package/src/notification/channels/sms.ts +105 -0
- package/src/notification/channels/whatsapp.ts +104 -0
- package/src/notification/index.ts +48 -0
- package/src/notification/service.ts +354 -0
- package/src/notification/types.ts +344 -0
- package/src/observability/__tests__/observability.test.ts +483 -0
- package/src/observability/breadcrumbs.ts +114 -0
- package/src/observability/index.ts +136 -0
- package/src/observability/interceptor.ts +85 -0
- package/src/observability/service.ts +303 -0
- package/src/observability/trace.ts +37 -0
- package/src/observability/types.ts +196 -0
- package/src/openapi/__tests__/decorators.test.ts +335 -0
- package/src/openapi/__tests__/document-builder.test.ts +285 -0
- package/src/openapi/__tests__/route-scanner.test.ts +334 -0
- package/src/openapi/__tests__/schema-generator.test.ts +275 -0
- package/src/openapi/decorators.ts +328 -0
- package/src/openapi/document-builder.ts +274 -0
- package/src/openapi/index.ts +112 -0
- package/src/openapi/metadata.ts +112 -0
- package/src/openapi/route-scanner.ts +289 -0
- package/src/openapi/schema-generator.ts +256 -0
- package/src/openapi/swagger-module.ts +166 -0
- package/src/openapi/types.ts +398 -0
- package/src/orm/index.ts +10 -0
- package/src/rpc/index.ts +3 -1
- package/src/schema/index.ts +9 -0
- package/src/security/index.ts +15 -6
- package/src/ssg/index.ts +9 -8
- package/src/telemetry/index.ts +76 -22
- package/src/template/index.ts +7 -0
- package/src/templates/engine.ts +224 -0
- package/src/templates/index.ts +9 -0
- package/src/templates/loader.ts +331 -0
- package/src/templates/renderers/markdown.ts +212 -0
- package/src/templates/renderers/simple.ts +269 -0
- package/src/templates/types.ts +154 -0
- package/src/testing/index.ts +100 -27
- package/src/types/optional-deps.d.ts +347 -187
- package/src/validation/index.ts +92 -2
- package/src/validation/schemas.ts +536 -0
- package/tests/integration/fullstack.test.ts +4 -4
- package/tests/unit/database.test.ts +2 -72
- package/tests/unit/env-validation.test.ts +166 -0
- package/tests/unit/events.test.ts +910 -0
- package/tests/unit/i18n.test.ts +455 -0
- package/tests/unit/jobs.test.ts +493 -0
- package/tests/unit/notification.test.ts +988 -0
- package/tests/unit/observability.test.ts +453 -0
- package/tests/unit/orm/builder.test.ts +323 -0
- package/tests/unit/orm/casts.test.ts +179 -0
- package/tests/unit/orm/compiler.test.ts +220 -0
- package/tests/unit/orm/eager-loading.test.ts +285 -0
- package/tests/unit/orm/hooks.test.ts +191 -0
- package/tests/unit/orm/model.test.ts +373 -0
- package/tests/unit/orm/relationships.test.ts +303 -0
- package/tests/unit/orm/scopes.test.ts +74 -0
- package/tests/unit/templates-simple.test.ts +53 -0
- package/tests/unit/templates.test.ts +454 -0
- package/tests/unit/validation.test.ts +18 -24
- package/tsconfig.json +11 -3
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SolidJS Frontend Template
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { FrontendTemplateResult } from "../project/types";
|
|
6
|
+
|
|
7
|
+
export function solidTemplate(): FrontendTemplateResult {
|
|
8
|
+
return {
|
|
9
|
+
files: [
|
|
10
|
+
{
|
|
11
|
+
path: "client/index.html",
|
|
12
|
+
content: `<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>Bueno App</title>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="root"></div>
|
|
21
|
+
<script type="module" src="./src/main.tsx"></script>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
24
|
+
`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: "client/src/main.tsx",
|
|
28
|
+
content: `import { render } from 'solid-js/web';
|
|
29
|
+
import { App } from './App';
|
|
30
|
+
import './styles/globals.css';
|
|
31
|
+
|
|
32
|
+
const root = document.getElementById('root');
|
|
33
|
+
|
|
34
|
+
if (root) {
|
|
35
|
+
render(() => <App />, root);
|
|
36
|
+
}
|
|
37
|
+
`,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
path: "client/src/App.tsx",
|
|
41
|
+
content: `import { createSignal } from 'solid-js';
|
|
42
|
+
|
|
43
|
+
export function App() {
|
|
44
|
+
const [count, setCount] = createSignal(0);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<main class="min-h-screen bg-gradient-to-br from-slate-900 to-slate-800 text-white">
|
|
48
|
+
<div class="container mx-auto px-4 py-16">
|
|
49
|
+
<div class="max-w-2xl mx-auto text-center">
|
|
50
|
+
<h1 class="text-5xl font-bold mb-4 bg-gradient-to-r from-cyan-400 to-blue-500 bg-clip-text text-transparent">
|
|
51
|
+
Welcome to Bueno
|
|
52
|
+
</h1>
|
|
53
|
+
<p class="text-xl text-slate-300 mb-8">
|
|
54
|
+
A Bun-native full-stack framework
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<div class="bg-slate-800/50 rounded-xl p-8 backdrop-blur-sm border border-slate-700">
|
|
58
|
+
<button
|
|
59
|
+
onClick={() => setCount(c => c + 1)}
|
|
60
|
+
class="px-6 py-3 bg-cyan-500 hover:bg-cyan-600 rounded-lg font-medium transition-colors"
|
|
61
|
+
>
|
|
62
|
+
Count: {count()}
|
|
63
|
+
</button>
|
|
64
|
+
<p class="mt-4 text-slate-400 text-sm">
|
|
65
|
+
Click the button to test Solid reactivity
|
|
66
|
+
</p>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div class="mt-8 grid grid-cols-2 gap-4 text-left">
|
|
70
|
+
<a
|
|
71
|
+
href="https://bueno.github.io"
|
|
72
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-cyan-500 transition-colors"
|
|
73
|
+
>
|
|
74
|
+
<h3 class="font-semibold text-cyan-400">Documentation</h3>
|
|
75
|
+
<p class="text-sm text-slate-400">Learn more about Bueno</p>
|
|
76
|
+
</a>
|
|
77
|
+
<a
|
|
78
|
+
href="https://github.com/buenojs/bueno"
|
|
79
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-cyan-500 transition-colors"
|
|
80
|
+
>
|
|
81
|
+
<h3 class="font-semibold text-cyan-400">GitHub</h3>
|
|
82
|
+
<p class="text-sm text-slate-400">View the source code</p>
|
|
83
|
+
</a>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</main>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
`,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
path: "client/src/styles/globals.css",
|
|
94
|
+
content: `@tailwind base;
|
|
95
|
+
@tailwind components;
|
|
96
|
+
@tailwind utilities;
|
|
97
|
+
|
|
98
|
+
:root {
|
|
99
|
+
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
100
|
+
line-height: 1.5;
|
|
101
|
+
font-weight: 400;
|
|
102
|
+
font-synthesis: none;
|
|
103
|
+
text-rendering: optimizeLegibility;
|
|
104
|
+
-webkit-font-smoothing: antialiased;
|
|
105
|
+
-moz-osx-font-smoothing: grayscale;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
body {
|
|
109
|
+
margin: 0;
|
|
110
|
+
min-width: 320px;
|
|
111
|
+
min-height: 100vh;
|
|
112
|
+
}
|
|
113
|
+
`,
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
directories: [
|
|
117
|
+
"client/src/components",
|
|
118
|
+
"client/src/styles",
|
|
119
|
+
"client/public",
|
|
120
|
+
],
|
|
121
|
+
dependencies: {
|
|
122
|
+
"solid-js": "^1.8.0",
|
|
123
|
+
},
|
|
124
|
+
devDependencies: {
|
|
125
|
+
tailwindcss: "^3.4.0",
|
|
126
|
+
postcss: "^8.4.0",
|
|
127
|
+
autoprefixer: "^10.4.0",
|
|
128
|
+
},
|
|
129
|
+
scripts: {
|
|
130
|
+
"dev:client": "bun run --watch client/index.html",
|
|
131
|
+
"build:client": "bun build ./client/src/main.tsx --outdir ./dist/client",
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte Frontend Template
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { FrontendTemplateResult } from "../project/types";
|
|
6
|
+
|
|
7
|
+
export function svelteTemplate(): FrontendTemplateResult {
|
|
8
|
+
return {
|
|
9
|
+
files: [
|
|
10
|
+
{
|
|
11
|
+
path: "client/index.html",
|
|
12
|
+
content: `<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>Bueno App</title>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="app"></div>
|
|
21
|
+
<script type="module" src="./src/main.ts"></script>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
24
|
+
`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: "client/src/main.ts",
|
|
28
|
+
content: `import App from './App.svelte';
|
|
29
|
+
import './styles/globals.css';
|
|
30
|
+
|
|
31
|
+
const app = new App({
|
|
32
|
+
target: document.getElementById('app')!,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
export default app;
|
|
36
|
+
`,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
path: "client/src/App.svelte",
|
|
40
|
+
content: `<script lang="ts">
|
|
41
|
+
let count = 0;
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<main class="min-h-screen bg-gradient-to-br from-slate-900 to-slate-800 text-white">
|
|
45
|
+
<div class="container mx-auto px-4 py-16">
|
|
46
|
+
<div class="max-w-2xl mx-auto text-center">
|
|
47
|
+
<h1 class="text-5xl font-bold mb-4 bg-gradient-to-r from-orange-400 to-red-500 bg-clip-text text-transparent">
|
|
48
|
+
Welcome to Bueno
|
|
49
|
+
</h1>
|
|
50
|
+
<p class="text-xl text-slate-300 mb-8">
|
|
51
|
+
A Bun-native full-stack framework
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
<div class="bg-slate-800/50 rounded-xl p-8 backdrop-blur-sm border border-slate-700">
|
|
55
|
+
<button
|
|
56
|
+
on:click={() => count++}
|
|
57
|
+
class="px-6 py-3 bg-orange-500 hover:bg-orange-600 rounded-lg font-medium transition-colors"
|
|
58
|
+
>
|
|
59
|
+
Count: {count}
|
|
60
|
+
</button>
|
|
61
|
+
<p class="mt-4 text-slate-400 text-sm">
|
|
62
|
+
Click the button to test Svelte reactivity
|
|
63
|
+
</p>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div class="mt-8 grid grid-cols-2 gap-4 text-left">
|
|
67
|
+
<a
|
|
68
|
+
href="https://bueno.github.io"
|
|
69
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-orange-500 transition-colors"
|
|
70
|
+
>
|
|
71
|
+
<h3 class="font-semibold text-orange-400">Documentation</h3>
|
|
72
|
+
<p class="text-sm text-slate-400">Learn more about Bueno</p>
|
|
73
|
+
</a>
|
|
74
|
+
<a
|
|
75
|
+
href="https://github.com/buenojs/bueno"
|
|
76
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-orange-500 transition-colors"
|
|
77
|
+
>
|
|
78
|
+
<h3 class="font-semibold text-orange-400">GitHub</h3>
|
|
79
|
+
<p class="text-sm text-slate-400">View the source code</p>
|
|
80
|
+
</a>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</main>
|
|
85
|
+
`,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
path: "client/src/styles/globals.css",
|
|
89
|
+
content: `@tailwind base;
|
|
90
|
+
@tailwind components;
|
|
91
|
+
@tailwind utilities;
|
|
92
|
+
|
|
93
|
+
:root {
|
|
94
|
+
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
95
|
+
line-height: 1.5;
|
|
96
|
+
font-weight: 400;
|
|
97
|
+
font-synthesis: none;
|
|
98
|
+
text-rendering: optimizeLegibility;
|
|
99
|
+
-webkit-font-smoothing: antialiased;
|
|
100
|
+
-moz-osx-font-smoothing: grayscale;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
body {
|
|
104
|
+
margin: 0;
|
|
105
|
+
min-width: 320px;
|
|
106
|
+
min-height: 100vh;
|
|
107
|
+
}
|
|
108
|
+
`,
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
directories: [
|
|
112
|
+
"client/src/components",
|
|
113
|
+
"client/src/styles",
|
|
114
|
+
"client/public",
|
|
115
|
+
],
|
|
116
|
+
dependencies: {
|
|
117
|
+
svelte: "^4.2.0",
|
|
118
|
+
},
|
|
119
|
+
devDependencies: {
|
|
120
|
+
"@sveltejs/vite-plugin-svelte": "^3.0.0",
|
|
121
|
+
svelte: "^4.2.0",
|
|
122
|
+
tailwindcss: "^3.4.0",
|
|
123
|
+
postcss: "^8.4.0",
|
|
124
|
+
autoprefixer: "^10.4.0",
|
|
125
|
+
},
|
|
126
|
+
scripts: {
|
|
127
|
+
"dev:client": "bun run --watch client/index.html",
|
|
128
|
+
"build:client": "bun build ./client/src/main.ts --outdir ./dist/client",
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vue Frontend Template
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { FrontendTemplateResult } from "../project/types";
|
|
6
|
+
|
|
7
|
+
export function vueTemplate(): FrontendTemplateResult {
|
|
8
|
+
return {
|
|
9
|
+
files: [
|
|
10
|
+
{
|
|
11
|
+
path: "client/index.html",
|
|
12
|
+
content: `<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>Bueno App</title>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="app"></div>
|
|
21
|
+
<script type="module" src="./src/main.ts"></script>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
|
24
|
+
`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: "client/src/main.ts",
|
|
28
|
+
content: `import { createApp } from 'vue';
|
|
29
|
+
import App from './App.vue';
|
|
30
|
+
import './styles/globals.css';
|
|
31
|
+
|
|
32
|
+
createApp(App).mount('#app');
|
|
33
|
+
`,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
path: "client/src/App.vue",
|
|
37
|
+
content: `<script setup lang="ts">
|
|
38
|
+
import { ref } from 'vue';
|
|
39
|
+
|
|
40
|
+
const count = ref(0);
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<main class="min-h-screen bg-gradient-to-br from-slate-900 to-slate-800 text-white">
|
|
45
|
+
<div class="container mx-auto px-4 py-16">
|
|
46
|
+
<div class="max-w-2xl mx-auto text-center">
|
|
47
|
+
<h1 class="text-5xl font-bold mb-4 bg-gradient-to-r from-green-400 to-emerald-500 bg-clip-text text-transparent">
|
|
48
|
+
Welcome to Bueno
|
|
49
|
+
</h1>
|
|
50
|
+
<p class="text-xl text-slate-300 mb-8">
|
|
51
|
+
A Bun-native full-stack framework
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
<div class="bg-slate-800/50 rounded-xl p-8 backdrop-blur-sm border border-slate-700">
|
|
55
|
+
<button
|
|
56
|
+
@click="count++"
|
|
57
|
+
class="px-6 py-3 bg-green-500 hover:bg-green-600 rounded-lg font-medium transition-colors"
|
|
58
|
+
>
|
|
59
|
+
Count: {{ count }}
|
|
60
|
+
</button>
|
|
61
|
+
<p class="mt-4 text-slate-400 text-sm">
|
|
62
|
+
Click the button to test Vue reactivity
|
|
63
|
+
</p>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div class="mt-8 grid grid-cols-2 gap-4 text-left">
|
|
67
|
+
<a
|
|
68
|
+
href="https://bueno.github.io"
|
|
69
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-green-500 transition-colors"
|
|
70
|
+
>
|
|
71
|
+
<h3 class="font-semibold text-green-400">Documentation</h3>
|
|
72
|
+
<p class="text-sm text-slate-400">Learn more about Bueno</p>
|
|
73
|
+
</a>
|
|
74
|
+
<a
|
|
75
|
+
href="https://github.com/buenojs/bueno"
|
|
76
|
+
class="p-4 bg-slate-800/50 rounded-lg border border-slate-700 hover:border-green-500 transition-colors"
|
|
77
|
+
>
|
|
78
|
+
<h3 class="font-semibold text-green-400">GitHub</h3>
|
|
79
|
+
<p class="text-sm text-slate-400">View the source code</p>
|
|
80
|
+
</a>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</main>
|
|
85
|
+
</template>
|
|
86
|
+
`,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
path: "client/src/styles/globals.css",
|
|
90
|
+
content: `@tailwind base;
|
|
91
|
+
@tailwind components;
|
|
92
|
+
@tailwind utilities;
|
|
93
|
+
|
|
94
|
+
:root {
|
|
95
|
+
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
96
|
+
line-height: 1.5;
|
|
97
|
+
font-weight: 400;
|
|
98
|
+
font-synthesis: none;
|
|
99
|
+
text-rendering: optimizeLegibility;
|
|
100
|
+
-webkit-font-smoothing: antialiased;
|
|
101
|
+
-moz-osx-font-smoothing: grayscale;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
body {
|
|
105
|
+
margin: 0;
|
|
106
|
+
min-width: 320px;
|
|
107
|
+
min-height: 100vh;
|
|
108
|
+
}
|
|
109
|
+
`,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
directories: [
|
|
113
|
+
"client/src/components",
|
|
114
|
+
"client/src/styles",
|
|
115
|
+
"client/public",
|
|
116
|
+
],
|
|
117
|
+
dependencies: {
|
|
118
|
+
vue: "^3.4.0",
|
|
119
|
+
},
|
|
120
|
+
devDependencies: {
|
|
121
|
+
tailwindcss: "^3.4.0",
|
|
122
|
+
postcss: "^8.4.0",
|
|
123
|
+
autoprefixer: "^10.4.0",
|
|
124
|
+
},
|
|
125
|
+
scripts: {
|
|
126
|
+
"dev:client": "bun run --watch client/index.html",
|
|
127
|
+
"build:client": "bun build ./client/src/main.ts --outdir ./dist/client",
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|