From 548ab94810bc152a9d7ce6639cb8811adc4c88bd Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 29 Dec 2019 09:14:49 -0300 Subject: [PATCH] feat(tauri.js) add API endpoint proxy, closes #197 (#241) * feat(tauri.js) add API endpoint proxy * feat(tauri.js) always resolve/reject proxy promise * chore(proxy) wait for onTauriInit to start direct proxy to window.tauri --- cli/tauri.js/api.js | 56 +++++++++++++++++++++ cli/tauri.js/templates/tauri.js | 4 -- examples/vue/quasar-app/package.json | 2 +- examples/vue/quasar-app/src/pages/Index.vue | 17 ++----- tauri/src/endpoints.rs | 4 ++ 5 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 cli/tauri.js/api.js diff --git a/cli/tauri.js/api.js b/cli/tauri.js/api.js new file mode 100644 index 000000000..59f4078ed --- /dev/null +++ b/cli/tauri.js/api.js @@ -0,0 +1,56 @@ +const cache = {} +let initialized = false + +const proxy = new Proxy({ + __consume () { + for (const key in cache) { + if (key in window.tauri) { + const queue = cache[key] + for (const call of queue) { + try { + const ret = window.tauri[key].apply(window.tauri, call.arguments) + if (ret instanceof Promise) { + ret.then(call.resolve, call.reject) + } else { + call.resolve() + } + } catch (e) { + call.reject(e) + } + } + } + } + initialized = true + } +}, { + get (obj, prop) { + if (prop === '__consume') { + return obj[prop] + } + + if (initialized && 'tauri' in window) { + return window.tauri[prop].bind(window.tauri) + } + + if (!(prop in cache)) { + cache[prop] = [] + } + return function () { + const promise = new Promise((resolve, reject) => { + cache[prop].push({ + arguments: arguments, + resolve, + reject + }) + }); + return promise; + } + + } +}) + +window.onTauriInit = () => { + proxy.__consume() +} + +export default proxy diff --git a/cli/tauri.js/templates/tauri.js b/cli/tauri.js/templates/tauri.js index 689d46022..ec52eaef5 100644 --- a/cli/tauri.js/templates/tauri.js +++ b/cli/tauri.js/templates/tauri.js @@ -385,10 +385,6 @@ try { }, true) } -if (window.onTauriInit !== void 0) { - window.onTauriInit() -} - document.addEventListener('error', function (e) { var target = e.target while (target != null) { diff --git a/examples/vue/quasar-app/package.json b/examples/vue/quasar-app/package.json index a3fcd3404..ae459eb03 100644 --- a/examples/vue/quasar-app/package.json +++ b/examples/vue/quasar-app/package.json @@ -36,7 +36,7 @@ "eslint-plugin-promise": "4.2.1", "eslint-plugin-standard": "4.0.1", "eslint-plugin-vue": "6.0.1", - "tauri": "0.2.1" + "tauri": "file:../../../cli/tauri.js" }, "engines": { "node": ">= 8.9.0", diff --git a/examples/vue/quasar-app/src/pages/Index.vue b/examples/vue/quasar-app/src/pages/Index.vue index aab29fb21..8cd73d605 100644 --- a/examples/vue/quasar-app/src/pages/Index.vue +++ b/examples/vue/quasar-app/src/pages/Index.vue @@ -9,14 +9,7 @@