@voltro/cli 0.2.2 → 0.4.0
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/CHANGELOG.md +49 -0
- package/THIRD-PARTY-NOTICES.md +234 -1
- package/bin/voltro.mjs +71 -1
- package/dist/apiBuild-CvtQeBMs.js +190 -0
- package/dist/apiBuild-DQBNqNZ8.js +2 -0
- package/dist/bin.js +2 -2
- package/dist/{commands-DQy4812j.js → commands-DhyBIs1O.js} +2381 -1768
- package/dist/{dev--jHe1vcu.js → dev-CQxbrpDz.js} +1677 -1626
- package/dist/dev-DYjGqPGD.js +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/serveCommand-BZzUJIyo.js +1077 -0
- package/dist/serveEntry.js +2 -2
- package/package.json +22 -19
- package/templates/AGENTS.core.md +61 -0
- package/templates/AGENTS.md +61 -0
- package/templates/agent-docs/_manifest.json +4 -4
- package/templates/agent-docs/ai.md +28 -0
- package/templates/agent-docs/authentication.md +5 -2
- package/templates/agent-docs/cli.md +98 -0
- package/templates/agent-docs/data.md +193 -3
- package/templates/agent-docs/database/advancedqueries.md +29 -0
- package/templates/agent-docs/database/querying.md +2 -0
- package/templates/agent-docs/deployment.md +3 -1
- package/templates/agent-docs/internationalization.md +237 -2
- package/templates/agent-docs/observability.md +9 -0
- package/templates/agent-docs/plugins.md +2 -2
- package/templates/agent-docs/reference.md +76 -0
- package/templates/agent-docs/schema-driven-ui.md +551 -2
- package/templates/agent-docs/templates/apibackends.md +10 -8
- package/templates/agent-docs/templates/overview.md +1 -1
- package/templates/agent-docs/testing.md +177 -3
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/README.md +9 -4
- package/templates/apps/api-rbac/mutations/notes.create.mutation.server.ts +1 -1
- package/templates/apps/api-rbac/mutations/notes.create.mutation.ts +6 -6
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rbac/tests/notes.create.test.ts +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +8 -8
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/baselines/compose/docker/api.Dockerfile +10 -5
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +10 -5
- package/dist/apiBuild-OpZROja5.js +0 -2
- package/dist/apiBuild-o70rjpVJ.js +0 -184
- package/dist/dev-BKkZglQV.js +0 -2
- package/dist/serveCommand-93rRdEp0.js +0 -1077
|
@@ -19,7 +19,7 @@ pnpm --filter @{{projectName}}/{{appName}} dev
|
|
|
19
19
|
scopes and stamps them on the subject.
|
|
20
20
|
- **Guard with `permission()`** — `notes.create` calls
|
|
21
21
|
`permission(ctx, 'notes:write')`, the Effect-native guard. It fails typed
|
|
22
|
-
`
|
|
22
|
+
`ScopeError` when the caller lacks the scope; `admin:full` is a blanket bypass.
|
|
23
23
|
Companions: `anyPermission(ctx, [...])` (OR), `assertPermission` (sync throw),
|
|
24
24
|
`can(ctx, scope)` (boolean).
|
|
25
25
|
- **Where roles come from** — the shipped `resolveRoles` is a DEMO that maps
|
|
@@ -35,20 +35,25 @@ curl -s localhost:4000/_voltro/inspect/invoke -H 'content-type: application/json
|
|
|
35
35
|
-d '{"tag":"notes.create","input":{"title":"hi","body":"x"}}'
|
|
36
36
|
# → { ok:true, result:{ id, … } }
|
|
37
37
|
|
|
38
|
-
# readers tenant → viewer → notes:write missing → typed
|
|
38
|
+
# readers tenant → viewer → notes:write missing → typed ScopeError:
|
|
39
39
|
curl -s localhost:4000/_voltro/inspect/invoke -H 'content-type: application/json' -H 'x-tenant: readers' \
|
|
40
40
|
-d '{"tag":"notes.create","input":{"title":"hi","body":"x"}}'
|
|
41
|
-
# → { ok:false, error:{ _tag:"
|
|
41
|
+
# → { ok:false, error:{ _tag:"ScopeError", required:"notes:write" } }
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
## On the web side
|
|
45
45
|
|
|
46
46
|
```tsx
|
|
47
|
-
import { useCan } from '@voltro/
|
|
47
|
+
import { PermissionProvider, useCan } from '@voltro/client'
|
|
48
|
+
|
|
49
|
+
<PermissionProvider scopes={session.scopes}>…</PermissionProvider>
|
|
48
50
|
const canWrite = useCan('notes:write')
|
|
49
51
|
{canWrite && <NewNoteButton />} // hide affordances the user can't use
|
|
50
52
|
```
|
|
51
53
|
|
|
54
|
+
The UI gate ships in `@voltro/client`, not in the plugin: scopes are a framework
|
|
55
|
+
concept, so gating a button must not require an rbac dependency.
|
|
56
|
+
|
|
52
57
|
`useCan` is a UI affordance only — the server `permission()` guard is the real
|
|
53
58
|
enforcement. Never trust the client.
|
|
54
59
|
|
|
@@ -5,7 +5,7 @@ import { Effect } from 'effect'
|
|
|
5
5
|
|
|
6
6
|
const execute = (input: { title: string; body: string }, ctx: AppContext) =>
|
|
7
7
|
Effect.gen(function* () {
|
|
8
|
-
// RBAC guard — passes for editor/admin, fails typed
|
|
8
|
+
// RBAC guard — passes for editor/admin, fails typed ScopeError for viewer.
|
|
9
9
|
yield* permission(ctx, 'notes:write')
|
|
10
10
|
|
|
11
11
|
const store = yield* EffectStore
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Creates a note — requires the `notes:write` scope. The executor guards with
|
|
2
2
|
// `permission(ctx, 'notes:write')`, the Effect-native RBAC guard that fails
|
|
3
|
-
// typed `
|
|
4
|
-
// Declaring `error:
|
|
3
|
+
// typed `ScopeError` when the caller's resolved scopes don't include it.
|
|
4
|
+
// Declaring `error: ScopeError` surfaces that to the client typed.
|
|
5
5
|
//
|
|
6
|
-
// `
|
|
6
|
+
// `ScopeError` is the ONE framework-wide denial tag, from the browser-safe
|
|
7
|
+
// `@voltro/protocol` (rbac guards and declarative `guards:` fail with it alike).
|
|
7
8
|
|
|
8
|
-
import { defineMutation } from '@voltro/protocol'
|
|
9
|
-
import { Forbidden } from '@voltro/plugin-rbac/errors'
|
|
9
|
+
import { defineMutation, ScopeError } from '@voltro/protocol'
|
|
10
10
|
import { Schema } from 'effect'
|
|
11
11
|
|
|
12
12
|
export const createNote = defineMutation({
|
|
@@ -22,5 +22,5 @@ export const createNote = defineMutation({
|
|
|
22
22
|
body: Schema.String,
|
|
23
23
|
tenantId: Schema.String,
|
|
24
24
|
}),
|
|
25
|
-
error:
|
|
25
|
+
error: ScopeError,
|
|
26
26
|
})
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.
|
|
19
|
-
"@voltro/plugin-rbac": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.4.0",
|
|
19
|
+
"@voltro/plugin-rbac": "0.4.0",
|
|
20
|
+
"@voltro/protocol": "0.4.0",
|
|
21
|
+
"@voltro/runtime": "0.4.0",
|
|
22
22
|
"effect": "^3.21.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.4.0",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
27
27
|
"vitest": "^3.0.0"
|
|
28
28
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Unit test for `notes.create` — driven through `@voltro/testing`.
|
|
2
2
|
//
|
|
3
3
|
// This executor is Effect-native: it `yield*`s the RBAC guard
|
|
4
|
-
// `permission(ctx, 'notes:write')` (fails typed `
|
|
4
|
+
// `permission(ctx, 'notes:write')` (fails typed `ScopeError` for a caller
|
|
5
5
|
// lacking the scope) and then `yield* EffectStore` to insert. `makeTestContext`
|
|
6
6
|
// exposes the mixin-wrapped store as `ctx.store`; we provide it to the Effect as
|
|
7
7
|
// the `EffectStore` layer via `makeEffectStoreLayer` — the SAME wiring the CLI
|
|
@@ -20,7 +20,7 @@ import { makeEffectStoreLayer } from '@voltro/runtime'
|
|
|
20
20
|
import { database } from '../database/schema' // registers actors / tenants / notes
|
|
21
21
|
import { createNote } from '../mutations/notes.create.mutation'
|
|
22
22
|
import createNoteHandler from '../mutations/notes.create.mutation.server'
|
|
23
|
-
import {
|
|
23
|
+
import { ScopeError } from '@voltro/protocol'
|
|
24
24
|
|
|
25
25
|
// Run the Effect-native executor with the test store provided as EffectStore.
|
|
26
26
|
const runExec = (input: { title: string; body: string }, ctx: ReturnType<typeof makeTestContext>) =>
|
|
@@ -28,7 +28,7 @@ const runExec = (input: { title: string; body: string }, ctx: ReturnType<typeof
|
|
|
28
28
|
|
|
29
29
|
// Same, but returns the raw Exit so a typed failure can be inspected WITHOUT
|
|
30
30
|
// the `FiberFailure` wrapper `runPromise` throws (which would defeat a plain
|
|
31
|
-
// `instanceof
|
|
31
|
+
// `instanceof ScopeError` assertion). Unwrap the Cause to get the real error.
|
|
32
32
|
const runExit = (input: { title: string; body: string }, ctx: ReturnType<typeof makeTestContext>) =>
|
|
33
33
|
Effect.runPromiseExit(createNoteHandler(input, ctx).pipe(Effect.provide(makeEffectStoreLayer(ctx.store))))
|
|
34
34
|
|
|
@@ -50,7 +50,7 @@ describe('notes.create', () => {
|
|
|
50
50
|
expect(rows).toHaveLength(1)
|
|
51
51
|
})
|
|
52
52
|
|
|
53
|
-
it('rejects a caller WITHOUT notes:write with typed
|
|
53
|
+
it('rejects a caller WITHOUT notes:write with typed ScopeError — nothing written', async () => {
|
|
54
54
|
const ctx = makeTestContext({
|
|
55
55
|
subject: { type: 'user', id: 'viewer_1', tenantId: 'acme', scopes: [] },
|
|
56
56
|
store: mockStore({ notes: [] }),
|
|
@@ -60,13 +60,13 @@ describe('notes.create', () => {
|
|
|
60
60
|
|
|
61
61
|
expect(Exit.isFailure(exit)).toBe(true)
|
|
62
62
|
const failure = Exit.isFailure(exit) ? Cause.failureOption(exit.cause) : Option.none()
|
|
63
|
-
expect(Option.getOrThrow(failure)).toBeInstanceOf(
|
|
63
|
+
expect(Option.getOrThrow(failure)).toBeInstanceOf(ScopeError)
|
|
64
64
|
|
|
65
65
|
const rows = await ctx.store.query(database.notes.descriptor)
|
|
66
66
|
expect(rows).toHaveLength(0)
|
|
67
67
|
})
|
|
68
68
|
|
|
69
|
-
it('pins the descriptor: name, input decode + the declared
|
|
69
|
+
it('pins the descriptor: name, input decode + the declared ScopeError error', () => {
|
|
70
70
|
expect(createNote.name).toBe('notes.create')
|
|
71
71
|
|
|
72
72
|
const decoded = Schema.decodeUnknownSync(createNote.input)({ title: 'ok', body: 'b' })
|
|
@@ -74,7 +74,7 @@ describe('notes.create', () => {
|
|
|
74
74
|
// Empty title is rejected at the input Schema (NonEmptyString).
|
|
75
75
|
expect(() => Schema.decodeUnknownSync(createNote.input)({ title: '', body: '' })).toThrow()
|
|
76
76
|
|
|
77
|
-
const
|
|
78
|
-
expect(Schema.is(
|
|
77
|
+
const denied = new ScopeError({ required: 'notes:write', message: 'missing required permission' })
|
|
78
|
+
expect(Schema.is(ScopeError)(denied)).toBe(true)
|
|
79
79
|
})
|
|
80
80
|
})
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/plugin-openapi": "0.
|
|
18
|
-
"@voltro/protocol": "0.
|
|
19
|
-
"@voltro/runtime": "0.
|
|
20
|
-
"@voltro/sql-postgres": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/plugin-openapi": "0.4.0",
|
|
18
|
+
"@voltro/protocol": "0.4.0",
|
|
19
|
+
"@voltro/runtime": "0.4.0",
|
|
20
|
+
"@voltro/sql-postgres": "0.4.0",
|
|
21
21
|
"effect": "^3.21.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/testing": "0.
|
|
24
|
+
"@voltro/testing": "0.4.0",
|
|
25
25
|
"typescript": "^5.7.0",
|
|
26
26
|
"vitest": "^3.0.0"
|
|
27
27
|
}
|
|
@@ -12,20 +12,20 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/plugin-analytics-postgres": "0.
|
|
18
|
-
"@voltro/plugin-billing": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/plugin-notifications": "0.
|
|
21
|
-
"@voltro/plugin-presence": "0.
|
|
22
|
-
"@voltro/protocol": "0.
|
|
23
|
-
"@voltro/runtime": "0.
|
|
24
|
-
"@voltro/sql-postgres": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/plugin-analytics-postgres": "0.4.0",
|
|
18
|
+
"@voltro/plugin-billing": "0.4.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.4.0",
|
|
20
|
+
"@voltro/plugin-notifications": "0.4.0",
|
|
21
|
+
"@voltro/plugin-presence": "0.4.0",
|
|
22
|
+
"@voltro/protocol": "0.4.0",
|
|
23
|
+
"@voltro/runtime": "0.4.0",
|
|
24
|
+
"@voltro/sql-postgres": "0.4.0",
|
|
25
25
|
"effect": "^3.21.2"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@voltro/testing": "0.
|
|
28
|
+
"@voltro/testing": "0.4.0",
|
|
29
29
|
"typescript": "^5.7.0",
|
|
30
30
|
"vitest": "^3.0.0"
|
|
31
31
|
}
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.
|
|
19
|
-
"@voltro/plugin-search": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.4.0",
|
|
19
|
+
"@voltro/plugin-search": "0.4.0",
|
|
20
|
+
"@voltro/protocol": "0.4.0",
|
|
21
|
+
"@voltro/runtime": "0.4.0",
|
|
22
22
|
"effect": "^3.21.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.4.0",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
27
27
|
"vitest": "^3.0.0"
|
|
28
28
|
}
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.
|
|
19
|
-
"@voltro/plugin-versioning": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.4.0",
|
|
19
|
+
"@voltro/plugin-versioning": "0.4.0",
|
|
20
|
+
"@voltro/protocol": "0.4.0",
|
|
21
|
+
"@voltro/runtime": "0.4.0",
|
|
22
22
|
"effect": "^3.21.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.4.0",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
27
27
|
"vitest": "^3.0.0"
|
|
28
28
|
}
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.96.1",
|
|
14
14
|
"@effect/rpc": "^0.75.1",
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/plugin-multitenancy": "0.
|
|
18
|
-
"@voltro/plugin-webhooks": "0.
|
|
19
|
-
"@voltro/protocol": "0.
|
|
20
|
-
"@voltro/runtime": "0.
|
|
21
|
-
"@voltro/sql-postgres": "0.
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/database": "0.4.0",
|
|
17
|
+
"@voltro/plugin-multitenancy": "0.4.0",
|
|
18
|
+
"@voltro/plugin-webhooks": "0.4.0",
|
|
19
|
+
"@voltro/protocol": "0.4.0",
|
|
20
|
+
"@voltro/runtime": "0.4.0",
|
|
21
|
+
"@voltro/sql-postgres": "0.4.0",
|
|
22
22
|
"effect": "^3.21.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.4.0",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
27
27
|
"vitest": "^3.0.0"
|
|
28
28
|
}
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/changelog": "0.
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/changelog": "0.4.0",
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/client": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/i18n": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@{{projectName}}/api": "0.
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/ui-shadcn": "0.
|
|
20
|
-
"@voltro/web": "0.
|
|
14
|
+
"@{{projectName}}/api": "0.4.0",
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/client": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/i18n": "0.4.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
20
|
+
"@voltro/web": "0.4.0",
|
|
21
21
|
"react": "^19.0.0",
|
|
22
22
|
"react-dom": "^19.0.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.4.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"typescript": "^5.7.0",
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
"typecheck": "tsc --noEmit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@{{projectName}}/api": "0.
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/ui-shadcn": "0.
|
|
20
|
-
"@voltro/web": "0.
|
|
14
|
+
"@{{projectName}}/api": "0.4.0",
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/client": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/i18n": "0.4.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
20
|
+
"@voltro/web": "0.4.0",
|
|
21
21
|
"react": "^19.0.0",
|
|
22
22
|
"react-dom": "^19.0.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.4.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"typecheck": "tsc --noEmit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@effect/platform": "^0.96.1",
|
|
17
|
-
"@voltro/cli": "0.
|
|
18
|
-
"@voltro/client": "0.
|
|
19
|
-
"@voltro/env": "0.
|
|
20
|
-
"@voltro/i18n": "0.
|
|
21
|
-
"@voltro/serverless": "0.
|
|
22
|
-
"@voltro/web": "0.
|
|
17
|
+
"@voltro/cli": "0.4.0",
|
|
18
|
+
"@voltro/client": "0.4.0",
|
|
19
|
+
"@voltro/env": "0.4.0",
|
|
20
|
+
"@voltro/i18n": "0.4.0",
|
|
21
|
+
"@voltro/serverless": "0.4.0",
|
|
22
|
+
"@voltro/web": "0.4.0",
|
|
23
23
|
"effect": "^3.21.2",
|
|
24
24
|
"react": "^19.0.0",
|
|
25
25
|
"react-dom": "^19.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@voltro/devtools": "0.
|
|
28
|
+
"@voltro/devtools": "0.4.0",
|
|
29
29
|
"@types/react": "^19.0.0",
|
|
30
30
|
"@types/react-dom": "^19.0.0",
|
|
31
31
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/web": "0.4.0",
|
|
19
19
|
"react": "^19.0.0",
|
|
20
20
|
"react-dom": "^19.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@voltro/devtools": "0.
|
|
23
|
+
"@voltro/devtools": "0.4.0",
|
|
24
24
|
"@types/react": "^19.0.0",
|
|
25
25
|
"@types/react-dom": "^19.0.0",
|
|
26
26
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"typecheck": "tsc --noEmit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"typecheck": "tsc --noEmit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/client": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/i18n": "0.
|
|
18
|
-
"@voltro/ui-shadcn": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
14
|
+
"@voltro/cli": "0.4.0",
|
|
15
|
+
"@voltro/client": "0.4.0",
|
|
16
|
+
"@voltro/env": "0.4.0",
|
|
17
|
+
"@voltro/i18n": "0.4.0",
|
|
18
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
19
|
+
"@voltro/web": "0.4.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.4.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"typescript": "^5.7.0",
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@{{projectName}}/api": "0.
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/ui-shadcn": "0.
|
|
20
|
-
"@voltro/web": "0.
|
|
14
|
+
"@{{projectName}}/api": "0.4.0",
|
|
15
|
+
"@voltro/cli": "0.4.0",
|
|
16
|
+
"@voltro/client": "0.4.0",
|
|
17
|
+
"@voltro/env": "0.4.0",
|
|
18
|
+
"@voltro/i18n": "0.4.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.4.0",
|
|
20
|
+
"@voltro/web": "0.4.0",
|
|
21
21
|
"react": "^19.0.0",
|
|
22
22
|
"react-dom": "^19.0.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.4.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"typescript": "^5.7.0",
|