woodml-parser 1.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 (82) hide show
  1. package/README.md +181 -0
  2. package/dist/cli.d.ts +7 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +554 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/cost.d.ts +94 -0
  7. package/dist/cost.d.ts.map +1 -0
  8. package/dist/cost.js +340 -0
  9. package/dist/cost.js.map +1 -0
  10. package/dist/cost.test.d.ts +2 -0
  11. package/dist/cost.test.d.ts.map +1 -0
  12. package/dist/cost.test.js +241 -0
  13. package/dist/cost.test.js.map +1 -0
  14. package/dist/example.d.ts +6 -0
  15. package/dist/example.d.ts.map +1 -0
  16. package/dist/example.js +136 -0
  17. package/dist/example.js.map +1 -0
  18. package/dist/formulas.d.ts +23 -0
  19. package/dist/formulas.d.ts.map +1 -0
  20. package/dist/formulas.js +442 -0
  21. package/dist/formulas.js.map +1 -0
  22. package/dist/formulas.test.d.ts +5 -0
  23. package/dist/formulas.test.d.ts.map +1 -0
  24. package/dist/formulas.test.js +360 -0
  25. package/dist/formulas.test.js.map +1 -0
  26. package/dist/index.d.ts +23 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +93 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/integration.test.d.ts +6 -0
  31. package/dist/integration.test.d.ts.map +1 -0
  32. package/dist/integration.test.js +271 -0
  33. package/dist/integration.test.js.map +1 -0
  34. package/dist/optimizer.d.ts +119 -0
  35. package/dist/optimizer.d.ts.map +1 -0
  36. package/dist/optimizer.js +423 -0
  37. package/dist/optimizer.js.map +1 -0
  38. package/dist/optimizer.test.d.ts +2 -0
  39. package/dist/optimizer.test.d.ts.map +1 -0
  40. package/dist/optimizer.test.js +225 -0
  41. package/dist/optimizer.test.js.map +1 -0
  42. package/dist/parser.d.ts +59 -0
  43. package/dist/parser.d.ts.map +1 -0
  44. package/dist/parser.js +305 -0
  45. package/dist/parser.js.map +1 -0
  46. package/dist/parser.test.d.ts +5 -0
  47. package/dist/parser.test.d.ts.map +1 -0
  48. package/dist/parser.test.js +486 -0
  49. package/dist/parser.test.js.map +1 -0
  50. package/dist/pdf.d.ts +36 -0
  51. package/dist/pdf.d.ts.map +1 -0
  52. package/dist/pdf.js +316 -0
  53. package/dist/pdf.js.map +1 -0
  54. package/dist/svg.d.ts +73 -0
  55. package/dist/svg.d.ts.map +1 -0
  56. package/dist/svg.js +613 -0
  57. package/dist/svg.js.map +1 -0
  58. package/dist/svg.test.d.ts +5 -0
  59. package/dist/svg.test.d.ts.map +1 -0
  60. package/dist/svg.test.js +333 -0
  61. package/dist/svg.test.js.map +1 -0
  62. package/dist/templates.d.ts +126 -0
  63. package/dist/templates.d.ts.map +1 -0
  64. package/dist/templates.js +448 -0
  65. package/dist/templates.js.map +1 -0
  66. package/dist/templates.test.d.ts +5 -0
  67. package/dist/templates.test.d.ts.map +1 -0
  68. package/dist/templates.test.js +630 -0
  69. package/dist/templates.test.js.map +1 -0
  70. package/dist/types.d.ts +250 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +7 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/units.d.ts +53 -0
  75. package/dist/units.d.ts.map +1 -0
  76. package/dist/units.js +359 -0
  77. package/dist/units.js.map +1 -0
  78. package/dist/units.test.d.ts +5 -0
  79. package/dist/units.test.d.ts.map +1 -0
  80. package/dist/units.test.js +364 -0
  81. package/dist/units.test.js.map +1 -0
  82. package/package.json +46 -0
package/dist/cost.js ADDED
@@ -0,0 +1,340 @@
1
+ "use strict";
2
+ /**
3
+ * Cost estimation for WoodML projects
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_HARDWARE_PRICES = exports.DEFAULT_LUMBER_PRICES = void 0;
7
+ exports.estimateCost = estimateCost;
8
+ exports.formatCostEstimate = formatCostEstimate;
9
+ const units_1 = require("./units");
10
+ /**
11
+ * Default lumber prices (USD per board foot)
12
+ * These are approximate retail prices and should be customized
13
+ */
14
+ exports.DEFAULT_LUMBER_PRICES = {
15
+ // Softwoods
16
+ pine: 3.5,
17
+ spruce: 3.0,
18
+ fir: 3.5,
19
+ cedar: 6.0,
20
+ redwood: 8.0,
21
+ // Domestic hardwoods
22
+ oak: 6.0,
23
+ 'red oak': 6.0,
24
+ 'white oak': 8.0,
25
+ maple: 7.0,
26
+ 'hard maple': 8.0,
27
+ 'soft maple': 5.5,
28
+ cherry: 9.0,
29
+ walnut: 12.0,
30
+ ash: 5.5,
31
+ poplar: 4.0,
32
+ birch: 6.0,
33
+ hickory: 7.0,
34
+ beech: 6.0,
35
+ alder: 5.0,
36
+ // Exotic hardwoods
37
+ mahogany: 14.0,
38
+ teak: 25.0,
39
+ purpleheart: 15.0,
40
+ padauk: 12.0,
41
+ wenge: 18.0,
42
+ zebrawood: 16.0,
43
+ bubinga: 20.0,
44
+ ebony: 80.0,
45
+ rosewood: 50.0,
46
+ // Sheet goods (per square foot for 3/4")
47
+ plywood: 2.5,
48
+ 'baltic birch': 3.5,
49
+ mdf: 1.5,
50
+ particleboard: 1.0,
51
+ melamine: 2.0,
52
+ // Default for unknown materials
53
+ default: 6.0,
54
+ };
55
+ exports.DEFAULT_HARDWARE_PRICES = {
56
+ screw: {
57
+ '#6': 0.03,
58
+ '#8': 0.04,
59
+ '#10': 0.05,
60
+ default: 0.04,
61
+ },
62
+ bolt: {
63
+ '1/4"': 0.15,
64
+ '5/16"': 0.20,
65
+ '3/8"': 0.25,
66
+ '1/2"': 0.35,
67
+ default: 0.25,
68
+ },
69
+ nut: {
70
+ '1/4"': 0.05,
71
+ '5/16"': 0.06,
72
+ '3/8"': 0.08,
73
+ '1/2"': 0.10,
74
+ default: 0.07,
75
+ },
76
+ washer: {
77
+ '1/4"': 0.03,
78
+ '5/16"': 0.04,
79
+ '3/8"': 0.05,
80
+ '1/2"': 0.06,
81
+ default: 0.04,
82
+ },
83
+ hinge: 3.0,
84
+ drawer_slide: 15.0,
85
+ knob: 2.5,
86
+ pull: 4.0,
87
+ shelf_pin: 0.25,
88
+ cam_lock: 0.50,
89
+ dowel: 0.10,
90
+ biscuit: 0.05,
91
+ pocket_screw: 0.08,
92
+ figure_8: 0.75,
93
+ tabletop_fastener: 0.50,
94
+ };
95
+ /**
96
+ * Calculate board feet for a part
97
+ */
98
+ function calculateBoardFeet(part) {
99
+ const length = (0, units_1.toInches)(part.dimensions.length);
100
+ const width = (0, units_1.toInches)(part.dimensions.width);
101
+ const thickness = (0, units_1.toInches)(part.dimensions.thickness);
102
+ // Board feet = (L x W x T) / 144
103
+ return (length * width * thickness) / 144;
104
+ }
105
+ /**
106
+ * Calculate square feet for a part (for sheet goods and finishing)
107
+ */
108
+ function calculateSquareFeet(part) {
109
+ const length = (0, units_1.toInches)(part.dimensions.length);
110
+ const width = (0, units_1.toInches)(part.dimensions.width);
111
+ return (length * width) / 144;
112
+ }
113
+ /**
114
+ * Check if material is sheet goods
115
+ */
116
+ function isSheetGood(material) {
117
+ const sheetGoods = ['plywood', 'mdf', 'particleboard', 'melamine', 'baltic birch', 'osb'];
118
+ return sheetGoods.some((sg) => material.toLowerCase().includes(sg));
119
+ }
120
+ /**
121
+ * Get lumber price for a material
122
+ */
123
+ function getLumberPrice(material, prices) {
124
+ const normalized = material.toLowerCase().trim();
125
+ // Direct match
126
+ if (prices[normalized] !== undefined) {
127
+ return prices[normalized];
128
+ }
129
+ // Partial match
130
+ for (const [key, price] of Object.entries(prices)) {
131
+ if (normalized.includes(key) || key.includes(normalized)) {
132
+ return price;
133
+ }
134
+ }
135
+ return prices.default || exports.DEFAULT_LUMBER_PRICES.default;
136
+ }
137
+ /**
138
+ * Estimate project cost
139
+ */
140
+ function estimateCost(doc, options = {}) {
141
+ const lumberPrices = { ...exports.DEFAULT_LUMBER_PRICES, ...options.lumberPrices };
142
+ const hardwarePrices = { ...exports.DEFAULT_HARDWARE_PRICES, ...options.hardwarePrices };
143
+ const wastePercentage = options.wastePercentage ?? 0.15;
144
+ const laborRate = options.laborRate ?? 25;
145
+ const laborHoursPerBF = options.laborHoursPerBoardFoot ?? 0.5;
146
+ const includeLabor = options.includeLabor ?? false;
147
+ // Group parts by material
148
+ const materialGroups = new Map();
149
+ let totalBoardFeet = 0;
150
+ let totalSquareFeet = 0;
151
+ for (const part of doc.resolvedParts) {
152
+ const material = part.material || 'default';
153
+ const quantity = part.quantity || 1;
154
+ const bf = calculateBoardFeet(part) * quantity;
155
+ const sf = calculateSquareFeet(part) * quantity;
156
+ totalBoardFeet += bf;
157
+ totalSquareFeet += sf;
158
+ if (!materialGroups.has(material)) {
159
+ materialGroups.set(material, { parts: [], boardFeet: 0 });
160
+ }
161
+ const group = materialGroups.get(material);
162
+ group.parts.push(part);
163
+ group.boardFeet += bf;
164
+ }
165
+ // Calculate lumber costs
166
+ const lumberItems = [];
167
+ let lumberSubtotal = 0;
168
+ for (const [material, group] of materialGroups) {
169
+ const pricePerBF = getLumberPrice(material, lumberPrices);
170
+ const boardFeetWithWaste = group.boardFeet * (1 + wastePercentage);
171
+ const cost = boardFeetWithWaste * pricePerBF;
172
+ lumberItems.push({
173
+ material,
174
+ boardFeet: group.boardFeet,
175
+ pricePerBF,
176
+ cost,
177
+ parts: group.parts.map((p) => p.name || p.id),
178
+ });
179
+ lumberSubtotal += cost;
180
+ }
181
+ // Calculate hardware costs
182
+ const hardwareItems = [];
183
+ let hardwareSubtotal = 0;
184
+ if (doc.materials?.hardware) {
185
+ for (const hw of doc.materials.hardware) {
186
+ const quantity = hw.quantity || 1;
187
+ let unitPrice = 0;
188
+ const typePrice = hardwarePrices[hw.type];
189
+ if (typeof typePrice === 'number') {
190
+ unitPrice = typePrice;
191
+ }
192
+ else if (typePrice && typeof typePrice === 'object') {
193
+ unitPrice = typePrice[hw.size || 'default'] || typePrice.default || 1;
194
+ }
195
+ else {
196
+ unitPrice = 1; // Default fallback
197
+ }
198
+ const cost = quantity * unitPrice;
199
+ hardwareItems.push({
200
+ name: hw.name || hw.type,
201
+ type: hw.type,
202
+ size: hw.size,
203
+ quantity,
204
+ unitPrice,
205
+ cost,
206
+ });
207
+ hardwareSubtotal += cost;
208
+ }
209
+ }
210
+ // Calculate finishing costs
211
+ const finishingItems = [];
212
+ let finishingSubtotal = 0;
213
+ if (doc.finishing?.steps) {
214
+ for (const step of doc.finishing.steps) {
215
+ if (step.type === 'stain' || step.type === 'oil' || step.type === 'topcoat' || step.type === 'wax' || step.type === 'other') {
216
+ const coverage = 300; // sq ft per gallon (approximate)
217
+ const coats = step.coats || 1;
218
+ const totalCoverage = totalSquareFeet * 2 * coats; // Both sides
219
+ const unitsNeeded = Math.ceil(totalCoverage / coverage);
220
+ const unitPrice = options.finishPricePerSqFt
221
+ ? options.finishPricePerSqFt * coverage
222
+ : 35; // Default gallon price
223
+ const cost = unitsNeeded * unitPrice;
224
+ finishingItems.push({
225
+ product: step.product || step.type,
226
+ coverage,
227
+ unitsNeeded,
228
+ unitPrice,
229
+ cost,
230
+ });
231
+ finishingSubtotal += cost;
232
+ }
233
+ }
234
+ }
235
+ // Calculate labor
236
+ const laborHours = includeLabor ? totalBoardFeet * laborHoursPerBF : 0;
237
+ const laborSubtotal = laborHours * laborRate;
238
+ // Notes
239
+ const notes = [];
240
+ notes.push(`Prices include ${(wastePercentage * 100).toFixed(0)}% waste factor`);
241
+ if (totalBoardFeet > 50) {
242
+ notes.push('Consider bulk pricing for lumber orders over 50 board feet');
243
+ }
244
+ // Calculate total
245
+ const total = lumberSubtotal + hardwareSubtotal + finishingSubtotal + laborSubtotal;
246
+ return {
247
+ lumber: {
248
+ items: lumberItems,
249
+ subtotal: Math.round(lumberSubtotal * 100) / 100,
250
+ },
251
+ hardware: {
252
+ items: hardwareItems,
253
+ subtotal: Math.round(hardwareSubtotal * 100) / 100,
254
+ },
255
+ finishing: {
256
+ items: finishingItems,
257
+ subtotal: Math.round(finishingSubtotal * 100) / 100,
258
+ },
259
+ labor: {
260
+ hours: Math.round(laborHours * 10) / 10,
261
+ rate: laborRate,
262
+ subtotal: Math.round(laborSubtotal * 100) / 100,
263
+ },
264
+ total: Math.round(total * 100) / 100,
265
+ boardFeetTotal: Math.round(totalBoardFeet * 100) / 100,
266
+ squareFeetTotal: Math.round(totalSquareFeet * 100) / 100,
267
+ wastePercentage,
268
+ notes,
269
+ };
270
+ }
271
+ /**
272
+ * Format cost estimate as a text report
273
+ */
274
+ function formatCostEstimate(estimate) {
275
+ const lines = [];
276
+ lines.push('='.repeat(60));
277
+ lines.push('PROJECT COST ESTIMATE');
278
+ lines.push('='.repeat(60));
279
+ lines.push('');
280
+ // Lumber
281
+ lines.push('LUMBER');
282
+ lines.push('-'.repeat(60));
283
+ for (const item of estimate.lumber.items) {
284
+ lines.push(` ${item.material.padEnd(20)} ${item.boardFeet.toFixed(2).padStart(8)} BF @ $${item.pricePerBF.toFixed(2)}/BF = $${item.cost.toFixed(2).padStart(8)}`);
285
+ }
286
+ lines.push('-'.repeat(60));
287
+ lines.push(` ${'Lumber Subtotal'.padEnd(44)} $${estimate.lumber.subtotal.toFixed(2).padStart(8)}`);
288
+ lines.push('');
289
+ // Hardware
290
+ if (estimate.hardware.items.length > 0) {
291
+ lines.push('HARDWARE');
292
+ lines.push('-'.repeat(60));
293
+ for (const item of estimate.hardware.items) {
294
+ const name = `${item.name}${item.size ? ` (${item.size})` : ''}`;
295
+ lines.push(` ${name.padEnd(30)} ${String(item.quantity).padStart(4)} @ $${item.unitPrice.toFixed(2)} = $${item.cost.toFixed(2).padStart(8)}`);
296
+ }
297
+ lines.push('-'.repeat(60));
298
+ lines.push(` ${'Hardware Subtotal'.padEnd(44)} $${estimate.hardware.subtotal.toFixed(2).padStart(8)}`);
299
+ lines.push('');
300
+ }
301
+ // Finishing
302
+ if (estimate.finishing.items.length > 0) {
303
+ lines.push('FINISHING');
304
+ lines.push('-'.repeat(60));
305
+ for (const item of estimate.finishing.items) {
306
+ lines.push(` ${item.product.padEnd(30)} ${String(item.unitsNeeded).padStart(4)} @ $${item.unitPrice.toFixed(2)} = $${item.cost.toFixed(2).padStart(8)}`);
307
+ }
308
+ lines.push('-'.repeat(60));
309
+ lines.push(` ${'Finishing Subtotal'.padEnd(44)} $${estimate.finishing.subtotal.toFixed(2).padStart(8)}`);
310
+ lines.push('');
311
+ }
312
+ // Labor
313
+ if (estimate.labor.hours > 0) {
314
+ lines.push('LABOR');
315
+ lines.push('-'.repeat(60));
316
+ lines.push(` ${estimate.labor.hours.toFixed(1)} hours @ $${estimate.labor.rate.toFixed(2)}/hr`.padEnd(46) +
317
+ `$${estimate.labor.subtotal.toFixed(2).padStart(8)}`);
318
+ lines.push('');
319
+ }
320
+ // Total
321
+ lines.push('='.repeat(60));
322
+ lines.push(` ${'TOTAL'.padEnd(44)} $${estimate.total.toFixed(2).padStart(8)}`);
323
+ lines.push('='.repeat(60));
324
+ lines.push('');
325
+ // Summary
326
+ lines.push('SUMMARY');
327
+ lines.push(` Total Board Feet: ${estimate.boardFeetTotal.toFixed(2)}`);
328
+ lines.push(` Total Square Feet: ${estimate.squareFeetTotal.toFixed(2)}`);
329
+ lines.push(` Waste Factor: ${(estimate.wastePercentage * 100).toFixed(0)}%`);
330
+ lines.push('');
331
+ // Notes
332
+ if (estimate.notes.length > 0) {
333
+ lines.push('NOTES');
334
+ for (const note of estimate.notes) {
335
+ lines.push(` * ${note}`);
336
+ }
337
+ }
338
+ return lines.join('\n');
339
+ }
340
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cost.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.test.d.ts","sourceRoot":"","sources":["../src/cost.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,241 @@
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
+ const node_test_1 = require("node:test");
37
+ const assert = __importStar(require("node:assert"));
38
+ const index_1 = require("./index");
39
+ const cost_1 = require("./cost");
40
+ (0, node_test_1.describe)('cost estimation', () => {
41
+ const SIMPLE_PROJECT = `
42
+ woodml: "1.0"
43
+ project:
44
+ name: "Test Project"
45
+ units: imperial
46
+
47
+ parts:
48
+ - id: panel
49
+ name: "Panel"
50
+ material: oak
51
+ dimensions:
52
+ length: 24"
53
+ width: 12"
54
+ thickness: 3/4"
55
+ quantity: 2
56
+ `;
57
+ const PROJECT_WITH_HARDWARE = `
58
+ woodml: "1.0"
59
+ project:
60
+ name: "Test Project"
61
+ units: imperial
62
+
63
+ materials:
64
+ hardware:
65
+ - id: screws
66
+ type: screw
67
+ size: "#8"
68
+ quantity: 20
69
+ - id: hinges
70
+ type: hinge
71
+ quantity: 2
72
+
73
+ parts:
74
+ - id: panel
75
+ material: cherry
76
+ dimensions:
77
+ length: 24"
78
+ width: 12"
79
+ thickness: 3/4"
80
+ quantity: 1
81
+ `;
82
+ const PROJECT_WITH_FINISHING = `
83
+ woodml: "1.0"
84
+ project:
85
+ name: "Test Project"
86
+ units: imperial
87
+
88
+ parts:
89
+ - id: panel
90
+ material: walnut
91
+ dimensions:
92
+ length: 24"
93
+ width: 12"
94
+ thickness: 3/4"
95
+ quantity: 1
96
+
97
+ finishing:
98
+ steps:
99
+ - type: oil
100
+ product: "Danish Oil"
101
+ coats: 2
102
+ `;
103
+ (0, node_test_1.describe)('estimateCost', () => {
104
+ (0, node_test_1.it)('should calculate lumber costs', () => {
105
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
106
+ const estimate = (0, cost_1.estimateCost)(doc);
107
+ // 24 x 12 x 0.75 = 216 cubic inches = 1.5 BF per panel
108
+ // 2 panels = 3 BF
109
+ assert.ok(estimate.lumber.items.length > 0);
110
+ assert.ok(estimate.lumber.subtotal > 0);
111
+ assert.strictEqual(estimate.boardFeetTotal, 3);
112
+ });
113
+ (0, node_test_1.it)('should apply waste percentage', () => {
114
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
115
+ const estimate = (0, cost_1.estimateCost)(doc, { wastePercentage: 0.20 });
116
+ // With 20% waste, cost should be higher
117
+ const estimateNoWaste = (0, cost_1.estimateCost)(doc, { wastePercentage: 0 });
118
+ assert.ok(estimate.lumber.subtotal > estimateNoWaste.lumber.subtotal);
119
+ });
120
+ (0, node_test_1.it)('should use custom lumber prices', () => {
121
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
122
+ const estimate = (0, cost_1.estimateCost)(doc, {
123
+ lumberPrices: { oak: 10.0 },
124
+ wastePercentage: 0,
125
+ });
126
+ // 3 BF * $10/BF = $30
127
+ assert.strictEqual(estimate.lumber.subtotal, 30);
128
+ });
129
+ (0, node_test_1.it)('should calculate hardware costs', () => {
130
+ const doc = (0, index_1.parseAndResolve)(PROJECT_WITH_HARDWARE);
131
+ const estimate = (0, cost_1.estimateCost)(doc);
132
+ assert.strictEqual(estimate.hardware.items.length, 2);
133
+ assert.ok(estimate.hardware.subtotal > 0);
134
+ // Check screws: 20 * $0.04 = $0.80
135
+ const screwItem = estimate.hardware.items.find((i) => i.type === 'screw');
136
+ assert.ok(screwItem);
137
+ assert.strictEqual(screwItem.quantity, 20);
138
+ // Check hinges: 2 * $3.00 = $6.00
139
+ const hingeItem = estimate.hardware.items.find((i) => i.type === 'hinge');
140
+ assert.ok(hingeItem);
141
+ assert.strictEqual(hingeItem.quantity, 2);
142
+ });
143
+ (0, node_test_1.it)('should calculate finishing costs', () => {
144
+ const doc = (0, index_1.parseAndResolve)(PROJECT_WITH_FINISHING);
145
+ const estimate = (0, cost_1.estimateCost)(doc);
146
+ assert.ok(estimate.finishing.items.length > 0);
147
+ });
148
+ (0, node_test_1.it)('should calculate labor when enabled', () => {
149
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
150
+ const estimate = (0, cost_1.estimateCost)(doc, {
151
+ includeLabor: true,
152
+ laborRate: 30,
153
+ laborHoursPerBoardFoot: 1,
154
+ });
155
+ // 3 BF * 1 hour/BF * $30/hour = $90
156
+ assert.strictEqual(estimate.labor.hours, 3);
157
+ assert.strictEqual(estimate.labor.rate, 30);
158
+ assert.strictEqual(estimate.labor.subtotal, 90);
159
+ });
160
+ (0, node_test_1.it)('should not include labor by default', () => {
161
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
162
+ const estimate = (0, cost_1.estimateCost)(doc);
163
+ assert.strictEqual(estimate.labor.hours, 0);
164
+ assert.strictEqual(estimate.labor.subtotal, 0);
165
+ });
166
+ (0, node_test_1.it)('should calculate total correctly', () => {
167
+ const doc = (0, index_1.parseAndResolve)(PROJECT_WITH_HARDWARE);
168
+ const estimate = (0, cost_1.estimateCost)(doc);
169
+ const expectedTotal = estimate.lumber.subtotal +
170
+ estimate.hardware.subtotal +
171
+ estimate.finishing.subtotal +
172
+ estimate.labor.subtotal;
173
+ // Use approximate comparison due to floating point rounding
174
+ assert.ok(Math.abs(estimate.total - expectedTotal) < 0.02);
175
+ });
176
+ (0, node_test_1.it)('should calculate square feet for finishing', () => {
177
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
178
+ const estimate = (0, cost_1.estimateCost)(doc);
179
+ // 24 x 12 = 288 sq inches = 2 sq ft per panel
180
+ // 2 panels = 4 sq ft
181
+ assert.strictEqual(estimate.squareFeetTotal, 4);
182
+ });
183
+ });
184
+ (0, node_test_1.describe)('formatCostEstimate', () => {
185
+ (0, node_test_1.it)('should format estimate as text', () => {
186
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
187
+ const estimate = (0, cost_1.estimateCost)(doc);
188
+ const formatted = (0, cost_1.formatCostEstimate)(estimate);
189
+ assert.ok(formatted.includes('PROJECT COST ESTIMATE'));
190
+ assert.ok(formatted.includes('LUMBER'));
191
+ assert.ok(formatted.includes('oak'));
192
+ assert.ok(formatted.includes('TOTAL'));
193
+ assert.ok(formatted.includes('Board Feet'));
194
+ });
195
+ (0, node_test_1.it)('should include hardware section when present', () => {
196
+ const doc = (0, index_1.parseAndResolve)(PROJECT_WITH_HARDWARE);
197
+ const estimate = (0, cost_1.estimateCost)(doc);
198
+ const formatted = (0, cost_1.formatCostEstimate)(estimate);
199
+ assert.ok(formatted.includes('HARDWARE'));
200
+ assert.ok(formatted.includes('screw'));
201
+ assert.ok(formatted.includes('hinge'));
202
+ });
203
+ (0, node_test_1.it)('should include labor section when present', () => {
204
+ const doc = (0, index_1.parseAndResolve)(SIMPLE_PROJECT);
205
+ const estimate = (0, cost_1.estimateCost)(doc, { includeLabor: true });
206
+ const formatted = (0, cost_1.formatCostEstimate)(estimate);
207
+ assert.ok(formatted.includes('LABOR'));
208
+ assert.ok(formatted.includes('hours'));
209
+ });
210
+ });
211
+ (0, node_test_1.describe)('DEFAULT_LUMBER_PRICES', () => {
212
+ (0, node_test_1.it)('should have common species', () => {
213
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.oak > 0);
214
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.maple > 0);
215
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.cherry > 0);
216
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.walnut > 0);
217
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.pine > 0);
218
+ });
219
+ (0, node_test_1.it)('should have exotic species', () => {
220
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.mahogany > 0);
221
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.teak > 0);
222
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.purpleheart > 0);
223
+ });
224
+ (0, node_test_1.it)('should have sheet goods', () => {
225
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.plywood > 0);
226
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.mdf > 0);
227
+ });
228
+ (0, node_test_1.it)('should have default price', () => {
229
+ assert.ok(cost_1.DEFAULT_LUMBER_PRICES.default > 0);
230
+ });
231
+ });
232
+ (0, node_test_1.describe)('DEFAULT_HARDWARE_PRICES', () => {
233
+ (0, node_test_1.it)('should have common hardware types', () => {
234
+ assert.ok(cost_1.DEFAULT_HARDWARE_PRICES.screw);
235
+ assert.ok(cost_1.DEFAULT_HARDWARE_PRICES.bolt);
236
+ assert.ok(cost_1.DEFAULT_HARDWARE_PRICES.hinge);
237
+ assert.ok(cost_1.DEFAULT_HARDWARE_PRICES.drawer_slide);
238
+ });
239
+ });
240
+ });
241
+ //# sourceMappingURL=cost.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.test.js","sourceRoot":"","sources":["../src/cost.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * WoodML Parser Example
3
+ * Demonstrates parsing a WoodML file and generating a cut list
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":"AAAA;;;GAGG"}