@voltro/cli 0.50.1 → 0.51.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 +104 -0
- package/dist/{apiBuild-D3s7lx57.js → apiBuild-CPDHXF72.js} +2 -2
- package/dist/apiBuild-GDKuGOMV.js +2 -0
- package/dist/appGraph-CFmFKHb2.js +2 -0
- package/dist/appGraph-yRuKjOba.js +111 -0
- package/dist/bin.js +1 -1
- package/dist/{build-CFmqF39c.js → build-DETLZAFt.js} +271 -240
- package/dist/{checkCommand-DomvYDi1.js → checkCommand-CWcnDArJ.js} +1 -1
- package/dist/{checkCommand-DsKIjL6k.js → checkCommand-DNuPiWMc.js} +29 -28
- package/dist/{codegenCommand-C0S27nbB.js → codegenCommand-BNBHcNNj.js} +2 -2
- package/dist/{codemodRunner-DwY8Rjbl.js → codemodRunner-BDVixlSw.js} +278 -191
- package/dist/{commands-Brp4DI8u.js → commands-B1OiS9bX.js} +24 -23
- package/dist/{dashboardCommand-bbLfc9FW.js → dashboardCommand-C-vvPY1B.js} +5 -5
- package/dist/{dataCommand-k9mXTXin.js → dataCommand-C1GxXW5q.js} +279 -233
- package/dist/dbCommand-C27HIsGE.js +2 -0
- package/dist/{dbCommand-Bf7Cy0mn.js → dbCommand-If4Y1xQ-.js} +1 -1
- package/dist/{dev-Dz9GqA6P.js → dev-CK522MV5.js} +1 -1
- package/dist/{dev-C0cbqysu.js → dev-kdAg9Q7l.js} +1246 -1246
- package/dist/doctorCommand-BK4l18eG.js +2 -0
- package/dist/{doctorCommand-DyViaaCP.js → doctorCommand-nKmeW78u.js} +16 -16
- package/dist/{dormancyCommand-DMZPA_HW.js → dormancyCommand-CY3wa_SW.js} +1 -1
- package/dist/{embeddingsCommand-CMxRPkg6.js → embeddingsCommand-BDLIgje_.js} +1 -1
- package/dist/{envCommand-CDLr-yD4.js → envCommand-C6V_xVlT.js} +13 -13
- package/dist/{evolveCommand-Ct4NesL3.js → evolveCommand-D3c4DSfN.js} +2 -2
- package/dist/{generateCommand-BDdOxhnv.js → generateCommand-DTNPGjxo.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{infoCommand-orsKJKUy.js → infoCommand-BnRFEF1o.js} +1 -1
- package/dist/{migrate-D3MK9BpK.js → migrate-DehuBakM.js} +1 -1
- package/dist/{runtimeTrace-Bo8jWsNe.js → runtimeTrace-ZsBU7Tkx.js} +1 -1
- package/dist/{sdkgen-OZhiT2vz.js → sdkgen-O4XqWOjM.js} +1 -1
- package/dist/serveCommand-BRnPCxVd.js +2 -0
- package/dist/{serveCommand-YbD5VgfV.js → serveCommand-DdiYNBBu.js} +3 -3
- package/dist/serveEntry.js +1 -1
- package/dist/{start-B1nH9ahf.js → start-BLNmWkLa.js} +331 -327
- package/dist/{start-7b_bL8Uc.js → start-Dzicuyw8.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/{updateCommand-BgH6vTtq.js → updateCommand-Bs322Q78.js} +1 -1
- package/dist/updateCommand-eXB35SEv.js +2 -0
- package/dist/{webDev-BbdkzMbd.js → webDev-B-ubQEMX.js} +282 -223
- package/dist/webDev-DposiF3j.js +2 -0
- package/dist/{webhooksCommand-DjE6u0r4.js → webhooksCommand-FLYY9IXh.js} +1 -1
- package/package.json +35 -17
- package/templates/AGENTS.core.md +15 -5
- package/templates/AGENTS.md +16 -6
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/cli.md +29 -0
- package/templates/agent-docs/internationalization.md +131 -13
- package/templates/agent-docs/whats-new.md +75 -27
- 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-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/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/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- 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 +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- 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-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- 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/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-BZ-plaQN.js +0 -2
- package/dist/appGraph-CM9wvUmD.js +0 -2
- package/dist/appGraph-Cv2W_wO5.js +0 -111
- package/dist/dbCommand-Bnl7MSGC.js +0 -2
- package/dist/doctorCommand-BlciWUJb.js +0 -2
- package/dist/serveCommand-Bbgg7Paq.js +0 -2
- package/dist/updateCommand-BweY17z-.js +0 -2
- package/dist/webDev-BcRFTsMA.js +0 -2
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
15
|
+
"@voltro/cli": "0.51.0",
|
|
16
|
+
"@voltro/client": "0.51.0",
|
|
17
|
+
"@voltro/env": "0.51.0",
|
|
18
|
+
"@voltro/i18n": "0.51.0",
|
|
19
|
+
"@voltro/web": "0.51.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.51.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"jsdom": "^30.0.0",
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
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.
|
|
15
|
+
"@voltro/cli": "0.51.0",
|
|
16
|
+
"@voltro/client": "0.51.0",
|
|
17
|
+
"@voltro/env": "0.51.0",
|
|
18
|
+
"@voltro/i18n": "0.51.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
20
|
+
"@voltro/web": "0.51.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.51.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"jsdom": "^30.0.0",
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/ui-shadcn": "0.
|
|
21
|
-
"@voltro/web": "0.
|
|
15
|
+
"@{{projectName}}/api": "0.51.0",
|
|
16
|
+
"@voltro/cli": "0.51.0",
|
|
17
|
+
"@voltro/client": "0.51.0",
|
|
18
|
+
"@voltro/env": "0.51.0",
|
|
19
|
+
"@voltro/i18n": "0.51.0",
|
|
20
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
21
|
+
"@voltro/web": "0.51.0",
|
|
22
22
|
"react": "^19.0.0",
|
|
23
23
|
"react-dom": "^19.0.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
26
|
+
"@voltro/devtools": "0.51.0",
|
|
27
27
|
"@types/react": "^19.0.0",
|
|
28
28
|
"@types/react-dom": "^19.0.0",
|
|
29
29
|
"jsdom": "^30.0.0",
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/ui-shadcn": "0.
|
|
21
|
-
"@voltro/web": "0.
|
|
15
|
+
"@{{projectName}}/api": "0.51.0",
|
|
16
|
+
"@voltro/cli": "0.51.0",
|
|
17
|
+
"@voltro/client": "0.51.0",
|
|
18
|
+
"@voltro/env": "0.51.0",
|
|
19
|
+
"@voltro/i18n": "0.51.0",
|
|
20
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
21
|
+
"@voltro/web": "0.51.0",
|
|
22
22
|
"react": "^19.0.0",
|
|
23
23
|
"react-dom": "^19.0.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
26
|
+
"@voltro/devtools": "0.51.0",
|
|
27
27
|
"@types/react": "^19.0.0",
|
|
28
28
|
"@types/react-dom": "^19.0.0",
|
|
29
29
|
"jsdom": "^30.0.0",
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
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.
|
|
15
|
+
"@voltro/cli": "0.51.0",
|
|
16
|
+
"@voltro/client": "0.51.0",
|
|
17
|
+
"@voltro/env": "0.51.0",
|
|
18
|
+
"@voltro/i18n": "0.51.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
20
|
+
"@voltro/web": "0.51.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.51.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"jsdom": "^30.0.0",
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
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.
|
|
15
|
+
"@voltro/cli": "0.51.0",
|
|
16
|
+
"@voltro/client": "0.51.0",
|
|
17
|
+
"@voltro/env": "0.51.0",
|
|
18
|
+
"@voltro/i18n": "0.51.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
20
|
+
"@voltro/web": "0.51.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.51.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"jsdom": "^30.0.0",
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/ui-shadcn": "0.
|
|
21
|
-
"@voltro/web": "0.
|
|
15
|
+
"@{{projectName}}/api": "0.51.0",
|
|
16
|
+
"@voltro/cli": "0.51.0",
|
|
17
|
+
"@voltro/client": "0.51.0",
|
|
18
|
+
"@voltro/env": "0.51.0",
|
|
19
|
+
"@voltro/i18n": "0.51.0",
|
|
20
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
21
|
+
"@voltro/web": "0.51.0",
|
|
22
22
|
"react": "^19.0.0",
|
|
23
23
|
"react-dom": "^19.0.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
26
|
+
"@voltro/devtools": "0.51.0",
|
|
27
27
|
"@types/react": "^19.0.0",
|
|
28
28
|
"@types/react-dom": "^19.0.0",
|
|
29
29
|
"jsdom": "^30.0.0",
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
15
|
+
"@voltro/cli": "0.51.0",
|
|
16
|
+
"@voltro/client": "0.51.0",
|
|
17
|
+
"@voltro/env": "0.51.0",
|
|
18
|
+
"@voltro/i18n": "0.51.0",
|
|
19
|
+
"@voltro/web": "0.51.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.51.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"jsdom": "^30.0.0",
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/ui-shadcn": "0.
|
|
21
|
-
"@voltro/web": "0.
|
|
15
|
+
"@{{projectName}}/api": "0.51.0",
|
|
16
|
+
"@voltro/cli": "0.51.0",
|
|
17
|
+
"@voltro/client": "0.51.0",
|
|
18
|
+
"@voltro/env": "0.51.0",
|
|
19
|
+
"@voltro/i18n": "0.51.0",
|
|
20
|
+
"@voltro/ui-shadcn": "0.51.0",
|
|
21
|
+
"@voltro/web": "0.51.0",
|
|
22
22
|
"react": "^19.0.0",
|
|
23
23
|
"react-dom": "^19.0.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
26
|
+
"@voltro/devtools": "0.51.0",
|
|
27
27
|
"@types/react": "^19.0.0",
|
|
28
28
|
"@types/react-dom": "^19.0.0",
|
|
29
29
|
"jsdom": "^30.0.0",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@react-native-async-storage/async-storage": "1.23.1",
|
|
17
17
|
"@react-native-community/netinfo": "11.4.1",
|
|
18
|
-
"@voltro/client": "0.
|
|
19
|
-
"@voltro/react-native": "0.
|
|
20
|
-
"@{{projectName}}/api": "0.
|
|
18
|
+
"@voltro/client": "0.51.0",
|
|
19
|
+
"@voltro/react-native": "0.51.0",
|
|
20
|
+
"@{{projectName}}/api": "0.51.0",
|
|
21
21
|
"expo": "^52.0.0",
|
|
22
22
|
"expo-constants": "~17.0.0",
|
|
23
23
|
"expo-linking": "~7.0.0",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@types/node": "^22.0.0",
|
|
33
33
|
"@types/react": "^19.0.0",
|
|
34
34
|
"@vitest/coverage-v8": "^4.1.10",
|
|
35
|
-
"@voltro/cli": "0.
|
|
35
|
+
"@voltro/cli": "0.51.0",
|
|
36
36
|
"typescript": "^6.0.3",
|
|
37
37
|
"vitest": "^4.1.10"
|
|
38
38
|
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { isWireReachable as e } from "@voltro/protocol";
|
|
2
|
-
//#region src/appGraph.ts
|
|
3
|
-
var t = (e) => e.source === void 0 ? [] : typeof e.source == "string" ? [e.source] : e.source, n = (e) => ({
|
|
4
|
-
tables: new Set(e.tables),
|
|
5
|
-
procedures: new Map(e.procedures.map((e) => [e.tag, e])),
|
|
6
|
-
scopes: new Set(e.scopes ?? []),
|
|
7
|
-
input: e
|
|
8
|
-
}), r = (n) => {
|
|
9
|
-
let r = [], i = /* @__PURE__ */ new Set();
|
|
10
|
-
for (let a of n.input.procedures) {
|
|
11
|
-
for (let e of t(a)) i.add(e), n.tables.has(e) || r.push({
|
|
12
|
-
rule: "reference/dangling-source",
|
|
13
|
-
node: `${a.kind}(${a.tag})`,
|
|
14
|
-
...a.file === void 0 ? {} : { file: a.file },
|
|
15
|
-
breaks: [`reads table '${e}' which does not exist`],
|
|
16
|
-
fix: `declare a '${e}.entity.ts' table or fix the query's source`,
|
|
17
|
-
severity: "error"
|
|
18
|
-
});
|
|
19
|
-
for (let e of a.targets ?? []) i.add(e.table), n.tables.has(e.table) || r.push({
|
|
20
|
-
rule: "reference/dangling-target",
|
|
21
|
-
node: `${a.kind}(${a.tag})`,
|
|
22
|
-
...a.file === void 0 ? {} : { file: a.file },
|
|
23
|
-
breaks: [`targets table '${e.table}' (op '${e.op}') which does not exist`],
|
|
24
|
-
fix: `declare a '${e.table}.entity.ts' table or fix the mutation's target`,
|
|
25
|
-
severity: "error"
|
|
26
|
-
});
|
|
27
|
-
for (let e of a.requiresScopes ?? []) n.scopes.size > 0 && !n.scopes.has(e) && r.push({
|
|
28
|
-
rule: "rbac/unknown-scope",
|
|
29
|
-
node: `${a.kind}(${a.tag})`,
|
|
30
|
-
...a.file === void 0 ? {} : { file: a.file },
|
|
31
|
-
breaks: [`requires scope '${e}' which is not declared`],
|
|
32
|
-
fix: `declare the scope '${e}' or fix the requireScope(...) call`,
|
|
33
|
-
severity: "error"
|
|
34
|
-
});
|
|
35
|
-
a.kind === "mutation" && a.hasGuards === !1 && a.openAccess === void 0 && e(a) && r.push({
|
|
36
|
-
rule: "rbac/unguarded-mutation",
|
|
37
|
-
node: `${a.kind}(${a.tag})`,
|
|
38
|
-
...a.file === void 0 ? {} : { file: a.file },
|
|
39
|
-
breaks: [`'${a.tag}' changes state but declares no guard — any caller who can reach the rpc surface can invoke it`],
|
|
40
|
-
fix: "add a guard (e.g. `.guard(requireScope('…'))`), or confirm it is intentionally public",
|
|
41
|
-
severity: "warn"
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
for (let e of n.input.routes ?? []) for (let t of e.binds) n.procedures.has(t) || r.push({
|
|
45
|
-
rule: "binding/unknown-tag",
|
|
46
|
-
node: `route(${e.pattern})`,
|
|
47
|
-
...e.file === void 0 ? {} : { file: e.file },
|
|
48
|
-
breaks: [`binds rpc tag '${t}' which does not exist`],
|
|
49
|
-
fix: `bind an existing tag, or restore '${t}' (it may have been renamed/removed)`,
|
|
50
|
-
severity: "error"
|
|
51
|
-
});
|
|
52
|
-
for (let e of n.input.procedures) for (let t of e.targets ?? []) i.add(t.table);
|
|
53
|
-
let a = new Set(n.input.frameworkOwnedTables ?? []), o = n.input.procedures.filter((e) => e.kind === "action" && t(e).length === 0 && (e.targets ?? []).length === 0).length;
|
|
54
|
-
for (let e of n.tables) a.has(e) || i.has(e) || r.push({
|
|
55
|
-
rule: "orphan/unread-table",
|
|
56
|
-
node: `table(${e})`,
|
|
57
|
-
breaks: o > 0 ? [`no query reads and no mutation writes '${e}'`, `${o} action(s) declare neither source nor target, so one of them may still use it`] : [`no query reads and no mutation writes '${e}'`],
|
|
58
|
-
fix: o > 0 ? "declare `source`/`target` on your actions so this can be answered, then re-run" : `add a query/mutation for '${e}', or remove the table if it's dead`,
|
|
59
|
-
severity: "warn"
|
|
60
|
-
});
|
|
61
|
-
if (n.scopes.size > 0) {
|
|
62
|
-
let e = /* @__PURE__ */ new Set();
|
|
63
|
-
for (let t of n.input.procedures) for (let n of t.requiresScopes ?? []) e.add(n);
|
|
64
|
-
for (let t of [...n.scopes].sort()) t === "admin:full" || e.has(t) || r.push({
|
|
65
|
-
rule: "rbac/unenforced-scope",
|
|
66
|
-
node: `scope(${t})`,
|
|
67
|
-
breaks: [`'${t}' is granted by a role but NO query/mutation/action/stream guards on it`, "a scope nobody checks grants nothing and withholds nothing — the role map reads stricter than the app is"],
|
|
68
|
-
fix: `add \`.guard(requireScope('${t}'))\` to the handlers it is meant to protect — or, if a plugin route, a REST route, or a UI-only affordance enforces it, say so where the role is declared`,
|
|
69
|
-
severity: "warn"
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
return r;
|
|
73
|
-
}, i = (e, n) => {
|
|
74
|
-
let r = [];
|
|
75
|
-
if (n.kind === "removeTable") for (let i of e.input.procedures) {
|
|
76
|
-
let e = t(i).includes(n.name), a = (i.targets ?? []).some((e) => e.table === n.name);
|
|
77
|
-
(e || a) && r.push({
|
|
78
|
-
rule: "blast/table-removed",
|
|
79
|
-
node: `${i.kind}(${i.tag})`,
|
|
80
|
-
...i.file === void 0 ? {} : { file: i.file },
|
|
81
|
-
breaks: [`${e ? "reads" : "writes"} table '${n.name}' — would break if removed`],
|
|
82
|
-
fix: `migrate or remove ${i.tag} before dropping '${n.name}'`,
|
|
83
|
-
severity: "error"
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
else if (n.kind === "removeProcedure") for (let t of e.input.routes ?? []) t.binds.includes(n.tag) && r.push({
|
|
87
|
-
rule: "blast/procedure-removed",
|
|
88
|
-
node: `route(${t.pattern})`,
|
|
89
|
-
...t.file === void 0 ? {} : { file: t.file },
|
|
90
|
-
breaks: [`binds '${n.tag}' — would break if removed`],
|
|
91
|
-
fix: `rebind ${t.pattern} to another tag before removing '${n.tag}'`,
|
|
92
|
-
severity: "error"
|
|
93
|
-
});
|
|
94
|
-
else for (let t of e.input.procedures) (t.requiresScopes ?? []).includes(n.name) && r.push({
|
|
95
|
-
rule: "blast/scope-removed",
|
|
96
|
-
node: `${t.kind}(${t.tag})`,
|
|
97
|
-
...t.file === void 0 ? {} : { file: t.file },
|
|
98
|
-
breaks: [`requires scope '${n.name}' — would become unguarded/dangling if removed`],
|
|
99
|
-
fix: `remove the requireScope('${n.name}') call or keep the scope`,
|
|
100
|
-
severity: "error"
|
|
101
|
-
});
|
|
102
|
-
return r;
|
|
103
|
-
}, a = (e, t) => {
|
|
104
|
-
let a = n(e), o = [...r(a), ...t === void 0 ? [] : i(a, t)];
|
|
105
|
-
return {
|
|
106
|
-
ok: !o.some((e) => e.severity === "error"),
|
|
107
|
-
diagnostics: o
|
|
108
|
-
};
|
|
109
|
-
};
|
|
110
|
-
//#endregion
|
|
111
|
-
export { i, r as n, a as r, n as t };
|
package/dist/webDev-BcRFTsMA.js
DELETED