amaran-light-cli 1.3.6 → 1.5.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 +39 -17
- 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 +2 -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 +1 -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/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/daylightSimulation/graphSchedule.d.ts +5 -0
- 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/{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/{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/{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 +18 -42
- 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 +163 -0
- package/dist/daylightSimulation/cctUtil.js.map +1 -0
- package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +0 -18
- package/dist/daylightSimulation/constants.d.ts.map +1 -0
- package/dist/{constants.js → daylightSimulation/constants.js} +0 -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 +94 -0
- package/dist/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts +36 -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} +6 -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/deviceControl/discovery.js.map +1 -0
- package/dist/deviceControl/lightControl.d.ts.map +1 -0
- package/dist/deviceControl/lightControl.js.map +1 -0
- package/dist/deviceControl/types.d.ts.map +1 -0
- package/dist/deviceControl/types.js.map +1 -0
- package/package.json +7 -2
- package/scripts/release.js +2 -2
- package/CHANGELOG.md +0 -63
- 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 -431
- 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/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 -424
- 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.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/{discovery.js → deviceControl/discovery.js} +0 -0
- /package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +0 -0
- /package/dist/{lightControl.js → deviceControl/lightControl.js} +0 -0
- /package/dist/{types.d.ts → deviceControl/types.d.ts} +0 -0
- /package/dist/{types.js → deviceControl/types.js} +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
|
|
3
|
+
export function registerStatus(program, deps) {
|
|
4
|
+
const { asyncCommand } = deps;
|
|
5
|
+
addStandardOptions(program.command('status <device>').description('Get the current status of a light')).action(asyncCommand(handleStatus(deps)));
|
|
6
|
+
}
|
|
7
|
+
function handleStatus(deps) {
|
|
8
|
+
return async (deviceQuery, options) => {
|
|
9
|
+
return runDeviceAction({
|
|
10
|
+
deps,
|
|
11
|
+
options,
|
|
12
|
+
deviceQuery,
|
|
13
|
+
actionName: 'get status',
|
|
14
|
+
}, (device, controller) => {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const nodeId = device.node_id;
|
|
17
|
+
controller.getLightSleepStatus(nodeId, (success, message, data) => {
|
|
18
|
+
if (success) {
|
|
19
|
+
const nodeConfig = controller.getNode(nodeId);
|
|
20
|
+
const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
|
|
21
|
+
console.log(chalk.blue(`Status for ${displayName}:`));
|
|
22
|
+
console.log(` State: ${data?.sleep ? chalk.red('Off') : chalk.green('On')}`);
|
|
23
|
+
if (nodeConfig) {
|
|
24
|
+
if (nodeConfig.intensity !== undefined) {
|
|
25
|
+
console.log(` Intensity: ${nodeConfig.intensity}%`);
|
|
26
|
+
}
|
|
27
|
+
if (nodeConfig.cct !== undefined) {
|
|
28
|
+
console.log(` Temperature: ${nodeConfig.cct}K`);
|
|
29
|
+
}
|
|
30
|
+
if (nodeConfig.hue !== undefined && nodeConfig.sat !== undefined) {
|
|
31
|
+
console.log(` HSI: H:${nodeConfig.hue} S:${nodeConfig.sat} I:${nodeConfig.intensity}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error(chalk.red(`✗ Failed to get status: ${message}`));
|
|
37
|
+
}
|
|
38
|
+
resolve();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}, () => {
|
|
42
|
+
console.log(chalk.yellow('Status command requires a specific device name or ID.'));
|
|
43
|
+
console.log(chalk.gray('Use "list" to see available devices.'));
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export default registerStatus;
|
|
48
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,IAAiB;IAChE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,CAAC,MAAM,CAC5G,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB;IACrC,OAAO,KAAK,EAAE,WAAmB,EAAE,OAAuB,EAAE,EAAE;QAC5D,OAAO,eAAe,CACpB;YACE,IAAI;YACJ,OAAO;YACP,WAAW;YACX,UAAU,EAAE,YAAY;SACzB,EACD,CAAC,MAAc,EAAE,UAAU,EAAE,EAAE;YAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAiB,CAAC;gBACxC,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,OAAgB,EAAE,OAAe,EAAE,IAAc,EAAE,EAAE;oBAC3F,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;wBAClG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,GAAG,CAAC,CAAC,CAAC;wBACtD,OAAO,CAAC,GAAG,CAAC,YAAa,IAA4B,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAEvG,IAAI,UAAU,EAAE,CAAC;4BACf,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gCACvC,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;4BACvD,CAAC;4BACD,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gCACjC,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;4BACnD,CAAC;4BACD,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gCACjE,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;4BAC1F,CAAC;wBACH,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjE,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EACD,GAAG,EAAE;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAClE,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
-
import type { CommandDeps } from './types.js';
|
|
2
|
+
import type { CommandDeps } from './deviceControl/types.js';
|
|
3
3
|
export declare function registerCommands(program: Command, deps: CommandDeps): void;
|
|
4
4
|
export default registerCommands;
|
|
5
5
|
//# sourceMappingURL=commands.d.ts.map
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAkBnE;AAED,eAAe,gBAAgB,CAAC"}
|
package/dist/commands.js
CHANGED
|
@@ -1,49 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import registerSimulateSchedule from './commands/simulateSchedule.js';
|
|
16
|
-
import registerStatus from './commands/status.js';
|
|
1
|
+
import registerAutoCct from './commands/daylightSimulation/autoCct.js';
|
|
2
|
+
import registerGraphSchedule from './commands/daylightSimulation/graphSchedule.js';
|
|
3
|
+
import registerPrintSchedule from './commands/daylightSimulation/printSchedule.js';
|
|
4
|
+
import registerService from './commands/daylightSimulation/service.js';
|
|
5
|
+
import registerSimulateSchedule from './commands/daylightSimulation/simulateSchedule.js';
|
|
6
|
+
import registerCct from './commands/deviceControl/cct.js';
|
|
7
|
+
import registerColor from './commands/deviceControl/color.js';
|
|
8
|
+
import registerConfig from './commands/deviceControl/config.js';
|
|
9
|
+
import registerDiscover from './commands/deviceControl/discover.js';
|
|
10
|
+
import registerHsi from './commands/deviceControl/hsi.js';
|
|
11
|
+
import registerIntensity from './commands/deviceControl/intensity.js';
|
|
12
|
+
import registerList from './commands/deviceControl/list.js';
|
|
13
|
+
import registerPower from './commands/deviceControl/power.js';
|
|
14
|
+
import registerStatus from './commands/deviceControl/status.js';
|
|
17
15
|
// Expose a function to register commands on a commander program instance
|
|
18
16
|
export function registerCommands(program, deps) {
|
|
19
|
-
// Register config command first
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
loadConfig: deps.loadConfig || (() => null),
|
|
23
|
-
saveConfig: deps.saveConfig ||
|
|
24
|
-
((config, changes) => {
|
|
25
|
-
if (deps.saveWsUrl && config.wsUrl) {
|
|
26
|
-
deps.saveWsUrl(config.wsUrl);
|
|
27
|
-
}
|
|
28
|
-
// Save the rest of the config
|
|
29
|
-
const configPath = path.join(process.env.HOME || '', '.amaran-cli.json');
|
|
30
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
31
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
32
|
-
if (changes && changes.length > 0) {
|
|
33
|
-
console.log(chalk.green('Configuration saved successfully:'));
|
|
34
|
-
changes.forEach((change) => {
|
|
35
|
-
console.log(chalk.green(` • ${change}`));
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.log(chalk.green('Configuration saved successfully'));
|
|
40
|
-
}
|
|
41
|
-
}),
|
|
42
|
-
};
|
|
43
|
-
// Register all commands
|
|
44
|
-
registerConfig(program, configDeps);
|
|
17
|
+
// Register config command first
|
|
18
|
+
registerConfig(program, deps);
|
|
19
|
+
// Register all other commands
|
|
45
20
|
registerAutoCct(program, deps);
|
|
46
21
|
registerPrintSchedule(program, deps);
|
|
22
|
+
registerGraphSchedule(program, deps);
|
|
47
23
|
registerSimulateSchedule(program, deps);
|
|
48
24
|
registerDiscover(program, deps);
|
|
49
25
|
registerList(program, deps);
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,0CAA0C,CAAC;AACvE,OAAO,qBAAqB,MAAM,gDAAgD,CAAC;AACnF,OAAO,qBAAqB,MAAM,gDAAgD,CAAC;AACnF,OAAO,eAAe,MAAM,0CAA0C,CAAC;AACvE,OAAO,wBAAwB,MAAM,mDAAmD,CAAC;AACzF,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAGhE,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,IAAiB;IAClE,gCAAgC;IAChC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE9B,8BAA8B;IAC9B,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { getAvailableCurves, parseCurveType } from './curves/index.js';
|
|
2
|
+
import { type CCTOptions, type CCTResult, CurveType } from './types.js';
|
|
3
|
+
export { type CCTOptions, type CCTResult, CurveType, getAvailableCurves, parseCurveType };
|
|
4
|
+
export declare function calculateCCT(lat: number, lon: number, date?: Date, opts?: CCTOptions, curveType?: CurveType): CCTResult;
|
|
5
|
+
//# sourceMappingURL=cctUtil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cctUtil.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/cctUtil.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,kBAAkB,EAClB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AAoM1F,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAiB,EACvB,IAAI,CAAC,EAAE,UAAU,EACjB,SAAS,GAAE,SAA0B,GACpC,SAAS,CAgBX"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import SunCalc from 'suncalc';
|
|
2
|
+
const { getPosition, getTimes } = SunCalc;
|
|
3
|
+
import { CCT_DEFAULTS } from './constants.js';
|
|
4
|
+
import { CURVE_FUNCTIONS, calculateRealisticBlackbodyDaylight, calculateRealisticCIEDaylight, calculateRealisticHazyDaylight, calculateRealisticPerezDaylight, calculateRealisticPhysicsDaylight, calculateRealisticSunAltitude, getAvailableCurves, parseCurveType, } from './curves/index.js';
|
|
5
|
+
import { CurveType } from './types.js';
|
|
6
|
+
// Re-export for backward compatibility
|
|
7
|
+
export { CurveType, getAvailableCurves, parseCurveType };
|
|
8
|
+
function isValidSunTimes(sunrise, sunset, solarNoon) {
|
|
9
|
+
return (sunrise instanceof Date &&
|
|
10
|
+
!Number.isNaN(sunrise.getTime()) &&
|
|
11
|
+
sunset instanceof Date &&
|
|
12
|
+
!Number.isNaN(sunset.getTime()) &&
|
|
13
|
+
solarNoon instanceof Date &&
|
|
14
|
+
!Number.isNaN(solarNoon.getTime()) &&
|
|
15
|
+
sunset.getTime() > sunrise.getTime() &&
|
|
16
|
+
solarNoon.getTime() > sunrise.getTime() &&
|
|
17
|
+
solarNoon.getTime() < sunset.getTime());
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Handle scientific curves (CIE, SUN_ALTITUDE, PEREZ) which use altitude-based calculations
|
|
21
|
+
*/
|
|
22
|
+
function calculateScientificCCT(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType, times) {
|
|
23
|
+
const sunrise = times.sunrise;
|
|
24
|
+
const sunset = times.sunset;
|
|
25
|
+
const _solarNoon = times.solarNoon;
|
|
26
|
+
const nightEnd = times.nightEnd;
|
|
27
|
+
const night = times.night;
|
|
28
|
+
if (!isValidSunTimes(sunrise, sunset, _solarNoon)) {
|
|
29
|
+
return {
|
|
30
|
+
cct: Math.round(minK),
|
|
31
|
+
intensity: Math.round(minIntensity),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const t = date.getTime();
|
|
35
|
+
// For scientific curves, handle cases where nightEnd/night might not be available
|
|
36
|
+
let nightEndTime;
|
|
37
|
+
let nightStartTime;
|
|
38
|
+
if (nightEnd instanceof Date &&
|
|
39
|
+
!Number.isNaN(nightEnd.getTime()) &&
|
|
40
|
+
night instanceof Date &&
|
|
41
|
+
!Number.isNaN(night.getTime())) {
|
|
42
|
+
nightEndTime = nightEnd.getTime();
|
|
43
|
+
nightStartTime = night.getTime();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Edge case: no proper night (e.g., summer in high latitudes)
|
|
47
|
+
nightEndTime = sunrise.getTime() - 30 * 60 * 1000;
|
|
48
|
+
nightStartTime = sunset.getTime() + 30 * 60 * 1000;
|
|
49
|
+
}
|
|
50
|
+
if (t <= nightEndTime || t >= nightStartTime) {
|
|
51
|
+
return { cct: minK, intensity: minIntensity };
|
|
52
|
+
}
|
|
53
|
+
const pos = getPosition(date, lat, lon);
|
|
54
|
+
const altitude = pos.altitude;
|
|
55
|
+
const noonPos = getPosition(_solarNoon, lat, lon);
|
|
56
|
+
const maxAltitude = noonPos.altitude;
|
|
57
|
+
let factors;
|
|
58
|
+
switch (curveType) {
|
|
59
|
+
case CurveType.SUN_ALTITUDE:
|
|
60
|
+
factors = calculateRealisticSunAltitude(altitude, maxAltitude);
|
|
61
|
+
break;
|
|
62
|
+
case CurveType.CIE_DAYLIGHT:
|
|
63
|
+
factors = calculateRealisticCIEDaylight(altitude, maxAltitude);
|
|
64
|
+
break;
|
|
65
|
+
case CurveType.PEREZ_DAYLIGHT:
|
|
66
|
+
factors = calculateRealisticPerezDaylight(altitude, maxAltitude);
|
|
67
|
+
break;
|
|
68
|
+
case CurveType.PHYSICS:
|
|
69
|
+
factors = calculateRealisticPhysicsDaylight(altitude, maxAltitude);
|
|
70
|
+
break;
|
|
71
|
+
case CurveType.BLACKBODY:
|
|
72
|
+
factors = calculateRealisticBlackbodyDaylight(altitude, maxAltitude);
|
|
73
|
+
break;
|
|
74
|
+
case CurveType.HAZY:
|
|
75
|
+
factors = calculateRealisticHazyDaylight(altitude, maxAltitude);
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
factors = [0, 0];
|
|
79
|
+
}
|
|
80
|
+
const [cctFactor, intensityFactor] = factors;
|
|
81
|
+
return {
|
|
82
|
+
cct: Math.round(minK + (maxK - minK) * cctFactor),
|
|
83
|
+
intensity: Math.round(minIntensity + (maxIntensity - minIntensity) * intensityFactor),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Handle empirical curves (HANN, WIDER_MIDDLE) which use time-based calculations
|
|
88
|
+
*/
|
|
89
|
+
function calculateEmpiricalCCT(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType, times) {
|
|
90
|
+
const curve = CURVE_FUNCTIONS[curveType];
|
|
91
|
+
const sunrise = times.sunrise;
|
|
92
|
+
const sunset = times.sunset;
|
|
93
|
+
const _solarNoon = times.solarNoon;
|
|
94
|
+
const nightEnd = times.nightEnd;
|
|
95
|
+
const night = times.night;
|
|
96
|
+
if (isValidSunTimes(sunrise, sunset, _solarNoon) &&
|
|
97
|
+
nightEnd instanceof Date &&
|
|
98
|
+
!Number.isNaN(nightEnd.getTime()) &&
|
|
99
|
+
night instanceof Date &&
|
|
100
|
+
!Number.isNaN(night.getTime())) {
|
|
101
|
+
const t = date.getTime();
|
|
102
|
+
const noon = _solarNoon.getTime();
|
|
103
|
+
const nightStartTime = night.getTime();
|
|
104
|
+
const nightEndTime = nightEnd.getTime();
|
|
105
|
+
if (t <= nightEndTime || t >= nightStartTime) {
|
|
106
|
+
return { cct: minK, intensity: minIntensity };
|
|
107
|
+
}
|
|
108
|
+
let x;
|
|
109
|
+
if (t <= noon) {
|
|
110
|
+
x = ((t - nightEndTime) / (noon - nightEndTime)) * 0.5;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
x = 0.5 + ((t - noon) / (nightStartTime - noon)) * 0.5;
|
|
114
|
+
}
|
|
115
|
+
const f = curve(x);
|
|
116
|
+
return {
|
|
117
|
+
cct: Math.round(minK + (maxK - minK) * f),
|
|
118
|
+
intensity: Math.round(minIntensity + (maxIntensity - minIntensity) * f),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// Fallback for empirical curves when night times are not available
|
|
122
|
+
try {
|
|
123
|
+
const pos = getPosition(date, lat, lon);
|
|
124
|
+
if (pos.altitude <= 0)
|
|
125
|
+
return { cct: minK, intensity: minIntensity };
|
|
126
|
+
const f = Math.max(0, Math.sin(pos.altitude));
|
|
127
|
+
return {
|
|
128
|
+
cct: Math.round(minK + (maxK - minK) * f),
|
|
129
|
+
intensity: Math.round(minIntensity + (maxIntensity - minIntensity) * f),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return { cct: minK, intensity: minIntensity };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function calculateCCTCore(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType) {
|
|
137
|
+
const times = getTimes(date, lat, lon);
|
|
138
|
+
const isScientific = curveType === CurveType.CIE_DAYLIGHT ||
|
|
139
|
+
curveType === CurveType.SUN_ALTITUDE ||
|
|
140
|
+
curveType === CurveType.PEREZ_DAYLIGHT ||
|
|
141
|
+
curveType === CurveType.PHYSICS ||
|
|
142
|
+
curveType === CurveType.BLACKBODY ||
|
|
143
|
+
curveType === CurveType.HAZY;
|
|
144
|
+
if (isScientific) {
|
|
145
|
+
return calculateScientificCCT(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType, times);
|
|
146
|
+
}
|
|
147
|
+
return calculateEmpiricalCCT(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType, times);
|
|
148
|
+
}
|
|
149
|
+
export function calculateCCT(lat, lon, date = new Date(), opts, curveType = CurveType.HANN) {
|
|
150
|
+
const clamp = (v, lo, hi) => Math.min(hi, Math.max(lo, v));
|
|
151
|
+
const cctMinK = clamp(opts?.cctMinK ?? CCT_DEFAULTS.cctMinK, 1000, 20000);
|
|
152
|
+
const cctMaxK = clamp(opts?.cctMaxK ?? CCT_DEFAULTS.cctMaxK, 1000, 20000);
|
|
153
|
+
const minK = Math.min(cctMinK, cctMaxK);
|
|
154
|
+
const maxK = Math.max(cctMinK, cctMaxK);
|
|
155
|
+
const intensityMinPct = clamp(opts?.intensityMinPct ?? CCT_DEFAULTS.intensityMinPct, 0, 100);
|
|
156
|
+
const intensityMaxPct = clamp(opts?.intensityMaxPct ?? CCT_DEFAULTS.intensityMaxPct, 0, 100);
|
|
157
|
+
const minPct = Math.min(intensityMinPct, intensityMaxPct);
|
|
158
|
+
const maxPct = Math.max(intensityMinPct, intensityMaxPct);
|
|
159
|
+
const minIntensity = Math.round(minPct * 10);
|
|
160
|
+
const maxIntensity = Math.round(maxPct * 10);
|
|
161
|
+
return calculateCCTCore(lat, lon, date, minK, maxK, minIntensity, maxIntensity, curveType);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=cctUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cctUtil.js","sourceRoot":"","sources":["../../src/daylightSimulation/cctUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,14 +57,6 @@ export declare const SPECIAL_TIME_CONFIG: readonly [{
|
|
|
57
57
|
readonly color: import("chalk").ChalkInstance;
|
|
58
58
|
readonly emoji: "NI";
|
|
59
59
|
}];
|
|
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
60
|
export declare const VALIDATION_RANGES: {
|
|
69
61
|
latitude: {
|
|
70
62
|
min: number;
|
|
@@ -74,21 +66,11 @@ export declare const VALIDATION_RANGES: {
|
|
|
74
66
|
min: number;
|
|
75
67
|
max: number;
|
|
76
68
|
};
|
|
77
|
-
cct: {
|
|
78
|
-
min: number;
|
|
79
|
-
max: number;
|
|
80
|
-
};
|
|
81
|
-
intensity: {
|
|
82
|
-
min: number;
|
|
83
|
-
max: number;
|
|
84
|
-
};
|
|
85
69
|
};
|
|
86
70
|
export declare const ERROR_MESSAGES: {
|
|
87
71
|
readonly invalidLatitude: `Latitude must be between ${number} and ${number}`;
|
|
88
72
|
readonly invalidLongitude: `Longitude must be between ${number} and ${number}`;
|
|
89
|
-
readonly invalidDuration: "Duration must be at least 1 second";
|
|
90
73
|
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
74
|
readonly locationUnavailable: "Could not determine location. Use --lat and --lon to specify manually.";
|
|
93
75
|
readonly nightTimesUnavailable: "Could not calculate night times for this location";
|
|
94
76
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;CAKxB,CAAC;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EActB,CAAC;AAGX,eAAO,MAAM,iBAAiB;;;;;;;;;CAG7B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;CAOjB,CAAC"}
|
|
@@ -22,29 +22,16 @@ export const SPECIAL_TIME_CONFIG = [
|
|
|
22
22
|
{ key: 'dusk', color: chalk.magenta, emoji: 'DU' },
|
|
23
23
|
{ key: 'night', color: chalk.blue, emoji: 'NI' },
|
|
24
24
|
];
|
|
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
25
|
// Validation ranges
|
|
35
26
|
export const VALIDATION_RANGES = {
|
|
36
27
|
latitude: { min: -90, max: 90 },
|
|
37
28
|
longitude: { min: -180, max: 180 },
|
|
38
|
-
cct: { min: 1000, max: 20000 },
|
|
39
|
-
intensity: { min: 0, max: 100 },
|
|
40
29
|
};
|
|
41
30
|
// Error messages
|
|
42
31
|
export const ERROR_MESSAGES = {
|
|
43
32
|
invalidLatitude: `Latitude must be between ${VALIDATION_RANGES.latitude.min} and ${VALIDATION_RANGES.latitude.max}`,
|
|
44
33
|
invalidLongitude: `Longitude must be between ${VALIDATION_RANGES.longitude.min} and ${VALIDATION_RANGES.longitude.max}`,
|
|
45
|
-
invalidDuration: 'Duration must be at least 1 second',
|
|
46
34
|
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
35
|
locationUnavailable: 'Could not determine location. Use --lat and --lon to specify manually.',
|
|
49
36
|
nightTimesUnavailable: 'Could not calculate night times for this location',
|
|
50
37
|
};
|
|
@@ -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;CACrB,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"}
|