A package that automatically installs and wraps Hasura CLI binary in isolated manner
npm install hasura-cliAn npm package that automatically installs and wraps Hasura CLI binary in isolated manner




The package is automatically published (always up-to-date) when a new version is released from Hasura's side.






!pr welcome
The Original Hasura CLI, which is not this package, is a compiled binary originally written in go. But just installing it on your system could cause some problems.
1. Difficult to use different hasura versions on multiple projects.
2. Inconvenient to ensure every colleagues having same version installed.
3. Manual installation not specified as npm devDependency.
hasura-cli solves them. It automatically downloads the CLI and exposes the command hasura. Downloaded CLI would be isolated, making it only dedicated to the "project" that installed it. Of course, you can install it as global package as well.
You can simply install hasura-cli through npm, yarn or pnpm. Note that this package follows a version of the Original Hasura CLI. If you want to check its releases, go here.
Currently, there are 3 npm tags (npm tags are different from versions), latest, beta and alpha. latest tag refers to Hasura's latest stable version(e.g. ), while beta and alpha, respectively beta version(e.g. ) and alpha version(e.g. ).
Of course, you can install it globally,
``bash`
npm install --global hasura-cli[@tag|@version]
or in a project.
`bashlatest version from latest tag (Same as hasura-cli@latest)
npm install --save-dev hasura-cli
Then you will be able to run hasura command.
For example,
`bash
print hasura version
npx hasura version
`Or configure npm scripts on package.json in the way you want.
(tip. provide env vars like
$HASURA_GRAPHQL_ENDPOINT or $HASURA_GRAPHQL_ADMIN_SECRET)`json
{
"scripts": {
"hasura": "hasura --project hasura --skip-update-check",
"hasura:console": "npm run hasura console",
"hasura:apply": "npm run hasura migrate apply"
}
}
`Support
Generally, it works on 64 bits architecture of any Linux, macOS, and Windows with node@>=16.
Development (Contribution)
$3
It's simple. Just update the
version in package.json, then make a Pull Request. That's it!`jsonc
{
"name": "hasura-cli",
"version": "1.3.0", // Patch this to "1.3.1-beta.1", for example.
"license": "MIT"
// ...
}
`$3
Please read NOTE.md, before getting started.
$3
Environment variables are intended to be only used on development environment.
First, create
.env file, and configure it as you want.`bash
cp .env.example .env
`You can simply populate the variables by executing
pnpm dev or pnpm dev:no-respawn. Otherwise, you have to manually feed them (e.g. dotenv -- ). That's because this project doesn't use dotenv, but dotenv-cli. So, the application does not read .env by itself.####
HASURA_CLI_INSTALL (boolean)Whether
src/index.ts would install the cli. You can set it false to prevent unwanted downloads.####
HASURA_CLI_DEST_DIR (string)A directory where Hasura CLI should be installed.
####
HASURA_CLI_DEST_FILENAME (string)A file name of Hasura CLI.
$3
Install dependencies. Lifecycle script
postinstall is only for clients who want to install the binary. So, ignore it with --ignore-scripts option. It should also be used on CI.`bash
pnpm install --ignore-scripts
`On development, you can run
`bash
pnpm dev
or
pnpm dev:no-respawn
or
pnpm dev:build
`pnpm dev watches source code and restarts a process when a file changes. It does not write compiled js to the file system. ts-node-dev watches, compiles and restarts.pnpm dev:no-respawn does the same thing except it does not restart.pnpm dev:build logically does the identical job at the high viewpoint. But it compiles (tsc -w) ts, writes js on file system, and runs (nodemon) js. concurrently runs tsc and nodemon simultaneously.To manually test compiled js, you can run
`bash
pnpm build # compiles ts to js
pnpm start # runs dist/index.js
`$3
`bash
pnpm test # runs all tests (against "*.test.ts")
pnpm test:coverage # runs all tests and measures coverage
pnpm lint . # lint
`$3
Here is a brief file system tree.
`
hasura-cli
├── dist // to be generated by build process (e.g. pnpm build), and ignored by git
├── hasura
├── package.json
└── src
├── asset.ts
├── index.ts
└── install.ts
`package.json exposes the command
hasura as a symlink to the flie hasura. Only the directory dist and file hasura are packed as a package.`json
{
"bin": {
"hasura": "./hasura"
},
"files": ["dist", "hasura"]
}
`However, when publishing the package, the file
hasura is just a dummy 'text' file, not a binary file. The file will be replaced with a binary only when a client installs the package on Linux or macOS. On Windows, unlike Linux or macOS, the file hasura is to be removed, and a new file hasura.exe will be created. postinstall lifecycle hook executes dist/index.js, which would install the platform-specific binary.The binaries are hosted on GitHub as release assets.
src/asset.ts exposes functions of _"getting GitHub asset URL"_ and _"downloading the asset from the URL"_. src/install.ts exposes a function of _"composing them and handling how the installation should be processed"_. src/index.ts` uses the function to install the asset with some additional control.MIT License. Copyright © 2019, GIL B. Chan <bnbcmindnpass@gmail.com>