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
@@ -0,0 +1,448 @@
1
+ "use strict";
2
+ /**
3
+ * WoodML Template System
4
+ * Handles parametric template parsing and instantiation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TemplateParser = void 0;
8
+ exports.parseTemplate = parseTemplate;
9
+ exports.createTemplateParser = createTemplateParser;
10
+ const units_1 = require("./units");
11
+ const formulas_1 = require("./formulas");
12
+ // ============================================
13
+ // TEMPLATE PARSER
14
+ // ============================================
15
+ class TemplateParser {
16
+ templates = new Map();
17
+ defaultUnit;
18
+ constructor(defaultUnit = 'imperial') {
19
+ this.defaultUnit = defaultUnit;
20
+ }
21
+ /**
22
+ * Register a template definition
23
+ */
24
+ registerTemplate(template) {
25
+ this.templates.set(template.name, template);
26
+ }
27
+ /**
28
+ * Parse a template definition from raw data
29
+ */
30
+ parseTemplateDefinition(data) {
31
+ const template = data.template;
32
+ if (!template) {
33
+ throw new Error('Missing template definition');
34
+ }
35
+ const name = template.name;
36
+ if (!name) {
37
+ throw new Error('Template missing required "name" field');
38
+ }
39
+ const params = template.params;
40
+ if (!params) {
41
+ throw new Error('Template missing required "params" field');
42
+ }
43
+ // Parse params
44
+ const parsedParams = {};
45
+ for (const [key, value] of Object.entries(params)) {
46
+ if (typeof value === 'string') {
47
+ // Simple param type
48
+ parsedParams[key] = value.replace('?', '');
49
+ if (value.endsWith('?')) {
50
+ parsedParams[key] = {
51
+ type: value.replace('?', ''),
52
+ optional: true,
53
+ };
54
+ }
55
+ }
56
+ else if (typeof value === 'object' && value !== null) {
57
+ // Complex param with constraints
58
+ const paramDef = value;
59
+ parsedParams[key] = {
60
+ type: paramDef.type,
61
+ description: paramDef.description,
62
+ optional: !!paramDef.optional,
63
+ min: paramDef.min,
64
+ max: paramDef.max,
65
+ values: paramDef.values,
66
+ };
67
+ }
68
+ }
69
+ // Parse parts
70
+ const parts = (template.parts || []).map((p) => ({
71
+ id: p.id,
72
+ name: p.name,
73
+ material: p.material,
74
+ dimensions: p.dimensions,
75
+ quantity: p.quantity,
76
+ grain: p.grain,
77
+ notes: p.notes,
78
+ repeat: p.repeat,
79
+ as: p.as,
80
+ use: p.use,
81
+ params: p.params,
82
+ }));
83
+ // Parse joinery
84
+ const joinery = (template.joinery || []).map((j) => ({
85
+ type: j.type,
86
+ parts: j.parts,
87
+ housing: j.housing,
88
+ insert: j.insert,
89
+ tails: j.tails,
90
+ pins: j.pins,
91
+ ratio: j.ratio,
92
+ depth: j.depth,
93
+ position: j.position,
94
+ }));
95
+ return {
96
+ name,
97
+ description: template.description,
98
+ version: template.version,
99
+ author: template.author,
100
+ params: parsedParams,
101
+ defaults: template.defaults,
102
+ computed: template.computed,
103
+ parts,
104
+ joinery,
105
+ };
106
+ }
107
+ /**
108
+ * Validate template instance parameters
109
+ */
110
+ validateParams(template, providedParams) {
111
+ const errors = [];
112
+ for (const [name, paramDef] of Object.entries(template.params)) {
113
+ const isOptional = typeof paramDef === 'object' && paramDef.optional;
114
+ const hasDefault = template.defaults && name in template.defaults;
115
+ const provided = name in providedParams;
116
+ if (!provided && !isOptional && !hasDefault) {
117
+ errors.push(`Missing required parameter: ${name}`);
118
+ }
119
+ if (provided) {
120
+ const value = providedParams[name];
121
+ const type = typeof paramDef === 'string' ? paramDef : paramDef.type;
122
+ // Type validation
123
+ if (type === 'dimension' && typeof value === 'string') {
124
+ try {
125
+ (0, units_1.parseDimension)(value, this.defaultUnit);
126
+ }
127
+ catch {
128
+ errors.push(`Invalid dimension for parameter "${name}": ${value}`);
129
+ }
130
+ }
131
+ if (type === 'number' && typeof value !== 'number') {
132
+ errors.push(`Parameter "${name}" must be a number`);
133
+ }
134
+ if (type === 'boolean' && typeof value !== 'boolean') {
135
+ errors.push(`Parameter "${name}" must be a boolean`);
136
+ }
137
+ if (type === 'enum' && typeof paramDef === 'object' && paramDef.values) {
138
+ if (!paramDef.values.includes(value)) {
139
+ errors.push(`Parameter "${name}" must be one of: ${paramDef.values.join(', ')}`);
140
+ }
141
+ }
142
+ // Constraint validation for dimension/number
143
+ if (typeof paramDef === 'object') {
144
+ const numericValue = this.getNumericValue(value, type);
145
+ if (paramDef.min !== undefined && numericValue !== null) {
146
+ const minValue = this.getNumericValue(paramDef.min, type);
147
+ if (minValue !== null && numericValue < minValue) {
148
+ errors.push(`Parameter "${name}" must be at least ${paramDef.min}`);
149
+ }
150
+ }
151
+ if (paramDef.max !== undefined && numericValue !== null) {
152
+ const maxValue = this.getNumericValue(paramDef.max, type);
153
+ if (maxValue !== null && numericValue > maxValue) {
154
+ errors.push(`Parameter "${name}" must be at most ${paramDef.max}`);
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ return errors;
161
+ }
162
+ /**
163
+ * Instantiate a template with given parameters
164
+ */
165
+ instantiate(templateName, instanceId, params, materials = {}) {
166
+ const template = this.templates.get(templateName);
167
+ if (!template) {
168
+ throw new Error(`Template not found: ${templateName}`);
169
+ }
170
+ // Validate parameters
171
+ const errors = this.validateParams(template, params);
172
+ if (errors.length > 0) {
173
+ throw new Error(`Template validation failed:\n${errors.join('\n')}`);
174
+ }
175
+ // Merge with defaults
176
+ const mergedParams = {
177
+ ...template.defaults,
178
+ ...params,
179
+ };
180
+ // Create formula context for parameter substitution
181
+ const contextVars = {};
182
+ for (const [key, value] of Object.entries(mergedParams)) {
183
+ if (typeof value === 'boolean') {
184
+ contextVars[key] = value ? 1 : 0;
185
+ }
186
+ else {
187
+ contextVars[key] = value;
188
+ }
189
+ }
190
+ // Add computed values
191
+ if (template.computed) {
192
+ for (const [key, formula] of Object.entries(template.computed)) {
193
+ contextVars[key] = formula;
194
+ }
195
+ }
196
+ const context = (0, formulas_1.createContext)(contextVars, this.defaultUnit);
197
+ // Process template parts
198
+ const parts = [];
199
+ const joinery = [];
200
+ for (const templatePart of template.parts) {
201
+ // Handle repeat
202
+ if (templatePart.repeat !== undefined) {
203
+ const repeatCount = typeof templatePart.repeat === 'number'
204
+ ? templatePart.repeat
205
+ : this.evaluateNumber(templatePart.repeat, context);
206
+ for (let i = 0; i < repeatCount; i++) {
207
+ // Create context with loop variable
208
+ const loopContext = (0, formulas_1.createContext)({
209
+ ...contextVars,
210
+ [templatePart.as || 'i']: i,
211
+ }, this.defaultUnit);
212
+ const result = this.processTemplatePart(templatePart, `${instanceId}.${this.substituteParams(templatePart.id, loopContext)}`, loopContext, materials);
213
+ if (result) {
214
+ if (Array.isArray(result)) {
215
+ parts.push(...result);
216
+ }
217
+ else {
218
+ parts.push(result);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ else {
224
+ const result = this.processTemplatePart(templatePart, `${instanceId}.${templatePart.id}`, context, materials);
225
+ if (result) {
226
+ if (Array.isArray(result)) {
227
+ parts.push(...result);
228
+ }
229
+ else {
230
+ parts.push(result);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ // Process joinery
236
+ if (template.joinery) {
237
+ for (const templateJoint of template.joinery) {
238
+ const joint = this.processTemplateJoint(templateJoint, instanceId, context);
239
+ joinery.push(joint);
240
+ }
241
+ }
242
+ return { parts, joinery };
243
+ }
244
+ /**
245
+ * Process a nested template reference
246
+ */
247
+ processNestedTemplate(templatePart, fullId, parentContext, materials) {
248
+ const nestedTemplateName = templatePart.use;
249
+ const nestedTemplate = this.templates.get(nestedTemplateName);
250
+ if (!nestedTemplate) {
251
+ throw new Error(`Nested template not found: ${nestedTemplateName}`);
252
+ }
253
+ // Build params for the nested template by substituting from parent context
254
+ const nestedParams = {};
255
+ if (templatePart.params) {
256
+ for (const [key, value] of Object.entries(templatePart.params)) {
257
+ if (typeof value === 'string') {
258
+ // Substitute any ${...} references from parent context
259
+ nestedParams[key] = this.substituteParams(value, parentContext);
260
+ }
261
+ else {
262
+ nestedParams[key] = value;
263
+ }
264
+ }
265
+ }
266
+ // Recursively instantiate the nested template
267
+ const instanceId = fullId;
268
+ const result = this.instantiate(nestedTemplateName, instanceId, nestedParams, materials);
269
+ return result.parts;
270
+ }
271
+ /**
272
+ * Process a single template part into a Part
273
+ * Returns array for nested templates (which may produce multiple parts)
274
+ */
275
+ processTemplatePart(templatePart, fullId, context, materials) {
276
+ // Handle nested template use
277
+ if (templatePart.use) {
278
+ return this.processNestedTemplate(templatePart, fullId, context, materials);
279
+ }
280
+ const part = {
281
+ id: fullId,
282
+ name: templatePart.name ? this.substituteParams(templatePart.name, context) : undefined,
283
+ material: templatePart.material ? this.substituteParams(templatePart.material, context) : undefined,
284
+ quantity: templatePart.quantity !== undefined
285
+ ? (typeof templatePart.quantity === 'number'
286
+ ? templatePart.quantity
287
+ : this.evaluateNumber(templatePart.quantity, context))
288
+ : 1,
289
+ grain: templatePart.grain,
290
+ notes: templatePart.notes ? this.substituteParams(templatePart.notes, context) : undefined,
291
+ };
292
+ if (templatePart.dimensions) {
293
+ part.dimensions = {
294
+ length: templatePart.dimensions.length
295
+ ? this.substituteParams(templatePart.dimensions.length, context)
296
+ : undefined,
297
+ width: templatePart.dimensions.width
298
+ ? this.substituteParams(templatePart.dimensions.width, context)
299
+ : undefined,
300
+ depth: templatePart.dimensions.depth
301
+ ? this.substituteParams(templatePart.dimensions.depth, context)
302
+ : undefined,
303
+ thickness: templatePart.dimensions.thickness
304
+ ? this.substituteParams(templatePart.dimensions.thickness, context)
305
+ : undefined,
306
+ };
307
+ }
308
+ return part;
309
+ }
310
+ /**
311
+ * Process a template joint into a Joint
312
+ */
313
+ processTemplateJoint(templateJoint, instanceId, context) {
314
+ const joint = {
315
+ type: this.substituteParams(templateJoint.type, context),
316
+ };
317
+ if (templateJoint.parts) {
318
+ joint.parts = templateJoint.parts.map(p => `${instanceId}.${p}`);
319
+ }
320
+ if (templateJoint.depth) {
321
+ joint.depth = this.substituteParams(templateJoint.depth, context);
322
+ }
323
+ if (templateJoint.ratio) {
324
+ joint.ratio = this.substituteParams(templateJoint.ratio, context);
325
+ }
326
+ return joint;
327
+ }
328
+ /**
329
+ * Substitute ${param} references in a string
330
+ */
331
+ substituteParams(template, context) {
332
+ // First pass: substitute simple variable references
333
+ let processed = template.replace(/\$\{([^}]+)\}/g, (_, expr) => {
334
+ // Handle null coalescing: ${a ?? b}
335
+ if (expr.includes('??')) {
336
+ const [primary, fallback] = expr.split('??').map((s) => s.trim());
337
+ const val = context.variables.get(primary);
338
+ if (val !== undefined) {
339
+ if (typeof val === 'number') {
340
+ return String(val);
341
+ }
342
+ if (typeof val === 'string') {
343
+ return val;
344
+ }
345
+ return val.original;
346
+ }
347
+ return fallback;
348
+ }
349
+ // Check if it's a simple variable reference
350
+ const varName = expr.trim();
351
+ const value = context.variables.get(varName);
352
+ if (value !== undefined) {
353
+ if (typeof value === 'number') {
354
+ return String(value);
355
+ }
356
+ if (typeof value === 'string') {
357
+ return value;
358
+ }
359
+ return value.original;
360
+ }
361
+ // Keep as formula reference if not found directly
362
+ return `$${varName}`;
363
+ });
364
+ // If no formula markers remain, return as-is
365
+ if (!processed.includes('$')) {
366
+ return processed;
367
+ }
368
+ // Evaluate the expression
369
+ try {
370
+ const result = (0, formulas_1.evaluateFormula)(processed, context);
371
+ if (typeof result === 'number') {
372
+ return String(result);
373
+ }
374
+ return result.original;
375
+ }
376
+ catch {
377
+ // If evaluation fails, return the processed string
378
+ return processed;
379
+ }
380
+ }
381
+ /**
382
+ * Evaluate an expression to a number
383
+ */
384
+ evaluateNumber(expr, context) {
385
+ const processed = expr.replace(/\$\{([^}]+)\}/g, '$$$1');
386
+ const result = (0, formulas_1.evaluateFormula)(processed, context);
387
+ if (typeof result === 'number') {
388
+ return result;
389
+ }
390
+ return result.value;
391
+ }
392
+ /**
393
+ * Get numeric value from a param value for constraint comparison
394
+ */
395
+ getNumericValue(value, type) {
396
+ if (typeof value === 'number') {
397
+ return value;
398
+ }
399
+ if (typeof value === 'boolean') {
400
+ return value ? 1 : 0;
401
+ }
402
+ if (typeof value === 'string') {
403
+ if (type === 'dimension') {
404
+ try {
405
+ const dim = (0, units_1.parseDimension)(value, this.defaultUnit);
406
+ return dim.value;
407
+ }
408
+ catch {
409
+ return null;
410
+ }
411
+ }
412
+ // Try parsing as number
413
+ const num = parseFloat(value);
414
+ return isNaN(num) ? null : num;
415
+ }
416
+ return null;
417
+ }
418
+ /**
419
+ * Get a registered template
420
+ */
421
+ getTemplate(name) {
422
+ return this.templates.get(name);
423
+ }
424
+ /**
425
+ * List all registered templates
426
+ */
427
+ listTemplates() {
428
+ return Array.from(this.templates.keys());
429
+ }
430
+ }
431
+ exports.TemplateParser = TemplateParser;
432
+ // ============================================
433
+ // CONVENIENCE FUNCTIONS
434
+ // ============================================
435
+ /**
436
+ * Parse template from YAML string
437
+ */
438
+ function parseTemplate(yaml, parser) {
439
+ // Note: In real implementation, would use yaml parser
440
+ throw new Error('Use TemplateParser.parseTemplateDefinition with parsed YAML object');
441
+ }
442
+ /**
443
+ * Create a new template parser
444
+ */
445
+ function createTemplateParser(defaultUnit = 'imperial') {
446
+ return new TemplateParser(defaultUnit);
447
+ }
448
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit Tests for WoodML Template System
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=templates.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../src/templates.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}