@live-change/dao-vue3 0.4.3 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/live.js +25 -11
  2. package/package.json +3 -3
package/lib/live.js CHANGED
@@ -2,6 +2,7 @@ import { ref, onUnmounted, getCurrentInstance, unref, reactive, isRef } from 'vu
2
2
  import { collectPointers, ExtendedObservableList } from '@live-change/dao'
3
3
  import nodeDebug from 'debug'
4
4
  const debug = nodeDebug('dao-vue3')
5
+ debug.log = console.log.bind(console)
5
6
 
6
7
  const liveSymbol = Symbol('live')
7
8
 
@@ -71,10 +72,10 @@ async function live(api, path, onUnmountedCb) {
71
72
  return createObject(path.what, path.more)
72
73
  } else {
73
74
  const preFetchPaths = api.observable({ paths })
74
- const observables = []
75
- function bindResult(what, more, object, property) {
75
+ function bindResult(what, more, object, property, onError) {
76
76
  if(!what) throw new Error("what parameter required!")
77
77
  const observable = api.observable(what)
78
+ const errorObserver = { error: onError }
78
79
  if(more && more.some(m => m.to)) {
79
80
  const extendedObservable = new ExtendedObservableList(observable,
80
81
  newElement => {
@@ -117,7 +118,7 @@ async function live(api, path, onUnmountedCb) {
117
118
  const newArray = new Array(pointers.length)
118
119
  const newBounds = new Array(pointers.length)
119
120
  for(let i = 0; i < pointers.length; i++) {
120
- newBounds[i] = bindResult(pointers[i], moreElements.more, newArray, i)
121
+ newBounds[i] = bindResult(pointers[i], moreElements.more, newArray, i, onError)
121
122
  }
122
123
  prop.bounds = newBounds
123
124
  oldBound.forEach(b => b.dispose())
@@ -131,7 +132,7 @@ async function live(api, path, onUnmountedCb) {
131
132
  }
132
133
  if(pointers[0]) {
133
134
  prop.bounds = [
134
- bindResult(pointers[0], moreElement.more, extendedElement, moreElement.to)
135
+ bindResult(pointers[0], moreElement.more, extendedElement, moreElement.to, onError)
135
136
  ]
136
137
  }
137
138
  }
@@ -170,34 +171,47 @@ async function live(api, path, onUnmountedCb) {
170
171
  }
171
172
  )
172
173
  extendedObservable.bindProperty(object, property)
174
+ observable.observe(errorObserver)
173
175
  return {
174
176
  what,
175
177
  property,
176
178
  dispose() {
177
179
  debug("UNBIND PROPERTY", what, object, property)
178
180
  extendedObservable.unbindProperty(object, property)
181
+ observable.unobserve(errorObserver)
179
182
  }
180
183
  }
181
184
  } else {
182
185
  observable.bindProperty(object, property)
186
+ observable.observe(errorObserver)
183
187
  return {
184
188
  what, property,
185
189
  dispose() {
186
190
  debug("UNBIND PROPERTY", what, object, property)
187
191
  observable.unbindProperty(object, property)
192
+ observable.unobserve(errorObserver)
188
193
  }
189
194
  }
190
195
  }
191
196
  }
192
197
  const resultRef = ref()
193
- const bound = bindResult(path.what, path.more, resultRef, 'value')
194
- const pathsObserver = (signal, value) => {}
195
- preFetchPaths.observe(pathsObserver)
196
- onUnmountedCb(() => {
197
- preFetchPaths.unobserve(pathsObserver)
198
- bound.dispose()
198
+ await new Promise((resolve, reject) => {
199
+ let error = null
200
+ const onError = (msg) => {
201
+ console.error("LIVE ERROR", msg)
202
+ if(error) return
203
+ error = msg
204
+ reject(error)
205
+ }
206
+ const bound = bindResult(path.what, path.more, resultRef, 'value', onError)
207
+ const pathsObserver = (signal, value) => {}
208
+ preFetchPaths.observe(pathsObserver)
209
+ onUnmountedCb(() => {
210
+ preFetchPaths.unobserve(pathsObserver)
211
+ bound.dispose()
212
+ })
213
+ preFetchPaths.wait().then(resolve).catch(onError)
199
214
  })
200
- await preFetchPaths.wait()
201
215
  while(unref(resultRef) === undefined) { // wait for next tick
202
216
  await new Promise((resolve) => setTimeout(resolve, 0))
203
217
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/dao-vue3",
3
- "version": "0.4.3",
3
+ "version": "0.4.6",
4
4
  "author": {
5
5
  "email": "m8@em8.pl",
6
6
  "name": "Michał Łaszczewski",
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/live-change/live-change-dao/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@live-change/dao": "^0.4.3"
13
+ "@live-change/dao": "^0.4.6"
14
14
  },
15
15
  "description": "Vue.js integration for live-change dao",
16
16
  "directories": {},
@@ -32,5 +32,5 @@
32
32
  "scripts": {
33
33
  "compileTests": "webpack test/*.js tests-bundle.js"
34
34
  },
35
- "gitHead": "aeaabe2aa663d30301cae9e80f1f07ee1a4f382c"
35
+ "gitHead": "29c98c353b6f8cc902d3bf2f67cdfc47e313ef58"
36
36
  }