@angular/localize 13.0.0-next.9 → 13.0.0-rc.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.
Files changed (138) hide show
  1. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  2. package/esm2020/init/index.mjs +12 -0
  3. package/{esm2015/localize.js → esm2020/localize.mjs} +0 -0
  4. package/{esm2015/private.js → esm2020/private.mjs} +0 -0
  5. package/{esm2015/src/localize/index.js → esm2020/src/localize/index.mjs} +0 -0
  6. package/{esm2015/src/localize/src/global.js → esm2020/src/localize/src/global.mjs} +0 -0
  7. package/{esm2015/src/localize/src/localize.js → esm2020/src/localize/src/localize.mjs} +2 -2
  8. package/{esm2015/src/translate.js → esm2020/src/translate.mjs} +0 -0
  9. package/{esm2015/src/utils/index.js → esm2020/src/utils/index.mjs} +0 -0
  10. package/{esm2015/src/utils/src/constants.js → esm2020/src/utils/src/constants.mjs} +0 -0
  11. package/esm2020/src/utils/src/messages.mjs +159 -0
  12. package/{esm2015/src/utils/src/translations.js → esm2020/src/utils/src/translations.mjs} +0 -0
  13. package/fesm2015/{init.js → init.mjs} +3 -3
  14. package/fesm2015/init.mjs.map +1 -0
  15. package/fesm2015/{localize.js → localize.mjs} +7 -7
  16. package/fesm2015/localize.mjs.map +1 -0
  17. package/fesm2020/init.mjs +204 -0
  18. package/fesm2020/init.mjs.map +1 -0
  19. package/fesm2020/localize.mjs +449 -0
  20. package/fesm2020/localize.mjs.map +1 -0
  21. package/init/index.d.ts +1 -1
  22. package/init/package.json +5 -5
  23. package/package.json +43 -18
  24. package/schematics/ng-add/index.js +1 -1
  25. package/src/localize/src/localize.d.ts +1 -1
  26. package/src/utils/src/messages.d.ts +1 -1
  27. package/tools/README.md +4 -0
  28. package/tools/bundles/index.js +1929 -0
  29. package/tools/bundles/index.js.map +6 -0
  30. package/tools/bundles/src/extract/cli.js +1278 -0
  31. package/tools/bundles/src/extract/cli.js.map +6 -0
  32. package/tools/bundles/src/migrate/cli.js +77 -0
  33. package/tools/bundles/src/migrate/cli.js.map +6 -0
  34. package/tools/bundles/src/translate/cli.js +1340 -0
  35. package/tools/bundles/src/translate/cli.js.map +6 -0
  36. package/tools/bundles_metadata.json +1 -0
  37. package/tools/index.d.ts +26 -0
  38. package/tools/src/babel_core.d.ts +38 -0
  39. package/{src/tools → tools}/src/diagnostics.d.ts +1 -1
  40. package/tools/src/extract/cli.d.ts +10 -0
  41. package/{src/tools → tools}/src/extract/duplicates.d.ts +2 -2
  42. package/{src/tools → tools}/src/extract/extraction.d.ts +2 -3
  43. package/{src/tools/src/extract/main.d.ts → tools/src/extract/index.d.ts} +2 -4
  44. package/{src/tools → tools}/src/extract/source_files/es2015_extract_plugin.d.ts +3 -3
  45. package/{src/tools → tools}/src/extract/source_files/es5_extract_plugin.d.ts +3 -3
  46. package/{src/tools → tools}/src/extract/translation_files/arb_translation_serializer.d.ts +2 -2
  47. package/{src/tools → tools}/src/extract/translation_files/format_options.d.ts +1 -1
  48. package/{src/tools → tools}/src/extract/translation_files/icu_parsing.d.ts +1 -1
  49. package/{src/tools → tools}/src/extract/translation_files/json_translation_serializer.d.ts +1 -1
  50. package/{src/tools → tools}/src/extract/translation_files/legacy_message_id_migration_serializer.d.ts +1 -1
  51. package/{src/tools → tools}/src/extract/translation_files/translation_serializer.d.ts +1 -1
  52. package/{src/tools → tools}/src/extract/translation_files/utils.d.ts +1 -1
  53. package/{src/tools → tools}/src/extract/translation_files/xliff1_translation_serializer.d.ts +2 -2
  54. package/{src/tools → tools}/src/extract/translation_files/xliff2_translation_serializer.d.ts +2 -2
  55. package/{src/tools → tools}/src/extract/translation_files/xmb_translation_serializer.d.ts +2 -2
  56. package/{src/tools → tools}/src/extract/translation_files/xml_file.d.ts +1 -1
  57. package/tools/src/migrate/cli.d.ts +10 -0
  58. package/{src/tools/src/migrate/main.d.ts → tools/src/migrate/index.d.ts} +9 -3
  59. package/{src/tools → tools}/src/migrate/migrate.d.ts +1 -1
  60. package/{src/tools → tools}/src/source_file_utils.d.ts +3 -3
  61. package/{src/tools → tools}/src/translate/asset_files/asset_translation_handler.d.ts +2 -2
  62. package/tools/src/translate/cli.d.ts +3 -0
  63. package/{src/tools/src/translate/main.d.ts → tools/src/translate/index.d.ts} +1 -2
  64. package/{src/tools → tools}/src/translate/output_path.d.ts +2 -2
  65. package/{src/tools → tools}/src/translate/source_files/es2015_translate_plugin.d.ts +3 -3
  66. package/{src/tools → tools}/src/translate/source_files/es5_translate_plugin.d.ts +3 -3
  67. package/{src/tools → tools}/src/translate/source_files/locale_plugin.d.ts +2 -2
  68. package/{src/tools → tools}/src/translate/source_files/source_file_translation_handler.d.ts +2 -2
  69. package/{src/tools → tools}/src/translate/translation_files/base_visitor.d.ts +1 -1
  70. package/{src/tools → tools}/src/translate/translation_files/message_serialization/message_renderer.d.ts +1 -1
  71. package/{src/tools → tools}/src/translate/translation_files/message_serialization/message_serializer.d.ts +1 -1
  72. package/{src/tools → tools}/src/translate/translation_files/message_serialization/target_message_renderer.d.ts +1 -1
  73. package/{src/tools → tools}/src/translate/translation_files/translation_loader.d.ts +2 -2
  74. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/arb_translation_parser.d.ts +1 -1
  75. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/serialize_translation_message.d.ts +1 -1
  76. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/simple_json_translation_parser.d.ts +1 -1
  77. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_parse_error.d.ts +1 -1
  78. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_parser.d.ts +2 -2
  79. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/translation_utils.d.ts +1 -1
  80. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xliff1_translation_parser.d.ts +1 -1
  81. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xliff2_translation_parser.d.ts +1 -1
  82. package/{src/tools → tools}/src/translate/translation_files/translation_parsers/xtb_translation_parser.d.ts +1 -1
  83. package/{src/tools → tools}/src/translate/translator.d.ts +2 -2
  84. package/bundles/localize-init.umd.js +0 -218
  85. package/bundles/localize-init.umd.js.map +0 -1
  86. package/bundles/localize.umd.js +0 -782
  87. package/bundles/localize.umd.js.map +0 -1
  88. package/esm2015/init/index.js +0 -12
  89. package/esm2015/init/init.externs.js +0 -0
  90. package/esm2015/localize.externs.js +0 -0
  91. package/esm2015/src/localize/localize.externs.js +0 -0
  92. package/esm2015/src/utils/src/messages.js +0 -159
  93. package/esm2015/src/utils/utils.externs.js +0 -0
  94. package/fesm2015/init.js.map +0 -1
  95. package/fesm2015/localize.js.map +0 -1
  96. package/init.d.ts +0 -7
  97. package/src/tools/src/diagnostics.js +0 -68
  98. package/src/tools/src/extract/duplicates.js +0 -84
  99. package/src/tools/src/extract/extraction.js +0 -134
  100. package/src/tools/src/extract/main.js +0 -184
  101. package/src/tools/src/extract/source_files/es2015_extract_plugin.js +0 -36
  102. package/src/tools/src/extract/source_files/es5_extract_plugin.js +0 -49
  103. package/src/tools/src/extract/translation_files/arb_translation_serializer.js +0 -107
  104. package/src/tools/src/extract/translation_files/format_options.js +0 -52
  105. package/src/tools/src/extract/translation_files/icu_parsing.js +0 -224
  106. package/src/tools/src/extract/translation_files/json_translation_serializer.js +0 -47
  107. package/src/tools/src/extract/translation_files/legacy_message_id_migration_serializer.js +0 -63
  108. package/src/tools/src/extract/translation_files/translation_serializer.js +0 -13
  109. package/src/tools/src/extract/translation_files/utils.js +0 -102
  110. package/src/tools/src/extract/translation_files/xliff1_translation_serializer.js +0 -242
  111. package/src/tools/src/extract/translation_files/xliff2_translation_serializer.js +0 -231
  112. package/src/tools/src/extract/translation_files/xmb_translation_serializer.js +0 -139
  113. package/src/tools/src/extract/translation_files/xml_file.js +0 -117
  114. package/src/tools/src/migrate/main.js +0 -79
  115. package/src/tools/src/migrate/migrate.js +0 -48
  116. package/src/tools/src/source_file_utils.js +0 -443
  117. package/src/tools/src/translate/asset_files/asset_translation_handler.js +0 -65
  118. package/src/tools/src/translate/main.js +0 -157
  119. package/src/tools/src/translate/output_path.js +0 -28
  120. package/src/tools/src/translate/source_files/es2015_translate_plugin.js +0 -60
  121. package/src/tools/src/translate/source_files/es5_translate_plugin.js +0 -58
  122. package/src/tools/src/translate/source_files/locale_plugin.js +0 -95
  123. package/src/tools/src/translate/source_files/source_file_translation_handler.js +0 -127
  124. package/src/tools/src/translate/translation_files/base_visitor.js +0 -31
  125. package/src/tools/src/translate/translation_files/message_serialization/message_renderer.js +0 -20
  126. package/src/tools/src/translate/translation_files/message_serialization/message_serializer.js +0 -100
  127. package/src/tools/src/translate/translation_files/message_serialization/target_message_renderer.js +0 -84
  128. package/src/tools/src/translate/translation_files/translation_loader.js +0 -148
  129. package/src/tools/src/translate/translation_files/translation_parsers/arb_translation_parser.js +0 -111
  130. package/src/tools/src/translate/translation_files/translation_parsers/serialize_translation_message.js +0 -32
  131. package/src/tools/src/translate/translation_files/translation_parsers/simple_json_translation_parser.js +0 -96
  132. package/src/tools/src/translate/translation_files/translation_parsers/translation_parse_error.js +0 -47
  133. package/src/tools/src/translate/translation_files/translation_parsers/translation_parser.js +0 -13
  134. package/src/tools/src/translate/translation_files/translation_parsers/translation_utils.js +0 -175
  135. package/src/tools/src/translate/translation_files/translation_parsers/xliff1_translation_parser.js +0 -175
  136. package/src/tools/src/translate/translation_files/translation_parsers/xliff2_translation_parser.js +0 -166
  137. package/src/tools/src/translate/translation_files/translation_parsers/xtb_translation_parser.js +0 -133
  138. package/src/tools/src/translate/translator.js +0 -53
@@ -1,102 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define("@angular/localize/src/tools/src/extract/translation_files/utils", ["require", "exports", "tslib"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.compareLocations = exports.hasLocation = exports.consolidateMessages = void 0;
13
- var tslib_1 = require("tslib");
14
- /**
15
- * Consolidate messages into groups that have the same id.
16
- *
17
- * Messages with the same id are grouped together so that we can quickly deduplicate messages when
18
- * rendering into translation files.
19
- *
20
- * To ensure that messages are rendered in a deterministic order:
21
- * - the messages within a group are sorted by location (file path, then start position)
22
- * - the groups are sorted by the location of the first message in the group
23
- *
24
- * @param messages the messages to consolidate.
25
- * @param getMessageId a function that will compute the message id of a message.
26
- * @returns an array of message groups, where each group is an array of messages that have the same
27
- * id.
28
- */
29
- function consolidateMessages(messages, getMessageId) {
30
- var e_1, _a, e_2, _b;
31
- var messageGroups = new Map();
32
- try {
33
- for (var messages_1 = (0, tslib_1.__values)(messages), messages_1_1 = messages_1.next(); !messages_1_1.done; messages_1_1 = messages_1.next()) {
34
- var message = messages_1_1.value;
35
- var id = getMessageId(message);
36
- if (!messageGroups.has(id)) {
37
- messageGroups.set(id, [message]);
38
- }
39
- else {
40
- messageGroups.get(id).push(message);
41
- }
42
- }
43
- }
44
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
45
- finally {
46
- try {
47
- if (messages_1_1 && !messages_1_1.done && (_a = messages_1.return)) _a.call(messages_1);
48
- }
49
- finally { if (e_1) throw e_1.error; }
50
- }
51
- try {
52
- // Here we sort the messages within a group into location order.
53
- // Note that `Array.sort()` will mutate the array in-place.
54
- for (var _c = (0, tslib_1.__values)(messageGroups.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
55
- var messages_2 = _d.value;
56
- messages_2.sort(compareLocations);
57
- }
58
- }
59
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
60
- finally {
61
- try {
62
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
63
- }
64
- finally { if (e_2) throw e_2.error; }
65
- }
66
- // Now we sort the groups by location of the first message in the group.
67
- return Array.from(messageGroups.values()).sort(function (a1, a2) { return compareLocations(a1[0], a2[0]); });
68
- }
69
- exports.consolidateMessages = consolidateMessages;
70
- /**
71
- * Does the given message have a location property?
72
- */
73
- function hasLocation(message) {
74
- return message.location !== undefined;
75
- }
76
- exports.hasLocation = hasLocation;
77
- function compareLocations(_a, _b) {
78
- var location1 = _a.location;
79
- var location2 = _b.location;
80
- if (location1 === location2) {
81
- return 0;
82
- }
83
- if (location1 === undefined) {
84
- return -1;
85
- }
86
- if (location2 === undefined) {
87
- return 1;
88
- }
89
- if (location1.file !== location2.file) {
90
- return location1.file < location2.file ? -1 : 1;
91
- }
92
- if (location1.start.line !== location2.start.line) {
93
- return location1.start.line < location2.start.line ? -1 : 1;
94
- }
95
- if (location1.start.column !== location2.start.column) {
96
- return location1.start.column < location2.start.column ? -1 : 1;
97
- }
98
- return 0;
99
- }
100
- exports.compareLocations = compareLocations;
101
- });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sb2NhbGl6ZS9zcmMvdG9vbHMvc3JjL2V4dHJhY3QvdHJhbnNsYXRpb25fZmlsZXMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQVNBOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsU0FBZ0IsbUJBQW1CLENBQy9CLFFBQTBCLEVBQzFCLFlBQWlEOztRQUNuRCxJQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQzs7WUFDOUQsS0FBc0IsSUFBQSxhQUFBLHNCQUFBLFFBQVEsQ0FBQSxrQ0FBQSx3REFBRTtnQkFBM0IsSUFBTSxPQUFPLHFCQUFBO2dCQUNoQixJQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUMxQixhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0QzthQUNGOzs7Ozs7Ozs7O1lBRUQsZ0VBQWdFO1lBQ2hFLDJEQUEyRDtZQUMzRCxLQUF1QixJQUFBLEtBQUEsc0JBQUEsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO2dCQUExQyxJQUFNLFVBQVEsV0FBQTtnQkFDakIsVUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2pDOzs7Ozs7Ozs7UUFDRCx3RUFBd0U7UUFDeEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEVBQUUsRUFBRSxFQUFFLElBQUssT0FBQSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQTlCLENBQThCLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBcEJELGtEQW9CQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQXVCO1FBRWpELE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUhELGtDQUdDO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLEVBQXFDLEVBQUUsRUFBcUM7WUFBakUsU0FBUyxjQUFBO1lBQThCLFNBQVMsY0FBQTtRQUM3RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3JDLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNqRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBckJELDRDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHvJtU1lc3NhZ2VJZCwgybVQYXJzZWRNZXNzYWdlLCDJtVNvdXJjZUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZSc7XG5cbi8qKlxuICogQ29uc29saWRhdGUgbWVzc2FnZXMgaW50byBncm91cHMgdGhhdCBoYXZlIHRoZSBzYW1lIGlkLlxuICpcbiAqIE1lc3NhZ2VzIHdpdGggdGhlIHNhbWUgaWQgYXJlIGdyb3VwZWQgdG9nZXRoZXIgc28gdGhhdCB3ZSBjYW4gcXVpY2tseSBkZWR1cGxpY2F0ZSBtZXNzYWdlcyB3aGVuXG4gKiByZW5kZXJpbmcgaW50byB0cmFuc2xhdGlvbiBmaWxlcy5cbiAqXG4gKiBUbyBlbnN1cmUgdGhhdCBtZXNzYWdlcyBhcmUgcmVuZGVyZWQgaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyOlxuICogIC0gdGhlIG1lc3NhZ2VzIHdpdGhpbiBhIGdyb3VwIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24gKGZpbGUgcGF0aCwgdGhlbiBzdGFydCBwb3NpdGlvbilcbiAqICAtIHRoZSBncm91cHMgYXJlIHNvcnRlZCBieSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhlIGdyb3VwXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VzIHRoZSBtZXNzYWdlcyB0byBjb25zb2xpZGF0ZS5cbiAqIEBwYXJhbSBnZXRNZXNzYWdlSWQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgbWVzc2FnZSBpZCBvZiBhIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBtZXNzYWdlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBpcyBhbiBhcnJheSBvZiBtZXNzYWdlcyB0aGF0IGhhdmUgdGhlIHNhbWVcbiAqICAgICBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGlkYXRlTWVzc2FnZXMoXG4gICAgbWVzc2FnZXM6IMm1UGFyc2VkTWVzc2FnZVtdLFxuICAgIGdldE1lc3NhZ2VJZDogKG1lc3NhZ2U6IMm1UGFyc2VkTWVzc2FnZSkgPT4gc3RyaW5nKTogybVQYXJzZWRNZXNzYWdlW11bXSB7XG4gIGNvbnN0IG1lc3NhZ2VHcm91cHMgPSBuZXcgTWFwPMm1TWVzc2FnZUlkLCDJtVBhcnNlZE1lc3NhZ2VbXT4oKTtcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgY29uc3QgaWQgPSBnZXRNZXNzYWdlSWQobWVzc2FnZSk7XG4gICAgaWYgKCFtZXNzYWdlR3JvdXBzLmhhcyhpZCkpIHtcbiAgICAgIG1lc3NhZ2VHcm91cHMuc2V0KGlkLCBbbWVzc2FnZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlR3JvdXBzLmdldChpZCkhLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVyZSB3ZSBzb3J0IHRoZSBtZXNzYWdlcyB3aXRoaW4gYSBncm91cCBpbnRvIGxvY2F0aW9uIG9yZGVyLlxuICAvLyBOb3RlIHRoYXQgYEFycmF5LnNvcnQoKWAgd2lsbCBtdXRhdGUgdGhlIGFycmF5IGluLXBsYWNlLlxuICBmb3IgKGNvbnN0IG1lc3NhZ2VzIG9mIG1lc3NhZ2VHcm91cHMudmFsdWVzKCkpIHtcbiAgICBtZXNzYWdlcy5zb3J0KGNvbXBhcmVMb2NhdGlvbnMpO1xuICB9XG4gIC8vIE5vdyB3ZSBzb3J0IHRoZSBncm91cHMgYnkgbG9jYXRpb24gb2YgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhlIGdyb3VwLlxuICByZXR1cm4gQXJyYXkuZnJvbShtZXNzYWdlR3JvdXBzLnZhbHVlcygpKS5zb3J0KChhMSwgYTIpID0+IGNvbXBhcmVMb2NhdGlvbnMoYTFbMF0sIGEyWzBdKSk7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZ2l2ZW4gbWVzc2FnZSBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHk/XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNMb2NhdGlvbihtZXNzYWdlOiDJtVBhcnNlZE1lc3NhZ2UpOiBtZXNzYWdlIGlzIMm1UGFyc2VkTWVzc2FnZSZcbiAgICB7bG9jYXRpb246IMm1U291cmNlTG9jYXRpb259IHtcbiAgcmV0dXJuIG1lc3NhZ2UubG9jYXRpb24gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVMb2NhdGlvbnMoXG4gICAge2xvY2F0aW9uOiBsb2NhdGlvbjF9OiDJtVBhcnNlZE1lc3NhZ2UsIHtsb2NhdGlvbjogbG9jYXRpb24yfTogybVQYXJzZWRNZXNzYWdlKTogbnVtYmVyIHtcbiAgaWYgKGxvY2F0aW9uMSA9PT0gbG9jYXRpb24yKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGxvY2F0aW9uMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChsb2NhdGlvbjIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChsb2NhdGlvbjEuZmlsZSAhPT0gbG9jYXRpb24yLmZpbGUpIHtcbiAgICByZXR1cm4gbG9jYXRpb24xLmZpbGUgPCBsb2NhdGlvbjIuZmlsZSA/IC0xIDogMTtcbiAgfVxuICBpZiAobG9jYXRpb24xLnN0YXJ0LmxpbmUgIT09IGxvY2F0aW9uMi5zdGFydC5saW5lKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uMS5zdGFydC5saW5lIDwgbG9jYXRpb24yLnN0YXJ0LmxpbmUgPyAtMSA6IDE7XG4gIH1cbiAgaWYgKGxvY2F0aW9uMS5zdGFydC5jb2x1bW4gIT09IGxvY2F0aW9uMi5zdGFydC5jb2x1bW4pIHtcbiAgICByZXR1cm4gbG9jYXRpb24xLnN0YXJ0LmNvbHVtbiA8IGxvY2F0aW9uMi5zdGFydC5jb2x1bW4gPyAtMSA6IDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG4iXX0=
@@ -1,242 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define("@angular/localize/src/tools/src/extract/translation_files/xliff1_translation_serializer", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/localize/src/tools/src/extract/translation_files/format_options", "@angular/localize/src/tools/src/extract/translation_files/icu_parsing", "@angular/localize/src/tools/src/extract/translation_files/utils", "@angular/localize/src/tools/src/extract/translation_files/xml_file"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Xliff1TranslationSerializer = void 0;
13
- var tslib_1 = require("tslib");
14
- /**
15
- * @license
16
- * Copyright Google LLC All Rights Reserved.
17
- *
18
- * Use of this source code is governed by an MIT-style license that can be
19
- * found in the LICENSE file at https://angular.io/license
20
- */
21
- var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
22
- var format_options_1 = require("@angular/localize/src/tools/src/extract/translation_files/format_options");
23
- var icu_parsing_1 = require("@angular/localize/src/tools/src/extract/translation_files/icu_parsing");
24
- var utils_1 = require("@angular/localize/src/tools/src/extract/translation_files/utils");
25
- var xml_file_1 = require("@angular/localize/src/tools/src/extract/translation_files/xml_file");
26
- /** This is the number of characters that a legacy Xliff 1.2 message id has. */
27
- var LEGACY_XLIFF_MESSAGE_LENGTH = 40;
28
- /**
29
- * A translation serializer that can write XLIFF 1.2 formatted files.
30
- *
31
- * https://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html
32
- * https://docs.oasis-open.org/xliff/v1.2/xliff-profile-html/xliff-profile-html-1.2.html
33
- *
34
- * @see Xliff1TranslationParser
35
- * @publicApi used by CLI
36
- */
37
- var Xliff1TranslationSerializer = /** @class */ (function () {
38
- function Xliff1TranslationSerializer(sourceLocale, basePath, useLegacyIds, formatOptions, fs) {
39
- if (formatOptions === void 0) { formatOptions = {}; }
40
- if (fs === void 0) { fs = (0, file_system_1.getFileSystem)(); }
41
- this.sourceLocale = sourceLocale;
42
- this.basePath = basePath;
43
- this.useLegacyIds = useLegacyIds;
44
- this.formatOptions = formatOptions;
45
- this.fs = fs;
46
- (0, format_options_1.validateOptions)('Xliff1TranslationSerializer', [['xml:space', ['preserve']]], formatOptions);
47
- }
48
- Xliff1TranslationSerializer.prototype.serialize = function (messages) {
49
- var e_1, _a, e_2, _b;
50
- var _this = this;
51
- var messageGroups = (0, utils_1.consolidateMessages)(messages, function (message) { return _this.getMessageId(message); });
52
- var xml = new xml_file_1.XmlFile();
53
- xml.startTag('xliff', { 'version': '1.2', 'xmlns': 'urn:oasis:names:tc:xliff:document:1.2' });
54
- // NOTE: the `original` property is set to the legacy `ng2.template` value for backward
55
- // compatibility.
56
- // We could compute the file from the `message.location` property, but there could
57
- // be multiple values for this in the collection of `messages`. In that case we would probably
58
- // need to change the serializer to output a new `<file>` element for each collection of
59
- // messages that come from a particular original file, and the translation file parsers may not
60
- // be able to cope with this.
61
- xml.startTag('file', (0, tslib_1.__assign)({ 'source-language': this.sourceLocale, 'datatype': 'plaintext', 'original': 'ng2.template' }, this.formatOptions));
62
- xml.startTag('body');
63
- try {
64
- for (var messageGroups_1 = (0, tslib_1.__values)(messageGroups), messageGroups_1_1 = messageGroups_1.next(); !messageGroups_1_1.done; messageGroups_1_1 = messageGroups_1.next()) {
65
- var duplicateMessages = messageGroups_1_1.value;
66
- var message = duplicateMessages[0];
67
- var id = this.getMessageId(message);
68
- xml.startTag('trans-unit', { id: id, datatype: 'html' });
69
- xml.startTag('source', {}, { preserveWhitespace: true });
70
- this.serializeMessage(xml, message);
71
- xml.endTag('source', { preserveWhitespace: false });
72
- try {
73
- // Write all the locations
74
- for (var _c = (e_2 = void 0, (0, tslib_1.__values)(duplicateMessages.filter(utils_1.hasLocation))), _d = _c.next(); !_d.done; _d = _c.next()) {
75
- var location = _d.value.location;
76
- this.serializeLocation(xml, location);
77
- }
78
- }
79
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
80
- finally {
81
- try {
82
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
83
- }
84
- finally { if (e_2) throw e_2.error; }
85
- }
86
- if (message.description) {
87
- this.serializeNote(xml, 'description', message.description);
88
- }
89
- if (message.meaning) {
90
- this.serializeNote(xml, 'meaning', message.meaning);
91
- }
92
- xml.endTag('trans-unit');
93
- }
94
- }
95
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
96
- finally {
97
- try {
98
- if (messageGroups_1_1 && !messageGroups_1_1.done && (_a = messageGroups_1.return)) _a.call(messageGroups_1);
99
- }
100
- finally { if (e_1) throw e_1.error; }
101
- }
102
- xml.endTag('body');
103
- xml.endTag('file');
104
- xml.endTag('xliff');
105
- return xml.toString();
106
- };
107
- Xliff1TranslationSerializer.prototype.serializeMessage = function (xml, message) {
108
- var _a;
109
- var length = message.messageParts.length - 1;
110
- for (var i = 0; i < length; i++) {
111
- this.serializeTextPart(xml, message.messageParts[i]);
112
- var location = (_a = message.substitutionLocations) === null || _a === void 0 ? void 0 : _a[message.placeholderNames[i]];
113
- this.serializePlaceholder(xml, message.placeholderNames[i], location === null || location === void 0 ? void 0 : location.text);
114
- }
115
- this.serializeTextPart(xml, message.messageParts[length]);
116
- };
117
- Xliff1TranslationSerializer.prototype.serializeTextPart = function (xml, text) {
118
- var pieces = (0, icu_parsing_1.extractIcuPlaceholders)(text);
119
- var length = pieces.length - 1;
120
- for (var i = 0; i < length; i += 2) {
121
- xml.text(pieces[i]);
122
- this.serializePlaceholder(xml, pieces[i + 1], undefined);
123
- }
124
- xml.text(pieces[length]);
125
- };
126
- Xliff1TranslationSerializer.prototype.serializePlaceholder = function (xml, id, text) {
127
- var attrs = { id: id };
128
- var ctype = getCtypeForPlaceholder(id);
129
- if (ctype !== null) {
130
- attrs.ctype = ctype;
131
- }
132
- if (text !== undefined) {
133
- attrs['equiv-text'] = text;
134
- }
135
- xml.startTag('x', attrs, { selfClosing: true });
136
- };
137
- Xliff1TranslationSerializer.prototype.serializeNote = function (xml, name, value) {
138
- xml.startTag('note', { priority: '1', from: name }, { preserveWhitespace: true });
139
- xml.text(value);
140
- xml.endTag('note', { preserveWhitespace: false });
141
- };
142
- Xliff1TranslationSerializer.prototype.serializeLocation = function (xml, location) {
143
- xml.startTag('context-group', { purpose: 'location' });
144
- this.renderContext(xml, 'sourcefile', this.fs.relative(this.basePath, location.file));
145
- var endLineString = location.end !== undefined && location.end.line !== location.start.line ?
146
- "," + (location.end.line + 1) :
147
- '';
148
- this.renderContext(xml, 'linenumber', "" + (location.start.line + 1) + endLineString);
149
- xml.endTag('context-group');
150
- };
151
- Xliff1TranslationSerializer.prototype.renderContext = function (xml, type, value) {
152
- xml.startTag('context', { 'context-type': type }, { preserveWhitespace: true });
153
- xml.text(value);
154
- xml.endTag('context', { preserveWhitespace: false });
155
- };
156
- /**
157
- * Get the id for the given `message`.
158
- *
159
- * If there was a custom id provided, use that.
160
- *
161
- * If we have requested legacy message ids, then try to return the appropriate id
162
- * from the list of legacy ids that were extracted.
163
- *
164
- * Otherwise return the canonical message id.
165
- *
166
- * An Xliff 1.2 legacy message id is a hex encoded SHA-1 string, which is 40 characters long. See
167
- * https://csrc.nist.gov/csrc/media/publications/fips/180/4/final/documents/fips180-4-draft-aug2014.pdf
168
- */
169
- Xliff1TranslationSerializer.prototype.getMessageId = function (message) {
170
- return message.customId ||
171
- this.useLegacyIds && message.legacyIds !== undefined &&
172
- message.legacyIds.find(function (id) { return id.length === LEGACY_XLIFF_MESSAGE_LENGTH; }) ||
173
- message.id;
174
- };
175
- return Xliff1TranslationSerializer;
176
- }());
177
- exports.Xliff1TranslationSerializer = Xliff1TranslationSerializer;
178
- /**
179
- * Compute the value of the `ctype` attribute from the `placeholder` name.
180
- *
181
- * The placeholder can take the following forms:
182
- *
183
- * - `START_BOLD_TEXT`/`END_BOLD_TEXT`
184
- * - `TAG_<ELEMENT_NAME>`
185
- * - `START_TAG_<ELEMENT_NAME>`
186
- * - `CLOSE_TAG_<ELEMENT_NAME>`
187
- *
188
- * In these cases the element name of the tag is extracted from the placeholder name and returned as
189
- * `x-<element_name>`.
190
- *
191
- * Line breaks and images are special cases.
192
- */
193
- function getCtypeForPlaceholder(placeholder) {
194
- var tag = placeholder.replace(/^(START_|CLOSE_)/, '');
195
- switch (tag) {
196
- case 'LINE_BREAK':
197
- return 'lb';
198
- case 'TAG_IMG':
199
- return 'image';
200
- default:
201
- var element = tag.startsWith('TAG_') ?
202
- tag.replace(/^TAG_(.+)/, function (_, tagName) { return tagName.toLowerCase(); }) :
203
- TAG_MAP[tag];
204
- if (element === undefined) {
205
- return null;
206
- }
207
- return "x-" + element;
208
- }
209
- }
210
- var TAG_MAP = {
211
- 'LINK': 'a',
212
- 'BOLD_TEXT': 'b',
213
- 'EMPHASISED_TEXT': 'em',
214
- 'HEADING_LEVEL1': 'h1',
215
- 'HEADING_LEVEL2': 'h2',
216
- 'HEADING_LEVEL3': 'h3',
217
- 'HEADING_LEVEL4': 'h4',
218
- 'HEADING_LEVEL5': 'h5',
219
- 'HEADING_LEVEL6': 'h6',
220
- 'HORIZONTAL_RULE': 'hr',
221
- 'ITALIC_TEXT': 'i',
222
- 'LIST_ITEM': 'li',
223
- 'MEDIA_LINK': 'link',
224
- 'ORDERED_LIST': 'ol',
225
- 'PARAGRAPH': 'p',
226
- 'QUOTATION': 'q',
227
- 'STRIKETHROUGH_TEXT': 's',
228
- 'SMALL_TEXT': 'small',
229
- 'SUBSTRIPT': 'sub',
230
- 'SUPERSCRIPT': 'sup',
231
- 'TABLE_BODY': 'tbody',
232
- 'TABLE_CELL': 'td',
233
- 'TABLE_FOOTER': 'tfoot',
234
- 'TABLE_HEADER_CELL': 'th',
235
- 'TABLE_HEADER': 'thead',
236
- 'TABLE_ROW': 'tr',
237
- 'MONOSPACED_TEXT': 'tt',
238
- 'UNDERLINED_TEXT': 'u',
239
- 'UNORDERED_LIST': 'ul',
240
- };
241
- });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxpZmYxX3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sb2NhbGl6ZS9zcmMvdG9vbHMvc3JjL2V4dHJhY3QvdHJhbnNsYXRpb25fZmlsZXMveGxpZmYxX3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILDJFQUE0RztJQUc1RywyR0FBZ0U7SUFDaEUscUdBQXFEO0lBRXJELHlGQUF5RDtJQUN6RCwrRkFBbUM7SUFFbkMsK0VBQStFO0lBQy9FLElBQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0lBRXZDOzs7Ozs7OztPQVFHO0lBQ0g7UUFDRSxxQ0FDWSxZQUFvQixFQUFVLFFBQXdCLEVBQVUsWUFBcUIsRUFDckYsYUFBaUMsRUFBVSxFQUFzQztZQUFqRiw4QkFBQSxFQUFBLGtCQUFpQztZQUFVLG1CQUFBLEVBQUEsU0FBdUIsMkJBQWEsR0FBRTtZQURqRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtZQUFVLGFBQVEsR0FBUixRQUFRLENBQWdCO1lBQVUsaUJBQVksR0FBWixZQUFZLENBQVM7WUFDckYsa0JBQWEsR0FBYixhQUFhLENBQW9CO1lBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0M7WUFDM0YsSUFBQSxnQ0FBZSxFQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELCtDQUFTLEdBQVQsVUFBVSxRQUEwQjs7WUFBcEMsaUJBNENDO1lBM0NDLElBQU0sYUFBYSxHQUFHLElBQUEsMkJBQW1CLEVBQUMsUUFBUSxFQUFFLFVBQUEsT0FBTyxJQUFJLE9BQUEsS0FBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBMUIsQ0FB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T0FBTztRQUNyQixZQUFZLEVBQUUsSUFBSTtRQUNsQixjQUFjLEVBQUUsT0FBTztRQUN2QixtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLGNBQWMsRUFBRSxPQUFPO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsaUJBQWlCLEVBQUUsR0FBRztRQUN0QixnQkFBZ0IsRUFBRSxJQUFJO0tBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIGdldEZpbGVTeXN0ZW0sIFBhdGhNYW5pcHVsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHvJtVBhcnNlZE1lc3NhZ2UsIMm1U291cmNlTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2xvY2FsaXplJztcblxuaW1wb3J0IHtGb3JtYXRPcHRpb25zLCB2YWxpZGF0ZU9wdGlvbnN9IGZyb20gJy4vZm9ybWF0X29wdGlvbnMnO1xuaW1wb3J0IHtleHRyYWN0SWN1UGxhY2Vob2xkZXJzfSBmcm9tICcuL2ljdV9wYXJzaW5nJztcbmltcG9ydCB7VHJhbnNsYXRpb25TZXJpYWxpemVyfSBmcm9tICcuL3RyYW5zbGF0aW9uX3NlcmlhbGl6ZXInO1xuaW1wb3J0IHtjb25zb2xpZGF0ZU1lc3NhZ2VzLCBoYXNMb2NhdGlvbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1htbEZpbGV9IGZyb20gJy4veG1sX2ZpbGUnO1xuXG4vKiogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhIGxlZ2FjeSBYbGlmZiAxLjIgbWVzc2FnZSBpZCBoYXMuICovXG5jb25zdCBMRUdBQ1lfWExJRkZfTUVTU0FHRV9MRU5HVEggPSA0MDtcblxuLyoqXG4gKiBBIHRyYW5zbGF0aW9uIHNlcmlhbGl6ZXIgdGhhdCBjYW4gd3JpdGUgWExJRkYgMS4yIGZvcm1hdHRlZCBmaWxlcy5cbiAqXG4gKiBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcveGxpZmYvdjEuMi9vcy94bGlmZi1jb3JlLmh0bWxcbiAqIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy94bGlmZi92MS4yL3hsaWZmLXByb2ZpbGUtaHRtbC94bGlmZi1wcm9maWxlLWh0bWwtMS4yLmh0bWxcbiAqXG4gKiBAc2VlIFhsaWZmMVRyYW5zbGF0aW9uUGFyc2VyXG4gKiBAcHVibGljQXBpIHVzZWQgYnkgQ0xJXG4gKi9cbmV4cG9ydCBjbGFzcyBYbGlmZjFUcmFuc2xhdGlvblNlcmlhbGl6ZXIgaW1wbGVtZW50cyBUcmFuc2xhdGlvblNlcmlhbGl6ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgc291cmNlTG9jYWxlOiBzdHJpbmcsIHByaXZhdGUgYmFzZVBhdGg6IEFic29sdXRlRnNQYXRoLCBwcml2YXRlIHVzZUxlZ2FjeUlkczogYm9vbGVhbixcbiAgICAgIHByaXZhdGUgZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucyA9IHt9LCBwcml2YXRlIGZzOiBQYXRoTWFuaXB1bGF0aW9uID0gZ2V0RmlsZVN5c3RlbSgpKSB7XG4gICAgdmFsaWRhdGVPcHRpb25zKCdYbGlmZjFUcmFuc2xhdGlvblNlcmlhbGl6ZXInLCBbWyd4bWw6c3BhY2UnLCBbJ3ByZXNlcnZlJ11dXSwgZm9ybWF0T3B0aW9ucyk7XG4gIH1cblxuICBzZXJpYWxpemUobWVzc2FnZXM6IMm1UGFyc2VkTWVzc2FnZVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlR3JvdXBzID0gY29uc29saWRhdGVNZXNzYWdlcyhtZXNzYWdlcywgbWVzc2FnZSA9PiB0aGlzLmdldE1lc3NhZ2VJZChtZXNzYWdlKSk7XG4gICAgY29uc3QgeG1sID0gbmV3IFhtbEZpbGUoKTtcbiAgICB4bWwuc3RhcnRUYWcoJ3hsaWZmJywgeyd2ZXJzaW9uJzogJzEuMicsICd4bWxucyc6ICd1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yJ30pO1xuICAgIC8vIE5PVEU6IHRoZSBgb3JpZ2luYWxgIHByb3BlcnR5IGlzIHNldCB0byB0aGUgbGVnYWN5IGBuZzIudGVtcGxhdGVgIHZhbHVlIGZvciBiYWNrd2FyZFxuICAgIC8vIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gV2UgY291bGQgY29tcHV0ZSB0aGUgZmlsZSBmcm9tIHRoZSBgbWVzc2FnZS5sb2NhdGlvbmAgcHJvcGVydHksIGJ1dCB0aGVyZSBjb3VsZFxuICAgIC8vIGJlIG11bHRpcGxlIHZhbHVlcyBmb3IgdGhpcyBpbiB0aGUgY29sbGVjdGlvbiBvZiBgbWVzc2FnZXNgLiBJbiB0aGF0IGNhc2Ugd2Ugd291bGQgcHJvYmFibHlcbiAgICAvLyBuZWVkIHRvIGNoYW5nZSB0aGUgc2VyaWFsaXplciB0byBvdXRwdXQgYSBuZXcgYDxmaWxlPmAgZWxlbWVudCBmb3IgZWFjaCBjb2xsZWN0aW9uIG9mXG4gICAgLy8gbWVzc2FnZXMgdGhhdCBjb21lIGZyb20gYSBwYXJ0aWN1bGFyIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgdHJhbnNsYXRpb24gZmlsZSBwYXJzZXJzIG1heSBub3RcbiAgICAvLyBiZSBhYmxlIHRvIGNvcGUgd2l0aCB0aGlzLlxuICAgIHhtbC5zdGFydFRhZygnZmlsZScsIHtcbiAgICAgICdzb3VyY2UtbGFuZ3VhZ2UnOiB0aGlzLnNvdXJjZUxvY2FsZSxcbiAgICAgICdkYXRhdHlwZSc6ICdwbGFpbnRleHQnLFxuICAgICAgJ29yaWdpbmFsJzogJ25nMi50ZW1wbGF0ZScsXG4gICAgICAuLi50aGlzLmZvcm1hdE9wdGlvbnMsXG4gICAgfSk7XG4gICAgeG1sLnN0YXJ0VGFnKCdib2R5Jyk7XG4gICAgZm9yIChjb25zdCBkdXBsaWNhdGVNZXNzYWdlcyBvZiBtZXNzYWdlR3JvdXBzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZHVwbGljYXRlTWVzc2FnZXNbMF07XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0TWVzc2FnZUlkKG1lc3NhZ2UpO1xuXG4gICAgICB4bWwuc3RhcnRUYWcoJ3RyYW5zLXVuaXQnLCB7aWQsIGRhdGF0eXBlOiAnaHRtbCd9KTtcbiAgICAgIHhtbC5zdGFydFRhZygnc291cmNlJywge30sIHtwcmVzZXJ2ZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgICAgIHRoaXMuc2VyaWFsaXplTWVzc2FnZSh4bWwsIG1lc3NhZ2UpO1xuICAgICAgeG1sLmVuZFRhZygnc291cmNlJywge3ByZXNlcnZlV2hpdGVzcGFjZTogZmFsc2V9KTtcblxuICAgICAgLy8gV3JpdGUgYWxsIHRoZSBsb2NhdGlvbnNcbiAgICAgIGZvciAoY29uc3Qge2xvY2F0aW9ufSBvZiBkdXBsaWNhdGVNZXNzYWdlcy5maWx0ZXIoaGFzTG9jYXRpb24pKSB7XG4gICAgICAgIHRoaXMuc2VyaWFsaXplTG9jYXRpb24oeG1sLCBsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VyaWFsaXplTm90ZSh4bWwsICdkZXNjcmlwdGlvbicsIG1lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UubWVhbmluZykge1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZU5vdGUoeG1sLCAnbWVhbmluZycsIG1lc3NhZ2UubWVhbmluZyk7XG4gICAgICB9XG4gICAgICB4bWwuZW5kVGFnKCd0cmFucy11bml0Jyk7XG4gICAgfVxuICAgIHhtbC5lbmRUYWcoJ2JvZHknKTtcbiAgICB4bWwuZW5kVGFnKCdmaWxlJyk7XG4gICAgeG1sLmVuZFRhZygneGxpZmYnKTtcbiAgICByZXR1cm4geG1sLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZU1lc3NhZ2UoeG1sOiBYbWxGaWxlLCBtZXNzYWdlOiDJtVBhcnNlZE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBsZW5ndGggPSBtZXNzYWdlLm1lc3NhZ2VQYXJ0cy5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2VyaWFsaXplVGV4dFBhcnQoeG1sLCBtZXNzYWdlLm1lc3NhZ2VQYXJ0c1tpXSk7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IG1lc3NhZ2Uuc3Vic3RpdHV0aW9uTG9jYXRpb25zPy5bbWVzc2FnZS5wbGFjZWhvbGRlck5hbWVzW2ldXTtcbiAgICAgIHRoaXMuc2VyaWFsaXplUGxhY2Vob2xkZXIoeG1sLCBtZXNzYWdlLnBsYWNlaG9sZGVyTmFtZXNbaV0sIGxvY2F0aW9uPy50ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5zZXJpYWxpemVUZXh0UGFydCh4bWwsIG1lc3NhZ2UubWVzc2FnZVBhcnRzW2xlbmd0aF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVUZXh0UGFydCh4bWw6IFhtbEZpbGUsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBpZWNlcyA9IGV4dHJhY3RJY3VQbGFjZWhvbGRlcnModGV4dCk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGllY2VzLmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgeG1sLnRleHQocGllY2VzW2ldKTtcbiAgICAgIHRoaXMuc2VyaWFsaXplUGxhY2Vob2xkZXIoeG1sLCBwaWVjZXNbaSArIDFdLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB4bWwudGV4dChwaWVjZXNbbGVuZ3RoXSk7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVBsYWNlaG9sZGVyKHhtbDogWG1sRmlsZSwgaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nfHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge2lkfTtcbiAgICBjb25zdCBjdHlwZSA9IGdldEN0eXBlRm9yUGxhY2Vob2xkZXIoaWQpO1xuICAgIGlmIChjdHlwZSAhPT0gbnVsbCkge1xuICAgICAgYXR0cnMuY3R5cGUgPSBjdHlwZTtcbiAgICB9XG4gICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXR0cnNbJ2VxdWl2LXRleHQnXSA9IHRleHQ7XG4gICAgfVxuICAgIHhtbC5zdGFydFRhZygneCcsIGF0dHJzLCB7c2VsZkNsb3Npbmc6IHRydWV9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplTm90ZSh4bWw6IFhtbEZpbGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHhtbC5zdGFydFRhZygnbm90ZScsIHtwcmlvcml0eTogJzEnLCBmcm9tOiBuYW1lfSwge3ByZXNlcnZlV2hpdGVzcGFjZTogdHJ1ZX0pO1xuICAgIHhtbC50ZXh0KHZhbHVlKTtcbiAgICB4bWwuZW5kVGFnKCdub3RlJywge3ByZXNlcnZlV2hpdGVzcGFjZTogZmFsc2V9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplTG9jYXRpb24oeG1sOiBYbWxGaWxlLCBsb2NhdGlvbjogybVTb3VyY2VMb2NhdGlvbik6IHZvaWQge1xuICAgIHhtbC5zdGFydFRhZygnY29udGV4dC1ncm91cCcsIHtwdXJwb3NlOiAnbG9jYXRpb24nfSk7XG4gICAgdGhpcy5yZW5kZXJDb250ZXh0KHhtbCwgJ3NvdXJjZWZpbGUnLCB0aGlzLmZzLnJlbGF0aXZlKHRoaXMuYmFzZVBhdGgsIGxvY2F0aW9uLmZpbGUpKTtcbiAgICBjb25zdCBlbmRMaW5lU3RyaW5nID0gbG9jYXRpb24uZW5kICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24uZW5kLmxpbmUgIT09IGxvY2F0aW9uLnN0YXJ0LmxpbmUgP1xuICAgICAgICBgLCR7bG9jYXRpb24uZW5kLmxpbmUgKyAxfWAgOlxuICAgICAgICAnJztcbiAgICB0aGlzLnJlbmRlckNvbnRleHQoeG1sLCAnbGluZW51bWJlcicsIGAke2xvY2F0aW9uLnN0YXJ0LmxpbmUgKyAxfSR7ZW5kTGluZVN0cmluZ31gKTtcbiAgICB4bWwuZW5kVGFnKCdjb250ZXh0LWdyb3VwJyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnRleHQoeG1sOiBYbWxGaWxlLCB0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB4bWwuc3RhcnRUYWcoJ2NvbnRleHQnLCB7J2NvbnRleHQtdHlwZSc6IHR5cGV9LCB7cHJlc2VydmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gICAgeG1sLnRleHQodmFsdWUpO1xuICAgIHhtbC5lbmRUYWcoJ2NvbnRleHQnLCB7cHJlc2VydmVXaGl0ZXNwYWNlOiBmYWxzZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgZm9yIHRoZSBnaXZlbiBgbWVzc2FnZWAuXG4gICAqXG4gICAqIElmIHRoZXJlIHdhcyBhIGN1c3RvbSBpZCBwcm92aWRlZCwgdXNlIHRoYXQuXG4gICAqXG4gICAqIElmIHdlIGhhdmUgcmVxdWVzdGVkIGxlZ2FjeSBtZXNzYWdlIGlkcywgdGhlbiB0cnkgdG8gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpZFxuICAgKiBmcm9tIHRoZSBsaXN0IG9mIGxlZ2FjeSBpZHMgdGhhdCB3ZXJlIGV4dHJhY3RlZC5cbiAgICpcbiAgICogT3RoZXJ3aXNlIHJldHVybiB0aGUgY2Fub25pY2FsIG1lc3NhZ2UgaWQuXG4gICAqXG4gICAqIEFuIFhsaWZmIDEuMiBsZWdhY3kgbWVzc2FnZSBpZCBpcyBhIGhleCBlbmNvZGVkIFNIQS0xIHN0cmluZywgd2hpY2ggaXMgNDAgY2hhcmFjdGVycyBsb25nLiBTZWVcbiAgICogaHR0cHM6Ly9jc3JjLm5pc3QuZ292L2NzcmMvbWVkaWEvcHVibGljYXRpb25zL2ZpcHMvMTgwLzQvZmluYWwvZG9jdW1lbnRzL2ZpcHMxODAtNC1kcmFmdC1hdWcyMDE0LnBkZlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNZXNzYWdlSWQobWVzc2FnZTogybVQYXJzZWRNZXNzYWdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWVzc2FnZS5jdXN0b21JZCB8fFxuICAgICAgICB0aGlzLnVzZUxlZ2FjeUlkcyAmJiBtZXNzYWdlLmxlZ2FjeUlkcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG1lc3NhZ2UubGVnYWN5SWRzLmZpbmQoaWQgPT4gaWQubGVuZ3RoID09PSBMRUdBQ1lfWExJRkZfTUVTU0FHRV9MRU5HVEgpIHx8XG4gICAgICAgIG1lc3NhZ2UuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgYGN0eXBlYCBhdHRyaWJ1dGUgZnJvbSB0aGUgYHBsYWNlaG9sZGVyYCBuYW1lLlxuICpcbiAqIFRoZSBwbGFjZWhvbGRlciBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIGZvcm1zOlxuICpcbiAqIC0gYFNUQVJUX0JPTERfVEVYVGAvYEVORF9CT0xEX1RFWFRgXG4gKiAtIGBUQUdfPEVMRU1FTlRfTkFNRT5gXG4gKiAtIGBTVEFSVF9UQUdfPEVMRU1FTlRfTkFNRT5gXG4gKiAtIGBDTE9TRV9UQUdfPEVMRU1FTlRfTkFNRT5gXG4gKlxuICogSW4gdGhlc2UgY2FzZXMgdGhlIGVsZW1lbnQgbmFtZSBvZiB0aGUgdGFnIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBwbGFjZWhvbGRlciBuYW1lIGFuZCByZXR1cm5lZCBhc1xuICogYHgtPGVsZW1lbnRfbmFtZT5gLlxuICpcbiAqIExpbmUgYnJlYWtzIGFuZCBpbWFnZXMgYXJlIHNwZWNpYWwgY2FzZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEN0eXBlRm9yUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHN0cmluZ3xudWxsIHtcbiAgY29uc3QgdGFnID0gcGxhY2Vob2xkZXIucmVwbGFjZSgvXihTVEFSVF98Q0xPU0VfKS8sICcnKTtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdMSU5FX0JSRUFLJzpcbiAgICAgIHJldHVybiAnbGInO1xuICAgIGNhc2UgJ1RBR19JTUcnOlxuICAgICAgcmV0dXJuICdpbWFnZSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0YWcuc3RhcnRzV2l0aCgnVEFHXycpID9cbiAgICAgICAgICB0YWcucmVwbGFjZSgvXlRBR18oLispLywgKF8sIHRhZ05hbWU6IHN0cmluZykgPT4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICAgICAgVEFHX01BUFt0YWddO1xuICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgeC0ke2VsZW1lbnR9YDtcbiAgfVxufVxuXG5jb25zdCBUQUdfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnTElOSyc6ICdhJyxcbiAgJ0JPTERfVEVYVCc6ICdiJyxcbiAgJ0VNUEhBU0lTRURfVEVYVCc6ICdlbScsXG4gICdIRUFESU5HX0xFVkVMMSc6ICdoMScsXG4gICdIRUFESU5HX0xFVkVMMic6ICdoMicsXG4gICdIRUFESU5HX0xFVkVMMyc6ICdoMycsXG4gICdIRUFESU5HX0xFVkVMNCc6ICdoNCcsXG4gICdIRUFESU5HX0xFVkVMNSc6ICdoNScsXG4gICdIRUFESU5HX0xFVkVMNic6ICdoNicsXG4gICdIT1JJWk9OVEFMX1JVTEUnOiAnaHInLFxuICAnSVRBTElDX1RFWFQnOiAnaScsXG4gICdMSVNUX0lURU0nOiAnbGknLFxuICAnTUVESUFfTElOSyc6ICdsaW5rJyxcbiAgJ09SREVSRURfTElTVCc6ICdvbCcsXG4gICdQQVJBR1JBUEgnOiAncCcsXG4gICdRVU9UQVRJT04nOiAncScsXG4gICdTVFJJS0VUSFJPVUdIX1RFWFQnOiAncycsXG4gICdTTUFMTF9URVhUJzogJ3NtYWxsJyxcbiAgJ1NVQlNUUklQVCc6ICdzdWInLFxuICAnU1VQRVJTQ1JJUFQnOiAnc3VwJyxcbiAgJ1RBQkxFX0JPRFknOiAndGJvZHknLFxuICAnVEFCTEVfQ0VMTCc6ICd0ZCcsXG4gICdUQUJMRV9GT09URVInOiAndGZvb3QnLFxuICAnVEFCTEVfSEVBREVSX0NFTEwnOiAndGgnLFxuICAnVEFCTEVfSEVBREVSJzogJ3RoZWFkJyxcbiAgJ1RBQkxFX1JPVyc6ICd0cicsXG4gICdNT05PU1BBQ0VEX1RFWFQnOiAndHQnLFxuICAnVU5ERVJMSU5FRF9URVhUJzogJ3UnLFxuICAnVU5PUkRFUkVEX0xJU1QnOiAndWwnLFxufTtcbiJdfQ==