@ossido-labs/ossido 0.1.0 → 0.1.2
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 +71 -16
- package/dist/esm/build/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,28 +1,83 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<a href="https://ossido.dev">
|
|
3
|
+
<img src="https://raw.githubusercontent.com/ossido-labs/ossido/main/assets/header.png" alt="Ossido" width="100%">
|
|
4
|
+
</a>
|
|
2
5
|
|
|
3
|
-
The
|
|
4
|
-
full-stack framework.
|
|
6
|
+
<p><strong>The full-stack React framework powered by a Rust backend — built for usability and performance.</strong></p>
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
<p>
|
|
9
|
+
<a href="https://crates.io/crates/ossido_cli"><img src="https://img.shields.io/crates/v/ossido_cli?logo=rust&label=crates.io&color=E43717" alt="crates.io version"></a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/@ossido-labs/ossido"><img src="https://img.shields.io/npm/v/@ossido-labs/ossido?logo=npm&label=npm&color=CB3837" alt="npm version"></a>
|
|
11
|
+
<a href="https://github.com/ossido-labs/ossido/actions/workflows/rust-ci.yml"><img src="https://github.com/ossido-labs/ossido/actions/workflows/rust-ci.yml/badge.svg" alt="Rust CI"></a>
|
|
12
|
+
<a href="https://github.com/ossido-labs/ossido/actions/workflows/typescript-ci.yml"><img src="https://github.com/ossido-labs/ossido/actions/workflows/typescript-ci.yml/badge.svg" alt="TypeScript CI"></a>
|
|
13
|
+
<a href="./LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
14
|
+
<a href="https://discord.com/invite/3ddKV4e83M"><img src="https://img.shields.io/discord/1536194582889627658?style=flat" alt="Discord"></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p>
|
|
18
|
+
<a href="https://ossido.dev">Documentation</a> ·
|
|
19
|
+
<a href="https://discord.com/invite/3ddKV4e83M">Discord</a> ·
|
|
20
|
+
<a href="https://ossido.dev/documentation/contributing">Contributing</a>
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
Ossido is a full-stack web framework for building React applications with a Rust backend. If you have
|
|
27
|
+
experience with [Next.js](https://nextjs.org/), you will feel right at home.
|
|
28
|
+
|
|
29
|
+
> ### **🚨 This project is still in early development. Please report any issues you find. 🚨**
|
|
30
|
+
|
|
31
|
+
> **Ossido is the successor to [Tuono](https://github.com/tuono-labs/tuono).** It began as a fork of
|
|
32
|
+
> the (now unmaintained) Tuono framework and carries its development forward.
|
|
33
|
+
>
|
|
34
|
+
> The name is a nod to its origin: _Tuono_ is Italian for "thunder", and _Ossido_ is Italian for
|
|
35
|
+
> "oxide" — a rust-themed wink to the Rust core that powers the backend.
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- 🟦 **Native TypeScript** — first-class TypeScript support out of the box
|
|
40
|
+
- 🌐 **File-based routing** — Next.js-like routing conventions
|
|
41
|
+
- 🍭 **CSS/SCSS modules** — scoped styling with zero configuration
|
|
42
|
+
- 🧬 **Server-side rendering** — fast, SEO-friendly SSR
|
|
43
|
+
- 🔥 **Hot module reload** — instant feedback during development
|
|
44
|
+
- ⚡ **Rust backend** — a high-performance core built on Rust
|
|
45
|
+
|
|
46
|
+
## Installation
|
|
47
|
+
|
|
48
|
+
Available on macOS, Linux and Windows.
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
cargo install ossido_cli
|
|
52
|
+
```
|
|
11
53
|
|
|
12
54
|
## Getting started
|
|
13
55
|
|
|
14
|
-
Create a new project
|
|
56
|
+
Create a new project:
|
|
15
57
|
|
|
16
58
|
```sh
|
|
17
59
|
ossido new [PROJECT_NAME]
|
|
18
60
|
```
|
|
19
61
|
|
|
20
|
-
|
|
62
|
+
> Pass the `--template` (or `-t`) flag to start from an existing
|
|
63
|
+
> [template](https://github.com/ossido-labs/ossido/tree/main/examples).
|
|
64
|
+
|
|
65
|
+
Install the dependencies with your favourite JavaScript package manager (e.g. `npm install`), then
|
|
66
|
+
start the development server:
|
|
67
|
+
|
|
68
|
+
```sh
|
|
69
|
+
ossido dev
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Documentation
|
|
73
|
+
|
|
74
|
+
Full documentation is available at [ossido.dev](https://ossido.dev/).
|
|
75
|
+
|
|
76
|
+
## Contributing
|
|
77
|
+
|
|
78
|
+
Contributions, ideas and suggestions are welcome and encouraged. See the
|
|
79
|
+
[Contributing guide](https://ossido.dev/documentation/contributing) to get started.
|
|
21
80
|
|
|
22
|
-
|
|
23
|
-
- `ossido/config` — `OssidoConfig` type and config helpers
|
|
24
|
-
- `ossido/client` / `ossido/hydration` — client bootstrap + hydration
|
|
25
|
-
- `ossido/ssr` — server-side rendering entry
|
|
26
|
-
- `ossido/build` / `ossido/build-client` — build pipeline
|
|
81
|
+
## License
|
|
27
82
|
|
|
28
|
-
|
|
83
|
+
Licensed under the [MIT License](./LICENSE.md).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/build/index.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { resolve, join } from 'node:path';\nimport { readdirSync, readFileSync } from 'node:fs';\nimport { gzipSync } from 'node:zlib';\n\nimport type { InlineConfig, Plugin } from 'vite';\nimport { build, createServer, mergeConfig } from 'vite';\nimport react from '@vitejs/plugin-react-swc';\nimport inject from '@rollup/plugin-inject';\nimport { OssidoReactPlugin, routeGenerator } from '@ossido-labs/ossido-react-vite-plugin';\nimport { ErrorOverlayVitePlugin } from '@ossido-labs/ossido-ui/vite-plugin';\n\nimport type { OssidoConfig } from '../config';\n\nimport type { InternalOssidoConfig } from './types';\nimport { blockingAsync, listFilesRecursive } from './utils';\nimport { createJsonConfig, loadConfig } from './config';\nimport { ENV_PREFIX } from './constants';\nimport { createOssidoViteLogger } from './logger';\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Absolute entry paths for the generated `.ossido` scaffold.\n *\n * The vite config sets `root: '.ossido'`. Vite's `build()` resolves a relative\n * `rollupOptions.input` against the CWD, but the dev server's dependency\n * scanner (rolldown, vite 8+) resolves it against `root` — so a path like\n * `./.ossido/client-main.tsx` double-nests to `.ossido/.ossido/...` and fails to\n * resolve. Absolute paths are unambiguous across both code paths.\n */\nconst CLIENT_MAIN_ENTRY = resolve('.ossido/client-main.tsx');\nconst SERVER_MAIN_ENTRY = resolve('.ossido/server-main.tsx');\n\n/**\n * `@rollup/plugin-inject` injects these imports into every module that\n * references the globals below — including third-party files deep in\n * `node_modules` (e.g. `react-dom/server`). Vite 8's bundler (rolldown)\n * resolves an injected bare specifier relative to the *importing* file, so\n * `'@ossido-labs/ossido/ssr'` fails to resolve from within `react-dom`. Resolving to\n * absolute paths up-front makes the injected imports resolvable from anywhere\n * (and is a no-op for rollup on Vite <= 7).\n */\nconst SSR_POLYFILLS_MODULE = require.resolve('@ossido-labs/ossido/ssr');\nconst WEB_STREAMS_POLYFILL_MODULE = require.resolve('web-streams-polyfill');\n\nconst VITE_SSR_PLUGINS: Array<Plugin> = [\n {\n enforce: 'post',\n // `@rollup/plugin-inject` is typed against an older rollup than the one\n // bundled with vite, so its `Plugin` type needs widening to vite's.\n ...(inject({\n ReadableStream: [WEB_STREAMS_POLYFILL_MODULE, 'ReadableStream'],\n\n /**\n * Added to support `react@19`\n * @see https://github.com/tuono-labs/tuono/issues/218\n */\n MessageChannel: [SSR_POLYFILLS_MODULE, 'MessageChannelPolyfill'],\n MessageEvent: [SSR_POLYFILLS_MODULE, 'MessageEventPolyfill'],\n Event: [SSR_POLYFILLS_MODULE, 'EventPolyfill'],\n }) as unknown as Plugin),\n },\n];\n\n/**\n * From a resolved {@link InternalOssidoConfig} return a `vite` \"mergeable\"\n * {@link InlineConfig} including all default ossido related options\n */\nfunction createBaseViteConfigFromOssidoConfig(\n ossidoConfig: InternalOssidoConfig,\n): InlineConfig {\n /**\n * @warning Keep in sync with {@link LazyLoadingPlugin} tests:\n * packages/lazy-fn-vite-plugin/tests/transpileSource.test.ts\n */\n const pluginFilesInclude = /\\.(jsx|js|mdx|md|tsx|ts)$/;\n\n const viteBaseConfig: InlineConfig = {\n root: '.ossido',\n // `'error'` (not `'silent'`) so build failures surface instead of\n // degrading to a silent client-side fallback with hydration mismatches.\n logLevel: 'error',\n // Tag vite's output `[FE]` so it matches the rest of the Ossido logs. The\n // level is passed explicitly so the logger honours it (see the logger docs)\n // — this keeps vite's info/benign-warning noise out at `'error'`.\n customLogger: createOssidoViteLogger('error'),\n publicDir: '../public',\n cacheDir: 'cache',\n envDir: '../',\n envPrefix: ENV_PREFIX,\n\n define: {\n // Baked into the client bundle for `ossido build --static` (the CLI sets\n // `OSSIDO_STATIC` for the react build). The router reads it to fetch the\n // pre-rendered `.json` data files instead of the extensionless\n // `/__ossido/data{path}` route, which has no server in a static export.\n __OSSIDO_STATIC__: JSON.stringify(process.env.OSSIDO_STATIC === 'true'),\n // Baked into both bundles so `<CriticalCss>` skips rendering its dev\n // stylesheet links when `dev.criticalCss: false` — the vite endpoint is\n // disabled in that case, so the links would otherwise be dead requests\n // that block rendering.\n __OSSIDO_CRITICAL_CSS__: JSON.stringify(\n ossidoConfig.dev?.criticalCss ?? true,\n ),\n // Baked into both bundles so the router wraps client navigations in\n // `document.startViewTransition` only when the app opted in via\n // `viewTransitions: true`. Off by default.\n __OSSIDO_VIEW_TRANSITIONS__: JSON.stringify(\n ossidoConfig.viewTransitions ?? false,\n ),\n },\n\n resolve: {\n alias: ossidoConfig.vite?.alias ?? {},\n },\n\n css: ossidoConfig.vite?.css,\n\n optimizeDeps: ossidoConfig.vite?.optimizeDeps,\n\n plugins: [\n ...(ossidoConfig.vite?.plugins ?? []),\n\n /**\n * even if `include` is not a valid option for this\n * plugin, we have to use it.\n * If not specified, when running `ossido dev`, the mdx\n * won't be compiled include any style in the page and it might\n * seem broken.\n */\n // @ts-expect-error see above comment\n react({ include: pluginFilesInclude }),\n\n OssidoReactPlugin({ criticalCss: ossidoConfig.dev?.criticalCss ?? true }),\n ],\n };\n\n // seems redundant but it's useful to log the value when debugging, until we have a logging infrastructure.\n return viteBaseConfig;\n}\n\nconst developmentSSRBundle = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n await build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n // A dedicated cache dir, separate from the client dev server's\n // (`.ossido/cache`). Both run concurrently in dev, and this SSR bundle\n // is rebuilt on every `.tsx`/`.mdx`/CSS-module edit — sharing the cache\n // makes each rebuild invalidate the dev server's optimized-deps cache,\n // which triggers a spurious full-page reload (and data refetch) right\n // after the in-place Fast Refresh has already applied.\n cacheDir: 'cache-ssr',\n plugins: VITE_SSR_PLUGINS,\n build: {\n ssr: true,\n minify: false,\n outDir: 'server',\n emptyOutDir: true,\n rollupOptions: {\n input: SERVER_MAIN_ENTRY,\n output: {\n entryFileNames: 'dev-server.js',\n // ESM (not IIFE) so the SSR entry can use top-level `await`; the\n // Rust runtime compiles it as a V8 module (`Ssr::from_module`).\n // The build stays a single `dev-server.js` — the only file the\n // runtime reads — because the SSR build disables code splitting.\n format: 'es',\n },\n },\n },\n ssr: {\n target: 'webworker',\n noExternal: true,\n },\n },\n ),\n );\n });\n};\n\nconst developmentCSRWatch = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n\n const server = await createServer(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n // Entry point for the development vite proxy\n base: '/vite-server/',\n plugins: [ErrorOverlayVitePlugin],\n\n server: {\n host: config.server.host,\n port: config.server.port + 1,\n strictPort: true,\n },\n build: {\n manifest: true,\n emptyOutDir: true,\n rollupOptions: {\n input: CLIENT_MAIN_ENTRY,\n },\n },\n },\n ),\n );\n await server.listen();\n });\n};\n\nconst KB = 1024;\n\nconst formatKb = (bytes: number): string => `${(bytes / KB).toFixed(1)} kB`;\n\n/**\n * Print a compact per-asset size summary (raw + gzip) for the prod build, so\n * size regressions are visible on every `ossido build` without extra tooling.\n * Reads the emitted files directly — works regardless of vite's log level.\n */\nconst printBundleSummary = (): void => {\n interface AssetRow {\n label: string;\n size: number;\n gzip: number;\n }\n\n const collectDir = (dir: string, prefix: string): Array<AssetRow> => {\n try {\n return readdirSync(dir, { recursive: true, encoding: 'utf-8' })\n .filter((file) => /\\.(js|css)$/.test(file))\n .map((file) => {\n const content = readFileSync(join(dir, file));\n return {\n label: `${prefix}/${file}`,\n size: content.length,\n gzip: gzipSync(content).length,\n };\n });\n } catch {\n return [];\n }\n };\n\n const assets = [\n ...collectDir(resolve('out/client'), 'client'),\n ...collectDir(resolve('out/server'), 'server'),\n ].sort((a, b) => b.size - a.size);\n\n if (!assets.length) return;\n\n const labelWidth = Math.max(...assets.map((asset) => asset.label.length));\n console.log('');\n for (const asset of assets) {\n console.log(\n ` ${asset.label.padEnd(labelWidth)} ${formatKb(asset.size).padStart(10)} │ gzip: ${formatKb(asset.gzip).padStart(9)}`,\n );\n }\n const total = assets.reduce((sum, asset) => sum + asset.size, 0);\n const totalGzip = assets.reduce((sum, asset) => sum + asset.gzip, 0);\n console.log(\n ` ${'total'.padEnd(labelWidth)} ${formatKb(total).padStart(10)} │ gzip: ${formatKb(totalGzip).padStart(9)}`,\n );\n console.log('');\n};\n\nconst buildProd = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n\n // Generate the route tree once up front. Both builds' plugin instances\n // re-run the generator on `configResolved`, but it skips the write when\n // the content is unchanged — pre-generating removes the concurrent-write\n // hazard so the two builds (independent outputs) can run in parallel.\n await routeGenerator();\n\n await Promise.all([\n build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n build: {\n manifest: true,\n emptyOutDir: true,\n outDir: '../out/client',\n rollupOptions: {\n input: CLIENT_MAIN_ENTRY,\n },\n },\n },\n ),\n ),\n build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n plugins: VITE_SSR_PLUGINS,\n build: {\n ssr: true,\n minify: true,\n outDir: '../out/server',\n emptyOutDir: true,\n rollupOptions: {\n input: SERVER_MAIN_ENTRY,\n output: {\n entryFileNames: 'prod-server.js',\n // ESM (not IIFE) so the SSR entry can use top-level `await`;\n // the Rust runtime compiles it as a V8 module\n // (`Ssr::from_module`). The build stays a single\n // `prod-server.js` — the only file the runtime reads —\n // because the SSR build disables code splitting.\n format: 'es',\n },\n },\n },\n ssr: {\n target: 'webworker',\n noExternal: true,\n },\n },\n ),\n ),\n ]);\n\n printBundleSummary();\n });\n};\n\nconst buildConfig = (): void => {\n blockingAsync(async (): Promise<void> => {\n await build({\n root: '.ossido',\n // `'error'` (not `'silent'`) so config build failures are visible.\n logLevel: 'error',\n cacheDir: 'cache',\n envDir: '../',\n build: {\n ssr: true,\n outDir: 'config',\n emptyOutDir: true,\n rollupOptions: {\n input: './ossido.config.ts',\n output: {\n entryFileNames: 'config.mjs',\n },\n },\n },\n });\n\n const config = await loadConfig();\n await createJsonConfig(config);\n });\n};\n\n/**\n * Run a user-defined build lifecycle hook (`prebuild` / `postbuild`) from\n * `ossido.config.ts`. Invoked by the Rust CLI (`ossido-run-build-hook <name>`)\n * at the matching point of `ossido build`. No-ops when the hook is undefined.\n *\n * The output/public dirs and mode mirror what the build produces: static builds\n * deploy `out/static`, server builds `out`. `postbuild` gets the emitted-file\n * manifest; `prebuild` runs before anything is emitted, so its manifest is empty.\n */\nconst runBuildHook = (name: 'prebuild' | 'postbuild'): void =>\n blockingAsync(async () => {\n const config = await loadConfig();\n const hook = config.build?.[name];\n if (typeof hook !== 'function') return;\n\n const mode = process.env.OSSIDO_STATIC === 'true' ? 'static' : 'server';\n const outputDirectory = resolve(mode === 'static' ? 'out/static' : 'out');\n const publicDirectory = resolve('public');\n const manifest =\n name === 'postbuild' ? listFilesRecursive(outputDirectory) : [];\n\n // `loadConfig` returns the resolved `InternalOssidoConfig` (a structural\n // superset of the public `OssidoConfig` the hook context exposes).\n await hook({\n mode,\n outputDirectory,\n publicDirectory,\n manifest,\n config: config as OssidoConfig,\n });\n });\n\nexport {\n buildProd,\n buildConfig,\n developmentCSRWatch,\n developmentSSRBundle,\n runBuildHook,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/build/index.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { resolve, join } from 'node:path';\nimport { readdirSync, readFileSync } from 'node:fs';\nimport { gzipSync } from 'node:zlib';\n\nimport type { InlineConfig, Plugin } from 'vite';\nimport { build, createServer, mergeConfig } from 'vite';\nimport react from '@vitejs/plugin-react-swc';\nimport inject from '@rollup/plugin-inject';\nimport {\n OssidoReactPlugin,\n routeGenerator,\n} from '@ossido-labs/ossido-react-vite-plugin';\nimport { ErrorOverlayVitePlugin } from '@ossido-labs/ossido-ui/vite-plugin';\n\nimport type { OssidoConfig } from '../config';\n\nimport type { InternalOssidoConfig } from './types';\nimport { blockingAsync, listFilesRecursive } from './utils';\nimport { createJsonConfig, loadConfig } from './config';\nimport { ENV_PREFIX } from './constants';\nimport { createOssidoViteLogger } from './logger';\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Absolute entry paths for the generated `.ossido` scaffold.\n *\n * The vite config sets `root: '.ossido'`. Vite's `build()` resolves a relative\n * `rollupOptions.input` against the CWD, but the dev server's dependency\n * scanner (rolldown, vite 8+) resolves it against `root` — so a path like\n * `./.ossido/client-main.tsx` double-nests to `.ossido/.ossido/...` and fails to\n * resolve. Absolute paths are unambiguous across both code paths.\n */\nconst CLIENT_MAIN_ENTRY = resolve('.ossido/client-main.tsx');\nconst SERVER_MAIN_ENTRY = resolve('.ossido/server-main.tsx');\n\n/**\n * `@rollup/plugin-inject` injects these imports into every module that\n * references the globals below — including third-party files deep in\n * `node_modules` (e.g. `react-dom/server`). Vite 8's bundler (rolldown)\n * resolves an injected bare specifier relative to the *importing* file, so\n * `'@ossido-labs/ossido/ssr'` fails to resolve from within `react-dom`. Resolving to\n * absolute paths up-front makes the injected imports resolvable from anywhere\n * (and is a no-op for rollup on Vite <= 7).\n */\nconst SSR_POLYFILLS_MODULE = require.resolve('@ossido-labs/ossido/ssr');\nconst WEB_STREAMS_POLYFILL_MODULE = require.resolve('web-streams-polyfill');\n\nconst VITE_SSR_PLUGINS: Array<Plugin> = [\n {\n enforce: 'post',\n // `@rollup/plugin-inject` is typed against an older rollup than the one\n // bundled with vite, so its `Plugin` type needs widening to vite's.\n ...(inject({\n ReadableStream: [WEB_STREAMS_POLYFILL_MODULE, 'ReadableStream'],\n\n /**\n * Added to support `react@19`\n * @see https://github.com/tuono-labs/tuono/issues/218\n */\n MessageChannel: [SSR_POLYFILLS_MODULE, 'MessageChannelPolyfill'],\n MessageEvent: [SSR_POLYFILLS_MODULE, 'MessageEventPolyfill'],\n Event: [SSR_POLYFILLS_MODULE, 'EventPolyfill'],\n }) as unknown as Plugin),\n },\n];\n\n/**\n * From a resolved {@link InternalOssidoConfig} return a `vite` \"mergeable\"\n * {@link InlineConfig} including all default ossido related options\n */\nfunction createBaseViteConfigFromOssidoConfig(\n ossidoConfig: InternalOssidoConfig,\n): InlineConfig {\n /**\n * @warning Keep in sync with {@link LazyLoadingPlugin} tests:\n * packages/lazy-fn-vite-plugin/tests/transpileSource.test.ts\n */\n const pluginFilesInclude = /\\.(jsx|js|mdx|md|tsx|ts)$/;\n\n const viteBaseConfig: InlineConfig = {\n root: '.ossido',\n // `'error'` (not `'silent'`) so build failures surface instead of\n // degrading to a silent client-side fallback with hydration mismatches.\n logLevel: 'error',\n // Tag vite's output `[FE]` so it matches the rest of the Ossido logs. The\n // level is passed explicitly so the logger honours it (see the logger docs)\n // — this keeps vite's info/benign-warning noise out at `'error'`.\n customLogger: createOssidoViteLogger('error'),\n publicDir: '../public',\n cacheDir: 'cache',\n envDir: '../',\n envPrefix: ENV_PREFIX,\n\n define: {\n // Baked into the client bundle for `ossido build --static` (the CLI sets\n // `OSSIDO_STATIC` for the react build). The router reads it to fetch the\n // pre-rendered `.json` data files instead of the extensionless\n // `/__ossido/data{path}` route, which has no server in a static export.\n __OSSIDO_STATIC__: JSON.stringify(process.env.OSSIDO_STATIC === 'true'),\n // Baked into both bundles so `<CriticalCss>` skips rendering its dev\n // stylesheet links when `dev.criticalCss: false` — the vite endpoint is\n // disabled in that case, so the links would otherwise be dead requests\n // that block rendering.\n __OSSIDO_CRITICAL_CSS__: JSON.stringify(\n ossidoConfig.dev?.criticalCss ?? true,\n ),\n // Baked into both bundles so the router wraps client navigations in\n // `document.startViewTransition` only when the app opted in via\n // `viewTransitions: true`. Off by default.\n __OSSIDO_VIEW_TRANSITIONS__: JSON.stringify(\n ossidoConfig.viewTransitions ?? false,\n ),\n },\n\n resolve: {\n alias: ossidoConfig.vite?.alias ?? {},\n },\n\n css: ossidoConfig.vite?.css,\n\n optimizeDeps: ossidoConfig.vite?.optimizeDeps,\n\n plugins: [\n ...(ossidoConfig.vite?.plugins ?? []),\n\n /**\n * even if `include` is not a valid option for this\n * plugin, we have to use it.\n * If not specified, when running `ossido dev`, the mdx\n * won't be compiled include any style in the page and it might\n * seem broken.\n */\n // @ts-expect-error see above comment\n react({ include: pluginFilesInclude }),\n\n OssidoReactPlugin({ criticalCss: ossidoConfig.dev?.criticalCss ?? true }),\n ],\n };\n\n // seems redundant but it's useful to log the value when debugging, until we have a logging infrastructure.\n return viteBaseConfig;\n}\n\nconst developmentSSRBundle = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n await build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n // A dedicated cache dir, separate from the client dev server's\n // (`.ossido/cache`). Both run concurrently in dev, and this SSR bundle\n // is rebuilt on every `.tsx`/`.mdx`/CSS-module edit — sharing the cache\n // makes each rebuild invalidate the dev server's optimized-deps cache,\n // which triggers a spurious full-page reload (and data refetch) right\n // after the in-place Fast Refresh has already applied.\n cacheDir: 'cache-ssr',\n plugins: VITE_SSR_PLUGINS,\n build: {\n ssr: true,\n minify: false,\n outDir: 'server',\n emptyOutDir: true,\n rollupOptions: {\n input: SERVER_MAIN_ENTRY,\n output: {\n entryFileNames: 'dev-server.js',\n // ESM (not IIFE) so the SSR entry can use top-level `await`; the\n // Rust runtime compiles it as a V8 module (`Ssr::from_module`).\n // The build stays a single `dev-server.js` — the only file the\n // runtime reads — because the SSR build disables code splitting.\n format: 'es',\n },\n },\n },\n ssr: {\n target: 'webworker',\n noExternal: true,\n },\n },\n ),\n );\n });\n};\n\nconst developmentCSRWatch = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n\n const server = await createServer(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n // Entry point for the development vite proxy\n base: '/vite-server/',\n plugins: [ErrorOverlayVitePlugin],\n\n server: {\n host: config.server.host,\n port: config.server.port + 1,\n strictPort: true,\n },\n build: {\n manifest: true,\n emptyOutDir: true,\n rollupOptions: {\n input: CLIENT_MAIN_ENTRY,\n },\n },\n },\n ),\n );\n await server.listen();\n });\n};\n\nconst KB = 1024;\n\nconst formatKb = (bytes: number): string => `${(bytes / KB).toFixed(1)} kB`;\n\n/**\n * Print a compact per-asset size summary (raw + gzip) for the prod build, so\n * size regressions are visible on every `ossido build` without extra tooling.\n * Reads the emitted files directly — works regardless of vite's log level.\n */\nconst printBundleSummary = (): void => {\n interface AssetRow {\n label: string;\n size: number;\n gzip: number;\n }\n\n const collectDir = (dir: string, prefix: string): Array<AssetRow> => {\n try {\n return readdirSync(dir, { recursive: true, encoding: 'utf-8' })\n .filter((file) => /\\.(js|css)$/.test(file))\n .map((file) => {\n const content = readFileSync(join(dir, file));\n return {\n label: `${prefix}/${file}`,\n size: content.length,\n gzip: gzipSync(content).length,\n };\n });\n } catch {\n return [];\n }\n };\n\n const assets = [\n ...collectDir(resolve('out/client'), 'client'),\n ...collectDir(resolve('out/server'), 'server'),\n ].sort((a, b) => b.size - a.size);\n\n if (!assets.length) return;\n\n const labelWidth = Math.max(...assets.map((asset) => asset.label.length));\n console.log('');\n for (const asset of assets) {\n console.log(\n ` ${asset.label.padEnd(labelWidth)} ${formatKb(asset.size).padStart(10)} │ gzip: ${formatKb(asset.gzip).padStart(9)}`,\n );\n }\n const total = assets.reduce((sum, asset) => sum + asset.size, 0);\n const totalGzip = assets.reduce((sum, asset) => sum + asset.gzip, 0);\n console.log(\n ` ${'total'.padEnd(labelWidth)} ${formatKb(total).padStart(10)} │ gzip: ${formatKb(totalGzip).padStart(9)}`,\n );\n console.log('');\n};\n\nconst buildProd = (): void => {\n blockingAsync(async () => {\n const config = await loadConfig();\n\n // Generate the route tree once up front. Both builds' plugin instances\n // re-run the generator on `configResolved`, but it skips the write when\n // the content is unchanged — pre-generating removes the concurrent-write\n // hazard so the two builds (independent outputs) can run in parallel.\n await routeGenerator();\n\n await Promise.all([\n build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n build: {\n manifest: true,\n emptyOutDir: true,\n outDir: '../out/client',\n rollupOptions: {\n input: CLIENT_MAIN_ENTRY,\n },\n },\n },\n ),\n ),\n build(\n mergeConfig<InlineConfig, InlineConfig>(\n createBaseViteConfigFromOssidoConfig(config),\n {\n plugins: VITE_SSR_PLUGINS,\n build: {\n ssr: true,\n minify: true,\n outDir: '../out/server',\n emptyOutDir: true,\n rollupOptions: {\n input: SERVER_MAIN_ENTRY,\n output: {\n entryFileNames: 'prod-server.js',\n // ESM (not IIFE) so the SSR entry can use top-level `await`;\n // the Rust runtime compiles it as a V8 module\n // (`Ssr::from_module`). The build stays a single\n // `prod-server.js` — the only file the runtime reads —\n // because the SSR build disables code splitting.\n format: 'es',\n },\n },\n },\n ssr: {\n target: 'webworker',\n noExternal: true,\n },\n },\n ),\n ),\n ]);\n\n printBundleSummary();\n });\n};\n\nconst buildConfig = (): void => {\n blockingAsync(async (): Promise<void> => {\n await build({\n root: '.ossido',\n // `'error'` (not `'silent'`) so config build failures are visible.\n logLevel: 'error',\n cacheDir: 'cache',\n envDir: '../',\n build: {\n ssr: true,\n outDir: 'config',\n emptyOutDir: true,\n rollupOptions: {\n input: './ossido.config.ts',\n output: {\n entryFileNames: 'config.mjs',\n },\n },\n },\n });\n\n const config = await loadConfig();\n await createJsonConfig(config);\n });\n};\n\n/**\n * Run a user-defined build lifecycle hook (`prebuild` / `postbuild`) from\n * `ossido.config.ts`. Invoked by the Rust CLI (`ossido-run-build-hook <name>`)\n * at the matching point of `ossido build`. No-ops when the hook is undefined.\n *\n * The output/public dirs and mode mirror what the build produces: static builds\n * deploy `out/static`, server builds `out`. `postbuild` gets the emitted-file\n * manifest; `prebuild` runs before anything is emitted, so its manifest is empty.\n */\nconst runBuildHook = (name: 'prebuild' | 'postbuild'): void =>\n blockingAsync(async () => {\n const config = await loadConfig();\n const hook = config.build?.[name];\n if (typeof hook !== 'function') return;\n\n const mode = process.env.OSSIDO_STATIC === 'true' ? 'static' : 'server';\n const outputDirectory = resolve(mode === 'static' ? 'out/static' : 'out');\n const publicDirectory = resolve('public');\n const manifest =\n name === 'postbuild' ? listFilesRecursive(outputDirectory) : [];\n\n // `loadConfig` returns the resolved `InternalOssidoConfig` (a structural\n // superset of the public `OssidoConfig` the hook context exposes).\n await hook({\n mode,\n outputDirectory,\n publicDirectory,\n manifest,\n config: config as OssidoConfig,\n });\n });\n\nexport {\n buildProd,\n buildConfig,\n developmentCSRWatch,\n developmentSSRBundle,\n runBuildHook,\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ossido-labs/ossido",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
"@rollup/plugin-inject": "^5.0.5",
|
|
78
78
|
"@vitejs/plugin-react-swc": "^4.3.2",
|
|
79
79
|
"fast-text-encoding": "^1.0.6",
|
|
80
|
-
"@ossido-labs/ossido-react-vite-plugin": "0.1.
|
|
81
|
-
"@ossido-labs/ossido-router": "0.1.
|
|
82
|
-
"@ossido-labs/ossido-ui": "0.1.
|
|
80
|
+
"@ossido-labs/ossido-react-vite-plugin": "0.1.2",
|
|
81
|
+
"@ossido-labs/ossido-router": "0.1.2",
|
|
82
|
+
"@ossido-labs/ossido-ui": "0.1.2",
|
|
83
83
|
"url-search-params-polyfill": "^8.2.5",
|
|
84
84
|
"web-streams-polyfill": "^4.0.0"
|
|
85
85
|
},
|