-
-
Notifications
You must be signed in to change notification settings - Fork 0
fix: SEO improvements, CI hardening, and lint cleanup #131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
5ab145d
d09a79b
7233055
02eca09
54598bd
5720942
66e00c7
6840e15
ca120d6
695f435
5d2e739
eb80d16
da96b8b
8efe859
0d8b5eb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,22 +1,22 @@ | ||
| { | ||
| "/": "2026-03-05", | ||
| "/docs/api/cached-decorator": "2026-03-05", | ||
| "/docs/api/memory-cache": "2026-03-05", | ||
| "/docs/examples": "2026-03-05", | ||
| "/docs/examples/api-caching": "2026-03-05", | ||
| "/docs/examples/async-fetching": "2026-03-05", | ||
| "/docs/examples/computed-values": "2026-03-05", | ||
| "/docs/examples/configuration": "2026-03-05", | ||
| "/docs/examples/database-caching": "2026-03-05", | ||
| "/docs/examples/monitoring": "2026-03-05", | ||
| "/docs/examples/multi-tenant": "2026-03-05", | ||
| "/docs/examples/rate-limiting": "2026-03-05", | ||
| "/docs/examples/service-class": "2026-03-05", | ||
| "/docs/examples/sessions": "2026-03-05", | ||
| "/docs/getting-started": "2026-03-05", | ||
| "/examples": "2026-03-05", | ||
| "/examples/basic-cache": "2026-03-05", | ||
| "/examples/cache-statistics": "2026-03-05", | ||
| "/examples/lru-eviction": "2026-03-05", | ||
| "/examples/ttl-expiration": "2026-03-05" | ||
| "/": "2026-03-05", | ||
| "/docs/api/cached-decorator": "2026-03-09", | ||
| "/docs/api/memory-cache": "2026-03-05", | ||
| "/docs/examples": "2026-03-05", | ||
| "/docs/examples/api-caching": "2026-03-15", | ||
| "/docs/examples/async-fetching": "2026-03-15", | ||
| "/docs/examples/computed-values": "2026-03-15", | ||
| "/docs/examples/configuration": "2026-03-15", | ||
| "/docs/examples/database-caching": "2026-03-15", | ||
| "/docs/examples/monitoring": "2026-03-15", | ||
| "/docs/examples/multi-tenant": "2026-03-15", | ||
| "/docs/examples/rate-limiting": "2026-03-15", | ||
| "/docs/examples/service-class": "2026-03-15", | ||
| "/docs/examples/sessions": "2026-03-15", | ||
| "/docs/getting-started": "2026-03-09", | ||
| "/examples": "2026-03-05", | ||
| "/examples/basic-cache": "2026-03-05", | ||
| "/examples/cache-statistics": "2026-03-05", | ||
| "/examples/lru-eviction": "2026-03-05", | ||
| "/examples/ttl-expiration": "2026-03-05" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: '@cached Decorator API - Memory Cache', | ||
| description: | ||
| 'API reference for the @cached decorator that adds automatic caching to class methods.' | ||
| 'API reference for the @cached decorator for automatic class method caching. Covers cache key strategies, TTL settings, and TypeScript examples.' | ||
| }) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'MemoryCache API - Memory Cache', | ||
| description: | ||
| 'Complete API reference for the MemoryCache class including all methods, options, and configuration.' | ||
| 'Complete API reference for the MemoryCache class. Covers get, set, delete, clear, stats, TTL, LRU eviction, and event listeners.' | ||
| }) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Usage Examples | Memory Cache', | ||
| description: | ||
| 'Practical examples showing how to use Memory Cache for API caching, sessions, rate limiting, and more.' | ||
| 'Practical examples of Memory Cache for API caching, session storage, rate limiting, database queries, and more TypeScript use cases.' | ||
| }) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Cache API responses to reduce network requests | |
| const seo = getSeoContext() | ||
| if (seo) { | ||
| seo.title = 'API Response Caching - Memory Cache' | ||
| seo.description = 'Cache API responses to reduce network requests and improve response times with @humanspeak/memory-cache' | ||
| seo.description = 'Cache API responses to reduce network requests and improve response times. Learn TTL-based expiration and cache invalidation patterns with @humanspeak/memory-cache.' | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Trim the
Suggested trim- seo.description = 'Cache API responses to reduce network requests and improve response times. Learn TTL-based expiration and cache invalidation patterns with `@humanspeak/memory-cache`.'
+ seo.description = 'Cache API responses to reduce network requests and improve response times. Learn TTL-based expiration and invalidation patterns in Memory Cache.'🤖 Prompt for AI Agents |
||
| seo.ogTitle = 'API Response Caching' | ||
| seo.ogTagline = 'Reduce network requests with cached API responses.' | ||
| seo.ogFeatures = ['TTL Expiration', 'Hooks Monitoring', 'Type Safety', 'Zero Dependencies'] | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'API Caching | Examples | Memory Cache', | ||
| description: 'Cache API responses to reduce latency and external API calls with Memory Cache.' | ||
| description: | ||
| 'Cache API responses to reduce latency and minimize external calls with Memory Cache. TTL-based expiration and automatic invalidation patterns.' | ||
| }) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Cache expensive async operations with getOrSet | |||||
| const seo = getSeoContext() | ||||||
| if (seo) { | ||||||
| seo.title = 'Async Fetching - Memory Cache' | ||||||
| seo.description = 'Cache expensive async operations with getOrSet in @humanspeak/memory-cache for thundering herd prevention' | ||||||
| seo.description = 'Cache expensive async operations with getOrSet for thundering herd prevention and request deduplication. Includes error handling patterns using @humanspeak/memory-cache.' | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Keep this meta description within the 160-character target. Line 11 appears longer than the PR’s SEO cap, so snippet truncation is likely. Consider shortening while keeping the same keywords. Suggested edit- seo.description = 'Cache expensive async operations with getOrSet for thundering herd prevention and request deduplication. Includes error handling patterns using `@humanspeak/memory-cache`.'
+ seo.description = 'Cache async operations with getOrSet for request deduplication and thundering-herd prevention, with practical error-handling patterns.'📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| seo.ogTitle = 'Async Fetching' | ||||||
| seo.ogTagline = 'Cache async operations with getOrSet.' | ||||||
| seo.ogFeatures = ['getOrSet', 'Thundering Herd', 'Error Handling', 'Sync Fetchers'] | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Async Fetching | Examples | Memory Cache', | ||
| description: | ||
| 'Cache async fetch results with automatic deduplication and stale-while-revalidate patterns.' | ||
| 'Cache async fetch results with request deduplication and thundering herd prevention using Memory Cache. Prevent redundant network calls.' | ||
| }) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Cache expensive computations | |||||
| const seo = getSeoContext() | ||||||
| if (seo) { | ||||||
| seo.title = 'Computed Value Caching - Memory Cache' | ||||||
| seo.description = 'Cache expensive computations to avoid redundant processing with @humanspeak/memory-cache' | ||||||
| seo.description = 'Cache expensive computations to avoid redundant processing and speed up repeated calculations. Includes performance tracking and hooks monitoring with @humanspeak/memory-cache.' | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Meta description exceeds the 160-char SEO threshold. Suggested fix (<=160 chars)- seo.description = 'Cache expensive computations to avoid redundant processing and speed up repeated calculations. Includes performance tracking and hooks monitoring with `@humanspeak/memory-cache`.'
+ seo.description = 'Cache expensive computations to avoid redundant processing and speed repeated calculations. Includes tracking and hooks with `@humanspeak/memory-cache`.'📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| seo.ogTitle = 'Computed Value Caching' | ||||||
| seo.ogTagline = 'Cache expensive computations efficiently.' | ||||||
| seo.ogFeatures = ['Deterministic Results', 'Performance Tracking', 'TTL Support', 'Hooks'] | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Computed Values | Examples | Memory Cache', | ||
| description: | ||
| 'Cache expensive computed values and derived data with automatic TTL-based refresh.' | ||
| 'Cache expensive computed values and derived data with automatic memoization using Memory Cache. Avoid redundant calculations in TypeScript.' | ||
| }) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Cache configuration that rarely changes | |||||
| const seo = getSeoContext() | ||||||
| if (seo) { | ||||||
| seo.title = 'Configuration Cache - Memory Cache' | ||||||
| seo.description = 'Cache configuration that rarely changes for faster application startup with @humanspeak/memory-cache' | ||||||
| seo.description = 'Cache configuration that rarely changes for faster application startup. Covers force refresh, change detection, and TTL strategies with @humanspeak/memory-cache.' | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Meta description exceeds the stated 160-char SEO cap. Suggested fix (<=160 chars)- seo.description = 'Cache configuration that rarely changes for faster application startup. Covers force refresh, change detection, and TTL strategies with `@humanspeak/memory-cache`.'
+ seo.description = 'Cache configuration that rarely changes for faster startup. Covers force refresh, change detection, and TTL strategies with `@humanspeak/memory-cache`.'📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| seo.ogTitle = 'Configuration Cache' | ||||||
| seo.ogTagline = 'Cache config for faster startup.' | ||||||
| seo.ogFeatures = ['Force Refresh', 'Change Detection', 'TTL Support', 'Hooks'] | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Configuration | Examples | Memory Cache', | ||
| description: | ||
| 'Configure Memory Cache with custom TTL, max size, eviction policies, and other options.' | ||
| 'Configure Memory Cache with custom TTL durations, max size limits, LRU eviction policies, and advanced options for your application.' | ||
| }) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Cache expensive database queries with the @cached decorator | |||||
| const seo = getSeoContext() | ||||||
| if (seo) { | ||||||
| seo.title = 'Database Query Caching - Memory Cache' | ||||||
| seo.description = 'Cache expensive database queries with the @cached decorator in @humanspeak/memory-cache' | ||||||
| seo.description = 'Cache expensive database queries with the @cached decorator to reduce latency and database load. Includes query monitoring and TTL examples with @humanspeak/memory-cache.' | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Trim Line 11 appears longer than 160 characters, which conflicts with the PR’s stated SEO limit and may truncate in snippets. ✂️ Proposed concise replacement- seo.description = 'Cache expensive database queries with the `@cached` decorator to reduce latency and database load. Includes query monitoring and TTL examples with `@humanspeak/memory-cache`.'
+ seo.description = 'Cache expensive database queries with `@cached` to reduce latency and load. Includes TTL and query monitoring examples using `@humanspeak/memory-cache`.'As per coding guidelines, "Documentation site built with SvelteKit. Check for accuracy and clarity." 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| seo.ogTitle = 'Database Query Caching' | ||||||
| seo.ogTagline = 'Cache expensive DB queries with @cached.' | ||||||
| seo.ogFeatures = ['@cached Decorator', 'Query Monitoring', 'TTL Expiration', 'Type Safety'] | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Database Caching | Examples | Memory Cache', | ||
| description: | ||
| 'Speed up database queries by caching results in memory with automatic invalidation.' | ||
| 'Speed up database queries by caching results in memory with automatic TTL invalidation. Reduce database load and improve response times.' | ||
| }) |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ description: Integrate with metrics and logging systems | |||||
| const seo = getSeoContext() | ||||||
| if (seo) { | ||||||
| seo.title = 'Monitoring with Hooks - Memory Cache' | ||||||
| seo.description = 'Integrate @humanspeak/memory-cache with metrics and logging systems using hooks for observability' | ||||||
| seo.description = 'Integrate @humanspeak/memory-cache with DataDog, Prometheus, and custom logging systems. Use hooks to track hit rates, evictions, and cache health for observability.' | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Trim this SEO description to avoid snippet truncation. Line 11 likely exceeds the 160-character target from this PR’s SEO scope. Suggested edit- seo.description = 'Integrate `@humanspeak/memory-cache` with DataDog, Prometheus, and custom logging systems. Use hooks to track hit rates, evictions, and cache health for observability.'
+ seo.description = 'Integrate `@humanspeak/memory-cache` with DataDog, Prometheus, and custom logging. Track hit rates, evictions, and cache health with hooks.'📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| seo.ogTitle = 'Monitoring with Hooks' | ||||||
| seo.ogTagline = 'Integrate with metrics and logging systems.' | ||||||
| seo.ogFeatures = ['DataDog', 'Prometheus', 'Debug Logging', 'Hit Rate Dashboard'] | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,5 @@ | ||
| export const load = () => ({ | ||
| title: 'Monitoring | Examples | Memory Cache', | ||
| description: 'Monitor cache health with hit rates, memory usage, and performance metrics.' | ||
| description: | ||
| 'Monitor cache health with hit rates, eviction counts, and performance metrics. Integrate Memory Cache with DataDog, Prometheus, or custom dashboards.' | ||
| }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: humanspeak/memory-cache
Length of output: 19942
🌐 Web query:
Trunk.io osv-scanner advisory CVE GHSA ignore ignore-advisories configuration💡 Result:
How Trunk’s
osv-scanner“ignore advisories” works (CVE / GHSA)Trunk doesn’t have a separate
ignore-advisorieskey forosv-scanner. Trunk runs Google’sosv-scanneron each lockfile and (by default) relies onosv-scanner’s own config file:osv-scanner.toml. Trunk’s plugin definition also declaresosv-scanner.tomlas the tool’s direct config. [1]1) Ignore specific advisories (by CVE or GHSA)
Create
osv-scanner.tomlin the same directory as the lockfile you’re scanning, and add ignored vulnerability IDs under[[IgnoredVulns]]. [2]Notes:
osv-scanner.tomlapplies only to scanned files in that same directory (it does not automatically apply to child directories). [2]osv-scanneroutput explicitly recommends this approach and shows the same[[IgnoredVulns]]format. [3]2) (Optional) Use one global ignore file for the whole repo
If you want one ignore file to apply everywhere,
osv-scannersupports--config=/path/to/config.toml. [2]Trunk’s bundled command is essentially:
osv-scanner --lockfile=${target} --format json[1]So, to use
--config, you’d override the linter command in.trunk/trunk.yamlto add that flag (keeping the rest of the command structure the same). [1][2]Sources
[1] Trunk plugins repo –
osv-scannerlinter definition (direct_configs: [osv-scanner.toml], run command) (github.com)[2] OSV-Scanner documentation – configuration +
[[IgnoredVulns]]+--configbehavior (google.github.io)[3] OSV-Scanner documentation – output guidance showing how to ignore a vulnerability via
osv-scanner.toml(google.github.io)Citations:
Remove blanket
osv-scannersuppression forpnpm-lock.yaml.Excluding the lockfile removes coverage for dependency vulnerabilities. Instead, create an
osv-scanner.tomlfile at the lockfile location(s) with specific CVE/GHSA IDs under[[IgnoredVulns]]and include rationale for each exemption.🤖 Prompt for AI Agents