@axerity/cli 0.1.0

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/axerity.default.json +135 -0
  4. package/axerity.schema.json +268 -0
  5. package/bin/axerity.js +305 -0
  6. package/mdsvex.config.js +261 -0
  7. package/package.json +103 -0
  8. package/scripts/prepare-engine.mjs +20 -0
  9. package/src/app.d.ts +17 -0
  10. package/src/app.html +39 -0
  11. package/src/content/demo/api/meta.json +5 -0
  12. package/src/content/demo/api/pet/add-pet.md +105 -0
  13. package/src/content/demo/api/pet/delete-pet.md +70 -0
  14. package/src/content/demo/api/pet/find-by-status.md +72 -0
  15. package/src/content/demo/api/pet/find-by-tags.md +64 -0
  16. package/src/content/demo/api/pet/get-pet.md +99 -0
  17. package/src/content/demo/api/pet/meta.json +15 -0
  18. package/src/content/demo/api/pet/pet-object.md +112 -0
  19. package/src/content/demo/api/pet/update-pet-with-form.md +69 -0
  20. package/src/content/demo/api/pet/update-pet.md +79 -0
  21. package/src/content/demo/api/pet/upload-image.md +79 -0
  22. package/src/content/demo/api/store/delete-order.md +62 -0
  23. package/src/content/demo/api/store/get-order.md +70 -0
  24. package/src/content/demo/api/store/inventory.md +54 -0
  25. package/src/content/demo/api/store/meta.json +5 -0
  26. package/src/content/demo/api/store/order-object.md +77 -0
  27. package/src/content/demo/api/store/place-order.md +83 -0
  28. package/src/content/demo/api/user/create-user.md +69 -0
  29. package/src/content/demo/api/user/create-with-list.md +57 -0
  30. package/src/content/demo/api/user/delete-user.md +61 -0
  31. package/src/content/demo/api/user/get-user.md +69 -0
  32. package/src/content/demo/api/user/login.md +80 -0
  33. package/src/content/demo/api/user/logout.md +45 -0
  34. package/src/content/demo/api/user/meta.json +14 -0
  35. package/src/content/demo/api/user/update-user.md +69 -0
  36. package/src/content/demo/api/user/user-object.md +85 -0
  37. package/src/content/demo/changelog.md +44 -0
  38. package/src/content/demo/components/accordion.md +70 -0
  39. package/src/content/demo/components/api.md +185 -0
  40. package/src/content/demo/components/badge.md +34 -0
  41. package/src/content/demo/components/callout.md +83 -0
  42. package/src/content/demo/components/cards.md +88 -0
  43. package/src/content/demo/components/code-group.md +55 -0
  44. package/src/content/demo/components/columns.md +42 -0
  45. package/src/content/demo/components/frame.md +51 -0
  46. package/src/content/demo/components/icon.md +54 -0
  47. package/src/content/demo/components/kbd.md +28 -0
  48. package/src/content/demo/components/meta.json +26 -0
  49. package/src/content/demo/components/roadmap.md +86 -0
  50. package/src/content/demo/components/steps.md +72 -0
  51. package/src/content/demo/components/tabs.md +146 -0
  52. package/src/content/demo/components/tooltip.md +44 -0
  53. package/src/content/demo/components/tree.md +83 -0
  54. package/src/content/demo/components/type-table.md +77 -0
  55. package/src/content/demo/components/update.md +48 -0
  56. package/src/content/demo/components/video.md +56 -0
  57. package/src/content/demo/components/webhooks.md +109 -0
  58. package/src/content/demo/components/websockets.md +101 -0
  59. package/src/content/demo/configuration/ai.md +40 -0
  60. package/src/content/demo/configuration/cli.md +46 -0
  61. package/src/content/demo/configuration/deployment.md +105 -0
  62. package/src/content/demo/configuration/index.md +92 -0
  63. package/src/content/demo/configuration/layouts.md +51 -0
  64. package/src/content/demo/configuration/meta.json +5 -0
  65. package/src/content/demo/configuration/navigation.md +167 -0
  66. package/src/content/demo/configuration/openapi.md +103 -0
  67. package/src/content/demo/configuration/search.md +36 -0
  68. package/src/content/demo/index.md +59 -0
  69. package/src/content/demo/installation.md +49 -0
  70. package/src/content/demo/meta.json +15 -0
  71. package/src/content/demo/quick-start.md +47 -0
  72. package/src/content/demo/theming/advanced.md +116 -0
  73. package/src/content/demo/theming/code.md +66 -0
  74. package/src/content/demo/theming/colors.md +103 -0
  75. package/src/content/demo/theming/index.md +88 -0
  76. package/src/content/demo/theming/layout.md +71 -0
  77. package/src/content/demo/theming/meta.json +5 -0
  78. package/src/content/demo/theming/themes.md +99 -0
  79. package/src/content/demo/theming/typography.md +83 -0
  80. package/src/content/demo/writing/code-blocks.md +154 -0
  81. package/src/content/demo/writing/diagrams.md +44 -0
  82. package/src/content/demo/writing/frontmatter.md +33 -0
  83. package/src/content/demo/writing/markdown.md +62 -0
  84. package/src/content/demo/writing/meta.json +5 -0
  85. package/src/hooks.server.ts +49 -0
  86. package/src/lib/assets/favicon.svg +1 -0
  87. package/src/lib/base.ts +12 -0
  88. package/src/lib/components/DynamicIcon.svelte +26 -0
  89. package/src/lib/components/docs/Analytics.svelte +38 -0
  90. package/src/lib/components/docs/Banner.svelte +44 -0
  91. package/src/lib/components/docs/Breadcrumbs.svelte +38 -0
  92. package/src/lib/components/docs/CopyPageMenu.svelte +119 -0
  93. package/src/lib/components/docs/DocsLayout.svelte +192 -0
  94. package/src/lib/components/docs/Footer.svelte +60 -0
  95. package/src/lib/components/docs/Mermaid.svelte +39 -0
  96. package/src/lib/components/docs/Navbar.svelte +144 -0
  97. package/src/lib/components/docs/PageMeta.svelte +35 -0
  98. package/src/lib/components/docs/PageNav.svelte +44 -0
  99. package/src/lib/components/docs/SearchDialog.svelte +182 -0
  100. package/src/lib/components/docs/Sidebar.svelte +85 -0
  101. package/src/lib/components/docs/SidebarDropdown.svelte +56 -0
  102. package/src/lib/components/docs/SidebarFooterLinks.svelte +19 -0
  103. package/src/lib/components/docs/SidebarGroup.svelte +54 -0
  104. package/src/lib/components/docs/SidebarLink.svelte +67 -0
  105. package/src/lib/components/docs/TableOfContents.svelte +77 -0
  106. package/src/lib/components/docs/ThemeToggle.svelte +19 -0
  107. package/src/lib/components/docs/VersionSwitcher.svelte +80 -0
  108. package/src/lib/components/kit/Accordion.svelte +60 -0
  109. package/src/lib/components/kit/AccordionGroup.svelte +13 -0
  110. package/src/lib/components/kit/Badge.svelte +32 -0
  111. package/src/lib/components/kit/Callout.svelte +51 -0
  112. package/src/lib/components/kit/Card.svelte +72 -0
  113. package/src/lib/components/kit/CardGroup.svelte +21 -0
  114. package/src/lib/components/kit/CodeGroup.svelte +65 -0
  115. package/src/lib/components/kit/Columns.svelte +26 -0
  116. package/src/lib/components/kit/Event.svelte +23 -0
  117. package/src/lib/components/kit/EventList.svelte +9 -0
  118. package/src/lib/components/kit/File.svelte +15 -0
  119. package/src/lib/components/kit/Folder.svelte +46 -0
  120. package/src/lib/components/kit/Frame.svelte +81 -0
  121. package/src/lib/components/kit/Icon.svelte +17 -0
  122. package/src/lib/components/kit/Kbd.svelte +11 -0
  123. package/src/lib/components/kit/Roadmap.svelte +15 -0
  124. package/src/lib/components/kit/RoadmapItem.svelte +109 -0
  125. package/src/lib/components/kit/Step.svelte +63 -0
  126. package/src/lib/components/kit/Steps.svelte +16 -0
  127. package/src/lib/components/kit/Tab.svelte +27 -0
  128. package/src/lib/components/kit/Tabs.svelte +75 -0
  129. package/src/lib/components/kit/Tooltip.svelte +33 -0
  130. package/src/lib/components/kit/Tree.svelte +11 -0
  131. package/src/lib/components/kit/TypeTable.svelte +187 -0
  132. package/src/lib/components/kit/Update.svelte +32 -0
  133. package/src/lib/components/kit/Video.svelte +64 -0
  134. package/src/lib/components/kit/accordion-context.ts +1 -0
  135. package/src/lib/components/kit/api/Api.svelte +80 -0
  136. package/src/lib/components/kit/api/ApiExamplePanel.svelte +100 -0
  137. package/src/lib/components/kit/api/ApiField.svelte +124 -0
  138. package/src/lib/components/kit/api/Channel.svelte +121 -0
  139. package/src/lib/components/kit/api/Endpoint.svelte +116 -0
  140. package/src/lib/components/kit/api/Enum.svelte +44 -0
  141. package/src/lib/components/kit/api/EnumValues.svelte +35 -0
  142. package/src/lib/components/kit/api/Expandable.svelte +70 -0
  143. package/src/lib/components/kit/api/Message.svelte +67 -0
  144. package/src/lib/components/kit/api/ObjectExample.svelte +11 -0
  145. package/src/lib/components/kit/api/RequestExample.svelte +11 -0
  146. package/src/lib/components/kit/api/ResponseExample.svelte +11 -0
  147. package/src/lib/components/kit/api/Webhook.svelte +115 -0
  148. package/src/lib/components/kit/api/api-context.ts +15 -0
  149. package/src/lib/components/kit/tabs-context.ts +8 -0
  150. package/src/lib/components/kit/tabs-store.svelte.ts +28 -0
  151. package/src/lib/config/site.ts +34 -0
  152. package/src/lib/content/index.ts +50 -0
  153. package/src/lib/content/raw.ts +21 -0
  154. package/src/lib/content/tree.ts +169 -0
  155. package/src/lib/index.ts +79 -0
  156. package/src/lib/nav-match.ts +23 -0
  157. package/src/lib/openapi/generate.ts +629 -0
  158. package/src/lib/server/og.ts +140 -0
  159. package/src/lib/state/search.svelte.ts +9 -0
  160. package/src/lib/state/theme.svelte.ts +58 -0
  161. package/src/lib/types.ts +216 -0
  162. package/src/params/docpage.ts +3 -0
  163. package/src/params/mdfile.ts +3 -0
  164. package/src/routes/+error.svelte +46 -0
  165. package/src/routes/+layout.svelte +25 -0
  166. package/src/routes/[...path=mdfile]/+server.ts +21 -0
  167. package/src/routes/[...slug=docpage]/+page.svelte +63 -0
  168. package/src/routes/[...slug=docpage]/+page.ts +44 -0
  169. package/src/routes/layout.css +897 -0
  170. package/src/routes/llms-full.txt/+server.ts +22 -0
  171. package/src/routes/llms.txt/+server.ts +20 -0
  172. package/src/routes/og/[...slug]/+server.ts +77 -0
  173. package/src/routes/rss.xml/+server.ts +65 -0
  174. package/src/routes/search.json/+server.ts +54 -0
  175. package/src/routes/sitemap.xml/+server.ts +21 -0
  176. package/static/favicon-dark.svg +6 -0
  177. package/static/favicon-light.svg +6 -0
  178. package/static/favicon.svg +14 -0
  179. package/static/fonts/geist-400.ttf +0 -0
  180. package/static/fonts/geist-600.ttf +0 -0
  181. package/static/fonts/geist-700.ttf +0 -0
  182. package/static/og-image.png +0 -0
  183. package/static/robots.txt +4 -0
  184. package/svelte.config.js +35 -0
  185. package/tsconfig.json +20 -0
  186. package/vite.config.ts +46 -0
@@ -0,0 +1,22 @@
1
+ import { base } from '$app/paths';
2
+ import { site } from '$lib/config/site';
3
+ import { flatPages } from '$lib/content';
4
+ import { getRawMarkdown } from '$lib/content/raw';
5
+ import type { RequestHandler } from './$types';
6
+
7
+ export const prerender = true;
8
+
9
+ export const GET: RequestHandler = async () => {
10
+ const parts = [`# ${site.name}`];
11
+ if (site.description) parts.push('', `> ${site.description}`);
12
+
13
+ for (const page of flatPages) {
14
+ const slug = page.href.slice(base.length).replace(/^\//, '');
15
+ const markdown = await getRawMarkdown(slug);
16
+ if (markdown) parts.push('', '---', '', markdown);
17
+ }
18
+
19
+ return new Response(parts.join('\n') + '\n', {
20
+ headers: { 'content-type': 'text/plain; charset=utf-8' }
21
+ });
22
+ };
@@ -0,0 +1,20 @@
1
+ import { site } from '$lib/config/site';
2
+ import { flatPages } from '$lib/content';
3
+ import type { RequestHandler } from './$types';
4
+
5
+ export const prerender = true;
6
+
7
+ export const GET: RequestHandler = () => {
8
+ const lines = [`# ${site.name}`, ''];
9
+ if (site.description) lines.push(`> ${site.description}`, '');
10
+ lines.push('## Docs', '');
11
+
12
+ for (const page of flatPages) {
13
+ const suffix = page.description ? `: ${page.description}` : '';
14
+ lines.push(`- [${page.title}](${page.href}.md)${suffix}`);
15
+ }
16
+
17
+ return new Response(lines.join('\n') + '\n', {
18
+ headers: { 'content-type': 'text/plain; charset=utf-8' }
19
+ });
20
+ };
@@ -0,0 +1,77 @@
1
+ import { error } from '@sveltejs/kit';
2
+ import { base } from '$app/paths';
3
+ import { site } from '$lib/config/site';
4
+ import { renderOgImage } from '$lib/server/og';
5
+ import type { PageFrontmatter } from '$lib/types';
6
+ import type { EntryGenerator, RequestHandler } from './$types';
7
+
8
+ const pages = import.meta.glob<{ metadata: PageFrontmatter }>('/src/content/docs/**/*.md', {
9
+ eager: true
10
+ });
11
+
12
+ const BASE = '/src/content/docs/';
13
+
14
+ const WEIGHTS = [400, 600, 700] as const;
15
+ let fontCache: { data: ArrayBuffer; weight: 400 | 600 | 700 }[] | null = null;
16
+
17
+ async function getFonts(fetch: typeof globalThis.fetch) {
18
+ if (!fontCache) {
19
+ fontCache = await Promise.all(
20
+ WEIGHTS.map(async (weight) => {
21
+ const response = await fetch(`${base}/fonts/geist-${weight}.ttf`);
22
+ return { data: await response.arrayBuffer(), weight };
23
+ })
24
+ );
25
+ }
26
+ return fontCache;
27
+ }
28
+
29
+ const logoPath = site.og?.logo ?? site.logo?.dark ?? site.logo?.light;
30
+ let logoCache: string | null | undefined;
31
+
32
+ async function getLogo(fetch: typeof globalThis.fetch): Promise<string | undefined> {
33
+ if (logoCache === undefined) {
34
+ if (!logoPath) {
35
+ logoCache = null;
36
+ } else {
37
+ const response = await fetch(logoPath);
38
+ const svg = await response.text();
39
+ logoCache = `data:image/svg+xml;base64,${Buffer.from(svg).toString('base64')}`;
40
+ }
41
+ }
42
+ return logoCache ?? undefined;
43
+ }
44
+
45
+ export const prerender = true;
46
+
47
+ export const entries: EntryGenerator = () => {
48
+ return Object.keys(pages).map((path) => ({
49
+ slug: `${path.slice(BASE.length).replace(/\.md$/, '')}.png`
50
+ }));
51
+ };
52
+
53
+ export const GET: RequestHandler = async ({ params, fetch }) => {
54
+ const key = params.slug.replace(/\.png$/, '');
55
+ const mod = pages[`${BASE}${key}.md`];
56
+ if (!mod) error(404, 'Not found');
57
+
58
+ const fm = mod.metadata ?? {};
59
+ const fonts = await getFonts(fetch);
60
+ const logo = await getLogo(fetch);
61
+
62
+ const png = await renderOgImage({
63
+ title: fm.title ?? site.name,
64
+ description: fm.description ?? site.description,
65
+ siteName: site.name,
66
+ og: site.og,
67
+ fonts,
68
+ logo
69
+ });
70
+
71
+ return new Response(new Uint8Array(png), {
72
+ headers: {
73
+ 'content-type': 'image/png',
74
+ 'cache-control': 'public, max-age=31536000, immutable'
75
+ }
76
+ });
77
+ };
@@ -0,0 +1,65 @@
1
+ import { base as basePath } from '$app/paths';
2
+ import { site } from '$lib/config/site';
3
+ import type { PageFrontmatter } from '$lib/types';
4
+ import type { RequestHandler } from './$types';
5
+
6
+ const pages = import.meta.glob<{ metadata: PageFrontmatter }>('/src/content/docs/**/*.md', {
7
+ eager: true
8
+ });
9
+
10
+ const BASE = '/src/content/docs/';
11
+
12
+ function pathToSlug(path: string): string {
13
+ const rel = path.slice(BASE.length).replace(/\.md$/, '');
14
+ return rel === 'index' ? '' : rel.replace(/\/index$/, '');
15
+ }
16
+
17
+ function escapeXml(value: string): string {
18
+ return value
19
+ .replace(/&/g, '&amp;')
20
+ .replace(/</g, '&lt;')
21
+ .replace(/>/g, '&gt;')
22
+ .replace(/"/g, '&quot;')
23
+ .replace(/'/g, '&apos;');
24
+ }
25
+
26
+ export const prerender = true;
27
+
28
+ export const GET: RequestHandler = () => {
29
+ const origin = (site.url ?? '') + basePath;
30
+
31
+ const items = Object.entries(pages)
32
+ .map(([path, mod]) => ({ slug: pathToSlug(path), fm: mod.metadata ?? {} }))
33
+ .filter((entry) => Boolean(entry.fm.date))
34
+ .sort(
35
+ (a, b) => new Date(b.fm.date as string).getTime() - new Date(a.fm.date as string).getTime()
36
+ )
37
+ .map((entry) => {
38
+ const link = `${origin}/${entry.slug}`;
39
+ const title = escapeXml(entry.fm.title ?? entry.slug);
40
+ const description = escapeXml(entry.fm.description ?? '');
41
+ const pubDate = new Date(entry.fm.date as string).toUTCString();
42
+ return ` <item>
43
+ <title>${title}</title>
44
+ <link>${link}</link>
45
+ <guid>${link}</guid>
46
+ <pubDate>${pubDate}</pubDate>
47
+ <description>${description}</description>
48
+ </item>`;
49
+ })
50
+ .join('\n');
51
+
52
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
53
+ <rss version="2.0">
54
+ <channel>
55
+ <title>${escapeXml(site.name)}</title>
56
+ <link>${origin}</link>
57
+ <description>${escapeXml(site.description ?? '')}</description>
58
+ ${items}
59
+ </channel>
60
+ </rss>`;
61
+
62
+ return new Response(xml, {
63
+ headers: { 'content-type': 'application/xml; charset=utf-8' }
64
+ });
65
+ };
@@ -0,0 +1,54 @@
1
+ import { base } from '$app/paths';
2
+ import { sidebar } from '$lib/content';
3
+ import { getRawMarkdown } from '$lib/content/raw';
4
+ import type { NavEntry } from '$lib/types';
5
+ import type { RequestHandler } from './$types';
6
+
7
+ export const prerender = true;
8
+
9
+ function plainText(markdown: string): string {
10
+ return markdown
11
+ .replace(/```[\s\S]*?```/g, ' ')
12
+ .replace(/<[^>]+>/g, ' ')
13
+ .replace(/!?\[([^\]]*)\]\([^)]*\)/g, '$1')
14
+ .replace(/[#>*_`|]/g, ' ')
15
+ .replace(/\s+/g, ' ')
16
+ .trim()
17
+ .slice(0, 3000);
18
+ }
19
+
20
+ export const GET: RequestHandler = async () => {
21
+ const docs: Array<{
22
+ id: string;
23
+ title: string;
24
+ section: string;
25
+ description: string;
26
+ content: string;
27
+ href: string;
28
+ }> = [];
29
+
30
+ async function walk(entries: NavEntry[], section: string) {
31
+ for (const entry of entries) {
32
+ if ('href' in entry) {
33
+ const slug = entry.href.slice(base.length).replace(/^\//, '');
34
+ const raw = await getRawMarkdown(slug);
35
+ docs.push({
36
+ id: entry.href,
37
+ title: entry.title,
38
+ section,
39
+ description: entry.description ?? '',
40
+ content: raw ? plainText(raw) : '',
41
+ href: entry.href
42
+ });
43
+ } else {
44
+ await walk(entry.items, section);
45
+ }
46
+ }
47
+ }
48
+
49
+ for (const group of sidebar) await walk(group.items, group.title);
50
+
51
+ return new Response(JSON.stringify(docs), {
52
+ headers: { 'content-type': 'application/json' }
53
+ });
54
+ };
@@ -0,0 +1,21 @@
1
+ import { site } from '$lib/config/site';
2
+ import { flatPages } from '$lib/content';
3
+ import type { RequestHandler } from './$types';
4
+
5
+ export const prerender = true;
6
+
7
+ export const GET: RequestHandler = ({ url }) => {
8
+ const origin = site.url ?? url.origin;
9
+ const urls = flatPages
10
+ .map((page) => `\t<url>\n\t\t<loc>${origin}${page.href}</loc>\n\t</url>`)
11
+ .join('\n');
12
+
13
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
14
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
15
+ ${urls}
16
+ </urlset>`;
17
+
18
+ return new Response(xml, {
19
+ headers: { 'content-type': 'application/xml' }
20
+ });
21
+ };
@@ -0,0 +1,6 @@
1
+ <svg viewBox="0 0 284 294" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M18.2074 162.62L131.021 19.7881" stroke="#FFFFFF" stroke-width="20"/>
3
+ <path d="M81.7836 77.8522C74.921 78.6033 69.9667 84.7754 70.7177 91.6379L82.9574 203.47C83.7085 210.333 89.8806 215.287 96.7432 214.536C103.606 213.785 108.56 207.613 107.809 200.75L96.9293 101.344L196.336 90.4641C203.198 89.713 208.153 83.5409 207.402 76.6783C206.65 69.8158 200.478 64.8614 193.616 65.6125L81.7836 77.8522ZM207.138 189.809L214.963 180.06L90.9683 80.53L83.1435 90.278L75.3188 100.026L199.313 199.557L207.138 189.809Z" fill="#FFFFFF"/>
4
+ <line x1="195.077" y1="29.6894" x2="211.177" y2="210.987" stroke="#FFFFFF" stroke-width="20"/>
5
+ <line x1="219.599" y1="200.204" x2="39.3612" y2="225.545" stroke="#FFFFFF" stroke-width="20"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg viewBox="0 0 284 294" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M18.2074 162.62L131.021 19.7881" stroke="#000000" stroke-width="20"/>
3
+ <path d="M81.7836 77.8522C74.921 78.6033 69.9667 84.7754 70.7177 91.6379L82.9574 203.47C83.7085 210.333 89.8806 215.287 96.7432 214.536C103.606 213.785 108.56 207.613 107.809 200.75L96.9293 101.344L196.336 90.4641C203.198 89.713 208.153 83.5409 207.402 76.6783C206.65 69.8158 200.478 64.8614 193.616 65.6125L81.7836 77.8522ZM207.138 189.809L214.963 180.06L90.9683 80.53L83.1435 90.278L75.3188 100.026L199.313 199.557L207.138 189.809Z" fill="#000000"/>
4
+ <line x1="195.077" y1="29.6894" x2="211.177" y2="210.987" stroke="#000000" stroke-width="20"/>
5
+ <line x1="219.599" y1="200.204" x2="39.3612" y2="225.545" stroke="#000000" stroke-width="20"/>
6
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg viewBox="0 0 284 294" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <style>
3
+ .s { stroke: #0a0a0a; }
4
+ .f { fill: #0a0a0a; }
5
+ @media (prefers-color-scheme: dark) {
6
+ .s { stroke: #fafafa; }
7
+ .f { fill: #fafafa; }
8
+ }
9
+ </style>
10
+ <path class="s" d="M18.2074 162.62L131.021 19.7881" stroke-width="20"/>
11
+ <path class="f" d="M81.7836 77.8522C74.921 78.6033 69.9667 84.7754 70.7177 91.6379L82.9574 203.47C83.7085 210.333 89.8806 215.287 96.7432 214.536C103.606 213.785 108.56 207.613 107.809 200.75L96.9293 101.344L196.336 90.4641C203.198 89.713 208.153 83.5409 207.402 76.6783C206.65 69.8158 200.478 64.8614 193.616 65.6125L81.7836 77.8522ZM207.138 189.809L214.963 180.06L90.9683 80.53L83.1435 90.278L75.3188 100.026L199.313 199.557L207.138 189.809Z"/>
12
+ <line class="s" x1="195.077" y1="29.6894" x2="211.177" y2="210.987" stroke-width="20"/>
13
+ <line class="s" x1="219.599" y1="200.204" x2="39.3612" y2="225.545" stroke-width="20"/>
14
+ </svg>
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ User-agent: *
2
+ Allow: /
3
+
4
+ Sitemap: https://axerity.com/sitemap.xml
@@ -0,0 +1,35 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { mdsvex } from 'mdsvex';
3
+ import adapter from '@sveltejs/adapter-static';
4
+ import mdsvexConfig from './mdsvex.config.js';
5
+
6
+ // serve the site under a sub-path when `basePath` is set in axerity.json
7
+ let basePath = '';
8
+
9
+ try {
10
+ basePath = JSON.parse(readFileSync('./axerity.json', 'utf8')).basePath ?? '';
11
+ } catch {
12
+ // theres no config
13
+ }
14
+
15
+ /** @type {import('@sveltejs/kit').Config} */
16
+ const config = {
17
+ compilerOptions: {
18
+ runes: ({ filename }) => (filename.split(/[/\\]/).includes('node_modules') ? undefined : true),
19
+ warningFilter: (warning) =>
20
+ !(warning.code === 'script_context_deprecated' && /\.(md|svx)$/.test(warning.filename ?? ''))
21
+ },
22
+ kit: {
23
+ adapter: adapter({ fallback: '404.html' }),
24
+ // The CLI points this at a gitignored merge of the engine's static assets
25
+ // and the user's public/ folder, so the tracked static/ is never touched.
26
+ files: { assets: process.env.AXERITY_ASSETS || 'static' },
27
+ // Absolute base (not relative to the page) so `base` is a stable prefix
28
+ // for both links and absolute URLs like OpenGraph images.
29
+ paths: { base: basePath, relative: false }
30
+ },
31
+ preprocess: [mdsvex(mdsvexConfig)],
32
+ extensions: ['.svelte', '.svx', '.md']
33
+ };
34
+
35
+ export default config;
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "rewriteRelativeImportExtensions": true,
5
+ "allowJs": true,
6
+ "checkJs": true,
7
+ "esModuleInterop": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "resolveJsonModule": true,
10
+ "skipLibCheck": true,
11
+ "sourceMap": true,
12
+ "strict": true,
13
+ "moduleResolution": "bundler"
14
+ }
15
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
16
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
17
+ //
18
+ // To make changes to top-level options such as include and exclude, we recommend extending
19
+ // the generated config; see https://svelte.dev/docs/kit/configuration#typescript
20
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,46 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import tailwindcss from '@tailwindcss/vite';
4
+ import { sveltekit } from '@sveltejs/kit/vite';
5
+ import { defineConfig } from 'vite';
6
+ import { generateApiDocs } from './src/lib/openapi/generate';
7
+
8
+ const allow = process.env.AXERITY_FS_ALLOW;
9
+
10
+ function openapi() {
11
+ const localSpecs: string[] = [];
12
+ const run = async () => {
13
+ try {
14
+ const openapi = JSON.parse(readFileSync('./axerity.json', 'utf8')).openapi;
15
+ if (!openapi) return;
16
+ const sources = (Array.isArray(openapi) ? openapi : [openapi]).map((o) =>
17
+ typeof o === 'string' ? { spec: o } : o
18
+ );
19
+ localSpecs.length = 0;
20
+ for (const s of sources) {
21
+ if (s.spec && !/^https?:\/\//.test(s.spec)) localSpecs.push(resolve(s.spec));
22
+ }
23
+ await generateApiDocs(openapi, 'src/content/docs');
24
+ } catch {
25
+ // theres nothing
26
+ }
27
+ };
28
+ return {
29
+ name: 'axerity:openapi',
30
+ async buildStart() {
31
+ await run();
32
+ },
33
+ async configureServer(server: import('vite').ViteDevServer) {
34
+ await run();
35
+ for (const spec of localSpecs) server.watcher.add(spec);
36
+ server.watcher.on('change', (file: string) => {
37
+ if (localSpecs.includes(file)) run();
38
+ });
39
+ }
40
+ };
41
+ }
42
+
43
+ export default defineConfig({
44
+ plugins: [openapi(), tailwindcss(), sveltekit()],
45
+ server: allow ? { fs: { allow: ['.', allow] } } : undefined
46
+ });