@hiai-gg/hiai-docs 0.0.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 (216) hide show
  1. package/.all-contributorsrc +18 -0
  2. package/.claude/settings.local.json +61 -0
  3. package/.dockerignore +113 -0
  4. package/.env.example +68 -0
  5. package/.github/FUNDING.yml +5 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +74 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +78 -0
  8. package/.github/dependabot.yml +136 -0
  9. package/.github/pull_request_template.md +96 -0
  10. package/.github/workflows/ci.yml +283 -0
  11. package/AGENTS.md +237 -0
  12. package/CODE_OF_CONDUCT.md +134 -0
  13. package/CONTRIBUTING.md +77 -0
  14. package/Caddyfile +50 -0
  15. package/Dockerfile.backend +60 -0
  16. package/LICENSE +21 -0
  17. package/README.md +284 -0
  18. package/RELEASE_CHECKLIST.md +34 -0
  19. package/SECURITY.md +60 -0
  20. package/backend/package.json +43 -0
  21. package/backend/src/__tests__/auth-helpers.test.ts +51 -0
  22. package/backend/src/__tests__/chunker.test.ts +65 -0
  23. package/backend/src/__tests__/config.test.ts +91 -0
  24. package/backend/src/__tests__/csrf.test.ts +91 -0
  25. package/backend/src/__tests__/embedding.test.ts +48 -0
  26. package/backend/src/__tests__/rate-limit.test.ts +46 -0
  27. package/backend/src/__tests__/routes.test.ts +38 -0
  28. package/backend/src/__tests__/schema.test.ts +31 -0
  29. package/backend/src/__tests__/validation.test.ts +556 -0
  30. package/backend/src/api/middleware/auth.ts +56 -0
  31. package/backend/src/api/middleware/csrf.ts +91 -0
  32. package/backend/src/api/middleware/rate-limit.ts +77 -0
  33. package/backend/src/api/middleware/webhook-verify.ts +22 -0
  34. package/backend/src/api/routes/attachments.ts +280 -0
  35. package/backend/src/api/routes/auth.ts +52 -0
  36. package/backend/src/api/routes/collaboration.ts +121 -0
  37. package/backend/src/api/routes/documents.ts +664 -0
  38. package/backend/src/api/routes/folders.ts +226 -0
  39. package/backend/src/api/routes/search.ts +354 -0
  40. package/backend/src/api/routes/share.ts +512 -0
  41. package/backend/src/api/routes/tags.ts +247 -0
  42. package/backend/src/api/routes/versions.ts +99 -0
  43. package/backend/src/api/routes/webhooks.ts +43 -0
  44. package/backend/src/embedding/chunker.ts +74 -0
  45. package/backend/src/embedding/index.ts +117 -0
  46. package/backend/src/embedding/providers/ollama.ts +63 -0
  47. package/backend/src/embedding/providers/openrouter.ts +71 -0
  48. package/backend/src/embedding/utils.ts +13 -0
  49. package/backend/src/embedding/worker.ts +89 -0
  50. package/backend/src/index.ts +147 -0
  51. package/backend/src/lib/auth-helpers.ts +27 -0
  52. package/backend/src/lib/auth.ts +35 -0
  53. package/backend/src/lib/config.ts +73 -0
  54. package/backend/src/lib/db.ts +7 -0
  55. package/backend/src/lib/embedding-queue.ts +12 -0
  56. package/backend/src/lib/logger.ts +18 -0
  57. package/backend/src/lib/markdown-to-doc.ts +45 -0
  58. package/backend/src/lib/minio.ts +46 -0
  59. package/backend/src/lib/redis.ts +19 -0
  60. package/backend/src/lib/yjs-provider.ts +182 -0
  61. package/backend/tests/integration/_harness.ts +754 -0
  62. package/backend/tests/integration/auth.test.ts +296 -0
  63. package/backend/tests/integration/routes.documents.test.ts +459 -0
  64. package/backend/tests/integration/routes.folders.test.ts +337 -0
  65. package/backend/tests/integration/routes.search.test.ts +322 -0
  66. package/backend/tests/integration/routes.share.test.ts +773 -0
  67. package/backend/tests/integration/routes.tags.test.ts +425 -0
  68. package/backend/tests/integration/routes.versions.test.ts +233 -0
  69. package/backend/tsconfig.json +18 -0
  70. package/docker-compose.yml +218 -0
  71. package/docs/API.md +328 -0
  72. package/docs/ARCHITECTURE.md +75 -0
  73. package/docs/DEPLOYMENT.md +113 -0
  74. package/docs/PRODUCTION_STATUS.md +61 -0
  75. package/docs/openapi.json +385 -0
  76. package/frontend/.svelte-kit.old/ambient.d.ts +230 -0
  77. package/frontend/.svelte-kit.old/env.d.ts +1 -0
  78. package/frontend/.svelte-kit.old/generated/client/app.js +46 -0
  79. package/frontend/.svelte-kit.old/generated/client/matchers.js +1 -0
  80. package/frontend/.svelte-kit.old/generated/client/nodes/0.js +3 -0
  81. package/frontend/.svelte-kit.old/generated/client/nodes/1.js +1 -0
  82. package/frontend/.svelte-kit.old/generated/client/nodes/10.js +3 -0
  83. package/frontend/.svelte-kit.old/generated/client/nodes/2.js +1 -0
  84. package/frontend/.svelte-kit.old/generated/client/nodes/3.js +1 -0
  85. package/frontend/.svelte-kit.old/generated/client/nodes/4.js +1 -0
  86. package/frontend/.svelte-kit.old/generated/client/nodes/5.js +3 -0
  87. package/frontend/.svelte-kit.old/generated/client/nodes/6.js +1 -0
  88. package/frontend/.svelte-kit.old/generated/client/nodes/7.js +3 -0
  89. package/frontend/.svelte-kit.old/generated/client/nodes/8.js +1 -0
  90. package/frontend/.svelte-kit.old/generated/client/nodes/9.js +3 -0
  91. package/frontend/.svelte-kit.old/generated/root.js +3 -0
  92. package/frontend/.svelte-kit.old/generated/root.svelte +80 -0
  93. package/frontend/.svelte-kit.old/generated/server/internal.js +55 -0
  94. package/frontend/.svelte-kit.old/non-ambient.d.ts +59 -0
  95. package/frontend/.svelte-kit.old/tsconfig.json +59 -0
  96. package/frontend/.svelte-kit.old/types/route_meta_data.json +40 -0
  97. package/frontend/.svelte-kit.old/types/src/routes/$types.d.ts +21 -0
  98. package/frontend/.svelte-kit.old/types/src/routes/(app)/$types.d.ts +30 -0
  99. package/frontend/.svelte-kit.old/types/src/routes/(app)/docs/[id]/$types.d.ts +27 -0
  100. package/frontend/.svelte-kit.old/types/src/routes/(app)/docs/[id]/proxy+page.ts +25 -0
  101. package/frontend/.svelte-kit.old/types/src/routes/api/[...path]/$types.d.ts +10 -0
  102. package/frontend/.svelte-kit.old/types/src/routes/folders/[id]/$types.d.ts +27 -0
  103. package/frontend/.svelte-kit.old/types/src/routes/folders/[id]/proxy+page.ts +15 -0
  104. package/frontend/.svelte-kit.old/types/src/routes/login/$types.d.ts +17 -0
  105. package/frontend/.svelte-kit.old/types/src/routes/register/$types.d.ts +17 -0
  106. package/frontend/.svelte-kit.old/types/src/routes/s/[token]/$types.d.ts +20 -0
  107. package/frontend/.svelte-kit.old/types/src/routes/s/[token]/proxy+page.ts +6 -0
  108. package/frontend/.svelte-kit.old/types/src/routes/search/$types.d.ts +19 -0
  109. package/frontend/.svelte-kit.old/types/src/routes/search/proxy+page.ts +26 -0
  110. package/frontend/.svelte-kit.old/types/src/routes/settings/$types.d.ts +17 -0
  111. package/frontend/Dockerfile +44 -0
  112. package/frontend/biome.json +40 -0
  113. package/frontend/components.json +18 -0
  114. package/frontend/messages/en.json +434 -0
  115. package/frontend/package.json +70 -0
  116. package/frontend/project.inlang/settings.json +12 -0
  117. package/frontend/src/app.css +6 -0
  118. package/frontend/src/app.d.ts +13 -0
  119. package/frontend/src/app.html +30 -0
  120. package/frontend/src/hooks.server.ts +10 -0
  121. package/frontend/src/hooks.ts +10 -0
  122. package/frontend/src/lib/api/attachments.ts +45 -0
  123. package/frontend/src/lib/api/client.test.ts +15 -0
  124. package/frontend/src/lib/api/client.ts +57 -0
  125. package/frontend/src/lib/api/documents.ts +83 -0
  126. package/frontend/src/lib/api/folders.ts +180 -0
  127. package/frontend/src/lib/api/search.test.ts +52 -0
  128. package/frontend/src/lib/api/search.ts +128 -0
  129. package/frontend/src/lib/api/settings.ts +95 -0
  130. package/frontend/src/lib/api/share.ts +71 -0
  131. package/frontend/src/lib/api/tags.test.ts +91 -0
  132. package/frontend/src/lib/api/tags.ts +87 -0
  133. package/frontend/src/lib/auth-client.ts +10 -0
  134. package/frontend/src/lib/collaboration.ts +63 -0
  135. package/frontend/src/lib/components/AttachmentUpload.svelte +110 -0
  136. package/frontend/src/lib/components/DatePicker.svelte +322 -0
  137. package/frontend/src/lib/components/DocumentCard.svelte +166 -0
  138. package/frontend/src/lib/components/EmptyState.svelte +49 -0
  139. package/frontend/src/lib/components/FolderCard.svelte +93 -0
  140. package/frontend/src/lib/components/ScrollToTop.svelte +72 -0
  141. package/frontend/src/lib/components/SearchBar.svelte +47 -0
  142. package/frontend/src/lib/components/SearchResult.svelte +115 -0
  143. package/frontend/src/lib/components/SettingsDialog.svelte +271 -0
  144. package/frontend/src/lib/components/ShareDialog.svelte +158 -0
  145. package/frontend/src/lib/components/ShareLink.svelte +98 -0
  146. package/frontend/src/lib/components/TagCreateDialog.svelte +284 -0
  147. package/frontend/src/lib/components/VersionDiff.svelte +55 -0
  148. package/frontend/src/lib/components/VersionHistory.svelte +96 -0
  149. package/frontend/src/lib/components/editor/DocumentTitle.svelte +87 -0
  150. package/frontend/src/lib/components/editor/EditorToolbar.svelte +1367 -0
  151. package/frontend/src/lib/components/editor/HiAiEditor.svelte +531 -0
  152. package/frontend/src/lib/components/editor/LinkDialog.svelte +134 -0
  153. package/frontend/src/lib/components/editor/MarkdownToggle.svelte +88 -0
  154. package/frontend/src/lib/components/editor/editorExtensions.ts +53 -0
  155. package/frontend/src/lib/components/editor/markdown.ts +38 -0
  156. package/frontend/src/lib/components/sidebar/FolderTree.svelte +731 -0
  157. package/frontend/src/lib/components/sidebar/RecentDocs.svelte +311 -0
  158. package/frontend/src/lib/components/sidebar/Sidebar.svelte +156 -0
  159. package/frontend/src/lib/components/sidebar/TagList.svelte +200 -0
  160. package/frontend/src/lib/components/ui/confirm-dialog/ConfirmDialog.svelte +76 -0
  161. package/frontend/src/lib/components/ui/confirm-dialog/index.ts +1 -0
  162. package/frontend/src/lib/stores/tag-store.svelte.ts +56 -0
  163. package/frontend/src/lib/stores/theme.svelte.ts +97 -0
  164. package/frontend/src/lib/svelte.d.ts +6 -0
  165. package/frontend/src/lib/types.ts +44 -0
  166. package/frontend/src/lib/utils/clipboard.ts +17 -0
  167. package/frontend/src/lib/utils/strip-markdown.ts +59 -0
  168. package/frontend/src/lib/utils.ts +33 -0
  169. package/frontend/src/routes/(app)/+layout.svelte +17 -0
  170. package/frontend/src/routes/(app)/+page.server.ts +10 -0
  171. package/frontend/src/routes/(app)/+page.svelte +303 -0
  172. package/frontend/src/routes/(app)/docs/[id]/+page.server.ts +10 -0
  173. package/frontend/src/routes/(app)/docs/[id]/+page.svelte +1108 -0
  174. package/frontend/src/routes/(app)/docs/[id]/+page.ts +24 -0
  175. package/frontend/src/routes/(app)/search/+page.svelte +593 -0
  176. package/frontend/src/routes/(app)/search/+page.ts +25 -0
  177. package/frontend/src/routes/+error.svelte +12 -0
  178. package/frontend/src/routes/+layout.svelte +18 -0
  179. package/frontend/src/routes/+layout.ts +2 -0
  180. package/frontend/src/routes/api/[...path]/+server.ts +111 -0
  181. package/frontend/src/routes/folders/[id]/+page.server.ts +10 -0
  182. package/frontend/src/routes/folders/[id]/+page.svelte +319 -0
  183. package/frontend/src/routes/folders/[id]/+page.ts +14 -0
  184. package/frontend/src/routes/login/+page.svelte +90 -0
  185. package/frontend/src/routes/register/+page.svelte +97 -0
  186. package/frontend/src/routes/s/[token]/+page.svelte +496 -0
  187. package/frontend/src/routes/s/[token]/+page.ts +5 -0
  188. package/frontend/src/routes/settings/+page.svelte +175 -0
  189. package/frontend/static/favicon.png +0 -0
  190. package/frontend/static/logo.png +0 -0
  191. package/frontend/svelte.config.js +15 -0
  192. package/frontend/tsconfig.json +15 -0
  193. package/frontend/vite.config.ts +25 -0
  194. package/init.sql +9 -0
  195. package/logo.png +0 -0
  196. package/package.json +39 -0
  197. package/package.public.json +39 -0
  198. package/packages/db/drizzle.config.ts +10 -0
  199. package/packages/db/package.json +30 -0
  200. package/packages/db/src/client.ts +9 -0
  201. package/packages/db/src/index.ts +2 -0
  202. package/packages/db/src/migrations/0000_nice_bedlam.sql +165 -0
  203. package/packages/db/src/migrations/0001_w2_3_test.sql +5 -0
  204. package/packages/db/src/migrations/0002_rename_content_json.sql +2 -0
  205. package/packages/db/src/migrations/meta/0000_snapshot.json +1331 -0
  206. package/packages/db/src/migrations/meta/0001_snapshot.json +1399 -0
  207. package/packages/db/src/migrations/meta/0002_snapshot.json +1399 -0
  208. package/packages/db/src/migrations/meta/_journal.json +27 -0
  209. package/packages/db/src/schema.ts +378 -0
  210. package/packages/db/tsconfig.json +17 -0
  211. package/scripts/export-openapi.ts +37 -0
  212. package/scripts/health-check.sh +75 -0
  213. package/scripts/migrate.sh +135 -0
  214. package/scripts/prework_backup.sh +25 -0
  215. package/scripts/release.sh +83 -0
  216. package/tsconfig.json +25 -0
@@ -0,0 +1,30 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { };
6
+ type RouteId = '/(app)';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageServerParentData = Omit<EnsureDefined<import('../$types.js').LayoutServerData>, keyof LayoutServerData> & EnsureDefined<LayoutServerData>;
14
+ type PageParentData = Omit<EnsureDefined<import('../$types.js').LayoutData>, keyof LayoutData> & EnsureDefined<LayoutData>;
15
+ type LayoutRouteId = RouteId | "/(app)" | "/(app)/docs/[id]"
16
+ type LayoutParams = RouteParams & { id?: string | undefined }
17
+ type LayoutParentData = EnsureDefined<import('../$types.js').LayoutData>;
18
+
19
+ export type PageServerLoad<OutputData extends OutputDataShape<PageServerParentData> = OutputDataShape<PageServerParentData>> = Kit.ServerLoad<RouteParams, PageServerParentData, OutputData, RouteId>;
20
+ export type PageServerLoadEvent = Parameters<PageServerLoad>[0];
21
+ export type ActionData = unknown;
22
+ export type PageServerData = Expand<OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../src/routes/(app)/+page.server.js').load>>>>>>;
23
+ export type PageData = Expand<Omit<PageParentData, keyof PageServerData> & EnsureDefined<PageServerData>>;
24
+ export type Action<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Action<RouteParams, OutputData, RouteId>
25
+ export type Actions<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Actions<RouteParams, OutputData, RouteId>
26
+ export type PageProps = { params: RouteParams; data: PageData; form: ActionData }
27
+ export type LayoutServerData = null;
28
+ export type LayoutData = Expand<LayoutParentData>;
29
+ export type LayoutProps = { params: LayoutParams; data: LayoutData; children: import("svelte").Snippet }
30
+ export type RequestEvent = Kit.RequestEvent<RouteParams, RouteId>;
@@ -0,0 +1,27 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { id: string };
6
+ type RouteId = '/(app)/docs/[id]';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageServerParentData = Omit<EnsureDefined<import('../../../$types.js').LayoutServerData>, keyof import('../../$types.js').LayoutServerData> & EnsureDefined<import('../../$types.js').LayoutServerData>;
14
+ type PageParentData = Omit<EnsureDefined<import('../../../$types.js').LayoutData>, keyof import('../../$types.js').LayoutData> & EnsureDefined<import('../../$types.js').LayoutData>;
15
+
16
+ export type EntryGenerator = () => Promise<Array<RouteParams>> | Array<RouteParams>;
17
+ export type PageServerLoad<OutputData extends Partial<App.PageData> & Record<string, any> | void = Partial<App.PageData> & Record<string, any> | void> = Kit.ServerLoad<RouteParams, PageServerParentData, OutputData, RouteId>;
18
+ export type PageServerLoadEvent = Parameters<PageServerLoad>[0];
19
+ export type ActionData = unknown;
20
+ export type PageServerData = Expand<OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../../src/routes/(app)/docs/[id]/+page.server.js').load>>>>>>;
21
+ export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
22
+ export type PageLoadEvent = Parameters<PageLoad>[0];
23
+ export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>>>>;
24
+ export type Action<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Action<RouteParams, OutputData, RouteId>
25
+ export type Actions<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Actions<RouteParams, OutputData, RouteId>
26
+ export type PageProps = { params: RouteParams; data: PageData; form: ActionData }
27
+ export type RequestEvent = Kit.RequestEvent<RouteParams, RouteId>;
@@ -0,0 +1,25 @@
1
+ // @ts-nocheck
2
+ import { getDocument } from "$lib/api/documents";
3
+ import type { PageLoad } from "./$types";
4
+
5
+ export const load = async ({ params, fetch }: Parameters<PageLoad>[0]) => {
6
+ try {
7
+ const document = await getDocument(params.id, fetch);
8
+ return { document };
9
+ } catch {
10
+ // Fallback when backend unavailable
11
+ return {
12
+ document: {
13
+ id: params.id,
14
+ title: "Untitled Document",
15
+ content: "",
16
+ folderId: null,
17
+ folderName: "",
18
+ tags: [],
19
+ createdAt: new Date().toISOString(),
20
+ updatedAt: new Date().toISOString(),
21
+ excerpt: "",
22
+ } as Awaited<ReturnType<typeof getDocument>>,
23
+ };
24
+ }
25
+ };
@@ -0,0 +1,10 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { path: string };
6
+ type RouteId = '/api/[...path]';
7
+
8
+ export type EntryGenerator = () => Promise<Array<RouteParams>> | Array<RouteParams>;
9
+ export type RequestHandler = Kit.RequestHandler<RouteParams, RouteId>;
10
+ export type RequestEvent = Kit.RequestEvent<RouteParams, RouteId>;
@@ -0,0 +1,27 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { id: string };
6
+ type RouteId = '/folders/[id]';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageServerParentData = EnsureDefined<import('../../$types.js').LayoutServerData>;
14
+ type PageParentData = EnsureDefined<import('../../$types.js').LayoutData>;
15
+
16
+ export type EntryGenerator = () => Promise<Array<RouteParams>> | Array<RouteParams>;
17
+ export type PageServerLoad<OutputData extends Partial<App.PageData> & Record<string, any> | void = Partial<App.PageData> & Record<string, any> | void> = Kit.ServerLoad<RouteParams, PageServerParentData, OutputData, RouteId>;
18
+ export type PageServerLoadEvent = Parameters<PageServerLoad>[0];
19
+ export type ActionData = unknown;
20
+ export type PageServerData = Expand<OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../src/routes/folders/[id]/+page.server.js').load>>>>>>;
21
+ export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
22
+ export type PageLoadEvent = Parameters<PageLoad>[0];
23
+ export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>>>>;
24
+ export type Action<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Action<RouteParams, OutputData, RouteId>
25
+ export type Actions<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Actions<RouteParams, OutputData, RouteId>
26
+ export type PageProps = { params: RouteParams; data: PageData; form: ActionData }
27
+ export type RequestEvent = Kit.RequestEvent<RouteParams, RouteId>;
@@ -0,0 +1,15 @@
1
+ // @ts-nocheck
2
+ import { getFolder, getFolderPath } from "$lib/api/folders.js";
3
+ import type { PageLoad } from "./$types.js";
4
+
5
+ export const load = async ({ params }: Parameters<PageLoad>[0]) => {
6
+ const [folder, breadcrumb] = await Promise.all([
7
+ getFolder(params.id),
8
+ getFolderPath(params.id),
9
+ ]);
10
+
11
+ return {
12
+ folder,
13
+ breadcrumb,
14
+ };
15
+ };
@@ -0,0 +1,17 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { };
6
+ type RouteId = '/login';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageParentData = EnsureDefined<import('../$types.js').LayoutData>;
14
+
15
+ export type PageServerData = null;
16
+ export type PageData = Expand<PageParentData>;
17
+ export type PageProps = { params: RouteParams; data: PageData }
@@ -0,0 +1,17 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { };
6
+ type RouteId = '/register';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageParentData = EnsureDefined<import('../$types.js').LayoutData>;
14
+
15
+ export type PageServerData = null;
16
+ export type PageData = Expand<PageParentData>;
17
+ export type PageProps = { params: RouteParams; data: PageData }
@@ -0,0 +1,20 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { token: string };
6
+ type RouteId = '/s/[token]';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageParentData = EnsureDefined<import('../../$types.js').LayoutData>;
14
+
15
+ export type EntryGenerator = () => Promise<Array<RouteParams>> | Array<RouteParams>;
16
+ export type PageServerData = null;
17
+ export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
18
+ export type PageLoadEvent = Parameters<PageLoad>[0];
19
+ export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>>>>;
20
+ export type PageProps = { params: RouteParams; data: PageData }
@@ -0,0 +1,6 @@
1
+ // @ts-nocheck
2
+ import type { PageLoad } from "./$types";
3
+
4
+ export const load = async ({ params, fetch }: Parameters<PageLoad>[0]) => {
5
+ return { token: params.token, fetch };
6
+ };
@@ -0,0 +1,19 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { };
6
+ type RouteId = '/search';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageParentData = EnsureDefined<import('../$types.js').LayoutData>;
14
+
15
+ export type PageServerData = null;
16
+ export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
17
+ export type PageLoadEvent = Parameters<PageLoad>[0];
18
+ export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.js').load>>>>>>;
19
+ export type PageProps = { params: RouteParams; data: PageData }
@@ -0,0 +1,26 @@
1
+ // @ts-nocheck
2
+ import type { PageLoad } from "./$types";
3
+
4
+ export const load = async ({ url }: Parameters<PageLoad>[0]) => {
5
+ const q = url.searchParams.get("q") ?? "";
6
+ const folder = url.searchParams.get("folder") ?? undefined;
7
+ const tags =
8
+ url.searchParams.get("tags")?.split(",").filter(Boolean) ?? undefined;
9
+ const dateFrom = url.searchParams.get("dateFrom") ?? undefined;
10
+ const dateTo = url.searchParams.get("dateTo") ?? undefined;
11
+ const page = Math.max(
12
+ 1,
13
+ Number.parseInt(url.searchParams.get("page") ?? "1", 10),
14
+ );
15
+
16
+ return {
17
+ query: q,
18
+ filters: {
19
+ folder: folder || undefined,
20
+ tags: tags && tags.length > 0 ? tags : undefined,
21
+ dateFrom: dateFrom || undefined,
22
+ dateTo: dateTo || undefined,
23
+ },
24
+ page,
25
+ };
26
+ };
@@ -0,0 +1,17 @@
1
+ import type * as Kit from '@sveltejs/kit';
2
+
3
+ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
4
+ type MatcherParam<M> = M extends (param : string) => param is (infer U extends string) ? U : string;
5
+ type RouteParams = { };
6
+ type RouteId = '/settings';
7
+ type MaybeWithVoid<T> = {} extends T ? T | void : T;
8
+ export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T];
9
+ type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>>
10
+ type EnsureDefined<T> = T extends null | undefined ? {} : T;
11
+ type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never;
12
+ export type Snapshot<T = any> = Kit.Snapshot<T>;
13
+ type PageParentData = EnsureDefined<import('../$types.js').LayoutData>;
14
+
15
+ export type PageServerData = null;
16
+ export type PageData = Expand<PageParentData>;
17
+ export type PageProps = { params: RouteParams; data: PageData }
@@ -0,0 +1,44 @@
1
+ FROM oven/bun:1.3.14-alpine AS base
2
+ WORKDIR /app
3
+
4
+ FROM base AS deps
5
+ COPY package.json bun.lock* ./
6
+ COPY frontend/package.json ./frontend/
7
+ COPY backend/package.json ./backend/
8
+ COPY packages/db/package.json ./packages/db/
9
+ COPY .packages/hiai-ui /packages/hiai-ui
10
+ ENV BUN_INSTALL_CONCURRENCY=1
11
+ RUN bun install --no-verify
12
+ RUN cd /packages/hiai-ui && bunx svelte-kit sync
13
+
14
+ # Build
15
+ FROM base AS build
16
+ COPY --from=deps /app/node_modules ./node_modules
17
+ COPY --from=deps /app/frontend/node_modules ./frontend/node_modules
18
+ COPY --from=deps /app/backend/node_modules ./backend/node_modules
19
+ COPY --from=deps /app/packages/db/node_modules ./packages/db/node_modules
20
+ COPY --from=deps /packages/hiai-ui /packages/hiai-ui
21
+ COPY frontend/ ./frontend/
22
+ COPY packages/db/ ./packages/db/
23
+
24
+ RUN cd frontend && bun run build
25
+
26
+ # Run
27
+ FROM base AS runtime
28
+ COPY --from=build /app/frontend/build ./frontend/build
29
+ COPY frontend/package.json ./frontend/
30
+
31
+ ENV NODE_ENV=production
32
+ ENV WEB_PORT=50701
33
+ WORKDIR /app/frontend
34
+
35
+ RUN addgroup -S app && adduser -S app -G app \
36
+ && chown -R app:app /app/frontend # COPY files are root-owned by default; chown is required for non-root USER
37
+
38
+ USER app
39
+
40
+ HEALTHCHECK --interval=30s CMD wget -qO- http://localhost:50701/ || exit 1
41
+
42
+ EXPOSE 50701
43
+
44
+ CMD ["bun", "run", "build/index.js"]
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.5.0/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": true
7
+ },
8
+ "files": {
9
+ "includes": ["src/**/*.ts", "src/**/*.svelte", "src/**/*.js"]
10
+ },
11
+ "assist": {
12
+ "actions": {
13
+ "source": {
14
+ "organizeImports": "on"
15
+ }
16
+ }
17
+ },
18
+ "linter": {
19
+ "enabled": true,
20
+ "rules": {
21
+ "preset": "recommended"
22
+ }
23
+ },
24
+ "overrides": [
25
+ {
26
+ "includes": ["**/*.svelte"],
27
+ "linter": {
28
+ "rules": {
29
+ "style": {
30
+ "useConst": "off"
31
+ },
32
+ "correctness": {
33
+ "noUnusedVariables": "off",
34
+ "noUnusedImports": "off"
35
+ }
36
+ }
37
+ }
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://shadcn-svelte.com/schema.json",
3
+ "style": "new-york",
4
+ "tailwind": {
5
+ "config": "",
6
+ "css": "src/app.css",
7
+ "baseColor": "slate",
8
+ "cssVariables": true
9
+ },
10
+ "aliases": {
11
+ "components": "$lib/components/ui",
12
+ "utils": "$lib/utils",
13
+ "ui": "$lib/components/ui",
14
+ "lib": "$lib"
15
+ },
16
+ "typescript": true,
17
+ "registry": "https://shadcn-svelte.com/registry"
18
+ }