@devlusoft/devix 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +6 -4
  2. package/dist/cli/build.js +39 -178
  3. package/dist/cli/build.js.map +4 -4
  4. package/dist/cli/dev.js +41 -253
  5. package/dist/cli/dev.js.map +4 -4
  6. package/dist/cli/generate.js +39 -281
  7. package/dist/cli/generate.js.map +4 -4
  8. package/dist/cli/index.js +44 -527
  9. package/dist/cli/index.js.map +4 -4
  10. package/dist/cli/start.js +1 -77
  11. package/dist/cli/start.js.map +4 -4
  12. package/dist/config.js +1 -16
  13. package/dist/config.js.map +2 -2
  14. package/dist/runtime/api-context.d.ts +3 -2
  15. package/dist/runtime/api-context.js +1 -17
  16. package/dist/runtime/api-context.js.map +3 -3
  17. package/dist/runtime/client-router.js +1 -58
  18. package/dist/runtime/client-router.js.map +2 -2
  19. package/dist/runtime/context.js +1 -14
  20. package/dist/runtime/context.js.map +2 -2
  21. package/dist/runtime/error-boundary.js +1 -36
  22. package/dist/runtime/error-boundary.js.map +2 -2
  23. package/dist/runtime/fetch.d.ts +19 -0
  24. package/dist/runtime/fetch.js +2 -0
  25. package/dist/runtime/fetch.js.map +7 -0
  26. package/dist/runtime/head.js +1 -68
  27. package/dist/runtime/head.js.map +2 -2
  28. package/dist/runtime/index.d.ts +7 -1
  29. package/dist/runtime/index.js +1 -299
  30. package/dist/runtime/index.js.map +4 -4
  31. package/dist/runtime/link.js +1 -42
  32. package/dist/runtime/link.js.map +2 -2
  33. package/dist/runtime/metadata.js +1 -21
  34. package/dist/runtime/metadata.js.map +2 -2
  35. package/dist/runtime/router-provider.js +1 -258
  36. package/dist/runtime/router-provider.js.map +2 -2
  37. package/dist/server/api-router.d.ts +1 -0
  38. package/dist/server/api-router.js +1 -63
  39. package/dist/server/api-router.js.map +3 -3
  40. package/dist/server/api.js +1 -122
  41. package/dist/server/api.js.map +3 -3
  42. package/dist/server/collect-css.js +1 -14
  43. package/dist/server/collect-css.js.map +2 -2
  44. package/dist/server/index.js +1 -132
  45. package/dist/server/index.js.map +3 -3
  46. package/dist/server/pages-router.js +1 -63
  47. package/dist/server/pages-router.js.map +2 -2
  48. package/dist/server/render.js +1 -305
  49. package/dist/server/render.js.map +2 -2
  50. package/dist/server/routes.js +1 -41
  51. package/dist/server/routes.js.map +2 -2
  52. package/dist/utils/async.js +1 -13
  53. package/dist/utils/async.js.map +2 -2
  54. package/dist/utils/banner.js +1 -33
  55. package/dist/utils/banner.js.map +2 -2
  56. package/dist/utils/cookies.d.ts +12 -0
  57. package/dist/utils/cookies.js +2 -0
  58. package/dist/utils/cookies.js.map +7 -0
  59. package/dist/utils/duration.js +1 -21
  60. package/dist/utils/duration.js.map +2 -2
  61. package/dist/utils/env.d.ts +1 -0
  62. package/dist/utils/env.js +2 -0
  63. package/dist/utils/env.js.map +7 -0
  64. package/dist/utils/html.js +1 -11
  65. package/dist/utils/html.js.map +2 -2
  66. package/dist/utils/patterns.js +1 -7
  67. package/dist/utils/patterns.js.map +2 -2
  68. package/dist/utils/response.d.ts +6 -0
  69. package/dist/utils/response.js +2 -0
  70. package/dist/utils/response.js.map +7 -0
  71. package/dist/vite/codegen/api.js +6 -12
  72. package/dist/vite/codegen/api.js.map +2 -2
  73. package/dist/vite/codegen/client-routes.js +6 -12
  74. package/dist/vite/codegen/client-routes.js.map +2 -2
  75. package/dist/vite/codegen/context.js +2 -8
  76. package/dist/vite/codegen/context.js.map +2 -2
  77. package/dist/vite/codegen/entry-client.js +4 -10
  78. package/dist/vite/codegen/entry-client.js.map +2 -2
  79. package/dist/vite/codegen/extract-methods.d.ts +4 -0
  80. package/dist/vite/codegen/extract-methods.js +2 -0
  81. package/dist/vite/codegen/extract-methods.js.map +7 -0
  82. package/dist/vite/codegen/render.js +6 -12
  83. package/dist/vite/codegen/render.js.map +2 -2
  84. package/dist/vite/codegen/routes-dts.d.ts +10 -0
  85. package/dist/vite/codegen/routes-dts.js +23 -0
  86. package/dist/vite/codegen/routes-dts.js.map +7 -0
  87. package/dist/vite/codegen/scan-api.d.ts +2 -0
  88. package/dist/vite/codegen/scan-api.js +2 -0
  89. package/dist/vite/codegen/scan-api.js.map +7 -0
  90. package/dist/vite/codegen/write-routes-dts.d.ts +1 -0
  91. package/dist/vite/codegen/write-routes-dts.js +2 -0
  92. package/dist/vite/codegen/write-routes-dts.js.map +7 -0
  93. package/dist/vite/index.js +41 -119
  94. package/dist/vite/index.js.map +4 -4
  95. package/package.json +2 -2
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/server/render.tsx", "../../src/runtime/head.tsx", "../../src/utils/patterns.ts", "../../src/server/pages-router.ts", "../../src/runtime/metadata.ts", "../../src/runtime/context.tsx", "../../src/utils/html.ts", "../../src/utils/async.ts"],
4
4
  "sourcesContent": ["import {ComponentType, createElement, ReactElement} from 'react'\nimport {renderToString, renderToStaticMarkup} from 'react-dom/server'\nimport {buildHeadNodes} from '../runtime/head'\nimport {buildPages, matchPage, collectLayoutChain} from './pages-router'\nimport {resolveMetadata, mergeMetadata} from '../runtime/metadata'\nimport {RouteDataContext} from '../runtime/context'\nimport type {PageModule, LayoutModule, PageGlob} from './types'\nimport type {Manifest} from \"vite\";\nimport {escapeAttr, safeJsonStringify} from \"../utils/html\";\nimport {withTimeout} from \"../utils/async\";\n\nconst DEV_CLIENT_ENTRY = '/@id/virtual:devix/entry-client'\n\nasync function resolvePageData(pathname: string, request: Request, glob: PageGlob, timeout: number) {\n const {pages, layouts} = buildPages(Object.keys(glob.pages), Object.keys(glob.layouts), glob.pagesDir)\n const matched = matchPage(pathname, pages)\n if (!matched) return null\n\n const {page, params} = matched\n const layoutChain = collectLayoutChain(page.key, layouts)\n const ctx = {params, request}\n\n const pageMod = await glob.pages[page.key]() as PageModule\n\n if (pageMod.guard) {\n const redirect = await pageMod.guard(ctx)\n if (redirect) return {redirect}\n }\n\n const loaderData = pageMod.loader\n ? await withTimeout(pageMod.loader(ctx) as Promise<unknown>, timeout)\n : null\n\n const layoutMods = await Promise.all(\n layoutChain.map(l => glob.layouts[l.key]() as Promise<LayoutModule>)\n )\n const layoutsData = await withTimeout(\n Promise.all(layoutMods.map(mod => mod.loader ? mod.loader(ctx) : null)),\n timeout\n )\n\n const pageMeta = await resolveMetadata(pageMod, {...ctx, loaderData})\n const layoutsMeta = await Promise.all(\n layoutMods.map((mod, i) => resolveMetadata(mod, {...ctx, loaderData: layoutsData[i]}))\n )\n\n const metadata = mergeMetadata(...layoutsMeta.map(m => m.metadata), pageMeta.metadata)\n const viewport = pageMeta.viewport ?? layoutsMeta.findLast(m => m.viewport)?.viewport\n\n const rootLayoutMod = layoutMods[0]\n const lang = rootLayoutMod?.generateLang\n ? await rootLayoutMod.generateLang({...ctx, loaderData})\n : rootLayoutMod?.lang ?? 'en'\n\n return {pageMod, layoutMods, params, loaderData, layoutsData, metadata, viewport, lang}\n}\n\nexport async function runLoader(url: string, request: Request, glob: PageGlob, options?: { loaderTimeout?: number }) {\n const {pathname} = new URL(url, 'http://localhost')\n let result: Awaited<ReturnType<typeof resolvePageData>>\n try {\n const timeout = options?.loaderTimeout ?? 10_000\n result = await resolvePageData(pathname, request, glob, timeout)\n } catch (err) {\n console.error('[devix] render error:', err)\n return {loaderData: null, params: {}, layouts: [], metadata: null, viewport: undefined}\n }\n\n if (!result || 'redirect' in result) {\n return {loaderData: null, params: {}, layouts: [], metadata: null, viewport: undefined}\n }\n\n const {loaderData, params, layoutsData, metadata, viewport} = result\n return {\n loaderData,\n params,\n layouts: layoutsData.map(loaderData => ({loaderData})),\n metadata,\n viewport,\n }\n}\n\nexport async function render(\n url: string,\n request: Request,\n glob: PageGlob,\n options?: { manifest?: Manifest, loaderTimeout?: number },\n) {\n const clientEntry = options?.manifest\n ? `/${Object.values(options.manifest).find(chunk => chunk.isEntry)?.file}`\n : DEV_CLIENT_ENTRY\n\n const cssFiles = options?.manifest\n ? (Object.values(options.manifest).find(chunk => chunk.isEntry)?.css ?? [])\n : []\n const cssLinks = cssFiles.map(f => `<link rel=\"stylesheet\" href=\"/${f}\">`).join('')\n\n const {pathname} = new URL(url, 'http://localhost')\n\n let result: Awaited<ReturnType<typeof resolvePageData>>\n try {\n const timeout = options?.loaderTimeout ?? 10_000\n result = await resolvePageData(pathname, request, glob, timeout)\n } catch (err) {\n console.error('[devix] render error:', err)\n const html = `<html lang=\"en\"><head><meta charset=\"utf-8\">${cssLinks}</head><body><script>window.__DEVIX__=null;window.__LOADER_DATA__=null;window.__LAYOUTS_DATA__=[];</script><script type=\"module\" src=\"${clientEntry}\"></script><div id=\"devix-root\"></div></body></html>`\n return {html, statusCode: 500, headers: {}}\n }\n\n if (!result) {\n const dataScript = `<script>window.__DEVIX__=${safeJsonStringify({\n metadata: null,\n viewport: undefined,\n clientEntry\n })};window.__LOADER_DATA__=null;window.__LAYOUTS_DATA__=[];</script>`\n const clientScript = `<script type=\"module\" src=\"${clientEntry}\"></script>`\n const html = `<html lang=\"en\"><head><meta charset=\"utf-8\">${cssLinks}${dataScript}</head><body><div id=\"devix-root\"></div>${clientScript}</body></html>`\n return {html, statusCode: 404, headers: {}}\n }\n\n if ('redirect' in result) {\n return {html: '', statusCode: 302, headers: {Location: result.redirect}}\n }\n\n const {pageMod, layoutMods, params, loaderData, layoutsData, metadata, viewport, lang} = result\n\n let tree: ReactElement = createElement(\n RouteDataContext as any,\n {value: {loaderData, params}},\n createElement(pageMod.default, {data: loaderData, params, url: pathname})\n )\n\n for (let i = layoutMods.length - 1; i >= 0; i--) {\n const layoutData = layoutsData[i]\n tree = createElement(\n RouteDataContext as any,\n {value: {loaderData: layoutData, params}},\n createElement(layoutMods[i].default as ComponentType<any>, {data: layoutData, params}, tree),\n )\n }\n\n const content = renderToString(tree)\n const headTags = metadata ? renderToStaticMarkup(buildHeadNodes(metadata, viewport) as any) : ''\n\n const dataScript = `<script>window.__DEVIX__=${safeJsonStringify({\n metadata,\n viewport,\n clientEntry\n })};window.__LOADER_DATA__=${safeJsonStringify(loaderData)};window.__LAYOUTS_DATA__=${safeJsonStringify(layoutsData)};</script>`\n const clientScript = `<script type=\"module\" src=\"${clientEntry}\"></script>`\n const customHeaders: Record<string, string> = pageMod.headers ?? {}\n\n const html = `<html lang=\"${escapeAttr(lang)}\"><head><meta charset=\"utf-8\">${headTags}${cssLinks}${dataScript}</head><body><div id=\"devix-root\">${content}</div>${clientScript}</body></html>`\n\n return {html, statusCode: 200, headers: customHeaders}\n}\n\nexport async function getStaticRoutes(glob: PageGlob): Promise<string[]> {\n const {pages} = buildPages(Object.keys(glob.pages), Object.keys(glob.layouts), glob.pagesDir)\n const urls: string[] = []\n\n for (const page of pages) {\n if (page.params.length === 0) {\n urls.push(page.path)\n } else {\n const mod = await glob.pages[page.key]() as PageModule\n if (!mod.generateStaticParams) continue\n const paramSets = await mod.generateStaticParams()\n for (const params of paramSets) {\n let url = page.path\n for (const [key, value] of Object.entries(params)) {\n url = url.replace(`:${key}`, encodeURIComponent(value))\n }\n urls.push(url)\n }\n }\n }\n\n return urls\n}\n\n", "import {Metadata, Viewport} from \"../types\";\nimport {ReactNode} from \"react\";\n\ntype MetaTag =\n | { tag: 'title'; children: string }\n | { tag: 'meta'; name?: string; property?: string; content: string }\n | { tag: 'link'; rel: string; href: string; hrefLang?: string }\n\nfunction collectTags(metadata: Metadata, viewport?: Viewport): MetaTag[] {\n const tags: MetaTag[] = []\n\n if (metadata.title)\n tags.push({tag: 'title', children: metadata.title})\n if (metadata.description)\n tags.push({tag: 'meta', name: 'description', content: metadata.description})\n if (metadata.keywords?.length)\n tags.push({tag: 'meta', name: 'keywords', content: metadata.keywords.join(', ')})\n\n const ogTitle = metadata.og?.title ?? metadata.title\n if (ogTitle) tags.push({tag: 'meta', property: 'og:title', content: ogTitle})\n const ogDesc = metadata.og?.description ?? metadata.description\n if (ogDesc) tags.push({tag: 'meta', property: 'og:description', content: ogDesc})\n if (metadata.og?.image) tags.push({tag: 'meta', property: 'og:image', content: metadata.og.image})\n if (metadata.og?.type) tags.push({tag: 'meta', property: 'og:type', content: metadata.og.type})\n if (metadata.og?.url) tags.push({tag: 'meta', property: 'og:url', content: metadata.og.url})\n\n const twTitle = metadata.twitter?.title ?? metadata.title\n if (twTitle) tags.push({tag: 'meta', name: 'twitter:title', content: twTitle})\n const twDesc = metadata.twitter?.description ?? metadata.description\n if (twDesc) tags.push({tag: 'meta', name: 'twitter:description', content: twDesc})\n if (metadata.twitter?.card) tags.push({\n tag: 'meta', name: 'twitter:card', content:\n metadata.twitter.card\n })\n if (metadata.twitter?.image) tags.push({\n tag: 'meta', name: 'twitter:image', content:\n metadata.twitter.image\n })\n if (metadata.twitter?.creator) tags.push({\n tag: 'meta', name: 'twitter:creator', content:\n metadata.twitter.creator\n })\n\n if (metadata.canonical) tags.push({tag: 'link', rel: 'canonical', href: metadata.canonical})\n if (metadata.robots) tags.push({tag: 'meta', name: 'robots', content: metadata.robots})\n if (metadata.alternates) {\n for (const [lang, href] of Object.entries(metadata.alternates))\n tags.push({tag: 'link', rel: 'alternate', href, hrefLang: lang})\n }\n\n if (viewport) {\n const parts: string[] = []\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`)\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`)\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`)\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' :\n 'no'}`)\n if (parts.length) tags.push({tag: 'meta', name: 'viewport', content: parts.join(', ')})\n if (viewport.themeColor) tags.push({\n tag: 'meta', name: 'theme-color', content: viewport.themeColor\n })\n }\n\n return tags\n}\n\nexport function buildHeadNodes(metadata: Metadata, viewport?: Viewport): ReactNode {\n const tags = collectTags(metadata, viewport)\n\n return <>\n {tags.map((t, i) => {\n if (t.tag === 'title') return <title key={i}>{t.children}</title>\n if (t.tag === 'link') return <link key={i} rel={t.rel} href={t.href} hrefLang={t.hrefLang}/>\n return <meta key={i} name={t.name} property={t.property} content={t.content}/>\n })}\n </>\n}", "export function routePattern(rel: string): string {\n return rel\n .replace(/\\.(tsx|ts|jsx|js)$/, '')\n .replace(/\\(.*?\\)\\//g, '')\n .replace(/^index$|\\/index$/, '')\n .replace(/\\[([^\\]]+)]/g, ':$1')\n || '/'\n}", "import {routePattern} from \"../utils/patterns\";\n\nexport interface Page {\n path: string\n key: string\n params: string[]\n regex: RegExp\n}\n\nexport interface Layout {\n dir: string\n key: string\n}\n\nexport interface PagesResult {\n pages: Page[]\n layouts: Layout[]\n}\n\nfunction keyToRoutePattern(key: string, pagesDir: string): string {\n const rel = key.slice(pagesDir.length + 1).replace(/\\\\/g, '/')\n const pattern = routePattern(rel)\n return pattern === \"/\" ? \"/\" : `/${pattern}`\n}\n\nfunction keyToDir(key: string): string {\n return key.slice(0, key.lastIndexOf('/'))\n}\n\nlet cache: PagesResult | null = null\n\nexport function invalidatePagesCache() {\n cache = null\n}\n\nexport function buildPages(pageKeys: string[], layoutKeys: string[], pagesDir: string): PagesResult {\n if (cache) return cache\n\n const pages: Page[] = []\n const layouts: Layout[] = []\n\n for (const key of layoutKeys) {\n layouts.push({dir: keyToDir(key), key})\n }\n\n for (const key of pageKeys) {\n const pattern = keyToRoutePattern(key, pagesDir)\n const params = [...pattern.matchAll(/:([^/]+)/g)].map(m => m[1])\n const regexStr = pattern\n .replace(/:[^/]+/g, '([^/]+)')\n .replace(/\\//g, '\\\\/')\n pages.push({path: pattern, key, params, regex: new RegExp(`^${regexStr}$`)})\n }\n\n pages.sort((a, b) => {\n const aScore = (a.path.match(/:/g) || []).length\n const bScore = (b.path.match(/:/g) || []).length\n if (aScore !== bScore) return aScore - bScore\n return b.path.length - a.path.length\n })\n\n cache = {pages, layouts}\n return cache\n}\n\nexport function collectLayoutChain(pageKey: string, layouts: Layout[]): Layout[] {\n const pageDir = keyToDir(pageKey)\n\n return layouts\n .filter(layout => pageDir.startsWith(layout.dir))\n .sort((a, b) => a.dir.split('/').length - b.dir.split('/').length)\n}\n\nexport function matchPage(pathname: string, pages: Page[]): {\n page: Page\n params: Record<string, string>\n} | null {\n for (const page of pages) {\n const match = pathname.match(page.regex)\n if (match) {\n const params: Record<string, string> = {}\n page.params.forEach((name, i) => {\n params[name] = decodeURIComponent(match[i + 1])\n })\n return {page, params}\n }\n }\n return null\n}\n", "import {LayoutModule, PageModule} from \"../server\";\nimport {LoaderContext, Metadata, Viewport} from \"../types\"\n\nexport interface ResolvedMeta {\n metadata: Metadata\n viewport?: Viewport\n}\n\nexport async function resolveMetadata(module: PageModule | LayoutModule, ctx: LoaderContext & {\n loaderData: unknown\n}): Promise<ResolvedMeta> {\n const metadata = module.generateMetadata\n ? await module.generateMetadata(ctx)\n : module.metadata ?? {}\n\n const viewport = module.generateViewport\n ? await module.generateViewport(ctx)\n : module.viewport\n\n return {metadata, viewport}\n}\n\nexport function mergeMetadata(...sources: (Metadata | null | undefined)[]): Metadata {\n const result: Metadata = {}\n\n for (const source of sources) {\n if (!source) continue\n const { og, twitter, ...rest } = source\n Object.assign(result, rest)\n if (og) result.og = { ...result.og, ...og }\n if (twitter) result.twitter = { ...result.twitter, ...twitter }\n }\n\n return result\n}", "import {createContext, Context, ComponentType} from \"react\";\nimport {Metadata, Viewport} from \"../types\";\nimport {LayoutProps, PageProps} from \"../server/types\";\n\nexport interface RouterContextValue {\n pathname: string\n params: Record<string, string>\n loaderData: unknown\n layoutsData: unknown[]\n Page: ComponentType<PageProps>\n layouts: ComponentType<LayoutProps>[]\n metadata: Metadata | null\n viewport?: Viewport\n navigate: (to: string) => void\n isNavigating: boolean\n}\n\nexport interface PageMetaContextValue {\n metadata: Metadata | null\n viewport?: Viewport\n clientEntry?: string\n}\n\nexport interface RouteDataContextValue {\n loaderData: unknown\n params: Record<string, string>\n}\n\nconst g = globalThis as any\n\ng.__devix_RouterContext__ ??= createContext<RouterContextValue | null>(null)\nexport const RouterContext: Context<RouterContextValue | null> = g.__devix_RouterContext__\n\ng.__devix_PageMetaContext__ ??= createContext<PageMetaContextValue | null>(null)\ng.__devix_RouteDataContext__ ??= createContext<RouteDataContextValue | null>(null)\n\nexport const PageMetaContext: Context<PageMetaContextValue | null> = g.__devix_PageMetaContext__\nexport const RouteDataContext: Context<RouteDataContextValue | null> = g.__devix_RouteDataContext__\n\n", "export function safeJsonStringify(value: unknown): string {\n return JSON.stringify(value).replace(/<\\/script>/gi, '<\\\\/script>')\n}\n\nexport function escapeAttr(value: string): string {\n return value.replace(/\"/g, '&quot;')\n}", "export function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout>\n return Promise.race([\n promise.finally(() => clearTimeout(timer)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`timed out after ${ms}ms`)), ms)\n })\n ])\n}"],
5
- "mappings": "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",
6
- "names": ["loaderData", "html", "dataScript", "clientScript"]
5
+ "mappings": "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",
6
+ "names": ["createElement", "renderToString", "renderToStaticMarkup", "Fragment", "jsx", "collectTags", "metadata", "viewport", "tags", "ogTitle", "ogDesc", "twTitle", "twDesc", "lang", "href", "parts", "buildHeadNodes", "t", "i", "routePattern", "rel", "keyToRoutePattern", "key", "pagesDir", "rel", "pattern", "routePattern", "keyToDir", "cache", "buildPages", "pageKeys", "layoutKeys", "pagesDir", "cache", "pages", "layouts", "key", "keyToDir", "pattern", "keyToRoutePattern", "params", "m", "regexStr", "a", "b", "aScore", "bScore", "collectLayoutChain", "pageKey", "pageDir", "layout", "matchPage", "pathname", "page", "match", "name", "i", "resolveMetadata", "module", "ctx", "metadata", "viewport", "mergeMetadata", "sources", "result", "source", "og", "twitter", "rest", "createContext", "g", "RouterContext", "PageMetaContext", "RouteDataContext", "safeJsonStringify", "value", "escapeAttr", "withTimeout", "promise", "ms", "timer", "_", "reject", "DEV_CLIENT_ENTRY", "resolvePageData", "pathname", "request", "glob", "timeout", "pages", "layouts", "buildPages", "matched", "matchPage", "page", "params", "layoutChain", "collectLayoutChain", "ctx", "pageMod", "redirect", "loaderData", "withTimeout", "layoutMods", "l", "layoutsData", "mod", "pageMeta", "resolveMetadata", "layoutsMeta", "i", "metadata", "mergeMetadata", "m", "viewport", "rootLayoutMod", "lang", "runLoader", "url", "options", "result", "err", "render", "clientEntry", "chunk", "cssLinks", "f", "dataScript", "safeJsonStringify", "clientScript", "tree", "createElement", "RouteDataContext", "layoutData", "content", "renderToString", "headTags", "renderToStaticMarkup", "buildHeadNodes", "customHeaders", "escapeAttr", "getStaticRoutes", "urls", "paramSets", "key", "value"]
7
7
  }
@@ -1,42 +1,2 @@
1
- // src/server/routes.ts
2
- function registerApiRoutes(app, { apiModule, renderModule, loaderTimeout }) {
3
- app.all("/api/*", async (c) => {
4
- try {
5
- return await apiModule.handleApiRequest(c.req.url, c.req.raw);
6
- } catch (e) {
7
- console.error(e);
8
- return c.json({ error: "internal error" }, 500);
9
- }
10
- });
11
- app.get("/_data/*", async (c) => {
12
- try {
13
- const { pathname, search } = new URL(c.req.url, "http://localhost");
14
- const url = pathname.replace(/^\/_data/, "") + search;
15
- const data = await renderModule.runLoader(url, c.req.raw, { loaderTimeout });
16
- return c.json(data);
17
- } catch (e) {
18
- console.error(e);
19
- return c.json({ error: "internal error" }, 500);
20
- }
21
- });
22
- }
23
- function registerSsrRoute(app, { renderModule, manifest, loaderTimeout }) {
24
- app.get("*", async (c) => {
25
- try {
26
- const { html, statusCode, headers } = await renderModule.render(c.req.url, c.req.raw, { manifest, loaderTimeout });
27
- const res = c.html(`<!DOCTYPE html>${html}`, statusCode);
28
- for (const [key, value] of Object.entries(headers)) {
29
- res.headers.set(key, value);
30
- }
31
- return res;
32
- } catch (e) {
33
- console.error(e);
34
- return c.text("Internal Server Error", 500);
35
- }
36
- });
37
- }
38
- export {
39
- registerApiRoutes,
40
- registerSsrRoute
41
- };
1
+ function d(t,{apiModule:n,renderModule:a,loaderTimeout:s}){t.all("/api/*",async r=>{try{return await n.handleApiRequest(r.req.url,r.req.raw)}catch(e){return console.error(e),r.json({error:"internal error"},500)}}),t.get("/_data/*",async r=>{try{let{pathname:e,search:i}=new URL(r.req.url,"http://localhost"),l=e.replace(/^\/_data/,"")+i,o=await a.runLoader(l,r.req.raw,{loaderTimeout:s});return r.json(o)}catch(e){return console.error(e),r.json({error:"internal error"},500)}})}function h(t,{renderModule:n,manifest:a,loaderTimeout:s}){t.get("*",async r=>{try{let{html:e,statusCode:i,headers:l}=await n.render(r.req.url,r.req.raw,{manifest:a,loaderTimeout:s}),o=r.html(`<!DOCTYPE html>${e}`,i);for(let[u,c]of Object.entries(l))o.headers.set(u,c);return o}catch(e){return console.error(e),r.text("Internal Server Error",500)}})}export{d as registerApiRoutes,h as registerSsrRoute};
42
2
  //# sourceMappingURL=routes.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/server/routes.ts"],
4
4
  "sourcesContent": ["import type {Hono} from 'hono'\nimport type {Manifest} from 'vite'\n\ninterface ServerOptions {\n renderModule: any\n apiModule: any\n manifest?: Manifest\n loaderTimeout?: number\n}\n\nexport function registerApiRoutes(app: Hono, {apiModule, renderModule, loaderTimeout}: ServerOptions) {\n app.all('/api/*', async (c) => {\n try {\n return await apiModule.handleApiRequest(c.req.url, c.req.raw)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n\n app.get('/_data/*', async (c) => {\n try {\n const {pathname, search} = new URL(c.req.url, 'http://localhost')\n const url = pathname.replace(/^\\/_data/, '') + search\n\n const data = await renderModule.runLoader(url, c.req.raw, {loaderTimeout})\n return c.json(data)\n } catch (e) {\n console.error(e)\n return c.json({error: 'internal error'}, 500)\n }\n })\n}\n\nexport function registerSsrRoute(app: Hono, {renderModule, manifest, loaderTimeout}: ServerOptions) {\n app.get('*', async (c) => {\n try {\n const {html, statusCode, headers} = await renderModule.render(c.req.url, c.req.raw, {manifest, loaderTimeout})\n const res = c.html(`<!DOCTYPE html>${html}`, statusCode)\n for (const [key, value] of Object.entries(headers as Record<string, string>)) {\n res.headers.set(key, value)\n }\n return res\n } catch (e) {\n console.error(e)\n return c.text('Internal Server Error', 500)\n }\n })\n}"],
5
- "mappings": ";AAUO,SAAS,kBAAkB,KAAW,EAAC,WAAW,cAAc,cAAa,GAAkB;AAClG,MAAI,IAAI,UAAU,OAAO,MAAM;AAC3B,QAAI;AACA,aAAO,MAAM,UAAU,iBAAiB,EAAE,IAAI,KAAK,EAAE,IAAI,GAAG;AAAA,IAChE,SAAS,GAAG;AACR,cAAQ,MAAM,CAAC;AACf,aAAO,EAAE,KAAK,EAAC,OAAO,iBAAgB,GAAG,GAAG;AAAA,IAChD;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,YAAY,OAAO,MAAM;AAC7B,QAAI;AACA,YAAM,EAAC,UAAU,OAAM,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,kBAAkB;AAChE,YAAM,MAAM,SAAS,QAAQ,YAAY,EAAE,IAAI;AAE/C,YAAM,OAAO,MAAM,aAAa,UAAU,KAAK,EAAE,IAAI,KAAK,EAAC,cAAa,CAAC;AACzE,aAAO,EAAE,KAAK,IAAI;AAAA,IACtB,SAAS,GAAG;AACR,cAAQ,MAAM,CAAC;AACf,aAAO,EAAE,KAAK,EAAC,OAAO,iBAAgB,GAAG,GAAG;AAAA,IAChD;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,iBAAiB,KAAW,EAAC,cAAc,UAAU,cAAa,GAAkB;AAChG,MAAI,IAAI,KAAK,OAAO,MAAM;AACtB,QAAI;AACA,YAAM,EAAC,MAAM,YAAY,QAAO,IAAI,MAAM,aAAa,OAAO,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAC,UAAU,cAAa,CAAC;AAC7G,YAAM,MAAM,EAAE,KAAK,kBAAkB,IAAI,IAAI,UAAU;AACvD,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAiC,GAAG;AAC1E,YAAI,QAAQ,IAAI,KAAK,KAAK;AAAA,MAC9B;AACA,aAAO;AAAA,IACX,SAAS,GAAG;AACR,cAAQ,MAAM,CAAC;AACf,aAAO,EAAE,KAAK,yBAAyB,GAAG;AAAA,IAC9C;AAAA,EACJ,CAAC;AACL;",
6
- "names": []
5
+ "mappings": "AAUO,SAASA,EAAkBC,EAAW,CAAC,UAAAC,EAAW,aAAAC,EAAc,cAAAC,CAAa,EAAkB,CAClGH,EAAI,IAAI,SAAU,MAAOI,GAAM,CAC3B,GAAI,CACA,OAAO,MAAMH,EAAU,iBAAiBG,EAAE,IAAI,IAAKA,EAAE,IAAI,GAAG,CAChE,OAAS,EAAG,CACR,eAAQ,MAAM,CAAC,EACRA,EAAE,KAAK,CAAC,MAAO,gBAAgB,EAAG,GAAG,CAChD,CACJ,CAAC,EAEDJ,EAAI,IAAI,WAAY,MAAOI,GAAM,CAC7B,GAAI,CACA,GAAM,CAAC,SAAAC,EAAU,OAAAC,CAAM,EAAI,IAAI,IAAIF,EAAE,IAAI,IAAK,kBAAkB,EAC1DG,EAAMF,EAAS,QAAQ,WAAY,EAAE,EAAIC,EAEzCE,EAAO,MAAMN,EAAa,UAAUK,EAAKH,EAAE,IAAI,IAAK,CAAC,cAAAD,CAAa,CAAC,EACzE,OAAOC,EAAE,KAAKI,CAAI,CACtB,OAAS,EAAG,CACR,eAAQ,MAAM,CAAC,EACRJ,EAAE,KAAK,CAAC,MAAO,gBAAgB,EAAG,GAAG,CAChD,CACJ,CAAC,CACL,CAEO,SAASK,EAAiBT,EAAW,CAAC,aAAAE,EAAc,SAAAQ,EAAU,cAAAP,CAAa,EAAkB,CAChGH,EAAI,IAAI,IAAK,MAAOI,GAAM,CACtB,GAAI,CACA,GAAM,CAAC,KAAAO,EAAM,WAAAC,EAAY,QAAAC,CAAO,EAAI,MAAMX,EAAa,OAAOE,EAAE,IAAI,IAAKA,EAAE,IAAI,IAAK,CAAC,SAAAM,EAAU,cAAAP,CAAa,CAAC,EACvGW,EAAMV,EAAE,KAAK,kBAAkBO,CAAI,GAAIC,CAAU,EACvD,OAAW,CAACG,EAAKC,CAAK,IAAK,OAAO,QAAQH,CAAiC,EACvEC,EAAI,QAAQ,IAAIC,EAAKC,CAAK,EAE9B,OAAOF,CACX,OAAS,EAAG,CACR,eAAQ,MAAM,CAAC,EACRV,EAAE,KAAK,wBAAyB,GAAG,CAC9C,CACJ,CAAC,CACL",
6
+ "names": ["registerApiRoutes", "app", "apiModule", "renderModule", "loaderTimeout", "c", "pathname", "search", "url", "data", "registerSsrRoute", "manifest", "html", "statusCode", "headers", "res", "key", "value"]
7
7
  }
@@ -1,14 +1,2 @@
1
- // src/utils/async.ts
2
- function withTimeout(promise, ms) {
3
- let timer;
4
- return Promise.race([
5
- promise.finally(() => clearTimeout(timer)),
6
- new Promise((_, reject) => {
7
- timer = setTimeout(() => reject(new Error(`timed out after ${ms}ms`)), ms);
8
- })
9
- ]);
10
- }
11
- export {
12
- withTimeout
13
- };
1
+ function m(t,e){let r;return Promise.race([t.finally(()=>clearTimeout(r)),new Promise((o,i)=>{r=setTimeout(()=>i(new Error(`timed out after ${e}ms`)),e)})])}export{m as withTimeout};
14
2
  //# sourceMappingURL=async.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/async.ts"],
4
4
  "sourcesContent": ["export function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout>\n return Promise.race([\n promise.finally(() => clearTimeout(timer)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`timed out after ${ms}ms`)), ms)\n })\n ])\n}"],
5
- "mappings": ";AAAO,SAAS,YAAe,SAAqB,IAAwB;AACxE,MAAI;AACJ,SAAO,QAAQ,KAAK;AAAA,IAChB,QAAQ,QAAQ,MAAM,aAAa,KAAK,CAAC;AAAA,IACzC,IAAI,QAAe,CAAC,GAAG,WAAW;AAC9B,cAAQ,WAAW,MAAM,OAAO,IAAI,MAAM,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE;AAAA,IAC7E,CAAC;AAAA,EACL,CAAC;AACL;",
6
- "names": []
5
+ "mappings": "AAAO,SAASA,EAAeC,EAAqBC,EAAwB,CACxE,IAAIC,EACJ,OAAO,QAAQ,KAAK,CAChBF,EAAQ,QAAQ,IAAM,aAAaE,CAAK,CAAC,EACzC,IAAI,QAAe,CAACC,EAAGC,IAAW,CAC9BF,EAAQ,WAAW,IAAME,EAAO,IAAI,MAAM,mBAAmBH,CAAE,IAAI,CAAC,EAAGA,CAAE,CAC7E,CAAC,CACL,CAAC,CACL",
6
+ "names": ["withTimeout", "promise", "ms", "timer", "_", "reject"]
7
7
  }
@@ -1,34 +1,2 @@
1
- // src/utils/banner.ts
2
- import pc from "picocolors";
3
- import { networkInterfaces } from "node:os";
4
- import { createRequire } from "node:module";
5
- function getNetworkUrl(port) {
6
- const nets = networkInterfaces();
7
- for (const interfaces of Object.values(nets)) {
8
- for (const net of interfaces ?? []) {
9
- if (net.family === "IPv4" && !net.internal) {
10
- return `http://${net.address}:${port}/`;
11
- }
12
- }
13
- }
14
- return null;
15
- }
16
- function printDevBanner(port) {
17
- const req = createRequire(import.meta.url);
18
- const version = req("../../package.json").version;
19
- const networkUrl = getNetworkUrl(port);
20
- console.log();
21
- console.log(` ${pc.bold(pc.yellow("devix"))} ${pc.dim(`v${version}`)}`);
22
- console.log();
23
- console.log(` ${pc.green("\u279C")} ${pc.bold("Local:")} ${pc.cyan(`http://localhost:${port}/`)}`);
24
- if (networkUrl) {
25
- console.log(` ${pc.green("\u279C")} ${pc.bold("Network:")} ${pc.cyan(networkUrl)}`);
26
- } else {
27
- console.log(` ${pc.green("\u279C")} ${pc.bold("Network:")} ${pc.dim("use --host to expose")}`);
28
- }
29
- console.log();
30
- }
31
- export {
32
- printDevBanner
33
- };
1
+ import o from"picocolors";import{networkInterfaces as l}from"node:os";import{createRequire as s}from"node:module";function c(n){let t=l();for(let r of Object.values(t))for(let e of r??[])if(e.family==="IPv4"&&!e.internal)return`http://${e.address}:${n}/`;return null}function f(n){let r=s(import.meta.url)("../../package.json").version,e=c(n);console.log(),console.log(` ${o.bold(o.yellow("devix"))} ${o.dim(`v${r}`)}`),console.log(),console.log(` ${o.green("\u279C")} ${o.bold("Local:")} ${o.cyan(`http://localhost:${n}/`)}`),console.log(e?` ${o.green("\u279C")} ${o.bold("Network:")} ${o.cyan(e)}`:` ${o.green("\u279C")} ${o.bold("Network:")} ${o.dim("use --host to expose")}`),console.log()}export{f as printDevBanner};
34
2
  //# sourceMappingURL=banner.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/banner.ts"],
4
4
  "sourcesContent": ["import pc from 'picocolors'\nimport {networkInterfaces} from 'node:os'\nimport {createRequire} from 'node:module'\n\nfunction getNetworkUrl(port: number): string | null {\n const nets = networkInterfaces()\n for (const interfaces of Object.values(nets)) {\n for (const net of interfaces ?? []) {\n if (net.family === 'IPv4' && !net.internal) {\n return `http://${net.address}:${port}/`\n }\n }\n }\n return null\n}\n\nexport function printDevBanner(port: number) {\n const req = createRequire(import.meta.url)\n const version = req('../../package.json').version\n const networkUrl = getNetworkUrl(port)\n\n console.log()\n console.log(` ${pc.bold(pc.yellow('devix'))} ${pc.dim(`v${version}`)}`)\n console.log()\n console.log(` ${pc.green('\u279C')} ${pc.bold('Local:')} ${pc.cyan(`http://localhost:${port}/`)}`)\n if (networkUrl) {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.cyan(networkUrl)}`)\n } else {\n console.log(` ${pc.green('\u279C')} ${pc.bold('Network:')} ${pc.dim('use --host to expose')}`)\n }\n console.log()\n}"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AACf,SAAQ,yBAAwB;AAChC,SAAQ,qBAAoB;AAE5B,SAAS,cAAc,MAA6B;AAChD,QAAM,OAAO,kBAAkB;AAC/B,aAAW,cAAc,OAAO,OAAO,IAAI,GAAG;AAC1C,eAAW,OAAO,cAAc,CAAC,GAAG;AAChC,UAAI,IAAI,WAAW,UAAU,CAAC,IAAI,UAAU;AACxC,eAAO,UAAU,IAAI,OAAO,IAAI,IAAI;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAEO,SAAS,eAAe,MAAc;AACzC,QAAM,MAAM,cAAc,YAAY,GAAG;AACzC,QAAM,UAAU,IAAI,oBAAoB,EAAE;AAC1C,QAAM,aAAa,cAAc,IAAI;AAErC,UAAQ,IAAI;AACZ,UAAQ,IAAI,KAAK,GAAG,KAAK,GAAG,OAAO,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,EAAE;AACvE,UAAQ,IAAI;AACZ,UAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,KAAK,GAAG,KAAK,QAAQ,CAAC,MAAM,GAAG,KAAK,oBAAoB,IAAI,GAAG,CAAC,EAAE;AAChG,MAAI,YAAY;AACZ,YAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,KAAK,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,KAAK,UAAU,CAAC,EAAE;AAAA,EACnF,OAAO;AACH,YAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,KAAK,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,IAAI,sBAAsB,CAAC,EAAE;AAAA,EAC9F;AACA,UAAQ,IAAI;AAChB;",
6
- "names": []
5
+ "mappings": "AAAA,OAAOA,MAAQ,aACf,OAAQ,qBAAAC,MAAwB,UAChC,OAAQ,iBAAAC,MAAoB,cAE5B,SAASC,EAAcC,EAA6B,CAChD,IAAMC,EAAOJ,EAAkB,EAC/B,QAAWK,KAAc,OAAO,OAAOD,CAAI,EACvC,QAAWE,KAAOD,GAAc,CAAC,EAC7B,GAAIC,EAAI,SAAW,QAAU,CAACA,EAAI,SAC9B,MAAO,UAAUA,EAAI,OAAO,IAAIH,CAAI,IAIhD,OAAO,IACX,CAEO,SAASI,EAAeJ,EAAc,CAEzC,IAAMK,EADMP,EAAc,YAAY,GAAG,EACrB,oBAAoB,EAAE,QACpCQ,EAAaP,EAAcC,CAAI,EAErC,QAAQ,IAAI,EACZ,QAAQ,IAAI,KAAKJ,EAAG,KAAKA,EAAG,OAAO,OAAO,CAAC,CAAC,IAAIA,EAAG,IAAI,IAAIS,CAAO,EAAE,CAAC,EAAE,EACvE,QAAQ,IAAI,EACZ,QAAQ,IAAI,KAAKT,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,QAAQ,CAAC,MAAMA,EAAG,KAAK,oBAAoBI,CAAI,GAAG,CAAC,EAAE,EAE5F,QAAQ,IADRM,EACY,KAAKV,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,UAAU,CAAC,IAAIA,EAAG,KAAKU,CAAU,CAAC,GAEjE,KAAKV,EAAG,MAAM,QAAG,CAAC,KAAKA,EAAG,KAAK,UAAU,CAAC,IAAIA,EAAG,IAAI,sBAAsB,CAAC,EAFT,EAInF,QAAQ,IAAI,CAChB",
6
+ "names": ["pc", "networkInterfaces", "createRequire", "getNetworkUrl", "port", "nets", "interfaces", "net", "printDevBanner", "version", "networkUrl"]
7
7
  }
@@ -0,0 +1,12 @@
1
+ export interface CookieOptions {
2
+ httpOnly?: boolean;
3
+ secure?: boolean;
4
+ sameSite?: 'Strict' | 'Lax' | 'None';
5
+ maxAge?: number;
6
+ expires?: Date;
7
+ path?: string;
8
+ domain?: string;
9
+ }
10
+ export declare function getCookie(req: Request, name: string): string | undefined;
11
+ export declare function setCookie(headers: Headers, name: string, value: string, options?: CookieOptions): void;
12
+ export declare function deleteCookie(headers: Headers, name: string, options?: Pick<CookieOptions, 'path' | 'domain'>): void;
@@ -0,0 +1,2 @@
1
+ function d(n,r){let t=n.headers.get("cookie");if(t)for(let e of t.split(";")){let[i,...o]=e.trim().split("=");if(i.trim()===r)return decodeURIComponent(o.join("="))}}function a(n,r,t,e={}){let i=`${r}=${encodeURIComponent(t)}; Path=${e.path??"/"}`;e.domain&&(i+=`; Domain=${e.domain}`),e.maxAge!==void 0&&(i+=`; Max-Age=${e.maxAge}`),e.expires&&(i+=`; Expires=${e.expires.toUTCString()}`),e.httpOnly&&(i+="; HttpOnly"),e.secure&&(i+="; Secure"),e.sameSite&&(i+=`; SameSite=${e.sameSite}`),n.append("Set-Cookie",i)}function s(n,r,t={}){a(n,r,"",{...t,maxAge:0,expires:new Date(0)})}export{s as deleteCookie,d as getCookie,a as setCookie};
2
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/cookies.ts"],
4
+ "sourcesContent": ["export interface CookieOptions {\n httpOnly?: boolean\n secure?: boolean\n sameSite?: 'Strict' | 'Lax' | 'None'\n maxAge?: number\n expires?: Date\n path?: string\n domain?: string\n}\n\nexport function getCookie(req: Request, name: string): string | undefined {\n const header = req.headers.get('cookie')\n if (!header) return undefined\n for (const part of header.split(';')) {\n const [key, ...rest] = part.trim().split('=')\n if (key.trim() === name) return decodeURIComponent(rest.join('='))\n }\n return undefined\n}\n\nexport function setCookie(headers: Headers, name: string, value: string, options: CookieOptions = {}): void {\n let cookie = `${name}=${encodeURIComponent(value)}; Path=${options.path ?? '/'}`\n if (options.domain) cookie += `; Domain=${options.domain}`\n if (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`\n if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`\n if (options.httpOnly) cookie += `; HttpOnly`\n if (options.secure) cookie += `; Secure`\n if (options.sameSite) cookie += `; SameSite=${options.sameSite}`\n headers.append('Set-Cookie', cookie)\n}\n\nexport function deleteCookie(headers: Headers, name: string, options: Pick<CookieOptions, 'path' | 'domain'> = {}): void {\n setCookie(headers, name, '', {...options, maxAge: 0, expires: new Date(0)})\n}\n"],
5
+ "mappings": "AAUO,SAASA,EAAUC,EAAcC,EAAkC,CACtE,IAAMC,EAASF,EAAI,QAAQ,IAAI,QAAQ,EACvC,GAAKE,EACL,QAAWC,KAAQD,EAAO,MAAM,GAAG,EAAG,CAClC,GAAM,CAACE,EAAK,GAAGC,CAAI,EAAIF,EAAK,KAAK,EAAE,MAAM,GAAG,EAC5C,GAAIC,EAAI,KAAK,IAAMH,EAAM,OAAO,mBAAmBI,EAAK,KAAK,GAAG,CAAC,CACrE,CAEJ,CAEO,SAASC,EAAUC,EAAkBN,EAAcO,EAAeC,EAAyB,CAAC,EAAS,CACxG,IAAIC,EAAS,GAAGT,CAAI,IAAI,mBAAmBO,CAAK,CAAC,UAAUC,EAAQ,MAAQ,GAAG,GAC1EA,EAAQ,SAAoBC,GAAU,YAAYD,EAAQ,MAAM,IAChEA,EAAQ,SAAW,SAAWC,GAAU,aAAaD,EAAQ,MAAM,IACnEA,EAAQ,UAAoBC,GAAU,aAAaD,EAAQ,QAAQ,YAAY,CAAC,IAChFA,EAAQ,WAAoBC,GAAU,cACtCD,EAAQ,SAAoBC,GAAU,YACtCD,EAAQ,WAAoBC,GAAU,cAAcD,EAAQ,QAAQ,IACxEF,EAAQ,OAAO,aAAcG,CAAM,CACvC,CAEO,SAASC,EAAaJ,EAAkBN,EAAcQ,EAAkD,CAAC,EAAS,CACrHH,EAAUC,EAASN,EAAM,GAAI,CAAC,GAAGQ,EAAS,OAAQ,EAAG,QAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAC9E",
6
+ "names": ["getCookie", "req", "name", "header", "part", "key", "rest", "setCookie", "headers", "value", "options", "cookie", "deleteCookie"]
7
+ }
@@ -1,22 +1,2 @@
1
- // src/utils/duration.ts
2
- function parseDuration(value) {
3
- if (typeof value === "number") return value;
4
- const match = value.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);
5
- if (!match) throw new Error(`[devix] Invalid duration: "${value}". Use a number (ms) or a string like "5s", "2m", "500ms".`);
6
- const n = parseFloat(match[1]);
7
- switch (match[2]) {
8
- case "h":
9
- return n * 36e5;
10
- case "m":
11
- return n * 6e4;
12
- case "s":
13
- return n * 1e3;
14
- case "ms":
15
- default:
16
- return n;
17
- }
18
- }
19
- export {
20
- parseDuration
21
- };
1
+ function s(r){if(typeof r=="number")return r;let n=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h)?$/);if(!n)throw new Error(`[devix] Invalid duration: "${r}". Use a number (ms) or a string like "5s", "2m", "500ms".`);let t=parseFloat(n[1]);switch(n[2]){case"h":return t*36e5;case"m":return t*6e4;case"s":return t*1e3;default:return t}}export{s as parseDuration};
22
2
  //# sourceMappingURL=duration.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/duration.ts"],
4
4
  "sourcesContent": ["export function parseDuration(value: number | string): number {\n if (typeof value === 'number') return value\n const match = value.trim().match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/)\n if (!match) throw new Error(`[devix] Invalid duration: \"${value}\". Use a number (ms) or a string like \"5s\", \"2m\", \"500ms\".`)\n const n = parseFloat(match[1])\n switch (match[2]) {\n case 'h': return n * 3_600_000\n case 'm': return n * 60_000\n case 's': return n * 1_000\n case 'ms':\n default: return n\n }\n}\n"],
5
- "mappings": ";AAAO,SAAS,cAAc,OAAgC;AAC1D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,QAAQ,MAAM,KAAK,EAAE,MAAM,iCAAiC;AAClE,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,8BAA8B,KAAK,4DAA4D;AAC3H,QAAM,IAAI,WAAW,MAAM,CAAC,CAAC;AAC7B,UAAQ,MAAM,CAAC,GAAG;AAAA,IACd,KAAK;AAAM,aAAO,IAAI;AAAA,IACtB,KAAK;AAAM,aAAO,IAAI;AAAA,IACtB,KAAK;AAAM,aAAO,IAAI;AAAA,IACtB,KAAK;AAAA,IACL;AAAW,aAAO;AAAA,EACtB;AACJ;",
6
- "names": []
5
+ "mappings": "AAAO,SAASA,EAAcC,EAAgC,CAC1D,GAAI,OAAOA,GAAU,SAAU,OAAOA,EACtC,IAAMC,EAAQD,EAAM,KAAK,EAAE,MAAM,iCAAiC,EAClE,GAAI,CAACC,EAAO,MAAM,IAAI,MAAM,8BAA8BD,CAAK,4DAA4D,EAC3H,IAAME,EAAI,WAAWD,EAAM,CAAC,CAAC,EAC7B,OAAQA,EAAM,CAAC,EAAG,CACd,IAAK,IAAM,OAAOC,EAAI,KACtB,IAAK,IAAM,OAAOA,EAAI,IACtB,IAAK,IAAM,OAAOA,EAAI,IAEtB,QAAW,OAAOA,CACtB,CACJ",
6
+ "names": ["parseDuration", "value", "match", "n"]
7
7
  }
@@ -0,0 +1 @@
1
+ export declare function loadDotenv(mode: string): void;
@@ -0,0 +1,2 @@
1
+ import{loadEnv as r}from"vite";function c(o){let n=r(o,process.cwd(),"");for(let[e,s]of Object.entries(n))process.env[e]===void 0&&(process.env[e]=s)}export{c as loadDotenv};
2
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/env.ts"],
4
+ "sourcesContent": ["import {loadEnv} from 'vite'\n\nexport function loadDotenv(mode: string) {\n const env = loadEnv(mode, process.cwd(), '')\n for (const [key, value] of Object.entries(env)) {\n if (process.env[key] === undefined) {\n process.env[key] = value\n }\n }\n}\n"],
5
+ "mappings": "AAAA,OAAQ,WAAAA,MAAc,OAEf,SAASC,EAAWC,EAAc,CACrC,IAAMC,EAAMH,EAAQE,EAAM,QAAQ,IAAI,EAAG,EAAE,EAC3C,OAAW,CAACE,EAAKC,CAAK,IAAK,OAAO,QAAQF,CAAG,EACrC,QAAQ,IAAIC,CAAG,IAAM,SACrB,QAAQ,IAAIA,CAAG,EAAIC,EAG/B",
6
+ "names": ["loadEnv", "loadDotenv", "mode", "env", "key", "value"]
7
+ }
@@ -1,12 +1,2 @@
1
- // src/utils/html.ts
2
- function safeJsonStringify(value) {
3
- return JSON.stringify(value).replace(/<\/script>/gi, "<\\/script>");
4
- }
5
- function escapeAttr(value) {
6
- return value.replace(/"/g, "&quot;");
7
- }
8
- export {
9
- escapeAttr,
10
- safeJsonStringify
11
- };
1
+ function t(r){return JSON.stringify(r).replace(/<\/script>/gi,"<\\/script>")}function n(r){return r.replace(/"/g,"&quot;")}export{n as escapeAttr,t as safeJsonStringify};
12
2
  //# sourceMappingURL=html.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/html.ts"],
4
4
  "sourcesContent": ["export function safeJsonStringify(value: unknown): string {\n return JSON.stringify(value).replace(/<\\/script>/gi, '<\\\\/script>')\n}\n\nexport function escapeAttr(value: string): string {\n return value.replace(/\"/g, '&quot;')\n}"],
5
- "mappings": ";AAAO,SAAS,kBAAkB,OAAwB;AACtD,SAAO,KAAK,UAAU,KAAK,EAAE,QAAQ,gBAAgB,aAAa;AACtE;AAEO,SAAS,WAAW,OAAuB;AAC9C,SAAO,MAAM,QAAQ,MAAM,QAAQ;AACvC;",
6
- "names": []
5
+ "mappings": "AAAO,SAASA,EAAkBC,EAAwB,CACtD,OAAO,KAAK,UAAUA,CAAK,EAAE,QAAQ,eAAgB,aAAa,CACtE,CAEO,SAASC,EAAWD,EAAuB,CAC9C,OAAOA,EAAM,QAAQ,KAAM,QAAQ,CACvC",
6
+ "names": ["safeJsonStringify", "value", "escapeAttr"]
7
7
  }
@@ -1,8 +1,2 @@
1
- // src/utils/patterns.ts
2
- function routePattern(rel) {
3
- return rel.replace(/\.(tsx|ts|jsx|js)$/, "").replace(/\(.*?\)\//g, "").replace(/^index$|\/index$/, "").replace(/\[([^\]]+)]/g, ":$1") || "/";
4
- }
5
- export {
6
- routePattern
7
- };
1
+ function r(e){return e.replace(/\.(tsx|ts|jsx|js)$/,"").replace(/\(.*?\)\//g,"").replace(/^index$|\/index$/,"").replace(/\[([^\]]+)]/g,":$1")||"/"}export{r as routePattern};
8
2
  //# sourceMappingURL=patterns.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/patterns.ts"],
4
4
  "sourcesContent": ["export function routePattern(rel: string): string {\n return rel\n .replace(/\\.(tsx|ts|jsx|js)$/, '')\n .replace(/\\(.*?\\)\\//g, '')\n .replace(/^index$|\\/index$/, '')\n .replace(/\\[([^\\]]+)]/g, ':$1')\n || '/'\n}"],
5
- "mappings": ";AAAO,SAAS,aAAa,KAAqB;AAC9C,SAAO,IACE,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,cAAc,EAAE,EACxB,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,gBAAgB,KAAK,KAC/B;AACX;",
6
- "names": []
5
+ "mappings": "AAAO,SAASA,EAAaC,EAAqB,CAC9C,OAAOA,EACE,QAAQ,qBAAsB,EAAE,EAChC,QAAQ,aAAc,EAAE,EACxB,QAAQ,mBAAoB,EAAE,EAC9B,QAAQ,eAAgB,KAAK,GAC/B,GACX",
6
+ "names": ["routePattern", "rel"]
7
7
  }
@@ -0,0 +1,6 @@
1
+ export type JsonResponse<T = unknown> = Response & {
2
+ readonly __body: T;
3
+ };
4
+ export declare const json: <T>(data: T, status?: number) => JsonResponse<T>;
5
+ export declare const text: (body: string, status?: number) => Response;
6
+ export declare const redirect: (url: string, status?: number) => Response;
@@ -0,0 +1,2 @@
1
+ var n=(e,s=200)=>Response.json(e,{status:s}),o=(e,s=200)=>new Response(e,{status:s,headers:{"Content-Type":"text/plain; charset=utf-8"}}),t=(e,s=302)=>new Response(null,{status:s,headers:{Location:e}});export{n as json,t as redirect,o as text};
2
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/response.ts"],
4
+ "sourcesContent": ["export type JsonResponse<T = unknown> = Response & { readonly __body: T }\n\nexport const json = <T>(data: T, status = 200): JsonResponse<T> =>\n Response.json(data, {status}) as JsonResponse<T>\n\nexport const text = (body: string, status = 200): Response =>\n new Response(body, {status, headers: {'Content-Type': 'text/plain; charset=utf-8'}})\n\nexport const redirect = (url: string, status = 302): Response =>\n new Response(null, {status, headers: {Location: url}})\n"],
5
+ "mappings": "AAEO,IAAMA,EAAO,CAAIC,EAASC,EAAS,MACtC,SAAS,KAAKD,EAAM,CAAC,OAAAC,CAAM,CAAC,EAEnBC,EAAO,CAACC,EAAcF,EAAS,MACxC,IAAI,SAASE,EAAM,CAAC,OAAAF,EAAQ,QAAS,CAAC,eAAgB,2BAA2B,CAAC,CAAC,EAE1EG,EAAW,CAACC,EAAaJ,EAAS,MAC3C,IAAI,SAAS,KAAM,CAAC,OAAAA,EAAQ,QAAS,CAAC,SAAUI,CAAG,CAAC,CAAC",
6
+ "names": ["json", "data", "status", "text", "body", "redirect", "url"]
7
+ }
@@ -1,23 +1,17 @@
1
- // src/vite/codegen/api.ts
2
- function generateApi({ apiPath, appDir }) {
3
- return `
4
- import { handleApiRequest as _handleApiRequest } from '${apiPath}'
1
+ function i({apiPath:t,appDir:e}){return`
2
+ import { handleApiRequest as _handleApiRequest } from '${t}'
5
3
 
6
- const _routes = import.meta.glob(['/${appDir}/api/**/*.ts', '!**/middleware.ts'])
7
- const _middlewares = import.meta.glob('/${appDir}/api/**/middleware.ts')
4
+ const _routes = import.meta.glob(['/${e}/api/**/*.ts', '!**/middleware.ts'])
5
+ const _middlewares = import.meta.glob('/${e}/api/**/middleware.ts')
8
6
 
9
7
  const _glob = {
10
8
  routes: _routes,
11
9
  middlewares: _middlewares,
12
- apiDir: '/${appDir}/api',
10
+ apiDir: '/${e}/api',
13
11
  }
14
12
 
15
13
  export function handleApiRequest(url, request) {
16
14
  return _handleApiRequest(url, request, _glob)
17
15
  }
18
- `;
19
- }
20
- export {
21
- generateApi
22
- };
16
+ `}export{i as generateApi};
23
17
  //# sourceMappingURL=api.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/vite/codegen/api.ts"],
4
4
  "sourcesContent": ["interface ApiOptions {\n apiPath: string\n appDir: string\n}\n\nexport function generateApi({apiPath, appDir}: ApiOptions): string {\n return `\nimport { handleApiRequest as _handleApiRequest } from '${apiPath}'\n\nconst _routes = import.meta.glob(['/${appDir}/api/**/*.ts', '!**/middleware.ts'])\nconst _middlewares = import.meta.glob('/${appDir}/api/**/middleware.ts')\n\nconst _glob = {\n routes: _routes,\n middlewares: _middlewares,\n apiDir: '/${appDir}/api',\n}\n\nexport function handleApiRequest(url, request) {\n return _handleApiRequest(url, request, _glob)\n}\n`\n}\n"],
5
- "mappings": ";AAKO,SAAS,YAAY,EAAC,SAAS,OAAM,GAAuB;AAC/D,SAAO;AAAA,yDAC8C,OAAO;AAAA;AAAA,sCAE1B,MAAM;AAAA,0CACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOtB;",
6
- "names": []
5
+ "mappings": "AAKO,SAASA,EAAY,CAAC,QAAAC,EAAS,OAAAC,CAAM,EAAuB,CAC/D,MAAO;AAAA,yDAC8CD,CAAO;AAAA;AAAA,sCAE1BC,CAAM;AAAA,0CACFA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhCA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAOtB",
6
+ "names": ["generateApi", "apiPath", "appDir"]
7
7
  }
@@ -1,11 +1,9 @@
1
- // src/vite/codegen/client-routes.ts
2
- function generateClientRoutes({ pagesDir, matcherPath }) {
3
- return `
1
+ function r({pagesDir:e,matcherPath:t}){return`
4
2
  import React from 'react'
5
- import { createMatcher } from '${matcherPath}'
6
- const pageFiles = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])
7
- const layoutFiles = import.meta.glob('/${pagesDir}/**/layout.tsx')
8
- const errorFiles = import.meta.glob('/${pagesDir}/**/error.tsx')
3
+ import { createMatcher } from '${t}'
4
+ const pageFiles = import.meta.glob(['/${e}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])
5
+ const layoutFiles = import.meta.glob('/${e}/**/layout.tsx')
6
+ const errorFiles = import.meta.glob('/${e}/**/error.tsx')
9
7
 
10
8
  export const matchClientRoute = createMatcher(pageFiles, layoutFiles)
11
9
 
@@ -28,9 +26,5 @@ export function getDefaultErrorPage() {
28
26
  )
29
27
  }
30
28
  }
31
- `;
32
- }
33
- export {
34
- generateClientRoutes
35
- };
29
+ `}export{r as generateClientRoutes};
36
30
  //# sourceMappingURL=client-routes.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/vite/codegen/client-routes.ts"],
4
4
  "sourcesContent": ["interface ClientRoutesOptions {\n pagesDir: string\n matcherPath: string\n}\n\nexport function generateClientRoutes({pagesDir, matcherPath}: ClientRoutesOptions) {\n return `\nimport React from 'react'\nimport { createMatcher } from '${matcherPath}'\nconst pageFiles = import.meta.glob(['/${pagesDir}/**/*.tsx', '!**/error.tsx', '!**/layout.tsx'])\nconst layoutFiles = import.meta.glob('/${pagesDir}/**/layout.tsx')\nconst errorFiles = import.meta.glob('/${pagesDir}/**/error.tsx')\n\nexport const matchClientRoute = createMatcher(pageFiles, layoutFiles)\n\nexport async function loadErrorPage() {\n const key = Object.keys(errorFiles)[0]\n if (!key) return null\n const mod = await errorFiles[key]()\n return mod?.default ?? null\n}\n\nexport function getDefaultErrorPage() {\n return function DefaultError({ statusCode, message }) {\n return React.createElement('main', {\n style: { minHeight: '100dvh', display: 'flex', flexDirection: 'column', \n alignItems: 'center', justifyContent: 'center', gap: '8px',\n fontFamily: 'system-ui, sans-serif' }\n },\n React.createElement('h1', {style: {fontSize: '4rem', fontWeight: 700}}, statusCode),\n React.createElement('p', {style: {color: '#666'}}, message ?? 'An unexpected error occurred'),\n )\n }\n}\n`\n}"],
5
- "mappings": ";AAKO,SAAS,qBAAqB,EAAC,UAAU,YAAW,GAAwB;AAC/E,SAAO;AAAA;AAAA,iCAEsB,WAAW;AAAA,wCACJ,QAAQ;AAAA,yCACP,QAAQ;AAAA,wCACT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBhD;",
6
- "names": []
5
+ "mappings": "AAKO,SAASA,EAAqB,CAAC,SAAAC,EAAU,YAAAC,CAAW,EAAwB,CAC/E,MAAO;AAAA;AAAA,iCAEsBA,CAAW;AAAA,wCACJD,CAAQ;AAAA,yCACPA,CAAQ;AAAA,wCACTA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAwBhD",
6
+ "names": ["generateClientRoutes", "pagesDir", "matcherPath"]
7
7
  }
@@ -1,10 +1,4 @@
1
- // src/vite/codegen/context.ts
2
- function generateContext() {
3
- return `
1
+ function t(){return`
4
2
  export {RouterContext} from '@devlusoft/devix/runtime/context'
5
- `;
6
- }
7
- export {
8
- generateContext
9
- };
3
+ `}export{t as generateContext};
10
4
  //# sourceMappingURL=context.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/vite/codegen/context.ts"],
4
4
  "sourcesContent": ["export function generateContext(): string {\n return `\nexport {RouterContext} from '@devlusoft/devix/runtime/context'\n`\n}"],
5
- "mappings": ";AAAO,SAAS,kBAA0B;AACtC,SAAO;AAAA;AAAA;AAGX;",
6
- "names": []
5
+ "mappings": "AAAO,SAASA,GAA0B,CACtC,MAAO;AAAA;AAAA,CAGX",
6
+ "names": ["generateContext"]
7
7
  }