@fuzdev/fuz_app 0.1.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/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/actions/action_bridge.d.ts +65 -0
- package/dist/actions/action_bridge.d.ts.map +1 -0
- package/dist/actions/action_bridge.js +76 -0
- package/dist/actions/action_codegen.d.ts +97 -0
- package/dist/actions/action_codegen.d.ts.map +1 -0
- package/dist/actions/action_codegen.js +280 -0
- package/dist/actions/action_registry.d.ts +35 -0
- package/dist/actions/action_registry.d.ts.map +1 -0
- package/dist/actions/action_registry.js +83 -0
- package/dist/actions/action_spec.d.ts +169 -0
- package/dist/actions/action_spec.d.ts.map +1 -0
- package/dist/actions/action_spec.js +76 -0
- package/dist/auth/account_queries.d.ts +96 -0
- package/dist/auth/account_queries.d.ts.map +1 -0
- package/dist/auth/account_queries.js +172 -0
- package/dist/auth/account_routes.d.ts +86 -0
- package/dist/auth/account_routes.d.ts.map +1 -0
- package/dist/auth/account_routes.js +406 -0
- package/dist/auth/account_schema.d.ts +192 -0
- package/dist/auth/account_schema.d.ts.map +1 -0
- package/dist/auth/account_schema.js +105 -0
- package/dist/auth/admin_routes.d.ts +29 -0
- package/dist/auth/admin_routes.d.ts.map +1 -0
- package/dist/auth/admin_routes.js +193 -0
- package/dist/auth/api_token.d.ts +33 -0
- package/dist/auth/api_token.d.ts.map +1 -0
- package/dist/auth/api_token.js +36 -0
- package/dist/auth/api_token_queries.d.ts +80 -0
- package/dist/auth/api_token_queries.d.ts.map +1 -0
- package/dist/auth/api_token_queries.js +116 -0
- package/dist/auth/app_settings_queries.d.ts +33 -0
- package/dist/auth/app_settings_queries.d.ts.map +1 -0
- package/dist/auth/app_settings_queries.js +51 -0
- package/dist/auth/app_settings_routes.d.ts +27 -0
- package/dist/auth/app_settings_routes.d.ts.map +1 -0
- package/dist/auth/app_settings_routes.js +66 -0
- package/dist/auth/app_settings_schema.d.ts +35 -0
- package/dist/auth/app_settings_schema.d.ts.map +1 -0
- package/dist/auth/app_settings_schema.js +22 -0
- package/dist/auth/audit_log_queries.d.ts +90 -0
- package/dist/auth/audit_log_queries.d.ts.map +1 -0
- package/dist/auth/audit_log_queries.js +205 -0
- package/dist/auth/audit_log_routes.d.ts +33 -0
- package/dist/auth/audit_log_routes.d.ts.map +1 -0
- package/dist/auth/audit_log_routes.js +106 -0
- package/dist/auth/audit_log_schema.d.ts +259 -0
- package/dist/auth/audit_log_schema.d.ts.map +1 -0
- package/dist/auth/audit_log_schema.js +123 -0
- package/dist/auth/bearer_auth.d.ts +32 -0
- package/dist/auth/bearer_auth.d.ts.map +1 -0
- package/dist/auth/bearer_auth.js +90 -0
- package/dist/auth/bootstrap_account.d.ts +82 -0
- package/dist/auth/bootstrap_account.d.ts.map +1 -0
- package/dist/auth/bootstrap_account.js +97 -0
- package/dist/auth/bootstrap_routes.d.ts +74 -0
- package/dist/auth/bootstrap_routes.d.ts.map +1 -0
- package/dist/auth/bootstrap_routes.js +154 -0
- package/dist/auth/daemon_token.d.ts +49 -0
- package/dist/auth/daemon_token.d.ts.map +1 -0
- package/dist/auth/daemon_token.js +49 -0
- package/dist/auth/daemon_token_middleware.d.ts +93 -0
- package/dist/auth/daemon_token_middleware.d.ts.map +1 -0
- package/dist/auth/daemon_token_middleware.js +167 -0
- package/dist/auth/ddl.d.ts +27 -0
- package/dist/auth/ddl.d.ts.map +1 -0
- package/dist/auth/ddl.js +111 -0
- package/dist/auth/deps.d.ts +52 -0
- package/dist/auth/deps.d.ts.map +1 -0
- package/dist/auth/deps.js +10 -0
- package/dist/auth/invite_queries.d.ts +68 -0
- package/dist/auth/invite_queries.d.ts.map +1 -0
- package/dist/auth/invite_queries.js +105 -0
- package/dist/auth/invite_routes.d.ts +18 -0
- package/dist/auth/invite_routes.d.ts.map +1 -0
- package/dist/auth/invite_routes.js +129 -0
- package/dist/auth/invite_schema.d.ts +51 -0
- package/dist/auth/invite_schema.d.ts.map +1 -0
- package/dist/auth/invite_schema.js +25 -0
- package/dist/auth/keyring.d.ts +87 -0
- package/dist/auth/keyring.d.ts.map +1 -0
- package/dist/auth/keyring.js +142 -0
- package/dist/auth/middleware.d.ts +40 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +64 -0
- package/dist/auth/migrations.d.ts +42 -0
- package/dist/auth/migrations.d.ts.map +1 -0
- package/dist/auth/migrations.js +79 -0
- package/dist/auth/password.d.ts +39 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +25 -0
- package/dist/auth/password_argon2.d.ts +43 -0
- package/dist/auth/password_argon2.d.ts.map +1 -0
- package/dist/auth/password_argon2.js +76 -0
- package/dist/auth/permit_queries.d.ts +72 -0
- package/dist/auth/permit_queries.d.ts.map +1 -0
- package/dist/auth/permit_queries.js +116 -0
- package/dist/auth/request_context.d.ts +114 -0
- package/dist/auth/request_context.d.ts.map +1 -0
- package/dist/auth/request_context.js +176 -0
- package/dist/auth/require_keeper.d.ts +20 -0
- package/dist/auth/require_keeper.d.ts.map +1 -0
- package/dist/auth/require_keeper.js +35 -0
- package/dist/auth/role_schema.d.ts +69 -0
- package/dist/auth/role_schema.d.ts.map +1 -0
- package/dist/auth/role_schema.js +70 -0
- package/dist/auth/route_guards.d.ts +21 -0
- package/dist/auth/route_guards.d.ts.map +1 -0
- package/dist/auth/route_guards.js +32 -0
- package/dist/auth/session_cookie.d.ts +158 -0
- package/dist/auth/session_cookie.d.ts.map +1 -0
- package/dist/auth/session_cookie.js +135 -0
- package/dist/auth/session_lifecycle.d.ts +35 -0
- package/dist/auth/session_lifecycle.d.ts.map +1 -0
- package/dist/auth/session_lifecycle.js +27 -0
- package/dist/auth/session_middleware.d.ts +33 -0
- package/dist/auth/session_middleware.d.ts.map +1 -0
- package/dist/auth/session_middleware.js +62 -0
- package/dist/auth/session_queries.d.ts +135 -0
- package/dist/auth/session_queries.d.ts.map +1 -0
- package/dist/auth/session_queries.js +186 -0
- package/dist/auth/signup_routes.d.ts +32 -0
- package/dist/auth/signup_routes.d.ts.map +1 -0
- package/dist/auth/signup_routes.js +150 -0
- package/dist/cli/args.d.ts +48 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +76 -0
- package/dist/cli/config.d.ts +48 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +77 -0
- package/dist/cli/daemon.d.ts +82 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +149 -0
- package/dist/cli/help.d.ts +85 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +138 -0
- package/dist/cli/logger.d.ts +46 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli/logger.js +48 -0
- package/dist/cli/util.d.ts +36 -0
- package/dist/cli/util.d.ts.map +1 -0
- package/dist/cli/util.js +50 -0
- package/dist/crypto.d.ts +13 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +19 -0
- package/dist/db/assert_row.d.ts +18 -0
- package/dist/db/assert_row.d.ts.map +1 -0
- package/dist/db/assert_row.js +24 -0
- package/dist/db/create_db.d.ts +38 -0
- package/dist/db/create_db.d.ts.map +1 -0
- package/dist/db/create_db.js +57 -0
- package/dist/db/db.d.ts +97 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +76 -0
- package/dist/db/db_pg.d.ts +21 -0
- package/dist/db/db_pg.d.ts.map +1 -0
- package/dist/db/db_pg.js +45 -0
- package/dist/db/db_pglite.d.ts +21 -0
- package/dist/db/db_pglite.d.ts.map +1 -0
- package/dist/db/db_pglite.js +28 -0
- package/dist/db/migrate.d.ts +67 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +118 -0
- package/dist/db/pg_error.d.ts +16 -0
- package/dist/db/pg_error.d.ts.map +1 -0
- package/dist/db/pg_error.js +15 -0
- package/dist/db/query_deps.d.ts +14 -0
- package/dist/db/query_deps.d.ts.map +1 -0
- package/dist/db/query_deps.js +9 -0
- package/dist/db/sql_identifier.d.ts +27 -0
- package/dist/db/sql_identifier.d.ts.map +1 -0
- package/dist/db/sql_identifier.js +31 -0
- package/dist/db/status.d.ts +62 -0
- package/dist/db/status.d.ts.map +1 -0
- package/dist/db/status.js +116 -0
- package/dist/dev/setup.d.ts +159 -0
- package/dist/dev/setup.d.ts.map +1 -0
- package/dist/dev/setup.js +265 -0
- package/dist/env/dotenv.d.ts +25 -0
- package/dist/env/dotenv.d.ts.map +1 -0
- package/dist/env/dotenv.js +52 -0
- package/dist/env/load.d.ts +52 -0
- package/dist/env/load.d.ts.map +1 -0
- package/dist/env/load.js +79 -0
- package/dist/env/mask.d.ts +19 -0
- package/dist/env/mask.d.ts.map +1 -0
- package/dist/env/mask.js +26 -0
- package/dist/env/resolve.d.ts +126 -0
- package/dist/env/resolve.d.ts.map +1 -0
- package/dist/env/resolve.js +200 -0
- package/dist/hono_context.d.ts +48 -0
- package/dist/hono_context.d.ts.map +1 -0
- package/dist/hono_context.js +22 -0
- package/dist/http/common_routes.d.ts +52 -0
- package/dist/http/common_routes.d.ts.map +1 -0
- package/dist/http/common_routes.js +65 -0
- package/dist/http/db_routes.d.ts +57 -0
- package/dist/http/db_routes.d.ts.map +1 -0
- package/dist/http/db_routes.js +176 -0
- package/dist/http/error_schemas.d.ts +169 -0
- package/dist/http/error_schemas.d.ts.map +1 -0
- package/dist/http/error_schemas.js +178 -0
- package/dist/http/middleware_spec.d.ts +19 -0
- package/dist/http/middleware_spec.d.ts.map +1 -0
- package/dist/http/middleware_spec.js +9 -0
- package/dist/http/origin.d.ts +57 -0
- package/dist/http/origin.d.ts.map +1 -0
- package/dist/http/origin.js +207 -0
- package/dist/http/proxy.d.ts +112 -0
- package/dist/http/proxy.d.ts.map +1 -0
- package/dist/http/proxy.js +240 -0
- package/dist/http/route_spec.d.ts +197 -0
- package/dist/http/route_spec.d.ts.map +1 -0
- package/dist/http/route_spec.js +243 -0
- package/dist/http/schema_helpers.d.ts +64 -0
- package/dist/http/schema_helpers.d.ts.map +1 -0
- package/dist/http/schema_helpers.js +90 -0
- package/dist/http/surface.d.ts +132 -0
- package/dist/http/surface.d.ts.map +1 -0
- package/dist/http/surface.js +156 -0
- package/dist/http/surface_query.d.ts +77 -0
- package/dist/http/surface_query.d.ts.map +1 -0
- package/dist/http/surface_query.js +86 -0
- package/dist/rate_limiter.d.ts +94 -0
- package/dist/rate_limiter.d.ts.map +1 -0
- package/dist/rate_limiter.js +156 -0
- package/dist/realtime/sse.d.ts +80 -0
- package/dist/realtime/sse.d.ts.map +1 -0
- package/dist/realtime/sse.js +109 -0
- package/dist/realtime/sse_auth_guard.d.ts +93 -0
- package/dist/realtime/sse_auth_guard.d.ts.map +1 -0
- package/dist/realtime/sse_auth_guard.js +111 -0
- package/dist/realtime/subscriber_registry.d.ts +85 -0
- package/dist/realtime/subscriber_registry.d.ts.map +1 -0
- package/dist/realtime/subscriber_registry.js +108 -0
- package/dist/runtime/deno.d.ts +21 -0
- package/dist/runtime/deno.d.ts.map +1 -0
- package/dist/runtime/deno.js +83 -0
- package/dist/runtime/deps.d.ts +113 -0
- package/dist/runtime/deps.d.ts.map +1 -0
- package/dist/runtime/deps.js +10 -0
- package/dist/runtime/fs.d.ts +15 -0
- package/dist/runtime/fs.d.ts.map +1 -0
- package/dist/runtime/fs.js +17 -0
- package/dist/runtime/mock.d.ts +81 -0
- package/dist/runtime/mock.d.ts.map +1 -0
- package/dist/runtime/mock.js +195 -0
- package/dist/runtime/node.d.ts +17 -0
- package/dist/runtime/node.d.ts.map +1 -0
- package/dist/runtime/node.js +117 -0
- package/dist/schema_meta.d.ts +16 -0
- package/dist/schema_meta.d.ts.map +1 -0
- package/dist/schema_meta.js +9 -0
- package/dist/sensitivity.d.ts +15 -0
- package/dist/sensitivity.d.ts.map +1 -0
- package/dist/sensitivity.js +9 -0
- package/dist/server/app_backend.d.ts +74 -0
- package/dist/server/app_backend.d.ts.map +1 -0
- package/dist/server/app_backend.js +39 -0
- package/dist/server/app_server.d.ts +201 -0
- package/dist/server/app_server.d.ts.map +1 -0
- package/dist/server/app_server.js +266 -0
- package/dist/server/env.d.ts +68 -0
- package/dist/server/env.d.ts.map +1 -0
- package/dist/server/env.js +95 -0
- package/dist/server/startup.d.ts +22 -0
- package/dist/server/startup.d.ts.map +1 -0
- package/dist/server/startup.js +48 -0
- package/dist/server/static.d.ts +39 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +38 -0
- package/dist/server/validate_nginx.d.ts +34 -0
- package/dist/server/validate_nginx.d.ts.map +1 -0
- package/dist/server/validate_nginx.js +118 -0
- package/dist/testing/CLAUDE.md +3 -0
- package/dist/testing/admin_integration.d.ts +45 -0
- package/dist/testing/admin_integration.d.ts.map +1 -0
- package/dist/testing/admin_integration.js +840 -0
- package/dist/testing/adversarial_404.d.ts +15 -0
- package/dist/testing/adversarial_404.d.ts.map +1 -0
- package/dist/testing/adversarial_404.js +118 -0
- package/dist/testing/adversarial_headers.d.ts +36 -0
- package/dist/testing/adversarial_headers.d.ts.map +1 -0
- package/dist/testing/adversarial_headers.js +128 -0
- package/dist/testing/adversarial_input.d.ts +56 -0
- package/dist/testing/adversarial_input.d.ts.map +1 -0
- package/dist/testing/adversarial_input.js +494 -0
- package/dist/testing/app_server.d.ts +169 -0
- package/dist/testing/app_server.d.ts.map +1 -0
- package/dist/testing/app_server.js +240 -0
- package/dist/testing/assert_dev_env.d.ts +10 -0
- package/dist/testing/assert_dev_env.d.ts.map +1 -0
- package/dist/testing/assert_dev_env.js +13 -0
- package/dist/testing/assertions.d.ts +61 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +96 -0
- package/dist/testing/attack_surface.d.ts +63 -0
- package/dist/testing/attack_surface.d.ts.map +1 -0
- package/dist/testing/attack_surface.js +224 -0
- package/dist/testing/audit_completeness.d.ts +29 -0
- package/dist/testing/audit_completeness.d.ts.map +1 -0
- package/dist/testing/audit_completeness.js +410 -0
- package/dist/testing/auth_apps.d.ts +55 -0
- package/dist/testing/auth_apps.d.ts.map +1 -0
- package/dist/testing/auth_apps.js +122 -0
- package/dist/testing/data_exposure.d.ts +62 -0
- package/dist/testing/data_exposure.d.ts.map +1 -0
- package/dist/testing/data_exposure.js +297 -0
- package/dist/testing/db.d.ts +111 -0
- package/dist/testing/db.d.ts.map +1 -0
- package/dist/testing/db.js +258 -0
- package/dist/testing/entities.d.ts +21 -0
- package/dist/testing/entities.d.ts.map +1 -0
- package/dist/testing/entities.js +42 -0
- package/dist/testing/error_coverage.d.ts +78 -0
- package/dist/testing/error_coverage.d.ts.map +1 -0
- package/dist/testing/error_coverage.js +135 -0
- package/dist/testing/integration.d.ts +37 -0
- package/dist/testing/integration.d.ts.map +1 -0
- package/dist/testing/integration.js +1139 -0
- package/dist/testing/integration_helpers.d.ts +107 -0
- package/dist/testing/integration_helpers.d.ts.map +1 -0
- package/dist/testing/integration_helpers.js +246 -0
- package/dist/testing/middleware.d.ts +125 -0
- package/dist/testing/middleware.d.ts.map +1 -0
- package/dist/testing/middleware.js +210 -0
- package/dist/testing/rate_limiting.d.ts +43 -0
- package/dist/testing/rate_limiting.d.ts.map +1 -0
- package/dist/testing/rate_limiting.js +216 -0
- package/dist/testing/round_trip.d.ts +37 -0
- package/dist/testing/round_trip.d.ts.map +1 -0
- package/dist/testing/round_trip.js +128 -0
- package/dist/testing/schema_generators.d.ts +33 -0
- package/dist/testing/schema_generators.d.ts.map +1 -0
- package/dist/testing/schema_generators.js +137 -0
- package/dist/testing/standard.d.ts +49 -0
- package/dist/testing/standard.d.ts.map +1 -0
- package/dist/testing/standard.js +16 -0
- package/dist/testing/stubs.d.ts +96 -0
- package/dist/testing/stubs.d.ts.map +1 -0
- package/dist/testing/stubs.js +192 -0
- package/dist/testing/surface_invariants.d.ts +189 -0
- package/dist/testing/surface_invariants.d.ts.map +1 -0
- package/dist/testing/surface_invariants.js +450 -0
- package/dist/ui/AccountSessions.svelte +75 -0
- package/dist/ui/AccountSessions.svelte.d.ts +19 -0
- package/dist/ui/AccountSessions.svelte.d.ts.map +1 -0
- package/dist/ui/AdminAccounts.svelte +107 -0
- package/dist/ui/AdminAccounts.svelte.d.ts +19 -0
- package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -0
- package/dist/ui/AdminAuditLog.svelte +144 -0
- package/dist/ui/AdminAuditLog.svelte.d.ts +4 -0
- package/dist/ui/AdminAuditLog.svelte.d.ts.map +1 -0
- package/dist/ui/AdminInvites.svelte +142 -0
- package/dist/ui/AdminInvites.svelte.d.ts +4 -0
- package/dist/ui/AdminInvites.svelte.d.ts.map +1 -0
- package/dist/ui/AdminOverview.svelte +337 -0
- package/dist/ui/AdminOverview.svelte.d.ts +4 -0
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -0
- package/dist/ui/AdminPermitHistory.svelte +61 -0
- package/dist/ui/AdminPermitHistory.svelte.d.ts +19 -0
- package/dist/ui/AdminPermitHistory.svelte.d.ts.map +1 -0
- package/dist/ui/AdminSessions.svelte +85 -0
- package/dist/ui/AdminSessions.svelte.d.ts +19 -0
- package/dist/ui/AdminSessions.svelte.d.ts.map +1 -0
- package/dist/ui/AdminSettings.svelte +32 -0
- package/dist/ui/AdminSettings.svelte.d.ts +19 -0
- package/dist/ui/AdminSettings.svelte.d.ts.map +1 -0
- package/dist/ui/AdminSurface.svelte +42 -0
- package/dist/ui/AdminSurface.svelte.d.ts +4 -0
- package/dist/ui/AdminSurface.svelte.d.ts.map +1 -0
- package/dist/ui/AppShell.svelte +93 -0
- package/dist/ui/AppShell.svelte.d.ts +20 -0
- package/dist/ui/AppShell.svelte.d.ts.map +1 -0
- package/dist/ui/BootstrapForm.svelte +105 -0
- package/dist/ui/BootstrapForm.svelte.d.ts +4 -0
- package/dist/ui/BootstrapForm.svelte.d.ts.map +1 -0
- package/dist/ui/ColumnLayout.svelte +46 -0
- package/dist/ui/ColumnLayout.svelte.d.ts +11 -0
- package/dist/ui/ColumnLayout.svelte.d.ts.map +1 -0
- package/dist/ui/ConfirmButton.svelte +125 -0
- package/dist/ui/ConfirmButton.svelte.d.ts +54 -0
- package/dist/ui/ConfirmButton.svelte.d.ts.map +1 -0
- package/dist/ui/Datatable.svelte +185 -0
- package/dist/ui/Datatable.svelte.d.ts +35 -0
- package/dist/ui/Datatable.svelte.d.ts.map +1 -0
- package/dist/ui/LoginForm.svelte +82 -0
- package/dist/ui/LoginForm.svelte.d.ts +8 -0
- package/dist/ui/LoginForm.svelte.d.ts.map +1 -0
- package/dist/ui/LogoutButton.svelte +36 -0
- package/dist/ui/LogoutButton.svelte.d.ts +10 -0
- package/dist/ui/LogoutButton.svelte.d.ts.map +1 -0
- package/dist/ui/MenuLink.svelte +35 -0
- package/dist/ui/MenuLink.svelte.d.ts +12 -0
- package/dist/ui/MenuLink.svelte.d.ts.map +1 -0
- package/dist/ui/OpenSignupToggle.svelte +36 -0
- package/dist/ui/OpenSignupToggle.svelte.d.ts +19 -0
- package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -0
- package/dist/ui/PopoverButton.svelte +136 -0
- package/dist/ui/PopoverButton.svelte.d.ts +63 -0
- package/dist/ui/PopoverButton.svelte.d.ts.map +1 -0
- package/dist/ui/SignupForm.svelte +117 -0
- package/dist/ui/SignupForm.svelte.d.ts +7 -0
- package/dist/ui/SignupForm.svelte.d.ts.map +1 -0
- package/dist/ui/SurfaceExplorer.svelte +287 -0
- package/dist/ui/SurfaceExplorer.svelte.d.ts +8 -0
- package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -0
- package/dist/ui/account_sessions_state.svelte.d.ts +15 -0
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -0
- package/dist/ui/account_sessions_state.svelte.js +45 -0
- package/dist/ui/admin_accounts_state.svelte.d.ts +19 -0
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -0
- package/dist/ui/admin_accounts_state.svelte.js +65 -0
- package/dist/ui/admin_invites_state.svelte.d.ts +19 -0
- package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -0
- package/dist/ui/admin_invites_state.svelte.js +71 -0
- package/dist/ui/admin_sessions_state.svelte.d.ts +18 -0
- package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -0
- package/dist/ui/admin_sessions_state.svelte.js +62 -0
- package/dist/ui/app_settings_state.svelte.d.ts +14 -0
- package/dist/ui/app_settings_state.svelte.d.ts.map +1 -0
- package/dist/ui/app_settings_state.svelte.js +44 -0
- package/dist/ui/audit_log_state.svelte.d.ts +40 -0
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -0
- package/dist/ui/audit_log_state.svelte.js +153 -0
- package/dist/ui/auth_state.svelte.d.ts +85 -0
- package/dist/ui/auth_state.svelte.d.ts.map +1 -0
- package/dist/ui/auth_state.svelte.js +238 -0
- package/dist/ui/datatable.d.ts +25 -0
- package/dist/ui/datatable.d.ts.map +1 -0
- package/dist/ui/datatable.js +9 -0
- package/dist/ui/enter_advance.d.ts +13 -0
- package/dist/ui/enter_advance.d.ts.map +1 -0
- package/dist/ui/enter_advance.js +30 -0
- package/dist/ui/loadable.svelte.d.ts +55 -0
- package/dist/ui/loadable.svelte.d.ts.map +1 -0
- package/dist/ui/loadable.svelte.js +75 -0
- package/dist/ui/popover.svelte.d.ts +137 -0
- package/dist/ui/popover.svelte.d.ts.map +1 -0
- package/dist/ui/popover.svelte.js +288 -0
- package/dist/ui/position_helpers.d.ts +27 -0
- package/dist/ui/position_helpers.d.ts.map +1 -0
- package/dist/ui/position_helpers.js +81 -0
- package/dist/ui/sidebar_state.svelte.d.ts +30 -0
- package/dist/ui/sidebar_state.svelte.d.ts.map +1 -0
- package/dist/ui/sidebar_state.svelte.js +39 -0
- package/dist/ui/table_state.svelte.d.ts +63 -0
- package/dist/ui/table_state.svelte.d.ts.map +1 -0
- package/dist/ui/table_state.svelte.js +117 -0
- package/dist/ui/ui_fetch.d.ts +29 -0
- package/dist/ui/ui_fetch.d.ts.map +1 -0
- package/dist/ui/ui_fetch.js +37 -0
- package/dist/ui/ui_format.d.ts +63 -0
- package/dist/ui/ui_format.d.ts.map +1 -0
- package/dist/ui/ui_format.js +196 -0
- package/package.json +121 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides daemon info schema, PID file management, and process lifecycle
|
|
5
|
+
* operations. Separates lifecycle from presentation — `stop_daemon` returns
|
|
6
|
+
* a result object instead of logging directly.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { type CommandDeps, type EnvDeps, type FsReadDeps, type FsRemoveDeps, type FsWriteDeps, type LogDeps } from '../runtime/deps.js';
|
|
12
|
+
/**
|
|
13
|
+
* Daemon info schema for `~/.{name}/run/daemon.json`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const DaemonInfo: z.ZodObject<{
|
|
16
|
+
/** Schema version. */
|
|
17
|
+
version: z.ZodNumber;
|
|
18
|
+
/** Server process ID. */
|
|
19
|
+
pid: z.ZodNumber;
|
|
20
|
+
/** Port the server is listening on. */
|
|
21
|
+
port: z.ZodNumber;
|
|
22
|
+
/** ISO timestamp when server started. */
|
|
23
|
+
started: z.ZodString;
|
|
24
|
+
/** Package version of the application. */
|
|
25
|
+
app_version: z.ZodString;
|
|
26
|
+
}, z.core.$strict>;
|
|
27
|
+
export type DaemonInfo = z.infer<typeof DaemonInfo>;
|
|
28
|
+
/**
|
|
29
|
+
* Get the daemon info file path (`~/.{name}/run/daemon.json`).
|
|
30
|
+
*
|
|
31
|
+
* @param runtime - runtime with `env_get` capability
|
|
32
|
+
* @param name - application name
|
|
33
|
+
* @returns path to `daemon.json`, or null if `$HOME` is not set
|
|
34
|
+
*/
|
|
35
|
+
export declare const get_daemon_info_path: (runtime: Pick<EnvDeps, "env_get">, name: string) => string | null;
|
|
36
|
+
/**
|
|
37
|
+
* Write daemon info to the PID file, creating directories as needed.
|
|
38
|
+
*
|
|
39
|
+
* @param runtime - runtime with file write and env capabilities
|
|
40
|
+
* @param name - application name
|
|
41
|
+
* @param info - daemon info to write
|
|
42
|
+
*/
|
|
43
|
+
export declare const write_daemon_info: (runtime: Pick<EnvDeps, "env_get"> & FsWriteDeps, name: string, info: DaemonInfo) => Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Read and validate daemon info from the PID file.
|
|
46
|
+
*
|
|
47
|
+
* @param runtime - runtime with file read and env capabilities
|
|
48
|
+
* @param name - application name
|
|
49
|
+
* @returns parsed daemon info, or null if missing or invalid
|
|
50
|
+
*/
|
|
51
|
+
export declare const read_daemon_info: (runtime: Pick<EnvDeps, "env_get"> & FsReadDeps & LogDeps, name: string) => Promise<DaemonInfo | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Check if a process is running by PID.
|
|
54
|
+
*
|
|
55
|
+
* @param runtime - runtime with command execution capability
|
|
56
|
+
* @param pid - process ID to check
|
|
57
|
+
* @returns `true` if the process is running
|
|
58
|
+
*/
|
|
59
|
+
export declare const is_daemon_running: (runtime: CommandDeps, pid: number) => Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Result of a `stop_daemon` operation.
|
|
62
|
+
*/
|
|
63
|
+
export interface StopDaemonResult {
|
|
64
|
+
/** Whether a daemon was stopped. */
|
|
65
|
+
stopped: boolean;
|
|
66
|
+
/** PID of the stopped daemon, if any. */
|
|
67
|
+
pid?: number;
|
|
68
|
+
/** Human-readable message describing the outcome. */
|
|
69
|
+
message: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Stop a running daemon by sending SIGTERM and cleaning up the PID file.
|
|
73
|
+
*
|
|
74
|
+
* Returns a result object instead of logging directly, separating
|
|
75
|
+
* lifecycle from presentation.
|
|
76
|
+
*
|
|
77
|
+
* @param runtime - runtime with command, file, and env capabilities
|
|
78
|
+
* @param name - application name
|
|
79
|
+
* @returns result describing the outcome
|
|
80
|
+
*/
|
|
81
|
+
export declare const stop_daemon: (runtime: Pick<EnvDeps, "env_get"> & FsReadDeps & FsRemoveDeps & CommandDeps & LogDeps, name: string) => Promise<StopDaemonResult>;
|
|
82
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,MAAM,oBAAoB,CAAC;AAI5B;;GAEG;AACH,eAAO,MAAM,UAAU;IACtB,sBAAsB;;IAEtB,yBAAyB;;IAEzB,uCAAuC;;IAEvC,yCAAyC;;IAEzC,0CAA0C;;kBAEzC,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAChC,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EACjC,MAAM,MAAM,KACV,MAAM,GAAG,IAGX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC7B,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,WAAW,EAC/C,MAAM,MAAM,EACZ,MAAM,UAAU,KACd,OAAO,CAAC,IAAI,CAWd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC5B,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,UAAU,GAAG,OAAO,EACxD,MAAM,MAAM,KACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAwB3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,WAAW,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAG1F,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GACvB,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,EACrF,MAAM,MAAM,KACV,OAAO,CAAC,gBAAgB,CA2C1B,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides daemon info schema, PID file management, and process lifecycle
|
|
5
|
+
* operations. Separates lifecycle from presentation — `stop_daemon` returns
|
|
6
|
+
* a result object instead of logging directly.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import {} from '../runtime/deps.js';
|
|
12
|
+
import { write_file_atomic } from '../runtime/fs.js';
|
|
13
|
+
import { get_app_dir } from './config.js';
|
|
14
|
+
/**
|
|
15
|
+
* Daemon info schema for `~/.{name}/run/daemon.json`.
|
|
16
|
+
*/
|
|
17
|
+
export const DaemonInfo = z.strictObject({
|
|
18
|
+
/** Schema version. */
|
|
19
|
+
version: z.number(),
|
|
20
|
+
/** Server process ID. */
|
|
21
|
+
pid: z.number(),
|
|
22
|
+
/** Port the server is listening on. */
|
|
23
|
+
port: z.number(),
|
|
24
|
+
/** ISO timestamp when server started. */
|
|
25
|
+
started: z.string(),
|
|
26
|
+
/** Package version of the application. */
|
|
27
|
+
app_version: z.string(),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Get the daemon info file path (`~/.{name}/run/daemon.json`).
|
|
31
|
+
*
|
|
32
|
+
* @param runtime - runtime with `env_get` capability
|
|
33
|
+
* @param name - application name
|
|
34
|
+
* @returns path to `daemon.json`, or null if `$HOME` is not set
|
|
35
|
+
*/
|
|
36
|
+
export const get_daemon_info_path = (runtime, name) => {
|
|
37
|
+
const app_dir = get_app_dir(runtime, name);
|
|
38
|
+
return app_dir ? `${app_dir}/run/daemon.json` : null;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Write daemon info to the PID file, creating directories as needed.
|
|
42
|
+
*
|
|
43
|
+
* @param runtime - runtime with file write and env capabilities
|
|
44
|
+
* @param name - application name
|
|
45
|
+
* @param info - daemon info to write
|
|
46
|
+
*/
|
|
47
|
+
export const write_daemon_info = async (runtime, name, info) => {
|
|
48
|
+
const app_dir = get_app_dir(runtime, name);
|
|
49
|
+
if (!app_dir) {
|
|
50
|
+
throw new Error('$HOME not set');
|
|
51
|
+
}
|
|
52
|
+
const run_dir = `${app_dir}/run`;
|
|
53
|
+
await runtime.mkdir(run_dir, { recursive: true });
|
|
54
|
+
const content = JSON.stringify(info, null, '\t');
|
|
55
|
+
await write_file_atomic(runtime, `${run_dir}/daemon.json`, content + '\n');
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Read and validate daemon info from the PID file.
|
|
59
|
+
*
|
|
60
|
+
* @param runtime - runtime with file read and env capabilities
|
|
61
|
+
* @param name - application name
|
|
62
|
+
* @returns parsed daemon info, or null if missing or invalid
|
|
63
|
+
*/
|
|
64
|
+
export const read_daemon_info = async (runtime, name) => {
|
|
65
|
+
const daemon_path = get_daemon_info_path(runtime, name);
|
|
66
|
+
if (!daemon_path) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const stat = await runtime.stat(daemon_path);
|
|
70
|
+
if (!stat) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const content = await runtime.read_file(daemon_path);
|
|
75
|
+
const parsed = JSON.parse(content);
|
|
76
|
+
const result = DaemonInfo.safeParse(parsed);
|
|
77
|
+
if (!result.success) {
|
|
78
|
+
runtime.warn(`Invalid daemon.json: ${result.error.message}`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return result.data;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
runtime.warn('Failed to parse daemon.json');
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Check if a process is running by PID.
|
|
90
|
+
*
|
|
91
|
+
* @param runtime - runtime with command execution capability
|
|
92
|
+
* @param pid - process ID to check
|
|
93
|
+
* @returns `true` if the process is running
|
|
94
|
+
*/
|
|
95
|
+
export const is_daemon_running = async (runtime, pid) => {
|
|
96
|
+
const result = await runtime.run_command('kill', ['-0', String(pid)]);
|
|
97
|
+
return result.success;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Stop a running daemon by sending SIGTERM and cleaning up the PID file.
|
|
101
|
+
*
|
|
102
|
+
* Returns a result object instead of logging directly, separating
|
|
103
|
+
* lifecycle from presentation.
|
|
104
|
+
*
|
|
105
|
+
* @param runtime - runtime with command, file, and env capabilities
|
|
106
|
+
* @param name - application name
|
|
107
|
+
* @returns result describing the outcome
|
|
108
|
+
*/
|
|
109
|
+
export const stop_daemon = async (runtime, name) => {
|
|
110
|
+
const daemon_path = get_daemon_info_path(runtime, name);
|
|
111
|
+
if (!daemon_path) {
|
|
112
|
+
return { stopped: false, message: '$HOME not set' };
|
|
113
|
+
}
|
|
114
|
+
// check if daemon.json exists
|
|
115
|
+
const stat = await runtime.stat(daemon_path);
|
|
116
|
+
if (!stat) {
|
|
117
|
+
return { stopped: false, message: 'No daemon running (no daemon.json found)' };
|
|
118
|
+
}
|
|
119
|
+
// read and validate daemon info
|
|
120
|
+
const info = await read_daemon_info(runtime, name);
|
|
121
|
+
if (!info) {
|
|
122
|
+
// corrupt file, clean up
|
|
123
|
+
try {
|
|
124
|
+
await runtime.remove(daemon_path);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// already removed
|
|
128
|
+
}
|
|
129
|
+
return { stopped: false, message: 'Corrupt daemon.json, removed' };
|
|
130
|
+
}
|
|
131
|
+
// send SIGTERM
|
|
132
|
+
const result = await runtime.run_command('kill', [String(info.pid)]);
|
|
133
|
+
const stopped = result.success;
|
|
134
|
+
// clean up daemon.json
|
|
135
|
+
try {
|
|
136
|
+
await runtime.remove(daemon_path);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// already removed by daemon's own shutdown handler
|
|
140
|
+
}
|
|
141
|
+
if (stopped) {
|
|
142
|
+
return { stopped: true, pid: info.pid, message: `Stopped daemon (pid ${info.pid})` };
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
stopped: false,
|
|
146
|
+
pid: info.pid,
|
|
147
|
+
message: `Process ${info.pid} not running, cleaned up stale daemon.json`,
|
|
148
|
+
};
|
|
149
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-driven CLI help generator.
|
|
3
|
+
*
|
|
4
|
+
* Generalized from the identical pattern in tx and zzz. Consumers configure
|
|
5
|
+
* once with `create_help` and get back `generate_main_help`,
|
|
6
|
+
* `generate_command_help`, and `get_help_text`.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { z } from 'zod';
|
|
11
|
+
import { type ZodSchemaProperty } from '@fuzdev/fuz_util/zod.js';
|
|
12
|
+
/**
|
|
13
|
+
* Command metadata for help generation.
|
|
14
|
+
*/
|
|
15
|
+
export interface CommandMeta<TCategory extends string = string> {
|
|
16
|
+
schema?: z.ZodType;
|
|
17
|
+
summary: string;
|
|
18
|
+
usage: string;
|
|
19
|
+
category: TCategory;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Category configuration for help display.
|
|
23
|
+
*/
|
|
24
|
+
export interface HelpCategory<TCategory extends string = string> {
|
|
25
|
+
key: TCategory;
|
|
26
|
+
title: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for `create_help`.
|
|
30
|
+
*/
|
|
31
|
+
export interface HelpOptions<TCategory extends string = string> {
|
|
32
|
+
/** Application name (e.g., `"tx"`, `"zzz"`). */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Application version string. */
|
|
35
|
+
version: string;
|
|
36
|
+
/** Short description for the main help header. */
|
|
37
|
+
description: string;
|
|
38
|
+
/** Command registry keyed by command path (e.g., `"apply"`, `"daemon start"`). */
|
|
39
|
+
commands: Record<string, CommandMeta<TCategory>>;
|
|
40
|
+
/** Category display order for main help. */
|
|
41
|
+
categories: Array<HelpCategory<TCategory>>;
|
|
42
|
+
/** Example commands for main help. */
|
|
43
|
+
examples: Array<string>;
|
|
44
|
+
/** Zod schema for global arguments (shown in all help output). */
|
|
45
|
+
global_args_schema: z.ZodType;
|
|
46
|
+
/** Whether to use ANSI colors in output. Defaults to `true`. */
|
|
47
|
+
use_colors?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Help generator returned by `create_help`.
|
|
51
|
+
*/
|
|
52
|
+
export interface HelpGenerator {
|
|
53
|
+
/** Generate main help text with all commands grouped by category. */
|
|
54
|
+
generate_main_help: () => string;
|
|
55
|
+
/** Generate help text for a specific command. */
|
|
56
|
+
generate_command_help: (command: string, meta: CommandMeta) => string;
|
|
57
|
+
/** Get help text for a command or main help. */
|
|
58
|
+
get_help_text: (command?: string, subcommand?: string) => string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get maximum length from array.
|
|
62
|
+
*
|
|
63
|
+
* @param items - array of items
|
|
64
|
+
* @param to_string - function to convert item to string for length measurement
|
|
65
|
+
* @returns maximum string length
|
|
66
|
+
*/
|
|
67
|
+
export declare const to_max_length: <T>(items: Array<T>, to_string: (item: T) => string) => number;
|
|
68
|
+
/**
|
|
69
|
+
* Format argument name with short aliases for display.
|
|
70
|
+
*
|
|
71
|
+
* Only single-char aliases are shown (e.g., `-h, --help`).
|
|
72
|
+
* Flags use snake_case (e.g., `--env_file`, `--detect_only`).
|
|
73
|
+
*
|
|
74
|
+
* @param prop - schema property
|
|
75
|
+
* @returns formatted name string
|
|
76
|
+
*/
|
|
77
|
+
export declare const format_arg_name: (prop: ZodSchemaProperty) => string;
|
|
78
|
+
/**
|
|
79
|
+
* Create a help generator configured for an application.
|
|
80
|
+
*
|
|
81
|
+
* @param options - help configuration
|
|
82
|
+
* @returns help generator with `generate_main_help`, `generate_command_help`, and `get_help_text`
|
|
83
|
+
*/
|
|
84
|
+
export declare const create_help: <TCategory extends string>(options: HelpOptions<TCategory>) => HelpGenerator;
|
|
85
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,EAGN,KAAK,iBAAiB,EACtB,MAAM,yBAAyB,CAAC;AAIjC;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC9D,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC7D,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,4CAA4C;IAC5C,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,sCAAsC;IACtC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,kEAAkE;IAClE,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9B,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,iDAAiD;IACjD,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC;IACtE,gDAAgD;IAChD,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACjE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,KAAG,MACb,CAAC;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,KAAG,MAWzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,SAAS,MAAM,EACnD,SAAS,WAAW,CAAC,SAAS,CAAC,KAC7B,aAoHF,CAAC"}
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-driven CLI help generator.
|
|
3
|
+
*
|
|
4
|
+
* Generalized from the identical pattern in tx and zzz. Consumers configure
|
|
5
|
+
* once with `create_help` and get back `generate_main_help`,
|
|
6
|
+
* `generate_command_help`, and `get_help_text`.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { zod_to_schema_properties, zod_format_value, } from '@fuzdev/fuz_util/zod.js';
|
|
11
|
+
import { colors } from './util.js';
|
|
12
|
+
/**
|
|
13
|
+
* Get maximum length from array.
|
|
14
|
+
*
|
|
15
|
+
* @param items - array of items
|
|
16
|
+
* @param to_string - function to convert item to string for length measurement
|
|
17
|
+
* @returns maximum string length
|
|
18
|
+
*/
|
|
19
|
+
export const to_max_length = (items, to_string) => items.reduce((max, item) => Math.max(to_string(item).length, max), 0);
|
|
20
|
+
/**
|
|
21
|
+
* Format argument name with short aliases for display.
|
|
22
|
+
*
|
|
23
|
+
* Only single-char aliases are shown (e.g., `-h, --help`).
|
|
24
|
+
* Flags use snake_case (e.g., `--env_file`, `--detect_only`).
|
|
25
|
+
*
|
|
26
|
+
* @param prop - schema property
|
|
27
|
+
* @returns formatted name string
|
|
28
|
+
*/
|
|
29
|
+
export const format_arg_name = (prop) => {
|
|
30
|
+
if (prop.name === '_') {
|
|
31
|
+
return '[...args]';
|
|
32
|
+
}
|
|
33
|
+
let name = `--${prop.name}`;
|
|
34
|
+
const short_aliases = prop.aliases.filter((a) => a.length === 1);
|
|
35
|
+
if (short_aliases.length > 0) {
|
|
36
|
+
const alias_str = short_aliases.map((a) => `-${a}`).join(', ');
|
|
37
|
+
name = `${alias_str}, ${name}`;
|
|
38
|
+
}
|
|
39
|
+
return name;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Create a help generator configured for an application.
|
|
43
|
+
*
|
|
44
|
+
* @param options - help configuration
|
|
45
|
+
* @returns help generator with `generate_main_help`, `generate_command_help`, and `get_help_text`
|
|
46
|
+
*/
|
|
47
|
+
export const create_help = (options) => {
|
|
48
|
+
const use_colors = options.use_colors !== false;
|
|
49
|
+
const c = use_colors
|
|
50
|
+
? colors
|
|
51
|
+
: { green: '', yellow: '', blue: '', red: '', cyan: '', dim: '', bold: '', reset: '' };
|
|
52
|
+
const generate_global_options = () => {
|
|
53
|
+
const properties = zod_to_schema_properties(options.global_args_schema);
|
|
54
|
+
const max_width = to_max_length(properties, (p) => ` ${format_arg_name(p)}`);
|
|
55
|
+
return properties.map((prop) => {
|
|
56
|
+
const name = format_arg_name(prop);
|
|
57
|
+
const desc = prop.description || '';
|
|
58
|
+
return ` ${name}`.padEnd(max_width + 2) + desc;
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const generate_command_help = (command, meta) => {
|
|
62
|
+
const lines = [];
|
|
63
|
+
lines.push(`${c.cyan}${options.name} ${command}${c.reset}: ${meta.summary}`);
|
|
64
|
+
lines.push('');
|
|
65
|
+
lines.push(`${c.yellow}Usage${c.reset}: ${meta.usage}`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
if (meta.schema) {
|
|
68
|
+
const properties = zod_to_schema_properties(meta.schema);
|
|
69
|
+
const flag_props = properties.filter((p) => p.name !== '_');
|
|
70
|
+
const positional_prop = properties.find((p) => p.name === '_');
|
|
71
|
+
if (positional_prop?.description) {
|
|
72
|
+
lines.push(`Positional: ${positional_prop.description}`);
|
|
73
|
+
lines.push('');
|
|
74
|
+
}
|
|
75
|
+
if (flag_props.length > 0) {
|
|
76
|
+
lines.push(`${c.yellow}Options${c.reset}:`);
|
|
77
|
+
const longest_name = to_max_length(flag_props, format_arg_name);
|
|
78
|
+
const longest_type = to_max_length(flag_props, (p) => p.type);
|
|
79
|
+
for (const prop of flag_props) {
|
|
80
|
+
const name = format_arg_name(prop).padEnd(longest_name);
|
|
81
|
+
const type = prop.type.padEnd(longest_type);
|
|
82
|
+
const def = zod_format_value(prop.default);
|
|
83
|
+
const desc = prop.description || '';
|
|
84
|
+
const default_str = def ? ` (default: ${def})` : '';
|
|
85
|
+
lines.push(` ${name} ${type} ${desc}${default_str}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// global options
|
|
90
|
+
lines.push('');
|
|
91
|
+
lines.push(`${c.yellow}Global Options${c.reset}:`);
|
|
92
|
+
for (const opt_line of generate_global_options()) {
|
|
93
|
+
lines.push(opt_line);
|
|
94
|
+
}
|
|
95
|
+
return lines.join('\n');
|
|
96
|
+
};
|
|
97
|
+
const generate_main_help = () => {
|
|
98
|
+
const lines = [];
|
|
99
|
+
lines.push(`${c.cyan}${options.name}${c.reset} v${options.version} - ${options.description}`);
|
|
100
|
+
lines.push('');
|
|
101
|
+
// categories with commands
|
|
102
|
+
for (const { key, title } of options.categories) {
|
|
103
|
+
const cat_commands = Object.entries(options.commands).filter(([_, meta]) => meta.category === key);
|
|
104
|
+
if (cat_commands.length === 0)
|
|
105
|
+
continue;
|
|
106
|
+
lines.push(`${c.yellow}${title}${c.reset}:`);
|
|
107
|
+
cat_commands.sort(([a], [b]) => a.localeCompare(b));
|
|
108
|
+
const max_usage_width = to_max_length(cat_commands, ([_, meta]) => ` ${meta.usage}`);
|
|
109
|
+
for (const [_, meta] of cat_commands) {
|
|
110
|
+
const padded = ` ${meta.usage}`.padEnd(Math.max(max_usage_width + 2, 40));
|
|
111
|
+
lines.push(`${padded}${meta.summary}`);
|
|
112
|
+
}
|
|
113
|
+
lines.push('');
|
|
114
|
+
}
|
|
115
|
+
// global options
|
|
116
|
+
lines.push(`${c.yellow}OPTIONS${c.reset}:`);
|
|
117
|
+
for (const opt_line of generate_global_options()) {
|
|
118
|
+
lines.push(opt_line);
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
// examples
|
|
122
|
+
if (options.examples.length > 0) {
|
|
123
|
+
lines.push(`${c.yellow}EXAMPLES${c.reset}:`);
|
|
124
|
+
for (const example of options.examples) {
|
|
125
|
+
lines.push(` ${example}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
};
|
|
130
|
+
const get_help_text = (command, subcommand) => {
|
|
131
|
+
const cmd_key = subcommand ? `${command} ${subcommand}` : command;
|
|
132
|
+
if (cmd_key && options.commands[cmd_key]) {
|
|
133
|
+
return generate_command_help(cmd_key, options.commands[cmd_key]);
|
|
134
|
+
}
|
|
135
|
+
return generate_main_help();
|
|
136
|
+
};
|
|
137
|
+
return { generate_main_help, generate_command_help, get_help_text };
|
|
138
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI logger wrapping `Logger` with semantic output methods.
|
|
3
|
+
*
|
|
4
|
+
* Why wrapper, not subclass: Logger has variadic `...args` methods, CLI adds
|
|
5
|
+
* single-string semantic methods. Mixing calling conventions on one class is confusing.
|
|
6
|
+
* Composition keeps both APIs clean.
|
|
7
|
+
*
|
|
8
|
+
* Why Logger prefixes for error/warn: Unifies error/warn visual style across CLI
|
|
9
|
+
* and backend. CLI-specific methods (success/skip/step/header) add their own semantic
|
|
10
|
+
* prefixes via `logger.info()`.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { Logger } from '@fuzdev/fuz_util/log.js';
|
|
15
|
+
export interface CliLogger {
|
|
16
|
+
/** Logs an error via Logger (gets Logger's error prefix). */
|
|
17
|
+
error: (...args: Array<unknown>) => void;
|
|
18
|
+
/** Logs a warning via Logger (gets Logger's warn prefix). */
|
|
19
|
+
warn: (...args: Array<unknown>) => void;
|
|
20
|
+
/** Logs info via Logger (gets Logger's label prefix). */
|
|
21
|
+
info: (...args: Array<unknown>) => void;
|
|
22
|
+
/** Logs debug via Logger (gets Logger's debug prefix). */
|
|
23
|
+
debug: (...args: Array<unknown>) => void;
|
|
24
|
+
/** Logs raw output via Logger (no prefix, no level filtering). */
|
|
25
|
+
raw: (...args: Array<unknown>) => void;
|
|
26
|
+
/** Logs a success message with `[done]` prefix at info level. */
|
|
27
|
+
success: (msg: string) => void;
|
|
28
|
+
/** Logs a skip message with `[skip]` prefix at info level. */
|
|
29
|
+
skip: (msg: string) => void;
|
|
30
|
+
/** Logs a step message with `==>` prefix at info level. */
|
|
31
|
+
step: (msg: string) => void;
|
|
32
|
+
/** Logs a header with `=== title ===` decoration at info level. */
|
|
33
|
+
header: (title: string) => void;
|
|
34
|
+
/** Logs a dimmed message at info level. */
|
|
35
|
+
dim: (msg: string) => void;
|
|
36
|
+
/** The underlying Logger instance. */
|
|
37
|
+
logger: Logger;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates a CLI logger wrapping a Logger with semantic output methods.
|
|
41
|
+
*
|
|
42
|
+
* @param logger - the Logger instance to wrap
|
|
43
|
+
* @returns a `CliLogger` with CLI semantic methods mapped to Logger levels
|
|
44
|
+
*/
|
|
45
|
+
export declare const create_cli_logger: (logger: Logger) => CliLogger;
|
|
46
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAK/C,MAAM,WAAW,SAAS;IACzB,6DAA6D;IAC7D,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzC,kEAAkE;IAClE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEvC,iEAAiE;IACjE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,8DAA8D;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,mEAAmE;IACnE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,2CAA2C;IAG3C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,SA6BjD,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI logger wrapping `Logger` with semantic output methods.
|
|
3
|
+
*
|
|
4
|
+
* Why wrapper, not subclass: Logger has variadic `...args` methods, CLI adds
|
|
5
|
+
* single-string semantic methods. Mixing calling conventions on one class is confusing.
|
|
6
|
+
* Composition keeps both APIs clean.
|
|
7
|
+
*
|
|
8
|
+
* Why Logger prefixes for error/warn: Unifies error/warn visual style across CLI
|
|
9
|
+
* and backend. CLI-specific methods (success/skip/step/header) add their own semantic
|
|
10
|
+
* prefixes via `logger.info()`.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { Logger } from '@fuzdev/fuz_util/log.js';
|
|
15
|
+
/**
|
|
16
|
+
* Creates a CLI logger wrapping a Logger with semantic output methods.
|
|
17
|
+
*
|
|
18
|
+
* @param logger - the Logger instance to wrap
|
|
19
|
+
* @returns a `CliLogger` with CLI semantic methods mapped to Logger levels
|
|
20
|
+
*/
|
|
21
|
+
export const create_cli_logger = (logger) => ({
|
|
22
|
+
error: (...args) => logger.error(...args),
|
|
23
|
+
warn: (...args) => logger.warn(...args),
|
|
24
|
+
info: (...args) => logger.info(...args),
|
|
25
|
+
debug: (...args) => logger.debug(...args),
|
|
26
|
+
raw: (...args) => logger.raw(...args),
|
|
27
|
+
success: (msg) => {
|
|
28
|
+
const c = logger.colors;
|
|
29
|
+
logger.info(c ? `\x1b[32m[done]\x1b[0m ${msg}` : `[done] ${msg}`);
|
|
30
|
+
},
|
|
31
|
+
skip: (msg) => {
|
|
32
|
+
const c = logger.colors;
|
|
33
|
+
logger.info(c ? `\x1b[33m[skip]\x1b[0m ${msg}` : `[skip] ${msg}`);
|
|
34
|
+
},
|
|
35
|
+
step: (msg) => {
|
|
36
|
+
const c = logger.colors;
|
|
37
|
+
logger.info(c ? `\n\x1b[36m==>\x1b[0m ${msg}` : `\n==> ${msg}`);
|
|
38
|
+
},
|
|
39
|
+
header: (title) => {
|
|
40
|
+
const c = logger.colors;
|
|
41
|
+
logger.info(c ? `\n\x1b[33m=== ${title} ===\x1b[0m\n` : `\n=== ${title} ===\n`);
|
|
42
|
+
},
|
|
43
|
+
dim: (msg) => {
|
|
44
|
+
const c = logger.colors;
|
|
45
|
+
logger.info(c ? `\x1b[2m${msg}\x1b[0m` : msg);
|
|
46
|
+
},
|
|
47
|
+
logger,
|
|
48
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI utilities for colors, confirmation, and command delegation.
|
|
3
|
+
*
|
|
4
|
+
* For structured CLI logging, see `create_cli_logger` in `logger.ts`.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { CommandDeps, CommandResult, TerminalDeps } from '../runtime/deps.js';
|
|
9
|
+
export declare const colors: {
|
|
10
|
+
readonly green: "" | "\u001B[32m";
|
|
11
|
+
readonly yellow: "" | "\u001B[33m";
|
|
12
|
+
readonly blue: "" | "\u001B[34m";
|
|
13
|
+
readonly red: "" | "\u001B[31m";
|
|
14
|
+
readonly cyan: "" | "\u001B[36m";
|
|
15
|
+
readonly dim: "" | "\u001B[2m";
|
|
16
|
+
readonly bold: "" | "\u001B[1m";
|
|
17
|
+
readonly reset: "" | "\u001B[0m";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Run a local command and return the result.
|
|
21
|
+
*
|
|
22
|
+
* @param runtime - runtime with `run_command` capability
|
|
23
|
+
* @param command - command to run
|
|
24
|
+
* @param args - command arguments
|
|
25
|
+
* @returns command result
|
|
26
|
+
*/
|
|
27
|
+
export declare const run_local: (runtime: CommandDeps, command: string, args: Array<string>) => Promise<CommandResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Prompt for yes/no confirmation.
|
|
30
|
+
*
|
|
31
|
+
* @param runtime - runtime with `stdout_write` and `stdin_read` capabilities
|
|
32
|
+
* @param message - message to display
|
|
33
|
+
* @returns `true` if user confirms, `false` otherwise
|
|
34
|
+
*/
|
|
35
|
+
export declare const confirm: (runtime: TerminalDeps, message: string) => Promise<boolean>;
|
|
36
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAQjF,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACrB,SAAS,WAAW,EACpB,SAAS,MAAM,EACf,MAAM,KAAK,CAAC,MAAM,CAAC,KACjB,OAAO,CAAC,aAAa,CAEvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAU,SAAS,YAAY,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAYrF,CAAC"}
|
package/dist/cli/util.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI utilities for colors, confirmation, and command delegation.
|
|
3
|
+
*
|
|
4
|
+
* For structured CLI logging, see `create_cli_logger` in `logger.ts`.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
// TODO: `colors` duplicates the NO_COLOR detection Logger does internally.
|
|
9
|
+
// Long-term, converge with Logger's color system or expose a shared color helper.
|
|
10
|
+
const no_color = typeof process !== 'undefined' &&
|
|
11
|
+
(process.env.NO_COLOR !== undefined || process.env.CLAUDECODE !== undefined);
|
|
12
|
+
export const colors = {
|
|
13
|
+
green: no_color ? '' : '\x1b[32m',
|
|
14
|
+
yellow: no_color ? '' : '\x1b[33m',
|
|
15
|
+
blue: no_color ? '' : '\x1b[34m',
|
|
16
|
+
red: no_color ? '' : '\x1b[31m',
|
|
17
|
+
cyan: no_color ? '' : '\x1b[36m',
|
|
18
|
+
dim: no_color ? '' : '\x1b[2m',
|
|
19
|
+
bold: no_color ? '' : '\x1b[1m',
|
|
20
|
+
reset: no_color ? '' : '\x1b[0m',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Run a local command and return the result.
|
|
24
|
+
*
|
|
25
|
+
* @param runtime - runtime with `run_command` capability
|
|
26
|
+
* @param command - command to run
|
|
27
|
+
* @param args - command arguments
|
|
28
|
+
* @returns command result
|
|
29
|
+
*/
|
|
30
|
+
export const run_local = async (runtime, command, args) => {
|
|
31
|
+
return runtime.run_command(command, args);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Prompt for yes/no confirmation.
|
|
35
|
+
*
|
|
36
|
+
* @param runtime - runtime with `stdout_write` and `stdin_read` capabilities
|
|
37
|
+
* @param message - message to display
|
|
38
|
+
* @returns `true` if user confirms, `false` otherwise
|
|
39
|
+
*/
|
|
40
|
+
export const confirm = async (runtime, message) => {
|
|
41
|
+
const encoder = new TextEncoder();
|
|
42
|
+
const decoder = new TextDecoder();
|
|
43
|
+
await runtime.stdout_write(encoder.encode(`${message} [y/N] `));
|
|
44
|
+
const buf = new Uint8Array(1024);
|
|
45
|
+
const n = await runtime.stdin_read(buf);
|
|
46
|
+
if (n === null)
|
|
47
|
+
return false;
|
|
48
|
+
const input = decoder.decode(buf.subarray(0, n)).trim().toLowerCase();
|
|
49
|
+
return input === 'y' || input === 'yes';
|
|
50
|
+
};
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared cryptographic utilities.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generate a cryptographically random base64url string.
|
|
8
|
+
*
|
|
9
|
+
* @param byte_length - number of random bytes (default 32 = 256 bits)
|
|
10
|
+
* @returns base64url-encoded string without padding
|
|
11
|
+
*/
|
|
12
|
+
export declare const generate_random_base64url: (byte_length?: number) => string;
|
|
13
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,oBAAgB,KAAG,MAO5D,CAAC"}
|