sveltekit-sitemap
Advanced tools
Comparing version 1.0.10 to 1.0.11
import * as type_fest_source_readonly_deep from 'type-fest/source/readonly-deep'; | ||
import { RequestEvent, Handle } from '@sveltejs/kit'; | ||
import * as type_fest from 'type-fest'; | ||
import { ReadonlyDeep, SetOptional } from 'type-fest'; | ||
import { ReadonlyDeep } from 'type-fest'; | ||
import { ViteDevServer } from 'vite'; | ||
@@ -16,3 +15,3 @@ | ||
type StaticRoutes<S extends RO_Sitemap, R extends Routes<S> = Routes<S>> = Str<R extends `/${infer B}/[${infer P}]` ? never : R>; | ||
type Priority = "1.0 " | "0.9" | "0.8" | "0.7" | "0.6" | "0.5" | "0.4" | "0.3" | "0.2" | "0.1" | "0.0"; | ||
type Priority = "1.0" | "0.9" | "0.8" | "0.7" | "0.6" | "0.5" | "0.4" | "0.3" | "0.2" | "0.1" | "0.0"; | ||
type Frequency = "Always" | "Hourly" | "Weekly" | "Monthly" | "Yearly" | "Never"; | ||
@@ -48,13 +47,16 @@ type RouteDefinition<P extends string> = { | ||
priority?: Priority; | ||
image?: { | ||
url: string; | ||
title?: string | null; | ||
altText?: string | null; | ||
}; | ||
image?: RouteDefinitionImage; | ||
}; | ||
type RouteDefinitionImage = { | ||
url: string; | ||
title?: string | null; | ||
altText?: string | null; | ||
}; | ||
type Event = RequestEvent<Partial<Record<string, string>>, string | null>; | ||
type RobotPaths<S extends Sitemap> = { | ||
[K in Routes<S> | Folders<S> | "/$" | (string & {})]?: K extends DynamicRoutes<S> ? Record<string, boolean> : boolean; | ||
type PathDirectives<S extends Sitemap> = { | ||
[K in Routes<S> | Folders<S> | "/$"]?: K extends DynamicRoutes<S> ? { | ||
[K in string]?: boolean; | ||
} : boolean; | ||
}; | ||
type UserAgent<S extends Sitemap> = { | ||
type UserAgentDirective<S extends Sitemap> = { | ||
userAgent?: string | string[]; | ||
@@ -65,10 +67,10 @@ /** | ||
crawlDelay?: number; | ||
paths: RobotPaths<S>; | ||
paths: PathDirectives<S>; | ||
}; | ||
type RouteDefinitions<S extends RO_Sitemap> = SetOptional<{ | ||
[K in Routes<S>]: K extends StaticRoutes<S> ? RouteDefinition<K> : RouteDefinition<K>[]; | ||
}, StaticRoutes<S>>; | ||
type RouteDefinitions<S extends RO_Sitemap> = { | ||
[K in Routes<S>]?: K extends StaticRoutes<S> ? RouteDefinition<K> : RouteDefinition<K>[]; | ||
}; | ||
type SitemapParams<S extends RO_Sitemap> = { | ||
getRobots: (event: Event) => Promise<boolean | UserAgent<S> | UserAgent<S>[]>; | ||
getRoutes: (event: Event) => Promise<RouteDefinitions<S>>; | ||
getRobots?: (event: Event) => Promise<boolean | UserAgentDirective<S> | UserAgentDirective<S>[]>; | ||
getRoutes?: (event: Event) => Promise<RouteDefinitions<S>>; | ||
}; | ||
@@ -81,3 +83,3 @@ type SitemapPluginParams = { | ||
declare const sitemapHook: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(sitemap: S, params: SitemapParams<S>) => Handle; | ||
declare const sitemapHook: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(sitemap: S, params?: SitemapParams<S> | undefined) => Handle; | ||
@@ -90,6 +92,6 @@ declare const sitemapPlugin: ({ routesDir, sitemapFile }?: SitemapPluginParams) => { | ||
declare const encodeXML: (str: string) => string; | ||
declare const generateSitemap: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(definitions: type_fest.Simplify<type_fest.Except<{ [K in Str<keyof S>]: K extends Str<Str<keyof S> extends infer T ? T extends Str<keyof S> ? T extends `/${infer B}/[${infer P}]` ? never : T : never : never> ? RouteDefinition<K> : RouteDefinition<K>[]; }, Str<Str<keyof S> extends infer T ? T extends Str<keyof S> ? T extends `/${infer B}/[${infer P}]` ? never : T : never : never>> & Partial<Pick<{ [K in Str<keyof S>]: K extends Str<Str<keyof S> extends infer T ? T extends Str<keyof S> ? T extends `/${infer B}/[${infer P}]` ? never : T : never : never> ? RouteDefinition<K> : RouteDefinition<K>[]; }, Str<Str<keyof S> extends infer T ? T extends Str<keyof S> ? T extends `/${infer B}/[${infer P}]` ? never : T : never : never>>>>, baseUrl: string, sitemap: S) => string; | ||
declare const generateRobots: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(robots: boolean | UserAgent<S> | UserAgent<S>[], baseUrl: string) => string; | ||
declare const generateSitemap: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(definitions: RouteDefinitions<S>, baseUrl: string, sitemap: S) => string; | ||
declare const generateRobots: <S extends type_fest_source_readonly_deep.ReadonlyObjectDeep<Sitemap>>(robots: boolean | UserAgentDirective<S> | UserAgentDirective<S>[], baseUrl: string) => string; | ||
declare const getRoutes: (dir: string) => Sitemap; | ||
export { DynamicRoutes, Event, Folders, RO_Sitemap, ReplaceParams, RobotPaths, RouteDefinition, RouteDefinitions, Routes, Sitemap, SitemapParams, SitemapPluginParams, StaticRoutes, Str, UserAgent, encodeXML, generateRobots, generateSitemap, getRoutes, sitemapHook, sitemapPlugin }; | ||
export { DynamicRoutes, Event, Folders, PathDirectives, RO_Sitemap, ReplaceParams, RouteDefinition, RouteDefinitionImage, RouteDefinitions, Routes, Sitemap, SitemapParams, SitemapPluginParams, StaticRoutes, Str, UserAgentDirective, encodeXML, generateRobots, generateSitemap, getRoutes, sitemapHook, sitemapPlugin }; |
{ | ||
"name": "sveltekit-sitemap", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"description": "", | ||
@@ -24,3 +24,4 @@ "main": "./dist/index.mjs", | ||
"dev": "tsup --format esm --watch --dts", | ||
"build": "tsup --format esm --minify --dts", | ||
"build": "tsup --format esm", | ||
"doc": "typedoc src/index.ts", | ||
"test:ui": "vitest --ui", | ||
@@ -34,7 +35,8 @@ "pub": "pnpm run build && node increment && npm publish --access public", | ||
], | ||
"splitting": false, | ||
"minify": true, | ||
"splitting": true, | ||
"dts": true, | ||
"sourcemap": true, | ||
"clean": true | ||
"clean": false | ||
} | ||
} |
@@ -6,7 +6,7 @@ import type { Handle } from "@sveltejs/kit"; | ||
export const sitemapHook = | ||
<S extends RO_Sitemap>(sitemap: S, params: SitemapParams<S>): Handle => | ||
<S extends RO_Sitemap>(sitemap: S, params: SitemapParams<S> | undefined = {}): Handle => | ||
async ({ event, resolve }) => { | ||
if (event.url.pathname === "/sitemap.xml") { | ||
// Get dynamic custom definition for app routes | ||
const routeDefinitions = await params.getRoutes(event); | ||
const routeDefinitions = params.getRoutes ? await params.getRoutes(event) : {}; | ||
return new Response(generateSitemap(routeDefinitions, event.url.origin, sitemap), { | ||
@@ -22,3 +22,3 @@ status: 200, | ||
// Get dynamic robots directives | ||
const robots = await params.getRobots(event); | ||
const robots = params.getRobots ? await params.getRobots(event) : true; | ||
@@ -25,0 +25,0 @@ // Build and return the robots.txt |
import { RequestEvent } from "@sveltejs/kit"; | ||
import { ReadonlyDeep, SetOptional } from "type-fest"; | ||
import { ReadonlyDeep } from "type-fest"; | ||
export type RO_Sitemap = ReadonlyDeep<Sitemap>; | ||
@@ -20,3 +20,3 @@ export type Sitemap = Record<string, boolean>; | ||
type Priority = "1.0 " | "0.9" | "0.8" | "0.7" | "0.6" | "0.5" | "0.4" | "0.3" | "0.2" | "0.1" | "0.0"; | ||
type Priority = "1.0" | "0.9" | "0.8" | "0.7" | "0.6" | "0.5" | "0.4" | "0.3" | "0.2" | "0.1" | "0.0"; | ||
@@ -53,15 +53,15 @@ type Frequency = "Always" | "Hourly" | "Weekly" | "Monthly" | "Yearly" | "Never"; | ||
priority?: Priority; | ||
image?: { | ||
url: string; | ||
title?: string | null; | ||
altText?: string | null; | ||
}; | ||
image?: RouteDefinitionImage; | ||
}; | ||
export type RouteDefinitionImage = { | ||
url: string; | ||
title?: string | null; | ||
altText?: string | null; | ||
}; | ||
export type Event = RequestEvent<Partial<Record<string, string>>, string | null>; | ||
export type RobotPaths<S extends Sitemap> = { | ||
[K in Routes<S> | Folders<S> | "/$" | (string & {})]?: K extends DynamicRoutes<S> ? Record<string, boolean> : boolean; | ||
export type PathDirectives<S extends Sitemap> = { | ||
[K in Routes<S> | Folders<S> | "/$"]?: K extends DynamicRoutes<S> ? { [K in string]?: boolean } : boolean; | ||
}; | ||
export type UserAgent<S extends Sitemap> = { | ||
export type UserAgentDirective<S extends Sitemap> = { | ||
userAgent?: string | string[]; | ||
@@ -72,14 +72,12 @@ /** | ||
crawlDelay?: number; | ||
paths: RobotPaths<S>; | ||
paths: PathDirectives<S>; | ||
}; | ||
export type RouteDefinitions<S extends RO_Sitemap> = SetOptional< | ||
{ | ||
[K in Routes<S>]: K extends StaticRoutes<S> ? RouteDefinition<K> : RouteDefinition<K>[]; | ||
}, | ||
StaticRoutes<S> | ||
>; | ||
export type RouteDefinitions<S extends RO_Sitemap> = { | ||
[K in Routes<S>]?: K extends StaticRoutes<S> ? RouteDefinition<K> : RouteDefinition<K>[]; | ||
}; | ||
export type SitemapParams<S extends RO_Sitemap> = { | ||
getRobots: (event: Event) => Promise<boolean | UserAgent<S> | UserAgent<S>[]>; | ||
getRoutes: (event: Event) => Promise<RouteDefinitions<S>>; | ||
getRobots?: (event: Event) => Promise<boolean | UserAgentDirective<S> | UserAgentDirective<S>[]>; | ||
getRoutes?: (event: Event) => Promise<RouteDefinitions<S>>; | ||
}; | ||
@@ -86,0 +84,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { RO_Sitemap, RouteDefinitions, RouteDefinition, Sitemap, UserAgent } from "./types"; | ||
import { RO_Sitemap, RouteDefinitions, RouteDefinition, Sitemap, UserAgentDirective } from "./types"; | ||
import fs from "fs"; | ||
@@ -23,3 +23,5 @@ | ||
if (!isDynamic) { | ||
Object.assign(acc, { [route]: { path: route } }); | ||
Object.assign(acc, { | ||
[route]: { path: route, priority: route === "/" ? "1.0" : "0.7" } as RouteDefinition<string> | ||
}); | ||
} | ||
@@ -80,3 +82,3 @@ return acc; | ||
export const generateRobots = <S extends RO_Sitemap>( | ||
robots: boolean | UserAgent<S> | UserAgent<S>[], | ||
robots: boolean | UserAgentDirective<S> | UserAgentDirective<S>[], | ||
baseUrl: string | ||
@@ -87,3 +89,3 @@ ) => { | ||
const parseAgent = (agent: UserAgent<S>) => { | ||
const parseAgent = (agent: UserAgentDirective<S>) => { | ||
const infos = Object.entries(agent.paths).reduce<{ allow: string[]; disallow: string[] }>( | ||
@@ -90,0 +92,0 @@ (acc, [route, allow]) => { |
@@ -1,2 +0,2 @@ | ||
import { RO_Sitemap, DynamicRoutes, StaticRoutes, Routes, ReplaceParams, Folders } from "../src"; | ||
import { RO_Sitemap, DynamicRoutes, StaticRoutes, Routes, ReplaceParams, Folders, UserAgentDirective } from "../src"; | ||
@@ -26,1 +26,11 @@ type Expect<T extends true> = T; | ||
]; | ||
const testAgentDirective = { | ||
userAgent: ["*"], | ||
paths: { | ||
"/blogs/": false, | ||
"/blogs/[id]": { | ||
"/blogs/id": true | ||
} | ||
} | ||
} satisfies UserAgentDirective<S>; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
38288
546