@tannerbroberts/about-time-core 0.1.0 → 0.2.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 (54) hide show
  1. package/README.md +104 -16
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/templates/createBusyTemplate.d.ts +1 -0
  7. package/dist/templates/createBusyTemplate.d.ts.map +1 -1
  8. package/dist/templates/createBusyTemplate.js +4 -0
  9. package/dist/templates/createBusyTemplate.js.map +1 -1
  10. package/dist/templates/createLaneTemplate.d.ts +1 -0
  11. package/dist/templates/createLaneTemplate.d.ts.map +1 -1
  12. package/dist/templates/createLaneTemplate.js +4 -0
  13. package/dist/templates/createLaneTemplate.js.map +1 -1
  14. package/dist/templates/index.d.ts +4 -5
  15. package/dist/templates/index.d.ts.map +1 -1
  16. package/dist/templates/index.js +7 -2
  17. package/dist/templates/index.js.map +1 -1
  18. package/dist/templates/layout/addSegmentToEnd.d.ts.map +1 -1
  19. package/dist/templates/layout/addSegmentToEnd.js +6 -0
  20. package/dist/templates/layout/addSegmentToEnd.js.map +1 -1
  21. package/dist/templates/layout/applyLaneLayout.d.ts.map +1 -1
  22. package/dist/templates/layout/applyLaneLayout.js +4 -1
  23. package/dist/templates/layout/applyLaneLayout.js.map +1 -1
  24. package/dist/templates/layout/fitLaneDurationToLast.d.ts.map +1 -1
  25. package/dist/templates/layout/fitLaneDurationToLast.js +3 -0
  26. package/dist/templates/layout/fitLaneDurationToLast.js.map +1 -1
  27. package/dist/templates/layout/index.d.ts +2 -0
  28. package/dist/templates/layout/index.d.ts.map +1 -1
  29. package/dist/templates/layout/index.js +2 -0
  30. package/dist/templates/layout/index.js.map +1 -1
  31. package/dist/templates/layout/insertGap.d.ts +3 -3
  32. package/dist/templates/layout/insertGap.d.ts.map +1 -1
  33. package/dist/templates/layout/insertGap.js +7 -13
  34. package/dist/templates/layout/insertGap.js.map +1 -1
  35. package/dist/templates/layout/insertSegmentAt.d.ts.map +1 -1
  36. package/dist/templates/layout/insertSegmentAt.js +3 -0
  37. package/dist/templates/layout/insertSegmentAt.js.map +1 -1
  38. package/dist/templates/layout/pushSegmentToStart.d.ts.map +1 -1
  39. package/dist/templates/layout/pushSegmentToStart.js +3 -0
  40. package/dist/templates/layout/pushSegmentToStart.js.map +1 -1
  41. package/dist/templates/layout/visualizeLane.d.ts +31 -0
  42. package/dist/templates/layout/visualizeLane.d.ts.map +1 -0
  43. package/dist/templates/layout/visualizeLane.js +163 -0
  44. package/dist/templates/layout/visualizeLane.js.map +1 -0
  45. package/dist/templates/layout/visualizeLaneIds.d.ts +28 -0
  46. package/dist/templates/layout/visualizeLaneIds.d.ts.map +1 -0
  47. package/dist/templates/layout/visualizeLaneIds.js +176 -0
  48. package/dist/templates/layout/visualizeLaneIds.js.map +1 -0
  49. package/dist/types/validation.d.ts +8 -1
  50. package/dist/types/validation.d.ts.map +1 -1
  51. package/dist/validation/validateLane.d.ts.map +1 -1
  52. package/dist/validation/validateLane.js +10 -0
  53. package/dist/validation/validateLane.js.map +1 -1
  54. package/package.json +5 -1
package/README.md CHANGED
@@ -8,41 +8,129 @@ Core template operations and validation for about-time.
8
8
  npm install @tannerbroberts/about-time-core
9
9
  ```
10
10
 
11
+ ## Core Concepts
12
+
13
+ Templates represent scheduled activities. There are two types:
14
+
15
+ - **BusyTemplate**: An atomic task with a duration (e.g., "Boil water for 5 minutes")
16
+ - **LaneTemplate**: A container that holds other templates at specific time offsets
17
+
18
+ ### Visual Representation
19
+
20
+ > ⚠️ **Note**: The `visualizeLane` function is a **debugging/development utility only**. It's useful for understanding lane structures during development, but production applications should use a proper frontend UI for visualization.
21
+
22
+ Templates can be visualized using ASCII art where each character represents 1 second:
23
+
24
+ ```
25
+ █░██ ← grandchild busy templates
26
+ ░______░░░░ ← child lane segment
27
+ ____________ ← root lane (12 seconds)
28
+ ```
29
+
30
+ Legend:
31
+ - `█` = busy template (active work)
32
+ - `_` = lane template (container)
33
+ - `░` = empty space (gap within a lane)
34
+ - ` ` = outside the lane's span
35
+
11
36
  ## Usage
12
37
 
13
38
  ```typescript
14
39
  import {
15
40
  createBusyTemplate,
16
41
  createLaneTemplate,
17
- validateLane,
18
- validateVariableNames,
42
+ visualizeLane,
19
43
  TemplateMap,
20
44
  } from '@tannerbroberts/about-time-core';
21
45
 
22
- // Initialize template storage
23
46
  const templates: TemplateMap = {};
24
47
 
25
- // Create a busy template (mutates templates map in place)
26
- const template = createBusyTemplate({
48
+ // Create busy templates
49
+ const prep = createBusyTemplate({
50
+ intent: 'Prep ingredients',
51
+ estimatedDuration: 2000, // 2 seconds
52
+ }, templates, crypto.randomUUID);
53
+
54
+ const cook = createBusyTemplate({
55
+ intent: 'Cook',
56
+ estimatedDuration: 3000, // 3 seconds
57
+ }, templates, crypto.randomUUID);
58
+
59
+ // Create a lane to organize the tasks
60
+ const recipe = createLaneTemplate({
61
+ intent: 'Make dinner',
62
+ estimatedDuration: 8000, // 8 seconds
63
+ segments: [
64
+ { templateId: prep.id, relationshipId: 'r1', offset: 0 },
65
+ { templateId: cook.id, relationshipId: 'r2', offset: 3000 },
66
+ ],
67
+ }, templates, crypto.randomUUID);
68
+
69
+ // Visualize the lane
70
+ console.log(visualizeLane(recipe.id, templates));
71
+ // Output:
72
+ // ██░███░░
73
+ // ________
74
+ ```
75
+
76
+ ### Nested Lanes
77
+
78
+ Lanes can contain other lanes, enabling complex scheduling hierarchies:
79
+
80
+ ```typescript
81
+ const task = createBusyTemplate({
82
+ intent: 'Task',
83
+ estimatedDuration: 1000,
84
+ }, templates, crypto.randomUUID);
85
+
86
+ const innerLane = createLaneTemplate({
87
+ intent: 'Inner',
88
+ estimatedDuration: 2000,
89
+ segments: [{ templateId: task.id, relationshipId: 'r1', offset: 0 }],
90
+ }, templates, crypto.randomUUID);
91
+
92
+ const middleLane = createLaneTemplate({
93
+ intent: 'Middle',
94
+ estimatedDuration: 4000,
95
+ segments: [{ templateId: innerLane.id, relationshipId: 'r2', offset: 1000 }],
96
+ }, templates, crypto.randomUUID);
97
+
98
+ const rootLane = createLaneTemplate({
99
+ intent: 'Root',
100
+ estimatedDuration: 6000,
101
+ segments: [{ templateId: middleLane.id, relationshipId: 'r3', offset: 1000 }],
102
+ }, templates, crypto.randomUUID);
103
+
104
+ console.log(visualizeLane(rootLane.id, templates));
105
+ // Output:
106
+ // █░ ← task (deepest)
107
+ // ░__░ ← inner lane
108
+ // ░____░ ← middle lane
109
+ // ______ ← root lane
110
+ ```
111
+
112
+ ### Resource Management
113
+
114
+ Templates can track resource consumption and production:
115
+
116
+ ```typescript
117
+ const boilWater = createBusyTemplate({
27
118
  intent: 'Boil water',
28
- estimatedDuration: 300000,
119
+ estimatedDuration: 5000,
29
120
  willConsume: { water_cups: 2, clean_pot: 1 },
30
121
  willProduce: { boiling_water_cups: 2 },
31
122
  }, templates, crypto.randomUUID);
32
-
33
- // Validate variable names
34
- const validation = validateVariableNames(template.willConsume);
35
- if (!validation.isValid) {
36
- console.error(validation.errors);
37
- }
38
123
  ```
39
124
 
40
125
  ## Exports
41
126
 
42
- - `@tannerbroberts/about-time-core` - Everything
43
- - `@tannerbroberts/about-time-core/types` - Type definitions only
44
- - `@tannerbroberts/about-time-core/templates` - Template CRUD + layout operations
45
- - `@tannerbroberts/about-time-core/validation` - Validation functions
127
+ | Path | Description |
128
+ |------|-------------|
129
+ | `@tannerbroberts/about-time-core` | Everything |
130
+ | `@tannerbroberts/about-time-core/types` | Type definitions only |
131
+ | `@tannerbroberts/about-time-core/templates` | Template CRUD + layout operations |
132
+ | `@tannerbroberts/about-time-core/layout` | Layout utilities only (visualizeLane, packSegments, etc.) |
133
+ | `@tannerbroberts/about-time-core/validation` | Validation functions |
46
134
 
47
135
  ## Documentation
48
136
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './types/index.js';
2
2
  export * from './templates/index.js';
3
3
  export * from './validation/index.js';
4
- export * from './templates/layout/index.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  // Types
2
2
  export * from './types/index.js';
3
- // Template operations
3
+ // Template operations (CRUD + Layout)
4
4
  export * from './templates/index.js';
5
5
  // Validation
6
6
  export * from './validation/index.js';
7
- // Layout utilities
8
- export * from './templates/layout/index.js';
9
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,sBAAsB;AACtB,cAAc,sBAAsB,CAAC;AAErC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,mBAAmB;AACnB,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,sCAAsC;AACtC,cAAc,sBAAsB,CAAC;AAErC,aAAa;AACb,cAAc,uBAAuB,CAAC"}
@@ -15,6 +15,7 @@ export type IdGenerator = () => string;
15
15
  * @param templates - Template map to add to (mutated in place)
16
16
  * @param generateId - Function to generate unique IDs (e.g., crypto.randomUUID)
17
17
  * @returns The created BusyTemplate
18
+ * @throws Error if estimatedDuration is 0 or not specified
18
19
  */
19
20
  export declare function createBusyTemplate(input: CreateBusyTemplateInput, templates: TemplateMap, generateId: IdGenerator): BusyTemplate;
20
21
  //# sourceMappingURL=createBusyTemplate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createBusyTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/createBusyTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEhG,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;AAEvC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,WAAW,GACtB,YAAY,CAcd"}
1
+ {"version":3,"file":"createBusyTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/createBusyTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEhG,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;AAEvC;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,WAAW,GACtB,YAAY,CAkBd"}
@@ -6,8 +6,12 @@
6
6
  * @param templates - Template map to add to (mutated in place)
7
7
  * @param generateId - Function to generate unique IDs (e.g., crypto.randomUUID)
8
8
  * @returns The created BusyTemplate
9
+ * @throws Error if estimatedDuration is 0 or not specified
9
10
  */
10
11
  export function createBusyTemplate(input, templates, generateId) {
12
+ if (!input.estimatedDuration || input.estimatedDuration <= 0) {
13
+ throw new Error('Template duration must be greater than 0');
14
+ }
11
15
  const template = {
12
16
  templateType: 'busy',
13
17
  id: generateId(),
@@ -1 +1 @@
1
- {"version":3,"file":"createBusyTemplate.js","sourceRoot":"","sources":["../../src/templates/createBusyTemplate.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B,EAC9B,SAAsB,EACtB,UAAuB;IAEvB,MAAM,QAAQ,GAAiB;QAC7B,YAAY,EAAE,MAAM;QACpB,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;QACrC,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"createBusyTemplate.js","sourceRoot":"","sources":["../../src/templates/createBusyTemplate.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B,EAC9B,SAAsB,EACtB,UAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAiB;QAC7B,YAAY,EAAE,MAAM;QACpB,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;QACrC,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -14,6 +14,7 @@ export type IdGenerator = () => string;
14
14
  * @param templates - Template map to add to (mutated in place)
15
15
  * @param generateId - Function to generate unique IDs
16
16
  * @returns The created LaneTemplate
17
+ * @throws Error if estimatedDuration is 0 or not specified
17
18
  */
18
19
  export declare function createLaneTemplate(input: CreateLaneTemplateInput, templates: TemplateMap, generateId: IdGenerator): LaneTemplate;
19
20
  //# sourceMappingURL=createLaneTemplate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createLaneTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/createLaneTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5F,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;AAEvC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,WAAW,GACtB,YAAY,CAwBd"}
1
+ {"version":3,"file":"createLaneTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/createLaneTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5F,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;AAEvC;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,WAAW,GACtB,YAAY,CA4Bd"}
@@ -6,8 +6,12 @@
6
6
  * @param templates - Template map to add to (mutated in place)
7
7
  * @param generateId - Function to generate unique IDs
8
8
  * @returns The created LaneTemplate
9
+ * @throws Error if estimatedDuration is 0 or not specified
9
10
  */
10
11
  export function createLaneTemplate(input, templates, generateId) {
12
+ if (!input.estimatedDuration || input.estimatedDuration <= 0) {
13
+ throw new Error('Template duration must be greater than 0');
14
+ }
11
15
  const template = {
12
16
  templateType: 'lane',
13
17
  id: generateId(),
@@ -1 +1 @@
1
- {"version":3,"file":"createLaneTemplate.js","sourceRoot":"","sources":["../../src/templates/createLaneTemplate.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B,EAC9B,SAAsB,EACtB,UAAuB;IAEvB,MAAM,QAAQ,GAAiB;QAC7B,YAAY,EAAE,MAAM;QACpB,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;KAC9C,CAAC;IAEF,+DAA+D;IAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,cAAc,EAAE,OAAO,CAAC,cAAc;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"createLaneTemplate.js","sourceRoot":"","sources":["../../src/templates/createLaneTemplate.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B,EAC9B,SAAsB,EACtB,UAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAiB;QAC7B,YAAY,EAAE,MAAM;QACpB,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;KAC9C,CAAC;IAEF,+DAA+D;IAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,cAAc,EAAE,OAAO,CAAC,cAAc;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,16 +1,15 @@
1
1
  export { createBusyTemplate } from './createBusyTemplate.js';
2
- export type { CreateBusyTemplateInput } from './createBusyTemplate.js';
2
+ export type { CreateBusyTemplateInput, IdGenerator } from './createBusyTemplate.js';
3
3
  export { createLaneTemplate } from './createLaneTemplate.js';
4
4
  export type { CreateLaneTemplateInput } from './createLaneTemplate.js';
5
5
  export { getTemplateById } from './getTemplateById.js';
6
6
  export { getTemplates } from './getTemplates.js';
7
7
  export type { GetTemplatesOptions } from './getTemplates.js';
8
8
  export { searchTemplates } from './searchTemplates.js';
9
+ export { getVocabulary } from './getVocabulary.js';
9
10
  export { updateTemplate } from './updateTemplate.js';
10
- export type { UpdateTemplateResult, TemplateUpdates } from './updateTemplate.js';
11
+ export type { BusyTemplateUpdates, LaneTemplateUpdates, TemplateUpdates, UpdateTemplateResult, } from './updateTemplate.js';
12
+ export * from './layout/index.js';
11
13
  export { deleteTemplate } from './deleteTemplate.js';
12
14
  export type { DeleteTemplateResult } from './deleteTemplate.js';
13
- export { getVocabulary } from './getVocabulary.js';
14
- export * from './layout/index.js';
15
- export type { IdGenerator } from './createBusyTemplate.js';
16
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,cAAc,mBAAmB,CAAC;AAElC,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAG7B,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,10 +1,15 @@
1
+ // ==================== CREATE ====================
1
2
  export { createBusyTemplate } from './createBusyTemplate.js';
2
3
  export { createLaneTemplate } from './createLaneTemplate.js';
4
+ // ==================== READ ====================
3
5
  export { getTemplateById } from './getTemplateById.js';
4
6
  export { getTemplates } from './getTemplates.js';
5
7
  export { searchTemplates } from './searchTemplates.js';
6
- export { updateTemplate } from './updateTemplate.js';
7
- export { deleteTemplate } from './deleteTemplate.js';
8
8
  export { getVocabulary } from './getVocabulary.js';
9
+ // ==================== UPDATE ====================
10
+ export { updateTemplate } from './updateTemplate.js';
11
+ // Layout helpers (Update operations)
9
12
  export * from './layout/index.js';
13
+ // ==================== DELETE ====================
14
+ export { deleteTemplate } from './deleteTemplate.js';
10
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,iDAAiD;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,qCAAqC;AACrC,cAAc,mBAAmB,CAAC;AAElC,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"addSegmentToEnd.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/addSegmentToEnd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGlG;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CAmCrB"}
1
+ {"version":3,"file":"addSegmentToEnd.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/addSegmentToEnd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGlG;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CA0CrB"}
@@ -14,11 +14,17 @@ export function addSegmentToEnd(laneId, childId, relationshipId, templates) {
14
14
  if (!lane || !isLaneTemplate(lane) || !child) {
15
15
  return null;
16
16
  }
17
+ if (child.estimatedDuration <= 0) {
18
+ throw new Error(`Template "${child.intent}" (${child.id}) has zero or negative duration`);
19
+ }
17
20
  // Calculate current end time
18
21
  let maxEndTime = 0;
19
22
  for (const segment of lane.segments) {
20
23
  const segmentChild = templates[segment.templateId];
21
24
  if (segmentChild) {
25
+ if (segmentChild.estimatedDuration <= 0) {
26
+ throw new Error(`Template "${segmentChild.intent}" (${segmentChild.id}) has zero or negative duration`);
27
+ }
22
28
  const endTime = segment.offset + segmentChild.estimatedDuration;
23
29
  if (endTime > maxEndTime) {
24
30
  maxEndTime = endTime;
@@ -1 +1 @@
1
- {"version":3,"file":"addSegmentToEnd.js","sourceRoot":"","sources":["../../../src/templates/layout/addSegmentToEnd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,OAAmB,EACnB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC;YAChE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,UAAU,GAAG,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM,EAAE,UAAU;KACnB,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE/B,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"addSegmentToEnd.js","sourceRoot":"","sources":["../../../src/templates/layout/addSegmentToEnd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,OAAmB,EACnB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;IAC5F,CAAC;IAED,6BAA6B;IAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,CAAC,MAAM,MAAM,YAAY,CAAC,EAAE,iCAAiC,CAAC,CAAC;YAC1G,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC;YAChE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,UAAU,GAAG,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM,EAAE,UAAU;KACnB,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE/B,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"applyLaneLayout.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/applyLaneLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5F,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC;IAChG,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,iBAAsB,GAC9B,YAAY,GAAG,IAAI,CAqErB"}
1
+ {"version":3,"file":"applyLaneLayout.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/applyLaneLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5F,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC;IAChG,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,iBAAsB,GAC9B,YAAY,GAAG,IAAI,CAwErB"}
@@ -19,9 +19,12 @@ export function applyLaneLayout(laneId, templates, options = {}) {
19
19
  const { justifyContent = 'start', gap = 0 } = options;
20
20
  // Sort segments by current offset to maintain relative order
21
21
  const sortedSegments = [...lane.segments].sort((a, b) => a.offset - b.offset);
22
- // Calculate total duration of children
22
+ // Calculate total duration of children (throw if zero-duration found)
23
23
  const childDurations = sortedSegments.map(s => {
24
24
  const child = templates[s.templateId];
25
+ if (child && child.estimatedDuration <= 0) {
26
+ throw new Error(`Template "${child.intent}" (${child.id}) has zero or negative duration`);
27
+ }
25
28
  return child ? child.estimatedDuration : 0;
26
29
  });
27
30
  const totalChildDuration = childDurations.reduce((sum, d) => sum + d, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"applyLaneLayout.js","sourceRoot":"","sources":["../../../src/templates/layout/applyLaneLayout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"applyLaneLayout.js","sourceRoot":"","sources":["../../../src/templates/layout/applyLaneLayout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fitLaneDurationToLast.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/fitLaneDurationToLast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGlF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CAwBrB"}
1
+ {"version":3,"file":"fitLaneDurationToLast.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/fitLaneDurationToLast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGlF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CA2BrB"}
@@ -20,6 +20,9 @@ export function fitLaneDurationToLast(laneId, templates) {
20
20
  for (const segment of lane.segments) {
21
21
  const child = templates[segment.templateId];
22
22
  if (child) {
23
+ if (child.estimatedDuration <= 0) {
24
+ throw new Error(`Template "${child.intent}" (${child.id}) has zero or negative duration`);
25
+ }
23
26
  const endTime = segment.offset + child.estimatedDuration;
24
27
  if (endTime > maxEndTime) {
25
28
  maxEndTime = endTime;
@@ -1 +1 @@
1
- {"version":3,"file":"fitLaneDurationToLast.js","sourceRoot":"","sources":["../../../src/templates/layout/fitLaneDurationToLast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAkB,EAClB,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC;YACzD,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,UAAU,GAAG,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"fitLaneDurationToLast.js","sourceRoot":"","sources":["../../../src/templates/layout/fitLaneDurationToLast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAkB,EAClB,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC;YACzD,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,UAAU,GAAG,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -7,4 +7,6 @@ export * from './insertGap.js';
7
7
  export * from './addSegmentToEnd.js';
8
8
  export * from './pushSegmentToStart.js';
9
9
  export * from './insertSegmentAt.js';
10
+ export * from './visualizeLane.js';
11
+ export * from './visualizeLaneIds.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -7,4 +7,6 @@ export * from './insertGap.js';
7
7
  export * from './addSegmentToEnd.js';
8
8
  export * from './pushSegmentToStart.js';
9
9
  export * from './insertSegmentAt.js';
10
+ export * from './visualizeLane.js';
11
+ export * from './visualizeLaneIds.js';
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import type { TemplateId, TemplateMap, LaneTemplate, Duration } from '../../types/index.js';
2
2
  /**
3
- * Adds empty space after a specific segment by shifting all subsequent segments.
3
+ * Inserts empty space before a specific segment by shifting it and all subsequent segments.
4
4
  *
5
5
  * @param laneId - ID of the lane
6
- * @param afterSegmentIndex - Index of the segment after which to insert the gap
6
+ * @param beforeSegmentIndex - Index of the segment before which to insert the gap
7
7
  * @param gapDuration - Duration of the gap to insert
8
8
  * @param templates - Template map (mutated in place)
9
9
  * @returns The updated LaneTemplate or null
10
10
  */
11
- export declare function insertGap(laneId: TemplateId, afterSegmentIndex: number, gapDuration: Duration, templates: TemplateMap): LaneTemplate | null;
11
+ export declare function insertGap(laneId: TemplateId, beforeSegmentIndex: number, gapDuration: Duration, templates: TemplateMap): LaneTemplate | null;
12
12
  //# sourceMappingURL=insertGap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insertGap.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/insertGap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5F;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CA0BrB"}
1
+ {"version":3,"file":"insertGap.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/insertGap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5F;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,MAAM,EAC1B,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CAoBrB"}
@@ -1,30 +1,24 @@
1
1
  import { isLaneTemplate } from '../../types/template.js';
2
2
  /**
3
- * Adds empty space after a specific segment by shifting all subsequent segments.
3
+ * Inserts empty space before a specific segment by shifting it and all subsequent segments.
4
4
  *
5
5
  * @param laneId - ID of the lane
6
- * @param afterSegmentIndex - Index of the segment after which to insert the gap
6
+ * @param beforeSegmentIndex - Index of the segment before which to insert the gap
7
7
  * @param gapDuration - Duration of the gap to insert
8
8
  * @param templates - Template map (mutated in place)
9
9
  * @returns The updated LaneTemplate or null
10
10
  */
11
- export function insertGap(laneId, afterSegmentIndex, gapDuration, templates) {
11
+ export function insertGap(laneId, beforeSegmentIndex, gapDuration, templates) {
12
12
  const lane = templates[laneId];
13
13
  if (!lane || !isLaneTemplate(lane)) {
14
14
  return null;
15
15
  }
16
- if (afterSegmentIndex < 0 || afterSegmentIndex >= lane.segments.length) {
16
+ if (beforeSegmentIndex < 0 || beforeSegmentIndex >= lane.segments.length) {
17
17
  return null;
18
18
  }
19
- const targetSegment = lane.segments[afterSegmentIndex];
20
- const child = templates[targetSegment.templateId];
21
- if (!child)
22
- return null;
23
- const shiftThreshold = targetSegment.offset + child.estimatedDuration;
24
- for (let i = 0; i < lane.segments.length; i++) {
25
- if (i === afterSegmentIndex)
26
- continue;
27
- const segment = lane.segments[i];
19
+ const targetSegment = lane.segments[beforeSegmentIndex];
20
+ const shiftThreshold = targetSegment.offset;
21
+ for (const segment of lane.segments) {
28
22
  if (segment.offset >= shiftThreshold) {
29
23
  segment.offset += gapDuration;
30
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"insertGap.js","sourceRoot":"","sources":["../../../src/templates/layout/insertGap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,MAAkB,EAClB,iBAAyB,EACzB,WAAqB,EACrB,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,iBAAiB,GAAG,CAAC,IAAI,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,iBAAiB;YAAE,SAAS;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"insertGap.js","sourceRoot":"","sources":["../../../src/templates/layout/insertGap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,MAAkB,EAClB,kBAA0B,EAC1B,WAAqB,EACrB,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,kBAAkB,GAAG,CAAC,IAAI,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"insertSegmentAt.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/insertSegmentAt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5G;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,QAAQ,EAChB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CA+BrB"}
1
+ {"version":3,"file":"insertSegmentAt.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/insertSegmentAt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5G;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,QAAQ,EAChB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CAmCrB"}
@@ -16,6 +16,9 @@ export function insertSegmentAt(laneId, childId, offset, relationshipId, templat
16
16
  if (!lane || !isLaneTemplate(lane) || !child) {
17
17
  return null;
18
18
  }
19
+ if (child.estimatedDuration <= 0) {
20
+ throw new Error(`Template "${child.intent}" (${child.id}) has zero or negative duration`);
21
+ }
19
22
  const shiftAmount = child.estimatedDuration;
20
23
  // Shift segments that start at or after the insertion offset
21
24
  for (const segment of lane.segments) {
@@ -1 +1 @@
1
- {"version":3,"file":"insertSegmentAt.js","sourceRoot":"","sources":["../../../src/templates/layout/insertSegmentAt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,OAAmB,EACnB,MAAgB,EAChB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAE5C,6DAA6D;IAC7D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM;KACP,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"insertSegmentAt.js","sourceRoot":"","sources":["../../../src/templates/layout/insertSegmentAt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,OAAmB,EACnB,MAAgB,EAChB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAE5C,6DAA6D;IAC7D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM;KACP,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pushSegmentToStart.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/pushSegmentToStart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGlG;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CA6BrB"}
1
+ {"version":3,"file":"pushSegmentToStart.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/pushSegmentToStart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGlG;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,WAAW,GACrB,YAAY,GAAG,IAAI,CAiCrB"}
@@ -15,6 +15,9 @@ export function pushSegmentToStart(laneId, childId, relationshipId, templates) {
15
15
  if (!lane || !isLaneTemplate(lane) || !child) {
16
16
  return null;
17
17
  }
18
+ if (child.estimatedDuration <= 0) {
19
+ throw new Error(`Template "${child.intent}" (${child.id}) has zero or negative duration`);
20
+ }
18
21
  const shiftAmount = child.estimatedDuration;
19
22
  // Shift existing segments
20
23
  for (const segment of lane.segments) {
@@ -1 +1 @@
1
- {"version":3,"file":"pushSegmentToStart.js","sourceRoot":"","sources":["../../../src/templates/layout/pushSegmentToStart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAkB,EAClB,OAAmB,EACnB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAE5C,0BAA0B;IAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;IAChC,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"pushSegmentToStart.js","sourceRoot":"","sources":["../../../src/templates/layout/pushSegmentToStart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAkB,EAClB,OAAmB,EACnB,cAA8B,EAC9B,SAAsB;IAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAE5C,0BAA0B;IAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;IAChC,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO;QACnB,cAAc;QACd,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { TemplateId, TemplateMap } from '../../types/index.js';
2
+ /**
3
+ * Generates a text-based visualization of a lane and its segments.
4
+ *
5
+ * **⚠️ DEBUG UTILITY ONLY** - This function is intended for development and
6
+ * debugging purposes. Production applications should use a proper frontend
7
+ * UI for visualization, not ASCII art.
8
+ *
9
+ * - 1 character = 1 second
10
+ * - `█` = busy template
11
+ * - `_` = lane template
12
+ * - `░` = empty space within a lane's span (gap)
13
+ * - ` ` = outside any lane's span at that level
14
+ *
15
+ * Segments render in layers above their parent lane, with the deepest
16
+ * children at the top and the root lane floor at the bottom.
17
+ *
18
+ * @param laneId - ID of the lane to visualize
19
+ * @param templates - Template map containing all referenced templates
20
+ * @returns Multi-line string visualization
21
+ * @throws Error if durations/offsets aren't whole seconds, overlaps exist, or templates are missing
22
+ *
23
+ * @example
24
+ * ```
25
+ * █░██ ← grandchild busy templates
26
+ * ░______░░░░ ← child lane segment
27
+ * ____________ ← root lane
28
+ * ```
29
+ */
30
+ export declare function visualizeLane(laneId: TemplateId, templates: TemplateMap): string;
31
+ //# sourceMappingURL=visualizeLane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizeLane.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/visualizeLane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,sBAAsB,CAAC;AAKlF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,GACrB,MAAM,CAgCR"}
@@ -0,0 +1,163 @@
1
+ import { isLaneTemplate, isBusyTemplate } from '../../types/template.js';
2
+ const MS_PER_CHAR = 1000;
3
+ /**
4
+ * Generates a text-based visualization of a lane and its segments.
5
+ *
6
+ * **⚠️ DEBUG UTILITY ONLY** - This function is intended for development and
7
+ * debugging purposes. Production applications should use a proper frontend
8
+ * UI for visualization, not ASCII art.
9
+ *
10
+ * - 1 character = 1 second
11
+ * - `█` = busy template
12
+ * - `_` = lane template
13
+ * - `░` = empty space within a lane's span (gap)
14
+ * - ` ` = outside any lane's span at that level
15
+ *
16
+ * Segments render in layers above their parent lane, with the deepest
17
+ * children at the top and the root lane floor at the bottom.
18
+ *
19
+ * @param laneId - ID of the lane to visualize
20
+ * @param templates - Template map containing all referenced templates
21
+ * @returns Multi-line string visualization
22
+ * @throws Error if durations/offsets aren't whole seconds, overlaps exist, or templates are missing
23
+ *
24
+ * @example
25
+ * ```
26
+ * █░██ ← grandchild busy templates
27
+ * ░______░░░░ ← child lane segment
28
+ * ____________ ← root lane
29
+ * ```
30
+ */
31
+ export function visualizeLane(laneId, templates) {
32
+ const lane = templates[laneId];
33
+ if (!lane) {
34
+ throw new Error(`Template "${laneId}" not found in templates map`);
35
+ }
36
+ if (!isLaneTemplate(lane)) {
37
+ throw new Error(`Template "${laneId}" is not a lane template`);
38
+ }
39
+ // Validate whole seconds
40
+ validateWholeSeconds(lane, templates);
41
+ // Validate no overlaps
42
+ validateNoOverlaps(lane, templates);
43
+ const width = lane.estimatedDuration / MS_PER_CHAR;
44
+ if (width > 20) {
45
+ throw new Error(`Lane duration exceeds 20 seconds (${width}s). Max supported is 20 seconds.`);
46
+ }
47
+ const layers = [];
48
+ // Add root lane floor (all underscores)
49
+ layers.push('_'.repeat(width));
50
+ // If root has segments, add children layers recursively
51
+ if (lane.segments.length > 0) {
52
+ addChildrenLayers(lane, templates, layers, 0, width);
53
+ }
54
+ // Reverse so deepest children are on top, root floor at bottom
55
+ return layers.reverse().join('\n');
56
+ }
57
+ /**
58
+ * Recursively adds visualization layers for a lane's children.
59
+ * Each layer is added to the array, then we recurse into lane children.
60
+ */
61
+ function addChildrenLayers(lane, templates, layers, globalOffset, totalWidth) {
62
+ const laneWidth = lane.estimatedDuration / MS_PER_CHAR;
63
+ // Build this lane's children layer
64
+ const layer = Array(totalWidth).fill(' ');
65
+ // Fill lane's span with ░ (represents empty space, will be overwritten by segments)
66
+ for (let i = globalOffset; i < globalOffset + laneWidth; i++) {
67
+ layer[i] = '░';
68
+ }
69
+ // Overlay segments
70
+ for (const segment of lane.segments) {
71
+ const child = templates[segment.templateId];
72
+ // Already validated in validateWholeSeconds
73
+ const segStart = globalOffset + segment.offset / MS_PER_CHAR;
74
+ const segDuration = child.estimatedDuration / MS_PER_CHAR;
75
+ const char = isBusyTemplate(child) ? '█' : '_';
76
+ for (let i = 0; i < segDuration; i++) {
77
+ layer[segStart + i] = char;
78
+ }
79
+ }
80
+ layers.push(layer.join(''));
81
+ // Recursively add children layers for lane children that have segments
82
+ for (const segment of lane.segments) {
83
+ const child = templates[segment.templateId];
84
+ if (isLaneTemplate(child) && child.segments.length > 0) {
85
+ const childGlobalOffset = globalOffset + segment.offset / MS_PER_CHAR;
86
+ addChildrenLayers(child, templates, layers, childGlobalOffset, totalWidth);
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Validates that all durations and offsets are whole seconds (divisible by 1000ms).
92
+ * Recursively validates all referenced templates.
93
+ */
94
+ function validateWholeSeconds(lane, templates, visited = new Set()) {
95
+ if (visited.has(lane.id)) {
96
+ return; // Avoid infinite loops on circular references
97
+ }
98
+ visited.add(lane.id);
99
+ if (lane.estimatedDuration % MS_PER_CHAR !== 0) {
100
+ throw new Error(`Lane "${lane.id}" has non-whole-second duration: ${lane.estimatedDuration}ms. ` +
101
+ `Duration must be divisible by ${MS_PER_CHAR}ms.`);
102
+ }
103
+ for (const segment of lane.segments) {
104
+ if (segment.offset % MS_PER_CHAR !== 0) {
105
+ throw new Error(`Segment in lane "${lane.id}" has non-whole-second offset: ${segment.offset}ms. ` +
106
+ `Offset must be divisible by ${MS_PER_CHAR}ms.`);
107
+ }
108
+ const child = templates[segment.templateId];
109
+ if (!child) {
110
+ throw new Error(`Segment references template "${segment.templateId}" which was not found in templates map`);
111
+ }
112
+ if (child.estimatedDuration <= 0) {
113
+ throw new Error(`Template "${child.id}" has zero or negative duration`);
114
+ }
115
+ if (child.estimatedDuration % MS_PER_CHAR !== 0) {
116
+ throw new Error(`Template "${child.id}" has non-whole-second duration: ${child.estimatedDuration}ms. ` +
117
+ `Duration must be divisible by ${MS_PER_CHAR}ms.`);
118
+ }
119
+ // Recursively validate lane children
120
+ if (isLaneTemplate(child)) {
121
+ validateWholeSeconds(child, templates, visited);
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Validates that no segments overlap within a lane.
127
+ * Recursively validates all lane children.
128
+ */
129
+ function validateNoOverlaps(lane, templates, visited = new Set()) {
130
+ if (visited.has(lane.id)) {
131
+ return;
132
+ }
133
+ visited.add(lane.id);
134
+ // Build a list of segment spans
135
+ const spans = [];
136
+ for (const segment of lane.segments) {
137
+ const child = templates[segment.templateId];
138
+ // Child existence already validated
139
+ const start = segment.offset;
140
+ const end = segment.offset + child.estimatedDuration;
141
+ spans.push({ start, end, templateId: segment.templateId });
142
+ }
143
+ // Sort by start time
144
+ spans.sort((a, b) => a.start - b.start);
145
+ // Check for overlaps
146
+ for (let i = 0; i < spans.length - 1; i++) {
147
+ const current = spans[i];
148
+ const next = spans[i + 1];
149
+ if (current.end > next.start) {
150
+ throw new Error(`Overlap detected in lane "${lane.id}": ` +
151
+ `segment "${current.templateId}" (ends at ${current.end}ms) ` +
152
+ `overlaps with segment "${next.templateId}" (starts at ${next.start}ms)`);
153
+ }
154
+ }
155
+ // Recursively validate lane children
156
+ for (const segment of lane.segments) {
157
+ const child = templates[segment.templateId];
158
+ if (isLaneTemplate(child)) {
159
+ validateNoOverlaps(child, templates, visited);
160
+ }
161
+ }
162
+ }
163
+ //# sourceMappingURL=visualizeLane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizeLane.js","sourceRoot":"","sources":["../../../src/templates/layout/visualizeLane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { TemplateId, TemplateMap } from '../../types/index.js';
2
+ /**
3
+ * Generates a text-based visualization of a lane showing only template IDs.
4
+ *
5
+ * **⚠️ DEBUG UTILITY ONLY** - This function is intended for development and
6
+ * debugging purposes. Production applications should use a proper frontend
7
+ * UI for visualization, not ASCII art.
8
+ *
9
+ * - 1 character = 1 second
10
+ * - Each template's ID character fills its duration
11
+ * - No gap characters, spaces, or lane markers - only IDs
12
+ * - Segments render in layers above their parent lane
13
+ *
14
+ * @param laneId - ID of the lane to visualize
15
+ * @param templates - Template map containing all referenced templates
16
+ * @returns Multi-line string visualization with only ID characters
17
+ * @throws Error if any template ID is not exactly 1 character
18
+ * @throws Error if durations/offsets aren't whole seconds, overlaps exist, or templates are missing
19
+ *
20
+ * @example
21
+ * ```
22
+ * CD ← grandchild segments
23
+ * BBBBB ← child lane segment
24
+ * AAAAAAAAA ← root lane
25
+ * ```
26
+ */
27
+ export declare function visualizeLaneIds(laneId: TemplateId, templates: TemplateMap): string;
28
+ //# sourceMappingURL=visualizeLaneIds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizeLaneIds.d.ts","sourceRoot":"","sources":["../../../src/templates/layout/visualizeLaneIds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,sBAAsB,CAAC;AAKlF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,WAAW,GACrB,MAAM,CAmCR"}
@@ -0,0 +1,176 @@
1
+ import { isLaneTemplate } from '../../types/template.js';
2
+ const MS_PER_CHAR = 1000;
3
+ /**
4
+ * Generates a text-based visualization of a lane showing only template IDs.
5
+ *
6
+ * **⚠️ DEBUG UTILITY ONLY** - This function is intended for development and
7
+ * debugging purposes. Production applications should use a proper frontend
8
+ * UI for visualization, not ASCII art.
9
+ *
10
+ * - 1 character = 1 second
11
+ * - Each template's ID character fills its duration
12
+ * - No gap characters, spaces, or lane markers - only IDs
13
+ * - Segments render in layers above their parent lane
14
+ *
15
+ * @param laneId - ID of the lane to visualize
16
+ * @param templates - Template map containing all referenced templates
17
+ * @returns Multi-line string visualization with only ID characters
18
+ * @throws Error if any template ID is not exactly 1 character
19
+ * @throws Error if durations/offsets aren't whole seconds, overlaps exist, or templates are missing
20
+ *
21
+ * @example
22
+ * ```
23
+ * CD ← grandchild segments
24
+ * BBBBB ← child lane segment
25
+ * AAAAAAAAA ← root lane
26
+ * ```
27
+ */
28
+ export function visualizeLaneIds(laneId, templates) {
29
+ const lane = templates[laneId];
30
+ if (!lane) {
31
+ throw new Error(`Template "${laneId}" not found in templates map`);
32
+ }
33
+ if (!isLaneTemplate(lane)) {
34
+ throw new Error(`Template "${laneId}" is not a lane template`);
35
+ }
36
+ // Validate single-character IDs
37
+ validateSingleCharIds(lane, templates);
38
+ // Validate whole seconds
39
+ validateWholeSeconds(lane, templates);
40
+ // Validate no overlaps
41
+ validateNoOverlaps(lane, templates);
42
+ const width = lane.estimatedDuration / MS_PER_CHAR;
43
+ if (width > 20) {
44
+ throw new Error(`Lane duration exceeds 20 seconds (${width}s). Max supported is 20 seconds.`);
45
+ }
46
+ const layers = [];
47
+ // Add root lane floor (all its ID character)
48
+ layers.push(lane.id.repeat(width));
49
+ // If root has segments, add children layers recursively
50
+ if (lane.segments.length > 0) {
51
+ addChildrenLayers(lane, templates, layers, 0, width);
52
+ }
53
+ // Reverse so deepest children are on top, root floor at bottom
54
+ return layers.reverse().join('\n');
55
+ }
56
+ /**
57
+ * Recursively adds visualization layers for a lane's children.
58
+ * Each layer is added to the array, then we recurse into lane children.
59
+ */
60
+ function addChildrenLayers(lane, templates, layers, globalOffset, totalWidth) {
61
+ // Build this lane's children layer
62
+ const layer = Array(totalWidth).fill(' ');
63
+ // Overlay segments with their ID characters
64
+ for (const segment of lane.segments) {
65
+ const child = templates[segment.templateId];
66
+ const segStart = globalOffset + segment.offset / MS_PER_CHAR;
67
+ const segDuration = child.estimatedDuration / MS_PER_CHAR;
68
+ for (let i = 0; i < segDuration; i++) {
69
+ layer[segStart + i] = child.id;
70
+ }
71
+ }
72
+ layers.push(layer.join(''));
73
+ // Recursively add children layers for lane children that have segments
74
+ for (const segment of lane.segments) {
75
+ const child = templates[segment.templateId];
76
+ if (isLaneTemplate(child) && child.segments.length > 0) {
77
+ const childGlobalOffset = globalOffset + segment.offset / MS_PER_CHAR;
78
+ addChildrenLayers(child, templates, layers, childGlobalOffset, totalWidth);
79
+ }
80
+ }
81
+ }
82
+ /**
83
+ * Validates that all template IDs are exactly 1 character.
84
+ * Recursively validates all referenced templates.
85
+ */
86
+ function validateSingleCharIds(lane, templates, visited = new Set()) {
87
+ if (visited.has(lane.id)) {
88
+ return;
89
+ }
90
+ visited.add(lane.id);
91
+ if (lane.id.length !== 1) {
92
+ throw new Error(`Template ID "${lane.id}" is not a single character. ` +
93
+ `All template IDs must be exactly 1 character for visualizeLaneIds.`);
94
+ }
95
+ for (const segment of lane.segments) {
96
+ const child = templates[segment.templateId];
97
+ if (!child) {
98
+ throw new Error(`Segment references template "${segment.templateId}" which was not found in templates map`);
99
+ }
100
+ if (child.id.length !== 1) {
101
+ throw new Error(`Template ID "${child.id}" is not a single character. ` +
102
+ `All template IDs must be exactly 1 character for visualizeLaneIds.`);
103
+ }
104
+ if (isLaneTemplate(child)) {
105
+ validateSingleCharIds(child, templates, visited);
106
+ }
107
+ }
108
+ }
109
+ /**
110
+ * Validates that all durations and offsets are whole seconds (divisible by 1000ms).
111
+ * Recursively validates all referenced templates.
112
+ */
113
+ function validateWholeSeconds(lane, templates, visited = new Set()) {
114
+ if (visited.has(lane.id)) {
115
+ return;
116
+ }
117
+ visited.add(lane.id);
118
+ if (lane.estimatedDuration % MS_PER_CHAR !== 0) {
119
+ throw new Error(`Lane "${lane.id}" has non-whole-second duration: ${lane.estimatedDuration}ms. ` +
120
+ `Duration must be divisible by ${MS_PER_CHAR}ms.`);
121
+ }
122
+ for (const segment of lane.segments) {
123
+ if (segment.offset % MS_PER_CHAR !== 0) {
124
+ throw new Error(`Segment in lane "${lane.id}" has non-whole-second offset: ${segment.offset}ms. ` +
125
+ `Offset must be divisible by ${MS_PER_CHAR}ms.`);
126
+ }
127
+ const child = templates[segment.templateId];
128
+ if (!child) {
129
+ throw new Error(`Segment references template "${segment.templateId}" which was not found in templates map`);
130
+ }
131
+ if (child.estimatedDuration <= 0) {
132
+ throw new Error(`Template "${child.id}" has zero or negative duration`);
133
+ }
134
+ if (child.estimatedDuration % MS_PER_CHAR !== 0) {
135
+ throw new Error(`Template "${child.id}" has non-whole-second duration: ${child.estimatedDuration}ms. ` +
136
+ `Duration must be divisible by ${MS_PER_CHAR}ms.`);
137
+ }
138
+ if (isLaneTemplate(child)) {
139
+ validateWholeSeconds(child, templates, visited);
140
+ }
141
+ }
142
+ }
143
+ /**
144
+ * Validates that no segments overlap within a lane.
145
+ * Recursively validates all lane children.
146
+ */
147
+ function validateNoOverlaps(lane, templates, visited = new Set()) {
148
+ if (visited.has(lane.id)) {
149
+ return;
150
+ }
151
+ visited.add(lane.id);
152
+ const spans = [];
153
+ for (const segment of lane.segments) {
154
+ const child = templates[segment.templateId];
155
+ const start = segment.offset;
156
+ const end = segment.offset + child.estimatedDuration;
157
+ spans.push({ start, end, templateId: segment.templateId });
158
+ }
159
+ spans.sort((a, b) => a.start - b.start);
160
+ for (let i = 0; i < spans.length - 1; i++) {
161
+ const current = spans[i];
162
+ const next = spans[i + 1];
163
+ if (current.end > next.start) {
164
+ throw new Error(`Overlap detected in lane "${lane.id}": ` +
165
+ `segment "${current.templateId}" (ends at ${current.end}ms) ` +
166
+ `overlaps with segment "${next.templateId}" (starts at ${next.start}ms)`);
167
+ }
168
+ }
169
+ for (const segment of lane.segments) {
170
+ const child = templates[segment.templateId];
171
+ if (isLaneTemplate(child)) {
172
+ validateNoOverlaps(child, templates, visited);
173
+ }
174
+ }
175
+ }
176
+ //# sourceMappingURL=visualizeLaneIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizeLaneIds.js","sourceRoot":"","sources":["../../../src/templates/layout/visualizeLaneIds.ts"],"names":[],"mappings":"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"}
@@ -82,8 +82,15 @@ export interface ExceedsParentDurationError {
82
82
  childDuration: Duration;
83
83
  endTime: Duration;
84
84
  }
85
+ /** Template has zero duration (invalid) */
86
+ export interface ZeroDurationError {
87
+ type: 'zero-duration';
88
+ message: string;
89
+ templateId: TemplateId;
90
+ templateIntent: string;
91
+ }
85
92
  /** Union of all validation error types */
86
- export type ValidationError = DoubleLinkingError | BusyOverlapError | UnsatisfiedConsumeError | UnsatisfiedProduceError | MissingTemplateError | DurationHierarchyError | NegativeOffsetError | ExceedsParentDurationError;
93
+ export type ValidationError = DoubleLinkingError | BusyOverlapError | UnsatisfiedConsumeError | UnsatisfiedProduceError | MissingTemplateError | DurationHierarchyError | NegativeOffsetError | ExceedsParentDurationError | ZeroDurationError;
87
94
  /** Result of lane validation */
88
95
  export interface ValidationResult {
89
96
  isValid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateLane.d.ts","sourceRoot":"","sources":["../../src/validation/validateLane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAsT3B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,WAAW,GACxB,gBAAgB,CAmElB"}
1
+ {"version":3,"file":"validateLane.d.ts","sourceRoot":"","sources":["../../src/validation/validateLane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAiU3B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,WAAW,GACxB,gBAAgB,CAmElB"}
@@ -20,6 +20,16 @@ function flattenLane(lane, allTemplates, baseOffset, errors, visited) {
20
20
  });
21
21
  continue;
22
22
  }
23
+ // Check for zero duration
24
+ if (template.estimatedDuration <= 0) {
25
+ errors.push({
26
+ type: 'zero-duration',
27
+ message: `Template "${template.intent}" (${template.id}) has zero or negative duration`,
28
+ templateId: template.id,
29
+ templateIntent: template.intent,
30
+ });
31
+ continue;
32
+ }
23
33
  // Check double-linking: child must have a reference back to this parent
24
34
  const hasBackLink = template.references.some(ref => ref.parentId === lane.id && ref.relationshipId === segment.relationshipId);
25
35
  if (!hasBackLink) {
@@ -1 +1 @@
1
- {"version":3,"file":"validateLane.js","sourceRoot":"","sources":["../../src/validation/validateLane.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateLane.js","sourceRoot":"","sources":["../../src/validation/validateLane.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tannerbroberts/about-time-core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Core template operations and validation for about-time",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,6 +24,10 @@
24
24
  "types": "./dist/templates/index.d.ts",
25
25
  "import": "./dist/templates/index.js"
26
26
  },
27
+ "./layout": {
28
+ "types": "./dist/templates/layout/index.d.ts",
29
+ "import": "./dist/templates/layout/index.js"
30
+ },
27
31
  "./validation": {
28
32
  "types": "./dist/validation/index.d.ts",
29
33
  "import": "./dist/validation/index.js"