@cosui/genui-toolkit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +43 -0
  2. package/bin/genui +2 -0
  3. package/dist/auth.d.ts +3 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +132 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/check/artifact.d.ts +16 -0
  8. package/dist/check/artifact.d.ts.map +1 -0
  9. package/dist/check/artifact.js +209 -0
  10. package/dist/check/artifact.js.map +1 -0
  11. package/dist/check/checker.d.ts +6 -0
  12. package/dist/check/checker.d.ts.map +1 -0
  13. package/dist/check/checker.js +79 -0
  14. package/dist/check/checker.js.map +1 -0
  15. package/dist/check/cli.d.ts +5 -0
  16. package/dist/check/cli.d.ts.map +1 -0
  17. package/dist/check/cli.js +110 -0
  18. package/dist/check/cli.js.map +1 -0
  19. package/dist/check/rules/artifact.d.ts +3 -0
  20. package/dist/check/rules/artifact.d.ts.map +1 -0
  21. package/dist/check/rules/artifact.js +96 -0
  22. package/dist/check/rules/artifact.js.map +1 -0
  23. package/dist/check/rules/common.d.ts +16 -0
  24. package/dist/check/rules/common.d.ts.map +1 -0
  25. package/dist/check/rules/common.js +60 -0
  26. package/dist/check/rules/common.js.map +1 -0
  27. package/dist/check/rules/file.d.ts +3 -0
  28. package/dist/check/rules/file.d.ts.map +1 -0
  29. package/dist/check/rules/file.js +157 -0
  30. package/dist/check/rules/file.js.map +1 -0
  31. package/dist/check/rules/html.d.ts +3 -0
  32. package/dist/check/rules/html.d.ts.map +1 -0
  33. package/dist/check/rules/html.js +414 -0
  34. package/dist/check/rules/html.js.map +1 -0
  35. package/dist/check/rules/index.d.ts +6 -0
  36. package/dist/check/rules/index.d.ts.map +1 -0
  37. package/dist/check/rules/index.js +59 -0
  38. package/dist/check/rules/index.js.map +1 -0
  39. package/dist/check/rules/javascript.d.ts +3 -0
  40. package/dist/check/rules/javascript.d.ts.map +1 -0
  41. package/dist/check/rules/javascript.js +541 -0
  42. package/dist/check/rules/javascript.js.map +1 -0
  43. package/dist/check/rules/svg.d.ts +8 -0
  44. package/dist/check/rules/svg.d.ts.map +1 -0
  45. package/dist/check/rules/svg.js +100 -0
  46. package/dist/check/rules/svg.js.map +1 -0
  47. package/dist/check/types.d.ts +50 -0
  48. package/dist/check/types.d.ts.map +1 -0
  49. package/dist/check/types.js +3 -0
  50. package/dist/check/types.js.map +1 -0
  51. package/dist/cli.d.ts +3 -0
  52. package/dist/cli.d.ts.map +1 -0
  53. package/dist/cli.js +62 -0
  54. package/dist/cli.js.map +1 -0
  55. package/dist/config.d.ts +8 -0
  56. package/dist/config.d.ts.map +1 -0
  57. package/dist/config.js +64 -0
  58. package/dist/config.js.map +1 -0
  59. package/dist/env.d.ts +2 -0
  60. package/dist/env.d.ts.map +1 -0
  61. package/dist/env.js +25 -0
  62. package/dist/env.js.map +1 -0
  63. package/dist/output.d.ts +8 -0
  64. package/dist/output.d.ts.map +1 -0
  65. package/dist/output.js +42 -0
  66. package/dist/output.js.map +1 -0
  67. package/dist/preview.d.ts +21 -0
  68. package/dist/preview.d.ts.map +1 -0
  69. package/dist/preview.js +295 -0
  70. package/dist/preview.js.map +1 -0
  71. package/dist/project.d.ts +5 -0
  72. package/dist/project.d.ts.map +1 -0
  73. package/dist/project.js +22 -0
  74. package/dist/project.js.map +1 -0
  75. package/dist/push.d.ts +2 -0
  76. package/dist/push.d.ts.map +1 -0
  77. package/dist/push.js +322 -0
  78. package/dist/push.js.map +1 -0
  79. package/dist/remote.d.ts +15 -0
  80. package/dist/remote.d.ts.map +1 -0
  81. package/dist/remote.js +73 -0
  82. package/dist/remote.js.map +1 -0
  83. package/package.json +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/check/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '../types';
2
+ export declare const artifactRule: Rule;
3
+ //# sourceMappingURL=artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../../src/check/rules/artifact.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAW,IAAI,EAAC,MAAM,UAAU,CAAC;AA6F7C,eAAO,MAAM,YAAY,EAAE,IAY1B,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.artifactRule = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const artifact_1 = require("../artifact");
9
+ const common_1 = require("./common");
10
+ const ruleId = 'artifact';
11
+ const ALLOWED_FILE = new Set(['.html', '.zip']);
12
+ function artifactName(value) {
13
+ if (!/^https?:\/\//i.test(value)) {
14
+ return node_path_1.default.basename(value);
15
+ }
16
+ const name = node_path_1.default.posix.basename(new URL(value).pathname);
17
+ return /\.(html?|zip)$/i.test(name) ? name : 'index.html';
18
+ }
19
+ function artifactExtension(value) {
20
+ return /^https?:\/\//i.test(value)
21
+ ? node_path_1.default.extname(artifactName(value)).toLowerCase()
22
+ : node_path_1.default.extname(value).toLowerCase();
23
+ }
24
+ /**
25
+ * 1、只允许 HTML 或 ZIP
26
+ * 2、要求扩展名与内容一致
27
+ * 3、ZIP 根目录必须有且只有一个 index.html,且内部文件类型受支持
28
+ */
29
+ function checkFormat(artifact) {
30
+ const name = artifactName(artifact.path);
31
+ const extension = artifactExtension(artifact.path);
32
+ if (!ALLOWED_FILE.has(extension)) {
33
+ return [{
34
+ severity: 'error',
35
+ file: name,
36
+ message: '文件格式不符合要求,请使用 .html 文件或 .zip 文件',
37
+ }];
38
+ }
39
+ if (artifact.type === 'html') {
40
+ return [];
41
+ }
42
+ const files = [...new Set([
43
+ ...artifact.files.keys(),
44
+ ...artifact.zipEntries
45
+ .map(entry => entry.fileName)
46
+ .filter(file => !file.endsWith('/')),
47
+ ])];
48
+ const problems = [];
49
+ const hasRootIndex = files.includes('index.html');
50
+ if (!hasRootIndex) {
51
+ problems.push({
52
+ severity: 'error',
53
+ file: name,
54
+ message: 'ZIP 根目录缺少 index.html,请将 index.html 放到 ZIP 根目录后重新压缩',
55
+ });
56
+ }
57
+ problems.push(...files.flatMap(file => {
58
+ const extension = node_path_1.default.posix.extname(file).toLowerCase();
59
+ if (artifact_1.ALLOWED_ARTIFACT_EXTENSIONS.has(extension) || (0, artifact_1.isMacOsMetadata)(file)) {
60
+ return [];
61
+ }
62
+ return [{
63
+ severity: 'error',
64
+ file,
65
+ message: `代码包中包含不支持的文件类型,请删除该文件或转换为支持的格式:${[...artifact_1.ALLOWED_ARTIFACT_EXTENSIONS].join(', ')}`,
66
+ }];
67
+ }));
68
+ return problems;
69
+ }
70
+ /**
71
+ * 产物总大小不超过限定上限,ZIP 按解压后各文件字节数之和计算
72
+ */
73
+ function checkSize(artifact, maxArtifactBytes) {
74
+ const size = artifact.type === 'html'
75
+ ? artifact.bytes.byteLength
76
+ : [...artifact.files.values()]
77
+ .reduce((total, file) => total + file.bytes.byteLength, 0);
78
+ if (size <= maxArtifactBytes) {
79
+ return [];
80
+ }
81
+ return [{
82
+ severity: 'error',
83
+ file: node_path_1.default.basename(artifact.path),
84
+ message: `代码包大小超过 ${(0, artifact_1.formatMegabytes)(maxArtifactBytes)},请压缩或删除不必要资源后重新提交`,
85
+ }];
86
+ }
87
+ exports.artifactRule = {
88
+ id: ruleId,
89
+ check({ artifact, options }) {
90
+ return [
91
+ ...(0, common_1.toDiagnostics)(ruleId, checkFormat(artifact)),
92
+ ...(0, common_1.toDiagnostics)(ruleId, checkSize(artifact, options?.maxArtifactBytes ?? artifact_1.DEFAULT_MAX_ARTIFACT_BYTES)),
93
+ ];
94
+ },
95
+ };
96
+ //# sourceMappingURL=artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/check/rules/artifact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ArtifactFile, Diagnostic } from '../types';
2
+ export type RuleProblem = Omit<Diagnostic, 'file' | 'ruleId'> & {
3
+ file: string;
4
+ };
5
+ /**
6
+ * 将规则检测出的问题列表转换为统一的诊断结果列表
7
+ *
8
+ * @param ruleId 规则标识,用于标记诊断结果的来源规则
9
+ * @return 转换后的诊断结果数组
10
+ */
11
+ export declare function toDiagnostics(ruleId: string, problems: readonly RuleProblem[]): Diagnostic[];
12
+ export declare function isInlineHandlerAttribute(name: string, tagName?: string): boolean;
13
+ export declare function toFile(file: ArtifactFile): File;
14
+ export declare function readFileBytes(file: File): Promise<Uint8Array>;
15
+ export declare function readUtf8(file: File): Promise<string>;
16
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/check/rules/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,UAAU,EACb,MAAM,UAAU,CAAC;AA+BlB,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC5D,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,UAAU,EAAE,CAE5F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAIhF;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAG/C;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAEnE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAG1D"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toDiagnostics = toDiagnostics;
4
+ exports.isInlineHandlerAttribute = isInlineHandlerAttribute;
5
+ exports.toFile = toFile;
6
+ exports.readFileBytes = readFileBytes;
7
+ exports.readUtf8 = readUtf8;
8
+ const INLINE_HANDLER_ATTRIBUTES = new Set([
9
+ 'onabort', 'onanimationcancel', 'onanimationend', 'onanimationiteration',
10
+ 'onanimationstart', 'onauxclick', 'onbeforeinput', 'onbeforematch', 'onbeforetoggle',
11
+ 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick',
12
+ 'onclose', 'oncontextlost', 'oncontextmenu', 'oncontextrestored', 'oncopy',
13
+ 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter',
14
+ 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied',
15
+ 'onended', 'onerror', 'onfocus', 'onfocusin', 'onfocusout', 'onformdata',
16
+ 'onfullscreenchange', 'onfullscreenerror', 'ongotpointercapture', 'oninput',
17
+ 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onloadeddata',
18
+ 'onloadedmetadata', 'onloadstart', 'onlostpointercapture', 'onmousedown',
19
+ 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover',
20
+ 'onmouseup', 'onpaste', 'onpause', 'onplay', 'onplaying', 'onpointercancel',
21
+ 'onpointerdown', 'onpointerenter', 'onpointerleave', 'onpointermove', 'onpointerout',
22
+ 'onpointerover', 'onpointerrawupdate', 'onpointerup', 'onprogress', 'onratechange',
23
+ 'onreset', 'onresize', 'onscroll', 'onscrollend', 'onsecuritypolicyviolation',
24
+ 'onseeked', 'onseeking', 'onselect', 'onselectionchange', 'onselectstart', 'onslotchange',
25
+ 'onstalled', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'ontouchcancel',
26
+ 'ontouchend', 'ontouchmove', 'ontouchstart', 'ontransitioncancel', 'ontransitionend',
27
+ 'ontransitionrun', 'ontransitionstart', 'onvolumechange', 'onwaiting', 'onwebkitanimationend',
28
+ 'onwebkitanimationiteration', 'onwebkitanimationstart', 'onwebkittransitionend', 'onwheel',
29
+ ]);
30
+ const WINDOW_HANDLER_ATTRIBUTES = new Set([
31
+ 'onafterprint', 'onbeforeprint', 'onbeforeunload', 'onhashchange', 'onlanguagechange',
32
+ 'onmessage', 'onmessageerror', 'onoffline', 'ononline', 'onpagehide', 'onpageshow',
33
+ 'onpopstate', 'onrejectionhandled', 'onstorage', 'onunhandledrejection', 'onunload',
34
+ ]);
35
+ /**
36
+ * 将规则检测出的问题列表转换为统一的诊断结果列表
37
+ *
38
+ * @param ruleId 规则标识,用于标记诊断结果的来源规则
39
+ * @return 转换后的诊断结果数组
40
+ */
41
+ function toDiagnostics(ruleId, problems) {
42
+ return problems.map(problem => ({ ...problem, ruleId }));
43
+ }
44
+ function isInlineHandlerAttribute(name, tagName) {
45
+ const normalized = name.toLowerCase();
46
+ return INLINE_HANDLER_ATTRIBUTES.has(normalized)
47
+ || (['body', 'frameset'].includes(tagName ?? '') && WINDOW_HANDLER_ATTRIBUTES.has(normalized));
48
+ }
49
+ function toFile(file) {
50
+ const bytes = new Uint8Array(file.bytes);
51
+ return new File([bytes.buffer], file.path);
52
+ }
53
+ async function readFileBytes(file) {
54
+ return new Uint8Array(await file.arrayBuffer());
55
+ }
56
+ async function readUtf8(file) {
57
+ const bytes = await readFileBytes(file);
58
+ return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
59
+ }
60
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/check/rules/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '../types';
2
+ export declare const fileRule: Rule;
3
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/check/rules/file.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAW,IAAI,EAAC,MAAM,UAAU,CAAC;AA4H7C,eAAO,MAAM,QAAQ,EAAE,IAWtB,CAAC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.fileRule = void 0;
40
+ const node_path_1 = __importDefault(require("node:path"));
41
+ const postcss_1 = __importDefault(require("postcss"));
42
+ const ts = __importStar(require("typescript"));
43
+ const common_1 = require("./common");
44
+ const ruleId = 'file';
45
+ function decode(file) {
46
+ return new TextDecoder('utf-8', { fatal: true }).decode(file.bytes);
47
+ }
48
+ /**
49
+ * 校验文件是否可解析
50
+ */
51
+ function checkParse(file) {
52
+ const extension = node_path_1.default.posix.extname(file.path).toLowerCase();
53
+ if (!['.css', '.html', '.js', '.json', '.svg'].includes(extension)) {
54
+ return [];
55
+ }
56
+ try {
57
+ const source = decode(file);
58
+ if (extension === '.css') {
59
+ postcss_1.default.parse(source, {
60
+ from: file.path,
61
+ });
62
+ }
63
+ else if (extension === '.json') {
64
+ JSON.parse(source);
65
+ }
66
+ else if (extension === '.js') {
67
+ const sourceFile = ts.createSourceFile(file.path, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
68
+ return (sourceFile.parseDiagnostics ?? []).map(diagnostic => {
69
+ const position = sourceFile.getLineAndCharacterOfPosition(diagnostic.start ?? 0);
70
+ return {
71
+ severity: 'error',
72
+ file: file.path,
73
+ line: position.line + 1,
74
+ column: position.character + 1,
75
+ message: 'JavaScript 语法错误,请修正后重新提交',
76
+ };
77
+ });
78
+ }
79
+ }
80
+ catch (error) {
81
+ const location = error instanceof postcss_1.default.CssSyntaxError && error.line
82
+ ? {
83
+ line: error.line,
84
+ column: error.column,
85
+ }
86
+ : undefined;
87
+ return [{
88
+ severity: 'error',
89
+ file: file.path,
90
+ message: '文件内容无法解析,请检查文件编码和语法后重新提交',
91
+ line: location?.line,
92
+ column: location?.column,
93
+ }];
94
+ }
95
+ return [];
96
+ }
97
+ /**
98
+ * ZIP 条目使用规范的产物内相对路径
99
+ */
100
+ function checkPath(artifact) {
101
+ return artifact.zipEntries.flatMap(entry => {
102
+ const entryPath = entry.fileName;
103
+ if (entryPath.includes('\0')
104
+ || entryPath.includes('\\')
105
+ || entryPath.startsWith('/')
106
+ || /^[A-Za-z]:/.test(entryPath)
107
+ || entryPath.split('/').includes('..')) {
108
+ return [{
109
+ severity: 'error',
110
+ file: entryPath,
111
+ message: 'ZIP 文件路径不符合要求,请将所有文件放在项目根目录下并使用相对路径,然后重新打包上传',
112
+ }];
113
+ }
114
+ return [];
115
+ });
116
+ }
117
+ /**
118
+ * ZIP 中不含软链接、设备文件、加密条目
119
+ */
120
+ function checkSpecialEntry(artifact) {
121
+ return artifact.zipEntries.flatMap(entry => {
122
+ const fileType = entry.versionMadeBy >>> 8 === 3
123
+ ? (entry.externalFileAttributes >>> 16) & 0xffff
124
+ : 0;
125
+ const isSymbolicLink = (fileType & 0xf000) === 0xa000;
126
+ const isFifo = (fileType & 0xf000) === 0x1000;
127
+ const isCharacterDevice = (fileType & 0xf000) === 0x2000;
128
+ const isBlockDevice = (fileType & 0xf000) === 0x6000;
129
+ const isSocket = (fileType & 0xf000) === 0xc000;
130
+ const isEncrypted = (entry.generalPurposeBitFlag & 0x1) !== 0;
131
+ if (isSymbolicLink
132
+ || isFifo
133
+ || isCharacterDevice
134
+ || isBlockDevice
135
+ || isSocket
136
+ || isEncrypted) {
137
+ return [{
138
+ severity: 'error',
139
+ file: entry.fileName,
140
+ message: 'ZIP 中不能包含软链接、设备文件或加密条目,请移除后重新打包',
141
+ }];
142
+ }
143
+ return [];
144
+ });
145
+ }
146
+ exports.fileRule = {
147
+ id: ruleId,
148
+ check({ artifact }) {
149
+ const files = [...artifact.files.values()];
150
+ return [
151
+ ...(0, common_1.toDiagnostics)(ruleId, files.flatMap(file => checkParse(file))),
152
+ ...(0, common_1.toDiagnostics)(ruleId, checkPath(artifact)),
153
+ ...(0, common_1.toDiagnostics)(ruleId, checkSpecialEntry(artifact)),
154
+ ];
155
+ },
156
+ };
157
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/check/rules/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '../types';
2
+ export declare const htmlRule: Rule;
3
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/check/rules/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAa,IAAI,EAAC,MAAM,UAAU,CAAC;AAic/C,eAAO,MAAM,QAAQ,EAAE,IAWtB,CAAC"}