From 384617fc64a514b75ce85d50fcf433f228642b68 Mon Sep 17 00:00:00 2001 From: R2m1liA <15258427350@163.com> Date: Tue, 21 Oct 2025 05:15:21 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0meilisearch=20hook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 10 ++++++++ package.json | 11 ++++++++- src/meilisearch_hook/index.ts | 45 +++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/meilisearch_hook/index.ts diff --git a/package-lock.json b/package-lock.json index 9354608..031710b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,12 @@ "": { "name": "directus-extension-meili-sync", "version": "1.0.0", + "dependencies": { + "meilisearch": "^0.53.0" + }, "devDependencies": { "@directus/extensions-sdk": "16.0.2", + "@types/node": "^24.8.1", "typescript": "^5.9.3", "vue": "^3.5.22" } @@ -3840,6 +3844,12 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/meilisearch": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.53.0.tgz", + "integrity": "sha512-nG4VXbEOSzUmtbfsgOo+t6yX1ECEgXaT4hC0ap9MBpQGK5xwT+NWYDENYsKWR75cVaWaAqva+ok4zHlgtdXlLw==", + "license": "MIT" + }, "node_modules/micromustache": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/micromustache/-/micromustache-8.0.3.tgz", diff --git a/package.json b/package.json index 10eb734..2d1a310 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,11 @@ "type": "module", "name": "meilisearch_module", "source": "src/meilisearch_module/index.ts" + }, + { + "type": "hook", + "name": "meilisearch_hook", + "source": "src/meilisearch_hook/index.ts" } ], "host": "^10.10.0" @@ -37,6 +42,10 @@ "devDependencies": { "@directus/extensions-sdk": "16.0.2", "typescript": "^5.9.3", - "vue": "^3.5.22" + "vue": "^3.5.22", + "@types/node": "^24.8.1" + }, + "dependencies": { + "meilisearch": "^0.53.0" } } diff --git a/src/meilisearch_hook/index.ts b/src/meilisearch_hook/index.ts new file mode 100644 index 0000000..d292ddd --- /dev/null +++ b/src/meilisearch_hook/index.ts @@ -0,0 +1,45 @@ +import { defineHook } from '@directus/extensions-sdk'; + +export default defineHook(async ({ filter, action }, { services, getSchema }) => { + const { CollectionsService } = services; + const collectionsService = new CollectionsService({ schema: await getSchema() }); + + const exist = await collectionsService.readOne('meili_index_configs').then(() => true).catch(() => false); + if (!exist) { + console.log('Creating meili_index_configs collection...'); + + await collectionsService.createOne({ + collection: 'meili_index_configs', + meta: { + note: '配置哪些集合需要被索引到 MeiliSearch', + icon: 'search', + hidden: true, + system: true, + }, + schema: { + name: 'meili_index_configs', + }, + fields: [ + { field: 'collection_name', type: 'string', meta: { note: '要索引的集合名', interface: 'input' } }, + { field: 'index_name', type: 'string', meta: { note: 'MeiliSearch 索引名称', interface: 'input' } }, + { field: 'fields', type: 'json', meta: { note: '要索引的字段数组', interface: 'code-editor' } }, + { field: 'enabled', type: 'boolean', meta: { note: '是否启用', interface: 'boolean' } }, + { field: 'settings', type: 'json', meta: { note: 'MeiliSearch 索引设置', interface: 'code-editor' } }, + ], + }).then(() => { + console.log('meili_index_configs collection created successfully.'); + }).catch((e) => { + console.error('Error creating meili_index_configs collection:', e); + }) + } else { + console.log('meili_index_configs collection already exists.'); + } + + filter('items.create', () => { + console.log('Creating Item!'); + }); + + action('items.create', () => { + console.log('Item created!'); + }); +});