Preserve duplicate WebView asset paths when deduplicating uploads

Open
#280 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
72/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript
Domain
cli

Research direction

Start at #mapAssets() and the WebView upload path, then compare its handling with the regular-media upload path's final hash-and-size lookup. Add regression coverage for two differently named WebView files with identical contents and verify that both paths appear in webViewAssetMap with the same uploaded URL while different hashes remain distinct.

Written by the indexing model from the issue text.

Description

Description

Duplicate WebView assets can be omitted from the returned webViewAssetMap.

When multiple WebView files have identical contents, #mapAssets() correctly deduplicates them so that only one file is uploaded. However, the duplicate file paths are not subsequently mapped to the uploaded asset URL.

As a result, only the first unique path may be present in webViewAssetMap, while other files with the same hash and size are missing.

Current behavior

Given two WebView assets with identical contents:

client/header-logo.svg
client/footer-logo.svg

the CLI may:

  1. classify one file as a new asset;
  2. classify the other as a duplicate;
  3. upload only the first file;
  4. add only the first file path to webViewAssetMap.

The duplicate path is not associated with the uploaded URL.

The regular-media upload path already performs a final hash-and-size lookup that maps duplicate paths to the same uploaded asset ID. The WebView upload path does not appear to have equivalent behavior.

Expected behavior

Duplicate WebView assets should continue to be uploaded only once, but every original file path should be included in webViewAssetMap.

For example:

{
  "header-logo.svg": "https://example.com/uploaded-asset",
  "footer-logo.svg": "https://example.com/uploaded-asset"
}

Both paths should resolve to the same uploaded URL.

Proposed implementation

Track uploaded WebView asset URLs by a stable signature such as:

`${asset.hash}:${asset.size}`

After each unique asset is uploaded:

  1. associate its signature with the final uploaded URL;
  2. add the unique asset path to assetMap;
  3. add every duplicate path with the same signature to assetMap.

The duplicate lookup in #mapAssets() currently scans the growing newAssets array with .find(). Replacing that lookup with a signature Set or Map would also reduce duplicate classification from O(n²) to O(n).

Acceptance criteria

  • Duplicate WebView files are uploaded only once.
  • Every duplicate file path is included in webViewAssetMap.
  • Duplicate paths resolve to the same uploaded URL.
  • Files with the same size but different hashes are not deduplicated.
  • Existing behavior for unique and already-existing WebView assets remains unchanged.
  • Regression tests cover at least two WebView files with different paths and identical contents.
Dominant language
TypeScript
Stars
210
Forks
88
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from reddit/devvit

All issues in reddit/devvit

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.