@rushstack/typings-generator 0.5.1 → 0.5.2

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.
package/CHANGELOG.json CHANGED
@@ -1,6 +1,24 @@
1
1
  {
2
2
  "name": "@rushstack/typings-generator",
3
3
  "entries": [
4
+ {
5
+ "version": "0.5.2",
6
+ "tag": "@rushstack/typings-generator_v0.5.2",
7
+ "date": "Fri, 03 Dec 2021 03:05:23 GMT",
8
+ "comments": {
9
+ "dependency": [
10
+ {
11
+ "comment": "Updating dependency \"@rushstack/node-core-library\" to `3.44.0`"
12
+ },
13
+ {
14
+ "comment": "Updating dependency \"@rushstack/heft\" to `0.42.4`"
15
+ },
16
+ {
17
+ "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `1.2.33`"
18
+ }
19
+ ]
20
+ }
21
+ },
4
22
  {
5
23
  "version": "0.5.1",
6
24
  "tag": "@rushstack/typings-generator_v0.5.1",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Change Log - @rushstack/typings-generator
2
2
 
3
- This log was last generated on Tue, 30 Nov 2021 20:18:41 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 03 Dec 2021 03:05:23 GMT and should not be manually modified.
4
+
5
+ ## 0.5.2
6
+ Fri, 03 Dec 2021 03:05:23 GMT
7
+
8
+ _Version update only_
4
9
 
5
10
  ## 0.5.1
6
11
  Tue, 30 Nov 2021 20:18:41 GMT
@@ -139,7 +139,7 @@ class TypingsGenerator {
139
139
  ].join(os_1.EOL);
140
140
  await node_core_library_1.FileSystem.writeFileAsync(generatedTsFilePath, prefixedTypingsData, {
141
141
  ensureFolderExists: true,
142
- convertLineEndings: "os" /* OsDefault */
142
+ convertLineEndings: node_core_library_1.NewlineKind.OsDefault
143
143
  });
144
144
  }
145
145
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"TypingsGenerator.js","sourceRoot":"","sources":["../src/TypingsGenerator.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 FileSystem,\r\n ITerminal,\r\n Terminal,\r\n ConsoleTerminalProvider,\r\n Path,\r\n NewlineKind,\r\n LegacyAdapters,\r\n Async\r\n} from '@rushstack/node-core-library';\r\nimport glob from 'glob';\r\nimport * as path from 'path';\r\nimport { EOL } from 'os';\r\nimport * as chokidar from 'chokidar';\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ITypingsGeneratorOptions<TTypingsResult = string | undefined> {\r\n srcFolder: string;\r\n generatedTsFolder: string;\r\n fileExtensions: string[];\r\n parseAndGenerateTypings: (\r\n fileContents: string,\r\n filePath: string\r\n ) => TTypingsResult | Promise<TTypingsResult>;\r\n terminal?: ITerminal;\r\n globsToIgnore?: string[];\r\n /**\r\n * @deprecated\r\n *\r\n * TODO: Remove when version 1.0.0 is released.\r\n */\r\n filesToIgnore?: string[];\r\n}\r\n\r\n/**\r\n * This is a simple tool that generates .d.ts files for non-TS files.\r\n *\r\n * @public\r\n */\r\nexport class TypingsGenerator {\r\n // Map of target file path -> Set<dependency file path>\r\n private _targetMap: Map<string, Set<string>>;\r\n\r\n // Map of dependency file path -> Set<target file path>\r\n private _dependencyMap: Map<string, Set<string>>;\r\n\r\n protected _options: ITypingsGeneratorOptions;\r\n\r\n public constructor(options: ITypingsGeneratorOptions) {\r\n this._options = {\r\n ...options\r\n };\r\n\r\n if (options.filesToIgnore) {\r\n throw new Error('The filesToIgnore option is no longer supported. Please use globsToIgnore instead.');\r\n }\r\n\r\n if (!this._options.generatedTsFolder) {\r\n throw new Error('generatedTsFolder must be provided');\r\n }\r\n\r\n if (!this._options.srcFolder) {\r\n throw new Error('srcFolder must be provided');\r\n }\r\n\r\n if (Path.isUnder(this._options.srcFolder, this._options.generatedTsFolder)) {\r\n throw new Error('srcFolder must not be under generatedTsFolder');\r\n }\r\n\r\n if (Path.isUnder(this._options.generatedTsFolder, this._options.srcFolder)) {\r\n throw new Error('generatedTsFolder must not be under srcFolder');\r\n }\r\n\r\n if (!this._options.fileExtensions || this._options.fileExtensions.length === 0) {\r\n throw new Error('At least one file extension must be provided.');\r\n }\r\n\r\n if (!this._options.globsToIgnore) {\r\n this._options.globsToIgnore = [];\r\n }\r\n\r\n if (!this._options.terminal) {\r\n this._options.terminal = new Terminal(new ConsoleTerminalProvider({ verboseEnabled: true }));\r\n }\r\n\r\n this._options.fileExtensions = this._normalizeFileExtensions(this._options.fileExtensions);\r\n\r\n this._targetMap = new Map();\r\n\r\n this._dependencyMap = new Map();\r\n }\r\n\r\n public async generateTypingsAsync(): Promise<void> {\r\n await FileSystem.ensureEmptyFolderAsync(this._options.generatedTsFolder);\r\n\r\n const filePaths: string[] = await LegacyAdapters.convertCallbackToPromise(\r\n glob,\r\n `**/*+(${this._options.fileExtensions.join('|')})`,\r\n {\r\n cwd: this._options.srcFolder,\r\n absolute: true,\r\n nosort: true,\r\n nodir: true,\r\n ignore: this._options.globsToIgnore\r\n }\r\n );\r\n\r\n await Async.forEachAsync(\r\n filePaths,\r\n async (filePath: string) => {\r\n filePath = `${this._options.srcFolder}/${filePath}`;\r\n await this._parseFileAndGenerateTypingsAsync(filePath);\r\n },\r\n { concurrency: 50 }\r\n );\r\n }\r\n\r\n public async runWatcherAsync(): Promise<void> {\r\n await FileSystem.ensureFolderAsync(this._options.generatedTsFolder);\r\n\r\n const globBase: string = `${this._options.srcFolder}/**`;\r\n\r\n await new Promise((resolve, reject): void => {\r\n const watcher: chokidar.FSWatcher = chokidar.watch(\r\n this._options.fileExtensions.map((fileExtension) => `${globBase}/*${fileExtension}`),\r\n {\r\n ignored: this._options.globsToIgnore\r\n }\r\n );\r\n const boundGenerateTypingsFunction: (filePath: string) => Promise<void> =\r\n this._parseFileAndGenerateTypingsAsync.bind(this);\r\n watcher.on('add', boundGenerateTypingsFunction);\r\n watcher.on('change', boundGenerateTypingsFunction);\r\n watcher.on('unlink', async (filePath) => {\r\n const generatedTsFilePath: string = this._getTypingsFilePath(filePath);\r\n await FileSystem.deleteFileAsync(generatedTsFilePath);\r\n });\r\n watcher.on('error', reject);\r\n });\r\n }\r\n\r\n /**\r\n * Register file dependencies that may effect the typings of a target file.\r\n * Note: This feature is only useful in watch mode.\r\n * The registerDependency method must be called in the body of parseAndGenerateTypings every\r\n * time because the registry for a file is cleared at the beginning of processing.\r\n */\r\n public registerDependency(target: string, dependency: string): void {\r\n let targetDependencySet: Set<string> | undefined = this._targetMap.get(target);\r\n if (!targetDependencySet) {\r\n targetDependencySet = new Set();\r\n this._targetMap.set(target, targetDependencySet);\r\n }\r\n targetDependencySet.add(dependency);\r\n\r\n let dependencyTargetSet: Set<string> | undefined = this._dependencyMap.get(dependency);\r\n if (!dependencyTargetSet) {\r\n dependencyTargetSet = new Set();\r\n this._dependencyMap.set(dependency, dependencyTargetSet);\r\n }\r\n dependencyTargetSet.add(target);\r\n }\r\n\r\n private async _parseFileAndGenerateTypingsAsync(filePath: string): Promise<void> {\r\n // Clear registered dependencies prior to reprocessing.\r\n this._clearDependencies(filePath);\r\n\r\n // Check for targets that register this file as a dependency, and reprocess them too.\r\n for (const target of this._getDependencyTargets(filePath)) {\r\n await this._parseFileAndGenerateTypingsAsync(target);\r\n }\r\n\r\n try {\r\n const fileContents: string = await FileSystem.readFileAsync(filePath);\r\n const typingsData: string | undefined = await this._options.parseAndGenerateTypings(\r\n fileContents,\r\n filePath\r\n );\r\n const generatedTsFilePath: string = this._getTypingsFilePath(filePath);\r\n\r\n // Typings data will be undefined when no types should be generated for the parsed file.\r\n if (typingsData === undefined) {\r\n return;\r\n }\r\n\r\n const prefixedTypingsData: string = [\r\n '// This file was generated by a tool. Modifying it will produce unexpected behavior',\r\n '',\r\n typingsData\r\n ].join(EOL);\r\n\r\n await FileSystem.writeFileAsync(generatedTsFilePath, prefixedTypingsData, {\r\n ensureFolderExists: true,\r\n convertLineEndings: NewlineKind.OsDefault\r\n });\r\n } catch (e) {\r\n this._options.terminal!.writeError(\r\n `Error occurred parsing and generating typings for file \"${filePath}\": ${e}`\r\n );\r\n }\r\n }\r\n\r\n private _clearDependencies(target: string): void {\r\n const targetDependencySet: Set<string> | undefined = this._targetMap.get(target);\r\n if (targetDependencySet) {\r\n for (const dependency of targetDependencySet) {\r\n this._dependencyMap.get(dependency)!.delete(target);\r\n }\r\n targetDependencySet.clear();\r\n }\r\n }\r\n\r\n private _getDependencyTargets(dependency: string): string[] {\r\n return [...(this._dependencyMap.get(dependency)?.keys() || [])];\r\n }\r\n\r\n private _getTypingsFilePath(filePath: string): string {\r\n const relativeSourceFilePath: string = path.relative(this._options.srcFolder, `${filePath}.d.ts`);\r\n return `${this._options.generatedTsFolder}/${relativeSourceFilePath}`;\r\n }\r\n\r\n private _normalizeFileExtensions(fileExtensions: string[]): string[] {\r\n const result: string[] = [];\r\n for (const fileExtension of fileExtensions) {\r\n if (!fileExtension.startsWith('.')) {\r\n result.push(`.${fileExtension}`);\r\n } else {\r\n result.push(fileExtension);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TypingsGenerator.js","sourceRoot":"","sources":["../src/TypingsGenerator.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 FileSystem,\r\n ITerminal,\r\n Terminal,\r\n ConsoleTerminalProvider,\r\n Path,\r\n NewlineKind,\r\n LegacyAdapters,\r\n Async\r\n} from '@rushstack/node-core-library';\r\nimport glob from 'glob';\r\nimport * as path from 'path';\r\nimport { EOL } from 'os';\r\nimport * as chokidar from 'chokidar';\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ITypingsGeneratorOptions<TTypingsResult = string | undefined> {\r\n srcFolder: string;\r\n generatedTsFolder: string;\r\n fileExtensions: string[];\r\n parseAndGenerateTypings: (\r\n fileContents: string,\r\n filePath: string\r\n ) => TTypingsResult | Promise<TTypingsResult>;\r\n terminal?: ITerminal;\r\n globsToIgnore?: string[];\r\n /**\r\n * @deprecated\r\n *\r\n * TODO: Remove when version 1.0.0 is released.\r\n */\r\n filesToIgnore?: string[];\r\n}\r\n\r\n/**\r\n * This is a simple tool that generates .d.ts files for non-TS files.\r\n *\r\n * @public\r\n */\r\nexport class TypingsGenerator {\r\n // Map of target file path -> Set<dependency file path>\r\n private _targetMap: Map<string, Set<string>>;\r\n\r\n // Map of dependency file path -> Set<target file path>\r\n private _dependencyMap: Map<string, Set<string>>;\r\n\r\n protected _options: ITypingsGeneratorOptions;\r\n\r\n public constructor(options: ITypingsGeneratorOptions) {\r\n this._options = {\r\n ...options\r\n };\r\n\r\n if (options.filesToIgnore) {\r\n throw new Error('The filesToIgnore option is no longer supported. Please use globsToIgnore instead.');\r\n }\r\n\r\n if (!this._options.generatedTsFolder) {\r\n throw new Error('generatedTsFolder must be provided');\r\n }\r\n\r\n if (!this._options.srcFolder) {\r\n throw new Error('srcFolder must be provided');\r\n }\r\n\r\n if (Path.isUnder(this._options.srcFolder, this._options.generatedTsFolder)) {\r\n throw new Error('srcFolder must not be under generatedTsFolder');\r\n }\r\n\r\n if (Path.isUnder(this._options.generatedTsFolder, this._options.srcFolder)) {\r\n throw new Error('generatedTsFolder must not be under srcFolder');\r\n }\r\n\r\n if (!this._options.fileExtensions || this._options.fileExtensions.length === 0) {\r\n throw new Error('At least one file extension must be provided.');\r\n }\r\n\r\n if (!this._options.globsToIgnore) {\r\n this._options.globsToIgnore = [];\r\n }\r\n\r\n if (!this._options.terminal) {\r\n this._options.terminal = new Terminal(new ConsoleTerminalProvider({ verboseEnabled: true }));\r\n }\r\n\r\n this._options.fileExtensions = this._normalizeFileExtensions(this._options.fileExtensions);\r\n\r\n this._targetMap = new Map();\r\n\r\n this._dependencyMap = new Map();\r\n }\r\n\r\n public async generateTypingsAsync(): Promise<void> {\r\n await FileSystem.ensureEmptyFolderAsync(this._options.generatedTsFolder);\r\n\r\n const filePaths: string[] = await LegacyAdapters.convertCallbackToPromise(\r\n glob,\r\n `**/*+(${this._options.fileExtensions.join('|')})`,\r\n {\r\n cwd: this._options.srcFolder,\r\n absolute: true,\r\n nosort: true,\r\n nodir: true,\r\n ignore: this._options.globsToIgnore\r\n }\r\n );\r\n\r\n await Async.forEachAsync(\r\n filePaths,\r\n async (filePath: string) => {\r\n filePath = `${this._options.srcFolder}/${filePath}`;\r\n await this._parseFileAndGenerateTypingsAsync(filePath);\r\n },\r\n { concurrency: 50 }\r\n );\r\n }\r\n\r\n public async runWatcherAsync(): Promise<void> {\r\n await FileSystem.ensureFolderAsync(this._options.generatedTsFolder);\r\n\r\n const globBase: string = `${this._options.srcFolder}/**`;\r\n\r\n await new Promise((resolve, reject): void => {\r\n const watcher: chokidar.FSWatcher = chokidar.watch(\r\n this._options.fileExtensions.map((fileExtension) => `${globBase}/*${fileExtension}`),\r\n {\r\n ignored: this._options.globsToIgnore\r\n }\r\n );\r\n const boundGenerateTypingsFunction: (filePath: string) => Promise<void> =\r\n this._parseFileAndGenerateTypingsAsync.bind(this);\r\n watcher.on('add', boundGenerateTypingsFunction);\r\n watcher.on('change', boundGenerateTypingsFunction);\r\n watcher.on('unlink', async (filePath) => {\r\n const generatedTsFilePath: string = this._getTypingsFilePath(filePath);\r\n await FileSystem.deleteFileAsync(generatedTsFilePath);\r\n });\r\n watcher.on('error', reject);\r\n });\r\n }\r\n\r\n /**\r\n * Register file dependencies that may effect the typings of a target file.\r\n * Note: This feature is only useful in watch mode.\r\n * The registerDependency method must be called in the body of parseAndGenerateTypings every\r\n * time because the registry for a file is cleared at the beginning of processing.\r\n */\r\n public registerDependency(target: string, dependency: string): void {\r\n let targetDependencySet: Set<string> | undefined = this._targetMap.get(target);\r\n if (!targetDependencySet) {\r\n targetDependencySet = new Set();\r\n this._targetMap.set(target, targetDependencySet);\r\n }\r\n targetDependencySet.add(dependency);\r\n\r\n let dependencyTargetSet: Set<string> | undefined = this._dependencyMap.get(dependency);\r\n if (!dependencyTargetSet) {\r\n dependencyTargetSet = new Set();\r\n this._dependencyMap.set(dependency, dependencyTargetSet);\r\n }\r\n dependencyTargetSet.add(target);\r\n }\r\n\r\n private async _parseFileAndGenerateTypingsAsync(filePath: string): Promise<void> {\r\n // Clear registered dependencies prior to reprocessing.\r\n this._clearDependencies(filePath);\r\n\r\n // Check for targets that register this file as a dependency, and reprocess them too.\r\n for (const target of this._getDependencyTargets(filePath)) {\r\n await this._parseFileAndGenerateTypingsAsync(target);\r\n }\r\n\r\n try {\r\n const fileContents: string = await FileSystem.readFileAsync(filePath);\r\n const typingsData: string | undefined = await this._options.parseAndGenerateTypings(\r\n fileContents,\r\n filePath\r\n );\r\n const generatedTsFilePath: string = this._getTypingsFilePath(filePath);\r\n\r\n // Typings data will be undefined when no types should be generated for the parsed file.\r\n if (typingsData === undefined) {\r\n return;\r\n }\r\n\r\n const prefixedTypingsData: string = [\r\n '// This file was generated by a tool. Modifying it will produce unexpected behavior',\r\n '',\r\n typingsData\r\n ].join(EOL);\r\n\r\n await FileSystem.writeFileAsync(generatedTsFilePath, prefixedTypingsData, {\r\n ensureFolderExists: true,\r\n convertLineEndings: NewlineKind.OsDefault\r\n });\r\n } catch (e) {\r\n this._options.terminal!.writeError(\r\n `Error occurred parsing and generating typings for file \"${filePath}\": ${e}`\r\n );\r\n }\r\n }\r\n\r\n private _clearDependencies(target: string): void {\r\n const targetDependencySet: Set<string> | undefined = this._targetMap.get(target);\r\n if (targetDependencySet) {\r\n for (const dependency of targetDependencySet) {\r\n this._dependencyMap.get(dependency)!.delete(target);\r\n }\r\n targetDependencySet.clear();\r\n }\r\n }\r\n\r\n private _getDependencyTargets(dependency: string): string[] {\r\n return [...(this._dependencyMap.get(dependency)?.keys() || [])];\r\n }\r\n\r\n private _getTypingsFilePath(filePath: string): string {\r\n const relativeSourceFilePath: string = path.relative(this._options.srcFolder, `${filePath}.d.ts`);\r\n return `${this._options.generatedTsFolder}/${relativeSourceFilePath}`;\r\n }\r\n\r\n private _normalizeFileExtensions(fileExtensions: string[]): string[] {\r\n const result: string[] = [];\r\n for (const fileExtension of fileExtensions) {\r\n if (!fileExtension.startsWith('.')) {\r\n result.push(`.${fileExtension}`);\r\n } else {\r\n result.push(fileExtension);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushstack/typings-generator",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "This library provides functionality for automatically generating typings for non-TS files.",
5
5
  "keywords": [
6
6
  "dts",
@@ -16,15 +16,15 @@
16
16
  "directory": "libraries/typings-generator"
17
17
  },
18
18
  "dependencies": {
19
- "@rushstack/node-core-library": "3.43.2",
19
+ "@rushstack/node-core-library": "3.44.0",
20
20
  "@types/node": "12.20.24",
21
21
  "chokidar": "~3.4.0",
22
22
  "glob": "~7.0.5"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@rushstack/eslint-config": "2.4.5",
26
- "@rushstack/heft": "0.42.3",
27
- "@rushstack/heft-node-rig": "1.2.32",
26
+ "@rushstack/heft": "0.42.4",
27
+ "@rushstack/heft-node-rig": "1.2.33",
28
28
  "@types/glob": "7.1.1"
29
29
  },
30
30
  "scripts": {