1 | "use strict";
|
2 |
|
3 |
|
4 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
5 | if (k2 === undefined) k2 = k;
|
6 | var desc = Object.getOwnPropertyDescriptor(m, k);
|
7 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
8 | desc = { enumerable: true, get: function() { return m[k]; } };
|
9 | }
|
10 | Object.defineProperty(o, k2, desc);
|
11 | }) : (function(o, m, k, k2) {
|
12 | if (k2 === undefined) k2 = k;
|
13 | o[k2] = m[k];
|
14 | }));
|
15 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
16 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
17 | }) : function(o, v) {
|
18 | o["default"] = v;
|
19 | });
|
20 | var __importStar = (this && this.__importStar) || function (mod) {
|
21 | if (mod && mod.__esModule) return mod;
|
22 | var result = {};
|
23 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
24 | __setModuleDefault(result, mod);
|
25 | return result;
|
26 | };
|
27 | Object.defineProperty(exports, "__esModule", { value: true });
|
28 | exports.PackageMetadataManager = exports.PackageMetadata = void 0;
|
29 | const path = __importStar(require("path"));
|
30 | const node_core_library_1 = require("@rushstack/node-core-library");
|
31 | const Extractor_1 = require("../api/Extractor");
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | class PackageMetadata {
|
37 | constructor(packageJsonPath, packageJson, aedocSupported) {
|
38 | this.packageJsonPath = packageJsonPath;
|
39 | this.packageJson = packageJson;
|
40 | this.aedocSupported = aedocSupported;
|
41 | }
|
42 | }
|
43 | exports.PackageMetadata = PackageMetadata;
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | class PackageMetadataManager {
|
58 | constructor(packageJsonLookup, messageRouter) {
|
59 | this._packageMetadataByPackageJsonPath = new Map();
|
60 | this._packageJsonLookup = packageJsonLookup;
|
61 | this._messageRouter = messageRouter;
|
62 | }
|
63 |
|
64 |
|
65 | static _resolveTsdocMetadataPathFromPackageJson(packageFolder, packageJson) {
|
66 | const tsdocMetadataFilename = PackageMetadataManager.tsdocMetadataFilename;
|
67 | let tsdocMetadataRelativePath;
|
68 | if (packageJson.tsdocMetadata) {
|
69 |
|
70 |
|
71 |
|
72 | tsdocMetadataRelativePath = packageJson.tsdocMetadata;
|
73 | }
|
74 | else if (packageJson.typings) {
|
75 |
|
76 |
|
77 | tsdocMetadataRelativePath = path.join(path.dirname(packageJson.typings), tsdocMetadataFilename);
|
78 | }
|
79 | else if (packageJson.main) {
|
80 |
|
81 |
|
82 | tsdocMetadataRelativePath = path.join(path.dirname(packageJson.main), tsdocMetadataFilename);
|
83 | }
|
84 | else {
|
85 |
|
86 |
|
87 | tsdocMetadataRelativePath = tsdocMetadataFilename;
|
88 | }
|
89 |
|
90 | const tsdocMetadataPath = path.resolve(packageFolder, tsdocMetadataRelativePath);
|
91 | return tsdocMetadataPath;
|
92 | }
|
93 | |
94 |
|
95 |
|
96 |
|
97 |
|
98 | static resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath) {
|
99 | if (tsdocMetadataPath) {
|
100 | return path.resolve(packageFolder, tsdocMetadataPath);
|
101 | }
|
102 | return PackageMetadataManager._resolveTsdocMetadataPathFromPackageJson(packageFolder, packageJson);
|
103 | }
|
104 | |
105 |
|
106 |
|
107 | static writeTsdocMetadataFile(tsdocMetadataPath, newlineKind) {
|
108 | const fileObject = {
|
109 | tsdocVersion: '0.12',
|
110 | toolPackages: [
|
111 | {
|
112 | packageName: '@microsoft/api-extractor',
|
113 | packageVersion: Extractor_1.Extractor.version
|
114 | }
|
115 | ]
|
116 | };
|
117 | const fileContent = '// This file is read by tools that parse documentation comments conforming to the TSDoc standard.\n' +
|
118 | '// It should be published with your NPM package. It should not be tracked by Git.\n' +
|
119 | node_core_library_1.JsonFile.stringify(fileObject);
|
120 | node_core_library_1.FileSystem.writeFile(tsdocMetadataPath, fileContent, {
|
121 | convertLineEndings: newlineKind,
|
122 | ensureFolderExists: true
|
123 | });
|
124 | }
|
125 | |
126 |
|
127 |
|
128 |
|
129 |
|
130 | tryFetchPackageMetadata(sourceFilePath) {
|
131 | const packageJsonFilePath = this._packageJsonLookup.tryGetPackageJsonFilePathFor(sourceFilePath);
|
132 | if (!packageJsonFilePath) {
|
133 | return undefined;
|
134 | }
|
135 | let packageMetadata = this._packageMetadataByPackageJsonPath.get(packageJsonFilePath);
|
136 | if (!packageMetadata) {
|
137 | const packageJson = this._packageJsonLookup.loadNodePackageJson(packageJsonFilePath);
|
138 | const packageJsonFolder = path.dirname(packageJsonFilePath);
|
139 | let aedocSupported = false;
|
140 | const tsdocMetadataPath = PackageMetadataManager._resolveTsdocMetadataPathFromPackageJson(packageJsonFolder, packageJson);
|
141 | if (node_core_library_1.FileSystem.exists(tsdocMetadataPath)) {
|
142 | this._messageRouter.logVerbose("console-found-tsdoc-metadata" , 'Found metadata in ' + tsdocMetadataPath);
|
143 |
|
144 | aedocSupported = true;
|
145 | }
|
146 | packageMetadata = new PackageMetadata(packageJsonFilePath, packageJson, aedocSupported);
|
147 | this._packageMetadataByPackageJsonPath.set(packageJsonFilePath, packageMetadata);
|
148 | }
|
149 | return packageMetadata;
|
150 | }
|
151 | |
152 |
|
153 |
|
154 | isAedocSupportedFor(sourceFilePath) {
|
155 | const packageMetadata = this.tryFetchPackageMetadata(sourceFilePath);
|
156 | if (!packageMetadata) {
|
157 | return false;
|
158 | }
|
159 | return packageMetadata.aedocSupported;
|
160 | }
|
161 | }
|
162 | exports.PackageMetadataManager = PackageMetadataManager;
|
163 | PackageMetadataManager.tsdocMetadataFilename = 'tsdoc-metadata.json';
|
164 |
|
\ | No newline at end of file |