build-raptor 0.131.0 → 0.133.0

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 (214) hide show
  1. package/dist/deps/brand/brand.d.ts +5 -0
  2. package/dist/deps/brand/brand.js +3 -0
  3. package/dist/deps/brand/index.d.ts +1 -0
  4. package/dist/deps/brand/index.js +18 -0
  5. package/dist/deps/build-failed-error/build-failed-error.d.ts +14 -0
  6. package/dist/deps/build-failed-error/build-failed-error.js +13 -0
  7. package/dist/deps/build-failed-error/index.d.ts +1 -0
  8. package/dist/deps/build-failed-error/index.js +18 -0
  9. package/dist/deps/build-raptor-api/build-raptor-api.d.ts +351 -0
  10. package/dist/deps/build-raptor-api/build-raptor-api.js +132 -0
  11. package/dist/deps/build-raptor-api/index.d.ts +2 -0
  12. package/dist/deps/build-raptor-api/index.js +19 -0
  13. package/dist/deps/build-raptor-api/step-by-step-processor.d.ts +35 -0
  14. package/dist/deps/build-raptor-api/step-by-step-processor.js +3 -0
  15. package/dist/deps/build-raptor-core/breakdown.d.ts +18 -0
  16. package/dist/deps/build-raptor-core/breakdown.js +99 -0
  17. package/dist/deps/build-raptor-core/build-raptor-config.d.ts +21 -0
  18. package/dist/deps/build-raptor-core/build-raptor-config.js +25 -0
  19. package/dist/deps/build-raptor-core/default-asset-publisher.d.ts +10 -0
  20. package/dist/deps/build-raptor-core/default-asset-publisher.js +16 -0
  21. package/dist/deps/build-raptor-core/engine-bootstrapper.d.ts +50 -0
  22. package/dist/deps/build-raptor-core/engine-bootstrapper.js +200 -0
  23. package/dist/deps/build-raptor-core/engine-event-scheme.d.ts +20 -0
  24. package/dist/deps/build-raptor-core/engine-event-scheme.js +3 -0
  25. package/dist/deps/build-raptor-core/engine.d.ts +66 -0
  26. package/dist/deps/build-raptor-core/engine.js +285 -0
  27. package/dist/deps/build-raptor-core/examplify-zod.d.ts +93 -0
  28. package/dist/deps/build-raptor-core/examplify-zod.js +257 -0
  29. package/dist/deps/build-raptor-core/execution-plan.d.ts +20 -0
  30. package/dist/deps/build-raptor-core/execution-plan.js +66 -0
  31. package/dist/deps/build-raptor-core/execution-record.d.ts +17 -0
  32. package/dist/deps/build-raptor-core/execution-record.js +3 -0
  33. package/dist/deps/build-raptor-core/execution-type.d.ts +2 -0
  34. package/dist/deps/build-raptor-core/execution-type.js +3 -0
  35. package/dist/deps/build-raptor-core/find-repo-dir.d.ts +1 -0
  36. package/dist/deps/build-raptor-core/find-repo-dir.js +27 -0
  37. package/dist/deps/build-raptor-core/fingerprint-ledger.d.ts +33 -0
  38. package/dist/deps/build-raptor-core/fingerprint-ledger.js +164 -0
  39. package/dist/deps/build-raptor-core/fingerprint.d.ts +3 -0
  40. package/dist/deps/build-raptor-core/fingerprint.js +13 -0
  41. package/dist/deps/build-raptor-core/fingerprinter.d.ts +15 -0
  42. package/dist/deps/build-raptor-core/fingerprinter.js +122 -0
  43. package/dist/deps/build-raptor-core/hasher.d.ts +21 -0
  44. package/dist/deps/build-raptor-core/hasher.js +93 -0
  45. package/dist/deps/build-raptor-core/index.d.ts +9 -0
  46. package/dist/deps/build-raptor-core/index.js +26 -0
  47. package/dist/deps/build-raptor-core/model.d.ts +17 -0
  48. package/dist/deps/build-raptor-core/model.js +40 -0
  49. package/dist/deps/build-raptor-core/nop-asset-publisher.d.ts +6 -0
  50. package/dist/deps/build-raptor-core/nop-asset-publisher.js +12 -0
  51. package/dist/deps/build-raptor-core/performance-report.d.ts +5 -0
  52. package/dist/deps/build-raptor-core/performance-report.js +3 -0
  53. package/dist/deps/build-raptor-core/phase.d.ts +1 -0
  54. package/dist/deps/build-raptor-core/phase.js +3 -0
  55. package/dist/deps/build-raptor-core/planner.d.ts +12 -0
  56. package/dist/deps/build-raptor-core/planner.js +43 -0
  57. package/dist/deps/build-raptor-core/purger.d.ts +11 -0
  58. package/dist/deps/build-raptor-core/purger.js +65 -0
  59. package/dist/deps/build-raptor-core/slot-index.d.ts +6 -0
  60. package/dist/deps/build-raptor-core/slot-index.js +17 -0
  61. package/dist/deps/build-raptor-core/step-by-step-transmitter.d.ts +15 -0
  62. package/dist/deps/build-raptor-core/step-by-step-transmitter.js +94 -0
  63. package/dist/deps/build-raptor-core/tar-stream.d.ts +20 -0
  64. package/dist/deps/build-raptor-core/tar-stream.js +194 -0
  65. package/dist/deps/build-raptor-core/task-executor.d.ts +32 -0
  66. package/dist/deps/build-raptor-core/task-executor.js +321 -0
  67. package/dist/deps/build-raptor-core/task-store-cli.d.ts +1 -0
  68. package/dist/deps/build-raptor-core/task-store-cli.js +61 -0
  69. package/dist/deps/build-raptor-core/task-store-event.d.ts +17 -0
  70. package/dist/deps/build-raptor-core/task-store-event.js +3 -0
  71. package/dist/deps/build-raptor-core/task-store.d.ts +41 -0
  72. package/dist/deps/build-raptor-core/task-store.js +302 -0
  73. package/dist/deps/build-raptor-core/task-summary.d.ts +12 -0
  74. package/dist/deps/build-raptor-core/task-summary.js +3 -0
  75. package/dist/deps/build-raptor-core/task-tracker.d.ts +23 -0
  76. package/dist/deps/build-raptor-core/task-tracker.js +97 -0
  77. package/dist/deps/build-raptor-core/task.d.ts +30 -0
  78. package/dist/deps/build-raptor-core/task.js +90 -0
  79. package/dist/deps/build-raptor-core/updatable-task-output-registry.d.ts +13 -0
  80. package/dist/deps/build-raptor-core/updatable-task-output-registry.js +75 -0
  81. package/dist/deps/build-raptor-core/validate-task-infos.d.ts +3 -0
  82. package/dist/deps/build-raptor-core/validate-task-infos.js +53 -0
  83. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.d.ts +1 -0
  84. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.js +18 -0
  85. package/dist/deps/build-raptor-core-testkit/driver.d.ts +119 -0
  86. package/dist/deps/build-raptor-core-testkit/driver.js +305 -0
  87. package/dist/deps/build-raptor-core-testkit/index.d.ts +3 -0
  88. package/dist/deps/build-raptor-core-testkit/index.js +20 -0
  89. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.d.ts +35 -0
  90. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.js +226 -0
  91. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.d.ts +27 -0
  92. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.js +140 -0
  93. package/dist/deps/build-run-id/build-run-id.d.ts +3 -0
  94. package/dist/deps/build-run-id/build-run-id.js +13 -0
  95. package/dist/deps/build-run-id/index.d.ts +1 -0
  96. package/dist/deps/build-run-id/index.js +18 -0
  97. package/dist/deps/core-types/core-types.d.ts +29 -0
  98. package/dist/deps/core-types/core-types.js +81 -0
  99. package/dist/deps/core-types/index.d.ts +1 -0
  100. package/dist/deps/core-types/index.js +18 -0
  101. package/dist/deps/logger/index.d.ts +1 -0
  102. package/dist/deps/logger/index.js +18 -0
  103. package/dist/deps/logger/logger.d.ts +26 -0
  104. package/dist/deps/logger/logger.js +152 -0
  105. package/dist/deps/misc/arrays.d.ts +7 -0
  106. package/dist/deps/misc/arrays.js +67 -0
  107. package/dist/deps/misc/camelize-record.d.ts +6 -0
  108. package/dist/deps/misc/camelize-record.js +16 -0
  109. package/dist/deps/misc/clean-directory.d.ts +4 -0
  110. package/dist/deps/misc/clean-directory.js +80 -0
  111. package/dist/deps/misc/constructs.d.ts +106 -0
  112. package/dist/deps/misc/constructs.js +131 -0
  113. package/dist/deps/misc/directory-scanner.d.ts +49 -0
  114. package/dist/deps/misc/directory-scanner.js +165 -0
  115. package/dist/deps/misc/executor.d.ts +39 -0
  116. package/dist/deps/misc/executor.js +59 -0
  117. package/dist/deps/misc/file-system-storage-client.d.ts +23 -0
  118. package/dist/deps/misc/file-system-storage-client.js +93 -0
  119. package/dist/deps/misc/folderify.d.ts +8 -0
  120. package/dist/deps/misc/folderify.js +86 -0
  121. package/dist/deps/misc/graph.d.ts +29 -0
  122. package/dist/deps/misc/graph.js +200 -0
  123. package/dist/deps/misc/in-memory-storage-client.d.ts +21 -0
  124. package/dist/deps/misc/in-memory-storage-client.js +75 -0
  125. package/dist/deps/misc/index.d.ts +20 -0
  126. package/dist/deps/misc/index.js +37 -0
  127. package/dist/deps/misc/int.d.ts +10 -0
  128. package/dist/deps/misc/int.js +29 -0
  129. package/dist/deps/misc/internal/graph-executor.d.ts +15 -0
  130. package/dist/deps/misc/internal/graph-executor.js +93 -0
  131. package/dist/deps/misc/maps.d.ts +29 -0
  132. package/dist/deps/misc/maps.js +47 -0
  133. package/dist/deps/misc/misc.d.ts +23 -0
  134. package/dist/deps/misc/misc.js +94 -0
  135. package/dist/deps/misc/object-map.d.ts +10 -0
  136. package/dist/deps/misc/object-map.js +26 -0
  137. package/dist/deps/misc/promises.d.ts +39 -0
  138. package/dist/deps/misc/promises.js +78 -0
  139. package/dist/deps/misc/records.d.ts +11 -0
  140. package/dist/deps/misc/records.js +40 -0
  141. package/dist/deps/misc/slurp-dir.d.ts +1 -0
  142. package/dist/deps/misc/slurp-dir.js +14 -0
  143. package/dist/deps/misc/storage-client.d.ts +12 -0
  144. package/dist/deps/misc/storage-client.js +3 -0
  145. package/dist/deps/misc/stream-to-buffer.d.ts +2 -0
  146. package/dist/deps/misc/stream-to-buffer.js +26 -0
  147. package/dist/deps/misc/strings.d.ts +12 -0
  148. package/dist/deps/misc/strings.js +68 -0
  149. package/dist/deps/misc/typed-publisher.d.ts +17 -0
  150. package/dist/deps/misc/typed-publisher.js +65 -0
  151. package/dist/deps/repo-protocol/index.d.ts +3 -0
  152. package/dist/deps/repo-protocol/index.js +20 -0
  153. package/dist/deps/repo-protocol/repo-protocol.d.ts +49 -0
  154. package/dist/deps/repo-protocol/repo-protocol.js +3 -0
  155. package/dist/deps/repo-protocol/task-info.d.ts +18 -0
  156. package/dist/deps/repo-protocol/task-info.js +3 -0
  157. package/dist/deps/repo-protocol/test-run-summary.d.ts +54 -0
  158. package/dist/deps/repo-protocol/test-run-summary.js +32 -0
  159. package/dist/deps/repo-protocol-toolbox/generate-task-infos.d.ts +5 -0
  160. package/dist/deps/repo-protocol-toolbox/generate-task-infos.js +26 -0
  161. package/dist/deps/repo-protocol-toolbox/index.d.ts +3 -0
  162. package/dist/deps/repo-protocol-toolbox/index.js +20 -0
  163. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.d.ts +10 -0
  164. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.js +90 -0
  165. package/dist/deps/repo-protocol-toolbox/task-definition.d.ts +14 -0
  166. package/dist/deps/repo-protocol-toolbox/task-definition.js +3 -0
  167. package/dist/deps/reporter-output/index.d.ts +1 -0
  168. package/dist/deps/reporter-output/index.js +18 -0
  169. package/dist/deps/reporter-output/reporter-output.d.ts +49 -0
  170. package/dist/deps/reporter-output/reporter-output.js +25 -0
  171. package/dist/deps/s3-storage-client/creds.d.ts +4 -0
  172. package/dist/deps/s3-storage-client/creds.js +3 -0
  173. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.d.ts +3 -0
  174. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.js +45 -0
  175. package/dist/deps/s3-storage-client/index.d.ts +2 -0
  176. package/dist/deps/s3-storage-client/index.js +19 -0
  177. package/dist/deps/s3-storage-client/main.d.ts +1 -0
  178. package/dist/deps/s3-storage-client/main.js +20 -0
  179. package/dist/deps/s3-storage-client/s3-storage-client.d.ts +25 -0
  180. package/dist/deps/s3-storage-client/s3-storage-client.js +134 -0
  181. package/dist/deps/task-name/index.d.ts +1 -0
  182. package/dist/deps/task-name/index.js +18 -0
  183. package/dist/deps/task-name/task-name.d.ts +17 -0
  184. package/dist/deps/task-name/task-name.js +44 -0
  185. package/dist/deps/unit-metadata/index.d.ts +1 -0
  186. package/dist/deps/unit-metadata/index.js +18 -0
  187. package/dist/deps/unit-metadata/unit-metadata.d.ts +14 -0
  188. package/dist/deps/unit-metadata/unit-metadata.js +32 -0
  189. package/dist/deps/yarn-repo-protocol/build-task-record.d.ts +61 -0
  190. package/dist/deps/yarn-repo-protocol/build-task-record.js +29 -0
  191. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.d.ts +4 -0
  192. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.js +26 -0
  193. package/dist/deps/yarn-repo-protocol/index.d.ts +2 -0
  194. package/dist/deps/yarn-repo-protocol/index.js +19 -0
  195. package/dist/deps/yarn-repo-protocol/rerun-list.d.ts +12 -0
  196. package/dist/deps/yarn-repo-protocol/rerun-list.js +6 -0
  197. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.d.ts +24 -0
  198. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.js +34 -0
  199. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.d.ts +82 -0
  200. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.js +1036 -0
  201. package/dist/src/build-raptor-cli.d.ts +60 -0
  202. package/dist/src/build-raptor-cli.js +514 -0
  203. package/dist/src/index.d.ts +1 -0
  204. package/dist/src/index.js +20 -0
  205. package/dist/src/main.d.ts +2 -0
  206. package/dist/src/main.js +23 -0
  207. package/dist/src/register-asset-request.d.ts +18 -0
  208. package/dist/src/register-asset-request.js +11 -0
  209. package/dist/src/task-execution-visualizer.d.ts +17 -0
  210. package/dist/src/task-execution-visualizer.js +116 -0
  211. package/package.json +17 -14
  212. package/build-raptor.js +0 -7259
  213. package/index.d.ts +0 -22
  214. package/index.js +0 -7231
@@ -0,0 +1,26 @@
1
+ export type Criticality = 'high' | 'moderate' | 'low';
2
+ export interface Logger {
3
+ print(message: string, criticality?: Criticality): void;
4
+ info(message: string, ...rest: unknown[]): void;
5
+ debug(message: string, ...rest: unknown[]): void;
6
+ error(message: string, err: unknown, ...rest: unknown[]): void;
7
+ }
8
+ declare class NopLogger implements Logger {
9
+ print(_message: string): void;
10
+ info(_message: string, ..._rest: unknown[]): void;
11
+ debug(_message: string, ..._rest: unknown[]): void;
12
+ error(_message: string, _err: unknown, ..._rest: unknown[]): void;
13
+ }
14
+ export declare function createNopLogger(): NopLogger;
15
+ export declare function createDefaultLogger(logFile: string, pickiness: Criticality, logLevel?: Level, uiStream?: NodeJS.WritableStream): FileLogger;
16
+ declare class FileLogger implements Logger {
17
+ private readonly logger;
18
+ private readonly pickiness;
19
+ constructor(logFile: string, pickinessLevel: Criticality, logLevel?: Level, uiStream?: NodeJS.WritableStream);
20
+ print(message: string, messageCriticality?: Criticality): void;
21
+ info(message: string, ...rest: unknown[]): void;
22
+ debug(message: string, ...rest: unknown[]): void;
23
+ error(message: string, err: unknown, ...rest: unknown[]): void;
24
+ }
25
+ type Level = 'error' | 'info' | 'debug';
26
+ export {};
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createNopLogger = createNopLogger;
40
+ exports.createDefaultLogger = createDefaultLogger;
41
+ const fs = __importStar(require("fs"));
42
+ const logform_1 = require("logform");
43
+ const path = __importStar(require("path"));
44
+ const safe_stable_stringify_1 = __importDefault(require("safe-stable-stringify"));
45
+ const winston = __importStar(require("winston"));
46
+ const criticalityLegend = {
47
+ high: 0,
48
+ moderate: 100,
49
+ low: 200,
50
+ };
51
+ class NopLogger {
52
+ print(_message) {
53
+ // noop
54
+ }
55
+ info(_message, ..._rest) {
56
+ // noop
57
+ }
58
+ debug(_message, ..._rest) {
59
+ // noop
60
+ }
61
+ error(_message, _err, ..._rest) {
62
+ // noop
63
+ }
64
+ }
65
+ function createNopLogger() {
66
+ return new NopLogger();
67
+ }
68
+ function createDefaultLogger(logFile, pickiness, logLevel, uiStream) {
69
+ const stat = fs.statSync(logFile, { throwIfNoEntry: false });
70
+ if (stat && stat.size > 0) {
71
+ fs.rmSync(logFile, { force: true });
72
+ }
73
+ return new FileLogger(logFile, pickiness, logLevel, uiStream);
74
+ }
75
+ class FileLogger {
76
+ constructor(logFile, pickinessLevel, logLevel = 'info', uiStream = process.stdout) {
77
+ if (!path.isAbsolute(logFile)) {
78
+ throw new Error(`logDir must be absolute: ${logFile}`);
79
+ }
80
+ this.logger = newLogger(logFile, logLevel, uiStream);
81
+ this.pickiness = criticalityLegend[pickinessLevel];
82
+ }
83
+ print(message, messageCriticality = 'moderate') {
84
+ const messageLevel = criticalityLegend[messageCriticality];
85
+ const doPrint = messageLevel <= this.pickiness;
86
+ if (doPrint) {
87
+ this.logger.info(message, { ui: true });
88
+ }
89
+ }
90
+ info(message, ...rest) {
91
+ this.logger.info(message, ...rest);
92
+ }
93
+ debug(message, ...rest) {
94
+ this.logger.debug(message, ...rest);
95
+ }
96
+ error(message, err, ...rest) {
97
+ this.logger.error(message, err, ...rest, { ui: true });
98
+ }
99
+ }
100
+ const joinTokens = (...tokens) => tokens
101
+ .map(t => t?.trim())
102
+ .filter(Boolean)
103
+ .join(' ');
104
+ const finalFormat = logform_1.format.printf(info => {
105
+ let stringifiedRest = (0, safe_stable_stringify_1.default)(Object.assign({}, info, {
106
+ level: undefined,
107
+ message: undefined,
108
+ timestamp: undefined,
109
+ stack: undefined,
110
+ ui: undefined,
111
+ }));
112
+ if (stringifiedRest === '{}') {
113
+ stringifiedRest = '';
114
+ }
115
+ return joinTokens(info.timestamp, `[${info.level}]`, info.message, stringifiedRest, info.stack);
116
+ });
117
+ const filterUi = (0, logform_1.format)(info => {
118
+ if (!info.ui) {
119
+ return false;
120
+ }
121
+ return info;
122
+ });
123
+ const formatUi = logform_1.format.printf(info => {
124
+ return joinTokens(info.message, info.stack);
125
+ });
126
+ const levels = {
127
+ error: 0,
128
+ info: 1,
129
+ debug: 2,
130
+ };
131
+ function newLogger(logFile, level, uiStream) {
132
+ return winston.createLogger({
133
+ level: 'debug',
134
+ levels,
135
+ defaultMeta: undefined,
136
+ transports: [
137
+ // Writes all log entries with level `info` and below to logFile.
138
+ new winston.transports.File({
139
+ filename: logFile,
140
+ level,
141
+ format: logform_1.format.combine(logform_1.format.timestamp(), logform_1.format.errors({ stack: true }), finalFormat),
142
+ }),
143
+ // Writes all logs entries marked as "UI" to the the UI stream (typically, stdout).
144
+ new winston.transports.Stream({
145
+ stream: uiStream,
146
+ level: 'info',
147
+ format: logform_1.format.combine(logform_1.format.errors({ stack: true }), filterUi(), formatUi),
148
+ }),
149
+ ],
150
+ });
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDQSwwQ0FFQztBQUVELGtEQVdDO0FBdERELHVDQUF3QjtBQUN4QixxQ0FBZ0M7QUFDaEMsMkNBQTRCO0FBQzVCLGtGQUFpRDtBQUNqRCxpREFBa0M7QUFFbEMsTUFBTSxpQkFBaUIsR0FBZ0M7SUFDckQsSUFBSSxFQUFFLENBQUM7SUFDUCxRQUFRLEVBQUUsR0FBRztJQUNiLEdBQUcsRUFBRSxHQUFHO0NBQ1QsQ0FBQTtBQVdELE1BQU0sU0FBUztJQUNiLEtBQUssQ0FBQyxRQUFnQjtRQUNwQixPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFnQixFQUFFLEdBQUcsS0FBZ0I7UUFDeEMsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLENBQUMsUUFBZ0IsRUFBRSxHQUFHLEtBQWdCO1FBQ3pDLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWdCLEVBQUUsSUFBYSxFQUFFLEdBQUcsS0FBZ0I7UUFDeEQsT0FBTztJQUNULENBQUM7Q0FDRjtBQUVELFNBQWdCLGVBQWU7SUFDN0IsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFBO0FBQ3hCLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FDakMsT0FBZSxFQUNmLFNBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLFFBQWdDO0lBRWhDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDNUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FB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
@@ -0,0 +1,7 @@
1
+ export declare function sortBy<T>(input: readonly T[], key: (item: T) => number): T[];
2
+ export declare function sortBy<T>(input: readonly T[], key: (item: T) => string): T[];
3
+ export declare function sortBy<T>(input: IterableIterator<T>, key: (item: T) => number): T[];
4
+ export declare function sortBy<T>(input: IterableIterator<T>, key: (item: T) => string): T[];
5
+ export declare function findDups<T, K extends number | symbol | string>(input: ArrayLike<T> | Iterable<T>, key: (item: T) => K): T[];
6
+ export declare function uniqueBy<T, K>(input: ArrayLike<T> | Iterable<T>, key: (item: T) => K): T[];
7
+ export declare function groupBy<T, K extends number | symbol | string>(input: ArrayLike<T> | Iterable<T>, key: (item: T) => K): Record<K, T[]>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortBy = sortBy;
4
+ exports.findDups = findDups;
5
+ exports.uniqueBy = uniqueBy;
6
+ exports.groupBy = groupBy;
7
+ const maps_1 = require("./maps");
8
+ function sortBy(input, key) {
9
+ return [...input].sort((a, b) => comp(a, b, key));
10
+ }
11
+ function comp(a, b, key) {
12
+ const ak = key(a);
13
+ const bk = key(b);
14
+ if (typeof ak === 'string' && typeof bk === 'string') {
15
+ return ak.localeCompare(bk);
16
+ }
17
+ if (typeof ak === 'number' && typeof bk === 'number') {
18
+ return ak - bk;
19
+ }
20
+ throw new Error(`Cannot compare ${ak} and ${bk}`);
21
+ }
22
+ function findDups(input, key) {
23
+ const counts = new Map();
24
+ const collidingKeys = new Set();
25
+ const pairs = [];
26
+ for (const item of Array.from(input)) {
27
+ const k = key(item);
28
+ pairs.push([item, k]);
29
+ const n = (0, maps_1.mapIncrement)(counts, k, 1);
30
+ if (n > 1) {
31
+ collidingKeys.add(k);
32
+ }
33
+ }
34
+ const ret = [];
35
+ for (const [item, k] of pairs) {
36
+ if (collidingKeys.has(k)) {
37
+ ret.push(item);
38
+ }
39
+ }
40
+ return ret;
41
+ }
42
+ function uniqueBy(input, key) {
43
+ const seen = new Set();
44
+ return Array.from(input).filter(item => {
45
+ const k = key(item);
46
+ if (seen.has(k)) {
47
+ return false;
48
+ }
49
+ seen.add(k);
50
+ return true;
51
+ });
52
+ }
53
+ function groupBy(input, key) {
54
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
55
+ const ret = {};
56
+ for (const item of Array.from(input)) {
57
+ const k = key(item);
58
+ let arr = ret[k];
59
+ if (!arr) {
60
+ arr = new Array();
61
+ ret[k] = arr;
62
+ }
63
+ arr.push(item);
64
+ }
65
+ return ret;
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FycmF5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLHdCQUVDO0FBaUJELDRCQXdCQztBQUVELDRCQVVDO0FBRUQsMEJBbUJDO0FBbEZELGlDQUFxQztBQU1yQyxTQUFnQixNQUFNLENBQUksS0FBeUMsRUFBRSxHQUFpQztJQUNwRyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ25ELENBQUM7QUFFRCxTQUFTLElBQUksQ0FBK0IsQ0FBSSxFQUFFLENBQUksRUFBRSxHQUFtQjtJQUN6RSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRWpCLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNuRCxDQUFDO0FBRUQsU0FBZ0IsUUFBUSxDQUN0QixLQUFpQyxFQUNqQyxHQUFtQjtJQUVuQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFBO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFLLENBQUE7SUFDbEMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLEdBQUcsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDVixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFBO0lBQ25CLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM5QixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsU0FBZ0IsUUFBUSxDQUFPLEtBQWlDLEVBQUUsR0FBbUI7SUFDbkYsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUssQ0FBQTtJQUN6QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoQixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1gsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFnQixPQUFPLENBQ3JCLEtBQWlDLEVBQ2pDLEdBQW1CO0lBRW5CLHlFQUF5RTtJQUN6RSxNQUFNLEdBQUcsR0FBbUIsRUFBb0IsQ0FBQTtJQUVoRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFBO1lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7UUFDZCxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ type CamelizeString<T extends PropertyKey, C extends string = ''> = T extends string ? string extends T ? string : T extends `${infer F}-${infer R}` ? CamelizeString<Capitalize<R>, `${C}${F}`> : `${C}${T}` : T;
2
+ export type CamelizeRecord<T> = {
3
+ [K in keyof T as CamelizeString<K>]: T[K];
4
+ };
5
+ export declare function camelizeRecord<T extends Record<string, boolean | string | number | unknown>>(rec: T): CamelizeRecord<T>;
6
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.camelizeRecord = camelizeRecord;
4
+ function camelizeRecord(rec) {
5
+ const ret = {};
6
+ for (const k of Object.keys(rec)) {
7
+ const parts = k.split('-');
8
+ if (parts.length === 1) {
9
+ ret[k] = rec[k];
10
+ continue;
11
+ }
12
+ ret[parts.map((p, i) => (i === 0 ? p : p[0].toUpperCase() + p.slice(1))).join('')] = rec[k];
13
+ }
14
+ return ret; // eslint-disable-line @typescript-eslint/consistent-type-assertions
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZWxpemUtcmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbWVsaXplLXJlY29yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLHdDQWdCQztBQWhCRCxTQUFnQixjQUFjLENBQzVCLEdBQU07SUFFTixNQUFNLEdBQUcsR0FBNEIsRUFBRSxDQUFBO0lBRXZDLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDZixTQUFRO1FBQ1YsQ0FBQztRQUVELEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVELE9BQU8sR0FBd0IsQ0FBQSxDQUFDLG9FQUFvRTtBQUN0RyxDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ export declare function cleanDirectory(directoryPath: string, deletionFactor: number, triggerCleanupIfByteSizeExceeds: number | 'ALWAYS'): {
2
+ size: number;
3
+ deleted: number;
4
+ };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.cleanDirectory = cleanDirectory;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const arrays_1 = require("./arrays");
40
+ function cleanDirectory(directoryPath, deletionFactor, triggerCleanupIfByteSizeExceeds) {
41
+ const size = calculateDirectorySize(directoryPath);
42
+ if (triggerCleanupIfByteSizeExceeds !== 'ALWAYS' && size <= triggerCleanupIfByteSizeExceeds) {
43
+ return { size, deleted: 0 };
44
+ }
45
+ const filesDeleted = deleteFiles(directoryPath, deletionFactor);
46
+ return { size, deleted: filesDeleted.length };
47
+ }
48
+ function calculateDirectorySize(directoryPath) {
49
+ let ret = 0;
50
+ for (const f of fs.readdirSync(directoryPath)) {
51
+ const resolved = path.join(directoryPath, f);
52
+ const stats = fs.statSync(resolved);
53
+ ret += stats.size;
54
+ }
55
+ return ret;
56
+ }
57
+ function deleteFiles(directoryPath, deletionFactor) {
58
+ let files;
59
+ try {
60
+ files = fs.readdirSync(directoryPath);
61
+ }
62
+ catch (e) {
63
+ throw new Error(`failed when reading ${directoryPath}: ${e}`);
64
+ }
65
+ const mapped = files.map(f => ({ f, atime: fs.statSync(path.join(directoryPath, f)).atime.toISOString() }));
66
+ const sorted = (0, arrays_1.sortBy)(mapped, at => at.atime);
67
+ const numFilesToDelete = Math.min(sorted.length, Math.floor(sorted.length * deletionFactor));
68
+ const ret = sorted.slice(0, numFilesToDelete).map(at => at.f);
69
+ for (const f of ret) {
70
+ const filePath = path.join(directoryPath, f);
71
+ try {
72
+ fs.unlinkSync(filePath);
73
+ }
74
+ catch (e) {
75
+ throw new Error(`cleanup of ${filePath} failed: ${e}`);
76
+ }
77
+ }
78
+ return ret;
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW4tZGlyZWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuLWRpcmVjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtBLHdDQVlDO0FBakJELHVDQUF3QjtBQUN4QiwyQ0FBNEI7QUFFNUIscUNBQWlDO0FBRWpDLFNBQWdCLGNBQWMsQ0FDNUIsYUFBcUIsRUFDckIsY0FBc0IsRUFDdEIsK0JBQWtEO0lBRWxELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2xELElBQUksK0JBQStCLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSwrQkFBK0IsRUFBRSxDQUFDO1FBQzVGLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQy9ELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxhQUFxQjtJQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFFWCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM1QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFBO0lBQ25CLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxhQUFxQixFQUFFLGNBQXNCO0lBQ2hFLElBQUksS0FBSyxDQUFBO0lBRVQsSUFBSSxDQUFDO1FBQ0gsS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDM0csTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTdDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFBO0lBQzVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTdELEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFNUMsSUFBSSxDQUFDO1lBQ0gsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxRQUFRLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyJ9
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Checks, at compile time, that a certain situation cannot happen (and fail the build if it can). This is useful for
3
+ * checking that all possible cases of a union type are handled.
4
+ *
5
+ * Typical usage pattern:
6
+ *
7
+ * type X = 'A' | 'B'
8
+ *
9
+ * function f(x: X) {
10
+ * if (x === 'a') {
11
+ * // do something ...
12
+ * return
13
+ * }
14
+ * if (x === 'b') {
15
+ * // do something ...
16
+ * return
17
+ * }
18
+ * shouldNeverHappen(x)
19
+ * }
20
+ *
21
+ *
22
+ * If we ever change X such that it has a third case (as in `type X = 'A' | 'B' | 'C') we will get a compile error
23
+ * unless we add logic to this function (`f()`) to handle it.
24
+ *
25
+ * @param n a value of type `never`
26
+ */
27
+ export declare function shouldNeverHappen(n: never): never;
28
+ /**
29
+ * An always-failing function. If it ever gets called, it will throw an error. It is useful in conditional expressions
30
+ * in which one of the branches of the expression is the happy path, and the other branch is a sad path in which no
31
+ * value can be computed. Sepcifically, it usually appears as the right-hand-side operand of `??` or `||` expressions.
32
+ *
33
+ * Typical usage pattern:
34
+ *
35
+ * const dir: string = process.env['WORKING_DIR'] || failMe('missing env variable "a"')
36
+ *
37
+ * Essentially, this is a concise alternative to:
38
+ *
39
+ * const dir = process.env['a']
40
+ * if (!dir) {
41
+ * throw new Error('missing env variable "a"')
42
+ * }
43
+ *
44
+ * @param hint an optional human-readable string to be placed in the message of the thrown error
45
+ */
46
+ export declare function failMe(hint?: string): never;
47
+ /**
48
+ * Evaluates just one of several functions (the `cases` parameter) based on the `selector` value passed in.
49
+ * `cases` is a record of zero-argument functions. The function at `cases[selector]` will be evaluated and its return
50
+ * value is returned back to the caller.
51
+ *
52
+ * A compile time error is produced if not all possible values of `selector` are covered by `cases`.
53
+ *
54
+ * Example:
55
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
56
+ * return switchOn(op, {
57
+ * '+': () => n1 + n2,
58
+ * '-': () => n1 - n2,
59
+ * '*': () => n1 * n2,
60
+ * })
61
+ * }
62
+ *
63
+ *
64
+ * The following snippet yields a compile-time error:
65
+ *
66
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
67
+ * return switchOn(op, {
68
+ * '+': () => n1 + n2,
69
+ * '-': () => n1 - n2,
70
+ * }) // <-- Compiler error here due to missing case ('*')
71
+ * }
72
+ *
73
+ * And so does this:
74
+ *
75
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
76
+ * return switchOn(op, {
77
+ * '+': () => n1 + n2,
78
+ * '-': () => n1 - n2,
79
+ * '*': () => n1 - n2,
80
+ * '/': () => n1 / n2,
81
+ * }) // <-- Compiler error here due to extraneous case ('/')
82
+ * }
83
+ *
84
+ * @param selector
85
+ * @param cases
86
+ * @returns
87
+ */
88
+ export declare function switchOn<G, K extends string>(selector: K, cases: Record<K, () => G>): G;
89
+ /**
90
+ * Safely converts an input of type `unknown` into an Error like object. The return value will contain `message`
91
+ * and `stack` properties which will be strings (if a corresponding propertiy of type string exists on the input) or
92
+ * undefined (otherwise)
93
+ *
94
+ * @param err an input of type `unknown`
95
+ * @returns an Error like object
96
+ */
97
+ export declare function errorLike(err: unknown): {
98
+ message: string | undefined;
99
+ stack: string | undefined;
100
+ };
101
+ /**
102
+ * Generates a two-tuple from the arguments passed in. Useful in situations where the compiler fails to infer that
103
+ * `[foo, bar]` is a tuple and treats it like an array. Using `pair(foo, bar)` will make the compiler correctly infer
104
+ * the tuple type.
105
+ */
106
+ export declare function pair<A, B>(a: A, b: B): [A, B];
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldNeverHappen = shouldNeverHappen;
4
+ exports.failMe = failMe;
5
+ exports.switchOn = switchOn;
6
+ exports.errorLike = errorLike;
7
+ exports.pair = pair;
8
+ /**
9
+ * Checks, at compile time, that a certain situation cannot happen (and fail the build if it can). This is useful for
10
+ * checking that all possible cases of a union type are handled.
11
+ *
12
+ * Typical usage pattern:
13
+ *
14
+ * type X = 'A' | 'B'
15
+ *
16
+ * function f(x: X) {
17
+ * if (x === 'a') {
18
+ * // do something ...
19
+ * return
20
+ * }
21
+ * if (x === 'b') {
22
+ * // do something ...
23
+ * return
24
+ * }
25
+ * shouldNeverHappen(x)
26
+ * }
27
+ *
28
+ *
29
+ * If we ever change X such that it has a third case (as in `type X = 'A' | 'B' | 'C') we will get a compile error
30
+ * unless we add logic to this function (`f()`) to handle it.
31
+ *
32
+ * @param n a value of type `never`
33
+ */
34
+ function shouldNeverHappen(n) {
35
+ // This following line never gets executed. It is here just to make the compiler happy.
36
+ throw new Error(`This should never happen ${n}`);
37
+ }
38
+ /**
39
+ * An always-failing function. If it ever gets called, it will throw an error. It is useful in conditional expressions
40
+ * in which one of the branches of the expression is the happy path, and the other branch is a sad path in which no
41
+ * value can be computed. Sepcifically, it usually appears as the right-hand-side operand of `??` or `||` expressions.
42
+ *
43
+ * Typical usage pattern:
44
+ *
45
+ * const dir: string = process.env['WORKING_DIR'] || failMe('missing env variable "a"')
46
+ *
47
+ * Essentially, this is a concise alternative to:
48
+ *
49
+ * const dir = process.env['a']
50
+ * if (!dir) {
51
+ * throw new Error('missing env variable "a"')
52
+ * }
53
+ *
54
+ * @param hint an optional human-readable string to be placed in the message of the thrown error
55
+ */
56
+ function failMe(hint) {
57
+ if (!hint) {
58
+ throw new Error(`This expression must never be evaluated`);
59
+ }
60
+ throw new Error(`Bad value: ${hint}`);
61
+ }
62
+ /**
63
+ * Evaluates just one of several functions (the `cases` parameter) based on the `selector` value passed in.
64
+ * `cases` is a record of zero-argument functions. The function at `cases[selector]` will be evaluated and its return
65
+ * value is returned back to the caller.
66
+ *
67
+ * A compile time error is produced if not all possible values of `selector` are covered by `cases`.
68
+ *
69
+ * Example:
70
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
71
+ * return switchOn(op, {
72
+ * '+': () => n1 + n2,
73
+ * '-': () => n1 - n2,
74
+ * '*': () => n1 * n2,
75
+ * })
76
+ * }
77
+ *
78
+ *
79
+ * The following snippet yields a compile-time error:
80
+ *
81
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
82
+ * return switchOn(op, {
83
+ * '+': () => n1 + n2,
84
+ * '-': () => n1 - n2,
85
+ * }) // <-- Compiler error here due to missing case ('*')
86
+ * }
87
+ *
88
+ * And so does this:
89
+ *
90
+ * function f(op: '+' | '-' | '*', n1: number, n2: number) {
91
+ * return switchOn(op, {
92
+ * '+': () => n1 + n2,
93
+ * '-': () => n1 - n2,
94
+ * '*': () => n1 - n2,
95
+ * '/': () => n1 / n2,
96
+ * }) // <-- Compiler error here due to extraneous case ('/')
97
+ * }
98
+ *
99
+ * @param selector
100
+ * @param cases
101
+ * @returns
102
+ */
103
+ function switchOn(selector, cases) {
104
+ const f = cases[selector];
105
+ return f();
106
+ }
107
+ /**
108
+ * Safely converts an input of type `unknown` into an Error like object. The return value will contain `message`
109
+ * and `stack` properties which will be strings (if a corresponding propertiy of type string exists on the input) or
110
+ * undefined (otherwise)
111
+ *
112
+ * @param err an input of type `unknown`
113
+ * @returns an Error like object
114
+ */
115
+ function errorLike(err) {
116
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
117
+ const { message, stack } = err;
118
+ return {
119
+ message: typeof message === 'string' ? message : undefined,
120
+ stack: typeof stack === 'string' ? stack : undefined,
121
+ };
122
+ }
123
+ /**
124
+ * Generates a two-tuple from the arguments passed in. Useful in situations where the compiler fails to infer that
125
+ * `[foo, bar]` is a tuple and treats it like an array. Using `pair(foo, bar)` will make the compiler correctly infer
126
+ * the tuple type.
127
+ */
128
+ function pair(a, b) {
129
+ return [a, b];
130
+ }
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDhDQUdDO0FBb0JELHdCQU1DO0FBMkNELDRCQUdDO0FBVUQsOEJBT0M7QUFPRCxvQkFFQztBQS9IRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLENBQVE7SUFDeEMsdUZBQXVGO0lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxJQUFhO0lBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFzQixRQUFXLEVBQUUsS0FBeUI7SUFDbEYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3pCLE9BQU8sQ0FBQyxFQUFFLENBQUE7QUFDWixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxHQUFZO0lBQ3BDLHlFQUF5RTtJQUN6RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQTZDLENBQUE7SUFDeEUsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMxRCxLQUFLLEVBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDckQsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFPLENBQUksRUFBRSxDQUFJO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDZixDQUFDIn0=
@@ -0,0 +1,49 @@
1
+ import * as fs from 'fs';
2
+ type Predicate = (relativePath: string, stat: fs.Stats) => boolean;
3
+ interface Options {
4
+ predicate?: Predicate;
5
+ startingPointMustExist?: boolean;
6
+ }
7
+ interface ListPathsOptions {
8
+ startingPointMustExist?: boolean;
9
+ }
10
+ interface ConstructorOptions {
11
+ predicate?: Predicate;
12
+ }
13
+ type ScanTreeCallback = (relativePath: string, content: Buffer, stat: fs.Stats) => void;
14
+ type RelativePath = string;
15
+ export declare class DirectoryScanner {
16
+ readonly rootDir: string;
17
+ private readonly options;
18
+ constructor(rootDir: string, options?: ConstructorOptions);
19
+ isValid(relativePath: string, stat: fs.Stats): boolean;
20
+ /**
21
+ * Iterates over all the files located under `startingPoint` and calls `cb` for each file.
22
+ * @param startingPoint a relative path to start scanning files at. It is resolved to an absolute path by joining it
23
+ * to the root-dir value passed to the constructor. Trailing path separators are omitted (i.e. `'a/b///'` is
24
+ * equivalent to `'a/b'`).
25
+ * @param cb
26
+ */
27
+ scanTree(startingPoint: RelativePath, cb: ScanTreeCallback): Promise<void>;
28
+ scanTree(startingPoint: RelativePath, options: Options, cb: ScanTreeCallback): Promise<void>;
29
+ /**
30
+ * Recursively scans a file tree, returning relative paths to all files.
31
+ * @param startingPoint a relative path to start scanning files at. It is resolved to an absolute path by joining it
32
+ * to the root-dir value passed to the constructor. Trailing path separators are omitted (i.e. `'a/b///'` is
33
+ * equivalent to `'a/b'`).
34
+ * @returns an array of relative paths (relative from the `root` path passed to the constructor)
35
+ */
36
+ listPaths(startingPoint: RelativePath, options?: ListPathsOptions): Promise<string[]>;
37
+ /**
38
+ * Returns relative paths to all files at the file tree rooted at the given directory.
39
+ * @param dir directory to scan files under
40
+ * @returns an array of relative paths (relative to `dir`)
41
+ */
42
+ static listPaths(dir: string, options?: ListPathsOptions): Promise<string[]>;
43
+ private scanTreeImpl;
44
+ private scanFileTree;
45
+ private readContent;
46
+ private readDirSorted;
47
+ private getStat;
48
+ }
49
+ export {};