@sparkstone/pocketbase-schema is an open-source utility to generate TypeScript typings from PocketBase schemas, enabling type-safe development with PocketBase APIs.
- Automatically generate TypeScript definitions from your PocketBase schema.
- Outputs a
Collectionsenum for easy, type-safe querying. - Generates enums for
selectfield types. - Supports modular usage as a CLI tool or a Node.js module.
- Compatible with modern JavaScript and TypeScript projects.
- Local-first and flexible configuration using cosmiconfig.
Install the package using npm:
npm install @sparkstone/pocketbase-schema --save-devOr with yarn:
yarn add @sparkstone/pocketbase-schema --devOr with pnpm:
pnpm add @sparkstone/pocketbase-schema --save-devYou can use the tool directly from the command line to generate typings from a PocketBase instance:
npx @sparkstone/pocketbase-schemaThe package supports configuration using a configuration file. Supported file formats include .json, .yaml, .js, or .ts. The default configuration file name is .pocketbase-schema.config.ts
Be sure to add your configuration file to .gitignore to prevent leaking credentials.
Example .pocketbase-schema.config.ts:
export default {
email: 'admin@example.com', // Admin email for authentication
password: 'yourpassword', // Admin password for authentication
url: 'http://127.0.0.1:8090', // URL of the PocketBase instance
schema: {
outputPath: 'src/lib/pb.schema.json', // Path to save schema JSON
},
types: {
outputPath: 'src/lib/pb.types.ts', // Path to save TypeScript definitions
},
};email: Admin email for authentication.password: Admin password for authentication.url: The URL of the PocketBase instance.
schema.outputPath: Path to save the generated schema JSON.types.outputPath: Path to save the generated TypeScript definitions.
The generated TypeScript definitions now include:
- A
Collectionsenum that maps to your PocketBase collections for type-safe queries. - Enums for any
selectfield types defined in your schema, ensuring strict typing for these fields.
Here's how you can use the generated Collections enum and type-safe queries in your project:
import PocketBase from 'pocketbase';
import { Collections, YourCollection } from './path/to/pb.types';
const pb = new PocketBase('http://127.0.0.1:8090');
async function fetchData() {
const data = await pb.collection(Collections.YourCollection).getFullList<YourCollection>();
console.log(data);
}
fetchData();Replace YourCollection with the actual collection name, the names are PascalCase.
The recommended way to expand types it to create an interface that extends the main type
import { Comments, Posts, Reactions } from './path/to/pb.types';
interface Post extends Posts {
expand: {
comments: Comments[];
reactions: Reactions[]
}
}
pb.collection(Collections.Posts).getFullList<Post>({ expand: 'comments,reactions'});pnpm run build: Build the package usingmicrobundle.pnpm run dev: Watch for changes and rebuild automatically.
Contributions are welcome! Feel free to open issues or submit pull requests to enhance the functionality.
This project is licensed under the MIT License. See the LICENSE file for details.
For more details and updates, visit the repository.