feat: implement error pages and apply base entity inheritance#106
Merged
antosubash merged 13 commits intomainfrom Apr 15, 2026
Merged
feat: implement error pages and apply base entity inheritance#106antosubash merged 13 commits intomainfrom
antosubash merged 13 commits intomainfrom
Conversation
…fallback HTML - Hoist errorPages record to module scope in app.tsx (avoid per-resolve allocation) - Extract shared ErrorPageProps type from duplicated Props interfaces - Cache error.html bytes at startup instead of File.Exists per request - Remove narrating comments in GlobalExceptionHandler
Deploying simplemodule-website with
|
| Latest commit: |
909b60a
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://6e168124.simplemodule-website.pages.dev |
| Branch Preview URL: | https://feature-elastic-lamport.simplemodule-website.pages.dev |
antosubash
added a commit
that referenced
this pull request
Apr 12, 2026
Replace all stub processors and converters with working implementations that shell out to GDAL/OGR and tippecanoe for GIS file processing: Processors (metadata extraction on upload): - CogProcessor: gdalinfo -json for raster metadata - ShapefileProcessor: unzip + ogrinfo/ogr2ogr for zipped shapefiles - KmlProcessor: ogrinfo/ogr2ogr for KML files - GeoPackageProcessor: ogrinfo/ogr2ogr for GPKG files - PmTilesProcessor: binary v3 header reader with correct spec offsets Converters (format conversion): - VectorToPmTilesConverter: tippecanoe CLI for GeoJSON → PMTiles - RasterToCogConverter: gdal_translate -of COG for raster → COG Infrastructure: - CliRunner: shared async process runner with concurrent stdout/stderr draining to prevent pipe-buffer deadlocks - TempDirectory: IDisposable temp dir wrapper with auto-cleanup Bug fixes: - Register dataset jobs via AddModuleJob instead of AddScoped so the worker's JobTypeRegistry can discover and execute them - Add Lazy<IEventBus> to worker extensions (mirrors host) to fix crash when SettingsService resolves via AuditSaveChangesInterceptor - Fix ConvertDatasetJob to read from NormalizedPath for non-GeoJSON vector sources instead of the raw original file - Point worker appsettings at shared host database and storage paths
antosubash
added a commit
that referenced
this pull request
Apr 13, 2026
… (#107) Replace all stub processors and converters with working implementations that shell out to GDAL/OGR and tippecanoe for GIS file processing: Processors (metadata extraction on upload): - CogProcessor: gdalinfo -json for raster metadata - ShapefileProcessor: unzip + ogrinfo/ogr2ogr for zipped shapefiles - KmlProcessor: ogrinfo/ogr2ogr for KML files - GeoPackageProcessor: ogrinfo/ogr2ogr for GPKG files - PmTilesProcessor: binary v3 header reader with correct spec offsets Converters (format conversion): - VectorToPmTilesConverter: tippecanoe CLI for GeoJSON → PMTiles - RasterToCogConverter: gdal_translate -of COG for raster → COG Infrastructure: - CliRunner: shared async process runner with concurrent stdout/stderr draining to prevent pipe-buffer deadlocks - TempDirectory: IDisposable temp dir wrapper with auto-cleanup Bug fixes: - Register dataset jobs via AddModuleJob instead of AddScoped so the worker's JobTypeRegistry can discover and execute them - Add Lazy<IEventBus> to worker extensions (mirrors host) to fix crash when SettingsService resolves via AuditSaveChangesInterceptor - Fix ConvertDatasetJob to read from NormalizedPath for non-GeoJSON vector sources instead of the raw original file - Point worker appsettings at shared host database and storage paths
UseStatusCodePagesWithReExecute was re-executing POST/PATCH/PUT requests
that got bare 4xx responses from routing (e.g. auth 401/403, validation
failures) through /error/{statusCode}. Since the endpoint is MapGet-only,
non-GET methods returned 405 MethodNotAllowed instead of the original
status code. It also replaced JSON ProblemDetails with Inertia HTML for
API clients.
Scope the status code pages middleware to GET requests on non-service
paths (/api, /connect, /swagger, /health, /_framework, /_vite excluded).
Browser navigations still get the nice error page; API clients keep
their ProblemDetails body and bare status code.
UseStatusCodePagesWithReExecute was too aggressive — it re-executed on
ANY bare 4xx status code, including auth 401/403 from matched endpoints.
This broke unauthenticated access tests that expected bare 401 responses
(they got HTML error pages or 404 instead).
MapFallback only fires when no endpoint matches the URL, so browser
navigation to non-existent URLs gets a pretty Inertia 404 page while
auth failures on real endpoints keep returning their bare status code.
Also extracts the error-page render logic into a shared RenderErrorPage
helper used by both /error/{statusCode} and the fallback.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Error Pages Implementation
ForbiddenExceptionwith 403 HTTP status mappingGlobalExceptionHandlermiddleware to render Inertia error pages for browser requests/error/{statusCode}endpointerror.htmlfallback for cases where dynamic rendering failsBase Entity Inheritance
HasNoKey()where appropriateAgentMessageId,FeatureFlagId,SettingId) to contracts projects20260411065821_UseBaseEntitiesSupporting Changes
DatabaseOptionsExtensionsfor database configuration