@stone-js/starters 0.8.9 → 0.8.10

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 (41) hide show
  1. package/basic-react-declarative/package.json +5 -5
  2. package/basic-react-imperative/package.json +5 -5
  3. package/basic-react-native-declarative/App.tsx +192 -0
  4. package/basic-react-native-declarative/LICENSE +21 -0
  5. package/basic-react-native-declarative/README.md +35 -0
  6. package/basic-react-native-declarative/adapter/NativeAdapter.ts +108 -0
  7. package/basic-react-native-declarative/adapter/NativeErrorHandler.ts +53 -0
  8. package/basic-react-native-declarative/adapter/NativeEventSource.ts +58 -0
  9. package/basic-react-native-declarative/adapter/RawResponseWrapper.ts +30 -0
  10. package/basic-react-native-declarative/adapter/declarations.ts +40 -0
  11. package/basic-react-native-declarative/adapter/middleware.ts +73 -0
  12. package/basic-react-native-declarative/adapter/nativeAdapterBlueprint.ts +51 -0
  13. package/basic-react-native-declarative/adapter/renderSink.ts +52 -0
  14. package/basic-react-native-declarative/app/Application.ts +17 -0
  15. package/basic-react-native-declarative/app/WelcomeController.ts +66 -0
  16. package/basic-react-native-declarative/app.json +25 -0
  17. package/basic-react-native-declarative/assets/android-icon-background.png +0 -0
  18. package/basic-react-native-declarative/assets/android-icon-foreground.png +0 -0
  19. package/basic-react-native-declarative/assets/android-icon-monochrome.png +0 -0
  20. package/basic-react-native-declarative/assets/favicon.png +0 -0
  21. package/basic-react-native-declarative/assets/icon.png +0 -0
  22. package/basic-react-native-declarative/assets/splash-icon.png +0 -0
  23. package/basic-react-native-declarative/babel.config.js +16 -0
  24. package/basic-react-native-declarative/index.ts +22 -0
  25. package/basic-react-native-declarative/metro.config.js +7 -0
  26. package/basic-react-native-declarative/package.json +41 -0
  27. package/basic-react-native-declarative/tests/Application.spec.ts +65 -0
  28. package/basic-react-native-declarative/tsconfig.json +16 -0
  29. package/basic-react-native-declarative/vitest.config.ts +27 -0
  30. package/basic-service-declarative/package.json +4 -4
  31. package/basic-service-imperative/package.json +4 -4
  32. package/continuum-showcase/package.json +9 -9
  33. package/full-react-declarative/package.json +10 -10
  34. package/full-react-imperative/package.json +10 -10
  35. package/full-service-declarative/package.json +10 -10
  36. package/full-service-imperative/package.json +10 -10
  37. package/package.json +15 -1
  38. package/standard-react-declarative/package.json +9 -9
  39. package/standard-react-imperative/package.json +9 -9
  40. package/standard-service-declarative/package.json +7 -7
  41. package/standard-service-imperative/package.json +7 -7
@@ -0,0 +1,51 @@
1
+ import { NATIVE_PLATFORM } from './declarations'
2
+ import { NativeAdapter } from './NativeAdapter'
3
+ import { NativeErrorHandler } from './NativeErrorHandler'
4
+ import { IncomingEventMiddleware, ResponseMiddleware } from './middleware'
5
+ import { AdapterConfig, AppConfig, defaultKernelResolver, IBlueprint, StoneBlueprint } from '@stone-js/core'
6
+ import { OutgoingBrowserResponse, OutgoingBrowserResponseOptions } from '@stone-js/browser-core'
7
+
8
+ /**
9
+ * Adapter resolver for the native proof-of-concept adapter.
10
+ *
11
+ * @param blueprint - The `IBlueprint` providing configuration and dependencies.
12
+ * @returns A `NativeAdapter` instance.
13
+ */
14
+ export const nativeAdapterResolver = (blueprint: IBlueprint): NativeAdapter => {
15
+ return NativeAdapter.create(blueprint)
16
+ }
17
+
18
+ /**
19
+ * Blueprint for the native proof-of-concept adapter.
20
+ *
21
+ * Activated the canonical way: handed to `@StoneApp(options, [blueprints])`
22
+ * (declarative) or `defineStoneApp(handler, options, [blueprints])`
23
+ * (imperative). Being the only adapter, it is selected automatically.
24
+ */
25
+ export const nativeAdapterBlueprint: StoneBlueprint = {
26
+ stone: {
27
+ kernel: {
28
+ responseResolver: (options: OutgoingBrowserResponseOptions) => {
29
+ return OutgoingBrowserResponse.create({ ...options, statusCode: options.statusCode ?? 200 })
30
+ }
31
+ },
32
+ adapters: [
33
+ {
34
+ current: false,
35
+ default: true,
36
+ variant: 'native',
37
+ platform: NATIVE_PLATFORM,
38
+ middleware: [
39
+ { module: IncomingEventMiddleware, isClass: true, priority: 0 },
40
+ { module: ResponseMiddleware, isClass: true, priority: 10 }
41
+ ],
42
+ resolver: nativeAdapterResolver,
43
+ eventHandlerResolver: defaultKernelResolver,
44
+ events: [],
45
+ errorHandlers: {
46
+ default: { module: NativeErrorHandler, isClass: true }
47
+ }
48
+ } as unknown as AdapterConfig
49
+ ]
50
+ } as Partial<AppConfig> as AppConfig
51
+ }
@@ -0,0 +1,52 @@
1
+ import { OutgoingBrowserResponse } from '@stone-js/browser-core'
2
+
3
+ /**
4
+ * A render listener: receives the kernel's outgoing response for display.
5
+ */
6
+ export type NativeRenderListener = (response: OutgoingBrowserResponse) => void
7
+
8
+ /**
9
+ * An error listener: receives adapter-level errors for display.
10
+ */
11
+ export type NativeErrorListener = (error: Error) => void
12
+
13
+ let renderListener: NativeRenderListener | undefined
14
+ let errorListener: NativeErrorListener | undefined
15
+
16
+ /**
17
+ * Register the render effect target. In this proof of concept the target is
18
+ * the React root component's state; the future `@stone-js/use-react-native`
19
+ * response middleware will push into the native navigation stack instead.
20
+ *
21
+ * @param listener - The render listener.
22
+ */
23
+ export function onNativeRender (listener: NativeRenderListener): void {
24
+ renderListener = listener
25
+ }
26
+
27
+ /**
28
+ * Register the error display target.
29
+ *
30
+ * @param listener - The error listener.
31
+ */
32
+ export function onNativeError (listener: NativeErrorListener): void {
33
+ errorListener = listener
34
+ }
35
+
36
+ /**
37
+ * Push an outgoing response to the registered render target.
38
+ *
39
+ * @param response - The kernel's outgoing response.
40
+ */
41
+ export function emitNativeRender (response: OutgoingBrowserResponse): void {
42
+ renderListener?.(response)
43
+ }
44
+
45
+ /**
46
+ * Push an error to the registered error target.
47
+ *
48
+ * @param error - The error to display.
49
+ */
50
+ export function emitNativeError (error: Error): void {
51
+ errorListener?.(error)
52
+ }
@@ -0,0 +1,17 @@
1
+ import { Routing } from '@stone-js/router'
2
+ import { LogLevel, StoneApp } from '@stone-js/core'
3
+ import { nativeAdapterBlueprint } from '../adapter/nativeAdapterBlueprint'
4
+
5
+ /**
6
+ * Application
7
+ *
8
+ * This is the main application entry point.
9
+ *
10
+ * @Routing() enables the Stone router: incoming navigation events are matched
11
+ * against the route definitions declared by the controllers.
12
+ * @StoneApp() enables the Stone application (required). Extra blueprints are
13
+ * activated through its second argument: here, the native adapter.
14
+ */
15
+ @Routing()
16
+ @StoneApp({ name: 'Stone.js Native', logger: { level: LogLevel.INFO } }, [nativeAdapterBlueprint])
17
+ export class Application {}
@@ -0,0 +1,66 @@
1
+ import { Controller, Match } from '@stone-js/router'
2
+ import { IncomingBrowserEvent } from '@stone-js/browser-core'
3
+
4
+ /**
5
+ * The payload every route of this starter returns.
6
+ */
7
+ export interface WelcomeData {
8
+ message: string
9
+ route: string
10
+ framework: {
11
+ name: string
12
+ tagline: string
13
+ docs: string
14
+ }
15
+ }
16
+
17
+ /**
18
+ * WelcomeController
19
+ *
20
+ * The routes are matched against the URL carried by each navigation event,
21
+ * exactly like they would be in a browser SPA or behind an HTTP adapter:
22
+ * the domain does not know it is running inside a native application.
23
+ */
24
+ @Controller()
25
+ export class WelcomeController {
26
+ /**
27
+ * The landing route, dispatched once when the application starts.
28
+ *
29
+ * @returns The welcome payload.
30
+ */
31
+ @Match('/')
32
+ welcome (): WelcomeData {
33
+ return this.present('Welcome to Stone.js on React Native!', '/')
34
+ }
35
+
36
+ /**
37
+ * A parameterized route: the `name` route parameter is read from the event.
38
+ *
39
+ * @param event - The incoming navigation event.
40
+ * @returns The greeting payload.
41
+ */
42
+ @Match('/hello/:name')
43
+ hello (event: IncomingBrowserEvent): WelcomeData {
44
+ const name = String(event.get<string>('name', 'World'))
45
+ return this.present(`Hello ${name}! Same domain, native screen.`, `/hello/${name}`)
46
+ }
47
+
48
+ /**
49
+ * Build the branded payload returned by every route.
50
+ *
51
+ * @param message - The message to display.
52
+ * @param route - The matched route path.
53
+ * @returns The payload.
54
+ */
55
+ private present (message: string, route: string): WelcomeData {
56
+ return {
57
+ message,
58
+ route,
59
+ framework: {
60
+ name: 'Stone.js',
61
+ tagline: 'The continuum framework',
62
+ docs: 'https://stonejs.dev'
63
+ }
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "expo": {
3
+ "name": "basic-react-native-declarative",
4
+ "slug": "basic-react-native-declarative",
5
+ "version": "1.0.0",
6
+ "orientation": "portrait",
7
+ "icon": "./assets/icon.png",
8
+ "userInterfaceStyle": "light",
9
+ "ios": {
10
+ "supportsTablet": true
11
+ },
12
+ "android": {
13
+ "adaptiveIcon": {
14
+ "backgroundColor": "#E6F4FE",
15
+ "foregroundImage": "./assets/android-icon-foreground.png",
16
+ "backgroundImage": "./assets/android-icon-background.png",
17
+ "monochromeImage": "./assets/android-icon-monochrome.png"
18
+ },
19
+ "predictiveBackGestureEnabled": false
20
+ },
21
+ "web": {
22
+ "favicon": "./assets/favicon.png"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Stone.js runs on TC39 stage-3 decorators (2023-11) with `Symbol.metadata`.
3
+ *
4
+ * `babel-preset-expo` applies `@babel/plugin-proposal-decorators` itself (in
5
+ * legacy mode by default): the decorator semantics are configured through the
6
+ * preset's `decorators` option, never by adding the plugin separately, so the
7
+ * preset keeps its ordering guarantees against the class-field transforms.
8
+ */
9
+ module.exports = function (api) {
10
+ api.cache(true)
11
+ return {
12
+ presets: [
13
+ ['babel-preset-expo', { decorators: { version: '2023-11' } }]
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Platform polyfills come first, before anything from Stone.js loads.
3
+ *
4
+ * - React Native's built-in `URL` is a stub (no `pathname`, no `searchParams`);
5
+ * Stone.js relies on the full WHATWG URL API, so the polyfill is required.
6
+ * - `TextEncoder` is installed only when the JS engine does not provide it
7
+ * (older Hermes versions).
8
+ */
9
+ import 'react-native-url-polyfill/auto'
10
+
11
+ if (typeof globalThis.TextEncoder === 'undefined') {
12
+ require('fast-text-encoding')
13
+ }
14
+
15
+ import { registerRootComponent } from 'expo'
16
+
17
+ import App from './App'
18
+
19
+ // registerRootComponent calls AppRegistry.registerComponent('main', () => App);
20
+ // It also ensures that whether you load the app in Expo Go or in a native build,
21
+ // the environment is set up appropriately
22
+ registerRootComponent(App)
@@ -0,0 +1,7 @@
1
+ const { getDefaultConfig } = require('expo/metro-config')
2
+
3
+ /**
4
+ * Pinning the project root keeps Metro scoped to this starter, even when the
5
+ * starter lives inside a larger workspace (as it does in the Stone.js monorepo).
6
+ */
7
+ module.exports = getDefaultConfig(__dirname)
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "basic-react-native-declarative",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "description": "Stone.js's basic starter to create a React Native (Expo) app using the declarative API.",
6
+ "author": "Mr. Stone <evensstone@gmail.com>",
7
+ "license": "MIT",
8
+ "main": "index.ts",
9
+ "engines": {
10
+ "node": ">=20.0.0"
11
+ },
12
+ "scripts": {
13
+ "start": "expo start",
14
+ "android": "expo start --android",
15
+ "ios": "expo start --ios",
16
+ "web": "expo start --web",
17
+ "export": "expo export",
18
+ "typecheck": "tsc --noEmit",
19
+ "test": "vitest run",
20
+ "test:cvg": "npm run test -- --coverage"
21
+ },
22
+ "dependencies": {
23
+ "@stone-js/browser-core": "^0.8.10",
24
+ "@stone-js/core": "^0.8.10",
25
+ "@stone-js/router": "^0.8.10",
26
+ "expo": "~57.0.14",
27
+ "expo-status-bar": "~57.0.1",
28
+ "fast-text-encoding": "^1.0.6",
29
+ "react": "19.2.3",
30
+ "react-native": "0.86.2",
31
+ "react-native-url-polyfill": "^3.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@babel/plugin-proposal-decorators": "^7.28.0",
35
+ "@types/react": "~19.2.2",
36
+ "@vitest/coverage-v8": "^3.0.9",
37
+ "babel-preset-expo": "^57.0.7",
38
+ "typescript": "~6.0.3",
39
+ "vitest": "^3.0.9"
40
+ }
41
+ }
@@ -0,0 +1,65 @@
1
+ import { stoneApp } from '@stone-js/core'
2
+ import { describe, it, expect, beforeAll } from 'vitest'
3
+ import { Application } from '../app/Application'
4
+ import { OutgoingBrowserResponse } from '@stone-js/browser-core'
5
+ import { nativeEventSource } from '../adapter/NativeEventSource'
6
+ import { WelcomeData, WelcomeController } from '../app/WelcomeController'
7
+ import { onNativeError, onNativeRender } from '../adapter/renderSink'
8
+
9
+ /**
10
+ * Behavioral test of the full continuum chain: the exact modules the native
11
+ * application boots (domain + router + native adapter) are booted here under
12
+ * Node, navigation intents are emitted, and the rendered payloads asserted.
13
+ *
14
+ * The adapter is pure JavaScript, so what passes here is what runs on device;
15
+ * only the platform checks (URL polyfill, Hermes) need the real application.
16
+ *
17
+ * The application boots ONCE for the whole suite, like on a device: default
18
+ * blueprints are shared module-level objects, so booting the same modules
19
+ * twice in one process would accumulate route definitions.
20
+ */
21
+ describe('Stone.js native proof of concept', () => {
22
+ const rendered: OutgoingBrowserResponse[] = []
23
+ const errors: Error[] = []
24
+
25
+ beforeAll(async () => {
26
+ onNativeRender((response) => rendered.push(response))
27
+ onNativeError((error) => errors.push(error))
28
+ await stoneApp({ modules: [Application, WelcomeController] }).run()
29
+ })
30
+
31
+ it('boots and renders the landing route on startup', () => {
32
+ expect(errors).toHaveLength(0)
33
+ expect(rendered).toHaveLength(1)
34
+
35
+ const payload = rendered[0].content as WelcomeData
36
+ expect(payload.route).toBe('/')
37
+ expect(payload.message).toContain('Welcome to Stone.js on React Native!')
38
+ expect(payload.framework.name).toBe('Stone.js')
39
+ })
40
+
41
+ it('routes a navigation intent with a parameter to the same domain', async () => {
42
+ nativeEventSource.navigate('stone://app/hello/Noowow')
43
+ await new Promise((resolve) => setImmediate(resolve))
44
+
45
+ const payload = rendered.at(-1)?.content as WelcomeData
46
+ expect(payload.route).toBe('/hello/Noowow')
47
+ expect(payload.message).toContain('Hello Noowow!')
48
+ })
49
+
50
+ it('decodes encoded route parameters', async () => {
51
+ nativeEventSource.navigate('stone://app/hello/Mr.%20Stone')
52
+ await new Promise((resolve) => setImmediate(resolve))
53
+
54
+ const payload = rendered.at(-1)?.content as WelcomeData
55
+ expect(payload.message).toContain('Hello Mr. Stone!')
56
+ })
57
+
58
+ it('surfaces unknown routes through the error chain instead of crashing', async () => {
59
+ nativeEventSource.navigate('stone://app/nowhere')
60
+ await new Promise((resolve) => setImmediate(resolve))
61
+
62
+ const lastPayload = rendered.at(-1)?.content as WelcomeData | undefined
63
+ expect(lastPayload?.route === '/nowhere').toBe(false)
64
+ })
65
+ })
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "strict": true,
5
+ "experimentalDecorators": true,
6
+ "types": ["vitest/globals"]
7
+ },
8
+ "include": [
9
+ "app",
10
+ "adapter",
11
+ "tests",
12
+ "App.tsx",
13
+ "index.ts",
14
+ "vitest.config.ts"
15
+ ]
16
+ }
@@ -0,0 +1,27 @@
1
+ import { defineConfig } from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ // `experimentalDecorators` is enabled in tsconfig.json for tsc TYPING only
5
+ // (the framework types its decorators with the legacy signatures). At
6
+ // RUNTIME Stone.js requires standard 2023-11 decorators, so esbuild must
7
+ // ignore that flag and emit the standard semantics, `Symbol.metadata`
8
+ // included (esbuild 0.25+ implements them correctly on its own).
9
+ esbuild: {
10
+ tsconfigRaw: {
11
+ compilerOptions: {
12
+ experimentalDecorators: false
13
+ }
14
+ }
15
+ },
16
+ test: {
17
+ globals: true,
18
+ environment: 'node',
19
+ include: ['./tests/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
20
+ coverage: {
21
+ provider: 'v8',
22
+ include: ['app/**/*.ts', 'adapter/**/*.ts'],
23
+ reporter: ['text', 'html'],
24
+ reportsDirectory: './coverage'
25
+ }
26
+ }
27
+ })
@@ -18,15 +18,15 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/core": "^0.8.9",
22
- "@stone-js/node-http-adapter": "^0.8.9"
21
+ "@stone-js/core": "^0.8.10",
22
+ "@stone-js/node-http-adapter": "^0.8.10"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/plugin-proposal-decorators": "^7.25.9",
26
26
  "@babel/preset-env": "^7.26.9",
27
27
  "@babel/preset-typescript": "^7.27.0",
28
- "@stone-js/cli": "^0.8.9",
29
- "@stone-js/testing": "^0.8.9",
28
+ "@stone-js/cli": "^0.8.10",
29
+ "@stone-js/testing": "^0.8.10",
30
30
  "@types/node": "^24.0.7",
31
31
  "@vitest/coverage-v8": "^3.0.9",
32
32
  "vitest": "^3.0.9"
@@ -18,15 +18,15 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/core": "^0.8.9",
22
- "@stone-js/node-http-adapter": "^0.8.9"
21
+ "@stone-js/core": "^0.8.10",
22
+ "@stone-js/node-http-adapter": "^0.8.10"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/plugin-proposal-decorators": "^7.25.9",
26
26
  "@babel/preset-env": "^7.26.9",
27
27
  "@babel/preset-typescript": "^7.27.0",
28
- "@stone-js/cli": "^0.8.9",
29
- "@stone-js/testing": "^0.8.9",
28
+ "@stone-js/cli": "^0.8.10",
29
+ "@stone-js/testing": "^0.8.10",
30
30
  "@types/node": "^24.0.7",
31
31
  "@vitest/coverage-v8": "^3.0.9",
32
32
  "vitest": "^3.0.9"
@@ -15,20 +15,20 @@
15
15
  "dependencies": {
16
16
  "react": "^19.0.0",
17
17
  "react-dom": "^19.0.0",
18
- "@stone-js/core": "^0.8.9",
19
- "@stone-js/router": "^0.8.9",
20
- "@stone-js/use-react": "^0.8.9",
21
- "@stone-js/http-core": "^0.8.9",
22
- "@stone-js/pipeline": "^0.8.9",
23
- "@stone-js/browser-adapter": "^0.8.9",
24
- "@stone-js/node-http-adapter": "^0.8.9"
18
+ "@stone-js/core": "^0.8.10",
19
+ "@stone-js/router": "^0.8.10",
20
+ "@stone-js/use-react": "^0.8.10",
21
+ "@stone-js/http-core": "^0.8.10",
22
+ "@stone-js/pipeline": "^0.8.10",
23
+ "@stone-js/browser-adapter": "^0.8.10",
24
+ "@stone-js/node-http-adapter": "^0.8.10"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@babel/plugin-proposal-decorators": "^7.25.9",
28
28
  "@babel/preset-env": "^7.26.9",
29
29
  "@babel/preset-typescript": "^7.27.0",
30
- "@stone-js/cli": "^0.8.9",
31
- "@stone-js/testing": "^0.8.9",
30
+ "@stone-js/cli": "^0.8.10",
31
+ "@stone-js/testing": "^0.8.10",
32
32
  "@types/node": "^24.0.7",
33
33
  "@types/react": "^19.0.7",
34
34
  "@types/react-dom": "^19.0.3",
@@ -18,14 +18,14 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/env": "^0.8.9",
22
- "@stone-js/http-core": "^0.8.9",
23
- "@stone-js/node-http-adapter": "^0.8.9",
24
- "@stone-js/router": "^0.8.9",
25
- "@stone-js/filesystem": "^0.8.9",
26
- "@stone-js/core": "^0.8.9",
27
- "@stone-js/use-react": "^0.8.9",
28
- "@stone-js/browser-adapter": "^0.8.9",
21
+ "@stone-js/env": "^0.8.10",
22
+ "@stone-js/http-core": "^0.8.10",
23
+ "@stone-js/node-http-adapter": "^0.8.10",
24
+ "@stone-js/router": "^0.8.10",
25
+ "@stone-js/filesystem": "^0.8.10",
26
+ "@stone-js/core": "^0.8.10",
27
+ "@stone-js/use-react": "^0.8.10",
28
+ "@stone-js/browser-adapter": "^0.8.10",
29
29
  "axios": "^1.7.9",
30
30
  "react": "^19.0.0",
31
31
  "react-dom": "^19.0.0"
@@ -34,8 +34,8 @@
34
34
  "@babel/plugin-proposal-decorators": "^7.25.9",
35
35
  "@babel/preset-env": "^7.26.9",
36
36
  "@babel/preset-typescript": "^7.27.0",
37
- "@stone-js/cli": "^0.8.9",
38
- "@stone-js/testing": "^0.8.9",
37
+ "@stone-js/cli": "^0.8.10",
38
+ "@stone-js/testing": "^0.8.10",
39
39
  "@types/axios": "^0.14.4",
40
40
  "@types/node": "^24.0.7",
41
41
  "@types/react": "^19.0.7",
@@ -18,14 +18,14 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/env": "^0.8.9",
22
- "@stone-js/http-core": "^0.8.9",
23
- "@stone-js/node-http-adapter": "^0.8.9",
24
- "@stone-js/router": "^0.8.9",
25
- "@stone-js/filesystem": "^0.8.9",
26
- "@stone-js/core": "^0.8.9",
27
- "@stone-js/use-react": "^0.8.9",
28
- "@stone-js/browser-adapter": "^0.8.9",
21
+ "@stone-js/env": "^0.8.10",
22
+ "@stone-js/http-core": "^0.8.10",
23
+ "@stone-js/node-http-adapter": "^0.8.10",
24
+ "@stone-js/router": "^0.8.10",
25
+ "@stone-js/filesystem": "^0.8.10",
26
+ "@stone-js/core": "^0.8.10",
27
+ "@stone-js/use-react": "^0.8.10",
28
+ "@stone-js/browser-adapter": "^0.8.10",
29
29
  "axios": "^1.7.9",
30
30
  "dayjs": "^1.11.13",
31
31
  "react": "^19.0.0",
@@ -35,8 +35,8 @@
35
35
  "@babel/plugin-proposal-decorators": "^7.25.9",
36
36
  "@babel/preset-env": "^7.26.9",
37
37
  "@babel/preset-typescript": "^7.27.0",
38
- "@stone-js/cli": "^0.8.9",
39
- "@stone-js/testing": "^0.8.9",
38
+ "@stone-js/cli": "^0.8.10",
39
+ "@stone-js/testing": "^0.8.10",
40
40
  "@types/axios": "^0.14.4",
41
41
  "@types/node": "^24.0.7",
42
42
  "@types/react": "^19.0.7",
@@ -22,14 +22,14 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@libsql/client": "^0.14.0",
25
- "@stone-js/core": "^0.8.9",
26
- "@stone-js/env": "^0.8.9",
27
- "@stone-js/filesystem": "^0.8.9",
28
- "@stone-js/http-core": "^0.8.9",
29
- "@stone-js/node-cli-adapter": "^0.8.9",
30
- "@stone-js/node-http-adapter": "^0.8.9",
31
- "@stone-js/pipeline": "^0.8.9",
32
- "@stone-js/router": "^0.8.9",
25
+ "@stone-js/core": "^0.8.10",
26
+ "@stone-js/env": "^0.8.10",
27
+ "@stone-js/filesystem": "^0.8.10",
28
+ "@stone-js/http-core": "^0.8.10",
29
+ "@stone-js/node-cli-adapter": "^0.8.10",
30
+ "@stone-js/node-http-adapter": "^0.8.10",
31
+ "@stone-js/pipeline": "^0.8.10",
32
+ "@stone-js/router": "^0.8.10",
33
33
  "bcryptjs": "^3.0.2",
34
34
  "drizzle-orm": "^0.45.2",
35
35
  "jsonwebtoken": "^9.0.2"
@@ -38,8 +38,8 @@
38
38
  "@babel/plugin-proposal-decorators": "^7.25.9",
39
39
  "@babel/preset-env": "^7.26.9",
40
40
  "@babel/preset-typescript": "^7.27.0",
41
- "@stone-js/cli": "^0.8.9",
42
- "@stone-js/testing": "^0.8.9",
41
+ "@stone-js/cli": "^0.8.10",
42
+ "@stone-js/testing": "^0.8.10",
43
43
  "@types/jsonwebtoken": "^9.0.8",
44
44
  "@types/node": "^24.0.3",
45
45
  "@vitest/coverage-v8": "^3.0.9",
@@ -22,14 +22,14 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@libsql/client": "^0.14.0",
25
- "@stone-js/core": "^0.8.9",
26
- "@stone-js/env": "^0.8.9",
27
- "@stone-js/filesystem": "^0.8.9",
28
- "@stone-js/http-core": "^0.8.9",
29
- "@stone-js/node-cli-adapter": "^0.8.9",
30
- "@stone-js/node-http-adapter": "^0.8.9",
31
- "@stone-js/pipeline": "^0.8.9",
32
- "@stone-js/router": "^0.8.9",
25
+ "@stone-js/core": "^0.8.10",
26
+ "@stone-js/env": "^0.8.10",
27
+ "@stone-js/filesystem": "^0.8.10",
28
+ "@stone-js/http-core": "^0.8.10",
29
+ "@stone-js/node-cli-adapter": "^0.8.10",
30
+ "@stone-js/node-http-adapter": "^0.8.10",
31
+ "@stone-js/pipeline": "^0.8.10",
32
+ "@stone-js/router": "^0.8.10",
33
33
  "bcryptjs": "^3.0.2",
34
34
  "drizzle-orm": "^0.45.2",
35
35
  "jsonwebtoken": "^9.0.2"
@@ -38,8 +38,8 @@
38
38
  "@babel/plugin-proposal-decorators": "^7.25.9",
39
39
  "@babel/preset-env": "^7.26.9",
40
40
  "@babel/preset-typescript": "^7.27.0",
41
- "@stone-js/cli": "^0.8.9",
42
- "@stone-js/testing": "^0.8.9",
41
+ "@stone-js/cli": "^0.8.10",
42
+ "@stone-js/testing": "^0.8.10",
43
43
  "@types/jsonwebtoken": "^9.0.8",
44
44
  "@types/node": "^24.0.3",
45
45
  "@vitest/coverage-v8": "^3.0.9",