@allstak/wizard 0.1.3
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 +90 -0
- package/README.md +79 -0
- package/dist/api/auth-client.d.ts +22 -0
- package/dist/api/auth-client.d.ts.map +1 -0
- package/dist/api/auth-client.js +65 -0
- package/dist/api/auth-client.js.map +1 -0
- package/dist/api/auth.d.ts +39 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +69 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/client.d.ts +15 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +19 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/http.d.ts +44 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +130 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +12 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +12 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/orgs-client.d.ts +16 -0
- package/dist/api/orgs-client.d.ts.map +1 -0
- package/dist/api/orgs-client.js +36 -0
- package/dist/api/orgs-client.js.map +1 -0
- package/dist/api/projects-client.d.ts +27 -0
- package/dist/api/projects-client.d.ts.map +1 -0
- package/dist/api/projects-client.js +58 -0
- package/dist/api/projects-client.js.map +1 -0
- package/dist/api/setup-doctor-client.d.ts +31 -0
- package/dist/api/setup-doctor-client.d.ts.map +1 -0
- package/dist/api/setup-doctor-client.js +68 -0
- package/dist/api/setup-doctor-client.js.map +1 -0
- package/dist/api/types.d.ts +92 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +303 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/_context.d.ts +37 -0
- package/dist/commands/_context.d.ts.map +1 -0
- package/dist/commands/_context.js +61 -0
- package/dist/commands/_context.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +24 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +137 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/doctor.d.ts +58 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +389 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +28 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +157 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +14 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +27 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +116 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +15 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +36 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/orgs.d.ts +14 -0
- package/dist/commands/orgs.d.ts.map +1 -0
- package/dist/commands/orgs.js +39 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/projects.d.ts +21 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +86 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/repair.d.ts +12 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.js +45 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/restore.d.ts +32 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +120 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/uninstall.d.ts +13 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +53 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/whoami.d.ts +13 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +54 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/compat/engine.d.ts +31 -0
- package/dist/compat/engine.d.ts.map +1 -0
- package/dist/compat/engine.js +82 -0
- package/dist/compat/engine.js.map +1 -0
- package/dist/config/define.d.ts +21 -0
- package/dist/config/define.d.ts.map +1 -0
- package/dist/config/define.js +22 -0
- package/dist/config/define.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +26 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +84 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/migrations.d.ts +64 -0
- package/dist/config/migrations.d.ts.map +1 -0
- package/dist/config/migrations.js +66 -0
- package/dist/config/migrations.js.map +1 -0
- package/dist/config/precedence.d.ts +24 -0
- package/dist/config/precedence.d.ts.map +1 -0
- package/dist/config/precedence.js +55 -0
- package/dist/config/precedence.js.map +1 -0
- package/dist/config/schema.d.ts +10 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +140 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +80 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +23 -0
- package/dist/config/types.js.map +1 -0
- package/dist/credentials/encrypted-file.d.ts +3 -0
- package/dist/credentials/encrypted-file.d.ts.map +1 -0
- package/dist/credentials/encrypted-file.js +139 -0
- package/dist/credentials/encrypted-file.js.map +1 -0
- package/dist/credentials/error.d.ts +11 -0
- package/dist/credentials/error.d.ts.map +1 -0
- package/dist/credentials/error.js +14 -0
- package/dist/credentials/error.js.map +1 -0
- package/dist/credentials/index.d.ts +20 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +56 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/keychain-darwin.d.ts +11 -0
- package/dist/credentials/keychain-darwin.d.ts.map +1 -0
- package/dist/credentials/keychain-darwin.js +88 -0
- package/dist/credentials/keychain-darwin.js.map +1 -0
- package/dist/credentials/keychain-linux.d.ts +13 -0
- package/dist/credentials/keychain-linux.d.ts.map +1 -0
- package/dist/credentials/keychain-linux.js +88 -0
- package/dist/credentials/keychain-linux.js.map +1 -0
- package/dist/credentials/keychain-win.d.ts +13 -0
- package/dist/credentials/keychain-win.d.ts.map +1 -0
- package/dist/credentials/keychain-win.js +31 -0
- package/dist/credentials/keychain-win.js.map +1 -0
- package/dist/credentials/types.d.ts +38 -0
- package/dist/credentials/types.d.ts.map +1 -0
- package/dist/credentials/types.js +5 -0
- package/dist/credentials/types.js.map +1 -0
- package/dist/detect/framework.d.ts +28 -0
- package/dist/detect/framework.d.ts.map +1 -0
- package/dist/detect/framework.js +131 -0
- package/dist/detect/framework.js.map +1 -0
- package/dist/detect/index.d.ts +4 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +4 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/detect/monorepo.d.ts +10 -0
- package/dist/detect/monorepo.d.ts.map +1 -0
- package/dist/detect/monorepo.js +42 -0
- package/dist/detect/monorepo.js.map +1 -0
- package/dist/detect/package-manager.d.ts +18 -0
- package/dist/detect/package-manager.d.ts.map +1 -0
- package/dist/detect/package-manager.js +60 -0
- package/dist/detect/package-manager.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/_scaffold.d.ts +23 -0
- package/dist/integrations/_scaffold.d.ts.map +1 -0
- package/dist/integrations/_scaffold.js +62 -0
- package/dist/integrations/_scaffold.js.map +1 -0
- package/dist/integrations/_shared.d.ts +18 -0
- package/dist/integrations/_shared.d.ts.map +1 -0
- package/dist/integrations/_shared.js +73 -0
- package/dist/integrations/_shared.js.map +1 -0
- package/dist/integrations/_simple-scaffold.d.ts +19 -0
- package/dist/integrations/_simple-scaffold.d.ts.map +1 -0
- package/dist/integrations/_simple-scaffold.js +23 -0
- package/dist/integrations/_simple-scaffold.js.map +1 -0
- package/dist/integrations/dotnet.d.ts +2 -0
- package/dist/integrations/dotnet.d.ts.map +1 -0
- package/dist/integrations/dotnet.js +9 -0
- package/dist/integrations/dotnet.js.map +1 -0
- package/dist/integrations/expo.d.ts +2 -0
- package/dist/integrations/expo.d.ts.map +1 -0
- package/dist/integrations/expo.js +12 -0
- package/dist/integrations/expo.js.map +1 -0
- package/dist/integrations/fastify.d.ts +2 -0
- package/dist/integrations/fastify.d.ts.map +1 -0
- package/dist/integrations/fastify.js +10 -0
- package/dist/integrations/fastify.js.map +1 -0
- package/dist/integrations/flutter.d.ts +2 -0
- package/dist/integrations/flutter.d.ts.map +1 -0
- package/dist/integrations/flutter.js +9 -0
- package/dist/integrations/flutter.js.map +1 -0
- package/dist/integrations/go.d.ts +2 -0
- package/dist/integrations/go.d.ts.map +1 -0
- package/dist/integrations/go.js +9 -0
- package/dist/integrations/go.js.map +1 -0
- package/dist/integrations/java.d.ts +2 -0
- package/dist/integrations/java.d.ts.map +1 -0
- package/dist/integrations/java.js +9 -0
- package/dist/integrations/java.js.map +1 -0
- package/dist/integrations/js/detect.d.ts +3 -0
- package/dist/integrations/js/detect.d.ts.map +1 -0
- package/dist/integrations/js/detect.js +7 -0
- package/dist/integrations/js/detect.js.map +1 -0
- package/dist/integrations/js/doctor.d.ts +3 -0
- package/dist/integrations/js/doctor.d.ts.map +1 -0
- package/dist/integrations/js/doctor.js +38 -0
- package/dist/integrations/js/doctor.js.map +1 -0
- package/dist/integrations/js/files.d.ts +3 -0
- package/dist/integrations/js/files.d.ts.map +1 -0
- package/dist/integrations/js/files.js +19 -0
- package/dist/integrations/js/files.js.map +1 -0
- package/dist/integrations/js/index.d.ts +3 -0
- package/dist/integrations/js/index.d.ts.map +1 -0
- package/dist/integrations/js/index.js +25 -0
- package/dist/integrations/js/index.js.map +1 -0
- package/dist/integrations/js/manifest.d.ts +3 -0
- package/dist/integrations/js/manifest.d.ts.map +1 -0
- package/dist/integrations/js/manifest.js +19 -0
- package/dist/integrations/js/manifest.js.map +1 -0
- package/dist/integrations/js/patch.d.ts +4 -0
- package/dist/integrations/js/patch.d.ts.map +1 -0
- package/dist/integrations/js/patch.js +24 -0
- package/dist/integrations/js/patch.js.map +1 -0
- package/dist/integrations/js/uninstall.d.ts +4 -0
- package/dist/integrations/js/uninstall.d.ts.map +1 -0
- package/dist/integrations/js/uninstall.js +16 -0
- package/dist/integrations/js/uninstall.js.map +1 -0
- package/dist/integrations/nestjs.d.ts +2 -0
- package/dist/integrations/nestjs.d.ts.map +1 -0
- package/dist/integrations/nestjs.js +10 -0
- package/dist/integrations/nestjs.js.map +1 -0
- package/dist/integrations/next/detect.d.ts +3 -0
- package/dist/integrations/next/detect.d.ts.map +1 -0
- package/dist/integrations/next/detect.js +11 -0
- package/dist/integrations/next/detect.js.map +1 -0
- package/dist/integrations/next/doctor.d.ts +3 -0
- package/dist/integrations/next/doctor.d.ts.map +1 -0
- package/dist/integrations/next/doctor.js +46 -0
- package/dist/integrations/next/doctor.js.map +1 -0
- package/dist/integrations/next/files.d.ts +3 -0
- package/dist/integrations/next/files.d.ts.map +1 -0
- package/dist/integrations/next/files.js +19 -0
- package/dist/integrations/next/files.js.map +1 -0
- package/dist/integrations/next/index.d.ts +3 -0
- package/dist/integrations/next/index.d.ts.map +1 -0
- package/dist/integrations/next/index.js +44 -0
- package/dist/integrations/next/index.js.map +1 -0
- package/dist/integrations/next/manifest.d.ts +3 -0
- package/dist/integrations/next/manifest.d.ts.map +1 -0
- package/dist/integrations/next/manifest.js +29 -0
- package/dist/integrations/next/manifest.js.map +1 -0
- package/dist/integrations/next/patch.d.ts +4 -0
- package/dist/integrations/next/patch.d.ts.map +1 -0
- package/dist/integrations/next/patch.js +49 -0
- package/dist/integrations/next/patch.js.map +1 -0
- package/dist/integrations/next/uninstall.d.ts +4 -0
- package/dist/integrations/next/uninstall.d.ts.map +1 -0
- package/dist/integrations/next/uninstall.js +22 -0
- package/dist/integrations/next/uninstall.js.map +1 -0
- package/dist/integrations/otel.d.ts +2 -0
- package/dist/integrations/otel.d.ts.map +1 -0
- package/dist/integrations/otel.js +10 -0
- package/dist/integrations/otel.js.map +1 -0
- package/dist/integrations/php.d.ts +2 -0
- package/dist/integrations/php.d.ts.map +1 -0
- package/dist/integrations/php.js +9 -0
- package/dist/integrations/php.js.map +1 -0
- package/dist/integrations/python.d.ts +2 -0
- package/dist/integrations/python.d.ts.map +1 -0
- package/dist/integrations/python.js +9 -0
- package/dist/integrations/python.js.map +1 -0
- package/dist/integrations/react/detect.d.ts +3 -0
- package/dist/integrations/react/detect.d.ts.map +1 -0
- package/dist/integrations/react/detect.js +11 -0
- package/dist/integrations/react/detect.js.map +1 -0
- package/dist/integrations/react/doctor.d.ts +3 -0
- package/dist/integrations/react/doctor.d.ts.map +1 -0
- package/dist/integrations/react/doctor.js +65 -0
- package/dist/integrations/react/doctor.js.map +1 -0
- package/dist/integrations/react/files.d.ts +4 -0
- package/dist/integrations/react/files.d.ts.map +1 -0
- package/dist/integrations/react/files.js +24 -0
- package/dist/integrations/react/files.js.map +1 -0
- package/dist/integrations/react/index.d.ts +17 -0
- package/dist/integrations/react/index.d.ts.map +1 -0
- package/dist/integrations/react/index.js +62 -0
- package/dist/integrations/react/index.js.map +1 -0
- package/dist/integrations/react/manifest.d.ts +3 -0
- package/dist/integrations/react/manifest.d.ts.map +1 -0
- package/dist/integrations/react/manifest.js +31 -0
- package/dist/integrations/react/manifest.js.map +1 -0
- package/dist/integrations/react/patch.d.ts +4 -0
- package/dist/integrations/react/patch.d.ts.map +1 -0
- package/dist/integrations/react/patch.js +39 -0
- package/dist/integrations/react/patch.js.map +1 -0
- package/dist/integrations/react/uninstall.d.ts +4 -0
- package/dist/integrations/react/uninstall.d.ts.map +1 -0
- package/dist/integrations/react/uninstall.js +21 -0
- package/dist/integrations/react/uninstall.js.map +1 -0
- package/dist/integrations/react-native.d.ts +10 -0
- package/dist/integrations/react-native.d.ts.map +1 -0
- package/dist/integrations/react-native.js +57 -0
- package/dist/integrations/react-native.js.map +1 -0
- package/dist/integrations/ruby.d.ts +2 -0
- package/dist/integrations/ruby.d.ts.map +1 -0
- package/dist/integrations/ruby.js +9 -0
- package/dist/integrations/ruby.js.map +1 -0
- package/dist/lifecycle/hooks.d.ts +42 -0
- package/dist/lifecycle/hooks.d.ts.map +1 -0
- package/dist/lifecycle/hooks.js +43 -0
- package/dist/lifecycle/hooks.js.map +1 -0
- package/dist/migrations/builtin/dsn-to-api-key.d.ts +3 -0
- package/dist/migrations/builtin/dsn-to-api-key.d.ts.map +1 -0
- package/dist/migrations/builtin/dsn-to-api-key.js +59 -0
- package/dist/migrations/builtin/dsn-to-api-key.js.map +1 -0
- package/dist/migrations/engine.d.ts +52 -0
- package/dist/migrations/engine.d.ts.map +1 -0
- package/dist/migrations/engine.js +46 -0
- package/dist/migrations/engine.js.map +1 -0
- package/dist/migrations/index.d.ts +3 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +11 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/output/human.d.ts +20 -0
- package/dist/output/human.d.ts.map +1 -0
- package/dist/output/human.js +77 -0
- package/dist/output/human.js.map +1 -0
- package/dist/output/index.d.ts +6 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +8 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/json.d.ts +20 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +60 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/types.d.ts +36 -0
- package/dist/output/types.d.ts.map +1 -0
- package/dist/output/types.js +2 -0
- package/dist/output/types.js.map +1 -0
- package/dist/patchers/env-file.d.ts +21 -0
- package/dist/patchers/env-file.d.ts.map +1 -0
- package/dist/patchers/env-file.js +77 -0
- package/dist/patchers/env-file.js.map +1 -0
- package/dist/patchers/js-ast.d.ts +29 -0
- package/dist/patchers/js-ast.d.ts.map +1 -0
- package/dist/patchers/js-ast.js +71 -0
- package/dist/patchers/js-ast.js.map +1 -0
- package/dist/patchers/json-file.d.ts +19 -0
- package/dist/patchers/json-file.d.ts.map +1 -0
- package/dist/patchers/json-file.js +41 -0
- package/dist/patchers/json-file.js.map +1 -0
- package/dist/patchers/markers.d.ts +28 -0
- package/dist/patchers/markers.d.ts.map +1 -0
- package/dist/patchers/markers.js +49 -0
- package/dist/patchers/markers.js.map +1 -0
- package/dist/patchers/source-block.d.ts +24 -0
- package/dist/patchers/source-block.d.ts.map +1 -0
- package/dist/patchers/source-block.js +40 -0
- package/dist/patchers/source-block.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +42 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/manifest.d.ts +78 -0
- package/dist/registry/manifest.d.ts.map +1 -0
- package/dist/registry/manifest.js +2 -0
- package/dist/registry/manifest.js.map +1 -0
- package/dist/registry/registry.d.ts +14 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +29 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/types.d.ts +78 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +2 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/snapshot/restore.d.ts +41 -0
- package/dist/snapshot/restore.d.ts.map +1 -0
- package/dist/snapshot/restore.js +110 -0
- package/dist/snapshot/restore.js.map +1 -0
- package/dist/snapshot/store.d.ts +105 -0
- package/dist/snapshot/store.d.ts.map +1 -0
- package/dist/snapshot/store.js +162 -0
- package/dist/snapshot/store.js.map +1 -0
- package/dist/sourcemaps/index.d.ts +3 -0
- package/dist/sourcemaps/index.d.ts.map +1 -0
- package/dist/sourcemaps/index.js +17 -0
- package/dist/sourcemaps/index.js.map +1 -0
- package/dist/sourcemaps/metro.d.ts +11 -0
- package/dist/sourcemaps/metro.d.ts.map +1 -0
- package/dist/sourcemaps/metro.js +31 -0
- package/dist/sourcemaps/metro.js.map +1 -0
- package/dist/sourcemaps/next.d.ts +3 -0
- package/dist/sourcemaps/next.d.ts.map +1 -0
- package/dist/sourcemaps/next.js +46 -0
- package/dist/sourcemaps/next.js.map +1 -0
- package/dist/sourcemaps/provider.d.ts +51 -0
- package/dist/sourcemaps/provider.d.ts.map +1 -0
- package/dist/sourcemaps/provider.js +29 -0
- package/dist/sourcemaps/provider.js.map +1 -0
- package/dist/sourcemaps/vite.d.ts +3 -0
- package/dist/sourcemaps/vite.d.ts.map +1 -0
- package/dist/sourcemaps/vite.js +60 -0
- package/dist/sourcemaps/vite.js.map +1 -0
- package/dist/sourcemaps/webpack.d.ts +8 -0
- package/dist/sourcemaps/webpack.d.ts.map +1 -0
- package/dist/sourcemaps/webpack.js +52 -0
- package/dist/sourcemaps/webpack.js.map +1 -0
- package/dist/telemetry/cli-wrap.d.ts +22 -0
- package/dist/telemetry/cli-wrap.d.ts.map +1 -0
- package/dist/telemetry/cli-wrap.js +53 -0
- package/dist/telemetry/cli-wrap.js.map +1 -0
- package/dist/telemetry/http-provider.d.ts +28 -0
- package/dist/telemetry/http-provider.d.ts.map +1 -0
- package/dist/telemetry/http-provider.js +24 -0
- package/dist/telemetry/http-provider.js.map +1 -0
- package/dist/telemetry/index.d.ts +7 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +6 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/install-id.d.ts +3 -0
- package/dist/telemetry/install-id.d.ts.map +1 -0
- package/dist/telemetry/install-id.js +46 -0
- package/dist/telemetry/install-id.js.map +1 -0
- package/dist/telemetry/payload.d.ts +82 -0
- package/dist/telemetry/payload.d.ts.map +1 -0
- package/dist/telemetry/payload.js +82 -0
- package/dist/telemetry/payload.js.map +1 -0
- package/dist/telemetry/provider.d.ts +32 -0
- package/dist/telemetry/provider.d.ts.map +1 -0
- package/dist/telemetry/provider.js +30 -0
- package/dist/telemetry/provider.js.map +1 -0
- package/dist/telemetry/runtime.d.ts +29 -0
- package/dist/telemetry/runtime.d.ts.map +1 -0
- package/dist/telemetry/runtime.js +44 -0
- package/dist/telemetry/runtime.js.map +1 -0
- package/dist/transaction/tx.d.ts +58 -0
- package/dist/transaction/tx.d.ts.map +1 -0
- package/dist/transaction/tx.js +170 -0
- package/dist/transaction/tx.js.map +1 -0
- package/dist/util/error-codes.d.ts +29 -0
- package/dist/util/error-codes.d.ts.map +1 -0
- package/dist/util/error-codes.js +192 -0
- package/dist/util/error-codes.js.map +1 -0
- package/dist/util/errors.d.ts +83 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +110 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/log.d.ts +11 -0
- package/dist/util/log.d.ts.map +1 -0
- package/dist/util/log.js +18 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/paths.d.ts +3 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +31 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/version.d.ts +15 -0
- package/dist/util/version.d.ts.map +1 -0
- package/dist/util/version.js +40 -0
- package/dist/util/version.js.map +1 -0
- package/dist/util/wizard-version.d.ts +6 -0
- package/dist/util/wizard-version.d.ts.map +1 -0
- package/dist/util/wizard-version.js +6 -0
- package/dist/util/wizard-version.js.map +1 -0
- package/docs/architecture/README.md +58 -0
- package/docs/architecture/dry-run.md +34 -0
- package/docs/architecture/integration-lifecycle.md +77 -0
- package/docs/architecture/patch-pipeline.md +58 -0
- package/docs/architecture/registry.md +52 -0
- package/docs/architecture/rollback.md +47 -0
- package/docs/architecture/sourcemaps.md +53 -0
- package/docs/architecture/stability-levels.md +35 -0
- package/docs/architecture/transaction.md +51 -0
- package/docs/architecture/v02-bare-react-native-spec.md +92 -0
- package/docs/architecture/v02-java-host-fix-spec.md +125 -0
- package/docs/architecture/v02-sourcemaps-e2e-spec.md +157 -0
- package/package.json +98 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
|
+
import { dirname, relative, resolve } from 'node:path';
|
|
3
|
+
import { TransactionAbortedError, PatchSyntaxError } from '../util/errors.js';
|
|
4
|
+
import { log } from '../util/log.js';
|
|
5
|
+
/**
|
|
6
|
+
* Atomic file-mutation transaction. Every mutation is snapshotted before the write;
|
|
7
|
+
* on any failure (including a post-write syntax-validation failure) the entire
|
|
8
|
+
* transaction is rolled back in reverse order.
|
|
9
|
+
*
|
|
10
|
+
* Idempotency contract: callers writing into a file that already contains the same
|
|
11
|
+
* content should detect that and skip — Transaction does NOT dedupe writes for you.
|
|
12
|
+
*/
|
|
13
|
+
export class Transaction {
|
|
14
|
+
snapshots = [];
|
|
15
|
+
diffs = [];
|
|
16
|
+
written = new Set();
|
|
17
|
+
options;
|
|
18
|
+
committed = false;
|
|
19
|
+
rolledBack = false;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
}
|
|
23
|
+
get dryRun() {
|
|
24
|
+
return this.options.dryRun === true;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Stage a write. Snapshots the file (if it exists) and writes the new content.
|
|
28
|
+
* Pass a syntax validator to fail-fast on broken output.
|
|
29
|
+
*/
|
|
30
|
+
async write(filePath, content, validator) {
|
|
31
|
+
if (this.committed || this.rolledBack) {
|
|
32
|
+
throw new Error('Cannot write after commit/rollback');
|
|
33
|
+
}
|
|
34
|
+
const abs = resolve(filePath);
|
|
35
|
+
if (!this.written.has(abs)) {
|
|
36
|
+
const existed = existsSync(abs);
|
|
37
|
+
const beforeContent = existed ? readFileSync(abs, 'utf8') : null;
|
|
38
|
+
this.snapshots.push({ path: abs, existed, content: beforeContent });
|
|
39
|
+
this.written.add(abs);
|
|
40
|
+
this.options.snapshotWriter?.capture({
|
|
41
|
+
path: abs,
|
|
42
|
+
kind: existed ? 'modify' : 'create',
|
|
43
|
+
before: beforeContent,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const before = existsSync(abs) ? readFileSync(abs, 'utf8') : null;
|
|
47
|
+
this.diffs.push({
|
|
48
|
+
path: abs,
|
|
49
|
+
before,
|
|
50
|
+
after: content,
|
|
51
|
+
kind: before === null ? 'create' : 'modify',
|
|
52
|
+
});
|
|
53
|
+
if (this.dryRun) {
|
|
54
|
+
log.debug(`(dry-run) would write ${abs} (${content.length} bytes)`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
58
|
+
writeFileSync(abs, content, 'utf8');
|
|
59
|
+
if (validator) {
|
|
60
|
+
try {
|
|
61
|
+
await validator(abs, content);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
await this.rollback();
|
|
65
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
66
|
+
throw new PatchSyntaxError(abs, detail);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Stage a deletion (with snapshot for restore on rollback).
|
|
72
|
+
*/
|
|
73
|
+
async delete(filePath) {
|
|
74
|
+
if (this.committed || this.rolledBack) {
|
|
75
|
+
throw new Error('Cannot delete after commit/rollback');
|
|
76
|
+
}
|
|
77
|
+
const abs = resolve(filePath);
|
|
78
|
+
if (!existsSync(abs))
|
|
79
|
+
return;
|
|
80
|
+
if (!this.written.has(abs)) {
|
|
81
|
+
const beforeContent = readFileSync(abs, 'utf8');
|
|
82
|
+
this.snapshots.push({ path: abs, existed: true, content: beforeContent });
|
|
83
|
+
this.written.add(abs);
|
|
84
|
+
this.options.snapshotWriter?.capture({ path: abs, kind: 'delete', before: beforeContent });
|
|
85
|
+
}
|
|
86
|
+
this.diffs.push({
|
|
87
|
+
path: abs,
|
|
88
|
+
before: readFileSync(abs, 'utf8'),
|
|
89
|
+
after: '',
|
|
90
|
+
kind: 'delete',
|
|
91
|
+
});
|
|
92
|
+
if (this.dryRun)
|
|
93
|
+
return;
|
|
94
|
+
rmSync(abs);
|
|
95
|
+
}
|
|
96
|
+
async commit() {
|
|
97
|
+
if (this.rolledBack)
|
|
98
|
+
throw new Error('Cannot commit after rollback');
|
|
99
|
+
this.committed = true;
|
|
100
|
+
if (this.options.snapshotWriter) {
|
|
101
|
+
if (this.dryRun) {
|
|
102
|
+
this.options.snapshotWriter.abort();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.options.snapshotWriter.commit();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async rollback() {
|
|
110
|
+
if (this.committed || this.rolledBack)
|
|
111
|
+
return;
|
|
112
|
+
this.rolledBack = true;
|
|
113
|
+
if (this.dryRun) {
|
|
114
|
+
this.options.snapshotWriter?.abort();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (let i = this.snapshots.length - 1; i >= 0; i--) {
|
|
118
|
+
const snap = this.snapshots[i];
|
|
119
|
+
try {
|
|
120
|
+
if (!snap.existed) {
|
|
121
|
+
if (existsSync(snap.path))
|
|
122
|
+
rmSync(snap.path);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
mkdirSync(dirname(snap.path), { recursive: true });
|
|
126
|
+
writeFileSync(snap.path, snap.content ?? '', 'utf8');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
log.error(`Rollback failed for ${snap.path}: ${err instanceof Error ? err.message : String(err)}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
this.options.snapshotWriter?.abort();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Run a unit of work inside this transaction. If the function throws, the transaction
|
|
137
|
+
* is rolled back and the original error is wrapped in TransactionAbortedError.
|
|
138
|
+
*/
|
|
139
|
+
async run(work) {
|
|
140
|
+
try {
|
|
141
|
+
const result = await work();
|
|
142
|
+
await this.commit();
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
await this.rollback();
|
|
147
|
+
if (err instanceof Error && err.name === 'TransactionAbortedError')
|
|
148
|
+
throw err;
|
|
149
|
+
throw new TransactionAbortedError(err);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
describeDiffs(cwd) {
|
|
153
|
+
const root = cwd ?? this.options.cwd ?? process.cwd();
|
|
154
|
+
return this.diffs.map((d) => {
|
|
155
|
+
const rel = relative(root, d.path) || d.path;
|
|
156
|
+
switch (d.kind) {
|
|
157
|
+
case 'create':
|
|
158
|
+
return `+ create ${rel} (${d.after.length} bytes)`;
|
|
159
|
+
case 'delete':
|
|
160
|
+
return `- delete ${rel}`;
|
|
161
|
+
case 'modify':
|
|
162
|
+
return `~ modify ${rel} (${(d.before?.length ?? 0)} → ${d.after.length} bytes)`;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
get plannedDiffs() {
|
|
167
|
+
return this.diffs;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=tx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/transaction/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAgCrC;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IACL,SAAS,GAAmB,EAAE,CAAC;IAC/B,KAAK,GAAkB,EAAE,CAAC;IAC1B,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,OAAO,CAAqB;IACrC,SAAS,GAAG,KAAK,CAAC;IAClB,UAAU,GAAG,KAAK,CAAC;IAE3B,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,OAAe,EAAE,SAA2B;QACxE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC;gBACnC,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACnC,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,GAAG;YACT,MAAM;YACN,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;SAC5C,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,yBAAyB,GAAG,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChE,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CACP,uBAAuB,IAAI,CAAC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAI,IAA0B;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB;gBAAE,MAAM,GAAG,CAAC;YAC9E,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,GAAY;QACxB,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC7C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,QAAQ;oBACX,OAAO,YAAY,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;gBACrD,KAAK,QAAQ;oBACX,OAAO,YAAY,GAAG,EAAE,CAAC;gBAC3B,KAAK,QAAQ;oBACX,OAAO,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;YACpF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralised error catalog. Every `WizardError` thrown anywhere in the
|
|
3
|
+
* codebase MUST use one of these canonical codes. Internal-detail strings live
|
|
4
|
+
* in `WizardError.subcode` (free-form, for grep-ability in logs); user-facing
|
|
5
|
+
* code lives in `WizardError.code` (stable, surfaced in JSON output and
|
|
6
|
+
* telemetry).
|
|
7
|
+
*
|
|
8
|
+
* If you need a new category, ADD IT HERE FIRST. Don't sneak in ad-hoc codes
|
|
9
|
+
* — telemetry and the public docs depend on this enumeration.
|
|
10
|
+
*/
|
|
11
|
+
export declare const WIZARD_ERROR_CODES: readonly ["E_AUTH_REQUIRED", "E_AUTH_FAILED", "E_AUTH_EXPIRED", "E_BACKEND_CONTRACT_MISSING", "E_PROJECT_NOT_FOUND", "E_PROJECT_CREATE_FAILED", "E_API_KEY_CREATE_FAILED", "E_UNSUPPORTED_FRAMEWORK", "E_UNSUPPORTED_VERSION", "E_PACKAGE_MANAGER_CONFLICT", "E_PATCH_FAILED", "E_PATCH_ROLLBACK_FAILED", "E_RESTORE_FAILED", "E_CONFIG_INVALID", "E_CONFIG_MIGRATION_FAILED", "E_DOCTOR_FAILED", "E_INGEST_VERIFY_FAILED", "E_SOURCEMAP_VERIFY_FAILED", "E_NETWORK_FAILED", "E_PERMISSION_DENIED", "E_USER_CANCELLED", "E_UNKNOWN"];
|
|
12
|
+
export type WizardErrorCode = (typeof WIZARD_ERROR_CODES)[number];
|
|
13
|
+
export declare const WIZARD_STAGES: readonly ["auth", "reachability", "config", "detect", "install", "patch", "rollback", "validate", "event-ingest", "release-linkage", "source-maps", "restore", "cli"];
|
|
14
|
+
export type WizardStage = (typeof WIZARD_STAGES)[number];
|
|
15
|
+
export interface WizardErrorMeta {
|
|
16
|
+
code: WizardErrorCode;
|
|
17
|
+
/** One-line description shown at the top of `docs/errors.md`. */
|
|
18
|
+
description: string;
|
|
19
|
+
/** Default fix shown if a thrower passes none. */
|
|
20
|
+
defaultFix: string;
|
|
21
|
+
/** Logical stage where this code most often originates. */
|
|
22
|
+
stage: WizardStage;
|
|
23
|
+
}
|
|
24
|
+
export declare const WIZARD_ERROR_META: Record<WizardErrorCode, WizardErrorMeta>;
|
|
25
|
+
/** Type-guard for the canonical code union. */
|
|
26
|
+
export declare function isWizardErrorCode(s: string): s is WizardErrorCode;
|
|
27
|
+
/** Lookup a metadata record, falling back to E_UNKNOWN. */
|
|
28
|
+
export declare function lookupErrorMeta(code: WizardErrorCode): WizardErrorMeta;
|
|
29
|
+
//# sourceMappingURL=error-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/util/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,kBAAkB,sgBAuBrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,aAAa,uKAchB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAqItE,CAAC;AAEF,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,eAAe,CAEjE;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAEtE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralised error catalog. Every `WizardError` thrown anywhere in the
|
|
3
|
+
* codebase MUST use one of these canonical codes. Internal-detail strings live
|
|
4
|
+
* in `WizardError.subcode` (free-form, for grep-ability in logs); user-facing
|
|
5
|
+
* code lives in `WizardError.code` (stable, surfaced in JSON output and
|
|
6
|
+
* telemetry).
|
|
7
|
+
*
|
|
8
|
+
* If you need a new category, ADD IT HERE FIRST. Don't sneak in ad-hoc codes
|
|
9
|
+
* — telemetry and the public docs depend on this enumeration.
|
|
10
|
+
*/
|
|
11
|
+
export const WIZARD_ERROR_CODES = [
|
|
12
|
+
'E_AUTH_REQUIRED',
|
|
13
|
+
'E_AUTH_FAILED',
|
|
14
|
+
'E_AUTH_EXPIRED',
|
|
15
|
+
'E_BACKEND_CONTRACT_MISSING',
|
|
16
|
+
'E_PROJECT_NOT_FOUND',
|
|
17
|
+
'E_PROJECT_CREATE_FAILED',
|
|
18
|
+
'E_API_KEY_CREATE_FAILED',
|
|
19
|
+
'E_UNSUPPORTED_FRAMEWORK',
|
|
20
|
+
'E_UNSUPPORTED_VERSION',
|
|
21
|
+
'E_PACKAGE_MANAGER_CONFLICT',
|
|
22
|
+
'E_PATCH_FAILED',
|
|
23
|
+
'E_PATCH_ROLLBACK_FAILED',
|
|
24
|
+
'E_RESTORE_FAILED',
|
|
25
|
+
'E_CONFIG_INVALID',
|
|
26
|
+
'E_CONFIG_MIGRATION_FAILED',
|
|
27
|
+
'E_DOCTOR_FAILED',
|
|
28
|
+
'E_INGEST_VERIFY_FAILED',
|
|
29
|
+
'E_SOURCEMAP_VERIFY_FAILED',
|
|
30
|
+
'E_NETWORK_FAILED',
|
|
31
|
+
'E_PERMISSION_DENIED',
|
|
32
|
+
'E_USER_CANCELLED',
|
|
33
|
+
'E_UNKNOWN',
|
|
34
|
+
];
|
|
35
|
+
export const WIZARD_STAGES = [
|
|
36
|
+
'auth',
|
|
37
|
+
'reachability',
|
|
38
|
+
'config',
|
|
39
|
+
'detect',
|
|
40
|
+
'install',
|
|
41
|
+
'patch',
|
|
42
|
+
'rollback',
|
|
43
|
+
'validate',
|
|
44
|
+
'event-ingest',
|
|
45
|
+
'release-linkage',
|
|
46
|
+
'source-maps',
|
|
47
|
+
'restore',
|
|
48
|
+
'cli',
|
|
49
|
+
];
|
|
50
|
+
export const WIZARD_ERROR_META = {
|
|
51
|
+
E_AUTH_REQUIRED: {
|
|
52
|
+
code: 'E_AUTH_REQUIRED',
|
|
53
|
+
description: 'A command needs credentials but none were available.',
|
|
54
|
+
defaultFix: 'Run `allstak login`, or pass --api-key for ingest-only commands.',
|
|
55
|
+
stage: 'auth',
|
|
56
|
+
},
|
|
57
|
+
E_AUTH_FAILED: {
|
|
58
|
+
code: 'E_AUTH_FAILED',
|
|
59
|
+
description: 'Provided credentials were rejected by the AllStak backend.',
|
|
60
|
+
defaultFix: 'Verify the email and OTP are correct; check `allstak.config.*` host setting.',
|
|
61
|
+
stage: 'auth',
|
|
62
|
+
},
|
|
63
|
+
E_AUTH_EXPIRED: {
|
|
64
|
+
code: 'E_AUTH_EXPIRED',
|
|
65
|
+
description: 'Stored credentials are no longer valid (token revoked or refresh failed).',
|
|
66
|
+
defaultFix: 'Run `allstak login` to refresh.',
|
|
67
|
+
stage: 'auth',
|
|
68
|
+
},
|
|
69
|
+
E_BACKEND_CONTRACT_MISSING: {
|
|
70
|
+
code: 'E_BACKEND_CONTRACT_MISSING',
|
|
71
|
+
description: 'The wizard requires a backend endpoint that does not exist on the configured host.',
|
|
72
|
+
defaultFix: 'Confirm --host points at a current AllStak deployment, or open an issue.',
|
|
73
|
+
stage: 'reachability',
|
|
74
|
+
},
|
|
75
|
+
E_PROJECT_NOT_FOUND: {
|
|
76
|
+
code: 'E_PROJECT_NOT_FOUND',
|
|
77
|
+
description: 'The specified project could not be found in the user\'s accessible orgs.',
|
|
78
|
+
defaultFix: 'Run `allstak projects list` to see available projects.',
|
|
79
|
+
stage: 'config',
|
|
80
|
+
},
|
|
81
|
+
E_PROJECT_CREATE_FAILED: {
|
|
82
|
+
code: 'E_PROJECT_CREATE_FAILED',
|
|
83
|
+
description: 'Backend rejected the project-create call.',
|
|
84
|
+
defaultFix: 'Check the slug is unique, the org has quota remaining, and you have permission.',
|
|
85
|
+
stage: 'config',
|
|
86
|
+
},
|
|
87
|
+
E_API_KEY_CREATE_FAILED: {
|
|
88
|
+
code: 'E_API_KEY_CREATE_FAILED',
|
|
89
|
+
description: 'Backend refused to mint a new API key for the project.',
|
|
90
|
+
defaultFix: 'Check API-key quota for the org\'s plan; rotate an existing key if needed.',
|
|
91
|
+
stage: 'config',
|
|
92
|
+
},
|
|
93
|
+
E_UNSUPPORTED_FRAMEWORK: {
|
|
94
|
+
code: 'E_UNSUPPORTED_FRAMEWORK',
|
|
95
|
+
description: 'No registered integration matches the detected project shape, or detection was ambiguous.',
|
|
96
|
+
defaultFix: 'Pass `-i <integration>` explicitly. Run `allstak list` to see registered ids.',
|
|
97
|
+
stage: 'detect',
|
|
98
|
+
},
|
|
99
|
+
E_UNSUPPORTED_VERSION: {
|
|
100
|
+
code: 'E_UNSUPPORTED_VERSION',
|
|
101
|
+
description: 'The detected framework version is below the wizard\'s supported minimum.',
|
|
102
|
+
defaultFix: 'Upgrade the framework, or pin to a wizard version that supports your range.',
|
|
103
|
+
stage: 'detect',
|
|
104
|
+
},
|
|
105
|
+
E_PACKAGE_MANAGER_CONFLICT: {
|
|
106
|
+
code: 'E_PACKAGE_MANAGER_CONFLICT',
|
|
107
|
+
description: 'Multiple lockfiles present; wizard refuses to guess which package manager owns the project.',
|
|
108
|
+
defaultFix: 'Delete the unused lockfile (e.g. `package-lock.json` if you use pnpm) and re-run.',
|
|
109
|
+
stage: 'install',
|
|
110
|
+
},
|
|
111
|
+
E_PATCH_FAILED: {
|
|
112
|
+
code: 'E_PATCH_FAILED',
|
|
113
|
+
description: 'A wizard patch threw mid-transaction; all changes from this run have been rolled back.',
|
|
114
|
+
defaultFix: 'Re-run with --debug to see the failing patcher, then run `allstak doctor`.',
|
|
115
|
+
stage: 'patch',
|
|
116
|
+
},
|
|
117
|
+
E_PATCH_ROLLBACK_FAILED: {
|
|
118
|
+
code: 'E_PATCH_ROLLBACK_FAILED',
|
|
119
|
+
description: 'A patch failed AND the in-process rollback could not restore one or more files.',
|
|
120
|
+
defaultFix: 'Use `allstak restore list` to find the most recent persistent snapshot, then `allstak restore apply <id>`.',
|
|
121
|
+
stage: 'rollback',
|
|
122
|
+
},
|
|
123
|
+
E_RESTORE_FAILED: {
|
|
124
|
+
code: 'E_RESTORE_FAILED',
|
|
125
|
+
description: 'A `restore` operation could not complete (snapshot corrupt, missing pre-image, or write failure).',
|
|
126
|
+
defaultFix: 'Inspect `.allstak-wizard/backups/<snapshot>/manifest.json`. Ask support if the snapshot itself is corrupt.',
|
|
127
|
+
stage: 'restore',
|
|
128
|
+
},
|
|
129
|
+
E_CONFIG_INVALID: {
|
|
130
|
+
code: 'E_CONFIG_INVALID',
|
|
131
|
+
description: '`allstak.config.*` failed schema validation.',
|
|
132
|
+
defaultFix: 'Run `allstak config validate` to see exact path-to-blame.',
|
|
133
|
+
stage: 'config',
|
|
134
|
+
},
|
|
135
|
+
E_CONFIG_MIGRATION_FAILED: {
|
|
136
|
+
code: 'E_CONFIG_MIGRATION_FAILED',
|
|
137
|
+
description: 'A config-schema migration threw or refused to apply.',
|
|
138
|
+
defaultFix: 'Run `allstak config migrate --dry-run` to see what would change before applying.',
|
|
139
|
+
stage: 'config',
|
|
140
|
+
},
|
|
141
|
+
E_DOCTOR_FAILED: {
|
|
142
|
+
code: 'E_DOCTOR_FAILED',
|
|
143
|
+
description: 'One or more `doctor` stages failed.',
|
|
144
|
+
defaultFix: 'Read the per-stage `fix:` lines in the doctor output.',
|
|
145
|
+
stage: 'validate',
|
|
146
|
+
},
|
|
147
|
+
E_INGEST_VERIFY_FAILED: {
|
|
148
|
+
code: 'E_INGEST_VERIFY_FAILED',
|
|
149
|
+
description: 'Live event probe could not be confirmed in `/api/v1/errors` within the timeout.',
|
|
150
|
+
defaultFix: 'Verify the API key has ingest scope and the project id matches. Increase --live-probe-timeout if ingestion is backlogged.',
|
|
151
|
+
stage: 'event-ingest',
|
|
152
|
+
},
|
|
153
|
+
E_SOURCEMAP_VERIFY_FAILED: {
|
|
154
|
+
code: 'E_SOURCEMAP_VERIFY_FAILED',
|
|
155
|
+
description: 'Source-map upload or symbolication round-trip failed.',
|
|
156
|
+
defaultFix: 'Run `allstak doctor` to inspect provider state, then `allstak repair` to re-wire.',
|
|
157
|
+
stage: 'source-maps',
|
|
158
|
+
},
|
|
159
|
+
E_NETWORK_FAILED: {
|
|
160
|
+
code: 'E_NETWORK_FAILED',
|
|
161
|
+
description: 'A network call to the AllStak backend timed out, refused, or hit DNS failure.',
|
|
162
|
+
defaultFix: 'Check connectivity and the configured --host.',
|
|
163
|
+
stage: 'reachability',
|
|
164
|
+
},
|
|
165
|
+
E_PERMISSION_DENIED: {
|
|
166
|
+
code: 'E_PERMISSION_DENIED',
|
|
167
|
+
description: 'OS-level permission was denied (file write, keychain access, secret-tool, etc).',
|
|
168
|
+
defaultFix: 'Check filesystem permissions and that your OS keychain is unlocked.',
|
|
169
|
+
stage: 'cli',
|
|
170
|
+
},
|
|
171
|
+
E_USER_CANCELLED: {
|
|
172
|
+
code: 'E_USER_CANCELLED',
|
|
173
|
+
description: 'The user cancelled the operation (Ctrl-C, declined a confirmation prompt, etc).',
|
|
174
|
+
defaultFix: 'No action needed.',
|
|
175
|
+
stage: 'cli',
|
|
176
|
+
},
|
|
177
|
+
E_UNKNOWN: {
|
|
178
|
+
code: 'E_UNKNOWN',
|
|
179
|
+
description: 'An unexpected error not yet categorised.',
|
|
180
|
+
defaultFix: 'Re-run with --debug and open an issue with the stack trace.',
|
|
181
|
+
stage: 'cli',
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
/** Type-guard for the canonical code union. */
|
|
185
|
+
export function isWizardErrorCode(s) {
|
|
186
|
+
return WIZARD_ERROR_CODES.includes(s);
|
|
187
|
+
}
|
|
188
|
+
/** Lookup a metadata record, falling back to E_UNKNOWN. */
|
|
189
|
+
export function lookupErrorMeta(code) {
|
|
190
|
+
return WIZARD_ERROR_META[code];
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=error-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/util/error-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { WizardErrorCode, WizardStage } from './error-codes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Single error type for everything thrown out of wizard code.
|
|
4
|
+
*
|
|
5
|
+
* Required fields:
|
|
6
|
+
* - `code` canonical code from src/util/error-codes.ts (drives JSON output, telemetry, docs).
|
|
7
|
+
*
|
|
8
|
+
* Optional fields:
|
|
9
|
+
* - `subcode` free-form internal id for finer granularity (e.g. "E_KEYCHAIN_NOT_FOUND").
|
|
10
|
+
* Never used by JSON output / telemetry — only for debug logs.
|
|
11
|
+
* - `stage` overrides the default stage for this code.
|
|
12
|
+
* - `hint` actionable fix shown to the user. Falls back to the catalog default.
|
|
13
|
+
* - `context` small bag of safe-to-log details (no secrets, no source code).
|
|
14
|
+
* Only emitted under --debug; NEVER sent to telemetry.
|
|
15
|
+
*/
|
|
16
|
+
export interface WizardErrorOptions {
|
|
17
|
+
hint?: string;
|
|
18
|
+
subcode?: string;
|
|
19
|
+
stage?: WizardStage;
|
|
20
|
+
/** Underlying cause, kept for stack-trace chaining only. */
|
|
21
|
+
cause?: unknown;
|
|
22
|
+
/** Safe-to-log context. Keys/values must not contain secrets or PII. */
|
|
23
|
+
context?: Record<string, string | number | boolean | null>;
|
|
24
|
+
}
|
|
25
|
+
export declare class WizardError extends Error {
|
|
26
|
+
readonly code: WizardErrorCode;
|
|
27
|
+
readonly subcode?: string;
|
|
28
|
+
readonly hint: string;
|
|
29
|
+
readonly stage: WizardStage;
|
|
30
|
+
readonly context?: Record<string, string | number | boolean | null>;
|
|
31
|
+
readonly originalCause?: unknown;
|
|
32
|
+
constructor(code: WizardErrorCode, message: string, options?: WizardErrorOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Stable JSON representation — used by the `--json` reporter and by
|
|
35
|
+
* telemetry. Intentionally narrow: never serialises `originalCause`,
|
|
36
|
+
* stack traces, or unknown fields.
|
|
37
|
+
*/
|
|
38
|
+
toPublicJSON(): {
|
|
39
|
+
code: WizardErrorCode;
|
|
40
|
+
stage: WizardStage;
|
|
41
|
+
subcode: string | null;
|
|
42
|
+
message: string;
|
|
43
|
+
hint: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* `NotValidatedError` — thrown when a scaffolded integration runs without
|
|
48
|
+
* `--experimental`. Maps to `E_UNSUPPORTED_FRAMEWORK` so the JSON output is
|
|
49
|
+
* categorised consistently with the rest of the catalog.
|
|
50
|
+
*/
|
|
51
|
+
export declare class NotValidatedError extends WizardError {
|
|
52
|
+
constructor(integrationId: string, reason: string);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `UnsupportedFrameworkError` — thrown when a framework has been intentionally
|
|
56
|
+
* refused (e.g. bare React Native).
|
|
57
|
+
*/
|
|
58
|
+
export declare class UnsupportedFrameworkError extends WizardError {
|
|
59
|
+
constructor(integrationId: string, detail: string);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* `PatchSyntaxError` — a patcher's syntax validator rejected the new content.
|
|
63
|
+
* Always wraps to `E_PATCH_FAILED` (the rollback already happened by the time
|
|
64
|
+
* this is thrown).
|
|
65
|
+
*/
|
|
66
|
+
export declare class PatchSyntaxError extends WizardError {
|
|
67
|
+
readonly file: string;
|
|
68
|
+
constructor(file: string, detail: string);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* `TransactionAbortedError` — the transaction layer rolled back a multi-file
|
|
72
|
+
* mutation. The original cause is preserved on `originalCause`.
|
|
73
|
+
*/
|
|
74
|
+
export declare class TransactionAbortedError extends WizardError {
|
|
75
|
+
constructor(cause: unknown);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Coerce an arbitrary thrown value into a `WizardError`. Used at top-level
|
|
79
|
+
* try/catch boundaries (CLI, telemetry sink) so non-WizardError throws are
|
|
80
|
+
* still categorised as `E_UNKNOWN`.
|
|
81
|
+
*/
|
|
82
|
+
export declare function toWizardError(err: unknown): WizardError;
|
|
83
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/util/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGrE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;gBAErB,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAWpF;;;;OAIG;IACH,YAAY,IAAI;QACd,IAAI,EAAE,eAAe,CAAC;QACtB,KAAK,EAAE,WAAW,CAAC;QACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd;CASF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAalD;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,WAAW;gBAC5C,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQlD;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAUzC;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,WAAW;gBAC1C,KAAK,EAAE,OAAO;CAS3B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAUvD"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { WIZARD_ERROR_META, isWizardErrorCode } from './error-codes.js';
|
|
2
|
+
export class WizardError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
subcode;
|
|
5
|
+
hint;
|
|
6
|
+
stage;
|
|
7
|
+
context;
|
|
8
|
+
originalCause;
|
|
9
|
+
constructor(code, message, options = {}) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'WizardError';
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.subcode = options.subcode;
|
|
14
|
+
this.stage = options.stage ?? WIZARD_ERROR_META[code].stage;
|
|
15
|
+
this.hint = options.hint ?? WIZARD_ERROR_META[code].defaultFix;
|
|
16
|
+
this.context = options.context;
|
|
17
|
+
this.originalCause = options.cause;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Stable JSON representation — used by the `--json` reporter and by
|
|
21
|
+
* telemetry. Intentionally narrow: never serialises `originalCause`,
|
|
22
|
+
* stack traces, or unknown fields.
|
|
23
|
+
*/
|
|
24
|
+
toPublicJSON() {
|
|
25
|
+
return {
|
|
26
|
+
code: this.code,
|
|
27
|
+
stage: this.stage,
|
|
28
|
+
subcode: this.subcode ?? null,
|
|
29
|
+
message: this.message,
|
|
30
|
+
hint: this.hint,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* `NotValidatedError` — thrown when a scaffolded integration runs without
|
|
36
|
+
* `--experimental`. Maps to `E_UNSUPPORTED_FRAMEWORK` so the JSON output is
|
|
37
|
+
* categorised consistently with the rest of the catalog.
|
|
38
|
+
*/
|
|
39
|
+
export class NotValidatedError extends WizardError {
|
|
40
|
+
constructor(integrationId, reason) {
|
|
41
|
+
super('E_UNSUPPORTED_FRAMEWORK', `Integration "${integrationId}" is scaffolded but not validated end-to-end.`, {
|
|
42
|
+
subcode: 'E_NOT_VALIDATED',
|
|
43
|
+
hint: `${reason} Pass --experimental to bypass at your own risk.`,
|
|
44
|
+
context: { integrationId },
|
|
45
|
+
stage: 'detect',
|
|
46
|
+
});
|
|
47
|
+
this.name = 'NotValidatedError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `UnsupportedFrameworkError` — thrown when a framework has been intentionally
|
|
52
|
+
* refused (e.g. bare React Native).
|
|
53
|
+
*/
|
|
54
|
+
export class UnsupportedFrameworkError extends WizardError {
|
|
55
|
+
constructor(integrationId, detail) {
|
|
56
|
+
super('E_UNSUPPORTED_FRAMEWORK', `Unsupported configuration for "${integrationId}": ${detail}`, { subcode: 'E_UNSUPPORTED_REFUSED', context: { integrationId }, stage: 'detect' });
|
|
57
|
+
this.name = 'UnsupportedFrameworkError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* `PatchSyntaxError` — a patcher's syntax validator rejected the new content.
|
|
62
|
+
* Always wraps to `E_PATCH_FAILED` (the rollback already happened by the time
|
|
63
|
+
* this is thrown).
|
|
64
|
+
*/
|
|
65
|
+
export class PatchSyntaxError extends WizardError {
|
|
66
|
+
file;
|
|
67
|
+
constructor(file, detail) {
|
|
68
|
+
super('E_PATCH_FAILED', `Patched file is not syntactically valid: ${file}`, {
|
|
69
|
+
subcode: 'E_PATCH_SYNTAX',
|
|
70
|
+
hint: detail,
|
|
71
|
+
context: { file },
|
|
72
|
+
stage: 'patch',
|
|
73
|
+
});
|
|
74
|
+
this.name = 'PatchSyntaxError';
|
|
75
|
+
this.file = file;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* `TransactionAbortedError` — the transaction layer rolled back a multi-file
|
|
80
|
+
* mutation. The original cause is preserved on `originalCause`.
|
|
81
|
+
*/
|
|
82
|
+
export class TransactionAbortedError extends WizardError {
|
|
83
|
+
constructor(cause) {
|
|
84
|
+
const causeMsg = cause instanceof Error ? cause.message : String(cause);
|
|
85
|
+
super('E_PATCH_FAILED', `Transaction aborted, all changes rolled back: ${causeMsg}`, {
|
|
86
|
+
subcode: 'E_TX_ABORT',
|
|
87
|
+
cause,
|
|
88
|
+
stage: 'rollback',
|
|
89
|
+
});
|
|
90
|
+
this.name = 'TransactionAbortedError';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Coerce an arbitrary thrown value into a `WizardError`. Used at top-level
|
|
95
|
+
* try/catch boundaries (CLI, telemetry sink) so non-WizardError throws are
|
|
96
|
+
* still categorised as `E_UNKNOWN`.
|
|
97
|
+
*/
|
|
98
|
+
export function toWizardError(err) {
|
|
99
|
+
if (err instanceof WizardError)
|
|
100
|
+
return err;
|
|
101
|
+
if (err instanceof Error) {
|
|
102
|
+
const maybeCode = err.code;
|
|
103
|
+
if (typeof maybeCode === 'string' && isWizardErrorCode(maybeCode)) {
|
|
104
|
+
return new WizardError(maybeCode, err.message, { cause: err });
|
|
105
|
+
}
|
|
106
|
+
return new WizardError('E_UNKNOWN', err.message, { cause: err });
|
|
107
|
+
}
|
|
108
|
+
return new WizardError('E_UNKNOWN', String(err));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/util/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function setDebug(v: boolean): void;
|
|
2
|
+
export declare const log: {
|
|
3
|
+
info: (msg: string) => void;
|
|
4
|
+
step: (msg: string) => void;
|
|
5
|
+
success: (msg: string) => void;
|
|
6
|
+
warn: (msg: string) => void;
|
|
7
|
+
error: (msg: string) => void;
|
|
8
|
+
debug: (msg: string) => void;
|
|
9
|
+
plain: (msg: string) => void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/util/log.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAEzC;AAED,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;gBACb,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;iBACb,MAAM,KAAG,IAAI;iBAGb,MAAM,KAAG,IAAI;CAC3B,CAAC"}
|
package/dist/util/log.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
let DEBUG = false;
|
|
3
|
+
export function setDebug(v) {
|
|
4
|
+
DEBUG = v;
|
|
5
|
+
}
|
|
6
|
+
export const log = {
|
|
7
|
+
info: (msg) => console.log(pc.cyan('›'), msg),
|
|
8
|
+
step: (msg) => console.log(pc.bold(pc.blue('»')), msg),
|
|
9
|
+
success: (msg) => console.log(pc.green('✓'), msg),
|
|
10
|
+
warn: (msg) => console.warn(pc.yellow('!'), msg),
|
|
11
|
+
error: (msg) => console.error(pc.red('✗'), msg),
|
|
12
|
+
debug: (msg) => {
|
|
13
|
+
if (DEBUG)
|
|
14
|
+
console.log(pc.dim(`[debug] ${msg}`));
|
|
15
|
+
},
|
|
16
|
+
plain: (msg) => console.log(msg),
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/util/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,MAAM,UAAU,QAAQ,CAAC,CAAU;IACjC,KAAK,GAAG,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC3D,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IACpE,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC/D,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC9D,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC3B,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;CAC/C,CAAC"}
|