aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/cli/.gitignore1
-rw-r--r--apps/cli/.npmignore4
-rw-r--r--apps/cli/package.json34
-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.json7
-rw-r--r--apps/cli/vite.config.mts21
-rw-r--r--docker/Dockerfile9
-rw-r--r--pnpm-lock.yaml35
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: