@lokalise/polyglot-sdk 6.0.1 → 7.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.
Files changed (29) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +5 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/sdk/PolyglotClient.d.ts +4 -8
  5. package/dist/sdk/PolyglotClient.js +3 -21
  6. package/dist/sdk/PolyglotClient.js.map +1 -1
  7. package/dist/sdk/schemas/common/asyncRequestSchemas.d.ts +25 -0
  8. package/dist/sdk/schemas/common/asyncRequestSchemas.js +37 -0
  9. package/dist/sdk/schemas/common/asyncRequestSchemas.js.map +1 -0
  10. package/dist/sdk/schemas/common/commonSchemas.d.ts +68 -0
  11. package/dist/sdk/schemas/common/commonSchemas.js +61 -0
  12. package/dist/sdk/schemas/common/commonSchemas.js.map +1 -0
  13. package/dist/sdk/schemas/common/requestContextSchemas.d.ts +278 -0
  14. package/dist/sdk/schemas/common/requestContextSchemas.js +85 -0
  15. package/dist/sdk/schemas/common/requestContextSchemas.js.map +1 -0
  16. package/dist/sdk/schemas/translation/sharedSchemas.d.ts +4 -0
  17. package/dist/sdk/schemas/translation/sharedSchemas.js +10 -0
  18. package/dist/sdk/schemas/translation/sharedSchemas.js.map +1 -0
  19. package/dist/sdk/schemas/translation/syncTranslationV2Schemas.d.ts +707 -0
  20. package/dist/sdk/schemas/translation/syncTranslationV2Schemas.js +65 -0
  21. package/dist/sdk/schemas/translation/syncTranslationV2Schemas.js.map +1 -0
  22. package/dist/sdk/types/requests.d.ts +2 -0
  23. package/package.json +11 -10
  24. package/dist/sdk/polyglotChunkHandler.d.ts +0 -7
  25. package/dist/sdk/polyglotChunkHandler.js +0 -48
  26. package/dist/sdk/polyglotChunkHandler.js.map +0 -1
  27. package/dist/sdk/segmentUtils.d.ts +0 -2
  28. package/dist/sdk/segmentUtils.js +0 -13
  29. package/dist/sdk/segmentUtils.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SYNC_TRANSLATION_V2_RESPONSE_SCHEMA = exports.SYNC_TRANSLATION_V2_HEADERS_SCHEMA = exports.SYNC_TRANSLATION_V2_BODY_SCHEMA = exports.SYNC_TRANSLATION_V2_CONTENT_UNIT_SCHEMA = exports.SYNC_TRANSLATION_V2_SEGMENT_SCHEMA = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const zod_1 = tslib_1.__importDefault(require("zod"));
6
+ const commonSchemas_1 = require("../common/commonSchemas");
7
+ const requestContextSchemas_1 = require("../common/requestContextSchemas");
8
+ const sharedSchemas_1 = require("./sharedSchemas");
9
+ const SEGMENT_ID_MAX_LENGTH = 100;
10
+ const SEGMENT_VALUE_MAX_LENGTH = 5000;
11
+ const CONTENT_UNIT_ID_MAX_LENGTH = 100;
12
+ const CONTENT_UNIT_DESCRIPTION_MAX_LENGTH = 500;
13
+ const CONTENT_UNIT_SEGMENTS_MAX_LENGTH = 500;
14
+ const CONTENT_UNITS_MAX_LENGTH = 50;
15
+ const SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA = zod_1.default.string().min(1).max(SEGMENT_ID_MAX_LENGTH);
16
+ exports.SYNC_TRANSLATION_V2_SEGMENT_SCHEMA = zod_1.default.object({
17
+ id: SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA,
18
+ tmMatch: commonSchemas_1.TM_MATCH_SCHEMA,
19
+ value: zod_1.default.string().min(1).max(SEGMENT_VALUE_MAX_LENGTH),
20
+ });
21
+ const SYNC_TRANSLATION_V2_CONTENT_UNIT_ID_SCHEMA = zod_1.default.string().min(1).max(CONTENT_UNIT_ID_MAX_LENGTH);
22
+ exports.SYNC_TRANSLATION_V2_CONTENT_UNIT_SCHEMA = zod_1.default.object({
23
+ id: SYNC_TRANSLATION_V2_CONTENT_UNIT_ID_SCHEMA,
24
+ context: zod_1.default
25
+ .object({
26
+ description: zod_1.default.string().min(1).max(CONTENT_UNIT_DESCRIPTION_MAX_LENGTH),
27
+ })
28
+ .optional(),
29
+ characterLimit: zod_1.default.number().optional(),
30
+ segments: zod_1.default
31
+ .array(exports.SYNC_TRANSLATION_V2_SEGMENT_SCHEMA)
32
+ .nonempty()
33
+ .max(CONTENT_UNIT_SEGMENTS_MAX_LENGTH),
34
+ });
35
+ exports.SYNC_TRANSLATION_V2_BODY_SCHEMA = zod_1.default
36
+ .object({
37
+ sourceLocale: commonSchemas_1.LOCALE_SCHEMA,
38
+ targetLocale: commonSchemas_1.LOCALE_SCHEMA,
39
+ integration: commonSchemas_1.REAL_INTEGRATION_ENGINE_SCHEMA.optional(),
40
+ context: requestContextSchemas_1.REQUEST_CONTEXT_SCHEMA.optional(),
41
+ contentUnits: zod_1.default
42
+ .array(exports.SYNC_TRANSLATION_V2_CONTENT_UNIT_SCHEMA)
43
+ .nonempty()
44
+ .max(CONTENT_UNITS_MAX_LENGTH),
45
+ })
46
+ .refine(...sharedSchemas_1.refineDifferentSourceAndTargetLang);
47
+ exports.SYNC_TRANSLATION_V2_HEADERS_SCHEMA = commonSchemas_1.COMMON_REQUEST_HEADERS_SCHEMA;
48
+ exports.SYNC_TRANSLATION_V2_RESPONSE_SCHEMA = zod_1.default
49
+ .object({
50
+ data: zod_1.default.array(zod_1.default.object({
51
+ contentUnitId: SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA,
52
+ segmentId: SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA,
53
+ integration: zod_1.default.string(),
54
+ translation: zod_1.default.string(),
55
+ })),
56
+ errors: zod_1.default
57
+ .array(commonSchemas_1.COMMON_ERROR_RESPONSE_SCHEMA.extend({
58
+ contentUnitId: SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA,
59
+ segmentId: SYNC_TRANSLATION_V2_SEGMENT_ID_SCHEMA,
60
+ integration: zod_1.default.string(),
61
+ }))
62
+ .optional(),
63
+ })
64
+ .describe('Results of the sync translation');
65
+ //# sourceMappingURL=syncTranslationV2Schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncTranslationV2Schemas.js","sourceRoot":"","sources":["../../../../src/sdk/schemas/translation/syncTranslationV2Schemas.ts"],"names":[],"mappings":";;;;AAAA,sDAAmB;AAEnB,2DAMgC;AAChC,2EAAwE;AAExE,mDAAoE;AAEpE,MAAM,qBAAqB,GAAG,GAAG,CAAA;AACjC,MAAM,wBAAwB,GAAG,IAAI,CAAA;AACrC,MAAM,0BAA0B,GAAG,GAAG,CAAA;AACtC,MAAM,mCAAmC,GAAG,GAAG,CAAA;AAC/C,MAAM,gCAAgC,GAAG,GAAG,CAAA;AAC5C,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAEnC,MAAM,qCAAqC,GAAG,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;AAE7E,QAAA,kCAAkC,GAAG,aAAC,CAAC,MAAM,CAAC;IACzD,EAAE,EAAE,qCAAqC;IACzC,OAAO,EAAE,+BAAe;IACxB,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC;CACvD,CAAC,CAAA;AAEF,MAAM,0CAA0C,GAAG,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAEvF,QAAA,uCAAuC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC9D,EAAE,EAAE,0CAA0C;IAC9C,OAAO,EAAE,aAAC;SACP,MAAM,CAAC;QACN,WAAW,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,mCAAmC,CAAC;KACxE,CAAC;SACD,QAAQ,EAAE;IACb,cAAc,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,aAAC;SACR,KAAK,CAAC,0CAAkC,CAAC;SACzC,QAAQ,EAAE;SACV,GAAG,CAAC,gCAAgC,CAAC;CACzC,CAAC,CAAA;AAEW,QAAA,+BAA+B,GAAG,aAAC;KAC7C,MAAM,CAAC;IACN,YAAY,EAAE,6BAAa;IAC3B,YAAY,EAAE,6BAAa;IAC3B,WAAW,EAAE,8CAA8B,CAAC,QAAQ,EAAE;IACtD,OAAO,EAAE,8CAAsB,CAAC,QAAQ,EAAE;IAC1C,YAAY,EAAE,aAAC;SACZ,KAAK,CAAC,+CAAuC,CAAC;SAC9C,QAAQ,EAAE;SACV,GAAG,CAAC,wBAAwB,CAAC;CACjC,CAAC;KACD,MAAM,CAAC,GAAG,kDAAkC,CAAC,CAAA;AAEnC,QAAA,kCAAkC,GAAG,6CAA6B,CAAA;AAElE,QAAA,mCAAmC,GAAG,aAAC;KACjD,MAAM,CAAC;IACN,IAAI,EAAE,aAAC,CAAC,KAAK,CACX,aAAC,CAAC,MAAM,CAAC;QACP,aAAa,EAAE,qCAAqC;QACpD,SAAS,EAAE,qCAAqC;QAChD,WAAW,EAAE,aAAC,CAAC,MAAM,EAAE;QACvB,WAAW,EAAE,aAAC,CAAC,MAAM,EAAE;KACxB,CAAC,CACH;IACD,MAAM,EAAE,aAAC;SACN,KAAK,CACJ,4CAA4B,CAAC,MAAM,CAAC;QAClC,aAAa,EAAE,qCAAqC;QACpD,SAAS,EAAE,qCAAqC;QAChD,WAAW,EAAE,aAAC,CAAC,MAAM,EAAE;KACxB,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC;KACD,QAAQ,CAAC,iCAAiC,CAAC,CAAA"}
@@ -18,6 +18,7 @@ export type TranslateSyncContentUnits = {
18
18
  context?: {
19
19
  description: string;
20
20
  };
21
+ characterLimit?: number;
21
22
  segments: {
22
23
  id: string;
23
24
  position: number;
@@ -38,6 +39,7 @@ export type LqaContentUnit = {
38
39
  context?: {
39
40
  description?: string;
40
41
  };
42
+ characterLimit?: number;
41
43
  segments: LqaSegment[];
42
44
  };
43
45
  export type LqaSyncRequestBody = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/polyglot-sdk",
3
- "version": "6.0.1",
3
+ "version": "7.0.0",
4
4
  "author": {
5
5
  "name": "Lokalise",
6
6
  "url": "https://lokalise.com/"
@@ -12,18 +12,18 @@
12
12
  "url": "git://github.com/lokalise/polyglot-service.git"
13
13
  },
14
14
  "files": [
15
- "dist/**"
15
+ "dist"
16
16
  ],
17
+ "type": "commonjs",
17
18
  "main": "dist/index.js",
18
19
  "types": "dist/index.d.ts",
19
- "type": "commonjs",
20
20
  "publishConfig": {
21
21
  "access": "public"
22
22
  },
23
23
  "scripts": {
24
- "build": "shx rm -rf ./dist && tsc",
24
+ "build": "shx rm -rf ./dist && tsc -p tsconfig.publish.json",
25
25
  "build:publish": "shx rm -rf ./dist && tsc -p tsconfig.publish.json",
26
- "lint": "eslint . --ext .ts",
26
+ "lint": "eslint . --ext .ts && tsc -p tsconfig.lint.json --noEmit",
27
27
  "lint:fix": "eslint . --ext .ts --fix && prettier --write . ",
28
28
  "test": "vitest",
29
29
  "test:coverage": "npm test -- --coverage",
@@ -32,17 +32,18 @@
32
32
  "prepublishOnly": "npm run build:publish"
33
33
  },
34
34
  "dependencies": {
35
- "@amplitude/analytics-types": "^2.5.1",
36
- "@lokalise/fastify-extras": "^21.2.0",
35
+ "@amplitude/analytics-types": "^2.6.0",
36
+ "@lokalise/fastify-extras": "^21.3.0",
37
37
  "@lokalise/id-utils": "^2.1.0",
38
38
  "@lokalise/node-core": "^9.20.0",
39
+ "@lokalise/supported-languages": "^2.0.0",
39
40
  "@lokalise/zod-extras": "^2.1.0",
40
41
  "undici": "^6.19.2",
41
42
  "undici-retry": "^5.0.2",
42
43
  "zod": "^3.23.4"
43
44
  },
44
45
  "devDependencies": {
45
- "@types/node": "^20.14.8",
46
+ "@types/node": "^20.14.10",
46
47
  "@typescript-eslint/eslint-plugin": "^7.4.0",
47
48
  "@typescript-eslint/parser": "^7.4.0",
48
49
  "@vitest/coverage-v8": "^1.6.0",
@@ -50,11 +51,11 @@
50
51
  "eslint": "^8.57.0",
51
52
  "eslint-plugin-import": "^2.29.1",
52
53
  "eslint-plugin-vitest": "^0.4.1",
53
- "mockttp": "^3.12.0",
54
+ "mockttp": "^3.13.0",
54
55
  "prettier": "^3.2.5",
55
56
  "shx": "^0.3.4",
56
57
  "ts-deepmerge": "^7.0.0",
57
- "typescript": "5.4.5",
58
+ "typescript": "5.5.3",
58
59
  "vitest": "^1.6.0"
59
60
  }
60
61
  }
@@ -1,7 +0,0 @@
1
- import type { TranslateSyncRequest } from './types/requests';
2
- /**
3
- * Polyglot synchronous APIs are limited to X items at once - to keep the response time reasonable and not hit
4
- * any sort of API gateway timeouts.
5
- */
6
- export declare const REQUEST_SIZE_LIMIT_TRANSLATE_SYNC = 15;
7
- export declare function getChunkedTranslationRequest(request: TranslateSyncRequest, polyglotSegmentMaxProcessLimit?: number): Generator<TranslateSyncRequest>;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChunkedTranslationRequest = exports.REQUEST_SIZE_LIMIT_TRANSLATE_SYNC = void 0;
4
- const node_core_1 = require("@lokalise/node-core");
5
- /**
6
- * Polyglot synchronous APIs are limited to X items at once - to keep the response time reasonable and not hit
7
- * any sort of API gateway timeouts.
8
- */
9
- exports.REQUEST_SIZE_LIMIT_TRANSLATE_SYNC = 15;
10
- // TODO: AP-1395 - Look at refactoring the chunk methods into smaller alternatives
11
- // eslint-disable-next-line max-statements
12
- function* getChunkedTranslationRequest(request, polyglotSegmentMaxProcessLimit = exports.REQUEST_SIZE_LIMIT_TRANSLATE_SYNC) {
13
- const contentUnits = request.contentUnits.filter((contentUnit) => contentUnit.segments.length > 0);
14
- if (contentUnits.length === 0) {
15
- return;
16
- }
17
- const chunkedRequest = {
18
- context: request.context,
19
- sourceLocale: request.sourceLocale,
20
- targetLocale: request.targetLocale,
21
- contentUnits: [],
22
- };
23
- let totalSegmentsInRequest = 0;
24
- for (const contentUnit of contentUnits) {
25
- let segmentsChunked = [];
26
- let startOffset = 0;
27
- do {
28
- segmentsChunked = contentUnit.segments.slice(startOffset, polyglotSegmentMaxProcessLimit + startOffset - totalSegmentsInRequest);
29
- startOffset += polyglotSegmentMaxProcessLimit - totalSegmentsInRequest;
30
- if (segmentsChunked.length === 0) {
31
- startOffset = 0;
32
- continue;
33
- }
34
- totalSegmentsInRequest += segmentsChunked.length;
35
- chunkedRequest.contentUnits.push({ ...contentUnit, segments: segmentsChunked });
36
- if (totalSegmentsInRequest === polyglotSegmentMaxProcessLimit) {
37
- yield (0, node_core_1.deepClone)(chunkedRequest);
38
- chunkedRequest.contentUnits = [];
39
- totalSegmentsInRequest = 0;
40
- }
41
- } while (segmentsChunked.length !== 0);
42
- }
43
- if (chunkedRequest.contentUnits.length) {
44
- yield (0, node_core_1.deepClone)(chunkedRequest);
45
- }
46
- }
47
- exports.getChunkedTranslationRequest = getChunkedTranslationRequest;
48
- //# sourceMappingURL=polyglotChunkHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"polyglotChunkHandler.js","sourceRoot":"","sources":["../../src/sdk/polyglotChunkHandler.ts"],"names":[],"mappings":";;;AAAA,mDAA+C;AAI/C;;;GAGG;AACU,QAAA,iCAAiC,GAAG,EAAE,CAAA;AAEnD,kFAAkF;AAClF,0CAA0C;AAC1C,QAAe,CAAC,CAAC,4BAA4B,CAC3C,OAA6B,EAC7B,iCAAyC,yCAAiC;IAE1E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,cAAc,GAAyB;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,EAAE;KACjB,CAAA;IAED,IAAI,sBAAsB,GAAG,CAAC,CAAA;IAC9B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,eAAe,GAAG,EAAE,CAAA;QACxB,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,GAAG,CAAC;YACF,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAC1C,WAAW,EACX,8BAA8B,GAAG,WAAW,GAAG,sBAAsB,CACtE,CAAA;YAED,WAAW,IAAI,8BAA8B,GAAG,sBAAsB,CAAA;YACtE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,WAAW,GAAG,CAAC,CAAA;gBACf,SAAQ;YACV,CAAC;YAED,sBAAsB,IAAI,eAAe,CAAC,MAAM,CAAA;YAChD,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAA;YAE/E,IAAI,sBAAsB,KAAK,8BAA8B,EAAE,CAAC;gBAC9D,MAAM,IAAA,qBAAS,EAAC,cAAc,CAAC,CAAA;gBAC/B,cAAc,CAAC,YAAY,GAAG,EAAE,CAAA;gBAChC,sBAAsB,GAAG,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC,QAAQ,eAAe,CAAC,MAAM,KAAK,CAAC,EAAC;IACxC,CAAC;IAED,IAAI,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,IAAA,qBAAS,EAAC,cAAc,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AA/CD,oEA+CC"}
@@ -1,2 +0,0 @@
1
- import type { TranslateSyncContentUnits } from './types/requests';
2
- export declare function groupTranslationSegmentIdsProcessedByContentUnitId(contentUnits: readonly TranslateSyncContentUnits[]): Record<string, string[]>;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupTranslationSegmentIdsProcessedByContentUnitId = void 0;
4
- function groupTranslationSegmentIdsProcessedByContentUnitId(contentUnits) {
5
- return contentUnits.reduce((acc, cu) => {
6
- if (!acc[cu.id])
7
- acc[cu.id] = [];
8
- acc[cu.id].push(...cu.segments.map((s) => s.id));
9
- return acc;
10
- }, {});
11
- }
12
- exports.groupTranslationSegmentIdsProcessedByContentUnitId = groupTranslationSegmentIdsProcessedByContentUnitId;
13
- //# sourceMappingURL=segmentUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segmentUtils.js","sourceRoot":"","sources":["../../src/sdk/segmentUtils.ts"],"names":[],"mappings":";;;AAEA,SAAgB,kDAAkD,CAChE,YAAkD;IAElD,OAAO,YAAY,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QACV,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;QAChC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChD,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAA8B,CAC/B,CAAA;AACH,CAAC;AAXD,gHAWC"}