vorzelajs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +188 -0
  2. package/bin/vorzelajs.mjs +2 -0
  3. package/dist/analytics.d.ts +132 -0
  4. package/dist/analytics.d.ts.map +1 -0
  5. package/dist/analytics.js +690 -0
  6. package/dist/cli/build.d.ts +2 -0
  7. package/dist/cli/build.d.ts.map +1 -0
  8. package/dist/cli/build.js +22 -0
  9. package/dist/cli/dev.d.ts +2 -0
  10. package/dist/cli/dev.d.ts.map +1 -0
  11. package/dist/cli/dev.js +93 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +29 -0
  15. package/dist/cli/serve.d.ts +2 -0
  16. package/dist/cli/serve.d.ts.map +1 -0
  17. package/dist/cli/serve.js +43 -0
  18. package/dist/cookie.d.ts +33 -0
  19. package/dist/cookie.d.ts.map +1 -0
  20. package/dist/cookie.js +198 -0
  21. package/dist/debug/error-stack.d.ts +14 -0
  22. package/dist/debug/error-stack.d.ts.map +1 -0
  23. package/dist/debug/error-stack.js +52 -0
  24. package/dist/internal/document.d.ts +12 -0
  25. package/dist/internal/document.d.ts.map +1 -0
  26. package/dist/internal/document.jsx +56 -0
  27. package/dist/internal/entry-client.d.ts +2 -0
  28. package/dist/internal/entry-client.d.ts.map +1 -0
  29. package/dist/internal/entry-client.jsx +8 -0
  30. package/dist/internal/entry-server.d.ts +14 -0
  31. package/dist/internal/entry-server.d.ts.map +1 -0
  32. package/dist/internal/entry-server.jsx +71 -0
  33. package/dist/runtime/create-route.d.ts +8 -0
  34. package/dist/runtime/create-route.d.ts.map +1 -0
  35. package/dist/runtime/create-route.js +18 -0
  36. package/dist/runtime/head.d.ts +10 -0
  37. package/dist/runtime/head.d.ts.map +1 -0
  38. package/dist/runtime/head.js +111 -0
  39. package/dist/runtime/index.d.ts +6 -0
  40. package/dist/runtime/index.d.ts.map +1 -0
  41. package/dist/runtime/index.jsx +4 -0
  42. package/dist/runtime/navigation.d.ts +36 -0
  43. package/dist/runtime/navigation.d.ts.map +1 -0
  44. package/dist/runtime/navigation.js +70 -0
  45. package/dist/runtime/path.d.ts +11 -0
  46. package/dist/runtime/path.d.ts.map +1 -0
  47. package/dist/runtime/path.js +80 -0
  48. package/dist/runtime/resolve.d.ts +11 -0
  49. package/dist/runtime/resolve.d.ts.map +1 -0
  50. package/dist/runtime/resolve.js +449 -0
  51. package/dist/runtime/runtime.d.ts +40 -0
  52. package/dist/runtime/runtime.d.ts.map +1 -0
  53. package/dist/runtime/runtime.jsx +779 -0
  54. package/dist/runtime/search.d.ts +23 -0
  55. package/dist/runtime/search.d.ts.map +1 -0
  56. package/dist/runtime/search.js +178 -0
  57. package/dist/runtime/server.d.ts +10 -0
  58. package/dist/runtime/server.d.ts.map +1 -0
  59. package/dist/runtime/server.js +5 -0
  60. package/dist/runtime/types.d.ts +248 -0
  61. package/dist/runtime/types.d.ts.map +1 -0
  62. package/dist/runtime/types.js +1 -0
  63. package/dist/seo.d.ts +16 -0
  64. package/dist/seo.d.ts.map +1 -0
  65. package/dist/seo.js +69 -0
  66. package/dist/server/index.d.ts +53 -0
  67. package/dist/server/index.d.ts.map +1 -0
  68. package/dist/server/index.js +268 -0
  69. package/dist/session.d.ts +23 -0
  70. package/dist/session.d.ts.map +1 -0
  71. package/dist/session.js +58 -0
  72. package/dist/vite/index.d.ts +13 -0
  73. package/dist/vite/index.d.ts.map +1 -0
  74. package/dist/vite/index.js +174 -0
  75. package/dist/vite/routes-plugin.d.ts +4 -0
  76. package/dist/vite/routes-plugin.d.ts.map +1 -0
  77. package/dist/vite/routes-plugin.js +345 -0
  78. package/dist/vite/server-only.d.ts +3 -0
  79. package/dist/vite/server-only.d.ts.map +1 -0
  80. package/dist/vite/server-only.js +342 -0
  81. package/package.json +76 -0
  82. package/templates/bare/README.md +22 -0
  83. package/templates/bare/src/components/counter-card.tsx +19 -0
  84. package/templates/bare/src/routes/__root.tsx +24 -0
  85. package/templates/bare/src/routes/index.tsx +36 -0
  86. package/templates/base/gitignore +4 -0
  87. package/templates/base/public/favicon.svg +5 -0
  88. package/templates/base/tsconfig.json +18 -0
  89. package/templates/modern/README.md +28 -0
  90. package/templates/modern/src/components/counter-card.tsx +19 -0
  91. package/templates/modern/src/routes/__root.tsx +42 -0
  92. package/templates/modern/src/routes/about.tsx +55 -0
  93. package/templates/modern/src/routes/index.tsx +51 -0
  94. package/templates/styling/css/styles.css +269 -0
  95. package/templates/styling/css-modules/styles.css +269 -0
  96. package/templates/styling/tailwind/styles.css +271 -0
package/README.md ADDED
@@ -0,0 +1,188 @@
1
+ # VorzelaJs
2
+
3
+ Batteries-included SolidJS framework with file-based routing, streamed SSR, server-only boundaries, and zero config.
4
+
5
+ ## Create a New App
6
+
7
+ ```bash
8
+ npm create vorzelajs@latest my-app
9
+ cd my-app
10
+ npm install
11
+ npm run dev
12
+ ```
13
+
14
+ You'll be prompted for:
15
+
16
+ - **Template** — `modern` (multi-page with nav) or `bare` (single landing page)
17
+ - **Styling** — `tailwindcss`, `css-modules`, or `css`
18
+
19
+ ## Manual Setup
20
+
21
+ ```bash
22
+ mkdir my-app && cd my-app
23
+ npm init -y
24
+ npm install vorzelajs solid-js
25
+ ```
26
+
27
+ Add scripts to `package.json`:
28
+
29
+ ```json
30
+ {
31
+ "scripts": {
32
+ "dev": "vorzelajs dev",
33
+ "build": "vorzelajs build",
34
+ "serve": "NODE_ENV=production vorzelajs serve"
35
+ }
36
+ }
37
+ ```
38
+
39
+ Create your first route:
40
+
41
+ ```tsx
42
+ // src/routes/__root.tsx
43
+ import { createRootRoute, Outlet } from 'vorzelajs'
44
+
45
+ export const Route = createRootRoute({
46
+ component: () => <Outlet />,
47
+ })
48
+ ```
49
+
50
+ ```tsx
51
+ // src/routes/index.tsx
52
+ import { createFileRoute } from 'vorzelajs'
53
+
54
+ export const Route = createFileRoute('/')({
55
+ component: () => <h1>Hello VorzelaJs</h1>,
56
+ head: () => ({ title: 'Home' }),
57
+ })
58
+ ```
59
+
60
+ Add a stylesheet at `src/styles.css` and run `npm run dev`.
61
+
62
+ ## Project Structure
63
+
64
+ ```
65
+ src/
66
+ ├── routes/ # File-based routes (pages and layouts)
67
+ ├── components/ # Reusable UI components
68
+ ├── lib/ # Helpers, API clients, utilities
69
+ ├── styles.css # Global styles
70
+ ```
71
+
72
+ You own `src/`. The framework handles Vite config, server, SSR entry, and document shell.
73
+
74
+ ## Features
75
+
76
+ - **File-based routing** — Drop a file in `src/routes/` and it becomes a route with automatic code splitting
77
+ - **Streamed SSR** — Server-rendered HTML streams to the browser with selective hydration per route branch
78
+ - **Server-only boundaries** — `.server.ts` files and route `loader`/`beforeLoad` are stripped from the client bundle
79
+ - **Payload navigation** — Client navigations fetch JSON payloads instead of full page reloads
80
+ - **Head management** — Per-route `<title>`, `<meta>`, `<link>`, canonical URLs, and JSON-LD
81
+ - **Cookie & session helpers** — `createCookie()`, `createCookieSessionStorage()` via `vorzelajs/server`
82
+ - **Analytics** — First-party analytics with `defineAnalytics()` and `createAnalyticsClient()`
83
+ - **SEO** — Robots.txt, sitemap.xml, and structured data built in
84
+ - **Security headers** — CSP with nonces, HSTS, X-Frame-Options, and more out of the box
85
+ - **Zero config** — No `vite.config.ts` or `server.ts` to maintain
86
+
87
+ ## Routes
88
+
89
+ ### Basic Route
90
+
91
+ ```tsx
92
+ import { createFileRoute } from 'vorzelajs'
93
+
94
+ export const Route = createFileRoute('/about')({
95
+ component: AboutPage,
96
+ head: () => ({
97
+ title: 'About',
98
+ meta: [{ name: 'description', content: 'About us' }],
99
+ }),
100
+ })
101
+
102
+ function AboutPage() {
103
+ return <h1>About</h1>
104
+ }
105
+ ```
106
+
107
+ ### Route with Server Loader
108
+
109
+ ```tsx
110
+ import { createFileRoute } from 'vorzelajs'
111
+ import { db } from '~/lib/db.server'
112
+
113
+ export const Route = createFileRoute('/posts')({
114
+ loader: async () => {
115
+ const posts = await db.posts.findMany()
116
+ return { posts }
117
+ },
118
+ component: PostsPage,
119
+ })
120
+
121
+ function PostsPage() {
122
+ const { posts } = Route.useLoaderData()
123
+ return <ul>{posts.map((p) => <li>{p.title}</li>)}</ul>
124
+ }
125
+ ```
126
+
127
+ ### Dynamic Routes
128
+
129
+ ```
130
+ src/routes/posts/$postId.tsx → /posts/:postId
131
+ src/routes/users/$userId.tsx → /users/:userId
132
+ ```
133
+
134
+ Access params with `Route.useParams()`.
135
+
136
+ ### Pathless Layouts
137
+
138
+ Prefix with `_` to create layout wrappers without adding a URL segment:
139
+
140
+ ```
141
+ src/routes/_auth.tsx → layout (no URL segment)
142
+ src/routes/_auth/login.tsx → /login
143
+ src/routes/_auth/register.tsx → /register
144
+ ```
145
+
146
+ ## Server Exports
147
+
148
+ Import server helpers from `vorzelajs/server`:
149
+
150
+ ```tsx
151
+ import { createCookie, defineAnalytics, defineRobotsConfig } from 'vorzelajs/server'
152
+ ```
153
+
154
+ ## Styling
155
+
156
+ The framework detects your styling choice automatically:
157
+
158
+ - **Tailwind CSS** — Install `tailwindcss` + `@tailwindcss/vite` and add `@import "tailwindcss"` to `styles.css`
159
+ - **CSS Modules** — Create `*.module.css` files (Vite handles them natively)
160
+ - **Plain CSS** — Write global CSS in `styles.css`
161
+
162
+ Bring your own fonts. The default font stack is system fonts.
163
+
164
+ ## Commands
165
+
166
+ | Command | Description |
167
+ |---------|-------------|
168
+ | `vorzelajs dev` | Start dev server with HMR |
169
+ | `vorzelajs build` | Build client and server for production |
170
+ | `vorzelajs serve` | Serve the production build |
171
+
172
+ ## Vite Escape Hatch
173
+
174
+ For advanced use cases, import the plugin directly:
175
+
176
+ ```ts
177
+ // vite.config.ts
178
+ import { vorzelaPlugin } from 'vorzelajs/vite'
179
+ import { defineConfig } from 'vite'
180
+
181
+ export default defineConfig({
182
+ plugins: [vorzelaPlugin()],
183
+ })
184
+ ```
185
+
186
+ ## License
187
+
188
+ MIT
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/cli/index.js')
@@ -0,0 +1,132 @@
1
+ import type { CookieOptions } from './cookie';
2
+ type MaybePromise<T> = T | Promise<T>;
3
+ export declare const DEFAULT_ANALYTICS_ENDPOINT = "/__vorzela/analytics";
4
+ export type AnalyticsEventType = 'event' | 'pageview';
5
+ export type AnalyticsTrafficChannel = 'direct' | 'email' | 'internal' | 'organic-search' | 'organic-social' | 'paid-search' | 'paid-social' | 'referral' | 'unknown';
6
+ export interface AnalyticsTouchPoint {
7
+ campaign: string | null;
8
+ capturedAt: string;
9
+ channel: AnalyticsTrafficChannel;
10
+ clickIds: Record<string, string>;
11
+ content: string | null;
12
+ entryUrl: string;
13
+ isPaid: boolean;
14
+ medium: string | null;
15
+ platform: string | null;
16
+ referrer: string | null;
17
+ referrerHost: string | null;
18
+ source: string | null;
19
+ term: string | null;
20
+ }
21
+ export interface AnalyticsClientContext {
22
+ language?: string | null;
23
+ screen?: {
24
+ height: number;
25
+ width: number;
26
+ } | null;
27
+ sessionId?: string | null;
28
+ timezone?: string | null;
29
+ visitorId?: string | null;
30
+ }
31
+ export interface AnalyticsClientPayload {
32
+ context?: AnalyticsClientContext;
33
+ firstTouch?: AnalyticsTouchPoint | null;
34
+ lastTouch?: AnalyticsTouchPoint | null;
35
+ name?: string;
36
+ pathname?: string;
37
+ properties?: Record<string, unknown>;
38
+ referrer?: string | null;
39
+ search?: string;
40
+ timestamp?: string;
41
+ title?: string | null;
42
+ type?: AnalyticsEventType;
43
+ url?: string;
44
+ }
45
+ export interface AnalyticsUserAgentSummary {
46
+ browser: string | null;
47
+ browserVersion: string | null;
48
+ deviceType: 'bot' | 'desktop' | 'mobile' | 'tablet' | 'unknown';
49
+ isBot: boolean;
50
+ os: string | null;
51
+ platformHint: string | null;
52
+ raw: string | null;
53
+ }
54
+ export interface AnalyticsGeoSummary {
55
+ city: string | null;
56
+ country: string | null;
57
+ region: string | null;
58
+ }
59
+ export interface AnalyticsEvent {
60
+ attribution: AnalyticsTouchPoint;
61
+ client: {
62
+ language: string | null;
63
+ screen: AnalyticsClientContext['screen'];
64
+ timezone: string | null;
65
+ };
66
+ firstTouch: AnalyticsTouchPoint | null;
67
+ id: string;
68
+ lastTouch: AnalyticsTouchPoint | null;
69
+ name: string;
70
+ occurredAt: string;
71
+ page: {
72
+ pathname: string | null;
73
+ referrer: string | null;
74
+ search: string;
75
+ title: string | null;
76
+ url: string | null;
77
+ };
78
+ properties: Record<string, unknown>;
79
+ receivedAt: string;
80
+ request: {
81
+ host: string | null;
82
+ origin: string | null;
83
+ referer: string | null;
84
+ secFetchSite: string | null;
85
+ };
86
+ sessionId: string | null;
87
+ type: AnalyticsEventType;
88
+ userAgent: AnalyticsUserAgentSummary;
89
+ visitorId: string;
90
+ geo: AnalyticsGeoSummary | null;
91
+ }
92
+ export interface AnalyticsDefinition {
93
+ allowedOrigins?: string[] | ((origin: string | null, request: Request) => boolean);
94
+ onEvent?: (event: AnalyticsEvent, context: {
95
+ payload: AnalyticsClientPayload;
96
+ request: Request;
97
+ }) => MaybePromise<void>;
98
+ visitorCookie?: false | {
99
+ name?: string;
100
+ options?: CookieOptions;
101
+ };
102
+ }
103
+ export interface AnalyticsClientOptions {
104
+ credentials?: RequestCredentials;
105
+ endpoint?: string;
106
+ firstTouchKey?: string;
107
+ includeLanguage?: boolean;
108
+ includeScreen?: boolean;
109
+ includeTimezone?: boolean;
110
+ lastTouchKey?: string;
111
+ sessionKey?: string;
112
+ storageKey?: string;
113
+ transport?: 'auto' | 'beacon' | 'fetch';
114
+ }
115
+ export interface AnalyticsClient {
116
+ event: (name: string, properties?: Record<string, unknown>, payload?: Omit<AnalyticsClientPayload, 'name' | 'properties' | 'type'>) => Promise<boolean>;
117
+ pageview: (payload?: Omit<AnalyticsClientPayload, 'name' | 'type'>) => Promise<boolean>;
118
+ startAutoPageviews: (options?: {
119
+ trackInitialPageview?: boolean;
120
+ }) => () => void;
121
+ track: (payload: AnalyticsClientPayload) => Promise<boolean>;
122
+ }
123
+ export declare function classifyAnalyticsTraffic(input: {
124
+ landingUrl?: string | URL | null;
125
+ referrer?: string | null;
126
+ }): AnalyticsTouchPoint;
127
+ export declare function extractAnalyticsTouchPoint(landingUrl: string | URL, referrer?: string | null): AnalyticsTouchPoint;
128
+ export declare function defineAnalytics(options: AnalyticsDefinition): AnalyticsDefinition;
129
+ export declare function handleAnalyticsRequest(request: Request, analytics: AnalyticsDefinition): Promise<Response>;
130
+ export declare function createAnalyticsClient(options?: AnalyticsClientOptions): AnalyticsClient;
131
+ export {};
132
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}