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.
- package/README.md +181 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +554 -0
- package/dist/cli.js.map +1 -0
- package/dist/cost.d.ts +94 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +340 -0
- package/dist/cost.js.map +1 -0
- package/dist/cost.test.d.ts +2 -0
- package/dist/cost.test.d.ts.map +1 -0
- package/dist/cost.test.js +241 -0
- package/dist/cost.test.js.map +1 -0
- package/dist/example.d.ts +6 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +136 -0
- package/dist/example.js.map +1 -0
- package/dist/formulas.d.ts +23 -0
- package/dist/formulas.d.ts.map +1 -0
- package/dist/formulas.js +442 -0
- package/dist/formulas.js.map +1 -0
- package/dist/formulas.test.d.ts +5 -0
- package/dist/formulas.test.d.ts.map +1 -0
- package/dist/formulas.test.js +360 -0
- package/dist/formulas.test.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.test.d.ts +6 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +271 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/optimizer.d.ts +119 -0
- package/dist/optimizer.d.ts.map +1 -0
- package/dist/optimizer.js +423 -0
- package/dist/optimizer.js.map +1 -0
- package/dist/optimizer.test.d.ts +2 -0
- package/dist/optimizer.test.d.ts.map +1 -0
- package/dist/optimizer.test.js +225 -0
- package/dist/optimizer.test.js.map +1 -0
- package/dist/parser.d.ts +59 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +305 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser.test.d.ts +5 -0
- package/dist/parser.test.d.ts.map +1 -0
- package/dist/parser.test.js +486 -0
- package/dist/parser.test.js.map +1 -0
- package/dist/pdf.d.ts +36 -0
- package/dist/pdf.d.ts.map +1 -0
- package/dist/pdf.js +316 -0
- package/dist/pdf.js.map +1 -0
- package/dist/svg.d.ts +73 -0
- package/dist/svg.d.ts.map +1 -0
- package/dist/svg.js +613 -0
- package/dist/svg.js.map +1 -0
- package/dist/svg.test.d.ts +5 -0
- package/dist/svg.test.d.ts.map +1 -0
- package/dist/svg.test.js +333 -0
- package/dist/svg.test.js.map +1 -0
- package/dist/templates.d.ts +126 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +448 -0
- package/dist/templates.js.map +1 -0
- package/dist/templates.test.d.ts +5 -0
- package/dist/templates.test.d.ts.map +1 -0
- package/dist/templates.test.js +630 -0
- package/dist/templates.test.js.map +1 -0
- package/dist/types.d.ts +250 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/units.d.ts +53 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +359 -0
- package/dist/units.js.map +1 -0
- package/dist/units.test.d.ts +5 -0
- package/dist/units.test.d.ts.map +1 -0
- package/dist/units.test.js +364 -0
- package/dist/units.test.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit Tests for WoodML Parser Module
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const node_test_1 = require("node:test");
|
|
10
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
+
const parser_1 = require("./parser");
|
|
12
|
+
const SIMPLE_PROJECT = `
|
|
13
|
+
woodml: "1.0"
|
|
14
|
+
project:
|
|
15
|
+
name: Test Project
|
|
16
|
+
units: imperial
|
|
17
|
+
|
|
18
|
+
materials:
|
|
19
|
+
lumber:
|
|
20
|
+
- id: walnut
|
|
21
|
+
species: walnut
|
|
22
|
+
thickness: 4/4
|
|
23
|
+
|
|
24
|
+
parts:
|
|
25
|
+
- id: top
|
|
26
|
+
name: Table Top
|
|
27
|
+
material: walnut
|
|
28
|
+
dimensions:
|
|
29
|
+
length: 48"
|
|
30
|
+
width: 24"
|
|
31
|
+
thickness: 1"
|
|
32
|
+
quantity: 1
|
|
33
|
+
`;
|
|
34
|
+
const PROJECT_WITH_FORMULAS = `
|
|
35
|
+
woodml: "1.0"
|
|
36
|
+
project:
|
|
37
|
+
name: Formula Test
|
|
38
|
+
units: imperial
|
|
39
|
+
|
|
40
|
+
formulas:
|
|
41
|
+
vars:
|
|
42
|
+
table_length: 48"
|
|
43
|
+
table_width: 24"
|
|
44
|
+
leg_height: 30"
|
|
45
|
+
computed:
|
|
46
|
+
apron_length: $table_length - 4"
|
|
47
|
+
apron_depth: $leg_height - 1"
|
|
48
|
+
|
|
49
|
+
parts:
|
|
50
|
+
- id: top
|
|
51
|
+
material: oak
|
|
52
|
+
dimensions:
|
|
53
|
+
length: $table_length
|
|
54
|
+
width: $table_width
|
|
55
|
+
thickness: 1"
|
|
56
|
+
- id: apron
|
|
57
|
+
material: oak
|
|
58
|
+
dimensions:
|
|
59
|
+
length: $apron_length
|
|
60
|
+
width: 4"
|
|
61
|
+
thickness: 3/4"
|
|
62
|
+
quantity: 2
|
|
63
|
+
`;
|
|
64
|
+
const PROJECT_WITH_JOINERY = `
|
|
65
|
+
woodml: "1.0"
|
|
66
|
+
project:
|
|
67
|
+
name: Joinery Test
|
|
68
|
+
|
|
69
|
+
materials:
|
|
70
|
+
lumber:
|
|
71
|
+
- id: oak
|
|
72
|
+
species: white_oak
|
|
73
|
+
|
|
74
|
+
parts:
|
|
75
|
+
- id: leg
|
|
76
|
+
material: oak
|
|
77
|
+
dimensions:
|
|
78
|
+
length: 30"
|
|
79
|
+
width: 2"
|
|
80
|
+
thickness: 2"
|
|
81
|
+
quantity: 4
|
|
82
|
+
- id: apron
|
|
83
|
+
material: oak
|
|
84
|
+
dimensions:
|
|
85
|
+
length: 24"
|
|
86
|
+
width: 4"
|
|
87
|
+
thickness: 3/4"
|
|
88
|
+
quantity: 2
|
|
89
|
+
|
|
90
|
+
joinery:
|
|
91
|
+
- type: mortise_and_tenon
|
|
92
|
+
parts: [leg, apron]
|
|
93
|
+
`;
|
|
94
|
+
(0, node_test_1.describe)('WoodMLParser', () => {
|
|
95
|
+
(0, node_test_1.describe)('parse', () => {
|
|
96
|
+
(0, node_test_1.it)('should parse a simple document', () => {
|
|
97
|
+
const parser = new parser_1.WoodMLParser();
|
|
98
|
+
const doc = parser.parse(SIMPLE_PROJECT);
|
|
99
|
+
node_assert_1.default.strictEqual(doc.woodml, '1.0');
|
|
100
|
+
node_assert_1.default.strictEqual(doc.project?.name, 'Test Project');
|
|
101
|
+
node_assert_1.default.strictEqual(doc.project?.units, 'imperial');
|
|
102
|
+
});
|
|
103
|
+
(0, node_test_1.it)('should parse materials', () => {
|
|
104
|
+
const parser = new parser_1.WoodMLParser();
|
|
105
|
+
const doc = parser.parse(SIMPLE_PROJECT);
|
|
106
|
+
node_assert_1.default.ok(doc.materials?.lumber);
|
|
107
|
+
node_assert_1.default.strictEqual(doc.materials.lumber.length, 1);
|
|
108
|
+
node_assert_1.default.strictEqual(doc.materials.lumber[0].id, 'walnut');
|
|
109
|
+
node_assert_1.default.strictEqual(doc.materials.lumber[0].species, 'walnut');
|
|
110
|
+
});
|
|
111
|
+
(0, node_test_1.it)('should parse parts', () => {
|
|
112
|
+
const parser = new parser_1.WoodMLParser();
|
|
113
|
+
const doc = parser.parse(SIMPLE_PROJECT);
|
|
114
|
+
node_assert_1.default.ok(doc.parts);
|
|
115
|
+
node_assert_1.default.strictEqual(doc.parts.length, 1);
|
|
116
|
+
node_assert_1.default.strictEqual(doc.parts[0].id, 'top');
|
|
117
|
+
node_assert_1.default.strictEqual(doc.parts[0].name, 'Table Top');
|
|
118
|
+
});
|
|
119
|
+
(0, node_test_1.it)('should parse formulas section', () => {
|
|
120
|
+
const parser = new parser_1.WoodMLParser();
|
|
121
|
+
const doc = parser.parse(PROJECT_WITH_FORMULAS);
|
|
122
|
+
node_assert_1.default.ok(doc.formulas?.vars);
|
|
123
|
+
node_assert_1.default.strictEqual(doc.formulas.vars.table_length, '48"');
|
|
124
|
+
node_assert_1.default.ok(doc.formulas?.computed);
|
|
125
|
+
node_assert_1.default.strictEqual(doc.formulas.computed.apron_length, '$table_length - 4"');
|
|
126
|
+
});
|
|
127
|
+
(0, node_test_1.it)('should parse joinery', () => {
|
|
128
|
+
const parser = new parser_1.WoodMLParser();
|
|
129
|
+
const doc = parser.parse(PROJECT_WITH_JOINERY);
|
|
130
|
+
node_assert_1.default.ok(doc.joinery);
|
|
131
|
+
node_assert_1.default.strictEqual(doc.joinery.length, 1);
|
|
132
|
+
node_assert_1.default.strictEqual(doc.joinery[0].type, 'mortise_and_tenon');
|
|
133
|
+
node_assert_1.default.deepStrictEqual(doc.joinery[0].parts, ['leg', 'apron']);
|
|
134
|
+
});
|
|
135
|
+
(0, node_test_1.it)('should throw on missing version', () => {
|
|
136
|
+
const parser = new parser_1.WoodMLParser();
|
|
137
|
+
node_assert_1.default.throws(() => parser.parse('project:\n name: Test'), /Missing required "woodml" version field/);
|
|
138
|
+
});
|
|
139
|
+
(0, node_test_1.it)('should set default unit from project', () => {
|
|
140
|
+
const parser = new parser_1.WoodMLParser();
|
|
141
|
+
parser.parse(SIMPLE_PROJECT);
|
|
142
|
+
node_assert_1.default.strictEqual(parser.getDefaultUnit(), 'imperial');
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
(0, node_test_1.describe)('parseAndResolve', () => {
|
|
146
|
+
(0, node_test_1.it)('should resolve part dimensions', () => {
|
|
147
|
+
const parser = new parser_1.WoodMLParser();
|
|
148
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
149
|
+
node_assert_1.default.strictEqual(resolved.resolvedParts.length, 1);
|
|
150
|
+
const top = resolved.resolvedParts[0];
|
|
151
|
+
node_assert_1.default.strictEqual(top.dimensions.length.value, 48);
|
|
152
|
+
node_assert_1.default.strictEqual(top.dimensions.width.value, 24);
|
|
153
|
+
node_assert_1.default.strictEqual(top.dimensions.thickness.value, 1);
|
|
154
|
+
});
|
|
155
|
+
(0, node_test_1.it)('should resolve formula variables', () => {
|
|
156
|
+
const parser = new parser_1.WoodMLParser();
|
|
157
|
+
const resolved = parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
158
|
+
node_assert_1.default.ok(resolved.resolvedVariables);
|
|
159
|
+
node_assert_1.default.strictEqual(resolved.resolvedVariables.table_length.value, 48);
|
|
160
|
+
node_assert_1.default.strictEqual(resolved.resolvedVariables.apron_length.value, 44);
|
|
161
|
+
});
|
|
162
|
+
(0, node_test_1.it)('should use resolved variables in part dimensions', () => {
|
|
163
|
+
const parser = new parser_1.WoodMLParser();
|
|
164
|
+
const resolved = parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
165
|
+
const top = resolved.resolvedParts.find(p => p.id === 'top');
|
|
166
|
+
node_assert_1.default.ok(top);
|
|
167
|
+
node_assert_1.default.strictEqual(top.dimensions.length.value, 48);
|
|
168
|
+
const apron = resolved.resolvedParts.find(p => p.id === 'apron');
|
|
169
|
+
node_assert_1.default.ok(apron);
|
|
170
|
+
node_assert_1.default.strictEqual(apron.dimensions.length.value, 44);
|
|
171
|
+
});
|
|
172
|
+
(0, node_test_1.it)('should set resolved quantity', () => {
|
|
173
|
+
const parser = new parser_1.WoodMLParser();
|
|
174
|
+
const resolved = parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
175
|
+
const apron = resolved.resolvedParts.find(p => p.id === 'apron');
|
|
176
|
+
node_assert_1.default.ok(apron);
|
|
177
|
+
node_assert_1.default.strictEqual(apron.resolvedQuantity, 2);
|
|
178
|
+
});
|
|
179
|
+
(0, node_test_1.it)('should default quantity to 1', () => {
|
|
180
|
+
const parser = new parser_1.WoodMLParser();
|
|
181
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
182
|
+
node_assert_1.default.strictEqual(resolved.resolvedParts[0].resolvedQuantity, 1);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
(0, node_test_1.describe)('parseDimension', () => {
|
|
186
|
+
(0, node_test_1.it)('should parse simple dimension', () => {
|
|
187
|
+
const parser = new parser_1.WoodMLParser();
|
|
188
|
+
parser.parse(SIMPLE_PROJECT);
|
|
189
|
+
const dim = parser.parseDimension('24"');
|
|
190
|
+
node_assert_1.default.strictEqual(dim.value, 24);
|
|
191
|
+
});
|
|
192
|
+
(0, node_test_1.it)('should parse dimension with variable after resolution', () => {
|
|
193
|
+
const parser = new parser_1.WoodMLParser();
|
|
194
|
+
parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
195
|
+
const dim = parser.parseDimension('$table_length');
|
|
196
|
+
node_assert_1.default.strictEqual(dim.value, 48);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
(0, node_test_1.describe)('validateDocument', () => {
|
|
201
|
+
(0, node_test_1.it)('should pass valid document', () => {
|
|
202
|
+
const parser = new parser_1.WoodMLParser();
|
|
203
|
+
const doc = parser.parse(SIMPLE_PROJECT);
|
|
204
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
205
|
+
node_assert_1.default.strictEqual(errors.length, 0);
|
|
206
|
+
});
|
|
207
|
+
(0, node_test_1.it)('should detect missing version', () => {
|
|
208
|
+
const doc = {
|
|
209
|
+
woodml: '',
|
|
210
|
+
project: { name: 'Test' },
|
|
211
|
+
};
|
|
212
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
213
|
+
node_assert_1.default.ok(errors.some(e => e.path === 'woodml'));
|
|
214
|
+
});
|
|
215
|
+
(0, node_test_1.it)('should detect duplicate lumber IDs', () => {
|
|
216
|
+
const doc = {
|
|
217
|
+
woodml: '1.0',
|
|
218
|
+
materials: {
|
|
219
|
+
lumber: [
|
|
220
|
+
{ id: 'walnut' },
|
|
221
|
+
{ id: 'walnut' },
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
226
|
+
node_assert_1.default.ok(errors.some(e => e.message.includes('Duplicate ID')));
|
|
227
|
+
});
|
|
228
|
+
(0, node_test_1.it)('should detect duplicate part IDs', () => {
|
|
229
|
+
const doc = {
|
|
230
|
+
woodml: '1.0',
|
|
231
|
+
parts: [
|
|
232
|
+
{ id: 'top' },
|
|
233
|
+
{ id: 'top' },
|
|
234
|
+
],
|
|
235
|
+
};
|
|
236
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
237
|
+
node_assert_1.default.ok(errors.some(e => e.message.includes('Duplicate part ID')));
|
|
238
|
+
});
|
|
239
|
+
(0, node_test_1.it)('should detect unknown material reference', () => {
|
|
240
|
+
const doc = {
|
|
241
|
+
woodml: '1.0',
|
|
242
|
+
materials: {
|
|
243
|
+
lumber: [{ id: 'oak' }],
|
|
244
|
+
},
|
|
245
|
+
parts: [
|
|
246
|
+
{ id: 'top', material: 'walnut' },
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
250
|
+
node_assert_1.default.ok(errors.some(e => e.message.includes('Unknown material reference')));
|
|
251
|
+
});
|
|
252
|
+
(0, node_test_1.it)('should detect unknown part reference in joinery', () => {
|
|
253
|
+
const doc = {
|
|
254
|
+
woodml: '1.0',
|
|
255
|
+
parts: [{ id: 'leg' }],
|
|
256
|
+
joinery: [
|
|
257
|
+
{ type: 'mortise_and_tenon', parts: ['leg', 'missing_part'] },
|
|
258
|
+
],
|
|
259
|
+
};
|
|
260
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
261
|
+
node_assert_1.default.ok(errors.some(e => e.message.includes('Unknown part reference in joinery')));
|
|
262
|
+
});
|
|
263
|
+
(0, node_test_1.it)('should handle hardware and sheet_goods duplicate detection', () => {
|
|
264
|
+
const doc = {
|
|
265
|
+
woodml: '1.0',
|
|
266
|
+
materials: {
|
|
267
|
+
lumber: [{ id: 'shared_id' }],
|
|
268
|
+
hardware: [{ id: 'shared_id', type: 'screw' }],
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
const errors = (0, parser_1.validateDocument)(doc);
|
|
272
|
+
node_assert_1.default.ok(errors.some(e => e.message.includes('Duplicate ID')));
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
(0, node_test_1.describe)('calculateBoardFeet', () => {
|
|
276
|
+
(0, node_test_1.it)('should calculate board feet for single part', () => {
|
|
277
|
+
const parser = new parser_1.WoodMLParser();
|
|
278
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
279
|
+
// 48" x 24" x 1" / 144 = 8 board feet
|
|
280
|
+
const bf = (0, parser_1.calculateBoardFeet)(resolved);
|
|
281
|
+
node_assert_1.default.strictEqual(bf, 8);
|
|
282
|
+
});
|
|
283
|
+
(0, node_test_1.it)('should account for quantity', () => {
|
|
284
|
+
const doc = `
|
|
285
|
+
woodml: "1.0"
|
|
286
|
+
parts:
|
|
287
|
+
- id: leg
|
|
288
|
+
dimensions:
|
|
289
|
+
length: 30"
|
|
290
|
+
width: 2"
|
|
291
|
+
thickness: 2"
|
|
292
|
+
quantity: 4
|
|
293
|
+
`;
|
|
294
|
+
const parser = new parser_1.WoodMLParser();
|
|
295
|
+
const resolved = parser.parseAndResolve(doc);
|
|
296
|
+
// 30" x 2" x 2" x 4 / 144 = 3.33 board feet
|
|
297
|
+
const bf = (0, parser_1.calculateBoardFeet)(resolved);
|
|
298
|
+
node_assert_1.default.ok(Math.abs(bf - 3.333) < 0.01);
|
|
299
|
+
});
|
|
300
|
+
(0, node_test_1.it)('should sum multiple parts', () => {
|
|
301
|
+
const parser = new parser_1.WoodMLParser();
|
|
302
|
+
const resolved = parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
303
|
+
const bf = (0, parser_1.calculateBoardFeet)(resolved);
|
|
304
|
+
// top: 48 x 24 x 1 / 144 = 8
|
|
305
|
+
// aprons: 44 x 4 x 0.75 x 2 / 144 = 1.83
|
|
306
|
+
node_assert_1.default.ok(bf > 9.5);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
(0, node_test_1.describe)('generateCutList', () => {
|
|
310
|
+
(0, node_test_1.it)('should generate cut list items', () => {
|
|
311
|
+
const parser = new parser_1.WoodMLParser();
|
|
312
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
313
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
314
|
+
node_assert_1.default.strictEqual(cutList.length, 1);
|
|
315
|
+
node_assert_1.default.strictEqual(cutList[0].partId, 'top');
|
|
316
|
+
node_assert_1.default.strictEqual(cutList[0].partName, 'Table Top');
|
|
317
|
+
});
|
|
318
|
+
(0, node_test_1.it)('should include formatted dimensions', () => {
|
|
319
|
+
const parser = new parser_1.WoodMLParser();
|
|
320
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
321
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
322
|
+
node_assert_1.default.strictEqual(cutList[0].length, "4'");
|
|
323
|
+
node_assert_1.default.strictEqual(cutList[0].width, "2'");
|
|
324
|
+
node_assert_1.default.strictEqual(cutList[0].thickness, '1"');
|
|
325
|
+
});
|
|
326
|
+
(0, node_test_1.it)('should include material', () => {
|
|
327
|
+
const parser = new parser_1.WoodMLParser();
|
|
328
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
329
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
330
|
+
node_assert_1.default.strictEqual(cutList[0].material, 'walnut');
|
|
331
|
+
});
|
|
332
|
+
(0, node_test_1.it)('should include quantity', () => {
|
|
333
|
+
const parser = new parser_1.WoodMLParser();
|
|
334
|
+
const resolved = parser.parseAndResolve(PROJECT_WITH_FORMULAS);
|
|
335
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
336
|
+
const apron = cutList.find(c => c.partId === 'apron');
|
|
337
|
+
node_assert_1.default.ok(apron);
|
|
338
|
+
node_assert_1.default.strictEqual(apron.quantity, 2);
|
|
339
|
+
});
|
|
340
|
+
(0, node_test_1.it)('should include board feet calculation', () => {
|
|
341
|
+
const parser = new parser_1.WoodMLParser();
|
|
342
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
343
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
344
|
+
node_assert_1.default.strictEqual(cutList[0].boardFeet, 8);
|
|
345
|
+
});
|
|
346
|
+
(0, node_test_1.it)('should sort by material then size', () => {
|
|
347
|
+
const doc = `
|
|
348
|
+
woodml: "1.0"
|
|
349
|
+
parts:
|
|
350
|
+
- id: small_oak
|
|
351
|
+
material: oak
|
|
352
|
+
dimensions: { length: 12", width: 6", thickness: 1" }
|
|
353
|
+
- id: big_walnut
|
|
354
|
+
material: walnut
|
|
355
|
+
dimensions: { length: 48", width: 24", thickness: 1" }
|
|
356
|
+
- id: big_oak
|
|
357
|
+
material: oak
|
|
358
|
+
dimensions: { length: 48", width: 24", thickness: 1" }
|
|
359
|
+
`;
|
|
360
|
+
const parser = new parser_1.WoodMLParser();
|
|
361
|
+
const resolved = parser.parseAndResolve(doc);
|
|
362
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
363
|
+
node_assert_1.default.strictEqual(cutList[0].partId, 'big_oak');
|
|
364
|
+
node_assert_1.default.strictEqual(cutList[1].partId, 'small_oak');
|
|
365
|
+
node_assert_1.default.strictEqual(cutList[2].partId, 'big_walnut');
|
|
366
|
+
});
|
|
367
|
+
(0, node_test_1.it)('should handle missing material', () => {
|
|
368
|
+
const doc = `
|
|
369
|
+
woodml: "1.0"
|
|
370
|
+
parts:
|
|
371
|
+
- id: top
|
|
372
|
+
dimensions: { length: 24", width: 12", thickness: 1" }
|
|
373
|
+
`;
|
|
374
|
+
const parser = new parser_1.WoodMLParser();
|
|
375
|
+
const resolved = parser.parseAndResolve(doc);
|
|
376
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
377
|
+
node_assert_1.default.strictEqual(cutList[0].material, 'unspecified');
|
|
378
|
+
});
|
|
379
|
+
(0, node_test_1.it)('should use part id as name if no name provided', () => {
|
|
380
|
+
const doc = `
|
|
381
|
+
woodml: "1.0"
|
|
382
|
+
parts:
|
|
383
|
+
- id: unnamed_part
|
|
384
|
+
dimensions: { length: 24", width: 12", thickness: 1" }
|
|
385
|
+
`;
|
|
386
|
+
const parser = new parser_1.WoodMLParser();
|
|
387
|
+
const resolved = parser.parseAndResolve(doc);
|
|
388
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
389
|
+
node_assert_1.default.strictEqual(cutList[0].partName, 'unnamed_part');
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
(0, node_test_1.describe)('formatCutList', () => {
|
|
393
|
+
(0, node_test_1.it)('should format cut list as table', () => {
|
|
394
|
+
const parser = new parser_1.WoodMLParser();
|
|
395
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
396
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
397
|
+
const formatted = (0, parser_1.formatCutList)(cutList);
|
|
398
|
+
node_assert_1.default.ok(formatted.includes('Part'));
|
|
399
|
+
node_assert_1.default.ok(formatted.includes('Material'));
|
|
400
|
+
node_assert_1.default.ok(formatted.includes('Table Top'));
|
|
401
|
+
node_assert_1.default.ok(formatted.includes('walnut'));
|
|
402
|
+
});
|
|
403
|
+
(0, node_test_1.it)('should include total board feet', () => {
|
|
404
|
+
const parser = new parser_1.WoodMLParser();
|
|
405
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
406
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
407
|
+
const formatted = (0, parser_1.formatCutList)(cutList);
|
|
408
|
+
node_assert_1.default.ok(formatted.includes('Total Board Feet: 8.00'));
|
|
409
|
+
});
|
|
410
|
+
(0, node_test_1.it)('should align columns', () => {
|
|
411
|
+
const parser = new parser_1.WoodMLParser();
|
|
412
|
+
const resolved = parser.parseAndResolve(SIMPLE_PROJECT);
|
|
413
|
+
const cutList = (0, parser_1.generateCutList)(resolved);
|
|
414
|
+
const formatted = (0, parser_1.formatCutList)(cutList);
|
|
415
|
+
const lines = formatted.split('\n');
|
|
416
|
+
// All lines should have consistent column separators
|
|
417
|
+
const pipeCount = (str) => (str.match(/\|/g) || []).length;
|
|
418
|
+
const headerPipes = pipeCount(lines[0]);
|
|
419
|
+
node_assert_1.default.ok(lines.slice(2, -2).every(line => pipeCount(line) === headerPipes));
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
(0, node_test_1.describe)('metric units', () => {
|
|
423
|
+
(0, node_test_1.it)('should handle metric project', () => {
|
|
424
|
+
const doc = `
|
|
425
|
+
woodml: "1.0"
|
|
426
|
+
project:
|
|
427
|
+
units: metric
|
|
428
|
+
parts:
|
|
429
|
+
- id: top
|
|
430
|
+
dimensions:
|
|
431
|
+
length: 1200mm
|
|
432
|
+
width: 600mm
|
|
433
|
+
thickness: 25mm
|
|
434
|
+
`;
|
|
435
|
+
const parser = new parser_1.WoodMLParser();
|
|
436
|
+
const resolved = parser.parseAndResolve(doc);
|
|
437
|
+
const top = resolved.resolvedParts[0];
|
|
438
|
+
node_assert_1.default.strictEqual(top.dimensions.length.value, 1200);
|
|
439
|
+
node_assert_1.default.strictEqual(top.dimensions.length.unit, 'metric');
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
(0, node_test_1.describe)('edge cases', () => {
|
|
443
|
+
(0, node_test_1.it)('should handle document with no parts', () => {
|
|
444
|
+
const doc = `
|
|
445
|
+
woodml: "1.0"
|
|
446
|
+
project:
|
|
447
|
+
name: Empty Project
|
|
448
|
+
`;
|
|
449
|
+
const parser = new parser_1.WoodMLParser();
|
|
450
|
+
const resolved = parser.parseAndResolve(doc);
|
|
451
|
+
node_assert_1.default.strictEqual(resolved.resolvedParts.length, 0);
|
|
452
|
+
node_assert_1.default.strictEqual((0, parser_1.calculateBoardFeet)(resolved), 0);
|
|
453
|
+
node_assert_1.default.strictEqual((0, parser_1.generateCutList)(resolved).length, 0);
|
|
454
|
+
});
|
|
455
|
+
(0, node_test_1.it)('should handle parts with missing dimensions', () => {
|
|
456
|
+
const doc = `
|
|
457
|
+
woodml: "1.0"
|
|
458
|
+
parts:
|
|
459
|
+
- id: partial
|
|
460
|
+
dimensions:
|
|
461
|
+
length: 24"
|
|
462
|
+
`;
|
|
463
|
+
const parser = new parser_1.WoodMLParser();
|
|
464
|
+
const resolved = parser.parseAndResolve(doc);
|
|
465
|
+
const part = resolved.resolvedParts[0];
|
|
466
|
+
node_assert_1.default.strictEqual(part.dimensions.length.value, 24);
|
|
467
|
+
node_assert_1.default.strictEqual(part.dimensions.width.value, 0);
|
|
468
|
+
node_assert_1.default.strictEqual(part.dimensions.thickness.value, 0);
|
|
469
|
+
});
|
|
470
|
+
(0, node_test_1.it)('should handle depth as alias for width', () => {
|
|
471
|
+
const doc = `
|
|
472
|
+
woodml: "1.0"
|
|
473
|
+
parts:
|
|
474
|
+
- id: box_side
|
|
475
|
+
dimensions:
|
|
476
|
+
length: 24"
|
|
477
|
+
depth: 12"
|
|
478
|
+
thickness: 3/4"
|
|
479
|
+
`;
|
|
480
|
+
const parser = new parser_1.WoodMLParser();
|
|
481
|
+
const resolved = parser.parseAndResolve(doc);
|
|
482
|
+
const part = resolved.resolvedParts[0];
|
|
483
|
+
node_assert_1.default.strictEqual(part.dimensions.width.value, 12);
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
//# sourceMappingURL=parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../src/parser.test.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF generation for WoodML projects
|
|
3
|
+
* Generates cut sheets, diagrams, and project documentation
|
|
4
|
+
*/
|
|
5
|
+
import { ResolvedDocument } from './types';
|
|
6
|
+
import { OptimizationOptions } from './optimizer';
|
|
7
|
+
/**
|
|
8
|
+
* PDF page size in points (1 point = 1/72 inch)
|
|
9
|
+
*/
|
|
10
|
+
export interface PageSize {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const PAGE_SIZES: Record<string, PageSize>;
|
|
15
|
+
/**
|
|
16
|
+
* PDF generation options
|
|
17
|
+
*/
|
|
18
|
+
export interface PDFOptions {
|
|
19
|
+
pageSize?: keyof typeof PAGE_SIZES | PageSize;
|
|
20
|
+
orientation?: 'portrait' | 'landscape';
|
|
21
|
+
margin?: number;
|
|
22
|
+
fontSize?: number;
|
|
23
|
+
includeOptimization?: boolean;
|
|
24
|
+
includeDiagrams?: boolean;
|
|
25
|
+
projectInfo?: boolean;
|
|
26
|
+
optimizationOptions?: OptimizationOptions;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate a PDF cut sheet for a project
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateCutSheetPDF(doc: ResolvedDocument, options?: PDFOptions): string;
|
|
32
|
+
/**
|
|
33
|
+
* Generate a parts diagram PDF
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateDiagramPDF(doc: ResolvedDocument, _options?: PDFOptions): string;
|
|
36
|
+
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAgB,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAuC,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAM/C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,OAAO,UAAU,GAAG,QAAQ,CAAC;IAC9C,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AA6OD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,UAAe,GACvB,MAAM,CAkIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,GAAE,UAAe,GACxB,MAAM,CAsBR"}
|