diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1d5060a..d271ec6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: "node-test": name: "Build and test on Node.js" - runs-on: "ubuntu-latest" + runs-on: ubuntu-latest strategy: matrix: "node-version": ["14.x", "18.x"] diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml new file mode 100644 index 0000000..7ade6fe --- /dev/null +++ b/.github/workflows/pages.yaml @@ -0,0 +1,43 @@ +name: "GitHub Pages" +on: + push: + branches: ["main"] + +jobs: + "build": + name: "Build the docs" + runs-on: ubuntu-latest + steps: + - name: "Checkout this repo" + uses: actions/checkout@v3 + - name: "Setup Node.js" + uses: actions/setup-node@v3 + with: + node-version: "${{ matrix.node-version }}" + cache: "npm" + - name: "Install npm dependencies" + run: "npm ci" + - name: "Build" + run: "npm run typedoc" + - name: "Upload GitHub Pages artifact" + uses: actions/upload-pages-artifact@v1 + with: + path: "./docs" + + "deploy": + name: "Deploy the docs to GitHub Pages" + needs: "build" + permissions: + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: "Deploy to GitHub Pages" + id: deployment + uses: actions/deploy-pages@v1 + diff --git a/.gitignore b/.gitignore index 9f8abde..ccb9581 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules /lib-esm /lib-cjs +/docs *.tsbuildinfo Session.vim diff --git a/package-lock.json b/package-lock.json index f18a88a..b015c94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@types/jest": "^29.4.0", "jest": "^29.4.0", "ts-jest": "^29.0.5", + "typedoc": "^0.23.28", "typescript": "^4.9.4" } }, @@ -1039,6 +1040,12 @@ "node": ">=8" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, "node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -2437,6 +2444,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/kleur": { "version": "3.0.3", "dev": true, @@ -2482,6 +2495,12 @@ "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "node_modules/make-dir": { "version": "3.1.0", "dev": true, @@ -2509,6 +2528,18 @@ "tmpl": "1.0.5" } }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "dev": true, @@ -2853,6 +2884,18 @@ "node": ">=8" } }, + "node_modules/shiki": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.1.tgz", + "integrity": "sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "dev": true, @@ -3117,6 +3160,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedoc": { + "version": "0.23.28", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", + "integrity": "sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.2.12", + "minimatch": "^7.1.3", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "4.9.5", "dev": true, @@ -3172,6 +3260,18 @@ "dev": true, "license": "MIT" }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, "node_modules/walker": { "version": "1.0.8", "dev": true, diff --git a/package.json b/package.json index ddc024e..add9100 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "clean-build": "npm run clean && npm run build", "typecheck": "tsc --noEmit", - "test": "jest" + "test": "jest", + "typedoc": "rm -rf ./docs && typedoc" }, "dependencies": { @@ -55,6 +56,7 @@ "@types/jest": "^29.4.0", "jest": "^29.4.0", "ts-jest": "^29.0.5", + "typedoc": "^0.23.28", "typescript": "^4.9.4" } } diff --git a/src/batch.ts b/src/batch.ts index fc02ea2..fd10f48 100644 --- a/src/batch.ts +++ b/src/batch.ts @@ -64,6 +64,7 @@ export class Batch { export class BatchStep { #batch: Batch; #conditions: Array; + /** @private */ _index: number | undefined; /** @private */ diff --git a/src/errors.ts b/src/errors.ts index c23f0df..2e47056 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -2,6 +2,7 @@ import type * as proto from "./proto.js"; /** Generic error produced by the Hrana client. */ export class ClientError extends Error { + /** @private */ constructor(message: string) { super(message); this.name = "ClientError"; @@ -10,6 +11,7 @@ export class ClientError extends Error { /** Error thrown when the server violates the protocol. */ export class ProtoError extends ClientError { + /** @private */ constructor(message: string) { super(message); this.name = "ProtoError"; @@ -18,8 +20,10 @@ export class ProtoError extends ClientError { /** Error thrown when the server returns an error response. */ export class ResponseError extends ClientError { + /** @internal */ proto: proto.Error + /** @private */ constructor(message: string, protoError: proto.Error) { super(message); this.name = "ResponseError"; @@ -30,6 +34,7 @@ export class ResponseError extends ClientError { /** Error thrown when the client or stream is closed. */ export class ClosedError extends ClientError { + /** @private */ constructor(message: string, cause: Error) { super(message); this.cause = cause; diff --git a/src/index.ts b/src/index.ts index 07c972e..8e0322f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,12 +6,14 @@ import type * as proto from "./proto.js"; export { Client } from "./client.js"; export * from "./errors.js"; export { Batch, BatchStep, BatchCond } from "./batch.js"; +/** @internal */ export * as raw from "./raw.js"; export type { StmtResult, RowsResult, RowResult, ValueResult, Row } from "./result.js"; export type { InStmt, InStmtArgs } from "./stmt.js"; export { Stmt } from "./stmt.js"; export { Stream } from "./stream.js"; export type { Value, InValue } from "./value.js"; +/** @internal */ export type { proto }; /** Open a Hrana client connected to the given `url`. */ diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..d3e5315 --- /dev/null +++ b/typedoc.json @@ -0,0 +1,10 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "docs", + "excludePrivate": true, + "excludeInternal": true, + "visibilityFilters": { + "inherited": true, + "external": true + } +}