ioBroker / ioBroker.zwave

Legacy Z-Wave integration using OpenZWave
Other
24 stars 7 forks source link

Support block-scoped declarations and basic type checking #30

Closed AlCalzone closed 6 years ago

AlCalzone commented 6 years ago

Note: Same as https://github.com/ioBroker/ioBroker.cloud/pull/46

This PR basically does two things:

  1. Set all script files to strict mode, so we can start using block-scoped declarations let / const.
  2. Add basic tsconfig.json so VSCode does automatic type-checking using TypeScript. The typings for Node@4 are used by default

The next step would be using the block-scoped declarations and enabling a couple of the more strict rules, like noImplicitAny and especially strictNullChecks. The latter helps eliminate the null reference errors we've been seeing lately.

Apollon77 commented 6 years ago

Testing went red ...

[TypeError: Cannot read property 'join' of undefined] 2018-01-13 10:50:59.453 - error: zwave.0 uncaught exception: Cannot read property 'join' of undefined 2018-01-13 10:50:59.455 - error: zwave.0 TypeError: Cannot read property 'join' of undefined at extendInstanceObjects (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.zwave/main.js:1247:34) at Socket. (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.zwave/main.js:103:17) at Socket.onack (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:312:9) at Socket.onpacket (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:236:12) at Manager. (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Manager.ondecoded (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8) at Decoder. (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15) at Decoder.Emitter.emit (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20) at Decoder.add (/home/travis/build/ioBroker/ioBroker.zwave/tmp/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:246:12)

Apollon77 commented 6 years ago

Und noch eine Frage: Du liesst im Package-testing und im main die io-package als utf-8 format ... es wäre dann die einzige Stelle wo der File COntent in UTF-8- kodierung erwartet wird. Gibt das probleme mit ISO "Umlauten" uä.?!

AlCalzone commented 6 years ago

Du liesst im Package-testing und im main die io-package als utf-8 format ... es wäre dann die einzige Stelle wo der File COntent in UTF-8- kodierung erwartet wird.

Ich verhindere damit lediglich undefiniertes Verhalten. JSON.parse erwartet einen String, readFileSync gibt aber einen Buffer zurück, wenn keine Kodierung angegeben ist. Intern wird deshalb von JSON.parse Buffer.toString aufgerufen, welcher standardmäßig UTF8-Kodierung verwendet. Sollte sich an diesem Verhalten in einer neuen NodeJS-Version irgendwas ändern, knallts. Daher gebe ich einfach beim Lesen der Datei explizit an, dass wir utf8 erwarten, dann gibts nen String und nichts wird implizit umgewandelt.

Das andere Problem schau ich mir gleich an.

Apollon77 commented 6 years ago

UTF8: ok dann kann ich das übernehmen wenn ich demnächst Updates mache

AlCalzone commented 6 years ago

Fehler fixed in 6ae98c6