Deploy 12.3.3

This commit is contained in:
Kevin Jahns 2017-08-04 20:36:37 +02:00
parent b3b12958fa
commit 8739fd3a9c
6 changed files with 37 additions and 26 deletions

View File

@ -55,23 +55,23 @@ Install Yjs, and its modules with [bower](http://bower.io/), or
[npm](https://www.npmjs.org/package/yjs). [npm](https://www.npmjs.org/package/yjs).
### Bower ### Bower
``` ```sh
bower install --save yjs y-array % add all y-* modules you want to use bower install --save yjs y-array % add all y-* modules you want to use
``` ```
You only need to include the `y.js` file. Yjs is able to automatically require You only need to include the `y.js` file. Yjs is able to automatically require
missing modules. missing modules.
``` ```html
<script src="./bower_components/yjs/y.js"></script> <script src="./bower_components/yjs/y.js"></script>
``` ```
### Npm ### Npm
``` ```sh
npm install --save yjs % add all y-* modules you want to use npm install --save yjs % add all y-* modules you want to use
``` ```
If you don't include via script tag, you have to explicitly include all modules! If you don't include via script tag, you have to explicitly include all modules!
(Same goes for other module systems) (Same goes for other module systems)
``` ```js
var Y = require('yjs') var Y = require('yjs')
require('y-array')(Y) // add the y-array type to Yjs require('y-array')(Y) // add the y-array type to Yjs
require('y-websockets-client')(Y) require('y-websockets-client')(Y)
@ -84,7 +84,7 @@ require('y-text')(Y)
``` ```
### ES6 Syntax ### ES6 Syntax
``` ```js
import Y from 'yjs' import Y from 'yjs'
import yArray from 'y-array' import yArray from 'y-array'
import yWebsocketsClient from 'y-webrtc' import yWebsocketsClient from 'y-webrtc'
@ -98,7 +98,7 @@ Y.extend(yArray, yWebsocketsClient, yMemory, yArray, yMap, yText /*, .. */)
# Text editing example # Text editing example
Install dependencies Install dependencies
``` ```sh
bower i yjs y-memory y-webrtc y-array y-text bower i yjs y-memory y-webrtc y-array y-text
``` ```
@ -166,6 +166,25 @@ soon, if possible.
endpoint of the used connector. endpoint of the used connector.
* All of our connectors also have a default connection endpoint that you can * All of our connectors also have a default connection endpoint that you can
use for development. use for development.
* We provide basic authentification for all connectors. The value of
`options.connector.auth` (this can be a passphase) is sent to all connected
Yjs instances. `options.connector.checkAuth` may grant read or write access
depending on the `auth` information.
Example: A client specifies `options.connector.auth = 'superSecretPassword`.
A server specifies
```js
options.connector.checkAuth = function (auth, yjsInstance, sender) {
return new Promise(function (resolve, reject){
if (auth === 'superSecretPassword') {
resolve('write') // grant read-write access
} else if (auth === 'different password') {
resolve('read') // grant read-only access
} else {
reject('wrong password!') // reject connection
}
})
}
```
* Set `options.connector.generateUserId = true` in order to genenerate a * Set `options.connector.generateUserId = true` in order to genenerate a
userid, instead of receiving one from the server. This way the `Y(..)` is userid, instead of receiving one from the server. This way the `Y(..)` is
immediately going to be resolved, without waiting for any confirmation from immediately going to be resolved, without waiting for any confirmation from
@ -181,7 +200,7 @@ soon, if possible.
* Defaults to `/bower_components` * Defaults to `/bower_components`
* Not required when running on `nodejs` / `iojs` * Not required when running on `nodejs` / `iojs`
* When using nodejs you need to manually extend Yjs: * When using nodejs you need to manually extend Yjs:
``` ```js
var Y = require('yjs') var Y = require('yjs')
// you have to require a db, connector, and *all* types you use! // you have to require a db, connector, and *all* types you use!
require('y-memory')(Y) require('y-memory')(Y)

View File

@ -1,6 +1,6 @@
{ {
"name": "yjs", "name": "yjs",
"version": "12.3.2", "version": "12.3.3",
"homepage": "y-js.org", "homepage": "y-js.org",
"authors": [ "authors": [
"Kevin Jahns <kevin.jahns@rwth-aachen.de>" "Kevin Jahns <kevin.jahns@rwth-aachen.de>"

16
y.es6
View File

@ -1,6 +1,6 @@
/** /**
* yjs - A framework for real-time p2p shared editing on any data * yjs - A framework for real-time p2p shared editing on any data
* @version v12.3.1 * @version v12.3.2
* @link http://y-js.org * @link http://y-js.org
* @license MIT * @license MIT
*/ */
@ -777,7 +777,6 @@ module.exports = function (Y/* :any */) {
// this client receives operations from only one other client. // this client receives operations from only one other client.
// In particular, this does not work with y-webrtc. // In particular, this does not work with y-webrtc.
// It will work with y-websockets-client // It will work with y-websockets-client
this.preferUntransformed = opts.preferUntransformed || false
if (opts.role == null || opts.role === 'master') { if (opts.role == null || opts.role === 'master') {
this.role = 'master' this.role = 'master'
} else if (opts.role === 'slave') { } else if (opts.role === 'slave') {
@ -929,9 +928,6 @@ module.exports = function (Y/* :any */) {
protocolVersion: conn.protocolVersion, protocolVersion: conn.protocolVersion,
auth: conn.authInfo auth: conn.authInfo
} }
if (conn.preferUntransformed && Object.keys(stateSet).length === 0) {
answer.preferUntransformed = true
}
conn.send(syncUser, answer) conn.send(syncUser, answer)
}) })
} else { } else {
@ -1045,11 +1041,7 @@ module.exports = function (Y/* :any */) {
protocolVersion: this.protocolVersion, protocolVersion: this.protocolVersion,
auth: this.authInfo auth: this.authInfo
} }
if (message.preferUntransformed === true && Object.keys(m.stateSet).length === 0) { answer.os = yield* this.getOperations(m.stateSet)
answer.osUntransformed = yield* this.getOperationsUntransformed()
} else {
answer.os = yield* this.getOperations(m.stateSet)
}
conn.send(sender, answer) conn.send(sender, answer)
if (this.forwardToSyncingClients) { if (this.forwardToSyncingClients) {
conn.syncingClients.push(sender) conn.syncingClients.push(sender)
@ -2534,7 +2526,7 @@ module.exports = function (Y/* :any */) {
send.push(Y.Struct[op.struct].encode(op)) send.push(Y.Struct[op.struct].encode(op))
} }
} }
if (this.store.y.connector.isSynced && send.length > 0) { // TODO: && !this.store.forwardAppliedOperations (but then i don't send delete ops) if (send.length > 0) { // TODO: && !this.store.forwardAppliedOperations (but then i don't send delete ops)
// is connected, and this is not going to be send in addOperation // is connected, and this is not going to be send in addOperation
this.store.y.connector.broadcastOps(send) this.store.y.connector.broadcastOps(send)
} }
@ -3155,7 +3147,7 @@ module.exports = function (Y/* :any */) {
} }
* addOperation (op) { * addOperation (op) {
yield* this.os.put(op) yield* this.os.put(op)
if (this.store.y.connector.isSynced && this.store.forwardAppliedOperations && typeof op.id[1] !== 'string') { if (this.store.forwardAppliedOperations && typeof op.id[1] !== 'string') {
// is connected, and this is not going to be send in addOperation // is connected, and this is not going to be send in addOperation
this.store.y.connector.broadcastOps([op]) this.store.y.connector.broadcastOps([op])
} }

File diff suppressed because one or more lines are too long

8
y.js

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long