amaran-light-cli 1.4.0 → 1.6.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 (245) hide show
  1. package/README.md +48 -18
  2. package/dist/__tests__/autoCct.test.js +2 -2
  3. package/dist/__tests__/autoCct.test.js.map +1 -1
  4. package/dist/__tests__/autostart.test.js +1 -1
  5. package/dist/__tests__/autostart.test.js.map +1 -1
  6. package/dist/__tests__/cctUtil.test.js +19 -2
  7. package/dist/__tests__/cctUtil.test.js.map +1 -1
  8. package/dist/__tests__/intensityApi.test.js +4 -1
  9. package/dist/__tests__/intensityApi.test.js.map +1 -1
  10. package/dist/__tests__/lightControl.test.js +260 -1
  11. package/dist/__tests__/lightControl.test.js.map +1 -1
  12. package/dist/__tests__/simulateSchedule.test.js +2 -2
  13. package/dist/__tests__/simulateSchedule.test.js.map +1 -1
  14. package/dist/cli.d.ts +2 -2
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +4 -4
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/__tests__/integration.test.js +1 -1
  19. package/dist/commands/__tests__/integration.test.js.map +1 -1
  20. package/dist/commands/__tests__/newCommands.test.d.ts +2 -0
  21. package/dist/commands/__tests__/newCommands.test.d.ts.map +1 -0
  22. package/dist/commands/__tests__/newCommands.test.js +195 -0
  23. package/dist/commands/__tests__/newCommands.test.js.map +1 -0
  24. package/dist/commands/cmdUtils.d.ts +23 -0
  25. package/dist/commands/cmdUtils.d.ts.map +1 -0
  26. package/dist/commands/cmdUtils.js +43 -0
  27. package/dist/commands/cmdUtils.js.map +1 -0
  28. package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
  29. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
  30. package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
  31. package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
  32. package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
  33. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
  34. package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
  35. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
  36. package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
  37. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
  38. package/dist/commands/daylightSimulation/printSchedule.js +65 -0
  39. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
  40. package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
  41. package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
  42. package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
  43. package/dist/commands/daylightSimulation/service.js.map +1 -0
  44. package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
  45. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
  46. package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
  47. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
  48. package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
  49. package/dist/commands/deviceControl/cct.d.ts.map +1 -0
  50. package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
  51. package/dist/commands/deviceControl/cct.js.map +1 -0
  52. package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
  53. package/dist/commands/deviceControl/color.d.ts.map +1 -0
  54. package/dist/commands/deviceControl/color.js +52 -0
  55. package/dist/commands/deviceControl/color.js.map +1 -0
  56. package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
  57. package/dist/commands/deviceControl/config.d.ts.map +1 -0
  58. package/dist/commands/{config.js → deviceControl/config.js} +11 -7
  59. package/dist/commands/deviceControl/config.js.map +1 -0
  60. package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
  61. package/dist/commands/deviceControl/discover.d.ts.map +1 -0
  62. package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
  63. package/dist/commands/deviceControl/discover.js.map +1 -0
  64. package/dist/commands/deviceControl/effect.d.ts +5 -0
  65. package/dist/commands/deviceControl/effect.d.ts.map +1 -0
  66. package/dist/commands/deviceControl/effect.js +172 -0
  67. package/dist/commands/deviceControl/effect.js.map +1 -0
  68. package/dist/commands/deviceControl/fan.d.ts +5 -0
  69. package/dist/commands/deviceControl/fan.d.ts.map +1 -0
  70. package/dist/commands/deviceControl/fan.js +105 -0
  71. package/dist/commands/deviceControl/fan.js.map +1 -0
  72. package/dist/commands/deviceControl/firmware.d.ts +5 -0
  73. package/dist/commands/deviceControl/firmware.d.ts.map +1 -0
  74. package/dist/commands/deviceControl/firmware.js +68 -0
  75. package/dist/commands/deviceControl/firmware.js.map +1 -0
  76. package/dist/commands/deviceControl/group.d.ts +5 -0
  77. package/dist/commands/deviceControl/group.d.ts.map +1 -0
  78. package/dist/commands/deviceControl/group.js +101 -0
  79. package/dist/commands/deviceControl/group.js.map +1 -0
  80. package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
  81. package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
  82. package/dist/commands/deviceControl/hsi.js +50 -0
  83. package/dist/commands/deviceControl/hsi.js.map +1 -0
  84. package/dist/commands/deviceControl/info.d.ts +5 -0
  85. package/dist/commands/deviceControl/info.d.ts.map +1 -0
  86. package/dist/commands/deviceControl/info.js +57 -0
  87. package/dist/commands/deviceControl/info.js.map +1 -0
  88. package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
  89. package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
  90. package/dist/commands/deviceControl/intensity.js +41 -0
  91. package/dist/commands/deviceControl/intensity.js.map +1 -0
  92. package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
  93. package/dist/commands/deviceControl/list.d.ts.map +1 -0
  94. package/dist/commands/{list.js → deviceControl/list.js} +7 -3
  95. package/dist/commands/deviceControl/list.js.map +1 -0
  96. package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
  97. package/dist/commands/deviceControl/power.d.ts.map +1 -0
  98. package/dist/commands/deviceControl/power.js +78 -0
  99. package/dist/commands/deviceControl/power.js.map +1 -0
  100. package/dist/commands/deviceControl/preset.d.ts +5 -0
  101. package/dist/commands/deviceControl/preset.d.ts.map +1 -0
  102. package/dist/commands/deviceControl/preset.js +55 -0
  103. package/dist/commands/deviceControl/preset.js.map +1 -0
  104. package/dist/commands/deviceControl/quickshot.d.ts +5 -0
  105. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -0
  106. package/dist/commands/deviceControl/quickshot.js +51 -0
  107. package/dist/commands/deviceControl/quickshot.js.map +1 -0
  108. package/dist/commands/deviceControl/scene.d.ts +5 -0
  109. package/dist/commands/deviceControl/scene.d.ts.map +1 -0
  110. package/dist/commands/deviceControl/scene.js +101 -0
  111. package/dist/commands/deviceControl/scene.js.map +1 -0
  112. package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
  113. package/dist/commands/deviceControl/status.d.ts.map +1 -0
  114. package/dist/commands/deviceControl/status.js +48 -0
  115. package/dist/commands/deviceControl/status.js.map +1 -0
  116. package/dist/commands.d.ts +1 -1
  117. package/dist/commands.d.ts.map +1 -1
  118. package/dist/commands.js +34 -43
  119. package/dist/commands.js.map +1 -1
  120. package/dist/daylightSimulation/cctUtil.d.ts +5 -0
  121. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
  122. package/dist/daylightSimulation/cctUtil.js +191 -0
  123. package/dist/daylightSimulation/cctUtil.js.map +1 -0
  124. package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +1 -18
  125. package/dist/daylightSimulation/constants.d.ts.map +1 -0
  126. package/dist/{constants.js → daylightSimulation/constants.js} +1 -13
  127. package/dist/daylightSimulation/constants.js.map +1 -0
  128. package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
  129. package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
  130. package/dist/daylightSimulation/curves/approximations.js +27 -0
  131. package/dist/daylightSimulation/curves/approximations.js.map +1 -0
  132. package/dist/daylightSimulation/curves/index.d.ts +15 -0
  133. package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
  134. package/dist/daylightSimulation/curves/index.js +56 -0
  135. package/dist/daylightSimulation/curves/index.js.map +1 -0
  136. package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
  137. package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
  138. package/dist/daylightSimulation/curves/mathematical.js +33 -0
  139. package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
  140. package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
  141. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
  142. package/dist/daylightSimulation/curves/realistic.js +259 -0
  143. package/dist/daylightSimulation/curves/realistic.js.map +1 -0
  144. package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
  145. package/dist/daylightSimulation/geoipUtil.js.map +1 -0
  146. package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
  147. package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
  148. package/dist/daylightSimulation/graphSchedule.js +116 -0
  149. package/dist/daylightSimulation/graphSchedule.js.map +1 -0
  150. package/dist/daylightSimulation/scheduleMaker.d.ts +33 -0
  151. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
  152. package/dist/daylightSimulation/scheduleMaker.js +192 -0
  153. package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
  154. package/dist/daylightSimulation/textSchedule.d.ts +9 -0
  155. package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
  156. package/dist/daylightSimulation/textSchedule.js +172 -0
  157. package/dist/daylightSimulation/textSchedule.js.map +1 -0
  158. package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +7 -5
  159. package/dist/daylightSimulation/types.d.ts.map +1 -0
  160. package/dist/daylightSimulation/types.js +16 -0
  161. package/dist/daylightSimulation/types.js.map +1 -0
  162. package/dist/deviceControl/autostart.d.ts.map +1 -0
  163. package/dist/deviceControl/autostart.js.map +1 -0
  164. package/dist/deviceControl/constants.d.ts +23 -0
  165. package/dist/deviceControl/constants.d.ts.map +1 -0
  166. package/dist/deviceControl/constants.js +20 -0
  167. package/dist/deviceControl/constants.js.map +1 -0
  168. package/dist/deviceControl/discovery.d.ts.map +1 -0
  169. package/dist/{discovery.js → deviceControl/discovery.js} +0 -2
  170. package/dist/deviceControl/discovery.js.map +1 -0
  171. package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +67 -78
  172. package/dist/deviceControl/lightControl.d.ts.map +1 -0
  173. package/dist/{lightControl.js → deviceControl/lightControl.js} +292 -203
  174. package/dist/deviceControl/lightControl.js.map +1 -0
  175. package/dist/deviceControl/types.d.ts +59 -0
  176. package/dist/deviceControl/types.d.ts.map +1 -0
  177. package/dist/deviceControl/types.js.map +1 -0
  178. package/dist/test/MockLightServer.d.ts.map +1 -1
  179. package/dist/test/MockLightServer.js +134 -12
  180. package/dist/test/MockLightServer.js.map +1 -1
  181. package/package.json +11 -7
  182. package/scripts/extract-api.ts +158 -0
  183. package/scripts/extract-usage.ts +199 -0
  184. package/scripts/release.js +11 -11
  185. package/CHANGELOG.md +0 -67
  186. package/dist/autostart.d.ts.map +0 -1
  187. package/dist/autostart.js.map +0 -1
  188. package/dist/cctUtil.d.ts.map +0 -1
  189. package/dist/cctUtil.js +0 -435
  190. package/dist/cctUtil.js.map +0 -1
  191. package/dist/commands/autoCct.d.ts +0 -5
  192. package/dist/commands/autoCct.d.ts.map +0 -1
  193. package/dist/commands/autoCct.js.map +0 -1
  194. package/dist/commands/cct.d.ts.map +0 -1
  195. package/dist/commands/cct.js.map +0 -1
  196. package/dist/commands/color.d.ts.map +0 -1
  197. package/dist/commands/color.js +0 -57
  198. package/dist/commands/color.js.map +0 -1
  199. package/dist/commands/config.d.ts.map +0 -1
  200. package/dist/commands/config.js.map +0 -1
  201. package/dist/commands/discover.d.ts.map +0 -1
  202. package/dist/commands/discover.js.map +0 -1
  203. package/dist/commands/graphSchedule.d.ts.map +0 -1
  204. package/dist/commands/graphSchedule.js +0 -293
  205. package/dist/commands/graphSchedule.js.map +0 -1
  206. package/dist/commands/hsi.d.ts.map +0 -1
  207. package/dist/commands/hsi.js +0 -59
  208. package/dist/commands/hsi.js.map +0 -1
  209. package/dist/commands/intensity.d.ts.map +0 -1
  210. package/dist/commands/intensity.js +0 -50
  211. package/dist/commands/intensity.js.map +0 -1
  212. package/dist/commands/list.d.ts.map +0 -1
  213. package/dist/commands/list.js.map +0 -1
  214. package/dist/commands/power.d.ts.map +0 -1
  215. package/dist/commands/power.js +0 -120
  216. package/dist/commands/power.js.map +0 -1
  217. package/dist/commands/printSchedule.d.ts +0 -5
  218. package/dist/commands/printSchedule.d.ts.map +0 -1
  219. package/dist/commands/printSchedule.js +0 -452
  220. package/dist/commands/printSchedule.js.map +0 -1
  221. package/dist/commands/service.d.ts.map +0 -1
  222. package/dist/commands/service.js.map +0 -1
  223. package/dist/commands/simulateSchedule.d.ts.map +0 -1
  224. package/dist/commands/simulateSchedule.js +0 -199
  225. package/dist/commands/simulateSchedule.js.map +0 -1
  226. package/dist/commands/status.d.ts.map +0 -1
  227. package/dist/commands/status.js +0 -48
  228. package/dist/commands/status.js.map +0 -1
  229. package/dist/constants.d.ts.map +0 -1
  230. package/dist/constants.js.map +0 -1
  231. package/dist/discovery.d.ts.map +0 -1
  232. package/dist/discovery.js.map +0 -1
  233. package/dist/geoipUtil.d.ts.map +0 -1
  234. package/dist/geoipUtil.js.map +0 -1
  235. package/dist/lightControl.d.ts.map +0 -1
  236. package/dist/lightControl.js.map +0 -1
  237. package/dist/types.d.ts +0 -41
  238. package/dist/types.d.ts.map +0 -1
  239. package/dist/types.js.map +0 -1
  240. /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
  241. /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
  242. /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
  243. /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
  244. /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
  245. /package/dist/{types.js → deviceControl/types.js} +0 -0
@@ -3,6 +3,7 @@ export declare const CCT_DEFAULTS: {
3
3
  cctMaxK: number;
4
4
  intensityMinPct: number;
5
5
  intensityMaxPct: number;
6
+ maxLux: number;
6
7
  };
7
8
  export declare const SPECIAL_TIME_CONFIG: readonly [{
8
9
  readonly key: "nightEnd";
@@ -57,14 +58,6 @@ export declare const SPECIAL_TIME_CONFIG: readonly [{
57
58
  readonly color: import("chalk").ChalkInstance;
58
59
  readonly emoji: "NI";
59
60
  }];
60
- export declare const DEVICE_DEFAULTS: {
61
- updateInterval: number;
62
- simulationDuration: number;
63
- reconnectAttempts: number;
64
- reconnectDelay: number;
65
- commandThrottleDelay: number;
66
- statusCheckDelay: number;
67
- };
68
61
  export declare const VALIDATION_RANGES: {
69
62
  latitude: {
70
63
  min: number;
@@ -74,21 +67,11 @@ export declare const VALIDATION_RANGES: {
74
67
  min: number;
75
68
  max: number;
76
69
  };
77
- cct: {
78
- min: number;
79
- max: number;
80
- };
81
- intensity: {
82
- min: number;
83
- max: number;
84
- };
85
70
  };
86
71
  export declare const ERROR_MESSAGES: {
87
72
  readonly invalidLatitude: `Latitude must be between ${number} and ${number}`;
88
73
  readonly invalidLongitude: `Longitude must be between ${number} and ${number}`;
89
- readonly invalidDuration: "Duration must be at least 1 second";
90
74
  readonly invalidCurve: "Invalid curve type. Use \"hann\", \"wider-middle-small\", \"wider-middle-medium\", \"wider-middle-large\", \"cie-daylight\", \"sun-altitude\", or \"perez-daylight\"";
91
- readonly deviceNotFound: (device: string) => string;
92
75
  readonly locationUnavailable: "Could not determine location. Use --lat and --lon to specify manually.";
93
76
  readonly nightTimesUnavailable: "Could not calculate night times for this location";
94
77
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EActB,CAAC;AAGX,eAAO,MAAM,iBAAiB;;;;;;;;;CAG7B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;CAOjB,CAAC"}
@@ -5,6 +5,7 @@ export const CCT_DEFAULTS = {
5
5
  cctMaxK: 5500, // 5500K is the CCT of non-overcast noon sunlight
6
6
  intensityMinPct: 5,
7
7
  intensityMaxPct: 100,
8
+ maxLux: 110000, // Approximate clear sky zenith lux
8
9
  };
9
10
  // Special time configuration - single source of truth for colors and emojis
10
11
  export const SPECIAL_TIME_CONFIG = [
@@ -22,29 +23,16 @@ export const SPECIAL_TIME_CONFIG = [
22
23
  { key: 'dusk', color: chalk.magenta, emoji: 'DU' },
23
24
  { key: 'night', color: chalk.blue, emoji: 'NI' },
24
25
  ];
25
- // Device control defaults
26
- export const DEVICE_DEFAULTS = {
27
- updateInterval: 500, // milliseconds for smooth visual simulation
28
- simulationDuration: 10, // seconds to compress full day
29
- reconnectAttempts: 3,
30
- reconnectDelay: 1000, // milliseconds
31
- commandThrottleDelay: 250, // milliseconds between commands to avoid overwhelming server
32
- statusCheckDelay: 250, // milliseconds for device status checks
33
- };
34
26
  // Validation ranges
35
27
  export const VALIDATION_RANGES = {
36
28
  latitude: { min: -90, max: 90 },
37
29
  longitude: { min: -180, max: 180 },
38
- cct: { min: 1000, max: 20000 },
39
- intensity: { min: 0, max: 100 },
40
30
  };
41
31
  // Error messages
42
32
  export const ERROR_MESSAGES = {
43
33
  invalidLatitude: `Latitude must be between ${VALIDATION_RANGES.latitude.min} and ${VALIDATION_RANGES.latitude.max}`,
44
34
  invalidLongitude: `Longitude must be between ${VALIDATION_RANGES.longitude.min} and ${VALIDATION_RANGES.longitude.max}`,
45
- invalidDuration: 'Duration must be at least 1 second',
46
35
  invalidCurve: 'Invalid curve type. Use "hann", "wider-middle-small", "wider-middle-medium", "wider-middle-large", "cie-daylight", "sun-altitude", or "perez-daylight"',
47
- deviceNotFound: (device) => `Device "${device}" not found`,
48
36
  locationUnavailable: 'Could not determine location. Use --lat and --lon to specify manually.',
49
37
  nightTimesUnavailable: 'Could not calculate night times for this location',
50
38
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/daylightSimulation/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,IAAI,EAAE,2CAA2C;IAC1D,OAAO,EAAE,IAAI,EAAE,iDAAiD;IAChE,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,GAAG;IACpB,MAAM,EAAE,MAAM,EAAE,mCAAmC;CACpD,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACnD,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACvD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACpD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACvD,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1D,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IACrD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACvD,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IACzD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IACpD,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1D,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAClD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CACxC,CAAC;AAEX,oBAAoB;AACpB,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAC/B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;CACnC,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE,4BAA4B,iBAAiB,CAAC,QAAQ,CAAC,GAAG,QAAQ,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE;IACnH,gBAAgB,EAAE,6BAA6B,iBAAiB,CAAC,SAAS,CAAC,GAAG,QAAQ,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE;IACvH,YAAY,EACV,wJAAwJ;IAC1J,mBAAmB,EAAE,wEAAwE;IAC7F,qBAAqB,EAAE,mDAAmD;CAClE,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Simple approximations and curves for daylight simulation.
3
+ */
4
+ /**
5
+ * CIE daylight locus approximation.
6
+ * @param x Progress through the day (0 to 1)
7
+ */
8
+ export declare function cieDaylightCurve(x: number): number;
9
+ /**
10
+ * Simple sun altitude-based approximation.
11
+ * @param x Progress through the day (0 to 1)
12
+ */
13
+ export declare function sunAltitudeCurve(x: number): number;
14
+ /**
15
+ * Perez daylight model approximation.
16
+ * @param x Progress through the day (0 to 1)
17
+ */
18
+ export declare function perezDaylightCurve(x: number): number;
19
+ //# sourceMappingURL=approximations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approximations.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/approximations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Simple approximations and curves for daylight simulation.
3
+ */
4
+ /**
5
+ * CIE daylight locus approximation.
6
+ * @param x Progress through the day (0 to 1)
7
+ */
8
+ export function cieDaylightCurve(x) {
9
+ return Math.sin(Math.PI * x) ** 0.8;
10
+ }
11
+ /**
12
+ * Simple sun altitude-based approximation.
13
+ * @param x Progress through the day (0 to 1)
14
+ */
15
+ export function sunAltitudeCurve(x) {
16
+ return 1 - Math.cos(Math.PI * x);
17
+ }
18
+ /**
19
+ * Perez daylight model approximation.
20
+ * @param x Progress through the day (0 to 1)
21
+ */
22
+ export function perezDaylightCurve(x) {
23
+ const zenithAngle = Math.PI * (0.5 - Math.abs(x - 0.5));
24
+ const scattering = Math.exp(-2.0 * Math.max(0, Math.cos(zenithAngle)));
25
+ return Math.sin(Math.PI * x) ** 0.6 * (1 - 0.2 * scattering);
26
+ }
27
+ //# sourceMappingURL=approximations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approximations.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/approximations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { CurveType } from '../types.js';
2
+ export * from './approximations.js';
3
+ export * from './mathematical.js';
4
+ export * from './realistic.js';
5
+ export type CurveFunction = (x: number) => number;
6
+ export declare const CURVE_FUNCTIONS: Record<CurveType, CurveFunction>;
7
+ /**
8
+ * Parse a curve type string into a CurveType enum key
9
+ */
10
+ export declare function parseCurveType(curve: string): keyof typeof CurveType;
11
+ /**
12
+ * Get all available curve type names
13
+ */
14
+ export declare function getAvailableCurves(): string[];
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAW5D,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,SAAS,CA6BpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
@@ -0,0 +1,56 @@
1
+ import { CurveType } from '../types.js';
2
+ import * as approximations from './approximations.js';
3
+ import * as mathematical from './mathematical.js';
4
+ export * from './approximations.js';
5
+ export * from './mathematical.js';
6
+ export * from './realistic.js';
7
+ export const CURVE_FUNCTIONS = {
8
+ [CurveType.HANN]: mathematical.hannCurve,
9
+ [CurveType.WIDER_MIDDLE_SMALL]: (x) => mathematical.widerMiddleCurve(x, 'small'),
10
+ [CurveType.WIDER_MIDDLE_MEDIUM]: (x) => mathematical.widerMiddleCurve(x, 'medium'),
11
+ [CurveType.WIDER_MIDDLE_LARGE]: (x) => mathematical.widerMiddleCurve(x, 'large'),
12
+ [CurveType.CIE_DAYLIGHT]: approximations.cieDaylightCurve,
13
+ [CurveType.SUN_ALTITUDE]: approximations.sunAltitudeCurve,
14
+ [CurveType.PEREZ_DAYLIGHT]: approximations.perezDaylightCurve,
15
+ [CurveType.PHYSICS]: (x) => Math.sin(Math.PI * x) ** 1.2,
16
+ [CurveType.BLACKBODY]: (x) => Math.sin(Math.PI * x) ** 1.5,
17
+ [CurveType.HAZY]: (x) => Math.sin(Math.PI * x) ** 0.8,
18
+ };
19
+ /**
20
+ * Parse a curve type string into a CurveType enum key
21
+ */
22
+ export function parseCurveType(curve) {
23
+ const normalizedCurve = curve.toLowerCase();
24
+ switch (normalizedCurve) {
25
+ case 'hann':
26
+ return 'HANN';
27
+ case 'wider-middle-small':
28
+ return 'WIDER_MIDDLE_SMALL';
29
+ case 'wider-middle-medium':
30
+ case 'wider-middle':
31
+ return 'WIDER_MIDDLE_MEDIUM';
32
+ case 'wider-middle-large':
33
+ return 'WIDER_MIDDLE_LARGE';
34
+ case 'cie-daylight':
35
+ return 'CIE_DAYLIGHT';
36
+ case 'sun-altitude':
37
+ return 'SUN_ALTITUDE';
38
+ case 'perez-daylight':
39
+ return 'PEREZ_DAYLIGHT';
40
+ case 'physics':
41
+ return 'PHYSICS';
42
+ case 'blackbody':
43
+ return 'BLACKBODY';
44
+ case 'hazy':
45
+ return 'HAZY';
46
+ default:
47
+ throw new Error('Invalid curve type. Use "hann", "wider-middle-small", "wider-middle-medium", "wider-middle-large", "cie-daylight", "sun-altitude", "perez-daylight", "physics", "blackbody", or "hazy"');
48
+ }
49
+ }
50
+ /**
51
+ * Get all available curve type names
52
+ */
53
+ export function getAvailableCurves() {
54
+ return Object.values(CurveType);
55
+ }
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAElD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAI/B,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,SAAS;IACxC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC;IACxF,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC1F,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC;IACxF,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,gBAAgB;IACzD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,gBAAgB;IACzD,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,kBAAkB;IAC7D,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG;IAChE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG;IAClE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG;CAC9D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,oBAAoB;YACvB,OAAO,oBAAoB,CAAC;QAC9B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,cAAc;YACjB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,oBAAoB;YACvB,OAAO,oBAAoB,CAAC;QAC9B,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC;QACxB,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC;QACxB,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,MAAM,IAAI,KAAK,CACb,wLAAwL,CACzL,CAAC;IACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Mathematical curve functions for Daylight Simulation
3
+ */
4
+ /**
5
+ * Hann window function
6
+ * @param x Progress through the day (0 to 1)
7
+ */
8
+ export declare function hannCurve(x: number): number;
9
+ /**
10
+ * Curve with a wider plateau in the middle
11
+ * @param x Progress through the day (0 to 1)
12
+ * @param width Width of the plateau
13
+ */
14
+ export declare function widerMiddleCurve(x: number, width?: 'small' | 'medium' | 'large'): number;
15
+ //# sourceMappingURL=mathematical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathematical.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/mathematical.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,OAAkB,GAAG,MAAM,CAgBlG"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Mathematical curve functions for Daylight Simulation
3
+ */
4
+ /**
5
+ * Hann window function
6
+ * @param x Progress through the day (0 to 1)
7
+ */
8
+ export function hannCurve(x) {
9
+ return 0.5 * (1 - Math.cos(2 * Math.PI * x));
10
+ }
11
+ /**
12
+ * Curve with a wider plateau in the middle
13
+ * @param x Progress through the day (0 to 1)
14
+ * @param width Width of the plateau
15
+ */
16
+ export function widerMiddleCurve(x, width = 'medium') {
17
+ const widthConfig = {
18
+ small: { start: 0.35, end: 0.65 }, // Narrow plateau (30% of day)
19
+ medium: { start: 0.2, end: 0.8 }, // Medium plateau (60% of day)
20
+ large: { start: 0.1, end: 0.9 }, // Wide plateau (80% of day)
21
+ };
22
+ const { start: plateauStart, end: plateauEnd } = widthConfig[width];
23
+ if (x < plateauStart) {
24
+ return Math.sin(((x / plateauStart) * Math.PI) / 2);
25
+ }
26
+ else if (x > plateauEnd) {
27
+ return Math.cos((((x - plateauEnd) / (1 - plateauEnd)) * Math.PI) / 2);
28
+ }
29
+ else {
30
+ return 1;
31
+ }
32
+ }
33
+ //# sourceMappingURL=mathematical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathematical.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/mathematical.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,QAAsC,QAAQ;IACxF,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,8BAA8B;QACjE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,8BAA8B;QAChE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,4BAA4B;KAC9D,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEpE,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Realistic daylight calculation functions based on sun position and atmospheric models.
3
+ */
4
+ /**
5
+ * Realistic daylight calculation based on sun altitude.
6
+ * @param altitude Sun altitude in radians
7
+ * @param maxAltitude Maximum sun altitude for the day in radians
8
+ */
9
+ export declare function calculateRealisticSunAltitude(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
10
+ /**
11
+ * CIE daylight model with atmospheric path modeling.
12
+ * @param altitude Sun altitude in radians
13
+ * @param maxAltitude Maximum sun altitude for the day in radians
14
+ */
15
+ export declare function calculateRealisticCIEDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
16
+ /**
17
+ * Perez daylight model with turbidity and atmospheric effects.
18
+ * @param altitude Sun altitude in radians
19
+ * @param maxAltitude Maximum sun altitude for the day in radians
20
+ */
21
+ export declare function calculateRealisticPerezDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
22
+ /**
23
+ * Physics-based Atmospheric model.
24
+ * Uses Beer-Lambert law for intensity and exponential decay for CCT.
25
+ * @param altitude Sun altitude in radians
26
+ * @param maxAltitude Maximum sun altitude for the day in radians
27
+ */
28
+ export declare function calculateRealisticPhysicsDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
29
+ /**
30
+ * Blackbody Sun model.
31
+ * Simulates the sun as a blackbody shifting through the atmosphere.
32
+ * @param altitude Sun altitude in radians
33
+ * @param maxAltitude Maximum sun altitude for the day in radians
34
+ */
35
+ export declare function calculateRealisticBlackbodyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
36
+ /**
37
+ * Hazy/Turbid model.
38
+ * Simulates a sky with high particulate matter (smog/mist).
39
+ * @param altitude Sun altitude in radians
40
+ * @param maxAltitude Maximum sun altitude for the day in radians
41
+ */
42
+ export declare function calculateRealisticHazyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number, rawIntensity: number];
43
+ //# sourceMappingURL=realistic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realistic.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAwCpE;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAqCpE;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAsCpE;AAcD;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAmCpE;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CA8BpE;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CA8BpE"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Realistic daylight calculation functions based on sun position and atmospheric models.
3
+ */
4
+ /**
5
+ * Realistic daylight calculation based on sun altitude.
6
+ * @param altitude Sun altitude in radians
7
+ * @param maxAltitude Maximum sun altitude for the day in radians
8
+ */
9
+ export function calculateRealisticSunAltitude(altitude, maxAltitude) {
10
+ // Convert altitude to degrees for easier calculations
11
+ const altitudeDeg = (altitude * 180) / Math.PI;
12
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
13
+ // CCT: Based on real-world color temperature at different sun angles
14
+ let cctFactor;
15
+ if (altitudeDeg < -6) {
16
+ cctFactor = 0; // Before civil twilight - minimum CCT
17
+ }
18
+ else if (altitudeDeg < 0) {
19
+ // Civil twilight: 4000-5000K range
20
+ cctFactor = 0.3 + ((altitudeDeg + 6) / 6) * 0.2; // 0.3 to 0.5
21
+ }
22
+ else if (altitudeDeg < 30) {
23
+ // Morning/afternoon: 5000-6500K
24
+ cctFactor = 0.5 + (altitudeDeg / 30) * 0.3; // 0.5 to 0.8
25
+ }
26
+ else if (altitudeDeg < 60) {
27
+ // High sun: 5500-7000K
28
+ cctFactor = 0.8 + ((altitudeDeg - 30) / 30) * 0.2; // 0.8 to 1.0
29
+ }
30
+ else {
31
+ // Very high sun: 6500-7500K
32
+ cctFactor = 1.0;
33
+ }
34
+ // Calculate raw intensity factor based on absolute altitude
35
+ const calculateIntensity = (altDeg) => {
36
+ if (altDeg < -6)
37
+ return 0;
38
+ if (altDeg < 0)
39
+ return ((altDeg + 6) / 6) ** 2 * 0.05;
40
+ if (altDeg < 10)
41
+ return 0.05 + (altDeg / 10) * 0.15;
42
+ if (altDeg < 30)
43
+ return 0.2 + ((altDeg - 10) / 20) * 0.4;
44
+ return 0.6 + ((altDeg - 30) / 60) * 0.4;
45
+ };
46
+ const rawIntensity = calculateIntensity(altitudeDeg);
47
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
48
+ // Normalize: Scale the current intensity so that at maxAltitude it reaches 1.0
49
+ let intensityFactor = maxDailyIntensity > 0.01 ? rawIntensity / maxDailyIntensity : 0;
50
+ intensityFactor = Math.min(1.0, intensityFactor);
51
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
52
+ }
53
+ /**
54
+ * CIE daylight model with atmospheric path modeling.
55
+ * @param altitude Sun altitude in radians
56
+ * @param maxAltitude Maximum sun altitude for the day in radians
57
+ */
58
+ export function calculateRealisticCIEDaylight(altitude, maxAltitude) {
59
+ const altitudeDeg = (altitude * 180) / Math.PI;
60
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
61
+ let cctFactor;
62
+ if (altitudeDeg < -6) {
63
+ cctFactor = 0;
64
+ }
65
+ else if (altitudeDeg < 0) {
66
+ cctFactor = 0.4 + ((altitudeDeg + 6) / 6) ** 1.5 * 0.2;
67
+ }
68
+ else if (altitudeDeg < 15) {
69
+ cctFactor = 0.6 - Math.sin((altitudeDeg * Math.PI) / 30) * 0.1;
70
+ }
71
+ else if (altitudeDeg < 45) {
72
+ cctFactor = 0.5 + ((altitudeDeg - 15) / 30) * 0.4;
73
+ }
74
+ else {
75
+ cctFactor = 0.9 + Math.min(0.1, ((altitudeDeg - 45) / 45) * 0.1);
76
+ }
77
+ const calculateRawIntensity = (altDeg) => {
78
+ if (altDeg < -6)
79
+ return 0;
80
+ if (altDeg < 0)
81
+ return ((altDeg + 6) / 6) ** 3 * 0.03;
82
+ if (altDeg < 15) {
83
+ const altRad = Math.max(0.01, (altDeg * Math.PI) / 180);
84
+ const airMass = 1 / Math.sin(altRad);
85
+ return Math.min(0.25, 1 / airMass ** 0.7);
86
+ }
87
+ if (altDeg < 40)
88
+ return 0.25 + ((altDeg - 15) / 25) * 0.55;
89
+ if (altDeg < 70)
90
+ return 0.8 + ((altDeg - 40) / 30) * 0.15;
91
+ return 0.95 + ((altDeg - 70) / 20) * 0.05;
92
+ };
93
+ const rawIntensity = calculateRawIntensity(altitudeDeg);
94
+ const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
95
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
96
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
97
+ }
98
+ /**
99
+ * Perez daylight model with turbidity and atmospheric effects.
100
+ * @param altitude Sun altitude in radians
101
+ * @param maxAltitude Maximum sun altitude for the day in radians
102
+ */
103
+ export function calculateRealisticPerezDaylight(altitude, maxAltitude) {
104
+ const altitudeDeg = (altitude * 180) / Math.PI;
105
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
106
+ let cctFactor;
107
+ if (altitudeDeg < -6) {
108
+ cctFactor = 0;
109
+ }
110
+ else if (altitudeDeg < 0) {
111
+ cctFactor = 0.35 + ((altitudeDeg + 6) / 6) ** 2 * 0.25;
112
+ }
113
+ else if (altitudeDeg < 25) {
114
+ const goldenHourEffect = Math.exp(-((altitudeDeg - 12.5) ** 2) / 100);
115
+ cctFactor = 0.6 - goldenHourEffect * 0.15 + (altitudeDeg / 25) * 0.3;
116
+ }
117
+ else if (altitudeDeg < 50) {
118
+ cctFactor = 0.75 + ((altitudeDeg - 25) / 25) * 0.2;
119
+ }
120
+ else {
121
+ cctFactor = Math.min(1.0, 0.95 + ((altitudeDeg - 50) / 40) * 0.05);
122
+ }
123
+ const calculateRawIntensity = (altDeg) => {
124
+ if (altDeg < -6)
125
+ return 0;
126
+ if (altDeg < 5)
127
+ return (Math.max(0, altDeg + 6) / 11) ** 4 * 0.15;
128
+ if (altDeg < 20) {
129
+ const zenithAngle = Math.max(0.01, ((90 - altDeg) * Math.PI) / 180);
130
+ const relativeLuminance = Math.exp(-0.2 / Math.max(0.01, Math.cos(zenithAngle)));
131
+ return Math.min(0.4, relativeLuminance * 0.35 + 0.05);
132
+ }
133
+ if (altDeg < 45)
134
+ return 0.25 + ((altDeg - 20) / 25) * 0.65;
135
+ if (altDeg < 80)
136
+ return 0.9 + ((altDeg - 45) / 35) * 0.1;
137
+ return 1.0;
138
+ };
139
+ const rawIntensity = calculateRawIntensity(altitudeDeg);
140
+ const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
141
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
142
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
143
+ }
144
+ /**
145
+ * Kasten-Young air mass formula.
146
+ * Accurate even at low altitudes/horizon.
147
+ * @param altitudeDeg Altitude in degrees
148
+ */
149
+ function calculateAirMass(altitudeDeg) {
150
+ // The Kasten-Young formula is valid for altitude > -0.5 deg.
151
+ // Below that, the atmosphere is essentially opaque for direct sunlight.
152
+ const gamma = Math.max(-0.5, altitudeDeg);
153
+ return 1 / (Math.sin((gamma * Math.PI) / 180) + 0.50572 * (gamma + 6.07995) ** -1.6364);
154
+ }
155
+ /**
156
+ * Physics-based Atmospheric model.
157
+ * Uses Beer-Lambert law for intensity and exponential decay for CCT.
158
+ * @param altitude Sun altitude in radians
159
+ * @param maxAltitude Maximum sun altitude for the day in radians
160
+ */
161
+ export function calculateRealisticPhysicsDaylight(altitude, maxAltitude) {
162
+ const altitudeDeg = (altitude * 180) / Math.PI;
163
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
164
+ // CCT: Exponential approach to zenith CCT
165
+ // Factors: 0 at horizon/twilight, 1 at zenith
166
+ let cctFactor;
167
+ if (altitudeDeg < -6) {
168
+ cctFactor = 0;
169
+ }
170
+ else {
171
+ // k=0.05 gives a nice natural curve
172
+ cctFactor = 1 - Math.exp(-0.05 * (altitudeDeg + 6));
173
+ }
174
+ // Intensity: Beer-Lambert Law
175
+ // I = I0 * tau ^ m
176
+ const calculateIntensity = (altDeg) => {
177
+ if (altDeg < -6)
178
+ return 0;
179
+ // Direct Component (Beer-Lambert)
180
+ const m = calculateAirMass(altDeg);
181
+ const tau = 0.75; // Standard clear sky transmittance
182
+ const direct = tau ** m;
183
+ // Ambient Component (Diffuse twilight glow)
184
+ // Reaches ~5% of possible direct intensity at horizon
185
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.05 : 0.05 + (altDeg / 90) * 0.05;
186
+ return direct + ambient;
187
+ };
188
+ const rawIntensity = calculateIntensity(altitudeDeg);
189
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
190
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
191
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
192
+ }
193
+ /**
194
+ * Blackbody Sun model.
195
+ * Simulates the sun as a blackbody shifting through the atmosphere.
196
+ * @param altitude Sun altitude in radians
197
+ * @param maxAltitude Maximum sun altitude for the day in radians
198
+ */
199
+ export function calculateRealisticBlackbodyDaylight(altitude, maxAltitude) {
200
+ const altitudeDeg = (altitude * 180) / Math.PI;
201
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
202
+ let cctFactor;
203
+ if (altitudeDeg < -6) {
204
+ cctFactor = 0;
205
+ }
206
+ else {
207
+ // Shifts faster at the beginning, then stabilizes.
208
+ // Simulates the Rayleigh scattering effect where blue light is lost at low angles.
209
+ cctFactor = 1 - Math.exp(-0.08 * (altitudeDeg + 6));
210
+ }
211
+ const calculateIntensity = (altDeg) => {
212
+ if (altDeg < -6)
213
+ return 0;
214
+ const m = calculateAirMass(altDeg);
215
+ const tau = 0.7;
216
+ const direct = tau ** m;
217
+ // Blackbody ambient is slightly warmer/weaker initially
218
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.04 : 0.04 + (altDeg / 90) * 0.04;
219
+ return direct + ambient;
220
+ };
221
+ const rawIntensity = calculateIntensity(altitudeDeg);
222
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
223
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
224
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
225
+ }
226
+ /**
227
+ * Hazy/Turbid model.
228
+ * Simulates a sky with high particulate matter (smog/mist).
229
+ * @param altitude Sun altitude in radians
230
+ * @param maxAltitude Maximum sun altitude for the day in radians
231
+ */
232
+ export function calculateRealisticHazyDaylight(altitude, maxAltitude) {
233
+ const altitudeDeg = (altitude * 180) / Math.PI;
234
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
235
+ let cctFactor;
236
+ if (altitudeDeg < -6) {
237
+ cctFactor = 0;
238
+ }
239
+ else {
240
+ // Hazy skies have more scattering even at high angles,
241
+ // so CCT doesn't reach "pure blue" as easily (approximated by slower exponent)
242
+ cctFactor = 1 - Math.exp(-0.03 * (altitudeDeg + 6));
243
+ }
244
+ const calculateIntensity = (altDeg) => {
245
+ if (altDeg < -6)
246
+ return 0;
247
+ const m = calculateAirMass(altDeg);
248
+ const tau = 0.5; // Significant turbidity
249
+ const direct = tau ** m;
250
+ // Hazy ambient is stronger due to more scattering (Mie scattering)
251
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 1.5 * 0.08 : 0.08 + (altDeg / 90) * 0.04;
252
+ return direct + ambient;
253
+ };
254
+ const rawIntensity = calculateIntensity(altitudeDeg);
255
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
256
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
257
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor)), rawIntensity];
258
+ }
259
+ //# sourceMappingURL=realistic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realistic.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geoipUtil.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgB9D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geoipUtil.js","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,iFAAiF;IACjF,wCAAwC;IACxC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC9C,4CAA4C;QAC5C,4BAA4B;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,EAAE,EAAE,GAAG,CAAC,EAAsB;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Schedule } from './scheduleMaker.js';
2
+ export interface GraphScheduleOptions {
3
+ width?: number;
4
+ height?: number;
5
+ metrics?: 'cct' | 'intensity' | 'lux' | 'both' | 'all';
6
+ }
7
+ export declare function graphSchedule(schedule: Schedule, options?: GraphScheduleOptions): Promise<Buffer>;
8
+ //# sourceMappingURL=graphSchedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphSchedule.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;CACxD;AAyBD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkH3G"}