@chayns-components/translation 5.0.0-beta.1136 → 5.0.0-beta.1137

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.
@@ -68,7 +68,7 @@ class TranslationHandler {
68
68
  await this.#handleTranslation(batch);
69
69
  }
70
70
  };
71
- #throttledProcessTranslationQueue = (0, _lodash.default)(this.#processedTranslationQueue, 1000, {
71
+ #throttledProcessTranslationQueue = (0, _lodash.default)(this.#processedTranslationQueue, 200, {
72
72
  leading: false
73
73
  });
74
74
  translateText = (original, from, to) => {
@@ -89,6 +89,9 @@ class TranslationHandler {
89
89
  from
90
90
  });
91
91
  void this.#throttledProcessTranslationQueue();
92
+ if (this.translationQueue.length >= _constants.MAX_ITEMS_PER_BATCH) {
93
+ void this.#throttledProcessTranslationQueue.flush();
94
+ }
92
95
  return deferred.promise;
93
96
  };
94
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"translationHandler.js","names":["_constants","require","_lodash","_interopRequireDefault","_deferred","_translation","e","__esModule","default","TranslationHandler","translationQueue","cachedTranslations","handleTranslation","batch","result","fetchTranslations","map","deferred","d","item","forEach","index","batchItem","from","to","text","resolve","ex","reject","processedTranslationQueue","#processedTranslationQueue","totalLength","length","shift","push","id","BATCH_SIZE_LIMIT","MAX_ITEMS_PER_BATCH","throttledProcessTranslationQueue","throttle","leading","translateText","original","_this$cachedTranslati","cachedTranslation","Promise","existingItem","find","promise","Deferred","translationHandler","_default","exports"],"sources":["../../../src/utils/translationHandler.ts"],"sourcesContent":["import { QueuedItem, TranslationBatchItem } from '../types/translation';\nimport { BATCH_SIZE_LIMIT, MAX_ITEMS_PER_BATCH } from '../constants/constants';\nimport throttle from 'lodash.throttle';\nimport { Deferred } from './deferred';\nimport { fetchTranslations } from '../api/translation';\n\nclass TranslationHandler {\n translationQueue: QueuedItem[] = [];\n\n cachedTranslations: Record<string, Record<string, Record<string, string>>> = {};\n\n #handleTranslation = async (batch: TranslationBatchItem[]) => {\n try {\n const result = await fetchTranslations(batch.map(({ deferred: d, ...item }) => item));\n\n result.forEach((item, index) => {\n const batchItem = batch[index];\n\n if (!batchItem) {\n return;\n }\n\n const { from, to, text } = batchItem;\n\n batchItem.deferred.resolve(item);\n this.cachedTranslations[from] ??= {};\n this.cachedTranslations[from][to] ??= {};\n this.cachedTranslations[from][to][text] = item;\n });\n } catch (ex) {\n batch.forEach((item) => {\n item.deferred.reject(ex);\n });\n }\n };\n\n #processedTranslationQueue = async () => {\n let totalLength = 0;\n let batch: TranslationBatchItem[] = [];\n\n while (this.translationQueue.length) {\n const { text, deferred, to, from } = this.translationQueue.shift() as QueuedItem;\n totalLength += text.length;\n batch.push({\n text,\n to,\n from,\n id: batch.length,\n deferred,\n });\n\n if (totalLength > BATCH_SIZE_LIMIT || batch.length >= MAX_ITEMS_PER_BATCH) {\n // eslint-disable-next-line no-await-in-loop\n await this.#handleTranslation(batch);\n batch = [];\n totalLength = 0;\n }\n }\n\n if (batch.length > 0) {\n await this.#handleTranslation(batch);\n }\n };\n\n #throttledProcessTranslationQueue = throttle(this.#processedTranslationQueue, 1000, {\n leading: false,\n });\n\n translateText = (original: string, from: string, to: string) => {\n const cachedTranslation = this.cachedTranslations[from]?.[to]?.[original];\n if (typeof cachedTranslation === 'string') {\n return Promise.resolve(cachedTranslation);\n }\n\n const existingItem = this.translationQueue.find(\n (item) => item.text === original && item.to === to && item.from === from,\n );\n if (existingItem) {\n return existingItem.deferred.promise;\n }\n const deferred = new Deferred<string>();\n this.translationQueue.push({ text: original, deferred, to, from });\n void this.#throttledProcessTranslationQueue();\n return deferred.promise;\n };\n}\n\nconst translationHandler = new TranslationHandler();\n\nexport default translationHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"translationHandler.js","names":["_constants","require","_lodash","_interopRequireDefault","_deferred","_translation","e","__esModule","default","TranslationHandler","translationQueue","cachedTranslations","handleTranslation","batch","result","fetchTranslations","map","deferred","d","item","forEach","index","batchItem","from","to","text","resolve","ex","reject","processedTranslationQueue","#processedTranslationQueue","totalLength","length","shift","push","id","BATCH_SIZE_LIMIT","MAX_ITEMS_PER_BATCH","throttledProcessTranslationQueue","throttle","leading","translateText","original","_this$cachedTranslati","cachedTranslation","Promise","existingItem","find","promise","Deferred","flush","translationHandler","_default","exports"],"sources":["../../../src/utils/translationHandler.ts"],"sourcesContent":["import { QueuedItem, TranslationBatchItem } from '../types/translation';\nimport { BATCH_SIZE_LIMIT, MAX_ITEMS_PER_BATCH } from '../constants/constants';\nimport throttle from 'lodash.throttle';\nimport { Deferred } from './deferred';\nimport { fetchTranslations } from '../api/translation';\n\nclass TranslationHandler {\n translationQueue: QueuedItem[] = [];\n\n cachedTranslations: Record<string, Record<string, Record<string, string>>> = {};\n\n #handleTranslation = async (batch: TranslationBatchItem[]) => {\n try {\n const result = await fetchTranslations(batch.map(({ deferred: d, ...item }) => item));\n\n result.forEach((item, index) => {\n const batchItem = batch[index];\n\n if (!batchItem) {\n return;\n }\n\n const { from, to, text } = batchItem;\n\n batchItem.deferred.resolve(item);\n this.cachedTranslations[from] ??= {};\n this.cachedTranslations[from][to] ??= {};\n this.cachedTranslations[from][to][text] = item;\n });\n } catch (ex) {\n batch.forEach((item) => {\n item.deferred.reject(ex);\n });\n }\n };\n\n #processedTranslationQueue = async () => {\n let totalLength = 0;\n let batch: TranslationBatchItem[] = [];\n\n while (this.translationQueue.length) {\n const { text, deferred, to, from } = this.translationQueue.shift() as QueuedItem;\n totalLength += text.length;\n batch.push({\n text,\n to,\n from,\n id: batch.length,\n deferred,\n });\n\n if (totalLength > BATCH_SIZE_LIMIT || batch.length >= MAX_ITEMS_PER_BATCH) {\n // eslint-disable-next-line no-await-in-loop\n await this.#handleTranslation(batch);\n batch = [];\n totalLength = 0;\n }\n }\n\n if (batch.length > 0) {\n await this.#handleTranslation(batch);\n }\n };\n\n #throttledProcessTranslationQueue = throttle(this.#processedTranslationQueue, 200, {\n leading: false,\n });\n\n translateText = (original: string, from: string, to: string) => {\n const cachedTranslation = this.cachedTranslations[from]?.[to]?.[original];\n if (typeof cachedTranslation === 'string') {\n return Promise.resolve(cachedTranslation);\n }\n\n const existingItem = this.translationQueue.find(\n (item) => item.text === original && item.to === to && item.from === from,\n );\n if (existingItem) {\n return existingItem.deferred.promise;\n }\n const deferred = new Deferred<string>();\n this.translationQueue.push({ text: original, deferred, to, from });\n void this.#throttledProcessTranslationQueue();\n if (this.translationQueue.length >= MAX_ITEMS_PER_BATCH) {\n void this.#throttledProcessTranslationQueue.flush();\n }\n return deferred.promise;\n };\n}\n\nconst translationHandler = new TranslationHandler();\n\nexport default translationHandler;\n"],"mappings":"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","ignoreList":[]}
@@ -64,7 +64,7 @@ class TranslationHandler {
64
64
  await this.#handleTranslation(batch);
65
65
  }
66
66
  };
67
- #throttledProcessTranslationQueue = (() => throttle(this.#processedTranslationQueue, 1000, {
67
+ #throttledProcessTranslationQueue = (() => throttle(this.#processedTranslationQueue, 200, {
68
68
  leading: false
69
69
  }))();
70
70
  translateText = (original, from, to) => {
@@ -84,6 +84,9 @@ class TranslationHandler {
84
84
  from
85
85
  });
86
86
  void this.#throttledProcessTranslationQueue();
87
+ if (this.translationQueue.length >= MAX_ITEMS_PER_BATCH) {
88
+ void this.#throttledProcessTranslationQueue.flush();
89
+ }
87
90
  return deferred.promise;
88
91
  };
89
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"translationHandler.js","names":["BATCH_SIZE_LIMIT","MAX_ITEMS_PER_BATCH","throttle","Deferred","fetchTranslations","TranslationHandler","translationQueue","cachedTranslations","handleTranslation","batch","result","map","_ref","deferred","d","item","forEach","index","batchItem","from","to","text","resolve","ex","reject","processedTranslationQueue","#processedTranslationQueue","totalLength","length","shift","push","id","throttledProcessTranslationQueue","leading","translateText","original","cachedTranslation","Promise","existingItem","find","promise","translationHandler"],"sources":["../../../src/utils/translationHandler.ts"],"sourcesContent":["import { QueuedItem, TranslationBatchItem } from '../types/translation';\nimport { BATCH_SIZE_LIMIT, MAX_ITEMS_PER_BATCH } from '../constants/constants';\nimport throttle from 'lodash.throttle';\nimport { Deferred } from './deferred';\nimport { fetchTranslations } from '../api/translation';\n\nclass TranslationHandler {\n translationQueue: QueuedItem[] = [];\n\n cachedTranslations: Record<string, Record<string, Record<string, string>>> = {};\n\n #handleTranslation = async (batch: TranslationBatchItem[]) => {\n try {\n const result = await fetchTranslations(batch.map(({ deferred: d, ...item }) => item));\n\n result.forEach((item, index) => {\n const batchItem = batch[index];\n\n if (!batchItem) {\n return;\n }\n\n const { from, to, text } = batchItem;\n\n batchItem.deferred.resolve(item);\n this.cachedTranslations[from] ??= {};\n this.cachedTranslations[from][to] ??= {};\n this.cachedTranslations[from][to][text] = item;\n });\n } catch (ex) {\n batch.forEach((item) => {\n item.deferred.reject(ex);\n });\n }\n };\n\n #processedTranslationQueue = async () => {\n let totalLength = 0;\n let batch: TranslationBatchItem[] = [];\n\n while (this.translationQueue.length) {\n const { text, deferred, to, from } = this.translationQueue.shift() as QueuedItem;\n totalLength += text.length;\n batch.push({\n text,\n to,\n from,\n id: batch.length,\n deferred,\n });\n\n if (totalLength > BATCH_SIZE_LIMIT || batch.length >= MAX_ITEMS_PER_BATCH) {\n // eslint-disable-next-line no-await-in-loop\n await this.#handleTranslation(batch);\n batch = [];\n totalLength = 0;\n }\n }\n\n if (batch.length > 0) {\n await this.#handleTranslation(batch);\n }\n };\n\n #throttledProcessTranslationQueue = throttle(this.#processedTranslationQueue, 1000, {\n leading: false,\n });\n\n translateText = (original: string, from: string, to: string) => {\n const cachedTranslation = this.cachedTranslations[from]?.[to]?.[original];\n if (typeof cachedTranslation === 'string') {\n return Promise.resolve(cachedTranslation);\n }\n\n const existingItem = this.translationQueue.find(\n (item) => item.text === original && item.to === to && item.from === from,\n );\n if (existingItem) {\n return existingItem.deferred.promise;\n }\n const deferred = new Deferred<string>();\n this.translationQueue.push({ text: original, deferred, to, from });\n void this.#throttledProcessTranslationQueue();\n return deferred.promise;\n };\n}\n\nconst translationHandler = new TranslationHandler();\n\nexport default translationHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"translationHandler.js","names":["BATCH_SIZE_LIMIT","MAX_ITEMS_PER_BATCH","throttle","Deferred","fetchTranslations","TranslationHandler","translationQueue","cachedTranslations","handleTranslation","batch","result","map","_ref","deferred","d","item","forEach","index","batchItem","from","to","text","resolve","ex","reject","processedTranslationQueue","#processedTranslationQueue","totalLength","length","shift","push","id","throttledProcessTranslationQueue","leading","translateText","original","cachedTranslation","Promise","existingItem","find","promise","flush","translationHandler"],"sources":["../../../src/utils/translationHandler.ts"],"sourcesContent":["import { QueuedItem, TranslationBatchItem } from '../types/translation';\nimport { BATCH_SIZE_LIMIT, MAX_ITEMS_PER_BATCH } from '../constants/constants';\nimport throttle from 'lodash.throttle';\nimport { Deferred } from './deferred';\nimport { fetchTranslations } from '../api/translation';\n\nclass TranslationHandler {\n translationQueue: QueuedItem[] = [];\n\n cachedTranslations: Record<string, Record<string, Record<string, string>>> = {};\n\n #handleTranslation = async (batch: TranslationBatchItem[]) => {\n try {\n const result = await fetchTranslations(batch.map(({ deferred: d, ...item }) => item));\n\n result.forEach((item, index) => {\n const batchItem = batch[index];\n\n if (!batchItem) {\n return;\n }\n\n const { from, to, text } = batchItem;\n\n batchItem.deferred.resolve(item);\n this.cachedTranslations[from] ??= {};\n this.cachedTranslations[from][to] ??= {};\n this.cachedTranslations[from][to][text] = item;\n });\n } catch (ex) {\n batch.forEach((item) => {\n item.deferred.reject(ex);\n });\n }\n };\n\n #processedTranslationQueue = async () => {\n let totalLength = 0;\n let batch: TranslationBatchItem[] = [];\n\n while (this.translationQueue.length) {\n const { text, deferred, to, from } = this.translationQueue.shift() as QueuedItem;\n totalLength += text.length;\n batch.push({\n text,\n to,\n from,\n id: batch.length,\n deferred,\n });\n\n if (totalLength > BATCH_SIZE_LIMIT || batch.length >= MAX_ITEMS_PER_BATCH) {\n // eslint-disable-next-line no-await-in-loop\n await this.#handleTranslation(batch);\n batch = [];\n totalLength = 0;\n }\n }\n\n if (batch.length > 0) {\n await this.#handleTranslation(batch);\n }\n };\n\n #throttledProcessTranslationQueue = throttle(this.#processedTranslationQueue, 200, {\n leading: false,\n });\n\n translateText = (original: string, from: string, to: string) => {\n const cachedTranslation = this.cachedTranslations[from]?.[to]?.[original];\n if (typeof cachedTranslation === 'string') {\n return Promise.resolve(cachedTranslation);\n }\n\n const existingItem = this.translationQueue.find(\n (item) => item.text === original && item.to === to && item.from === from,\n );\n if (existingItem) {\n return existingItem.deferred.promise;\n }\n const deferred = new Deferred<string>();\n this.translationQueue.push({ text: original, deferred, to, from });\n void this.#throttledProcessTranslationQueue();\n if (this.translationQueue.length >= MAX_ITEMS_PER_BATCH) {\n void this.#throttledProcessTranslationQueue.flush();\n }\n return deferred.promise;\n };\n}\n\nconst translationHandler = new TranslationHandler();\n\nexport default translationHandler;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/translation",
3
- "version": "5.0.0-beta.1136",
3
+ "version": "5.0.0-beta.1137",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -78,5 +78,5 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "gitHead": "868eeb207ec5e80ade13ce46e6f0f1c1d95e33b1"
81
+ "gitHead": "64ec29f2750c1ee25e1c01c5ab1446d4594f403d"
82
82
  }