From b8bee291b38c9d1b6a5288b5fb85aab6722bff85 Mon Sep 17 00:00:00 2001 From: Niklas Korz Date: Fri, 8 Dec 2023 21:34:50 +0100 Subject: [PATCH] Add pocketbase js SDK and typings --- README.md | 6 ++ app/package-lock.json | 8 ++- app/package.json | 3 +- app/src/lib/api.ts | 4 ++ app/src/lib/pocketbase-types.ts | 92 +++++++++++++++++++++++++++++++ app/src/routes/login/+page.svelte | 72 ++++++++++++++++++++++++ 6 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 app/src/lib/api.ts create mode 100644 app/src/lib/pocketbase-types.ts create mode 100644 app/src/routes/login/+page.svelte diff --git a/README.md b/README.md index ec62774..4504a90 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # getstuffdone +## update types + +``` +npx pocketbase-typegen --db ./pb_data/data.db --out app/src/lib/pocketbase-types.ts +``` + diff --git a/app/package-lock.json b/app/package-lock.json index a0e0d2b..5dfc497 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -11,7 +11,8 @@ "@capacitor/core": "^5.5.1", "@ionic/core": "^7.2.1", "ionic-svelte": "^0.5.82", - "ionicons": "^7.2.1" + "ionicons": "^7.2.1", + "pocketbase": "^0.19.0" }, "devDependencies": { "@capacitor/cli": "^5.5.1", @@ -3277,6 +3278,11 @@ "node": ">=10.4.0" } }, + "node_modules/pocketbase": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.19.0.tgz", + "integrity": "sha512-bUVZfVdD17K8GnwbeDMZPEdREVg2YE0F8uHPDC0zer4VtwXUqoPCCeudTy3fhUE7pfuKnfpuPxeBSYsBY3AGIQ==" + }, "node_modules/postcss": { "version": "8.4.32", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", diff --git a/app/package.json b/app/package.json index e26ec0e..b893d46 100644 --- a/app/package.json +++ b/app/package.json @@ -39,6 +39,7 @@ "@capacitor/core": "^5.5.1", "@ionic/core": "^7.2.1", "ionic-svelte": "^0.5.82", - "ionicons": "^7.2.1" + "ionicons": "^7.2.1", + "pocketbase": "^0.19.0" } } diff --git a/app/src/lib/api.ts b/app/src/lib/api.ts new file mode 100644 index 0000000..6ebca0c --- /dev/null +++ b/app/src/lib/api.ts @@ -0,0 +1,4 @@ +import PocketBase from "pocketbase"; +import type { TypedPocketBase } from "./pocketbase-types" + +export const pb = new PocketBase('http://127.0.0.1:8090') as TypedPocketBase diff --git a/app/src/lib/pocketbase-types.ts b/app/src/lib/pocketbase-types.ts new file mode 100644 index 0000000..99055a3 --- /dev/null +++ b/app/src/lib/pocketbase-types.ts @@ -0,0 +1,92 @@ +/** +* This file was @generated using pocketbase-typegen +*/ + +import type PocketBase from 'pocketbase' +import type { RecordService } from 'pocketbase' + +export enum Collections { + Completions = "completions", + Lists = "lists", + Tasks = "tasks", + Users = "users", +} + +// Alias types for improved usability +export type IsoDateString = string +export type RecordIdString = string +export type HTMLString = string + +// System fields +export type BaseSystemFields = { + id: RecordIdString + created: IsoDateString + updated: IsoDateString + collectionId: string + collectionName: Collections + expand?: T +} + +export type AuthSystemFields = { + email: string + emailVisibility: boolean + username: string + verified: boolean +} & BaseSystemFields + +// Record types for each collection + +export type CompletionsRecord = { + task?: RecordIdString + user?: RecordIdString +} + +export type ListsRecord = { + name?: string + parent?: RecordIdString +} + +export type TasksRecord = { + cooldown?: number + description?: HTMLString + list: RecordIdString + name?: string + schedule?: IsoDateString +} + +export type UsersRecord = { + avatar?: string + name?: string +} + +// Response types include system fields and match responses from the PocketBase API +export type CompletionsResponse = Required & BaseSystemFields +export type ListsResponse = Required & BaseSystemFields +export type TasksResponse = Required & BaseSystemFields +export type UsersResponse = Required & AuthSystemFields + +// Types containing all Records and Responses, useful for creating typing helper functions + +export type CollectionRecords = { + completions: CompletionsRecord + lists: ListsRecord + tasks: TasksRecord + users: UsersRecord +} + +export type CollectionResponses = { + completions: CompletionsResponse + lists: ListsResponse + tasks: TasksResponse + users: UsersResponse +} + +// Type for usage with type asserted PocketBase instance +// https://github.com/pocketbase/js-sdk#specify-typescript-definitions + +export type TypedPocketBase = PocketBase & { + collection(idOrName: 'completions'): RecordService + collection(idOrName: 'lists'): RecordService + collection(idOrName: 'tasks'): RecordService + collection(idOrName: 'users'): RecordService +} diff --git a/app/src/routes/login/+page.svelte b/app/src/routes/login/+page.svelte new file mode 100644 index 0000000..e2630c1 --- /dev/null +++ b/app/src/routes/login/+page.svelte @@ -0,0 +1,72 @@ + + + + + + Login + + + + +
+ + Email + + + + + + Password + + + + + Login +
+
+
+ +