Skip to content

Commit dee9fa9

Browse files
committed
chore: type constants
1 parent 9398e6c commit dee9fa9

2 files changed

Lines changed: 120 additions & 2 deletions

File tree

index.d.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,87 @@ export const WindowCoveringCluster: {
18291829
COMMANDS: unknown;
18301830
};
18311831

1832+
export const ZIGBEE_PROFILE_ID: {
1833+
INDUSTRIAL_PLANT_MONITORING: 257;
1834+
HOME_AUTOMATION: 260;
1835+
COMMERCIAL_BUILDING_AUTOMATION: 261;
1836+
TELECOM_APPLICATIONS: 263;
1837+
PERSONAL_HOME_AND_HOSPITAL_CARE: 264;
1838+
ADVANCED_METERING_INITIATIVE: 265;
1839+
};
1840+
1841+
export const ZIGBEE_DEVICE_ID: {
1842+
GENERIC: {
1843+
ON_OFF_SWITCH: 0;
1844+
LEVEL_CONTROL_SWITCH: 1;
1845+
ON_OFF_OUTPUT: 2;
1846+
LEVEL_CONTROLLABLE_OUTPUT: 3;
1847+
SCENE_SELECTOR: 4;
1848+
CONFIGURATION_TOOL: 5;
1849+
REMOTE_CONTROL: 6;
1850+
COMBINED_INTERFACE: 7;
1851+
RANGE_EXTENDER: 8;
1852+
MAINS_POWER_OUTLET: 9;
1853+
DOOR_LOCK: 10;
1854+
DOOR_LOCK_CONTROLLER: 11;
1855+
SIMPLE_SENSOR: 12;
1856+
CONSUMPTION_AWARENESS_DEVICE: 13;
1857+
HOME_GATEWAY: 80;
1858+
SMART_PLUG: 81;
1859+
WHITE_GOODS: 82;
1860+
METER_INTERFACE: 83;
1861+
};
1862+
LIGHTING: {
1863+
ON_OFF_LIGHT: 256;
1864+
DIMMABLE_LIGHT: 257;
1865+
COLOR_DIMMABLE_LIGHT: 258;
1866+
ON_OFF_LIGHT_SWITCH: 259;
1867+
DIMMER_SWITCH: 260;
1868+
COLOR_DIMMER_SWITCH: 261;
1869+
LIGHT_SENSOR: 262;
1870+
OCCUPANCY_SENSOR: 263;
1871+
};
1872+
CLOSURES: {
1873+
SHADE: 512;
1874+
SHADE_CONTROLLER: 513;
1875+
WINDOW_COVERING_DEVICE: 514;
1876+
WINDOW_COVERING_CONTROLLER: 515;
1877+
};
1878+
HVAC: {
1879+
HEATING_COOLING_UNIT: 768;
1880+
THERMOSTAT: 769;
1881+
TEMPERATURE_SENSOR: 770;
1882+
PUMP: 771;
1883+
PUMP_CONTROLLER: 772;
1884+
PRESSURE_SENSOR: 773;
1885+
FLOW_SENSOR: 774;
1886+
};
1887+
INTRUDER_ALARM_SYSTEMS: {
1888+
IAS_CONTROL_INDICATING_EQUIPMENT: 1024;
1889+
IAS_ANCILLARY_CONTROL_EQUIPMENT: 1025;
1890+
IAS_ZONE: 1026;
1891+
IAS_WARNING_DEVICE: 1027;
1892+
};
1893+
};
1894+
1895+
export const IAS_ZONE_TYPE: {
1896+
STANDARD_CIE: 0;
1897+
MOTION_SENSOR: 13;
1898+
CONTACT_SWITCH: 21;
1899+
FIRE_SENSOR: 40;
1900+
WATER_SENSOR: 42;
1901+
CARBON_MONOXIDE_SENSOR: 43;
1902+
PERSONAL_EMERGENCY_DEVICE: 44;
1903+
VIBRATION_MOVEMENT_SENSOR: 45;
1904+
REMOTE_CONTROL: 271;
1905+
KEY_FOB: 277;
1906+
KEYPAD: 541;
1907+
STANDARD_WARNING_DEVICE: 549;
1908+
GLASS_BREAK_SENSOR: 550;
1909+
SECURITY_REPEATER: 553;
1910+
INVALID_ZONE_TYPE: 65535;
1911+
};
1912+
18321913
declare const _default: {
18331914
ZCLNode: typeof ZCLNode;
18341915
CLUSTER: typeof CLUSTER;
@@ -1878,5 +1959,8 @@ declare const _default: {
18781959
TimeCluster: typeof TimeCluster;
18791960
TouchLinkCluster: typeof TouchLinkCluster;
18801961
WindowCoveringCluster: typeof WindowCoveringCluster;
1962+
ZIGBEE_PROFILE_ID: typeof ZIGBEE_PROFILE_ID;
1963+
ZIGBEE_DEVICE_ID: typeof ZIGBEE_DEVICE_ID;
1964+
IAS_ZONE_TYPE: typeof IAS_ZONE_TYPE;
18811965
};
18821966
export default _default;

scripts/generate-types.js

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,22 @@ function generateClusterInterface(cluster) {
217217
* }>} clusterDefinitions - Array of CLUSTER definitions used to generate typed CLUSTER exports
218218
* @returns {string} Complete TypeScript definitions file
219219
*/
220-
function generateTypesFile(clusters, clusterDefinitions) {
220+
function generateConstantObject(obj, indent = 2) {
221+
const lines = [];
222+
const pad = ' '.repeat(indent);
223+
for (const [key, value] of Object.entries(obj)) {
224+
if (typeof value === 'object' && value !== null) {
225+
lines.push(`${pad}${key}: {`);
226+
lines.push(generateConstantObject(value, indent + 2));
227+
lines.push(`${pad}};`);
228+
} else {
229+
lines.push(`${pad}${key}: ${typeof value === 'number' ? value : JSON.stringify(value)};`);
230+
}
231+
}
232+
return lines.join('\n');
233+
}
234+
235+
function generateTypesFile(clusters, clusterDefinitions, constants) {
221236
const lines = [];
222237

223238
// Header
@@ -400,6 +415,16 @@ export const CLUSTER: {
400415
lines.push('};');
401416
}
402417

418+
// Export constants
419+
if (constants) {
420+
for (const [name, value] of Object.entries(constants)) {
421+
lines.push('');
422+
lines.push(`export const ${name}: {`);
423+
lines.push(generateConstantObject(value));
424+
lines.push('};');
425+
}
426+
}
427+
403428
lines.push('');
404429
lines.push('declare const _default: {');
405430
lines.push(' ZCLNode: typeof ZCLNode;');
@@ -408,6 +433,11 @@ export const CLUSTER: {
408433
const exportName = cluster.exportName || toInterfaceName(cluster);
409434
lines.push(` ${exportName}: typeof ${exportName};`);
410435
}
436+
if (constants) {
437+
for (const name of Object.keys(constants)) {
438+
lines.push(` ${name}: typeof ${name};`);
439+
}
440+
}
411441
lines.push('};');
412442
lines.push('export default _default;');
413443

@@ -448,8 +478,12 @@ function main() {
448478
}))
449479
.sort((a, b) => a.constantName.localeCompare(b.constantName));
450480

481+
// Load constants
482+
const { ZIGBEE_PROFILE_ID, ZIGBEE_DEVICE_ID, IAS_ZONE_TYPE } = require('../lib/constants');
483+
const constants = { ZIGBEE_PROFILE_ID, ZIGBEE_DEVICE_ID, IAS_ZONE_TYPE };
484+
451485
console.log(`\nGenerating ${OUTPUT_FILE}...`);
452-
const output = generateTypesFile(clusters, clusterDefinitions);
486+
const output = generateTypesFile(clusters, clusterDefinitions, constants);
453487
fs.writeFileSync(OUTPUT_FILE, output);
454488

455489
console.log(`Done! Generated types for ${clusters.length} clusters.`);

0 commit comments

Comments
 (0)