This is a utility module for managing Inkdrop packages and themes in the desktop app and other tools.
npm install @inkdropapp/ipmImport:
import { IPM } from '@inkdropapp/ipm'
const options = {
// options for IPM
}
const ipm = new IPM(options)List installed packages:
const installedPackages = await ipm.getInstalled()List outdated packages:
const outdatedPackages = await ipm.getOutdated()name: Name of the package to installversion: Optional specific version to install. If not provided, it installs the latest version.
Install package:
```ts
const result = await ipm.install(package)name: Name of the package to updateversion: Optional specific version to update to. If not provided, it updates to the latest version.
Update package:
```ts
const result = await ipm.update('package-name')Uninstall package:
await ipm.uninstall('package-name')Publish a package to the registry. It will use cwd to locate the package to publish.
dryrun: If true, simulates the publish process without actually publishing. Default isfalse.path: Path to the package directory. If not provided, it uses the current working directory.
await ipm.publish({ dryrun: true, path: './my-package' })Unpublish a package or specific version from the registry.
name: Name of the package to unpublishopts.version: Optional specific version to unpublish. If not provided, unpublishes the entire package.
// Unpublish entire package
await ipm.unpublish('package-name')
// Unpublish specific version
await ipm.unpublish('package-name', { version: '1.0.0' })Get a package from the registry:
const packageInfo = await ipm.registry.getPackageInfo('package-name')name: The name of the package to get
Get information about a specific version of a package:
const versionInfo = await ipm.registry.getPackageVersionInfo(
'package-name',
'1.0.0'
)name: The name of the packageversion: The specific version to get information for
Search packages with keyword:
const searchResults = await ipm.registry.search({ q: 'markdown' })q: Search query stringsort: Sort order ('score', 'majority', 'recency', 'newness', 'theme-majority', 'theme-recency', 'theme-newness')direction: Sort direction ('desc' or 'asc')
Get packages from the registry:
const packages = await ipm.registry.getPackages({ sort: 'recency', page: 0 })sort: Sort order ('majority', 'recency', 'newness', 'theme-majority', 'theme-recency', 'theme-newness')page: Page number for paginationtheme: Whether to filter for themes only
- Node.js 20.x or higher
- npm
npm installnpm test- Run testsnpm run test:watch- Run tests in watch modenpm run lint- Run ESLintnpm run lint:fix- Run ESLint with auto-fixnpm run typecheck- Run TypeScript type checking
This project uses GitHub Actions for continuous integration. The CI pipeline runs:
- Tests on Node.js 18.x, 20.x, and 22.x
- Cross-platform testing (Ubuntu, Windows, macOS)
- Linting with ESLint
- Type checking with TypeScript
All pull requests must pass CI checks before merging.