# Copyright 2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

WANT_GYP=1
inherit systemd yarn

DESCRIPTION="Small server wrapper around Z-Wave JS to access it via a WebSocket."
HOMEPAGE="https://github.com/zwave-js/zwave-js-server"
YARN_PKGS=(
	@alcalzone/jsonl-db-4.0.2
	@alcalzone/proper-lockfile-4.1.3-0
	@andrewbranch/untar.js-1.0.3
	@colors/colors-1.6.0
	@dabh/diagnostics-2.0.8
	@eslint-community/eslint-utils-4.9.0
	@eslint-community/regexpp-4.12.2
	@eslint/config-array-0.21.1
	@eslint/config-helpers-0.4.1
	@eslint/core-0.16.0
	@eslint/eslintrc-3.3.1
	@eslint/js-9.38.0
	@eslint/object-schema-2.1.7
	@eslint/plugin-kit-0.4.0
	@homebridge/ciao-1.3.4
	@humanfs/core-0.19.1
	@humanfs/node-0.16.7
	@humanwhocodes/module-importer-1.0.1
	@humanwhocodes/retry-0.4.3
	@leichtgewicht/ip-codec-2.0.5
	@serialport/binding-mock-10.2.2
	@serialport/bindings-cpp-13.0.0
	@serialport/bindings-interface-1.2.2
	@serialport/parser-byte-length-13.0.0
	@serialport/parser-cctalk-13.0.0
	@serialport/parser-delimiter-12.0.0
	@serialport/parser-delimiter-13.0.0
	@serialport/parser-inter-byte-timeout-13.0.0
	@serialport/parser-packet-length-13.0.0
	@serialport/parser-readline-12.0.0
	@serialport/parser-readline-13.0.0
	@serialport/parser-ready-13.0.0
	@serialport/parser-regex-13.0.0
	@serialport/parser-slip-encoder-13.0.0
	@serialport/parser-spacepacket-13.0.0
	@serialport/stream-13.0.0
	@so-ric/colorspace-1.1.6
	@types/estree-1.0.8
	@types/json-schema-7.0.15
	@types/triple-beam-1.3.5
	@zwave-js/cc-15.15.3
	@zwave-js/config-15.15.3
	@zwave-js/core-15.15.3
	@zwave-js/host-15.15.3
	@zwave-js/nvmedit-15.15.3
	@zwave-js/serial-15.15.3
	@zwave-js/server-3.4.0
	@zwave-js/shared-15.15.1
	@zwave-js/testing-15.15.3
	@zwave-js/waddle-1.2.1
	acorn-8.15.0
	acorn-jsx-5.3.2
	ajv-6.12.6
	alcalzone-shared-5.0.0
	ansi-colors-4.1.3
	ansi-regex-6.2.2
	ansi-styles-4.3.0
	ansi-styles-6.2.3
	argparse-2.0.1
	async-3.2.6
	balanced-match-1.0.2
	brace-expansion-1.1.12
	buffer-from-1.1.2
	callsites-3.1.0
	chalk-4.1.2
	cliui-9.0.1
	color-5.0.2
	color-convert-2.0.1
	color-convert-3.1.2
	color-name-1.1.4
	color-name-2.0.2
	color-string-2.1.2
	concat-map-0.0.1
	cross-spawn-7.0.6
	dayjs-1.11.18
	debug-4.4.0
	debug-4.4.3
	deep-is-0.1.4
	dns-packet-5.6.1
	emoji-regex-10.6.0
	enabled-2.0.0
	escalade-3.2.0
	escape-string-regexp-4.0.0
	eslint-9.38.0
	eslint-scope-8.4.0
	eslint-visitor-keys-3.4.3
	eslint-visitor-keys-4.2.1
	espree-10.4.0
	esquery-1.6.0
	esrecurse-4.3.0
	estraverse-5.3.0
	esutils-2.0.3
	eventemitter3-5.0.1
	fast-deep-equal-3.1.3
	fast-json-stable-stringify-2.1.0
	fast-levenshtein-2.0.6
	fecha-4.2.3
	fflate-0.8.2
	file-entry-cache-8.0.0
	file-stream-rotator-0.6.1
	find-up-5.0.0
	flat-cache-4.0.1
	flatted-3.3.3
	fn.name-1.1.0
	get-caller-file-2.0.5
	get-east-asian-width-1.4.0
	glob-parent-6.0.2
	globals-14.0.0
	graceful-fs-4.2.11
	has-flag-4.0.0
	ignore-5.3.2
	import-fresh-3.3.1
	imurmurhash-0.1.4
	inherits-2.0.4
	is-extglob-2.1.1
	is-glob-4.0.3
	is-stream-2.0.1
	isexe-2.0.0
	js-yaml-4.1.0
	json-buffer-3.0.1
	json-logic-js-2.0.5
	json-schema-traverse-0.4.1
	json-stable-stringify-without-jsonify-1.0.1
	json5-2.2.3
	keyv-4.5.4
	kuler-2.0.0
	ky-1.13.0
	levn-0.4.1
	locate-path-6.0.0
	lodash.merge-4.6.2
	logform-2.7.0
	mdns-server-1.0.11
	minimatch-3.1.2
	minimist-1.2.8
	moment-2.30.1
	ms-2.1.3
	natural-compare-1.4.0
	node-addon-api-8.3.0
	node-gyp-build-4.8.4
	nrf-intel-hex-1.4.0
	object-hash-3.0.0
	one-time-1.0.0
	optionator-0.9.4
	p-limit-3.1.0
	p-locate-5.0.0
	p-queue-8.1.1
	p-timeout-6.1.4
	parent-module-1.0.1
	path-exists-4.0.0
	path-key-3.1.1
	pathe-2.0.3
	prelude-ls-1.2.1
	punycode-2.3.1
	readable-stream-3.6.2
	reflect-metadata-0.2.2
	resolve-from-4.0.0
	retry-0.12.0
	safe-buffer-5.2.1
	safe-stable-stringify-2.5.0
	semver-7.7.3
	serialport-13.0.0
	shebang-command-2.0.0
	shebang-regex-3.0.0
	signal-exit-3.0.7
	source-map-0.6.1
	source-map-support-0.5.21
	stack-trace-0.0.10
	string-width-7.2.0
	string_decoder-1.3.0
	strip-ansi-7.1.2
	strip-json-comments-3.1.1
	supports-color-7.2.0
	text-hex-1.0.0
	triple-beam-1.4.1
	tslib-2.8.1
	type-check-0.4.0
	uri-js-4.4.1
	util-deprecate-1.0.2
	which-2.0.2
	winston-3.18.3
	winston-daily-rotate-file-5.0.0
	winston-transport-4.9.0
	word-wrap-1.2.5
	wrap-ansi-9.0.2
	ws-8.18.3
	y18n-5.0.8
	yargs-18.0.0
	yargs-parser-22.0.0
	yocto-queue-0.1.0
	zwave-js-15.15.3
)
yarn_set_globals
SRC_URI="${YARN_SRC_URI}"
RESTRICT="mirror"

LICENSE="0BSD Apache-2.0 BSD BSD-2 ISC MIT"
KEYWORDS="~amd64"

S="${WORKDIR}"

src_install() {
	yarn_src_install
	fperms 0755 "/usr/$(get_libdir)/node_modules/${PN}/node_modules/@zwave-js/server/dist-cjs/bin/"{client,server}.js
	dosym "../$(get_libdir)/node_modules/${PN}/node_modules/@zwave-js/server/dist-cjs/bin/client.js" /usr/bin/zwave-client
	dosym "../$(get_libdir)/node_modules/${PN}/node_modules/@zwave-js/server/dist-cjs/bin/server.js" /usr/bin/zwave-server
	insinto /etc
	doins "${FILESDIR}/${PN}.config.js"
	systemd_newunit "${FILESDIR}/${PN}.service" "${PN}@.service"
}

pkg_postinst() {
	elog
	elog "You need to set up security keys. See"
	elog "${PN}.keys.js.example in the documentation directory for more"
	elog "information."
	elog
	elog "systemd: To create the service, the device path must be specified"
	elog "with systemd-escape:"
	elog
	elog "  systemctl enable --now ${PN}@\$(systemd-escape --path /dev/ttyACM0)"
	elog
}