Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@microsoft/tsdoc-config

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@microsoft/tsdoc-config - npm Package Compare versions

Comparing version
0.17.1
to
0.18.0
+22
-0
CHANGELOG.json

@@ -5,2 +5,24 @@ {

{
"version": "0.18.0",
"tag": "@microsoft/tsdoc-config_v0.18.0",
"date": "Tue, 11 Nov 2025 00:51:42 GMT",
"comments": {
"minor": [
{
"comment": "Normalize builtin imports."
}
],
"patch": [
{
"comment": "Remove test files and declaration maps from the published package."
}
],
"dependency": [
{
"comment": "Updating dependency \"@microsoft/tsdoc\" to `0.16.0`"
}
]
}
},
{
"version": "0.17.1",

@@ -7,0 +29,0 @@ "tag": "@microsoft/tsdoc-config_v0.17.1",

+12
-1
# Change Log - @microsoft/tsdoc-config
This log was last generated on Sat, 23 Nov 2024 00:23:35 GMT and should not be manually modified.
This log was last generated on Tue, 11 Nov 2025 00:51:42 GMT and should not be manually modified.
## 0.18.0
Tue, 11 Nov 2025 00:51:42 GMT
### Minor changes
- Normalize builtin imports.
### Patches
- Remove test files and declaration maps from the published package.
## 0.17.1

@@ -6,0 +17,0 @@ Sat, 23 Nov 2024 00:23:35 GMT

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"TSDocConfigFile.d.ts","sourceRoot":"","sources":["../src/TSDocConfigFile.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"TSDocConfigFile.d.ts","sourceRoot":"","sources":["../src/TSDocConfigFile.ts"],"names":[],"mappings":"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"}

@@ -20,9 +20,19 @@ "use strict";

});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -33,8 +43,8 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

exports.TSDocConfigFile = void 0;
const tsdoc_1 = require("@microsoft/tsdoc");
const fs = __importStar(require("fs"));
const fs = __importStar(require("node:fs"));
const path = __importStar(require("node:path"));
const resolve = __importStar(require("resolve"));
const path = __importStar(require("path"));
const ajv_1 = __importDefault(require("ajv"));
const jju = __importStar(require("jju"));
const tsdoc_1 = require("@microsoft/tsdoc");
const ajv = new ajv_1.default({ verbose: true });

@@ -41,0 +51,0 @@ function initializeSchemaValidator() {

@@ -1,1 +0,1 @@

{"version":3,"file":"TSDocConfigFile.js","sourceRoot":"","sources":["../src/TSDocConfigFile.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport {\r\n TSDocTagDefinition,\r\n TSDocTagSyntaxKind,\r\n type TSDocConfiguration,\r\n ParserMessageLog,\r\n TSDocMessageId,\r\n ParserMessage,\r\n TextRange,\r\n type IParserMessageParameters,\r\n type ITSDocTagDefinitionParameters\r\n} from '@microsoft/tsdoc';\r\nimport * as fs from 'fs';\r\nimport * as resolve from 'resolve';\r\nimport * as path from 'path';\r\nimport type * as AjvTypes from 'ajv';\r\nimport Ajv from 'ajv';\r\nimport * as jju from 'jju';\r\n\r\nconst ajv: Ajv = new Ajv({ verbose: true });\r\n\r\nfunction initializeSchemaValidator(): AjvTypes.ValidateFunction {\r\n const jsonSchemaPath: string = resolve.sync('@microsoft/tsdoc/schemas/tsdoc.schema.json', {\r\n basedir: __dirname\r\n });\r\n const jsonSchemaContent: string = fs.readFileSync(jsonSchemaPath).toString();\r\n const jsonSchema: object = jju.parse(jsonSchemaContent, { mode: 'cjson' });\r\n return ajv.compile(jsonSchema);\r\n}\r\n\r\n// Warning: AJV has a fairly strange API. Each time this function is called, the function object's\r\n// properties get overwritten with the results of the latest validation. Thus we need to be careful\r\n// to read the properties before a subsequent call may occur.\r\nconst tsdocSchemaValidator: AjvTypes.ValidateFunction = initializeSchemaValidator();\r\n\r\ninterface ITagConfigJson {\r\n tagName: string;\r\n syntaxKind: 'inline' | 'block' | 'modifier';\r\n allowMultiple?: boolean;\r\n}\r\n\r\ninterface IConfigJson {\r\n $schema: string;\r\n extends?: string[];\r\n noStandardTags?: boolean;\r\n tagDefinitions?: ITagConfigJson[];\r\n supportForTags?: { [tagName: string]: boolean };\r\n supportedHtmlElements?: string[];\r\n reportUnsupportedHtmlElements?: boolean;\r\n}\r\n\r\n/**\r\n * Represents an individual `tsdoc.json` file.\r\n *\r\n * @public\r\n */\r\nexport class TSDocConfigFile {\r\n public static readonly FILENAME: string = 'tsdoc.json';\r\n public static readonly CURRENT_SCHEMA_URL: string =\r\n 'https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json';\r\n\r\n /**\r\n * A queryable log that reports warnings and error messages that occurred during parsing.\r\n */\r\n public readonly log: ParserMessageLog;\r\n\r\n private readonly _extendsFiles: TSDocConfigFile[];\r\n private _filePath: string;\r\n private _fileNotFound: boolean;\r\n private _fileMTime: number;\r\n private _hasErrors: boolean;\r\n private _tsdocSchema: string;\r\n private readonly _extendsPaths: string[];\r\n private _noStandardTags: boolean | undefined;\r\n private readonly _tagDefinitions: TSDocTagDefinition[];\r\n private readonly _tagDefinitionNames: Set<string>;\r\n private readonly _supportForTags: Map<string, boolean>;\r\n private _supportedHtmlElements: Set<string> | undefined;\r\n private _reportUnsupportedHtmlElements: boolean | undefined;\r\n\r\n private constructor() {\r\n this.log = new ParserMessageLog();\r\n\r\n this._extendsFiles = [];\r\n this._filePath = '';\r\n this._fileNotFound = false;\r\n this._hasErrors = false;\r\n this._fileMTime = 0;\r\n this._tsdocSchema = '';\r\n this._extendsPaths = [];\r\n this._noStandardTags = undefined;\r\n this._tagDefinitions = [];\r\n this._tagDefinitionNames = new Set();\r\n this._supportForTags = new Map();\r\n }\r\n\r\n /**\r\n * Other config files that this file extends from.\r\n */\r\n public get extendsFiles(): ReadonlyArray<TSDocConfigFile> {\r\n return this._extendsFiles;\r\n }\r\n\r\n /**\r\n * The full path of the file that was attempted to load, or an empty string if the configuration was\r\n * loaded from a source that is not a file.\r\n */\r\n public get filePath(): string {\r\n return this._filePath;\r\n }\r\n\r\n /**\r\n * If true, then the TSDocConfigFile object contains an empty state, because the `tsdoc.json` file\r\n * was not found by the loader.\r\n *\r\n * @remarks\r\n * A missing \"tsdoc.json\" file is not considered an error. It simply means that the defaults will be used.\r\n */\r\n public get fileNotFound(): boolean {\r\n return this._fileNotFound;\r\n }\r\n\r\n /**\r\n * If true, then at least one error was encountered while loading this file or one of its \"extends\" files.\r\n *\r\n * @remarks\r\n * You can use {@link TSDocConfigFile.getErrorSummary} to report these errors.\r\n *\r\n * The individual messages can be retrieved from the {@link TSDocConfigFile.log} property of each `TSDocConfigFile`\r\n * object (including the {@link TSDocConfigFile.extendsFiles} tree).\r\n */\r\n public get hasErrors(): boolean {\r\n return this._hasErrors;\r\n }\r\n\r\n /**\r\n * The `$schema` field from the `tsdoc.json` file.\r\n */\r\n public get tsdocSchema(): string {\r\n return this._tsdocSchema;\r\n }\r\n\r\n /**\r\n * The `extends` field from the `tsdoc.json` file. For the parsed file contents,\r\n * use the `extendsFiles` property instead.\r\n */\r\n public get extendsPaths(): ReadonlyArray<string> {\r\n return this._extendsPaths;\r\n }\r\n\r\n /**\r\n * By default, the config file loader will predefine all of the standardized TSDoc tags. To disable this and\r\n * start with a completely empty configuration, set `noStandardTags` to true.\r\n *\r\n * @remarks\r\n * If a config file uses `\"extends\"` to include settings from base config files, then its setting will\r\n * override any settings from the base config files. If `\"noStandardTags\"` is not specified, then this\r\n * property will be `undefined`. The config files are applied in the order they are processed (a depth-first\r\n * traversal of the `\"extends\"` references), and files processed later can override earlier files.\r\n * If no config file specifies `noStandardTags` then the default value is `false`.\r\n */\r\n public get noStandardTags(): boolean | undefined {\r\n return this._noStandardTags;\r\n }\r\n\r\n public set noStandardTags(value: boolean | undefined) {\r\n this._noStandardTags = value;\r\n }\r\n\r\n public get tagDefinitions(): ReadonlyArray<TSDocTagDefinition> {\r\n return this._tagDefinitions;\r\n }\r\n\r\n public get supportForTags(): ReadonlyMap<string, boolean> {\r\n return this._supportForTags;\r\n }\r\n\r\n public get supportedHtmlElements(): ReadonlyArray<string> | undefined {\r\n return this._supportedHtmlElements && Array.from(this._supportedHtmlElements);\r\n }\r\n\r\n public get reportUnsupportedHtmlElements(): boolean | undefined {\r\n return this._reportUnsupportedHtmlElements;\r\n }\r\n\r\n public set reportUnsupportedHtmlElements(value: boolean | undefined) {\r\n this._reportUnsupportedHtmlElements = value;\r\n }\r\n\r\n /**\r\n * Removes all items from the `tagDefinitions` array.\r\n */\r\n public clearTagDefinitions(): void {\r\n this._tagDefinitions.length = 0;\r\n this._tagDefinitionNames.clear();\r\n }\r\n\r\n /**\r\n * Adds a new item to the `tagDefinitions` array.\r\n */\r\n public addTagDefinition(parameters: ITSDocTagDefinitionParameters): void {\r\n // This validates the tag name\r\n const tagDefinition: TSDocTagDefinition = new TSDocTagDefinition(parameters);\r\n\r\n if (this._tagDefinitionNames.has(tagDefinition.tagNameWithUpperCase)) {\r\n throw new Error(`A tag definition was already added with the tag name \"${parameters.tagName}\"`);\r\n }\r\n this._tagDefinitionNames.add(tagDefinition.tagName);\r\n\r\n this._tagDefinitions.push(tagDefinition);\r\n }\r\n\r\n // Similar to addTagDefinition() but reports errors using _reportError()\r\n private _addTagDefinitionForLoad(parameters: ITSDocTagDefinitionParameters): void {\r\n let tagDefinition: TSDocTagDefinition;\r\n try {\r\n // This validates the tag name\r\n tagDefinition = new TSDocTagDefinition(parameters);\r\n } catch (error) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileInvalidTagName,\r\n messageText: error.message,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n if (this._tagDefinitionNames.has(tagDefinition.tagNameWithUpperCase)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileDuplicateTagName,\r\n messageText: `The \"tagDefinitions\" field specifies more than one tag with the name \"${parameters.tagName}\"`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n this._tagDefinitionNames.add(tagDefinition.tagNameWithUpperCase);\r\n\r\n this._tagDefinitions.push(tagDefinition);\r\n }\r\n\r\n /**\r\n * Adds a new item to the `supportedHtmlElements` array.\r\n */\r\n public addSupportedHtmlElement(htmlElement: string): void {\r\n if (!this._supportedHtmlElements) {\r\n this._supportedHtmlElements = new Set();\r\n }\r\n this._supportedHtmlElements.add(htmlElement);\r\n }\r\n\r\n /**\r\n * Removes the explicit list of allowed html elements.\r\n */\r\n public clearSupportedHtmlElements(): void {\r\n this._supportedHtmlElements = undefined;\r\n }\r\n\r\n /**\r\n * Removes all entries from the \"supportForTags\" map.\r\n */\r\n public clearSupportForTags(): void {\r\n this._supportForTags.clear();\r\n }\r\n\r\n /**\r\n * Sets an entry in the \"supportForTags\" map.\r\n */\r\n public setSupportForTag(tagName: string, supported: boolean): void {\r\n TSDocTagDefinition.validateTSDocTagName(tagName);\r\n this._supportForTags.set(tagName, supported);\r\n }\r\n\r\n /**\r\n * This can be used for cache eviction. It returns true if the modification timestamp has changed for\r\n * any of the files that were read when loading this `TSDocConfigFile`, which indicates that the file should be\r\n * reloaded. It does not consider cases where `TSDocConfigFile.fileNotFound` was `true`.\r\n *\r\n * @remarks\r\n * This can be used for cache eviction. An example eviction strategy might be like this:\r\n *\r\n * - call `checkForModifiedFiles()` once per second, and reload the configuration if it returns true\r\n *\r\n * - otherwise, reload the configuration when it is more than 10 seconds old (to handle less common cases such\r\n * as creation of a missing file, or creation of a file at an earlier location in the search path).\r\n */\r\n public checkForModifiedFiles(): boolean {\r\n if (this._checkForModifiedFile()) {\r\n return true;\r\n }\r\n for (const extendsFile of this.extendsFiles) {\r\n if (extendsFile.checkForModifiedFiles()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks the last modification time for `TSDocConfigFile.filePath` and returns `true` if it has changed\r\n * since the file was loaded. If the file is missing, this returns `false`. If the timestamp cannot be read,\r\n * then this returns `true`.\r\n */\r\n private _checkForModifiedFile(): boolean {\r\n if (this._fileNotFound || !this._filePath) {\r\n return false;\r\n }\r\n\r\n try {\r\n const mtimeMs: number = fs.statSync(this._filePath).mtimeMs;\r\n return mtimeMs !== this._fileMTime;\r\n } catch (error) {\r\n return true;\r\n }\r\n }\r\n\r\n private _reportError(parserMessageParameters: IParserMessageParameters): void {\r\n this.log.addMessage(new ParserMessage(parserMessageParameters));\r\n this._hasErrors = true;\r\n }\r\n\r\n private _loadJsonObject(configJson: IConfigJson): void {\r\n if (configJson.$schema !== TSDocConfigFile.CURRENT_SCHEMA_URL) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnsupportedSchema,\r\n messageText: `Unsupported JSON \"$schema\" value; expecting \"${TSDocConfigFile.CURRENT_SCHEMA_URL}\"`,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n const success: boolean = tsdocSchemaValidator(configJson) as boolean;\r\n\r\n if (!success) {\r\n const description: string = ajv.errorsText(tsdocSchemaValidator.errors);\r\n\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileSchemaError,\r\n messageText: 'Error loading config file: ' + description,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._tsdocSchema = configJson.$schema;\r\n if (configJson.extends) {\r\n this._extendsPaths.push(...configJson.extends);\r\n }\r\n\r\n this.noStandardTags = configJson.noStandardTags;\r\n\r\n for (const jsonTagDefinition of configJson.tagDefinitions || []) {\r\n let syntaxKind: TSDocTagSyntaxKind;\r\n switch (jsonTagDefinition.syntaxKind) {\r\n case 'inline':\r\n syntaxKind = TSDocTagSyntaxKind.InlineTag;\r\n break;\r\n case 'block':\r\n syntaxKind = TSDocTagSyntaxKind.BlockTag;\r\n break;\r\n case 'modifier':\r\n syntaxKind = TSDocTagSyntaxKind.ModifierTag;\r\n break;\r\n default:\r\n // The JSON schema should have caught this error\r\n throw new Error('Unexpected tag kind');\r\n }\r\n\r\n this._addTagDefinitionForLoad({\r\n tagName: jsonTagDefinition.tagName,\r\n syntaxKind: syntaxKind,\r\n allowMultiple: jsonTagDefinition.allowMultiple\r\n });\r\n }\r\n\r\n if (configJson.supportedHtmlElements) {\r\n this._supportedHtmlElements = new Set();\r\n for (const htmlElement of configJson.supportedHtmlElements) {\r\n this.addSupportedHtmlElement(htmlElement);\r\n }\r\n }\r\n\r\n this._reportUnsupportedHtmlElements = configJson.reportUnsupportedHtmlElements;\r\n\r\n if (configJson.supportForTags) {\r\n for (const tagName of Object.keys(configJson.supportForTags)) {\r\n const supported: boolean = configJson.supportForTags[tagName];\r\n\r\n this._supportForTags.set(tagName, supported);\r\n }\r\n }\r\n }\r\n\r\n private _loadWithExtends(\r\n configFilePath: string,\r\n referencingConfigFile: TSDocConfigFile | undefined,\r\n alreadyVisitedPaths: Set<string>\r\n ): void {\r\n // In case an exception is thrown, start by assuming that the file was not found; we'll revise\r\n // this later upon success\r\n this._fileNotFound = true;\r\n\r\n if (!configFilePath) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileNotFound,\r\n messageText: 'File not found',\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._filePath = path.resolve(configFilePath);\r\n\r\n if (!fs.existsSync(this._filePath)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileNotFound,\r\n messageText: 'File not found',\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n const configJsonContent: string = fs.readFileSync(this._filePath).toString();\r\n this._fileMTime = fs.statSync(this._filePath).mtimeMs;\r\n\r\n this._fileNotFound = false;\r\n\r\n const hashKey: string = fs.realpathSync(this._filePath);\r\n if (referencingConfigFile && alreadyVisitedPaths.has(hashKey)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileCyclicExtends,\r\n messageText: `Circular reference encountered for \"extends\" field of \"${referencingConfigFile.filePath}\"`,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n alreadyVisitedPaths.add(hashKey);\r\n\r\n let configJson: IConfigJson;\r\n try {\r\n configJson = jju.parse(configJsonContent, { mode: 'cjson' });\r\n } catch (e) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigInvalidJson,\r\n messageText: 'Error parsing JSON input: ' + e.message,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._loadJsonObject(configJson);\r\n\r\n const configFileFolder: string = path.dirname(this.filePath);\r\n\r\n for (const extendsField of this.extendsPaths) {\r\n let resolvedExtendsPath: string;\r\n try {\r\n resolvedExtendsPath = resolve.sync(extendsField, { basedir: configFileFolder });\r\n } catch (e) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnresolvedExtends,\r\n messageText: `Unable to resolve \"extends\" reference to \"${extendsField}\": ` + e.message,\r\n textRange: TextRange.empty\r\n });\r\n\r\n return;\r\n }\r\n\r\n const baseConfigFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n baseConfigFile._loadWithExtends(resolvedExtendsPath, this, alreadyVisitedPaths);\r\n\r\n if (baseConfigFile.fileNotFound) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnresolvedExtends,\r\n messageText: `Unable to resolve \"extends\" reference to \"${extendsField}\"`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n\r\n this._extendsFiles.push(baseConfigFile);\r\n\r\n if (baseConfigFile.hasErrors) {\r\n this._hasErrors = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * For the given folder, look for the relevant tsdoc.json file (if any), and return its path.\r\n *\r\n * @param folderPath - the path to a folder where the search should start\r\n * @returns the (possibly relative) path to tsdoc.json, or an empty string if not found\r\n */\r\n public static findConfigPathForFolder(folderPath: string): string {\r\n if (folderPath) {\r\n let foundFolder: string = folderPath;\r\n for (;;) {\r\n const tsconfigJsonPath: string = path.join(foundFolder, 'tsconfig.json');\r\n if (fs.existsSync(tsconfigJsonPath)) {\r\n // Stop when we reach a folder containing tsconfig.json\r\n return path.join(foundFolder, TSDocConfigFile.FILENAME);\r\n }\r\n const packageJsonPath: string = path.join(foundFolder, 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n // Stop when we reach a folder containing package.json; this avoids crawling out of the current package\r\n return path.join(foundFolder, TSDocConfigFile.FILENAME);\r\n }\r\n\r\n const previousFolder: string = foundFolder;\r\n foundFolder = path.dirname(foundFolder);\r\n\r\n if (!foundFolder || foundFolder === previousFolder) {\r\n // Give up if we reach the filesystem root directory\r\n break;\r\n }\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Calls `TSDocConfigFile.findConfigPathForFolder()` to find the relevant tsdoc.json config file, if one exists.\r\n * Then calls `TSDocConfigFile.findConfigPathForFolder()` to return the loaded result.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n *\r\n * @param folderPath - the path to a folder where the search should start\r\n */\r\n public static loadForFolder(folderPath: string): TSDocConfigFile {\r\n const rootConfigPath: string = TSDocConfigFile.findConfigPathForFolder(folderPath);\r\n return TSDocConfigFile.loadFile(rootConfigPath);\r\n }\r\n\r\n /**\r\n * Loads the specified tsdoc.json and any base files that it refers to using the \"extends\" option.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n *\r\n * @param tsdocJsonFilePath - the path to the tsdoc.json config file\r\n */\r\n public static loadFile(tsdocJsonFilePath: string): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n const alreadyVisitedPaths: Set<string> = new Set<string>();\r\n configFile._loadWithExtends(tsdocJsonFilePath, undefined, alreadyVisitedPaths);\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Loads the object state from a JSON-serializable object as produced by {@link TSDocConfigFile.saveToObject}.\r\n *\r\n * @remarks\r\n * The serialized object has the same structure as `tsdoc.json`; however the `\"extends\"` field is not allowed.\r\n *\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public static loadFromObject(jsonObject: unknown): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n configFile._loadJsonObject(jsonObject as IConfigJson);\r\n\r\n if (configFile.extendsPaths.length > 0) {\r\n throw new Error('The \"extends\" field cannot be used with TSDocConfigFile.loadFromObject()');\r\n }\r\n\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Initializes a TSDocConfigFile object using the state from the provided `TSDocConfiguration` object.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public static loadFromParser(configuration: TSDocConfiguration): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n // The standard tags will be mixed together with custom definitions,\r\n // so set noStandardTags=true to avoid defining them twice.\r\n configFile.noStandardTags = true;\r\n\r\n for (const tagDefinition of configuration.tagDefinitions) {\r\n configFile.addTagDefinition({\r\n syntaxKind: tagDefinition.syntaxKind,\r\n tagName: tagDefinition.tagName,\r\n allowMultiple: tagDefinition.allowMultiple\r\n });\r\n }\r\n\r\n for (const tagDefinition of configuration.supportedTagDefinitions) {\r\n configFile.setSupportForTag(tagDefinition.tagName, true);\r\n }\r\n\r\n for (const htmlElement of configuration.supportedHtmlElements) {\r\n configFile.addSupportedHtmlElement(htmlElement);\r\n }\r\n\r\n configFile.reportUnsupportedHtmlElements = configuration.validation.reportUnsupportedHtmlElements;\r\n\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Writes the config file content to a JSON file with the specified file path.\r\n */\r\n public saveFile(jsonFilePath: string): void {\r\n const jsonObject: unknown = this.saveToObject();\r\n const jsonContent: string = JSON.stringify(jsonObject, undefined, 2);\r\n fs.writeFileSync(jsonFilePath, jsonContent);\r\n }\r\n\r\n /**\r\n * Writes the object state into a JSON-serializable object.\r\n */\r\n public saveToObject(): unknown {\r\n const configJson: IConfigJson = {\r\n $schema: TSDocConfigFile.CURRENT_SCHEMA_URL\r\n };\r\n\r\n if (this.noStandardTags !== undefined) {\r\n configJson.noStandardTags = this.noStandardTags;\r\n }\r\n\r\n if (this.tagDefinitions.length > 0) {\r\n configJson.tagDefinitions = [];\r\n for (const tagDefinition of this.tagDefinitions) {\r\n configJson.tagDefinitions.push(TSDocConfigFile._serializeTagDefinition(tagDefinition));\r\n }\r\n }\r\n\r\n if (this.supportForTags.size > 0) {\r\n configJson.supportForTags = {};\r\n this.supportForTags.forEach((supported, tagName) => {\r\n configJson.supportForTags![tagName] = supported;\r\n });\r\n }\r\n\r\n if (this.supportedHtmlElements) {\r\n configJson.supportedHtmlElements = [...this.supportedHtmlElements];\r\n }\r\n\r\n if (this._reportUnsupportedHtmlElements !== undefined) {\r\n configJson.reportUnsupportedHtmlElements = this._reportUnsupportedHtmlElements;\r\n }\r\n\r\n return configJson;\r\n }\r\n\r\n private static _serializeTagDefinition(tagDefinition: TSDocTagDefinition): ITagConfigJson {\r\n let syntaxKind: 'inline' | 'block' | 'modifier' | undefined;\r\n switch (tagDefinition.syntaxKind) {\r\n case TSDocTagSyntaxKind.InlineTag:\r\n syntaxKind = 'inline';\r\n break;\r\n case TSDocTagSyntaxKind.BlockTag:\r\n syntaxKind = 'block';\r\n break;\r\n case TSDocTagSyntaxKind.ModifierTag:\r\n syntaxKind = 'modifier';\r\n break;\r\n default:\r\n throw new Error('Unimplemented TSDocTagSyntaxKind');\r\n }\r\n\r\n const tagConfigJson: ITagConfigJson = {\r\n tagName: tagDefinition.tagName,\r\n syntaxKind\r\n };\r\n if (tagDefinition.allowMultiple) {\r\n tagConfigJson.allowMultiple = true;\r\n }\r\n return tagConfigJson;\r\n }\r\n\r\n /**\r\n * Returns a report of any errors that occurred while attempting to load this file or any files\r\n * referenced via the \"extends\" field.\r\n *\r\n * @remarks\r\n * Use {@link TSDocConfigFile.hasErrors} to determine whether any errors occurred.\r\n */\r\n public getErrorSummary(): string {\r\n if (!this._hasErrors) {\r\n return 'No errors.';\r\n }\r\n\r\n let result: string = '';\r\n\r\n if (this.log.messages.length > 0) {\r\n const errorNoun: string = this.log.messages.length > 1 ? 'Errors' : 'Error';\r\n if (this.filePath) {\r\n result += `${errorNoun} encountered for ${this.filePath}:\\n`;\r\n } else {\r\n result += `${errorNoun} encountered when loading TSDoc configuration:\\n`;\r\n }\r\n\r\n for (const message of this.log.messages) {\r\n result += ` ${message.text}\\n`;\r\n }\r\n }\r\n\r\n for (const extendsFile of this.extendsFiles) {\r\n if (extendsFile.hasErrors) {\r\n if (result !== '') {\r\n result += '\\n';\r\n }\r\n result += extendsFile.getErrorSummary();\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Applies the settings from this config file to a TSDoc parser configuration.\r\n * Any `extendsFile` settings will also applied.\r\n *\r\n * @remarks\r\n * Additional validation is performed during this operation. The caller is expected to check for errors\r\n * using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log}, or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public configureParser(configuration: TSDocConfiguration): void {\r\n if (this._getNoStandardTagsWithExtends()) {\r\n // Do not define standard tags\r\n configuration.clear(true);\r\n } else {\r\n // Define standard tags (the default behavior)\r\n configuration.clear(false);\r\n }\r\n\r\n this.updateParser(configuration);\r\n }\r\n\r\n /**\r\n * This is the same as {@link configureParser}, but it preserves any previous state.\r\n *\r\n * @remarks\r\n * Additional validation is performed during this operation. The caller is expected to check for errors\r\n * using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log}, or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public updateParser(configuration: TSDocConfiguration): void {\r\n // First apply the base config files\r\n for (const extendsFile of this.extendsFiles) {\r\n extendsFile.updateParser(configuration);\r\n }\r\n\r\n // Then apply this one\r\n for (const tagDefinition of this.tagDefinitions) {\r\n configuration.addTagDefinition(tagDefinition);\r\n }\r\n\r\n this.supportForTags.forEach((supported: boolean, tagName: string) => {\r\n const tagDefinition: TSDocTagDefinition | undefined = configuration.tryGetTagDefinition(tagName);\r\n if (tagDefinition) {\r\n // Note that setSupportForTag() automatically enables configuration.validation.reportUnsupportedTags\r\n configuration.setSupportForTag(tagDefinition, supported);\r\n } else {\r\n // Note that this validation may depend partially on the preexisting state of the TSDocConfiguration\r\n // object, so it cannot be performed during the TSConfigFile.loadFile() stage.\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUndefinedTag,\r\n messageText: `The \"supportForTags\" field refers to an undefined tag ${JSON.stringify(tagName)}.`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n });\r\n\r\n if (this.supportedHtmlElements) {\r\n configuration.setSupportedHtmlElements([...this.supportedHtmlElements]);\r\n }\r\n\r\n if (this._reportUnsupportedHtmlElements === false) {\r\n configuration.validation.reportUnsupportedHtmlElements = false;\r\n } else if (this._reportUnsupportedHtmlElements === true) {\r\n configuration.validation.reportUnsupportedHtmlElements = true;\r\n }\r\n }\r\n\r\n private _getNoStandardTagsWithExtends(): boolean {\r\n if (this.noStandardTags !== undefined) {\r\n return this.noStandardTags;\r\n }\r\n\r\n // This config file does not specify \"noStandardTags\", so consider any base files referenced using \"extends\"\r\n let result: boolean | undefined = undefined;\r\n for (const extendsFile of this.extendsFiles) {\r\n const extendedValue: boolean | undefined = extendsFile._getNoStandardTagsWithExtends();\r\n if (extendedValue !== undefined) {\r\n result = extendedValue;\r\n }\r\n }\r\n\r\n if (result === undefined) {\r\n // If no config file specifies noStandardTags, then it defaults to false\r\n result = false;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
{"version":3,"file":"TSDocConfigFile.js","sourceRoot":"","sources":["../src/TSDocConfigFile.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as fs from 'node:fs';\r\nimport * as path from 'node:path';\r\n\r\nimport * as resolve from 'resolve';\r\nimport type * as AjvTypes from 'ajv';\r\nimport Ajv from 'ajv';\r\nimport * as jju from 'jju';\r\n\r\nimport {\r\n TSDocTagDefinition,\r\n TSDocTagSyntaxKind,\r\n type TSDocConfiguration,\r\n ParserMessageLog,\r\n TSDocMessageId,\r\n ParserMessage,\r\n TextRange,\r\n type IParserMessageParameters,\r\n type ITSDocTagDefinitionParameters\r\n} from '@microsoft/tsdoc';\r\n\r\nconst ajv: Ajv = new Ajv({ verbose: true });\r\n\r\nfunction initializeSchemaValidator(): AjvTypes.ValidateFunction {\r\n const jsonSchemaPath: string = resolve.sync('@microsoft/tsdoc/schemas/tsdoc.schema.json', {\r\n basedir: __dirname\r\n });\r\n const jsonSchemaContent: string = fs.readFileSync(jsonSchemaPath).toString();\r\n const jsonSchema: object = jju.parse(jsonSchemaContent, { mode: 'cjson' });\r\n return ajv.compile(jsonSchema);\r\n}\r\n\r\n// Warning: AJV has a fairly strange API. Each time this function is called, the function object's\r\n// properties get overwritten with the results of the latest validation. Thus we need to be careful\r\n// to read the properties before a subsequent call may occur.\r\nconst tsdocSchemaValidator: AjvTypes.ValidateFunction = initializeSchemaValidator();\r\n\r\ninterface ITagConfigJson {\r\n tagName: string;\r\n syntaxKind: 'inline' | 'block' | 'modifier';\r\n allowMultiple?: boolean;\r\n}\r\n\r\ninterface IConfigJson {\r\n $schema: string;\r\n extends?: string[];\r\n noStandardTags?: boolean;\r\n tagDefinitions?: ITagConfigJson[];\r\n supportForTags?: { [tagName: string]: boolean };\r\n supportedHtmlElements?: string[];\r\n reportUnsupportedHtmlElements?: boolean;\r\n}\r\n\r\n/**\r\n * Represents an individual `tsdoc.json` file.\r\n *\r\n * @public\r\n */\r\nexport class TSDocConfigFile {\r\n public static readonly FILENAME: string = 'tsdoc.json';\r\n public static readonly CURRENT_SCHEMA_URL: string =\r\n 'https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json';\r\n\r\n /**\r\n * A queryable log that reports warnings and error messages that occurred during parsing.\r\n */\r\n public readonly log: ParserMessageLog;\r\n\r\n private readonly _extendsFiles: TSDocConfigFile[];\r\n private _filePath: string;\r\n private _fileNotFound: boolean;\r\n private _fileMTime: number;\r\n private _hasErrors: boolean;\r\n private _tsdocSchema: string;\r\n private readonly _extendsPaths: string[];\r\n private _noStandardTags: boolean | undefined;\r\n private readonly _tagDefinitions: TSDocTagDefinition[];\r\n private readonly _tagDefinitionNames: Set<string>;\r\n private readonly _supportForTags: Map<string, boolean>;\r\n private _supportedHtmlElements: Set<string> | undefined;\r\n private _reportUnsupportedHtmlElements: boolean | undefined;\r\n\r\n private constructor() {\r\n this.log = new ParserMessageLog();\r\n\r\n this._extendsFiles = [];\r\n this._filePath = '';\r\n this._fileNotFound = false;\r\n this._hasErrors = false;\r\n this._fileMTime = 0;\r\n this._tsdocSchema = '';\r\n this._extendsPaths = [];\r\n this._noStandardTags = undefined;\r\n this._tagDefinitions = [];\r\n this._tagDefinitionNames = new Set();\r\n this._supportForTags = new Map();\r\n }\r\n\r\n /**\r\n * Other config files that this file extends from.\r\n */\r\n public get extendsFiles(): ReadonlyArray<TSDocConfigFile> {\r\n return this._extendsFiles;\r\n }\r\n\r\n /**\r\n * The full path of the file that was attempted to load, or an empty string if the configuration was\r\n * loaded from a source that is not a file.\r\n */\r\n public get filePath(): string {\r\n return this._filePath;\r\n }\r\n\r\n /**\r\n * If true, then the TSDocConfigFile object contains an empty state, because the `tsdoc.json` file\r\n * was not found by the loader.\r\n *\r\n * @remarks\r\n * A missing \"tsdoc.json\" file is not considered an error. It simply means that the defaults will be used.\r\n */\r\n public get fileNotFound(): boolean {\r\n return this._fileNotFound;\r\n }\r\n\r\n /**\r\n * If true, then at least one error was encountered while loading this file or one of its \"extends\" files.\r\n *\r\n * @remarks\r\n * You can use {@link TSDocConfigFile.getErrorSummary} to report these errors.\r\n *\r\n * The individual messages can be retrieved from the {@link TSDocConfigFile.log} property of each `TSDocConfigFile`\r\n * object (including the {@link TSDocConfigFile.extendsFiles} tree).\r\n */\r\n public get hasErrors(): boolean {\r\n return this._hasErrors;\r\n }\r\n\r\n /**\r\n * The `$schema` field from the `tsdoc.json` file.\r\n */\r\n public get tsdocSchema(): string {\r\n return this._tsdocSchema;\r\n }\r\n\r\n /**\r\n * The `extends` field from the `tsdoc.json` file. For the parsed file contents,\r\n * use the `extendsFiles` property instead.\r\n */\r\n public get extendsPaths(): ReadonlyArray<string> {\r\n return this._extendsPaths;\r\n }\r\n\r\n /**\r\n * By default, the config file loader will predefine all of the standardized TSDoc tags. To disable this and\r\n * start with a completely empty configuration, set `noStandardTags` to true.\r\n *\r\n * @remarks\r\n * If a config file uses `\"extends\"` to include settings from base config files, then its setting will\r\n * override any settings from the base config files. If `\"noStandardTags\"` is not specified, then this\r\n * property will be `undefined`. The config files are applied in the order they are processed (a depth-first\r\n * traversal of the `\"extends\"` references), and files processed later can override earlier files.\r\n * If no config file specifies `noStandardTags` then the default value is `false`.\r\n */\r\n public get noStandardTags(): boolean | undefined {\r\n return this._noStandardTags;\r\n }\r\n\r\n public set noStandardTags(value: boolean | undefined) {\r\n this._noStandardTags = value;\r\n }\r\n\r\n public get tagDefinitions(): ReadonlyArray<TSDocTagDefinition> {\r\n return this._tagDefinitions;\r\n }\r\n\r\n public get supportForTags(): ReadonlyMap<string, boolean> {\r\n return this._supportForTags;\r\n }\r\n\r\n public get supportedHtmlElements(): ReadonlyArray<string> | undefined {\r\n return this._supportedHtmlElements && Array.from(this._supportedHtmlElements);\r\n }\r\n\r\n public get reportUnsupportedHtmlElements(): boolean | undefined {\r\n return this._reportUnsupportedHtmlElements;\r\n }\r\n\r\n public set reportUnsupportedHtmlElements(value: boolean | undefined) {\r\n this._reportUnsupportedHtmlElements = value;\r\n }\r\n\r\n /**\r\n * Removes all items from the `tagDefinitions` array.\r\n */\r\n public clearTagDefinitions(): void {\r\n this._tagDefinitions.length = 0;\r\n this._tagDefinitionNames.clear();\r\n }\r\n\r\n /**\r\n * Adds a new item to the `tagDefinitions` array.\r\n */\r\n public addTagDefinition(parameters: ITSDocTagDefinitionParameters): void {\r\n // This validates the tag name\r\n const tagDefinition: TSDocTagDefinition = new TSDocTagDefinition(parameters);\r\n\r\n if (this._tagDefinitionNames.has(tagDefinition.tagNameWithUpperCase)) {\r\n throw new Error(`A tag definition was already added with the tag name \"${parameters.tagName}\"`);\r\n }\r\n this._tagDefinitionNames.add(tagDefinition.tagName);\r\n\r\n this._tagDefinitions.push(tagDefinition);\r\n }\r\n\r\n // Similar to addTagDefinition() but reports errors using _reportError()\r\n private _addTagDefinitionForLoad(parameters: ITSDocTagDefinitionParameters): void {\r\n let tagDefinition: TSDocTagDefinition;\r\n try {\r\n // This validates the tag name\r\n tagDefinition = new TSDocTagDefinition(parameters);\r\n } catch (error) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileInvalidTagName,\r\n messageText: error.message,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n if (this._tagDefinitionNames.has(tagDefinition.tagNameWithUpperCase)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileDuplicateTagName,\r\n messageText: `The \"tagDefinitions\" field specifies more than one tag with the name \"${parameters.tagName}\"`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n this._tagDefinitionNames.add(tagDefinition.tagNameWithUpperCase);\r\n\r\n this._tagDefinitions.push(tagDefinition);\r\n }\r\n\r\n /**\r\n * Adds a new item to the `supportedHtmlElements` array.\r\n */\r\n public addSupportedHtmlElement(htmlElement: string): void {\r\n if (!this._supportedHtmlElements) {\r\n this._supportedHtmlElements = new Set();\r\n }\r\n this._supportedHtmlElements.add(htmlElement);\r\n }\r\n\r\n /**\r\n * Removes the explicit list of allowed html elements.\r\n */\r\n public clearSupportedHtmlElements(): void {\r\n this._supportedHtmlElements = undefined;\r\n }\r\n\r\n /**\r\n * Removes all entries from the \"supportForTags\" map.\r\n */\r\n public clearSupportForTags(): void {\r\n this._supportForTags.clear();\r\n }\r\n\r\n /**\r\n * Sets an entry in the \"supportForTags\" map.\r\n */\r\n public setSupportForTag(tagName: string, supported: boolean): void {\r\n TSDocTagDefinition.validateTSDocTagName(tagName);\r\n this._supportForTags.set(tagName, supported);\r\n }\r\n\r\n /**\r\n * This can be used for cache eviction. It returns true if the modification timestamp has changed for\r\n * any of the files that were read when loading this `TSDocConfigFile`, which indicates that the file should be\r\n * reloaded. It does not consider cases where `TSDocConfigFile.fileNotFound` was `true`.\r\n *\r\n * @remarks\r\n * This can be used for cache eviction. An example eviction strategy might be like this:\r\n *\r\n * - call `checkForModifiedFiles()` once per second, and reload the configuration if it returns true\r\n *\r\n * - otherwise, reload the configuration when it is more than 10 seconds old (to handle less common cases such\r\n * as creation of a missing file, or creation of a file at an earlier location in the search path).\r\n */\r\n public checkForModifiedFiles(): boolean {\r\n if (this._checkForModifiedFile()) {\r\n return true;\r\n }\r\n for (const extendsFile of this.extendsFiles) {\r\n if (extendsFile.checkForModifiedFiles()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks the last modification time for `TSDocConfigFile.filePath` and returns `true` if it has changed\r\n * since the file was loaded. If the file is missing, this returns `false`. If the timestamp cannot be read,\r\n * then this returns `true`.\r\n */\r\n private _checkForModifiedFile(): boolean {\r\n if (this._fileNotFound || !this._filePath) {\r\n return false;\r\n }\r\n\r\n try {\r\n const mtimeMs: number = fs.statSync(this._filePath).mtimeMs;\r\n return mtimeMs !== this._fileMTime;\r\n } catch (error) {\r\n return true;\r\n }\r\n }\r\n\r\n private _reportError(parserMessageParameters: IParserMessageParameters): void {\r\n this.log.addMessage(new ParserMessage(parserMessageParameters));\r\n this._hasErrors = true;\r\n }\r\n\r\n private _loadJsonObject(configJson: IConfigJson): void {\r\n if (configJson.$schema !== TSDocConfigFile.CURRENT_SCHEMA_URL) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnsupportedSchema,\r\n messageText: `Unsupported JSON \"$schema\" value; expecting \"${TSDocConfigFile.CURRENT_SCHEMA_URL}\"`,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n const success: boolean = tsdocSchemaValidator(configJson) as boolean;\r\n\r\n if (!success) {\r\n const description: string = ajv.errorsText(tsdocSchemaValidator.errors);\r\n\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileSchemaError,\r\n messageText: 'Error loading config file: ' + description,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._tsdocSchema = configJson.$schema;\r\n if (configJson.extends) {\r\n this._extendsPaths.push(...configJson.extends);\r\n }\r\n\r\n this.noStandardTags = configJson.noStandardTags;\r\n\r\n for (const jsonTagDefinition of configJson.tagDefinitions || []) {\r\n let syntaxKind: TSDocTagSyntaxKind;\r\n switch (jsonTagDefinition.syntaxKind) {\r\n case 'inline':\r\n syntaxKind = TSDocTagSyntaxKind.InlineTag;\r\n break;\r\n case 'block':\r\n syntaxKind = TSDocTagSyntaxKind.BlockTag;\r\n break;\r\n case 'modifier':\r\n syntaxKind = TSDocTagSyntaxKind.ModifierTag;\r\n break;\r\n default:\r\n // The JSON schema should have caught this error\r\n throw new Error('Unexpected tag kind');\r\n }\r\n\r\n this._addTagDefinitionForLoad({\r\n tagName: jsonTagDefinition.tagName,\r\n syntaxKind: syntaxKind,\r\n allowMultiple: jsonTagDefinition.allowMultiple\r\n });\r\n }\r\n\r\n if (configJson.supportedHtmlElements) {\r\n this._supportedHtmlElements = new Set();\r\n for (const htmlElement of configJson.supportedHtmlElements) {\r\n this.addSupportedHtmlElement(htmlElement);\r\n }\r\n }\r\n\r\n this._reportUnsupportedHtmlElements = configJson.reportUnsupportedHtmlElements;\r\n\r\n if (configJson.supportForTags) {\r\n for (const tagName of Object.keys(configJson.supportForTags)) {\r\n const supported: boolean = configJson.supportForTags[tagName];\r\n\r\n this._supportForTags.set(tagName, supported);\r\n }\r\n }\r\n }\r\n\r\n private _loadWithExtends(\r\n configFilePath: string,\r\n referencingConfigFile: TSDocConfigFile | undefined,\r\n alreadyVisitedPaths: Set<string>\r\n ): void {\r\n // In case an exception is thrown, start by assuming that the file was not found; we'll revise\r\n // this later upon success\r\n this._fileNotFound = true;\r\n\r\n if (!configFilePath) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileNotFound,\r\n messageText: 'File not found',\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._filePath = path.resolve(configFilePath);\r\n\r\n if (!fs.existsSync(this._filePath)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileNotFound,\r\n messageText: 'File not found',\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n const configJsonContent: string = fs.readFileSync(this._filePath).toString();\r\n this._fileMTime = fs.statSync(this._filePath).mtimeMs;\r\n\r\n this._fileNotFound = false;\r\n\r\n const hashKey: string = fs.realpathSync(this._filePath);\r\n if (referencingConfigFile && alreadyVisitedPaths.has(hashKey)) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileCyclicExtends,\r\n messageText: `Circular reference encountered for \"extends\" field of \"${referencingConfigFile.filePath}\"`,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n alreadyVisitedPaths.add(hashKey);\r\n\r\n let configJson: IConfigJson;\r\n try {\r\n configJson = jju.parse(configJsonContent, { mode: 'cjson' });\r\n } catch (e) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigInvalidJson,\r\n messageText: 'Error parsing JSON input: ' + e.message,\r\n textRange: TextRange.empty\r\n });\r\n return;\r\n }\r\n\r\n this._loadJsonObject(configJson);\r\n\r\n const configFileFolder: string = path.dirname(this.filePath);\r\n\r\n for (const extendsField of this.extendsPaths) {\r\n let resolvedExtendsPath: string;\r\n try {\r\n resolvedExtendsPath = resolve.sync(extendsField, { basedir: configFileFolder });\r\n } catch (e) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnresolvedExtends,\r\n messageText: `Unable to resolve \"extends\" reference to \"${extendsField}\": ` + e.message,\r\n textRange: TextRange.empty\r\n });\r\n\r\n return;\r\n }\r\n\r\n const baseConfigFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n baseConfigFile._loadWithExtends(resolvedExtendsPath, this, alreadyVisitedPaths);\r\n\r\n if (baseConfigFile.fileNotFound) {\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUnresolvedExtends,\r\n messageText: `Unable to resolve \"extends\" reference to \"${extendsField}\"`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n\r\n this._extendsFiles.push(baseConfigFile);\r\n\r\n if (baseConfigFile.hasErrors) {\r\n this._hasErrors = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * For the given folder, look for the relevant tsdoc.json file (if any), and return its path.\r\n *\r\n * @param folderPath - the path to a folder where the search should start\r\n * @returns the (possibly relative) path to tsdoc.json, or an empty string if not found\r\n */\r\n public static findConfigPathForFolder(folderPath: string): string {\r\n if (folderPath) {\r\n let foundFolder: string = folderPath;\r\n for (;;) {\r\n const tsconfigJsonPath: string = path.join(foundFolder, 'tsconfig.json');\r\n if (fs.existsSync(tsconfigJsonPath)) {\r\n // Stop when we reach a folder containing tsconfig.json\r\n return path.join(foundFolder, TSDocConfigFile.FILENAME);\r\n }\r\n const packageJsonPath: string = path.join(foundFolder, 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n // Stop when we reach a folder containing package.json; this avoids crawling out of the current package\r\n return path.join(foundFolder, TSDocConfigFile.FILENAME);\r\n }\r\n\r\n const previousFolder: string = foundFolder;\r\n foundFolder = path.dirname(foundFolder);\r\n\r\n if (!foundFolder || foundFolder === previousFolder) {\r\n // Give up if we reach the filesystem root directory\r\n break;\r\n }\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Calls `TSDocConfigFile.findConfigPathForFolder()` to find the relevant tsdoc.json config file, if one exists.\r\n * Then calls `TSDocConfigFile.findConfigPathForFolder()` to return the loaded result.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n *\r\n * @param folderPath - the path to a folder where the search should start\r\n */\r\n public static loadForFolder(folderPath: string): TSDocConfigFile {\r\n const rootConfigPath: string = TSDocConfigFile.findConfigPathForFolder(folderPath);\r\n return TSDocConfigFile.loadFile(rootConfigPath);\r\n }\r\n\r\n /**\r\n * Loads the specified tsdoc.json and any base files that it refers to using the \"extends\" option.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n *\r\n * @param tsdocJsonFilePath - the path to the tsdoc.json config file\r\n */\r\n public static loadFile(tsdocJsonFilePath: string): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n const alreadyVisitedPaths: Set<string> = new Set<string>();\r\n configFile._loadWithExtends(tsdocJsonFilePath, undefined, alreadyVisitedPaths);\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Loads the object state from a JSON-serializable object as produced by {@link TSDocConfigFile.saveToObject}.\r\n *\r\n * @remarks\r\n * The serialized object has the same structure as `tsdoc.json`; however the `\"extends\"` field is not allowed.\r\n *\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public static loadFromObject(jsonObject: unknown): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n configFile._loadJsonObject(jsonObject as IConfigJson);\r\n\r\n if (configFile.extendsPaths.length > 0) {\r\n throw new Error('The \"extends\" field cannot be used with TSDocConfigFile.loadFromObject()');\r\n }\r\n\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Initializes a TSDocConfigFile object using the state from the provided `TSDocConfiguration` object.\r\n *\r\n * @remarks\r\n * This API does not report loading errors by throwing exceptions. Instead, the caller is expected to check\r\n * for errors using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log},\r\n * or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public static loadFromParser(configuration: TSDocConfiguration): TSDocConfigFile {\r\n const configFile: TSDocConfigFile = new TSDocConfigFile();\r\n\r\n // The standard tags will be mixed together with custom definitions,\r\n // so set noStandardTags=true to avoid defining them twice.\r\n configFile.noStandardTags = true;\r\n\r\n for (const tagDefinition of configuration.tagDefinitions) {\r\n configFile.addTagDefinition({\r\n syntaxKind: tagDefinition.syntaxKind,\r\n tagName: tagDefinition.tagName,\r\n allowMultiple: tagDefinition.allowMultiple\r\n });\r\n }\r\n\r\n for (const tagDefinition of configuration.supportedTagDefinitions) {\r\n configFile.setSupportForTag(tagDefinition.tagName, true);\r\n }\r\n\r\n for (const htmlElement of configuration.supportedHtmlElements) {\r\n configFile.addSupportedHtmlElement(htmlElement);\r\n }\r\n\r\n configFile.reportUnsupportedHtmlElements = configuration.validation.reportUnsupportedHtmlElements;\r\n\r\n return configFile;\r\n }\r\n\r\n /**\r\n * Writes the config file content to a JSON file with the specified file path.\r\n */\r\n public saveFile(jsonFilePath: string): void {\r\n const jsonObject: unknown = this.saveToObject();\r\n const jsonContent: string = JSON.stringify(jsonObject, undefined, 2);\r\n fs.writeFileSync(jsonFilePath, jsonContent);\r\n }\r\n\r\n /**\r\n * Writes the object state into a JSON-serializable object.\r\n */\r\n public saveToObject(): unknown {\r\n const configJson: IConfigJson = {\r\n $schema: TSDocConfigFile.CURRENT_SCHEMA_URL\r\n };\r\n\r\n if (this.noStandardTags !== undefined) {\r\n configJson.noStandardTags = this.noStandardTags;\r\n }\r\n\r\n if (this.tagDefinitions.length > 0) {\r\n configJson.tagDefinitions = [];\r\n for (const tagDefinition of this.tagDefinitions) {\r\n configJson.tagDefinitions.push(TSDocConfigFile._serializeTagDefinition(tagDefinition));\r\n }\r\n }\r\n\r\n if (this.supportForTags.size > 0) {\r\n configJson.supportForTags = {};\r\n this.supportForTags.forEach((supported, tagName) => {\r\n configJson.supportForTags![tagName] = supported;\r\n });\r\n }\r\n\r\n if (this.supportedHtmlElements) {\r\n configJson.supportedHtmlElements = [...this.supportedHtmlElements];\r\n }\r\n\r\n if (this._reportUnsupportedHtmlElements !== undefined) {\r\n configJson.reportUnsupportedHtmlElements = this._reportUnsupportedHtmlElements;\r\n }\r\n\r\n return configJson;\r\n }\r\n\r\n private static _serializeTagDefinition(tagDefinition: TSDocTagDefinition): ITagConfigJson {\r\n let syntaxKind: 'inline' | 'block' | 'modifier' | undefined;\r\n switch (tagDefinition.syntaxKind) {\r\n case TSDocTagSyntaxKind.InlineTag:\r\n syntaxKind = 'inline';\r\n break;\r\n case TSDocTagSyntaxKind.BlockTag:\r\n syntaxKind = 'block';\r\n break;\r\n case TSDocTagSyntaxKind.ModifierTag:\r\n syntaxKind = 'modifier';\r\n break;\r\n default:\r\n throw new Error('Unimplemented TSDocTagSyntaxKind');\r\n }\r\n\r\n const tagConfigJson: ITagConfigJson = {\r\n tagName: tagDefinition.tagName,\r\n syntaxKind\r\n };\r\n if (tagDefinition.allowMultiple) {\r\n tagConfigJson.allowMultiple = true;\r\n }\r\n return tagConfigJson;\r\n }\r\n\r\n /**\r\n * Returns a report of any errors that occurred while attempting to load this file or any files\r\n * referenced via the \"extends\" field.\r\n *\r\n * @remarks\r\n * Use {@link TSDocConfigFile.hasErrors} to determine whether any errors occurred.\r\n */\r\n public getErrorSummary(): string {\r\n if (!this._hasErrors) {\r\n return 'No errors.';\r\n }\r\n\r\n let result: string = '';\r\n\r\n if (this.log.messages.length > 0) {\r\n const errorNoun: string = this.log.messages.length > 1 ? 'Errors' : 'Error';\r\n if (this.filePath) {\r\n result += `${errorNoun} encountered for ${this.filePath}:\\n`;\r\n } else {\r\n result += `${errorNoun} encountered when loading TSDoc configuration:\\n`;\r\n }\r\n\r\n for (const message of this.log.messages) {\r\n result += ` ${message.text}\\n`;\r\n }\r\n }\r\n\r\n for (const extendsFile of this.extendsFiles) {\r\n if (extendsFile.hasErrors) {\r\n if (result !== '') {\r\n result += '\\n';\r\n }\r\n result += extendsFile.getErrorSummary();\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Applies the settings from this config file to a TSDoc parser configuration.\r\n * Any `extendsFile` settings will also applied.\r\n *\r\n * @remarks\r\n * Additional validation is performed during this operation. The caller is expected to check for errors\r\n * using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log}, or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public configureParser(configuration: TSDocConfiguration): void {\r\n if (this._getNoStandardTagsWithExtends()) {\r\n // Do not define standard tags\r\n configuration.clear(true);\r\n } else {\r\n // Define standard tags (the default behavior)\r\n configuration.clear(false);\r\n }\r\n\r\n this.updateParser(configuration);\r\n }\r\n\r\n /**\r\n * This is the same as {@link configureParser}, but it preserves any previous state.\r\n *\r\n * @remarks\r\n * Additional validation is performed during this operation. The caller is expected to check for errors\r\n * using {@link TSDocConfigFile.hasErrors}, {@link TSDocConfigFile.log}, or {@link TSDocConfigFile.getErrorSummary}.\r\n */\r\n public updateParser(configuration: TSDocConfiguration): void {\r\n // First apply the base config files\r\n for (const extendsFile of this.extendsFiles) {\r\n extendsFile.updateParser(configuration);\r\n }\r\n\r\n // Then apply this one\r\n for (const tagDefinition of this.tagDefinitions) {\r\n configuration.addTagDefinition(tagDefinition);\r\n }\r\n\r\n this.supportForTags.forEach((supported: boolean, tagName: string) => {\r\n const tagDefinition: TSDocTagDefinition | undefined = configuration.tryGetTagDefinition(tagName);\r\n if (tagDefinition) {\r\n // Note that setSupportForTag() automatically enables configuration.validation.reportUnsupportedTags\r\n configuration.setSupportForTag(tagDefinition, supported);\r\n } else {\r\n // Note that this validation may depend partially on the preexisting state of the TSDocConfiguration\r\n // object, so it cannot be performed during the TSConfigFile.loadFile() stage.\r\n this._reportError({\r\n messageId: TSDocMessageId.ConfigFileUndefinedTag,\r\n messageText: `The \"supportForTags\" field refers to an undefined tag ${JSON.stringify(tagName)}.`,\r\n textRange: TextRange.empty\r\n });\r\n }\r\n });\r\n\r\n if (this.supportedHtmlElements) {\r\n configuration.setSupportedHtmlElements([...this.supportedHtmlElements]);\r\n }\r\n\r\n if (this._reportUnsupportedHtmlElements === false) {\r\n configuration.validation.reportUnsupportedHtmlElements = false;\r\n } else if (this._reportUnsupportedHtmlElements === true) {\r\n configuration.validation.reportUnsupportedHtmlElements = true;\r\n }\r\n }\r\n\r\n private _getNoStandardTagsWithExtends(): boolean {\r\n if (this.noStandardTags !== undefined) {\r\n return this.noStandardTags;\r\n }\r\n\r\n // This config file does not specify \"noStandardTags\", so consider any base files referenced using \"extends\"\r\n let result: boolean | undefined = undefined;\r\n for (const extendsFile of this.extendsFiles) {\r\n const extendedValue: boolean | undefined = extendsFile._getNoStandardTagsWithExtends();\r\n if (extendedValue !== undefined) {\r\n result = extendedValue;\r\n }\r\n }\r\n\r\n if (result === undefined) {\r\n // If no config file specifies noStandardTags, then it defaults to false\r\n result = false;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
{
"name": "@microsoft/tsdoc-config",
"version": "0.17.1",
"version": "0.18.0",
"description": "A loader for the tsdoc.json file",

@@ -27,13 +27,10 @@ "keywords": [

"resolve": "~1.22.2",
"@microsoft/tsdoc": "0.15.1"
"@microsoft/tsdoc": "0.16.0"
},
"devDependencies": {
"@rushstack/heft-node-rig": "~2.6.11",
"@rushstack/heft": "^0.66.13",
"@types/heft-jest": "1.0.3",
"@rushstack/heft": "1.1.1",
"@types/jju": "1.4.2",
"@types/node": "14.18.36",
"@types/resolve": "1.20.2",
"eslint": "~8.57.0",
"eslint-plugin-header": "~3.1.1"
"eslint": "~9.25.1",
"tsdoc-build-rig": "1.0.0"
},

@@ -40,0 +37,0 @@ "scripts": {

{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"invalidSetting": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"invalid
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/invalid.json"
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"tagDefinitions": [
{
"tagName": "@dupe",
"syntaxKind": "modifier"
},
{
"tagName": "@dupe",
"syntaxKind": "modifier"
}
],
"supportForTags": {
"@undefinedTag": true
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": [ "./tsdoc-b.json", "./tsdoc-c.json" ]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": [ "./tsdoc-a.json" ]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"unknownSetting": 123
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": [ "./tsdoc-a.json" ]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": [ "@rushstack/nonexistent-package/tsdoc.json" ]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportForTags": {
"@nonExistentTag": true
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json"
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": ["span", "p"],
"reportUnsupportedHtmlElements": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json"],
"reportUnsupportedHtmlElements": true
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"reportUnsupportedHtmlElements": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": []
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json"],
"reportUnsupportedHtmlElements": true
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": [],
"reportUnsupportedHtmlElements": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"tagDefinitions": [
{
"tagName": "@base1",
"syntaxKind": "modifier"
}
],
"supportForTags": {
"@base1": true
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"tagDefinitions": [
{
"tagName": "@base2",
"syntaxKind": "modifier"
}
],
"supportForTags": {
"@base2": false
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json", "./base2/tsdoc-base2.json"],
"tagDefinitions": [
{
"tagName": "@root",
"syntaxKind": "modifier"
}
],
"supportForTags": {
"@base2": true
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"tagDefinitions": [
{
"tagName": "@example",
"syntaxKind": "modifier"
}
]
}
{
"name": "example-lib",
"version": "1.0.0"
}
{
"name": "p4",
"version": "1.0.0",
"dependencies": {
"example-lib": "1.0.0"
}
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["example-lib/dist/tsdoc-example.json"],
"tagDefinitions": [
{
"tagName": "@root",
"syntaxKind": "modifier"
}
]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"noStandardTags": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"noStandardTags": true
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json", "./base2/tsdoc-base2.json"]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"noStandardTags": true
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json"],
"noStandardTags": false
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": ["b", "u"]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": ["span", "p"]
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json"],
"supportedHtmlElements": []
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"supportedHtmlElements": ["span", "p"],
"reportUnsupportedHtmlElements": true
}
{
"$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json",
"extends": ["./base1/tsdoc-base1.json"],
"reportUnsupportedHtmlElements": false
}
export {};
//# sourceMappingURL=ErrorHandling.test.d.ts.map
{"version":3,"file":"ErrorHandling.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ErrorHandling.test.ts"],"names":[],"mappings":""}
{"version":3,"file":"ErrorHandling.test.js","sourceRoot":"","sources":["../../src/__tests__/ErrorHandling.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport { TSDocConfiguration } from '@microsoft/tsdoc';\r\nimport * as path from 'path';\r\n\r\nimport { TSDocConfigFile } from '../TSDocConfigFile';\r\n\r\ninterface ISnapshot {\r\n s0_filePath: string;\r\n s1_fileNotFound: boolean;\r\n s2_hasErrors: boolean;\r\n s3_errorSummary: string;\r\n s4_log: string[];\r\n s5_extends: ISnapshot[];\r\n}\r\n\r\nfunction replaceAll(text: string, search: string, replace: string): string {\r\n return text.split(search).join(replace);\r\n}\r\n\r\n// To make the unit tests deterministic, we need to replace all OS-dependent absolute paths\r\n// with OS-independent paths that are relative to the unit test folder.\r\nfunction makeStablePath(testPath: string): string {\r\n if (testPath.length === 0) {\r\n return '';\r\n }\r\n console.log('IN: ' + testPath);\r\n console.log('OUT: ' + replaceAll(path.relative(__dirname, testPath), '\\\\', '/'));\r\n return '.../' + replaceAll(path.relative(__dirname, testPath), '\\\\', '/');\r\n}\r\n\r\n// Build a map from absolute path --> stable path, for each TSDocConfigFile.filePath value\r\nfunction buildStablePathMap(stablePathMap: Map<string, string>, configFile: TSDocConfigFile): void {\r\n for (const absolutePath of [configFile.filePath, path.dirname(configFile.filePath)]) {\r\n if (!stablePathMap.has(absolutePath)) {\r\n stablePathMap.set(absolutePath, makeStablePath(absolutePath));\r\n }\r\n }\r\n\r\n for (const extendsFile of configFile.extendsFiles) {\r\n buildStablePathMap(stablePathMap, extendsFile);\r\n }\r\n}\r\n\r\n// Search and replace all absolute paths with the corresponding stable path.\r\n// For example, \"Found C:\\A\\B\\C.txt in C:\\A\\D\\E.txt\" becomes \"Found .../B/C.txt in .../D/E.txt\".\r\nfunction convertToStablePaths(text: string, stablePathMap: Map<string, string>): string {\r\n // Sort the [key,value] pairs by key length from longest to shortest.\r\n // This ensures that a shorter path does not replace a subpath of a longer path.\r\n const pairs: [string, string][] = Array.from(stablePathMap.entries()).sort(\r\n (x, y) => y[0].length - x[0].length\r\n );\r\n for (const pair of pairs) {\r\n text = replaceAll(text, pair[0], pair[1]);\r\n }\r\n // Also convert any loose backslashes to slashes\r\n //text = replaceAll(text, '\\\\', '/');\r\n return text;\r\n}\r\n\r\nfunction createSnapshot(configFile: TSDocConfigFile, pathFixupMap: Map<string, string>): ISnapshot {\r\n return {\r\n s0_filePath: convertToStablePaths(configFile.filePath, pathFixupMap),\r\n s1_fileNotFound: configFile.fileNotFound,\r\n s2_hasErrors: configFile.hasErrors,\r\n s4_log: configFile.log.messages.map(\r\n (x) => `[${x.messageId}] ${convertToStablePaths(x.text, pathFixupMap)}`\r\n ),\r\n s5_extends: configFile.extendsFiles.map((x) => createSnapshot(x, pathFixupMap)),\r\n s3_errorSummary: convertToStablePaths(configFile.getErrorSummary(), pathFixupMap)\r\n };\r\n}\r\n\r\nfunction testLoadingFolder(assetPath: string): ISnapshot {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, assetPath));\r\n\r\n const pathFixupMap: Map<string, string> = new Map();\r\n buildStablePathMap(pathFixupMap, configFile);\r\n\r\n return createSnapshot(configFile, pathFixupMap);\r\n}\r\n\r\ntest('Load e1', () => {\r\n expect(testLoadingFolder('assets/e1')).toMatchInlineSnapshot(`\r\nObject {\r\n \"s0_filePath\": \".../assets/e1/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e1/tsdoc.json:\r\n Error loading config file: data must NOT have additional properties\r\n\",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-schema-error] Error loading config file: data must NOT have additional properties\",\r\n ],\r\n \"s5_extends\": Array [],\r\n}\r\n`);\r\n});\r\n\r\ntest('Load e2', () => {\r\n expect(testLoadingFolder('assets/e2')).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e2/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e2/tsdoc.json:\r\n Error parsing JSON input: Unexpected token '\\\\\\\\n' at 3:12\r\n \\\\\"invalid\r\n ^\r\n \",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-invalid-json] Error parsing JSON input: Unexpected token '\\\\\\\\n' at 3:12\r\n \\\\\"invalid\r\n ^\",\r\n ],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n});\r\n\r\ntest('Load e3', () => {\r\n expect(testLoadingFolder('assets/e3')).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e3/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e3/tsdoc.json:\r\n Unsupported JSON \\\\\"$schema\\\\\" value; expecting \\\\\"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\\\\\"\r\n \",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-unsupported-schema] Unsupported JSON \\\\\"$schema\\\\\" value; expecting \\\\\"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\\\\\"\",\r\n ],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n});\r\n\r\ntest('Load e4', () => {\r\n expect(testLoadingFolder('assets/e4')).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e4/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e4/tsdoc.json:\r\n The \\\\\"tagDefinitions\\\\\" field specifies more than one tag with the name \\\\\"@dupe\\\\\"\r\n \",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-duplicate-tag-name] The \\\\\"tagDefinitions\\\\\" field specifies more than one tag with the name \\\\\"@dupe\\\\\"\",\r\n ],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n});\r\n\r\ntest('Load e5', () => {\r\n expect(testLoadingFolder('assets/e5')).toMatchInlineSnapshot(`\r\nObject {\r\n \"s0_filePath\": \".../assets/e5/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e5/tsdoc-a.json:\r\n Circular reference encountered for \\\\\"extends\\\\\" field of \\\\\".../assets/e5/tsdoc-b.json\\\\\"\r\n\r\nError encountered for .../assets/e5/tsdoc-c.json:\r\n Error loading config file: data must NOT have additional properties\r\n\",\r\n \"s4_log\": Array [],\r\n \"s5_extends\": Array [\r\n Object {\r\n \"s0_filePath\": \".../assets/e5/tsdoc-a.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e5/tsdoc-a.json:\r\n Circular reference encountered for \\\\\"extends\\\\\" field of \\\\\".../assets/e5/tsdoc-b.json\\\\\"\r\n\r\nError encountered for .../assets/e5/tsdoc-c.json:\r\n Error loading config file: data must NOT have additional properties\r\n\",\r\n \"s4_log\": Array [],\r\n \"s5_extends\": Array [\r\n Object {\r\n \"s0_filePath\": \".../assets/e5/tsdoc-b.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e5/tsdoc-a.json:\r\n Circular reference encountered for \\\\\"extends\\\\\" field of \\\\\".../assets/e5/tsdoc-b.json\\\\\"\r\n\",\r\n \"s4_log\": Array [],\r\n \"s5_extends\": Array [\r\n Object {\r\n \"s0_filePath\": \".../assets/e5/tsdoc-a.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e5/tsdoc-a.json:\r\n Circular reference encountered for \\\\\"extends\\\\\" field of \\\\\".../assets/e5/tsdoc-b.json\\\\\"\r\n\",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-cyclic-extends] Circular reference encountered for \\\\\"extends\\\\\" field of \\\\\".../assets/e5/tsdoc-b.json\\\\\"\",\r\n ],\r\n \"s5_extends\": Array [],\r\n },\r\n ],\r\n },\r\n Object {\r\n \"s0_filePath\": \".../assets/e5/tsdoc-c.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e5/tsdoc-c.json:\r\n Error loading config file: data must NOT have additional properties\r\n\",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-schema-error] Error loading config file: data must NOT have additional properties\",\r\n ],\r\n \"s5_extends\": Array [],\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n`);\r\n});\r\n\r\ntest('Load e6', () => {\r\n expect(testLoadingFolder('assets/e6')).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e6/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e6/tsdoc.json:\r\n Unable to resolve \\\\\"extends\\\\\" reference to \\\\\"@rushstack/nonexistent-package/tsdoc.json\\\\\": Cannot find module '@rushstack/nonexistent-package/tsdoc.json' from '.../assets/e6'\r\n \",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-unresolved-extends] Unable to resolve \\\\\"extends\\\\\" reference to \\\\\"@rushstack/nonexistent-package/tsdoc.json\\\\\": Cannot find module '@rushstack/nonexistent-package/tsdoc.json' from '.../assets/e6'\",\r\n ],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n});\r\n\r\ntest('Load e7', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/e7'));\r\n\r\n const pathFixupMap: Map<string, string> = new Map();\r\n buildStablePathMap(pathFixupMap, configFile);\r\n\r\n expect(createSnapshot(configFile, pathFixupMap)).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e7/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": false,\r\n \"s3_errorSummary\": \"No errors.\",\r\n \"s4_log\": Array [],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n\r\n // The \"tsdoc-config-undefined-tag\" error is NOT detected by TSDocConfigFile.loadForFolder()\r\n expect(configFile.hasErrors).toBe(false);\r\n\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n configFile.configureParser(configuration);\r\n\r\n expect(createSnapshot(configFile, pathFixupMap)).toMatchInlineSnapshot(`\r\n Object {\r\n \"s0_filePath\": \".../assets/e7/tsdoc.json\",\r\n \"s1_fileNotFound\": false,\r\n \"s2_hasErrors\": true,\r\n \"s3_errorSummary\": \"Error encountered for .../assets/e7/tsdoc.json:\r\n The \\\\\"supportForTags\\\\\" field refers to an undefined tag \\\\\"@nonExistentTag\\\\\".\r\n \",\r\n \"s4_log\": Array [\r\n \"[tsdoc-config-undefined-tag] The \\\\\"supportForTags\\\\\" field refers to an undefined tag \\\\\"@nonExistentTag\\\\\".\",\r\n ],\r\n \"s5_extends\": Array [],\r\n }\r\n `);\r\n\r\n // The \"tsdoc-config-undefined-tag\" error IS detected by TSDocConfigFile.configureParser()\r\n expect(configFile.hasErrors).toBe(true);\r\n});\r\n"]}
export {};
//# sourceMappingURL=TSDocConfigFile.test.d.ts.map
{"version":3,"file":"TSDocConfigFile.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/TSDocConfigFile.test.ts"],"names":[],"mappings":""}
{"version":3,"file":"TSDocConfigFile.test.js","sourceRoot":"","sources":["../../src/__tests__/TSDocConfigFile.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport { TSDocConfiguration, TSDocTagDefinition, TSDocTagSyntaxKind } from '@microsoft/tsdoc';\r\nimport * as path from 'path';\r\n\r\nimport { TSDocConfigFile } from '../TSDocConfigFile';\r\n\r\nfunction getRelativePath(testPath: string): string {\r\n return path.relative(__dirname, testPath).split('\\\\').join('/');\r\n}\r\n\r\nexpect.addSnapshotSerializer({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n test(value: any) {\r\n return value instanceof TSDocConfigFile;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n print(value: unknown, print: (value: any) => string, indent: any, options: any, colors: any): any {\r\n const configFile: TSDocConfigFile = value as TSDocConfigFile;\r\n return print({\r\n tsdocSchema: configFile.tsdocSchema,\r\n filePath: getRelativePath(configFile.filePath),\r\n fileNotFound: configFile.fileNotFound,\r\n extendsPaths: configFile.extendsPaths,\r\n extendsFiles: configFile.extendsFiles,\r\n noStandardTags: configFile.noStandardTags,\r\n tagDefinitions: configFile.tagDefinitions,\r\n supportForTags: Array.from(configFile.supportForTags).map(([tagName, supported]) => ({\r\n tagName,\r\n supported\r\n })),\r\n messages: configFile.log.messages,\r\n supportedHtmlElements: configFile.supportedHtmlElements,\r\n reportUnsupportedHtmlElements: configFile.reportUnsupportedHtmlElements\r\n });\r\n }\r\n});\r\n\r\nfunction testLoadingFolder(assetPath: string): TSDocConfigFile {\r\n return TSDocConfigFile.loadForFolder(path.join(__dirname, assetPath));\r\n}\r\n\r\ntest('Load p1', () => {\r\n expect(testLoadingFolder('assets/p1')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p1/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('Load p2', () => {\r\n expect(testLoadingFolder('assets/p2')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": true,\r\n \"filePath\": \"assets/p2/tsdoc.json\",\r\n \"messages\": Array [\r\n ParserMessage {\r\n \"_text\": undefined,\r\n \"docNode\": undefined,\r\n \"messageId\": \"tsdoc-config-file-not-found\",\r\n \"textRange\": TextRange {\r\n \"buffer\": \"\",\r\n \"end\": 0,\r\n \"pos\": 0,\r\n },\r\n \"tokenSequence\": undefined,\r\n \"unformattedText\": \"File not found\",\r\n },\r\n ],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"\",\r\n }\r\n `);\r\n});\r\n\r\ntest('Load p3', () => {\r\n expect(testLoadingFolder('assets/p3')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p3/base1/tsdoc-base1.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [\r\n Object {\r\n \"supported\": true,\r\n \"tagName\": \"@base1\",\r\n },\r\n ],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [\r\n TSDocTagDefinition {\r\n \"allowMultiple\": false,\r\n \"standardization\": \"None\",\r\n \"syntaxKind\": 2,\r\n \"tagName\": \"@base1\",\r\n \"tagNameWithUpperCase\": \"@BASE1\",\r\n },\r\n ],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n },\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p3/base2/tsdoc-base2.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [\r\n Object {\r\n \"supported\": false,\r\n \"tagName\": \"@base2\",\r\n },\r\n ],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [\r\n TSDocTagDefinition {\r\n \"allowMultiple\": false,\r\n \"standardization\": \"None\",\r\n \"syntaxKind\": 2,\r\n \"tagName\": \"@base2\",\r\n \"tagNameWithUpperCase\": \"@BASE2\",\r\n },\r\n ],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n },\r\n ],\r\n \"extendsPaths\": Array [\r\n \"./base1/tsdoc-base1.json\",\r\n \"./base2/tsdoc-base2.json\",\r\n ],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p3/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [\r\n Object {\r\n \"supported\": true,\r\n \"tagName\": \"@base2\",\r\n },\r\n ],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [\r\n TSDocTagDefinition {\r\n \"allowMultiple\": false,\r\n \"standardization\": \"None\",\r\n \"syntaxKind\": 2,\r\n \"tagName\": \"@root\",\r\n \"tagNameWithUpperCase\": \"@ROOT\",\r\n },\r\n ],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('Load p4', () => {\r\n expect(testLoadingFolder('assets/p4')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p4/node_modules/example-lib/dist/tsdoc-example.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [\r\n TSDocTagDefinition {\r\n \"allowMultiple\": false,\r\n \"standardization\": \"None\",\r\n \"syntaxKind\": 2,\r\n \"tagName\": \"@example\",\r\n \"tagNameWithUpperCase\": \"@EXAMPLE\",\r\n },\r\n ],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n },\r\n ],\r\n \"extendsPaths\": Array [\r\n \"example-lib/dist/tsdoc-example.json\",\r\n ],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p4/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [\r\n TSDocTagDefinition {\r\n \"allowMultiple\": false,\r\n \"standardization\": \"None\",\r\n \"syntaxKind\": 2,\r\n \"tagName\": \"@root\",\r\n \"tagNameWithUpperCase\": \"@ROOT\",\r\n },\r\n ],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('Re-serialize p3', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p3'));\r\n expect(configFile.hasErrors).toBe(false);\r\n\r\n // This is the data from p3/tsdoc.json, ignoring its \"extends\" field.\r\n expect(configFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"supportForTags\": Object {\r\n \"@base2\": true,\r\n },\r\n \"tagDefinitions\": Array [\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@root\",\r\n },\r\n ],\r\n }\r\n `);\r\n});\r\n\r\ntest('Re-serialize p3 without defaults', () => {\r\n const parserConfiguration: TSDocConfiguration = new TSDocConfiguration();\r\n parserConfiguration.clear(true);\r\n\r\n const defaultsConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(parserConfiguration);\r\n expect(defaultsConfigFile.hasErrors).toBe(false);\r\n\r\n // This is the default configuration created by the TSDocConfigFile constructor.\r\n expect(defaultsConfigFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"noStandardTags\": true,\r\n \"reportUnsupportedHtmlElements\": false,\r\n }\r\n `);\r\n\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p3'));\r\n expect(configFile.hasErrors).toBe(false);\r\n configFile.noStandardTags = true;\r\n configFile.configureParser(parserConfiguration);\r\n\r\n const mergedConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(parserConfiguration);\r\n\r\n // This is the result of merging p3/tsdoc.json, tsdoc-base1.json, tsdoc-base2.json, and\r\n // the TSDocConfiguration defaults.\r\n expect(mergedConfigFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"noStandardTags\": true,\r\n \"reportUnsupportedHtmlElements\": false,\r\n \"supportForTags\": Object {\r\n \"@base1\": true,\r\n \"@base2\": true,\r\n },\r\n \"tagDefinitions\": Array [\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@base1\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@base2\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@root\",\r\n },\r\n ],\r\n }\r\n `);\r\n});\r\n\r\ntest('Re-serialize p3 with defaults', () => {\r\n const parserConfiguration: TSDocConfiguration = new TSDocConfiguration();\r\n\r\n const defaultsConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(parserConfiguration);\r\n expect(defaultsConfigFile.hasErrors).toBe(false);\r\n\r\n // This is the default configuration created by the TSDocConfigFile constructor.\r\n expect(defaultsConfigFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"noStandardTags\": true,\r\n \"reportUnsupportedHtmlElements\": false,\r\n \"tagDefinitions\": Array [\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@alpha\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@beta\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@defaultValue\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@decorator\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@deprecated\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@eventProperty\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@example\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@experimental\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@inheritDoc\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@internal\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@label\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@link\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@override\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@packageDocumentation\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@param\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@privateRemarks\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@public\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@readonly\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@remarks\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@returns\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@sealed\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@see\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@throws\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@typeParam\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@virtual\",\r\n },\r\n ],\r\n }\r\n `);\r\n\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p3'));\r\n expect(configFile.hasErrors).toBe(false);\r\n configFile.configureParser(parserConfiguration);\r\n\r\n const mergedConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(parserConfiguration);\r\n\r\n // This is the result of merging p3/tsdoc.json, tsdoc-base1.json, tsdoc-base2.json, and\r\n // the TSDocConfiguration defaults.\r\n expect(mergedConfigFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"noStandardTags\": true,\r\n \"reportUnsupportedHtmlElements\": false,\r\n \"supportForTags\": Object {\r\n \"@base1\": true,\r\n \"@base2\": true,\r\n },\r\n \"tagDefinitions\": Array [\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@alpha\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@beta\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@defaultValue\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@decorator\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@deprecated\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@eventProperty\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@example\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@experimental\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@inheritDoc\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@internal\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@label\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@link\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@override\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@packageDocumentation\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@param\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@privateRemarks\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@public\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@readonly\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@remarks\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@returns\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@sealed\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@see\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@throws\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@typeParam\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@virtual\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@base1\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@base2\",\r\n },\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@root\",\r\n },\r\n ],\r\n }\r\n `);\r\n});\r\n\r\ntest('Test noStandardTags for p5', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p5'));\r\n expect(configFile.hasErrors).toBe(false);\r\n\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n configFile.configureParser(configuration);\r\n\r\n // noStandardTags=true because tsdoc-base2.json overrides tsdoc-base1.json, and tsdoc.json is undefined\r\n expect(configuration.tagDefinitions.length).toEqual(0);\r\n});\r\n\r\ntest('Test noStandardTags for p6', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p6'));\r\n expect(configFile.hasErrors).toBe(false);\r\n\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n configFile.configureParser(configuration);\r\n\r\n // noStandardTags=false because tsdoc.json overrides tsdoc-base1.json\r\n expect(configuration.tagDefinitions.length).toBeGreaterThan(0);\r\n});\r\n\r\ntest('Test load p7', () => {\r\n expect(testLoadingFolder('assets/p7')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p7/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": Array [\r\n \"b\",\r\n \"u\",\r\n ],\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('p7 reportUnsupportedHtmlElements defaults to true when supportedHtmlElements is specified', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p7'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.validation.reportUnsupportedHtmlElements).toEqual(true);\r\n});\r\n\r\ntest('Test re-serialize p7', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p7'));\r\n expect(configFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"supportedHtmlElements\": Array [\r\n \"b\",\r\n \"u\",\r\n ],\r\n }\r\n `);\r\n});\r\n\r\ntest('Test load p8', () => {\r\n expect(testLoadingFolder('assets/p8')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p8/base1/tsdoc-base1.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": Array [\r\n \"span\",\r\n \"p\",\r\n ],\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n },\r\n ],\r\n \"extendsPaths\": Array [\r\n \"./base1/tsdoc-base1.json\",\r\n ],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p8/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": undefined,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": Array [],\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('p8 supportedHtmlElements are not inherited when an empty array is specified', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p8'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.supportedHtmlElements).toEqual([]);\r\n});\r\n\r\ntest('Test re-serialize p8', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p8'));\r\n expect(configFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"supportedHtmlElements\": Array [],\r\n }\r\n `);\r\n});\r\n\r\ntest('Test load p9', () => {\r\n expect(testLoadingFolder('assets/p9')).toMatchInlineSnapshot(`\r\n Object {\r\n \"extendsFiles\": Array [\r\n Object {\r\n \"extendsFiles\": Array [],\r\n \"extendsPaths\": Array [],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p9/base1/tsdoc-base1.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": true,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": Array [\r\n \"span\",\r\n \"p\",\r\n ],\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n },\r\n ],\r\n \"extendsPaths\": Array [\r\n \"./base1/tsdoc-base1.json\",\r\n ],\r\n \"fileNotFound\": false,\r\n \"filePath\": \"assets/p9/tsdoc.json\",\r\n \"messages\": Array [],\r\n \"noStandardTags\": undefined,\r\n \"reportUnsupportedHtmlElements\": false,\r\n \"supportForTags\": Array [],\r\n \"supportedHtmlElements\": undefined,\r\n \"tagDefinitions\": Array [],\r\n \"tsdocSchema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n }\r\n `);\r\n});\r\n\r\ntest('p9 supportedHtmlElements are inherited', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p9'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.supportedHtmlElements).toEqual(['span', 'p']);\r\n});\r\n\r\ntest('p9 reportUnsupportedHtmlElements is overridden by \"true\"', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p9'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.validation.reportUnsupportedHtmlElements).toEqual(false);\r\n});\r\n\r\ntest('Test re-serialize p9', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p9'));\r\n expect(configFile.saveToObject()).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"reportUnsupportedHtmlElements\": false,\r\n }\r\n `);\r\n});\r\n\r\ntest('p10 reportUnsupportedHtmlElements is overridden by \"false\"', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p10'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.validation.reportUnsupportedHtmlElements).toEqual(true);\r\n});\r\n\r\ntest('p11 reportUnsupportedHtmlElements is handled correctly with multiple parent configs', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p11'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.validation.reportUnsupportedHtmlElements).toEqual(true);\r\n});\r\n\r\ntest('p12 reportUnsupportedHtmlElements can be set to false, even when \"supportedHtmlElements\" is present', () => {\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadForFolder(path.join(__dirname, 'assets/p12'));\r\n const flattened = new TSDocConfiguration();\r\n configFile.updateParser(flattened);\r\n expect(flattened.validation.reportUnsupportedHtmlElements).toEqual(false);\r\n});\r\n\r\ntest('Test loadFromObject()', () => {\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n configuration.clear(true);\r\n\r\n configuration.addTagDefinitions([\r\n new TSDocTagDefinition({ syntaxKind: TSDocTagSyntaxKind.ModifierTag, tagName: '@tag1' }),\r\n new TSDocTagDefinition({\r\n syntaxKind: TSDocTagSyntaxKind.BlockTag,\r\n tagName: '@tag2',\r\n allowMultiple: true\r\n }),\r\n new TSDocTagDefinition({\r\n syntaxKind: TSDocTagSyntaxKind.InlineTag,\r\n tagName: '@tag3',\r\n allowMultiple: true\r\n })\r\n ]);\r\n\r\n configuration.setSupportForTag(configuration.tagDefinitions[0], true);\r\n\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(configuration);\r\n expect(configFile.hasErrors).toBe(false);\r\n const jsonObject: unknown = configFile.saveToObject();\r\n\r\n const configFile2: TSDocConfigFile = TSDocConfigFile.loadFromObject(jsonObject);\r\n expect(configFile2.hasErrors).toBe(false);\r\n const jsonObject2: unknown = configFile2.saveToObject();\r\n\r\n expect(jsonObject2).toMatchInlineSnapshot(`\r\n Object {\r\n \"$schema\": \"https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json\",\r\n \"noStandardTags\": true,\r\n \"reportUnsupportedHtmlElements\": false,\r\n \"supportForTags\": Object {\r\n \"@tag1\": true,\r\n },\r\n \"tagDefinitions\": Array [\r\n Object {\r\n \"syntaxKind\": \"modifier\",\r\n \"tagName\": \"@tag1\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"block\",\r\n \"tagName\": \"@tag2\",\r\n },\r\n Object {\r\n \"allowMultiple\": true,\r\n \"syntaxKind\": \"inline\",\r\n \"tagName\": \"@tag3\",\r\n },\r\n ],\r\n }\r\n `);\r\n\r\n expect(jsonObject2).toStrictEqual(jsonObject);\r\n});\r\n\r\ntest('Test loadFromObject() with extends', () => {\r\n const configuration: TSDocConfiguration = new TSDocConfiguration();\r\n configuration.clear(true);\r\n\r\n const configFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(configuration);\r\n expect(configFile.hasErrors).toBe(false);\r\n const jsonObject: unknown = configFile.saveToObject();\r\n\r\n // eslint-disable-next-line\r\n (jsonObject as any)['extends'] = ['./some-file.json'];\r\n\r\n expect(() => {\r\n TSDocConfigFile.loadFromObject(jsonObject);\r\n }).toThrowError('The \"extends\" field cannot be used with TSDocConfigFile.loadFromObject()');\r\n});\r\n"]}