@stone-js/starters 0.8.11 → 0.8.12

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 (78) 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 +16 -182
  4. package/basic-react-native-declarative/README.md +130 -29
  5. package/basic-react-native-declarative/app/Application.ts +17 -6
  6. package/basic-react-native-declarative/app/HomeScreen.tsx +80 -0
  7. package/basic-react-native-declarative/app/PortalMark.tsx +32 -0
  8. package/basic-react-native-declarative/app/WelcomeView.tsx +146 -0
  9. package/basic-react-native-declarative/app/theme.ts +66 -0
  10. package/basic-react-native-declarative/app.json +10 -3
  11. package/basic-react-native-declarative/assets/android-icon-background.png +0 -0
  12. package/basic-react-native-declarative/assets/android-icon-foreground.png +0 -0
  13. package/basic-react-native-declarative/assets/android-icon-monochrome.png +0 -0
  14. package/basic-react-native-declarative/assets/favicon.png +0 -0
  15. package/basic-react-native-declarative/assets/icon.png +0 -0
  16. package/basic-react-native-declarative/assets/logo-dark.png +0 -0
  17. package/basic-react-native-declarative/assets/logo-light.png +0 -0
  18. package/basic-react-native-declarative/assets/splash-icon.png +0 -0
  19. package/basic-react-native-declarative/index.ts +16 -8
  20. package/basic-react-native-declarative/metro.config.js +9 -3
  21. package/basic-react-native-declarative/package.json +9 -4
  22. package/basic-react-native-declarative/tests/Application.spec.ts +41 -43
  23. package/basic-react-native-declarative/tests/stubs/react-native.ts +42 -0
  24. package/basic-react-native-declarative/tsconfig.json +0 -1
  25. package/basic-react-native-declarative/vitest.config.ts +13 -5
  26. package/basic-react-native-imperative/App.tsx +26 -0
  27. package/basic-react-native-imperative/LICENSE +21 -0
  28. package/basic-react-native-imperative/README.md +150 -0
  29. package/basic-react-native-imperative/app/Application.ts +25 -0
  30. package/basic-react-native-imperative/app/HomeScreen.tsx +84 -0
  31. package/basic-react-native-imperative/app/PortalMark.tsx +32 -0
  32. package/basic-react-native-imperative/app/WelcomeView.tsx +146 -0
  33. package/basic-react-native-imperative/app/theme.ts +66 -0
  34. package/basic-react-native-imperative/app.json +32 -0
  35. package/basic-react-native-imperative/assets/android-icon-background.png +0 -0
  36. package/basic-react-native-imperative/assets/android-icon-foreground.png +0 -0
  37. package/basic-react-native-imperative/assets/android-icon-monochrome.png +0 -0
  38. package/basic-react-native-imperative/assets/favicon.png +0 -0
  39. package/basic-react-native-imperative/assets/icon.png +0 -0
  40. package/basic-react-native-imperative/assets/logo-dark.png +0 -0
  41. package/basic-react-native-imperative/assets/logo-light.png +0 -0
  42. package/basic-react-native-imperative/assets/splash-icon.png +0 -0
  43. package/basic-react-native-imperative/babel.config.js +16 -0
  44. package/basic-react-native-imperative/index.ts +30 -0
  45. package/basic-react-native-imperative/metro.config.js +13 -0
  46. package/basic-react-native-imperative/package.json +46 -0
  47. package/basic-react-native-imperative/tests/Application.spec.ts +63 -0
  48. package/basic-react-native-imperative/tests/stubs/react-native.ts +42 -0
  49. package/basic-react-native-imperative/tsconfig.json +15 -0
  50. package/basic-react-native-imperative/vitest.config.ts +35 -0
  51. package/basic-service-declarative/package.json +4 -4
  52. package/basic-service-imperative/package.json +4 -4
  53. package/continuum-showcase/package.json +9 -9
  54. package/full-react-declarative/app/layout/AppLayout/AppLayout.tsx +1 -1
  55. package/full-react-declarative/app/layout/ErrorLayout/ErrorLayout.tsx +1 -1
  56. package/full-react-declarative/app/layout/SecurityLayout/SecurityLayout.tsx +1 -1
  57. package/full-react-declarative/package.json +10 -10
  58. package/full-react-imperative/app/layout/AppLayout/AppLayout.tsx +1 -1
  59. package/full-react-imperative/app/layout/ErrorLayout/ErrorLayout.tsx +1 -1
  60. package/full-react-imperative/app/layout/SecurityLayout/SecurityLayout.tsx +1 -1
  61. package/full-react-imperative/app/layout/SettingsLayout/SettingsLayout.tsx +1 -1
  62. package/full-react-imperative/package.json +10 -10
  63. package/full-service-declarative/package.json +10 -10
  64. package/full-service-imperative/package.json +10 -10
  65. package/package.json +29 -15
  66. package/standard-react-declarative/package.json +9 -9
  67. package/standard-react-imperative/package.json +9 -9
  68. package/standard-service-declarative/package.json +7 -7
  69. package/standard-service-imperative/package.json +7 -7
  70. package/basic-react-native-declarative/adapter/NativeAdapter.ts +0 -108
  71. package/basic-react-native-declarative/adapter/NativeErrorHandler.ts +0 -53
  72. package/basic-react-native-declarative/adapter/NativeEventSource.ts +0 -58
  73. package/basic-react-native-declarative/adapter/RawResponseWrapper.ts +0 -30
  74. package/basic-react-native-declarative/adapter/declarations.ts +0 -40
  75. package/basic-react-native-declarative/adapter/middleware.ts +0 -73
  76. package/basic-react-native-declarative/adapter/nativeAdapterBlueprint.ts +0 -51
  77. package/basic-react-native-declarative/adapter/renderSink.ts +0 -52
  78. package/basic-react-native-declarative/app/WelcomeController.ts +0 -66
@@ -0,0 +1,63 @@
1
+ import { stoneApp } from '@stone-js/core'
2
+ import { Application } from '../app/Application'
3
+ import { HomeScreenBlueprint } from '../app/HomeScreen'
4
+ import { ScreenStack } from '@stone-js/use-react-native'
5
+ import { NavigationSource } from '@stone-js/react-native-adapter'
6
+
7
+ /**
8
+ * The whole application, booted under Node and asked real questions.
9
+ *
10
+ * Nothing is mocked. The kernel, the router, the adapter and the renderer are the ones a phone
11
+ * runs; what a device adds is a screen to draw on, and this asserts what the framework resolved
12
+ * before drawing. Two things are supplied rather than discovered, both through documented
13
+ * configuration: the navigation source, so the test can send a deep link, and the screen stack, so
14
+ * it can read what landed on it.
15
+ *
16
+ * Screens are listed here because the generated manifest (`.stone/modules.ts`) is Metro's, written
17
+ * when Metro starts. Under a test runner the modules are imported directly, which is the same set.
18
+ */
19
+ describe('Screens', () => {
20
+ const screens = ScreenStack.create()
21
+ const navigation = NavigationSource.create({ baseUrl: 'stone://app' })
22
+
23
+ // Booted once for the whole suite, as on a device: the default blueprints are shared module
24
+ // objects, so booting the same modules twice in one process would accumulate route definitions.
25
+ beforeAll(async () => {
26
+ await stoneApp({
27
+ modules: [
28
+ Application,
29
+ HomeScreenBlueprint,
30
+ { stone: { reactNative: { navigationSource: navigation }, useReactNative: { screenStack: screens } } }
31
+ ]
32
+ }).run()
33
+ })
34
+
35
+ const settle = async (): Promise<void> => { await new Promise((resolve) => setImmediate(resolve)) }
36
+
37
+ it('puts the home screen on the stack at launch', () => {
38
+ expect(screens.size()).toBe(1)
39
+ expect(screens.top()?.path).toBe('/')
40
+ expect(screens.top()?.title).toBe('World · Welcome to Stone.js')
41
+ })
42
+
43
+ it('routes a deep link to the screen that owns it, parameters included', async () => {
44
+ navigation.navigate('stone://app/?name=Ada')
45
+ await settle()
46
+
47
+ expect(screens.top()?.title).toBe('Ada · Welcome to Stone.js')
48
+ })
49
+
50
+ it('re-resolving the current route replaces it instead of stacking a duplicate', () => {
51
+ // The deep link above resolved `/` again with fresh data. A user walking back must not find
52
+ // two identical screens, so the stack swaps the top rather than growing.
53
+ expect(screens.size()).toBe(1)
54
+ })
55
+
56
+ it('surfaces an unknown route instead of crashing', async () => {
57
+ navigation.navigate('stone://app/nowhere')
58
+ await settle()
59
+
60
+ // An error page is still a screen: the application stays up and shows something.
61
+ expect(screens.top()?.path).not.toBe('/')
62
+ })
63
+ })
@@ -0,0 +1,42 @@
1
+ /**
2
+ * What `react-native` is under a Node test runner: absent.
3
+ *
4
+ * The screen imports `View`, `Text` and friends at module scope, so the specifier has to resolve to
5
+ * something for the application to even load. It resolves to this: the primitives as inert
6
+ * identifiers, which is enough because a resolved screen is a React element that has been *built*,
7
+ * not mounted. React never calls these components here, so there is nothing for them to do.
8
+ *
9
+ * That is the line this test draws, and it is the honest one. What runs under Node is the domain:
10
+ * the kernel, the router, the loader, the head. What a `View` looks like is React Native's business,
11
+ * and the way to see it is to run the application, either on a device or in a browser tab through
12
+ * `npx expo start --web`.
13
+ */
14
+ const component = (name: string): string => name
15
+
16
+ export const View = component('View')
17
+ export const Text = component('Text')
18
+ export const Image = component('Image')
19
+ export const Pressable = component('Pressable')
20
+ export const ScrollView = component('ScrollView')
21
+
22
+ export const StyleSheet = {
23
+ create: <T>(styles: T): T => styles,
24
+ flatten: (style: unknown): unknown => style
25
+ }
26
+
27
+ export const Platform = {
28
+ OS: 'ios',
29
+ select: <T>(spec: Record<string, T>): T | undefined => spec.ios ?? spec.default
30
+ }
31
+
32
+ export const Linking = {
33
+ openURL: async (): Promise<void> => {},
34
+ getInitialURL: async (): Promise<string | null> => null,
35
+ addEventListener: () => ({ remove: () => {} })
36
+ }
37
+
38
+ export const useColorScheme = (): string | null => null
39
+
40
+ export default {
41
+ View, Text, Image, Pressable, ScrollView, StyleSheet, Platform, Linking, useColorScheme
42
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "strict": true,
5
+ "experimentalDecorators": true,
6
+ "types": ["vitest/globals"]
7
+ },
8
+ "include": [
9
+ "app",
10
+ "tests",
11
+ "App.tsx",
12
+ "index.ts",
13
+ "vitest.config.ts"
14
+ ]
15
+ }
@@ -0,0 +1,35 @@
1
+ import { fileURLToPath } from 'node:url'
2
+ import { defineConfig } from 'vitest/config'
3
+
4
+ export default defineConfig({
5
+ // Under Node there is no React Native, and the screen imports its primitives at module scope, so
6
+ // the specifier has to resolve somewhere. `tests/stubs/react-native.ts` explains what it stands
7
+ // for and where the line is drawn.
8
+ resolve: {
9
+ alias: {
10
+ 'react-native': fileURLToPath(new URL('./tests/stubs/react-native.ts', import.meta.url))
11
+ }
12
+ },
13
+ // `experimentalDecorators` is enabled in tsconfig.json for tsc TYPING only (the framework types
14
+ // its decorators with the legacy signatures). At RUNTIME Stone.js requires standard 2023-11
15
+ // decorators, so esbuild must ignore that flag and emit the standard semantics, `Symbol.metadata`
16
+ // included (esbuild 0.25+ implements them correctly on its own).
17
+ esbuild: {
18
+ tsconfigRaw: {
19
+ compilerOptions: {
20
+ experimentalDecorators: false
21
+ }
22
+ }
23
+ },
24
+ test: {
25
+ globals: true,
26
+ environment: 'node',
27
+ include: ['./tests/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
28
+ coverage: {
29
+ provider: 'v8',
30
+ include: ['app/**/*.{ts,tsx}'],
31
+ reporter: ['text', 'html'],
32
+ reportsDirectory: './coverage'
33
+ }
34
+ }
35
+ })
@@ -18,15 +18,15 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/core": "^0.8.11",
22
- "@stone-js/node-http-adapter": "^0.8.11"
21
+ "@stone-js/core": "^0.8.12",
22
+ "@stone-js/node-http-adapter": "^0.8.12"
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.11",
29
- "@stone-js/testing": "^0.8.11",
28
+ "@stone-js/cli": "^0.8.12",
29
+ "@stone-js/testing": "^0.8.12",
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.11",
22
- "@stone-js/node-http-adapter": "^0.8.11"
21
+ "@stone-js/core": "^0.8.12",
22
+ "@stone-js/node-http-adapter": "^0.8.12"
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.11",
29
- "@stone-js/testing": "^0.8.11",
28
+ "@stone-js/cli": "^0.8.12",
29
+ "@stone-js/testing": "^0.8.12",
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.11",
19
- "@stone-js/router": "^0.8.11",
20
- "@stone-js/use-react": "^0.8.11",
21
- "@stone-js/http-core": "^0.8.11",
22
- "@stone-js/pipeline": "^0.8.11",
23
- "@stone-js/browser-adapter": "^0.8.11",
24
- "@stone-js/node-http-adapter": "^0.8.11"
18
+ "@stone-js/core": "^0.8.12",
19
+ "@stone-js/router": "^0.8.12",
20
+ "@stone-js/use-react": "^0.8.12",
21
+ "@stone-js/http-core": "^0.8.12",
22
+ "@stone-js/pipeline": "^0.8.12",
23
+ "@stone-js/browser-adapter": "^0.8.12",
24
+ "@stone-js/node-http-adapter": "^0.8.12"
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.11",
31
- "@stone-js/testing": "^0.8.11",
30
+ "@stone-js/cli": "^0.8.12",
31
+ "@stone-js/testing": "^0.8.12",
32
32
  "@types/node": "^24.0.7",
33
33
  "@types/react": "^19.0.7",
34
34
  "@types/react-dom": "^19.0.3",
@@ -72,7 +72,7 @@ export class AppLayout implements IPageLayout {
72
72
  <main>
73
73
  <StoneOutlet>{children}</StoneOutlet>
74
74
  </main>
75
- <footer>&copy; 2025 Stone.js</footer>
75
+ <footer>&copy; {new Date().getFullYear()} Your Company · Built with Stone.js</footer>
76
76
  </div>
77
77
  )
78
78
  }
@@ -32,7 +32,7 @@ export class ErrorLayout implements IPageLayout {
32
32
  </main>
33
33
  <footer className='mt-24'>
34
34
  <div className='container'>
35
- <p className='px-24 text-muted'>2025 Stone.js &copy; Noowow Labs</p>
35
+ <p className='px-24 text-muted'>&copy; {new Date().getFullYear()} Your Company · Built with Stone.js</p>
36
36
  </div>
37
37
  </footer>
38
38
  </>
@@ -30,7 +30,7 @@ export class SecurityLayout implements IPageLayout {
30
30
  </main>
31
31
  <footer className='mt-24'>
32
32
  <div className='container'>
33
- <p className='px-24 text-muted'>2025 Stone.js &copy; Noowow Labs</p>
33
+ <p className='px-24 text-muted'>&copy; {new Date().getFullYear()} Your Company · Built with Stone.js</p>
34
34
  </div>
35
35
  </footer>
36
36
  </>
@@ -18,14 +18,14 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/env": "^0.8.11",
22
- "@stone-js/http-core": "^0.8.11",
23
- "@stone-js/node-http-adapter": "^0.8.11",
24
- "@stone-js/router": "^0.8.11",
25
- "@stone-js/filesystem": "^0.8.11",
26
- "@stone-js/core": "^0.8.11",
27
- "@stone-js/use-react": "^0.8.11",
28
- "@stone-js/browser-adapter": "^0.8.11",
21
+ "@stone-js/env": "^0.8.12",
22
+ "@stone-js/http-core": "^0.8.12",
23
+ "@stone-js/node-http-adapter": "^0.8.12",
24
+ "@stone-js/router": "^0.8.12",
25
+ "@stone-js/filesystem": "^0.8.12",
26
+ "@stone-js/core": "^0.8.12",
27
+ "@stone-js/use-react": "^0.8.12",
28
+ "@stone-js/browser-adapter": "^0.8.12",
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.11",
38
- "@stone-js/testing": "^0.8.11",
37
+ "@stone-js/cli": "^0.8.12",
38
+ "@stone-js/testing": "^0.8.12",
39
39
  "@types/axios": "^0.14.4",
40
40
  "@types/node": "^24.0.7",
41
41
  "@types/react": "^19.0.7",
@@ -35,7 +35,7 @@ export const AppLayout = (): IPageLayout => ({
35
35
  </div>
36
36
 
37
37
  <footer className='app-footer'>
38
- Stone.js &copy; 2025 Stone Foundation
38
+ &copy; {new Date().getFullYear()} Your Company · Built with Stone.js
39
39
  </footer>
40
40
  </div>
41
41
  )
@@ -31,7 +31,7 @@ export const ErrorLayout = (): IPageLayout => ({
31
31
  </main>
32
32
  <footer className='mt-24'>
33
33
  <div className='container'>
34
- <p className='px-24 text-muted'>2025 Stone.js &copy; Noowow Labs</p>
34
+ <p className='px-24 text-muted'>&copy; {new Date().getFullYear()} Your Company · Built with Stone.js</p>
35
35
  </div>
36
36
  </footer>
37
37
  </>
@@ -29,7 +29,7 @@ export const SecurityLayout = (): IPageLayout => ({
29
29
  </main>
30
30
  <footer className='mt-24'>
31
31
  <div className='container'>
32
- <p className='px-24 text-muted'>2025 Stone.js &copy; Noowow Labs</p>
32
+ <p className='px-24 text-muted'>&copy; {new Date().getFullYear()} Your Company · Built with Stone.js</p>
33
33
  </div>
34
34
  </footer>
35
35
  </>
@@ -31,7 +31,7 @@ export const SettingsLayout = (): IPageLayout => ({
31
31
  </div>
32
32
 
33
33
  <footer className='app-footer'>
34
- Stone.js &copy; 2025 Stone Foundation
34
+ &copy; {new Date().getFullYear()} Your Company · Built with Stone.js
35
35
  </footer>
36
36
  </div>
37
37
  )
@@ -18,14 +18,14 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/env": "^0.8.11",
22
- "@stone-js/http-core": "^0.8.11",
23
- "@stone-js/node-http-adapter": "^0.8.11",
24
- "@stone-js/router": "^0.8.11",
25
- "@stone-js/filesystem": "^0.8.11",
26
- "@stone-js/core": "^0.8.11",
27
- "@stone-js/use-react": "^0.8.11",
28
- "@stone-js/browser-adapter": "^0.8.11",
21
+ "@stone-js/env": "^0.8.12",
22
+ "@stone-js/http-core": "^0.8.12",
23
+ "@stone-js/node-http-adapter": "^0.8.12",
24
+ "@stone-js/router": "^0.8.12",
25
+ "@stone-js/filesystem": "^0.8.12",
26
+ "@stone-js/core": "^0.8.12",
27
+ "@stone-js/use-react": "^0.8.12",
28
+ "@stone-js/browser-adapter": "^0.8.12",
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.11",
39
- "@stone-js/testing": "^0.8.11",
38
+ "@stone-js/cli": "^0.8.12",
39
+ "@stone-js/testing": "^0.8.12",
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.11",
26
- "@stone-js/env": "^0.8.11",
27
- "@stone-js/filesystem": "^0.8.11",
28
- "@stone-js/http-core": "^0.8.11",
29
- "@stone-js/node-cli-adapter": "^0.8.11",
30
- "@stone-js/node-http-adapter": "^0.8.11",
31
- "@stone-js/pipeline": "^0.8.11",
32
- "@stone-js/router": "^0.8.11",
25
+ "@stone-js/core": "^0.8.12",
26
+ "@stone-js/env": "^0.8.12",
27
+ "@stone-js/filesystem": "^0.8.12",
28
+ "@stone-js/http-core": "^0.8.12",
29
+ "@stone-js/node-cli-adapter": "^0.8.12",
30
+ "@stone-js/node-http-adapter": "^0.8.12",
31
+ "@stone-js/pipeline": "^0.8.12",
32
+ "@stone-js/router": "^0.8.12",
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.11",
42
- "@stone-js/testing": "^0.8.11",
41
+ "@stone-js/cli": "^0.8.12",
42
+ "@stone-js/testing": "^0.8.12",
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.11",
26
- "@stone-js/env": "^0.8.11",
27
- "@stone-js/filesystem": "^0.8.11",
28
- "@stone-js/http-core": "^0.8.11",
29
- "@stone-js/node-cli-adapter": "^0.8.11",
30
- "@stone-js/node-http-adapter": "^0.8.11",
31
- "@stone-js/pipeline": "^0.8.11",
32
- "@stone-js/router": "^0.8.11",
25
+ "@stone-js/core": "^0.8.12",
26
+ "@stone-js/env": "^0.8.12",
27
+ "@stone-js/filesystem": "^0.8.12",
28
+ "@stone-js/http-core": "^0.8.12",
29
+ "@stone-js/node-cli-adapter": "^0.8.12",
30
+ "@stone-js/node-http-adapter": "^0.8.12",
31
+ "@stone-js/pipeline": "^0.8.12",
32
+ "@stone-js/router": "^0.8.12",
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.11",
42
- "@stone-js/testing": "^0.8.11",
41
+ "@stone-js/cli": "^0.8.12",
42
+ "@stone-js/testing": "^0.8.12",
43
43
  "@types/jsonwebtoken": "^9.0.8",
44
44
  "@types/node": "^24.0.3",
45
45
  "@vitest/coverage-v8": "^3.0.9",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stone-js/starters",
3
- "version": "0.8.11",
3
+ "version": "0.8.12",
4
4
  "description": "This repository contains official **starter templates** for Stone.js applications.",
5
5
  "author": "Mr. Stone <evensstone@gmail.com>",
6
6
  "license": "MIT",
@@ -72,6 +72,32 @@
72
72
  ],
73
73
  "path": "basic-react-imperative"
74
74
  },
75
+ {
76
+ "value": "basic-react-native-declarative",
77
+ "title": "Basic · React Native · declarative (Expo)",
78
+ "description": "Minimal native mobile app with React Native and Expo, decorator API.",
79
+ "tags": [
80
+ "react-native",
81
+ "expo",
82
+ "mobile",
83
+ "basic",
84
+ "declarative"
85
+ ],
86
+ "path": "basic-react-native-declarative"
87
+ },
88
+ {
89
+ "value": "basic-react-native-imperative",
90
+ "title": "Basic · React Native · imperative (Expo)",
91
+ "description": "Minimal native mobile app with React Native and Expo, imperative API.",
92
+ "tags": [
93
+ "react-native",
94
+ "expo",
95
+ "mobile",
96
+ "basic",
97
+ "imperative"
98
+ ],
99
+ "path": "basic-react-native-imperative"
100
+ },
75
101
  {
76
102
  "value": "standard-service-declarative",
77
103
  "title": "Standard · service · declarative",
@@ -170,19 +196,6 @@
170
196
  ],
171
197
  "path": "full-react-imperative"
172
198
  },
173
- {
174
- "value": "basic-react-native-declarative",
175
- "title": "Basic · React Native · declarative (Expo)",
176
- "description": "Native mobile app with React Native and Expo, decorator API.",
177
- "tags": [
178
- "react-native",
179
- "expo",
180
- "mobile",
181
- "basic",
182
- "declarative"
183
- ],
184
- "path": "basic-react-native-declarative"
185
- },
186
199
  {
187
200
  "value": "continuum-showcase",
188
201
  "title": "Continuum showcase",
@@ -217,6 +230,8 @@
217
230
  "basic-service-imperative",
218
231
  "basic-react-declarative",
219
232
  "basic-react-imperative",
233
+ "basic-react-native-declarative",
234
+ "basic-react-native-imperative",
220
235
  "standard-service-declarative",
221
236
  "standard-service-imperative",
222
237
  "standard-react-declarative",
@@ -225,7 +240,6 @@
225
240
  "full-service-imperative",
226
241
  "full-react-declarative",
227
242
  "full-react-imperative",
228
- "basic-react-native-declarative",
229
243
  "continuum-showcase"
230
244
  ],
231
245
  "publishConfig": {
@@ -20,20 +20,20 @@
20
20
  "dependencies": {
21
21
  "react": "^19.0.0",
22
22
  "react-dom": "^19.0.0",
23
- "@stone-js/use-react": "^0.8.11",
24
- "@stone-js/browser-adapter": "^0.8.11",
25
- "@stone-js/pipeline": "^0.8.11",
26
- "@stone-js/http-core": "^0.8.11",
27
- "@stone-js/node-http-adapter": "^0.8.11",
28
- "@stone-js/router": "^0.8.11",
29
- "@stone-js/core": "^0.8.11"
23
+ "@stone-js/use-react": "^0.8.12",
24
+ "@stone-js/browser-adapter": "^0.8.12",
25
+ "@stone-js/pipeline": "^0.8.12",
26
+ "@stone-js/http-core": "^0.8.12",
27
+ "@stone-js/node-http-adapter": "^0.8.12",
28
+ "@stone-js/router": "^0.8.12",
29
+ "@stone-js/core": "^0.8.12"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@babel/plugin-proposal-decorators": "^7.25.9",
33
33
  "@babel/preset-env": "^7.26.9",
34
34
  "@babel/preset-typescript": "^7.27.0",
35
- "@stone-js/cli": "^0.8.11",
36
- "@stone-js/testing": "^0.8.11",
35
+ "@stone-js/cli": "^0.8.12",
36
+ "@stone-js/testing": "^0.8.12",
37
37
  "@types/node": "^24.0.7",
38
38
  "@types/react": "^19.0.7",
39
39
  "@types/react-dom": "^19.0.3",
@@ -20,20 +20,20 @@
20
20
  "dependencies": {
21
21
  "react": "^19.0.0",
22
22
  "react-dom": "^19.0.0",
23
- "@stone-js/use-react": "^0.8.11",
24
- "@stone-js/browser-adapter": "^0.8.11",
25
- "@stone-js/pipeline": "^0.8.11",
26
- "@stone-js/http-core": "^0.8.11",
27
- "@stone-js/node-http-adapter": "^0.8.11",
28
- "@stone-js/router": "^0.8.11",
29
- "@stone-js/core": "^0.8.11"
23
+ "@stone-js/use-react": "^0.8.12",
24
+ "@stone-js/browser-adapter": "^0.8.12",
25
+ "@stone-js/pipeline": "^0.8.12",
26
+ "@stone-js/http-core": "^0.8.12",
27
+ "@stone-js/node-http-adapter": "^0.8.12",
28
+ "@stone-js/router": "^0.8.12",
29
+ "@stone-js/core": "^0.8.12"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@babel/plugin-proposal-decorators": "^7.25.9",
33
33
  "@babel/preset-env": "^7.26.9",
34
34
  "@babel/preset-typescript": "^7.27.0",
35
- "@stone-js/cli": "^0.8.11",
36
- "@stone-js/testing": "^0.8.11",
35
+ "@stone-js/cli": "^0.8.12",
36
+ "@stone-js/testing": "^0.8.12",
37
37
  "@types/node": "^24.0.7",
38
38
  "@types/react": "^19.0.7",
39
39
  "@types/react-dom": "^19.0.3",
@@ -18,18 +18,18 @@
18
18
  "test:cvg": "stone test --coverage"
19
19
  },
20
20
  "dependencies": {
21
- "@stone-js/pipeline": "^0.8.11",
22
- "@stone-js/http-core": "^0.8.11",
23
- "@stone-js/node-http-adapter": "^0.8.11",
24
- "@stone-js/router": "^0.8.11",
25
- "@stone-js/core": "^0.8.11"
21
+ "@stone-js/pipeline": "^0.8.12",
22
+ "@stone-js/http-core": "^0.8.12",
23
+ "@stone-js/node-http-adapter": "^0.8.12",
24
+ "@stone-js/router": "^0.8.12",
25
+ "@stone-js/core": "^0.8.12"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@babel/plugin-proposal-decorators": "^7.25.9",
29
29
  "@babel/preset-env": "^7.26.9",
30
30
  "@babel/preset-typescript": "^7.27.0",
31
- "@stone-js/cli": "^0.8.11",
32
- "@stone-js/testing": "^0.8.11",
31
+ "@stone-js/cli": "^0.8.12",
32
+ "@stone-js/testing": "^0.8.12",
33
33
  "@types/node": "^24.0.7",
34
34
  "@vitest/coverage-v8": "^3.0.9",
35
35
  "vitest": "^3.0.9"
@@ -17,18 +17,18 @@
17
17
  "test:cvg": "stone test --coverage"
18
18
  },
19
19
  "dependencies": {
20
- "@stone-js/pipeline": "^0.8.11",
21
- "@stone-js/http-core": "^0.8.11",
22
- "@stone-js/node-http-adapter": "^0.8.11",
23
- "@stone-js/router": "^0.8.11",
24
- "@stone-js/core": "^0.8.11"
20
+ "@stone-js/pipeline": "^0.8.12",
21
+ "@stone-js/http-core": "^0.8.12",
22
+ "@stone-js/node-http-adapter": "^0.8.12",
23
+ "@stone-js/router": "^0.8.12",
24
+ "@stone-js/core": "^0.8.12"
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.11",
31
- "@stone-js/testing": "^0.8.11",
30
+ "@stone-js/cli": "^0.8.12",
31
+ "@stone-js/testing": "^0.8.12",
32
32
  "@types/node": "^24.0.7",
33
33
  "@vitest/coverage-v8": "^3.0.9",
34
34
  "vitest": "^3.0.9"