build-raptor 0.130.0 → 0.131.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 (216) hide show
  1. package/build-raptor.js +7259 -0
  2. package/index.d.ts +22 -0
  3. package/index.js +7231 -0
  4. package/package.json +13 -17
  5. package/dist/deps/brand/brand.d.ts +0 -5
  6. package/dist/deps/brand/brand.js +0 -3
  7. package/dist/deps/brand/index.d.ts +0 -1
  8. package/dist/deps/brand/index.js +0 -18
  9. package/dist/deps/build-failed-error/build-failed-error.d.ts +0 -14
  10. package/dist/deps/build-failed-error/build-failed-error.js +0 -13
  11. package/dist/deps/build-failed-error/index.d.ts +0 -1
  12. package/dist/deps/build-failed-error/index.js +0 -18
  13. package/dist/deps/build-raptor-api/build-raptor-api.d.ts +0 -351
  14. package/dist/deps/build-raptor-api/build-raptor-api.js +0 -132
  15. package/dist/deps/build-raptor-api/index.d.ts +0 -2
  16. package/dist/deps/build-raptor-api/index.js +0 -19
  17. package/dist/deps/build-raptor-api/step-by-step-processor.d.ts +0 -35
  18. package/dist/deps/build-raptor-api/step-by-step-processor.js +0 -3
  19. package/dist/deps/build-raptor-core/breakdown.d.ts +0 -18
  20. package/dist/deps/build-raptor-core/breakdown.js +0 -99
  21. package/dist/deps/build-raptor-core/build-raptor-config.d.ts +0 -21
  22. package/dist/deps/build-raptor-core/build-raptor-config.js +0 -25
  23. package/dist/deps/build-raptor-core/default-asset-publisher.d.ts +0 -10
  24. package/dist/deps/build-raptor-core/default-asset-publisher.js +0 -16
  25. package/dist/deps/build-raptor-core/engine-bootstrapper.d.ts +0 -50
  26. package/dist/deps/build-raptor-core/engine-bootstrapper.js +0 -200
  27. package/dist/deps/build-raptor-core/engine-event-scheme.d.ts +0 -20
  28. package/dist/deps/build-raptor-core/engine-event-scheme.js +0 -3
  29. package/dist/deps/build-raptor-core/engine.d.ts +0 -66
  30. package/dist/deps/build-raptor-core/engine.js +0 -285
  31. package/dist/deps/build-raptor-core/examplify-zod.d.ts +0 -93
  32. package/dist/deps/build-raptor-core/examplify-zod.js +0 -257
  33. package/dist/deps/build-raptor-core/execution-plan.d.ts +0 -20
  34. package/dist/deps/build-raptor-core/execution-plan.js +0 -66
  35. package/dist/deps/build-raptor-core/execution-record.d.ts +0 -17
  36. package/dist/deps/build-raptor-core/execution-record.js +0 -3
  37. package/dist/deps/build-raptor-core/execution-type.d.ts +0 -2
  38. package/dist/deps/build-raptor-core/execution-type.js +0 -3
  39. package/dist/deps/build-raptor-core/find-repo-dir.d.ts +0 -1
  40. package/dist/deps/build-raptor-core/find-repo-dir.js +0 -27
  41. package/dist/deps/build-raptor-core/fingerprint-ledger.d.ts +0 -33
  42. package/dist/deps/build-raptor-core/fingerprint-ledger.js +0 -164
  43. package/dist/deps/build-raptor-core/fingerprint.d.ts +0 -3
  44. package/dist/deps/build-raptor-core/fingerprint.js +0 -13
  45. package/dist/deps/build-raptor-core/fingerprinter.d.ts +0 -15
  46. package/dist/deps/build-raptor-core/fingerprinter.js +0 -122
  47. package/dist/deps/build-raptor-core/hasher.d.ts +0 -21
  48. package/dist/deps/build-raptor-core/hasher.js +0 -93
  49. package/dist/deps/build-raptor-core/index.d.ts +0 -9
  50. package/dist/deps/build-raptor-core/index.js +0 -26
  51. package/dist/deps/build-raptor-core/model.d.ts +0 -17
  52. package/dist/deps/build-raptor-core/model.js +0 -40
  53. package/dist/deps/build-raptor-core/nop-asset-publisher.d.ts +0 -6
  54. package/dist/deps/build-raptor-core/nop-asset-publisher.js +0 -12
  55. package/dist/deps/build-raptor-core/performance-report.d.ts +0 -5
  56. package/dist/deps/build-raptor-core/performance-report.js +0 -3
  57. package/dist/deps/build-raptor-core/phase.d.ts +0 -1
  58. package/dist/deps/build-raptor-core/phase.js +0 -3
  59. package/dist/deps/build-raptor-core/planner.d.ts +0 -12
  60. package/dist/deps/build-raptor-core/planner.js +0 -43
  61. package/dist/deps/build-raptor-core/purger.d.ts +0 -11
  62. package/dist/deps/build-raptor-core/purger.js +0 -65
  63. package/dist/deps/build-raptor-core/slot-index.d.ts +0 -6
  64. package/dist/deps/build-raptor-core/slot-index.js +0 -17
  65. package/dist/deps/build-raptor-core/step-by-step-transmitter.d.ts +0 -15
  66. package/dist/deps/build-raptor-core/step-by-step-transmitter.js +0 -94
  67. package/dist/deps/build-raptor-core/tar-stream.d.ts +0 -20
  68. package/dist/deps/build-raptor-core/tar-stream.js +0 -194
  69. package/dist/deps/build-raptor-core/task-executor.d.ts +0 -32
  70. package/dist/deps/build-raptor-core/task-executor.js +0 -321
  71. package/dist/deps/build-raptor-core/task-store-cli.d.ts +0 -1
  72. package/dist/deps/build-raptor-core/task-store-cli.js +0 -61
  73. package/dist/deps/build-raptor-core/task-store-event.d.ts +0 -17
  74. package/dist/deps/build-raptor-core/task-store-event.js +0 -3
  75. package/dist/deps/build-raptor-core/task-store.d.ts +0 -41
  76. package/dist/deps/build-raptor-core/task-store.js +0 -302
  77. package/dist/deps/build-raptor-core/task-summary.d.ts +0 -12
  78. package/dist/deps/build-raptor-core/task-summary.js +0 -3
  79. package/dist/deps/build-raptor-core/task-tracker.d.ts +0 -23
  80. package/dist/deps/build-raptor-core/task-tracker.js +0 -97
  81. package/dist/deps/build-raptor-core/task.d.ts +0 -30
  82. package/dist/deps/build-raptor-core/task.js +0 -90
  83. package/dist/deps/build-raptor-core/updatable-task-output-registry.d.ts +0 -13
  84. package/dist/deps/build-raptor-core/updatable-task-output-registry.js +0 -75
  85. package/dist/deps/build-raptor-core/validate-task-infos.d.ts +0 -3
  86. package/dist/deps/build-raptor-core/validate-task-infos.js +0 -53
  87. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.d.ts +0 -1
  88. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.js +0 -18
  89. package/dist/deps/build-raptor-core-testkit/driver.d.ts +0 -119
  90. package/dist/deps/build-raptor-core-testkit/driver.js +0 -305
  91. package/dist/deps/build-raptor-core-testkit/index.d.ts +0 -3
  92. package/dist/deps/build-raptor-core-testkit/index.js +0 -20
  93. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.d.ts +0 -35
  94. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.js +0 -226
  95. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.d.ts +0 -27
  96. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.js +0 -140
  97. package/dist/deps/build-raptor-jest-reporter/index.d.ts +0 -0
  98. package/dist/deps/build-raptor-jest-reporter/index.js +0 -33
  99. package/dist/deps/build-run-id/build-run-id.d.ts +0 -3
  100. package/dist/deps/build-run-id/build-run-id.js +0 -13
  101. package/dist/deps/build-run-id/index.d.ts +0 -1
  102. package/dist/deps/build-run-id/index.js +0 -18
  103. package/dist/deps/core-types/core-types.d.ts +0 -29
  104. package/dist/deps/core-types/core-types.js +0 -81
  105. package/dist/deps/core-types/index.d.ts +0 -1
  106. package/dist/deps/core-types/index.js +0 -18
  107. package/dist/deps/logger/index.d.ts +0 -1
  108. package/dist/deps/logger/index.js +0 -18
  109. package/dist/deps/logger/logger.d.ts +0 -26
  110. package/dist/deps/logger/logger.js +0 -152
  111. package/dist/deps/misc/arrays.d.ts +0 -7
  112. package/dist/deps/misc/arrays.js +0 -67
  113. package/dist/deps/misc/camelize-record.d.ts +0 -6
  114. package/dist/deps/misc/camelize-record.js +0 -16
  115. package/dist/deps/misc/clean-directory.d.ts +0 -4
  116. package/dist/deps/misc/clean-directory.js +0 -80
  117. package/dist/deps/misc/constructs.d.ts +0 -106
  118. package/dist/deps/misc/constructs.js +0 -131
  119. package/dist/deps/misc/directory-scanner.d.ts +0 -49
  120. package/dist/deps/misc/directory-scanner.js +0 -165
  121. package/dist/deps/misc/executor.d.ts +0 -39
  122. package/dist/deps/misc/executor.js +0 -59
  123. package/dist/deps/misc/file-system-storage-client.d.ts +0 -23
  124. package/dist/deps/misc/file-system-storage-client.js +0 -93
  125. package/dist/deps/misc/folderify.d.ts +0 -8
  126. package/dist/deps/misc/folderify.js +0 -86
  127. package/dist/deps/misc/graph.d.ts +0 -29
  128. package/dist/deps/misc/graph.js +0 -200
  129. package/dist/deps/misc/in-memory-storage-client.d.ts +0 -21
  130. package/dist/deps/misc/in-memory-storage-client.js +0 -75
  131. package/dist/deps/misc/index.d.ts +0 -20
  132. package/dist/deps/misc/index.js +0 -37
  133. package/dist/deps/misc/int.d.ts +0 -10
  134. package/dist/deps/misc/int.js +0 -29
  135. package/dist/deps/misc/internal/graph-executor.d.ts +0 -15
  136. package/dist/deps/misc/internal/graph-executor.js +0 -93
  137. package/dist/deps/misc/maps.d.ts +0 -29
  138. package/dist/deps/misc/maps.js +0 -47
  139. package/dist/deps/misc/misc.d.ts +0 -23
  140. package/dist/deps/misc/misc.js +0 -94
  141. package/dist/deps/misc/object-map.d.ts +0 -10
  142. package/dist/deps/misc/object-map.js +0 -26
  143. package/dist/deps/misc/promises.d.ts +0 -39
  144. package/dist/deps/misc/promises.js +0 -78
  145. package/dist/deps/misc/records.d.ts +0 -11
  146. package/dist/deps/misc/records.js +0 -40
  147. package/dist/deps/misc/slurp-dir.d.ts +0 -1
  148. package/dist/deps/misc/slurp-dir.js +0 -14
  149. package/dist/deps/misc/storage-client.d.ts +0 -12
  150. package/dist/deps/misc/storage-client.js +0 -3
  151. package/dist/deps/misc/stream-to-buffer.d.ts +0 -2
  152. package/dist/deps/misc/stream-to-buffer.js +0 -26
  153. package/dist/deps/misc/strings.d.ts +0 -12
  154. package/dist/deps/misc/strings.js +0 -68
  155. package/dist/deps/misc/typed-publisher.d.ts +0 -17
  156. package/dist/deps/misc/typed-publisher.js +0 -65
  157. package/dist/deps/repo-protocol/index.d.ts +0 -3
  158. package/dist/deps/repo-protocol/index.js +0 -20
  159. package/dist/deps/repo-protocol/repo-protocol.d.ts +0 -49
  160. package/dist/deps/repo-protocol/repo-protocol.js +0 -3
  161. package/dist/deps/repo-protocol/task-info.d.ts +0 -18
  162. package/dist/deps/repo-protocol/task-info.js +0 -3
  163. package/dist/deps/repo-protocol/test-run-summary.d.ts +0 -54
  164. package/dist/deps/repo-protocol/test-run-summary.js +0 -32
  165. package/dist/deps/repo-protocol-toolbox/generate-task-infos.d.ts +0 -5
  166. package/dist/deps/repo-protocol-toolbox/generate-task-infos.js +0 -26
  167. package/dist/deps/repo-protocol-toolbox/index.d.ts +0 -3
  168. package/dist/deps/repo-protocol-toolbox/index.js +0 -20
  169. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.d.ts +0 -10
  170. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.js +0 -90
  171. package/dist/deps/repo-protocol-toolbox/task-definition.d.ts +0 -14
  172. package/dist/deps/repo-protocol-toolbox/task-definition.js +0 -3
  173. package/dist/deps/reporter-output/index.d.ts +0 -1
  174. package/dist/deps/reporter-output/index.js +0 -18
  175. package/dist/deps/reporter-output/reporter-output.d.ts +0 -49
  176. package/dist/deps/reporter-output/reporter-output.js +0 -25
  177. package/dist/deps/s3-storage-client/creds.d.ts +0 -4
  178. package/dist/deps/s3-storage-client/creds.js +0 -3
  179. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.d.ts +0 -3
  180. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.js +0 -45
  181. package/dist/deps/s3-storage-client/index.d.ts +0 -2
  182. package/dist/deps/s3-storage-client/index.js +0 -19
  183. package/dist/deps/s3-storage-client/main.d.ts +0 -1
  184. package/dist/deps/s3-storage-client/main.js +0 -20
  185. package/dist/deps/s3-storage-client/s3-storage-client.d.ts +0 -25
  186. package/dist/deps/s3-storage-client/s3-storage-client.js +0 -134
  187. package/dist/deps/task-name/index.d.ts +0 -1
  188. package/dist/deps/task-name/index.js +0 -18
  189. package/dist/deps/task-name/task-name.d.ts +0 -17
  190. package/dist/deps/task-name/task-name.js +0 -44
  191. package/dist/deps/unit-metadata/index.d.ts +0 -1
  192. package/dist/deps/unit-metadata/index.js +0 -18
  193. package/dist/deps/unit-metadata/unit-metadata.d.ts +0 -14
  194. package/dist/deps/unit-metadata/unit-metadata.js +0 -32
  195. package/dist/deps/yarn-repo-protocol/build-task-record.d.ts +0 -61
  196. package/dist/deps/yarn-repo-protocol/build-task-record.js +0 -29
  197. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.d.ts +0 -4
  198. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.js +0 -26
  199. package/dist/deps/yarn-repo-protocol/index.d.ts +0 -2
  200. package/dist/deps/yarn-repo-protocol/index.js +0 -19
  201. package/dist/deps/yarn-repo-protocol/rerun-list.d.ts +0 -12
  202. package/dist/deps/yarn-repo-protocol/rerun-list.js +0 -6
  203. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.d.ts +0 -24
  204. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.js +0 -34
  205. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.d.ts +0 -82
  206. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.js +0 -1036
  207. package/dist/src/build-raptor-cli.d.ts +0 -60
  208. package/dist/src/build-raptor-cli.js +0 -514
  209. package/dist/src/index.d.ts +0 -1
  210. package/dist/src/index.js +0 -20
  211. package/dist/src/main.d.ts +0 -2
  212. package/dist/src/main.js +0 -23
  213. package/dist/src/register-asset-request.d.ts +0 -18
  214. package/dist/src/register-asset-request.js +0 -11
  215. package/dist/src/task-execution-visualizer.d.ts +0 -17
  216. package/dist/src/task-execution-visualizer.js +0 -116
@@ -1,257 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.examplifyZod = examplifyZod;
4
- const misc_1 = require("misc");
5
- const zod_1 = require("zod");
6
- function getZodTypeName(schema) {
7
- if (schema instanceof zod_1.ZodString) {
8
- return 'string';
9
- }
10
- if (schema instanceof zod_1.ZodNumber) {
11
- return 'number';
12
- }
13
- if (schema instanceof zod_1.ZodBoolean) {
14
- return 'boolean';
15
- }
16
- if (schema instanceof zod_1.ZodObject) {
17
- return 'object';
18
- }
19
- if (schema instanceof zod_1.ZodArray) {
20
- return 'array';
21
- }
22
- if (schema instanceof zod_1.ZodUnion) {
23
- return 'union';
24
- }
25
- return 'unknown';
26
- }
27
- function unwrap(schema) {
28
- if (schema instanceof zod_1.ZodOptional || schema instanceof zod_1.ZodNullable) {
29
- return unwrap(schema.unwrap());
30
- }
31
- if (schema instanceof zod_1.ZodDefault) {
32
- return unwrap(schema.removeDefault());
33
- }
34
- return schema;
35
- }
36
- function getDescription(schema) {
37
- if (schema.description) {
38
- return schema.description;
39
- }
40
- if (schema instanceof zod_1.ZodOptional || schema instanceof zod_1.ZodNullable) {
41
- return getDescription(schema.unwrap());
42
- }
43
- if (schema instanceof zod_1.ZodDefault) {
44
- return getDescription(schema.removeDefault());
45
- }
46
- return undefined;
47
- }
48
- function reflect(schema) {
49
- const unwrapped = unwrap(schema);
50
- const typeName = getZodTypeName(unwrapped);
51
- const description = getDescription(schema);
52
- if (typeName === 'array') {
53
- return { tag: 'array', description, defaultValue: [] };
54
- }
55
- if (typeName === 'boolean' || typeName === 'string' || typeName === 'number' || typeName === 'unknown') {
56
- const d = schema instanceof zod_1.ZodDefault
57
- ? schema.parse(undefined)
58
- : { boolean: false, string: '', number: 0, unknown: null }[typeName];
59
- return { tag: typeName, description, defaultValue: d };
60
- }
61
- if (typeName === 'union') {
62
- if (!(unwrapped instanceof zod_1.z.ZodUnion)) {
63
- throw new Error(`type name mismatch - expected: ${typeName}, got: ${unwrapped.constructor.name}`);
64
- }
65
- const options = unwrapped.options;
66
- if (!Array.isArray(options)) {
67
- throw new Error(`type name mismatch - expected: an array, got: ${options.constructor.name}`);
68
- }
69
- const casted = options; // eslint-disable-line @typescript-eslint/consistent-type-assertions
70
- const mapped = casted.map(at => reflect(at));
71
- const d = schema instanceof zod_1.ZodDefault ? schema.parse(undefined) : mapped[0].defaultValue;
72
- return { tag: 'union', description, defaultValue: d };
73
- }
74
- if (typeName === 'object') {
75
- if (!(unwrapped instanceof zod_1.z.ZodObject)) {
76
- throw new Error(`type name mismatch - expected: ${typeName}, got: ${unwrapped.constructor.name}`);
77
- }
78
- const obj = Object.fromEntries(Object.entries(unwrapped.shape).map(kv => {
79
- const k = kv[0];
80
- const v = kv[1];
81
- return [k, reflect(v)]; // eslint-disable-line @typescript-eslint/consistent-type-assertions
82
- }));
83
- return { tag: 'object', of: obj, description, defaultValue: {} };
84
- }
85
- (0, misc_1.shouldNeverHappen)(typeName);
86
- }
87
- class Writer {
88
- constructor(nesting) {
89
- this.nesting = nesting;
90
- this.blocks = [];
91
- }
92
- nest() {
93
- const ret = new Writer(this.nesting + 1);
94
- this.blocks.push({ tag: 'writer', writer: ret });
95
- return ret;
96
- }
97
- writeln(...parts) {
98
- this.blocks.push({ tag: 'line', nesting: this.nesting, parts, isDesc: false });
99
- }
100
- writeDescLine(...parts) {
101
- this.blocks.push({ tag: 'line', nesting: this.nesting, parts, isDesc: true });
102
- }
103
- collectOutput(acc, options) {
104
- for (const block of this.blocks) {
105
- if (block.tag === 'writer') {
106
- block.writer.collectOutput(acc, options);
107
- }
108
- else if (block.tag === 'line') {
109
- // Skip blocks with no parts ([]). A blank (comment) line can still be produced if block.parts is ['']
110
- if (block.parts.length) {
111
- let content = block.parts.join('');
112
- if (!content.trim()) {
113
- acc.push('');
114
- continue;
115
- }
116
- const addComment = block.isDesc || (options.comment && (block.nesting > 0 || options.commentAlsoOutermostBraces));
117
- const col = !addComment ? 0 : block.nesting > 0 ? options.commentIndentation : 0;
118
- const preContent = (addComment ? ' '.repeat(col) + '// ' : '') + ' '.repeat(Math.max(0, 2 * block.nesting - col));
119
- if (!block.isDesc) {
120
- acc.push(preContent + content);
121
- continue;
122
- }
123
- const lineMax = 120;
124
- const allowedLen = lineMax - preContent.length;
125
- while (true) {
126
- if (content.length < allowedLen) {
127
- acc.push(preContent + content);
128
- break;
129
- }
130
- const lastSpace = content.slice(0, lineMax).lastIndexOf(' ');
131
- if (lastSpace < 0) {
132
- acc.push(preContent + content);
133
- break;
134
- }
135
- acc.push(preContent + content.slice(0, lastSpace));
136
- content = content.slice(lastSpace).trimStart();
137
- }
138
- }
139
- }
140
- else {
141
- (0, misc_1.shouldNeverHappen)(block);
142
- }
143
- }
144
- }
145
- }
146
- function format(r, w, path) {
147
- const trimmed = r.description?.trim();
148
- if (trimmed) {
149
- for (const line of trimmed.split('\n')) {
150
- w.writeDescLine(line);
151
- }
152
- }
153
- const pref = path.length ? `${JSON.stringify(path.at(-1) ?? '')}: ` : ``;
154
- if (r.tag === 'array' ||
155
- r.tag === 'boolean' ||
156
- r.tag === 'number' ||
157
- r.tag === 'string' ||
158
- r.tag === 'union' ||
159
- r.tag === 'unknown') {
160
- w.writeln(pref, JSON.stringify(r.defaultValue), path.length ? ',' : '');
161
- return;
162
- }
163
- if (r.tag === 'object') {
164
- w.writeln(pref, '{');
165
- const nestedWriter = w.nest();
166
- let isFirst = true;
167
- for (const [k, v] of Object.entries(r.of)) {
168
- if (!v) {
169
- continue;
170
- }
171
- if (!isFirst) {
172
- nestedWriter.writeln('');
173
- }
174
- isFirst = false;
175
- format(v, nestedWriter, [...path, k]);
176
- }
177
- w.writeln('}', path.length ? ',' : '');
178
- return;
179
- }
180
- (0, misc_1.shouldNeverHappen)(r.tag);
181
- }
182
- /**
183
- * Generates a formatted example from a Zod schema with default values and descriptions.
184
- *
185
- * Converts any supported Zod schema into a human-readable example showing the data
186
- * structure with defaults. Useful for generating annotated configuration files that
187
- * serve as both documentation and a working starting point.
188
- *
189
- * **Note**: Output is formatted for readability and is not valid JSON (contains
190
- * inline comments and trailing commas).
191
- *
192
- * @example
193
- * ```ts
194
- * const schema = z.object({
195
- * port: z.number().default(3000).describe('Server port'),
196
- * host: z.string().optional()
197
- * })
198
- *
199
- * console.log(examplifyZod(schema))
200
- * // Output:
201
- * {
202
- * // Server port
203
- * // port: 3000,
204
- *
205
- * // host: "",
206
- * }
207
- *
208
- * console.log(examplifyZod(schema, { comment: false }))
209
- * // Output:
210
- * {
211
- * // Server port
212
- * port: 3000,
213
- *
214
- * // host: "",
215
- * }
216
- * ```
217
- *
218
- * @param input - Any Zod schema (object, primitive, array, union, etc.)
219
- * @param options - Formatting options (see {@link ExamplifyZodOptions})
220
- * @returns A formatted string example matching the schema structure with defaults populated
221
- *
222
- * @remarks
223
- * ### Default Values
224
- * - **Primitives**: Use type defaults: `0`, `""`, `false`
225
- * - **Arrays**: Always shown as an empty array `[]`
226
- * - **Objects**: Empty object `{}`
227
- * - **With `.default()`**: Uses the specified default value
228
- *
229
- * ### Nullable/Optional Handling
230
- * These modifiers are unwrapped to show the underlying type's default.
231
- *
232
- * ⚠️ **Order matters with `.default()`**:
233
- * - `.nullable().default(5)` → uses `5`
234
- * - `.default(5).nullable()` → uses type default `0` (`.nullable()` wraps after default is set)
235
- *
236
- * The same applies to `.optional()`.
237
- *
238
- * ### Unions
239
- * Uses the first option's default value unless an explicit `.default()` is provided.
240
- *
241
- * ### Descriptions
242
- * Property descriptions always appear as comments above their properties, regardless
243
- * of the `comment` option. Multi-line descriptions are supported.
244
- *
245
- * ### Unsupported Types
246
- * Unrecognized Zod types (enums, literals, records, tuples, intersections, etc.)
247
- * are rendered as the string `'unknown'` with a default value of `null`.
248
- */
249
- function examplifyZod(input, options = {}) {
250
- const r = reflect(input);
251
- const w = new Writer(0);
252
- format(r, w, []);
253
- const acc = [];
254
- w.collectOutput(acc, { comment: true, commentAlsoOutermostBraces: false, commentIndentation: 2, ...options });
255
- return acc.join('\n');
256
- }
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsaWZ5LXpvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxpZnktem9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbVRBLG9DQU9DO0FBMVRELCtCQUF3QztBQUN4Qyw2QkFZWTtBQUlaLFNBQVMsY0FBYyxDQUFDLE1BQWtCO0lBQ3hDLElBQUksTUFBTSxZQUFZLGVBQVMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxJQUFJLE1BQU0sWUFBWSxlQUFTLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsSUFBSSxNQUFNLFlBQVksZ0JBQVUsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxJQUFJLE1BQU0sWUFBWSxlQUFTLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsSUFBSSxNQUFNLFlBQVksY0FBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUNELElBQUksTUFBTSxZQUFZLGNBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsTUFBa0I7SUFDaEMsSUFBSSxNQUFNLFlBQVksaUJBQVcsSUFBSSxNQUFNLFlBQVksaUJBQVcsRUFBRSxDQUFDO1FBQ25FLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFDRCxJQUFJLE1BQU0sWUFBWSxnQkFBVSxFQUFFLENBQUM7UUFDakMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNB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
@@ -1,20 +0,0 @@
1
- import { PathInRepo } from 'core-types';
2
- import { Logger } from 'logger';
3
- import { Graph } from 'misc';
4
- import { TaskName } from 'task-name';
5
- import { Task } from './task';
6
- import { TaskOutputRegistry } from './updatable-task-output-registry';
7
- export declare class ExecutionPlan {
8
- readonly taskGraph: Graph<TaskName>;
9
- private readonly logger;
10
- private readonly registry;
11
- private readonly taskByName;
12
- readonly errorPropagationGraph: Graph<TaskName>;
13
- constructor(taskGraph: Graph<TaskName>, tasks: Task[], logger: Logger, registry: TaskOutputRegistry);
14
- getTask(taskName: TaskName): Task;
15
- tasks(): Task[];
16
- apply(units: string[], goals: PathInRepo[], labels: string[]): TaskName[];
17
- private dropOutOfScope;
18
- private computeStartingPoints;
19
- toString(): string;
20
- }
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExecutionPlan = void 0;
4
- const build_failed_error_1 = require("build-failed-error");
5
- const misc_1 = require("misc");
6
- // TODO(imaman): rethink the name. It is not exactly a "Plan".
7
- class ExecutionPlan {
8
- constructor(taskGraph, tasks, logger, registry) {
9
- this.taskGraph = taskGraph;
10
- this.logger = logger;
11
- this.registry = registry;
12
- this.taskByName = new Map();
13
- for (const t of tasks) {
14
- this.taskByName.set(t.name, t);
15
- }
16
- this.errorPropagationGraph = taskGraph.copy();
17
- }
18
- getTask(taskName) {
19
- return (0, misc_1.hardGet)(this.taskByName, taskName);
20
- }
21
- tasks() {
22
- const taskNames = this.taskGraph.vertices();
23
- return taskNames.map(tn => this.getTask(tn));
24
- }
25
- apply(units, goals, labels) {
26
- this.logger.info(`apply(${JSON.stringify(units)}, ${JSON.stringify(goals)}, ${JSON.stringify(labels)}) called`);
27
- const startingPoints = this.computeStartingPoints(units, goals, labels);
28
- this.dropOutOfScope(startingPoints);
29
- this.logger.info(`computed these startingPoints: ${JSON.stringify(startingPoints)}`);
30
- return startingPoints;
31
- }
32
- dropOutOfScope(startingPoints) {
33
- const inscope = new Set(this.taskGraph.traverseFrom(startingPoints, { direction: 'forward' }));
34
- this.logger.info(`scope of ${startingPoints.join('; ')} is ${[...inscope].join('; ')}`);
35
- for (const v of this.taskGraph.vertices()) {
36
- if (!inscope.has(v)) {
37
- this.taskGraph.remove(v);
38
- }
39
- }
40
- this.logger.info(`Task graph (only in-scope):\n${this.taskGraph}`);
41
- }
42
- computeStartingPoints(units, goals, labels) {
43
- const setOfUnitId = new Set(units);
44
- this.logger.info(`setOfUnitId=${[...setOfUnitId].join('; ')}`);
45
- const matchesUnit = setOfUnitId.size === 0 && goals.length === 0 ? () => true : (t) => setOfUnitId.has(t.unitId);
46
- const matchesLabel = labels.length === 0 ? () => true : (t) => labels.some(label => t.labels.includes(label));
47
- const ret = goals.flatMap(ol => {
48
- const tns = this.registry.wideLookup(ol);
49
- if (tns.length === 0) {
50
- throw new build_failed_error_1.BuildFailedError(`no task found for goal "${ol}"`);
51
- }
52
- return tns.filter(t => matchesLabel(this.getTask(t)));
53
- });
54
- ret.push(...this.tasks()
55
- .filter(t => matchesUnit(t) && matchesLabel(t))
56
- .map(t => t.name));
57
- ret.sort();
58
- this.logger.info(`Found ${ret.length} starting points`);
59
- return ret;
60
- }
61
- toString() {
62
- return `(ExecutionPlan ${this.taskGraph.toString()})`;
63
- }
64
- }
65
- exports.ExecutionPlan = ExecutionPlan;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXBsYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0aW9uLXBsYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXFEO0FBR3JELCtCQUFxQztBQU1yQyw4REFBOEQ7QUFDOUQsTUFBYSxhQUFhO0lBR3hCLFlBQ1csU0FBMEIsRUFDbkMsS0FBYSxFQUNJLE1BQWMsRUFDZCxRQUE0QjtRQUhwQyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUVsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFOOUIsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO1FBUXJELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWtCO1FBQ3hCLE9BQU8sSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsS0FBSztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDM0MsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBZSxFQUFFLEtBQW1CLEVBQUUsTUFBZ0I7UUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FB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
@@ -1,17 +0,0 @@
1
- export type Verdict = 'UNKNOWN' | 'CRASH' | 'FAIL' | 'OK';
2
- import { TaskName } from 'task-name';
3
- import { ExecutionType } from './execution-type';
4
- import { Phase } from './phase';
5
- import { SlotIndex } from './slot-index';
6
- export interface ExecutionRecord {
7
- readonly verdict: Verdict;
8
- readonly outputFile?: string;
9
- readonly executionType: ExecutionType;
10
- readonly startedAt: SlotIndex;
11
- readonly endedAt: SlotIndex;
12
- readonly rootCause?: TaskName;
13
- readonly phases: {
14
- phase: Phase;
15
- timestampMillis: number;
16
- }[];
17
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXJlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjdXRpb24tcmVjb3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,2 +0,0 @@
1
- export type KnownExecutionType = 'EXECUTED' | 'CACHED' | 'CANNOT_START';
2
- export type ExecutionType = 'UNKNOWN' | KnownExecutionType;
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0aW9uLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1 +0,0 @@
1
- export declare function findRepoDir(dir: string): string | undefined;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.findRepoDir = findRepoDir;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- function findRepoDir(dir) {
10
- while (true) {
11
- const pj = path_1.default.join(dir, 'package.json');
12
- const ex = fs_1.default.existsSync(pj);
13
- if (ex) {
14
- const content = JSON.parse(fs_1.default.readFileSync(pj, 'utf-8'));
15
- const keys = Object.keys(content);
16
- if (keys.includes('workspaces')) {
17
- return dir;
18
- }
19
- }
20
- const next = path_1.default.dirname(dir);
21
- if (next === dir) {
22
- return undefined;
23
- }
24
- dir = next;
25
- }
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1yZXBvLWRpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maW5kLXJlcG8tZGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0Esa0NBa0JDO0FBckJELDRDQUFtQjtBQUNuQixnREFBdUI7QUFFdkIsU0FBZ0IsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sRUFBRSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLFlBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUIsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUN4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEdBQUcsQ0FBQTtZQUNaLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsR0FBRyxHQUFHLElBQUksQ0FBQTtJQUNaLENBQUM7QUFDSCxDQUFDIn0=
@@ -1,33 +0,0 @@
1
- import { BuildRunId } from 'build-run-id';
2
- import { Logger } from 'logger';
3
- import { TaskName } from 'task-name';
4
- import { Fingerprint } from './fingerprint';
5
- import { Hasher } from './hasher';
6
- export interface FingerprintLedger {
7
- updateRun(buildRunId: BuildRunId): Promise<void>;
8
- updateFile(h: Hasher, content: string): void;
9
- updateDirectory(h: Hasher): void;
10
- updateTask(task: TaskName, fingerprint: Fingerprint, parts: Record<string, Fingerprint>): void;
11
- close(): Promise<void>;
12
- }
13
- export declare class NopFingerprintLedger implements FingerprintLedger {
14
- updateRun(): Promise<void>;
15
- updateFile(): void;
16
- updateDirectory(): void;
17
- updateTask(): void;
18
- close(): Promise<void>;
19
- }
20
- export declare class PersistedFingerprintLedger implements FingerprintLedger {
21
- private readonly logger;
22
- private readonly ledgerFile;
23
- private items;
24
- private buildRunId?;
25
- constructor(logger: Logger, ledgerFile: string);
26
- updateRun(buildRunId: BuildRunId): Promise<void>;
27
- updateFile(h: Hasher, content: string): void;
28
- updateDirectory(h: Hasher): void;
29
- updateTask(task: TaskName, fingerprint: Fingerprint, parts: Record<string, Fingerprint>): void;
30
- close(): Promise<void>;
31
- private read;
32
- private write;
33
- }
@@ -1,164 +0,0 @@
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.PersistedFingerprintLedger = exports.NopFingerprintLedger = void 0;
37
- const fse = __importStar(require("fs-extra"));
38
- const misc_1 = require("misc");
39
- const zod_1 = require("zod");
40
- const LedgerItem = zod_1.z.union([
41
- zod_1.z.object({
42
- tag: zod_1.z.literal('file'),
43
- buildRunId: zod_1.z.string(),
44
- location: zod_1.z.string(),
45
- fingerprint: zod_1.z.string(),
46
- content: zod_1.z.string(),
47
- }),
48
- zod_1.z.object({
49
- tag: zod_1.z.literal('dir'),
50
- buildRunId: zod_1.z.string(),
51
- location: zod_1.z.string(),
52
- fingerprint: zod_1.z.string(),
53
- parts: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
54
- }),
55
- zod_1.z.object({
56
- tag: zod_1.z.literal('task'),
57
- buildRunId: zod_1.z.string(),
58
- task: zod_1.z.string(),
59
- fingerprint: zod_1.z.string(),
60
- parts: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
61
- }),
62
- zod_1.z.object({ tag: zod_1.z.literal('run'), buildRunId: zod_1.z.string() }),
63
- ]);
64
- const Items = LedgerItem.array();
65
- class NopFingerprintLedger {
66
- async updateRun() { }
67
- updateFile() { }
68
- updateDirectory() { }
69
- updateTask() { }
70
- async close() { }
71
- }
72
- exports.NopFingerprintLedger = NopFingerprintLedger;
73
- class PersistedFingerprintLedger {
74
- constructor(logger, ledgerFile) {
75
- this.logger = logger;
76
- this.ledgerFile = ledgerFile;
77
- this.items = [];
78
- this.logger.info(`fingerprint ledger initialized with file=${this.ledgerFile}`);
79
- }
80
- async updateRun(buildRunId) {
81
- // Validate the stored content by reading it.
82
- await this.read();
83
- this.items.push({ tag: 'run', buildRunId });
84
- this.buildRunId = buildRunId;
85
- }
86
- updateFile(h, content) {
87
- const json = h.toJSON();
88
- this.items.push({
89
- tag: 'file',
90
- buildRunId: this.buildRunId ?? (0, misc_1.failMe)('build run ID is missing'),
91
- location: json.hasherName,
92
- fingerprint: json.digest ?? (0, misc_1.failMe)(`got an undefined digest in ${JSON.stringify(json)}`),
93
- content,
94
- });
95
- }
96
- updateDirectory(h) {
97
- const json = h.toJSON();
98
- this.items.push({
99
- tag: 'dir',
100
- buildRunId: this.buildRunId ?? (0, misc_1.failMe)('build run ID is missing'),
101
- location: json.hasherName,
102
- fingerprint: json.digest ?? (0, misc_1.failMe)(`got an undefined digest in ${JSON.stringify(json)}`),
103
- parts: json.audit,
104
- });
105
- }
106
- updateTask(task, fingerprint, parts) {
107
- this.items.push({
108
- tag: 'task',
109
- buildRunId: this.buildRunId ?? (0, misc_1.failMe)('build run ID is missing'),
110
- task,
111
- fingerprint,
112
- parts,
113
- });
114
- this.logger.info(`Fingerprint of task ${task} with inputs: ${JSON.stringify(parts)} is ${fingerprint}`);
115
- }
116
- async close() {
117
- const t0 = Date.now();
118
- try {
119
- const itemsToWrite = await this.read();
120
- itemsToWrite.push(...this.items);
121
- await this.write(itemsToWrite);
122
- }
123
- finally {
124
- this.logger.info(`.close() took ${((Date.now() - t0) / 1000).toFixed(1)}s`);
125
- }
126
- }
127
- // TODO(imaman): cover
128
- async read() {
129
- const t0 = Date.now();
130
- try {
131
- if (!(await fse.pathExists(this.ledgerFile))) {
132
- return [];
133
- }
134
- const untyped = await fse.readJSON(this.ledgerFile);
135
- const ret = Items.parse(untyped);
136
- const len = JSON.stringify(ret).length;
137
- this.logger.info(`Length of content read from ${this.ledgerFile} is ${len}`);
138
- if (len > TRUNCATION_THRESHOLD) {
139
- this.logger.info(`Discarding the preexsiting content of ${this.ledgerFile} because its length (${len}) exceeded the preset limit of ${TRUNCATION_THRESHOLD}`);
140
- ret.length = 0;
141
- }
142
- return ret;
143
- }
144
- finally {
145
- this.logger.info(`.read() on ${this.ledgerFile} took ${((Date.now() - t0) / 1000).toFixed(1)}s`);
146
- }
147
- }
148
- async write(items) {
149
- try {
150
- await fse.writeJSON(this.ledgerFile, items);
151
- }
152
- catch (e) {
153
- this.logger.error(`writeFile failed`, e);
154
- throw new Error(`Could not save ${items.length} items to ${this.ledgerFile} due to: ${e}`);
155
- }
156
- }
157
- }
158
- exports.PersistedFingerprintLedger = PersistedFingerprintLedger;
159
- /**
160
- * If the length of the ledger that was read from the file exceeds this value, the ledger will be purged to avoid
161
- * errors on the subsequent save.
162
- */
163
- const TRUNCATION_THRESHOLD = 200 * 1000 * 1000;
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2VycHJpbnQtbGVkZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbmdlcnByaW50LWxlZGdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw4Q0FBK0I7QUFFL0IsK0JBQTZCO0FBRTdCLDZCQUF1QjtBQUt2QixNQUFNLFVBQVUsR0FBRyxPQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pCLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxHQUFHLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDdEIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdEIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDcEIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7S0FDcEIsQ0FBQztJQUNGLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxHQUFHLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDckIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdEIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDcEIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUN4QyxDQUFDO0lBQ0YsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLEdBQUcsRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUN0QixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN0QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNoQixXQUFXLEVB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
@@ -1,3 +0,0 @@
1
- import { Brand } from 'brand';
2
- export type Fingerprint = Brand<string, 'fingerprint'>;
3
- export declare function Fingerprint(input: string): Fingerprint;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Fingerprint = Fingerprint;
4
- function validate(input) {
5
- if (input.length === 0) {
6
- throw new Error(`Bad Fingerprint: <${input}>`);
7
- }
8
- }
9
- function Fingerprint(input) {
10
- validate(input);
11
- return input;
12
- }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2VycHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmluZ2VycHJpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxrQ0FHQztBQVRELFNBQVMsUUFBUSxDQUFDLEtBQWE7SUFDN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDaEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixXQUFXLENBQUMsS0FBYTtJQUN2QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDZixPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMifQ==