From 2be95411444f3833bfe0f45abeffee78035a080c Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 14 Nov 2023 21:38:48 +0100 Subject: [PATCH] Modify S4328: Use new `package.json` shared methods (#4377) --- package.json | 1 - packages/bridge/src/errors/middleware.ts | 3 +- packages/bridge/src/memory.ts | 2 +- packages/bridge/src/server.ts | 2 +- .../bridge/tests/errors/middleware.test.ts | 2 +- packages/bridge/tests/router.test.ts | 2 +- packages/bridge/tests/server.test.ts | 2 +- packages/bridge/tests/worker.test.ts | 2 +- packages/css/src/analysis/analysis.ts | 2 +- packages/css/src/linter/issues/transform.ts | 2 +- packages/css/tests/analysis/analyzer.test.ts | 2 +- packages/css/tests/linter/wrapper.test.ts | 2 +- packages/html/src/index.ts | 2 +- packages/html/src/parser/parse.ts | 2 +- packages/html/tests/analysis/analyzer.test.ts | 5 ++-- packages/html/tests/builder/build.test.ts | 2 +- packages/html/tests/parser/parse.test.ts | 2 +- packages/jsts/src/analysis/analysis.ts | 3 +- packages/jsts/src/analysis/analyzer.ts | 3 +- packages/jsts/src/builders/build.ts | 2 +- .../package-json/project-package-json.ts | 2 +- .../jsts/src/embedded/analysis/analysis.ts | 2 +- .../jsts/src/embedded/analysis/analyzer.ts | 2 +- packages/jsts/src/embedded/builder/patch.ts | 2 +- packages/jsts/src/index.ts | 1 + packages/jsts/src/linter/bundle-loader.ts | 2 +- .../jsts/src/linter/config/linter-config.ts | 2 +- .../jsts/src/linter/config/rule-config.ts | 2 +- packages/jsts/src/linter/issues/message.ts | 2 +- packages/jsts/src/linter/linters.ts | 3 +- .../src/linter/parameters/helpers/schema.ts | 2 +- packages/jsts/src/linter/wrapper.ts | 2 +- packages/jsts/src/parsers/parse.ts | 2 +- packages/jsts/src/program/program.ts | 2 +- packages/jsts/src/rules/S4328/rule.ts | 29 +++++-------------- packages/jsts/src/rules/S4328/unit.test.ts | 6 +++- packages/jsts/src/rules/helpers/file.ts | 2 +- packages/jsts/tests/analysis/analyzer.test.ts | 3 +- packages/jsts/tests/builders/build.test.ts | 3 +- .../jsts/tests/dependencies/index.test.ts | 2 +- .../jsts/tests/linter/bundle-loader.test.ts | 2 +- .../tests/linter/config/linter-config.test.ts | 2 +- .../tests/linter/config/rule-config.test.ts | 2 +- packages/jsts/tests/linter/index.test.ts | 2 +- packages/jsts/tests/linter/wrapper.test.ts | 2 +- packages/jsts/tests/parsers/eslint.test.ts | 2 +- packages/jsts/tests/parsers/parse.test.ts | 3 +- packages/jsts/tests/program/program.test.ts | 2 +- packages/jsts/tests/tools/helpers/input.ts | 2 +- packages/jsts/tests/tools/helpers/parsing.ts | 2 +- .../tools/sonar-runtime/sonar-runtime.test.ts | 2 +- .../tools/testers/comment-based/checker.ts | 2 +- .../testers/comment-based/framework.test.ts | 2 +- packages/shared/src/index.ts | 22 ++++++++++++++ packages/tsconfig.json | 11 ++++--- packages/yaml/src/index.ts | 2 +- packages/yaml/src/parser/parse-yaml.ts | 4 +-- packages/yaml/tests/analysis/analyzer.test.ts | 11 ++++--- packages/yaml/tests/aws/parser.test.ts | 3 +- packages/yaml/tests/builder/build.test.ts | 4 +-- packages/yaml/tests/builder/patch.test.ts | 4 +-- packages/yaml/tests/parser/format.test.ts | 2 +- packages/yaml/tests/parser/parse.test.ts | 3 +- 63 files changed, 108 insertions(+), 103 deletions(-) create mode 100644 packages/shared/src/index.ts diff --git a/package.json b/package.json index 0646088bc8c..a8787277f20 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,6 @@ "@sonar/css": "lib/css/src", "@sonar/html": "lib/html/src", "@sonar/jsts": "lib/jsts/src", - "@sonar/jsts/embedded": "lib/jsts/src/embedded", "@sonar/shared": "lib/shared/src", "@sonar/yaml": "lib/yaml/src" } diff --git a/packages/bridge/src/errors/middleware.ts b/packages/bridge/src/errors/middleware.ts index ea915777a0c..b6281838605 100644 --- a/packages/bridge/src/errors/middleware.ts +++ b/packages/bridge/src/errors/middleware.ts @@ -18,9 +18,8 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import express from 'express'; -import { ErrorCode } from '@sonar/shared/errors'; +import { ErrorCode, error } from '@sonar/shared'; import { JsTsAnalysisOutput } from '@sonar/jsts'; -import { error } from '@sonar/shared/helpers'; /** * Express.js middleware for handling error while serving requests. diff --git a/packages/bridge/src/memory.ts b/packages/bridge/src/memory.ts index 41bcf113409..87efdc60156 100644 --- a/packages/bridge/src/memory.ts +++ b/packages/bridge/src/memory.ts @@ -22,7 +22,7 @@ import * as v8 from 'v8'; import * as os from 'os'; import fs from 'fs'; import { constants, NodeGCPerformanceDetail, PerformanceObserver } from 'perf_hooks'; -import { debug, error, getContext, info, warn } from '@sonar/shared/helpers'; +import { debug, error, getContext, info, warn } from '@sonar/shared'; const MB = 1024 * 1024; diff --git a/packages/bridge/src/server.ts b/packages/bridge/src/server.ts index 37ccfa8a00a..b88df6202bb 100644 --- a/packages/bridge/src/server.ts +++ b/packages/bridge/src/server.ts @@ -28,7 +28,7 @@ import http from 'http'; import path from 'path'; import router from './router'; import { errorMiddleware } from './errors'; -import { debug, getContext } from '@sonar/shared/helpers'; +import { debug, getContext } from '@sonar/shared'; import { timeoutMiddleware } from './timeout'; import { AddressInfo } from 'net'; import { Worker, SHARE_ENV } from 'worker_threads'; diff --git a/packages/bridge/tests/errors/middleware.test.ts b/packages/bridge/tests/errors/middleware.test.ts index 05ea5633173..8156b498e78 100644 --- a/packages/bridge/tests/errors/middleware.test.ts +++ b/packages/bridge/tests/errors/middleware.test.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { ErrorCode, APIError } from '@sonar/shared/errors'; +import { ErrorCode, APIError } from '@sonar/shared'; import * as express from 'express'; import { EMPTY_JSTS_ANALYSIS_OUTPUT, errorMiddleware } from '../../src/errors'; diff --git a/packages/bridge/tests/router.test.ts b/packages/bridge/tests/router.test.ts index f100992a647..a406417fef8 100644 --- a/packages/bridge/tests/router.test.ts +++ b/packages/bridge/tests/router.test.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { setContext, toUnixPath } from '@sonar/shared/helpers'; +import { setContext, toUnixPath } from '@sonar/shared'; import http from 'http'; import { createAndSaveProgram, RuleConfig } from '@sonar/jsts'; import path from 'path'; diff --git a/packages/bridge/tests/server.test.ts b/packages/bridge/tests/server.test.ts index 6e47488818f..d4fa0cc9b20 100644 --- a/packages/bridge/tests/server.test.ts +++ b/packages/bridge/tests/server.test.ts @@ -20,7 +20,7 @@ import { start } from '../src/server'; import { promisify } from 'util'; import path from 'path'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext } from '@sonar/shared'; import { AddressInfo } from 'net'; import { request } from './tools'; import http from 'http'; diff --git a/packages/bridge/tests/worker.test.ts b/packages/bridge/tests/worker.test.ts index 191a9367135..50564f01376 100644 --- a/packages/bridge/tests/worker.test.ts +++ b/packages/bridge/tests/worker.test.ts @@ -20,7 +20,7 @@ import path from 'path'; import { Worker } from 'worker_threads'; -import { ErrorCode } from '@sonar/shared/errors'; +import { ErrorCode } from '@sonar/shared'; describe('worker', () => { let worker: Worker; diff --git a/packages/css/src/analysis/analysis.ts b/packages/css/src/analysis/analysis.ts index 98703557d26..8c99006c522 100644 --- a/packages/css/src/analysis/analysis.ts +++ b/packages/css/src/analysis/analysis.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Issue, RuleConfig } from '../linter'; -import { AnalysisInput, AnalysisOutput } from '@sonar/shared/types'; +import { AnalysisInput, AnalysisOutput } from '@sonar/shared'; /** * A CSS analysis input diff --git a/packages/css/src/linter/issues/transform.ts b/packages/css/src/linter/issues/transform.ts index 24a5ead517c..e2f31a39deb 100644 --- a/packages/css/src/linter/issues/transform.ts +++ b/packages/css/src/linter/issues/transform.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import * as stylelint from 'stylelint'; -import { debug } from '@sonar/shared/helpers'; +import { debug } from '@sonar/shared'; import { Issue } from './issue'; /** diff --git a/packages/css/tests/analysis/analyzer.test.ts b/packages/css/tests/analysis/analyzer.test.ts index 5431946f4cf..082a3f5f5df 100644 --- a/packages/css/tests/analysis/analyzer.test.ts +++ b/packages/css/tests/analysis/analyzer.test.ts @@ -20,7 +20,7 @@ import { analyzeCSS, CssAnalysisInput } from '../../src/analysis'; import { RuleConfig } from '../../src/linter'; import path from 'path'; -import { readFile } from '@sonar/shared/helpers'; +import { readFile } from '@sonar/shared'; const rules = [{ key: 'block-no-empty', configurations: [] }]; diff --git a/packages/css/tests/linter/wrapper.test.ts b/packages/css/tests/linter/wrapper.test.ts index 7eb28515fc6..7bf55275130 100644 --- a/packages/css/tests/linter/wrapper.test.ts +++ b/packages/css/tests/linter/wrapper.test.ts @@ -19,7 +19,7 @@ */ import path from 'path'; import * as stylelint from 'stylelint'; -import { readFile } from '@sonar/shared/helpers'; +import { readFile } from '@sonar/shared'; import { createStylelintConfig, LinterWrapper, RuleConfig } from '../../src/linter'; describe('LinterWrapper', () => { diff --git a/packages/html/src/index.ts b/packages/html/src/index.ts index 4df904d4a20..97244b77a6a 100644 --- a/packages/html/src/index.ts +++ b/packages/html/src/index.ts @@ -22,7 +22,7 @@ import { analyzeEmbedded, EmbeddedAnalysisInput as HtmlAnalysisInput, EmbeddedAnalysisOutput as HtmlAnalysisOutput, -} from '@sonar/jsts/embedded'; +} from '@sonar/jsts'; import { parseHTML } from './parser'; diff --git a/packages/html/src/parser/parse.ts b/packages/html/src/parser/parse.ts index 09d8812313a..de2e447cac9 100644 --- a/packages/html/src/parser/parse.ts +++ b/packages/html/src/parser/parse.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import * as htmlparser from 'htmlparser2'; -import { EmbeddedJS } from '@sonar/jsts/embedded'; +import { EmbeddedJS } from '@sonar/jsts'; /** * References: diff --git a/packages/html/tests/analysis/analyzer.test.ts b/packages/html/tests/analysis/analyzer.test.ts index fa7a18263df..e33e7ad7791 100644 --- a/packages/html/tests/analysis/analyzer.test.ts +++ b/packages/html/tests/analysis/analyzer.test.ts @@ -20,9 +20,8 @@ import { join } from 'path'; import { embeddedInput } from '../../../jsts/tests/tools'; import { parseHTML } from '../../src/parser'; -import { setContext } from '@sonar/shared/helpers'; -import { analyzeEmbedded } from '@sonar/jsts/embedded'; -import { initializeLinter } from '@sonar/jsts'; +import { setContext } from '@sonar/shared'; +import { analyzeEmbedded, initializeLinter } from '@sonar/jsts'; describe('analyzeHTML', () => { const fixturesPath = join(__dirname, 'fixtures'); diff --git a/packages/html/tests/builder/build.test.ts b/packages/html/tests/builder/build.test.ts index 0e61477ff59..016ebf625a1 100644 --- a/packages/html/tests/builder/build.test.ts +++ b/packages/html/tests/builder/build.test.ts @@ -20,7 +20,7 @@ import { join } from 'path'; import { parseHTML } from '../../src/parser'; import { embeddedInput } from '../../../jsts/tests/tools'; -import { buildSourceCodes } from '@sonar/jsts/embedded'; +import { buildSourceCodes } from '@sonar/jsts'; describe('buildSourceCodes()', () => { const fixturesPath = join(__dirname, 'fixtures'); diff --git a/packages/html/tests/parser/parse.test.ts b/packages/html/tests/parser/parse.test.ts index 5d1027ac19a..1ac009ba9f7 100644 --- a/packages/html/tests/parser/parse.test.ts +++ b/packages/html/tests/parser/parse.test.ts @@ -19,7 +19,7 @@ */ import path from 'path'; import { parseHTML } from '../../src/parser'; -import { readFile } from '@sonar/shared/helpers'; +import { readFile } from '@sonar/shared'; describe('parseHtml', () => { it('should return embedded JavaScript', async () => { diff --git a/packages/jsts/src/analysis/analysis.ts b/packages/jsts/src/analysis/analysis.ts index 01d343ca13d..6cf2287d6ba 100644 --- a/packages/jsts/src/analysis/analysis.ts +++ b/packages/jsts/src/analysis/analysis.ts @@ -17,9 +17,8 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { FileType, JsTsLanguage } from '@sonar/shared/helpers'; +import { FileType, JsTsLanguage, AnalysisInput, AnalysisOutput } from '@sonar/shared'; import { CpdToken, Issue, Metrics, SymbolHighlight, SyntaxHighlight } from '../linter'; -import { AnalysisInput, AnalysisOutput } from '@sonar/shared/types'; import { Perf } from '../monitoring'; /** diff --git a/packages/jsts/src/analysis/analyzer.ts b/packages/jsts/src/analysis/analyzer.ts index d5ac9261d62..f3de7d32067 100644 --- a/packages/jsts/src/analysis/analyzer.ts +++ b/packages/jsts/src/analysis/analyzer.ts @@ -17,9 +17,8 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { APIError } from '@sonar/shared/errors'; +import { APIError, debug, getContext, JsTsLanguage } from '@sonar/shared'; import { SourceCode } from 'eslint'; -import { debug, getContext, JsTsLanguage } from '@sonar/shared/helpers'; import { computeMetrics, findNoSonarLines, diff --git a/packages/jsts/src/builders/build.ts b/packages/jsts/src/builders/build.ts index 83873c9e575..91e7255d530 100644 --- a/packages/jsts/src/builders/build.ts +++ b/packages/jsts/src/builders/build.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { debug, getContext, JsTsLanguage } from '@sonar/shared/helpers'; +import { debug, getContext, JsTsLanguage } from '@sonar/shared'; import { JsTsAnalysisInput } from '../analysis'; import { buildParserOptions, parseForESLint, parsers } from '../parsers'; import { getProgramById } from '../program'; diff --git a/packages/jsts/src/dependencies/package-json/project-package-json.ts b/packages/jsts/src/dependencies/package-json/project-package-json.ts index cdfd6ea1ccc..bad00ee8f42 100644 --- a/packages/jsts/src/dependencies/package-json/project-package-json.ts +++ b/packages/jsts/src/dependencies/package-json/project-package-json.ts @@ -19,7 +19,7 @@ */ import fs from 'fs'; import path from 'path'; -import { toUnixPath, debug, error, readFileSync } from '@sonar/shared/helpers'; +import { toUnixPath, debug, error, readFileSync } from '@sonar/shared'; import { PackageJson as PJ } from 'type-fest'; import { Minimatch } from 'minimatch'; diff --git a/packages/jsts/src/embedded/analysis/analysis.ts b/packages/jsts/src/embedded/analysis/analysis.ts index 05e4795982d..bfcc94307cb 100644 --- a/packages/jsts/src/embedded/analysis/analysis.ts +++ b/packages/jsts/src/embedded/analysis/analysis.ts @@ -19,7 +19,7 @@ */ import { Perf } from 'jsts/src/monitoring'; import { Issue } from '../../linter'; -import { AnalysisInput, AnalysisOutput } from '@sonar/shared/types'; +import { AnalysisInput, AnalysisOutput } from '@sonar/shared'; /** * An analysis input of embedded code diff --git a/packages/jsts/src/embedded/analysis/analyzer.ts b/packages/jsts/src/embedded/analysis/analyzer.ts index 3370da1f927..74f016687e8 100644 --- a/packages/jsts/src/embedded/analysis/analyzer.ts +++ b/packages/jsts/src/embedded/analysis/analyzer.ts @@ -22,7 +22,7 @@ import { Position } from 'estree'; import { getLinter, Issue, LinterWrapper } from '../../linter'; import { buildSourceCodes, ExtendedSourceCode, LanguageParser } from '../builder'; import { EmbeddedAnalysisInput, EmbeddedAnalysisOutput } from './analysis'; -import { debug } from '@sonar/shared/helpers'; +import { debug } from '@sonar/shared'; import { measureDuration } from '../../monitoring'; import { findNcloc } from '../../linter/visitors/metrics/ncloc'; diff --git a/packages/jsts/src/embedded/builder/patch.ts b/packages/jsts/src/embedded/builder/patch.ts index 020959334ef..68e69547f1b 100644 --- a/packages/jsts/src/embedded/builder/patch.ts +++ b/packages/jsts/src/embedded/builder/patch.ts @@ -21,7 +21,7 @@ import { AST, SourceCode } from 'eslint'; import { Comment, Node } from 'estree'; import { visit } from '../../linter'; import { EmbeddedJS } from '../analysis'; -import { APIError } from '@sonar/shared/errors'; +import { APIError } from '@sonar/shared'; /** * Patches the ESLint SourceCode instance parsed with an ESLint-based parser diff --git a/packages/jsts/src/index.ts b/packages/jsts/src/index.ts index caf4bfbd584..dde3ccaea1a 100644 --- a/packages/jsts/src/index.ts +++ b/packages/jsts/src/index.ts @@ -24,3 +24,4 @@ export * from './linter'; export * from './parsers'; export * from './program'; export * from './rules'; +export * from './embedded'; diff --git a/packages/jsts/src/linter/bundle-loader.ts b/packages/jsts/src/linter/bundle-loader.ts index ed84a8feaf0..6d5230e9789 100755 --- a/packages/jsts/src/linter/bundle-loader.ts +++ b/packages/jsts/src/linter/bundle-loader.ts @@ -25,7 +25,7 @@ import { rules as reactESLintRules } from 'eslint-plugin-react'; import { rules as reactA11yRules } from 'eslint-plugin-jsx-a11y'; import { rules as internalRules } from '../rules'; import { customRules as internalCustomRules, CustomRule } from './custom-rules'; -import { debug, getContext } from '@sonar/shared/helpers'; +import { debug, getContext } from '@sonar/shared'; export function loadCustomRules(linter: Linter, rules: CustomRule[] = []) { for (const rule of rules) { diff --git a/packages/jsts/src/linter/config/linter-config.ts b/packages/jsts/src/linter/config/linter-config.ts index 86bc88bbefc..56abee46e09 100644 --- a/packages/jsts/src/linter/config/linter-config.ts +++ b/packages/jsts/src/linter/config/linter-config.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Linter, Rule } from 'eslint'; -import { getContext } from '@sonar/shared/helpers'; +import { getContext } from '@sonar/shared'; import { customRules as internalCustomRules } from '../custom-rules'; import { extendRuleConfig, RuleConfig } from './rule-config'; diff --git a/packages/jsts/src/linter/config/rule-config.ts b/packages/jsts/src/linter/config/rule-config.ts index b551e173bd3..fa5a9fbe49d 100644 --- a/packages/jsts/src/linter/config/rule-config.ts +++ b/packages/jsts/src/linter/config/rule-config.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Rule } from 'eslint'; -import { FileType, getContext, JsTsLanguage } from '@sonar/shared/helpers'; +import { FileType, getContext, JsTsLanguage } from '@sonar/shared'; import { hasSonarContextOption, hasSonarRuntimeOption, SONAR_RUNTIME } from '../parameters'; /** diff --git a/packages/jsts/src/linter/issues/message.ts b/packages/jsts/src/linter/issues/message.ts index bc069fb59f3..aed2f3a9366 100644 --- a/packages/jsts/src/linter/issues/message.ts +++ b/packages/jsts/src/linter/issues/message.ts @@ -20,7 +20,7 @@ import { Linter, SourceCode } from 'eslint'; import { transformFixes } from '../quickfixes'; import { Issue } from './issue'; -import { error } from '@sonar/shared/helpers'; +import { error } from '@sonar/shared'; /** * Converts an ESLint message into a SonarQube issue diff --git a/packages/jsts/src/linter/linters.ts b/packages/jsts/src/linter/linters.ts index 270ed73e052..834dbce26db 100644 --- a/packages/jsts/src/linter/linters.ts +++ b/packages/jsts/src/linter/linters.ts @@ -17,8 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { APIError } from '@sonar/shared/errors'; -import { debug } from '@sonar/shared/helpers'; +import { APIError, debug } from '@sonar/shared'; import { LinterWrapper } from './wrapper'; import { RuleConfig } from './config'; diff --git a/packages/jsts/src/linter/parameters/helpers/schema.ts b/packages/jsts/src/linter/parameters/helpers/schema.ts index e33685fa5a2..34fab7ae6f7 100644 --- a/packages/jsts/src/linter/parameters/helpers/schema.ts +++ b/packages/jsts/src/linter/parameters/helpers/schema.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Rule } from 'eslint'; -import { debug } from '@sonar/shared/helpers'; +import { debug } from '@sonar/shared'; /** * Extracts the schema of a rule diff --git a/packages/jsts/src/linter/wrapper.ts b/packages/jsts/src/linter/wrapper.ts index aae4c99559e..725e2c3218b 100644 --- a/packages/jsts/src/linter/wrapper.ts +++ b/packages/jsts/src/linter/wrapper.ts @@ -20,7 +20,7 @@ import { Linter, SourceCode } from 'eslint'; import { loadBundles, loadCustomRules } from './bundle-loader'; import { createLinterConfig, RuleConfig } from './config'; -import { debug, FileType, JsTsLanguage } from '@sonar/shared/helpers'; +import { debug, FileType, JsTsLanguage } from '@sonar/shared'; import { LintingResult, transformMessages } from './issues'; import { CustomRule } from './custom-rules'; diff --git a/packages/jsts/src/parsers/parse.ts b/packages/jsts/src/parsers/parse.ts index 1749f2451dc..3c10a2bf340 100644 --- a/packages/jsts/src/parsers/parse.ts +++ b/packages/jsts/src/parsers/parse.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { APIError } from '@sonar/shared/errors'; +import { APIError } from '@sonar/shared'; import { SourceCode } from 'eslint'; import { ParseFunction } from './eslint'; diff --git a/packages/jsts/src/program/program.ts b/packages/jsts/src/program/program.ts index dfe7d9ef55b..c2af846c052 100644 --- a/packages/jsts/src/program/program.ts +++ b/packages/jsts/src/program/program.ts @@ -37,7 +37,7 @@ import { readFileSync, toUnixPath, warn, -} from '@sonar/shared/helpers'; +} from '@sonar/shared'; import tmp from 'tmp'; import { promisify } from 'util'; import fs from 'fs/promises'; diff --git a/packages/jsts/src/rules/S4328/rule.ts b/packages/jsts/src/rules/S4328/rule.ts index 19eed2dab15..ee5a70dcf35 100644 --- a/packages/jsts/src/rules/S4328/rule.ts +++ b/packages/jsts/src/rules/S4328/rule.ts @@ -26,7 +26,9 @@ import * as path from 'path'; import * as fs from 'fs'; import * as ts from 'typescript'; import { RequiredParserServices } from '../helpers'; -import { stripBOM } from '@sonar/shared/helpers'; +import { toUnixPath } from '@sonar/shared'; +import { getNearestPackageJsons } from '@sonar/jsts'; +import { PackageJson } from 'type-fest'; const DefinitelyTyped = '@types/'; @@ -156,7 +158,7 @@ function getPackageName(name: string) { } function getDependencies(fileName: string) { - let dirname = path.dirname(fileName); + let dirname = path.posix.dirname(toUnixPath(fileName)); const cached = cache.get(dirname); if (cached) { return cached; @@ -165,34 +167,24 @@ function getDependencies(fileName: string) { const result = new Set(); cache.set(dirname, result); - while (true) { + for (const packageJson of getNearestPackageJsons(fileName)) { + dirname = path.posix.dirname(packageJson.filename); const dirCached = dirCache.get(dirname); if (dirCached) { dirCached.forEach(d => result.add(d)); } else { - const packageJsonPath = path.join(path.resolve(dirname), 'package.json'); - const dep = fs.existsSync(packageJsonPath) - ? getDependenciesFromPackageJson(packageJsonPath) - : new Set(); + const dep = getDependenciesFromPackageJson(packageJson.contents); dep.forEach(d => result.add(d)); dirCache.set(dirname, dep); } - - const upperDir = path.dirname(dirname); - if (upperDir === dirname) { - break; - } else { - dirname = upperDir; - } } return result; } -function getDependenciesFromPackageJson(packageJsonPath: string) { +function getDependenciesFromPackageJson(content: PackageJson) { const result = new Set(); try { - const content = JSON.parse(readFile(packageJsonPath)); if (content.dependencies !== undefined) { addDependencies(result, content.dependencies); } @@ -268,8 +260,3 @@ function extractPathMappingPatterns( function getBaseUrl(parserServices: RequiredParserServices): string | undefined { return parserServices.program?.getCompilerOptions().baseUrl; } - -function readFile(filePath: string) { - const fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); - return stripBOM(fileContent); -} diff --git a/packages/jsts/src/rules/S4328/unit.test.ts b/packages/jsts/src/rules/S4328/unit.test.ts index fa13d44fd65..fa1f4376b49 100644 --- a/packages/jsts/src/rules/S4328/unit.test.ts +++ b/packages/jsts/src/rules/S4328/unit.test.ts @@ -20,9 +20,13 @@ import { RuleTester } from 'eslint'; import { rule } from './'; import path from 'path'; +import { getAllPackageJsons, searchPackageJsonFiles } from '@sonar/jsts'; -const fixtures = path.join(__dirname, 'fixtures'); +//reset and search package.json files in rule dir +getAllPackageJsons().clear(); +searchPackageJsonFiles(__dirname, []); +const fixtures = path.join(__dirname, 'fixtures'); const filename = path.join(fixtures, 'package-json-project/file.js'); const options = []; const tsParserPath = require.resolve('@typescript-eslint/parser'); diff --git a/packages/jsts/src/rules/helpers/file.ts b/packages/jsts/src/rules/helpers/file.ts index 2203da9ca3e..1d70113163b 100644 --- a/packages/jsts/src/rules/helpers/file.ts +++ b/packages/jsts/src/rules/helpers/file.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Rule } from 'eslint'; -import { FileType } from '@sonar/shared/helpers'; +import { FileType } from '@sonar/shared'; export function isMainCode(context: Rule.RuleContext) { return !isTestCode(context); diff --git a/packages/jsts/tests/analysis/analyzer.test.ts b/packages/jsts/tests/analysis/analyzer.test.ts index 75705973ad0..4723142ed45 100644 --- a/packages/jsts/tests/analysis/analyzer.test.ts +++ b/packages/jsts/tests/analysis/analyzer.test.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import path from 'path'; -import { setContext, toUnixPath } from '@sonar/shared/helpers'; +import { setContext, toUnixPath, APIError } from '@sonar/shared'; import { initializeLinter, RuleConfig, @@ -28,7 +28,6 @@ import { searchPackageJsonFiles, getNearestPackageJsons, } from '../../src'; -import { APIError } from '@sonar/shared/errors'; import { jsTsInput, parseJavaScriptSourceFile } from '../tools'; import { Linter, Rule } from 'eslint'; describe('analyzeJSTS', () => { diff --git a/packages/jsts/tests/builders/build.test.ts b/packages/jsts/tests/builders/build.test.ts index 4af2e365545..91838cbc5be 100644 --- a/packages/jsts/tests/builders/build.test.ts +++ b/packages/jsts/tests/builders/build.test.ts @@ -17,12 +17,11 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { setContext } from '@sonar/shared/helpers'; +import { setContext, APIError } from '@sonar/shared'; import { buildSourceCode } from '../../src'; import path from 'path'; import { AST } from 'vue-eslint-parser'; import { jsTsInput } from '../tools'; -import { APIError } from '@sonar/shared/errors'; describe('buildSourceCode', () => { beforeEach(() => { setContext({ diff --git a/packages/jsts/tests/dependencies/index.test.ts b/packages/jsts/tests/dependencies/index.test.ts index e33cb725313..94c65048856 100644 --- a/packages/jsts/tests/dependencies/index.test.ts +++ b/packages/jsts/tests/dependencies/index.test.ts @@ -19,7 +19,7 @@ */ import path from 'path'; -import { toUnixPath } from '@sonar/shared/helpers'; +import { toUnixPath } from '@sonar/shared'; import { searchPackageJsonFiles, getAllPackageJsons, diff --git a/packages/jsts/tests/linter/bundle-loader.test.ts b/packages/jsts/tests/linter/bundle-loader.test.ts index c2c293a8d3f..e4851c7ffdb 100755 --- a/packages/jsts/tests/linter/bundle-loader.test.ts +++ b/packages/jsts/tests/linter/bundle-loader.test.ts @@ -21,7 +21,7 @@ import { Linter } from 'eslint'; import { loadBundles, loadCustomRules } from '../../src/linter/bundle-loader'; import { CustomRule } from '../../src/linter/custom-rules'; import path from 'path'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext } from '@sonar/shared'; describe('BundleLoader', () => { it('should only load rules when requested', async () => { diff --git a/packages/jsts/tests/linter/config/linter-config.test.ts b/packages/jsts/tests/linter/config/linter-config.test.ts index 2df86240407..191aaa4ca7d 100644 --- a/packages/jsts/tests/linter/config/linter-config.test.ts +++ b/packages/jsts/tests/linter/config/linter-config.test.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Rule } from 'eslint'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext } from '@sonar/shared'; import { createLinterConfig, RuleConfig } from '../../../src/linter'; describe('createLinterConfig', () => { diff --git a/packages/jsts/tests/linter/config/rule-config.test.ts b/packages/jsts/tests/linter/config/rule-config.test.ts index a0d9bf94371..4b939f696ac 100644 --- a/packages/jsts/tests/linter/config/rule-config.test.ts +++ b/packages/jsts/tests/linter/config/rule-config.test.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { Rule } from 'eslint'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext } from '@sonar/shared'; import { extendRuleConfig, RuleConfig } from '../../../src/linter/config'; import { SONAR_CONTEXT, SONAR_RUNTIME } from '../../../src/linter/parameters'; diff --git a/packages/jsts/tests/linter/index.test.ts b/packages/jsts/tests/linter/index.test.ts index d6a6a9624ff..da2b5fa85d1 100644 --- a/packages/jsts/tests/linter/index.test.ts +++ b/packages/jsts/tests/linter/index.test.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import path from 'path'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext } from '@sonar/shared'; import { initializeLinter, getLinter, LinterWrapper } from '../../src/linter'; import { parseJavaScriptSourceFile } from '../tools'; diff --git a/packages/jsts/tests/linter/wrapper.test.ts b/packages/jsts/tests/linter/wrapper.test.ts index cdb43fc1801..166da0945e7 100644 --- a/packages/jsts/tests/linter/wrapper.test.ts +++ b/packages/jsts/tests/linter/wrapper.test.ts @@ -19,7 +19,7 @@ */ import fs from 'fs'; import path from 'path'; -import { JsTsLanguage, setContext } from '@sonar/shared/helpers'; +import { JsTsLanguage, setContext } from '@sonar/shared'; import { CustomRule, LinterWrapper, quickFixRules, RuleConfig } from '../../src'; import { parseJavaScriptSourceFile, parseTypeScriptSourceFile } from '../tools'; diff --git a/packages/jsts/tests/parsers/eslint.test.ts b/packages/jsts/tests/parsers/eslint.test.ts index ebeeecc8112..2f21f7c4f31 100644 --- a/packages/jsts/tests/parsers/eslint.test.ts +++ b/packages/jsts/tests/parsers/eslint.test.ts @@ -20,7 +20,7 @@ import { buildSourceCode } from '../../src/builders'; import { JsTsAnalysisInput } from '../../src/analysis'; import path from 'path'; -import { JsTsLanguage, readFile } from '@sonar/shared/helpers'; +import { JsTsLanguage, readFile } from '@sonar/shared'; const cases = [ { syntax: 'ECMAScript 2015', fixture: 'es2015.js', language: 'js' }, diff --git a/packages/jsts/tests/parsers/parse.test.ts b/packages/jsts/tests/parsers/parse.test.ts index f091e2e2106..e62765d333b 100644 --- a/packages/jsts/tests/parsers/parse.test.ts +++ b/packages/jsts/tests/parsers/parse.test.ts @@ -17,11 +17,10 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { APIError } from '@sonar/shared/errors'; +import { APIError, readFile } from '@sonar/shared'; import { buildParserOptions, parseForESLint, parsers } from '../../src/parsers'; import { JsTsAnalysisInput } from '../../src/analysis'; import path from 'path'; -import { readFile } from '@sonar/shared/helpers'; const parseFunctions = [ { diff --git a/packages/jsts/tests/program/program.test.ts b/packages/jsts/tests/program/program.test.ts index cc95f35c4d4..a203850be22 100644 --- a/packages/jsts/tests/program/program.test.ts +++ b/packages/jsts/tests/program/program.test.ts @@ -28,7 +28,7 @@ import { isRoot, writeTSConfigFile, } from '../../src/program'; -import { toUnixPath } from '@sonar/shared/helpers'; +import { toUnixPath } from '@sonar/shared'; import ts, { ModuleKind, ScriptTarget } from 'typescript'; import fs from 'fs'; diff --git a/packages/jsts/tests/tools/helpers/input.ts b/packages/jsts/tests/tools/helpers/input.ts index dd0865e4e2f..53995ffb4f5 100644 --- a/packages/jsts/tests/tools/helpers/input.ts +++ b/packages/jsts/tests/tools/helpers/input.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { FileType, readFile } from '@sonar/shared/helpers'; +import { FileType, readFile } from '@sonar/shared'; import { EmbeddedAnalysisInput } from '../../../src/embedded'; import { JsTsAnalysisInput } from '../../../src'; diff --git a/packages/jsts/tests/tools/helpers/parsing.ts b/packages/jsts/tests/tools/helpers/parsing.ts index 7694b55ebda..87d57794e82 100644 --- a/packages/jsts/tests/tools/helpers/parsing.ts +++ b/packages/jsts/tests/tools/helpers/parsing.ts @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { FileType, readFile } from '@sonar/shared/helpers'; +import { FileType, readFile } from '@sonar/shared'; import { buildSourceCode } from '../../../src/builders'; export async function parseTypeScriptSourceFile( diff --git a/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts b/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts index 9ef9d0c34e7..cb0ad9baac8 100644 --- a/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts +++ b/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts @@ -25,7 +25,7 @@ import { import { parseTypeScriptSourceFile } from '../helpers'; import path from 'path'; import { readdir } from 'fs/promises'; -import { fileReadable } from '@sonar/shared/helpers'; +import { fileReadable } from '@sonar/shared'; /** * Detects missing secondary location support for rules using secondary locations. diff --git a/packages/jsts/tests/tools/testers/comment-based/checker.ts b/packages/jsts/tests/tools/testers/comment-based/checker.ts index 68bfee967a6..721b226ac1d 100644 --- a/packages/jsts/tests/tools/testers/comment-based/checker.ts +++ b/packages/jsts/tests/tools/testers/comment-based/checker.ts @@ -23,7 +23,7 @@ import * as path from 'path'; import { Rule, RuleTester } from 'eslint'; import { hasSonarRuntimeOption } from '../../../../src/linter/parameters'; import { buildSourceCode } from '../../../../src/builders'; -import { FileType, JsTsLanguage } from '@sonar/shared/helpers'; +import { FileType, JsTsLanguage } from '@sonar/shared'; import { extractExpectations } from './framework'; /** diff --git a/packages/jsts/tests/tools/testers/comment-based/framework.test.ts b/packages/jsts/tests/tools/testers/comment-based/framework.test.ts index 97cff1b0d88..dcdaeae797a 100644 --- a/packages/jsts/tests/tools/testers/comment-based/framework.test.ts +++ b/packages/jsts/tests/tools/testers/comment-based/framework.test.ts @@ -19,7 +19,7 @@ */ import * as path from 'path'; import { extractExpectations } from './framework'; -import { readFile } from '@sonar/shared/helpers'; +import { readFile } from '@sonar/shared'; describe('Comment-based Testing Framework', () => { const baseDir = path.resolve(`${__dirname}/fixtures`); diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 00000000000..9a17399a441 --- /dev/null +++ b/packages/shared/src/index.ts @@ -0,0 +1,22 @@ +/* + * SonarQube JavaScript Plugin + * Copyright (C) 2011-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +export * from './errors'; +export * from './helpers'; +export * from './types'; diff --git a/packages/tsconfig.json b/packages/tsconfig.json index de858379579..f707830191f 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -17,12 +17,11 @@ "typeRoots": ["../node_modules/@types", "../typings"], "baseUrl": ".", "paths": { - "@sonar/css": ["./css/src"], - "@sonar/html": ["./html/src"], - "@sonar/jsts": ["./jsts/src"], - "@sonar/jsts/embedded": ["./jsts/src/embedded"], - "@sonar/shared/*": ["./shared/src/*"], - "@sonar/yaml": ["./yaml/src"] + "@sonar/css": ["css/src"], + "@sonar/html": ["html/src"], + "@sonar/jsts": ["jsts/src"], + "@sonar/shared": ["shared/src"], + "@sonar/yaml": ["yaml/src"] } }, "references": [ diff --git a/packages/yaml/src/index.ts b/packages/yaml/src/index.ts index 3e2f2072531..b1a9d10940e 100644 --- a/packages/yaml/src/index.ts +++ b/packages/yaml/src/index.ts @@ -21,7 +21,7 @@ import { analyzeEmbedded, EmbeddedAnalysisInput as YamlAnalysisInput, EmbeddedAnalysisOutput as YamlAnalysisOutput, -} from '@sonar/jsts/embedded'; +} from '@sonar/jsts'; import { parseAwsFromYaml } from './aws'; diff --git a/packages/yaml/src/parser/parse-yaml.ts b/packages/yaml/src/parser/parse-yaml.ts index 786340b986c..d5ef2442522 100644 --- a/packages/yaml/src/parser/parse-yaml.ts +++ b/packages/yaml/src/parser/parse-yaml.ts @@ -19,9 +19,9 @@ */ import * as yaml from 'yaml'; import assert from 'assert'; -import { EmbeddedJS } from '@sonar/jsts/embedded'; +import { EmbeddedJS } from '@sonar/jsts'; import { BLOCK_FOLDED_FORMAT, BLOCK_LITERAL_FORMAT, isSupportedFormat } from './yaml/format'; -import { APIError } from '@sonar/shared/errors'; +import { APIError } from '@sonar/shared'; /** * A bundle of Yaml visitor predicate and Extras picker diff --git a/packages/yaml/tests/analysis/analyzer.test.ts b/packages/yaml/tests/analysis/analyzer.test.ts index 3c6e19bef54..cf107671259 100644 --- a/packages/yaml/tests/analysis/analyzer.test.ts +++ b/packages/yaml/tests/analysis/analyzer.test.ts @@ -18,12 +18,15 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { join } from 'path'; -import { setContext } from '@sonar/shared/helpers'; +import { setContext, APIError } from '@sonar/shared'; import { parseAwsFromYaml } from '../../src/aws'; import { embeddedInput } from '../../../jsts/tests/tools'; -import { analyzeEmbedded, composeSyntheticFilePath } from '@sonar/jsts/embedded'; -import { initializeLinter, getLinter } from '@sonar/jsts'; -import { APIError } from '@sonar/shared/errors'; +import { + analyzeEmbedded, + composeSyntheticFilePath, + initializeLinter, + getLinter, +} from '@sonar/jsts'; import { Rule } from 'eslint'; describe('analyzeYAML', () => { diff --git a/packages/yaml/tests/aws/parser.test.ts b/packages/yaml/tests/aws/parser.test.ts index 95704dc14d6..320b2b1fc7f 100644 --- a/packages/yaml/tests/aws/parser.test.ts +++ b/packages/yaml/tests/aws/parser.test.ts @@ -19,8 +19,7 @@ */ import path from 'path'; import { parseAwsFromYaml } from '../../src/aws'; -import { APIError } from '@sonar/shared/errors'; -import { readFile } from '@sonar/shared/helpers'; +import { APIError, readFile } from '@sonar/shared'; describe('parseAwsFromYaml()', () => { it('should parse valid YAML syntax', async () => { diff --git a/packages/yaml/tests/builder/build.test.ts b/packages/yaml/tests/builder/build.test.ts index 79904b711da..ef1fb22627e 100644 --- a/packages/yaml/tests/builder/build.test.ts +++ b/packages/yaml/tests/builder/build.test.ts @@ -21,8 +21,8 @@ import * as estree from 'estree'; import { join } from 'path'; import { parseAwsFromYaml } from '../../src/aws'; import { embeddedInput } from '../../../jsts/tests/tools'; -import { buildSourceCodes, composeSyntheticFilePath } from '@sonar/jsts/embedded'; -import { APIError } from '@sonar/shared/errors'; +import { buildSourceCodes, composeSyntheticFilePath } from '@sonar/jsts'; +import { APIError } from '@sonar/shared'; describe('buildSourceCodes()', () => { const fixturesPath = join(__dirname, 'fixtures', 'build'); diff --git a/packages/yaml/tests/builder/patch.test.ts b/packages/yaml/tests/builder/patch.test.ts index f98ced04718..4dabff2eb23 100644 --- a/packages/yaml/tests/builder/patch.test.ts +++ b/packages/yaml/tests/builder/patch.test.ts @@ -18,7 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import path from 'path'; -import { readFile, setContext } from '@sonar/shared/helpers'; +import { readFile, setContext } from '@sonar/shared'; import { buildSourceCode, JsTsAnalysisInput } from '@sonar/jsts'; import { parseAwsFromYaml } from '../../src/aws'; import { @@ -26,7 +26,7 @@ import { EmbeddedAnalysisInput, EmbeddedJS, patchParsingErrorMessage, -} from '@sonar/jsts/embedded'; +} from '@sonar/jsts'; describe('patchSourceCode', () => { beforeAll(() => { diff --git a/packages/yaml/tests/parser/format.test.ts b/packages/yaml/tests/parser/format.test.ts index 85862423d9a..758d01565bb 100644 --- a/packages/yaml/tests/parser/format.test.ts +++ b/packages/yaml/tests/parser/format.test.ts @@ -19,7 +19,7 @@ */ import * as yaml from 'yaml'; import path from 'path'; -import { readFile } from '@sonar/shared/helpers'; +import { readFile } from '@sonar/shared'; import { isSupportedFormat, SUPPORTED_STRING_FORMATS } from '../../src/parser'; describe('isSupportedFormat', () => { diff --git a/packages/yaml/tests/parser/parse.test.ts b/packages/yaml/tests/parser/parse.test.ts index 4b9ddb199db..a1261adc411 100644 --- a/packages/yaml/tests/parser/parse.test.ts +++ b/packages/yaml/tests/parser/parse.test.ts @@ -19,8 +19,7 @@ */ import path from 'path'; import { parseYaml } from '../../src/parser'; -import { APIError } from '@sonar/shared/errors'; -import { readFile } from '@sonar/shared/helpers'; +import { APIError, readFile } from '@sonar/shared'; function noOpPicker(_key: any, _node: any, _ancestors: any) { return {};