feat: Add TURN server support
All checks were successful
Queue Release Build / prepare (push) Successful in 15s
Deploy Web Apps / deploy (push) Successful in 5m35s
Queue Release Build / build-linux (push) Successful in 24m45s
Queue Release Build / build-windows (push) Successful in 13m52s
Queue Release Build / finalize (push) Successful in 23s

This commit is contained in:
2026-04-18 21:27:04 +02:00
parent 167c45ba8d
commit 44588e8789
60 changed files with 2404 additions and 365 deletions

View File

@@ -1,5 +1,20 @@
// Custom ESLint rules for Angular template formatting
// This enforces the specific formatting style for Angular templates
// Custom ESLint rules shared across the workspace.
const FORBIDDEN_UNICODE_SYMBOLS = Object.freeze([
{ char: '\u2013', name: 'Unicode en dash ()', replacement: '-' },
{ char: '\u2014', name: 'Unicode em dash (—)', replacement: '-' },
{ char: '\u2026', name: 'Unicode ellipsis (…)', replacement: '...' },
{ char: '\u2192', name: 'Unicode right arrow (→)', replacement: '->' },
{ char: '\u2190', name: 'Unicode left arrow (←)', replacement: '<-' },
{ char: '\u2194', name: 'Unicode left-right arrow (↔)', replacement: '<->' },
{ char: '\u21d2', name: 'Unicode right double arrow (⇒)', replacement: '=>' },
{ char: '\u21d0', name: 'Unicode left double arrow (⇐)', replacement: '<=' },
{ char: '\u21d4', name: 'Unicode left-right double arrow (⇔)', replacement: '<=>' }
]);
function createReplaceFix(range, replacement) {
return (fixer) => fixer.replaceTextRange(range, replacement);
}
module.exports = {
rules: {
@@ -9,16 +24,74 @@ module.exports = {
docs: {
description: 'Enforce spacing between elements and property grouping in Angular templates',
category: 'Stylistic Issues',
recommended: true,
recommended: true
},
fixable: 'whitespace',
schema: []
},
create() {
// This is a placeholder for custom rule implementation.
// ESLint's template rules are limited, so manual formatting is recommended.
return {};
}
},
'no-unicode-symbols': {
meta: {
type: 'suggestion',
docs: {
description: 'Disallow AI/LLM-style Unicode symbols in source files'
},
fixable: 'code',
hasSuggestions: true,
schema: [],
messages: {
forbiddenSymbol: '{{name}} is not allowed. Use ASCII "{{replacement}}" instead.',
replaceSymbol: 'Replace with "{{replacement}}"'
}
},
create(context) {
// This is a placeholder for custom rule implementation
// ESLint's template rules are limited, so manual formatting is recommended
return {};
},
},
const sourceCode = context.getSourceCode();
return {
Program() {
const sourceText = sourceCode.getText();
for (const symbol of FORBIDDEN_UNICODE_SYMBOLS) {
let index = sourceText.indexOf(symbol.char);
while (index !== -1) {
const range = [index, index + symbol.char.length];
const loc = {
start: sourceCode.getLocFromIndex(range[0]),
end: sourceCode.getLocFromIndex(range[1])
};
context.report({
loc,
messageId: 'forbiddenSymbol',
data: {
name: symbol.name,
replacement: symbol.replacement
},
fix: createReplaceFix(range, symbol.replacement),
suggest: [
{
messageId: 'replaceSymbol',
data: {
replacement: symbol.replacement
},
fix: createReplaceFix(range, symbol.replacement)
}
]
});
index = sourceText.indexOf(symbol.char, index + symbol.char.length);
}
}
}
};
}
}
},
FORBIDDEN_UNICODE_SYMBOLS
};