diff options
| -rw-r--r-- | apps/cli/.gitignore | 1 | ||||
| -rw-r--r-- | apps/cli/.npmignore | 4 | ||||
| -rw-r--r-- | apps/cli/package.json | 34 | ||||
| -rw-r--r-- | apps/cli/src/commands/bookmarks.ts (renamed from apps/cli/commands/bookmarks.ts) | 2 | ||||
| -rw-r--r-- | apps/cli/src/commands/lists.ts (renamed from apps/cli/commands/lists.ts) | 2 | ||||
| -rw-r--r-- | apps/cli/src/commands/tags.ts (renamed from apps/cli/commands/tags.ts) | 2 | ||||
| -rw-r--r-- | apps/cli/src/commands/whoami.ts (renamed from apps/cli/commands/whoami.ts) | 2 | ||||
| -rw-r--r-- | apps/cli/src/index.ts (renamed from apps/cli/index.ts) | 11 | ||||
| -rw-r--r-- | apps/cli/src/lib/globals.ts (renamed from apps/cli/lib/globals.ts) | 0 | ||||
| -rw-r--r-- | apps/cli/src/lib/trpc.ts (renamed from apps/cli/lib/trpc.ts) | 3 | ||||
| -rw-r--r-- | apps/cli/tsconfig.json | 7 | ||||
| -rw-r--r-- | apps/cli/vite.config.mts | 21 | ||||
| -rw-r--r-- | docker/Dockerfile | 9 | ||||
| -rw-r--r-- | pnpm-lock.yaml | 35 |
14 files changed, 88 insertions, 45 deletions
diff --git a/apps/cli/.gitignore b/apps/cli/.gitignore new file mode 100644 index 00000000..1521c8b7 --- /dev/null +++ b/apps/cli/.gitignore @@ -0,0 +1 @@ +dist diff --git a/apps/cli/.npmignore b/apps/cli/.npmignore new file mode 100644 index 00000000..18a504f5 --- /dev/null +++ b/apps/cli/.npmignore @@ -0,0 +1,4 @@ +.turbo/** +src/** +vite.config.mts +tsconfig.json diff --git a/apps/cli/package.json b/apps/cli/package.json index 87c02c3d..2878ad96 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,9 +1,20 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@hoarder/cli", - "version": "0.1.0", - "private": true, - "dependencies": { + "name": "@hoarderapp/cli", + "version": "0.12.1", + "description": "Command Line Interface (CLI) for Hoarder", + "license": "GNU Affero General Public License version 3", + "keywords": [ + "hoarder", + "cli" + ], + "exports": "./dist/index.mjs", + "bin": { + "hoarder": "dist/index.mjs" + }, + "devDependencies": { + "@hoarder/eslint-config": "workspace:^0.2.0", + "@hoarder/prettier-config": "workspace:^0.1.0", "@commander-js/extra-typings": "^12.0.1", "@hoarder/shared": "workspace:^0.1.0", "@hoarder/trpc": "workspace:^0.1.0", @@ -15,18 +26,21 @@ "commander": "^12.0.0", "superjson": "^2.2.1", "table": "^6.8.2", - "tsx": "^4.7.1" - }, - "devDependencies": { - "@hoarder/eslint-config": "workspace:^0.2.0", - "@hoarder/prettier-config": "workspace:^0.1.0" + "tsx": "^4.7.1", + "vite": "^5.1.0" }, "scripts": { - "run": "tsx index.ts", + "build": "vite build", + "run": "tsx src/index.ts", "lint": "eslint .", "format": "prettier . --ignore-path ../../.prettierignore", "typecheck": "tsc --noEmit" }, + "repository": { + "type": "git", + "url": "git+https://github.com/MohamedBassem/hoarder-app.git", + "directory": "apps/cli" + }, "eslintConfig": { "root": true, "extends": [ diff --git a/apps/cli/commands/bookmarks.ts b/apps/cli/src/commands/bookmarks.ts index 0da3dd71..264ad818 100644 --- a/apps/cli/commands/bookmarks.ts +++ b/apps/cli/src/commands/bookmarks.ts @@ -1,7 +1,7 @@ import * as fs from "node:fs"; +import { getAPIClient } from "@/lib/trpc"; import { Command } from "@commander-js/extra-typings"; import chalk from "chalk"; -import { getAPIClient } from "lib/trpc"; import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; diff --git a/apps/cli/commands/lists.ts b/apps/cli/src/commands/lists.ts index 099b7869..abf6f78c 100644 --- a/apps/cli/commands/lists.ts +++ b/apps/cli/src/commands/lists.ts @@ -1,5 +1,5 @@ +import { getAPIClient } from "@/lib/trpc"; import { Command } from "@commander-js/extra-typings"; -import { getAPIClient } from "lib/trpc"; import { getBorderCharacters, table } from "table"; import { listsToTree } from "@hoarder/shared/utils/listUtils"; diff --git a/apps/cli/commands/tags.ts b/apps/cli/src/commands/tags.ts index f9df83cd..f74f1df6 100644 --- a/apps/cli/commands/tags.ts +++ b/apps/cli/src/commands/tags.ts @@ -1,5 +1,5 @@ +import { getAPIClient } from "@/lib/trpc"; import { Command } from "@commander-js/extra-typings"; -import { getAPIClient } from "lib/trpc"; import { getBorderCharacters, table } from "table"; export const tagsCmd = new Command() diff --git a/apps/cli/commands/whoami.ts b/apps/cli/src/commands/whoami.ts index 2b32f2f0..b55bfa67 100644 --- a/apps/cli/commands/whoami.ts +++ b/apps/cli/src/commands/whoami.ts @@ -1,5 +1,5 @@ +import { getAPIClient } from "@/lib/trpc"; import { Command } from "@commander-js/extra-typings"; -import { getAPIClient } from "lib/trpc"; export const whoamiCmd = new Command() .name("whoami") diff --git a/apps/cli/index.ts b/apps/cli/src/index.ts index 5971b811..cdb2956e 100644 --- a/apps/cli/index.ts +++ b/apps/cli/src/index.ts @@ -1,9 +1,10 @@ +#! /usr/bin/env node +import { bookmarkCmd } from "@/commands/bookmarks"; +import { listsCmd } from "@/commands/lists"; +import { tagsCmd } from "@/commands/tags"; +import { whoamiCmd } from "@/commands/whoami"; +import { setGlobalOptions } from "@/lib/globals"; import { Command, Option } from "@commander-js/extra-typings"; -import { bookmarkCmd } from "commands/bookmarks"; -import { listsCmd } from "commands/lists"; -import { tagsCmd } from "commands/tags"; -import { whoamiCmd } from "commands/whoami"; -import { setGlobalOptions } from "lib/globals"; const program = new Command() .name("hoarder-cli") diff --git a/apps/cli/lib/globals.ts b/apps/cli/src/lib/globals.ts index 771136da..771136da 100644 --- a/apps/cli/lib/globals.ts +++ b/apps/cli/src/lib/globals.ts diff --git a/apps/cli/lib/trpc.ts b/apps/cli/src/lib/trpc.ts index 6f0dccfe..aa7aec21 100644 --- a/apps/cli/lib/trpc.ts +++ b/apps/cli/src/lib/trpc.ts @@ -1,10 +1,9 @@ +import { getGlobalOptions } from "@/lib/globals"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; import superjson from "superjson"; import type { AppRouter } from "@hoarder/trpc/routers/_app"; -import { getGlobalOptions } from "./globals"; - export function getAPIClient() { const globals = getGlobalOptions(); return createTRPCClient<AppRouter>({ diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index dc71844c..43577686 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -1,11 +1,14 @@ { "$schema": "https://json.schemastore.org/tsconfig", "extends": "@hoarder/tsconfig/node.json", - "include": ["**/*.ts"], - "exclude": ["node_modules"], + "include": ["src", "vite.config.mts"], + "exclude": ["node_modules", "dist"], "compilerOptions": { "baseUrl": ".", "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", "strictNullChecks": true, + "paths": { + "@/*": ["./src/*"] + } } } diff --git a/apps/cli/vite.config.mts b/apps/cli/vite.config.mts new file mode 100644 index 00000000..4c18902f --- /dev/null +++ b/apps/cli/vite.config.mts @@ -0,0 +1,21 @@ +// This file is shamelessly copied from immich's CLI vite config +// https://github.com/immich-app/immich/blob/main/cli/vite.config.ts +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +export default defineConfig({ + build: { + rollupOptions: { + input: "src/index.ts", + output: { + dir: "dist", + }, + }, + ssr: true, + }, + ssr: { + // bundle everything except for Node built-ins + noExternal: /^(?!node:).*$/, + }, + plugins: [tsconfigPaths()], +}); diff --git a/docker/Dockerfile b/docker/Dockerfile index 077a27bb..250c4c82 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -92,7 +92,9 @@ CMD ["pnpm", "run", "start:prod"] FROM base AS cli_builder -RUN --mount=type=cache,id=pnpm_cli,target=/pnpm/store pnpm deploy --node-linker=isolated --filter @hoarder/cli --prod /prod +WORKDIR /app/apps/cli + +RUN pnpm run build ################# The cli ############## @@ -100,12 +102,11 @@ FROM node:21-alpine AS cli WORKDIR /app -COPY --from=cli_builder /prod apps/cli +COPY --from=cli_builder /app/apps/cli/dist/index.mjs apps/cli/index.mjs WORKDIR /app/apps/cli -RUN npm config set update-notifier false ARG SERVER_VERSION=nightly ENV SERVER_VERSION=${SERVER_VERSION} -ENTRYPOINT ["npm", "exec", "--", "tsx", "index.ts"] +ENTRYPOINT ["node", "index.mjs"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1010473..471cdf35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -169,10 +169,16 @@ importers: version: 5.1.4(@types/node@20.11.20) apps/cli: - dependencies: + devDependencies: '@commander-js/extra-typings': specifier: ^12.0.1 version: 12.0.1(commander@12.0.0) + '@hoarder/eslint-config': + specifier: workspace:^0.2.0 + version: link:../../tooling/eslint + '@hoarder/prettier-config': + specifier: workspace:^0.1.0 + version: link:../../tooling/prettier '@hoarder/shared': specifier: workspace:^0.1.0 version: link:../../packages/shared @@ -206,13 +212,9 @@ importers: tsx: specifier: ^4.7.1 version: 4.7.1 - devDependencies: - '@hoarder/eslint-config': - specifier: workspace:^0.2.0 - version: link:../../tooling/eslint - '@hoarder/prettier-config': - specifier: workspace:^0.1.0 - version: link:../../tooling/prettier + vite: + specifier: ^5.1.0 + version: 5.1.4(@types/node@20.11.20) apps/landing: dependencies: @@ -14368,7 +14370,7 @@ snapshots: '@commander-js/extra-typings@12.0.1(commander@12.0.0)': dependencies: commander: 12.0.0 - dev: false + dev: true '@crxjs/vite-plugin@1.0.14(vite@5.1.4(@types/node@20.11.20))': dependencies: @@ -17781,7 +17783,6 @@ snapshots: '@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308)': dependencies: '@trpc/server': 11.0.0-next-beta.308 - dev: false '@trpc/next@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/react-query@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@11.0.0-next-beta.308)(next@14.1.4(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -17803,8 +17804,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) dev: false - '@trpc/server@11.0.0-next-beta.308': - dev: false + '@trpc/server@11.0.0-next-beta.308': {} '@trysound/sax@0.2.0': dev: false @@ -18841,7 +18841,7 @@ snapshots: dev: false astral-regex@2.0.0: - dev: false + dev: true astring@1.8.6: {} @@ -19745,7 +19745,7 @@ snapshots: dev: false commander@12.0.0: - dev: false + dev: true commander@2.20.3: {} @@ -23510,7 +23510,7 @@ snapshots: lodash.throttle@4.1.1: {} lodash.truncate@4.4.2: - dev: false + dev: true lodash.uniq@4.5.0: dev: false @@ -27377,7 +27377,7 @@ snapshots: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: false + dev: true slugify@1.6.6: dev: false @@ -27797,7 +27797,7 @@ snapshots: slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false + dev: true tailwind-merge@2.2.1: dependencies: @@ -28097,7 +28097,6 @@ snapshots: get-tsconfig: 4.7.2 optionalDependencies: fsevents: 2.3.3 - dev: false tunnel-agent@0.6.0: dependencies: |
