typedoc 0.25.8 → 0.25.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,6 +38,8 @@ export declare class Converter extends ChildableComponent<Application, Converter
38
38
  accessor useTsLinkResolution: boolean;
39
39
  /** @internal */
40
40
  accessor preserveLinkText: boolean;
41
+ /** @internal */
42
+ accessor maxTypeConversionDepth: number;
41
43
  private _config?;
42
44
  private _externalSymbolResolvers;
43
45
  get config(): CommentParserConfig;
@@ -71,7 +71,7 @@ const linkResolver_1 = require("./comments/linkResolver");
71
71
  * Compiles source files using TypeScript and converts compiler symbols to reflections.
72
72
  */
73
73
  let Converter = (() => {
74
- var _Converter_externalPattern_accessor_storage, _Converter_excludeExternals_accessor_storage, _Converter_excludeNotDocumented_accessor_storage, _Converter_excludePrivate_accessor_storage, _Converter_excludeProtected_accessor_storage, _Converter_excludeReferences_accessor_storage, _Converter_commentStyle_accessor_storage, _Converter_validation_accessor_storage, _Converter_externalSymbolLinkMappings_accessor_storage, _Converter_useTsLinkResolution_accessor_storage, _Converter_preserveLinkText_accessor_storage;
74
+ var _Converter_externalPattern_accessor_storage, _Converter_excludeExternals_accessor_storage, _Converter_excludeNotDocumented_accessor_storage, _Converter_excludePrivate_accessor_storage, _Converter_excludeProtected_accessor_storage, _Converter_excludeReferences_accessor_storage, _Converter_commentStyle_accessor_storage, _Converter_validation_accessor_storage, _Converter_externalSymbolLinkMappings_accessor_storage, _Converter_useTsLinkResolution_accessor_storage, _Converter_preserveLinkText_accessor_storage, _Converter_maxTypeConversionDepth_accessor_storage;
75
75
  let _classDecorators = [(0, component_1.Component)({
76
76
  name: "converter",
77
77
  internal: true,
@@ -104,6 +104,8 @@ let Converter = (() => {
104
104
  let _useTsLinkResolution_initializers = [];
105
105
  let _preserveLinkText_decorators;
106
106
  let _preserveLinkText_initializers = [];
107
+ let _maxTypeConversionDepth_decorators;
108
+ let _maxTypeConversionDepth_initializers = [];
107
109
  var Converter = _classThis = class extends _classSuper {
108
110
  /** @internal */
109
111
  get externalPattern() { return __classPrivateFieldGet(this, _Converter_externalPattern_accessor_storage, "f"); }
@@ -138,6 +140,9 @@ let Converter = (() => {
138
140
  /** @internal */
139
141
  get preserveLinkText() { return __classPrivateFieldGet(this, _Converter_preserveLinkText_accessor_storage, "f"); }
140
142
  set preserveLinkText(value) { __classPrivateFieldSet(this, _Converter_preserveLinkText_accessor_storage, value, "f"); }
143
+ /** @internal */
144
+ get maxTypeConversionDepth() { return __classPrivateFieldGet(this, _Converter_maxTypeConversionDepth_accessor_storage, "f"); }
145
+ set maxTypeConversionDepth(value) { __classPrivateFieldSet(this, _Converter_maxTypeConversionDepth_accessor_storage, value, "f"); }
141
146
  get config() {
142
147
  return this._config || this._buildCommentParserConfig();
143
148
  }
@@ -154,6 +159,7 @@ let Converter = (() => {
154
159
  _Converter_externalSymbolLinkMappings_accessor_storage.set(this, __runInitializers(this, _externalSymbolLinkMappings_initializers, void 0));
155
160
  _Converter_useTsLinkResolution_accessor_storage.set(this, __runInitializers(this, _useTsLinkResolution_initializers, void 0));
156
161
  _Converter_preserveLinkText_accessor_storage.set(this, __runInitializers(this, _preserveLinkText_initializers, void 0));
162
+ _Converter_maxTypeConversionDepth_accessor_storage.set(this, __runInitializers(this, _maxTypeConversionDepth_initializers, void 0));
157
163
  this._externalSymbolResolvers = [];
158
164
  this.addUnknownSymbolResolver((ref) => {
159
165
  // Require global links, matching local ones will likely hide mistakes where the
@@ -378,6 +384,7 @@ let Converter = (() => {
378
384
  _Converter_externalSymbolLinkMappings_accessor_storage = new WeakMap();
379
385
  _Converter_useTsLinkResolution_accessor_storage = new WeakMap();
380
386
  _Converter_preserveLinkText_accessor_storage = new WeakMap();
387
+ _Converter_maxTypeConversionDepth_accessor_storage = new WeakMap();
381
388
  __setFunctionName(_classThis, "Converter");
382
389
  (() => {
383
390
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
@@ -392,6 +399,7 @@ let Converter = (() => {
392
399
  _externalSymbolLinkMappings_decorators = [(0, utils_1.Option)("externalSymbolLinkMappings")];
393
400
  _useTsLinkResolution_decorators = [(0, utils_1.Option)("useTsLinkResolution")];
394
401
  _preserveLinkText_decorators = [(0, utils_1.Option)("preserveLinkText")];
402
+ _maxTypeConversionDepth_decorators = [(0, utils_1.Option)("maxTypeConversionDepth")];
395
403
  __esDecorate(_classThis, null, _externalPattern_decorators, { kind: "accessor", name: "externalPattern", static: false, private: false, access: { has: obj => "externalPattern" in obj, get: obj => obj.externalPattern, set: (obj, value) => { obj.externalPattern = value; } }, metadata: _metadata }, _externalPattern_initializers, _instanceExtraInitializers);
396
404
  __esDecorate(_classThis, null, _excludeExternals_decorators, { kind: "accessor", name: "excludeExternals", static: false, private: false, access: { has: obj => "excludeExternals" in obj, get: obj => obj.excludeExternals, set: (obj, value) => { obj.excludeExternals = value; } }, metadata: _metadata }, _excludeExternals_initializers, _instanceExtraInitializers);
397
405
  __esDecorate(_classThis, null, _excludeNotDocumented_decorators, { kind: "accessor", name: "excludeNotDocumented", static: false, private: false, access: { has: obj => "excludeNotDocumented" in obj, get: obj => obj.excludeNotDocumented, set: (obj, value) => { obj.excludeNotDocumented = value; } }, metadata: _metadata }, _excludeNotDocumented_initializers, _instanceExtraInitializers);
@@ -403,6 +411,7 @@ let Converter = (() => {
403
411
  __esDecorate(_classThis, null, _externalSymbolLinkMappings_decorators, { kind: "accessor", name: "externalSymbolLinkMappings", static: false, private: false, access: { has: obj => "externalSymbolLinkMappings" in obj, get: obj => obj.externalSymbolLinkMappings, set: (obj, value) => { obj.externalSymbolLinkMappings = value; } }, metadata: _metadata }, _externalSymbolLinkMappings_initializers, _instanceExtraInitializers);
404
412
  __esDecorate(_classThis, null, _useTsLinkResolution_decorators, { kind: "accessor", name: "useTsLinkResolution", static: false, private: false, access: { has: obj => "useTsLinkResolution" in obj, get: obj => obj.useTsLinkResolution, set: (obj, value) => { obj.useTsLinkResolution = value; } }, metadata: _metadata }, _useTsLinkResolution_initializers, _instanceExtraInitializers);
405
413
  __esDecorate(_classThis, null, _preserveLinkText_decorators, { kind: "accessor", name: "preserveLinkText", static: false, private: false, access: { has: obj => "preserveLinkText" in obj, get: obj => obj.preserveLinkText, set: (obj, value) => { obj.preserveLinkText = value; } }, metadata: _metadata }, _preserveLinkText_initializers, _instanceExtraInitializers);
414
+ __esDecorate(_classThis, null, _maxTypeConversionDepth_decorators, { kind: "accessor", name: "maxTypeConversionDepth", static: false, private: false, access: { has: obj => "maxTypeConversionDepth" in obj, get: obj => obj.maxTypeConversionDepth, set: (obj, value) => { obj.maxTypeConversionDepth = value; } }, metadata: _metadata }, _maxTypeConversionDepth_initializers, _instanceExtraInitializers);
406
415
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
407
416
  Converter = _classThis = _classDescriptor.value;
408
417
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -71,15 +71,22 @@ function maybeConvertType(context, typeOrNode) {
71
71
  }
72
72
  return convertType(context, typeOrNode);
73
73
  }
74
+ let typeConversionDepth = 0;
74
75
  function convertType(context, typeOrNode) {
75
76
  if (!typeOrNode) {
76
77
  return new models_1.IntrinsicType("any");
77
78
  }
79
+ if (typeConversionDepth > context.converter.maxTypeConversionDepth) {
80
+ return new models_1.UnknownType("...");
81
+ }
78
82
  loadConverters();
79
83
  if ("kind" in typeOrNode) {
80
84
  const converter = converters.get(typeOrNode.kind);
81
85
  if (converter) {
82
- return converter.convert(context, typeOrNode);
86
+ ++typeConversionDepth;
87
+ const result = converter.convert(context, typeOrNode);
88
+ --typeConversionDepth;
89
+ return result;
83
90
  }
84
91
  return requestBugReport(context, typeOrNode);
85
92
  }
@@ -88,6 +95,7 @@ function convertType(context, typeOrNode) {
88
95
  // will use the origin when serializing
89
96
  // aliasSymbol check is important - #2468
90
97
  if (typeOrNode.isUnion() && typeOrNode.origin && !typeOrNode.aliasSymbol) {
98
+ // Don't increment typeConversionDepth as this is a transparent step to the user.
91
99
  return convertType(context, typeOrNode.origin);
92
100
  }
93
101
  // IgnoreErrors is important, without it, we can't assert that we will get a node.
@@ -106,7 +114,9 @@ function convertType(context, typeOrNode) {
106
114
  converter = typeLiteralConverter;
107
115
  }
108
116
  seenTypes.add(typeOrNode.id);
117
+ ++typeConversionDepth;
109
118
  const result = converter.convertType(context, typeOrNode, node);
119
+ --typeConversionDepth;
110
120
  seenTypes.delete(typeOrNode.id);
111
121
  return result;
112
122
  }
@@ -643,7 +653,9 @@ const unionConverter = {
643
653
  return new models_1.UnionType(node.types.map((type) => convertType(context, type)));
644
654
  },
645
655
  convertType(context, type) {
646
- return new models_1.UnionType(type.types.map((type) => convertType(context, type)));
656
+ const types = type.types.map((type) => convertType(context, type));
657
+ sortLiteralUnion(types);
658
+ return new models_1.UnionType(types);
647
659
  },
648
660
  };
649
661
  const jsDocNullableTypeConverter = {
@@ -695,3 +707,13 @@ function kindToModifier(kind) {
695
707
  return undefined;
696
708
  }
697
709
  }
710
+ function sortLiteralUnion(types) {
711
+ if (types.some((t) => t.type !== "literal" || typeof t.value !== "number")) {
712
+ return;
713
+ }
714
+ types.sort((a, b) => {
715
+ const aLit = a;
716
+ const bLit = b;
717
+ return aLit.value - bLit.value;
718
+ });
719
+ }
@@ -127,7 +127,7 @@ export declare abstract class Reflection {
127
127
  * The reflection this reflection is a child of.
128
128
  */
129
129
  parent?: Reflection;
130
- get project(): ProjectReflection;
130
+ project: ProjectReflection;
131
131
  /**
132
132
  * The parsed documentation comment attached to this reflection.
133
133
  */
@@ -35,7 +35,6 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
35
35
  };
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.Reflection = exports.TraverseProperty = exports.ReflectionFlags = exports.ReflectionFlag = exports.resetReflectionID = void 0;
38
- const assert_1 = require("assert");
39
38
  const comment_1 = require("../comments/comment");
40
39
  const utils_1 = require("./utils");
41
40
  const kind_1 = require("./kind");
@@ -247,13 +246,9 @@ let Reflection = (() => {
247
246
  let _instanceExtraInitializers = [];
248
247
  let _parent_decorators;
249
248
  let _parent_initializers = [];
249
+ let _project_decorators;
250
+ let _project_initializers = [];
250
251
  return _a = class Reflection {
251
- get project() {
252
- if (this.isProject())
253
- return this;
254
- (0, assert_1.ok)(this.parent, "Tried to get the project on a reflection not in a project");
255
- return this.parent.project;
256
- }
257
252
  constructor(name, kind, parent) {
258
253
  /**
259
254
  * Unique id of this reflection.
@@ -264,8 +259,10 @@ let Reflection = (() => {
264
259
  * The reflection this reflection is a child of.
265
260
  */
266
261
  this.parent = __runInitializers(this, _parent_initializers, void 0);
262
+ this.project = __runInitializers(this, _project_initializers, void 0);
267
263
  this.id = REFLECTION_ID++;
268
264
  this.parent = parent;
265
+ this.project = parent?.project || this;
269
266
  this.name = name;
270
267
  this.kind = kind;
271
268
  // If our parent is external, we are too.
@@ -471,7 +468,9 @@ let Reflection = (() => {
471
468
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
472
469
  _parent_decorators = [general_1.NonEnumerable // So that it doesn't show up in console.log
473
470
  ];
471
+ _project_decorators = [general_1.NonEnumerable];
474
472
  __esDecorate(null, null, _parent_decorators, { kind: "field", name: "parent", static: false, private: false, access: { has: obj => "parent" in obj, get: obj => obj.parent, set: (obj, value) => { obj.parent = value; } }, metadata: _metadata }, _parent_initializers, _instanceExtraInitializers);
473
+ __esDecorate(null, null, _project_decorators, { kind: "field", name: "project", static: false, private: false, access: { has: obj => "project" in obj, get: obj => obj.project, set: (obj, value) => { obj.project = value; } }, metadata: _metadata }, _project_initializers, _instanceExtraInitializers);
475
474
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
476
475
  })(),
477
476
  _a;
@@ -129,18 +129,19 @@ class DeclarationReflection extends container_1.ContainerReflection {
129
129
  extendedBy: serializer.toObjectsOptional(this.extendedBy),
130
130
  implementedTypes: serializer.toObjectsOptional(this.implementedTypes),
131
131
  implementedBy: serializer.toObjectsOptional(this.implementedBy),
132
+ readme: comments_1.Comment.serializeDisplayParts(serializer, this.readme),
132
133
  };
133
134
  }
134
135
  fromObject(de, obj) {
135
136
  super.fromObject(de, obj);
137
+ if (obj.readme) {
138
+ this.readme = comments_1.Comment.deserializeDisplayParts(de, obj.readme);
139
+ }
136
140
  // This happens when merging multiple projects together.
137
141
  // If updating this, also check ProjectReflection.fromObject.
138
142
  if (obj.variant === "project") {
139
143
  this.kind = kind_1.ReflectionKind.Module;
140
144
  this.packageVersion = obj.packageVersion;
141
- if (obj.readme) {
142
- this.readme = comments_1.Comment.deserializeDisplayParts(de, obj.readme);
143
- }
144
145
  de.defer(() => {
145
146
  for (const [id, sid] of Object.entries(obj.symbolIdMap || {})) {
146
147
  const refl = this.project.getReflectionById(de.oldIdToNewId[+id] ?? -1);
@@ -172,17 +172,17 @@ class ProjectReflection extends container_1.ContainerReflection {
172
172
  }
173
173
  this.reflectionChildren.delete(reflection.id);
174
174
  // Remove references from the TS symbol to this reflection.
175
- const symbol = this.reflectionIdToSymbolMap.get(reflection.id);
176
- if (symbol) {
177
- const id = new ReflectionSymbolId_1.ReflectionSymbolId(symbol);
178
- const saved = this.symbolToReflectionIdMap.get(id);
175
+ const symbolId = this.reflectionIdToSymbolIdMap.get(reflection.id);
176
+ if (symbolId) {
177
+ const saved = this.symbolToReflectionIdMap.get(symbolId);
179
178
  if (saved === reflection.id) {
180
- this.symbolToReflectionIdMap.delete(id);
179
+ this.symbolToReflectionIdMap.delete(symbolId);
181
180
  }
182
181
  else if (typeof saved === "object") {
183
182
  (0, utils_1.removeIfPresent)(saved, reflection.id);
184
183
  }
185
184
  }
185
+ this.reflectionIdToSymbolMap.delete(reflection.id);
186
186
  this.reflectionIdToSymbolIdMap.delete(reflection.id);
187
187
  delete this.reflections[reflection.id];
188
188
  }
@@ -13,7 +13,7 @@ function memberSignatureBody(context, props, { hideSources = false } = {}) {
13
13
  props.parameters && props.parameters.length > 0 && (utils_1.JSX.createElement("div", { class: "tsd-parameters" },
14
14
  utils_1.JSX.createElement("h4", { class: "tsd-parameters-title" }, "Parameters"),
15
15
  utils_1.JSX.createElement("ul", { class: "tsd-parameter-list" }, props.parameters.map((item) => (utils_1.JSX.createElement("li", null,
16
- utils_1.JSX.createElement("h5", null,
16
+ utils_1.JSX.createElement("span", null,
17
17
  context.reflectionFlags(item),
18
18
  !!item.flags.isRest && utils_1.JSX.createElement("span", { class: "tsd-signature-symbol" }, "..."),
19
19
  utils_1.JSX.createElement("span", { class: "tsd-kind-parameter" }, item.name),
@@ -7,7 +7,7 @@ function typeParameters(context, typeParameters) {
7
7
  utils_1.JSX.createElement("section", { class: "tsd-panel" },
8
8
  utils_1.JSX.createElement("h4", null, "Type Parameters"),
9
9
  utils_1.JSX.createElement("ul", { class: "tsd-type-parameter-list" }, typeParameters?.map((item) => (utils_1.JSX.createElement("li", null,
10
- utils_1.JSX.createElement("h4", null,
10
+ utils_1.JSX.createElement("span", null,
11
11
  utils_1.JSX.createElement("a", { id: item.anchor, class: "tsd-anchor" }),
12
12
  item.flags.isConst && utils_1.JSX.createElement("span", { class: "tsd-signature-keyword" }, "const "),
13
13
  item.varianceModifier && (utils_1.JSX.createElement("span", { class: "tsd-signature-keyword" },
@@ -78,7 +78,7 @@ export interface ParameterReflection extends Omit<Reflection, "variant">, S<M.Pa
78
78
  variant: "param";
79
79
  }
80
80
  /** @category Reflections */
81
- export interface DeclarationReflection extends Omit<ContainerReflection, "variant">, S<M.DeclarationReflection, "variant" | "packageVersion" | "sources" | "relevanceBoost" | "type" | "signatures" | "indexSignature" | "defaultValue" | "overwrites" | "inheritedFrom" | "implementationOf" | "extendedTypes" | "extendedBy" | "implementedTypes" | "implementedBy" | "getSignature" | "setSignature" | "typeParameters"> {
81
+ export interface DeclarationReflection extends Omit<ContainerReflection, "variant">, S<M.DeclarationReflection, "variant" | "packageVersion" | "sources" | "relevanceBoost" | "type" | "signatures" | "indexSignature" | "defaultValue" | "overwrites" | "inheritedFrom" | "implementationOf" | "extendedTypes" | "extendedBy" | "implementedTypes" | "implementedBy" | "getSignature" | "setSignature" | "typeParameters" | "readme"> {
82
82
  }
83
83
  /** @category Reflections */
84
84
  export interface TypeParameterReflection extends Omit<Reflection, "variant">, S<M.TypeParameterReflection, "variant" | "type" | "default" | "varianceModifier"> {
@@ -72,6 +72,7 @@ export interface TypeDocOptionMap {
72
72
  excludeProtected: boolean;
73
73
  excludeReferences: boolean;
74
74
  excludeCategories: string[];
75
+ maxTypeConversionDepth: number;
75
76
  name: string;
76
77
  includeVersion: boolean;
77
78
  disableSources: boolean;
@@ -278,6 +278,12 @@ function addTypeDocOptions(options) {
278
278
  }
279
279
  },
280
280
  });
281
+ options.addDeclaration({
282
+ name: "maxTypeConversionDepth",
283
+ help: "Set the maximum depth of types to be converted.",
284
+ defaultValue: 10,
285
+ type: declaration_1.ParameterType.Number,
286
+ });
281
287
  options.addDeclaration({
282
288
  name: "name",
283
289
  help: "Set the name of the project that will be used in the header of the template.",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typedoc",
3
3
  "description": "Create api documentation for TypeScript projects.",
4
- "version": "0.25.8",
4
+ "version": "0.25.9",
5
5
  "homepage": "https://typedoc.org",
6
6
  "exports": {
7
7
  ".": "./dist/index.js",