payload-ai 0.0.1 → 0.0.3
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/LICENSE +1 -1
- package/README.md +70 -22
- package/dev/package.json +3 -3
- package/dev/src/collections/ExamplesWithVersions.ts +21 -0
- package/dev/src/payload.config.ts +6 -3
- package/dist/access/admins.d.ts +4 -0
- package/dist/access/admins.js +12 -0
- package/dist/access/admins.js.map +1 -0
- package/dist/access/adminsOrPublished.d.ts +2 -0
- package/dist/access/adminsOrPublished.js +18 -0
- package/dist/access/adminsOrPublished.js.map +1 -0
- package/dist/access/anyone.d.ts +2 -0
- package/dist/access/anyone.js +6 -0
- package/dist/access/anyone.js.map +1 -0
- package/dist/access/checkRole.d.ts +1 -0
- package/dist/access/checkRole.js +18 -0
- package/dist/access/checkRole.js.map +1 -0
- package/dist/aiTranslate.d.ts +4 -2
- package/dist/aiTranslate.js +85 -152
- package/dist/aiTranslate.js.map +1 -1
- package/dist/components/Translator/index.js +17 -13
- package/dist/components/Translator/index.js.map +1 -1
- package/dist/deepCompareAndMerge.d.ts +5 -0
- package/dist/deepCompareAndMerge.js +101 -0
- package/dist/deepCompareAndMerge.js.map +1 -0
- package/dist/handleTranslate.d.ts +2 -2
- package/dist/handleTranslate.js +35 -8
- package/dist/handleTranslate.js.map +1 -1
- package/dist/plugin.js +27 -28
- package/dist/plugin.js.map +1 -1
- package/dist/stringTranslations.d.ts +3 -0
- package/dist/stringTranslations.js +162 -0
- package/dist/stringTranslations.js.map +1 -0
- package/dist/translateTextAndObjects.d.ts +1 -0
- package/dist/translateTextAndObjects.js +81 -0
- package/dist/translateTextAndObjects.js.map +1 -0
- package/package.json +3 -3
- package/src/access/admins.ts +11 -0
- package/src/access/adminsOrPublished.ts +16 -0
- package/src/access/anyone.ts +3 -0
- package/src/access/checkRole.ts +16 -0
- package/src/aiTranslate.ts +76 -140
- package/src/components/Translator/index.tsx +7 -7
- package/src/deepCompareAndMerge.ts +77 -0
- package/src/handleTranslate.ts +23 -27
- package/src/plugin.ts +37 -42
- package/src/stringTranslations.ts +133 -0
- package/src/translateTextAndObjects.ts +35 -0
- package/.github/workflows/publish.yml +0 -21
- package/.github/workflows/test.yml +0 -20
- package/dist/newCollection.d.ts +0 -3
- package/dist/newCollection.js +0 -16
- package/dist/newCollection.js.map +0 -1
- package/src/newCollection.ts +0 -16
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,12 +1,77 @@
|
|
|
1
|
-
# Payload
|
|
1
|
+
# Payload AI
|
|
2
2
|
|
|
3
|
-
Translate content to different languages using GPT.
|
|
3
|
+
Translate content to different languages using OpenAI's GPT.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
### How to install the plugin
|
|
7
|
+
|
|
8
|
+
Install via npm:
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
npm install payload-ai
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or yarn:
|
|
16
|
+
```
|
|
17
|
+
yarn add payload-ai
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
To install the plugin, simply add it to your payload.config() in the Plugin array.
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import payloadAi from 'payload-ai';
|
|
24
|
+
|
|
25
|
+
export const config = buildConfig({
|
|
26
|
+
plugins: [
|
|
27
|
+
// You can pass options to the plugin
|
|
28
|
+
payloadAi({
|
|
29
|
+
enabled: true,
|
|
30
|
+
}),
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Collection translation
|
|
36
|
+
|
|
37
|
+
Add the `collections` where you want to enable the translation and the `fields`. It will translate each field (also nested fields) on every update of the default language.
|
|
38
|
+
|
|
39
|
+
```jsx
|
|
40
|
+
plugins: [
|
|
41
|
+
aiTranslatorPlugin({
|
|
42
|
+
enabled: true,
|
|
43
|
+
collections: {
|
|
44
|
+
examples: {
|
|
45
|
+
fields: ['stringText', 'richText'],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
],
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### String translation
|
|
54
|
+
|
|
55
|
+
Use this to provide a [backend](https://github.com/i18next/i18next-http-backend) for [i18next](https://www.i18next.com) string translations.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
```jsx
|
|
59
|
+
plugins: [
|
|
60
|
+
aiTranslatorPlugin({
|
|
61
|
+
enabled: true,
|
|
62
|
+
stringTranslation: {
|
|
63
|
+
enabled: true
|
|
64
|
+
}
|
|
65
|
+
}),
|
|
66
|
+
],
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Generate SEO
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
### Planned features
|
|
6
73
|
|
|
7
74
|
- generate image alt text from GPT
|
|
8
|
-
- generate by field
|
|
9
|
-
- string translation using i18next
|
|
10
75
|
- generate SEO Text
|
|
11
76
|
- generate structured content
|
|
12
77
|
- custom access control
|
|
@@ -20,26 +85,9 @@ To build your own Payload plugin, all you need is:
|
|
|
20
85
|
* An understanding of the basic Payload concepts
|
|
21
86
|
* And some JavaScript/Typescript experience
|
|
22
87
|
|
|
23
|
-
## Background
|
|
24
|
-
|
|
25
|
-
Here is a short recap on how to integrate plugins with Payload, to learn more visit the [plugin overview page](https://payloadcms.com/docs/plugins/overview).
|
|
26
|
-
|
|
27
|
-
### How to install a plugin
|
|
28
88
|
|
|
29
|
-
To install any plugin, simply add it to your payload.config() in the Plugin array.
|
|
30
89
|
|
|
31
|
-
```ts
|
|
32
|
-
import samplePlugin from 'sample-plugin';
|
|
33
90
|
|
|
34
|
-
export const config = buildConfig({
|
|
35
|
-
plugins: [
|
|
36
|
-
// You can pass options to the plugin
|
|
37
|
-
samplePlugin({
|
|
38
|
-
enabled: true,
|
|
39
|
-
}),
|
|
40
|
-
]
|
|
41
|
-
});
|
|
42
|
-
```
|
|
43
91
|
|
|
44
92
|
### Initialization
|
|
45
93
|
|
package/dev/package.json
CHANGED
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@payloadcms/bundler-webpack": "^1.0.0",
|
|
20
|
-
"@payloadcms/db-mongodb": "^1.
|
|
20
|
+
"@payloadcms/db-mongodb": "^1.2.0",
|
|
21
21
|
"@payloadcms/plugin-cloud": "^2.0.0",
|
|
22
|
-
"@payloadcms/richtext-slate": "^1.
|
|
22
|
+
"@payloadcms/richtext-slate": "^1.3.1",
|
|
23
23
|
"cross-env": "^7.0.3",
|
|
24
24
|
"dotenv": "^8.2.0",
|
|
25
25
|
"express": "^4.17.1",
|
|
26
|
-
"payload": "^2.
|
|
26
|
+
"payload": "^2.6.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/express": "^4.17.9",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CollectionConfig } from 'payload/types'
|
|
2
|
+
|
|
3
|
+
// Example Collection - For reference only, this must be added to payload.config.ts to be used.
|
|
4
|
+
const ExamplesWithVersions: CollectionConfig = {
|
|
5
|
+
slug: 'examples-with-versions',
|
|
6
|
+
admin: {
|
|
7
|
+
useAsTitle: 'someField',
|
|
8
|
+
},
|
|
9
|
+
versions: {
|
|
10
|
+
drafts: true,
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: 'richText',
|
|
15
|
+
type: 'text',
|
|
16
|
+
localized: true,
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default ExamplesWithVersions
|
|
@@ -6,6 +6,7 @@ import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
|
|
6
6
|
import { webpackBundler } from '@payloadcms/bundler-webpack'
|
|
7
7
|
import { slateEditor } from '@payloadcms/richtext-slate'
|
|
8
8
|
import { aiTranslatorPlugin } from '../../src/index'
|
|
9
|
+
import ExamplesWithVersions from './collections/ExamplesWithVersions'
|
|
9
10
|
|
|
10
11
|
export default buildConfig({
|
|
11
12
|
admin: {
|
|
@@ -28,7 +29,7 @@ export default buildConfig({
|
|
|
28
29
|
},
|
|
29
30
|
},
|
|
30
31
|
editor: slateEditor({}),
|
|
31
|
-
collections: [Examples, Users],
|
|
32
|
+
collections: [Examples, ExamplesWithVersions, Users],
|
|
32
33
|
localization: {
|
|
33
34
|
locales: ['en', 'es', 'de'],
|
|
34
35
|
defaultLocale: 'en',
|
|
@@ -45,8 +46,10 @@ export default buildConfig({
|
|
|
45
46
|
enabled: true,
|
|
46
47
|
collections: {
|
|
47
48
|
examples: {
|
|
48
|
-
fields: ['richText'],
|
|
49
|
-
|
|
49
|
+
fields: ['stringText', 'richText'],
|
|
50
|
+
},
|
|
51
|
+
'examples-with-versions': {
|
|
52
|
+
fields: ['stringText', 'richText'],
|
|
50
53
|
},
|
|
51
54
|
},
|
|
52
55
|
}),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.admins = void 0;
|
|
4
|
+
var checkRole_1 = require("./checkRole");
|
|
5
|
+
var admins = function (_a) {
|
|
6
|
+
var user = _a.req.user;
|
|
7
|
+
if (!user)
|
|
8
|
+
return false;
|
|
9
|
+
return (0, checkRole_1.checkRole)(['admin'], user);
|
|
10
|
+
};
|
|
11
|
+
exports.admins = admins;
|
|
12
|
+
//# sourceMappingURL=admins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admins.js","sourceRoot":"","sources":["../../src/access/admins.ts"],"names":[],"mappings":";;;AAEA,yCAAuC;AAKhC,IAAM,MAAM,GAAY,UAAC,EAAiB;QAAR,IAAI,cAAA;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACvB,OAAO,IAAA,qBAAS,EAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC,CAAA;AAHY,QAAA,MAAM,UAGlB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adminsOrPublished = void 0;
|
|
4
|
+
var checkRole_1 = require("./checkRole");
|
|
5
|
+
var adminsOrPublished = function (_a) {
|
|
6
|
+
var user = _a.req.user;
|
|
7
|
+
if (user && (0, checkRole_1.checkRole)(['admin'], user)) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
return {
|
|
12
|
+
_status: {
|
|
13
|
+
equals: 'published',
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
exports.adminsOrPublished = adminsOrPublished;
|
|
18
|
+
//# sourceMappingURL=adminsOrPublished.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminsOrPublished.js","sourceRoot":"","sources":["../../src/access/adminsOrPublished.ts"],"names":[],"mappings":";;;AAEA,yCAAuC;AAEhC,IAAM,iBAAiB,GAAW,UAAC,EAAiB;QAAR,IAAI,cAAA;IACrD,IAAI,IAAI,IAAI,IAAA,qBAAS,EAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;QACtC,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,IAAI,CAAA;IACX,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,WAAW;SACpB;KACF,CAAA;AACH,CAAC,CAAA;AAXY,QAAA,iBAAiB,qBAW7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anyone.js","sourceRoot":"","sources":["../../src/access/anyone.ts"],"names":[],"mappings":";;;AAEO,IAAM,MAAM,GAAW,cAAM,OAAA,IAAI,EAAJ,CAAI,CAAA;AAA3B,QAAA,MAAM,UAAqB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const checkRole: (allRoles: any, user?: any) => boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//import type { User } from '../../payload-types'
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.checkRole = void 0;
|
|
5
|
+
var checkRole = function (allRoles /* User['roles'] = [] */, user) {
|
|
6
|
+
if (user) {
|
|
7
|
+
if (allRoles.some(function (role) {
|
|
8
|
+
var _a;
|
|
9
|
+
return (_a = user === null || user === void 0 ? void 0 : user.roles) === null || _a === void 0 ? void 0 : _a.some(function (individualRole) {
|
|
10
|
+
return individualRole === role;
|
|
11
|
+
});
|
|
12
|
+
}))
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
};
|
|
17
|
+
exports.checkRole = checkRole;
|
|
18
|
+
//# sourceMappingURL=checkRole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkRole.js","sourceRoot":"","sources":["../../src/access/checkRole.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;AAE1C,IAAM,SAAS,GAAG,UAAC,QAAa,CAAC,wBAAwB,EAAE,IAAU;IAC1E,IAAI,IAAI,EAAE;QACR,IACE,QAAQ,CAAC,IAAI,CAAC,UAAC,IAAS;;YACtB,OAAO,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,0CAAE,IAAI,CAAC,UAAC,cAAmB;gBAC3C,OAAO,cAAc,KAAK,IAAI,CAAA;YAChC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC;YAEF,OAAO,IAAI,CAAA;KACd;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAbY,QAAA,SAAS,aAarB"}
|
package/dist/aiTranslate.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CollectionAfterChangeHook } from 'payload/types';
|
|
2
|
-
declare const
|
|
2
|
+
declare const aiTranslateHook: ({ collectionOptions, collection }: {
|
|
3
|
+
collectionOptions: any;
|
|
3
4
|
collection: object;
|
|
4
5
|
}, fallback?: string) => CollectionAfterChangeHook;
|
|
5
|
-
export default
|
|
6
|
+
export default aiTranslateHook;
|
|
7
|
+
export declare function translateCollection({ req, doc, collection, previousDoc, context, collectionOptions, onlyMissing, }: any): Promise<void>;
|
package/dist/aiTranslate.js
CHANGED
|
@@ -35,172 +35,105 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
var
|
|
39
|
-
|
|
38
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
39
|
+
var t = {};
|
|
40
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
41
|
+
t[p] = s[p];
|
|
42
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
43
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
44
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
45
|
+
t[p[i]] = s[p[i]];
|
|
46
|
+
}
|
|
47
|
+
return t;
|
|
40
48
|
};
|
|
41
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
content: content,
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
model: 'gpt-3.5-turbo',
|
|
66
|
-
})
|
|
67
|
-
//console.log('Translated', language, content, chatCompletion.choices[0].message.content)
|
|
68
|
-
];
|
|
69
|
-
case 1:
|
|
70
|
-
chatCompletion = _a.sent();
|
|
71
|
-
newItemResult = typeof text !== 'string'
|
|
72
|
-
? JSON.parse(chatCompletion.choices[0].message.content)
|
|
73
|
-
: chatCompletion.choices[0].message.content;
|
|
74
|
-
return [2 /*return*/, newItemResult];
|
|
75
|
-
}
|
|
50
|
+
exports.translateCollection = void 0;
|
|
51
|
+
var deepCompareAndMerge_1 = require("./deepCompareAndMerge");
|
|
52
|
+
var aiTranslateHook = function (_a, fallback) {
|
|
53
|
+
var collectionOptions = _a.collectionOptions, collection = _a.collection;
|
|
54
|
+
return function (_a) {
|
|
55
|
+
var doc = _a.doc, req = _a.req, previousDoc = _a.previousDoc, context = _a.context, collection = _a.collection;
|
|
56
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
57
|
+
return __generator(this, function (_b) {
|
|
58
|
+
switch (_b.label) {
|
|
59
|
+
case 0: return [4 /*yield*/, translateCollection({
|
|
60
|
+
doc: doc,
|
|
61
|
+
req: req,
|
|
62
|
+
previousDoc: previousDoc,
|
|
63
|
+
context: context,
|
|
64
|
+
collection: collection,
|
|
65
|
+
collectionOptions: collectionOptions,
|
|
66
|
+
})];
|
|
67
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
68
|
+
}
|
|
69
|
+
});
|
|
76
70
|
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
exports.default = aiTranslateHook;
|
|
74
|
+
function translateCollection(_a) {
|
|
75
|
+
var req = _a.req, doc = _a.doc, collection = _a.collection, previousDoc = _a.previousDoc, context = _a.context, collectionOptions = _a.collectionOptions, onlyMissing = _a.onlyMissing;
|
|
81
76
|
return __awaiter(this, void 0, void 0, function () {
|
|
82
|
-
var
|
|
77
|
+
var localCodes, translationPromises, results, error_1;
|
|
83
78
|
var _this = this;
|
|
84
|
-
return __generator(this, function (
|
|
85
|
-
switch (
|
|
79
|
+
return __generator(this, function (_b) {
|
|
80
|
+
switch (_b.label) {
|
|
86
81
|
case 0:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return [4 /*yield*/, translateText(newOriginalObj[prop], language)];
|
|
82
|
+
_b.trys.push([0, 2, , 3]);
|
|
83
|
+
if (context.triggerAfterChange === false ||
|
|
84
|
+
req.locale !== req.payload.config.localization.defaultLocale)
|
|
85
|
+
return [2 /*return*/];
|
|
86
|
+
localCodes = req.payload.config.localization.localeCodes;
|
|
87
|
+
translationPromises = localCodes
|
|
88
|
+
.filter(function (targetLanguage) { return targetLanguage !== req.payload.config.localization.defaultLocale; })
|
|
89
|
+
.map(function (tL) { return __awaiter(_this, void 0, void 0, function () {
|
|
90
|
+
var targetDoc, targetDocWithTranslation, id, _status, updatedAt, createdAt, publishedDate, dataNew, updatedLanguage;
|
|
91
|
+
return __generator(this, function (_a) {
|
|
92
|
+
switch (_a.label) {
|
|
93
|
+
case 0: return [4 /*yield*/, req.payload.findByID({
|
|
94
|
+
collection: collection.slug,
|
|
95
|
+
id: doc.id,
|
|
96
|
+
locale: tL,
|
|
97
|
+
fallbackLocale: false,
|
|
98
|
+
limit: 0,
|
|
99
|
+
depth: 0,
|
|
100
|
+
})];
|
|
107
101
|
case 1:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
102
|
+
targetDoc = _a.sent();
|
|
103
|
+
return [4 /*yield*/, (0, deepCompareAndMerge_1.deepCompareTranslateAndMerge)(doc, previousDoc, targetDoc, collectionOptions.fields, tL, previousDoc.id ? 'update' : 'create', onlyMissing)];
|
|
104
|
+
case 2:
|
|
105
|
+
targetDocWithTranslation = _a.sent();
|
|
106
|
+
id = targetDocWithTranslation.id, _status = targetDocWithTranslation._status, updatedAt = targetDocWithTranslation.updatedAt, createdAt = targetDocWithTranslation.createdAt, publishedDate = targetDocWithTranslation.publishedDate, dataNew = __rest(targetDocWithTranslation, ["id", "_status", "updatedAt", "createdAt", "publishedDate"]);
|
|
107
|
+
return [4 /*yield*/, req.payload.update({
|
|
108
|
+
req: req,
|
|
109
|
+
collection: collection.slug,
|
|
110
|
+
id: doc.id,
|
|
111
|
+
data: dataNew,
|
|
112
|
+
locale: tL,
|
|
113
|
+
limit: 1,
|
|
114
|
+
depth: 0,
|
|
115
|
+
context: {
|
|
116
|
+
triggerAfterChange: false,
|
|
117
|
+
},
|
|
118
|
+
})];
|
|
112
119
|
case 3:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// console.log('propaaaaaaa', targetObj?.[prop], targetObj, prop)
|
|
116
|
-
_c = targetObj;
|
|
117
|
-
_d = prop;
|
|
118
|
-
return [4 /*yield*/, deepCompareTranslateAndMerge(newOriginalObj[prop], (originalObj === null || originalObj === void 0 ? void 0 : originalObj[prop]) || null, targetObj[prop] || null, key, language)];
|
|
119
|
-
case 4:
|
|
120
|
-
// console.log('propaaaaaaa', targetObj?.[prop], targetObj, prop)
|
|
121
|
-
_c[_d] = _e.sent();
|
|
122
|
-
_e.label = 5;
|
|
123
|
-
case 5: return [2 /*return*/];
|
|
120
|
+
updatedLanguage = _a.sent();
|
|
121
|
+
return [2 /*return*/, updatedLanguage];
|
|
124
122
|
}
|
|
125
123
|
});
|
|
126
124
|
}); });
|
|
127
|
-
return [4 /*yield*/, Promise.all(
|
|
125
|
+
return [4 /*yield*/, Promise.all(translationPromises)];
|
|
126
|
+
case 1:
|
|
127
|
+
results = _b.sent();
|
|
128
|
+
return [3 /*break*/, 3];
|
|
128
129
|
case 2:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
error_1 = _b.sent();
|
|
131
|
+
console.log('error while generating languages', error_1);
|
|
132
|
+
return [3 /*break*/, 3];
|
|
133
|
+
case 3: return [2 /*return*/];
|
|
132
134
|
}
|
|
133
135
|
});
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
|
-
|
|
137
|
-
var collection = _a.collection;
|
|
138
|
-
return function (_a) {
|
|
139
|
-
var doc = _a.doc, req = _a.req, previousDoc = _a.previousDoc, context = _a.context, collection = _a.collection;
|
|
140
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
141
|
-
var originalDoc_1, localCodes, translationPromises, results, error_1;
|
|
142
|
-
return __generator(this, function (_b) {
|
|
143
|
-
switch (_b.label) {
|
|
144
|
-
case 0:
|
|
145
|
-
_b.trys.push([0, 2, , 3]);
|
|
146
|
-
originalDoc_1 = previousDoc;
|
|
147
|
-
if (context.triggerAfterChange === false ||
|
|
148
|
-
req.locale !== req.payload.config.localization.defaultLocale ||
|
|
149
|
-
!(originalDoc_1 === null || originalDoc_1 === void 0 ? void 0 : originalDoc_1.id)) {
|
|
150
|
-
return [2 /*return*/];
|
|
151
|
-
}
|
|
152
|
-
localCodes = req.payload.config.localization.localeCodes;
|
|
153
|
-
translationPromises = localCodes
|
|
154
|
-
.filter(function (targetLanguage) { return targetLanguage !== req.payload.config.localization.defaultLocale; })
|
|
155
|
-
.map(function (targetLanguage) { return __awaiter(void 0, void 0, void 0, function () {
|
|
156
|
-
var targetDoc, targetDocWithTranslation, updatedLanguage;
|
|
157
|
-
return __generator(this, function (_a) {
|
|
158
|
-
switch (_a.label) {
|
|
159
|
-
case 0: return [4 /*yield*/, req.payload.findByID({
|
|
160
|
-
req: req,
|
|
161
|
-
collection: collection.slug,
|
|
162
|
-
id: originalDoc_1.id,
|
|
163
|
-
locale: targetLanguage,
|
|
164
|
-
limit: 0,
|
|
165
|
-
depth: 0,
|
|
166
|
-
})];
|
|
167
|
-
case 1:
|
|
168
|
-
targetDoc = _a.sent();
|
|
169
|
-
return [4 /*yield*/, deepCompareTranslateAndMerge(doc, originalDoc_1, targetDoc, 'richText', targetLanguage)];
|
|
170
|
-
case 2:
|
|
171
|
-
targetDocWithTranslation = _a.sent();
|
|
172
|
-
console.log('targetDocWithTranslation', targetDocWithTranslation);
|
|
173
|
-
return [4 /*yield*/, req.payload.update({
|
|
174
|
-
req: req,
|
|
175
|
-
collection: collection.slug,
|
|
176
|
-
id: originalDoc_1.id,
|
|
177
|
-
data: targetDocWithTranslation,
|
|
178
|
-
locale: targetLanguage,
|
|
179
|
-
limit: 0,
|
|
180
|
-
depth: 0,
|
|
181
|
-
context: {
|
|
182
|
-
triggerAfterChange: false,
|
|
183
|
-
},
|
|
184
|
-
})];
|
|
185
|
-
case 3:
|
|
186
|
-
updatedLanguage = _a.sent();
|
|
187
|
-
return [2 /*return*/, updatedLanguage];
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}); });
|
|
191
|
-
return [4 /*yield*/, Promise.all(translationPromises)];
|
|
192
|
-
case 1:
|
|
193
|
-
results = _b.sent();
|
|
194
|
-
return [3 /*break*/, 3];
|
|
195
|
-
case 2:
|
|
196
|
-
error_1 = _b.sent();
|
|
197
|
-
console.log('error while generating languages', error_1);
|
|
198
|
-
return [3 /*break*/, 3];
|
|
199
|
-
case 3: return [2 /*return*/];
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
};
|
|
204
|
-
};
|
|
205
|
-
exports.default = aiTranslate;
|
|
138
|
+
exports.translateCollection = translateCollection;
|
|
206
139
|
//# sourceMappingURL=aiTranslate.js.map
|
package/dist/aiTranslate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiTranslate.js","sourceRoot":"","sources":["../src/aiTranslate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiTranslate.js","sourceRoot":"","sources":["../src/aiTranslate.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,47 +41,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.Translator = void 0;
|
|
43
43
|
var react_1 = __importDefault(require("react"));
|
|
44
|
-
// import './index.scss';
|
|
45
44
|
var elements_1 = require("payload/components/elements");
|
|
45
|
+
var utilities_1 = require("payload/components/utilities");
|
|
46
46
|
var baseClass = 'after-dashboard';
|
|
47
47
|
var Translator = function () {
|
|
48
48
|
var _a = react_1.default.useState(false), isLoading = _a[0], setIsLoading = _a[1];
|
|
49
|
+
var locale = (0, utilities_1.useLocale)();
|
|
50
|
+
var documentInfo = (0, utilities_1.useDocumentInfo)();
|
|
49
51
|
var translate = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
52
|
var response, translatedValues, error_1;
|
|
51
53
|
return __generator(this, function (_a) {
|
|
52
54
|
switch (_a.label) {
|
|
53
55
|
case 0:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
setIsLoading(true);
|
|
57
|
+
_a.label = 1;
|
|
58
|
+
case 1:
|
|
59
|
+
_a.trys.push([1, 4, , 5]);
|
|
60
|
+
return [4 /*yield*/, fetch("/api/".concat(documentInfo.collection.slug, "/translate"), {
|
|
56
61
|
method: 'POST',
|
|
57
62
|
headers: {
|
|
58
63
|
'Content-Type': 'application/json',
|
|
59
64
|
},
|
|
60
65
|
body: JSON.stringify({
|
|
61
|
-
|
|
62
|
-
// from: localeTranslateFrom,
|
|
63
|
-
// to: locale,
|
|
66
|
+
id: documentInfo.id,
|
|
64
67
|
}),
|
|
65
68
|
})];
|
|
66
|
-
case
|
|
69
|
+
case 2:
|
|
67
70
|
response = _a.sent();
|
|
68
71
|
return [4 /*yield*/, response.json()];
|
|
69
|
-
case
|
|
72
|
+
case 3:
|
|
70
73
|
translatedValues = _a.sent();
|
|
71
74
|
setIsLoading(false);
|
|
72
|
-
return [3 /*break*/,
|
|
73
|
-
case
|
|
75
|
+
return [3 /*break*/, 5];
|
|
76
|
+
case 4:
|
|
74
77
|
error_1 = _a.sent();
|
|
75
78
|
setIsLoading(false);
|
|
76
79
|
console.error(error_1);
|
|
77
|
-
return [3 /*break*/,
|
|
78
|
-
case
|
|
80
|
+
return [3 /*break*/, 5];
|
|
81
|
+
case 5: return [2 /*return*/];
|
|
79
82
|
}
|
|
80
83
|
});
|
|
81
84
|
}); };
|
|
82
85
|
return (react_1.default.createElement("div", { className: baseClass },
|
|
83
86
|
react_1.default.createElement(elements_1.Button, { disabled: isLoading, size: "small", onClick: translate },
|
|
84
|
-
react_1.default.createElement("span", null, "Translate content from default language")
|
|
87
|
+
react_1.default.createElement("span", null, "Translate content from default language"),
|
|
88
|
+
isLoading && react_1.default.createElement(react_1.default.Fragment, null, "Loading..."))));
|
|
85
89
|
};
|
|
86
90
|
exports.Translator = Translator;
|
|
87
91
|
//# sourceMappingURL=index.js.map
|