@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
1 lines • 47.7 kB
Source Map (JSON)
{"version":3,"sources":["../../src/commands/lint/eslint/format-result.ts","../../src/commands/lint/eslint/write-default-config.ts","../../src/commands/lint/eslint/lint.ts","../../src/commands/lint/eslint/index.ts","../../src/commands/lint/types/type-checks.ts","../../src/commands/lint/types/index.ts","../../src/commands/lint/index.ts"],"names":["pluginCount","messages","nextPluginWarningCount","nextPluginErrorCount","i","length","severity","ruleId","includes","formatMessage","dir","filePath","fileName","path","posix","normalize","relative","replace","startsWith","output","message","line","column","toString","formatResults","baseDir","results","format","totalPluginErrorCount","totalPluginWarningCount","resultsWithMessages","filter","forEach","res","map","join","outputWithMessages","writeDefaultEslintConfig","log","context","type","eslintConfigFile","joinPaths","options","workspaceRoot","eslintConfig","workspaceConfig","name","LogLevelLabel","INFO","writeFile","VALID_SEVERITY","isValidSeverity","writeOutputFile","outputFile","outputData","resolve","process","cwd","isDirectory","ERROR","err","console","error","hasEslintConfiguration","eslintFile","packageJsonConfig","configObject","exists","emptyEslint","emptyPkgJsonConfig","content","readFile","then","txt","trim","Object","keys","lint","__name","eslintConfigPath","lintDuringBuild","eslintOptions","reportErrorsOnly","maxWarnings","formatter","installPackages","dev","isInstalled","isPackageExists","paths","projectRoot","module","resolver","import","esmResolve","useFlatConfig","findFileName","ESLint","loadESLint","eslintVersion","parseVersion","version","compare","major","minor","patch","useEslintrc","baseConfig","errorOnUnmatchedPattern","extensions","cache","option","eslint","stormStackEslintPluginIsEnabled","stormStackRulesEnabled","Map","configFile","completeConfig","calculateConfigForFile","plugins","hasStormStackPlugin","Array","isArray","entries","rules","set","WARN","lintStart","hrtime","lintFiles","tsconfig","fileNames","artifactsPath","selectedFormatter","fix","outputFixes","getErrorResults","loadFormatter","formattedResult","bind","lintEnd","totalWarnings","reduce","sum","file","warningCount","isError","eventInfo","durationInSeconds","lintedFilesCount","lintFix","eslintPluginErrorsCount","eslintPluginWarningsCount","fromEntries","runEslint","opts","getParentPath","config","packageJson","isEslintInstalled","isEslintPluginInstalled","SUCCESS","lintEslint","hooks","TRACE","cacheLocation","envPaths","callHook","catch","stack","Error","cause","checkTypes","sources","Promise","all","vfs","program","createVirtualProgram","from","noEmit","lib","types","emitResult","emit","allDiagnostics","ts","getPreEmitDiagnostics","concat","diagnostics","diagnostic","character","getLineAndCharacterOfPosition","start","flattenDiagnosticMessageText","messageText","lintTypes"],"mappings":"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","file":"chunk-OVI63CJL.cjs","sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport path from \"node:path\";\n\nexport enum MessageSeverity {\n Warning = 1,\n Error = 2\n}\n\ninterface LintMessage {\n ruleId: string | null;\n severity: 1 | 2;\n message: string;\n line: number;\n column: number;\n}\n\nexport interface LintResult {\n filePath: string;\n messages: LintMessage[];\n errorCount: number;\n warningCount: number;\n output?: string;\n source?: string;\n}\n\nfunction pluginCount(messages: LintMessage[]): {\n nextPluginErrorCount: number;\n nextPluginWarningCount: number;\n} {\n let nextPluginWarningCount = 0;\n let nextPluginErrorCount = 0;\n\n for (let i = 0; i < messages.length; i++) {\n const { severity, ruleId } = messages[i]!;\n\n if (ruleId?.includes(\"storm-stack\")) {\n if (severity === MessageSeverity.Warning) {\n nextPluginWarningCount += 1;\n } else {\n nextPluginErrorCount += 1;\n }\n }\n }\n\n return {\n nextPluginErrorCount,\n nextPluginWarningCount\n };\n}\n\nfunction formatMessage(\n dir: string,\n messages: LintMessage[],\n filePath: string\n): string {\n let fileName = path.posix.normalize(\n path.relative(dir, filePath).replace(/\\\\/g, \"/\")\n );\n\n if (!fileName.startsWith(\".\")) {\n fileName = `./${fileName}`;\n }\n\n let output = `\\n${fileName}`;\n\n for (let i = 0; i < messages.length; i++) {\n const { message, severity, line, column, ruleId } = messages[i]!;\n\n output += \"\\n\";\n\n if (line && column) {\n output = `${output + line.toString()}:${column.toString()} `;\n }\n\n if (severity === MessageSeverity.Warning) {\n output += `Warning: `;\n } else {\n output += `Error: `;\n }\n\n output += message;\n\n if (ruleId) {\n output += ` ${ruleId}`;\n }\n }\n\n return output;\n}\n\nexport async function formatResults(\n baseDir: string,\n results: LintResult[],\n format?: (r: LintResult[]) => string | Promise<string>\n): Promise<{\n output: string;\n outputWithMessages: string;\n totalPluginErrorCount: number;\n totalPluginWarningCount: number;\n}> {\n let totalPluginErrorCount = 0;\n let totalPluginWarningCount = 0;\n const resultsWithMessages = results.filter(\n ({ messages }) => messages?.length\n );\n\n // Track number of Storm Stack plugin errors and warnings\n resultsWithMessages.forEach(({ messages }) => {\n const res = pluginCount(messages);\n totalPluginErrorCount += res.nextPluginErrorCount;\n totalPluginWarningCount += res.nextPluginWarningCount;\n });\n\n // Use user defined formatter or built-in custom formatter\n const output = format\n ? await format(resultsWithMessages)\n : resultsWithMessages\n .map(({ messages, filePath }) =>\n formatMessage(baseDir, messages, filePath)\n )\n .join(\"\\n\");\n\n return {\n output,\n outputWithMessages:\n resultsWithMessages.length > 0\n ? `${output}\\n\\nInfo - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/app/api-reference/config/eslint#disabling-rules`\n : \"\",\n totalPluginErrorCount,\n totalPluginWarningCount\n };\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { writeFile } from \"../../../lib/utilities/write-file\";\nimport { LogFn } from \"../../../types/config\";\nimport type { Context } from \"../../../types/context\";\n\nexport async function writeDefaultEslintConfig(\n log: LogFn,\n context: Context,\n type: \"base\" | \"recommended\" | \"strict\" = \"recommended\"\n) {\n const eslintConfigFile = joinPaths(\n context.options.workspaceRoot,\n \"eslint.config.js\"\n );\n const eslintConfig = `\nimport { getConfig } from \"eslint-config-storm-stack\";\n\nError.stackTraceLimit = Number.POSITIVE_INFINITY;\n\nexport default getConfig({\n repositoryName: \"${context.options.workspaceConfig.name || context.options.name || \"storm-stack\"}\",\n \"storm-stack\": \"${type}\",\n});\n`;\n\n log(\n LogLevelLabel.INFO,\n `Writing a default ESLint config file to ${eslintConfigFile}`\n );\n return writeFile(log, eslintConfigFile, eslintConfig);\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport { isPackageExists } from \"@stryke/fs/package-fns\";\nimport { readFile } from \"@stryke/fs/read-file\";\nimport { parseVersion } from \"@stryke/fs/semver-fns\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { getParentPath } from \"@stryke/path/get-parent-path\";\nimport { isDirectory } from \"@stryke/path/is-file\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { isError } from \"@stryke/type-checks/is-error\";\nimport type { ESLint as FlatESLint } from \"eslint\";\nimport type { LegacyESLint } from \"eslint/use-at-your-own-risk\";\nimport path from \"node:path\";\nimport { writeFile } from \"../../../lib/utilities/write-file\";\nimport { LogFn } from \"../../../types/config\";\nimport type { Context } from \"../../../types/context\";\nimport { installPackages } from \"../../init/install/utilities\";\nimport type { LintResult } from \"./format-result\";\nimport { formatResults } from \"./format-result\";\nimport { writeDefaultEslintConfig } from \"./write-default-config\";\n\ninterface Config {\n plugins: string[];\n rules: { [key: string]: Array<number | string> };\n}\n\n// 0 is off, 1 is warn, 2 is error. See https://eslint.org/docs/user-guide/configuring/rules#configuring-rules\nconst VALID_SEVERITY = [\"off\", \"warn\", \"error\"] as const;\ntype Severity = (typeof VALID_SEVERITY)[number];\n\nfunction isValidSeverity(severity: string): severity is Severity {\n return VALID_SEVERITY.includes(severity as Severity);\n}\n\ninterface ConfigAvailable {\n exists: boolean;\n emptyEslint?: boolean;\n emptyPkgJsonConfig?: boolean;\n firstTimeSetup?: true;\n}\n\nexport interface EventLintCheckCompleted {\n durationInSeconds: number;\n eslintVersion: string | null;\n lintedFilesCount?: number;\n lintFix?: boolean;\n buildLint?: boolean;\n eslintPluginErrorsCount?: number;\n eslintPluginWarningsCount?: number;\n stormStackRulesEnabled: {\n [ruleName: `storm-stack/${string}`]: \"off\" | \"warn\" | \"error\";\n };\n}\n\n/**\n * Create a file with eslint output data\n */\nasync function writeOutputFile(\n log: LogFn,\n /** The name file that needs to be created */\n outputFile: string,\n /** The data that needs to be inserted into the file */\n outputData: string\n): Promise<void> {\n const filePath = path.resolve(process.cwd(), outputFile);\n\n if (isDirectory(filePath)) {\n log(\n LogLevelLabel.ERROR,\n `Cannot write to output file path, it is a directory: ${filePath}`\n );\n } else {\n try {\n await writeFile(log, filePath, outputData);\n\n log(LogLevelLabel.INFO, `The output file has been created: ${filePath}`);\n } catch (err) {\n log(\n LogLevelLabel.ERROR,\n `There was a problem writing the output file: ${filePath}`\n );\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\nasync function hasEslintConfiguration(\n eslintFile: string | null,\n packageJsonConfig: { eslintConfig?: any } | null\n): Promise<ConfigAvailable> {\n const configObject = {\n exists: false,\n emptyEslint: false,\n emptyPkgJsonConfig: false\n };\n\n if (eslintFile) {\n const content = await readFile(eslintFile).then(\n txt => txt.trim().replace(/\\n/g, \"\"),\n () => null\n );\n\n if (\n content === \"\" ||\n content === \"{}\" ||\n content === \"---\" ||\n content === \"module.exports = {}\"\n ) {\n configObject.emptyEslint = true;\n } else {\n configObject.exists = true;\n }\n } else if (packageJsonConfig?.eslintConfig) {\n if (Object.keys(packageJsonConfig.eslintConfig).length) {\n configObject.exists = true;\n } else {\n configObject.emptyPkgJsonConfig = true;\n }\n }\n return configObject;\n}\n\nconst lint = async (\n log: LogFn,\n context: Context,\n eslintConfigPath: string | null,\n {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null\n }: {\n lintDuringBuild: boolean;\n eslintOptions: any;\n reportErrorsOnly: boolean;\n maxWarnings: number;\n formatter: string | null;\n outputFile: string | null;\n }\n): Promise<\n | string\n | null\n | {\n output: string | null;\n isError: boolean;\n eventInfo: EventLintCheckCompleted;\n }\n> => {\n try {\n // Load ESLint after we're sure it exists:\n await installPackages(context, [\n { name: \"eslint\", dev: true },\n { name: \"eslint-config-storm-stack\", dev: true }\n ]);\n\n const isInstalled = isPackageExists(\"eslint\", {\n paths: [context.options.workspaceRoot, context.options.projectRoot]\n });\n if (!isInstalled) {\n log(\n LogLevelLabel.ERROR,\n `ESLint must be installed${\n lintDuringBuild ? \" in order to run during builds:\" : \":\"\n } npm install --save-dev eslint`\n );\n\n return null;\n }\n\n const module = await context.resolver.import<typeof import(\"eslint\")>(\n context.resolver.esmResolve(\"eslint\")\n );\n\n // If V9 config was found, use flat config, or else use legacy.\n const useFlatConfig = eslintConfigPath\n ? // eslintConfigPath is absolute path\n findFileName(eslintConfigPath).startsWith(\"eslint.config.\")\n : false;\n\n let ESLint!: typeof FlatESLint | typeof LegacyESLint;\n // loadESLint is >= 8.57.0\n // PR https://github.com/eslint/eslint/pull/18098\n // Release https://github.com/eslint/eslint/releases/tag/v8.57.0\n if (\"loadESLint\" in module) {\n // By default, configType is `flat`. If `useFlatConfig` is false, the return value is `LegacyESLint`.\n // https://github.com/eslint/eslint/blob/1def4cdfab1f067c5089df8b36242cdf912b0eb6/lib/types/index.d.ts#L1609-L1613\n ESLint = await module.loadESLint({\n useFlatConfig\n });\n }\n\n const eslintVersion = parseVersion(ESLint?.version);\n\n if (!eslintVersion || eslintVersion.compare(\"8.57.0\") < 0) {\n return `Error - Your project has an older version of ESLint installed${\n eslintVersion\n ? ` (${eslintVersion.major}.${eslintVersion.minor}.${eslintVersion.patch})`\n : \"\"\n }. Please upgrade to ESLint version 8.57.0 or above`;\n }\n\n const options: any = {\n useEslintrc: true,\n baseConfig: {},\n errorOnUnmatchedPattern: false,\n extensions: [\".js\", \".jsx\", \".ts\", \".tsx\"],\n cache: true,\n ...eslintOptions\n };\n\n if (eslintVersion?.compare(\"9.0.0\") && useFlatConfig) {\n for (const option of [\n \"useEslintrc\",\n \"extensions\",\n \"ignorePath\",\n \"reportUnusedDisableDirectives\",\n \"resolvePluginsRelativeTo\",\n \"rulePaths\",\n \"inlineConfig\",\n \"maxWarnings\"\n ]) {\n if (option in options) {\n delete options[option];\n }\n }\n }\n\n let eslint = new ESLint(options);\n\n let stormStackEslintPluginIsEnabled = false;\n const stormStackRulesEnabled = new Map<string, Severity>();\n\n for (const configFile of [\n eslintConfigPath,\n joinPaths(context.options.projectRoot, \"package.json\")\n ]) {\n if (!configFile) continue;\n\n const completeConfig: Config | undefined =\n await eslint.calculateConfigForFile(configFile);\n if (!completeConfig) continue;\n\n const plugins = completeConfig.plugins;\n\n const hasStormStackPlugin =\n // in ESLint < 9, `plugins` value is string[]\n Array.isArray(plugins)\n ? plugins.includes(\"storm-stack\")\n : // in ESLint >= 9, `plugins` value is Record<string, unknown>\n \"storm-stack\" in plugins;\n\n if (hasStormStackPlugin) {\n stormStackEslintPluginIsEnabled = true;\n for (const [name, [severity]] of Object.entries(completeConfig.rules)) {\n if (!name.startsWith(\"storm-stack/\")) {\n continue;\n }\n if (\n typeof severity === \"number\" &&\n severity >= 0 &&\n severity < VALID_SEVERITY.length\n ) {\n stormStackRulesEnabled.set(name, VALID_SEVERITY[severity]!);\n } else if (\n typeof severity === \"string\" &&\n isValidSeverity(severity)\n ) {\n stormStackRulesEnabled.set(name, severity);\n }\n }\n break;\n }\n }\n\n if (stormStackEslintPluginIsEnabled) {\n eslint = new ESLint(options);\n } else {\n log(\n LogLevelLabel.WARN,\n \"The Storm Stack plugin was not detected in your ESLint configuration. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config\"\n );\n }\n\n const lintStart = process.hrtime();\n\n let results = await eslint.lintFiles(\n context.tsconfig.fileNames.filter(\n fileName =>\n !fileName.includes(context.artifactsPath) &&\n !fileName.includes(\"node_modules\")\n )\n );\n\n let selectedFormatter = null as FlatESLint.Formatter | null;\n if (options.fix) {\n await ESLint.outputFixes(results);\n }\n if (reportErrorsOnly) {\n results = ESLint.getErrorResults(results);\n }\n\n if (formatter) {\n selectedFormatter = await eslint.loadFormatter(formatter);\n }\n\n const formattedResult = await formatResults(\n context.options.projectRoot,\n results,\n selectedFormatter?.format?.bind(selectedFormatter)\n );\n const lintEnd = process.hrtime(lintStart);\n const totalWarnings = results.reduce(\n (sum: number, file: LintResult) => sum + file.warningCount,\n 0\n );\n\n if (outputFile) {\n await writeOutputFile(log, outputFile, formattedResult.output);\n }\n\n return {\n output: formattedResult.outputWithMessages,\n isError:\n ESLint.getErrorResults(results)?.length > 0 ||\n (maxWarnings >= 0 && totalWarnings > maxWarnings),\n eventInfo: {\n durationInSeconds: lintEnd[0],\n eslintVersion: eslintVersion.version,\n lintedFilesCount: results.length,\n lintFix: !!options.fix,\n eslintPluginErrorsCount: formattedResult.totalPluginErrorCount,\n eslintPluginWarningsCount: formattedResult.totalPluginWarningCount,\n stormStackRulesEnabled: Object.fromEntries(stormStackRulesEnabled)\n }\n };\n } catch (err) {\n if (lintDuringBuild) {\n log(\n LogLevelLabel.ERROR,\n `ESLint: ${\n isError(err) && err.message ? err.message.replace(/\\n/g, \" \") : err\n }`\n );\n return null;\n } else {\n throw err;\n }\n }\n};\n\nexport async function runEslint(\n context: Context,\n opts: {\n lintDuringBuild?: boolean;\n eslintOptions?: any;\n reportErrorsOnly?: boolean;\n maxWarnings?: number;\n formatter?: string | null;\n outputFile?: string | null;\n type?: \"base\" | \"recommended\" | \"strict\";\n } = {}\n): ReturnType<typeof lint> {\n const {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null,\n type = \"recommended\"\n } = opts;\n\n // Find user's .eslintrc file\n // See: https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats\n const eslintFile =\n getParentPath(\n [\n // eslint v9\n \"eslint.config.js\",\n \"eslint.config.mjs\",\n \"eslint.config.cjs\",\n // TS extensions require to install a separate package `jiti`.\n // https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files\n \"eslint.config.ts\",\n \"eslint.config.mts\",\n \"eslint.config.cts\",\n // eslint <= v8\n \".eslintrc.js\",\n \".eslintrc.cjs\",\n \".eslintrc.yaml\",\n \".eslintrc.yml\",\n \".eslintrc.json\",\n \".eslintrc\"\n ],\n context.options.projectRoot\n ) ?? null;\n\n const config = await hasEslintConfiguration(\n eslintFile,\n context.packageJson as { eslintConfig?: any }\n );\n\n if (config.exists) {\n // Run if ESLint config exists\n return lint(context.log, context, eslintFile, {\n lintDuringBuild,\n eslintOptions,\n reportErrorsOnly,\n maxWarnings,\n formatter,\n outputFile\n });\n }\n\n // Display warning if no ESLint configuration is present inside\n // config file during \"next build\", no warning is shown when\n // no eslintrc file is present\n if (lintDuringBuild) {\n if (config.emptyPkgJsonConfig || config.emptyEslint) {\n context.log(\n LogLevelLabel.WARN,\n `No ESLint configuration detected. Run \"storm-stack lint\" to begin setup`\n );\n }\n\n return null;\n } else {\n // Check if necessary deps installed, and install any that are missing\n const isEslintInstalled = isPackageExists(\"eslint\", {\n paths: [context.options.workspaceRoot, context.options.projectRoot]\n });\n const isEslintPluginInstalled = isPackageExists(\n \"eslint-config-storm-stack\",\n {\n paths: [context.options.workspaceRoot, context.options.projectRoot]\n }\n );\n\n if (!isEslintInstalled || !isEslintPluginInstalled) {\n await installPackages(context, [\n { name: \"eslint\", dev: true },\n { name: \"eslint-config-storm-stack\", dev: true }\n ]);\n }\n\n // Write default ESLint config.\n await writeDefaultEslintConfig(context.log, context, type);\n }\n\n context.log(\n LogLevelLabel.SUCCESS,\n `ESLint has successfully been configured. Run \"storm-stack lint\" again to view warnings and errors.`\n );\n\n return null;\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport type { EngineHooks } from \"../../../types/build\";\nimport type { Context } from \"../../../types/context\";\nimport { runEslint } from \"./lint\";\n\n/**\n * Lints the Storm Stack project using ESLint.\n *\n * @param context - The build context.\n * @param hooks - The engine hooks.\n */\nexport async function lintEslint(context: Context, hooks: EngineHooks) {\n context.log(\n LogLevelLabel.TRACE,\n `Running ESLint on the Storm Stack project.`\n );\n\n await runEslint(context, {\n lintDuringBuild: true,\n eslintOptions: {\n cacheLocation: joinPaths(context.envPaths.cache, \"eslint\")\n }\n });\n\n await hooks.callHook(\"lint:eslint\", context).catch((error: Error) => {\n context.log(\n LogLevelLabel.ERROR,\n `An error occured while running ESLint on the Storm Stack project: ${error.message} \\n${error.stack ?? \"\"}`\n );\n throw new Error(\n \"An error occured while running ESLint on the Storm Stack project\",\n {\n cause: error\n }\n );\n });\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport ts from \"typescript\";\nimport {\n createVirtualProgram,\n SourcesMap\n} from \"../../../lib/typescript/program\";\nimport { Context } from \"../../../types/context\";\n\n/**\n * Perform type checks on the provided sources using TypeScript's compiler API.\n *\n * @param context - The build context containing information about the current build.\n * @param sources - The source files to check.\n */\nexport async function checkTypes(\n context: Context,\n sources?: SourcesMap\n): Promise<void> {\n if (sources) {\n await Promise.all(\n sources\n .entries()\n .map(async ([path, content]) => context.vfs.writeFile(path, content))\n );\n }\n\n const program = await createVirtualProgram(\n sources ? Array.from(sources.keys()) : [],\n context,\n {\n noEmit: true,\n lib: [\"lib.esnext.d.ts\"],\n types: []\n }\n );\n\n const emitResult = program.emit();\n\n const allDiagnostics = ts\n .getPreEmitDiagnostics(program)\n .concat(emitResult.diagnostics);\n\n allDiagnostics.forEach(diagnostic => {\n if (diagnostic.file) {\n const { line, character } = ts.getLineAndCharacterOfPosition(\n diagnostic.file,\n diagnostic.start!\n );\n const message = ts.flattenDiagnosticMessageText(\n diagnostic.messageText,\n \"\\n\"\n );\n context.log(\n LogLevelLabel.ERROR,\n `${diagnostic.file.fileName}:${line + 1}:${character + 1} : ${message}`\n );\n } else {\n context.log(\n LogLevelLabel.ERROR,\n ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\")\n );\n }\n });\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport type { EngineHooks } from \"../../../types/build\";\nimport type { Context } from \"../../../types/context\";\nimport { checkTypes } from \"./type-checks\";\n\n/**\n * Performs TypeScript type checks on the Storm Stack project.\n *\n * @param context - The build context.\n * @param hooks - The engine hooks.\n */\nexport async function lintTypes(context: Context, hooks: EngineHooks) {\n context.log(\n LogLevelLabel.TRACE,\n `Performing TypeScript type checks on the Storm Stack project.`\n );\n\n await checkTypes(context);\n\n await hooks.callHook(\"lint:types\", context).catch((error: Error) => {\n context.log(\n LogLevelLabel.ERROR,\n `An error occured while running TypeScript type checks on the Storm Stack project: ${error.message} \\n${error.stack ?? \"\"}`\n );\n throw new Error(\n \"An error occured while running TypeScript type checks on the Storm Stack project\",\n {\n cause: error\n }\n );\n });\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport type { EngineHooks } from \"../../types/build\";\nimport type { Context } from \"../../types/context\";\nimport { lintEslint } from \"./eslint\";\nimport { lintTypes } from \"./types\";\n\n/**\n * Lints the Storm Stack project based on the provided context and hooks.\n *\n * @param context - The build context.\n * @param hooks - The engine hooks.\n */\nexport async function lint(context: Context, hooks: EngineHooks) {\n await hooks.callHook(\"lint:begin\", context).catch((error: Error) => {\n context.log(\n LogLevelLabel.ERROR,\n `An error occured while starting the lint process for the Storm Stack project: ${error.message} \\n${error.stack ?? \"\"}`\n );\n\n throw new Error(\n \"An error occured while starting the lint process for the Storm Stack project\",\n { cause: error }\n );\n });\n\n await lintTypes(context, hooks);\n await lintEslint(context, hooks);\n\n await hooks.callHook(\"lint:complete\", context).catch((error: Error) => {\n context.log(\n LogLevelLabel.ERROR,\n `An error occured while finishing the lint process for the Storm Stack project: ${error.message} \\n${error.stack ?? \"\"}`\n );\n\n throw new Error(\n \"An error occured while finishing the lint process for the Storm Stack project\",\n { cause: error }\n );\n });\n}\n"]}