Skip to content

Commit 0de0f9c

Browse files
authored
feat(message-compiler): export html tag checking (#1359)
* feat(message-compiler): export html tag checking * fix: lint warnings
1 parent 03664f4 commit 0de0f9c

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

packages/core-base/src/compile.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { warn, format, isBoolean } from '@intlify/shared'
2-
import { baseCompile, defaultOnError } from '@intlify/message-compiler'
2+
import {
3+
baseCompile,
4+
defaultOnError,
5+
detectHtmlTag
6+
} from '@intlify/message-compiler'
37

48
import type { CompileOptions, CompileError } from '@intlify/message-compiler'
59
import type { MessageFunction, MessageFunctions } from './runtime'
610

7-
const RE_HTML_TAG = /<\/?[\w\s="/.':;#-\/]+>/
811
const WARN_MESSAGE = `Detected HTML in '{source}' message. Recommend not using HTML messages to avoid XSS.`
912

10-
function checkHtmlMessage(source: string, options: CompileOptions): void {
11-
const warnHtmlMessage = isBoolean(options.warnHtmlMessage)
12-
? options.warnHtmlMessage
13-
: true
14-
if (warnHtmlMessage && RE_HTML_TAG.test(source)) {
13+
function checkHtmlMessage(source: string, warnHtmlMessage?: boolean): void {
14+
if (warnHtmlMessage && detectHtmlTag(source)) {
1515
warn(format(WARN_MESSAGE, { source }))
1616
}
1717
}
@@ -37,7 +37,12 @@ export function compileToFunction<T = string>(
3737
return (() => source) as MessageFunction<T>
3838
} else {
3939
// check HTML message
40-
__DEV__ && checkHtmlMessage(source, options)
40+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
41+
const warnHtmlMessage = isBoolean((options as any).warnHtmlMessage)
42+
? // eslint-disable-next-line @typescript-eslint/no-explicit-any
43+
(options as any).warnHtmlMessage
44+
: true
45+
__DEV__ && checkHtmlMessage(source, warnHtmlMessage)
4146

4247
// check caches
4348
const onCacheKey = options.onCacheKey || defaultOnCacheKey

packages/message-compiler/src/helpers.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,8 @@ export const enum HelperNameMap {
88
INTERPOLATE = 'interpolate',
99
NORMALIZE = 'normalize'
1010
}
11+
12+
const RE_HTML_TAG = /<\/?[\w\s="/.':;#-\/]+>/
13+
14+
export const detectHtmlTag = (source: string): boolean =>
15+
RE_HTML_TAG.test(source)

packages/message-compiler/src/options.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export interface CodeGenOptions {
3131
}
3232

3333
export type CompileOptions = {
34-
warnHtmlMessage?: boolean
3534
onCacheKey?: CompileCacheKeyHandler
3635
} & TransformOptions &
3736
CodeGenOptions &

0 commit comments

Comments
 (0)