@atlaspack/utils 2.14.5-canary.14 → 2.14.5-canary.141

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.
Files changed (147) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/benchmark.js +23 -0
  3. package/lib/DefaultMap.d.ts +13 -0
  4. package/lib/DefaultMap.js +42 -0
  5. package/lib/Deferred.d.ts +8 -0
  6. package/lib/Deferred.js +30 -0
  7. package/lib/PromiseQueue.d.ts +25 -0
  8. package/lib/PromiseQueue.js +112 -0
  9. package/lib/TapStream.d.ts +6 -0
  10. package/lib/TapStream.js +34 -0
  11. package/lib/alternatives.d.ts +3 -0
  12. package/lib/alternatives.js +116 -0
  13. package/lib/ansi-html.d.ts +1 -0
  14. package/lib/ansi-html.js +20 -0
  15. package/lib/blob.d.ts +4 -0
  16. package/lib/blob.js +40 -0
  17. package/lib/bundle-url.d.ts +4 -0
  18. package/lib/bundle-url.js +34 -0
  19. package/lib/collection.d.ts +33 -0
  20. package/lib/collection.js +111 -0
  21. package/lib/config.d.ts +17 -0
  22. package/lib/config.js +174 -0
  23. package/lib/countLines.d.ts +1 -0
  24. package/lib/countLines.js +15 -0
  25. package/lib/debounce.d.ts +1 -0
  26. package/lib/debounce.js +18 -0
  27. package/lib/debug-tools.d.ts +6 -0
  28. package/lib/debug-tools.js +37 -0
  29. package/lib/dependency-location.d.ts +14 -0
  30. package/lib/dependency-location.js +21 -0
  31. package/lib/escape-html.d.ts +1 -0
  32. package/lib/escape-html.js +22 -0
  33. package/lib/generateBuildMetrics.d.ts +18 -0
  34. package/lib/generateBuildMetrics.js +121 -0
  35. package/lib/generateCertificate.d.ts +5 -0
  36. package/lib/generateCertificate.js +129 -0
  37. package/lib/getCertificate.d.ts +6 -0
  38. package/lib/getCertificate.js +18 -0
  39. package/lib/getExisting.d.ts +8 -0
  40. package/lib/getExisting.js +25 -0
  41. package/lib/getModuleParts.d.ts +4 -0
  42. package/lib/getModuleParts.js +30 -0
  43. package/lib/getRootDir.d.ts +2 -0
  44. package/lib/getRootDir.js +52 -0
  45. package/lib/glob.d.ts +10 -0
  46. package/lib/glob.js +118 -0
  47. package/lib/hash.d.ts +7 -0
  48. package/lib/hash.js +50 -0
  49. package/lib/http-server.d.ts +19 -0
  50. package/lib/http-server.js +85 -0
  51. package/lib/index.d.ts +48 -0
  52. package/lib/index.js +635 -37310
  53. package/lib/is-url.d.ts +1 -0
  54. package/lib/is-url.js +24 -0
  55. package/lib/isDirectoryInside.d.ts +2 -0
  56. package/lib/isDirectoryInside.js +18 -0
  57. package/lib/objectHash.d.ts +3 -0
  58. package/lib/objectHash.js +26 -0
  59. package/lib/openInBrowser.d.ts +1 -0
  60. package/lib/openInBrowser.js +74 -0
  61. package/lib/parseCSSImport.d.ts +1 -0
  62. package/lib/parseCSSImport.js +15 -0
  63. package/lib/path.d.ts +8 -0
  64. package/lib/path.js +39 -0
  65. package/lib/prettifyTime.d.ts +1 -0
  66. package/lib/prettifyTime.js +9 -0
  67. package/lib/prettyDiagnostic.d.ts +17 -0
  68. package/lib/prettyDiagnostic.js +134 -0
  69. package/lib/progress-message.d.ts +3 -0
  70. package/lib/progress-message.js +36 -0
  71. package/lib/relativeBundlePath.d.ts +4 -0
  72. package/lib/relativeBundlePath.js +22 -0
  73. package/lib/relativeUrl.d.ts +1 -0
  74. package/lib/relativeUrl.js +24 -0
  75. package/lib/replaceBundleReferences.d.ts +39 -0
  76. package/lib/replaceBundleReferences.js +199 -0
  77. package/lib/schema.d.ts +107 -0
  78. package/lib/schema.js +355 -0
  79. package/lib/shared-buffer.d.ts +2 -0
  80. package/lib/shared-buffer.js +31 -0
  81. package/lib/sourcemap.d.ts +16 -0
  82. package/lib/sourcemap.js +127 -0
  83. package/lib/stream.d.ts +8 -0
  84. package/lib/stream.js +76 -0
  85. package/lib/throttle.d.ts +1 -0
  86. package/lib/throttle.js +15 -0
  87. package/lib/urlJoin.d.ts +5 -0
  88. package/lib/urlJoin.js +35 -0
  89. package/package.json +24 -17
  90. package/src/{DefaultMap.js → DefaultMap.ts} +8 -12
  91. package/src/Deferred.ts +26 -0
  92. package/src/{PromiseQueue.js → PromiseQueue.ts} +40 -35
  93. package/src/{TapStream.js → TapStream.ts} +8 -7
  94. package/src/{alternatives.js → alternatives.ts} +14 -15
  95. package/src/{ansi-html.js → ansi-html.ts} +1 -1
  96. package/src/{blob.js → blob.ts} +2 -4
  97. package/src/{bundle-url.js → bundle-url.ts} +3 -5
  98. package/src/{collection.js → collection.ts} +23 -20
  99. package/src/{config.js → config.ts} +18 -19
  100. package/src/{countLines.js → countLines.ts} +0 -2
  101. package/src/{debounce.js → debounce.ts} +3 -5
  102. package/src/debug-tools.ts +43 -0
  103. package/src/{dependency-location.js → dependency-location.ts} +15 -11
  104. package/src/{escape-html.js → escape-html.ts} +5 -3
  105. package/src/{generateBuildMetrics.js → generateBuildMetrics.ts} +16 -18
  106. package/src/{generateCertificate.js → generateCertificate.ts} +7 -5
  107. package/src/{getCertificate.js → getCertificate.ts} +5 -3
  108. package/src/{getExisting.js → getExisting.ts} +4 -3
  109. package/src/{getModuleParts.js → getModuleParts.ts} +3 -2
  110. package/src/{getRootDir.js → getRootDir.ts} +0 -2
  111. package/src/{glob.js → glob.ts} +14 -10
  112. package/src/{hash.js → hash.ts} +22 -17
  113. package/src/{http-server.js → http-server.ts} +32 -38
  114. package/src/{index.js → index.ts} +13 -9
  115. package/src/{is-url.js → is-url.ts} +1 -2
  116. package/src/{isDirectoryInside.js → isDirectoryInside.ts} +0 -1
  117. package/src/{objectHash.js → objectHash.ts} +1 -4
  118. package/src/{openInBrowser.js → openInBrowser.ts} +2 -4
  119. package/src/{parseCSSImport.js → parseCSSImport.ts} +0 -2
  120. package/src/{path.js → path.ts} +1 -3
  121. package/src/{prettifyTime.js → prettifyTime.ts} +0 -2
  122. package/src/{prettyDiagnostic.js → prettyDiagnostic.ts} +22 -20
  123. package/src/progress-message.ts +38 -0
  124. package/src/{relativeBundlePath.js → relativeBundlePath.ts} +3 -3
  125. package/src/{relativeUrl.js → relativeUrl.ts} +0 -1
  126. package/src/{replaceBundleReferences.js → replaceBundleReferences.ts} +54 -36
  127. package/src/{schema.js → schema.ts} +158 -141
  128. package/src/{shared-buffer.js → shared-buffer.ts} +5 -3
  129. package/src/{sourcemap.js → sourcemap.ts} +16 -6
  130. package/src/{stream.js → stream.ts} +29 -21
  131. package/src/throttle.ts +13 -0
  132. package/src/{urlJoin.js → urlJoin.ts} +1 -3
  133. package/test/{DefaultMap.test.js → DefaultMap.test.ts} +4 -6
  134. package/test/{PromiseQueue.test.js → PromiseQueue.test.ts} +5 -6
  135. package/test/{collection.test.js → collection.test.ts} +0 -2
  136. package/test/{config.test.js → config.test.ts} +0 -3
  137. package/test/{objectHash.test.js → objectHash.test.ts} +4 -5
  138. package/test/{prettifyTime.test.js → prettifyTime.test.ts} +0 -1
  139. package/test/{replaceBundleReferences.test.js → replaceBundleReferences.test.ts} +0 -32
  140. package/test/{sourcemap.test.js → sourcemap.test.ts} +0 -1
  141. package/test/{throttle.test.js → throttle.test.ts} +1 -3
  142. package/test/{urlJoin.test.js → urlJoin.test.ts} +0 -2
  143. package/tsconfig.json +4 -0
  144. package/lib/index.js.map +0 -1
  145. package/src/Deferred.js +0 -23
  146. package/src/progress-message.js +0 -22
  147. package/src/throttle.js +0 -15
@@ -1,6 +1,4 @@
1
- // @flow strict-local
2
-
3
- let bundleURL: ?string = null;
1
+ let bundleURL: string | null | undefined = null;
4
2
  function getBundleURLCached(): string {
5
3
  if (bundleURL == null) {
6
4
  bundleURL = _getBundleURL();
@@ -13,7 +11,7 @@ function _getBundleURL(): string {
13
11
  // Attempt to find the URL of the current script and use that as the base URL
14
12
  try {
15
13
  throw new Error();
16
- } catch (err) {
14
+ } catch (err: any) {
17
15
  let stack: string = typeof err.stack === 'string' ? err.stack : '';
18
16
  let matches = stack.match(/(https?|file|ftp):\/\/[^)\n]+/g);
19
17
  if (matches) {
@@ -24,7 +22,7 @@ function _getBundleURL(): string {
24
22
  return '/';
25
23
  }
26
24
 
27
- export function getBaseURL(url: ?string): string {
25
+ export function getBaseURL(url?: string | null): string {
28
26
  if (url == null) {
29
27
  return '/';
30
28
  }
@@ -1,20 +1,16 @@
1
- // @flow strict-local
2
-
3
1
  export function unique<T>(array: Array<T>): Array<T> {
4
2
  return [...new Set(array)];
5
3
  }
6
4
 
7
5
  export function objectSortedEntries(obj: {
8
- +[string]: mixed,
9
- ...
10
- }): Array<[string, mixed]> {
6
+ readonly [key: string]: unknown;
7
+ }): Array<[string, unknown]> {
11
8
  return Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
12
9
  }
13
10
 
14
11
  export function objectSortedEntriesDeep(object: {
15
- +[string]: mixed,
16
- ...
17
- }): Array<[string, mixed]> {
12
+ readonly [key: string]: unknown;
13
+ }): Array<[string, unknown]> {
18
14
  let sortedEntries = objectSortedEntries(object);
19
15
  for (let i = 0; i < sortedEntries.length; i++) {
20
16
  sortedEntries[i][1] = sortEntry(sortedEntries[i][1]);
@@ -22,13 +18,13 @@ export function objectSortedEntriesDeep(object: {
22
18
  return sortedEntries;
23
19
  }
24
20
 
25
- function sortEntry(entry: mixed) {
21
+ function sortEntry(entry: unknown): unknown {
26
22
  if (Array.isArray(entry)) {
27
23
  return entry.map(sortEntry);
28
24
  }
29
25
 
30
26
  if (typeof entry === 'object' && entry != null) {
31
- return objectSortedEntriesDeep(entry);
27
+ return objectSortedEntriesDeep(entry as {readonly [key: string]: unknown});
32
28
  }
33
29
 
34
30
  return entry;
@@ -44,11 +40,8 @@ function sortEntry(entry: mixed) {
44
40
  * @param {*} b Set B
45
41
  * @returns A \ B
46
42
  */
47
- export function setDifference<T>(
48
- a: $ReadOnlySet<T>,
49
- b: $ReadOnlySet<T>,
50
- ): Set<T> {
51
- let difference = new Set();
43
+ export function setDifference<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): Set<T> {
44
+ let difference = new Set<T>();
52
45
  for (let e of a) {
53
46
  if (!b.has(e)) {
54
47
  difference.add(e);
@@ -69,10 +62,10 @@ export function setDifference<T>(
69
62
  * @returns A Δ B
70
63
  */
71
64
  export function setSymmetricDifference<T>(
72
- a: $ReadOnlySet<T>,
73
- b: $ReadOnlySet<T>,
65
+ a: ReadonlySet<T>,
66
+ b: ReadonlySet<T>,
74
67
  ): Set<T> {
75
- let difference = new Set();
68
+ let difference = new Set<T>();
76
69
  for (let e of a) {
77
70
  if (!b.has(e)) {
78
71
  difference.add(e);
@@ -86,7 +79,7 @@ export function setSymmetricDifference<T>(
86
79
  return difference;
87
80
  }
88
81
 
89
- export function setIntersect<T>(a: Set<T>, b: $ReadOnlySet<T>): void {
82
+ export function setIntersect<T>(a: Set<T>, b: ReadonlySet<T>): void {
90
83
  for (let entry of a) {
91
84
  if (!b.has(entry)) {
92
85
  a.delete(entry);
@@ -94,11 +87,21 @@ export function setIntersect<T>(a: Set<T>, b: $ReadOnlySet<T>): void {
94
87
  }
95
88
  }
96
89
 
90
+ export function setIntersectStatic<T>(a: Set<T>, b: Set<T>): Set<T> {
91
+ let intersection = new Set<T>();
92
+ for (let entry of a) {
93
+ if (b.has(entry)) {
94
+ intersection.add(entry);
95
+ }
96
+ }
97
+ return intersection;
98
+ }
99
+
97
100
  export function setUnion<T>(a: Iterable<T>, b: Iterable<T>): Set<T> {
98
101
  return new Set([...a, ...b]);
99
102
  }
100
103
 
101
- export function setEqual<T>(a: $ReadOnlySet<T>, b: $ReadOnlySet<T>): boolean {
104
+ export function setEqual<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): boolean {
102
105
  if (a.size != b.size) {
103
106
  return false;
104
107
  }
@@ -1,24 +1,24 @@
1
- // @flow
2
-
3
1
  import type {ConfigResult, File, FilePath} from '@atlaspack/types';
4
2
  import type {FileSystem} from '@atlaspack/fs';
5
3
  import ThrowableDiagnostic from '@atlaspack/diagnostic';
6
4
  import path from 'path';
5
+ // @ts-expect-error TS7016
7
6
  import clone from 'clone';
8
7
  import json5 from 'json5';
9
8
  import {parse as toml} from '@iarna/toml';
10
9
  import LRU from 'lru-cache';
11
10
 
12
- export type ConfigOutput = {|
13
- config: ConfigResult,
14
- files: Array<File>,
15
- |};
11
+ export type ConfigOutput = {
12
+ config: ConfigResult;
13
+ files: Array<File>;
14
+ };
16
15
 
17
- export type ConfigOptions = {|
18
- parse?: boolean,
19
- parser?: (string) => any,
20
- |};
16
+ export type ConfigOptions = {
17
+ parse?: boolean;
18
+ parser?: (arg1: string) => any;
19
+ };
21
20
 
21
+ // @ts-expect-error TS2351
22
22
  const configCache = new LRU<FilePath, ConfigOutput>({max: 500});
23
23
  const resolveCache = new Map();
24
24
 
@@ -27,7 +27,7 @@ export function resolveConfig(
27
27
  filepath: FilePath,
28
28
  filenames: Array<FilePath>,
29
29
  projectRoot: FilePath,
30
- ): Promise<?FilePath> {
30
+ ): Promise<FilePath | null | undefined> {
31
31
  // Cache the result of resolving config for this directory.
32
32
  // This is automatically invalidated at the end of the current build.
33
33
  let key = path.dirname(filepath) + filenames.join(',');
@@ -50,7 +50,7 @@ export function resolveConfigSync(
50
50
  filepath: FilePath,
51
51
  filenames: Array<FilePath>,
52
52
  projectRoot: FilePath,
53
- ): ?FilePath {
53
+ ): FilePath | null | undefined {
54
54
  return fs.findAncestorFile(filenames, path.dirname(filepath), projectRoot);
55
55
  }
56
56
 
@@ -59,7 +59,7 @@ export async function loadConfig(
59
59
  filepath: FilePath,
60
60
  filenames: Array<FilePath>,
61
61
  projectRoot: FilePath,
62
- opts: ?ConfigOptions,
62
+ opts?: ConfigOptions | null,
63
63
  ): Promise<ConfigOutput | null> {
64
64
  let parse = opts?.parse ?? true;
65
65
  let configFile = await resolveConfig(fs, filepath, filenames, projectRoot);
@@ -73,7 +73,6 @@ export async function loadConfig(
73
73
  let extname = path.extname(configFile).slice(1);
74
74
  if (extname === 'js' || extname === 'cjs') {
75
75
  let output = {
76
- // $FlowFixMe
77
76
  config: clone(module.require(configFile)),
78
77
  files: [{filePath: configFile}],
79
78
  };
@@ -83,7 +82,7 @@ export async function loadConfig(
83
82
  }
84
83
 
85
84
  return readConfig(fs, configFile, opts);
86
- } catch (err) {
85
+ } catch (err: any) {
87
86
  if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ENOENT') {
88
87
  return null;
89
88
  }
@@ -103,7 +102,7 @@ loadConfig.clear = () => {
103
102
  export async function readConfig(
104
103
  fs: FileSystem,
105
104
  configFile: FilePath,
106
- opts: ?ConfigOptions,
105
+ opts?: ConfigOptions | null,
107
106
  ): Promise<ConfigOutput | null> {
108
107
  let parse = opts?.parse ?? true;
109
108
  let cachedOutput = configCache.get(String(parse) + configFile);
@@ -121,7 +120,7 @@ export async function readConfig(
121
120
  let parse = opts?.parser ?? getParser(extname);
122
121
  try {
123
122
  config = parse(configContent);
124
- } catch (e) {
123
+ } catch (e: any) {
125
124
  if (extname !== '' && extname !== 'json') {
126
125
  throw e;
127
126
  }
@@ -161,7 +160,7 @@ export async function readConfig(
161
160
 
162
161
  configCache.set(String(parse) + configFile, output);
163
162
  return output;
164
- } catch (err) {
163
+ } catch (err: any) {
165
164
  if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ENOENT') {
166
165
  return null;
167
166
  }
@@ -170,7 +169,7 @@ export async function readConfig(
170
169
  }
171
170
  }
172
171
 
173
- function getParser(extname) {
172
+ function getParser(extname: string) {
174
173
  switch (extname) {
175
174
  case 'toml':
176
175
  return toml;
@@ -1,5 +1,3 @@
1
- // @flow strict-local
2
-
3
1
  export default function countLines(
4
2
  string: string,
5
3
  startIndex: number = 0,
@@ -1,10 +1,8 @@
1
- // @flow strict-local
2
-
3
- export default function debounce<TArgs: Array<mixed>>(
4
- fn: (...args: TArgs) => mixed,
1
+ export default function debounce<TArgs extends Array<unknown>>(
2
+ fn: (...args: TArgs) => unknown,
5
3
  delay: number,
6
4
  ): (...args: TArgs) => void {
7
- let timeout;
5
+ let timeout: NodeJS.Timeout | undefined | null;
8
6
 
9
7
  return function (...args: TArgs) {
10
8
  if (timeout) {
@@ -0,0 +1,43 @@
1
+ /*
2
+ * These tools are intended for Atlaspack developers, to provide extra utilities
3
+ * to make debugging Atlaspack issues more straightforward.
4
+ *
5
+ * To enable a tool, set the `ATLASPACK_DEBUG_TOOLS` environment variable to a
6
+ * comma-separated list of tool names. For example:
7
+ * `ATLASPACK_DEBUG_TOOLS="asset-file-names-in-output,simple-cli-reporter"`
8
+ *
9
+ * You can enable all tools by setting `ATLASPACK_DEBUG_TOOLS=all`.
10
+ */
11
+
12
+ type DebugTools = {
13
+ ['asset-file-names-in-output']: boolean;
14
+ ['simple-cli-reporter']: boolean;
15
+ };
16
+
17
+ export let debugTools: DebugTools = {
18
+ 'asset-file-names-in-output': false,
19
+ 'simple-cli-reporter': false,
20
+ };
21
+
22
+ const envVarValue = process.env.ATLASPACK_DEBUG_TOOLS ?? '';
23
+
24
+ for (let tool of envVarValue.split(',')) {
25
+ tool = tool.trim();
26
+
27
+ if (tool === 'all') {
28
+ for (let key in debugTools) {
29
+ debugTools[key as keyof DebugTools] = true;
30
+ }
31
+ break;
32
+ } else if (debugTools.hasOwnProperty(tool)) {
33
+ debugTools[tool as keyof DebugTools] = true;
34
+ } else if (tool === '') {
35
+ continue;
36
+ } else {
37
+ throw new Error(
38
+ `Invalid debug tool option: ${tool}. Valid options are: ${Object.keys(
39
+ debugTools,
40
+ ).join(', ')}`,
41
+ );
42
+ }
43
+ }
@@ -1,20 +1,24 @@
1
- // @flow
2
-
3
1
  export default function createDependencyLocation(
4
- start: {|
5
- line: number,
6
- column: number,
7
- |},
2
+ start: {
3
+ line: number;
4
+ column: number;
5
+ },
8
6
  specifier: string,
9
7
  lineOffset: number = 0,
10
8
  columnOffset: number = 0,
11
9
  // Imports are usually wrapped in quotes
12
10
  importWrapperLength: number = 2,
13
- ): {|
14
- end: {|column: number, line: number|},
15
- filePath: string,
16
- start: {|column: number, line: number|},
17
- |} {
11
+ ): {
12
+ end: {
13
+ column: number;
14
+ line: number;
15
+ };
16
+ filePath: string;
17
+ start: {
18
+ column: number;
19
+ line: number;
20
+ };
21
+ } {
18
22
  return {
19
23
  filePath: specifier,
20
24
  start: {
@@ -1,4 +1,3 @@
1
- // @flow
2
1
  // Based on _.escape https://github.com/lodash/lodash/blob/master/escape.js
3
2
  const reUnescapedHtml = /[&<>"']/g;
4
3
  const reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
@@ -9,11 +8,14 @@ const htmlEscapes = {
9
8
  '>': '&gt;',
10
9
  '"': '&quot;',
11
10
  "'": '&#39;',
12
- };
11
+ } as const;
13
12
 
14
13
  export function escapeHTML(s: string): string {
15
14
  if (reHasUnescapedHtml.test(s)) {
16
- return s.replace(reUnescapedHtml, (c) => htmlEscapes[c]);
15
+ return s.replace(
16
+ reUnescapedHtml,
17
+ (c) => htmlEscapes[c as keyof typeof htmlEscapes],
18
+ );
17
19
  }
18
20
 
19
21
  return s;
@@ -1,5 +1,3 @@
1
- // @flow
2
-
3
1
  import type {FilePath, PackagedBundle} from '@atlaspack/types';
4
2
  import type {FileSystem} from '@atlaspack/fs';
5
3
  import SourceMap from '@parcel/source-map';
@@ -7,29 +5,29 @@ import nullthrows from 'nullthrows';
7
5
  import path from 'path';
8
6
  import {loadSourceMapUrl} from './';
9
7
 
10
- export type AssetStats = {|
11
- filePath: string,
12
- size: number,
13
- originalSize: number,
14
- time: number,
15
- |};
8
+ export type AssetStats = {
9
+ filePath: string;
10
+ size: number;
11
+ originalSize: number;
12
+ time: number;
13
+ };
16
14
 
17
- export type BundleStats = {|
18
- filePath: string,
19
- size: number,
20
- time: number,
21
- assets: Array<AssetStats>,
22
- |};
15
+ export type BundleStats = {
16
+ filePath: string;
17
+ size: number;
18
+ time: number;
19
+ assets: Array<AssetStats>;
20
+ };
23
21
 
24
- export type BuildMetrics = {|
25
- bundles: Array<BundleStats>,
26
- |};
22
+ export type BuildMetrics = {
23
+ bundles: Array<BundleStats>;
24
+ };
27
25
 
28
26
  async function getSourcemapSizes(
29
27
  filePath: FilePath,
30
28
  fs: FileSystem,
31
29
  projectRoot: FilePath,
32
- ): Promise<?Map<string, number>> {
30
+ ): Promise<Map<string, number> | null | undefined> {
33
31
  let bundleContents = await fs.readFile(filePath, 'utf-8');
34
32
  let mapUrlData = await loadSourceMapUrl(fs, filePath, bundleContents);
35
33
  if (!mapUrlData) {
@@ -1,4 +1,3 @@
1
- // @flow
2
1
  import type {FileSystem} from '@atlaspack/fs';
3
2
  import forge from 'node-forge';
4
3
  import path from 'path';
@@ -7,8 +6,11 @@ import logger from '@atlaspack/logger';
7
6
  export default async function generateCertificate(
8
7
  fs: FileSystem,
9
8
  cacheDir: string,
10
- host: ?string,
11
- ): Promise<{|cert: Buffer, key: Buffer|}> {
9
+ host?: string | null,
10
+ ): Promise<{
11
+ cert: Buffer;
12
+ key: Buffer;
13
+ }> {
12
14
  let certDirectory = cacheDir;
13
15
 
14
16
  const privateKeyPath = path.join(certDirectory, 'private.pem');
@@ -134,7 +136,7 @@ export default async function generateCertificate(
134
136
  await fs.writeFile(certPath, certPem);
135
137
 
136
138
  return {
137
- key: privPem,
138
- cert: certPem,
139
+ key: privPem as unknown as Buffer,
140
+ cert: certPem as unknown as Buffer,
139
141
  };
140
142
  }
@@ -1,17 +1,19 @@
1
- // @flow
2
1
  import type {HTTPSOptions} from '@atlaspack/types';
3
2
  import type {FileSystem} from '@atlaspack/fs';
4
3
 
5
4
  export default async function getCertificate(
6
5
  fs: FileSystem,
7
6
  options: HTTPSOptions,
8
- ): Promise<{|cert: Buffer, key: Buffer|}> {
7
+ ): Promise<{
8
+ cert: Buffer;
9
+ key: Buffer;
10
+ }> {
9
11
  try {
10
12
  let cert = await fs.readFile(options.cert);
11
13
  let key = await fs.readFile(options.key);
12
14
 
13
15
  return {key, cert};
14
- } catch (err) {
16
+ } catch (err: any) {
15
17
  throw new Error('Certificate and/or key not found');
16
18
  }
17
19
  }
@@ -1,5 +1,3 @@
1
- // @flow strict-local
2
-
3
1
  import fs from 'fs';
4
2
 
5
3
  /**
@@ -9,7 +7,10 @@ import fs from 'fs';
9
7
  export default function getExisting(
10
8
  minifiedPath: string,
11
9
  sourcePath: string,
12
- ): {|minified: string, source: string|} {
10
+ ): {
11
+ minified: string;
12
+ source: string;
13
+ } {
13
14
  let source = fs.readFileSync(sourcePath, 'utf8').trim();
14
15
  return {
15
16
  source,
@@ -1,4 +1,3 @@
1
- // @flow strict-local
2
1
  import path from 'path';
3
2
 
4
3
  import {normalizeSeparators} from './path';
@@ -6,7 +5,9 @@ import {normalizeSeparators} from './path';
6
5
  /**
7
6
  * Returns the package name and the optional subpath
8
7
  */
9
- export default function getModuleParts(_name: string): [string, ?string] {
8
+ export default function getModuleParts(
9
+ _name: string,
10
+ ): [string, string | null | undefined] {
10
11
  let name = path.normalize(_name);
11
12
  let splitOn = name.indexOf(path.sep);
12
13
  if (name.charAt(0) === '@') {
@@ -1,5 +1,3 @@
1
- // @flow strict-local
2
-
3
1
  import type {FilePath} from '@atlaspack/types';
4
2
  import {isGlob} from './glob';
5
3
  import path from 'path';
@@ -1,10 +1,10 @@
1
- // @flow
2
-
3
1
  import type {FilePath, Glob} from '@atlaspack/types';
4
2
  import type {FileSystem} from '@atlaspack/fs';
5
3
 
4
+ // @ts-expect-error TS7016
6
5
  import _isGlob from 'is-glob';
7
- import fastGlob, {type FastGlobOptions} from 'fast-glob';
6
+ // @ts-expect-error TS2305
7
+ import fastGlob, {FastGlobOptions} from 'fast-glob';
8
8
  import micromatch, {isMatch, makeRe, type Options} from 'micromatch';
9
9
  import {normalizeSeparators} from './path';
10
10
 
@@ -44,25 +44,27 @@ export function globSync(
44
44
  fs: FileSystem,
45
45
  options?: FastGlobOptions<FilePath>,
46
46
  ): Array<FilePath> {
47
- // $FlowFixMe
48
47
  options = {
49
48
  ...options,
50
49
  fs: {
50
+ // @ts-expect-error TS7006
51
51
  statSync: (p) => {
52
52
  return fs.statSync(p);
53
53
  },
54
+ // @ts-expect-error TS7006
54
55
  lstatSync: (p) => {
55
56
  // Our FileSystem interface doesn't have lstat support at the moment,
56
57
  // but this is fine for our purposes since we follow symlinks by default.
57
58
  return fs.statSync(p);
58
59
  },
60
+ // @ts-expect-error TS7006
59
61
  readdirSync: (p, opts) => {
60
62
  return fs.readdirSync(p, opts);
61
63
  },
62
64
  },
63
65
  };
64
66
 
65
- // $FlowFixMe
67
+ // @ts-expect-error TS2322
66
68
  return fastGlob.sync(normalizeSeparators(p), options);
67
69
  }
68
70
 
@@ -71,26 +73,28 @@ export function glob(
71
73
  fs: FileSystem,
72
74
  options: FastGlobOptions<FilePath>,
73
75
  ): Promise<Array<FilePath>> {
74
- // $FlowFixMe
75
76
  options = {
76
77
  ...options,
77
78
  fs: {
79
+ // @ts-expect-error TS7006
78
80
  stat: async (p, cb) => {
79
81
  try {
80
82
  cb(null, await fs.stat(p));
81
- } catch (err) {
83
+ } catch (err: any) {
82
84
  cb(err);
83
85
  }
84
86
  },
87
+ // @ts-expect-error TS7006
85
88
  lstat: async (p, cb) => {
86
89
  // Our FileSystem interface doesn't have lstat support at the moment,
87
90
  // but this is fine for our purposes since we follow symlinks by default.
88
91
  try {
89
92
  cb(null, await fs.stat(p));
90
- } catch (err) {
93
+ } catch (err: any) {
91
94
  cb(err);
92
95
  }
93
96
  },
97
+ // @ts-expect-error TS7006
94
98
  readdir: async (p, opts, cb) => {
95
99
  if (typeof opts === 'function') {
96
100
  cb = opts;
@@ -99,13 +103,13 @@ export function glob(
99
103
 
100
104
  try {
101
105
  cb(null, await fs.readdir(p, opts));
102
- } catch (err) {
106
+ } catch (err: any) {
103
107
  cb(err);
104
108
  }
105
109
  },
106
110
  },
107
111
  };
108
112
 
109
- // $FlowFixMe Added in Flow 0.121.0 upgrade in #4381
113
+ // @ts-expect-error TS2322
110
114
  return fastGlob(normalizeSeparators(p), options);
111
115
  }
@@ -1,5 +1,3 @@
1
- // @flow strict-local
2
-
3
1
  import type {Readable} from 'stream';
4
2
  import type {FileSystem} from '@atlaspack/fs';
5
3
 
@@ -8,28 +6,35 @@ import {hashString, Hash} from '@atlaspack/rust';
8
6
 
9
7
  export function hashStream(stream: Readable): Promise<string> {
10
8
  let hash = new Hash();
11
- return new Promise((resolve, reject) => {
12
- stream.on('error', (err) => {
13
- reject(err);
14
- });
15
- stream
16
- .on('data', (chunk) => {
17
- hash.writeBuffer(chunk);
18
- })
19
- .on('end', function () {
20
- resolve(hash.finish());
21
- })
22
- .on('error', (err) => {
9
+ return new Promise(
10
+ (
11
+ resolve: (result: Promise<string> | string) => void,
12
+ reject: (error?: any) => void,
13
+ ) => {
14
+ stream.on('error', (err) => {
23
15
  reject(err);
24
16
  });
25
- });
17
+ stream
18
+ .on('data', (chunk) => {
19
+ hash.writeBuffer(chunk);
20
+ })
21
+ .on('end', function () {
22
+ resolve(hash.finish());
23
+ })
24
+ .on('error', (err) => {
25
+ reject(err);
26
+ });
27
+ },
28
+ );
26
29
  }
27
30
 
28
- export function hashObject(obj: {+[string]: mixed, ...}): string {
31
+ export function hashObject(obj: {readonly [key: string]: unknown}): string {
29
32
  return hashString(JSON.stringify(objectSortedEntriesDeep(obj)));
30
33
  }
31
34
 
32
- let testCache: {|[string]: Promise<string>|} = {
35
+ let testCache: {
36
+ [key: string]: Promise<string>;
37
+ } = {
33
38
  /*:: ...null */
34
39
  };
35
40
  export function hashFile(fs: FileSystem, filePath: string): Promise<string> {