medusa-plugin-elasticsearch 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/api/admin/elasticsearch/sync/route.d.ts +2 -0
- package/.medusa/server/api/admin/elasticsearch/sync/route.js +13 -0
- package/.medusa/server/api/admin/elasticsearch/sync/route.js.map +1 -0
- package/.medusa/server/api/middlewares.d.ts +2 -0
- package/.medusa/server/api/middlewares.js +24 -0
- package/.medusa/server/api/middlewares.js.map +1 -0
- package/.medusa/server/api/store/categories/search/route.d.ts +9 -0
- package/.medusa/server/api/store/categories/search/route.js +17 -0
- package/.medusa/server/api/store/categories/search/route.js.map +1 -0
- package/.medusa/server/api/store/categories/search/validators.d.ts +17 -0
- package/.medusa/server/api/store/categories/search/validators.js +11 -0
- package/.medusa/server/api/store/categories/search/validators.js.map +1 -0
- package/.medusa/server/api/store/products/search/route.d.ts +9 -0
- package/.medusa/server/api/store/products/search/route.js +17 -0
- package/.medusa/server/api/store/products/search/route.js.map +1 -0
- package/.medusa/server/api/store/products/search/validators.d.ts +17 -0
- package/.medusa/server/api/store/products/search/validators.js +11 -0
- package/.medusa/server/api/store/products/search/validators.js.map +1 -0
- package/.medusa/server/jobs/elasticsearch-reindex.d.ts +6 -0
- package/.medusa/server/jobs/elasticsearch-reindex.js +17 -0
- package/.medusa/server/jobs/elasticsearch-reindex.js.map +1 -0
- package/.medusa/server/modules/elasticsearch/index.d.ts +6 -0
- package/.medusa/server/modules/elasticsearch/index.js +13 -0
- package/.medusa/server/modules/elasticsearch/index.js.map +1 -0
- package/.medusa/server/modules/elasticsearch/loaders/initialize.d.ts +2 -0
- package/.medusa/server/modules/elasticsearch/loaders/initialize.js +14 -0
- package/.medusa/server/modules/elasticsearch/loaders/initialize.js.map +1 -0
- package/.medusa/server/modules/elasticsearch/service.d.ts +20 -0
- package/.medusa/server/modules/elasticsearch/service.js +122 -0
- package/.medusa/server/modules/elasticsearch/service.js.map +1 -0
- package/.medusa/server/modules/elasticsearch/types.d.ts +23 -0
- package/.medusa/server/modules/elasticsearch/types.js.map +1 -0
- package/.medusa/server/src/admin/index.js +32419 -0
- package/.medusa/server/src/admin/index.mjs +32401 -0
- package/.medusa/server/subscribers/category-deleted.d.ts +5 -0
- package/.medusa/server/subscribers/category-deleted.js +14 -0
- package/.medusa/server/subscribers/category-deleted.js.map +1 -0
- package/.medusa/server/subscribers/category-upsert.d.ts +5 -0
- package/.medusa/server/subscribers/category-upsert.js +14 -0
- package/.medusa/server/subscribers/category-upsert.js.map +1 -0
- package/.medusa/server/subscribers/elasticsearch-sync.d.ts +3 -0
- package/.medusa/server/subscribers/elasticsearch-sync.js +86 -0
- package/.medusa/server/subscribers/elasticsearch-sync.js.map +1 -0
- package/.medusa/server/subscribers/product-deleted.d.ts +5 -0
- package/.medusa/server/subscribers/product-deleted.js +14 -0
- package/.medusa/server/subscribers/product-deleted.js.map +1 -0
- package/.medusa/server/subscribers/product-upsert.d.ts +5 -0
- package/.medusa/server/subscribers/product-upsert.js +14 -0
- package/.medusa/server/subscribers/product-upsert.js.map +1 -0
- package/.medusa/server/types/index.d.ts +1 -0
- package/.medusa/server/types/index.js +3 -0
- package/.medusa/server/types/index.js.map +1 -0
- package/.medusa/server/utils/transformer.d.ts +16 -0
- package/.medusa/server/utils/transformer.js +76 -0
- package/.medusa/server/utils/transformer.js.map +1 -0
- package/.medusa/server/workflows/delete-categories-from-elasticsearch.d.ts +5 -0
- package/.medusa/server/workflows/delete-categories-from-elasticsearch.js +15 -0
- package/.medusa/server/workflows/delete-categories-from-elasticsearch.js.map +1 -0
- package/.medusa/server/workflows/delete-products-from-elasticsearch.d.ts +5 -0
- package/.medusa/server/workflows/delete-products-from-elasticsearch.js +15 -0
- package/.medusa/server/workflows/delete-products-from-elasticsearch.js.map +1 -0
- package/.medusa/server/workflows/index.d.ts +4 -0
- package/.medusa/server/workflows/index.js +12 -0
- package/.medusa/server/workflows/index.js.map +1 -0
- package/.medusa/server/workflows/sync-categories-to-elasticsearch.d.ts +8 -0
- package/.medusa/server/workflows/sync-categories-to-elasticsearch.js +59 -0
- package/.medusa/server/workflows/sync-categories-to-elasticsearch.js.map +1 -0
- package/.medusa/server/workflows/sync-products-to-elasticsearch.d.ts +8 -0
- package/.medusa/server/workflows/sync-products-to-elasticsearch.js +70 -0
- package/.medusa/server/workflows/sync-products-to-elasticsearch.js.map +1 -0
- package/README.md +338 -122
- package/package.json +62 -29
- package/dist/loaders/index.d.ts +0 -4
- package/dist/loaders/index.js +0 -17
- package/dist/loaders/index.js.map +0 -1
- package/dist/services/elasticsearch.d.ts +0 -19
- package/dist/services/elasticsearch.js +0 -96
- package/dist/services/elasticsearch.js.map +0 -1
- package/dist/types.d.ts +0 -21
- package/dist/types.js.map +0 -1
- package/dist/utils/transformer.d.ts +0 -1
- package/dist/utils/transformer.js +0 -42
- package/dist/utils/transformer.js.map +0 -1
- /package/{dist → .medusa/server/modules/elasticsearch}/types.js +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const eventModuleService = req.scope.resolve(utils_1.Modules.EVENT_BUS);
|
|
7
|
+
await eventModuleService.emit({
|
|
8
|
+
name: 'elasticsearch.sync',
|
|
9
|
+
data: {},
|
|
10
|
+
});
|
|
11
|
+
res.json({ message: 'Syncing products to Elasticsearch' });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/elasticsearch/sync/route.ts"],"names":[],"mappings":";;AAGA,oBASC;AAXD,qDAAmD;AAE5C,KAAK,UAAU,IAAI,CAAC,GAAkB,EAAE,GAAmB;IAChE,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAO,CAAC,SAAS,CAAC,CAAA;IAE/D,MAAM,kBAAkB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
const validators_1 = require("./store/products/search/validators");
|
|
5
|
+
const validators_2 = require("./store/categories/search/validators");
|
|
6
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
7
|
+
routes: [
|
|
8
|
+
{
|
|
9
|
+
matcher: '/store/products/search',
|
|
10
|
+
method: 'POST',
|
|
11
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.PostStoreProductsSearchSchema)],
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
matcher: '/store/categories/search',
|
|
15
|
+
method: 'POST',
|
|
16
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_2.PostStoreCategoriesSearchSchema)],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
matcher: '/admin/elasticsearch/*',
|
|
20
|
+
middlewares: [(0, http_1.authenticate)('user', ['session', 'bearer', 'api-key'])],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=middlewares.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../src/api/middlewares.ts"],"names":[],"mappings":";;AAAA,mDAIiC;AACjC,mEAAkF;AAClF,qEAAsF;AAEtF,kBAAe,IAAA,wBAAiB,EAAC;IAC/B,MAAM,EAAE;QACN;YACE,OAAO,EAAE,wBAAwB;YACjC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,CAAC,IAAA,+BAAwB,EAAC,0CAA6B,CAAC,CAAC;SACvE;QACD;YACE,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,CAAC,IAAA,+BAAwB,EAAC,4CAA+B,CAAC,CAAC;SACzE;QACD;YACE,OAAO,EAAE,wBAAwB;YACjC,WAAW,EAAE,CAAC,IAAA,mBAAY,EAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;SACtE;KACF;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
|
|
2
|
+
type SearchBody = {
|
|
3
|
+
q: string;
|
|
4
|
+
offset?: number;
|
|
5
|
+
limit?: number;
|
|
6
|
+
filter?: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
export declare function POST(req: MedusaRequest<SearchBody>, res: MedusaResponse): Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const elasticsearch_1 = require("../../../../modules/elasticsearch");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const elasticsearchService = req.scope.resolve(elasticsearch_1.ELASTICSEARCH_MODULE);
|
|
7
|
+
const { q, offset, limit, filter } = req.body;
|
|
8
|
+
const results = await elasticsearchService.search(q, 'categories', {
|
|
9
|
+
paginationOptions: {
|
|
10
|
+
offset: offset ?? 0,
|
|
11
|
+
limit: limit ?? 20,
|
|
12
|
+
},
|
|
13
|
+
filter,
|
|
14
|
+
});
|
|
15
|
+
res.json(results);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/categories/search/route.ts"],"names":[],"mappings":";;AAWA,oBAkBC;AA5BD,qEAAwE;AAUjE,KAAK,UAAU,IAAI,CACxB,GAA8B,EAC9B,GAAmB;IAEnB,MAAM,oBAAoB,GACxB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoB,CAAC,CAAA;IAEzC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;IAE7C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE;QACjE,iBAAiB,EAAE;YACjB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB;QACD,MAAM;KACP,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const PostStoreCategoriesSearchSchema: z.ZodObject<{
|
|
3
|
+
q: z.ZodString;
|
|
4
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
q: string;
|
|
9
|
+
offset?: number | undefined;
|
|
10
|
+
limit?: number | undefined;
|
|
11
|
+
filter?: Record<string, unknown> | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
q: string;
|
|
14
|
+
offset?: number | undefined;
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
filter?: Record<string, unknown> | undefined;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostStoreCategoriesSearchSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.PostStoreCategoriesSearchSchema = zod_1.z.object({
|
|
6
|
+
q: zod_1.z.string(),
|
|
7
|
+
offset: zod_1.z.number().optional(),
|
|
8
|
+
limit: zod_1.z.number().optional(),
|
|
9
|
+
filter: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/api/store/categories/search/validators.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE;IACb,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
|
|
2
|
+
type SearchBody = {
|
|
3
|
+
q: string;
|
|
4
|
+
offset?: number;
|
|
5
|
+
limit?: number;
|
|
6
|
+
filter?: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
export declare function POST(req: MedusaRequest<SearchBody>, res: MedusaResponse): Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const elasticsearch_1 = require("../../../../modules/elasticsearch");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const elasticsearchService = req.scope.resolve(elasticsearch_1.ELASTICSEARCH_MODULE);
|
|
7
|
+
const { q, offset, limit, filter } = req.body;
|
|
8
|
+
const results = await elasticsearchService.search(q, 'products', {
|
|
9
|
+
paginationOptions: {
|
|
10
|
+
offset: offset ?? 0,
|
|
11
|
+
limit: limit ?? 20,
|
|
12
|
+
},
|
|
13
|
+
filter,
|
|
14
|
+
});
|
|
15
|
+
res.json(results);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/products/search/route.ts"],"names":[],"mappings":";;AAWA,oBAkBC;AA5BD,qEAAwE;AAUjE,KAAK,UAAU,IAAI,CACxB,GAA8B,EAC9B,GAAmB;IAEnB,MAAM,oBAAoB,GACxB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoB,CAAC,CAAA;IAEzC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;IAE7C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE;QAC/D,iBAAiB,EAAE;YACjB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB;QACD,MAAM;KACP,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const PostStoreProductsSearchSchema: z.ZodObject<{
|
|
3
|
+
q: z.ZodString;
|
|
4
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
q: string;
|
|
9
|
+
offset?: number | undefined;
|
|
10
|
+
limit?: number | undefined;
|
|
11
|
+
filter?: Record<string, unknown> | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
q: string;
|
|
14
|
+
offset?: number | undefined;
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
filter?: Record<string, unknown> | undefined;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostStoreProductsSearchSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.PostStoreProductsSearchSchema = zod_1.z.object({
|
|
6
|
+
q: zod_1.z.string(),
|
|
7
|
+
offset: zod_1.z.number().optional(),
|
|
8
|
+
limit: zod_1.z.number().optional(),
|
|
9
|
+
filter: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/api/store/products/search/validators.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,6BAA6B,GAAG,OAAC,CAAC,MAAM,CAAC;IACpD,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE;IACb,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = elasticsearchReindexJob;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
async function elasticsearchReindexJob(container) {
|
|
7
|
+
const eventModuleService = container.resolve(utils_1.Modules.EVENT_BUS);
|
|
8
|
+
await eventModuleService.emit({
|
|
9
|
+
name: 'elasticsearch.sync',
|
|
10
|
+
data: {},
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
exports.config = {
|
|
14
|
+
name: 'elasticsearch-daily-reindex',
|
|
15
|
+
schedule: '0 0 * * *', // daily at midnight
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=elasticsearch-reindex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elasticsearch-reindex.js","sourceRoot":"","sources":["../../../src/jobs/elasticsearch-reindex.ts"],"names":[],"mappings":";;;AAGA,0CASC;AAXD,qDAAmD;AAEpC,KAAK,UAAU,uBAAuB,CACnD,SAA0B;IAE1B,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,eAAO,CAAC,SAAS,CAAC,CAAA;IAE/D,MAAM,kBAAkB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC,CAAA;AACJ,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,WAAW,EAAE,oBAAoB;CAC5C,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import ElasticsearchModuleService from './service.js';
|
|
2
|
+
export declare const ELASTICSEARCH_MODULE = "elasticsearch";
|
|
3
|
+
declare const _default: import("@medusajs/types").ModuleExports<typeof ElasticsearchModuleService> & {
|
|
4
|
+
linkable: Record<string, any>;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ELASTICSEARCH_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_js_1 = __importDefault(require("./service.js"));
|
|
9
|
+
exports.ELASTICSEARCH_MODULE = 'elasticsearch';
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.ELASTICSEARCH_MODULE, {
|
|
11
|
+
service: service_js_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAkD;AAClD,8DAAqD;AAExC,QAAA,oBAAoB,GAAG,eAAe,CAAA;AAEnD,kBAAe,IAAA,cAAM,EAAC,4BAAoB,EAAE;IAC1C,OAAO,EAAE,oBAA0B;CACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = initializeElasticsearchLoader;
|
|
4
|
+
async function initializeElasticsearchLoader({ container, }) {
|
|
5
|
+
try {
|
|
6
|
+
const service = container.resolve('elasticsearch');
|
|
7
|
+
await service.initializeIndexes();
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
const logger = container.resolve('logger');
|
|
11
|
+
logger.warn(`Elasticsearch: failed to initialize indexes - ${err}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=initialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/modules/elasticsearch/loaders/initialize.ts"],"names":[],"mappings":";;AAGA,gDAYC;AAZc,KAAK,UAAU,6BAA6B,CAAC,EAC1D,SAAS,GACK;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAC/B,eAAe,CACc,CAAA;QAC/B,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAA;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,iDAAiD,GAAG,EAAE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Client } from '@elastic/elasticsearch';
|
|
2
|
+
import { ElasticsearchPluginOptions, IndexConfig, SearchOptions } from './types.js';
|
|
3
|
+
type InjectedDependencies = Record<string, unknown>;
|
|
4
|
+
export default class ElasticsearchModuleService {
|
|
5
|
+
protected readonly options_: ElasticsearchPluginOptions;
|
|
6
|
+
protected readonly client_: Client;
|
|
7
|
+
constructor(_: InjectedDependencies, options: ElasticsearchPluginOptions);
|
|
8
|
+
createIndex(indexName: string, options?: Record<string, unknown>): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesCreateResponse>;
|
|
9
|
+
getIndex(indexName: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesGetResponse>;
|
|
10
|
+
indexData(documents: Record<string, unknown>[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").BulkResponse | undefined>;
|
|
11
|
+
search(query: string, type: string, options?: SearchOptions): Promise<import("@elastic/elasticsearch/lib/api/types.js").SearchResponse<unknown, Record<string, import("@elastic/elasticsearch/lib/api/types.js").AggregationsAggregate>>>;
|
|
12
|
+
retrieveFromIndex(objectIDs: string[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").MgetResponse<unknown>>;
|
|
13
|
+
deleteFromIndex(objectIDs: string[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").BulkResponse | undefined>;
|
|
14
|
+
deleteAllDocuments(type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").DeleteByQueryResponse>;
|
|
15
|
+
updateSettings(indexName: string, config: IndexConfig): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesCreateResponse>;
|
|
16
|
+
initializeIndexes(): Promise<void>;
|
|
17
|
+
getIndexName(type: string): string;
|
|
18
|
+
private getTransformedDocuments;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const elasticsearch_1 = require("@elastic/elasticsearch");
|
|
4
|
+
const transformer_js_1 = require("../../utils/transformer.js");
|
|
5
|
+
class ElasticsearchModuleService {
|
|
6
|
+
constructor(_, options) {
|
|
7
|
+
this.options_ = options;
|
|
8
|
+
this.client_ = new elasticsearch_1.Client(options.config);
|
|
9
|
+
}
|
|
10
|
+
async createIndex(indexName, options) {
|
|
11
|
+
return this.client_.indices.create({
|
|
12
|
+
index: indexName,
|
|
13
|
+
...options,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async getIndex(indexName) {
|
|
17
|
+
return this.client_.indices.get({ index: indexName });
|
|
18
|
+
}
|
|
19
|
+
async indexData(documents, type) {
|
|
20
|
+
const indexName = this.getIndexName(type);
|
|
21
|
+
const transformed = this.getTransformedDocuments(type, documents);
|
|
22
|
+
if (!transformed.length) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
return this.client_.bulk({
|
|
26
|
+
refresh: true,
|
|
27
|
+
operations: transformed.flatMap((doc) => [
|
|
28
|
+
{ index: { _index: indexName, _id: doc.id } },
|
|
29
|
+
doc,
|
|
30
|
+
]),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async search(query, type, options) {
|
|
34
|
+
const indexName = this.getIndexName(type);
|
|
35
|
+
const { paginationOptions, filter, additionalOptions } = options || {};
|
|
36
|
+
return this.client_.search({
|
|
37
|
+
index: indexName,
|
|
38
|
+
q: query,
|
|
39
|
+
...(filter ? { body: { query: filter } } : {}),
|
|
40
|
+
...(paginationOptions?.offset !== undefined
|
|
41
|
+
? { from: paginationOptions.offset }
|
|
42
|
+
: {}),
|
|
43
|
+
...(paginationOptions?.limit !== undefined
|
|
44
|
+
? { size: paginationOptions.limit }
|
|
45
|
+
: {}),
|
|
46
|
+
...additionalOptions,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async retrieveFromIndex(objectIDs, type) {
|
|
50
|
+
const indexName = this.getIndexName(type);
|
|
51
|
+
return this.client_.mget({
|
|
52
|
+
index: indexName,
|
|
53
|
+
ids: objectIDs,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async deleteFromIndex(objectIDs, type) {
|
|
57
|
+
const indexName = this.getIndexName(type);
|
|
58
|
+
if (!objectIDs.length) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
return this.client_.bulk({
|
|
62
|
+
refresh: true,
|
|
63
|
+
operations: objectIDs.flatMap((id) => [
|
|
64
|
+
{ delete: { _index: indexName, _id: id } },
|
|
65
|
+
]),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async deleteAllDocuments(type) {
|
|
69
|
+
const indexName = this.getIndexName(type);
|
|
70
|
+
return this.client_.deleteByQuery({
|
|
71
|
+
index: indexName,
|
|
72
|
+
body: {
|
|
73
|
+
query: {
|
|
74
|
+
match_all: {},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async updateSettings(indexName, config) {
|
|
80
|
+
const { mappings, settings } = config;
|
|
81
|
+
const exists = await this.client_.indices.exists({
|
|
82
|
+
index: indexName,
|
|
83
|
+
});
|
|
84
|
+
if (exists) {
|
|
85
|
+
await this.client_.indices.delete({
|
|
86
|
+
index: indexName,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return this.createIndex(indexName, {
|
|
90
|
+
mappings,
|
|
91
|
+
settings,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
async initializeIndexes() {
|
|
95
|
+
const { settings } = this.options_;
|
|
96
|
+
if (!settings) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
await Promise.all(Object.entries(settings).map(([indexName, config]) => this.updateSettings(indexName, config)));
|
|
100
|
+
}
|
|
101
|
+
getIndexName(type) {
|
|
102
|
+
return type;
|
|
103
|
+
}
|
|
104
|
+
getTransformedDocuments(type, documents) {
|
|
105
|
+
if (!documents?.length) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const customTransformer = this.options_.settings?.[type]?.transformer;
|
|
109
|
+
if (customTransformer) {
|
|
110
|
+
return documents.map(customTransformer);
|
|
111
|
+
}
|
|
112
|
+
if (type === 'products') {
|
|
113
|
+
return documents.map(transformer_js_1.transformProduct);
|
|
114
|
+
}
|
|
115
|
+
if (type === 'categories') {
|
|
116
|
+
return documents.map(transformer_js_1.transformCategory);
|
|
117
|
+
}
|
|
118
|
+
return documents;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.default = ElasticsearchModuleService;
|
|
122
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ClientOptions } from '@elastic/elasticsearch';
|
|
2
|
+
import { IndicesIndexSettings, MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types';
|
|
3
|
+
export type SearchOptions = {
|
|
4
|
+
paginationOptions?: {
|
|
5
|
+
offset?: number;
|
|
6
|
+
limit?: number;
|
|
7
|
+
};
|
|
8
|
+
filter?: Record<string, unknown>;
|
|
9
|
+
additionalOptions?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export type ElasticIndexSettings = {
|
|
12
|
+
mappings?: MappingTypeMapping;
|
|
13
|
+
settings?: IndicesIndexSettings;
|
|
14
|
+
};
|
|
15
|
+
export type IndexConfig = ElasticIndexSettings & {
|
|
16
|
+
transformer?: (document: Record<string, unknown>) => Record<string, unknown>;
|
|
17
|
+
searchableAttributes?: string[];
|
|
18
|
+
attributesToRetrieve?: string[];
|
|
19
|
+
};
|
|
20
|
+
export type ElasticsearchPluginOptions = {
|
|
21
|
+
config: ClientOptions;
|
|
22
|
+
settings?: Record<string, IndexConfig>;
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/types.ts"],"names":[],"mappings":""}
|