1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"sources":["../yjs/node_modules/browserify/node_modules/browser-pack/_prelude.js","src/Map.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"y-map.es6","sourceRoot":"/source/","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/* global Y */\n'use strict'\n\nfunction extend (Y /* :any */) {\n class YMap {\n /* ::\n _model: Id;\n os: Y.AbstractDatabase;\n map: Object;\n contents: any;\n opContents: Object;\n eventHandler: Function;\n */\n constructor (os, model, contents, opContents) {\n this._model = model.id\n this.os = os\n this.map = Y.utils.copyObject(model.map)\n this.contents = contents\n this.opContents = opContents\n this.eventHandler = new Y.utils.EventHandler(ops => {\n var userEvents = []\n for (var i = 0; i < ops.length; i++) {\n var op = ops[i]\n var oldValue\n // key is the name to use to access (op)content\n var key = op.struct === 'Delete' ? op.key : op.parentSub\n\n // compute oldValue\n if (this.opContents[key] != null) {\n let prevType = this.opContents[key]\n oldValue = () => {// eslint-disable-line\n return new Promise((resolve) => {\n this.os.requestTransaction(function *() {// eslint-disable-line\n var type = yield* this.getType(prevType)\n resolve(type)\n })\n })\n }\n } else {\n oldValue = this.contents[key]\n }\n // compute op event\n if (op.struct === 'Insert') {\n if (op.left === null) {\n if (op.opContent != null) {\n delete this.contents[key]\n if (op.deleted) {\n delete this.opContents[key]\n } else {\n this.opContents[key] = op.opContent\n }\n } else {\n delete this.opContents[key]\n if (op.deleted) {\n delete this.contents[key]\n } else {\n this.contents[key] = op.content\n }\n }\n this.map[key] = op.id\n var insertEvent\n if (oldValue === undefined) {\n insertEvent = {\n name: key,\n object: this,\n type: 'add'\n }\n } else {\n insertEvent = {\n name: key,\n object: this,\n oldValue: oldValue,\n type: 'update'\n }\n }\n userEvents.push(insertEvent)\n }\n } else if (op.struct === 'Delete') {\n if (Y.utils.compareIds(this.map[key], op.target)) {\n delete this.opContents[key]\n delete this.contents[key]\n var deleteEvent = {\n name: key,\n object: this,\n oldValue: oldValue,\n type: 'delete'\n }\n userEvents.push(deleteEvent)\n }\n } else {\n throw new Error('Unexpected Operation!')\n }\n }\n if (userEvents.length > 0) {\n this.eventHandler.callEventListeners(userEvents)\n }\n })\n }\n _destroy () {\n this.eventHandler.destroy()\n this.eventHandler = null\n this.contents = null\n this.opContents = null\n this._model = null\n this.os = null\n this.map = null\n }\n get (key) {\n // return property.\n // if property does not exist, return null\n // if property is a type, return a promise\n if (key == null) {\n throw new Error('You must specify key!')\n }\n if (this.opContents[key] == null) {\n return this.contents[key]\n } else {\n return new Promise((resolve) => {\n var oid = this.opContents[key]\n this.os.requestTransaction(function *() {\n var type = yield* this.getType(oid)\n resolve(type)\n })\n })\n }\n }\n /*\n If there is a primitive (not a custom type), then return it.\n Returns all primitive values, if propertyName is specified!\n Note: modifying the return value could result in inconsistencies!\n -- so make sure to copy it first!\n */\n getPrimitive (key) {\n if (key == null) {\n return Y.utils.copyObject(this.contents)\n } else {\n return this.contents[key]\n }\n }\n delete (key) {\n var right = this.map[key]\n if (right != null) {\n var del = {\n target: right,\n struct: 'Delete'\n }\n var eventHandler = this.eventHandler\n var modDel = Y.utils.copyObject(del)\n modDel.key = key\n eventHandler.awaitAndPrematurelyCall([modDel])\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations([del])\n eventHandler.awaitedDeletes(1)\n })\n }\n }\n set (key, value) {\n // set property.\n // if property is a type, return a promise\n // if not, apply immediately on this type an call event\n\n var right = this.map[key] || null\n var insert /* :any */ = {\n left: null,\n right: right,\n origin: null,\n parent: this._model,\n parentSub: key,\n struct: 'Insert'\n }\n return new Promise((resolve) => {\n if (value instanceof Y.utils.CustomType) {\n // construct a new type\n this.os.requestTransaction(function *() {\n var type = yield* this.createType(value)\n insert.opContent = type._model\n insert.id = this.store.getNextOpId()\n yield* this.applyCreatedOperations([insert])\n resolve(type)\n })\n } else {\n insert.content = value\n insert.id = this.os.getNextOpId()\n var eventHandler = this.eventHandler\n eventHandler.awaitAndPrematurelyCall([insert])\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations([insert])\n eventHandler.awaitedInserts(1)\n })\n resolve(value)\n }\n })\n }\n observe (f) {\n this.eventHandler.addEventListener(f)\n }\n unobserve (f) {\n this.eventHandler.removeEventListener(f)\n }\n /*\n Observe a path.\n\n E.g.\n ```\n o.set('textarea', Y.TextBind)\n o.observePath(['textarea'], function(t){\n // is called whenever textarea is replaced\n t.bind(textarea)\n })\n\n returns a Promise that contains a function that removes the observer from the path.\n */\n observePath (path, f) {\n var self = this\n function observeProperty (events) {\n // call f whenever path changes\n for (var i = 0; i < events.length; i++) {\n var event = events[i]\n if (event.name === propertyName) {\n // call this also for delete events!\n var property = self.get(propertyName)\n if (property instanceof Promise) {\n property.then(f)\n } else {\n f(property)\n }\n }\n }\n }\n\n if (path.length < 1) {\n throw new Error('Path must contain at least one element!')\n } else if (path.length === 1) {\n var propertyName = path[0]\n var property = self.get(propertyName)\n if (property instanceof Promise) {\n property.then(f)\n } else {\n f(property)\n }\n this.observe(observeProperty)\n return Promise.resolve(function () {\n self.unobserve(f)\n })\n } else {\n var deleteChildObservers\n var resetObserverPath = function () {\n var promise = self.get(path[0])\n if (!promise instanceof Promise) {\n // its either not defined or a primitive value\n promise = self.set(path[0], Y.Map)\n }\n return promise.then(function (map) {\n return map.observePath(path.slice(1), f)\n }).then(function (_deleteChildObservers) {\n // update deleteChildObservers\n deleteChildObservers = _deleteChildObservers\n return Promise.resolve() // Promise does not return anything\n })\n }\n var observer = function (events) {\n for (var e = 0; e < events.length; e++) {\n var event = events[e]\n if (event.name === path[0]) {\n if (deleteChildObservers != null) {\n deleteChildObservers()\n }\n if (event.type === 'add' || event.type === 'update') {\n resetObserverPath()\n }\n // TODO: what about the delete events?\n }\n }\n }\n self.observe(observer)\n return resetObserverPath().then(\n // this promise contains a function that deletes all the child observers\n // and how to unobserve the observe from this object\n new Promise.resolve(function () { // eslint-disable-line\n if (deleteChildObservers != null) {\n deleteChildObservers()\n }\n self.unobserve(observer)\n })\n )\n }\n }\n * _changed (transaction, op) {\n if (op.struct === 'Delete') {\n var target = yield* transaction.getOperation(op.target)\n op.key = target.parentSub\n }\n this.eventHandler.receivedOp(op)\n }\n }\n Y.extend('Map', new Y.utils.CustomType({\n name: 'Map',\n class: YMap,\n struct: 'Map',\n initType: function * YMapInitializer (os, model) {\n var contents = {}\n var opContents = {}\n var map = model.map\n for (var name in map) {\n var op = yield* this.getOperation(map[name])\n if (op.opContent != null) {\n opContents[name] = op.opContent\n } else {\n contents[name] = op.content\n }\n }\n return new YMap(os, model, contents, opContents)\n }\n }))\n}\n\nmodule.exports = extend\nif (typeof Y !== 'undefined') {\n extend(Y)\n}\n"]} |