From 6037f054049711f84b09a0dc8ca9cfcb5638bd6b Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 24 Jan 2022 11:25:55 +0100 Subject: [PATCH 1/7] Reorganize package --- setup.py | 8 +------ src/idom-bokeh-extension/.bokeh | 1 - src/idom-bokeh-extension/README.md | 22 ------------------- src/idom_bokeh/_model.py | 1 - .../bokeh.ext.json | 0 .../package-lock.json | 4 +++- .../package.json | 4 ++-- .../src/declaration.d.ts | 0 .../src/index.ts | 2 +- .../src/layout.ts | 0 .../tsconfig.json | 0 11 files changed, 7 insertions(+), 35 deletions(-) delete mode 100644 src/idom-bokeh-extension/.bokeh delete mode 100644 src/idom-bokeh-extension/README.md rename src/{idom-bokeh-extension => idom_bokeh}/bokeh.ext.json (100%) rename src/{idom-bokeh-extension => idom_bokeh}/package-lock.json (99%) rename src/{idom-bokeh-extension => idom_bokeh}/package.json (88%) rename src/{idom-bokeh-extension => idom_bokeh}/src/declaration.d.ts (100%) rename src/{idom-bokeh-extension => idom_bokeh}/src/index.ts (98%) rename src/{idom-bokeh-extension => idom_bokeh}/src/layout.ts (100%) rename src/{idom-bokeh-extension => idom_bokeh}/tsconfig.json (100%) diff --git a/setup.py b/setup.py index 3c6ed7d..38f469b 100644 --- a/setup.py +++ b/setup.py @@ -31,8 +31,6 @@ def list2cmdline(cmd_list): ROOT_DIR = Path(__file__).parent SRC_DIR = ROOT_DIR / "src" PKG_DIR = SRC_DIR / NAME -JS_DIR = SRC_DIR / "idom-bokeh-extension" - # ----------------------------------------------------------------------------- # Package Definition @@ -126,11 +124,7 @@ def list2cmdline(cmd_list): def build_javascript_first(cls, rebuild=False): class Command(cls): def run(self): - build_bokeh_extension(JS_DIR, rebuild=rebuild) - shutil.move( - str(JS_DIR / "dist" / f"{JS_DIR.name}.min.js"), - str(PKG_DIR / "bundle.js"), - ) + build_bokeh_extension(PKG_DIR, rebuild=rebuild) super().run() return Command diff --git a/src/idom-bokeh-extension/.bokeh b/src/idom-bokeh-extension/.bokeh deleted file mode 100644 index fa4e4f5..0000000 --- a/src/idom-bokeh-extension/.bokeh +++ /dev/null @@ -1 +0,0 @@ -{"bokeh_version":"2.4.2","signatures":{"package.json":"5223113a05cdbc77a98a35c4b8e9c3f8d0156ebcd3a6561fd0f386b254a0b868","package-lock.json":"025fc5e64b5f24c96f6b23fdb63a46a4858c0dcf1cb949a41d52162544c1a170","tsconfig.json":"8ad947cf43506ee0078b30ad5282ca601f450e2ab72c462003b7b8a0a63c992d"}} \ No newline at end of file diff --git a/src/idom-bokeh-extension/README.md b/src/idom-bokeh-extension/README.md deleted file mode 100644 index e226fd2..0000000 --- a/src/idom-bokeh-extension/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# {{ cookiecutter.npm_package_name }} - -{{ cookiecutter.project_short_description }} - -# Package Installation - -Requires [Node](https://nodejs.org/en/) to be installed: - -```bash -npm install --save {{ cookiecutter.npm_package_name }} -``` - -For a developer installation, `cd` into this directory and run: - -```bash -npm install -npm run build -``` - -This will install required dependencies and generate a Javascript bundle that is saved -to `{{ cookiecutter.python_package_name }}/bundle.js`` and is distributed with the -associated Python package. diff --git a/src/idom_bokeh/_model.py b/src/idom_bokeh/_model.py index 88cb1f8..ef5891a 100644 --- a/src/idom_bokeh/_model.py +++ b/src/idom_bokeh/_model.py @@ -4,7 +4,6 @@ class IDOM(HTMLBox): - __implementation__ = "bundle.js" importSourceUrl = String() event = Tuple(Any, Any) diff --git a/src/idom-bokeh-extension/bokeh.ext.json b/src/idom_bokeh/bokeh.ext.json similarity index 100% rename from src/idom-bokeh-extension/bokeh.ext.json rename to src/idom_bokeh/bokeh.ext.json diff --git a/src/idom-bokeh-extension/package-lock.json b/src/idom_bokeh/package-lock.json similarity index 99% rename from src/idom-bokeh-extension/package-lock.json rename to src/idom_bokeh/package-lock.json index d483dae..2175f5f 100644 --- a/src/idom-bokeh-extension/package-lock.json +++ b/src/idom_bokeh/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "idom-bokeh-extension", "dependencies": { "@bokeh/bokehjs": "^2.4.2", "idom-client-react": "^0.35.1" @@ -583,6 +582,9 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.0.tgz", "integrity": "sha512-L6mKOkdyP8HK5kKJXaiWG7KZDumPJjuo1P+cfyHOJPNNTK3Moe7zCH5+fy7v8pVmHXtlxorzaBjvkBMB23s98g==", "dev": true, + "dependencies": { + "fsevents": "~2.3.2" + }, "bin": { "rollup": "dist/bin/rollup" }, diff --git a/src/idom-bokeh-extension/package.json b/src/idom_bokeh/package.json similarity index 88% rename from src/idom-bokeh-extension/package.json rename to src/idom_bokeh/package.json index 999ae0f..a2d8776 100644 --- a/src/idom-bokeh-extension/package.json +++ b/src/idom_bokeh/package.json @@ -4,9 +4,9 @@ "author": "Ryan Morshead", "repository": { "type": "git", - "url": "{{ cookiecutter.repository_url }}" + "url": "https://github.com/idom-team/idom-bokeh" }, - "main": "src/index.js", + "main": "dist/idom_bokeh.min.js", "files": [ "src/**/*.js" ], diff --git a/src/idom-bokeh-extension/src/declaration.d.ts b/src/idom_bokeh/src/declaration.d.ts similarity index 100% rename from src/idom-bokeh-extension/src/declaration.d.ts rename to src/idom_bokeh/src/declaration.d.ts diff --git a/src/idom-bokeh-extension/src/index.ts b/src/idom_bokeh/src/index.ts similarity index 98% rename from src/idom-bokeh-extension/src/index.ts rename to src/idom_bokeh/src/index.ts index 4c9f782..fd435dc 100644 --- a/src/idom-bokeh-extension/src/index.ts +++ b/src/idom_bokeh/src/index.ts @@ -106,4 +106,4 @@ export class IDOM extends HTMLBox { } } -register_models([IDOMView]); +register_models([IDOM]); diff --git a/src/idom-bokeh-extension/src/layout.ts b/src/idom_bokeh/src/layout.ts similarity index 100% rename from src/idom-bokeh-extension/src/layout.ts rename to src/idom_bokeh/src/layout.ts diff --git a/src/idom-bokeh-extension/tsconfig.json b/src/idom_bokeh/tsconfig.json similarity index 100% rename from src/idom-bokeh-extension/tsconfig.json rename to src/idom_bokeh/tsconfig.json From fd28c73fd3a91cd7189f644d20fce7449b7918fe Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 24 Jan 2022 12:42:32 +0100 Subject: [PATCH 2/7] Use rollup to resolve process.env.NODE_ENV --- setup.py | 8 ++++++++ src/idom_bokeh/package-lock.json | 4 +++- src/idom_bokeh/package.json | 7 ++++--- src/idom_bokeh/rollup.config.js | 16 ++++++++++++++++ src/idom_bokeh/tsconfig.json | 4 +--- 5 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 src/idom_bokeh/rollup.config.js diff --git a/setup.py b/setup.py index 38f469b..fcaa472 100644 --- a/setup.py +++ b/setup.py @@ -1,10 +1,12 @@ from __future__ import print_function +import os import pipes import shutil import subprocess import sys import traceback + from distutils import log from distutils.command.build import build # type: ignore from distutils.command.sdist import sdist # type: ignore @@ -125,6 +127,12 @@ def build_javascript_first(cls, rebuild=False): class Command(cls): def run(self): build_bokeh_extension(PKG_DIR, rebuild=rebuild) + npm = "npm" if sys.platform != "win32" else "npm.bat" + os.chdir("src/idom_bokeh") + try: + self.spawn([npm, "run", "rollup"]) + finally: + os.chdir("../..") super().run() return Command diff --git a/src/idom_bokeh/package-lock.json b/src/idom_bokeh/package-lock.json index 2175f5f..d073f75 100644 --- a/src/idom_bokeh/package-lock.json +++ b/src/idom_bokeh/package-lock.json @@ -1,10 +1,12 @@ { - "name": "idom-bokeh-extension", + "name": "idom-bokeh", "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "idom-bokeh", + "version": "0.0.1", "dependencies": { "@bokeh/bokehjs": "^2.4.2", "idom-client-react": "^0.35.1" diff --git a/src/idom_bokeh/package.json b/src/idom_bokeh/package.json index a2d8776..bcbe237 100644 --- a/src/idom_bokeh/package.json +++ b/src/idom_bokeh/package.json @@ -1,17 +1,18 @@ { - "name": "idom-bokeh-extension", + "name": "idom-bokeh", + "version": "0.0.1", "description": "A Bokeh extension for IDOM", "author": "Ryan Morshead", "repository": { "type": "git", "url": "https://github.com/idom-team/idom-bokeh" }, - "main": "dist/idom_bokeh.min.js", + "main": "dist/idom_bokeh.js", "files": [ "src/**/*.js" ], "scripts": { - "build": "rollup --config", + "rollup": "rollup --config --preserveModules --no-treeshake ", "format": "prettier --ignore-path .gitignore --write .", "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/src/idom_bokeh/rollup.config.js b/src/idom_bokeh/rollup.config.js new file mode 100644 index 0000000..2624928 --- /dev/null +++ b/src/idom_bokeh/rollup.config.js @@ -0,0 +1,16 @@ +import replace from "rollup-plugin-replace"; + +export default { + input: ["dist/idom_bokeh.min.js", "dist/idom_bokeh.js"], + output: { + dir: "dist/", + format: "es", + }, + context: "this", + plugins: [ + replace({ + "process.env.NODE_ENV": JSON.stringify("production"), + preventAssignment: true, + }), + ], +}; diff --git a/src/idom_bokeh/tsconfig.json b/src/idom_bokeh/tsconfig.json index c7344e1..1c4a005 100644 --- a/src/idom_bokeh/tsconfig.json +++ b/src/idom_bokeh/tsconfig.json @@ -28,9 +28,7 @@ "@bokehjs/*": [ "node_modules/@bokeh/bokehjs/build/js/lib/*", "node_modules/@bokeh/bokehjs/build/js/types/*" - ], - "react": ["node_modules/preact/compat"], - "react-dom": ["node_modules/preact/compat"] + ] } }, "include": ["src/**/*.ts"] From f36b775fc1da22f51aa54e4db110c71bfadd836b Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 24 Jan 2022 14:40:12 +0100 Subject: [PATCH 3/7] Work around __esExport --- src/idom_bokeh/package-lock.json | 264 ------------------------------- src/idom_bokeh/package.json | 4 +- src/idom_bokeh/rollup.config.js | 5 + 3 files changed, 6 insertions(+), 267 deletions(-) diff --git a/src/idom_bokeh/package-lock.json b/src/idom_bokeh/package-lock.json index d073f75..fde33e0 100644 --- a/src/idom_bokeh/package-lock.json +++ b/src/idom_bokeh/package-lock.json @@ -14,8 +14,6 @@ "devDependencies": { "prettier": "^2.2.1", "rollup": "^2.35.1", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0" } }, @@ -85,12 +83,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, "node_modules/@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -99,21 +91,6 @@ "@types/sizzle": "*" } }, - "node_modules/@types/node": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", - "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", @@ -127,18 +104,6 @@ "@types/jquery": "*" } }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/choices.js": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/choices.js/-/choices.js-9.1.0.tgz", @@ -326,12 +291,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "node_modules/fuse.js": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", @@ -348,18 +307,6 @@ "node": ">=0.8.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/htm": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.0.tgz", @@ -378,33 +325,6 @@ "react-dom": ">=16" } }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -490,12 +410,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "node_modules/prettier": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", @@ -562,23 +476,6 @@ "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.0.tgz", "integrity": "sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg==" }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/rollup": { "version": "2.66.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.0.tgz", @@ -597,40 +494,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "rollup": ">=1.12.0" - } - }, - "node_modules/rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", - "dev": true, - "dependencies": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "rollup": ">=1.11.0" - } - }, "node_modules/rollup-plugin-replace": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", @@ -685,18 +548,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/timezone": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/timezone/-/timezone-1.0.23.tgz", @@ -795,12 +646,6 @@ } } }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, "@types/jquery": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", @@ -809,21 +654,6 @@ "@types/sizzle": "*" } }, - "@types/node": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", - "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", @@ -837,12 +667,6 @@ "@types/jquery": "*" } }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, "choices.js": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/choices.js/-/choices.js-9.1.0.tgz", @@ -1018,12 +842,6 @@ "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "fuse.js": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", @@ -1034,15 +852,6 @@ "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "htm": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.0.tgz", @@ -1057,30 +866,6 @@ "htm": "^3.0.3" } }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, "jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -1160,12 +945,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "peer": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "prettier": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", @@ -1220,17 +999,6 @@ "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.0.tgz", "integrity": "sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg==" }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "rollup": { "version": "2.66.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.0.tgz", @@ -1240,32 +1008,6 @@ "fsevents": "~2.3.2" } }, - "rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "dev": true, - "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" - } - }, "rollup-plugin-replace": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", @@ -1316,12 +1058,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "timezone": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/timezone/-/timezone-1.0.23.tgz", diff --git a/src/idom_bokeh/package.json b/src/idom_bokeh/package.json index bcbe237..5d506fe 100644 --- a/src/idom_bokeh/package.json +++ b/src/idom_bokeh/package.json @@ -12,15 +12,13 @@ "src/**/*.js" ], "scripts": { - "rollup": "rollup --config --preserveModules --no-treeshake ", + "rollup": "rollup --config", "format": "prettier --ignore-path .gitignore --write .", "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { "prettier": "^2.2.1", "rollup": "^2.35.1", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0" }, "dependencies": { diff --git a/src/idom_bokeh/rollup.config.js b/src/idom_bokeh/rollup.config.js index 2624928..affc2d3 100644 --- a/src/idom_bokeh/rollup.config.js +++ b/src/idom_bokeh/rollup.config.js @@ -12,5 +12,10 @@ export default { "process.env.NODE_ENV": JSON.stringify("production"), preventAssignment: true, }), + // Hacky workaround for avoiding __esExport + replace({ + "__esExport(": "(", + delimiters: ['', ''] + }), ], }; From b77095d0211f72ab7c56452ca297d1b58e8859c2 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 24 Jan 2022 16:28:03 +0100 Subject: [PATCH 4/7] Fix event handling --- src/idom_bokeh/_model.py | 12 ++++++++++-- src/idom_bokeh/panel.py | 22 +++++++++------------- src/idom_bokeh/src/index.ts | 30 +++++++++++++++++++++++++++--- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/idom_bokeh/_model.py b/src/idom_bokeh/_model.py index ef5891a..cf49b2a 100644 --- a/src/idom_bokeh/_model.py +++ b/src/idom_bokeh/_model.py @@ -1,11 +1,19 @@ from bokeh.core.properties import Any, Dict, Either, String, Null, Tuple +from bokeh.events import ModelEvent from bokeh.models import HTMLBox +class IDOMEvent(ModelEvent): + + event_name = 'idom_event' + + def __init__(self, model, data=None): + self.data = data + super().__init__(model=model) + + class IDOM(HTMLBox): importSourceUrl = String() event = Tuple(Any, Any) - - msg = Either(Dict(String, Any), Null) diff --git a/src/idom_bokeh/panel.py b/src/idom_bokeh/panel.py index fe11a59..a314dd8 100644 --- a/src/idom_bokeh/panel.py +++ b/src/idom_bokeh/panel.py @@ -1,6 +1,7 @@ import shutil import sys import asyncio + from functools import partial from threading import Thread from queue import Queue as SyncQueue @@ -78,15 +79,20 @@ def _get_model(self, doc, root=None, parent=None, comm=None): model = self._bokeh_model( event=[update.path, update.changes], importSourceUrl=url, **props ) - if root is None: - root = model - self._link_props(model, ["msg"], doc, root, comm) + if comm: + model.on_event('idom_event', self._comm_event) + else: + model.on_event('idom_event', partial(self._server_event, doc)) if root is None: root = model self._models[root.ref["id"]] = (model, parent) return model + def _process_event(self, event): + dispatch = self._idom_layout.deliver(LayoutEvent(**event.data)) + asyncio.run_coroutine_threadsafe(dispatch, loop=self._idom_loop) + def _cleanup(self, root): super()._cleanup(root) if not self._models: @@ -114,16 +120,6 @@ def _cleanup(self, root): self._idom_loop = None self._idom_layout = None - def _process_property_change(self, msg): - if msg["msg"] is None: - return {} - dispatch = self._idom_layout.dispatch(LayoutEvent(**msg["msg"])) - asyncio.run_coroutine_threadsafe(dispatch, loop=self._idom_loop) - for ref, (m, _) in self._models.items(): - m.msg = None - push_on_root(ref) - return {} - async def _idom_layout_render_loop(self): with self._idom_layout: while True: diff --git a/src/idom_bokeh/src/index.ts b/src/idom_bokeh/src/index.ts index fd435dc..bbc50c3 100644 --- a/src/idom_bokeh/src/index.ts +++ b/src/idom_bokeh/src/index.ts @@ -1,11 +1,37 @@ import { mountLayout } from "idom-client-react"; +import {ModelEvent, JSON} from "@bokehjs/core/bokeh_events" import * as p from "@bokehjs/core/properties"; import { HTMLBox } from "@bokehjs/models/layouts/html_box"; import { register_models } from "@bokehjs/base"; import { PanelHTMLBoxView, set_size } from "./layout"; +export class IDOMEvent extends ModelEvent { + event_name: string = "idom_event" + + constructor(readonly data: any) { + super() + } + + protected _to_json(): JSON { + const events = [] + console.log(this.data) + for (let e of this.data.data) { + e = {...e} + if (e.target?.boundingClientRect != null) { + e.target.boundingClientRect = {...e.target.boundingClientReact} + } + if (e.currenttarget?.boundingClientRect != null) { + e.target.boundingClientRect = {...e.currentTarget.boundingClientReact} + } + events.push(e) + } + const data: any = {target: this.data.target, data: events} + return {model: this.origin, data: data} + } +} + export class IDOMView extends PanelHTMLBoxView { model: IDOM; _update: any; @@ -71,7 +97,7 @@ export class IDOMView extends PanelHTMLBoxView { } _send(event: any): any { - this.model.msg = event; + this.model.trigger_event(new IDOMEvent(event)) } } @@ -81,7 +107,6 @@ export namespace IDOM { export type Props = HTMLBox.Props & { event: p.Property; importSourceUrl: p.Property; - msg: p.Property; }; } @@ -101,7 +126,6 @@ export class IDOM extends HTMLBox { this.define(({ Any, String }) => ({ event: [Any, []], importSourceUrl: [String, ""], - msg: [Any, {}], })); } } From c63444817c5a79cf417f45e9b697608b3e5d03bd Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 24 Jan 2022 16:35:15 +0100 Subject: [PATCH 5/7] Fix typos --- src/idom_bokeh/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/idom_bokeh/src/index.ts b/src/idom_bokeh/src/index.ts index bbc50c3..3c4a12b 100644 --- a/src/idom_bokeh/src/index.ts +++ b/src/idom_bokeh/src/index.ts @@ -20,10 +20,10 @@ export class IDOMEvent extends ModelEvent { for (let e of this.data.data) { e = {...e} if (e.target?.boundingClientRect != null) { - e.target.boundingClientRect = {...e.target.boundingClientReact} + e.target.boundingClientRect = {...e.target.boundingClientRect} } if (e.currenttarget?.boundingClientRect != null) { - e.target.boundingClientRect = {...e.currentTarget.boundingClientReact} + e.target.boundingClientRect = {...e.currentTarget.boundingClientRect} } events.push(e) } From 004e5352d173affc9177465700ddec7ddbd026b9 Mon Sep 17 00:00:00 2001 From: Ryan Morshead Date: Mon, 24 Jan 2022 16:42:27 -0800 Subject: [PATCH 6/7] remove debug console.log --- src/idom_bokeh/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/idom_bokeh/src/index.ts b/src/idom_bokeh/src/index.ts index 3c4a12b..064932b 100644 --- a/src/idom_bokeh/src/index.ts +++ b/src/idom_bokeh/src/index.ts @@ -16,7 +16,6 @@ export class IDOMEvent extends ModelEvent { protected _to_json(): JSON { const events = [] - console.log(this.data) for (let e of this.data.data) { e = {...e} if (e.target?.boundingClientRect != null) { From e25f853a4d9935c367970a8a5d88a32502d31492 Mon Sep 17 00:00:00 2001 From: Ryan Morshead Date: Mon, 24 Jan 2022 16:42:39 -0800 Subject: [PATCH 7/7] fix typo --- src/idom_bokeh/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/idom_bokeh/src/index.ts b/src/idom_bokeh/src/index.ts index 064932b..003c8c5 100644 --- a/src/idom_bokeh/src/index.ts +++ b/src/idom_bokeh/src/index.ts @@ -21,7 +21,7 @@ export class IDOMEvent extends ModelEvent { if (e.target?.boundingClientRect != null) { e.target.boundingClientRect = {...e.target.boundingClientRect} } - if (e.currenttarget?.boundingClientRect != null) { + if (e.currentTarget?.boundingClientRect != null) { e.target.boundingClientRect = {...e.currentTarget.boundingClientRect} } events.push(e)