@libs-ui/components-preview-text-data 0.2.357-5 → 0.2.357-6
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.
|
@@ -6,15 +6,20 @@ import { autocompletion } from '@codemirror/autocomplete';
|
|
|
6
6
|
*/
|
|
7
7
|
export const buildCompletionExtension = (items) => {
|
|
8
8
|
const completionSource = (context) => {
|
|
9
|
-
|
|
9
|
+
// Cho phép path nhiều cấp (a.b.c.) — [\w.]+ bắt trọn chuỗi trước con trỏ.
|
|
10
|
+
const dotMatch = context.matchBefore(/[\w.]+\.\w*/);
|
|
10
11
|
if (dotMatch) {
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
12
|
+
const segments = dotMatch.text.split('.');
|
|
13
|
+
const partial = segments[segments.length - 1]; // phần đang gõ dở sau dấu '.' cuối
|
|
14
|
+
const pathSegments = segments.slice(0, -1); // các cấp đã hoàn tất
|
|
15
|
+
let current = items.find((item) => item.label === pathSegments[0]);
|
|
16
|
+
for (let level = 1; level < pathSegments.length && current; level++) {
|
|
17
|
+
current = current.properties?.find((property) => property.label === pathSegments[level]);
|
|
18
|
+
}
|
|
19
|
+
if (current?.properties?.length) {
|
|
15
20
|
return {
|
|
16
|
-
from:
|
|
17
|
-
options:
|
|
21
|
+
from: context.pos - partial.length,
|
|
22
|
+
options: current.properties.map((p) => ({ label: p.label, type: p.type ?? 'property', detail: p.detail ?? '', info: p.info ?? '' })),
|
|
18
23
|
};
|
|
19
24
|
}
|
|
20
25
|
}
|
|
@@ -28,4 +33,4 @@ export const buildCompletionExtension = (items) => {
|
|
|
28
33
|
};
|
|
29
34
|
return autocompletion({ override: [completionSource] });
|
|
30
35
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWNvbXBsZXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9lZGl0b3IvZWRpdG9yLWNvbXBsZXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQXVDLE1BQU0sMEJBQTBCLENBQUM7QUFJL0Y7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsS0FBdUMsRUFBYSxFQUFFO0lBQzdGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUEwQixFQUEyQixFQUFFO1FBQy9FLDBFQUEwRTtRQUMxRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztZQUNsRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1lBRWxFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQ0QsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNO29CQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3JJLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdkksQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8sY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXV0b2NvbXBsZXRpb24sIENvbXBsZXRpb25Db250ZXh0LCBDb21wbGV0aW9uUmVzdWx0IH0gZnJvbSAnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IElQcmV2aWV3VGV4dERhdGFDb21wbGV0aW9uSXRlbSB9IGZyb20gJy4uL3ByZXZpZXctdGV4dC1kYXRhLmludGVyZmFjZXMnO1xuXG4vKipcbiAqIFThuqFvIGV4dGVuc2lvbiBhdXRvY29tcGxldGUgdOG7qyBkYW5oIHPDoWNoIGBpdGVtc2A6XG4gKiAxLiBHw7UgYG9iai5gIOKGkiBn4bujaSDDvSBwcm9wZXJ0aWVzIGPhu6dhIG9iaiAoZG90LW5vdGF0aW9uKS5cbiAqIDIuIEfDtSBrw70gdOG7sSDihpIgZ+G7o2kgw70gdMOqbiBiaeG6v24vb2JqZWN0IHRvcC1sZXZlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkQ29tcGxldGlvbkV4dGVuc2lvbiA9IChpdGVtczogSVByZXZpZXdUZXh0RGF0YUNvbXBsZXRpb25JdGVtW10pOiBFeHRlbnNpb24gPT4ge1xuICBjb25zdCBjb21wbGV0aW9uU291cmNlID0gKGNvbnRleHQ6IENvbXBsZXRpb25Db250ZXh0KTogQ29tcGxldGlvblJlc3VsdCB8IG51bGwgPT4ge1xuICAgIC8vIENobyBwaMOpcCBwYXRoIG5oaeG7gXUgY+G6pXAgKGEuYi5jLikg4oCUIFtcXHcuXSsgYuG6r3QgdHLhu41uIGNodeG7l2kgdHLGsOG7m2MgY29uIHRy4buPLlxuICAgIGNvbnN0IGRvdE1hdGNoID0gY29udGV4dC5tYXRjaEJlZm9yZSgvW1xcdy5dK1xcLlxcdyovKTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gZG90TWF0Y2gudGV4dC5zcGxpdCgnLicpO1xuICAgICAgY29uc3QgcGFydGlhbCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdOyAvLyBwaOG6p24gxJFhbmcgZ8O1IGThu58gc2F1IGThuqV1ICcuJyBjdeG7kWlcbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDAsIC0xKTsgLy8gY8OhYyBj4bqlcCDEkcOjIGhvw6BuIHThuqV0XG5cbiAgICAgIGxldCBjdXJyZW50ID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5sYWJlbCA9PT0gcGF0aFNlZ21lbnRzWzBdKTtcbiAgICAgIGZvciAobGV0IGxldmVsID0gMTsgbGV2ZWwgPCBwYXRoU2VnbWVudHMubGVuZ3RoICYmIGN1cnJlbnQ7IGxldmVsKyspIHtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LmxhYmVsID09PSBwYXRoU2VnbWVudHNbbGV2ZWxdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Py5wcm9wZXJ0aWVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmcm9tOiBjb250ZXh0LnBvcyAtIHBhcnRpYWwubGVuZ3RoLFxuICAgICAgICAgIG9wdGlvbnM6IGN1cnJlbnQucHJvcGVydGllcy5tYXAoKHApID0+ICh7IGxhYmVsOiBwLmxhYmVsLCB0eXBlOiBwLnR5cGUgPz8gJ3Byb3BlcnR5JywgZGV0YWlsOiBwLmRldGFpbCA/PyAnJywgaW5mbzogcC5pbmZvID8/ICcnIH0pKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd29yZCA9IGNvbnRleHQubWF0Y2hCZWZvcmUoL1xcdyovKTtcbiAgICBpZiAoIXdvcmQgfHwgKHdvcmQuZnJvbSA9PT0gd29yZC50byAmJiAhY29udGV4dC5leHBsaWNpdCkpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHdvcmQuZnJvbSxcbiAgICAgIG9wdGlvbnM6IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHsgbGFiZWw6IGl0ZW0ubGFiZWwsIHR5cGU6IGl0ZW0udHlwZSA/PyAndmFyaWFibGUnLCBkZXRhaWw6IGl0ZW0uZGV0YWlsID8/ICcnLCBpbmZvOiBpdGVtLmluZm8gPz8gJycgfSkpLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIGF1dG9jb21wbGV0aW9uKHsgb3ZlcnJpZGU6IFtjb21wbGV0aW9uU291cmNlXSB9KTtcbn07XG4iXX0=
|
|
@@ -635,15 +635,20 @@ const computePythonDiagnostics = (view) => {
|
|
|
635
635
|
*/
|
|
636
636
|
const buildCompletionExtension = (items) => {
|
|
637
637
|
const completionSource = (context) => {
|
|
638
|
-
|
|
638
|
+
// Cho phép path nhiều cấp (a.b.c.) — [\w.]+ bắt trọn chuỗi trước con trỏ.
|
|
639
|
+
const dotMatch = context.matchBefore(/[\w.]+\.\w*/);
|
|
639
640
|
if (dotMatch) {
|
|
640
|
-
const
|
|
641
|
-
const
|
|
642
|
-
const
|
|
643
|
-
|
|
641
|
+
const segments = dotMatch.text.split('.');
|
|
642
|
+
const partial = segments[segments.length - 1]; // phần đang gõ dở sau dấu '.' cuối
|
|
643
|
+
const pathSegments = segments.slice(0, -1); // các cấp đã hoàn tất
|
|
644
|
+
let current = items.find((item) => item.label === pathSegments[0]);
|
|
645
|
+
for (let level = 1; level < pathSegments.length && current; level++) {
|
|
646
|
+
current = current.properties?.find((property) => property.label === pathSegments[level]);
|
|
647
|
+
}
|
|
648
|
+
if (current?.properties?.length) {
|
|
644
649
|
return {
|
|
645
|
-
from:
|
|
646
|
-
options:
|
|
650
|
+
from: context.pos - partial.length,
|
|
651
|
+
options: current.properties.map((p) => ({ label: p.label, type: p.type ?? 'property', detail: p.detail ?? '', info: p.info ?? '' })),
|
|
647
652
|
};
|
|
648
653
|
}
|
|
649
654
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-preview-text-data.mjs","sources":["../../../../../libs-ui/components/preview-text-data/src/preview-text-data.define.ts","../../../../../libs-ui/components/preview-text-data/src/linters/linter-shared.ts","../../../../../libs-ui/components/preview-text-data/src/linters/js-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/json-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/sql-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/python-linter.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-completions.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-forbidden.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-height.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.html","../../../../../libs-ui/components/preview-text-data/src/libs-ui-components-preview-text-data.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Extension } from '@codemirror/state';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { UtilsHttpParamsRequest } from '@libs-ui/utils';\nimport { LibsUiComponentsPreviewTextDataComponent } from './preview-text-data.component';\nimport { ILanguageOptions, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT, T_ForbiddenPattern } from './preview-text-data.interfaces';\n\n/**\n * Danh sách các ngôn ngữ được hỗ trợ\n * Sử dụng const array để tránh tạo mới mỗi lần truy cập\n */\nexport const optionsLangData: Array<ILanguageOptions> = [\n { id: 'text', label: 'Plain Text' },\n { id: 'javascript', label: 'JavaScript/TypeScript' },\n { id: 'html', label: 'HTML' },\n { id: 'css', label: 'CSS/SCSS/SASS' },\n { id: 'markdown', label: 'Markdown' },\n { id: 'json', label: 'JSON' },\n { id: 'sql', label: 'SQL' },\n { id: 'xml', label: 'XML' },\n { id: 'yaml', label: 'YAML' },\n { id: 'python', label: 'Python' },\n { id: 'java', label: 'Java' },\n { id: 'cpp', label: 'C/C++' },\n { id: 'php', label: 'PHP' },\n { id: 'go', label: 'Go' },\n] as const;\n\nexport const httpRequestConfigGetOptionsLang = (langsAccept?: Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>, langsChangeLabel?: ILanguageOptions): IListConfigItem => {\n const langs = [...optionsLangData].filter((item) => !langsAccept?.length || (langsAccept as string[]).includes(item.id));\n\n langs.forEach((item) => ({\n id: item.id,\n label: langsChangeLabel?.label || item.label,\n }));\n\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(langs),\n functionName: 'list',\n argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],\n }),\n configTemplateText: signal({\n fieldKey: 'id',\n notUseVirtualScroll: true,\n }),\n };\n};\n\ntype T_LanguageLoader = () => Promise<Extension>;\ntype T_LinterLoader = (component: LibsUiComponentsPreviewTextDataComponent) => Promise<Extension>;\ninterface I_LanguageRegistryItem {\n loader: T_LanguageLoader;\n linter?: T_LinterLoader;\n}\n\nexport const languageRegistry: Record<string, I_LanguageRegistryItem> = {\n javascript: {\n loader: async () => {\n const { javascript } = await import('@codemirror/lang-javascript');\n return javascript({ jsx: true, typescript: true });\n },\n linter: async (component) => component.createJsLinter(),\n },\n html: {\n loader: async () => {\n const { html } = await import('@codemirror/lang-html');\n return html();\n },\n },\n css: {\n loader: async () => {\n const { css } = await import('@codemirror/lang-css');\n return css();\n },\n },\n markdown: {\n loader: async () => {\n const { markdown } = await import('@codemirror/lang-markdown');\n return markdown();\n },\n },\n json: {\n loader: async () => {\n const { json } = await import('@codemirror/lang-json');\n return json();\n },\n linter: async (component) => component.createJsonLinter(),\n },\n sql: {\n loader: async () => {\n const { sql } = await import('@codemirror/lang-sql');\n return sql();\n },\n linter: async (component) => component.createSqlLinter(),\n },\n xml: {\n loader: async () => {\n const { xml } = await import('@codemirror/lang-xml');\n return xml();\n },\n },\n yaml: {\n loader: async () => {\n const { yaml } = await import('@codemirror/lang-yaml');\n return yaml();\n },\n },\n python: {\n loader: async () => {\n const { python } = await import('@codemirror/lang-python');\n return python();\n },\n linter: async (component) => component.createPythonLinter(),\n },\n java: {\n loader: async () => {\n const { java } = await import('@codemirror/lang-java');\n return java();\n },\n },\n cpp: {\n loader: async () => {\n const { cpp } = await import('@codemirror/lang-cpp');\n return cpp();\n },\n },\n php: {\n loader: async () => {\n const { php } = await import('@codemirror/lang-php');\n return php();\n },\n },\n go: {\n loader: async () => {\n const { go } = await import('@codemirror/lang-go');\n return go();\n },\n },\n};\n\n/**\n * Bộ pattern bảo mật mặc định cho low-code platform.\n * Chặn các API nguy hiểm: eval, network calls, storage, DOM injection...\n */\nexport const DEFAULT_SECURITY_PATTERNS: T_ForbiddenPattern[] = [\n /eval\\s*\\(/i,\n /new\\s+Function\\s*\\(/i,\n /document\\.cookie/i,\n /localStorage/i,\n /sessionStorage/i,\n /fetch\\s*\\(/i,\n /new\\s+XMLHttpRequest/i,\n /require\\s*\\(/i,\n /import\\s*\\(/i,\n /process\\.env/i,\n /<script/i,\n /document\\.write\\s*\\(/i,\n /window\\.location\\s*=/i,\n];\n\n/**\n * Các key của AST node KHÔNG phải node con (metadata vị trí, comment...) — bỏ qua khi duyệt.\n */\nexport const astSkipKeys = new Set<string>(['loc', 'start', 'end', 'range', 'leadingComments', 'trailingComments', 'innerComments', 'extra', 'comments', 'tokens']);\n\n/**\n * Các key chứa annotation kiểu TypeScript → con của nó nằm trong \"type context\" (không phải biến giá trị).\n */\nexport const astTypeKeys = new Set<string>(['typeAnnotation', 'returnType', 'typeParameters', 'typeArguments', 'superTypeParameters']);\n\n/**\n * Các node `TS*` mang GIÁ TRỊ (không phải type thuần) → con của chúng vẫn là biến giá trị bình thường.\n */\nexport const tsValueNodes = new Set<string>(['TSEnumDeclaration', 'TSEnumMember', 'TSModuleDeclaration', 'TSModuleBlock', 'TSAsExpression', 'TSNonNullExpression', 'TSParameterProperty', 'TSExportAssignment', 'TSImportEqualsDeclaration', 'TSExternalModuleReference', 'TSSatisfiesExpression']);\n\n/**\n * Tạo default language extension cho plain text\n * Sử dụng khi ngôn ngữ không được hỗ trợ\n */\nexport const createDefaultLanguage = async (): Promise<Extension> => {\n const { StreamLanguage } = await import('@codemirror/language');\n return StreamLanguage.define({\n token(stream) {\n stream.skipToEnd();\n return null;\n },\n });\n};\n","import { Text } from '@codemirror/state';\n\n/** Lấy token (chuỗi không khoảng trắng) liền trước vị trí `pos` trong document. Dùng chung cho JS/SQL/Python. */\nexport const getTokenBefore = (doc: Text, pos: number): string => {\n const start = Math.max(0, pos - 30);\n const text = doc.sliceString(start, pos);\n const match = /(\\S+)\\s*$/.exec(text);\n return match?.[1] ?? '';\n};\n","import { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { get } from '@libs-ui/utils';\nimport { astSkipKeys, astTypeKeys, tsValueNodes } from '../preview-text-data.define';\nimport { T_AstNode } from '../preview-text-data.type';\nimport { getTokenBefore } from './linter-shared';\n\ntype T_BabelError = { loc?: { line: number; column: number }; message: string };\ntype T_AstReference = { name: string; line: number; column: number };\n\n// Cache module-level (chia sẻ giữa các instance editor) — đều immutable, lazy-load 1 lần.\nlet babelParserModule: typeof import('@babel/parser') | undefined;\nlet knownGlobalsSet: Set<string> | undefined;\n\n/** Lazy-load + cache module @babel/parser (chỉ tải lần đầu khi lint JS/TS). */\nconst getBabelParser = async (): Promise<typeof import('@babel/parser')> => {\n if (!babelParserModule) {\n babelParserModule = await import('@babel/parser');\n }\n return babelParserModule;\n};\n\n/** Lazy-load + cache tập biến toàn cục JS/DOM hợp lệ từ package `globals` (JSON thuần, browser-safe). */\nconst getKnownGlobals = async (): Promise<Set<string>> => {\n if (!knownGlobalsSet) {\n const globalsModule = (await import('globals')) as unknown as { default?: Record<string, Record<string, boolean>> };\n const globalsData = (globalsModule.default ?? globalsModule) as Record<string, Record<string, boolean>>;\n knownGlobalsSet = new Set<string>([...Object.keys(globalsData['builtin'] ?? {}), ...Object.keys(globalsData['browser'] ?? {}), ...Object.keys(globalsData['es2021'] ?? {})]);\n }\n return knownGlobalsSet;\n};\n\n/**\n * Parse code, trả về vừa danh sách lỗi cú pháp vừa AST (nếu parse sạch).\n * `errorRecovery` gom nhiều lỗi vào `result.errors`; lỗi nặng vẫn `throw` → bắt thêm ở catch.\n */\nexport const parseJs = (parser: typeof import('@babel/parser'), code: string): { errors: T_BabelError[]; ast?: object } => {\n try {\n const result = parser.parse(code, {\n sourceType: 'module',\n errorRecovery: true,\n plugins: ['typescript', 'jsx'],\n allowReturnOutsideFunction: true,\n allowAwaitOutsideFunction: true,\n allowImportExportEverywhere: true,\n allowSuperOutsideMethod: true,\n allowNewTargetOutsideFunction: true,\n allowUndeclaredExports: true,\n });\n return { errors: result.errors as T_BabelError[], ast: result };\n } catch (error: unknown) {\n const loc = get(error, 'loc') as { line: number; column: number } | undefined;\n const message = (get(error, 'message') as string) || 'JavaScript syntax error';\n return { errors: [{ loc, message }] };\n }\n};\n\n/** Giữ cho test/back-compat: chỉ lấy danh sách lỗi cú pháp. */\nexport const collectBabelErrors = (parser: typeof import('@babel/parser'), code: string): T_BabelError[] => parseJs(parser, code).errors;\n\n/**\n * Quét text từng dòng, flag dấu \".\" cuối dòng (incomplete property access) tại ĐÚNG vị trí dấu chấm.\n * Thu thập `taintedLines` (dòng có trailing dot) + `dotPositions` (offset dấu chấm để vá khi parse).\n */\nexport const collectTrailingDotDiagnostics = (doc: Text, diagnostics: Diagnostic[], taintedLines: Set<number>, dotPositions: number[]): void => {\n for (let lineNumber = 1; lineNumber <= doc.lines; lineNumber++) {\n const line = doc.line(lineNumber);\n const trimmed = line.text.trimEnd();\n const match = /(\\w+)\\.\\s*$/.exec(trimmed);\n if (!match) {\n continue;\n }\n taintedLines.add(lineNumber);\n const dotPosition = line.from + trimmed.lastIndexOf('.');\n dotPositions.push(dotPosition);\n diagnostics.push({ from: dotPosition, to: dotPosition + 1, severity: 'error', message: `Incomplete property access on \"${match[1]}\"` });\n }\n};\n\n/** Thay các ký tự tại `positions` bằng space, giữ nguyên độ dài chuỗi (để offset không đổi). */\nconst replaceCharsWithSpace = (code: string, positions: number[]): string => {\n if (!positions.length) {\n return code;\n }\n const chars = code.split('');\n for (const position of positions) {\n if (position >= 0 && position < chars.length) {\n chars[position] = ' ';\n }\n }\n return chars.join('');\n};\n\n/** VariableDeclaration ở `for(let i=0;...)` / `for..in` / `for..of` KHÔNG cần `;` cuối. */\nconst requiresSemicolon = (nodeType: string, parentType: string, keyInParent: string): boolean => {\n if (nodeType === 'VariableDeclaration') {\n if (parentType === 'ForStatement' && keyInParent === 'init') return false;\n if ((parentType === 'ForInStatement' || parentType === 'ForOfStatement') && keyInParent === 'left') return false;\n }\n return true;\n};\n\n/**\n * Rule custom \"require semicolon\": câu lệnh (const/let/return/expression...) không kết thúc bằng `;` → báo lỗi.\n * Dùng vị trí `node.end` của AST babel; bỏ qua dòng tainted (trailing dot) để không chồng lỗi.\n */\nexport const collectMissingSemicolonDiagnostics = (ast: object, code: string, diagnostics: Diagnostic[], taintedLines: Set<number>): void => {\n const semiNodes = new Set(['ExpressionStatement', 'VariableDeclaration', 'ReturnStatement', 'ThrowStatement', 'BreakStatement', 'ContinueStatement', 'DoWhileStatement', 'DebuggerStatement']);\n const seen = new Set<number>();\n const lineOf = (offset: number) => code.slice(0, offset).split('\\n').length;\n const walk = (node: unknown, parentType: string, keyInParent: string): void => {\n if (Array.isArray(node)) {\n for (const item of node) walk(item, parentType, keyInParent);\n return;\n }\n if (!node || typeof node !== 'object') return;\n const current = node as T_AstNode;\n if (typeof current.type !== 'string') return;\n\n if (semiNodes.has(current.type) && requiresSemicolon(current.type, parentType, keyInParent) && typeof current.end === 'number') {\n const end = Math.min(current.end, code.length);\n if (end > 0 && code.charAt(end - 1) !== ';' && !seen.has(end) && !taintedLines.has(lineOf(end - 1))) {\n seen.add(end);\n diagnostics.push({ from: end - 1, to: end, severity: 'error', message: 'Missing semicolon' });\n }\n }\n\n for (const childKey of Object.keys(current)) {\n if (astSkipKeys.has(childKey)) continue;\n walk(current[childKey], current.type, childKey);\n }\n };\n walk((ast as { program?: unknown }).program ?? ast, '', '');\n};\n\n/** Chuẩn hóa message: thân thiện cho trailing dot + heuristic kiểu cũ cho \"Unexpected token\"; bỏ hậu tố \"(line:col)\". */\nexport const buildJsErrorMessage = (doc: Text, from: number, rawMessage: string): string => {\n const charBefore = from > 0 ? doc.sliceString(from - 1, from) : '';\n if (charBefore === '.') {\n const owner = getTokenBefore(doc, from).replace(/\\.$/, '');\n return owner ? `Incomplete property access on \"${owner}\"` : 'Incomplete property access';\n }\n\n const cleaned = rawMessage.replace(/\\s*\\(\\d+:\\d+\\)\\s*$/, '').trim();\n if (/missing semicolon/i.test(cleaned)) {\n return 'Unexpected token — missing operator or separator between expressions';\n }\n if (/^unexpected token$/i.test(cleaned)) {\n const prevToken = getTokenBefore(doc, from);\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n if (prevToken.endsWith('[')) return 'Missing closing \"]\"';\n if (/^function$/i.test(prevToken)) return 'Expected function name or \"(\"';\n if (/^return$/i.test(prevToken)) return 'Invalid expression after \"return\"';\n if (/^=>$/.test(prevToken)) return 'Expected function body after \"=>\"';\n if (/^const$|^let$|^var$/i.test(prevToken)) return 'Expected variable name';\n }\n return `JavaScript syntax error: ${cleaned}`;\n};\n\n/** Lấy tên binding từ pattern (Identifier, destructuring object/array, default, rest). */\nconst collectPatternNames = (node: T_AstNode | null | undefined, declared: Set<string>): void => {\n if (!node || typeof node.type !== 'string') return;\n switch (node.type) {\n case 'Identifier':\n if (node.name) declared.add(node.name);\n return;\n case 'ObjectPattern':\n if (node.properties) for (const property of node.properties) collectPatternNames(property.type === 'RestElement' ? property.argument : property.value, declared);\n return;\n case 'ArrayPattern':\n if (node.elements) for (const element of node.elements) collectPatternNames(element, declared);\n return;\n case 'AssignmentPattern':\n collectPatternNames(node.left, declared);\n return;\n case 'RestElement':\n collectPatternNames(node.argument, declared);\n return;\n case 'TSParameterProperty':\n collectPatternNames(node.parameter, declared);\n return;\n default:\n return;\n }\n};\n\n/** Thu thập tên binding (biến/hàm/class/param/import/enum...) từ 1 node vào tập `declared`. */\nconst collectBindingNames = (node: T_AstNode, declared: Set<string>): void => {\n switch (node.type) {\n case 'VariableDeclarator':\n collectPatternNames(node.id, declared);\n return;\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'ClassDeclaration':\n case 'ClassExpression':\n if (node.id?.name) declared.add(node.id.name);\n if (node.params) for (const param of node.params) collectPatternNames(param, declared);\n return;\n case 'ArrowFunctionExpression':\n if (node.params) for (const param of node.params) collectPatternNames(param, declared);\n return;\n case 'CatchClause':\n collectPatternNames(node.param, declared);\n return;\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n if (node.local?.name) declared.add(node.local.name);\n return;\n case 'TSEnumDeclaration':\n case 'TSModuleDeclaration':\n if (node.id?.name) declared.add(node.id.name);\n return;\n default:\n return;\n }\n};\n\n/** Xác định 1 Identifier có phải tham chiếu giá trị không (loại property access, key object, declaration id, label...). */\nconst isReferenceIdentifier = (parent: T_AstNode | null, keyInParent: string): boolean => {\n if (!parent) return true;\n const parentType = parent.type;\n if ((parentType === 'MemberExpression' || parentType === 'OptionalMemberExpression') && keyInParent === 'property' && !parent.computed) return false;\n if ((parentType === 'ObjectProperty' || parentType === 'ObjectMethod' || parentType === 'ClassMethod' || parentType === 'ClassProperty' || parentType === 'ClassPrivateProperty' || parentType === 'PropertyDefinition') && keyInParent === 'key' && !parent.computed) return false;\n if (keyInParent === 'label') return false;\n if (parentType === 'TSQualifiedName' && keyInParent === 'right') return false;\n if (parentType === 'VariableDeclarator' && keyInParent === 'id') return false;\n if ((parentType === 'FunctionDeclaration' || parentType === 'FunctionExpression' || parentType === 'ClassDeclaration' || parentType === 'ClassExpression') && keyInParent === 'id') return false;\n if (parentType === 'ImportSpecifier' || parentType === 'ImportDefaultSpecifier' || parentType === 'ImportNamespaceSpecifier' || parentType === 'ExportSpecifier') return false;\n if (parentType === 'MetaProperty') return false;\n if (parentType === 'TSEnumMember' && keyInParent === 'id') return false;\n return true;\n};\n\n/** Duyệt đệ quy AST: gom binding name vào `declared`, gom identifier tham chiếu vào `references`. */\nconst walkAstNode = (node: unknown, parent: T_AstNode | null, keyInParent: string, inType: boolean, declared: Set<string>, references: T_AstReference[]): void => {\n if (Array.isArray(node)) {\n for (const item of node) walkAstNode(item, parent, keyInParent, inType, declared, references);\n return;\n }\n if (!node || typeof node !== 'object') return;\n const current = node as T_AstNode;\n if (typeof current.type !== 'string') return;\n\n collectBindingNames(current, declared);\n\n if (current.type === 'Identifier' && !inType && isReferenceIdentifier(parent, keyInParent)) {\n const start = current.loc?.start;\n if (current.name && start) references.push({ name: current.name, line: start.line, column: start.column });\n }\n\n const opensType = inType || (current.type.startsWith('TS') && !tsValueNodes.has(current.type));\n for (const childKey of Object.keys(current)) {\n if (astSkipKeys.has(childKey)) continue;\n const child = current[childKey];\n const childOpensType = typeof child === 'object' && child !== null && typeof (child as T_AstNode).type === 'string' && (child as T_AstNode).type.startsWith('TS') && !tsValueNodes.has((child as T_AstNode).type);\n const childInType = opensType || astTypeKeys.has(childKey) || childOpensType;\n walkAstNode(child, current, childKey, childInType, declared, references);\n }\n};\n\n/**\n * Pass ngữ nghĩa: báo biến CHƯA KHAI BÁO. Tự duyệt AST (object thuần) — KHÔNG dùng `@babel/traverse`\n * (cần `process` của Node → crash browser). Hợp lệ = binding trong code + global JS/DOM + `completionLabels`.\n */\nexport const collectUndeclaredIdentifiers = async (ast: object, doc: Text, completionLabels: Set<string>, taintedLines: Set<number> = new Set()): Promise<Diagnostic[]> => {\n const globalsSet = await getKnownGlobals();\n const declared = new Set<string>();\n const references: T_AstReference[] = [];\n\n walkAstNode(ast as T_AstNode, null, '', false, declared, references);\n\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const reference of references) {\n const { name, line: startLine, column: startColumn } = reference;\n if (declared.has(name) || globalsSet.has(name) || completionLabels.has(name)) continue;\n if (taintedLines.has(startLine)) continue;\n\n const dedupeKey = `${startLine}:${startColumn}:${name}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n\n const line = doc.line(Math.min(Math.max(startLine, 1), doc.lines));\n const from = Math.min(line.from + Math.max(startColumn, 0), doc.length);\n const to = Math.min(from + name.length, doc.length);\n diagnostics.push({ from, to: Math.max(from + 1, to), severity: 'error', message: `\"${name}\" is not defined` });\n }\n return diagnostics;\n};\n\n/**\n * Toàn bộ pipeline validate JS/TS:\n * - Pass 1: trailing dot (text) — flag đúng vị trí dấu `.` cuối dòng + đánh dấu dòng tainted.\n * - Pass 2: lỗi cú pháp babel — bỏ lỗi trên dòng tainted (cascading).\n * - Pass 3: rule cần AST (thiếu `;`, biến chưa khai báo). Trailing dot được \"vá\" (`.`→space) để babel\n * vẫn parse được phần còn lại → rule vẫn chạy cho các dòng KHÁC.\n */\nexport const computeJsDiagnostics = async (doc: Text, code: string, completionLabels: Set<string>): Promise<Diagnostic[]> => {\n const diagnostics: Diagnostic[] = [];\n if (code.trim() === '') {\n return diagnostics;\n }\n\n const taintedLines = new Set<number>();\n const dotPositions: number[] = [];\n collectTrailingDotDiagnostics(doc, diagnostics, taintedLines, dotPositions);\n\n const parseCode = replaceCharsWithSpace(code, dotPositions);\n const parser = await getBabelParser();\n const { errors, ast } = parseJs(parser, parseCode);\n const seen = new Set<string>();\n for (const error of errors) {\n const location = error.loc;\n if (!location) continue;\n const lineNumber = Math.min(Math.max(location.line, 1), doc.lines);\n if (taintedLines.has(lineNumber)) continue;\n const line = doc.line(lineNumber);\n const errorPos = Math.min(line.from + Math.max(location.column, 0), doc.length);\n const to = Math.min(errorPos + 1, doc.length);\n const from = errorPos >= to && errorPos > 0 ? errorPos - 1 : errorPos;\n const message = buildJsErrorMessage(doc, errorPos, error.message);\n const dedupeKey = `${from}:${message}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n diagnostics.push({ from, to: Math.max(from + 1, to), severity: 'error', message });\n }\n\n if (errors.length === 0 && ast) {\n collectMissingSemicolonDiagnostics(ast, code, diagnostics, taintedLines);\n diagnostics.push(...(await collectUndeclaredIdentifiers(ast, doc, completionLabels, taintedLines)));\n }\n\n return diagnostics;\n};\n","import { Diagnostic } from '@codemirror/lint';\nimport { EditorView } from '@codemirror/view';\nimport { get } from '@libs-ui/utils';\n\n/** Validate JSON bằng `JSON.parse`. Lỗi → 1 diagnostic phủ toàn bộ nội dung. */\nexport const computeJsonDiagnostics = (view: EditorView): Diagnostic[] => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n try {\n JSON.parse(text);\n } catch (error: unknown) {\n diagnostics.push({ from: 0, to: text.length, severity: 'error', message: get(error, 'message', '') });\n }\n return diagnostics;\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { getTokenBefore } from './linter-shared';\n\nconst buildSqlErrorMessage = (doc: Text, node: SyntaxNodeRef): string => {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to);\n return `SQL syntax error near \"${text}\"`;\n }\n const prevToken = getTokenBefore(doc, node.from);\n if (!prevToken) return 'SQL syntax error at beginning of statement';\n if (/FROM$/i.test(prevToken)) return 'Expected table name after FROM';\n if (/SELECT$/i.test(prevToken)) return 'Expected column list after SELECT';\n if (/WHERE$/i.test(prevToken)) return 'Expected condition after WHERE';\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n return `Unexpected end of SQL after \"${prevToken}\"`;\n};\n\n/** Phát hiện lỗi cú pháp SQL từ error node của syntaxTree (Lezer). */\nexport const computeSqlDiagnostics = (view: EditorView): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n diagnostics.push({ from: Math.max(0, node.from - 1), to: node.from, severity: 'error', message: buildSqlErrorMessage(doc, node) });\n },\n });\n return diagnostics;\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { getTokenBefore } from './linter-shared';\n\nconst buildPythonErrorMessage = (doc: Text, node: SyntaxNodeRef): string => {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to).trim();\n return `Python syntax error${text ? ` near \"${text}\"` : ''}`;\n }\n const prevToken = getTokenBefore(doc, node.from);\n if (!prevToken) return 'Python syntax error';\n if (/^def$/i.test(prevToken)) return 'Expected function name after \"def\"';\n if (/^class$/i.test(prevToken)) return 'Expected class name after \"class\"';\n if (/^return$/i.test(prevToken)) return 'Invalid expression after \"return\"';\n if (/^import$/i.test(prevToken)) return 'Expected module name after \"import\"';\n if (/^from$/i.test(prevToken)) return 'Expected module name after \"from\"';\n if (/^if$/i.test(prevToken)) return 'Expected condition after \"if\"';\n if (/^elif$/i.test(prevToken)) return 'Expected condition after \"elif\"';\n if (/^while$/i.test(prevToken)) return 'Expected condition after \"while\"';\n if (/^for$/i.test(prevToken)) return 'Expected variable after \"for\"';\n if (prevToken.endsWith('.')) return `Incomplete attribute access on \"${prevToken.slice(0, -1)}\"`;\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n if (prevToken.endsWith('[')) return 'Missing closing \"]\"';\n return `Python syntax error near \"${prevToken}\"`;\n};\n\n/** Phát hiện lỗi cú pháp Python từ error node của syntaxTree (Lezer) — cùng approach SQL. */\nexport const computePythonDiagnostics = (view: EditorView): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n const from = Math.max(0, node.from - 1);\n const to = node.from === node.to ? node.from + 1 : node.to;\n diagnostics.push({ from, to: Math.min(to, doc.length), severity: 'error', message: buildPythonErrorMessage(doc, node) });\n },\n });\n return diagnostics;\n};\n","import { autocompletion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport { Extension } from '@codemirror/state';\nimport { IPreviewTextDataCompletionItem } from '../preview-text-data.interfaces';\n\n/**\n * Tạo extension autocomplete từ danh sách `items`:\n * 1. Gõ `obj.` → gợi ý properties của obj (dot-notation).\n * 2. Gõ ký tự → gợi ý tên biến/object top-level.\n */\nexport const buildCompletionExtension = (items: IPreviewTextDataCompletionItem[]): Extension => {\n const completionSource = (context: CompletionContext): CompletionResult | null => {\n const dotMatch = context.matchBefore(/\\w+\\.\\w*/);\n if (dotMatch) {\n const dotPos = dotMatch.text.indexOf('.');\n const objectName = dotMatch.text.slice(0, dotPos);\n const parent = items.find((i) => i.label === objectName);\n if (parent?.properties?.length) {\n return {\n from: dotMatch.from + dotPos + 1,\n options: parent.properties.map((p) => ({ label: p.label, type: p.type ?? 'property', detail: p.detail ?? '', info: p.info ?? '' })),\n };\n }\n }\n\n const word = context.matchBefore(/\\w*/);\n if (!word || (word.from === word.to && !context.explicit)) return null;\n\n return {\n from: word.from,\n options: items.map((item) => ({ label: item.label, type: item.type ?? 'variable', detail: item.detail ?? '', info: item.info ?? '' })),\n };\n };\n\n return autocompletion({ override: [completionSource] });\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic, linter } from '@codemirror/lint';\nimport { EditorState, Extension, Transaction } from '@codemirror/state';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { IPreviewTextDataViolation, T_ForbiddenPattern } from '../preview-text-data.interfaces';\n\nconst escapeRegex = (str: string): string => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst toGlobalRegex = (pattern: T_ForbiddenPattern): RegExp => {\n if (pattern instanceof RegExp) {\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`;\n return new RegExp(pattern.source, flags);\n }\n return new RegExp(escapeRegex(pattern), 'gi');\n};\n\n/**\n * Extension bảo mật gồm 2 layer:\n * 1. Linter: highlight đỏ tại đúng vị trí match (bỏ qua match trong comment) + gọi `emitViolations`.\n * 2. Transaction filter: chặn paste nếu nội dung paste chứa pattern cấm.\n */\nexport const buildForbiddenExtension = (patterns: T_ForbiddenPattern[], emitViolations: (violations: IPreviewTextDataViolation[]) => void): Extension => {\n const forbiddenLinter = linter((view) => {\n const diagnostics: Diagnostic[] = [];\n const violations: IPreviewTextDataViolation[] = [];\n const text = view.state.doc.toString();\n\n const commentRanges: { from: number; to: number }[] = [];\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (node.type.name.toLowerCase().includes('comment')) {\n commentRanges.push({ from: node.from, to: node.to });\n }\n },\n });\n const isInComment = (from: number, to: number): boolean => commentRanges.some((r) => from >= r.from && to <= r.to);\n\n for (const pattern of patterns) {\n const re = toGlobalRegex(pattern);\n re.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const from = match.index;\n const to = from + match[0].length;\n if (isInComment(from, to)) continue;\n const line = view.state.doc.lineAt(from).number;\n const patternLabel = pattern instanceof RegExp ? pattern.source : pattern;\n diagnostics.push({ from, to, severity: 'error', message: `Mã bị cấm: \"${match[0]}\" — vi phạm chính sách bảo mật` });\n violations.push({ from, to, line, pattern: patternLabel, matched: match[0] });\n }\n }\n\n emitViolations(violations);\n return diagnostics;\n });\n\n const pasteFilter = EditorState.transactionFilter.of((tr: Transaction) => {\n if (!tr.docChanged) return tr;\n if (!tr.annotation(Transaction.userEvent)?.startsWith('input.paste')) return tr;\n const newText = tr.newDoc.toString();\n for (const pattern of patterns) {\n const re = toGlobalRegex(pattern);\n re.lastIndex = 0;\n if (re.test(newText)) return [];\n }\n return tr;\n });\n\n return [forbiddenLinter, pasteFilter];\n};\n","import { EditorView } from '@codemirror/view';\n\n/** Parse giá trị CSS px → number. Trả về undefined nếu không phải px hợp lệ (vd `none`, `0`). */\nexport const parsePx = (raw: string): number | undefined => {\n if (!raw || !raw.endsWith('px')) {\n return undefined;\n }\n const value = parseFloat(raw);\n return Number.isFinite(value) && value > 0 ? value : undefined;\n};\n\n/** Bù dòng trống cho đủ `minLines` (xử lý 1 lần khi khởi tạo). Đủ rồi giữ nguyên, không cắt bớt. */\nexport const applyMinLines = (content: string, minLines?: number): string => {\n const value = content ?? '';\n if (!minLines || minLines <= 0) {\n return value;\n }\n const currentLines = value === '' ? 1 : value.split('\\n').length;\n if (currentLines >= minLines) {\n return value;\n }\n return value + '\\n'.repeat(minLines - currentLines);\n};\n\n/**\n * Tính min/max-height vùng cuộn theo CSS của container ngoài, snap về bội số dòng.\n * Trừ offset phần header/toolbar (giữa đỉnh container và đỉnh vùng cuộn) để vừa khít container.\n */\nexport const applyContainerHeight = (view: EditorView, container: HTMLElement): void => {\n const style = getComputedStyle(container);\n const minPx = parsePx(style.minHeight);\n const maxPx = parsePx(style.maxHeight);\n if (minPx === undefined && maxPx === undefined) {\n return;\n }\n view.requestMeasure({\n read: (measureView) => {\n const line = measureView.contentDOM.querySelector('.cm-line');\n const lineHeight = (line ? line.getBoundingClientRect().height : measureView.defaultLineHeight) || 20;\n const offsetTop = Math.max(measureView.scrollDOM.getBoundingClientRect().top - container.getBoundingClientRect().top, 0);\n const toLines = (px: number) => Math.max(1, Math.floor((px - offsetTop - 8) / lineHeight));\n return { lineHeight, minLines: minPx === undefined ? undefined : toLines(minPx), maxLines: maxPx === undefined ? undefined : toLines(maxPx) };\n },\n write: ({ lineHeight, minLines, maxLines }, writeView) => {\n if (maxLines !== undefined) {\n writeView.scrollDOM.style.maxHeight = `${maxLines * lineHeight + 8}px`;\n writeView.scrollDOM.style.overflowY = 'auto';\n }\n // min-height: bù dòng trống vào content (hiện đủ line-number 1..N), giống cơ chế minLines.\n if (minLines !== undefined) {\n const currentLines = writeView.state.doc.lines;\n if (currentLines < minLines) {\n queueMicrotask(() => writeView.dispatch({ changes: { from: writeView.state.doc.length, insert: '\\n'.repeat(minLines - currentLines) } }));\n }\n }\n },\n });\n};\n\n/**\n * Giới hạn chiều cao editor (xử lý 1 lần). 2 chế độ loại trừ nhau:\n * - `maxLines`: cap theo số dòng truyền vào.\n * - `container`: tự tính số dòng theo `min-height`/`max-height` (CSS) của container, snap bội số dòng.\n * Cấu hình đồng thời `container` + `minLines`/`maxLines` → throw.\n */\nexport const applyMaxHeight = (view: EditorView | undefined, options: { minLines?: number; maxLines?: number; container?: HTMLElement }): void => {\n const { minLines, maxLines, container } = options;\n if (container && (minLines || maxLines)) {\n throw new Error('[preview-text-data] CẤM cấu hình [containerElement] cùng [minLines]/[maxLines]. Container tự quản lý min/max height.');\n }\n if (!view) {\n return;\n }\n if (container) {\n applyContainerHeight(view, container);\n return;\n }\n if (!maxLines || maxLines <= 0) {\n return;\n }\n view.requestMeasure({\n read: (measureView) => {\n const line = measureView.contentDOM.querySelector('.cm-line');\n return (line ? line.getBoundingClientRect().height : measureView.defaultLineHeight) || 20;\n },\n write: (lineHeight, writeView) => {\n writeView.scrollDOM.style.maxHeight = `${maxLines * lineHeight + 8}px`;\n writeView.scrollDOM.style.overflowY = 'auto';\n },\n });\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, OnInit, output, signal, viewChild } from '@angular/core';\nimport { Diagnostic, linter, lintGutter } from '@codemirror/lint';\nimport { Compartment, Extension, Prec } from '@codemirror/state';\nimport { EditorView, lineNumbers, ViewUpdate } from '@codemirror/view';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { basicSetup } from 'codemirror6';\nimport { createDefaultLanguage, httpRequestConfigGetOptionsLang, languageRegistry, optionsLangData } from './preview-text-data.define';\nimport { computeJsDiagnostics } from './linters/js-linter';\nimport { computeJsonDiagnostics } from './linters/json-linter';\nimport { computeSqlDiagnostics } from './linters/sql-linter';\nimport { computePythonDiagnostics } from './linters/python-linter';\nimport { buildCompletionExtension } from './editor/editor-completions';\nimport { buildForbiddenExtension } from './editor/editor-forbidden';\nimport { applyMaxHeight, applyMinLines } from './editor/editor-height';\nimport { ILanguageOptions, IPreviewTextDataChange, IPreviewTextDataCompletionItem, IPreviewTextDataViolation, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT, T_ForbiddenPattern } from './preview-text-data.interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-preview_text_data',\n templateUrl: './preview-text-data.component.html',\n styleUrls: ['./preview-text-data.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent],\n})\nexport class LibsUiComponentsPreviewTextDataComponent implements OnInit, AfterViewInit {\n // ==========================================================================\n // PRIVATE PROPERTIES\n // ==========================================================================\n\n private editorViewInstance?: EditorView;\n private readonly wrapCompartment = new Compartment();\n private readonly languageCompartment = new Compartment();\n private readonly lineNumberCompartment = new Compartment();\n private readonly linterCompartment = new Compartment();\n private readonly completionsCompartment = new Compartment();\n private readonly forbiddenCompartment = new Compartment();\n\n private readonly contentStateNoWrap = signal('');\n\n /** Cache để tránh load lại language đã load */\n private readonly languageCache = new Map<string, Extension>();\n\n /** Flag để tránh update editor khi đang khởi tạo */\n private isInitialized = false;\n\n // ==========================================================================\n // INJECTED SERVICES\n // ==========================================================================\n\n private readonly notificationService = inject(LibsUiNotificationService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ==========================================================================\n // PROTECTED SIGNALS\n // ==========================================================================\n\n protected readonly isWrap = signal<boolean>(true);\n protected readonly configLoadDataIsHttpConfig = signal<IListConfigItem>(httpRequestConfigGetOptionsLang());\n protected readonly labelLang = computed(() => optionsLangData.find((item) => item.id === this.langSelected())?.label);\n protected readonly acceptChangeLang = computed(() => !(this.langSelected() && this.langsAccept()?.length === 1 && this.langsAccept()?.includes(this.langSelected())));\n\n // ==========================================================================\n // INPUTS\n // ==========================================================================\n\n readonly content = input<string, string | undefined>('', {\n transform: (value?: string) => value ?? '',\n });\n\n readonly langSelected = model.required<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>();\n readonly langsAccept = input<Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT> | undefined>();\n readonly langsChangeLabel = input<ILanguageOptions | undefined>();\n\n readonly editable = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly hiddenAction = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n /** Số dòng tối thiểu: nếu content ít dòng hơn sẽ tự bù dòng trống (xử lý 1 lần khi khởi tạo editor). Bỏ trống = không bù. */\n readonly minLines = input<number | undefined>();\n /** Số dòng tối đa: vượt quá editor sẽ giới hạn chiều cao và xuất hiện vùng cuộn (xử lý 1 lần khi khởi tạo editor). Bỏ trống = không giới hạn. */\n readonly maxLines = input<number | undefined>();\n /**\n * Element container bên ngoài để editor tự tính chiều cao theo `min-height`/`max-height` (CSS) của nó.\n * Khi truyền, editor đọc min/max-height của container, trừ phần header/toolbar phía trên, rồi snap\n * chiều cao vùng cuộn về đúng bội số dòng (không cắt nửa dòng) + bật scroll khi vượt max.\n * CẤM cấu hình đồng thời với `minLines`/`maxLines` (sẽ throw lỗi) — container tự quản lý min/max.\n */\n readonly containerElement = input<HTMLElement | undefined>();\n /** z-index cho popover dropdown chọn ngôn ngữ. */\n readonly zIndexPopover = input<number | undefined>();\n\n readonly lintIgnorePatterns = input<Array<string>, Array<string> | undefined>(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {\n transform: (value?: Array<string>) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],\n });\n\n /**\n * Danh sách đối tượng/biến gợi ý khi gõ — giống IntelliSense trong IDE.\n * Hỗ trợ dot-notation: định nghĩa `properties` để gợi ý sau dấu `.`\n * @example\n * [completions]=\"[{ label: 'user', properties: [{ label: 'name', detail: 'string' }] }]\"\n */\n readonly completions = input<IPreviewTextDataCompletionItem[], IPreviewTextDataCompletionItem[] | undefined>([], {\n transform: (value?: IPreviewTextDataCompletionItem[]) => value ?? [],\n });\n\n /**\n * Danh sách pattern cấm — chuỗi literal hoặc RegExp.\n * Khi phát hiện vi phạm: highlight đỏ tại đúng vị trí + chặn paste + emit `(outViolations)`.\n * Dùng `DEFAULT_SECURITY_PATTERNS` để áp dụng bộ quy tắc bảo mật mặc định cho low-code.\n * @example\n * [forbiddenPatterns]=\"defaultSecurityPatterns\"\n * [forbiddenPatterns]=\"[/eval\\s*\\(/, 'localStorage']\"\n */\n readonly forbiddenPatterns = input<T_ForbiddenPattern[], T_ForbiddenPattern[] | undefined>([], {\n transform: (value?: T_ForbiddenPattern[]) => value ?? [],\n });\n\n readonly background = input<string, string | undefined>('#f8f9fa', {\n transform: (value?: string) => value ?? '#f8f9fa',\n });\n\n // ==========================================================================\n // OUTPUTS\n // ==========================================================================\n\n readonly outChange = output<IPreviewTextDataChange>();\n readonly syntaxErrors = output<Diagnostic[]>();\n readonly outViolations = output<IPreviewTextDataViolation[]>();\n\n // ==========================================================================\n // VIEW CHILDREN\n // ==========================================================================\n\n private readonly containerPreview = viewChild.required<ElementRef<HTMLDivElement>>('containerPreview');\n\n // ==========================================================================\n // CONSTRUCTOR - Setup effects\n // ==========================================================================\n\n constructor() {\n // Effect để sync content từ input vào editor\n effect(() => {\n const newContent = this.content();\n if (this.isInitialized && this.editorViewInstance) {\n const currentContent = this.editorViewInstance.state.doc.toString();\n if (newContent !== currentContent) {\n this.editorViewInstance.dispatch({\n changes: {\n from: 0,\n to: currentContent.length,\n insert: newContent,\n },\n });\n }\n }\n });\n\n // Effect để cập nhật custom completions khi input thay đổi\n effect(() => {\n const items = this.completions();\n if (!this.isInitialized || !this.editorViewInstance) return;\n this.editorViewInstance.dispatch({\n effects: this.completionsCompartment.reconfigure(items.length ? buildCompletionExtension(items) : []),\n });\n });\n\n // Effect để cập nhật forbidden patterns khi input thay đổi\n effect(() => {\n const patterns = this.forbiddenPatterns();\n if (!this.isInitialized || !this.editorViewInstance) return;\n this.editorViewInstance.dispatch({\n effects: this.forbiddenCompartment.reconfigure(patterns.length ? buildForbiddenExtension(patterns, (violations) => this.outViolations.emit(violations)) : []),\n });\n });\n\n // Cleanup khi component bị destroy\n this.destroyRef.onDestroy(() => {\n this.editorViewInstance?.destroy();\n this.languageCache.clear();\n });\n }\n\n // ==========================================================================\n // LIFECYCLE HOOKS\n // ==========================================================================\n\n ngOnInit(): void {\n if (this.langsAccept()?.length) {\n this.configLoadDataIsHttpConfig.set(httpRequestConfigGetOptionsLang(this.langsAccept(), this.langsChangeLabel()));\n }\n }\n\n async ngAfterViewInit(): Promise<void> {\n await this.initializeEditor();\n this.isInitialized = true;\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Editor initialization\n // ==========================================================================\n\n /**\n * Khởi tạo editor với các extensions cơ bản\n * Language được load async để tối ưu bundle size\n */\n private async initializeEditor(): Promise<void> {\n const languageExtension = await this.loadLanguageExtension(this.langSelected());\n const linterExtension = await this.loadLinterExtension(this.langSelected());\n\n this.editorViewInstance = new EditorView({\n doc: applyMinLines(this.content(), this.minLines()),\n parent: this.containerPreview().nativeElement,\n extensions: this.createExtensions(languageExtension, linterExtension),\n });\n applyMaxHeight(this.editorViewInstance, { minLines: this.minLines(), maxLines: this.maxLines(), container: this.containerElement() });\n }\n\n /**\n * Tạo danh sách extensions cho editor\n */\n private createExtensions(languageExtension: Extension, linterExtension: Extension): Extension[] {\n const initialCompletions = this.completions();\n const initialPatterns = this.forbiddenPatterns();\n return [\n basicSetup,\n this.languageCompartment.of(languageExtension),\n this.linterCompartment.of(linterExtension),\n // Compartment cho custom completions — Prec.highest để override basicSetup's autocompletion\n Prec.highest(this.completionsCompartment.of(initialCompletions.length ? buildCompletionExtension(initialCompletions) : [])),\n this.forbiddenCompartment.of(initialPatterns.length ? buildForbiddenExtension(initialPatterns, (violations) => this.outViolations.emit(violations)) : []),\n this.createLightTheme(),\n EditorView.editable.of(this.editable()),\n this.wrapCompartment.of(EditorView.lineWrapping),\n this.lineNumberCompartment.of(lineNumbers()),\n lintGutter(),\n this.createBracketTheme(),\n this.createUpdateListener(),\n ];\n }\n\n /**\n * Load language extension với caching\n * Mỗi language chỉ được load 1 lần\n */\n private async loadLanguageExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n\n const cached = this.languageCache.get(lowerLang);\n if (cached) {\n return cached;\n }\n const registryItem = languageRegistry[lowerLang];\n const extension = registryItem ? await registryItem.loader() : await createDefaultLanguage();\n\n this.languageCache.set(lowerLang, extension);\n return extension;\n }\n\n /**\n * Load linter extension nếu có\n */\n private async loadLinterExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n const registryItem = languageRegistry[lowerLang];\n\n if (registryItem?.linter) {\n return registryItem.linter(this);\n }\n\n return linter(() => []);\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Theme configuration\n // ==========================================================================\n\n private createLightTheme(): Extension {\n return EditorView.theme({\n '&': { backgroundColor: this.background(), color: '#333' },\n '.cm-content': { caretColor: '#111' },\n '.cm-activeLine': { backgroundColor: '#f0f0f0' },\n });\n }\n\n private createBracketTheme(): Extension {\n return EditorView.theme({\n '.cm-matchingBracket': {\n backgroundColor: 'rgba(100, 200, 255, 0.15)',\n border: '1px solid rgba(100, 200, 255, 0.4)',\n borderRadius: '3px',\n transition: 'all 0.2s ease',\n },\n '.cm-nonmatchingBracket': {\n backgroundColor: 'rgba(255, 100, 100, 0.15)',\n border: '1px solid rgba(255, 100, 100, 0.3)',\n borderRadius: '3px',\n },\n });\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Update listener\n // ==========================================================================\n\n private createUpdateListener(): Extension {\n return EditorView.updateListener.of((update: ViewUpdate) => {\n if (update.docChanged && this.editable()) {\n const newValue = update.state.doc.toString();\n this.outChange.emit({\n content: newValue,\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'content',\n });\n }\n });\n }\n\n // ==========================================================================\n // PUBLIC METHODS - Linter factories (được gọi từ registry)\n // ==========================================================================\n\n\n /** JavaScript/TypeScript linter — pipeline trong `linters/js-linter.ts` (babel + trailing-dot + thiếu `;` + biến chưa khai báo). */\n createJsLinter(): Extension {\n return linter(async (view) => {\n const diagnostics = await computeJsDiagnostics(view.state.doc, view.state.doc.toString(), new Set(this.completions().map((item) => item.label)));\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** JSON linter — logic trong `linters/json-linter.ts`. */\n createJsonLinter(): Extension {\n return linter((view) => {\n const diagnostics = computeJsonDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** SQL linter — logic trong `linters/sql-linter.ts`. */\n createSqlLinter(): Extension {\n return linter((view) => {\n const diagnostics = computeSqlDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** Python linter — logic trong `linters/python-linter.ts`. */\n createPythonLinter(): Extension {\n return linter((view) => {\n const diagnostics = computePythonDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n // ==========================================================================\n // PROTECTED METHODS - Event handlers\n // ==========================================================================\n\n protected handlerCopy(): void {\n navigator.clipboard.writeText(this.content() || '');\n this.notificationService.showCompTypeTextInfo('Sao chép thành công');\n }\n\n protected handlerLineWrap(): void {\n // Lấy nội dung mới nhất từ editor sau khi đã xóa newlines\n const currentContent = this.editorViewInstance?.state.doc.toString() || '';\n if (this.isWrap()) {\n this.contentStateNoWrap.set(currentContent);\n }\n const updatedContent = this.isWrap() && currentContent ? currentContent.replace(/\\n/g, ' ') : this.contentStateNoWrap();\n this.isWrap.update((val) => !val);\n\n if (currentContent !== updatedContent) {\n this.editorViewInstance?.dispatch({\n changes: { from: 0, to: currentContent.length, insert: updatedContent },\n });\n }\n\n // Batch cả 2 dispatch thành 1 để tối ưu performance\n this.editorViewInstance?.dispatch({\n effects: [this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []), this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [])],\n });\n }\n\n protected async handlerSelectKey(data?: IEmitSelectKey): Promise<void> {\n if (!data?.key) {\n return;\n }\n\n const newLang = data.key as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT;\n this.langSelected.set(newLang);\n\n // Load language và linter mới\n const [languageExtension, linterExtension] = await Promise.all([this.loadLanguageExtension(newLang), this.loadLinterExtension(newLang)]);\n\n // Reconfigure thay vì tạo mới state để giữ lại document content\n this.editorViewInstance?.dispatch({\n effects: [this.languageCompartment.reconfigure(languageExtension), this.linterCompartment.reconfigure(linterExtension)],\n });\n\n this.outChange.emit({\n content: this.content(),\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'language',\n });\n }\n}\n","<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [zIndex]=\"zIndexPopover()\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-preview-text-data.mjs","sources":["../../../../../libs-ui/components/preview-text-data/src/preview-text-data.define.ts","../../../../../libs-ui/components/preview-text-data/src/linters/linter-shared.ts","../../../../../libs-ui/components/preview-text-data/src/linters/js-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/json-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/sql-linter.ts","../../../../../libs-ui/components/preview-text-data/src/linters/python-linter.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-completions.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-forbidden.ts","../../../../../libs-ui/components/preview-text-data/src/editor/editor-height.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.html","../../../../../libs-ui/components/preview-text-data/src/libs-ui-components-preview-text-data.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Extension } from '@codemirror/state';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { UtilsHttpParamsRequest } from '@libs-ui/utils';\nimport { LibsUiComponentsPreviewTextDataComponent } from './preview-text-data.component';\nimport { ILanguageOptions, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT, T_ForbiddenPattern } from './preview-text-data.interfaces';\n\n/**\n * Danh sách các ngôn ngữ được hỗ trợ\n * Sử dụng const array để tránh tạo mới mỗi lần truy cập\n */\nexport const optionsLangData: Array<ILanguageOptions> = [\n { id: 'text', label: 'Plain Text' },\n { id: 'javascript', label: 'JavaScript/TypeScript' },\n { id: 'html', label: 'HTML' },\n { id: 'css', label: 'CSS/SCSS/SASS' },\n { id: 'markdown', label: 'Markdown' },\n { id: 'json', label: 'JSON' },\n { id: 'sql', label: 'SQL' },\n { id: 'xml', label: 'XML' },\n { id: 'yaml', label: 'YAML' },\n { id: 'python', label: 'Python' },\n { id: 'java', label: 'Java' },\n { id: 'cpp', label: 'C/C++' },\n { id: 'php', label: 'PHP' },\n { id: 'go', label: 'Go' },\n] as const;\n\nexport const httpRequestConfigGetOptionsLang = (langsAccept?: Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>, langsChangeLabel?: ILanguageOptions): IListConfigItem => {\n const langs = [...optionsLangData].filter((item) => !langsAccept?.length || (langsAccept as string[]).includes(item.id));\n\n langs.forEach((item) => ({\n id: item.id,\n label: langsChangeLabel?.label || item.label,\n }));\n\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(langs),\n functionName: 'list',\n argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],\n }),\n configTemplateText: signal({\n fieldKey: 'id',\n notUseVirtualScroll: true,\n }),\n };\n};\n\ntype T_LanguageLoader = () => Promise<Extension>;\ntype T_LinterLoader = (component: LibsUiComponentsPreviewTextDataComponent) => Promise<Extension>;\ninterface I_LanguageRegistryItem {\n loader: T_LanguageLoader;\n linter?: T_LinterLoader;\n}\n\nexport const languageRegistry: Record<string, I_LanguageRegistryItem> = {\n javascript: {\n loader: async () => {\n const { javascript } = await import('@codemirror/lang-javascript');\n return javascript({ jsx: true, typescript: true });\n },\n linter: async (component) => component.createJsLinter(),\n },\n html: {\n loader: async () => {\n const { html } = await import('@codemirror/lang-html');\n return html();\n },\n },\n css: {\n loader: async () => {\n const { css } = await import('@codemirror/lang-css');\n return css();\n },\n },\n markdown: {\n loader: async () => {\n const { markdown } = await import('@codemirror/lang-markdown');\n return markdown();\n },\n },\n json: {\n loader: async () => {\n const { json } = await import('@codemirror/lang-json');\n return json();\n },\n linter: async (component) => component.createJsonLinter(),\n },\n sql: {\n loader: async () => {\n const { sql } = await import('@codemirror/lang-sql');\n return sql();\n },\n linter: async (component) => component.createSqlLinter(),\n },\n xml: {\n loader: async () => {\n const { xml } = await import('@codemirror/lang-xml');\n return xml();\n },\n },\n yaml: {\n loader: async () => {\n const { yaml } = await import('@codemirror/lang-yaml');\n return yaml();\n },\n },\n python: {\n loader: async () => {\n const { python } = await import('@codemirror/lang-python');\n return python();\n },\n linter: async (component) => component.createPythonLinter(),\n },\n java: {\n loader: async () => {\n const { java } = await import('@codemirror/lang-java');\n return java();\n },\n },\n cpp: {\n loader: async () => {\n const { cpp } = await import('@codemirror/lang-cpp');\n return cpp();\n },\n },\n php: {\n loader: async () => {\n const { php } = await import('@codemirror/lang-php');\n return php();\n },\n },\n go: {\n loader: async () => {\n const { go } = await import('@codemirror/lang-go');\n return go();\n },\n },\n};\n\n/**\n * Bộ pattern bảo mật mặc định cho low-code platform.\n * Chặn các API nguy hiểm: eval, network calls, storage, DOM injection...\n */\nexport const DEFAULT_SECURITY_PATTERNS: T_ForbiddenPattern[] = [\n /eval\\s*\\(/i,\n /new\\s+Function\\s*\\(/i,\n /document\\.cookie/i,\n /localStorage/i,\n /sessionStorage/i,\n /fetch\\s*\\(/i,\n /new\\s+XMLHttpRequest/i,\n /require\\s*\\(/i,\n /import\\s*\\(/i,\n /process\\.env/i,\n /<script/i,\n /document\\.write\\s*\\(/i,\n /window\\.location\\s*=/i,\n];\n\n/**\n * Các key của AST node KHÔNG phải node con (metadata vị trí, comment...) — bỏ qua khi duyệt.\n */\nexport const astSkipKeys = new Set<string>(['loc', 'start', 'end', 'range', 'leadingComments', 'trailingComments', 'innerComments', 'extra', 'comments', 'tokens']);\n\n/**\n * Các key chứa annotation kiểu TypeScript → con của nó nằm trong \"type context\" (không phải biến giá trị).\n */\nexport const astTypeKeys = new Set<string>(['typeAnnotation', 'returnType', 'typeParameters', 'typeArguments', 'superTypeParameters']);\n\n/**\n * Các node `TS*` mang GIÁ TRỊ (không phải type thuần) → con của chúng vẫn là biến giá trị bình thường.\n */\nexport const tsValueNodes = new Set<string>(['TSEnumDeclaration', 'TSEnumMember', 'TSModuleDeclaration', 'TSModuleBlock', 'TSAsExpression', 'TSNonNullExpression', 'TSParameterProperty', 'TSExportAssignment', 'TSImportEqualsDeclaration', 'TSExternalModuleReference', 'TSSatisfiesExpression']);\n\n/**\n * Tạo default language extension cho plain text\n * Sử dụng khi ngôn ngữ không được hỗ trợ\n */\nexport const createDefaultLanguage = async (): Promise<Extension> => {\n const { StreamLanguage } = await import('@codemirror/language');\n return StreamLanguage.define({\n token(stream) {\n stream.skipToEnd();\n return null;\n },\n });\n};\n","import { Text } from '@codemirror/state';\n\n/** Lấy token (chuỗi không khoảng trắng) liền trước vị trí `pos` trong document. Dùng chung cho JS/SQL/Python. */\nexport const getTokenBefore = (doc: Text, pos: number): string => {\n const start = Math.max(0, pos - 30);\n const text = doc.sliceString(start, pos);\n const match = /(\\S+)\\s*$/.exec(text);\n return match?.[1] ?? '';\n};\n","import { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { get } from '@libs-ui/utils';\nimport { astSkipKeys, astTypeKeys, tsValueNodes } from '../preview-text-data.define';\nimport { T_AstNode } from '../preview-text-data.type';\nimport { getTokenBefore } from './linter-shared';\n\ntype T_BabelError = { loc?: { line: number; column: number }; message: string };\ntype T_AstReference = { name: string; line: number; column: number };\n\n// Cache module-level (chia sẻ giữa các instance editor) — đều immutable, lazy-load 1 lần.\nlet babelParserModule: typeof import('@babel/parser') | undefined;\nlet knownGlobalsSet: Set<string> | undefined;\n\n/** Lazy-load + cache module @babel/parser (chỉ tải lần đầu khi lint JS/TS). */\nconst getBabelParser = async (): Promise<typeof import('@babel/parser')> => {\n if (!babelParserModule) {\n babelParserModule = await import('@babel/parser');\n }\n return babelParserModule;\n};\n\n/** Lazy-load + cache tập biến toàn cục JS/DOM hợp lệ từ package `globals` (JSON thuần, browser-safe). */\nconst getKnownGlobals = async (): Promise<Set<string>> => {\n if (!knownGlobalsSet) {\n const globalsModule = (await import('globals')) as unknown as { default?: Record<string, Record<string, boolean>> };\n const globalsData = (globalsModule.default ?? globalsModule) as Record<string, Record<string, boolean>>;\n knownGlobalsSet = new Set<string>([...Object.keys(globalsData['builtin'] ?? {}), ...Object.keys(globalsData['browser'] ?? {}), ...Object.keys(globalsData['es2021'] ?? {})]);\n }\n return knownGlobalsSet;\n};\n\n/**\n * Parse code, trả về vừa danh sách lỗi cú pháp vừa AST (nếu parse sạch).\n * `errorRecovery` gom nhiều lỗi vào `result.errors`; lỗi nặng vẫn `throw` → bắt thêm ở catch.\n */\nexport const parseJs = (parser: typeof import('@babel/parser'), code: string): { errors: T_BabelError[]; ast?: object } => {\n try {\n const result = parser.parse(code, {\n sourceType: 'module',\n errorRecovery: true,\n plugins: ['typescript', 'jsx'],\n allowReturnOutsideFunction: true,\n allowAwaitOutsideFunction: true,\n allowImportExportEverywhere: true,\n allowSuperOutsideMethod: true,\n allowNewTargetOutsideFunction: true,\n allowUndeclaredExports: true,\n });\n return { errors: result.errors as T_BabelError[], ast: result };\n } catch (error: unknown) {\n const loc = get(error, 'loc') as { line: number; column: number } | undefined;\n const message = (get(error, 'message') as string) || 'JavaScript syntax error';\n return { errors: [{ loc, message }] };\n }\n};\n\n/** Giữ cho test/back-compat: chỉ lấy danh sách lỗi cú pháp. */\nexport const collectBabelErrors = (parser: typeof import('@babel/parser'), code: string): T_BabelError[] => parseJs(parser, code).errors;\n\n/**\n * Quét text từng dòng, flag dấu \".\" cuối dòng (incomplete property access) tại ĐÚNG vị trí dấu chấm.\n * Thu thập `taintedLines` (dòng có trailing dot) + `dotPositions` (offset dấu chấm để vá khi parse).\n */\nexport const collectTrailingDotDiagnostics = (doc: Text, diagnostics: Diagnostic[], taintedLines: Set<number>, dotPositions: number[]): void => {\n for (let lineNumber = 1; lineNumber <= doc.lines; lineNumber++) {\n const line = doc.line(lineNumber);\n const trimmed = line.text.trimEnd();\n const match = /(\\w+)\\.\\s*$/.exec(trimmed);\n if (!match) {\n continue;\n }\n taintedLines.add(lineNumber);\n const dotPosition = line.from + trimmed.lastIndexOf('.');\n dotPositions.push(dotPosition);\n diagnostics.push({ from: dotPosition, to: dotPosition + 1, severity: 'error', message: `Incomplete property access on \"${match[1]}\"` });\n }\n};\n\n/** Thay các ký tự tại `positions` bằng space, giữ nguyên độ dài chuỗi (để offset không đổi). */\nconst replaceCharsWithSpace = (code: string, positions: number[]): string => {\n if (!positions.length) {\n return code;\n }\n const chars = code.split('');\n for (const position of positions) {\n if (position >= 0 && position < chars.length) {\n chars[position] = ' ';\n }\n }\n return chars.join('');\n};\n\n/** VariableDeclaration ở `for(let i=0;...)` / `for..in` / `for..of` KHÔNG cần `;` cuối. */\nconst requiresSemicolon = (nodeType: string, parentType: string, keyInParent: string): boolean => {\n if (nodeType === 'VariableDeclaration') {\n if (parentType === 'ForStatement' && keyInParent === 'init') return false;\n if ((parentType === 'ForInStatement' || parentType === 'ForOfStatement') && keyInParent === 'left') return false;\n }\n return true;\n};\n\n/**\n * Rule custom \"require semicolon\": câu lệnh (const/let/return/expression...) không kết thúc bằng `;` → báo lỗi.\n * Dùng vị trí `node.end` của AST babel; bỏ qua dòng tainted (trailing dot) để không chồng lỗi.\n */\nexport const collectMissingSemicolonDiagnostics = (ast: object, code: string, diagnostics: Diagnostic[], taintedLines: Set<number>): void => {\n const semiNodes = new Set(['ExpressionStatement', 'VariableDeclaration', 'ReturnStatement', 'ThrowStatement', 'BreakStatement', 'ContinueStatement', 'DoWhileStatement', 'DebuggerStatement']);\n const seen = new Set<number>();\n const lineOf = (offset: number) => code.slice(0, offset).split('\\n').length;\n const walk = (node: unknown, parentType: string, keyInParent: string): void => {\n if (Array.isArray(node)) {\n for (const item of node) walk(item, parentType, keyInParent);\n return;\n }\n if (!node || typeof node !== 'object') return;\n const current = node as T_AstNode;\n if (typeof current.type !== 'string') return;\n\n if (semiNodes.has(current.type) && requiresSemicolon(current.type, parentType, keyInParent) && typeof current.end === 'number') {\n const end = Math.min(current.end, code.length);\n if (end > 0 && code.charAt(end - 1) !== ';' && !seen.has(end) && !taintedLines.has(lineOf(end - 1))) {\n seen.add(end);\n diagnostics.push({ from: end - 1, to: end, severity: 'error', message: 'Missing semicolon' });\n }\n }\n\n for (const childKey of Object.keys(current)) {\n if (astSkipKeys.has(childKey)) continue;\n walk(current[childKey], current.type, childKey);\n }\n };\n walk((ast as { program?: unknown }).program ?? ast, '', '');\n};\n\n/** Chuẩn hóa message: thân thiện cho trailing dot + heuristic kiểu cũ cho \"Unexpected token\"; bỏ hậu tố \"(line:col)\". */\nexport const buildJsErrorMessage = (doc: Text, from: number, rawMessage: string): string => {\n const charBefore = from > 0 ? doc.sliceString(from - 1, from) : '';\n if (charBefore === '.') {\n const owner = getTokenBefore(doc, from).replace(/\\.$/, '');\n return owner ? `Incomplete property access on \"${owner}\"` : 'Incomplete property access';\n }\n\n const cleaned = rawMessage.replace(/\\s*\\(\\d+:\\d+\\)\\s*$/, '').trim();\n if (/missing semicolon/i.test(cleaned)) {\n return 'Unexpected token — missing operator or separator between expressions';\n }\n if (/^unexpected token$/i.test(cleaned)) {\n const prevToken = getTokenBefore(doc, from);\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n if (prevToken.endsWith('[')) return 'Missing closing \"]\"';\n if (/^function$/i.test(prevToken)) return 'Expected function name or \"(\"';\n if (/^return$/i.test(prevToken)) return 'Invalid expression after \"return\"';\n if (/^=>$/.test(prevToken)) return 'Expected function body after \"=>\"';\n if (/^const$|^let$|^var$/i.test(prevToken)) return 'Expected variable name';\n }\n return `JavaScript syntax error: ${cleaned}`;\n};\n\n/** Lấy tên binding từ pattern (Identifier, destructuring object/array, default, rest). */\nconst collectPatternNames = (node: T_AstNode | null | undefined, declared: Set<string>): void => {\n if (!node || typeof node.type !== 'string') return;\n switch (node.type) {\n case 'Identifier':\n if (node.name) declared.add(node.name);\n return;\n case 'ObjectPattern':\n if (node.properties) for (const property of node.properties) collectPatternNames(property.type === 'RestElement' ? property.argument : property.value, declared);\n return;\n case 'ArrayPattern':\n if (node.elements) for (const element of node.elements) collectPatternNames(element, declared);\n return;\n case 'AssignmentPattern':\n collectPatternNames(node.left, declared);\n return;\n case 'RestElement':\n collectPatternNames(node.argument, declared);\n return;\n case 'TSParameterProperty':\n collectPatternNames(node.parameter, declared);\n return;\n default:\n return;\n }\n};\n\n/** Thu thập tên binding (biến/hàm/class/param/import/enum...) từ 1 node vào tập `declared`. */\nconst collectBindingNames = (node: T_AstNode, declared: Set<string>): void => {\n switch (node.type) {\n case 'VariableDeclarator':\n collectPatternNames(node.id, declared);\n return;\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'ClassDeclaration':\n case 'ClassExpression':\n if (node.id?.name) declared.add(node.id.name);\n if (node.params) for (const param of node.params) collectPatternNames(param, declared);\n return;\n case 'ArrowFunctionExpression':\n if (node.params) for (const param of node.params) collectPatternNames(param, declared);\n return;\n case 'CatchClause':\n collectPatternNames(node.param, declared);\n return;\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n if (node.local?.name) declared.add(node.local.name);\n return;\n case 'TSEnumDeclaration':\n case 'TSModuleDeclaration':\n if (node.id?.name) declared.add(node.id.name);\n return;\n default:\n return;\n }\n};\n\n/** Xác định 1 Identifier có phải tham chiếu giá trị không (loại property access, key object, declaration id, label...). */\nconst isReferenceIdentifier = (parent: T_AstNode | null, keyInParent: string): boolean => {\n if (!parent) return true;\n const parentType = parent.type;\n if ((parentType === 'MemberExpression' || parentType === 'OptionalMemberExpression') && keyInParent === 'property' && !parent.computed) return false;\n if ((parentType === 'ObjectProperty' || parentType === 'ObjectMethod' || parentType === 'ClassMethod' || parentType === 'ClassProperty' || parentType === 'ClassPrivateProperty' || parentType === 'PropertyDefinition') && keyInParent === 'key' && !parent.computed) return false;\n if (keyInParent === 'label') return false;\n if (parentType === 'TSQualifiedName' && keyInParent === 'right') return false;\n if (parentType === 'VariableDeclarator' && keyInParent === 'id') return false;\n if ((parentType === 'FunctionDeclaration' || parentType === 'FunctionExpression' || parentType === 'ClassDeclaration' || parentType === 'ClassExpression') && keyInParent === 'id') return false;\n if (parentType === 'ImportSpecifier' || parentType === 'ImportDefaultSpecifier' || parentType === 'ImportNamespaceSpecifier' || parentType === 'ExportSpecifier') return false;\n if (parentType === 'MetaProperty') return false;\n if (parentType === 'TSEnumMember' && keyInParent === 'id') return false;\n return true;\n};\n\n/** Duyệt đệ quy AST: gom binding name vào `declared`, gom identifier tham chiếu vào `references`. */\nconst walkAstNode = (node: unknown, parent: T_AstNode | null, keyInParent: string, inType: boolean, declared: Set<string>, references: T_AstReference[]): void => {\n if (Array.isArray(node)) {\n for (const item of node) walkAstNode(item, parent, keyInParent, inType, declared, references);\n return;\n }\n if (!node || typeof node !== 'object') return;\n const current = node as T_AstNode;\n if (typeof current.type !== 'string') return;\n\n collectBindingNames(current, declared);\n\n if (current.type === 'Identifier' && !inType && isReferenceIdentifier(parent, keyInParent)) {\n const start = current.loc?.start;\n if (current.name && start) references.push({ name: current.name, line: start.line, column: start.column });\n }\n\n const opensType = inType || (current.type.startsWith('TS') && !tsValueNodes.has(current.type));\n for (const childKey of Object.keys(current)) {\n if (astSkipKeys.has(childKey)) continue;\n const child = current[childKey];\n const childOpensType = typeof child === 'object' && child !== null && typeof (child as T_AstNode).type === 'string' && (child as T_AstNode).type.startsWith('TS') && !tsValueNodes.has((child as T_AstNode).type);\n const childInType = opensType || astTypeKeys.has(childKey) || childOpensType;\n walkAstNode(child, current, childKey, childInType, declared, references);\n }\n};\n\n/**\n * Pass ngữ nghĩa: báo biến CHƯA KHAI BÁO. Tự duyệt AST (object thuần) — KHÔNG dùng `@babel/traverse`\n * (cần `process` của Node → crash browser). Hợp lệ = binding trong code + global JS/DOM + `completionLabels`.\n */\nexport const collectUndeclaredIdentifiers = async (ast: object, doc: Text, completionLabels: Set<string>, taintedLines: Set<number> = new Set()): Promise<Diagnostic[]> => {\n const globalsSet = await getKnownGlobals();\n const declared = new Set<string>();\n const references: T_AstReference[] = [];\n\n walkAstNode(ast as T_AstNode, null, '', false, declared, references);\n\n const diagnostics: Diagnostic[] = [];\n const seen = new Set<string>();\n for (const reference of references) {\n const { name, line: startLine, column: startColumn } = reference;\n if (declared.has(name) || globalsSet.has(name) || completionLabels.has(name)) continue;\n if (taintedLines.has(startLine)) continue;\n\n const dedupeKey = `${startLine}:${startColumn}:${name}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n\n const line = doc.line(Math.min(Math.max(startLine, 1), doc.lines));\n const from = Math.min(line.from + Math.max(startColumn, 0), doc.length);\n const to = Math.min(from + name.length, doc.length);\n diagnostics.push({ from, to: Math.max(from + 1, to), severity: 'error', message: `\"${name}\" is not defined` });\n }\n return diagnostics;\n};\n\n/**\n * Toàn bộ pipeline validate JS/TS:\n * - Pass 1: trailing dot (text) — flag đúng vị trí dấu `.` cuối dòng + đánh dấu dòng tainted.\n * - Pass 2: lỗi cú pháp babel — bỏ lỗi trên dòng tainted (cascading).\n * - Pass 3: rule cần AST (thiếu `;`, biến chưa khai báo). Trailing dot được \"vá\" (`.`→space) để babel\n * vẫn parse được phần còn lại → rule vẫn chạy cho các dòng KHÁC.\n */\nexport const computeJsDiagnostics = async (doc: Text, code: string, completionLabels: Set<string>): Promise<Diagnostic[]> => {\n const diagnostics: Diagnostic[] = [];\n if (code.trim() === '') {\n return diagnostics;\n }\n\n const taintedLines = new Set<number>();\n const dotPositions: number[] = [];\n collectTrailingDotDiagnostics(doc, diagnostics, taintedLines, dotPositions);\n\n const parseCode = replaceCharsWithSpace(code, dotPositions);\n const parser = await getBabelParser();\n const { errors, ast } = parseJs(parser, parseCode);\n const seen = new Set<string>();\n for (const error of errors) {\n const location = error.loc;\n if (!location) continue;\n const lineNumber = Math.min(Math.max(location.line, 1), doc.lines);\n if (taintedLines.has(lineNumber)) continue;\n const line = doc.line(lineNumber);\n const errorPos = Math.min(line.from + Math.max(location.column, 0), doc.length);\n const to = Math.min(errorPos + 1, doc.length);\n const from = errorPos >= to && errorPos > 0 ? errorPos - 1 : errorPos;\n const message = buildJsErrorMessage(doc, errorPos, error.message);\n const dedupeKey = `${from}:${message}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n diagnostics.push({ from, to: Math.max(from + 1, to), severity: 'error', message });\n }\n\n if (errors.length === 0 && ast) {\n collectMissingSemicolonDiagnostics(ast, code, diagnostics, taintedLines);\n diagnostics.push(...(await collectUndeclaredIdentifiers(ast, doc, completionLabels, taintedLines)));\n }\n\n return diagnostics;\n};\n","import { Diagnostic } from '@codemirror/lint';\nimport { EditorView } from '@codemirror/view';\nimport { get } from '@libs-ui/utils';\n\n/** Validate JSON bằng `JSON.parse`. Lỗi → 1 diagnostic phủ toàn bộ nội dung. */\nexport const computeJsonDiagnostics = (view: EditorView): Diagnostic[] => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n try {\n JSON.parse(text);\n } catch (error: unknown) {\n diagnostics.push({ from: 0, to: text.length, severity: 'error', message: get(error, 'message', '') });\n }\n return diagnostics;\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { getTokenBefore } from './linter-shared';\n\nconst buildSqlErrorMessage = (doc: Text, node: SyntaxNodeRef): string => {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to);\n return `SQL syntax error near \"${text}\"`;\n }\n const prevToken = getTokenBefore(doc, node.from);\n if (!prevToken) return 'SQL syntax error at beginning of statement';\n if (/FROM$/i.test(prevToken)) return 'Expected table name after FROM';\n if (/SELECT$/i.test(prevToken)) return 'Expected column list after SELECT';\n if (/WHERE$/i.test(prevToken)) return 'Expected condition after WHERE';\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n return `Unexpected end of SQL after \"${prevToken}\"`;\n};\n\n/** Phát hiện lỗi cú pháp SQL từ error node của syntaxTree (Lezer). */\nexport const computeSqlDiagnostics = (view: EditorView): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n diagnostics.push({ from: Math.max(0, node.from - 1), to: node.from, severity: 'error', message: buildSqlErrorMessage(doc, node) });\n },\n });\n return diagnostics;\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic } from '@codemirror/lint';\nimport { Text } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { getTokenBefore } from './linter-shared';\n\nconst buildPythonErrorMessage = (doc: Text, node: SyntaxNodeRef): string => {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to).trim();\n return `Python syntax error${text ? ` near \"${text}\"` : ''}`;\n }\n const prevToken = getTokenBefore(doc, node.from);\n if (!prevToken) return 'Python syntax error';\n if (/^def$/i.test(prevToken)) return 'Expected function name after \"def\"';\n if (/^class$/i.test(prevToken)) return 'Expected class name after \"class\"';\n if (/^return$/i.test(prevToken)) return 'Invalid expression after \"return\"';\n if (/^import$/i.test(prevToken)) return 'Expected module name after \"import\"';\n if (/^from$/i.test(prevToken)) return 'Expected module name after \"from\"';\n if (/^if$/i.test(prevToken)) return 'Expected condition after \"if\"';\n if (/^elif$/i.test(prevToken)) return 'Expected condition after \"elif\"';\n if (/^while$/i.test(prevToken)) return 'Expected condition after \"while\"';\n if (/^for$/i.test(prevToken)) return 'Expected variable after \"for\"';\n if (prevToken.endsWith('.')) return `Incomplete attribute access on \"${prevToken.slice(0, -1)}\"`;\n if (prevToken.endsWith('(')) return 'Missing closing \")\"';\n if (prevToken.endsWith('[')) return 'Missing closing \"]\"';\n return `Python syntax error near \"${prevToken}\"`;\n};\n\n/** Phát hiện lỗi cú pháp Python từ error node của syntaxTree (Lezer) — cùng approach SQL. */\nexport const computePythonDiagnostics = (view: EditorView): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n const from = Math.max(0, node.from - 1);\n const to = node.from === node.to ? node.from + 1 : node.to;\n diagnostics.push({ from, to: Math.min(to, doc.length), severity: 'error', message: buildPythonErrorMessage(doc, node) });\n },\n });\n return diagnostics;\n};\n","import { autocompletion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport { Extension } from '@codemirror/state';\nimport { IPreviewTextDataCompletionItem } from '../preview-text-data.interfaces';\n\n/**\n * Tạo extension autocomplete từ danh sách `items`:\n * 1. Gõ `obj.` → gợi ý properties của obj (dot-notation).\n * 2. Gõ ký tự → gợi ý tên biến/object top-level.\n */\nexport const buildCompletionExtension = (items: IPreviewTextDataCompletionItem[]): Extension => {\n const completionSource = (context: CompletionContext): CompletionResult | null => {\n // Cho phép path nhiều cấp (a.b.c.) — [\\w.]+ bắt trọn chuỗi trước con trỏ.\n const dotMatch = context.matchBefore(/[\\w.]+\\.\\w*/);\n if (dotMatch) {\n const segments = dotMatch.text.split('.');\n const partial = segments[segments.length - 1]; // phần đang gõ dở sau dấu '.' cuối\n const pathSegments = segments.slice(0, -1); // các cấp đã hoàn tất\n\n let current = items.find((item) => item.label === pathSegments[0]);\n for (let level = 1; level < pathSegments.length && current; level++) {\n current = current.properties?.find((property) => property.label === pathSegments[level]);\n }\n if (current?.properties?.length) {\n return {\n from: context.pos - partial.length,\n options: current.properties.map((p) => ({ label: p.label, type: p.type ?? 'property', detail: p.detail ?? '', info: p.info ?? '' })),\n };\n }\n }\n const word = context.matchBefore(/\\w*/);\n if (!word || (word.from === word.to && !context.explicit)) return null;\n\n return {\n from: word.from,\n options: items.map((item) => ({ label: item.label, type: item.type ?? 'variable', detail: item.detail ?? '', info: item.info ?? '' })),\n };\n };\n\n return autocompletion({ override: [completionSource] });\n};\n","import { syntaxTree } from '@codemirror/language';\nimport { Diagnostic, linter } from '@codemirror/lint';\nimport { EditorState, Extension, Transaction } from '@codemirror/state';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { IPreviewTextDataViolation, T_ForbiddenPattern } from '../preview-text-data.interfaces';\n\nconst escapeRegex = (str: string): string => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst toGlobalRegex = (pattern: T_ForbiddenPattern): RegExp => {\n if (pattern instanceof RegExp) {\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`;\n return new RegExp(pattern.source, flags);\n }\n return new RegExp(escapeRegex(pattern), 'gi');\n};\n\n/**\n * Extension bảo mật gồm 2 layer:\n * 1. Linter: highlight đỏ tại đúng vị trí match (bỏ qua match trong comment) + gọi `emitViolations`.\n * 2. Transaction filter: chặn paste nếu nội dung paste chứa pattern cấm.\n */\nexport const buildForbiddenExtension = (patterns: T_ForbiddenPattern[], emitViolations: (violations: IPreviewTextDataViolation[]) => void): Extension => {\n const forbiddenLinter = linter((view) => {\n const diagnostics: Diagnostic[] = [];\n const violations: IPreviewTextDataViolation[] = [];\n const text = view.state.doc.toString();\n\n const commentRanges: { from: number; to: number }[] = [];\n syntaxTree(view.state).iterate({\n enter: (node: SyntaxNodeRef) => {\n if (node.type.name.toLowerCase().includes('comment')) {\n commentRanges.push({ from: node.from, to: node.to });\n }\n },\n });\n const isInComment = (from: number, to: number): boolean => commentRanges.some((r) => from >= r.from && to <= r.to);\n\n for (const pattern of patterns) {\n const re = toGlobalRegex(pattern);\n re.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const from = match.index;\n const to = from + match[0].length;\n if (isInComment(from, to)) continue;\n const line = view.state.doc.lineAt(from).number;\n const patternLabel = pattern instanceof RegExp ? pattern.source : pattern;\n diagnostics.push({ from, to, severity: 'error', message: `Mã bị cấm: \"${match[0]}\" — vi phạm chính sách bảo mật` });\n violations.push({ from, to, line, pattern: patternLabel, matched: match[0] });\n }\n }\n\n emitViolations(violations);\n return diagnostics;\n });\n\n const pasteFilter = EditorState.transactionFilter.of((tr: Transaction) => {\n if (!tr.docChanged) return tr;\n if (!tr.annotation(Transaction.userEvent)?.startsWith('input.paste')) return tr;\n const newText = tr.newDoc.toString();\n for (const pattern of patterns) {\n const re = toGlobalRegex(pattern);\n re.lastIndex = 0;\n if (re.test(newText)) return [];\n }\n return tr;\n });\n\n return [forbiddenLinter, pasteFilter];\n};\n","import { EditorView } from '@codemirror/view';\n\n/** Parse giá trị CSS px → number. Trả về undefined nếu không phải px hợp lệ (vd `none`, `0`). */\nexport const parsePx = (raw: string): number | undefined => {\n if (!raw || !raw.endsWith('px')) {\n return undefined;\n }\n const value = parseFloat(raw);\n return Number.isFinite(value) && value > 0 ? value : undefined;\n};\n\n/** Bù dòng trống cho đủ `minLines` (xử lý 1 lần khi khởi tạo). Đủ rồi giữ nguyên, không cắt bớt. */\nexport const applyMinLines = (content: string, minLines?: number): string => {\n const value = content ?? '';\n if (!minLines || minLines <= 0) {\n return value;\n }\n const currentLines = value === '' ? 1 : value.split('\\n').length;\n if (currentLines >= minLines) {\n return value;\n }\n return value + '\\n'.repeat(minLines - currentLines);\n};\n\n/**\n * Tính min/max-height vùng cuộn theo CSS của container ngoài, snap về bội số dòng.\n * Trừ offset phần header/toolbar (giữa đỉnh container và đỉnh vùng cuộn) để vừa khít container.\n */\nexport const applyContainerHeight = (view: EditorView, container: HTMLElement): void => {\n const style = getComputedStyle(container);\n const minPx = parsePx(style.minHeight);\n const maxPx = parsePx(style.maxHeight);\n if (minPx === undefined && maxPx === undefined) {\n return;\n }\n view.requestMeasure({\n read: (measureView) => {\n const line = measureView.contentDOM.querySelector('.cm-line');\n const lineHeight = (line ? line.getBoundingClientRect().height : measureView.defaultLineHeight) || 20;\n const offsetTop = Math.max(measureView.scrollDOM.getBoundingClientRect().top - container.getBoundingClientRect().top, 0);\n const toLines = (px: number) => Math.max(1, Math.floor((px - offsetTop - 8) / lineHeight));\n return { lineHeight, minLines: minPx === undefined ? undefined : toLines(minPx), maxLines: maxPx === undefined ? undefined : toLines(maxPx) };\n },\n write: ({ lineHeight, minLines, maxLines }, writeView) => {\n if (maxLines !== undefined) {\n writeView.scrollDOM.style.maxHeight = `${maxLines * lineHeight + 8}px`;\n writeView.scrollDOM.style.overflowY = 'auto';\n }\n // min-height: bù dòng trống vào content (hiện đủ line-number 1..N), giống cơ chế minLines.\n if (minLines !== undefined) {\n const currentLines = writeView.state.doc.lines;\n if (currentLines < minLines) {\n queueMicrotask(() => writeView.dispatch({ changes: { from: writeView.state.doc.length, insert: '\\n'.repeat(minLines - currentLines) } }));\n }\n }\n },\n });\n};\n\n/**\n * Giới hạn chiều cao editor (xử lý 1 lần). 2 chế độ loại trừ nhau:\n * - `maxLines`: cap theo số dòng truyền vào.\n * - `container`: tự tính số dòng theo `min-height`/`max-height` (CSS) của container, snap bội số dòng.\n * Cấu hình đồng thời `container` + `minLines`/`maxLines` → throw.\n */\nexport const applyMaxHeight = (view: EditorView | undefined, options: { minLines?: number; maxLines?: number; container?: HTMLElement }): void => {\n const { minLines, maxLines, container } = options;\n if (container && (minLines || maxLines)) {\n throw new Error('[preview-text-data] CẤM cấu hình [containerElement] cùng [minLines]/[maxLines]. Container tự quản lý min/max height.');\n }\n if (!view) {\n return;\n }\n if (container) {\n applyContainerHeight(view, container);\n return;\n }\n if (!maxLines || maxLines <= 0) {\n return;\n }\n view.requestMeasure({\n read: (measureView) => {\n const line = measureView.contentDOM.querySelector('.cm-line');\n return (line ? line.getBoundingClientRect().height : measureView.defaultLineHeight) || 20;\n },\n write: (lineHeight, writeView) => {\n writeView.scrollDOM.style.maxHeight = `${maxLines * lineHeight + 8}px`;\n writeView.scrollDOM.style.overflowY = 'auto';\n },\n });\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, OnInit, output, signal, viewChild } from '@angular/core';\nimport { Diagnostic, linter, lintGutter } from '@codemirror/lint';\nimport { Compartment, Extension, Prec } from '@codemirror/state';\nimport { EditorView, lineNumbers, ViewUpdate } from '@codemirror/view';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { basicSetup } from 'codemirror6';\nimport { createDefaultLanguage, httpRequestConfigGetOptionsLang, languageRegistry, optionsLangData } from './preview-text-data.define';\nimport { computeJsDiagnostics } from './linters/js-linter';\nimport { computeJsonDiagnostics } from './linters/json-linter';\nimport { computeSqlDiagnostics } from './linters/sql-linter';\nimport { computePythonDiagnostics } from './linters/python-linter';\nimport { buildCompletionExtension } from './editor/editor-completions';\nimport { buildForbiddenExtension } from './editor/editor-forbidden';\nimport { applyMaxHeight, applyMinLines } from './editor/editor-height';\nimport { ILanguageOptions, IPreviewTextDataChange, IPreviewTextDataCompletionItem, IPreviewTextDataViolation, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT, T_ForbiddenPattern } from './preview-text-data.interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-preview_text_data',\n templateUrl: './preview-text-data.component.html',\n styleUrls: ['./preview-text-data.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent],\n})\nexport class LibsUiComponentsPreviewTextDataComponent implements OnInit, AfterViewInit {\n // ==========================================================================\n // PRIVATE PROPERTIES\n // ==========================================================================\n\n private editorViewInstance?: EditorView;\n private readonly wrapCompartment = new Compartment();\n private readonly languageCompartment = new Compartment();\n private readonly lineNumberCompartment = new Compartment();\n private readonly linterCompartment = new Compartment();\n private readonly completionsCompartment = new Compartment();\n private readonly forbiddenCompartment = new Compartment();\n\n private readonly contentStateNoWrap = signal('');\n\n /** Cache để tránh load lại language đã load */\n private readonly languageCache = new Map<string, Extension>();\n\n /** Flag để tránh update editor khi đang khởi tạo */\n private isInitialized = false;\n\n // ==========================================================================\n // INJECTED SERVICES\n // ==========================================================================\n\n private readonly notificationService = inject(LibsUiNotificationService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ==========================================================================\n // PROTECTED SIGNALS\n // ==========================================================================\n\n protected readonly isWrap = signal<boolean>(true);\n protected readonly configLoadDataIsHttpConfig = signal<IListConfigItem>(httpRequestConfigGetOptionsLang());\n protected readonly labelLang = computed(() => optionsLangData.find((item) => item.id === this.langSelected())?.label);\n protected readonly acceptChangeLang = computed(() => !(this.langSelected() && this.langsAccept()?.length === 1 && this.langsAccept()?.includes(this.langSelected())));\n\n // ==========================================================================\n // INPUTS\n // ==========================================================================\n\n readonly content = input<string, string | undefined>('', {\n transform: (value?: string) => value ?? '',\n });\n\n readonly langSelected = model.required<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>();\n readonly langsAccept = input<Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT> | undefined>();\n readonly langsChangeLabel = input<ILanguageOptions | undefined>();\n\n readonly editable = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly hiddenAction = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n /** Số dòng tối thiểu: nếu content ít dòng hơn sẽ tự bù dòng trống (xử lý 1 lần khi khởi tạo editor). Bỏ trống = không bù. */\n readonly minLines = input<number | undefined>();\n /** Số dòng tối đa: vượt quá editor sẽ giới hạn chiều cao và xuất hiện vùng cuộn (xử lý 1 lần khi khởi tạo editor). Bỏ trống = không giới hạn. */\n readonly maxLines = input<number | undefined>();\n /**\n * Element container bên ngoài để editor tự tính chiều cao theo `min-height`/`max-height` (CSS) của nó.\n * Khi truyền, editor đọc min/max-height của container, trừ phần header/toolbar phía trên, rồi snap\n * chiều cao vùng cuộn về đúng bội số dòng (không cắt nửa dòng) + bật scroll khi vượt max.\n * CẤM cấu hình đồng thời với `minLines`/`maxLines` (sẽ throw lỗi) — container tự quản lý min/max.\n */\n readonly containerElement = input<HTMLElement | undefined>();\n /** z-index cho popover dropdown chọn ngôn ngữ. */\n readonly zIndexPopover = input<number | undefined>();\n\n readonly lintIgnorePatterns = input<Array<string>, Array<string> | undefined>(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {\n transform: (value?: Array<string>) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],\n });\n\n /**\n * Danh sách đối tượng/biến gợi ý khi gõ — giống IntelliSense trong IDE.\n * Hỗ trợ dot-notation: định nghĩa `properties` để gợi ý sau dấu `.`\n * @example\n * [completions]=\"[{ label: 'user', properties: [{ label: 'name', detail: 'string' }] }]\"\n */\n readonly completions = input<IPreviewTextDataCompletionItem[], IPreviewTextDataCompletionItem[] | undefined>([], {\n transform: (value?: IPreviewTextDataCompletionItem[]) => value ?? [],\n });\n\n /**\n * Danh sách pattern cấm — chuỗi literal hoặc RegExp.\n * Khi phát hiện vi phạm: highlight đỏ tại đúng vị trí + chặn paste + emit `(outViolations)`.\n * Dùng `DEFAULT_SECURITY_PATTERNS` để áp dụng bộ quy tắc bảo mật mặc định cho low-code.\n * @example\n * [forbiddenPatterns]=\"defaultSecurityPatterns\"\n * [forbiddenPatterns]=\"[/eval\\s*\\(/, 'localStorage']\"\n */\n readonly forbiddenPatterns = input<T_ForbiddenPattern[], T_ForbiddenPattern[] | undefined>([], {\n transform: (value?: T_ForbiddenPattern[]) => value ?? [],\n });\n\n readonly background = input<string, string | undefined>('#f8f9fa', {\n transform: (value?: string) => value ?? '#f8f9fa',\n });\n\n // ==========================================================================\n // OUTPUTS\n // ==========================================================================\n\n readonly outChange = output<IPreviewTextDataChange>();\n readonly syntaxErrors = output<Diagnostic[]>();\n readonly outViolations = output<IPreviewTextDataViolation[]>();\n\n // ==========================================================================\n // VIEW CHILDREN\n // ==========================================================================\n\n private readonly containerPreview = viewChild.required<ElementRef<HTMLDivElement>>('containerPreview');\n\n // ==========================================================================\n // CONSTRUCTOR - Setup effects\n // ==========================================================================\n\n constructor() {\n // Effect để sync content từ input vào editor\n effect(() => {\n const newContent = this.content();\n if (this.isInitialized && this.editorViewInstance) {\n const currentContent = this.editorViewInstance.state.doc.toString();\n if (newContent !== currentContent) {\n this.editorViewInstance.dispatch({\n changes: {\n from: 0,\n to: currentContent.length,\n insert: newContent,\n },\n });\n }\n }\n });\n\n // Effect để cập nhật custom completions khi input thay đổi\n effect(() => {\n const items = this.completions();\n if (!this.isInitialized || !this.editorViewInstance) return;\n this.editorViewInstance.dispatch({\n effects: this.completionsCompartment.reconfigure(items.length ? buildCompletionExtension(items) : []),\n });\n });\n\n // Effect để cập nhật forbidden patterns khi input thay đổi\n effect(() => {\n const patterns = this.forbiddenPatterns();\n if (!this.isInitialized || !this.editorViewInstance) return;\n this.editorViewInstance.dispatch({\n effects: this.forbiddenCompartment.reconfigure(patterns.length ? buildForbiddenExtension(patterns, (violations) => this.outViolations.emit(violations)) : []),\n });\n });\n\n // Cleanup khi component bị destroy\n this.destroyRef.onDestroy(() => {\n this.editorViewInstance?.destroy();\n this.languageCache.clear();\n });\n }\n\n // ==========================================================================\n // LIFECYCLE HOOKS\n // ==========================================================================\n\n ngOnInit(): void {\n if (this.langsAccept()?.length) {\n this.configLoadDataIsHttpConfig.set(httpRequestConfigGetOptionsLang(this.langsAccept(), this.langsChangeLabel()));\n }\n }\n\n async ngAfterViewInit(): Promise<void> {\n await this.initializeEditor();\n this.isInitialized = true;\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Editor initialization\n // ==========================================================================\n\n /**\n * Khởi tạo editor với các extensions cơ bản\n * Language được load async để tối ưu bundle size\n */\n private async initializeEditor(): Promise<void> {\n const languageExtension = await this.loadLanguageExtension(this.langSelected());\n const linterExtension = await this.loadLinterExtension(this.langSelected());\n\n this.editorViewInstance = new EditorView({\n doc: applyMinLines(this.content(), this.minLines()),\n parent: this.containerPreview().nativeElement,\n extensions: this.createExtensions(languageExtension, linterExtension),\n });\n applyMaxHeight(this.editorViewInstance, { minLines: this.minLines(), maxLines: this.maxLines(), container: this.containerElement() });\n }\n\n /**\n * Tạo danh sách extensions cho editor\n */\n private createExtensions(languageExtension: Extension, linterExtension: Extension): Extension[] {\n const initialCompletions = this.completions();\n const initialPatterns = this.forbiddenPatterns();\n return [\n basicSetup,\n this.languageCompartment.of(languageExtension),\n this.linterCompartment.of(linterExtension),\n // Compartment cho custom completions — Prec.highest để override basicSetup's autocompletion\n Prec.highest(this.completionsCompartment.of(initialCompletions.length ? buildCompletionExtension(initialCompletions) : [])),\n this.forbiddenCompartment.of(initialPatterns.length ? buildForbiddenExtension(initialPatterns, (violations) => this.outViolations.emit(violations)) : []),\n this.createLightTheme(),\n EditorView.editable.of(this.editable()),\n this.wrapCompartment.of(EditorView.lineWrapping),\n this.lineNumberCompartment.of(lineNumbers()),\n lintGutter(),\n this.createBracketTheme(),\n this.createUpdateListener(),\n ];\n }\n\n /**\n * Load language extension với caching\n * Mỗi language chỉ được load 1 lần\n */\n private async loadLanguageExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n\n const cached = this.languageCache.get(lowerLang);\n if (cached) {\n return cached;\n }\n const registryItem = languageRegistry[lowerLang];\n const extension = registryItem ? await registryItem.loader() : await createDefaultLanguage();\n\n this.languageCache.set(lowerLang, extension);\n return extension;\n }\n\n /**\n * Load linter extension nếu có\n */\n private async loadLinterExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n const registryItem = languageRegistry[lowerLang];\n\n if (registryItem?.linter) {\n return registryItem.linter(this);\n }\n\n return linter(() => []);\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Theme configuration\n // ==========================================================================\n\n private createLightTheme(): Extension {\n return EditorView.theme({\n '&': { backgroundColor: this.background(), color: '#333' },\n '.cm-content': { caretColor: '#111' },\n '.cm-activeLine': { backgroundColor: '#f0f0f0' },\n });\n }\n\n private createBracketTheme(): Extension {\n return EditorView.theme({\n '.cm-matchingBracket': {\n backgroundColor: 'rgba(100, 200, 255, 0.15)',\n border: '1px solid rgba(100, 200, 255, 0.4)',\n borderRadius: '3px',\n transition: 'all 0.2s ease',\n },\n '.cm-nonmatchingBracket': {\n backgroundColor: 'rgba(255, 100, 100, 0.15)',\n border: '1px solid rgba(255, 100, 100, 0.3)',\n borderRadius: '3px',\n },\n });\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Update listener\n // ==========================================================================\n\n private createUpdateListener(): Extension {\n return EditorView.updateListener.of((update: ViewUpdate) => {\n if (update.docChanged && this.editable()) {\n const newValue = update.state.doc.toString();\n this.outChange.emit({\n content: newValue,\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'content',\n });\n }\n });\n }\n\n // ==========================================================================\n // PUBLIC METHODS - Linter factories (được gọi từ registry)\n // ==========================================================================\n\n\n /** JavaScript/TypeScript linter — pipeline trong `linters/js-linter.ts` (babel + trailing-dot + thiếu `;` + biến chưa khai báo). */\n createJsLinter(): Extension {\n return linter(async (view) => {\n const diagnostics = await computeJsDiagnostics(view.state.doc, view.state.doc.toString(), new Set(this.completions().map((item) => item.label)));\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** JSON linter — logic trong `linters/json-linter.ts`. */\n createJsonLinter(): Extension {\n return linter((view) => {\n const diagnostics = computeJsonDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** SQL linter — logic trong `linters/sql-linter.ts`. */\n createSqlLinter(): Extension {\n return linter((view) => {\n const diagnostics = computeSqlDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /** Python linter — logic trong `linters/python-linter.ts`. */\n createPythonLinter(): Extension {\n return linter((view) => {\n const diagnostics = computePythonDiagnostics(view);\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n // ==========================================================================\n // PROTECTED METHODS - Event handlers\n // ==========================================================================\n\n protected handlerCopy(): void {\n navigator.clipboard.writeText(this.content() || '');\n this.notificationService.showCompTypeTextInfo('Sao chép thành công');\n }\n\n protected handlerLineWrap(): void {\n // Lấy nội dung mới nhất từ editor sau khi đã xóa newlines\n const currentContent = this.editorViewInstance?.state.doc.toString() || '';\n if (this.isWrap()) {\n this.contentStateNoWrap.set(currentContent);\n }\n const updatedContent = this.isWrap() && currentContent ? currentContent.replace(/\\n/g, ' ') : this.contentStateNoWrap();\n this.isWrap.update((val) => !val);\n\n if (currentContent !== updatedContent) {\n this.editorViewInstance?.dispatch({\n changes: { from: 0, to: currentContent.length, insert: updatedContent },\n });\n }\n\n // Batch cả 2 dispatch thành 1 để tối ưu performance\n this.editorViewInstance?.dispatch({\n effects: [this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []), this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [])],\n });\n }\n\n protected async handlerSelectKey(data?: IEmitSelectKey): Promise<void> {\n if (!data?.key) {\n return;\n }\n\n const newLang = data.key as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT;\n this.langSelected.set(newLang);\n\n // Load language và linter mới\n const [languageExtension, linterExtension] = await Promise.all([this.loadLanguageExtension(newLang), this.loadLinterExtension(newLang)]);\n\n // Reconfigure thay vì tạo mới state để giữ lại document content\n this.editorViewInstance?.dispatch({\n effects: [this.languageCompartment.reconfigure(languageExtension), this.linterCompartment.reconfigure(linterExtension)],\n });\n\n this.outChange.emit({\n content: this.content(),\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'language',\n });\n }\n}\n","<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [zIndex]=\"zIndexPopover()\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-preview-text-data",
|
|
3
|
-
"version": "0.2.357-
|
|
3
|
+
"version": "0.2.357-6",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
6
|
"@babel/parser": ">=7.0.0",
|
|
7
7
|
"globals": ">=13.0.0",
|
|
8
|
-
"@libs-ui/components-buttons-button": "0.2.357-
|
|
9
|
-
"@libs-ui/components-dropdown": "0.2.357-
|
|
10
|
-
"@libs-ui/services-notification": "0.2.357-
|
|
11
|
-
"@libs-ui/utils": "0.2.357-
|
|
8
|
+
"@libs-ui/components-buttons-button": "0.2.357-6",
|
|
9
|
+
"@libs-ui/components-dropdown": "0.2.357-6",
|
|
10
|
+
"@libs-ui/services-notification": "0.2.357-6",
|
|
11
|
+
"@libs-ui/utils": "0.2.357-6",
|
|
12
12
|
"@codemirror/autocomplete": "6.20.2",
|
|
13
13
|
"@codemirror/language": "6.12.3",
|
|
14
14
|
"@codemirror/lint": "6.9.1",
|
|
15
15
|
"@codemirror/state": "6.6.0",
|
|
16
16
|
"@codemirror/view": "6.38.6",
|
|
17
17
|
"@lezer/common": "1.5.2",
|
|
18
|
-
"@libs-ui/components-list": "0.2.357-
|
|
18
|
+
"@libs-ui/components-list": "0.2.357-6",
|
|
19
19
|
"codemirror6": "npm:codemirror@6.0.2",
|
|
20
|
-
"@libs-ui/services-http-request": "0.2.357-
|
|
20
|
+
"@libs-ui/services-http-request": "0.2.357-6",
|
|
21
21
|
"@codemirror/lang-javascript": "6.2.4",
|
|
22
22
|
"@codemirror/lang-html": "6.4.11",
|
|
23
23
|
"@codemirror/lang-css": "6.3.1",
|