@inkdropapp/ipm
v1.0.0
Published
Inkdrop Package Manager
Readme
IPM (Inkdrop Package Manager)
This is a utility module for managing Inkdrop packages and themes in the desktop app and other tools.
Install
npm install @inkdropapp/ipmUsage
Import:
import { IPM } from '@inkdropapp/ipm'
const options = {
// options for IPM
}
const ipm = new IPM(options)getInstalled(): Promise<PackageMetadata[]>
List installed packages:
const installedPackages = await ipm.getInstalled()getOutdated(): Promise<OutdatedPackageInfo[]>
List outdated packages:
const outdatedPackages = await ipm.getOutdated()install(name: string, version?: string)
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)update(name: string, version?: string)
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(name: string)
Uninstall package:
await ipm.uninstall('package-name')publish(opts: { dryrun?: boolean; path?: string })
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(name: string, opts?: { version?: string })
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' })registry.getPackageInfo(name: string): Promise<PackageInfo>
Get a package from the registry:
const packageInfo = await ipm.registry.getPackageInfo('package-name')name: The name of the package to get
registry.getPackageVersionInfo(name: string, version: string): Promise<PackageVersionInfo>
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
registry.search(params: { q: string, sort?: string, direction?: string }): Promise<PackageInfo[]>
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')
registry.getPackages(opts?: { sort: string, page: number, theme: boolean }): Promise<PackageInfo[]>
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
Development
Prerequisites
- Node.js 20.x or higher
- npm
Setup
npm installScripts
npm 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
CI/CD
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.
