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