{"version":3,"sources":["../yjs/node_modules/browserify/node_modules/browser-pack/_prelude.js","src/Array.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","file":"y-array.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 {\n var userEvents = []\n for (var i = 0; i < ops.length; i++) {\n var op = ops[i]\n if (op.struct === 'Insert') {\n let pos\n // we check op.left only!,\n // because op.right might not be defined when this is called\n if (op.left === null) {\n pos = 0\n } else {\n let sid = JSON.stringify(op.left)\n pos = 1 + this._content.findIndex(function (c) {\n return c.id === sid\n })\n if (pos <= 0) {\n throw new Error('Unexpected operation!')\n }\n }\n this._content.splice(pos, 0, {\n id: JSON.stringify(op.id),\n val: op.content\n })\n userEvents.push({\n type: 'insert',\n object: this,\n index: pos,\n value: op.content,\n length: 1\n })\n } else if (op.struct === 'Delete') {\n let sid = JSON.stringify(op.target)\n let pos = this._content.findIndex(function (c) {\n return c.id === sid\n })\n if (pos >= 0) {\n var val = this._content[pos].val\n this._content.splice(pos, 1)\n userEvents.push({\n type: 'delete',\n object: this,\n index: pos,\n value: val,\n length: 1\n })\n }\n } else {\n throw new Error('Unexpected struct!')\n }\n }\n this.eventHandler.callEventListeners(userEvents)\n })\n }\n _destroy () {\n this.eventHandler.destroy()\n this.eventHandler = null\n this._content = null\n this._model = null\n this.os = null\n }\n get length () {\n return this._content.length\n }\n get (pos) {\n if (pos == null || typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n return this._content[pos].val\n }\n toArray () {\n return this._content.map(function (x) {\n return x.val\n })\n }\n push (contents) {\n this.insert(this._content.length, contents)\n }\n insert (pos, contents) {\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (!(contents instanceof Array)) {\n throw new Error('contents must be an Array of objects!')\n }\n if (contents.length === 0) {\n return\n }\n if (pos > this._content.length || pos < 0) {\n throw new Error('This position exceeds the range of the array!')\n }\n var mostLeft = pos === 0 ? null : JSON.parse(this._content[pos - 1].id)\n\n var ops = []\n var prevId = mostLeft\n for (var i = 0; i < contents.length; i++) {\n var op = {\n left: prevId,\n origin: prevId,\n // right: mostRight,\n // NOTE: I intentionally do not define right here, because it could be deleted\n // at the time of inserting this operation (when we get the transaction),\n // and would therefore not defined in this._conten\n parent: this._model,\n content: contents[i],\n struct: 'Insert',\n id: this.os.getNextOpId()\n }\n ops.push(op)\n prevId = op.id\n }\n var eventHandler = this.eventHandler\n eventHandler.awaitAndPrematurelyCall(ops)\n this.os.requestTransaction(function *() {\n // now we can set the right reference.\n var mostRight\n if (mostLeft != null) {\n mostRight = (yield* this.getOperation(mostLeft)).right\n } else {\n mostRight = (yield* this.getOperation(ops[0].parent)).start\n }\n for (var j = 0; j < ops.length; j++) {\n ops[j].right = mostRight\n }\n yield* this.applyCreatedOperations(ops)\n eventHandler.awaitedInserts(ops.length)\n })\n }\n delete (pos, length) {\n if (length == null) { length = 1 }\n if (typeof length !== 'number') {\n throw new Error('length must be a number!')\n }\n if (typeof pos !== 'number') {\n throw new Error('pos must be a number!')\n }\n if (pos + length > this._content.length || pos < 0 || length < 0) {\n throw new Error('The deletion range exceeds the range of the array!')\n }\n if (length === 0) {\n return\n }\n var eventHandler = this.eventHandler\n var newLeft = pos > 0 ? JSON.parse(this._content[pos - 1].id) : null\n var dels = []\n for (var i = 0; i < length; i++) {\n dels.push({\n target: JSON.parse(this._content[pos + i].id),\n struct: 'Delete'\n })\n }\n eventHandler.awaitAndPrematurelyCall(dels)\n this.os.requestTransaction(function *() {\n yield* this.applyCreatedOperations(dels)\n eventHandler.awaitedDeletes(dels.length, newLeft)\n })\n }\n observe (f) {\n this.eventHandler.addEventListener(f)\n }\n unobserve (f) {\n this.eventHandler.removeEventListener(f)\n }\n * _changed (transaction, op) {\n if (!op.deleted) {\n if (op.struct === 'Insert') {\n var l = op.left\n var left\n while (l != null) {\n left = yield* transaction.getOperation(l)\n if (!left.deleted) {\n break\n }\n l = left.left\n }\n op.left = l\n }\n this.eventHandler.receivedOp(op)\n }\n }\n }\n\n Y.extend('Array', new Y.utils.CustomType({\n name: 'Array', // TODO: copy the name when extending the object.. (see one line above)\n class: YArray,\n struct: 'List',\n initType: function * YArrayInitializer (os, model) {\n var _content = yield* Y.Struct.List.map.call(this, model, function (c) {\n return {\n id: JSON.stringify(c.id),\n val: c.content\n }\n })\n return new YArray(os, model.id, _content)\n }\n }))\n}\n\nmodule.exports = extend\nif (typeof Y !== 'undefined') {\n extend(Y)\n}\n"]}