diff --git a/.npmrc b/.npmrc index 7446745..76ac12d 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,2 @@ -//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN} -//registry.npmjs.org/:_authToken=${NPM_TOKEN} \ No newline at end of file +//npm.cnb.cool/kevisual/registry/-/packages/:_authToken=${CNB_API_KEY} +//registry.npmjs.org/:_authToken=${NPM_TOKEN} diff --git a/package.json b/package.json index 942dd85..d544660 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,12 @@ "description": "", "main": "index.js", "scripts": { - "dev": "echo \"Error: no test specified\" && exit 1" + "build": "bun run bun.config.ts" }, "keywords": [], + "files": [ + "dist" + ], "author": "abearxiong (https://www.xiongxiao.me)", "license": "MIT", "packageManager": "pnpm@10.32.1", @@ -26,6 +29,10 @@ "eventemitter3": "^5.0.4" }, "exports": { - ".": "./dist/index.js" + ".": "./dist/app.js", + "./route": "./dist/app.js" + }, + "publishConfig": { + "access": "public" } } \ No newline at end of file diff --git a/src/app.ts b/src/app.ts index 18d2d5b..42d3f86 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,6 +6,7 @@ import { useKey, useContextKey } from '@kevisual/context'; export const app = useContextKey('app', new App()); export const manager = useContextKey('project-manager', new ProjectManager({ meiliSearchOptions: { + apiHost: 'http://localhost:7700', apiKey: useKey('CNB_TOKEN') } })); diff --git a/src/index.ts b/src/index.ts index 26b4582..23971eb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,8 +8,10 @@ import './routes/auth'; import './routes/project'; import './routes/search'; import './routes/file'; - +import { manager } from './app'; if (import.meta.main) { // -} \ No newline at end of file +} + +await manager.init(); \ No newline at end of file diff --git a/src/project/manager.ts b/src/project/manager.ts index 40f6cba..581b907 100644 --- a/src/project/manager.ts +++ b/src/project/manager.ts @@ -1,6 +1,6 @@ import { ProjectManagerInterface } from "./user-interface"; import { ProjectSearch } from "./project-search/index"; -import { ProjectStore } from "./project-store"; +import { ProjectStore, ProjectDoc } from "./project-store"; import { ProjectListener } from "./project-listener/listener"; import { EventEmitter } from "eventemitter3"; import fs from 'node:fs'; @@ -17,7 +17,15 @@ type Project = { }; export type ProjectInput = Omit; -export type ProjectInfo = Omit & { status: "active" | "inactive" }; +export type ProjectInfo = Omit & { + status: "active" | "inactive"; + id?: string; + title?: string; + tags?: string[]; + summary?: string; + description?: string; + link?: string; +}; type ProjectManagerOpt = { meiliSearchOptions?: { @@ -131,16 +139,23 @@ export class ProjectManager implements ProjectManagerInterface { console.log(`[ProjectManager] stopped: ${projectPath}`); } - getProjectInfo(project: Project): ProjectInfo { + async getProjectInfo(project: Project): Promise { const { listener, ...info } = project; + const storeDoc: ProjectDoc | null = await this.projectStore.getProject(info.path).catch(() => null); return { ...info, status: listener.isWatching ? "active" : "inactive", + id: storeDoc?.id, + title: storeDoc?.title, + tags: storeDoc?.tags, + summary: storeDoc?.summary, + description: storeDoc?.description, + link: storeDoc?.link, }; } - listProjects(): ProjectInfo[] { - return Array.from(this.projects.values()).map(p => this.getProjectInfo(p)); + async listProjects(): Promise { + return Promise.all(Array.from(this.projects.values()).map(p => this.getProjectInfo(p))); } async getFile(filepath: string): Promise<{ filepath: string, content: string; type: string } | null> { diff --git a/src/project/user-interface.ts b/src/project/user-interface.ts index a1df7af..281ea1a 100644 --- a/src/project/user-interface.ts +++ b/src/project/user-interface.ts @@ -1,6 +1,6 @@ export interface ProjectManagerInterface { removeProject(path: string): void; getProject(path: string): any; - listProjects(): any[]; + listProjects(): any[] | Promise; addProject(project: any): void; } \ No newline at end of file diff --git a/src/remote.ts b/src/remote.ts new file mode 100644 index 0000000..b419107 --- /dev/null +++ b/src/remote.ts @@ -0,0 +1,14 @@ +import { app, manager } from './index' +import { RemoteApp } from '@kevisual/remote-app' + +app.createRouteList() +const remote = new RemoteApp({ + app, + id: 'project-search', + username: 'root' +}); +const isConnect = await remote.isConnect(); +if (isConnect) { + console.log('Remote app connected successfully', isConnect); + remote.listenProxy(); +} \ No newline at end of file diff --git a/src/routes/project.ts b/src/routes/project.ts index 919bd90..5fd708c 100644 --- a/src/routes/project.ts +++ b/src/routes/project.ts @@ -104,7 +104,7 @@ app ctx.throw(404, '项目不存在'); return; } - ctx.body = { success: true, data: manager.getProjectInfo(project) }; + ctx.body = { data: await manager.getProjectInfo(project) }; }) .addTo(app); @@ -119,7 +119,7 @@ app middleware: ['auth-admin'], }) .define(async (ctx) => { - ctx.body = { list: manager.listProjects() }; + ctx.body = { list: await manager.listProjects() }; }) .addTo(app);