@salesforce-ux/slds-linter 0.2.0-alpha.6 → 0.2.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 (68) hide show
  1. package/package.json +7 -3
  2. package/build/commands/emit.d.ts +0 -2
  3. package/build/commands/emit.js +0 -49
  4. package/build/commands/emit.js.map +0 -7
  5. package/build/commands/lint.d.ts +0 -2
  6. package/build/commands/lint.js +0 -56
  7. package/build/commands/lint.js.map +0 -7
  8. package/build/commands/report.d.ts +0 -2
  9. package/build/commands/report.js +0 -67
  10. package/build/commands/report.js.map +0 -7
  11. package/build/executor/__tests__/executor.test.js +0 -190
  12. package/build/executor/__tests__/executor.test.js.map +0 -7
  13. package/build/executor/index.d.ts +0 -20
  14. package/build/executor/index.js +0 -79
  15. package/build/executor/index.js.map +0 -7
  16. package/build/index.d.ts +0 -2
  17. package/build/index.js +0 -34
  18. package/build/index.js.map +0 -7
  19. package/build/services/__tests__/file-scanner.test.js +0 -48
  20. package/build/services/__tests__/file-scanner.test.js.map +0 -7
  21. package/build/services/artifact-processor.d.ts +0 -6
  22. package/build/services/artifact-processor.js +0 -38
  23. package/build/services/artifact-processor.js.map +0 -7
  24. package/build/services/batch-processor.d.ts +0 -29
  25. package/build/services/batch-processor.js +0 -85
  26. package/build/services/batch-processor.js.map +0 -7
  27. package/build/services/config.resolver.d.ts +0 -6
  28. package/build/services/config.resolver.js +0 -21
  29. package/build/services/config.resolver.js.map +0 -7
  30. package/build/services/file-patterns.d.ts +0 -3
  31. package/build/services/file-patterns.js +0 -22
  32. package/build/services/file-patterns.js.map +0 -7
  33. package/build/services/file-scanner.d.ts +0 -26
  34. package/build/services/file-scanner.js +0 -72
  35. package/build/services/file-scanner.js.map +0 -7
  36. package/build/services/lint-runner.d.ts +0 -17
  37. package/build/services/lint-runner.js +0 -70
  38. package/build/services/lint-runner.js.map +0 -7
  39. package/build/services/report-generator.d.ts +0 -43
  40. package/build/services/report-generator.js +0 -187
  41. package/build/services/report-generator.js.map +0 -7
  42. package/build/types/index.d.ts +0 -75
  43. package/build/types/index.js +0 -1
  44. package/build/types/index.js.map +0 -7
  45. package/build/utils/config-utils.d.ts +0 -33
  46. package/build/utils/config-utils.js +0 -69
  47. package/build/utils/config-utils.js.map +0 -7
  48. package/build/utils/editorLinkUtil.d.ts +0 -21
  49. package/build/utils/editorLinkUtil.js +0 -22
  50. package/build/utils/editorLinkUtil.js.map +0 -7
  51. package/build/utils/lintResultsUtil.d.ts +0 -21
  52. package/build/utils/lintResultsUtil.js +0 -71
  53. package/build/utils/lintResultsUtil.js.map +0 -7
  54. package/build/utils/logger.d.ts +0 -8
  55. package/build/utils/logger.js +0 -29
  56. package/build/utils/logger.js.map +0 -7
  57. package/build/utils/nodeVersionUtil.d.ts +0 -19
  58. package/build/utils/nodeVersionUtil.js +0 -43
  59. package/build/utils/nodeVersionUtil.js.map +0 -7
  60. package/build/workers/base.worker.d.ts +0 -15
  61. package/build/workers/base.worker.js +0 -45
  62. package/build/workers/base.worker.js.map +0 -7
  63. package/build/workers/eslint.worker.d.ts +0 -1
  64. package/build/workers/eslint.worker.js +0 -51
  65. package/build/workers/eslint.worker.js.map +0 -7
  66. package/build/workers/stylelint.worker.d.ts +0 -1
  67. package/build/workers/stylelint.worker.js +0 -41
  68. package/build/workers/stylelint.worker.js.map +0 -7
@@ -1,19 +0,0 @@
1
- export declare const REQUIRED_NODE_VERSION = ">=18.4.0";
2
- /**
3
- * Checks if the current Node.js version meets the required version.
4
- * @param {string} requiredVersion - The required Node.js version.
5
- * @returns {boolean} - Returns true if the current version is valid.
6
- */
7
- export declare function checkNodeVersion(requiredVersion: any): boolean;
8
- /**
9
- * Validates the Node.js version and exits if it does not meet the requirement.
10
- */
11
- export declare function validateNodeVersion(): void;
12
- /**
13
- * Util to resolve dirName from import meta compatible with node v18
14
- * Letst version of node have import.meta.dirname
15
- * @param importMeta
16
- * @returns
17
- */
18
- export declare function resolveDirName(importMeta: ImportMeta): string;
19
- export declare function resolvePath(specifier: string, importMeta: ImportMeta): string;
@@ -1,43 +0,0 @@
1
- // src/utils/nodeVersionUtil.ts
2
- import semver from "semver";
3
- import { fileURLToPath } from "url";
4
- import { dirname } from "path";
5
- import { resolve } from "import-meta-resolve";
6
- import { Logger } from "./logger.js";
7
- var REQUIRED_NODE_VERSION = ">=18.4.0";
8
- function checkNodeVersion(requiredVersion) {
9
- return semver.satisfies(process.version, requiredVersion);
10
- }
11
- function validateNodeVersion() {
12
- if (!checkNodeVersion(REQUIRED_NODE_VERSION)) {
13
- if (checkNodeVersion("<18.4.x")) {
14
- Logger.warning(
15
- `SLDS Linter CLI works best with Node.js version v18.4.0 or later.
16
- We recommend using the latest [Active LTS](https://nodejs.org/en/about/previous-releases) version of Node.js.`
17
- );
18
- }
19
- }
20
- }
21
- function resolveDirName(importMeta) {
22
- if ("dirname" in importMeta) {
23
- return importMeta.dirname;
24
- }
25
- return dirname(fileURLToPath(importMeta.url));
26
- }
27
- function resolvePath(specifier, importMeta) {
28
- let fileUrl = "";
29
- if ("resolve" in importMeta) {
30
- fileUrl = importMeta.resolve(specifier);
31
- } else {
32
- fileUrl = resolve(specifier, importMeta.url);
33
- }
34
- return fileURLToPath(fileUrl);
35
- }
36
- export {
37
- REQUIRED_NODE_VERSION,
38
- checkNodeVersion,
39
- resolveDirName,
40
- resolvePath,
41
- validateNodeVersion
42
- };
43
- //# sourceMappingURL=nodeVersionUtil.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/nodeVersionUtil.ts"],
4
- "sourcesContent": ["import semver from 'semver';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport {resolve} from 'import-meta-resolve'; // This package is a ponyfill for import.meta.resolve Node 16-20\nimport { Logger } from './logger'; // Ensure this path is correct\n\nexport const REQUIRED_NODE_VERSION = \">=18.4.0\";\n\n/**\n * Checks if the current Node.js version meets the required version.\n * @param {string} requiredVersion - The required Node.js version.\n * @returns {boolean} - Returns true if the current version is valid.\n */\nexport function checkNodeVersion(requiredVersion) {\n return semver.satisfies(process.version, requiredVersion);\n}\n\n/**\n * Validates the Node.js version and exits if it does not meet the requirement.\n */\nexport function validateNodeVersion() {\n if (!checkNodeVersion(REQUIRED_NODE_VERSION)) {\n if(checkNodeVersion(\"<18.4.x\")){\n Logger.warning(\n `SLDS Linter CLI works best with Node.js version v18.4.0 or later. \n We recommend using the latest [Active LTS](https://nodejs.org/en/about/previous-releases) version of Node.js.`\n );\n }\n }\n}\n\n/**\n * Util to resolve dirName from import meta compatible with node v18\n * Letst version of node have import.meta.dirname\n * @param importMeta \n * @returns \n */\nexport function resolveDirName(importMeta:ImportMeta){\n if(\"dirname\" in importMeta){\n return importMeta.dirname;\n }\n return dirname(fileURLToPath((importMeta as ImportMeta).url));\n}\n\nexport function resolvePath(specifier:string, importMeta:ImportMeta) {\n let fileUrl = ''\n if(\"resolve\" in importMeta){\n fileUrl = importMeta.resolve(specifier); \n } else {\n fileUrl = resolve(specifier, (importMeta as ImportMeta).url)//new URL(specifier, (importMeta as ImportMeta).url).href;\n }\n return fileURLToPath(fileUrl);\n};"],
5
- "mappings": ";AAAA,OAAO,YAAY;AACnB,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAQ,eAAc;AACtB,SAAS,cAAc;AAEhB,IAAM,wBAAwB;AAO9B,SAAS,iBAAiB,iBAAiB;AAChD,SAAO,OAAO,UAAU,QAAQ,SAAS,eAAe;AAC1D;AAKO,SAAS,sBAAsB;AACpC,MAAI,CAAC,iBAAiB,qBAAqB,GAAG;AAC5C,QAAG,iBAAiB,SAAS,GAAE;AAC7B,aAAO;AAAA,QACL;AAAA;AAAA,MAEF;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,eAAe,YAAsB;AACnD,MAAG,aAAa,YAAW;AACzB,WAAO,WAAW;AAAA,EACpB;AACA,SAAO,QAAQ,cAAe,WAA0B,GAAG,CAAC;AAC9D;AAEO,SAAS,YAAY,WAAkB,YAAuB;AACnE,MAAI,UAAU;AACd,MAAG,aAAa,YAAW;AACzB,cAAU,WAAW,QAAQ,SAAS;AAAA,EACxC,OAAO;AACL,cAAU,QAAQ,WAAY,WAA0B,GAAG;AAAA,EAC7D;AACA,SAAO,cAAc,OAAO;AAC9B;",
6
- "names": []
7
- }
@@ -1,15 +0,0 @@
1
- import { BatchTask } from '../services/batch-processor';
2
- export declare abstract class BaseWorker<T, R> {
3
- protected task: BatchTask<T>;
4
- constructor();
5
- /**
6
- * Process a single file
7
- * @param filePath Path to the file to process
8
- * @returns Processing result
9
- */
10
- protected abstract processFile(filePath: string): Promise<R>;
11
- /**
12
- * Start processing the batch of files
13
- */
14
- process(): Promise<void>;
15
- }
@@ -1,45 +0,0 @@
1
- // src/workers/base.worker.ts
2
- import { parentPort, workerData } from "worker_threads";
3
- var BaseWorker = class {
4
- task;
5
- constructor() {
6
- this.task = workerData;
7
- }
8
- /**
9
- * Start processing the batch of files
10
- */
11
- async process() {
12
- try {
13
- const results = [];
14
- for (const file of this.task.files) {
15
- try {
16
- const result = await this.processFile(file);
17
- results.push(result);
18
- } catch (error) {
19
- results.push({
20
- file,
21
- error: error.message
22
- });
23
- }
24
- }
25
- const batchResult = {
26
- success: true,
27
- results
28
- };
29
- parentPort?.postMessage(batchResult);
30
- } catch (error) {
31
- const errorResult = {
32
- success: false,
33
- error: error.message,
34
- results: []
35
- };
36
- parentPort?.postMessage(errorResult);
37
- } finally {
38
- process.exit(0);
39
- }
40
- }
41
- };
42
- export {
43
- BaseWorker
44
- };
45
- //# sourceMappingURL=base.worker.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/workers/base.worker.ts"],
4
- "sourcesContent": ["import { parentPort, workerData } from 'worker_threads';\nimport { BatchTask, BatchResult } from '../services/batch-processor';\n\nexport abstract class BaseWorker<T, R> {\n protected task: BatchTask<T>;\n\n constructor() {\n this.task = workerData as BatchTask<T>;\n }\n\n /**\n * Process a single file\n * @param filePath Path to the file to process\n * @returns Processing result\n */\n protected abstract processFile(filePath: string): Promise<R>;\n\n /**\n * Start processing the batch of files\n */\n async process(): Promise<void> {\n try {\n const results: R[] = [];\n\n for (const file of this.task.files) {\n try {\n const result = await this.processFile(file);\n results.push(result);\n } catch (error: any) {\n results.push({\n file,\n error: error.message\n } as R);\n }\n }\n\n const batchResult: BatchResult = {\n success: true,\n results\n };\n\n parentPort?.postMessage(batchResult);\n } catch (error: any) {\n const errorResult: BatchResult = {\n success: false,\n error: error.message,\n results: []\n };\n \n parentPort?.postMessage(errorResult);\n } finally {\n process.exit(0);\n }\n }\n} "],
5
- "mappings": ";AAAA,SAAS,YAAY,kBAAkB;AAGhC,IAAe,aAAf,MAAgC;AAAA,EAC3B;AAAA,EAEV,cAAc;AACZ,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,UAAyB;AAC7B,QAAI;AACF,YAAM,UAAe,CAAC;AAEtB,iBAAW,QAAQ,KAAK,KAAK,OAAO;AAClC,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,YAAY,IAAI;AAC1C,kBAAQ,KAAK,MAAM;AAAA,QACrB,SAAS,OAAY;AACnB,kBAAQ,KAAK;AAAA,YACX;AAAA,YACA,OAAO,MAAM;AAAA,UACf,CAAM;AAAA,QACR;AAAA,MACF;AAEA,YAAM,cAA2B;AAAA,QAC/B,SAAS;AAAA,QACT;AAAA,MACF;AAEA,kBAAY,YAAY,WAAW;AAAA,IACrC,SAAS,OAAY;AACnB,YAAM,cAA2B;AAAA,QAC/B,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,SAAS,CAAC;AAAA,MACZ;AAEA,kBAAY,YAAY,WAAW;AAAA,IACrC,UAAE;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,51 +0,0 @@
1
- // src/workers/eslint.worker.ts
2
- import { ESLint } from "eslint";
3
- import { BaseWorker } from "./base.worker.js";
4
- var ESLintWorker = class extends BaseWorker {
5
- eslint;
6
- constructor() {
7
- super();
8
- this.eslint = new ESLint({
9
- useEslintrc: false,
10
- fix: this.task.config.fix,
11
- overrideConfigFile: this.task.config.configPath
12
- });
13
- }
14
- async processFile(filePath) {
15
- try {
16
- const results = await this.eslint.lintFiles([filePath]);
17
- const fileResult = results[0];
18
- if (this.task.config.fix && fileResult.output) {
19
- await ESLint.outputFixes(results);
20
- }
21
- return {
22
- file: filePath,
23
- warnings: fileResult.messages.filter((msg) => msg.severity === 1).map((warning) => ({
24
- line: warning.line,
25
- column: warning.column,
26
- endColumn: warning.endColumn,
27
- message: warning.message,
28
- ruleId: warning.ruleId || "unknown"
29
- })),
30
- errors: fileResult.messages.filter((msg) => msg.severity === 2).map((error) => ({
31
- line: error.line,
32
- column: error.column,
33
- endColumn: error.endColumn,
34
- message: error.message,
35
- ruleId: error.ruleId || "unknown"
36
- }))
37
- };
38
- } catch (error) {
39
- return {
40
- file: filePath,
41
- error: error.message
42
- };
43
- }
44
- }
45
- };
46
- var worker = new ESLintWorker();
47
- worker.process().catch((error) => {
48
- console.error("Worker failed:", error);
49
- process.exit(1);
50
- });
51
- //# sourceMappingURL=eslint.worker.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/workers/eslint.worker.ts"],
4
- "sourcesContent": ["import { ESLint } from 'eslint';\nimport { BaseWorker } from './base.worker';\nimport { WorkerConfig, WorkerResult } from '../types';\n\nclass ESLintWorker extends BaseWorker<WorkerConfig, WorkerResult> {\n private eslint: ESLint;\n\n constructor() {\n super();\n this.eslint = new ESLint({\n useEslintrc: false,\n fix: this.task.config.fix,\n overrideConfigFile: this.task.config.configPath\n });\n }\n\n protected async processFile(filePath: string): Promise<WorkerResult> {\n try {\n const results = await this.eslint.lintFiles([filePath]);\n const fileResult = results[0];\n\n // Apply fixes if requested\n if (this.task.config.fix && fileResult.output) {\n await ESLint.outputFixes(results);\n }\n return {\n file: filePath,\n warnings: fileResult.messages\n .filter(msg => msg.severity === 1)\n .map(warning => ({\n line: warning.line,\n column: warning.column,\n endColumn: warning.endColumn,\n message: warning.message,\n ruleId: warning.ruleId || 'unknown'\n })),\n errors: fileResult.messages\n .filter(msg => msg.severity === 2)\n .map(error => ({\n line: error.line,\n column: error.column,\n endColumn: error.endColumn,\n message: error.message,\n ruleId: error.ruleId || 'unknown'\n }))\n };\n } catch (error: any) {\n return {\n file: filePath,\n error: error.message\n };\n }\n }\n}\n\n// Initialize and start the worker\nconst worker = new ESLintWorker();\nworker.process().catch(error => {\n console.error('Worker failed:', error);\n process.exit(1);\n}); "],
5
- "mappings": ";AAAA,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAG3B,IAAM,eAAN,cAA2B,WAAuC;AAAA,EACxD;AAAA,EAER,cAAc;AACZ,UAAM;AACN,SAAK,SAAS,IAAI,OAAO;AAAA,MACvB,aAAa;AAAA,MACb,KAAK,KAAK,KAAK,OAAO;AAAA,MACtB,oBAAoB,KAAK,KAAK,OAAO;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,MAAgB,YAAY,UAAyC;AACnE,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,UAAU,CAAC,QAAQ,CAAC;AACtD,YAAM,aAAa,QAAQ,CAAC;AAG5B,UAAI,KAAK,KAAK,OAAO,OAAO,WAAW,QAAQ;AAC7C,cAAM,OAAO,YAAY,OAAO;AAAA,MAClC;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,WAAW,SAClB,OAAO,SAAO,IAAI,aAAa,CAAC,EAChC,IAAI,cAAY;AAAA,UACf,MAAM,QAAQ;AAAA,UACd,QAAQ,QAAQ;AAAA,UAChB,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB,QAAQ,QAAQ,UAAU;AAAA,QAC5B,EAAE;AAAA,QACJ,QAAQ,WAAW,SAChB,OAAO,SAAO,IAAI,aAAa,CAAC,EAChC,IAAI,YAAU;AAAA,UACb,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,UACd,WAAW,MAAM;AAAA,UACjB,SAAS,MAAM;AAAA,UACf,QAAQ,MAAM,UAAU;AAAA,QAC1B,EAAE;AAAA,MACN;AAAA,IACF,SAAS,OAAY;AACnB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,SAAS,IAAI,aAAa;AAChC,OAAO,QAAQ,EAAE,MAAM,WAAS;AAC9B,UAAQ,MAAM,kBAAkB,KAAK;AACrC,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
- "names": []
7
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,41 +0,0 @@
1
- // src/workers/stylelint.worker.ts
2
- import stylelint from "stylelint";
3
- import { BaseWorker } from "./base.worker.js";
4
- var StylelintWorker = class extends BaseWorker {
5
- async processFile(filePath) {
6
- try {
7
- const options = {
8
- files: filePath,
9
- fix: this.task.config.fix
10
- };
11
- if (this.task.config.configPath) {
12
- options.configFile = this.task.config.configPath;
13
- }
14
- const result = await stylelint.lint(options);
15
- const fileResult = result.results[0];
16
- return {
17
- file: filePath,
18
- warnings: fileResult.warnings.map((warning) => ({
19
- line: warning.line,
20
- column: warning.column,
21
- endColumn: warning.endColumn,
22
- message: warning.text,
23
- ruleId: warning.rule
24
- })),
25
- errors: []
26
- // Stylelint doesn't differentiate between warnings and errors
27
- };
28
- } catch (error) {
29
- return {
30
- file: filePath,
31
- error: error.message
32
- };
33
- }
34
- }
35
- };
36
- var worker = new StylelintWorker();
37
- worker.process().catch((error) => {
38
- console.error("Worker failed:", error);
39
- process.exit(1);
40
- });
41
- //# sourceMappingURL=stylelint.worker.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/workers/stylelint.worker.ts"],
4
- "sourcesContent": ["import stylelint from 'stylelint';\nimport { BaseWorker } from './base.worker';\nimport { WorkerConfig, WorkerResult } from '../types';\n\nclass StylelintWorker extends BaseWorker<WorkerConfig, WorkerResult> {\n protected async processFile(filePath: string): Promise<WorkerResult> {\n try {\n const options: stylelint.LinterOptions = {\n files: filePath,\n fix: this.task.config.fix,\n };\n\n // Load custom config if provided\n if (this.task.config.configPath) {\n options.configFile = this.task.config.configPath;\n }\n\n const result = await stylelint.lint(options);\n const fileResult = result.results[0];\n\n // Convert stylelint results to our format\n return {\n file: filePath,\n warnings: fileResult.warnings.map(warning => ({\n line: warning.line,\n column: warning.column,\n endColumn: warning.endColumn,\n message: warning.text,\n ruleId: warning.rule\n })),\n errors: [] // Stylelint doesn't differentiate between warnings and errors\n };\n } catch (error: any) {\n return {\n file: filePath,\n error: error.message\n };\n }\n }\n}\n\n// Initialize and start the worker\nconst worker = new StylelintWorker();\nworker.process().catch(error => {\n console.error('Worker failed:', error);\n process.exit(1);\n}); "],
5
- "mappings": ";AAAA,OAAO,eAAe;AACtB,SAAS,kBAAkB;AAG3B,IAAM,kBAAN,cAA8B,WAAuC;AAAA,EACnE,MAAgB,YAAY,UAAyC;AACnE,QAAI;AACF,YAAM,UAAmC;AAAA,QACvC,OAAO;AAAA,QACP,KAAK,KAAK,KAAK,OAAO;AAAA,MACxB;AAGA,UAAI,KAAK,KAAK,OAAO,YAAY;AAC/B,gBAAQ,aAAa,KAAK,KAAK,OAAO;AAAA,MACxC;AAEA,YAAM,SAAS,MAAM,UAAU,KAAK,OAAO;AAC3C,YAAM,aAAa,OAAO,QAAQ,CAAC;AAGnC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,WAAW,SAAS,IAAI,cAAY;AAAA,UAC5C,MAAM,QAAQ;AAAA,UACd,QAAQ,QAAQ;AAAA,UAChB,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB,QAAQ,QAAQ;AAAA,QAClB,EAAE;AAAA,QACF,QAAQ,CAAC;AAAA;AAAA,MACX;AAAA,IACF,SAAS,OAAY;AACnB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,SAAS,IAAI,gBAAgB;AACnC,OAAO,QAAQ,EAAE,MAAM,WAAS;AAC9B,UAAQ,MAAM,kBAAkB,KAAK;AACrC,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
- "names": []
7
- }