@sparkstone/pocketbase-schema v0.10.0
PocketBase Schema Generator
@sparkstone/pocketbase-schema is an open-source utility to generate TypeScript typings from PocketBase schemas, enabling type-safe development with PocketBase APIs.
Features
- 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.
Installation
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-devUsage
CLI
You can use the tool directly from the command line to generate typings from a PocketBase instance:
pocketbase-schemaConfiguration
The 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
},
};Required Configuration Fields
email: Admin email for authentication.password: Admin password for authentication.url: The URL of the PocketBase instance.
Optional Configuration Fields
schema.outputPath: Path to save the generated schema JSON.types.outputPath: Path to save the generated TypeScript definitions.
Generated Types
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.
Example Usage
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.
Expanding types
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'});Development
Scripts
pnpm run build: Build the package usingmicrobundle.pnpm run dev: Watch for changes and rebuild automatically.
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests to enhance the functionality.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Acknowledgments
For more details and updates, visit the repository.