This package provides TypeScript typings for the PocketBase JavaScript Virtual Machine (JSVM), based on Goja and Goja-Node.
Install the package:
npm install pocketbase-jsvm
In your tsconfig.json
:
{
"compilerOptions": {
"types": ["pocketbase-jsvm"],
"moduleResolution": "node"
}
}
For older PocketBase versions, use triple-slash directives instead of the types
field:
/// <reference path="./node_modules/pocketbase-jsvm/index-v22.d.ts" /> // For v0.22
-
Limited APIs: The JSVM supports most of ECMAScript 2020 and includes some custom PocketBase bindings and Goja-Node features like
require()
andprocess.env
. It does not include Web/Browser APIs, most Node.js APIs, or anything related to the event loop such asasync
,Promise
, orsetTimeout
. -
Version Matching: Package versions follow PocketBase versions. Since the JSVM API isn't stable yet, use the exact package version that matches your PocketBase version.
-
Avoid Unavailable Typings: Do not use
@types/node
or include typings for unavailable APIs. Be cautious withtypeRoots
in your TypeScript configuration. -
Independent Typings: This package lets you reference JSVM types without relying on PocketBase's
jsvm.d.ts
inpb_hooks
.
// Using Goja-Node bindings
const myModule = require('myModule')
const apiKey = process.env.API_KEY
// ECMAScript 2020 features are supported
const myFunc = () => {
// Your code here
}
pocketbase-ejs
uses Upstream Anchoring.
- Our Version =
Upstream MAJOR.MINOR.(Upstream PATCH × 10000 + Our Revision Number)
Example:
- Upstream Version:
0.22.22
- Our First Revision:
0.22.220001
This keeps our fork aligned with upstream releases and allows us to manage our own revisions effectively.
git fetch --all
git checkout main
Then, copy the latest jsvm.d.ts
and update the version number using the Upstream Anchoring technique described above.