Skip to content

objex-utils package split, runtime config + settings panel, deck.gl-raster 0.7, TS 6#15

Merged
yharby merged 58 commits into
mainfrom
feat/utils-to-objex-utils
May 28, 2026
Merged

objex-utils package split, runtime config + settings panel, deck.gl-raster 0.7, TS 6#15
yharby merged 58 commits into
mainfrom
feat/utils-to-objex-utils

Conversation

@yharby
Copy link
Copy Markdown
Contributor

@yharby yharby commented May 28, 2026

Overview

This branch (feat/utils-to-objex-utils) bundles 55 commits across five themes that landed together since main. Each theme has its own changeset, so the published @walkthru-earth/objex and @walkthru-earth/objex-utils packages will bump together on merge.

Files touched by area: packages/objex-utils (37), src/lib/components (36), docs (23), src/lib/utils (10), src/lib/stores (6), src/lib/query (5), src/routes (3), plus storage, i18n, workflows, static config, and patches.


1. @walkthru-earth/objex-utils package split (utils-to-objex-utils, objex-utils-split-clarity)

Relocated every framework-agnostic, pure-TypeScript utility out of src/lib/utils/ into the standalone packages/objex-utils/src/ package and deleted the old shim paths.

  • Moved 25 modules: wkb, hex, format, column-types, file-sort, error, lru, connection-identity, storage-smoketest, stac-storage-extension, cog-info, cog-asset, channel-composite, stac, stac-source, parquet-metadata, geoarrow, geometry-type, storage-url, cloud-url, host-detection, stac-facets, stac-pushdown, stac-geoparquet, markdown-sql. Consumers now import them from @walkthru-earth/objex-utils.
  • src/lib/utils/ keeps only heavy-dep or SvelteKit-bound modules. Renamed cog-pure to cog-info and the app-side url to signed-url.
  • Moved the markdown SQL execution context into the package as MarkdownSqlContext (host injects the engine).
  • Added a build-time guardrail (scripts/verify-objex-utils-bundle.mjs) that fails the build if any heavy dependency (@developmentseed/*, @deck.gl/*, zarrita, pdfjs-dist, shiki, etc.) leaks into the package dist/, locking in the cog-info split lesson from Failed to resolve import "@developmentseed/epsg/all" from the pre-bundled objex-utils chunk. #11.
  • Added vitest for the package, plus a two-layer utility map in the root guide and fixes for stale doc paths.

2. Runtime config + settings panel (runtime-config-settings-panel, config-basemaps-connections)

Hosts can now customize objex without a rebuild.

  • A bundled static/config.json (or remote ?config=<url>) seeds theme, locale, row and STAC item limits, chrome visibility, basemaps, and connection seeds. Malformed config falls back to safe defaults and still boots.
  • New pure helpers (AppConfig, mergeAppConfig, resolveSetting, parseVisibilityParam, value coercers) do a field-by-field merge of untrusted JSON with a first-match-wins precedence resolver. Unit tested.
  • Settings store resolves each value through query param, then localStorage, then config, then hardcoded fallback. Only user-changed keys are persisted.
  • New settings panel (sidebar gear icon) edits appearance, language, data limits, and interface visibility, with copy-config-JSON and reset-to-defaults. Per-link overrides via ?config=, ?panel=, ?rail=, ?tree=; toggles locked by a link param render read-only.
  • MapContainer resolves its basemap through the new pure resolveBasemap() selector with a hardcoded CartoDB fallback. Connection rail seeds rows from config, auto-opening the first anonymous bucket and falling back to the Source Cooperative demo bucket.
  • The file-browser toggle button is gated on the same visibility flags, so it does not render when the rail and tree are both hidden.

3. deck.gl-raster 0.7.0 upgrade (upgrade-developmentseed-deckgl-raster-0-7-0)

  • Bumped @developmentseed/deck.gl-{raster,geotiff,zarr,epsg,proj} from 0.6.1 to 0.7.0.
  • 0.7.0 forwards tile callbacks through RasterTileLayer natively, so the entire deck.gl-raster pnpm patch was removed. StacMosaicViewer migrated onTileUnload to the new source-level onSourceUnload.
  • The remaining geotiff patch keeps only three hunks upstream still does not ship: the proj4 +over antimeridian fix, the inferRenderPipeline re-export, and the r16unorm to r32float Firefox/macOS texture fallback.

4. Dependency upgrades + TypeScript 6

  • TypeScript 6 monorepo-wide, plus latest bumps across babylon, @carbonplan/zarr-layer, marked, pbf, shiki, lucide, @types/node, and others.
  • Breaking-change fixes: pbf 5 (PbfReader), lucide 1 (inline GitHub icon), dropped the orphaned zarr-layer patch.
  • Vite 7 to 8 and pnpm 11 intentionally held back for a dedicated follow-up.

5. Storage, security, and CI hardening (generic-s3-provider-and-url-fixes, redos-hardening)

  • Relabel the minio provider to "MinIO / RustFS / Custom" for first-class S3-compatible store support (no id change). Fix "Copy HTTP URL" emitting an AWS URL for non-AWS connections via a shared provider-aware helper. Replace the misleading "Empty bucket" state with a CORS/network failure explanation.
  • Harden pure utilities against polynomial ReDoS (CodeQL js/polynomial-redos) in connection-identity, storage-url, cloud-url, markdown-sql, and column-types. Same inputs, same outputs, linear worst case.
  • CI/deploy fix: build objex-utils immediately after install so its dist/ exists before check, build, and bundle steps resolve @walkthru-earth/objex-utils (it resolves via the workspace symlink to built output).

Test plan

  • pnpm run check passes (0 errors) once objex-utils is built first
  • pnpm run lint and pnpm run format:check clean
  • objex-utils build + bundle guardrail + vitest pass
  • production vite build succeeds and pnpm run package builds the lib tarball
  • Verify rail/tree/toggle hide correctly via ?rail=hide / ?tree=hide
  • Smoke-test COG / MultiCOG / STAC mosaic / Zarr / DuckDB viewers in the browser
  • Verify config seeding: basemaps, default connections, demo-bucket fallback

yharby added 30 commits May 13, 2026 02:41
…relocation

Sets up pre-flight infra for moving framework-agnostic utilities from
src/lib/utils/ to packages/objex-utils/src/:

- scripts/verify-objex-utils-bundle.mjs scans the tsup dist for any
  top-level import of forbidden heavy deps (@developmentseed/*, proj4,
  wkt-parser, maplibre-gl, luma.gl, deck.gl, etc.). Wired into the
  package build script so the guardrail runs on every build, locking in
  the cog-pure.ts pattern that resolved #11.

- Root package.json now depends on @walkthru-earth/objex-utils via
  workspace:* so src/lib/utils/<name>.ts shim files can re-export from
  the sibling package without breaking the published @walkthru-earth/objex
  tarball.

- Changeset opened as a single patch/patch bump that the relocation
  batches will piggyback on.
…ls/src

Moves wkb, hex, format, column-types, file-sort, error, lru,
connection-identity, storage-smoketest, stac-storage-extension,
cog-pure, channel-composite. Each src/lib/utils/<name>.ts is now a
thin shim re-exporting from @walkthru-earth/objex-utils, so existing
intra-app imports continue to resolve. Bundle guardrail passes:
no heavy-dep top-level imports introduced.
Moves geoarrow, parquet-metadata, geometry-type, storage-url,
cloud-url. Old src/lib/utils/<name>.ts files become shims re-exporting
from @walkthru-earth/objex-utils. Bundle guardrail passes:
apache-arrow / hyparquet are declared peers, no other heavy deps
introduced.
Integrates Batch C (stac, stac-source, stac-facets, stac-pushdown,
stac-geoparquet, cog-asset, markdown-sql, host-detection) and finishes
the cross-batch fixes that surfaced once all three worktrees merged:

- Rewrite three intra-package imports that were routing through
  src/lib/utils/ shims back into the npm package: channel-composite,
  host-detection, and stac-storage-extension now use sibling ./*.js
  paths to avoid a circular dependency through @walkthru-earth/objex-utils.
- Revert Batch C's tsup external addition of @walkthru-earth/objex-utils.
  Marking the package as self-external is exactly the anti-pattern from
  #11: tsup would emit a bare self-import in dist,
  Vite consumers would fail to pre-bundle it. The intra-package import
  rewrites above remove the need for that workaround.
- Move src/lib/utils/export.ts into packages/objex-utils/src/export.ts.
  The previous batch had patched export.ts to import jsonReplacerBigInt
  via a cross-package relative path (../../../packages/objex-utils/src/format.js),
  which would survive svelte-package and ship a broken path inside the
  published @walkthru-earth/objex tarball. Moving export.ts into the
  package restores a clean ./format.js sibling import.
- Rewrite packages/objex-utils/src/index.ts using export * for every
  intra-package module so the public surface stays in lockstep with
  each file's exports. Two remaining src/lib/utils/ re-exports
  (local-storage) keep their explicit named form.

Verification: build (incl. guardrail), format, lint:fix, check,
package (svelte-package + publint), deadcode all green. No $lib/ or
cross-package relative paths appear in either dist/.
Remove the thin re-export shim files left in src/lib/utils/ after the
utilities moved into @walkthru-earth/objex-utils, rewrite all in-repo
imports to pull from the package directly, and drop the invalid
./utils/* subpath exports from the objex package.json exports map.
No runtime behavior changes.
Sweep the package's own docs/ Source pointers and the deep-dive
reference docs (wkb-to-geoarrow, mosaic-layer-stac) so they cite the
relocated packages/objex-utils/src/ paths instead of the removed
src/lib/utils/ files. Leaves historical design-proposal references
(multicog.ts, mosaic.ts, fetch-pool.ts) and valid app-side modules
(cog.ts, zarr.ts) untouched.
… CORS-aware file tree

- Relabel minio provider to 'MinIO / RustFS / Custom' for self-hosted /
  S3-compatible stores (MinIO, RustFS, Ceph RGW, custom endpoints). id
  unchanged so connections, CORS/read-only help, and host detection keep working.
- Extract shared buildHttpsUrlForConnection in signed-url.ts; FileTreeSidebar
  'Copy HTTP URL' no longer emits an AWS URL for GCS and other non-AWS
  connections (including empty-endpoint auto-detected GCS).
- Surface a CORS/network failure in the file tree instead of a misleading
  'Empty bucket' state; new fileTree.cors* / loadError* i18n keys (en + ar).

Addresses #14
- Update ~25 deps via pnpm update (SvelteKit 2.61, Svelte 5.55.10,
  DuckDB-WASM dev53→dev55, Biome 2.4.16, hyparquet, mermaid, @Milkdown,
  @chunkd, etc.)
- Migrate @geoarrow/deck.gl-layers@0.3.2 → @geoarrow/deck.gl-geoarrow@0.4.1
  (renamed package). 0.4+ layers take a single Arrow RecordBatch as `data`
  instead of a Table; deck.ts now passes table.batches[0] (buildSingleTable
  emits one batch, so row index and sourceIndices click mapping are unchanged)
- Move pnpm overrides + patchedDependencies from the deprecated package.json
  `pnpm` field into pnpm-workspace.yaml (pnpm v10 ignores the package.json
  field). Drop the stale 0.6.0-alpha.1 patch reference; pin the real 0.6.1
  geotiff/raster + carbonplan zarr-layer patches
- Update CLAUDE.md/docs references for the renamed geoarrow package
Bump all six @developmentseed/* packages (deck.gl-raster, deck.gl-geotiff,
deck.gl-zarr, epsg, proj, geotiff) from 0.6.1 to 0.7.0 and slim the pnpm
patch set now that upstream ships the behavior by default.

Patches removed:
- deck.gl-raster patch deleted entirely. PR #546 forwards onTileLoad/
  onTileError/onTileUnload/onViewportLoad through RasterTileLayer natively
- MosaicLayer callback + debounceTime hunk dropped from the geotiff patch.
  0.7.0 forwards debounceTime natively and exposes source-level callbacks
  (onSourceLoad/onSourceError/onSourceUnload/onViewportLoad)

Patch kept, regenerated against 0.7.0 dist hashes
(@developmentseed__deck.gl-geotiff@0.7.0.patch), three hunks upstream still
does not ship: proj4 +over antimeridian fix, inferRenderPipeline re-export,
and the r16unorm to r32float Firefox/macOS texture fallback.

Code migrations for 0.7.0 breaking changes:
- StacMosaicViewer: onTileUnload -> onSourceUnload on MosaicLayer
- cog.ts: MinimalTileData now imports from deck.gl-raster (no longer
  re-exported by deck.gl-geotiff)
- TilesetDescriptor rename and MosaicTileset2D privatization need no
  changes (we import neither)

Docs, patch-reference comments, and a changeset updated. check passes
0 errors, both packages build clean.
…match

Code scanning (CodeQL js/polynomial-redos), all 8 High alerts:
- connection-identity, storage-url: replace `/\/+$/` and `/^\/+|\/+$/g`
  slash-trim regexes with linear char-scan helpers
- cloud-url: rewrite `([^/]+)\/?(.*)` to `([^/]+)(?:\/(.*))?` to remove
  the [^/]+ / .* backtracking ambiguity on s3:// and gcs:// URLs
- markdown-sql: use `[ \t]` instead of `\s` around the sql-fence name so
  the trailing `\n` is an unambiguous boundary
- column-types: strip the parenthesized type span via indexOf/lastIndexOf
  slicing instead of `/\(.*\)/`
Behavior preserved (verified against the built bundle); 100k-char malicious
inputs now run sub-millisecond instead of O(n^2).

Dependabot transitive alerts via scoped pnpm overrides:
- cookie -> ^0.7.0 (resolves 0.7.2, GHSA-pxg6-pf52-xh8x)
- picomatch@4 -> ^4.0.4 (resolves 4.0.4, GHSA-3v7f-55p6-f55p), scoped to
  4.x so micromatch's picomatch@2.x is untouched
yharby added 22 commits May 28, 2026 13:03
The docs index linked 8 pages that were never created (stac, stac-source,
stac-hydrate, stac-storage-extension, cog-asset, channel-composite,
map-pixel-inspect, lru) and omitted the new app-config module entirely.
Those broken links shipped in the npm tarball since docs/ is in files.

- Add reference pages for all 9 modules with signatures, parameter
  semantics, return shapes, peer-dep notes, and examples, verified against
  the actual source exports.
- Add the app-config row to the docs index so every link now resolves.
- Package README, add a Usage section (ESM, CommonJS, framework notes),
  replace the stale 13-row table with grouped areas linking all 24
  modules, correct the cog entry (pure helpers only after the migration),
  and drop em dashes.
…table

- Remove 7 dead ./utils/* subpath rows from the Exports table. Those
  subpath exports were dropped in the utils-to-objex-utils move, so they
  404 for consumers. Note that the pure utilities are re-exported from the
  package root and live in @walkthru-earth/objex-utils.
- Add a Configuration section covering config.json, the ?config remote
  override, the ?panel/?rail/?tree query params, and the settings-panel
  precedence, plus a Configure bullet in Features.
TypeScript 5.9 to 6.0.3 across the root app and objex-utils. Added
ignoreDeprecations "6.0" to the objex-utils tsconfig so tsup's DTS step
does not fail on the baseUrl deprecation that TS 6 promotes to an error
(baseUrl is injected by rollup-plugin-dts, not set in our config).

Bumped to latest, verified against actual usage:
- shiki 4, marked 18, pbf 5, @mapbox/vector-tile 3
- @babylonjs/core + @babylonjs/loaders 9, @carbonplan/zarr-layer 0.5
- @lucide/svelte 1, @types/node 25, @changesets/changelog-github 0.7
- dev: hyparquet 1.26, yaml 2.9

Breaking-change fixes:
- pbf 5 dropped its default export, use PbfReader in pmtiles-tile.ts
  (@mapbox/vector-tile 3's VectorTile takes a PbfReader)
- lucide 1 removed all brand icons, replaced the GitHub icon in AboutSheet
  with an inline SVG
- @carbonplan/zarr-layer 0.5 targets zarrita 0.7 natively, so the pnpm
  patch and its file are removed
- added babylonjs-gltf2interface 9.10.0 to satisfy babylon 9's peer

Verified: objex-utils build plus 17 tests, svelte-check 0 errors, lint,
and a production build all pass. vite 8 + plugin-svelte 7 and pnpm 11 were
held back as higher-risk follow-ups.
Hide the panel-left toggle button when its target chrome is config-hidden:
desktop requires showFileTree, mobile requires showConnectionRail or
showFileTree (otherwise the sheet would open empty).
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 28, 2026

Important

Review skipped

Too many files!

This PR contains 165 files, which is 15 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 764d8633-f914-4a77-b893-d30fe7304480

📥 Commits

Reviewing files that changed from the base of the PR and between eb0f834 and 954bf1f.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (165)
  • .changeset/config-basemaps-connections.md
  • .changeset/generic-s3-provider-and-url-fixes.md
  • .changeset/objex-utils-split-clarity.md
  • .changeset/redos-hardening.md
  • .changeset/runtime-config-settings-panel.md
  • .changeset/upgrade-developmentseed-deckgl-raster-0-7-0.md
  • .changeset/utils-to-objex-utils.md
  • .github/workflows/ci.yml
  • .github/workflows/deploy.yml
  • CLAUDE.md
  • README.md
  • biome.json
  • docs/duckdb-init-set-queries.md
  • docs/mosaic-layer-stac-design.md
  • docs/multicog-sentinel2-design.md
  • docs/superpowers/plans/2026-04-27-unified-rgb-channel-picker-plan.md
  • docs/superpowers/plans/2026-05-28-global-runtime-config-settings-phase1.md
  • docs/superpowers/plans/2026-05-28-global-runtime-config-settings-phase2.md
  • docs/superpowers/plans/2026-05-28-objex-utils-split-clarity.md
  • docs/superpowers/specs/2026-04-26-stac-source-contract-design.md
  • docs/superpowers/specs/2026-04-27-unified-rgb-channel-picker-design.md
  • docs/superpowers/specs/2026-05-28-global-runtime-config-settings-design.md
  • docs/superpowers/specs/2026-05-28-objex-utils-split-clarity-design.md
  • docs/wkb-to-geoarrow-pipeline.md
  • package.json
  • packages/objex-utils/CLAUDE.md
  • packages/objex-utils/README.md
  • packages/objex-utils/docs/README.md
  • packages/objex-utils/docs/app-config.md
  • packages/objex-utils/docs/channel-composite.md
  • packages/objex-utils/docs/cog-asset.md
  • packages/objex-utils/docs/cog.md
  • packages/objex-utils/docs/errors.md
  • packages/objex-utils/docs/file-sort.md
  • packages/objex-utils/docs/formatting.md
  • packages/objex-utils/docs/geometry.md
  • packages/objex-utils/docs/local-storage.md
  • packages/objex-utils/docs/lru.md
  • packages/objex-utils/docs/map-pixel-inspect.md
  • packages/objex-utils/docs/markdown-sql.md
  • packages/objex-utils/docs/parquet-metadata.md
  • packages/objex-utils/docs/stac-hydrate.md
  • packages/objex-utils/docs/stac-source.md
  • packages/objex-utils/docs/stac-storage-extension.md
  • packages/objex-utils/docs/stac.md
  • packages/objex-utils/docs/storage.md
  • packages/objex-utils/package.json
  • packages/objex-utils/src/app-config.test.ts
  • packages/objex-utils/src/app-config.ts
  • packages/objex-utils/src/channel-composite.ts
  • packages/objex-utils/src/clipboard.ts
  • packages/objex-utils/src/cloud-url.ts
  • packages/objex-utils/src/cog-asset.ts
  • packages/objex-utils/src/cog-info.ts
  • packages/objex-utils/src/column-types.ts
  • packages/objex-utils/src/connection-identity.ts
  • packages/objex-utils/src/error.ts
  • packages/objex-utils/src/export.ts
  • packages/objex-utils/src/file-sort.ts
  • packages/objex-utils/src/format.ts
  • packages/objex-utils/src/geoarrow.ts
  • packages/objex-utils/src/geometry-type.ts
  • packages/objex-utils/src/hex.ts
  • packages/objex-utils/src/host-detection.ts
  • packages/objex-utils/src/index.ts
  • packages/objex-utils/src/local-storage.ts
  • packages/objex-utils/src/lru.ts
  • packages/objex-utils/src/map-pixel-inspect.ts
  • packages/objex-utils/src/markdown-sql-context.ts
  • packages/objex-utils/src/markdown-sql.ts
  • packages/objex-utils/src/notebook.ts
  • packages/objex-utils/src/parquet-metadata.ts
  • packages/objex-utils/src/stac-facets.ts
  • packages/objex-utils/src/stac-geoparquet.ts
  • packages/objex-utils/src/stac-hydrate.ts
  • packages/objex-utils/src/stac-pushdown.ts
  • packages/objex-utils/src/stac-source-api.ts
  • packages/objex-utils/src/stac-source-static.ts
  • packages/objex-utils/src/stac-source.ts
  • packages/objex-utils/src/stac-storage-extension.ts
  • packages/objex-utils/src/stac.ts
  • packages/objex-utils/src/storage-smoketest.ts
  • packages/objex-utils/src/storage-url.ts
  • packages/objex-utils/src/vite-env.d.ts
  • packages/objex-utils/src/wkb.ts
  • packages/objex-utils/tsconfig.json
  • packages/objex-utils/tsup.config.ts
  • packages/objex-utils/vitest.config.ts
  • patches/@carbonplan__zarr-layer@0.4.3.patch
  • patches/@developmentseed__deck.gl-geotiff@0.7.0.patch
  • patches/@developmentseed__deck.gl-raster@0.6.1.patch
  • pnpm-workspace.yaml
  • scripts/verify-objex-utils-bundle.mjs
  • src/lib/components/CLAUDE.md
  • src/lib/components/browser/FileTreeSidebar.svelte
  • src/lib/components/layout/AboutSheet.svelte
  • src/lib/components/layout/ConnectionDialog.svelte
  • src/lib/components/layout/SettingsSheet.svelte
  • src/lib/components/layout/Sidebar.svelte
  • src/lib/components/layout/StatusBar.svelte
  • src/lib/components/layout/TabBar.svelte
  • src/lib/components/viewers/ArchiveViewer.svelte
  • src/lib/components/viewers/CLAUDE.md
  • src/lib/components/viewers/CodeViewer.svelte
  • src/lib/components/viewers/CogControls.svelte
  • src/lib/components/viewers/CogViewer.svelte
  • src/lib/components/viewers/CopcViewer.svelte
  • src/lib/components/viewers/FlatGeobufViewer.svelte
  • src/lib/components/viewers/GeoParquetMapViewer.svelte
  • src/lib/components/viewers/ImageViewer.svelte
  • src/lib/components/viewers/MarkdownViewer.svelte
  • src/lib/components/viewers/MediaViewer.svelte
  • src/lib/components/viewers/ModelViewer.svelte
  • src/lib/components/viewers/MultiCogViewer.svelte
  • src/lib/components/viewers/NotebookViewer.svelte
  • src/lib/components/viewers/PdfViewer.svelte
  • src/lib/components/viewers/PmtilesViewer.svelte
  • src/lib/components/viewers/RawViewer.svelte
  • src/lib/components/viewers/StacMapViewer.svelte
  • src/lib/components/viewers/StacMosaicViewer.svelte
  • src/lib/components/viewers/StacTabViewer.svelte
  • src/lib/components/viewers/TableGrid.svelte
  • src/lib/components/viewers/TableStatusBar.svelte
  • src/lib/components/viewers/TableToolbar.svelte
  • src/lib/components/viewers/TableViewer.svelte
  • src/lib/components/viewers/ViewerRouter.svelte
  • src/lib/components/viewers/ZarrMapViewer.svelte
  • src/lib/components/viewers/ZarrViewer.svelte
  • src/lib/components/viewers/cog/ChannelPicker.svelte
  • src/lib/components/viewers/cog/buildRgbLayer.ts
  • src/lib/components/viewers/map/AttributeTable.svelte
  • src/lib/components/viewers/map/MapContainer.svelte
  • src/lib/components/viewers/pmtiles/PmtilesArchiveView.svelte
  • src/lib/components/viewers/pmtiles/PmtilesTileInspector.svelte
  • src/lib/components/viewers/stac/StacDatetimeBar.svelte
  • src/lib/components/viewers/stac/StacFilterPanel.svelte
  • src/lib/components/viewers/stac/StacItemInspector.svelte
  • src/lib/components/viewers/stac/StacItemStrip.svelte
  • src/lib/i18n/ar.ts
  • src/lib/i18n/en.ts
  • src/lib/index.ts
  • src/lib/query/CLAUDE.md
  • src/lib/query/source.ts
  • src/lib/query/stac-source-factory.ts
  • src/lib/query/stac-source-parquet.ts
  • src/lib/query/wasm.ts
  • src/lib/storage/presign.ts
  • src/lib/storage/providers.ts
  • src/lib/stores/CLAUDE.md
  • src/lib/stores/config.svelte.ts
  • src/lib/stores/connections.svelte.ts
  • src/lib/stores/files.svelte.ts
  • src/lib/stores/query-history.svelte.ts
  • src/lib/stores/settings.svelte.ts
  • src/lib/utils/CLAUDE.md
  • src/lib/utils/cog.ts
  • src/lib/utils/deck.ts
  • src/lib/utils/pmtiles-tile.ts
  • src/lib/utils/signed-url.ts
  • src/lib/utils/url-state.ts
  • src/lib/utils/zarr.ts
  • src/routes/+layout.svelte
  • src/routes/+layout.ts
  • src/routes/+page.svelte
  • static/config.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/utils-to-objex-utils

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

The workspace symlink resolves @walkthru-earth/objex-utils to its built
dist/, which does not exist after a fresh frozen install. Build the
package immediately after install in both the CI and deploy workflows so
type-checking and bundling can resolve every package import.
@yharby yharby changed the title Isolate objex-utils, add runtime config + settings panel, TS 6 upgrade objex-utils package split, runtime config + settings panel, deck.gl-raster 0.7, TS 6 May 28, 2026
yharby added 3 commits May 28, 2026 17:19
The packages/**/*.ts glob matched the generated objex-utils dist/*.d.ts.
This was latent until the workflow started building the package before
format:check; the generated declarations are not formatted to our style
and failed the check. Ignore **/dist/** and **/build/** so only source
is formatted and linted.
The Svelte lib's .d.ts emit resolves types from @walkthru-earth/objex-utils,
so the package must be built before `pnpm run package`. The previous order
built it after, leaving the leading package build on the critical path with
unresolved imports. Build objex-utils first, then package, then publish both.
Issue #11 happened because an unanticipated heavy dep leaked into the
published bundle. The guardrail only hard-failed on an enumerated list;
any dep not on the list was a passing warning, so a new unlisted heavy
dep could regress the same way.

objex-utils has zero runtime dependencies and four peer deps, so the only
legitimate top-level bare imports are those peers plus relative/node:.
Treat every other bare import as a hard failure (forbidden ones keep the
clearer label). The enumerated FORBIDDEN_PATTERNS now only refine the
error message, not the gate.
@yharby yharby merged commit ecf22c9 into main May 28, 2026
5 checks passed
@github-actions github-actions Bot mentioned this pull request May 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant