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.
- package/README.md +48 -18
- package/dist/__tests__/autoCct.test.js +2 -2
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/autostart.test.js +1 -1
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/cctUtil.test.js +19 -2
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/intensityApi.test.js +4 -1
- package/dist/__tests__/intensityApi.test.js.map +1 -1
- package/dist/__tests__/lightControl.test.js +260 -1
- package/dist/__tests__/lightControl.test.js.map +1 -1
- package/dist/__tests__/simulateSchedule.test.js +2 -2
- package/dist/__tests__/simulateSchedule.test.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/integration.test.js +1 -1
- package/dist/commands/__tests__/integration.test.js.map +1 -1
- package/dist/commands/__tests__/newCommands.test.d.ts +2 -0
- package/dist/commands/__tests__/newCommands.test.d.ts.map +1 -0
- package/dist/commands/__tests__/newCommands.test.js +195 -0
- package/dist/commands/__tests__/newCommands.test.js.map +1 -0
- package/dist/commands/cmdUtils.d.ts +23 -0
- package/dist/commands/cmdUtils.d.ts.map +1 -0
- package/dist/commands/cmdUtils.js +43 -0
- package/dist/commands/cmdUtils.js.map +1 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
- package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
- package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
- package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
- package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.js +65 -0
- package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
- package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
- package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
- package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
- package/dist/commands/daylightSimulation/service.js.map +1 -0
- package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
- package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
- package/dist/commands/deviceControl/cct.d.ts.map +1 -0
- package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
- package/dist/commands/deviceControl/cct.js.map +1 -0
- package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
- package/dist/commands/deviceControl/color.d.ts.map +1 -0
- package/dist/commands/deviceControl/color.js +52 -0
- package/dist/commands/deviceControl/color.js.map +1 -0
- package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
- package/dist/commands/deviceControl/config.d.ts.map +1 -0
- package/dist/commands/{config.js → deviceControl/config.js} +11 -7
- package/dist/commands/deviceControl/config.js.map +1 -0
- package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
- package/dist/commands/deviceControl/discover.d.ts.map +1 -0
- package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
- package/dist/commands/deviceControl/discover.js.map +1 -0
- package/dist/commands/deviceControl/effect.d.ts +5 -0
- package/dist/commands/deviceControl/effect.d.ts.map +1 -0
- package/dist/commands/deviceControl/effect.js +172 -0
- package/dist/commands/deviceControl/effect.js.map +1 -0
- package/dist/commands/deviceControl/fan.d.ts +5 -0
- package/dist/commands/deviceControl/fan.d.ts.map +1 -0
- package/dist/commands/deviceControl/fan.js +105 -0
- package/dist/commands/deviceControl/fan.js.map +1 -0
- package/dist/commands/deviceControl/firmware.d.ts +5 -0
- package/dist/commands/deviceControl/firmware.d.ts.map +1 -0
- package/dist/commands/deviceControl/firmware.js +68 -0
- package/dist/commands/deviceControl/firmware.js.map +1 -0
- package/dist/commands/deviceControl/group.d.ts +5 -0
- package/dist/commands/deviceControl/group.d.ts.map +1 -0
- package/dist/commands/deviceControl/group.js +101 -0
- package/dist/commands/deviceControl/group.js.map +1 -0
- package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
- package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
- package/dist/commands/deviceControl/hsi.js +50 -0
- package/dist/commands/deviceControl/hsi.js.map +1 -0
- package/dist/commands/deviceControl/info.d.ts +5 -0
- package/dist/commands/deviceControl/info.d.ts.map +1 -0
- package/dist/commands/deviceControl/info.js +57 -0
- package/dist/commands/deviceControl/info.js.map +1 -0
- package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
- package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
- package/dist/commands/deviceControl/intensity.js +41 -0
- package/dist/commands/deviceControl/intensity.js.map +1 -0
- package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
- package/dist/commands/deviceControl/list.d.ts.map +1 -0
- package/dist/commands/{list.js → deviceControl/list.js} +7 -3
- package/dist/commands/deviceControl/list.js.map +1 -0
- package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
- package/dist/commands/deviceControl/power.d.ts.map +1 -0
- package/dist/commands/deviceControl/power.js +78 -0
- package/dist/commands/deviceControl/power.js.map +1 -0
- package/dist/commands/deviceControl/preset.d.ts +5 -0
- package/dist/commands/deviceControl/preset.d.ts.map +1 -0
- package/dist/commands/deviceControl/preset.js +55 -0
- package/dist/commands/deviceControl/preset.js.map +1 -0
- package/dist/commands/deviceControl/quickshot.d.ts +5 -0
- package/dist/commands/deviceControl/quickshot.d.ts.map +1 -0
- package/dist/commands/deviceControl/quickshot.js +51 -0
- package/dist/commands/deviceControl/quickshot.js.map +1 -0
- package/dist/commands/deviceControl/scene.d.ts +5 -0
- package/dist/commands/deviceControl/scene.d.ts.map +1 -0
- package/dist/commands/deviceControl/scene.js +101 -0
- package/dist/commands/deviceControl/scene.js.map +1 -0
- package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
- package/dist/commands/deviceControl/status.d.ts.map +1 -0
- package/dist/commands/deviceControl/status.js +48 -0
- package/dist/commands/deviceControl/status.js.map +1 -0
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +34 -43
- package/dist/commands.js.map +1 -1
- package/dist/daylightSimulation/cctUtil.d.ts +5 -0
- package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/cctUtil.js +191 -0
- package/dist/daylightSimulation/cctUtil.js.map +1 -0
- package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +1 -18
- package/dist/daylightSimulation/constants.d.ts.map +1 -0
- package/dist/{constants.js → daylightSimulation/constants.js} +1 -13
- package/dist/daylightSimulation/constants.js.map +1 -0
- package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
- package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/approximations.js +27 -0
- package/dist/daylightSimulation/curves/approximations.js.map +1 -0
- package/dist/daylightSimulation/curves/index.d.ts +15 -0
- package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/index.js +56 -0
- package/dist/daylightSimulation/curves/index.js.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.js +33 -0
- package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
- package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
- package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/realistic.js +259 -0
- package/dist/daylightSimulation/curves/realistic.js.map +1 -0
- package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/geoipUtil.js.map +1 -0
- package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
- package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/graphSchedule.js +116 -0
- package/dist/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts +33 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.js +192 -0
- package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
- package/dist/daylightSimulation/textSchedule.d.ts +9 -0
- package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/textSchedule.js +172 -0
- package/dist/daylightSimulation/textSchedule.js.map +1 -0
- package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +7 -5
- package/dist/daylightSimulation/types.d.ts.map +1 -0
- package/dist/daylightSimulation/types.js +16 -0
- package/dist/daylightSimulation/types.js.map +1 -0
- package/dist/deviceControl/autostart.d.ts.map +1 -0
- package/dist/deviceControl/autostart.js.map +1 -0
- package/dist/deviceControl/constants.d.ts +23 -0
- package/dist/deviceControl/constants.d.ts.map +1 -0
- package/dist/deviceControl/constants.js +20 -0
- package/dist/deviceControl/constants.js.map +1 -0
- package/dist/deviceControl/discovery.d.ts.map +1 -0
- package/dist/{discovery.js → deviceControl/discovery.js} +0 -2
- package/dist/deviceControl/discovery.js.map +1 -0
- package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +67 -78
- package/dist/deviceControl/lightControl.d.ts.map +1 -0
- package/dist/{lightControl.js → deviceControl/lightControl.js} +292 -203
- package/dist/deviceControl/lightControl.js.map +1 -0
- package/dist/deviceControl/types.d.ts +59 -0
- package/dist/deviceControl/types.d.ts.map +1 -0
- package/dist/deviceControl/types.js.map +1 -0
- package/dist/test/MockLightServer.d.ts.map +1 -1
- package/dist/test/MockLightServer.js +134 -12
- package/dist/test/MockLightServer.js.map +1 -1
- package/package.json +11 -7
- package/scripts/extract-api.ts +158 -0
- package/scripts/extract-usage.ts +199 -0
- package/scripts/release.js +11 -11
- package/CHANGELOG.md +0 -67
- package/dist/autostart.d.ts.map +0 -1
- package/dist/autostart.js.map +0 -1
- package/dist/cctUtil.d.ts.map +0 -1
- package/dist/cctUtil.js +0 -435
- package/dist/cctUtil.js.map +0 -1
- package/dist/commands/autoCct.d.ts +0 -5
- package/dist/commands/autoCct.d.ts.map +0 -1
- package/dist/commands/autoCct.js.map +0 -1
- package/dist/commands/cct.d.ts.map +0 -1
- package/dist/commands/cct.js.map +0 -1
- package/dist/commands/color.d.ts.map +0 -1
- package/dist/commands/color.js +0 -57
- package/dist/commands/color.js.map +0 -1
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/discover.d.ts.map +0 -1
- package/dist/commands/discover.js.map +0 -1
- package/dist/commands/graphSchedule.d.ts.map +0 -1
- package/dist/commands/graphSchedule.js +0 -293
- package/dist/commands/graphSchedule.js.map +0 -1
- package/dist/commands/hsi.d.ts.map +0 -1
- package/dist/commands/hsi.js +0 -59
- package/dist/commands/hsi.js.map +0 -1
- package/dist/commands/intensity.d.ts.map +0 -1
- package/dist/commands/intensity.js +0 -50
- package/dist/commands/intensity.js.map +0 -1
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/power.d.ts.map +0 -1
- package/dist/commands/power.js +0 -120
- package/dist/commands/power.js.map +0 -1
- package/dist/commands/printSchedule.d.ts +0 -5
- package/dist/commands/printSchedule.d.ts.map +0 -1
- package/dist/commands/printSchedule.js +0 -452
- package/dist/commands/printSchedule.js.map +0 -1
- package/dist/commands/service.d.ts.map +0 -1
- package/dist/commands/service.js.map +0 -1
- package/dist/commands/simulateSchedule.d.ts.map +0 -1
- package/dist/commands/simulateSchedule.js +0 -199
- package/dist/commands/simulateSchedule.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -48
- package/dist/commands/status.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/discovery.d.ts.map +0 -1
- package/dist/discovery.js.map +0 -1
- package/dist/geoipUtil.d.ts.map +0 -1
- package/dist/geoipUtil.js.map +0 -1
- package/dist/lightControl.d.ts.map +0 -1
- package/dist/lightControl.js.map +0 -1
- package/dist/types.d.ts +0 -41
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
- /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
- /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
- /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
- /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
- /package/dist/{types.js → deviceControl/types.js} +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ChartJSNodeCanvas } from 'chartjs-node-canvas';
|
|
2
|
+
const COLORS = [
|
|
3
|
+
'rgb(54, 162, 235)', // Blue
|
|
4
|
+
'rgb(255, 99, 132)', // Red
|
|
5
|
+
'rgb(75, 192, 192)', // Teal
|
|
6
|
+
'rgb(255, 205, 86)', // Yellow
|
|
7
|
+
'rgb(153, 102, 255)', // Purple
|
|
8
|
+
'rgb(255, 159, 64)', // Orange
|
|
9
|
+
'rgb(75, 192, 75)', // Green
|
|
10
|
+
'rgb(255, 0, 255)', // Magenta
|
|
11
|
+
];
|
|
12
|
+
export async function graphSchedule(schedule, options = {}) {
|
|
13
|
+
const width = options.width || 1200;
|
|
14
|
+
const height = options.height || 600;
|
|
15
|
+
const metrics = options.metrics || 'both';
|
|
16
|
+
const canvas = new ChartJSNodeCanvas({ width, height });
|
|
17
|
+
const datasets = [];
|
|
18
|
+
const labels = schedule.points.map((p) => {
|
|
19
|
+
if (p.time.getMinutes() === 0) {
|
|
20
|
+
return p.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
});
|
|
24
|
+
const showIntensity = metrics === 'intensity' || metrics === 'both' || metrics === 'all';
|
|
25
|
+
const showCct = metrics === 'cct' || metrics === 'both' || metrics === 'all';
|
|
26
|
+
const showLux = metrics === 'lux' || metrics === 'all';
|
|
27
|
+
schedule.curves.forEach((curve, index) => {
|
|
28
|
+
const color = schedule.curves.length > 1 ? COLORS[index % COLORS.length] : 'rgb(54, 162, 235)';
|
|
29
|
+
const cctColor = schedule.curves.length > 1 ? COLORS[(index + 1) % COLORS.length] : 'rgb(255, 99, 132)';
|
|
30
|
+
const luxColor = schedule.curves.length > 1 ? COLORS[(index + 2) % COLORS.length] : 'rgb(75, 192, 75)';
|
|
31
|
+
if (showIntensity) {
|
|
32
|
+
datasets.push({
|
|
33
|
+
label: schedule.curves.length > 1 ? `${curve} (Int)` : 'Intensity (%)',
|
|
34
|
+
data: schedule.points.map((p) => (p.values.get(curve)?.intensity ?? 0) / 10),
|
|
35
|
+
borderColor: color,
|
|
36
|
+
backgroundColor: 'transparent',
|
|
37
|
+
yAxisID: 'y',
|
|
38
|
+
fill: false,
|
|
39
|
+
borderDash: showIntensity && showCct ? [5, 5] : [],
|
|
40
|
+
pointRadius: 0,
|
|
41
|
+
borderWidth: 2,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (showCct) {
|
|
45
|
+
datasets.push({
|
|
46
|
+
label: schedule.curves.length > 1 ? `${curve} (CCT)` : 'CCT (K)',
|
|
47
|
+
data: schedule.points.map((p) => p.values.get(curve)?.cct ?? 0),
|
|
48
|
+
borderColor: cctColor,
|
|
49
|
+
backgroundColor: 'transparent',
|
|
50
|
+
yAxisID: 'y1',
|
|
51
|
+
fill: false,
|
|
52
|
+
pointRadius: 0,
|
|
53
|
+
borderWidth: 2,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (showLux) {
|
|
57
|
+
datasets.push({
|
|
58
|
+
label: schedule.curves.length > 1 ? `${curve} (Lux)` : 'Light Output (Lux)',
|
|
59
|
+
data: schedule.points.map((p) => p.values.get(curve)?.lightOutput ?? 0),
|
|
60
|
+
borderColor: luxColor,
|
|
61
|
+
backgroundColor: 'transparent',
|
|
62
|
+
yAxisID: 'y2',
|
|
63
|
+
fill: false,
|
|
64
|
+
pointRadius: 0,
|
|
65
|
+
borderWidth: 2,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const titleCurve = schedule.curves.length > 1 ? (schedule.curves.length === 7 ? 'All Curves' : 'Multiple Curves') : schedule.curves[0];
|
|
70
|
+
const configuration = {
|
|
71
|
+
type: 'line',
|
|
72
|
+
data: { labels, datasets },
|
|
73
|
+
options: {
|
|
74
|
+
plugins: {
|
|
75
|
+
title: {
|
|
76
|
+
display: true,
|
|
77
|
+
text: `Schedule: ${schedule.date.toDateString()} (Lat: ${schedule.lat.toFixed(2)}, Lon: ${schedule.lon.toFixed(2)}) - Curve: ${titleCurve}`,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
scales: {
|
|
81
|
+
x: {
|
|
82
|
+
ticks: {
|
|
83
|
+
autoSkip: false,
|
|
84
|
+
maxRotation: 45,
|
|
85
|
+
callback: (_val, index) => labels[index],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
y: {
|
|
89
|
+
type: 'linear',
|
|
90
|
+
display: showIntensity,
|
|
91
|
+
position: 'left',
|
|
92
|
+
title: { display: true, text: 'Intensity (%)' },
|
|
93
|
+
min: 0,
|
|
94
|
+
max: 100,
|
|
95
|
+
},
|
|
96
|
+
y1: {
|
|
97
|
+
type: 'linear',
|
|
98
|
+
display: showCct,
|
|
99
|
+
position: 'right',
|
|
100
|
+
title: { display: true, text: 'CCT (K)' },
|
|
101
|
+
},
|
|
102
|
+
y2: {
|
|
103
|
+
type: 'linear',
|
|
104
|
+
display: showLux,
|
|
105
|
+
position: 'right',
|
|
106
|
+
title: { display: true, text: 'Light Output (Lux)' },
|
|
107
|
+
grid: { drawOnChartArea: false }, // Only show grid for left axis
|
|
108
|
+
min: 0,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
// biome-ignore lint/suspicious/noExplicitAny: Chart.js configuration type is complex
|
|
114
|
+
return await canvas.renderToBuffer(configuration);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=graphSchedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphSchedule.js","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CCTResult, CommandDeps } from './types.js';
|
|
2
|
+
export interface SchedulePoint {
|
|
3
|
+
time: Date;
|
|
4
|
+
values: Map<string, CCTResult>;
|
|
5
|
+
isSpecial: boolean;
|
|
6
|
+
eventName?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Schedule {
|
|
9
|
+
lat: number;
|
|
10
|
+
lon: number;
|
|
11
|
+
date: Date;
|
|
12
|
+
source: string;
|
|
13
|
+
points: SchedulePoint[];
|
|
14
|
+
curves: string[];
|
|
15
|
+
times: Record<string, Date | null | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export interface MakeScheduleOptions {
|
|
18
|
+
lat?: string;
|
|
19
|
+
lon?: string;
|
|
20
|
+
date?: string;
|
|
21
|
+
intervalMinutes?: number;
|
|
22
|
+
curves?: string;
|
|
23
|
+
includeSpecialTimes?: boolean;
|
|
24
|
+
bufferMinutes?: number;
|
|
25
|
+
startTime?: Date;
|
|
26
|
+
endTime?: Date;
|
|
27
|
+
}
|
|
28
|
+
export declare class ScheduleMaker {
|
|
29
|
+
private deps;
|
|
30
|
+
constructor(deps: CommandDeps);
|
|
31
|
+
makeSchedule(options: MakeScheduleOptions): Promise<Schedule>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=scheduleMaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleMaker.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/scheduleMaker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAc;gBAEd,IAAI,EAAE,WAAW;IAIvB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkMpE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { SPECIAL_TIME_CONFIG } from './constants.js';
|
|
2
|
+
export class ScheduleMaker {
|
|
3
|
+
deps;
|
|
4
|
+
constructor(deps) {
|
|
5
|
+
this.deps = deps;
|
|
6
|
+
}
|
|
7
|
+
async makeSchedule(options) {
|
|
8
|
+
const { getLocationFromIP } = await import('./geoipUtil.js');
|
|
9
|
+
const { calculateCCT, CurveType, parseCurveType } = await import('./cctUtil.js');
|
|
10
|
+
const SunCalc = (await import('suncalc')).default;
|
|
11
|
+
const { getTimes } = SunCalc;
|
|
12
|
+
const { loadConfig } = this.deps;
|
|
13
|
+
let lat;
|
|
14
|
+
let lon;
|
|
15
|
+
const date = options.date ? new Date(options.date) : new Date();
|
|
16
|
+
let source = '';
|
|
17
|
+
if (options.date && Number.isNaN(date.getTime())) {
|
|
18
|
+
throw new Error('Invalid date format. Use ISO format (e.g., 2025-10-26)');
|
|
19
|
+
}
|
|
20
|
+
// Resolve Lat/Lon
|
|
21
|
+
if (options.lat !== undefined && options.lon !== undefined) {
|
|
22
|
+
lat = parseFloat(options.lat);
|
|
23
|
+
lon = parseFloat(options.lon);
|
|
24
|
+
if (Number.isNaN(lat) || lat < -90 || lat > 90)
|
|
25
|
+
throw new Error('Latitude must be between -90 and 90');
|
|
26
|
+
if (Number.isNaN(lon) || lon < -180 || lon > 180)
|
|
27
|
+
throw new Error('Longitude must be between -180 and 180');
|
|
28
|
+
source = 'manual';
|
|
29
|
+
}
|
|
30
|
+
else if (loadConfig) {
|
|
31
|
+
const config = loadConfig();
|
|
32
|
+
if (config && typeof config.latitude === 'number' && typeof config.longitude === 'number') {
|
|
33
|
+
lat = config.latitude;
|
|
34
|
+
lon = config.longitude;
|
|
35
|
+
source = 'config';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (lat === undefined || lon === undefined) {
|
|
39
|
+
try {
|
|
40
|
+
const res = await fetch('https://api.ipify.org?format=json');
|
|
41
|
+
const data = await res.json();
|
|
42
|
+
const location = getLocationFromIP(data.ip);
|
|
43
|
+
if (!location || !location.ll)
|
|
44
|
+
throw new Error('Could not determine location');
|
|
45
|
+
[lat, lon] = location.ll;
|
|
46
|
+
source = `geoip (${data.ip})`;
|
|
47
|
+
}
|
|
48
|
+
catch (_err) {
|
|
49
|
+
throw new Error('Could not determine location. Use --lat and --lon to specify manually.');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Resolve Curves
|
|
53
|
+
const allCurveTypesOrdered = [
|
|
54
|
+
'HANN',
|
|
55
|
+
'WIDER_MIDDLE_SMALL',
|
|
56
|
+
'WIDER_MIDDLE_MEDIUM',
|
|
57
|
+
'WIDER_MIDDLE_LARGE',
|
|
58
|
+
'CIE_DAYLIGHT',
|
|
59
|
+
'SUN_ALTITUDE',
|
|
60
|
+
'PEREZ_DAYLIGHT',
|
|
61
|
+
'PHYSICS',
|
|
62
|
+
'BLACKBODY',
|
|
63
|
+
'HAZY',
|
|
64
|
+
];
|
|
65
|
+
let curveTypes = ['HANN'];
|
|
66
|
+
const curveOption = options.curves?.toLowerCase() || '';
|
|
67
|
+
if (curveOption === 'all') {
|
|
68
|
+
curveTypes = [...allCurveTypesOrdered];
|
|
69
|
+
}
|
|
70
|
+
else if (curveOption) {
|
|
71
|
+
const parts = curveOption.split(',').map((s) => s.trim());
|
|
72
|
+
const parsedList = [];
|
|
73
|
+
for (const part of parts) {
|
|
74
|
+
if (part === 'all') {
|
|
75
|
+
parsedList.push(...allCurveTypesOrdered);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
parsedList.push(parseCurveType(part));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const unique = new Set(parsedList);
|
|
82
|
+
curveTypes = allCurveTypesOrdered.filter((c) => unique.has(c));
|
|
83
|
+
}
|
|
84
|
+
else if (loadConfig) {
|
|
85
|
+
const config = loadConfig();
|
|
86
|
+
if (config?.defaultCurve) {
|
|
87
|
+
try {
|
|
88
|
+
curveTypes = [parseCurveType(config.defaultCurve)];
|
|
89
|
+
}
|
|
90
|
+
catch (_) {
|
|
91
|
+
curveTypes = [...allCurveTypesOrdered];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
curveTypes = [...allCurveTypesOrdered];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
curveTypes = [...allCurveTypesOrdered];
|
|
100
|
+
}
|
|
101
|
+
const times = getTimes(date, lat, lon);
|
|
102
|
+
const specialTimesMap = new Map();
|
|
103
|
+
for (const config of SPECIAL_TIME_CONFIG) {
|
|
104
|
+
const t = times[config.key];
|
|
105
|
+
if (t && !Number.isNaN(t.getTime())) {
|
|
106
|
+
specialTimesMap.set(t.getTime(), config.key);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (times.nadir && !Number.isNaN(times.nadir.getTime())) {
|
|
110
|
+
specialTimesMap.set(times.nadir.getTime(), 'nadir');
|
|
111
|
+
}
|
|
112
|
+
// Determine generation bounds
|
|
113
|
+
let genStart = options.startTime;
|
|
114
|
+
let genEnd = options.endTime;
|
|
115
|
+
if (!genStart || !genEnd) {
|
|
116
|
+
const rangeTimes = Array.from(specialTimesMap.entries())
|
|
117
|
+
.filter(([_, key]) => key !== 'nadir')
|
|
118
|
+
.map(([t, _]) => t);
|
|
119
|
+
if (rangeTimes.length === 0)
|
|
120
|
+
throw new Error('Could not calculate special times for range');
|
|
121
|
+
const minTime = Math.min(...rangeTimes);
|
|
122
|
+
const maxTime = Math.max(...rangeTimes);
|
|
123
|
+
const bufferMs = (options.bufferMinutes ?? 30) * 60 * 1000;
|
|
124
|
+
if (!genStart)
|
|
125
|
+
genStart = new Date(minTime - bufferMs);
|
|
126
|
+
if (!genEnd)
|
|
127
|
+
genEnd = new Date(maxTime + bufferMs);
|
|
128
|
+
}
|
|
129
|
+
const intervalMs = (options.intervalMinutes ?? 30) * 60 * 1000;
|
|
130
|
+
const allTimeStamps = new Set();
|
|
131
|
+
// Add intervals
|
|
132
|
+
let curr = genStart.getTime();
|
|
133
|
+
while (curr <= genEnd.getTime()) {
|
|
134
|
+
allTimeStamps.add(curr);
|
|
135
|
+
curr += intervalMs;
|
|
136
|
+
}
|
|
137
|
+
// Add special times if requested
|
|
138
|
+
if (options.includeSpecialTimes !== false) {
|
|
139
|
+
for (const t of specialTimesMap.keys()) {
|
|
140
|
+
if (t >= genStart.getTime() && t <= genEnd.getTime()) {
|
|
141
|
+
allTimeStamps.add(t);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const sortedTimes = Array.from(allTimeStamps).sort((a, b) => a - b);
|
|
146
|
+
const uniqueTimes = [];
|
|
147
|
+
const threshold = 30000; // 30s
|
|
148
|
+
for (const t of sortedTimes) {
|
|
149
|
+
if (uniqueTimes.length === 0 || t - uniqueTimes[uniqueTimes.length - 1] > threshold) {
|
|
150
|
+
uniqueTimes.push(t);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Load config bounds
|
|
154
|
+
const cfg = (loadConfig?.() ?? {});
|
|
155
|
+
const cctOpts = {
|
|
156
|
+
cctMinK: typeof cfg.cctMin === 'number' ? cfg.cctMin : undefined,
|
|
157
|
+
cctMaxK: typeof cfg.cctMax === 'number' ? cfg.cctMax : undefined,
|
|
158
|
+
intensityMinPct: typeof cfg.intensityMin === 'number' ? cfg.intensityMin : undefined,
|
|
159
|
+
intensityMaxPct: typeof cfg.intensityMax === 'number' ? cfg.intensityMax : undefined,
|
|
160
|
+
};
|
|
161
|
+
if (lat === undefined || lon === undefined) {
|
|
162
|
+
throw new Error('Location is required for schedule points');
|
|
163
|
+
}
|
|
164
|
+
const points = uniqueTimes.map((t) => {
|
|
165
|
+
const currentTime = new Date(t);
|
|
166
|
+
const values = new Map();
|
|
167
|
+
for (const curve of curveTypes) {
|
|
168
|
+
const result = calculateCCT(lat, lon, currentTime, cctOpts, CurveType[curve]);
|
|
169
|
+
values.set(curve, result);
|
|
170
|
+
}
|
|
171
|
+
const eventKey = specialTimesMap.get(t);
|
|
172
|
+
return {
|
|
173
|
+
time: currentTime,
|
|
174
|
+
values,
|
|
175
|
+
isSpecial: !!eventKey,
|
|
176
|
+
eventName: eventKey,
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
lat,
|
|
181
|
+
lon,
|
|
182
|
+
date,
|
|
183
|
+
source,
|
|
184
|
+
points,
|
|
185
|
+
curves: curveTypes,
|
|
186
|
+
times: {
|
|
187
|
+
...times,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=scheduleMaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleMaker.js","sourceRoot":"","sources":["../../src/daylightSimulation/scheduleMaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAgCrD,MAAM,OAAO,aAAa;IAChB,IAAI,CAAc;IAE1B,YAAY,IAAiB;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC7B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEjC,IAAI,GAAuB,CAAC;QAC5B,IAAI,GAAuB,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAChE,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3D,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACvG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5G,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC1F,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACtB,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;gBACvB,MAAM,GAAG,QAAQ,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBAC7D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC/E,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,UAAU,IAAI,CAAC,EAAE,GAAG,CAAC;YAChC,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,oBAAoB,GAAG;YAC3B,MAAM;YACN,oBAAoB;YACpB,qBAAqB;YACrB,oBAAoB;YACpB,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,SAAS;YACT,WAAW;YACX,MAAM;SACuB,CAAC;QAEhC,IAAI,UAAU,GAA+B,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAExD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,UAAU,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,UAAU,GAA+B,EAAE,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;oBACnB,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACnC,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,UAAU,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,UAAU,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAyB,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACpC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACxD,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,8BAA8B;QAC9B,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QACjC,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;iBACrD,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAE3D,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,gBAAgB;QAChB,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAChC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,IAAI,UAAU,CAAC;QACrB,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM;QAE/B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;gBACpF,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAA4B,CAAC;QAC9D,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAChE,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAChE,eAAe,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACpF,eAAe,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACrF,CAAC;QAEF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAoB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;YAE5C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9E,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM;gBACN,SAAS,EAAE,CAAC,CAAC,QAAQ;gBACrB,SAAS,EAAE,QAAQ;aACpB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,GAAG;YACH,GAAG;YACH,IAAI;YACJ,MAAM;YACN,MAAM;YACN,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE;gBACL,GAAG,KAAK;aACkC;SAC7C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Schedule } from './scheduleMaker.js';
|
|
2
|
+
export interface TextScheduleOptions {
|
|
3
|
+
csv?: boolean;
|
|
4
|
+
private?: boolean;
|
|
5
|
+
interval?: string;
|
|
6
|
+
stripAnsi?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function textSchedule(schedule: Schedule, options?: TextScheduleOptions): string;
|
|
9
|
+
//# sourceMappingURL=textSchedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textSchedule.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/textSchedule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkDD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CA0J1F"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { SPECIAL_TIME_CONFIG } from './constants.js';
|
|
3
|
+
// Helper function to get color and emoji for a special time
|
|
4
|
+
function getSpecialTimeStyling(currentTime, times) {
|
|
5
|
+
const isSpecialTime = (specialTime) => {
|
|
6
|
+
if (!specialTime || Number.isNaN(specialTime.getTime()))
|
|
7
|
+
return false;
|
|
8
|
+
return Math.abs(currentTime.getTime() - specialTime.getTime()) < 30000; // 30 seconds
|
|
9
|
+
};
|
|
10
|
+
for (const config of SPECIAL_TIME_CONFIG) {
|
|
11
|
+
if (isSpecialTime(times[config.key])) {
|
|
12
|
+
return { color: config.color, emoji: config.emoji };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return { color: chalk.white, emoji: '' };
|
|
16
|
+
}
|
|
17
|
+
const formatCoordinate = (coord, isPrivate) => {
|
|
18
|
+
return isPrivate ? `${Math.round(coord)}.XXXX` : coord.toFixed(4);
|
|
19
|
+
};
|
|
20
|
+
const formatSource = (src, isPrivate) => {
|
|
21
|
+
if (!isPrivate || !src.includes('('))
|
|
22
|
+
return src;
|
|
23
|
+
const ipMatch = src.match(/(\d+\.\d+\.\d+\.\d+)/);
|
|
24
|
+
if (ipMatch) {
|
|
25
|
+
const ipParts = ipMatch[1].split('.');
|
|
26
|
+
ipParts[0] = 'XXX';
|
|
27
|
+
ipParts[1] = 'XXX';
|
|
28
|
+
ipParts[2] = 'XXX';
|
|
29
|
+
return src.replace(ipMatch[1], ipParts.join('.'));
|
|
30
|
+
}
|
|
31
|
+
return src;
|
|
32
|
+
};
|
|
33
|
+
const formatTitle = (key) => {
|
|
34
|
+
return key
|
|
35
|
+
.replace(/([A-Z])/g, ' $1')
|
|
36
|
+
.replace(/^([a-z])/, (c) => c.toUpperCase())
|
|
37
|
+
.trim();
|
|
38
|
+
};
|
|
39
|
+
const stripAnsiCodes = (message) => {
|
|
40
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: intentional use for ANSI stripping
|
|
41
|
+
return message.replace(/\u001b\[\d+m/g, '');
|
|
42
|
+
};
|
|
43
|
+
export function textSchedule(schedule, options = {}) {
|
|
44
|
+
const lines = [];
|
|
45
|
+
const isPrivate = options.private !== false;
|
|
46
|
+
const { csv, interval, stripAnsi } = options;
|
|
47
|
+
const push = (message) => {
|
|
48
|
+
lines.push(stripAnsi ? stripAnsiCodes(message) : message);
|
|
49
|
+
};
|
|
50
|
+
if (csv) {
|
|
51
|
+
// CSV Output
|
|
52
|
+
const header = ['DateTime', 'Location', 'Event'];
|
|
53
|
+
schedule.curves.forEach((c) => {
|
|
54
|
+
header.push(`${c}_CCT`, `${c}_Intensity`, `${c}_Lux`);
|
|
55
|
+
});
|
|
56
|
+
push(header.join(','));
|
|
57
|
+
for (const point of schedule.points) {
|
|
58
|
+
const dateTimeStr = point.time.toISOString();
|
|
59
|
+
const locationStr = `${schedule.lat},${schedule.lon}`;
|
|
60
|
+
const eventName = point.eventName ? formatTitle(point.eventName) : '';
|
|
61
|
+
const row = [dateTimeStr, `"${locationStr}"`, eventName];
|
|
62
|
+
schedule.curves.forEach((curve) => {
|
|
63
|
+
const val = point.values.get(curve);
|
|
64
|
+
row.push(val?.cct.toString() ?? '', val ? (val.intensity / 10).toFixed(1) : '', val?.lightOutput?.toString() ?? '');
|
|
65
|
+
});
|
|
66
|
+
push(row.join(','));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Standard Output
|
|
71
|
+
push(chalk.blue('\n═══════════════════════════════════════════════════════════'));
|
|
72
|
+
push(chalk.blue(' Auto-CCT Schedule Preview'));
|
|
73
|
+
push(chalk.blue('═══════════════════════════════════════════════════════════\n'));
|
|
74
|
+
push(chalk.cyan(`Location: ${formatCoordinate(schedule.lat, isPrivate)}°, ${formatCoordinate(schedule.lon, isPrivate)}° (${formatSource(schedule.source, isPrivate)})`));
|
|
75
|
+
push(chalk.cyan(`Date: ${schedule.date.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}`));
|
|
76
|
+
push(chalk.cyan(`Interval: Every ${interval ?? '30'} minute${interval !== '1' ? 's' : ''}`));
|
|
77
|
+
push(chalk.cyan(schedule.curves.length > 1
|
|
78
|
+
? `Curve: Multiple curves selected\n`
|
|
79
|
+
: `Curve: ${schedule.curves[0].toLowerCase()}\n`));
|
|
80
|
+
const allSpecialTimes = [
|
|
81
|
+
...SPECIAL_TIME_CONFIG.map((conf) => ({
|
|
82
|
+
key: conf.key,
|
|
83
|
+
emoji: conf.emoji,
|
|
84
|
+
color: conf.color,
|
|
85
|
+
time: schedule.times[conf.key],
|
|
86
|
+
})),
|
|
87
|
+
{ key: 'nadir', emoji: 'NA', color: chalk.blue, time: schedule.times.nadir },
|
|
88
|
+
].filter((item) => item.time && !Number.isNaN(item.time.getTime()));
|
|
89
|
+
const halfLength = Math.ceil(allSpecialTimes.length / 2);
|
|
90
|
+
for (let i = 0; i < halfLength; i++) {
|
|
91
|
+
const left = allSpecialTimes[i];
|
|
92
|
+
const right = allSpecialTimes[i + halfLength];
|
|
93
|
+
let line = '';
|
|
94
|
+
if (left?.time) {
|
|
95
|
+
const timeStr = left.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
96
|
+
line += left.color(`${`${left.emoji} ${formatTitle(left.key)}`.padEnd(20)}: ${timeStr}`);
|
|
97
|
+
}
|
|
98
|
+
if (right?.time) {
|
|
99
|
+
const timeStr = right.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
100
|
+
line += ` ${right.color(`${`${right.emoji} ${formatTitle(right.key)}`.padEnd(20)}: ${timeStr}`)}`;
|
|
101
|
+
}
|
|
102
|
+
push(line);
|
|
103
|
+
}
|
|
104
|
+
push(chalk.blue('\n'));
|
|
105
|
+
if (schedule.curves.length > 1) {
|
|
106
|
+
const headers = [
|
|
107
|
+
'Time',
|
|
108
|
+
...schedule.curves.map((c) => {
|
|
109
|
+
switch (c) {
|
|
110
|
+
case 'WIDER_MIDDLE_SMALL':
|
|
111
|
+
return 'WM_SML';
|
|
112
|
+
case 'WIDER_MIDDLE_MEDIUM':
|
|
113
|
+
return 'WM_MED';
|
|
114
|
+
case 'WIDER_MIDDLE_LARGE':
|
|
115
|
+
return 'WM_LRG';
|
|
116
|
+
case 'CIE_DAYLIGHT':
|
|
117
|
+
return 'CIE';
|
|
118
|
+
case 'SUN_ALTITUDE':
|
|
119
|
+
return 'SUN_ALT';
|
|
120
|
+
case 'PEREZ_DAYLIGHT':
|
|
121
|
+
return 'PEREZ';
|
|
122
|
+
case 'PHYSICS':
|
|
123
|
+
return 'PHYS';
|
|
124
|
+
case 'BLACKBODY':
|
|
125
|
+
return 'BLACK';
|
|
126
|
+
case 'HAZY':
|
|
127
|
+
return 'HAZY';
|
|
128
|
+
default:
|
|
129
|
+
return c.replace(/_/g, ' ');
|
|
130
|
+
}
|
|
131
|
+
}),
|
|
132
|
+
];
|
|
133
|
+
const colWidths = [13, ...schedule.curves.map(() => 12)];
|
|
134
|
+
const totalWidth = colWidths.reduce((a, b) => a + b, 0);
|
|
135
|
+
let headerLine = '';
|
|
136
|
+
headers.forEach((h, i) => {
|
|
137
|
+
headerLine += h.padEnd(colWidths[i]);
|
|
138
|
+
});
|
|
139
|
+
push(chalk.blue('─'.repeat(totalWidth)));
|
|
140
|
+
push(chalk.blue(headerLine));
|
|
141
|
+
push(chalk.blue('─'.repeat(totalWidth)));
|
|
142
|
+
for (const point of schedule.points) {
|
|
143
|
+
const timeStr = point.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
144
|
+
const { color, emoji } = getSpecialTimeStyling(point.time, schedule.times);
|
|
145
|
+
let rowLine = color(`${timeStr} ${emoji || ' '} `);
|
|
146
|
+
schedule.curves.forEach((curve, index) => {
|
|
147
|
+
const val = point.values.get(curve);
|
|
148
|
+
const valStr = val ? `${val.cct}K/${(val.intensity / 10).toFixed(0)}%` : '';
|
|
149
|
+
rowLine += color(valStr.padEnd(colWidths[index + 1]));
|
|
150
|
+
});
|
|
151
|
+
push(rowLine);
|
|
152
|
+
}
|
|
153
|
+
push(chalk.blue(`${'─'.repeat(totalWidth)}\n`));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const singleCurveWidth = 31;
|
|
157
|
+
push(chalk.blue('─'.repeat(singleCurveWidth)));
|
|
158
|
+
push(chalk.blue('Time CCT/Intensity'));
|
|
159
|
+
push(chalk.blue('─'.repeat(singleCurveWidth)));
|
|
160
|
+
for (const point of schedule.points) {
|
|
161
|
+
const val = point.values.get(schedule.curves[0]);
|
|
162
|
+
const timeStr = point.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
|
|
163
|
+
const valStr = val ? `${val.cct}K/${(val.intensity / 10).toFixed(0)}%`.padEnd(18) : '';
|
|
164
|
+
const { color, emoji } = getSpecialTimeStyling(point.time, schedule.times);
|
|
165
|
+
push(color(`${timeStr} ${emoji || ' '} ${valStr}`));
|
|
166
|
+
}
|
|
167
|
+
push(chalk.blue(`${'─'.repeat(singleCurveWidth)}\n`));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return lines.join('\n');
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=textSchedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textSchedule.js","sourceRoot":"","sources":["../../src/daylightSimulation/textSchedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
export * from '../deviceControl/types.js';
|
|
1
2
|
export interface CCTResult {
|
|
2
3
|
cct: number;
|
|
3
4
|
intensity: number;
|
|
5
|
+
lightOutput?: number;
|
|
4
6
|
}
|
|
5
7
|
export interface CCTOptions {
|
|
6
8
|
cctMinK?: number;
|
|
@@ -15,9 +17,9 @@ export declare enum CurveType {
|
|
|
15
17
|
WIDER_MIDDLE_LARGE = "wider-middle-large",
|
|
16
18
|
CIE_DAYLIGHT = "cie-daylight",
|
|
17
19
|
SUN_ALTITUDE = "sun-altitude",
|
|
18
|
-
PEREZ_DAYLIGHT = "perez-daylight"
|
|
20
|
+
PEREZ_DAYLIGHT = "perez-daylight",
|
|
21
|
+
PHYSICS = "physics",
|
|
22
|
+
BLACKBODY = "blackbody",
|
|
23
|
+
HAZY = "hazy"
|
|
19
24
|
}
|
|
20
|
-
|
|
21
|
-
export declare function getAvailableCurves(): string[];
|
|
22
|
-
export declare function calculateCCT(lat: number, lon: number, date?: Date, opts?: CCTOptions, curveType?: CurveType): CCTResult;
|
|
23
|
-
//# sourceMappingURL=cctUtil.d.ts.map
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/types.ts"],"names":[],"mappings":"AACA,cAAc,2BAA2B,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,IAAI,SAAS;CACd"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Daylight simulation specific types
|
|
2
|
+
export * from '../deviceControl/types.js';
|
|
3
|
+
export var CurveType;
|
|
4
|
+
(function (CurveType) {
|
|
5
|
+
CurveType["HANN"] = "hann";
|
|
6
|
+
CurveType["WIDER_MIDDLE_SMALL"] = "wider-middle-small";
|
|
7
|
+
CurveType["WIDER_MIDDLE_MEDIUM"] = "wider-middle-medium";
|
|
8
|
+
CurveType["WIDER_MIDDLE_LARGE"] = "wider-middle-large";
|
|
9
|
+
CurveType["CIE_DAYLIGHT"] = "cie-daylight";
|
|
10
|
+
CurveType["SUN_ALTITUDE"] = "sun-altitude";
|
|
11
|
+
CurveType["PEREZ_DAYLIGHT"] = "perez-daylight";
|
|
12
|
+
CurveType["PHYSICS"] = "physics";
|
|
13
|
+
CurveType["BLACKBODY"] = "blackbody";
|
|
14
|
+
CurveType["HAZY"] = "hazy";
|
|
15
|
+
})(CurveType || (CurveType = {}));
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/daylightSimulation/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,cAAc,2BAA2B,CAAC;AAe1C,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,sDAAyC,CAAA;IACzC,wDAA2C,CAAA;IAC3C,sDAAyC,CAAA;IACzC,0CAA6B,CAAA;IAC7B,0CAA6B,CAAA;IAC7B,8CAAiC,CAAA;IACjC,gCAAmB,CAAA;IACnB,oCAAuB,CAAA;IACvB,0BAAa,CAAA;AACf,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../../src/deviceControl/autostart.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkCD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAkE7E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC9E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart.js","sourceRoot":"","sources":["../../src/deviceControl/autostart.ts"],"names":[],"mappings":"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"}
|