next-intl 4.5.8 → 4.6.1

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 (88) hide show
  1. package/dist/cjs/development/ExtractorCodec-D9Tw618d.cjs +7 -0
  2. package/dist/cjs/development/JSONCodec-L1_VeQBi.cjs +48 -0
  3. package/dist/cjs/development/POCodec-Be_UL6jy.cjs +105 -0
  4. package/dist/cjs/development/plugin-DDtWCyPI.cjs +1373 -0
  5. package/dist/cjs/development/plugin.cjs +8 -379
  6. package/dist/esm/development/extractor/ExtractionCompiler.js +23 -26
  7. package/dist/esm/development/extractor/catalog/CatalogLocales.js +0 -33
  8. package/dist/esm/development/extractor/catalog/CatalogManager.js +171 -110
  9. package/dist/esm/development/extractor/catalog/CatalogPersister.js +31 -13
  10. package/dist/esm/development/extractor/catalog/SaveScheduler.js +1 -1
  11. package/dist/esm/development/extractor/catalogLoader.js +10 -10
  12. package/dist/esm/development/extractor/extractMessages.js +9 -2
  13. package/dist/esm/development/extractor/extractionLoader.js +15 -12
  14. package/dist/esm/development/extractor/extractor/MessageExtractor.js +5 -4
  15. package/dist/esm/development/extractor/format/ExtractorCodec.js +5 -0
  16. package/dist/esm/development/extractor/format/codecs/JSONCodec.js +40 -0
  17. package/dist/esm/development/extractor/format/codecs/POCodec.js +93 -0
  18. package/dist/esm/development/extractor/format/index.js +44 -0
  19. package/dist/esm/development/extractor/source/SourceFileScanner.js +2 -1
  20. package/dist/esm/development/extractor/source/SourceFileWatcher.js +132 -0
  21. package/dist/esm/development/extractor/utils.js +16 -1
  22. package/dist/esm/development/extractor.js +1 -0
  23. package/dist/esm/development/plugin/createNextIntlPlugin.js +3 -1
  24. package/dist/esm/development/plugin/declaration/createMessagesDeclaration.js +2 -11
  25. package/dist/esm/development/plugin/extractor/initExtractionCompiler.js +45 -0
  26. package/dist/esm/development/plugin/getNextConfig.js +7 -4
  27. package/dist/esm/development/plugin/utils.js +16 -1
  28. package/dist/esm/production/extractor/ExtractionCompiler.js +1 -1
  29. package/dist/esm/production/extractor/catalog/CatalogLocales.js +1 -1
  30. package/dist/esm/production/extractor/catalog/CatalogManager.js +1 -1
  31. package/dist/esm/production/extractor/catalog/CatalogPersister.js +1 -1
  32. package/dist/esm/production/extractor/catalog/SaveScheduler.js +1 -1
  33. package/dist/esm/production/extractor/catalogLoader.js +1 -1
  34. package/dist/esm/production/extractor/extractMessages.js +1 -1
  35. package/dist/esm/production/extractor/extractionLoader.js +1 -1
  36. package/dist/esm/production/extractor/extractor/MessageExtractor.js +1 -1
  37. package/dist/esm/production/extractor/format/ExtractorCodec.js +1 -0
  38. package/dist/esm/production/extractor/format/codecs/JSONCodec.js +1 -0
  39. package/dist/esm/production/extractor/format/codecs/POCodec.js +1 -0
  40. package/dist/esm/production/extractor/format/index.js +1 -0
  41. package/dist/esm/production/extractor/source/SourceFileScanner.js +1 -1
  42. package/dist/esm/production/extractor/source/SourceFileWatcher.js +1 -0
  43. package/dist/esm/production/extractor/utils.js +1 -1
  44. package/dist/esm/production/extractor.js +1 -1
  45. package/dist/esm/production/plugin/createNextIntlPlugin.js +1 -1
  46. package/dist/esm/production/plugin/declaration/createMessagesDeclaration.js +1 -1
  47. package/dist/esm/production/plugin/extractor/initExtractionCompiler.js +1 -0
  48. package/dist/esm/production/plugin/getNextConfig.js +1 -1
  49. package/dist/esm/production/plugin/utils.js +1 -1
  50. package/dist/types/extractor/ExtractionCompiler.d.ts +5 -10
  51. package/dist/types/extractor/catalog/CatalogLocales.d.ts +0 -2
  52. package/dist/types/extractor/catalog/CatalogManager.d.ts +26 -15
  53. package/dist/types/extractor/catalog/CatalogPersister.d.ts +15 -6
  54. package/dist/types/extractor/catalog/SaveScheduler.d.ts +2 -2
  55. package/dist/types/extractor/extractor/MessageExtractor.d.ts +6 -6
  56. package/dist/types/extractor/format/ExtractorCodec.d.ts +33 -0
  57. package/dist/types/extractor/format/codecs/JSONCodec.d.ts +2 -0
  58. package/dist/types/extractor/format/codecs/POCodec.d.ts +2 -0
  59. package/dist/types/extractor/format/codecs/fixtures/JSONCodecStructured.d.ts +2 -0
  60. package/dist/types/extractor/format/codecs/fixtures/POCodecSourceMessageKey.d.ts +2 -0
  61. package/dist/types/extractor/format/index.d.ts +15 -0
  62. package/dist/types/extractor/format/types.d.ts +8 -0
  63. package/dist/types/extractor/index.d.ts +1 -0
  64. package/dist/types/extractor/source/SourceFileFilter.d.ts +2 -2
  65. package/dist/types/extractor/source/SourceFileScanner.d.ts +1 -1
  66. package/dist/types/extractor/source/SourceFileWatcher.d.ts +15 -0
  67. package/dist/types/extractor/types.d.ts +2 -2
  68. package/dist/types/extractor/utils.d.ts +3 -0
  69. package/dist/types/plugin/extractor/initExtractionCompiler.d.ts +2 -0
  70. package/dist/types/plugin/types.d.ts +1 -1
  71. package/dist/types/plugin/utils.d.ts +6 -0
  72. package/package.json +6 -5
  73. package/dist/esm/development/extractor/formatters/Formatter.js +0 -3
  74. package/dist/esm/development/extractor/formatters/JSONFormatter.js +0 -42
  75. package/dist/esm/development/extractor/formatters/POFormatter.js +0 -51
  76. package/dist/esm/development/extractor/formatters/index.js +0 -6
  77. package/dist/esm/development/extractor/formatters/utils.js +0 -15
  78. package/dist/esm/production/extractor/formatters/Formatter.js +0 -1
  79. package/dist/esm/production/extractor/formatters/JSONFormatter.js +0 -1
  80. package/dist/esm/production/extractor/formatters/POFormatter.js +0 -1
  81. package/dist/esm/production/extractor/formatters/index.js +0 -1
  82. package/dist/esm/production/extractor/formatters/utils.js +0 -1
  83. package/dist/types/extractor/extractor/ASTScope.d.ts +0 -12
  84. package/dist/types/extractor/formatters/Formatter.d.ts +0 -10
  85. package/dist/types/extractor/formatters/JSONFormatter.d.ts +0 -10
  86. package/dist/types/extractor/formatters/POFormatter.d.ts +0 -10
  87. package/dist/types/extractor/formatters/index.d.ts +0 -5
  88. package/dist/types/extractor/formatters/utils.d.ts +0 -2
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ function defineCodec(factory) {
4
+ return factory;
5
+ }
6
+
7
+ exports.defineCodec = defineCodec;
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ var plugin = require('./plugin-DDtWCyPI.cjs');
4
+ var ExtractorCodec = require('./ExtractorCodec-D9Tw618d.cjs');
5
+ require('fs/promises');
6
+ require('path');
7
+ require('@parcel/watcher');
8
+ require('fs');
9
+ require('module');
10
+ require('@swc/core');
11
+
12
+ var JSONCodec = ExtractorCodec.defineCodec(() => ({
13
+ decode(source) {
14
+ const json = JSON.parse(source);
15
+ const messages = [];
16
+ traverseMessages(json, (message, id) => {
17
+ messages.push({
18
+ id,
19
+ message
20
+ });
21
+ });
22
+ return messages;
23
+ },
24
+ encode(messages) {
25
+ const root = {};
26
+ for (const message of plugin.getSortedMessages(messages)) {
27
+ plugin.setNestedProperty(root, message.id, message.message);
28
+ }
29
+ return JSON.stringify(root, null, 2) + '\n';
30
+ },
31
+ toJSONString(source) {
32
+ return source;
33
+ }
34
+ }));
35
+ function traverseMessages(obj, callback, path = '') {
36
+ const NAMESPACE_SEPARATOR = '.';
37
+ for (const key of Object.keys(obj)) {
38
+ const newPath = path ? path + NAMESPACE_SEPARATOR + key : key;
39
+ const value = obj[key];
40
+ if (typeof value === 'string') {
41
+ callback(value, newPath);
42
+ } else if (typeof value === 'object') {
43
+ traverseMessages(value, callback, newPath);
44
+ }
45
+ }
46
+ }
47
+
48
+ exports.default = JSONCodec;
@@ -0,0 +1,105 @@
1
+ 'use strict';
2
+
3
+ var POParser = require('po-parser');
4
+ var plugin = require('./plugin-DDtWCyPI.cjs');
5
+ var ExtractorCodec = require('./ExtractorCodec-D9Tw618d.cjs');
6
+ require('fs/promises');
7
+ require('path');
8
+ require('@parcel/watcher');
9
+ require('fs');
10
+ require('module');
11
+ require('@swc/core');
12
+
13
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
14
+
15
+ var POParser__default = /*#__PURE__*/_interopDefaultCompat(POParser);
16
+
17
+ var POCodec = ExtractorCodec.defineCodec(() => {
18
+ // See also https://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html
19
+ const DEFAULT_METADATA = {
20
+ // Recommended by spec
21
+ 'Content-Type': 'text/plain; charset=utf-8',
22
+ 'Content-Transfer-Encoding': '8bit',
23
+ // Otherwise other tools might set this
24
+ 'X-Generator': 'next-intl',
25
+ // Crowdin defaults to using msgid as source key
26
+ 'X-Crowdin-SourceKey': 'msgstr'
27
+ };
28
+
29
+ // Move all parts before the last dot to msgctxt
30
+ const NAMESPACE_SEPARATOR = '.';
31
+
32
+ // Metadata is stored so it can be retained when writing
33
+ const metadataByLocale = new Map();
34
+ return {
35
+ decode(content, context) {
36
+ const catalog = POParser__default.default.parse(content);
37
+ if (catalog.meta) {
38
+ metadataByLocale.set(context.locale, catalog.meta);
39
+ }
40
+ const messages = catalog.messages || [];
41
+ return messages.map(msg => {
42
+ const {
43
+ extractedComments,
44
+ msgctxt,
45
+ msgid,
46
+ msgstr,
47
+ ...rest
48
+ } = msg;
49
+ if (extractedComments && extractedComments.length > 1) {
50
+ throw new Error(`Multiple extracted comments are not supported. Found ${extractedComments.length} comments for msgid "${msgid}".`);
51
+ }
52
+ return {
53
+ ...rest,
54
+ id: msgctxt ? [msgctxt, msgid].join(NAMESPACE_SEPARATOR) : msgid,
55
+ message: msgstr,
56
+ ...(extractedComments && extractedComments.length > 0 && {
57
+ description: extractedComments[0]
58
+ })
59
+ };
60
+ });
61
+ },
62
+ encode(messages, context) {
63
+ const encodedMessages = plugin.getSortedMessages(messages).map(msg => {
64
+ const {
65
+ description,
66
+ id,
67
+ message,
68
+ ...rest
69
+ } = msg;
70
+ const lastDotIndex = id.lastIndexOf(NAMESPACE_SEPARATOR);
71
+ const hasNamespace = id.includes(NAMESPACE_SEPARATOR);
72
+ const msgid = hasNamespace ? id.slice(lastDotIndex + NAMESPACE_SEPARATOR.length) : id;
73
+ return {
74
+ msgid,
75
+ msgstr: message,
76
+ ...(description && {
77
+ extractedComments: [description]
78
+ }),
79
+ ...(hasNamespace && {
80
+ msgctxt: id.slice(0, lastDotIndex)
81
+ }),
82
+ ...rest
83
+ };
84
+ });
85
+ return POParser__default.default.serialize({
86
+ meta: {
87
+ Language: context.locale,
88
+ ...DEFAULT_METADATA,
89
+ ...metadataByLocale.get(context.locale)
90
+ },
91
+ messages: encodedMessages
92
+ });
93
+ },
94
+ toJSONString(source, context) {
95
+ const parsed = this.decode(source, context);
96
+ const messagesObject = {};
97
+ for (const message of parsed) {
98
+ plugin.setNestedProperty(messagesObject, message.id, message.message);
99
+ }
100
+ return JSON.stringify(messagesObject);
101
+ }
102
+ };
103
+ });
104
+
105
+ exports.default = POCodec;