Skip to content

Commit

Permalink
add new preset
Browse files Browse the repository at this point in the history
  • Loading branch information
khromov committed Dec 7, 2024
1 parent d8d119a commit 0dbd721
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 38 deletions.
75 changes: 65 additions & 10 deletions src/lib/presets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ export type PresetConfig = {
const SVELTE_5_PROMPT =
'Always use Svelte 5 runes and Svelte 5 syntax. Runes do not need to be imported, they are globals. $state() runes are always declared using `let`, never with `const`. When passing a function to $derived, you must always use $derived.by(() => ...).'


export const combinedPresets: Record<string, PresetConfig> = {
'svelte-complete-medium': {
title: '⭐️ Svelte + SvelteKit (Recommended - Medium preset)',
Expand Down Expand Up @@ -109,8 +108,8 @@ export const combinedPresets: Record<string, PresetConfig> = {
removeHtmlComments: true,
normalizeWhitespace: true
}
},
};
}
}

export const sveltePresets: Record<string, PresetConfig> = {
svelte: {
Expand All @@ -123,6 +122,36 @@ export const sveltePresets: Record<string, PresetConfig> = {
prompt: SVELTE_5_PROMPT,
minimize: {}
},
'svelte-medium': {
title: 'Svelte (Medium)',
description: 'Complete documentation including legacy and reference',
owner: 'sveltejs',
repo: 'svelte.dev',
glob: ['**/apps/svelte.dev/content/docs/svelte/**/*.md'],
ignore: [
// Svelte ignores
'**/apps/svelte.dev/content/docs/svelte/07-misc/04-custom-elements.md',
'**/apps/svelte.dev/content/docs/svelte/07-misc/06-v4-migration-guide.md',
'**/apps/svelte.dev/content/docs/svelte/07-misc/07-v5-migration-guide.md',
'**/apps/svelte.dev/content/docs/svelte/07-misc/99-faq.md',
'**/apps/svelte.dev/content/docs/svelte/07-misc/xx-reactivity-indepth.md',
'**/apps/svelte.dev/content/docs/svelte/98-reference/21-svelte-legacy.md',
'**/apps/svelte.dev/content/docs/svelte/99-legacy/**/*.md',
'**/apps/svelte.dev/content/docs/svelte/98-reference/30-runtime-errors.md',
'**/apps/svelte.dev/content/docs/svelte/98-reference/30-runtime-warnings.md',
'**/apps/svelte.dev/content/docs/svelte/98-reference/30-compiler-errors.md',
'**/apps/svelte.dev/content/docs/svelte/98-reference/30-compiler-warnings.md'
],
prompt: SVELTE_5_PROMPT,
minimize: {
removeLegacy: true,
removePlaygroundLinks: true,
removeNoteBlocks: true,
removeDetailsBlocks: true,
removeHtmlComments: true,
normalizeWhitespace: true
}
}
}

export const svelteKitPresets: Record<string, PresetConfig> = {
Expand All @@ -135,6 +164,32 @@ export const svelteKitPresets: Record<string, PresetConfig> = {
glob: ['**/apps/svelte.dev/content/docs/kit/**/*.md'],
minimize: {}
},
'sveltekit-medium': {
title: 'SvelteKit (Medium)',
description: 'Complete documentation including legacy and reference',
owner: 'sveltejs',
repo: 'svelte.dev',
prompt: SVELTE_5_PROMPT,
glob: ['**/apps/svelte.dev/content/docs/kit/**/*.md'],
minimize: {
removeLegacy: true,
removePlaygroundLinks: true,
removeNoteBlocks: true,
removeDetailsBlocks: true,
removeHtmlComments: true,
normalizeWhitespace: true
},
ignore: [
// SvelteKit ignores
'**/apps/svelte.dev/content/docs/kit/25-build-and-deploy/*adapter-*.md',
'**/apps/svelte.dev/content/docs/kit/25-build-and-deploy/99-writing-adapters.md',
'**/apps/svelte.dev/content/docs/kit/30-advanced/70-packaging.md',
'**/apps/svelte.dev/content/docs/kit/40-best-practices/05-performance.md',
'**/apps/svelte.dev/content/docs/kit/40-best-practices/10-accessibility.md', // May the a11y gods have mercy on our souls
'**/apps/svelte.dev/content/docs/kit/60-appendix/**/*.md',
'**/xx-*.md'
]
}
}

export const otherPresets: Record<string, PresetConfig> = {
Expand All @@ -153,13 +208,13 @@ export const presets = {
...sveltePresets,
...svelteKitPresets,
...otherPresets
};
}

export function transformAndSortPresets(presetsObject) {
return Object.entries(presetsObject)
.map(([key, value]) => ({
key: key.toLowerCase(),
...value
}))
.sort();
}
.map(([key, value]) => ({
key: key.toLowerCase(),
...value
}))
.sort()
}
2 changes: 1 addition & 1 deletion src/routes/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
</p>
<h2>Combined presets</h2>
<em>
Hand-picked combinations in a variety of sizes.
Hand-picked combinations of the Svelte 5 + SvelteKit docs in a variety of sizes to fit different LLMs.
</em>
<ul>
{#each combinedPresetsFormatted as preset}
Expand Down
60 changes: 33 additions & 27 deletions src/routes/[preset]/size/+server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,39 @@ import { fetchAndProcessMarkdown } from '$lib/fetchMarkdown'
import { swr } from '$lib/cache'

export const GET: RequestHandler = async ({ params }) => {
const preset = params.preset
const preset = params.preset

if (!(preset in presets)) {
error(400, `Invalid preset: "${preset}"`)
}
if (!(preset in presets)) {
error(400, `Invalid preset: "${preset}"`)
}

try {
// Use SWR cache with a longer TTL for sizes
const { value: size } = await swr(`${preset}-size`, async () => {
const content = await fetchAndProcessMarkdown(presets[preset])
// Ensure we get a whole number by using parseInt after floor
const sizeKb = parseInt(Math.floor(new TextEncoder().encode(content).length / 1024).toString())
return sizeKb
}, {
// Cache size calculations for longer since they change less frequently
minTimeToStale: 0, // 24 hours
maxTimeToLive: 1 // 7 days
})
try {
// Use SWR cache with a longer TTL for sizes
const { value: size } = await swr(
`${preset}-size`,
async () => {
const content = await fetchAndProcessMarkdown(presets[preset])
// Ensure we get a whole number by using parseInt after floor
const sizeKb = parseInt(
Math.floor(new TextEncoder().encode(content).length / 1024).toString()
)
return sizeKb
},
{
// Cache size calculations for longer since they change less frequently
minTimeToStale: 24 * 60 * 60 * 1000, // 24 hours
maxTimeToLive: 7 * 24 * 60 * 60 * 1000 // 7 days
}
)

// Ensure the response is also strictly an integer
return new Response(JSON.stringify({ sizeKb: parseInt(size.toString()) }), {
headers: {
'Content-Type': 'application/json'
}
})
} catch (e) {
console.error(`Error calculating size for preset "${preset}":`, e)
error(500, `Failed to calculate size for preset "${preset}"`)
}
}
// Ensure the response is also strictly an integer
return new Response(JSON.stringify({ sizeKb: parseInt(size.toString()) }), {
headers: {
'Content-Type': 'application/json'
}
})
} catch (e) {
console.error(`Error calculating size for preset "${preset}":`, e)
error(500, `Failed to calculate size for preset "${preset}"`)
}
}

0 comments on commit 0dbd721

Please sign in to comment.