feat: 添加meilisearch hook
This commit is contained in:
10
package-lock.json
generated
10
package-lock.json
generated
@ -7,8 +7,12 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "directus-extension-meili-sync",
|
"name": "directus-extension-meili-sync",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"meilisearch": "^0.53.0"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@directus/extensions-sdk": "16.0.2",
|
"@directus/extensions-sdk": "16.0.2",
|
||||||
|
"@types/node": "^24.8.1",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"vue": "^3.5.22"
|
"vue": "^3.5.22"
|
||||||
}
|
}
|
||||||
@ -3840,6 +3844,12 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "CC0-1.0"
|
"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": {
|
"node_modules/micromustache": {
|
||||||
"version": "8.0.3",
|
"version": "8.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/micromustache/-/micromustache-8.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/micromustache/-/micromustache-8.0.3.tgz",
|
||||||
|
|||||||
11
package.json
11
package.json
@ -23,6 +23,11 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"name": "meilisearch_module",
|
"name": "meilisearch_module",
|
||||||
"source": "src/meilisearch_module/index.ts"
|
"source": "src/meilisearch_module/index.ts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hook",
|
||||||
|
"name": "meilisearch_hook",
|
||||||
|
"source": "src/meilisearch_hook/index.ts"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"host": "^10.10.0"
|
"host": "^10.10.0"
|
||||||
@ -37,6 +42,10 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@directus/extensions-sdk": "16.0.2",
|
"@directus/extensions-sdk": "16.0.2",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"vue": "^3.5.22"
|
"vue": "^3.5.22",
|
||||||
|
"@types/node": "^24.8.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"meilisearch": "^0.53.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
45
src/meilisearch_hook/index.ts
Normal file
45
src/meilisearch_hook/index.ts
Normal file
@ -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!');
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user