@angular/core 10.0.6 → 10.0.10
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/bundles/core-testing.umd.js +1 -1
- package/bundles/core-testing.umd.min.js +1 -1
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +1678 -1387
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +152 -124
- package/bundles/core.umd.min.js.map +1 -1
- package/core.d.ts +258 -58
- package/core.metadata.json +1 -1
- package/esm2015/core.js +3 -3
- package/esm2015/src/application_module.js +2 -2
- package/esm2015/src/application_ref.js +2 -2
- package/esm2015/src/core_render3_private_export.js +2 -1
- package/esm2015/src/metadata/di.js +1 -1
- package/esm2015/src/r3_symbols.js +2 -1
- package/esm2015/src/reflection/reflection_capabilities.js +38 -8
- package/esm2015/src/render3/bindings.js +3 -3
- package/esm2015/src/render3/component.js +3 -3
- package/esm2015/src/render3/di.js +1 -1
- package/esm2015/src/render3/i18n/i18n_apply.js +445 -0
- package/esm2015/src/render3/i18n/i18n_debug.js +170 -0
- package/esm2015/src/render3/i18n/i18n_locale_id.js +37 -0
- package/esm2015/src/render3/i18n/i18n_parse.js +635 -0
- package/esm2015/src/render3/i18n/i18n_postprocess.js +121 -0
- package/esm2015/src/render3/index.js +3 -2
- package/esm2015/src/render3/instructions/advance.js +3 -3
- package/esm2015/src/render3/instructions/element.js +3 -3
- package/esm2015/src/render3/instructions/element_container.js +3 -3
- package/esm2015/src/render3/instructions/i18n.js +164 -0
- package/esm2015/src/render3/instructions/listener.js +3 -3
- package/esm2015/src/render3/instructions/lview_debug.js +54 -213
- package/esm2015/src/render3/instructions/shared.js +54 -38
- package/esm2015/src/render3/instructions/text.js +3 -3
- package/esm2015/src/render3/interfaces/i18n.js +12 -3
- package/esm2015/src/render3/interfaces/node.js +13 -1
- package/esm2015/src/render3/interfaces/view.js +1 -1
- package/esm2015/src/render3/jit/directive.js +33 -10
- package/esm2015/src/render3/ng_module_ref.js +2 -2
- package/esm2015/src/render3/node_manipulation.js +1 -11
- package/esm2015/src/render3/pure_function.js +3 -3
- package/esm2015/src/render3/query.js +14 -12
- package/esm2015/src/render3/styling/style_binding_list.js +3 -3
- package/esm2015/src/render3/styling/styling_parser.js +3 -2
- package/esm2015/src/render3/util/debug_utils.js +31 -2
- package/esm2015/src/render3/util/discovery_utils.js +1 -1
- package/esm2015/src/render3/util/view_utils.js +5 -5
- package/esm2015/src/render3/view_engine_compatibility.js +13 -4
- package/esm2015/src/util/assert.js +2 -2
- package/esm2015/src/util/char_code.js +1 -1
- package/esm2015/src/version.js +1 -1
- package/fesm2015/core.js +1652 -1364
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +1 -1
- package/package.json +1 -1
- package/src/r3_symbols.d.ts +13 -1
- package/testing/testing.d.ts +1 -1
- package/testing.d.ts +1 -1
- package/esm2015/src/render3/i18n.js +0 -1225
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { assertNumber, assertString } from '../../util/assert';
|
|
9
|
+
import { COMMENT_MARKER, ELEMENT_MARKER, getInstructionFromI18nMutateOpCode, getParentFromI18nMutateOpCode, getRefFromI18nMutateOpCode } from '../interfaces/i18n';
|
|
10
|
+
/**
|
|
11
|
+
* Converts `I18nUpdateOpCodes` array into a human readable format.
|
|
12
|
+
*
|
|
13
|
+
* This function is attached to the `I18nUpdateOpCodes.debug` property if `ngDevMode` is enabled.
|
|
14
|
+
* This function provides a human readable view of the opcodes. This is useful when debugging the
|
|
15
|
+
* application as well as writing more readable tests.
|
|
16
|
+
*
|
|
17
|
+
* @param this `I18nUpdateOpCodes` if attached as a method.
|
|
18
|
+
* @param opcodes `I18nUpdateOpCodes` if invoked as a function.
|
|
19
|
+
*/
|
|
20
|
+
export function i18nUpdateOpCodesToString(opcodes) {
|
|
21
|
+
const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
|
|
22
|
+
let lines = [];
|
|
23
|
+
function consumeOpCode(value) {
|
|
24
|
+
const ref = value >>> 2 /* SHIFT_REF */;
|
|
25
|
+
const opCode = value & 3 /* MASK_OPCODE */;
|
|
26
|
+
switch (opCode) {
|
|
27
|
+
case 0 /* Text */:
|
|
28
|
+
return `(lView[${ref}] as Text).textContent = $$$`;
|
|
29
|
+
case 1 /* Attr */:
|
|
30
|
+
const attrName = parser.consumeString();
|
|
31
|
+
const sanitizationFn = parser.consumeFunction();
|
|
32
|
+
const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';
|
|
33
|
+
return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;
|
|
34
|
+
case 2 /* IcuSwitch */:
|
|
35
|
+
return `icuSwitchCase(lView[${ref}] as Comment, ${parser.consumeNumber()}, $$$)`;
|
|
36
|
+
case 3 /* IcuUpdate */:
|
|
37
|
+
return `icuUpdateCase(lView[${ref}] as Comment, ${parser.consumeNumber()})`;
|
|
38
|
+
}
|
|
39
|
+
throw new Error('unexpected OpCode');
|
|
40
|
+
}
|
|
41
|
+
while (parser.hasMore()) {
|
|
42
|
+
let mask = parser.consumeNumber();
|
|
43
|
+
let size = parser.consumeNumber();
|
|
44
|
+
const end = parser.i + size;
|
|
45
|
+
const statements = [];
|
|
46
|
+
let statement = '';
|
|
47
|
+
while (parser.i < end) {
|
|
48
|
+
let value = parser.consumeNumberOrString();
|
|
49
|
+
if (typeof value === 'string') {
|
|
50
|
+
statement += value;
|
|
51
|
+
}
|
|
52
|
+
else if (value < 0) {
|
|
53
|
+
// Negative numbers are ref indexes
|
|
54
|
+
statement += '${lView[' + (0 - value) + ']}';
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Positive numbers are operations.
|
|
58
|
+
const opCodeText = consumeOpCode(value);
|
|
59
|
+
statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');
|
|
60
|
+
statement = '';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);
|
|
64
|
+
}
|
|
65
|
+
return lines;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Converts `I18nMutableOpCodes` array into a human readable format.
|
|
69
|
+
*
|
|
70
|
+
* This function is attached to the `I18nMutableOpCodes.debug` if `ngDevMode` is enabled. This
|
|
71
|
+
* function provides a human readable view of the opcodes. This is useful when debugging the
|
|
72
|
+
* application as well as writing more readable tests.
|
|
73
|
+
*
|
|
74
|
+
* @param this `I18nMutableOpCodes` if attached as a method.
|
|
75
|
+
* @param opcodes `I18nMutableOpCodes` if invoked as a function.
|
|
76
|
+
*/
|
|
77
|
+
export function i18nMutateOpCodesToString(opcodes) {
|
|
78
|
+
const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
|
|
79
|
+
let lines = [];
|
|
80
|
+
function consumeOpCode(opCode) {
|
|
81
|
+
const parent = getParentFromI18nMutateOpCode(opCode);
|
|
82
|
+
const ref = getRefFromI18nMutateOpCode(opCode);
|
|
83
|
+
switch (getInstructionFromI18nMutateOpCode(opCode)) {
|
|
84
|
+
case 0 /* Select */:
|
|
85
|
+
lastRef = ref;
|
|
86
|
+
return '';
|
|
87
|
+
case 1 /* AppendChild */:
|
|
88
|
+
return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;
|
|
89
|
+
case 3 /* Remove */:
|
|
90
|
+
return `(lView[${parent}] as Element).remove(lView[${ref}])`;
|
|
91
|
+
case 4 /* Attr */:
|
|
92
|
+
return `(lView[${ref}] as Element).setAttribute("${parser.consumeString()}", "${parser.consumeString()}")`;
|
|
93
|
+
case 5 /* ElementEnd */:
|
|
94
|
+
return `setPreviousOrParentTNode(tView.data[${ref}] as TNode)`;
|
|
95
|
+
case 6 /* RemoveNestedIcu */:
|
|
96
|
+
return `removeNestedICU(${ref})`;
|
|
97
|
+
}
|
|
98
|
+
throw new Error('Unexpected OpCode');
|
|
99
|
+
}
|
|
100
|
+
let lastRef = -1;
|
|
101
|
+
while (parser.hasMore()) {
|
|
102
|
+
let value = parser.consumeNumberStringOrMarker();
|
|
103
|
+
if (value === COMMENT_MARKER) {
|
|
104
|
+
const text = parser.consumeString();
|
|
105
|
+
lastRef = parser.consumeNumber();
|
|
106
|
+
lines.push(`lView[${lastRef}] = document.createComment("${text}")`);
|
|
107
|
+
}
|
|
108
|
+
else if (value === ELEMENT_MARKER) {
|
|
109
|
+
const text = parser.consumeString();
|
|
110
|
+
lastRef = parser.consumeNumber();
|
|
111
|
+
lines.push(`lView[${lastRef}] = document.createElement("${text}")`);
|
|
112
|
+
}
|
|
113
|
+
else if (typeof value === 'string') {
|
|
114
|
+
lastRef = parser.consumeNumber();
|
|
115
|
+
lines.push(`lView[${lastRef}] = document.createTextNode("${value}")`);
|
|
116
|
+
}
|
|
117
|
+
else if (typeof value === 'number') {
|
|
118
|
+
const line = consumeOpCode(value);
|
|
119
|
+
line && lines.push(line);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
throw new Error('Unexpected value');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return lines;
|
|
126
|
+
}
|
|
127
|
+
class OpCodeParser {
|
|
128
|
+
constructor(codes) {
|
|
129
|
+
this.i = 0;
|
|
130
|
+
this.codes = codes;
|
|
131
|
+
}
|
|
132
|
+
hasMore() {
|
|
133
|
+
return this.i < this.codes.length;
|
|
134
|
+
}
|
|
135
|
+
consumeNumber() {
|
|
136
|
+
let value = this.codes[this.i++];
|
|
137
|
+
assertNumber(value, 'expecting number in OpCode');
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
consumeString() {
|
|
141
|
+
let value = this.codes[this.i++];
|
|
142
|
+
assertString(value, 'expecting string in OpCode');
|
|
143
|
+
return value;
|
|
144
|
+
}
|
|
145
|
+
consumeFunction() {
|
|
146
|
+
let value = this.codes[this.i++];
|
|
147
|
+
if (value === null || typeof value === 'function') {
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
throw new Error('expecting function in OpCode');
|
|
151
|
+
}
|
|
152
|
+
consumeNumberOrString() {
|
|
153
|
+
let value = this.codes[this.i++];
|
|
154
|
+
if (typeof value === 'string') {
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
assertNumber(value, 'expecting number or string in OpCode');
|
|
158
|
+
return value;
|
|
159
|
+
}
|
|
160
|
+
consumeNumberStringOrMarker() {
|
|
161
|
+
let value = this.codes[this.i++];
|
|
162
|
+
if (typeof value === 'string' || typeof value === 'number' || value == COMMENT_MARKER ||
|
|
163
|
+
value == ELEMENT_MARKER) {
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
assertNumber(value, 'expecting number, string, COMMENT_MARKER or ELEMENT_MARKER in OpCode');
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bl9kZWJ1Zy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaTE4bi9pMThuX2RlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0QsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0NBQWtDLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQTJFLE1BQU0sb0JBQW9CLENBQUM7QUFFM087Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUNQLE9BQTJCO0lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFekIsU0FBUyxhQUFhLENBQUMsS0FBYTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxLQUFLLHNCQUErQixDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLEtBQUssc0JBQStCLENBQUM7UUFDcEQsUUFBUSxNQUFNLEVBQUU7WUFDZDtnQkFDRSxPQUFPLFVBQVUsR0FBRyw4QkFBOEIsQ0FBQztZQUNyRDtnQkFDRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xFLE9BQU8sVUFBVSxHQUFHLCtC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QUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLGNBQWM7WUFDakYsS0FBSyxJQUFJLGNBQWMsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsWUFBWSxDQUFDLEtBQUssRUFBRSxzRUFBc0UsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7YXNzZXJ0TnVtYmVyLCBhc3NlcnRTdHJpbmd9IGZyb20gJy4uLy4uL3V0aWwvYXNzZXJ0JztcblxuaW1wb3J0IHtDT01NRU5UX01BUktFUiwgRUxFTUVOVF9NQVJLRVIsIGdldEluc3RydWN0aW9uRnJvbUkxOG5NdXRhdGVPcENvZGUsIGdldFBhcmVudEZyb21JMThuTXV0YXRlT3BDb2RlLCBnZXRSZWZGcm9tSTE4bk11dGF0ZU9wQ29kZSwgSTE4bk11dGF0ZU9wQ29kZSwgSTE4bk11dGF0ZU9wQ29kZXMsIEkxOG5VcGRhdGVPcENvZGUsIEkxOG5VcGRhdGVPcENvZGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL2kxOG4nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBJMThuVXBkYXRlT3BDb2Rlc2AgYXJyYXkgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGF0dGFjaGVkIHRvIHRoZSBgSTE4blVwZGF0ZU9wQ29kZXMuZGVidWdgIHByb3BlcnR5IGlmIGBuZ0Rldk1vZGVgIGlzIGVuYWJsZWQuXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgaHVtYW4gcmVhZGFibGUgdmlldyBvZiB0aGUgb3Bjb2Rlcy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgdGhlXG4gKiBhcHBsaWNhdGlvbiBhcyB3ZWxsIGFzIHdyaXRpbmcgbW9yZSByZWFkYWJsZSB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gdGhpcyBgSTE4blVwZGF0ZU9wQ29kZXNgIGlmIGF0dGFjaGVkIGFzIGEgbWV0aG9kLlxuICogQHBhcmFtIG9wY29kZXMgYEkxOG5VcGRhdGVPcENvZGVzYCBpZiBpbnZva2VkIGFzIGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVXBkYXRlT3BDb2Rlc1RvU3RyaW5nKFxuICAgIHRoaXM6IEkxOG5VcGRhdGVPcENvZGVzfHZvaWQsIG9wY29kZXM/OiBJMThuVXBkYXRlT3BDb2Rlcyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IE9wQ29kZVBhcnNlcihvcGNvZGVzIHx8IChBcnJheS5pc0FycmF5KHRoaXMpID8gdGhpcyA6IFtdKSk7XG4gIGxldCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICBmdW5jdGlvbiBjb25zdW1lT3BDb2RlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZiA9IHZhbHVlID4+PiBJMThuVXBkYXRlT3BDb2RlLlNISUZUX1JFRjtcbiAgICBjb25zdCBvcENvZGUgPSB2YWx1ZSAmIEkxOG5VcGRhdGVPcENvZGUuTUFTS19PUENPREU7XG4gICAgc3dpdGNoIChvcENvZGUpIHtcbiAgICAgIGNhc2UgSTE4blVwZGF0ZU9wQ29kZS5UZXh0OlxuICAgICAgICByZXR1cm4gYChsVmlld1ske3JlZn1dIGFzIFRleHQpLnRleHRDb250ZW50ID0gJCQkYDtcbiAgICAgIGNhc2UgSTE4blVwZGF0ZU9wQ29kZS5BdHRyOlxuICAgICAgICBjb25zdCBhdHRyTmFtZSA9IHBhcnNlci5jb25zdW1lU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHNhbml0aXphdGlvbkZuID0gcGFyc2VyLmNvbnN1bWVGdW5jdGlvbigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNhbml0aXphdGlvbkZuID8gYCgke3Nhbml0aXphdGlvbkZufSkoJCQkKWAgOiAnJCQkJztcbiAgICAgICAgcmV0dXJuIGAobFZpZXdbJHtyZWZ9XSBhcyBFbGVtZW50KS5zZXRBdHRyaWJ1dGUoJyR7YXR0ck5hbWV9JywgJHt2YWx1ZX0pYDtcbiAgICAgIGNhc2UgSTE4blVwZGF0ZU9wQ29kZS5JY3VTd2l0Y2g6XG4gICAgICAgIHJldHVybiBgaWN1U3dpdGNoQ2FzZShsVmlld1ske3JlZn1dIGFzIENvbW1lbnQsICR7cGFyc2VyLmNvbnN1bWVOdW1iZXIoKX0sICQkJClgO1xuICAgICAgY2FzZSBJMThuVXBkYXRlT3BDb2RlLkljdVVwZGF0ZTpcbiAgICAgICAgcmV0dXJuIGBpY3VVcGRhdGVDYXNlKGxWaWV3WyR7cmVmfV0gYXMgQ29tbWVudCwgJHtwYXJzZXIuY29uc3VtZU51bWJlcigpfSlgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgT3BDb2RlJyk7XG4gIH1cblxuXG4gIHdoaWxlIChwYXJzZXIuaGFzTW9yZSgpKSB7XG4gICAgbGV0IG1hc2sgPSBwYXJzZXIuY29uc3VtZU51bWJlcigpO1xuICAgIGxldCBzaXplID0gcGFyc2VyLmNvbnN1bWVOdW1iZXIoKTtcbiAgICBjb25zdCBlbmQgPSBwYXJzZXIuaSArIHNpemU7XG4gICAgY29uc3Qgc3RhdGVtZW50czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgc3RhdGVtZW50ID0gJyc7XG4gICAgd2hpbGUgKHBhcnNlci5pIDwgZW5kKSB7XG4gICAgICBsZXQgdmFsdWUgPSBwYXJzZXIuY29uc3VtZU51bWJlck9yU3RyaW5nKCk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdGF0ZW1lbnQgKz0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAvLyBOZWdhdGl2ZSBudW1iZXJzIGFyZSByZWYgaW5kZXhlc1xuICAgICAgICBzdGF0ZW1lbnQgKz0gJyR7bFZpZXdbJyArICgwIC0gdmFsdWUpICsgJ119JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFBvc2l0aXZlIG51bWJlcnMgYXJlIG9wZXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IG9wQ29kZVRleHQgPSBjb25zdW1lT3BDb2RlKHZhbHVlKTtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKG9wQ29kZVRleHQucmVwbGFjZSgnJCQkJywgJ2AnICsgc3RhdGVtZW50ICsgJ2AnKSArICc7Jyk7XG4gICAgICAgIHN0YXRlbWVudCA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBsaW5lcy5wdXNoKGBpZiAobWFzayAmIDBiJHttYXNrLnRvU3RyaW5nKDIpfSkgeyAke3N0YXRlbWVudHMuam9pbignICcpfSB9YCk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBJMThuTXV0YWJsZU9wQ29kZXNgIGFycmF5IGludG8gYSBodW1hbiByZWFkYWJsZSBmb3JtYXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhdHRhY2hlZCB0byB0aGUgYEkxOG5NdXRhYmxlT3BDb2Rlcy5kZWJ1Z2AgaWYgYG5nRGV2TW9kZWAgaXMgZW5hYmxlZC4gVGhpc1xuICogZnVuY3Rpb24gcHJvdmlkZXMgYSBodW1hbiByZWFkYWJsZSB2aWV3IG9mIHRoZSBvcGNvZGVzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyB0aGVcbiAqIGFwcGxpY2F0aW9uIGFzIHdlbGwgYXMgd3JpdGluZyBtb3JlIHJlYWRhYmxlIHRlc3RzLlxuICpcbiAqIEBwYXJhbSB0aGlzIGBJMThuTXV0YWJsZU9wQ29kZXNgIGlmIGF0dGFjaGVkIGFzIGEgbWV0aG9kLlxuICogQHBhcmFtIG9wY29kZXMgYEkxOG5NdXRhYmxlT3BDb2Rlc2AgaWYgaW52b2tlZCBhcyBhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaTE4bk11dGF0ZU9wQ29kZXNUb1N0cmluZyhcbiAgICB0aGlzOiBJMThuTXV0YXRlT3BDb2Rlc3x2b2lkLCBvcGNvZGVzPzogSTE4bk11dGF0ZU9wQ29kZXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcnNlciA9IG5ldyBPcENvZGVQYXJzZXIob3Bjb2RlcyB8fCAoQXJyYXkuaXNBcnJheSh0aGlzKSA/IHRoaXMgOiBbXSkpO1xuICBsZXQgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZnVuY3Rpb24gY29uc3VtZU9wQ29kZShvcENvZGU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50RnJvbUkxOG5NdXRhdGVPcENvZGUob3BDb2RlKTtcbiAgICBjb25zdCByZWYgPSBnZXRSZWZGcm9tSTE4bk11dGF0ZU9wQ29kZShvcENvZGUpO1xuICAgIHN3aXRjaCAoZ2V0SW5zdHJ1Y3Rpb25Gcm9tSTE4bk11dGF0ZU9wQ29kZShvcENvZGUpKSB7XG4gICAgICBjYXNlIEkxOG5NdXRhdGVPcENvZGUuU2VsZWN0OlxuICAgICAgICBsYXN0UmVmID0gcmVmO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICBjYXNlIEkxOG5NdXRhdGVPcENvZGUuQXBwZW5kQ2hpbGQ6XG4gICAgICAgIHJldHVybiBgKGxWaWV3WyR7cGFyZW50fV0gYXMgRWxlbWVudCkuYXBwZW5kQ2hpbGQobFZpZXdbJHtsYXN0UmVmfV0pYDtcbiAgICAgIGNhc2UgSTE4bk11dGF0ZU9wQ29kZS5SZW1vdmU6XG4gICAgICAgIHJldHVybiBgKGxWaWV3WyR7cGFyZW50fV0gYXMgRWxlbWVudCkucmVtb3ZlKGxWaWV3WyR7cmVmfV0pYDtcbiAgICAgIGNhc2UgSTE4bk11dGF0ZU9wQ29kZS5BdHRyOlxuICAgICAgICByZXR1cm4gYChsVmlld1ske3JlZn1dIGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZShcIiR7cGFyc2VyLmNvbnN1bWVTdHJpbmcoKX1cIiwgXCIke1xuICAgICAgICAgICAgcGFyc2VyLmNvbnN1bWVTdHJpbmcoKX1cIilgO1xuICAgICAgY2FzZSBJMThuTXV0YXRlT3BDb2RlLkVsZW1lbnRFbmQ6XG4gICAgICAgIHJldHVybiBgc2V0UHJldmlvdXNPclBhcmVudFROb2RlKHRWaWV3LmRhdGFbJHtyZWZ9XSBhcyBUTm9kZSlgO1xuICAgICAgY2FzZSBJMThuTXV0YXRlT3BDb2RlLlJlbW92ZU5lc3RlZEljdTpcbiAgICAgICAgcmV0dXJuIGByZW1vdmVOZXN0ZWRJQ1UoJHtyZWZ9KWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBPcENvZGUnKTtcbiAgfVxuXG4gIGxldCBsYXN0UmVmID0gLTE7XG4gIHdoaWxlIChwYXJzZXIuaGFzTW9yZSgpKSB7XG4gICAgbGV0IHZhbHVlID0gcGFyc2VyLmNvbnN1bWVOdW1iZXJTdHJpbmdPck1hcmtlcigpO1xuICAgIGlmICh2YWx1ZSA9PT0gQ09NTUVOVF9NQVJLRVIpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBwYXJzZXIuY29uc3VtZVN0cmluZygpO1xuICAgICAgbGFzdFJlZiA9IHBhcnNlci5jb25zdW1lTnVtYmVyKCk7XG4gICAgICBsaW5lcy5wdXNoKGBsVmlld1ske2xhc3RSZWZ9XSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCIke3RleHR9XCIpYCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gRUxFTUVOVF9NQVJLRVIpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBwYXJzZXIuY29uc3VtZVN0cmluZygpO1xuICAgICAgbGFzdFJlZiA9IHBhcnNlci5jb25zdW1lTnVtYmVyKCk7XG4gICAgICBsaW5lcy5wdXNoKGBsVmlld1ske2xhc3RSZWZ9XSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCIke3RleHR9XCIpYCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsYXN0UmVmID0gcGFyc2VyLmNvbnN1bWVOdW1iZXIoKTtcbiAgICAgIGxpbmVzLnB1c2goYGxWaWV3WyR7bGFzdFJlZn1dID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCIke3ZhbHVlfVwiKWApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbGluZSA9IGNvbnN1bWVPcENvZGUodmFsdWUpO1xuICAgICAgbGluZSAmJiBsaW5lcy5wdXNoKGxpbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdmFsdWUnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG5cblxuY2xhc3MgT3BDb2RlUGFyc2VyIHtcbiAgaTogbnVtYmVyID0gMDtcbiAgY29kZXM6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvZGVzOiBhbnlbXSkge1xuICAgIHRoaXMuY29kZXMgPSBjb2RlcztcbiAgfVxuXG4gIGhhc01vcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaSA8IHRoaXMuY29kZXMubGVuZ3RoO1xuICB9XG5cbiAgY29uc3VtZU51bWJlcigpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGFzc2VydE51bWJlcih2YWx1ZSwgJ2V4cGVjdGluZyBudW1iZXIgaW4gT3BDb2RlJyk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3VtZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGFzc2VydFN0cmluZyh2YWx1ZSwgJ2V4cGVjdGluZyBzdHJpbmcgaW4gT3BDb2RlJyk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3VtZUZ1bmN0aW9uKCk6IEZ1bmN0aW9ufG51bGwge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgZnVuY3Rpb24gaW4gT3BDb2RlJyk7XG4gIH1cblxuICBjb25zdW1lTnVtYmVyT3JTdHJpbmcoKTogbnVtYmVyfHN0cmluZyB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb2Rlc1t0aGlzLmkrK107XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgYXNzZXJ0TnVtYmVyKHZhbHVlLCAnZXhwZWN0aW5nIG51bWJlciBvciBzdHJpbmcgaW4gT3BDb2RlJyk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3VtZU51bWJlclN0cmluZ09yTWFya2VyKCk6IG51bWJlcnxzdHJpbmd8Q09NTUVOVF9NQVJLRVJ8RUxFTUVOVF9NQVJLRVIge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29kZXNbdGhpcy5pKytdO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgPT0gQ09NTUVOVF9NQVJLRVIgfHxcbiAgICAgICAgdmFsdWUgPT0gRUxFTUVOVF9NQVJLRVIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgYXNzZXJ0TnVtYmVyKHZhbHVlLCAnZXhwZWN0aW5nIG51bWJlciwgc3RyaW5nLCBDT01NRU5UX01BUktFUiBvciBFTEVNRU5UX01BUktFUiBpbiBPcENvZGUnKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { DEFAULT_LOCALE_ID } from '../../i18n/localization';
|
|
9
|
+
import { assertDefined } from '../../util/assert';
|
|
10
|
+
/**
|
|
11
|
+
* The locale id that the application is currently using (for translations and ICU expressions).
|
|
12
|
+
* This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
|
|
13
|
+
* but is now defined as a global value.
|
|
14
|
+
*/
|
|
15
|
+
let LOCALE_ID = DEFAULT_LOCALE_ID;
|
|
16
|
+
/**
|
|
17
|
+
* Sets the locale id that will be used for translations and ICU expressions.
|
|
18
|
+
* This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
|
|
19
|
+
* but is now defined as a global value.
|
|
20
|
+
*
|
|
21
|
+
* @param localeId
|
|
22
|
+
*/
|
|
23
|
+
export function setLocaleId(localeId) {
|
|
24
|
+
assertDefined(localeId, `Expected localeId to be defined`);
|
|
25
|
+
if (typeof localeId === 'string') {
|
|
26
|
+
LOCALE_ID = localeId.toLowerCase().replace(/_/g, '-');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the locale id that will be used for translations and ICU expressions.
|
|
31
|
+
* This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
|
|
32
|
+
* but is now defined as a global value.
|
|
33
|
+
*/
|
|
34
|
+
export function getLocaleId() {
|
|
35
|
+
return LOCALE_ID;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bl9sb2NhbGVfaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2kxOG4vaTE4bl9sb2NhbGVfaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2hEOzs7O0dBSUc7QUFDSCxJQUFJLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQWdCO0lBQzFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztJQUMzRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdkQ7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtERUZBVUxUX0xPQ0FMRV9JRH0gZnJvbSAnLi4vLi4vaTE4bi9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHthc3NlcnREZWZpbmVkfSBmcm9tICcuLi8uLi91dGlsL2Fzc2VydCc7XG5cblxuLyoqXG4gKiBUaGUgbG9jYWxlIGlkIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSB1c2luZyAoZm9yIHRyYW5zbGF0aW9ucyBhbmQgSUNVIGV4cHJlc3Npb25zKS5cbiAqIFRoaXMgaXMgdGhlIGl2eSB2ZXJzaW9uIG9mIGBMT0NBTEVfSURgIHRoYXQgd2FzIGRlZmluZWQgYXMgYW4gaW5qZWN0aW9uIHRva2VuIGZvciB0aGUgdmlldyBlbmdpbmVcbiAqIGJ1dCBpcyBub3cgZGVmaW5lZCBhcyBhIGdsb2JhbCB2YWx1ZS5cbiAqL1xubGV0IExPQ0FMRV9JRCA9IERFRkFVTFRfTE9DQUxFX0lEO1xuXG4vKipcbiAqIFNldHMgdGhlIGxvY2FsZSBpZCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdHJhbnNsYXRpb25zIGFuZCBJQ1UgZXhwcmVzc2lvbnMuXG4gKiBUaGlzIGlzIHRoZSBpdnkgdmVyc2lvbiBvZiBgTE9DQUxFX0lEYCB0aGF0IHdhcyBkZWZpbmVkIGFzIGFuIGluamVjdGlvbiB0b2tlbiBmb3IgdGhlIHZpZXcgZW5naW5lXG4gKiBidXQgaXMgbm93IGRlZmluZWQgYXMgYSBnbG9iYWwgdmFsdWUuXG4gKlxuICogQHBhcmFtIGxvY2FsZUlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2NhbGVJZChsb2NhbGVJZDogc3RyaW5nKSB7XG4gIGFzc2VydERlZmluZWQobG9jYWxlSWQsIGBFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkYCk7XG4gIGlmICh0eXBlb2YgbG9jYWxlSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgTE9DQUxFX0lEID0gbG9jYWxlSWQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csICctJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbGUgaWQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRyYW5zbGF0aW9ucyBhbmQgSUNVIGV4cHJlc3Npb25zLlxuICogVGhpcyBpcyB0aGUgaXZ5IHZlcnNpb24gb2YgYExPQ0FMRV9JRGAgdGhhdCB3YXMgZGVmaW5lZCBhcyBhbiBpbmplY3Rpb24gdG9rZW4gZm9yIHRoZSB2aWV3IGVuZ2luZVxuICogYnV0IGlzIG5vdyBkZWZpbmVkIGFzIGEgZ2xvYmFsIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIExPQ0FMRV9JRDtcbn1cbiJdfQ==
|