@toolpath/tool-scraper 0.1.0 → 2.0.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 (68) hide show
  1. package/README.md +41 -11
  2. package/dist/columns.d.ts +62 -0
  3. package/dist/columns.js +62 -0
  4. package/dist/conventions.d.ts +89 -15
  5. package/dist/conventions.js +108 -15
  6. package/dist/families/emuge.d.ts +183 -0
  7. package/dist/families/emuge.js +159 -0
  8. package/dist/families/harvey.d.ts +1782 -0
  9. package/dist/families/harvey.js +1328 -0
  10. package/dist/families/index.js +5 -2
  11. package/dist/families/kennametal.d.ts +21 -0
  12. package/dist/families/kennametal.js +10 -0
  13. package/dist/families/maritool.d.ts +120 -0
  14. package/dist/families/maritool.js +175 -0
  15. package/dist/family.d.ts +35 -1
  16. package/dist/family.js +28 -0
  17. package/dist/identity.d.ts +18 -0
  18. package/dist/identity.js +46 -0
  19. package/dist/index.d.ts +16 -0
  20. package/dist/index.js +16 -0
  21. package/dist/measure.d.ts +112 -0
  22. package/dist/measure.js +130 -0
  23. package/dist/node/cli.d.ts +3 -0
  24. package/dist/node/cli.js +152 -2
  25. package/dist/node/main.js +0 -0
  26. package/dist/records.d.ts +169 -12
  27. package/dist/records.js +116 -5
  28. package/dist/registry.d.ts +31 -1
  29. package/dist/registry.js +40 -1
  30. package/dist/scrape.d.ts +15 -0
  31. package/dist/scrape.js +24 -0
  32. package/dist/vendors/destinytool/records.d.ts +13 -3
  33. package/dist/vendors/destinytool/records.js +41 -37
  34. package/dist/vendors/emuge/index.d.ts +17 -0
  35. package/dist/vendors/emuge/index.js +17 -0
  36. package/dist/vendors/emuge/records.d.ts +150 -0
  37. package/dist/vendors/emuge/records.js +375 -0
  38. package/dist/vendors/emuge/scrape.d.ts +227 -0
  39. package/dist/vendors/emuge/scrape.js +358 -0
  40. package/dist/vendors/emuge/value.d.ts +75 -0
  41. package/dist/vendors/emuge/value.js +116 -0
  42. package/dist/vendors/harvey/catalog.d.ts +53 -0
  43. package/dist/vendors/harvey/catalog.js +120 -0
  44. package/dist/vendors/harvey/header.d.ts +89 -0
  45. package/dist/vendors/harvey/header.js +185 -0
  46. package/dist/vendors/harvey/index.d.ts +21 -0
  47. package/dist/vendors/harvey/index.js +21 -0
  48. package/dist/vendors/harvey/lexicon.d.ts +73 -0
  49. package/dist/vendors/harvey/lexicon.js +126 -0
  50. package/dist/vendors/harvey/literal.d.ts +68 -0
  51. package/dist/vendors/harvey/literal.js +214 -0
  52. package/dist/vendors/harvey/records.d.ts +79 -0
  53. package/dist/vendors/harvey/records.js +163 -0
  54. package/dist/vendors/harvey/scrape.d.ts +187 -0
  55. package/dist/vendors/harvey/scrape.js +483 -0
  56. package/dist/vendors/harvey/value.d.ts +74 -0
  57. package/dist/vendors/harvey/value.js +119 -0
  58. package/dist/vendors/kennametal/records.d.ts +13 -4
  59. package/dist/vendors/kennametal/records.js +61 -26
  60. package/dist/vendors/maritool/catalog.d.ts +81 -0
  61. package/dist/vendors/maritool/catalog.js +132 -0
  62. package/dist/vendors/maritool/index.d.ts +10 -0
  63. package/dist/vendors/maritool/index.js +10 -0
  64. package/dist/vendors/maritool/scrape.d.ts +297 -0
  65. package/dist/vendors/maritool/scrape.js +593 -0
  66. package/dist/vendors/regofix/scrape.d.ts +8 -11
  67. package/dist/vendors/regofix/scrape.js +21 -36
  68. package/package.json +31 -7
@@ -0,0 +1,1782 @@
1
+ /**
2
+ * Harvey Tool's families — one per product page, 52 of them.
3
+ *
4
+ * A family here is a product page, because that is the unit Harvey publishes:
5
+ * one page carries one product line's whole variant table, and its
6
+ * `productCode` — `HT-Harvey-EndMill-008` — is the vendor's own name for it.
7
+ * That code is the `familyCode`; the CSV name and the family id are derived
8
+ * from it, so nothing here invents a label.
9
+ *
10
+ * ## Where the scrape target lives, and why it is not in the definition
11
+ *
12
+ * A Harvey scrape needs a product-page **path**, and `FamilyDefinition` has no
13
+ * key for one — `familyCode` is the vendor's code and a path is not that.
14
+ * Harvey's slugs are also not derivable from the code: three of the 52 say
15
+ * `end-mills-` where the rest say `miniature-end-mills-`, and the separators
16
+ * change from `---` to `-` partway through the catalog.
17
+ *
18
+ * So {@link PRODUCT_PAGES} is a second table beside the first, keyed by the same
19
+ * CSV name, and `tests/harvey-families.test.ts` holds the two to the same keys.
20
+ * The alternative — widening the shared `FamilyDefinition` with a key one vendor
21
+ * uses — would put a Harvey fact in the type every family in the catalog is
22
+ * written against.
23
+ *
24
+ * ## `rows` is Harvey's count, not this adapter's
25
+ *
26
+ * Every count below was read on 2026-08-29 by summing the `T` entries of each
27
+ * table row's own add-to-cart payload (`atc.j`) across all 80 tables — Harvey's
28
+ * independent statement of what is orderable, not a number this adapter
29
+ * produced. That is what makes `receipts.checkRows` worth running, and it is the
30
+ * same list `vendors/harvey/scrape.ts` checks the matrix explosion against on
31
+ * every row.
32
+ *
33
+ * It is still a script's count rather than a person's. The payload lists 12,799
34
+ * entries across 5,033 HTML rows; **26 of them are not parts.** Two families
35
+ * carry the marketing string `25x Diameter!` / `30x Diameter!` in a tool-number
36
+ * column, with no product link and no CAD model, and Harvey's own payload lists
37
+ * those as if they were orderable. The adapter drops them and warns, so the two
38
+ * counts below are the payload's minus that vendor fault: 12,773 real parts.
39
+ *
40
+ * ## `NOF` maps a column the adapter synthesises
41
+ *
42
+ * Half these tables state the flute count in a column of their own and half
43
+ * state it in a coating group's sub-header, so `vendors/harvey/scrape.ts`
44
+ * writes one `FLUTES` column either way and every family maps `NOF` to it. The
45
+ * two exceptions are the deburring families, which publish right- and left-hand
46
+ * tooth counts and no flute count at all — `NOF` is absent there because the
47
+ * vendor states none, not because the mapping was forgotten.
48
+ *
49
+ * ## Every family is `endmill`
50
+ *
51
+ * Including the twelve keyseat-cutter families. `records.ToolKind` has three
52
+ * values — `drill`, `tap`, `endmill` — and a keyseat cutter is a side-cutting
53
+ * milling tool with a cutting diameter, a width of cut, a shank and an overall
54
+ * length, so it maps onto the endmill contract exactly. Adding a fourth kind for
55
+ * it would be a cross-package contract change, and nothing downstream is asking
56
+ * for one yet.
57
+ */
58
+ import type { UnitSystem } from '../conventions.js';
59
+ import type { Fact } from '../provenance.js';
60
+ export declare const FAMILIES: {
61
+ readonly 'harvey_endmill_001.csv': {
62
+ readonly id: "endmill-001";
63
+ readonly brand: "harvey";
64
+ readonly kind: "endmill";
65
+ readonly familyCode: "HT-Harvey-EndMill-001";
66
+ readonly rows: 28;
67
+ readonly columns: {
68
+ readonly DC: "CUTTER DIAMETER";
69
+ readonly SFDM: "SHANK DIAMETER";
70
+ readonly OAL: "OVERALL LENGTH";
71
+ readonly LCF: "LENGTH OF CUT";
72
+ readonly NOF: "FLUTES";
73
+ };
74
+ readonly facts: {
75
+ readonly unit: {
76
+ readonly value: UnitSystem;
77
+ readonly source: "vendor-stated";
78
+ readonly cite: string;
79
+ };
80
+ readonly bmc: {
81
+ readonly value: string;
82
+ readonly source: "vendor-stated";
83
+ readonly cite: string;
84
+ };
85
+ readonly profile: Fact<string>;
86
+ readonly coolantThrough: {
87
+ readonly value: boolean;
88
+ readonly source: "derived";
89
+ readonly note: string;
90
+ };
91
+ };
92
+ };
93
+ readonly 'harvey_endmill_002.csv': {
94
+ readonly id: "endmill-002";
95
+ readonly brand: "harvey";
96
+ readonly kind: "endmill";
97
+ readonly familyCode: "HT-Harvey-EndMill-002";
98
+ readonly rows: 44;
99
+ readonly columns: {
100
+ readonly DC: "CUTTER DIAMETER";
101
+ readonly SFDM: "SHANK DIAMETER";
102
+ readonly OAL: "OVERALL LENGTH";
103
+ readonly LCF: "LENGTH OF CUT";
104
+ readonly RE: "CORNER RADIUS";
105
+ readonly NOF: "FLUTES";
106
+ };
107
+ readonly facts: {
108
+ readonly unit: {
109
+ readonly value: UnitSystem;
110
+ readonly source: "vendor-stated";
111
+ readonly cite: string;
112
+ };
113
+ readonly bmc: {
114
+ readonly value: string;
115
+ readonly source: "vendor-stated";
116
+ readonly cite: string;
117
+ };
118
+ readonly profile: Fact<string>;
119
+ readonly coolantThrough: {
120
+ readonly value: boolean;
121
+ readonly source: "derived";
122
+ readonly note: string;
123
+ };
124
+ };
125
+ };
126
+ readonly 'harvey_endmill_003.csv': {
127
+ readonly id: "endmill-003";
128
+ readonly brand: "harvey";
129
+ readonly kind: "endmill";
130
+ readonly familyCode: "HT-Harvey-EndMill-003";
131
+ readonly rows: 49;
132
+ readonly columns: {
133
+ readonly DC: "CUTTER DIAMETER";
134
+ readonly SFDM: "SHANK DIAMETER";
135
+ readonly OAL: "OVERALL LENGTH";
136
+ readonly LCF: "LENGTH OF CUT";
137
+ readonly NOF: "FLUTES";
138
+ };
139
+ readonly facts: {
140
+ readonly unit: {
141
+ readonly value: UnitSystem;
142
+ readonly source: "vendor-stated";
143
+ readonly cite: string;
144
+ };
145
+ readonly bmc: {
146
+ readonly value: string;
147
+ readonly source: "vendor-stated";
148
+ readonly cite: string;
149
+ };
150
+ readonly profile: Fact<string>;
151
+ readonly coolantThrough: {
152
+ readonly value: boolean;
153
+ readonly source: "derived";
154
+ readonly note: string;
155
+ };
156
+ };
157
+ };
158
+ readonly 'harvey_endmill_004.csv': {
159
+ readonly id: "endmill-004";
160
+ readonly brand: "harvey";
161
+ readonly kind: "endmill";
162
+ readonly familyCode: "HT-Harvey-EndMill-004";
163
+ readonly rows: 389;
164
+ readonly columns: {
165
+ readonly DC: "CUTTER DIA.";
166
+ readonly SFDM: "SHANK DIA.";
167
+ readonly OAL: "OAL";
168
+ readonly LCF: "LENGTH OF CUT";
169
+ readonly NOF: "FLUTES";
170
+ };
171
+ readonly facts: {
172
+ readonly unit: {
173
+ readonly value: UnitSystem;
174
+ readonly source: "vendor-stated";
175
+ readonly cite: string;
176
+ };
177
+ readonly bmc: {
178
+ readonly value: string;
179
+ readonly source: "vendor-stated";
180
+ readonly cite: string;
181
+ };
182
+ readonly profile: Fact<string>;
183
+ readonly coolantThrough: {
184
+ readonly value: boolean;
185
+ readonly source: "derived";
186
+ readonly note: string;
187
+ };
188
+ };
189
+ };
190
+ readonly 'harvey_endmill_005.csv': {
191
+ readonly id: "endmill-005";
192
+ readonly brand: "harvey";
193
+ readonly kind: "endmill";
194
+ readonly familyCode: "HT-Harvey-EndMill-005";
195
+ readonly rows: 95;
196
+ readonly columns: {
197
+ readonly DC: "CUTTER DIA.";
198
+ readonly SFDM: "SHANK DIA.";
199
+ readonly OAL: "OAL";
200
+ readonly LCF: "LENGTH OF CUT";
201
+ readonly 'shoulder-length': "OVERALL REACH";
202
+ readonly NOF: "FLUTES";
203
+ };
204
+ readonly facts: {
205
+ readonly unit: {
206
+ readonly value: UnitSystem;
207
+ readonly source: "vendor-stated";
208
+ readonly cite: string;
209
+ };
210
+ readonly bmc: {
211
+ readonly value: string;
212
+ readonly source: "vendor-stated";
213
+ readonly cite: string;
214
+ };
215
+ readonly profile: Fact<string>;
216
+ readonly coolantThrough: {
217
+ readonly value: boolean;
218
+ readonly source: "derived";
219
+ readonly note: string;
220
+ };
221
+ };
222
+ };
223
+ readonly 'harvey_endmill_006.csv': {
224
+ readonly id: "endmill-006";
225
+ readonly brand: "harvey";
226
+ readonly kind: "endmill";
227
+ readonly familyCode: "HT-Harvey-EndMill-006";
228
+ readonly rows: 284;
229
+ readonly columns: {
230
+ readonly DC: "CUTTER DIAMETER";
231
+ readonly SFDM: "SHANK DIAMETER";
232
+ readonly OAL: "OVERALL LENGTH";
233
+ readonly LCF: "LENGTH OF CUT";
234
+ readonly 'shoulder-length': "OVERALL REACH";
235
+ readonly NOF: "FLUTES";
236
+ };
237
+ readonly facts: {
238
+ readonly unit: {
239
+ readonly value: UnitSystem;
240
+ readonly source: "vendor-stated";
241
+ readonly cite: string;
242
+ };
243
+ readonly bmc: {
244
+ readonly value: string;
245
+ readonly source: "vendor-stated";
246
+ readonly cite: string;
247
+ };
248
+ readonly profile: Fact<string>;
249
+ readonly coolantThrough: {
250
+ readonly value: boolean;
251
+ readonly source: "derived";
252
+ readonly note: string;
253
+ };
254
+ };
255
+ };
256
+ readonly 'harvey_endmill_007.csv': {
257
+ readonly id: "endmill-007";
258
+ readonly brand: "harvey";
259
+ readonly kind: "endmill";
260
+ readonly familyCode: "HT-Harvey-EndMill-007";
261
+ readonly rows: 718;
262
+ readonly columns: {
263
+ readonly DC: "CUTTER DIA.";
264
+ readonly SFDM: "SHANK DIA.";
265
+ readonly OAL: "OAL";
266
+ readonly LCF: "LOC";
267
+ readonly 'shoulder-length': "OVERALL REACH";
268
+ readonly NOF: "FLUTES";
269
+ };
270
+ readonly facts: {
271
+ readonly unit: {
272
+ readonly value: UnitSystem;
273
+ readonly source: "vendor-stated";
274
+ readonly cite: string;
275
+ };
276
+ readonly bmc: {
277
+ readonly value: string;
278
+ readonly source: "vendor-stated";
279
+ readonly cite: string;
280
+ };
281
+ readonly profile: Fact<string>;
282
+ readonly coolantThrough: {
283
+ readonly value: boolean;
284
+ readonly source: "derived";
285
+ readonly note: string;
286
+ };
287
+ };
288
+ };
289
+ readonly 'harvey_endmill_008.csv': {
290
+ readonly id: "endmill-008";
291
+ readonly brand: "harvey";
292
+ readonly kind: "endmill";
293
+ readonly familyCode: "HT-Harvey-EndMill-008";
294
+ readonly rows: 840;
295
+ readonly columns: {
296
+ readonly DC: "CUTTER DIA.";
297
+ readonly SFDM: "SHANK DIA.";
298
+ readonly OAL: "OAL";
299
+ readonly LCF: "LOC";
300
+ readonly NOF: "FLUTES";
301
+ };
302
+ readonly facts: {
303
+ readonly unit: {
304
+ readonly value: UnitSystem;
305
+ readonly source: "vendor-stated";
306
+ readonly cite: string;
307
+ };
308
+ readonly bmc: {
309
+ readonly value: string;
310
+ readonly source: "vendor-stated";
311
+ readonly cite: string;
312
+ };
313
+ readonly profile: Fact<string>;
314
+ readonly coolantThrough: {
315
+ readonly value: boolean;
316
+ readonly source: "derived";
317
+ readonly note: string;
318
+ };
319
+ };
320
+ };
321
+ readonly 'harvey_endmill_009.csv': {
322
+ readonly id: "endmill-009";
323
+ readonly brand: "harvey";
324
+ readonly kind: "endmill";
325
+ readonly familyCode: "HT-Harvey-EndMill-009";
326
+ readonly rows: 171;
327
+ readonly columns: {
328
+ readonly DC: "CUTTER DIA.";
329
+ readonly SFDM: "SHANK DIA.";
330
+ readonly OAL: "OAL";
331
+ readonly LCF: "LOC";
332
+ readonly 'shoulder-length': "OVERALL REACH";
333
+ readonly NOF: "FLUTES";
334
+ };
335
+ readonly facts: {
336
+ readonly unit: {
337
+ readonly value: UnitSystem;
338
+ readonly source: "vendor-stated";
339
+ readonly cite: string;
340
+ };
341
+ readonly bmc: {
342
+ readonly value: string;
343
+ readonly source: "vendor-stated";
344
+ readonly cite: string;
345
+ };
346
+ readonly profile: Fact<string>;
347
+ readonly coolantThrough: {
348
+ readonly value: boolean;
349
+ readonly source: "derived";
350
+ readonly note: string;
351
+ };
352
+ };
353
+ };
354
+ readonly 'harvey_endmill_010.csv': {
355
+ readonly id: "endmill-010";
356
+ readonly brand: "harvey";
357
+ readonly kind: "endmill";
358
+ readonly familyCode: "HT-Harvey-EndMill-010";
359
+ readonly rows: 178;
360
+ readonly columns: {
361
+ readonly DC: "CUTTER DIAMETER";
362
+ readonly SFDM: "SHANK DIAMETER";
363
+ readonly OAL: "OVERALL LENGTH";
364
+ readonly LCF: "LENGTH OF CUT";
365
+ readonly NOF: "FLUTES";
366
+ };
367
+ readonly facts: {
368
+ readonly unit: {
369
+ readonly value: UnitSystem;
370
+ readonly source: "vendor-stated";
371
+ readonly cite: string;
372
+ };
373
+ readonly bmc: {
374
+ readonly value: string;
375
+ readonly source: "vendor-stated";
376
+ readonly cite: string;
377
+ };
378
+ readonly profile: Fact<string>;
379
+ readonly coolantThrough: {
380
+ readonly value: boolean;
381
+ readonly source: "derived";
382
+ readonly note: string;
383
+ };
384
+ };
385
+ };
386
+ readonly 'harvey_endmill_011.csv': {
387
+ readonly id: "endmill-011";
388
+ readonly brand: "harvey";
389
+ readonly kind: "endmill";
390
+ readonly familyCode: "HT-Harvey-EndMill-011";
391
+ readonly rows: 293;
392
+ readonly columns: {
393
+ readonly DC: "CUTTER DIA.";
394
+ readonly SFDM: "SHANK DIA.";
395
+ readonly OAL: "OAL";
396
+ readonly LCF: "LENGTH OF CUT";
397
+ readonly RE: "CORNER RADIUS";
398
+ readonly NOF: "FLUTES";
399
+ };
400
+ readonly facts: {
401
+ readonly unit: {
402
+ readonly value: UnitSystem;
403
+ readonly source: "vendor-stated";
404
+ readonly cite: string;
405
+ };
406
+ readonly bmc: {
407
+ readonly value: string;
408
+ readonly source: "vendor-stated";
409
+ readonly cite: string;
410
+ };
411
+ readonly profile: Fact<string>;
412
+ readonly coolantThrough: {
413
+ readonly value: boolean;
414
+ readonly source: "derived";
415
+ readonly note: string;
416
+ };
417
+ };
418
+ };
419
+ readonly 'harvey_endmill_012.csv': {
420
+ readonly id: "endmill-012";
421
+ readonly brand: "harvey";
422
+ readonly kind: "endmill";
423
+ readonly familyCode: "HT-Harvey-EndMill-012";
424
+ readonly rows: 154;
425
+ readonly columns: {
426
+ readonly DC: "CUTTER DIA.";
427
+ readonly SFDM: "SHANK DIA.";
428
+ readonly OAL: "OAL";
429
+ readonly LCF: "LOC";
430
+ readonly RE: "CORNER RADIUS";
431
+ readonly 'shoulder-length': "OVERALL REACH";
432
+ readonly NOF: "FLUTES";
433
+ };
434
+ readonly facts: {
435
+ readonly unit: {
436
+ readonly value: UnitSystem;
437
+ readonly source: "vendor-stated";
438
+ readonly cite: string;
439
+ };
440
+ readonly bmc: {
441
+ readonly value: string;
442
+ readonly source: "vendor-stated";
443
+ readonly cite: string;
444
+ };
445
+ readonly profile: Fact<string>;
446
+ readonly coolantThrough: {
447
+ readonly value: boolean;
448
+ readonly source: "derived";
449
+ readonly note: string;
450
+ };
451
+ };
452
+ };
453
+ readonly 'harvey_endmill_013.csv': {
454
+ readonly id: "endmill-013";
455
+ readonly brand: "harvey";
456
+ readonly kind: "endmill";
457
+ readonly familyCode: "HT-Harvey-EndMill-013";
458
+ readonly rows: 598;
459
+ readonly columns: {
460
+ readonly DC: "CUTTER DIA.";
461
+ readonly SFDM: "SHANK DIA.";
462
+ readonly OAL: "OAL";
463
+ readonly LCF: "LOC";
464
+ readonly RE: "CORNER RADIUS";
465
+ readonly 'shoulder-length': "OVERALL REACH";
466
+ readonly NOF: "FLUTES";
467
+ };
468
+ readonly facts: {
469
+ readonly unit: {
470
+ readonly value: UnitSystem;
471
+ readonly source: "vendor-stated";
472
+ readonly cite: string;
473
+ };
474
+ readonly bmc: {
475
+ readonly value: string;
476
+ readonly source: "vendor-stated";
477
+ readonly cite: string;
478
+ };
479
+ readonly profile: Fact<string>;
480
+ readonly coolantThrough: {
481
+ readonly value: boolean;
482
+ readonly source: "derived";
483
+ readonly note: string;
484
+ };
485
+ };
486
+ };
487
+ readonly 'harvey_endmill_014.csv': {
488
+ readonly id: "endmill-014";
489
+ readonly brand: "harvey";
490
+ readonly kind: "endmill";
491
+ readonly familyCode: "HT-Harvey-EndMill-014";
492
+ readonly rows: 1344;
493
+ readonly columns: {
494
+ readonly DC: "CUTTER DIA.";
495
+ readonly SFDM: "SHANK DIA.";
496
+ readonly OAL: "OAL";
497
+ readonly LCF: "LENGTH OF CUT";
498
+ readonly RE: "CORNER RADIUS";
499
+ readonly NOF: "FLUTES";
500
+ };
501
+ readonly facts: {
502
+ readonly unit: {
503
+ readonly value: UnitSystem;
504
+ readonly source: "vendor-stated";
505
+ readonly cite: string;
506
+ };
507
+ readonly bmc: {
508
+ readonly value: string;
509
+ readonly source: "vendor-stated";
510
+ readonly cite: string;
511
+ };
512
+ readonly profile: Fact<string>;
513
+ readonly coolantThrough: {
514
+ readonly value: boolean;
515
+ readonly source: "derived";
516
+ readonly note: string;
517
+ };
518
+ };
519
+ };
520
+ readonly 'harvey_endmill_015.csv': {
521
+ readonly id: "endmill-015";
522
+ readonly brand: "harvey";
523
+ readonly kind: "endmill";
524
+ readonly familyCode: "HT-Harvey-EndMill-015";
525
+ readonly rows: 18;
526
+ readonly columns: {
527
+ readonly DC: "CUTTER DIA.";
528
+ readonly SFDM: "SHANK DIA.";
529
+ readonly OAL: "OAL";
530
+ readonly LCF: "LOC";
531
+ };
532
+ readonly facts: {
533
+ readonly unit: {
534
+ readonly value: UnitSystem;
535
+ readonly source: "vendor-stated";
536
+ readonly cite: string;
537
+ };
538
+ readonly bmc: {
539
+ readonly value: string;
540
+ readonly source: "vendor-stated";
541
+ readonly cite: string;
542
+ };
543
+ readonly profile: Fact<string>;
544
+ readonly coolantThrough: {
545
+ readonly value: boolean;
546
+ readonly source: "derived";
547
+ readonly note: string;
548
+ };
549
+ };
550
+ };
551
+ readonly 'harvey_endmill_016.csv': {
552
+ readonly id: "endmill-016";
553
+ readonly brand: "harvey";
554
+ readonly kind: "endmill";
555
+ readonly familyCode: "HT-Harvey-EndMill-016";
556
+ readonly rows: 734;
557
+ readonly columns: {
558
+ readonly DC: "CUTTER DIA.";
559
+ readonly SFDM: "SHANK DIA.";
560
+ readonly OAL: "OAL";
561
+ readonly LCF: "LENGTH OF CUT";
562
+ readonly NOF: "FLUTES";
563
+ };
564
+ readonly facts: {
565
+ readonly unit: {
566
+ readonly value: UnitSystem;
567
+ readonly source: "vendor-stated";
568
+ readonly cite: string;
569
+ };
570
+ readonly bmc: {
571
+ readonly value: string;
572
+ readonly source: "vendor-stated";
573
+ readonly cite: string;
574
+ };
575
+ readonly profile: Fact<string>;
576
+ readonly coolantThrough: {
577
+ readonly value: boolean;
578
+ readonly source: "derived";
579
+ readonly note: string;
580
+ };
581
+ };
582
+ };
583
+ readonly 'harvey_endmill_017.csv': {
584
+ readonly id: "endmill-017";
585
+ readonly brand: "harvey";
586
+ readonly kind: "endmill";
587
+ readonly familyCode: "HT-Harvey-EndMill-017";
588
+ readonly rows: 194;
589
+ readonly columns: {
590
+ readonly DC: "CUTTER DIA.";
591
+ readonly SFDM: "SHANK DIA.";
592
+ readonly OAL: "OAL";
593
+ readonly LCF: "LENGTH OF CUT";
594
+ readonly 'shoulder-length': "OVERALL REACH";
595
+ readonly NOF: "FLUTES";
596
+ };
597
+ readonly facts: {
598
+ readonly unit: {
599
+ readonly value: UnitSystem;
600
+ readonly source: "vendor-stated";
601
+ readonly cite: string;
602
+ };
603
+ readonly bmc: {
604
+ readonly value: string;
605
+ readonly source: "vendor-stated";
606
+ readonly cite: string;
607
+ };
608
+ readonly profile: Fact<string>;
609
+ readonly coolantThrough: {
610
+ readonly value: boolean;
611
+ readonly source: "derived";
612
+ readonly note: string;
613
+ };
614
+ };
615
+ };
616
+ readonly 'harvey_endmill_018.csv': {
617
+ readonly id: "endmill-018";
618
+ readonly brand: "harvey";
619
+ readonly kind: "endmill";
620
+ readonly familyCode: "HT-Harvey-EndMill-018";
621
+ readonly rows: 519;
622
+ readonly columns: {
623
+ readonly DC: "CUTTER DIAMETER";
624
+ readonly SFDM: "SHANK DIAMETER";
625
+ readonly OAL: "OVERALL LENGTH";
626
+ readonly LCF: "LENGTH OF CUT";
627
+ readonly 'shoulder-length': "OVERALL REACH";
628
+ readonly NOF: "FLUTES";
629
+ };
630
+ readonly facts: {
631
+ readonly unit: {
632
+ readonly value: UnitSystem;
633
+ readonly source: "vendor-stated";
634
+ readonly cite: string;
635
+ };
636
+ readonly bmc: {
637
+ readonly value: string;
638
+ readonly source: "vendor-stated";
639
+ readonly cite: string;
640
+ };
641
+ readonly profile: Fact<string>;
642
+ readonly coolantThrough: {
643
+ readonly value: boolean;
644
+ readonly source: "derived";
645
+ readonly note: string;
646
+ };
647
+ };
648
+ };
649
+ readonly 'harvey_endmill_019.csv': {
650
+ readonly id: "endmill-019";
651
+ readonly brand: "harvey";
652
+ readonly kind: "endmill";
653
+ readonly familyCode: "HT-Harvey-EndMill-019";
654
+ readonly rows: 1026;
655
+ readonly columns: {
656
+ readonly DC: "CUTTER DIA.";
657
+ readonly SFDM: "SHANK DIA.";
658
+ readonly OAL: "OAL";
659
+ readonly LCF: "LOC";
660
+ readonly 'shoulder-length': "OVERALL REACH";
661
+ readonly NOF: "FLUTES";
662
+ };
663
+ readonly facts: {
664
+ readonly unit: {
665
+ readonly value: UnitSystem;
666
+ readonly source: "vendor-stated";
667
+ readonly cite: string;
668
+ };
669
+ readonly bmc: {
670
+ readonly value: string;
671
+ readonly source: "vendor-stated";
672
+ readonly cite: string;
673
+ };
674
+ readonly profile: Fact<string>;
675
+ readonly coolantThrough: {
676
+ readonly value: boolean;
677
+ readonly source: "derived";
678
+ readonly note: string;
679
+ };
680
+ };
681
+ };
682
+ readonly 'harvey_endmill_020.csv': {
683
+ readonly id: "endmill-020";
684
+ readonly brand: "harvey";
685
+ readonly kind: "endmill";
686
+ readonly familyCode: "HT-Harvey-EndMill-020";
687
+ readonly rows: 1239;
688
+ readonly columns: {
689
+ readonly DC: "CUTTER DIA.";
690
+ readonly SFDM: "SHANK DIA.";
691
+ readonly OAL: "OAL";
692
+ readonly LCF: "LOC";
693
+ readonly NOF: "FLUTES";
694
+ };
695
+ readonly facts: {
696
+ readonly unit: {
697
+ readonly value: UnitSystem;
698
+ readonly source: "vendor-stated";
699
+ readonly cite: string;
700
+ };
701
+ readonly bmc: {
702
+ readonly value: string;
703
+ readonly source: "vendor-stated";
704
+ readonly cite: string;
705
+ };
706
+ readonly profile: Fact<string>;
707
+ readonly coolantThrough: {
708
+ readonly value: boolean;
709
+ readonly source: "derived";
710
+ readonly note: string;
711
+ };
712
+ };
713
+ };
714
+ readonly 'harvey_endmill_021.csv': {
715
+ readonly id: "endmill-021";
716
+ readonly brand: "harvey";
717
+ readonly kind: "endmill";
718
+ readonly familyCode: "HT-Harvey-EndMill-021";
719
+ readonly rows: 88;
720
+ readonly columns: {
721
+ readonly DC: "CUTTER DIA.";
722
+ readonly SFDM: "SHANK DIA.";
723
+ readonly OAL: "OAL";
724
+ readonly LCF: "LOC";
725
+ readonly 'shoulder-length': "OVERALL REACH";
726
+ readonly NOF: "FLUTES";
727
+ };
728
+ readonly facts: {
729
+ readonly unit: {
730
+ readonly value: UnitSystem;
731
+ readonly source: "vendor-stated";
732
+ readonly cite: string;
733
+ };
734
+ readonly bmc: {
735
+ readonly value: string;
736
+ readonly source: "vendor-stated";
737
+ readonly cite: string;
738
+ };
739
+ readonly profile: Fact<string>;
740
+ readonly coolantThrough: {
741
+ readonly value: boolean;
742
+ readonly source: "derived";
743
+ readonly note: string;
744
+ };
745
+ };
746
+ };
747
+ readonly 'harvey_endmill_022.csv': {
748
+ readonly id: "endmill-022";
749
+ readonly brand: "harvey";
750
+ readonly kind: "endmill";
751
+ readonly familyCode: "HT-Harvey-EndMill-022";
752
+ readonly rows: 371;
753
+ readonly columns: {
754
+ readonly DC: "CUTTER DIAMETER";
755
+ readonly SFDM: "SHANK DIAMETER";
756
+ readonly OAL: "OVERALL LENGTH";
757
+ readonly LCF: "LENGTH OF CUT";
758
+ readonly NOF: "FLUTES";
759
+ };
760
+ readonly facts: {
761
+ readonly unit: {
762
+ readonly value: UnitSystem;
763
+ readonly source: "vendor-stated";
764
+ readonly cite: string;
765
+ };
766
+ readonly bmc: {
767
+ readonly value: string;
768
+ readonly source: "vendor-stated";
769
+ readonly cite: string;
770
+ };
771
+ readonly profile: Fact<string>;
772
+ readonly coolantThrough: {
773
+ readonly value: boolean;
774
+ readonly source: "derived";
775
+ readonly note: string;
776
+ };
777
+ };
778
+ };
779
+ readonly 'harvey_endmill_023.csv': {
780
+ readonly id: "endmill-023";
781
+ readonly brand: "harvey";
782
+ readonly kind: "endmill";
783
+ readonly familyCode: "HT-Harvey-EndMill-023";
784
+ readonly rows: 26;
785
+ readonly columns: {
786
+ readonly DC: "CUTTER DIA.";
787
+ readonly SFDM: "SHANK DIA.";
788
+ readonly OAL: "OAL";
789
+ readonly LCF: "LOC";
790
+ };
791
+ readonly facts: {
792
+ readonly unit: {
793
+ readonly value: UnitSystem;
794
+ readonly source: "vendor-stated";
795
+ readonly cite: string;
796
+ };
797
+ readonly bmc: {
798
+ readonly value: string;
799
+ readonly source: "vendor-stated";
800
+ readonly cite: string;
801
+ };
802
+ readonly profile: Fact<string>;
803
+ readonly coolantThrough: {
804
+ readonly value: boolean;
805
+ readonly source: "derived";
806
+ readonly note: string;
807
+ };
808
+ };
809
+ };
810
+ readonly 'harvey_endmill_025.csv': {
811
+ readonly id: "endmill-025";
812
+ readonly brand: "harvey";
813
+ readonly kind: "endmill";
814
+ readonly familyCode: "HT-Harvey-EndMill-025";
815
+ readonly rows: 10;
816
+ readonly columns: {
817
+ readonly DC: "CUTTER DIA.";
818
+ readonly SFDM: "SHANK DIA.";
819
+ readonly OAL: "OAL";
820
+ readonly LCF: "LOC";
821
+ readonly 'shoulder-length': "OVERALL REACH";
822
+ readonly NOF: "FLUTES";
823
+ };
824
+ readonly facts: {
825
+ readonly unit: {
826
+ readonly value: UnitSystem;
827
+ readonly source: "vendor-stated";
828
+ readonly cite: string;
829
+ };
830
+ readonly bmc: {
831
+ readonly value: string;
832
+ readonly source: "vendor-stated";
833
+ readonly cite: string;
834
+ };
835
+ readonly profile: Fact<string>;
836
+ readonly coolantThrough: {
837
+ readonly value: boolean;
838
+ readonly source: "derived";
839
+ readonly note: string;
840
+ };
841
+ };
842
+ };
843
+ readonly 'harvey_endmill_026.csv': {
844
+ readonly id: "endmill-026";
845
+ readonly brand: "harvey";
846
+ readonly kind: "endmill";
847
+ readonly familyCode: "HT-Harvey-EndMill-026";
848
+ readonly rows: 12;
849
+ readonly columns: {
850
+ readonly DC: "CUTTER DIA.";
851
+ readonly SFDM: "SHANK DIA.";
852
+ readonly OAL: "OAL";
853
+ readonly LCF: "LOC";
854
+ readonly RE: "CORNER RADIUS";
855
+ readonly 'shoulder-length': "OVERALL REACH";
856
+ readonly NOF: "FLUTES";
857
+ };
858
+ readonly facts: {
859
+ readonly unit: {
860
+ readonly value: UnitSystem;
861
+ readonly source: "vendor-stated";
862
+ readonly cite: string;
863
+ };
864
+ readonly bmc: {
865
+ readonly value: string;
866
+ readonly source: "vendor-stated";
867
+ readonly cite: string;
868
+ };
869
+ readonly profile: Fact<string>;
870
+ readonly coolantThrough: {
871
+ readonly value: boolean;
872
+ readonly source: "derived";
873
+ readonly note: string;
874
+ };
875
+ };
876
+ };
877
+ readonly 'harvey_endmill_027.csv': {
878
+ readonly id: "endmill-027";
879
+ readonly brand: "harvey";
880
+ readonly kind: "endmill";
881
+ readonly familyCode: "HT-Harvey-EndMill-027";
882
+ readonly rows: 20;
883
+ readonly columns: {
884
+ readonly DC: "CUTTER DIA.";
885
+ readonly SFDM: "SHANK DIA.";
886
+ readonly OAL: "OAL";
887
+ readonly LCF: "LOC";
888
+ readonly 'shoulder-length': "OVERALL REACH";
889
+ readonly NOF: "FLUTES";
890
+ };
891
+ readonly facts: {
892
+ readonly unit: {
893
+ readonly value: UnitSystem;
894
+ readonly source: "vendor-stated";
895
+ readonly cite: string;
896
+ };
897
+ readonly bmc: {
898
+ readonly value: string;
899
+ readonly source: "vendor-stated";
900
+ readonly cite: string;
901
+ };
902
+ readonly profile: Fact<string>;
903
+ readonly coolantThrough: {
904
+ readonly value: boolean;
905
+ readonly source: "derived";
906
+ readonly note: string;
907
+ };
908
+ };
909
+ };
910
+ readonly 'harvey_endmill_028.csv': {
911
+ readonly id: "endmill-028";
912
+ readonly brand: "harvey";
913
+ readonly kind: "endmill";
914
+ readonly familyCode: "HT-Harvey-EndMill-028";
915
+ readonly rows: 36;
916
+ readonly columns: {
917
+ readonly DC: "CUTTER DIAMETER";
918
+ readonly SFDM: "SHANK DIAMETER";
919
+ readonly OAL: "OVERALL LENGTH";
920
+ readonly LCF: "LENGTH OF CUT";
921
+ readonly NOF: "FLUTES";
922
+ };
923
+ readonly facts: {
924
+ readonly unit: {
925
+ readonly value: UnitSystem;
926
+ readonly source: "vendor-stated";
927
+ readonly cite: string;
928
+ };
929
+ readonly bmc: {
930
+ readonly value: string;
931
+ readonly source: "vendor-stated";
932
+ readonly cite: string;
933
+ };
934
+ readonly profile: Fact<string>;
935
+ readonly coolantThrough: {
936
+ readonly value: boolean;
937
+ readonly source: "derived";
938
+ readonly note: string;
939
+ };
940
+ };
941
+ };
942
+ readonly 'harvey_endmill_029.csv': {
943
+ readonly id: "endmill-029";
944
+ readonly brand: "harvey";
945
+ readonly kind: "endmill";
946
+ readonly familyCode: "HT-Harvey-EndMill-029";
947
+ readonly rows: 152;
948
+ readonly columns: {
949
+ readonly DC: "CUTTER DIAMETER";
950
+ readonly SFDM: "SHANK DIAMETER";
951
+ readonly OAL: "OVERALL LENGTH";
952
+ readonly LCF: "LENGTH OF CUT";
953
+ readonly NOF: "FLUTES";
954
+ };
955
+ readonly facts: {
956
+ readonly unit: {
957
+ readonly value: UnitSystem;
958
+ readonly source: "vendor-stated";
959
+ readonly cite: string;
960
+ };
961
+ readonly bmc: {
962
+ readonly value: string;
963
+ readonly source: "vendor-stated";
964
+ readonly cite: string;
965
+ };
966
+ readonly profile: Fact<string>;
967
+ readonly coolantThrough: {
968
+ readonly value: boolean;
969
+ readonly source: "derived";
970
+ readonly note: string;
971
+ };
972
+ };
973
+ };
974
+ readonly 'harvey_endmill_030.csv': {
975
+ readonly id: "endmill-030";
976
+ readonly brand: "harvey";
977
+ readonly kind: "endmill";
978
+ readonly familyCode: "HT-Harvey-EndMill-030";
979
+ readonly rows: 144;
980
+ readonly columns: {
981
+ readonly DC: "CUTTER DIAMETER";
982
+ readonly SFDM: "SHANK DIAMETER";
983
+ readonly OAL: "OVERALL LENGTH";
984
+ readonly LCF: "LENGTH OF CUT";
985
+ readonly NOF: "FLUTES";
986
+ };
987
+ readonly facts: {
988
+ readonly unit: {
989
+ readonly value: UnitSystem;
990
+ readonly source: "vendor-stated";
991
+ readonly cite: string;
992
+ };
993
+ readonly bmc: {
994
+ readonly value: string;
995
+ readonly source: "vendor-stated";
996
+ readonly cite: string;
997
+ };
998
+ readonly profile: Fact<string>;
999
+ readonly coolantThrough: {
1000
+ readonly value: boolean;
1001
+ readonly source: "derived";
1002
+ readonly note: string;
1003
+ };
1004
+ };
1005
+ };
1006
+ readonly 'harvey_endmill_031.csv': {
1007
+ readonly id: "endmill-031";
1008
+ readonly brand: "harvey";
1009
+ readonly kind: "endmill";
1010
+ readonly familyCode: "HT-Harvey-EndMill-031";
1011
+ readonly rows: 170;
1012
+ readonly columns: {
1013
+ readonly DC: "CUTTER DIA.";
1014
+ readonly SFDM: "SHANK DIA.";
1015
+ readonly OAL: "OAL";
1016
+ readonly LCF: "LOC";
1017
+ readonly NOF: "FLUTES";
1018
+ };
1019
+ readonly facts: {
1020
+ readonly unit: {
1021
+ readonly value: UnitSystem;
1022
+ readonly source: "vendor-stated";
1023
+ readonly cite: string;
1024
+ };
1025
+ readonly bmc: {
1026
+ readonly value: string;
1027
+ readonly source: "vendor-stated";
1028
+ readonly cite: string;
1029
+ };
1030
+ readonly profile: Fact<string>;
1031
+ readonly coolantThrough: {
1032
+ readonly value: boolean;
1033
+ readonly source: "derived";
1034
+ readonly note: string;
1035
+ };
1036
+ };
1037
+ };
1038
+ readonly 'harvey_endmill_032.csv': {
1039
+ readonly id: "endmill-032";
1040
+ readonly brand: "harvey";
1041
+ readonly kind: "endmill";
1042
+ readonly familyCode: "HT-Harvey-EndMill-032";
1043
+ readonly rows: 24;
1044
+ readonly columns: {
1045
+ readonly DC: "CUTTER DIA.";
1046
+ readonly SFDM: "SHANK DIA.";
1047
+ readonly OAL: "OAL";
1048
+ readonly LCF: "LOC";
1049
+ readonly NOF: "FLUTES";
1050
+ };
1051
+ readonly facts: {
1052
+ readonly unit: {
1053
+ readonly value: UnitSystem;
1054
+ readonly source: "vendor-stated";
1055
+ readonly cite: string;
1056
+ };
1057
+ readonly bmc: {
1058
+ readonly value: string;
1059
+ readonly source: "vendor-stated";
1060
+ readonly cite: string;
1061
+ };
1062
+ readonly profile: Fact<string>;
1063
+ readonly coolantThrough: {
1064
+ readonly value: true;
1065
+ readonly source: "vendor-stated";
1066
+ readonly cite: "the page's own productTitle, 'Miniature End Mills - Square - Coolant Through'";
1067
+ };
1068
+ };
1069
+ };
1070
+ readonly 'harvey_endmill_033.csv': {
1071
+ readonly id: "endmill-033";
1072
+ readonly brand: "harvey";
1073
+ readonly kind: "endmill";
1074
+ readonly familyCode: "HT-Harvey-EndMill-033";
1075
+ readonly rows: 122;
1076
+ readonly columns: {
1077
+ readonly DC: "CUTTER DIA.";
1078
+ readonly SFDM: "SHANK DIA.";
1079
+ readonly OAL: "OAL";
1080
+ readonly LCF: "LOC";
1081
+ readonly NOF: "FLUTES";
1082
+ };
1083
+ readonly facts: {
1084
+ readonly unit: {
1085
+ readonly value: UnitSystem;
1086
+ readonly source: "vendor-stated";
1087
+ readonly cite: string;
1088
+ };
1089
+ readonly bmc: {
1090
+ readonly value: string;
1091
+ readonly source: "vendor-stated";
1092
+ readonly cite: string;
1093
+ };
1094
+ readonly profile: Fact<string>;
1095
+ readonly coolantThrough: {
1096
+ readonly value: boolean;
1097
+ readonly source: "derived";
1098
+ readonly note: string;
1099
+ };
1100
+ };
1101
+ };
1102
+ readonly 'harvey_endmill_034.csv': {
1103
+ readonly id: "endmill-034";
1104
+ readonly brand: "harvey";
1105
+ readonly kind: "endmill";
1106
+ readonly familyCode: "HT-Harvey-EndMill-034";
1107
+ readonly rows: 154;
1108
+ readonly columns: {
1109
+ readonly DC: "CUTTER DIA.";
1110
+ readonly SFDM: "SHANK DIA.";
1111
+ readonly OAL: "OAL";
1112
+ readonly LCF: "LENGTH OF CUT";
1113
+ readonly RE: "CORNER RADIUS";
1114
+ readonly NOF: "FLUTES";
1115
+ };
1116
+ readonly facts: {
1117
+ readonly unit: {
1118
+ readonly value: UnitSystem;
1119
+ readonly source: "vendor-stated";
1120
+ readonly cite: string;
1121
+ };
1122
+ readonly bmc: {
1123
+ readonly value: string;
1124
+ readonly source: "vendor-stated";
1125
+ readonly cite: string;
1126
+ };
1127
+ readonly profile: Fact<string>;
1128
+ readonly coolantThrough: {
1129
+ readonly value: boolean;
1130
+ readonly source: "derived";
1131
+ readonly note: string;
1132
+ };
1133
+ };
1134
+ };
1135
+ readonly 'harvey_endmill_035.csv': {
1136
+ readonly id: "endmill-035";
1137
+ readonly brand: "harvey";
1138
+ readonly kind: "endmill";
1139
+ readonly familyCode: "HT-Harvey-EndMill-035";
1140
+ readonly rows: 40;
1141
+ readonly columns: {
1142
+ readonly DC: "CUTTER DIAMETER";
1143
+ readonly SFDM: "SHANK DIAMETER";
1144
+ readonly OAL: "OVERALL LENGTH";
1145
+ readonly LCF: "LENGTH OF CUT";
1146
+ readonly RE: "CORNER RADIUS";
1147
+ readonly NOF: "FLUTES";
1148
+ };
1149
+ readonly facts: {
1150
+ readonly unit: {
1151
+ readonly value: UnitSystem;
1152
+ readonly source: "vendor-stated";
1153
+ readonly cite: string;
1154
+ };
1155
+ readonly bmc: {
1156
+ readonly value: string;
1157
+ readonly source: "vendor-stated";
1158
+ readonly cite: string;
1159
+ };
1160
+ readonly profile: Fact<string>;
1161
+ readonly coolantThrough: {
1162
+ readonly value: boolean;
1163
+ readonly source: "derived";
1164
+ readonly note: string;
1165
+ };
1166
+ };
1167
+ };
1168
+ readonly 'harvey_endmill_036.csv': {
1169
+ readonly id: "endmill-036";
1170
+ readonly brand: "harvey";
1171
+ readonly kind: "endmill";
1172
+ readonly familyCode: "HT-Harvey-EndMill-036";
1173
+ readonly rows: 32;
1174
+ readonly columns: {
1175
+ readonly DC: "CUTTER DIA.";
1176
+ readonly SFDM: "SHANK DIA.";
1177
+ readonly OAL: "OAL";
1178
+ readonly LCF: "LENGTH OF CUT";
1179
+ readonly NOF: "FLUTES";
1180
+ };
1181
+ readonly facts: {
1182
+ readonly unit: {
1183
+ readonly value: UnitSystem;
1184
+ readonly source: "vendor-stated";
1185
+ readonly cite: string;
1186
+ };
1187
+ readonly bmc: {
1188
+ readonly value: string;
1189
+ readonly source: "vendor-stated";
1190
+ readonly cite: string;
1191
+ };
1192
+ readonly profile: Fact<string>;
1193
+ readonly coolantThrough: {
1194
+ readonly value: boolean;
1195
+ readonly source: "derived";
1196
+ readonly note: string;
1197
+ };
1198
+ };
1199
+ };
1200
+ readonly 'harvey_endmill_037.csv': {
1201
+ readonly id: "endmill-037";
1202
+ readonly brand: "harvey";
1203
+ readonly kind: "endmill";
1204
+ readonly familyCode: "HT-Harvey-EndMill-037";
1205
+ readonly rows: 32;
1206
+ readonly columns: {
1207
+ readonly DC: "CUTTER DIAMETER";
1208
+ readonly SFDM: "SHANK DIAMETER";
1209
+ readonly OAL: "OVERALL LENGTH";
1210
+ readonly LCF: "LENGTH OF CUT";
1211
+ readonly 'shoulder-length': "OVERALL REACH";
1212
+ readonly NOF: "FLUTES";
1213
+ };
1214
+ readonly facts: {
1215
+ readonly unit: {
1216
+ readonly value: UnitSystem;
1217
+ readonly source: "vendor-stated";
1218
+ readonly cite: string;
1219
+ };
1220
+ readonly bmc: {
1221
+ readonly value: string;
1222
+ readonly source: "vendor-stated";
1223
+ readonly cite: string;
1224
+ };
1225
+ readonly profile: Fact<string>;
1226
+ readonly coolantThrough: {
1227
+ readonly value: boolean;
1228
+ readonly source: "derived";
1229
+ readonly note: string;
1230
+ };
1231
+ };
1232
+ };
1233
+ readonly 'harvey_endmill_038.csv': {
1234
+ readonly id: "endmill-038";
1235
+ readonly brand: "harvey";
1236
+ readonly kind: "endmill";
1237
+ readonly familyCode: "HT-Harvey-EndMill-038";
1238
+ readonly rows: 64;
1239
+ readonly columns: {
1240
+ readonly DC: "CUTTER DIA.";
1241
+ readonly SFDM: "SHANK DIA.";
1242
+ readonly OAL: "OAL";
1243
+ readonly LCF: "LENGTH OF CUT";
1244
+ readonly RE: "CORNER RADIUS";
1245
+ readonly NOF: "FLUTES";
1246
+ };
1247
+ readonly facts: {
1248
+ readonly unit: {
1249
+ readonly value: UnitSystem;
1250
+ readonly source: "vendor-stated";
1251
+ readonly cite: string;
1252
+ };
1253
+ readonly bmc: {
1254
+ readonly value: string;
1255
+ readonly source: "vendor-stated";
1256
+ readonly cite: string;
1257
+ };
1258
+ readonly profile: Fact<string>;
1259
+ readonly coolantThrough: {
1260
+ readonly value: boolean;
1261
+ readonly source: "derived";
1262
+ readonly note: string;
1263
+ };
1264
+ };
1265
+ };
1266
+ readonly 'harvey_endmill_039.csv': {
1267
+ readonly id: "endmill-039";
1268
+ readonly brand: "harvey";
1269
+ readonly kind: "endmill";
1270
+ readonly familyCode: "HT-Harvey-EndMill-039";
1271
+ readonly rows: 44;
1272
+ readonly columns: {
1273
+ readonly DC: "CUTTER DIA.";
1274
+ readonly SFDM: "SHANK DIA.";
1275
+ readonly OAL: "OAL";
1276
+ readonly LCF: "LENGTH OF CUT";
1277
+ readonly NOF: "FLUTES";
1278
+ };
1279
+ readonly facts: {
1280
+ readonly unit: {
1281
+ readonly value: UnitSystem;
1282
+ readonly source: "vendor-stated";
1283
+ readonly cite: string;
1284
+ };
1285
+ readonly bmc: {
1286
+ readonly value: string;
1287
+ readonly source: "vendor-stated";
1288
+ readonly cite: string;
1289
+ };
1290
+ readonly profile: Fact<string>;
1291
+ readonly coolantThrough: {
1292
+ readonly value: boolean;
1293
+ readonly source: "derived";
1294
+ readonly note: string;
1295
+ };
1296
+ };
1297
+ };
1298
+ readonly 'harvey_endmill_041.csv': {
1299
+ readonly id: "endmill-041";
1300
+ readonly brand: "harvey";
1301
+ readonly kind: "endmill";
1302
+ readonly familyCode: "HT-Harvey-EndMill-041";
1303
+ readonly rows: 32;
1304
+ readonly columns: {
1305
+ readonly DC: "CUTTER DIA.";
1306
+ readonly SFDM: "SHANK DIA.";
1307
+ readonly OAL: "OAL";
1308
+ readonly LCF: "LENGTH OF CUT";
1309
+ readonly 'shoulder-length': "OVERALL REACH";
1310
+ readonly NOF: "FLUTES";
1311
+ };
1312
+ readonly facts: {
1313
+ readonly unit: {
1314
+ readonly value: UnitSystem;
1315
+ readonly source: "vendor-stated";
1316
+ readonly cite: string;
1317
+ };
1318
+ readonly bmc: {
1319
+ readonly value: string;
1320
+ readonly source: "vendor-stated";
1321
+ readonly cite: string;
1322
+ };
1323
+ readonly profile: Fact<string>;
1324
+ readonly coolantThrough: {
1325
+ readonly value: boolean;
1326
+ readonly source: "derived";
1327
+ readonly note: string;
1328
+ };
1329
+ };
1330
+ };
1331
+ readonly 'harvey_endmill_042.csv': {
1332
+ readonly id: "endmill-042";
1333
+ readonly brand: "harvey";
1334
+ readonly kind: "endmill";
1335
+ readonly familyCode: "HT-Harvey-EndMill-042";
1336
+ readonly rows: 24;
1337
+ readonly columns: {
1338
+ readonly DC: "CUTTER DIA.";
1339
+ readonly SFDM: "SHANK DIA.";
1340
+ readonly OAL: "OAL";
1341
+ readonly LCF: "LENGTH OF CUT";
1342
+ readonly RE: "CORNER RADIUS";
1343
+ readonly NOF: "FLUTES";
1344
+ };
1345
+ readonly facts: {
1346
+ readonly unit: {
1347
+ readonly value: UnitSystem;
1348
+ readonly source: "vendor-stated";
1349
+ readonly cite: string;
1350
+ };
1351
+ readonly bmc: {
1352
+ readonly value: string;
1353
+ readonly source: "vendor-stated";
1354
+ readonly cite: string;
1355
+ };
1356
+ readonly profile: Fact<string>;
1357
+ readonly coolantThrough: {
1358
+ readonly value: boolean;
1359
+ readonly source: "derived";
1360
+ readonly note: string;
1361
+ };
1362
+ };
1363
+ };
1364
+ readonly 'harvey_keyseat_001.csv': {
1365
+ readonly id: "keyseat-001";
1366
+ readonly brand: "harvey";
1367
+ readonly kind: "endmill";
1368
+ readonly familyCode: "HT-Harvey-Keyseat-001";
1369
+ readonly rows: 345;
1370
+ readonly columns: {
1371
+ readonly DC: "CUTTER DIA.";
1372
+ readonly SFDM: "SHANK DIA.";
1373
+ readonly OAL: "OAL";
1374
+ readonly LCF: "CUTTER WIDTH";
1375
+ readonly RE: "CORNER RADIUS";
1376
+ readonly 'shoulder-length': "NECK LENGTH";
1377
+ readonly 'shoulder-diameter': "NECK DIA.";
1378
+ readonly NOF: "FLUTES";
1379
+ };
1380
+ readonly facts: {
1381
+ readonly unit: {
1382
+ readonly value: UnitSystem;
1383
+ readonly source: "vendor-stated";
1384
+ readonly cite: string;
1385
+ };
1386
+ readonly bmc: {
1387
+ readonly value: string;
1388
+ readonly source: "vendor-stated";
1389
+ readonly cite: string;
1390
+ };
1391
+ readonly profile: Fact<string>;
1392
+ readonly coolantThrough: {
1393
+ readonly value: boolean;
1394
+ readonly source: "derived";
1395
+ readonly note: string;
1396
+ };
1397
+ };
1398
+ };
1399
+ readonly 'harvey_keyseat_002.csv': {
1400
+ readonly id: "keyseat-002";
1401
+ readonly brand: "harvey";
1402
+ readonly kind: "endmill";
1403
+ readonly familyCode: "HT-Harvey-Keyseat-002";
1404
+ readonly rows: 114;
1405
+ readonly columns: {
1406
+ readonly DC: "CUTTER DIA.";
1407
+ readonly SFDM: "SHANK DIA.";
1408
+ readonly OAL: "OAL";
1409
+ readonly LCF: "CUTTER WIDTH";
1410
+ readonly RE: "CORNER RADIUS";
1411
+ readonly NOF: "FLUTES";
1412
+ };
1413
+ readonly facts: {
1414
+ readonly unit: {
1415
+ readonly value: UnitSystem;
1416
+ readonly source: "vendor-stated";
1417
+ readonly cite: string;
1418
+ };
1419
+ readonly bmc: {
1420
+ readonly value: string;
1421
+ readonly source: "vendor-stated";
1422
+ readonly cite: string;
1423
+ };
1424
+ readonly profile: Fact<string>;
1425
+ readonly coolantThrough: {
1426
+ readonly value: boolean;
1427
+ readonly source: "derived";
1428
+ readonly note: string;
1429
+ };
1430
+ };
1431
+ };
1432
+ readonly 'harvey_keyseat_003.csv': {
1433
+ readonly id: "keyseat-003";
1434
+ readonly brand: "harvey";
1435
+ readonly kind: "endmill";
1436
+ readonly familyCode: "HT-Harvey-Keyseat-003";
1437
+ readonly rows: 174;
1438
+ readonly columns: {
1439
+ readonly DC: "CUTTER DIA.";
1440
+ readonly SFDM: "SHANK DIA.";
1441
+ readonly OAL: "OAL";
1442
+ readonly LCF: "CUTTER WIDTH";
1443
+ readonly RE: "RADIUS";
1444
+ readonly 'shoulder-length': "NECK LENGTH";
1445
+ readonly 'shoulder-diameter': "NECK DIA.";
1446
+ readonly NOF: "FLUTES";
1447
+ };
1448
+ readonly facts: {
1449
+ readonly unit: {
1450
+ readonly value: UnitSystem;
1451
+ readonly source: "vendor-stated";
1452
+ readonly cite: string;
1453
+ };
1454
+ readonly bmc: {
1455
+ readonly value: string;
1456
+ readonly source: "vendor-stated";
1457
+ readonly cite: string;
1458
+ };
1459
+ readonly profile: Fact<string>;
1460
+ readonly coolantThrough: {
1461
+ readonly value: boolean;
1462
+ readonly source: "derived";
1463
+ readonly note: string;
1464
+ };
1465
+ };
1466
+ };
1467
+ readonly 'harvey_keyseat_004.csv': {
1468
+ readonly id: "keyseat-004";
1469
+ readonly brand: "harvey";
1470
+ readonly kind: "endmill";
1471
+ readonly familyCode: "HT-Harvey-Keyseat-004";
1472
+ readonly rows: 74;
1473
+ readonly columns: {
1474
+ readonly DC: "CUTTER DIA.";
1475
+ readonly SFDM: "SHANK DIA.";
1476
+ readonly OAL: "OAL";
1477
+ readonly LCF: "CUTTER WIDTH";
1478
+ readonly RE: "RADIUS";
1479
+ readonly NOF: "FLUTES";
1480
+ };
1481
+ readonly facts: {
1482
+ readonly unit: {
1483
+ readonly value: UnitSystem;
1484
+ readonly source: "vendor-stated";
1485
+ readonly cite: string;
1486
+ };
1487
+ readonly bmc: {
1488
+ readonly value: string;
1489
+ readonly source: "vendor-stated";
1490
+ readonly cite: string;
1491
+ };
1492
+ readonly profile: Fact<string>;
1493
+ readonly coolantThrough: {
1494
+ readonly value: boolean;
1495
+ readonly source: "derived";
1496
+ readonly note: string;
1497
+ };
1498
+ };
1499
+ };
1500
+ readonly 'harvey_keyseat_005.csv': {
1501
+ readonly id: "keyseat-005";
1502
+ readonly brand: "harvey";
1503
+ readonly kind: "endmill";
1504
+ readonly familyCode: "HT-Harvey-Keyseat-005";
1505
+ readonly rows: 26;
1506
+ readonly columns: {
1507
+ readonly DC: "CUTTER DIA.";
1508
+ readonly SFDM: "SHANK DIA.";
1509
+ readonly OAL: "OAL";
1510
+ readonly LCF: "CUTTER WIDTH";
1511
+ readonly 'shoulder-length': "NECK LENGTH";
1512
+ readonly 'shoulder-diameter': "NECK DIA.";
1513
+ readonly NOF: "FLUTES";
1514
+ };
1515
+ readonly facts: {
1516
+ readonly unit: {
1517
+ readonly value: UnitSystem;
1518
+ readonly source: "vendor-stated";
1519
+ readonly cite: string;
1520
+ };
1521
+ readonly bmc: {
1522
+ readonly value: string;
1523
+ readonly source: "vendor-stated";
1524
+ readonly cite: string;
1525
+ };
1526
+ readonly profile: {
1527
+ readonly value: "Square";
1528
+ readonly source: "assumed";
1529
+ readonly note: string;
1530
+ readonly checked: "2026-08-29";
1531
+ readonly by: "JG";
1532
+ };
1533
+ readonly coolantThrough: {
1534
+ readonly value: boolean;
1535
+ readonly source: "derived";
1536
+ readonly note: string;
1537
+ };
1538
+ };
1539
+ };
1540
+ readonly 'harvey_keyseat_006.csv': {
1541
+ readonly id: "keyseat-006";
1542
+ readonly brand: "harvey";
1543
+ readonly kind: "endmill";
1544
+ readonly familyCode: "HT-Harvey-Keyseat-006";
1545
+ readonly rows: 926;
1546
+ readonly columns: {
1547
+ readonly DC: "CUTTER DIA.";
1548
+ readonly SFDM: "SHANK DIA.";
1549
+ readonly OAL: "OAL";
1550
+ readonly LCF: "CUTTER WIDTH";
1551
+ readonly 'shoulder-length': "NECK LENGTH";
1552
+ readonly 'shoulder-diameter': "NECK DIA.";
1553
+ readonly NOF: "FLUTES";
1554
+ };
1555
+ readonly facts: {
1556
+ readonly unit: {
1557
+ readonly value: UnitSystem;
1558
+ readonly source: "vendor-stated";
1559
+ readonly cite: string;
1560
+ };
1561
+ readonly bmc: {
1562
+ readonly value: string;
1563
+ readonly source: "vendor-stated";
1564
+ readonly cite: string;
1565
+ };
1566
+ readonly profile: Fact<string>;
1567
+ readonly coolantThrough: {
1568
+ readonly value: boolean;
1569
+ readonly source: "derived";
1570
+ readonly note: string;
1571
+ };
1572
+ };
1573
+ };
1574
+ readonly 'harvey_keyseat_007.csv': {
1575
+ readonly id: "keyseat-007";
1576
+ readonly brand: "harvey";
1577
+ readonly kind: "endmill";
1578
+ readonly familyCode: "HT-Harvey-Keyseat-007";
1579
+ readonly rows: 49;
1580
+ readonly columns: {
1581
+ readonly DC: "CUTTER DIA.";
1582
+ readonly SFDM: "SHANK DIA.";
1583
+ readonly OAL: "OAL";
1584
+ readonly LCF: "CUTTER WIDTH";
1585
+ readonly 'shoulder-length': "NECK LENGTH";
1586
+ readonly 'shoulder-diameter': "NECK DIA.";
1587
+ readonly NOF: "FLUTES";
1588
+ };
1589
+ readonly facts: {
1590
+ readonly unit: {
1591
+ readonly value: UnitSystem;
1592
+ readonly source: "vendor-stated";
1593
+ readonly cite: string;
1594
+ };
1595
+ readonly bmc: {
1596
+ readonly value: string;
1597
+ readonly source: "vendor-stated";
1598
+ readonly cite: string;
1599
+ };
1600
+ readonly profile: Fact<string>;
1601
+ readonly coolantThrough: {
1602
+ readonly value: boolean;
1603
+ readonly source: "derived";
1604
+ readonly note: string;
1605
+ };
1606
+ };
1607
+ };
1608
+ readonly 'harvey_keyseat_008.csv': {
1609
+ readonly id: "keyseat-008";
1610
+ readonly brand: "harvey";
1611
+ readonly kind: "endmill";
1612
+ readonly familyCode: "HT-Harvey-Keyseat-008";
1613
+ readonly rows: 108;
1614
+ readonly columns: {
1615
+ readonly DC: "CUTTER DIA.";
1616
+ readonly SFDM: "SHANK DIA.";
1617
+ readonly OAL: "OAL";
1618
+ readonly LCF: "CUTTER WIDTH";
1619
+ readonly 'shoulder-length': "NECK LENGTH";
1620
+ readonly 'shoulder-diameter': "NECK DIA.";
1621
+ readonly NOF: "FLUTES";
1622
+ };
1623
+ readonly facts: {
1624
+ readonly unit: {
1625
+ readonly value: UnitSystem;
1626
+ readonly source: "vendor-stated";
1627
+ readonly cite: string;
1628
+ };
1629
+ readonly bmc: {
1630
+ readonly value: string;
1631
+ readonly source: "vendor-stated";
1632
+ readonly cite: string;
1633
+ };
1634
+ readonly profile: Fact<string>;
1635
+ readonly coolantThrough: {
1636
+ readonly value: boolean;
1637
+ readonly source: "derived";
1638
+ readonly note: string;
1639
+ };
1640
+ };
1641
+ };
1642
+ readonly 'harvey_keyseat_009.csv': {
1643
+ readonly id: "keyseat-009";
1644
+ readonly brand: "harvey";
1645
+ readonly kind: "endmill";
1646
+ readonly familyCode: "HT-Harvey-Keyseat-009";
1647
+ readonly rows: 220;
1648
+ readonly columns: {
1649
+ readonly DC: "CUTTER DIA.";
1650
+ readonly SFDM: "SHANK DIA.";
1651
+ readonly OAL: "OAL";
1652
+ readonly LCF: "CUTTER WIDTH";
1653
+ readonly NOF: "FLUTES";
1654
+ };
1655
+ readonly facts: {
1656
+ readonly unit: {
1657
+ readonly value: UnitSystem;
1658
+ readonly source: "vendor-stated";
1659
+ readonly cite: string;
1660
+ };
1661
+ readonly bmc: {
1662
+ readonly value: string;
1663
+ readonly source: "vendor-stated";
1664
+ readonly cite: string;
1665
+ };
1666
+ readonly profile: Fact<string>;
1667
+ readonly coolantThrough: {
1668
+ readonly value: boolean;
1669
+ readonly source: "derived";
1670
+ readonly note: string;
1671
+ };
1672
+ };
1673
+ };
1674
+ readonly 'harvey_keyseat_010.csv': {
1675
+ readonly id: "keyseat-010";
1676
+ readonly brand: "harvey";
1677
+ readonly kind: "endmill";
1678
+ readonly familyCode: "HT-Harvey-Keyseat-010";
1679
+ readonly rows: 101;
1680
+ readonly columns: {
1681
+ readonly DC: "CUTTER DIA.";
1682
+ readonly SFDM: "SHANK DIA.";
1683
+ readonly OAL: "OAL";
1684
+ readonly LCF: "CUTTER WIDTH";
1685
+ readonly RE: "CORNER RADIUS";
1686
+ readonly 'shoulder-length': "NECK LENGTH";
1687
+ readonly 'shoulder-diameter': "NECK DIA.";
1688
+ readonly NOF: "FLUTES";
1689
+ };
1690
+ readonly facts: {
1691
+ readonly unit: {
1692
+ readonly value: UnitSystem;
1693
+ readonly source: "vendor-stated";
1694
+ readonly cite: string;
1695
+ };
1696
+ readonly bmc: {
1697
+ readonly value: string;
1698
+ readonly source: "vendor-stated";
1699
+ readonly cite: string;
1700
+ };
1701
+ readonly profile: Fact<string>;
1702
+ readonly coolantThrough: {
1703
+ readonly value: boolean;
1704
+ readonly source: "derived";
1705
+ readonly note: string;
1706
+ };
1707
+ };
1708
+ };
1709
+ readonly 'harvey_keyseat_011.csv': {
1710
+ readonly id: "keyseat-011";
1711
+ readonly brand: "harvey";
1712
+ readonly kind: "endmill";
1713
+ readonly familyCode: "HT-Harvey-Keyseat-011";
1714
+ readonly rows: 88;
1715
+ readonly columns: {
1716
+ readonly DC: "CUTTER DIA.";
1717
+ readonly SFDM: "SHANK DIA.";
1718
+ readonly OAL: "OAL";
1719
+ readonly LCF: "CUTTER WIDTH";
1720
+ readonly 'shoulder-length': "NECK LENGTH";
1721
+ readonly 'shoulder-diameter': "NECK DIA.";
1722
+ readonly NOF: "FLUTES";
1723
+ };
1724
+ readonly facts: {
1725
+ readonly unit: {
1726
+ readonly value: UnitSystem;
1727
+ readonly source: "vendor-stated";
1728
+ readonly cite: string;
1729
+ };
1730
+ readonly bmc: {
1731
+ readonly value: string;
1732
+ readonly source: "vendor-stated";
1733
+ readonly cite: string;
1734
+ };
1735
+ readonly profile: Fact<string>;
1736
+ readonly coolantThrough: {
1737
+ readonly value: boolean;
1738
+ readonly source: "derived";
1739
+ readonly note: string;
1740
+ };
1741
+ };
1742
+ };
1743
+ readonly 'harvey_keyseat_012.csv': {
1744
+ readonly id: "keyseat-012";
1745
+ readonly brand: "harvey";
1746
+ readonly kind: "endmill";
1747
+ readonly familyCode: "HT-Harvey-Keyseat-012";
1748
+ readonly rows: 36;
1749
+ readonly columns: {
1750
+ readonly DC: "CUTTER DIA.";
1751
+ readonly SFDM: "SHANK DIA.";
1752
+ readonly OAL: "OAL";
1753
+ readonly LCF: "CUTTER WIDTH";
1754
+ readonly NOF: "FLUTES";
1755
+ };
1756
+ readonly facts: {
1757
+ readonly unit: {
1758
+ readonly value: UnitSystem;
1759
+ readonly source: "vendor-stated";
1760
+ readonly cite: string;
1761
+ };
1762
+ readonly bmc: {
1763
+ readonly value: string;
1764
+ readonly source: "vendor-stated";
1765
+ readonly cite: string;
1766
+ };
1767
+ readonly profile: Fact<string>;
1768
+ readonly coolantThrough: {
1769
+ readonly value: boolean;
1770
+ readonly source: "derived";
1771
+ readonly note: string;
1772
+ };
1773
+ };
1774
+ };
1775
+ };
1776
+ /**
1777
+ * The product page each family is scraped from, keyed by its CSV name.
1778
+ *
1779
+ * Paths rather than URLs: `vendors/harvey/scrape.ts` owns the host, so a family
1780
+ * config cannot put a scrape on a different one.
1781
+ */
1782
+ export declare const PRODUCT_PAGES: Readonly<Record<string, string>>;