├── .gitignore ├── LICENSE ├── README.md ├── client ├── .gitignore ├── .yarn │ └── releases │ │ └── yarn-3.1.1.cjs ├── .yarnrc.yml ├── package.json ├── src │ └── entry.js ├── webpack.config.js └── yarn.lock └── yjs ├── dist └── bundle.js ├── document.go ├── document_test.go ├── go.mod └── go.sum /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 boourns 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # yjsgo 2 | Run yjs from Go via v8 3 | 4 | This is a proof-of-concept go module that can apply changes to y.js documents and generate updates. It is not a port of y.js - it is running y.js inside a v8go context, inside the go application. 5 | 6 | Note that this is designed for server architectures that run persistent goroutines for every active editing session, and there is no locking to protect access of the yjs.Document instance. Or one could use this as an offline document "flattener" that applies a queue of YJS updates from clients to the server's copy of the document. 7 | 8 | I have a pretty limited use-case for this library at this time, however would be interested in contributions that resolve open issues or ideas to improve it. 9 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | dist/ 3 | node_modules/ 4 | .yarn/* 5 | !.yarn/patches 6 | !.yarn/releases 7 | !.yarn/plugins 8 | !.yarn/sdks 9 | !.yarn/versions 10 | .pnp.* 11 | .DS_Store 12 | scratch/ 13 | -------------------------------------------------------------------------------- /client/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-3.1.1.cjs 4 | 5 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yjs-go", 3 | "version": "0.0.1", 4 | "description": "embedded yjs library for running serverside with v8go", 5 | "main": "app.js", 6 | "directories": { 7 | "lib": "lib", 8 | "test": "test" 9 | }, 10 | "dependencies": { 11 | "js-base64": "^3.7.2", 12 | "webpack": "^5.61.0", 13 | "webpack-cli": "^4.3.0", 14 | "y-pojo": "^0.0.8", 15 | "yjs": "^13.5.30" 16 | }, 17 | "devDependencies": { 18 | "expose-loader": "^3.1.0" 19 | }, 20 | "scripts": { 21 | "build": "./node_modules/.bin/webpack", 22 | "watch": "./node_modules/.bin/webpack -w", 23 | "test": "echo \"Error: no test specified\" && exit 1" 24 | }, 25 | "workspaces": [ 26 | "test" 27 | ], 28 | "author": "tom burns", 29 | "license": "MIT", 30 | "packageManager": "yarn@3.1.1" 31 | } 32 | -------------------------------------------------------------------------------- /client/src/entry.js: -------------------------------------------------------------------------------- 1 | import * as Y from 'yjs' 2 | import {syncronize} from 'y-pojo' 3 | import { fromUint8Array, toUint8Array } from 'js-base64' 4 | 5 | var doc 6 | var root 7 | 8 | export const initialize = () => { 9 | doc = new Y.Doc() 10 | if (complex) { 11 | root = doc.getMap("r") 12 | } else { 13 | root = doc.getText("t") 14 | } 15 | 16 | if (!complex && documentText && documentText.length > 0) { 17 | root.insert(0, documentText) 18 | } else if (complex && documentObject !== undefined) { 19 | syncronize(root, JSON.parse(documentObject)) 20 | } 21 | 22 | return "initialized" 23 | } 24 | 25 | export const applyUpdate = () => { 26 | let data = toUint8Array(encodedUpdate) 27 | Y.applyUpdateV2(doc, data) 28 | 29 | return "hello" 30 | } 31 | 32 | export const encodeStateAsUpdate = () => { 33 | let stateVector = undefined 34 | if (encodedStateVector && encodedStateVector.length > 0) { 35 | stateVector = toUint8Array(encodedStateVector) 36 | } 37 | let arr = Y.encodeStateAsUpdateV2(doc, stateVector) 38 | return fromUint8Array(arr) 39 | } 40 | 41 | export const stateVector = () => { 42 | return fromUint8Array(Y.encodeStateVector(doc)) 43 | } 44 | 45 | export const toString = () => { 46 | if (complex) { 47 | return JSON.stringify(root.toJSON()) 48 | } else { 49 | return root.toString() 50 | } 51 | } 52 | 53 | // Server doesn't actually modify the document, these are for testing 54 | 55 | export const insert = () => { 56 | root.insert(insertPosition, insertText) 57 | } -------------------------------------------------------------------------------- /client/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | let entry = { 4 | server: { 5 | import: './src/entry.js', 6 | filename: '../yjs/dist/bundle.js' 7 | } 8 | } 9 | 10 | let outputPath = path.resolve(__dirname, '.') 11 | let target = 'web' 12 | 13 | module.exports = { 14 | entry: entry, 15 | module: { 16 | rules: [ 17 | { 18 | test: /entry\.js?$/, 19 | use: [ 20 | { 21 | loader: "expose-loader", 22 | options: { 23 | exposes: ["entry"], 24 | }, 25 | }, 26 | ], 27 | exclude: /node_modules/, 28 | }, 29 | ], 30 | }, 31 | mode: "production", 32 | resolve: { 33 | extensions: ['.js' ], 34 | fallback: { 35 | "assert": require.resolve("assert") 36 | } 37 | }, 38 | target: target, 39 | output: { 40 | path: outputPath, 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /client/yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 5 6 | cacheKey: 8 7 | 8 | "@discoveryjs/json-ext@npm:^0.5.0": 9 | version: 0.5.7 10 | resolution: "@discoveryjs/json-ext@npm:0.5.7" 11 | checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 12 | languageName: node 13 | linkType: hard 14 | 15 | "@types/eslint-scope@npm:^3.7.3": 16 | version: 3.7.3 17 | resolution: "@types/eslint-scope@npm:3.7.3" 18 | dependencies: 19 | "@types/eslint": "*" 20 | "@types/estree": "*" 21 | checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 22 | languageName: node 23 | linkType: hard 24 | 25 | "@types/eslint@npm:*": 26 | version: 8.4.1 27 | resolution: "@types/eslint@npm:8.4.1" 28 | dependencies: 29 | "@types/estree": "*" 30 | "@types/json-schema": "*" 31 | checksum: b5790997ee9d3820d16350192d41849b0e2448c9e93650acac672ddf502e35c0a5a25547172a9eec840a96687cd94ba1cee672cbd86640f8f4ff1b65960d2ab9 32 | languageName: node 33 | linkType: hard 34 | 35 | "@types/estree@npm:*, @types/estree@npm:^0.0.51": 36 | version: 0.0.51 37 | resolution: "@types/estree@npm:0.0.51" 38 | checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 39 | languageName: node 40 | linkType: hard 41 | 42 | "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8": 43 | version: 7.0.10 44 | resolution: "@types/json-schema@npm:7.0.10" 45 | checksum: 369f12207298e3c8931100ab86c9c60d9217ab930a8ae0b851495f4f30695d3f0eb431eedc8e8d9c69357869899ea0fe6f9d65ddde5ea70415d67ef340dfdd1f 46 | languageName: node 47 | linkType: hard 48 | 49 | "@types/node@npm:*": 50 | version: 17.0.22 51 | resolution: "@types/node@npm:17.0.22" 52 | checksum: 72d1fc8bdc37f0c18b1160e7207b52fb569d0e2b459ac9a4cbd3ca40e478ffe1455efc2c6a253c81e0a7a7c7a899716535d9970cd9521f87d6050b7de04b9ba3 53 | languageName: node 54 | linkType: hard 55 | 56 | "@webassemblyjs/ast@npm:1.11.1": 57 | version: 1.11.1 58 | resolution: "@webassemblyjs/ast@npm:1.11.1" 59 | dependencies: 60 | "@webassemblyjs/helper-numbers": 1.11.1 61 | "@webassemblyjs/helper-wasm-bytecode": 1.11.1 62 | checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 63 | languageName: node 64 | linkType: hard 65 | 66 | "@webassemblyjs/floating-point-hex-parser@npm:1.11.1": 67 | version: 1.11.1 68 | resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" 69 | checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 70 | languageName: node 71 | linkType: hard 72 | 73 | "@webassemblyjs/helper-api-error@npm:1.11.1": 74 | version: 1.11.1 75 | resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" 76 | checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 77 | languageName: node 78 | linkType: hard 79 | 80 | "@webassemblyjs/helper-buffer@npm:1.11.1": 81 | version: 1.11.1 82 | resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" 83 | checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce 84 | languageName: node 85 | linkType: hard 86 | 87 | "@webassemblyjs/helper-numbers@npm:1.11.1": 88 | version: 1.11.1 89 | resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" 90 | dependencies: 91 | "@webassemblyjs/floating-point-hex-parser": 1.11.1 92 | "@webassemblyjs/helper-api-error": 1.11.1 93 | "@xtuc/long": 4.2.2 94 | checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a 95 | languageName: node 96 | linkType: hard 97 | 98 | "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": 99 | version: 1.11.1 100 | resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" 101 | checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 102 | languageName: node 103 | linkType: hard 104 | 105 | "@webassemblyjs/helper-wasm-section@npm:1.11.1": 106 | version: 1.11.1 107 | resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" 108 | dependencies: 109 | "@webassemblyjs/ast": 1.11.1 110 | "@webassemblyjs/helper-buffer": 1.11.1 111 | "@webassemblyjs/helper-wasm-bytecode": 1.11.1 112 | "@webassemblyjs/wasm-gen": 1.11.1 113 | checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf 114 | languageName: node 115 | linkType: hard 116 | 117 | "@webassemblyjs/ieee754@npm:1.11.1": 118 | version: 1.11.1 119 | resolution: "@webassemblyjs/ieee754@npm:1.11.1" 120 | dependencies: 121 | "@xtuc/ieee754": ^1.2.0 122 | checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec 123 | languageName: node 124 | linkType: hard 125 | 126 | "@webassemblyjs/leb128@npm:1.11.1": 127 | version: 1.11.1 128 | resolution: "@webassemblyjs/leb128@npm:1.11.1" 129 | dependencies: 130 | "@xtuc/long": 4.2.2 131 | checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a 132 | languageName: node 133 | linkType: hard 134 | 135 | "@webassemblyjs/utf8@npm:1.11.1": 136 | version: 1.11.1 137 | resolution: "@webassemblyjs/utf8@npm:1.11.1" 138 | checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b 139 | languageName: node 140 | linkType: hard 141 | 142 | "@webassemblyjs/wasm-edit@npm:1.11.1": 143 | version: 1.11.1 144 | resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" 145 | dependencies: 146 | "@webassemblyjs/ast": 1.11.1 147 | "@webassemblyjs/helper-buffer": 1.11.1 148 | "@webassemblyjs/helper-wasm-bytecode": 1.11.1 149 | "@webassemblyjs/helper-wasm-section": 1.11.1 150 | "@webassemblyjs/wasm-gen": 1.11.1 151 | "@webassemblyjs/wasm-opt": 1.11.1 152 | "@webassemblyjs/wasm-parser": 1.11.1 153 | "@webassemblyjs/wast-printer": 1.11.1 154 | checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 155 | languageName: node 156 | linkType: hard 157 | 158 | "@webassemblyjs/wasm-gen@npm:1.11.1": 159 | version: 1.11.1 160 | resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" 161 | dependencies: 162 | "@webassemblyjs/ast": 1.11.1 163 | "@webassemblyjs/helper-wasm-bytecode": 1.11.1 164 | "@webassemblyjs/ieee754": 1.11.1 165 | "@webassemblyjs/leb128": 1.11.1 166 | "@webassemblyjs/utf8": 1.11.1 167 | checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b 168 | languageName: node 169 | linkType: hard 170 | 171 | "@webassemblyjs/wasm-opt@npm:1.11.1": 172 | version: 1.11.1 173 | resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" 174 | dependencies: 175 | "@webassemblyjs/ast": 1.11.1 176 | "@webassemblyjs/helper-buffer": 1.11.1 177 | "@webassemblyjs/wasm-gen": 1.11.1 178 | "@webassemblyjs/wasm-parser": 1.11.1 179 | checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db 180 | languageName: node 181 | linkType: hard 182 | 183 | "@webassemblyjs/wasm-parser@npm:1.11.1": 184 | version: 1.11.1 185 | resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" 186 | dependencies: 187 | "@webassemblyjs/ast": 1.11.1 188 | "@webassemblyjs/helper-api-error": 1.11.1 189 | "@webassemblyjs/helper-wasm-bytecode": 1.11.1 190 | "@webassemblyjs/ieee754": 1.11.1 191 | "@webassemblyjs/leb128": 1.11.1 192 | "@webassemblyjs/utf8": 1.11.1 193 | checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 194 | languageName: node 195 | linkType: hard 196 | 197 | "@webassemblyjs/wast-printer@npm:1.11.1": 198 | version: 1.11.1 199 | resolution: "@webassemblyjs/wast-printer@npm:1.11.1" 200 | dependencies: 201 | "@webassemblyjs/ast": 1.11.1 202 | "@xtuc/long": 4.2.2 203 | checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 204 | languageName: node 205 | linkType: hard 206 | 207 | "@webpack-cli/configtest@npm:^1.1.1": 208 | version: 1.1.1 209 | resolution: "@webpack-cli/configtest@npm:1.1.1" 210 | peerDependencies: 211 | webpack: 4.x.x || 5.x.x 212 | webpack-cli: 4.x.x 213 | checksum: c4e7fca21315e487655fbdc7d079092c3f88b274a720d245ca2e13dce7553009fb3f9d82218c33f5c9b208832d72bb4114a9cca97d53b66212eff5da1d3ad44b 214 | languageName: node 215 | linkType: hard 216 | 217 | "@webpack-cli/info@npm:^1.4.1": 218 | version: 1.4.1 219 | resolution: "@webpack-cli/info@npm:1.4.1" 220 | dependencies: 221 | envinfo: ^7.7.3 222 | peerDependencies: 223 | webpack-cli: 4.x.x 224 | checksum: 7a7cac2ba4f2528caa329311599da1685b1bc099bfc5b7210932b7c86024c1277fd7857b08557902b187ea01247a8e8f72f7f5719af72b0c8d97f22087aa0c14 225 | languageName: node 226 | linkType: hard 227 | 228 | "@webpack-cli/serve@npm:^1.6.1": 229 | version: 1.6.1 230 | resolution: "@webpack-cli/serve@npm:1.6.1" 231 | peerDependencies: 232 | webpack-cli: 4.x.x 233 | peerDependenciesMeta: 234 | webpack-dev-server: 235 | optional: true 236 | checksum: 8b273f906aeffa60c7d5700ae25f98d4b66b7e922cad38acb9575d55ff83872cd20b9894aacfa81c4d54e5b51b16253ae0e70c5e9e0608dc8768276e15c74536 237 | languageName: node 238 | linkType: hard 239 | 240 | "@xtuc/ieee754@npm:^1.2.0": 241 | version: 1.2.0 242 | resolution: "@xtuc/ieee754@npm:1.2.0" 243 | checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a 244 | languageName: node 245 | linkType: hard 246 | 247 | "@xtuc/long@npm:4.2.2": 248 | version: 4.2.2 249 | resolution: "@xtuc/long@npm:4.2.2" 250 | checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec 251 | languageName: node 252 | linkType: hard 253 | 254 | "acorn-import-assertions@npm:^1.7.6": 255 | version: 1.8.0 256 | resolution: "acorn-import-assertions@npm:1.8.0" 257 | peerDependencies: 258 | acorn: ^8 259 | checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 260 | languageName: node 261 | linkType: hard 262 | 263 | "acorn@npm:^8.4.1, acorn@npm:^8.5.0": 264 | version: 8.7.0 265 | resolution: "acorn@npm:8.7.0" 266 | bin: 267 | acorn: bin/acorn 268 | checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0 269 | languageName: node 270 | linkType: hard 271 | 272 | "ajv-keywords@npm:^3.5.2": 273 | version: 3.5.2 274 | resolution: "ajv-keywords@npm:3.5.2" 275 | peerDependencies: 276 | ajv: ^6.9.1 277 | checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 278 | languageName: node 279 | linkType: hard 280 | 281 | "ajv@npm:^6.12.5": 282 | version: 6.12.6 283 | resolution: "ajv@npm:6.12.6" 284 | dependencies: 285 | fast-deep-equal: ^3.1.1 286 | fast-json-stable-stringify: ^2.0.0 287 | json-schema-traverse: ^0.4.1 288 | uri-js: ^4.2.2 289 | checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 290 | languageName: node 291 | linkType: hard 292 | 293 | "browserslist@npm:^4.14.5": 294 | version: 4.20.2 295 | resolution: "browserslist@npm:4.20.2" 296 | dependencies: 297 | caniuse-lite: ^1.0.30001317 298 | electron-to-chromium: ^1.4.84 299 | escalade: ^3.1.1 300 | node-releases: ^2.0.2 301 | picocolors: ^1.0.0 302 | bin: 303 | browserslist: cli.js 304 | checksum: 18e09beeae32e69fea45fc3642240fb63027b1460d90e24da86377177dca3d82c80f8fa44469d95109e3962f08eb2a23e03037bd5e1f1ec38e4866e2a8572435 305 | languageName: node 306 | linkType: hard 307 | 308 | "buffer-from@npm:^1.0.0": 309 | version: 1.1.2 310 | resolution: "buffer-from@npm:1.1.2" 311 | checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb 312 | languageName: node 313 | linkType: hard 314 | 315 | "caniuse-lite@npm:^1.0.30001317": 316 | version: 1.0.30001319 317 | resolution: "caniuse-lite@npm:1.0.30001319" 318 | checksum: 1c03cc4ca019c410d197b76604cd8605077ef124906f3debd3f026568e01a1aa3888cdfcb0d23c0786115b0b3f790486f2aa8e0cce361d3dcc5c92ff3611f73e 319 | languageName: node 320 | linkType: hard 321 | 322 | "chrome-trace-event@npm:^1.0.2": 323 | version: 1.0.3 324 | resolution: "chrome-trace-event@npm:1.0.3" 325 | checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 326 | languageName: node 327 | linkType: hard 328 | 329 | "clone-deep@npm:^4.0.1": 330 | version: 4.0.1 331 | resolution: "clone-deep@npm:4.0.1" 332 | dependencies: 333 | is-plain-object: ^2.0.4 334 | kind-of: ^6.0.2 335 | shallow-clone: ^3.0.0 336 | checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 337 | languageName: node 338 | linkType: hard 339 | 340 | "colorette@npm:^2.0.14": 341 | version: 2.0.16 342 | resolution: "colorette@npm:2.0.16" 343 | checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 344 | languageName: node 345 | linkType: hard 346 | 347 | "commander@npm:^2.20.0": 348 | version: 2.20.3 349 | resolution: "commander@npm:2.20.3" 350 | checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e 351 | languageName: node 352 | linkType: hard 353 | 354 | "commander@npm:^7.0.0": 355 | version: 7.2.0 356 | resolution: "commander@npm:7.2.0" 357 | checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc 358 | languageName: node 359 | linkType: hard 360 | 361 | "cross-spawn@npm:^7.0.3": 362 | version: 7.0.3 363 | resolution: "cross-spawn@npm:7.0.3" 364 | dependencies: 365 | path-key: ^3.1.0 366 | shebang-command: ^2.0.0 367 | which: ^2.0.1 368 | checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 369 | languageName: node 370 | linkType: hard 371 | 372 | "electron-to-chromium@npm:^1.4.84": 373 | version: 1.4.89 374 | resolution: "electron-to-chromium@npm:1.4.89" 375 | checksum: a67cf1c90a895e5cef27683f623a456348a7359a0e0f61b6d04378e7a07bfce71bcd39072de68ac7b718354a4bb43b0dfeb5d6087e51018fc86895abe3eaba79 376 | languageName: node 377 | linkType: hard 378 | 379 | "enhanced-resolve@npm:^5.9.2": 380 | version: 5.9.2 381 | resolution: "enhanced-resolve@npm:5.9.2" 382 | dependencies: 383 | graceful-fs: ^4.2.4 384 | tapable: ^2.2.0 385 | checksum: 792b7a01abb4ee4433b658c71f92d5948675938e0c03cad1732abe843b87395f15cb880ace4f819f78ead94163278283afc79b8be63c0eddca8ab45f7d8c515d 386 | languageName: node 387 | linkType: hard 388 | 389 | "envinfo@npm:^7.7.3": 390 | version: 7.8.1 391 | resolution: "envinfo@npm:7.8.1" 392 | bin: 393 | envinfo: dist/cli.js 394 | checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 395 | languageName: node 396 | linkType: hard 397 | 398 | "es-module-lexer@npm:^0.9.0": 399 | version: 0.9.3 400 | resolution: "es-module-lexer@npm:0.9.3" 401 | checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 402 | languageName: node 403 | linkType: hard 404 | 405 | "escalade@npm:^3.1.1": 406 | version: 3.1.1 407 | resolution: "escalade@npm:3.1.1" 408 | checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 409 | languageName: node 410 | linkType: hard 411 | 412 | "eslint-scope@npm:5.1.1": 413 | version: 5.1.1 414 | resolution: "eslint-scope@npm:5.1.1" 415 | dependencies: 416 | esrecurse: ^4.3.0 417 | estraverse: ^4.1.1 418 | checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb 419 | languageName: node 420 | linkType: hard 421 | 422 | "esrecurse@npm:^4.3.0": 423 | version: 4.3.0 424 | resolution: "esrecurse@npm:4.3.0" 425 | dependencies: 426 | estraverse: ^5.2.0 427 | checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 428 | languageName: node 429 | linkType: hard 430 | 431 | "estraverse@npm:^4.1.1": 432 | version: 4.3.0 433 | resolution: "estraverse@npm:4.3.0" 434 | checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 435 | languageName: node 436 | linkType: hard 437 | 438 | "estraverse@npm:^5.2.0": 439 | version: 5.3.0 440 | resolution: "estraverse@npm:5.3.0" 441 | checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b 442 | languageName: node 443 | linkType: hard 444 | 445 | "events@npm:^3.2.0": 446 | version: 3.3.0 447 | resolution: "events@npm:3.3.0" 448 | checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 449 | languageName: node 450 | linkType: hard 451 | 452 | "execa@npm:^5.0.0": 453 | version: 5.1.1 454 | resolution: "execa@npm:5.1.1" 455 | dependencies: 456 | cross-spawn: ^7.0.3 457 | get-stream: ^6.0.0 458 | human-signals: ^2.1.0 459 | is-stream: ^2.0.0 460 | merge-stream: ^2.0.0 461 | npm-run-path: ^4.0.1 462 | onetime: ^5.1.2 463 | signal-exit: ^3.0.3 464 | strip-final-newline: ^2.0.0 465 | checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 466 | languageName: node 467 | linkType: hard 468 | 469 | "expose-loader@npm:^3.1.0": 470 | version: 3.1.0 471 | resolution: "expose-loader@npm:3.1.0" 472 | peerDependencies: 473 | webpack: ^5.0.0 474 | checksum: c9bc3c220f9f5e46f7897a8a884fbe3b494b7e2a7fca454dc4642ad73664367c2501dfdf8476477a1ee3fd6c32d18aae1187e428c03f310de2f465eb4157d33c 475 | languageName: node 476 | linkType: hard 477 | 478 | "fast-deep-equal@npm:^3.1.1": 479 | version: 3.1.3 480 | resolution: "fast-deep-equal@npm:3.1.3" 481 | checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d 482 | languageName: node 483 | linkType: hard 484 | 485 | "fast-json-stable-stringify@npm:^2.0.0": 486 | version: 2.1.0 487 | resolution: "fast-json-stable-stringify@npm:2.1.0" 488 | checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb 489 | languageName: node 490 | linkType: hard 491 | 492 | "fastest-levenshtein@npm:^1.0.12": 493 | version: 1.0.12 494 | resolution: "fastest-levenshtein@npm:1.0.12" 495 | checksum: e1a013698dd1d302c7a78150130c7d50bb678c2c2f8839842a796d66cc7cdf50ea6b3d7ca930b0c8e7e8c2cd84fea8ab831023b382f7aab6922c318c1451beab 496 | languageName: node 497 | linkType: hard 498 | 499 | "find-up@npm:^4.0.0": 500 | version: 4.1.0 501 | resolution: "find-up@npm:4.1.0" 502 | dependencies: 503 | locate-path: ^5.0.0 504 | path-exists: ^4.0.0 505 | checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 506 | languageName: node 507 | linkType: hard 508 | 509 | "function-bind@npm:^1.1.1": 510 | version: 1.1.1 511 | resolution: "function-bind@npm:1.1.1" 512 | checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a 513 | languageName: node 514 | linkType: hard 515 | 516 | "get-stream@npm:^6.0.0": 517 | version: 6.0.1 518 | resolution: "get-stream@npm:6.0.1" 519 | checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad 520 | languageName: node 521 | linkType: hard 522 | 523 | "glob-to-regexp@npm:^0.4.1": 524 | version: 0.4.1 525 | resolution: "glob-to-regexp@npm:0.4.1" 526 | checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 527 | languageName: node 528 | linkType: hard 529 | 530 | "graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": 531 | version: 4.2.9 532 | resolution: "graceful-fs@npm:4.2.9" 533 | checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 534 | languageName: node 535 | linkType: hard 536 | 537 | "has-flag@npm:^4.0.0": 538 | version: 4.0.0 539 | resolution: "has-flag@npm:4.0.0" 540 | checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad 541 | languageName: node 542 | linkType: hard 543 | 544 | "has@npm:^1.0.3": 545 | version: 1.0.3 546 | resolution: "has@npm:1.0.3" 547 | dependencies: 548 | function-bind: ^1.1.1 549 | checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 550 | languageName: node 551 | linkType: hard 552 | 553 | "human-signals@npm:^2.1.0": 554 | version: 2.1.0 555 | resolution: "human-signals@npm:2.1.0" 556 | checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 557 | languageName: node 558 | linkType: hard 559 | 560 | "import-local@npm:^3.0.2": 561 | version: 3.1.0 562 | resolution: "import-local@npm:3.1.0" 563 | dependencies: 564 | pkg-dir: ^4.2.0 565 | resolve-cwd: ^3.0.0 566 | bin: 567 | import-local-fixture: fixtures/cli.js 568 | checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd 569 | languageName: node 570 | linkType: hard 571 | 572 | "interpret@npm:^2.2.0": 573 | version: 2.2.0 574 | resolution: "interpret@npm:2.2.0" 575 | checksum: f51efef7cb8d02da16408ffa3504cd6053014c5aeb7bb8c223727e053e4235bf565e45d67028b0c8740d917c603807aa3c27d7bd2f21bf20b6417e2bb3e5fd6e 576 | languageName: node 577 | linkType: hard 578 | 579 | "is-core-module@npm:^2.8.1": 580 | version: 2.8.1 581 | resolution: "is-core-module@npm:2.8.1" 582 | dependencies: 583 | has: ^1.0.3 584 | checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f 585 | languageName: node 586 | linkType: hard 587 | 588 | "is-plain-object@npm:^2.0.4": 589 | version: 2.0.4 590 | resolution: "is-plain-object@npm:2.0.4" 591 | dependencies: 592 | isobject: ^3.0.1 593 | checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca 594 | languageName: node 595 | linkType: hard 596 | 597 | "is-stream@npm:^2.0.0": 598 | version: 2.0.1 599 | resolution: "is-stream@npm:2.0.1" 600 | checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 601 | languageName: node 602 | linkType: hard 603 | 604 | "isexe@npm:^2.0.0": 605 | version: 2.0.0 606 | resolution: "isexe@npm:2.0.0" 607 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 608 | languageName: node 609 | linkType: hard 610 | 611 | "isobject@npm:^3.0.1": 612 | version: 3.0.1 613 | resolution: "isobject@npm:3.0.1" 614 | checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 615 | languageName: node 616 | linkType: hard 617 | 618 | "isomorphic.js@npm:^0.2.4": 619 | version: 0.2.4 620 | resolution: "isomorphic.js@npm:0.2.4" 621 | checksum: 7adb91495de1ff0af9a524cb7ffccde7984ea7c547f3b9fe387b51a2be6c3f607a086d253224a985cf55a28e41d57f5cb22e285543e95ab97e7ba36783f2cd81 622 | languageName: node 623 | linkType: hard 624 | 625 | "jest-worker@npm:^27.4.5": 626 | version: 27.5.1 627 | resolution: "jest-worker@npm:27.5.1" 628 | dependencies: 629 | "@types/node": "*" 630 | merge-stream: ^2.0.0 631 | supports-color: ^8.0.0 632 | checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 633 | languageName: node 634 | linkType: hard 635 | 636 | "js-base64@npm:^3.7.2": 637 | version: 3.7.2 638 | resolution: "js-base64@npm:3.7.2" 639 | checksum: 573f28e9a27c3df60096d4d3f551bcb4fcb6d49161cf83396e9bad9b76f94736a70bb70b8808fe834dff2a388f76604ba09d6e153bbf181646e407720139fa5b 640 | languageName: node 641 | linkType: hard 642 | 643 | "json-parse-better-errors@npm:^1.0.2": 644 | version: 1.0.2 645 | resolution: "json-parse-better-errors@npm:1.0.2" 646 | checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d 647 | languageName: node 648 | linkType: hard 649 | 650 | "json-schema-traverse@npm:^0.4.1": 651 | version: 0.4.1 652 | resolution: "json-schema-traverse@npm:0.4.1" 653 | checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b 654 | languageName: node 655 | linkType: hard 656 | 657 | "kind-of@npm:^6.0.2": 658 | version: 6.0.3 659 | resolution: "kind-of@npm:6.0.3" 660 | checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b 661 | languageName: node 662 | linkType: hard 663 | 664 | "lib0@npm:^0.2.47": 665 | version: 0.2.47 666 | resolution: "lib0@npm:0.2.47" 667 | dependencies: 668 | isomorphic.js: ^0.2.4 669 | checksum: 0d0a0126716345d24421d5899070a32d552c375bc82acc9cf69b382f892f44329ef5bd042dcf3131dae2676a7e0bb179c43a80202722c744b1a9e0beeb58b5d5 670 | languageName: node 671 | linkType: hard 672 | 673 | "loader-runner@npm:^4.2.0": 674 | version: 4.2.0 675 | resolution: "loader-runner@npm:4.2.0" 676 | checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a 677 | languageName: node 678 | linkType: hard 679 | 680 | "locate-path@npm:^5.0.0": 681 | version: 5.0.0 682 | resolution: "locate-path@npm:5.0.0" 683 | dependencies: 684 | p-locate: ^4.1.0 685 | checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 686 | languageName: node 687 | linkType: hard 688 | 689 | "merge-stream@npm:^2.0.0": 690 | version: 2.0.0 691 | resolution: "merge-stream@npm:2.0.0" 692 | checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 693 | languageName: node 694 | linkType: hard 695 | 696 | "mime-db@npm:1.52.0": 697 | version: 1.52.0 698 | resolution: "mime-db@npm:1.52.0" 699 | checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f 700 | languageName: node 701 | linkType: hard 702 | 703 | "mime-types@npm:^2.1.27": 704 | version: 2.1.35 705 | resolution: "mime-types@npm:2.1.35" 706 | dependencies: 707 | mime-db: 1.52.0 708 | checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 709 | languageName: node 710 | linkType: hard 711 | 712 | "mimic-fn@npm:^2.1.0": 713 | version: 2.1.0 714 | resolution: "mimic-fn@npm:2.1.0" 715 | checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a 716 | languageName: node 717 | linkType: hard 718 | 719 | "neo-async@npm:^2.6.2": 720 | version: 2.6.2 721 | resolution: "neo-async@npm:2.6.2" 722 | checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 723 | languageName: node 724 | linkType: hard 725 | 726 | "node-releases@npm:^2.0.2": 727 | version: 2.0.2 728 | resolution: "node-releases@npm:2.0.2" 729 | checksum: da858bf86b4d512842379749f5a5e4196ddab05ba18ffcf29f05bf460beceaca927f070f4430bb5046efec18941ddbc85e4c5fdbb83afc28a38dd6069a2f255e 730 | languageName: node 731 | linkType: hard 732 | 733 | "npm-run-path@npm:^4.0.1": 734 | version: 4.0.1 735 | resolution: "npm-run-path@npm:4.0.1" 736 | dependencies: 737 | path-key: ^3.0.0 738 | checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 739 | languageName: node 740 | linkType: hard 741 | 742 | "onetime@npm:^5.1.2": 743 | version: 5.1.2 744 | resolution: "onetime@npm:5.1.2" 745 | dependencies: 746 | mimic-fn: ^2.1.0 747 | checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 748 | languageName: node 749 | linkType: hard 750 | 751 | "p-limit@npm:^2.2.0": 752 | version: 2.3.0 753 | resolution: "p-limit@npm:2.3.0" 754 | dependencies: 755 | p-try: ^2.0.0 756 | checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 757 | languageName: node 758 | linkType: hard 759 | 760 | "p-locate@npm:^4.1.0": 761 | version: 4.1.0 762 | resolution: "p-locate@npm:4.1.0" 763 | dependencies: 764 | p-limit: ^2.2.0 765 | checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 766 | languageName: node 767 | linkType: hard 768 | 769 | "p-try@npm:^2.0.0": 770 | version: 2.2.0 771 | resolution: "p-try@npm:2.2.0" 772 | checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae 773 | languageName: node 774 | linkType: hard 775 | 776 | "path-exists@npm:^4.0.0": 777 | version: 4.0.0 778 | resolution: "path-exists@npm:4.0.0" 779 | checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 780 | languageName: node 781 | linkType: hard 782 | 783 | "path-key@npm:^3.0.0, path-key@npm:^3.1.0": 784 | version: 3.1.1 785 | resolution: "path-key@npm:3.1.1" 786 | checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 787 | languageName: node 788 | linkType: hard 789 | 790 | "path-parse@npm:^1.0.7": 791 | version: 1.0.7 792 | resolution: "path-parse@npm:1.0.7" 793 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a 794 | languageName: node 795 | linkType: hard 796 | 797 | "picocolors@npm:^1.0.0": 798 | version: 1.0.0 799 | resolution: "picocolors@npm:1.0.0" 800 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 801 | languageName: node 802 | linkType: hard 803 | 804 | "pkg-dir@npm:^4.2.0": 805 | version: 4.2.0 806 | resolution: "pkg-dir@npm:4.2.0" 807 | dependencies: 808 | find-up: ^4.0.0 809 | checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 810 | languageName: node 811 | linkType: hard 812 | 813 | "punycode@npm:^2.1.0": 814 | version: 2.1.1 815 | resolution: "punycode@npm:2.1.1" 816 | checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 817 | languageName: node 818 | linkType: hard 819 | 820 | "randombytes@npm:^2.1.0": 821 | version: 2.1.0 822 | resolution: "randombytes@npm:2.1.0" 823 | dependencies: 824 | safe-buffer: ^5.1.0 825 | checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 826 | languageName: node 827 | linkType: hard 828 | 829 | "rechoir@npm:^0.7.0": 830 | version: 0.7.1 831 | resolution: "rechoir@npm:0.7.1" 832 | dependencies: 833 | resolve: ^1.9.0 834 | checksum: 2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a 835 | languageName: node 836 | linkType: hard 837 | 838 | "resolve-cwd@npm:^3.0.0": 839 | version: 3.0.0 840 | resolution: "resolve-cwd@npm:3.0.0" 841 | dependencies: 842 | resolve-from: ^5.0.0 843 | checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 844 | languageName: node 845 | linkType: hard 846 | 847 | "resolve-from@npm:^5.0.0": 848 | version: 5.0.0 849 | resolution: "resolve-from@npm:5.0.0" 850 | checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf 851 | languageName: node 852 | linkType: hard 853 | 854 | "resolve@npm:^1.9.0": 855 | version: 1.22.0 856 | resolution: "resolve@npm:1.22.0" 857 | dependencies: 858 | is-core-module: ^2.8.1 859 | path-parse: ^1.0.7 860 | supports-preserve-symlinks-flag: ^1.0.0 861 | bin: 862 | resolve: bin/resolve 863 | checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e 864 | languageName: node 865 | linkType: hard 866 | 867 | "resolve@patch:resolve@^1.9.0#~builtin": 868 | version: 1.22.0 869 | resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b" 870 | dependencies: 871 | is-core-module: ^2.8.1 872 | path-parse: ^1.0.7 873 | supports-preserve-symlinks-flag: ^1.0.0 874 | bin: 875 | resolve: bin/resolve 876 | checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7 877 | languageName: node 878 | linkType: hard 879 | 880 | "safe-buffer@npm:^5.1.0": 881 | version: 5.2.1 882 | resolution: "safe-buffer@npm:5.2.1" 883 | checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 884 | languageName: node 885 | linkType: hard 886 | 887 | "schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": 888 | version: 3.1.1 889 | resolution: "schema-utils@npm:3.1.1" 890 | dependencies: 891 | "@types/json-schema": ^7.0.8 892 | ajv: ^6.12.5 893 | ajv-keywords: ^3.5.2 894 | checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce 895 | languageName: node 896 | linkType: hard 897 | 898 | "serialize-javascript@npm:^6.0.0": 899 | version: 6.0.0 900 | resolution: "serialize-javascript@npm:6.0.0" 901 | dependencies: 902 | randombytes: ^2.1.0 903 | checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 904 | languageName: node 905 | linkType: hard 906 | 907 | "shallow-clone@npm:^3.0.0": 908 | version: 3.0.1 909 | resolution: "shallow-clone@npm:3.0.1" 910 | dependencies: 911 | kind-of: ^6.0.2 912 | checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 913 | languageName: node 914 | linkType: hard 915 | 916 | "shebang-command@npm:^2.0.0": 917 | version: 2.0.0 918 | resolution: "shebang-command@npm:2.0.0" 919 | dependencies: 920 | shebang-regex: ^3.0.0 921 | checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa 922 | languageName: node 923 | linkType: hard 924 | 925 | "shebang-regex@npm:^3.0.0": 926 | version: 3.0.0 927 | resolution: "shebang-regex@npm:3.0.0" 928 | checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 929 | languageName: node 930 | linkType: hard 931 | 932 | "signal-exit@npm:^3.0.3": 933 | version: 3.0.7 934 | resolution: "signal-exit@npm:3.0.7" 935 | checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 936 | languageName: node 937 | linkType: hard 938 | 939 | "source-map-support@npm:~0.5.20": 940 | version: 0.5.21 941 | resolution: "source-map-support@npm:0.5.21" 942 | dependencies: 943 | buffer-from: ^1.0.0 944 | source-map: ^0.6.0 945 | checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 946 | languageName: node 947 | linkType: hard 948 | 949 | "source-map@npm:^0.6.0, source-map@npm:^0.6.1": 950 | version: 0.6.1 951 | resolution: "source-map@npm:0.6.1" 952 | checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 953 | languageName: node 954 | linkType: hard 955 | 956 | "source-map@npm:~0.7.2": 957 | version: 0.7.3 958 | resolution: "source-map@npm:0.7.3" 959 | checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea 960 | languageName: node 961 | linkType: hard 962 | 963 | "strip-final-newline@npm:^2.0.0": 964 | version: 2.0.0 965 | resolution: "strip-final-newline@npm:2.0.0" 966 | checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 967 | languageName: node 968 | linkType: hard 969 | 970 | "supports-color@npm:^8.0.0": 971 | version: 8.1.1 972 | resolution: "supports-color@npm:8.1.1" 973 | dependencies: 974 | has-flag: ^4.0.0 975 | checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 976 | languageName: node 977 | linkType: hard 978 | 979 | "supports-preserve-symlinks-flag@npm:^1.0.0": 980 | version: 1.0.0 981 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 982 | checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae 983 | languageName: node 984 | linkType: hard 985 | 986 | "tapable@npm:^2.1.1, tapable@npm:^2.2.0": 987 | version: 2.2.1 988 | resolution: "tapable@npm:2.2.1" 989 | checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 990 | languageName: node 991 | linkType: hard 992 | 993 | "terser-webpack-plugin@npm:^5.1.3": 994 | version: 5.3.1 995 | resolution: "terser-webpack-plugin@npm:5.3.1" 996 | dependencies: 997 | jest-worker: ^27.4.5 998 | schema-utils: ^3.1.1 999 | serialize-javascript: ^6.0.0 1000 | source-map: ^0.6.1 1001 | terser: ^5.7.2 1002 | peerDependencies: 1003 | webpack: ^5.1.0 1004 | peerDependenciesMeta: 1005 | "@swc/core": 1006 | optional: true 1007 | esbuild: 1008 | optional: true 1009 | uglify-js: 1010 | optional: true 1011 | checksum: 1b808fd4f58ce0b532baacc50b9a850fc69ce0077a0e9e5076d4156c52fab3d40b02d5d9148a3eba64630cf7f40057de54f6a5a87fac1849b1f11d6bfdb42072 1012 | languageName: node 1013 | linkType: hard 1014 | 1015 | "terser@npm:^5.7.2": 1016 | version: 5.12.1 1017 | resolution: "terser@npm:5.12.1" 1018 | dependencies: 1019 | acorn: ^8.5.0 1020 | commander: ^2.20.0 1021 | source-map: ~0.7.2 1022 | source-map-support: ~0.5.20 1023 | bin: 1024 | terser: bin/terser 1025 | checksum: dd33af5d87a1159bcc38f354707505f1449a33d1491c512e9536f11fea7c3474cdc40e2e5fdf75f58658cfaab8ef47cb7454acd6406b2ce487675cb1978c6275 1026 | languageName: node 1027 | linkType: hard 1028 | 1029 | "uri-js@npm:^4.2.2": 1030 | version: 4.4.1 1031 | resolution: "uri-js@npm:4.4.1" 1032 | dependencies: 1033 | punycode: ^2.1.0 1034 | checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 1035 | languageName: node 1036 | linkType: hard 1037 | 1038 | "watchpack@npm:^2.3.1": 1039 | version: 2.3.1 1040 | resolution: "watchpack@npm:2.3.1" 1041 | dependencies: 1042 | glob-to-regexp: ^0.4.1 1043 | graceful-fs: ^4.1.2 1044 | checksum: 70a34f92842d94b5d842980f866d568d7a467de667c96ae5759c759f46587e49265863171f4650bdbafc5f3870a28f2b4453e9e847098ec4b718b38926d47d22 1045 | languageName: node 1046 | linkType: hard 1047 | 1048 | "webpack-cli@npm:^4.3.0": 1049 | version: 4.9.2 1050 | resolution: "webpack-cli@npm:4.9.2" 1051 | dependencies: 1052 | "@discoveryjs/json-ext": ^0.5.0 1053 | "@webpack-cli/configtest": ^1.1.1 1054 | "@webpack-cli/info": ^1.4.1 1055 | "@webpack-cli/serve": ^1.6.1 1056 | colorette: ^2.0.14 1057 | commander: ^7.0.0 1058 | execa: ^5.0.0 1059 | fastest-levenshtein: ^1.0.12 1060 | import-local: ^3.0.2 1061 | interpret: ^2.2.0 1062 | rechoir: ^0.7.0 1063 | webpack-merge: ^5.7.3 1064 | peerDependencies: 1065 | webpack: 4.x.x || 5.x.x 1066 | peerDependenciesMeta: 1067 | "@webpack-cli/generators": 1068 | optional: true 1069 | "@webpack-cli/migrate": 1070 | optional: true 1071 | webpack-bundle-analyzer: 1072 | optional: true 1073 | webpack-dev-server: 1074 | optional: true 1075 | bin: 1076 | webpack-cli: bin/cli.js 1077 | checksum: ffb4c5d53ab65ce9f1e8efd34fca4cb858ec6afc91ece0d9375094edff2e7615708c8a586991057fd9cc8d37aab0eb0511913b178daac534e51bcf7d3583e61c 1078 | languageName: node 1079 | linkType: hard 1080 | 1081 | "webpack-merge@npm:^5.7.3": 1082 | version: 5.8.0 1083 | resolution: "webpack-merge@npm:5.8.0" 1084 | dependencies: 1085 | clone-deep: ^4.0.1 1086 | wildcard: ^2.0.0 1087 | checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 1088 | languageName: node 1089 | linkType: hard 1090 | 1091 | "webpack-sources@npm:^3.2.3": 1092 | version: 3.2.3 1093 | resolution: "webpack-sources@npm:3.2.3" 1094 | checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 1095 | languageName: node 1096 | linkType: hard 1097 | 1098 | "webpack@npm:^5.61.0": 1099 | version: 5.70.0 1100 | resolution: "webpack@npm:5.70.0" 1101 | dependencies: 1102 | "@types/eslint-scope": ^3.7.3 1103 | "@types/estree": ^0.0.51 1104 | "@webassemblyjs/ast": 1.11.1 1105 | "@webassemblyjs/wasm-edit": 1.11.1 1106 | "@webassemblyjs/wasm-parser": 1.11.1 1107 | acorn: ^8.4.1 1108 | acorn-import-assertions: ^1.7.6 1109 | browserslist: ^4.14.5 1110 | chrome-trace-event: ^1.0.2 1111 | enhanced-resolve: ^5.9.2 1112 | es-module-lexer: ^0.9.0 1113 | eslint-scope: 5.1.1 1114 | events: ^3.2.0 1115 | glob-to-regexp: ^0.4.1 1116 | graceful-fs: ^4.2.9 1117 | json-parse-better-errors: ^1.0.2 1118 | loader-runner: ^4.2.0 1119 | mime-types: ^2.1.27 1120 | neo-async: ^2.6.2 1121 | schema-utils: ^3.1.0 1122 | tapable: ^2.1.1 1123 | terser-webpack-plugin: ^5.1.3 1124 | watchpack: ^2.3.1 1125 | webpack-sources: ^3.2.3 1126 | peerDependenciesMeta: 1127 | webpack-cli: 1128 | optional: true 1129 | bin: 1130 | webpack: bin/webpack.js 1131 | checksum: 00439884a9cdd5305aed3ce93735635785a15c5464a6d2cfce87e17727a07585de02420913e82aa85ddd2ae7322175d2cfda6ac0878a17f061cb605e6a7db57a 1132 | languageName: node 1133 | linkType: hard 1134 | 1135 | "which@npm:^2.0.1": 1136 | version: 2.0.2 1137 | resolution: "which@npm:2.0.2" 1138 | dependencies: 1139 | isexe: ^2.0.0 1140 | bin: 1141 | node-which: ./bin/node-which 1142 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 1143 | languageName: node 1144 | linkType: hard 1145 | 1146 | "wildcard@npm:^2.0.0": 1147 | version: 2.0.0 1148 | resolution: "wildcard@npm:2.0.0" 1149 | checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad 1150 | languageName: node 1151 | linkType: hard 1152 | 1153 | "y-pojo@npm:^0.0.8": 1154 | version: 0.0.8 1155 | resolution: "y-pojo@npm:0.0.8" 1156 | peerDependencies: 1157 | yjs: ^13.5.38 1158 | checksum: d0f588fe2818560e6a01290a52759fea1a9cd0b575e258d3012189597c26e08018d6a2bfe0247ca1400d081181619944ef39c5b45a8d7ffa9077aa91dbf07519 1159 | languageName: node 1160 | linkType: hard 1161 | 1162 | "yjs-go@workspace:.": 1163 | version: 0.0.0-use.local 1164 | resolution: "yjs-go@workspace:." 1165 | dependencies: 1166 | expose-loader: ^3.1.0 1167 | js-base64: ^3.7.2 1168 | webpack: ^5.61.0 1169 | webpack-cli: ^4.3.0 1170 | y-pojo: ^0.0.8 1171 | yjs: ^13.5.30 1172 | languageName: unknown 1173 | linkType: soft 1174 | 1175 | "yjs@npm:^13.5.30": 1176 | version: 13.5.30 1177 | resolution: "yjs@npm:13.5.30" 1178 | dependencies: 1179 | lib0: ^0.2.47 1180 | checksum: c606ec77c4c6958215f0f412f3447d7531d8da5aa16629db464c4f38727b2027c6b424265c9a43cac8a6c7dfcdce660ac486b272cef661c1c95e5d07f8639051 1181 | languageName: node 1182 | linkType: hard 1183 | -------------------------------------------------------------------------------- /yjs/dist/bundle.js: -------------------------------------------------------------------------------- 1 | (()=>{var t={254:(t,e,r)=>{var n=r(370),s=r(672);void 0===s.entry&&(s.entry=n),t.exports=n},672:(t,e,r)=>{"use strict";t.exports=function(){if("object"==typeof globalThis)return globalThis;var t;try{t=this||new Function("return this")()}catch(t){if("object"==typeof window)return window;if("object"==typeof self)return self;if(void 0!==r.g)return r.g}return t}()},370:(t,e,r)=>{"use strict";r.r(e),r.d(e,{applyUpdate:()=>Jn,encodeStateAsUpdate:()=>Yn,initialize:()=>Vn,insert:()=>zn,stateVector:()=>$n,toString:()=>Bn});const n=()=>new Map,s=t=>{const e=n();return t.forEach(((t,r)=>{e.set(r,t)})),e},i=(t,e,r)=>{let n=t.get(e);return void 0===n&&t.set(e,n=r()),n},o=()=>new Set,c=t=>t[t.length-1],l=(t,e)=>{for(let r=0;rtt>e?t:e,f=(Number.isNaN,Math.pow,Math.sign,t=>0!==t?t<0:1/t<0),p=(String.fromCharCode,String.fromCodePoint,/^\s*/g),w=/([A-Z])/g,y=(t,e)=>(t=>t.replace(p,""))(t.replace(w,(t=>`${e}${(t=>t.toLowerCase())(t)}`)));"undefined"!=typeof TextEncoder&&new TextEncoder;let m="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});m&&1===m.decode(new Uint8Array).length&&(m=null);let b=new class{constructor(){this.map=new Map}setItem(t,e){this.map.set(t,e)}getItem(t){return this.map.get(t)}},_=!0;try{"undefined"!=typeof localStorage&&(b=localStorage,_=!1)}catch(t){}const k=b,S="undefined"!=typeof process&&process.release&&/node|io\.js/.test(process.release.name);let E;"undefined"!=typeof navigator&&/Mac/.test(navigator.platform);const D=[];(t=>(()=>{if(void 0===E)if(S){E=n();const t=process.argv;let e=null;for(let r=0;r{if(0!==t.length){const[e,r]=t.split("=");E.set(`--${y(e,"-")}`,r),E.set(`-${y(e,"-")}`,r)}}))):E=n();return E})().has(t))("--"+"production")||(t=>{return void 0===(e=S?process.env[t.toUpperCase()]:k.getItem(t))?null:e;var e})("production");const C=(t,e,r)=>new Uint8Array(t,e,r),A=64,v=128,x=127,M=(Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.isInteger||(t=>"number"==typeof t&&isFinite(t)&&a(t)===t));Number.isNaN,Number.parseInt;class O{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const I=()=>new O,N=t=>{const e=new Uint8Array((t=>{let e=t.cpos;for(let r=0;r{const r=t.cbuf.length;t.cpos===r&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*r),t.cpos=0),t.cbuf[t.cpos++]=e},T=L,U=(t,e)=>{for(;e>x;)L(t,v|x&e),e>>>=7;L(t,x&e)},R=(t,e)=>{const r=f(e);for(r&&(e=-e),L(t,(e>63?v:0)|(r?A:0)|63&e),e>>>=6;e>0;)L(t,(e>x?v:0)|x&e),e>>>=7},j=(t,e)=>{const r=unescape(encodeURIComponent(e)),n=r.length;U(t,n);for(let e=0;e{const r=t.cbuf.length,n=t.cpos,s=u(r-n,e.length),i=e.length-s;t.cbuf.set(e.subarray(0,s),n),t.cpos+=s,i>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(g(2*r,i)),t.cbuf.set(e.subarray(s)),t.cpos=i)},V=(t,e)=>{U(t,e.byteLength),P(t,e)},J=(t,e)=>{((t,e)=>{const r=t.cbuf.length;r-t.cpos{switch(typeof e){case"string":L(t,119),j(t,e);break;case"number":M(e)&&e<=2147483647?(L(t,125),R(t,e)):(r=e,Y.setFloat32(0,r),Y.getFloat32(0)===r?(L(t,124),((t,e)=>{J(t,4).setFloat32(0,e,!1)})(t,e)):(L(t,123),((t,e)=>{J(t,8).setFloat64(0,e,!1)})(t,e)));break;case"bigint":L(t,122),((t,e)=>{J(t,8).setBigInt64(0,e,!1)})(t,e);break;case"object":if(null===e)L(t,126);else if(e instanceof Array){L(t,117),U(t,e.length);for(let r=0;r0&&U(this,this.count-1),this.count=1,this.w(this,t),this.s=t)}}const z=t=>{t.count>0&&(R(t.encoder,1===t.count?t.s:-t.s),t.count>1&&U(t.encoder,t.count-2))};class F{constructor(){this.encoder=new O,this.s=0,this.count=0}write(t){this.s===t?this.count++:(z(this),this.count=1,this.s=t)}toUint8Array(){return z(this),N(this.encoder)}}const W=t=>{if(t.count>0){const e=t.diff<<1|(1===t.count?0:1);R(t.encoder,e),t.count>1&&U(t.encoder,t.count-2)}};class K{constructor(){this.encoder=new O,this.s=0,this.count=0,this.diff=0}write(t){this.diff===t-this.s?(this.s=t,this.count++):(W(this),this.count=1,this.diff=t-this.s,this.s=t)}toUint8Array(){return W(this),N(this.encoder)}}class H{constructor(){this.sarr=[],this.s="",this.lensE=new F}write(t){this.s+=t,this.s.length>19&&(this.sarr.push(this.s),this.s=""),this.lensE.write(t.length)}toUint8Array(){const t=new O;return this.sarr.push(this.s),this.s="",j(t,this.sarr.join("")),P(t,this.lensE.toUint8Array()),N(t)}}class Z{constructor(t){this.arr=t,this.pos=0}}const G=t=>new Z(t),q=t=>((t,e)=>{const r=C(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,r})(t,Q(t)),X=t=>t.arr[t.pos++],Q=t=>{let e=0,r=0;for(;;){const n=t.arr[t.pos++];if(e|=(n&x)<>>0;if(r>35)throw new Error("Integer out of range!")}},tt=t=>{let e=t.arr[t.pos++],r=63&e,n=6;const s=(e&A)>0?-1:1;if(0==(e&v))return s*r;for(;;){if(e=t.arr[t.pos++],r|=(e&x)<>>0);if(n>41)throw new Error("Integer out of range!")}},et=t=>{let e=Q(t);if(0===e)return"";{let r=String.fromCodePoint(X(t));if(--e<100)for(;e--;)r+=String.fromCodePoint(X(t));else for(;e>0;){const n=e<1e4?e:1e4,s=t.arr.subarray(t.pos,t.pos+n);t.pos+=n,r+=String.fromCodePoint.apply(null,s),e-=n}return decodeURIComponent(escape(r))}},rt=(t,e)=>{const r=new DataView(t.arr.buffer,t.arr.byteOffset+t.pos,e);return t.pos+=e,r},nt=[t=>{},t=>null,tt,t=>rt(t,4).getFloat32(0,!1),t=>rt(t,8).getFloat64(0,!1),t=>rt(t,8).getBigInt64(0,!1),t=>!1,t=>!0,et,t=>{const e=Q(t),r={};for(let n=0;n{const e=Q(t),r=[];for(let n=0;nnt[127-X(t)](t);class it extends Z{constructor(t,e){super(t),this.reader=e,this.s=null,this.count=0}read(){return 0===this.count&&(this.s=this.reader(this),(t=this).pos!==t.arr.length?this.count=Q(this)+1:this.count=-1),this.count--,this.s;var t}}class ot extends Z{constructor(t){super(t),this.s=0,this.count=0}read(){if(0===this.count){this.s=tt(this);const t=f(this.s);this.count=1,t&&(this.s=-this.s,this.count=Q(this)+2)}return this.count--,this.s}}class ct extends Z{constructor(t){super(t),this.s=0,this.count=0,this.diff=0}read(){if(0===this.count){const t=tt(this),e=1&t;this.diff=t>>1,this.count=1,e&&(this.count=Q(this)+2)}return this.s+=this.diff,this.count--,this.s}}class lt{constructor(t){this.decoder=new ot(t),this.str=et(this.decoder),this.spos=0}read(){const t=this.spos+this.decoder.read(),e=this.str.slice(this.spos,t);return this.spos=t,e}}"undefined"==typeof window||void 0!==window.performance&&window.performance;const ht="undefined"==typeof crypto?null:crypto,at=null!==ht?t=>{const e=new ArrayBuffer(t),r=new Uint8Array(e);return ht.getRandomValues(r),e}:t=>{const e=new ArrayBuffer(t),r=new Uint8Array(e);for(let e=0;e>>0);return e},dt=(Math.random,()=>new Uint32Array(at(4))[0]),ut=[1e7]+-1e3+-4e3+-8e3+-1e11,gt=()=>ut.replace(/[018]/g,(t=>(t^dt()&15>>t/4).toString(16))),ft=t=>new Error(t),pt=()=>{throw ft("Method unimplemented")},wt=()=>{throw ft("Unexpected case")},yt=(t,e,r=0)=>{try{for(;rnew bt(t,e),kt="undefined"!=typeof document?document:{},St=("undefined"!=typeof DOMParser&&new DOMParser,kt.ELEMENT_NODE,kt.TEXT_NODE,kt.CDATA_SECTION_NODE,kt.COMMENT_NODE,kt.DOCUMENT_NODE,kt.DOCUMENT_TYPE_NODE,kt.DOCUMENT_FRAGMENT_NODE,Date.now),Et=mt(),Dt=mt(),Ct=mt(),At=mt(),vt=mt(),xt=mt(),Mt=mt(),Ot=mt(),It=mt(),Nt={[Et]:_t("font-weight","bold"),[Dt]:_t("font-weight","normal"),[Ct]:_t("color","blue"),[vt]:_t("color","green"),[At]:_t("color","grey"),[xt]:_t("color","red"),[Mt]:_t("color","purple"),[Ot]:_t("color","orange"),[It]:_t("color","black")},Lt={[Et]:"",[Dt]:"",[Ct]:"",[vt]:"",[At]:"",[xt]:"",[Mt]:"",[Ot]:"",[It]:""},Tt=S?t=>{const e=[],r=[];let n=0;for(;n0&&(e.push(""),r.push(e.join("")));n{const e=[],r=[],s=n();let i=[],o=0;for(;o{const r=[];for(const[n,s]of t)r.push(e(s,n));return r})(s,((t,e)=>`${e}:${t};`)).join("");o>0||t.length>0?(e.push("%c"+n),r.push(t)):e.push(n)}}}for(o>0&&(i=r,i.unshift(e.join("")));o({[Symbol.iterator](){return this},next:t}),jt=(t,e)=>Rt((()=>{const{done:r,value:n}=t.next();return{done:r,value:r?void 0:e(n)}})),Pt=(Object.assign,Object.keys),Vt=t=>Pt(t).length;class Jt{constructor(t,e){this.clock=t,this.len=e}}class Yt{constructor(){this.clients=new Map}}const $t=(t,e,r)=>e.clients.forEach(((e,n)=>{const s=t.doc.store.clients.get(n);for(let n=0;n{const r=t.clients.get(e.client);return void 0!==r&&null!==((t,e)=>{let r=0,n=t.length-1;for(;r<=n;){const s=a((r+n)/2),i=t[s],o=i.clock;if(o<=e){if(e{t.clients.forEach((t=>{let e,r;for(t.sort(((t,e)=>t.clock-e.clock)),e=1,r=1;e=s.clock?n.len=g(n.len,s.clock+s.len-n.clock):(r{i(t.clients,e,(()=>[])).push(new Jt(r,n))},Wt=()=>new Yt,Kt=(t,e)=>{U(t.restEncoder,e.clients.size),e.clients.forEach(((e,r)=>{t.resetDsCurVal(),U(t.restEncoder,r);const n=e.length;U(t.restEncoder,n);for(let r=0;r{const e=new Yt,r=Q(t.restDecoder);for(let n=0;n0){const s=i(e.clients,r,(()=>[]));for(let e=0;e{const n=new Yt,s=Q(t.restDecoder);for(let i=0;i0){const t=new se;return U(t.restEncoder,0),Kt(t,n),t.toUint8Array()}return null},Gt=dt;class qt extends class{constructor(){this._observers=n()}on(t,e){i(this._observers,t,o).add(e)}once(t,e){const r=(...n)=>{this.off(t,r),e(...n)};this.on(t,r)}off(t,e){const r=this._observers.get(t);void 0!==r&&(r.delete(e),0===r.size&&this._observers.delete(t))}emit(t,e){return h((this._observers.get(t)||n()).values()).forEach((t=>t(...e)))}destroy(){this._observers=n()}}{constructor({guid:t=gt(),collectionid:e=null,gc:r=!0,gcFilter:n=(()=>!0),meta:s=null,autoLoad:i=!1,shouldLoad:o=!0}={}){super(),this.gc=r,this.gcFilter=n,this.clientID=Gt(),this.guid=t,this.collectionid=e,this.share=new Map,this.store=new Ee,this._transaction=null,this._transactionCleanups=[],this.subdocs=new Set,this._item=null,this.shouldLoad=o,this.autoLoad=i,this.meta=s,this.isLoaded=!1,this.whenLoaded=new Promise((t=>{this.on("load",(()=>{this.isLoaded=!0,t(this)}))}))}load(){const t=this._item;null===t||this.shouldLoad||Pe(t.parent.doc,(t=>{t.subdocsLoaded.add(this)}),null,!0),this.shouldLoad=!0}getSubdocs(){return this.subdocs}getSubdocGuids(){return new Set(Array.from(this.subdocs).map((t=>t.guid)))}transact(t,e=null){Pe(this,t,e)}get(t,e=nr){const r=i(this.share,t,(()=>{const t=new e;return t._integrate(this,null),t})),n=r.constructor;if(e!==nr&&n!==e){if(n===nr){const n=new e;n._map=r._map,r._map.forEach((t=>{for(;null!==t;t=t.left)t.parent=n})),n._start=r._start;for(let t=n._start;null!==t;t=t.right)t.parent=n;return n._length=r._length,this.share.set(t,n),n._integrate(this,null),n}throw new Error(`Type with the name ${t} has already been defined with a different constructor`)}return r}getArray(t=""){return this.get(t,kr)}getText(t=""){return this.get(t,jr)}getMap(t=""){return this.get(t,Er)}getXmlFragment(t=""){return this.get(t,Vr)}toJSON(){const t={};return this.share.forEach(((e,r)=>{t[r]=e.toJSON()})),t}destroy(){h(this.subdocs).forEach((t=>t.destroy()));const t=this._item;if(null!==t){this._item=null;const e=t.content;e.doc=new qt({guid:this.guid,...e.opts,shouldLoad:!1}),e.doc._item=t,Pe(t.parent.doc,(r=>{const n=e.doc;t.deleted||r.subdocsAdded.add(n),r.subdocsRemoved.add(this)}),null,!0)}this.emit("destroyed",[!0]),this.emit("destroy",[this]),super.destroy()}on(t,e){super.on(t,e)}off(t,e){super.off(t,e)}}class Xt{constructor(t){this.restDecoder=t}resetDsCurVal(){}readDsClock(){return Q(this.restDecoder)}readDsLen(){return Q(this.restDecoder)}}class Qt extends Xt{readLeftID(){return ye(Q(this.restDecoder),Q(this.restDecoder))}readRightID(){return ye(Q(this.restDecoder),Q(this.restDecoder))}readClient(){return Q(this.restDecoder)}readInfo(){return X(this.restDecoder)}readString(){return et(this.restDecoder)}readParentInfo(){return 1===Q(this.restDecoder)}readTypeRef(){return Q(this.restDecoder)}readLen(){return Q(this.restDecoder)}readAny(){return st(this.restDecoder)}readBuf(){return(t=>{const e=(r=t.byteLength,new Uint8Array(r));var r;return e.set(t),e})(q(this.restDecoder))}readJSON(){return JSON.parse(et(this.restDecoder))}readKey(){return et(this.restDecoder)}}class te extends class{constructor(t){this.dsCurrVal=0,this.restDecoder=t}resetDsCurVal(){this.dsCurrVal=0}readDsClock(){return this.dsCurrVal+=Q(this.restDecoder),this.dsCurrVal}readDsLen(){const t=Q(this.restDecoder)+1;return this.dsCurrVal+=t,t}}{constructor(t){super(t),this.keys=[],Q(t),this.keyClockDecoder=new ct(q(t)),this.clientDecoder=new ot(q(t)),this.leftClockDecoder=new ct(q(t)),this.rightClockDecoder=new ct(q(t)),this.infoDecoder=new it(q(t),X),this.stringDecoder=new lt(q(t)),this.parentInfoDecoder=new it(q(t),X),this.typeRefDecoder=new ot(q(t)),this.lenDecoder=new ot(q(t))}readLeftID(){return new pe(this.clientDecoder.read(),this.leftClockDecoder.read())}readRightID(){return new pe(this.clientDecoder.read(),this.rightClockDecoder.read())}readClient(){return this.clientDecoder.read()}readInfo(){return this.infoDecoder.read()}readString(){return this.stringDecoder.read()}readParentInfo(){return 1===this.parentInfoDecoder.read()}readTypeRef(){return this.typeRefDecoder.read()}readLen(){return this.lenDecoder.read()}readAny(){return st(this.restDecoder)}readBuf(){return q(this.restDecoder)}readJSON(){return st(this.restDecoder)}readKey(){const t=this.keyClockDecoder.read();if(t{const n=new Map;r.forEach(((t,r)=>{Ce(e,r)>t&&n.set(r,t)})),De(e).forEach(((t,e)=>{r.has(e)||n.set(e,0)})),U(t.restEncoder,n.size),Array.from(n.entries()).sort(((t,e)=>e[0]-t[0])).forEach((([r,n])=>{((t,e,r,n)=>{n=g(n,e[0].id.clock);const s=ve(e,n);U(t.restEncoder,e.length-s),t.writeClient(r),U(t.restEncoder,n);const i=e[s];i.write(t,n-i.id.clock);for(let r=s+1;r{const o=G(e);((t,e,r,s=new te(t))=>{Pe(e,(t=>{t.local=!1;let e=!1;const r=t.doc,o=r.store,c=((t,e)=>{const r=n(),s=Q(t.restDecoder);for(let n=0;n{const n=[];let s=Array.from(r.keys()).sort(((t,e)=>t-e));if(0===s.length)return null;const o=()=>{if(0===s.length)return null;let t=r.get(s[s.length-1]);for(;t.refs.length===t.i;){if(s.pop(),!(s.length>0))return null;t=r.get(s[s.length-1])}return t};let c=o();if(null===c&&0===n.length)return null;const l=new Ee,h=new Map,a=(t,e)=>{const r=h.get(t);(null==r||r>e)&&h.set(t,e)};let d=c.refs[c.i++];const u=new Map,g=()=>{for(const t of n){const e=t.id.client,n=r.get(e);n?(n.i--,l.clients.set(e,n.refs.slice(n.i)),r.delete(e),n.i=0,n.refs=[]):l.clients.set(e,[t]),s=s.filter((t=>t!==e))}n.length=0};for(;;){if(d.constructor!==pn){const s=i(u,d.id.client,(()=>Ce(e,d.id.client)))-d.id.clock;if(s<0)n.push(d),a(d.id.client,d.id.clock-1),g();else{const i=d.getMissing(t,e);if(null!==i){n.push(d);const t=r.get(i)||{refs:[],i:0};if(t.refs.length!==t.i){d=t.refs[t.i++];continue}a(i,Ce(e,i)),g()}else(0===s||s0)d=n.pop();else if(null!==c&&c.i0){const t=new se;return ie(t,l,new Map),U(t.restEncoder,0),{missing:h,update:t.toUint8Array()}}return null})(t,o,c),h=o.pendingStructs;if(h){for(const[t,r]of h.missing)if(re)&&h.missing.set(t,e)}h.update=Be([h.update,l.update])}}else o.pendingStructs=l;const a=Zt(s,t,o);if(o.pendingDs){const e=new te(G(o.pendingDs));Q(e.restDecoder);const r=Zt(e,t,o);o.pendingDs=a&&r?Be([a,r]):a||r}else o.pendingDs=a;if(e){const e=o.pendingStructs.update;o.pendingStructs=null,oe(t.doc,e)}}),r,!1)})(o,t,r,new s(o))},ce=(t,e=new Uint8Array([0]),r=new se)=>{((t,e,r=new Map)=>{ie(t,e.store,r),Kt(t,(t=>{const e=Wt();return t.clients.forEach(((t,r)=>{const n=[];for(let e=0;e0&&e.clients.set(r,n)})),e})(e.store))})(r,t,le(e));const n=[r.toUint8Array()];if(t.store.pendingDs&&n.push(t.store.pendingDs),t.store.pendingStructs&&n.push(ze(t.store.pendingStructs.update,e)),n.length>1){if(r.constructor===re)return Ye(n.map(((t,e)=>0===e?t:He(t))));if(r.constructor===se)return Be(n)}return n[0]},le=t=>(t=>{const e=new Map,r=Q(t.restDecoder);for(let n=0;n(U(t.restEncoder,e.size),Array.from(e.entries()).sort(((t,e)=>e[0]-t[0])).forEach((([e,r])=>{U(t.restEncoder,e),U(t.restEncoder,r)})),t);class ae{constructor(){this.l=[]}}const de=()=>new ae,ue=(t,e)=>t.l.push(e),ge=(t,e)=>{const r=t.l,n=r.length;t.l=r.filter((t=>e!==t)),n===t.l.length&&console.error("[yjs] Tried to remove event handler that doesn't exist.")},fe=(t,e,r)=>yt(t.l,[e,r]);class pe{constructor(t,e){this.client=t,this.clock=e}}const we=(t,e)=>t===e||null!==t&&null!==e&&t.client===e.client&&t.clock===e.clock,ye=(t,e)=>new pe(t,e);class me{constructor(t,e){this.ds=t,this.sv=e}}const be=(ke=Wt(),Se=new Map,new me(ke,Se),(t,e)=>void 0===e?!t.deleted:e.sv.has(t.id.client)&&(e.sv.get(t.id.client)||0)>t.id.clock&&!Bt(e.ds,t.id)),_e=(t,e)=>{const r=i(t.meta,_e,o),n=t.doc.store;r.has(e)||(e.sv.forEach(((e,r)=>{e{})),r.add(e))};var ke,Se;class Ee{constructor(){this.clients=new Map,this.pendingStructs=null,this.pendingDs=null}}const De=t=>{const e=new Map;return t.clients.forEach(((t,r)=>{const n=t[t.length-1];e.set(r,n.id.clock+n.length)})),e},Ce=(t,e)=>{const r=t.clients.get(e);if(void 0===r)return 0;const n=r[r.length-1];return n.id.clock+n.length},Ae=(t,e)=>{let r=t.clients.get(e.id.client);if(void 0===r)r=[],t.clients.set(e.id.client,r);else{const t=r[r.length-1];if(t.id.clock+t.length!==e.id.clock)throw wt()}r.push(e)},ve=(t,e)=>{let r=0,n=t.length-1,s=t[n],i=s.id.clock;if(i===e)return n;let o=a(e/(i+s.length-1)*n);for(;r<=n;){if(s=t[o],i=s.id.clock,i<=e){if(e{const r=t.clients.get(e.client);return r[ve(r,e.clock)]},Me=(t,e,r)=>{const n=ve(e,r),s=e[n];return s.id.clock{const r=t.doc.store.clients.get(e.client);return r[Me(t,r,e.clock)]},Ie=(t,e,r)=>{const n=e.clients.get(r.client),s=ve(n,r.clock),i=n[s];return r.clock!==i.id.clock+i.length-1&&i.constructor!==Fr&&n.splice(s+1,0,dn(t,i,r.clock-i.id.clock+1)),i},Ne=(t,e,r,n,s)=>{if(0===n)return;const i=r+n;let o,c=Me(t,e,r);do{o=e[c++],i!(0===e.deleteSet.clients.size&&!((t,r)=>{for(const[r,i]of t)if(n=i,s=r,e.beforeState.get(s)!==n)return!0;var n,s;return!1})(e.afterState)||(zt(e.deleteSet),((t,e)=>{ie(t,e.doc.store,e.beforeState)})(t,e),Kt(t,e.deleteSet),0)),Ue=(t,e,r)=>{const n=e._item;(null===n||n.id.clock<(t.beforeState.get(n.id.client)||0)&&!n.deleted)&&i(t.changed,e,o).add(r)},Re=(t,e)=>{const r=t[e-1],n=t[e];r.deleted===n.deleted&&r.constructor===n.constructor&&r.mergeWith(n)&&(t.splice(e,1),n instanceof un&&null!==n.parentSub&&n.parent._map.get(n.parentSub)===n&&n.parent._map.set(n.parentSub,r))},je=(t,e)=>{if(ec.push((()=>{null!==e._item&&e._item.deleted||e._callObserver(r,t)})))),c.push((()=>{r.changedParentTypes.forEach(((t,e)=>c.push((()=>{null!==e._item&&e._item.deleted||((t=t.filter((t=>null===t.target._item||!t.target._item.deleted))).forEach((t=>{t.currentTarget=e})),t.sort(((t,e)=>t.path.length-e.path.length)),fe(e._dEH,t,r))})))),c.push((()=>n.emit("afterTransaction",[r,n])))})),yt(c,[])}finally{n.gc&&((t,e,r)=>{for(const[n,s]of t.clients.entries()){const t=e.clients.get(n);for(let n=s.length-1;n>=0;n--){const i=s[n],o=i.clock+i.len;for(let n=ve(t,i.clock),s=t[n];n{t.clients.forEach(((t,r)=>{const n=e.clients.get(r);for(let e=t.length-1;e>=0;e--){const r=t[e];for(let t=u(n.length-1,1+ve(n,r.clock+r.len-1)),e=n[t];t>0&&e.id.clock>=r.clock;e=n[--t])Re(n,t)}}))})(i,s),r.afterState.forEach(((t,e)=>{const n=r.beforeState.get(e)||0;if(n!==t){const t=s.clients.get(e),r=g(ve(t,n),1);for(let e=t.length-1;e>=r;e--)Re(t,e)}}));for(let t=0;t0&&Re(n,i)}if(r.local||r.afterState.get(n.clientID)===r.beforeState.get(n.clientID)||(((...t)=>{console.log(...Tt(t)),Ut.forEach((e=>e.print(t)))})(Ot,Et,"[yjs] ",Dt,xt,"Changed the client-id because another client seems to be using it."),n.clientID=Gt()),n.emit("afterTransactionCleanup",[r,n]),n._observers.has("update")){const t=new re;Te(t,r)&&n.emit("update",[t.toUint8Array(),r.origin,n,r])}if(n._observers.has("updateV2")){const t=new se;Te(t,r)&&n.emit("updateV2",[t.toUint8Array(),r.origin,n,r])}const{subdocsAdded:c,subdocsLoaded:l,subdocsRemoved:h}=r;(c.size>0||h.size>0||l.size>0)&&(c.forEach((t=>{t.clientID=n.clientID,null==t.collectionid&&(t.collectionid=n.collectionid),n.subdocs.add(t)})),h.forEach((t=>n.subdocs.delete(t))),n.emit("subdocs",[{loaded:l,added:c,removed:h},n,r]),h.forEach((t=>t.destroy()))),t.length<=e+1?(n._transactionCleanups=[],n.emit("afterAllTransactions",[n,t])):je(t,e+1)}}},Pe=(t,e,r=null,n=!0)=>{const s=t._transactionCleanups;let i=!1;null===t._transaction&&(i=!0,t._transaction=new Le(t,r,n),s.push(t._transaction),1===s.length&&t.emit("beforeAllTransactions",[t]),t.emit("beforeTransaction",[t._transaction,t]));try{e(t._transaction)}finally{i&&s[0]===t._transaction&&je(s,0)}};class Ve{constructor(t,e){this.gen=function*(t){const e=Q(t.restDecoder);for(let r=0;rBe(t,Qt,re),$e=(t,e)=>{if(t.constructor===Fr){const{client:r,clock:n}=t.id;return new Fr(ye(r,n+e),t.length-e)}if(t.constructor===pn){const{client:r,clock:n}=t.id;return new pn(ye(r,n+e),t.length-e)}{const r=t,{client:n,clock:s}=r.id;return new un(ye(n,s+e),null,ye(n,s+e-1),null,r.rightOrigin,r.parent,r.parentSub,r.content.splice(e))}},Be=(t,e=te,r=se)=>{if(1===t.length)return t[0];const n=t.map((t=>new e(G(t))));let s=n.map((t=>new Ve(t,!0))),i=null;const o=new r,c=new Je(o);for(;s=s.filter((t=>null!==t.curr)),s.sort(((t,e)=>{if(t.curr.id.client===e.curr.id.client){const r=t.curr.id.clock-e.curr.id.clock;return 0===r?t.curr.constructor===e.curr.constructor?0:t.curr.constructor===pn?1:-1:r}return e.curr.id.client-t.curr.id.client})),0!==s.length;){const t=s[0],e=t.curr.id.client;if(null!==i){let r=t.curr,n=!1;for(;null!==r&&r.id.clock+r.length<=i.struct.id.clock+i.struct.length&&r.id.client>=i.struct.id.client;)r=t.next(),n=!0;if(null===r||r.id.client!==e||n&&r.id.clock>i.struct.id.clock+i.struct.length)continue;if(e!==i.struct.id.client)We(c,i.struct,i.offset),i={struct:r,offset:0},t.next();else if(i.struct.id.clock+i.struct.length0&&(i.struct.constructor===pn?i.struct.length-=e:r=$e(r,e)),i.struct.mergeWith(r)||(We(c,i.struct,i.offset),i={struct:r,offset:0},t.next())}}else i={struct:t.curr,offset:0},t.next();for(let r=t.curr;null!==r&&r.id.client===e&&r.id.clock===i.struct.id.clock+i.struct.length&&r.constructor!==pn;r=t.next())We(c,i.struct,i.offset),i={struct:r,offset:0}}null!==i&&(We(c,i.struct,i.offset),i=null),Ke(c);const h=(t=>{const e=new Yt;for(let r=0;r{if(!e.clients.has(s)){const i=n.slice();for(let e=r+1;eHt(t))));return Kt(o,h),o.toUint8Array()},ze=(t,e,r=te,n=se)=>{const s=le(e),i=new n,o=new Je(i),c=new r(G(t)),l=new Ve(c,!1);for(;l.curr;){const t=l.curr,e=t.id.client,r=s.get(e)||0;if(l.curr.constructor!==pn)if(t.id.clock+t.length>r)for(We(o,t,g(r-t.id.clock,0)),l.next();l.curr&&l.curr.id.client===e;)We(o,l.curr,0),l.next();else for(;l.curr&&l.curr.id.client===e&&l.curr.id.clock+l.curr.length<=r;)l.next();else l.next()}Ke(o);const h=Ht(c);return Kt(i,h),i.toUint8Array()},Fe=t=>{t.written>0&&(t.clientStructs.push({written:t.written,restEncoder:N(t.encoder.restEncoder)}),t.encoder.restEncoder=I(),t.written=0)},We=(t,e,r)=>{t.written>0&&t.currClient!==e.id.client&&Fe(t),0===t.written&&(t.currClient=e.id.client,t.encoder.writeClient(e.id.client),U(t.encoder.restEncoder,e.id.clock+r)),e.write(t.encoder,r),t.written++},Ke=t=>{Fe(t);const e=t.encoder.restEncoder;U(e,t.clientStructs.length);for(let r=0;r((t,e,r)=>{const n=new e(G(t)),s=new Ve(n,!1),i=new r,o=new Je(i);for(let t=s.curr;null!==t;t=s.next())We(o,t,0);Ke(o);const c=Ht(n);return Kt(i,c),i.toUint8Array()})(t,te,re);class Ze{constructor(t,e){this.target=t,this.currentTarget=t,this.transaction=e,this._changes=null,this._keys=null,this._delta=null}get path(){return Ge(this.currentTarget,this.target)}deletes(t){return Bt(this.transaction.deleteSet,t.id)}get keys(){if(null===this._keys){const t=new Map,e=this.target;this.transaction.changed.get(e).forEach((r=>{if(null!==r){const n=e._map.get(r);let s,i;if(this.adds(n)){let t=n.left;for(;null!==t&&this.adds(t);)t=t.left;if(this.deletes(n)){if(null===t||!this.deletes(t))return;s="delete",i=c(t.content.getContent())}else null!==t&&this.deletes(t)?(s="update",i=c(t.content.getContent())):(s="add",i=void 0)}else{if(!this.deletes(n))return;s="delete",i=c(n.content.getContent())}t.set(r,{action:s,oldValue:i})}})),this._keys=t}return this._keys}get delta(){return this.changes.delta}adds(t){return t.id.clock>=(this.transaction.beforeState.get(t.id.client)||0)}get changes(){let t=this._changes;if(null===t){const e=this.target,r=o(),n=o(),s=[];if(t={added:r,deleted:n,delta:s,keys:this.keys},this.transaction.changed.get(e).has(null)){let t=null;const i=()=>{t&&s.push(t)};for(let s=e._start;null!==s;s=s.right)s.deleted?this.deletes(s)&&!this.adds(s)&&(null!==t&&void 0!==t.delete||(i(),t={delete:0}),t.delete+=s.length,n.add(s)):this.adds(s)?(null!==t&&void 0!==t.insert||(i(),t={insert:[]}),t.insert=t.insert.concat(s.content.getContent()),r.add(s)):(null!==t&&void 0!==t.retain||(i(),t={retain:0}),t.retain+=s.length);null!==t&&void 0===t.retain&&i()}this._changes=t}return t}}const Ge=(t,e)=>{const r=[];for(;null!==e._item&&e!==t;){if(null!==e._item.parentSub)r.unshift(e._item.parentSub);else{let t=0,n=e._item.parent._start;for(;n!==e._item&&null!==n;)n.deleted||t++,n=n.right;r.unshift(t)}e=e._item.parent}return r};let qe=0;class Xe{constructor(t,e){t.marker=!0,this.p=t,this.index=e,this.timestamp=qe++}}const Qe=(t,e,r)=>{t.p.marker=!1,t.p=e,e.marker=!0,t.index=r,t.timestamp=qe++},tr=(t,e)=>{if(null===t._start||0===e||null===t._searchMarker)return null;const r=0===t._searchMarker.length?null:t._searchMarker.reduce(((t,r)=>d(e-t.index){t.timestamp=qe++})(r));null!==n.right&&se;)n=n.left,!n.deleted&&n.countable&&(s-=n.length);for(;null!==n.left&&n.left.id.client===n.id.client&&n.left.id.clock+n.left.length===n.id.clock;)n=n.left,!n.deleted&&n.countable&&(s-=n.length);return null!==r&&d(r.index-s){if(t.length>=80){const n=t.reduce(((t,e)=>t.timestamp{for(let n=t.length-1;n>=0;n--){const s=t[n];if(r>0){let e=s.p;for(e.marker=!1;e&&(e.deleted||!e.countable);)e=e.left,e&&!e.deleted&&e.countable&&(s.index-=e.length);if(null===e||!0===e.marker){t.splice(n,1);continue}s.p=e,e.marker=!0}(e0&&e===s.index)&&(s.index=g(e,s.index+r))}},rr=(t,e,r)=>{const n=t,s=e.changedParentTypes;for(;i(s,t,(()=>[])).push(r),null!==t._item;)t=t._item.parent;fe(n._eH,r,e)};class nr{constructor(){this._item=null,this._map=new Map,this._start=null,this.doc=null,this._length=0,this._eH=de(),this._dEH=de(),this._searchMarker=null}get parent(){return this._item?this._item.parent:null}_integrate(t,e){this.doc=t,this._item=e}_copy(){throw pt()}clone(){throw pt()}_write(t){}get _first(){let t=this._start;for(;null!==t&&t.deleted;)t=t.right;return t}_callObserver(t,e){!t.local&&this._searchMarker&&(this._searchMarker.length=0)}observe(t){ue(this._eH,t)}observeDeep(t){ue(this._dEH,t)}unobserve(t){ge(this._eH,t)}unobserveDeep(t){ge(this._dEH,t)}toJSON(){}}const sr=(t,e,r)=>{e<0&&(e=t._length+e),r<0&&(r=t._length+r);let n=r-e;const s=[];let i=t._start;for(;null!==i&&n>0;){if(i.countable&&!i.deleted){const t=i.content.getContent();if(t.length<=e)e-=t.length;else{for(let r=e;r0;r++)s.push(t[r]),n--;e=0}}i=i.right}return s},ir=t=>{const e=[];let r=t._start;for(;null!==r;){if(r.countable&&!r.deleted){const t=r.content.getContent();for(let r=0;r{let r=0,n=t._start;for(;null!==n;){if(n.countable&&!n.deleted){const s=n.content.getContent();for(let n=0;n{const r=[];return or(t,((n,s)=>{r.push(e(n,s,t))})),r},lr=t=>{let e=t._start,r=null,n=0;return{[Symbol.iterator](){return this},next:()=>{if(null===r){for(;null!==e&&e.deleted;)e=e.right;if(null===e)return{done:!0,value:void 0};r=e.content.getContent(),n=0,e=e.right}const t=r[n++];return r.length<=n&&(r=null),{done:!1,value:t}}}},hr=(t,e)=>{const r=tr(t,e);let n=t._start;for(null!==r&&(n=r.p,e-=r.index);null!==n;n=n.right)if(!n.deleted&&n.countable){if(e{let s=r;const i=t.doc,o=i.clientID,c=i.store,l=null===r?e._start:r.right;let h=[];const a=()=>{h.length>0&&(s=new un(ye(o,Ce(c,o)),s,s&&s.lastId,l,l&&l.id,e,null,new Qr(h)),s.integrate(t,0),h=[])};n.forEach((r=>{if(null===r)h.push(r);else switch(r.constructor){case Number:case Object:case Boolean:case Array:case String:h.push(r);break;default:switch(a(),r.constructor){case Uint8Array:case ArrayBuffer:s=new un(ye(o,Ce(c,o)),s,s&&s.lastId,l,l&&l.id,e,null,new Wr(new Uint8Array(r))),s.integrate(t,0);break;case qt:s=new un(ye(o,Ce(c,o)),s,s&&s.lastId,l,l&&l.id,e,null,new Zr(r)),s.integrate(t,0);break;default:if(!(r instanceof nr))throw new Error("Unexpected content type in insert operation");s=new un(ye(o,Ce(c,o)),s,s&&s.lastId,l,l&&l.id,e,null,new an(r)),s.integrate(t,0)}}})),a()},dr=ft("Length exceeded!"),ur=(t,e,r,n)=>{if(r>e._length)throw dr;if(0===r)return e._searchMarker&&er(e._searchMarker,r,n.length),ar(t,e,null,n);const s=r,i=tr(e,r);let o=e._start;for(null!==i&&(o=i.p,0==(r-=i.index)&&(o=o.prev,r+=o&&o.countable&&!o.deleted?o.length:0));null!==o;o=o.right)if(!o.deleted&&o.countable){if(r<=o.length){r{if(0===n)return;const s=r,i=n,o=tr(e,r);let c=e._start;for(null!==o&&(c=o.p,r-=o.index);null!==c&&r>0;c=c.right)!c.deleted&&c.countable&&(r0&&null!==c;)c.deleted||(n0)throw dr;e._searchMarker&&er(e._searchMarker,s,-i+n)},fr=(t,e,r)=>{const n=e._map.get(r);void 0!==n&&n.delete(t)},pr=(t,e,r,n)=>{const s=e._map.get(r)||null,i=t.doc,o=i.clientID;let c;if(null==n)c=new Qr([n]);else switch(n.constructor){case Number:case Object:case Boolean:case Array:case String:c=new Qr([n]);break;case Uint8Array:c=new Wr(n);break;case qt:c=new Zr(n);break;default:if(!(n instanceof nr))throw new Error("Unexpected content type");c=new an(n)}new un(ye(o,Ce(i.store,o)),s,s&&s.lastId,null,null,e,r,c).integrate(t,0)},wr=(t,e)=>{const r=t._map.get(e);return void 0===r||r.deleted?void 0:r.content.getContent()[r.length-1]},yr=t=>{const e={};return t._map.forEach(((t,r)=>{t.deleted||(e[r]=t.content.getContent()[t.length-1])})),e},mr=(t,e)=>{const r=t._map.get(e);return void 0!==r&&!r.deleted},br=t=>{return e=t.entries(),r=t=>!t[1].deleted,Rt((()=>{let t;do{t=e.next()}while(!t.done&&!r(t.value));return t}));var e,r};class _r extends Ze{constructor(t,e){super(t,e),this._transaction=e}}class kr extends nr{constructor(){super(),this._prelimContent=[],this._searchMarker=[]}static from(t){const e=new kr;return e.push(t),e}_integrate(t,e){super._integrate(t,e),this.insert(0,this._prelimContent),this._prelimContent=null}_copy(){return new kr}clone(){const t=new kr;return t.insert(0,this.toArray().map((t=>t instanceof nr?t.clone():t))),t}get length(){return null===this._prelimContent?this._length:this._prelimContent.length}_callObserver(t,e){super._callObserver(t,e),rr(this,t,new _r(this,t))}insert(t,e){null!==this.doc?Pe(this.doc,(r=>{ur(r,this,t,e)})):this._prelimContent.splice(t,0,...e)}push(t){null!==this.doc?Pe(this.doc,(e=>{((t,e,r)=>{let n=(e._searchMarker||[]).reduce(((t,e)=>e.index>t.index?e:t),{index:0,p:e._start}).p;if(n)for(;n.right;)n=n.right;ar(t,e,n,r)})(e,this,t)})):this._prelimContent.push(...t)}unshift(t){this.insert(0,t)}delete(t,e=1){null!==this.doc?Pe(this.doc,(r=>{gr(r,this,t,e)})):this._prelimContent.splice(t,e)}get(t){return hr(this,t)}toArray(){return ir(this)}slice(t=0,e=this.length){return sr(this,t,e)}toJSON(){return this.map((t=>t instanceof nr?t.toJSON():t))}map(t){return cr(this,t)}forEach(t){or(this,t)}[Symbol.iterator](){return lr(this)}_write(t){t.writeTypeRef(rn)}}class Sr extends Ze{constructor(t,e,r){super(t,e),this.keysChanged=r}}class Er extends nr{constructor(t){super(),this._prelimContent=null,this._prelimContent=void 0===t?new Map:new Map(t)}_integrate(t,e){super._integrate(t,e),this._prelimContent.forEach(((t,e)=>{this.set(e,t)})),this._prelimContent=null}_copy(){return new Er}clone(){const t=new Er;return this.forEach(((e,r)=>{t.set(r,e instanceof nr?e.clone():e)})),t}_callObserver(t,e){rr(this,t,new Sr(this,t,e))}toJSON(){const t={};return this._map.forEach(((e,r)=>{if(!e.deleted){const n=e.content.getContent()[e.length-1];t[r]=n instanceof nr?n.toJSON():n}})),t}get size(){return[...br(this._map)].length}keys(){return jt(br(this._map),(t=>t[0]))}values(){return jt(br(this._map),(t=>t[1].content.getContent()[t[1].length-1]))}entries(){return jt(br(this._map),(t=>[t[0],t[1].content.getContent()[t[1].length-1]]))}forEach(t){return this._map.forEach(((e,r)=>{e.deleted||t(e.content.getContent()[e.length-1],r,this)})),{}}[Symbol.iterator](){return this.entries()}delete(t){null!==this.doc?Pe(this.doc,(e=>{fr(e,this,t)})):this._prelimContent.delete(t)}set(t,e){return null!==this.doc?Pe(this.doc,(r=>{pr(r,this,t,e)})):this._prelimContent.set(t,e),e}get(t){return wr(this,t)}has(t){return mr(this,t)}clear(){null!==this.doc?Pe(this.doc,(t=>{this.forEach((function(e,r,n){fr(t,n,r)}))})):this._prelimContent.clear()}_write(t){t.writeTypeRef(nn)}}const Dr=(t,e)=>t===e||"object"==typeof t&&"object"==typeof e&&t&&e&&((t,e)=>t===e||Vt(t)===Vt(e)&&((t,e)=>{for(const r in t)if(!e(t[r],r))return!1;return!0})(t,((t,r)=>(void 0!==t||((t,e)=>Object.prototype.hasOwnProperty.call(t,e))(e,r))&&e[r]===t)))(t,e);class Cr{constructor(t,e,r,n){this.left=t,this.right=e,this.index=r,this.currentAttributes=n}forward(){null===this.right&&wt(),this.right.content.constructor===qr?this.right.deleted||Mr(this.currentAttributes,this.right.content):this.right.deleted||(this.index+=this.right.length),this.left=this.right,this.right=this.right.right}}const Ar=(t,e,r)=>{for(;null!==e.right&&r>0;)e.right.content.constructor===qr?e.right.deleted||Mr(e.currentAttributes,e.right.content):e.right.deleted||(r{const n=new Map,s=tr(e,r);if(s){const e=new Cr(s.p.left,s.p,s.index,n);return Ar(t,e,r-s.index)}{const s=new Cr(null,e._start,0,n);return Ar(t,s,r)}},xr=(t,e,r,n)=>{for(;null!==r.right&&(!0===r.right.deleted||r.right.content.constructor===qr&&Dr(n.get(r.right.content.key),r.right.content.value));)r.right.deleted||n.delete(r.right.content.key),r.forward();const s=t.doc,i=s.clientID;n.forEach(((n,o)=>{const c=r.left,l=r.right,h=new un(ye(i,Ce(s.store,i)),c,c&&c.lastId,l,l&&l.id,e,null,new qr(o,n));h.integrate(t,0),r.right=h,r.forward()}))},Mr=(t,e)=>{const{key:r,value:n}=e;null===n?t.delete(r):t.set(r,n)},Or=(t,e)=>{for(;null!==t.right&&(t.right.deleted||t.right.content.constructor===qr&&Dr(e[t.right.content.key]||null,t.right.content.value));)t.forward()},Ir=(t,e,r,n)=>{const s=t.doc,i=s.clientID,o=new Map;for(const c in n){const l=n[c],h=r.currentAttributes.get(c)||null;if(!Dr(h,l)){o.set(c,h);const{left:n,right:a}=r;r.right=new un(ye(i,Ce(s.store,i)),n,n&&n.lastId,a,a&&a.id,e,null,new qr(c,l)),r.right.integrate(t,0),r.forward()}}return o},Nr=(t,e,r,n,s)=>{r.currentAttributes.forEach(((t,e)=>{void 0===s[e]&&(s[e]=null)}));const i=t.doc,o=i.clientID;Or(r,s);const c=Ir(t,e,r,s),l=n.constructor===String?new tn(n):n instanceof nr?new an(n):new Gr(n);let{left:h,right:a,index:d}=r;e._searchMarker&&er(e._searchMarker,r.index,l.getLength()),a=new un(ye(o,Ce(i.store,o)),h,h&&h.lastId,a,a&&a.id,e,null,l),a.integrate(t,0),r.right=a,r.index=d,r.forward(),xr(t,e,r,c)},Lr=(t,e,r,n,s)=>{const i=t.doc,o=i.clientID;Or(r,s);const c=Ir(t,e,r,s);for(;null!==r.right&&(n>0||r.right.content.constructor===qr);){if(!r.right.deleted)switch(r.right.content.constructor){case qr:{const{key:e,value:n}=r.right.content,i=s[e];void 0!==i&&(Dr(i,n)?c.delete(e):c.set(e,n),r.right.delete(t));break}default:n0){let s="";for(;n>0;n--)s+="\n";r.right=new un(ye(o,Ce(i.store,o)),r.left,r.left&&r.left.lastId,r.right,r.right&&r.right.id,e,null,new tn(s)),r.right.integrate(t,0),r.forward()}xr(t,e,r,c)},Tr=(t,e,r,n,i)=>{let o=r;const c=s(i);for(;o&&(!o.countable||o.deleted);)o.deleted||o.content.constructor!==qr||Mr(c,o.content),o=o.right;let l=0,h=!1;for(;e!==o;){if(r===e&&(h=!0),!e.deleted){const r=e.content;switch(r.constructor){case qr:{const{key:s,value:o}=r;(c.get(s)||null)===o&&(n.get(s)||null)!==o||(e.delete(t),l++,h||(i.get(s)||null)!==o||(n.get(s)||null)===o||i.delete(s));break}}}e=e.right}return l},Ur=(t,e,r)=>{const n=r,i=s(e.currentAttributes),o=e.right;for(;r>0&&null!==e.right;){if(!1===e.right.deleted)switch(e.right.content.constructor){case an:case Gr:case tn:r{null===t?this.childListChanged=!0:this.keysChanged.add(t)}))}get changes(){if(null===this._changes){const t={keys:this.keys,delta:this.delta,added:new Set,deleted:new Set};this._changes=t}return this._changes}get delta(){if(null===this._delta){const t=this.target.doc,e=[];Pe(t,(t=>{const r=new Map,n=new Map;let s=this.target._start,i=null;const o={};let c="",l=0,h=0;const a=()=>{if(null!==i){let t;switch(i){case"delete":t={delete:h},h=0;break;case"insert":t={insert:c},r.size>0&&(t.attributes={},r.forEach(((e,r)=>{null!==e&&(t.attributes[r]=e)}))),c="";break;case"retain":if(t={retain:l},Object.keys(o).length>0){t.attributes={};for(const e in o)t.attributes[e]=o[e]}l=0}e.push(t),i=null}};for(;null!==s;){switch(s.content.constructor){case an:case Gr:this.adds(s)?this.deletes(s)||(a(),i="insert",c=s.content.getContent()[0],a()):this.deletes(s)?("delete"!==i&&(a(),i="delete"),h+=1):s.deleted||("retain"!==i&&(a(),i="retain"),l+=1);break;case tn:this.adds(s)?this.deletes(s)||("insert"!==i&&(a(),i="insert"),c+=s.content.str):this.deletes(s)?("delete"!==i&&(a(),i="delete"),h+=s.length):s.deleted||("retain"!==i&&(a(),i="retain"),l+=s.length);break;case qr:{const{key:e,value:c}=s.content;if(this.adds(s)){if(!this.deletes(s)){const l=r.get(e)||null;Dr(l,c)?null!==c&&s.delete(t):("retain"===i&&a(),Dr(c,n.get(e)||null)?delete o[e]:o[e]=c)}}else if(this.deletes(s)){n.set(e,c);const t=r.get(e)||null;Dr(t,c)||("retain"===i&&a(),o[e]=t)}else if(!s.deleted){n.set(e,c);const r=o[e];void 0!==r&&(Dr(r,c)?null!==r&&s.delete(t):("retain"===i&&a(),null===c?delete o[e]:o[e]=c))}s.deleted||("insert"===i&&a(),Mr(r,s.content));break}}s=s.right}for(a();e.length>0;){const t=e[e.length-1];if(void 0===t.retain||void 0!==t.attributes)break;e.pop()}})),this._delta=e}return this._delta}}class jr extends nr{constructor(t){super(),this._pending=void 0!==t?[()=>this.insert(0,t)]:[],this._searchMarker=[]}get length(){return this._length}_integrate(t,e){super._integrate(t,e);try{this._pending.forEach((t=>t()))}catch(t){console.error(t)}this._pending=null}_copy(){return new jr}clone(){const t=new jr;return t.applyDelta(this.toDelta()),t}_callObserver(t,e){super._callObserver(t,e);const r=new Rr(this,t,e),i=t.doc;if(rr(this,t,r),!t.local){let e=!1;for(const[r,n]of t.afterState.entries()){const s=t.beforeState.get(r)||0;if(n!==s&&(Ne(t,i.store.clients.get(r),s,n,(t=>{t.deleted||t.content.constructor!==qr||(e=!0)})),e))break}e||$t(t,t.deleteSet,(t=>{t instanceof Fr||e||t.parent===this&&t.content.constructor===qr&&(e=!0)})),Pe(i,(t=>{e?(t=>{let e=0;Pe(t.doc,(r=>{let i=t._start,o=t._start,c=n();const l=s(c);for(;o;)!1===o.deleted&&(o.content.constructor===qr?Mr(l,o.content):(e+=Tr(r,i,o,c,l),c=s(l),i=o)),o=o.right}))})(this):$t(t,t.deleteSet,(e=>{e instanceof Fr||e.parent===this&&((t,e)=>{for(;e&&e.right&&(e.right.deleted||!e.right.countable);)e=e.right;const r=new Set;for(;e&&(e.deleted||!e.countable);){if(!e.deleted&&e.content.constructor===qr){const n=e.content.key;r.has(n)?e.delete(t):r.add(n)}e=e.left}})(t,e)}))}))}}toString(){let t="",e=this._start;for(;null!==e;)!e.deleted&&e.countable&&e.content.constructor===tn&&(t+=e.content.str),e=e.right;return t}toJSON(){return this.toString()}applyDelta(t,{sanitize:e=!0}={}){null!==this.doc?Pe(this.doc,(r=>{const n=new Cr(null,this._start,0,new Map);for(let s=0;s0)&&Nr(r,this,n,o,i.attributes||{})}else void 0!==i.retain?Lr(r,this,n,i.retain,i.attributes||{}):void 0!==i.delete&&Ur(r,n,i.delete)}})):this._pending.push((()=>this.applyDelta(t)))}toDelta(t,e,r){const n=[],s=new Map,i=this.doc;let o="",c=this._start;function l(){if(o.length>0){const t={};let e=!1;s.forEach(((r,n)=>{e=!0,t[n]=r}));const r={insert:o};e&&(r.attributes=t),n.push(r),o=""}}return Pe(i,(i=>{for(t&&_e(i,t),e&&_e(i,e);null!==c;){if(be(c,t)||void 0!==e&&be(c,e))switch(c.content.constructor){case tn:{const n=s.get("ychange");void 0===t||be(c,t)?void 0===e||be(c,e)?void 0!==n&&(l(),s.delete("ychange")):void 0!==n&&n.user===c.id.client&&"added"===n.state||(l(),s.set("ychange",r?r("added",c.id):{type:"added"})):void 0!==n&&n.user===c.id.client&&"removed"===n.state||(l(),s.set("ychange",r?r("removed",c.id):{type:"removed"})),o+=c.content.str;break}case an:case Gr:{l();const t={insert:c.content.getContent()[0]};if(s.size>0){const e={};t.attributes=e,s.forEach(((t,r)=>{e[r]=t}))}n.push(t);break}case qr:be(c,t)&&(l(),Mr(s,c.content))}c=c.right}l()}),_e),n}insert(t,e,r){if(e.length<=0)return;const n=this.doc;null!==n?Pe(n,(n=>{const s=vr(n,this,t);r||(r={},s.currentAttributes.forEach(((t,e)=>{r[e]=t}))),Nr(n,this,s,e,r)})):this._pending.push((()=>this.insert(t,e,r)))}insertEmbed(t,e,r={}){const n=this.doc;null!==n?Pe(n,(n=>{const s=vr(n,this,t);Nr(n,this,s,e,r)})):this._pending.push((()=>this.insertEmbed(t,e,r)))}delete(t,e){if(0===e)return;const r=this.doc;null!==r?Pe(r,(r=>{Ur(r,vr(r,this,t),e)})):this._pending.push((()=>this.delete(t,e)))}format(t,e,r){if(0===e)return;const n=this.doc;null!==n?Pe(n,(n=>{const s=vr(n,this,t);null!==s.right&&Lr(n,this,s,e,r)})):this._pending.push((()=>this.format(t,e,r)))}removeAttribute(t){null!==this.doc?Pe(this.doc,(e=>{fr(e,this,t)})):this._pending.push((()=>this.removeAttribute(t)))}setAttribute(t,e){null!==this.doc?Pe(this.doc,(r=>{pr(r,this,t,e)})):this._pending.push((()=>this.setAttribute(t,e)))}getAttribute(t){return wr(this,t)}getAttributes(t){return yr(this)}_write(t){t.writeTypeRef(sn)}}class Pr{constructor(t,e=(()=>!0)){this._filter=e,this._root=t,this._currentNode=t._start,this._firstCall=!0}[Symbol.iterator](){return this}next(){let t=this._currentNode,e=t&&t.content&&t.content.type;if(null!==t&&(!this._firstCall||t.deleted||!this._filter(e)))do{if(e=t.content.type,t.deleted||e.constructor!==Jr&&e.constructor!==Vr||null===e._start)for(;null!==t;){if(null!==t.right){t=t.right;break}t=t.parent===this._root?null:t.parent._item}else t=e._start}while(null!==t&&(t.deleted||!this._filter(t.content.type)));return this._firstCall=!1,null===t?{value:void 0,done:!0}:(this._currentNode=t,{value:t.content.type,done:!1})}}class Vr extends nr{constructor(){super(),this._prelimContent=[]}get firstChild(){const t=this._first;return t?t.content.getContent()[0]:null}_integrate(t,e){super._integrate(t,e),this.insert(0,this._prelimContent),this._prelimContent=null}_copy(){return new Vr}clone(){const t=new Vr;return t.insert(0,this.toArray().map((t=>t instanceof nr?t.clone():t))),t}get length(){return null===this._prelimContent?this._length:this._prelimContent.length}createTreeWalker(t){return new Pr(this,t)}querySelector(t){t=t.toUpperCase();const e=new Pr(this,(e=>e.nodeName&&e.nodeName.toUpperCase()===t)).next();return e.done?null:e.value}querySelectorAll(t){return t=t.toUpperCase(),Array.from(new Pr(this,(e=>e.nodeName&&e.nodeName.toUpperCase()===t)))}_callObserver(t,e){rr(this,t,new Yr(this,e,t))}toString(){return cr(this,(t=>t.toString())).join("")}toJSON(){return this.toString()}toDOM(t=document,e={},r){const n=t.createDocumentFragment();return void 0!==r&&r._createAssociation(n,this),or(this,(s=>{n.insertBefore(s.toDOM(t,e,r),null)})),n}insert(t,e){null!==this.doc?Pe(this.doc,(r=>{ur(r,this,t,e)})):this._prelimContent.splice(t,0,...e)}insertAfter(t,e){if(null!==this.doc)Pe(this.doc,(r=>{const n=t&&t instanceof nr?t._item:t;ar(r,this,n,e)}));else{const r=this._prelimContent,n=null===t?0:r.findIndex((e=>e===t))+1;if(0===n&&null!==t)throw ft("Reference item not found");r.splice(n,0,...e)}}delete(t,e=1){null!==this.doc?Pe(this.doc,(r=>{gr(r,this,t,e)})):this._prelimContent.splice(t,e)}toArray(){return ir(this)}push(t){this.insert(this.length,t)}unshift(t){this.insert(0,t)}get(t){return hr(this,t)}slice(t=0,e=this.length){return sr(this,t,e)}_write(t){t.writeTypeRef(cn)}}class Jr extends Vr{constructor(t="UNDEFINED"){super(),this.nodeName=t,this._prelimAttrs=new Map}get nextSibling(){const t=this._item?this._item.next:null;return t?t.content.type:null}get prevSibling(){const t=this._item?this._item.prev:null;return t?t.content.type:null}_integrate(t,e){super._integrate(t,e),this._prelimAttrs.forEach(((t,e)=>{this.setAttribute(e,t)})),this._prelimAttrs=null}_copy(){return new Jr(this.nodeName)}clone(){const t=new Jr(this.nodeName),e=this.getAttributes();for(const r in e)t.setAttribute(r,e[r]);return t.insert(0,this.toArray().map((t=>t instanceof nr?t.clone():t))),t}toString(){const t=this.getAttributes(),e=[],r=[];for(const e in t)r.push(e);r.sort();const n=r.length;for(let s=0;s0?" "+e.join(" "):""}>${super.toString()}`}removeAttribute(t){null!==this.doc?Pe(this.doc,(e=>{fr(e,this,t)})):this._prelimAttrs.delete(t)}setAttribute(t,e){null!==this.doc?Pe(this.doc,(r=>{pr(r,this,t,e)})):this._prelimAttrs.set(t,e)}getAttribute(t){return wr(this,t)}hasAttribute(t){return mr(this,t)}getAttributes(t){return yr(this)}toDOM(t=document,e={},r){const n=t.createElement(this.nodeName),s=this.getAttributes();for(const t in s)n.setAttribute(t,s[t]);return or(this,(s=>{n.appendChild(s.toDOM(t,e,r))})),void 0!==r&&r._createAssociation(n,this),n}_write(t){t.writeTypeRef(on),t.writeKey(this.nodeName)}}class Yr extends Ze{constructor(t,e,r){super(t,r),this.childListChanged=!1,this.attributesChanged=new Set,e.forEach((t=>{null===t?this.childListChanged=!0:this.attributesChanged.add(t)}))}}class $r extends Er{constructor(t){super(),this.hookName=t}_copy(){return new $r(this.hookName)}clone(){const t=new $r(this.hookName);return this.forEach(((e,r)=>{t.set(r,e)})),t}toDOM(t=document,e={},r){const n=e[this.hookName];let s;return s=void 0!==n?n.createDom(this):document.createElement(this.hookName),s.setAttribute("data-yjs-hook",this.hookName),void 0!==r&&r._createAssociation(s,this),s}_write(t){t.writeTypeRef(ln),t.writeKey(this.hookName)}}class Br extends jr{get nextSibling(){const t=this._item?this._item.next:null;return t?t.content.type:null}get prevSibling(){const t=this._item?this._item.prev:null;return t?t.content.type:null}_copy(){return new Br}clone(){const t=new Br;return t.applyDelta(this.toDelta()),t}toDOM(t=document,e,r){const n=t.createTextNode(this.toString());return void 0!==r&&r._createAssociation(n,this),n}toString(){return this.toDelta().map((t=>{const e=[];for(const r in t.attributes){const n=[];for(const e in t.attributes[r])n.push({key:e,value:t.attributes[r][e]});n.sort(((t,e)=>t.keyt.nodeName=0;t--)r+=``;return r})).join("")}toJSON(){return this.toString()}_write(t){t.writeTypeRef(hn)}}class zr{constructor(t,e){this.id=t,this.length=e}get deleted(){throw pt()}mergeWith(t){return!1}write(t,e,r){throw pt()}integrate(t,e){throw pt()}}class Fr extends zr{get deleted(){return!0}delete(){}mergeWith(t){return this.constructor===t.constructor&&(this.length+=t.length,!0)}integrate(t,e){e>0&&(this.id.clock+=e,this.length-=e),Ae(t.doc.store,this)}write(t,e){t.writeInfo(0),t.writeLen(this.length-e)}getMissing(t,e){return null}}class Wr{constructor(t){this.content=t}getLength(){return 1}getContent(){return[this.content]}isCountable(){return!0}copy(){return new Wr(this.content)}splice(t){throw pt()}mergeWith(t){return!1}integrate(t,e){}delete(t){}gc(t){}write(t,e){t.writeBuf(this.content)}getRef(){return 3}}class Kr{constructor(t){this.len=t}getLength(){return this.len}getContent(){return[]}isCountable(){return!1}copy(){return new Kr(this.len)}splice(t){const e=new Kr(this.len-t);return this.len=t,e}mergeWith(t){return this.len+=t.len,!0}integrate(t,e){Ft(t.deleteSet,e.id.client,e.id.clock,this.len),e.markDeleted()}delete(t){}gc(t){}write(t,e){t.writeLen(this.len-e)}getRef(){return 1}}const Hr=(t,e)=>new qt({guid:t,...e,shouldLoad:e.shouldLoad||e.autoLoad||!1});class Zr{constructor(t){t._item&&console.error("This document was already integrated as a sub-document. You should create a second instance instead with the same guid."),this.doc=t;const e={};this.opts=e,t.gc||(e.gc=!1),t.autoLoad&&(e.autoLoad=!0),null!==t.meta&&(e.meta=t.meta)}getLength(){return 1}getContent(){return[this.doc]}isCountable(){return!0}copy(){return new Zr(Hr(this.doc.guid,this.opts))}splice(t){throw pt()}mergeWith(t){return!1}integrate(t,e){this.doc._item=e,t.subdocsAdded.add(this.doc),this.doc.shouldLoad&&t.subdocsLoaded.add(this.doc)}delete(t){t.subdocsAdded.has(this.doc)?t.subdocsAdded.delete(this.doc):t.subdocsRemoved.add(this.doc)}gc(t){}write(t,e){t.writeString(this.doc.guid),t.writeAny(this.opts)}getRef(){return 9}}class Gr{constructor(t){this.embed=t}getLength(){return 1}getContent(){return[this.embed]}isCountable(){return!0}copy(){return new Gr(this.embed)}splice(t){throw pt()}mergeWith(t){return!1}integrate(t,e){}delete(t){}gc(t){}write(t,e){t.writeJSON(this.embed)}getRef(){return 5}}class qr{constructor(t,e){this.key=t,this.value=e}getLength(){return 1}getContent(){return[]}isCountable(){return!1}copy(){return new qr(this.key,this.value)}splice(t){throw pt()}mergeWith(t){return!1}integrate(t,e){e.parent._searchMarker=null}delete(t){}gc(t){}write(t,e){t.writeKey(this.key),t.writeJSON(this.value)}getRef(){return 6}}class Xr{constructor(t){this.arr=t}getLength(){return this.arr.length}getContent(){return this.arr}isCountable(){return!0}copy(){return new Xr(this.arr)}splice(t){const e=new Xr(this.arr.slice(t));return this.arr=this.arr.slice(0,t),e}mergeWith(t){return this.arr=this.arr.concat(t.arr),!0}integrate(t,e){}delete(t){}gc(t){}write(t,e){const r=this.arr.length;t.writeLen(r-e);for(let n=e;n=55296&&r<=56319&&(this.str=this.str.slice(0,t-1)+"�",e.str="�"+e.str.slice(1)),e}mergeWith(t){return this.str+=t.str,!0}integrate(t,e){}delete(t){}gc(t){}write(t,e){t.writeString(0===e?this.str:this.str.slice(e))}getRef(){return 4}}const en=[t=>new kr,t=>new Er,t=>new jr,t=>new Jr(t.readKey()),t=>new Vr,t=>new $r(t.readKey()),t=>new Br],rn=0,nn=1,sn=2,on=3,cn=4,ln=5,hn=6;class an{constructor(t){this.type=t}getLength(){return 1}getContent(){return[this.type]}isCountable(){return!0}copy(){return new an(this.type._copy())}splice(t){throw pt()}mergeWith(t){return!1}integrate(t,e){this.type._integrate(t.doc,e)}delete(t){let e=this.type._start;for(;null!==e;)e.deleted?t._mergeStructs.push(e):e.delete(t),e=e.right;this.type._map.forEach((e=>{e.deleted?t._mergeStructs.push(e):e.delete(t)})),t.changed.delete(this.type)}gc(t){let e=this.type._start;for(;null!==e;)e.gc(t,!0),e=e.right;this.type._start=null,this.type._map.forEach((e=>{for(;null!==e;)e.gc(t,!0),e=e.left})),this.type._map=new Map}write(t,e){this.type._write(t)}getRef(){return 7}}const dn=(t,e,r)=>{const{client:n,clock:s}=e.id,i=new un(ye(n,s+r),e,ye(n,s+r-1),e.right,e.rightOrigin,e.parent,e.parentSub,e.content.splice(r));return e.deleted&&i.markDeleted(),e.keep&&(i.keep=!0),null!==e.redone&&(i.redone=ye(e.redone.client,e.redone.clock+r)),e.right=i,null!==i.right&&(i.right.left=i),t._mergeStructs.push(i),null!==i.parentSub&&null===i.right&&i.parent._map.set(i.parentSub,i),e.length=r,i};class un extends zr{constructor(t,e,r,n,s,i,o,c){super(t,c.getLength()),this.origin=r,this.left=e,this.right=n,this.rightOrigin=s,this.parent=i,this.parentSub=o,this.redone=null,this.content=c,this.info=this.content.isCountable()?2:0}set marker(t){(8&this.info)>0!==t&&(this.info^=8)}get marker(){return(8&this.info)>0}get keep(){return(1&this.info)>0}set keep(t){this.keep!==t&&(this.info^=1)}get countable(){return(2&this.info)>0}get deleted(){return(4&this.info)>0}set deleted(t){this.deleted!==t&&(this.info^=4)}markDeleted(){this.info|=4}getMissing(t,e){if(this.origin&&this.origin.client!==this.id.client&&this.origin.clock>=Ce(e,this.origin.client))return this.origin.client;if(this.rightOrigin&&this.rightOrigin.client!==this.id.client&&this.rightOrigin.clock>=Ce(e,this.rightOrigin.client))return this.rightOrigin.client;if(this.parent&&this.parent.constructor===pe&&this.id.client!==this.parent.client&&this.parent.clock>=Ce(e,this.parent.client))return this.parent.client;if(this.origin&&(this.left=Ie(t,e,this.origin),this.origin=this.left.lastId),this.rightOrigin&&(this.right=Oe(t,this.rightOrigin),this.rightOrigin=this.right.id),(this.left&&this.left.constructor===Fr||this.right&&this.right.constructor===Fr)&&(this.parent=null),this.parent){if(this.parent.constructor===pe){const t=xe(e,this.parent);t.constructor===Fr?this.parent=null:this.parent=t.content.type}}else this.left&&this.left.constructor===un&&(this.parent=this.left.parent,this.parentSub=this.left.parentSub),this.right&&this.right.constructor===un&&(this.parent=this.right.parent,this.parentSub=this.right.parentSub);return null}integrate(t,e){if(e>0&&(this.id.clock+=e,this.left=Ie(t,t.doc.store,ye(this.id.client,this.id.clock-1)),this.origin=this.left.lastId,this.content=this.content.splice(e),this.length-=e),this.parent){if(!this.left&&(!this.right||null!==this.right.left)||this.left&&this.left.right!==this.right){let e,r=this.left;if(null!==r)e=r.right;else if(null!==this.parentSub)for(e=this.parent._map.get(this.parentSub)||null;null!==e&&null!==e.left;)e=e.left;else e=this.parent._start;const n=new Set,s=new Set;for(;null!==e&&e!==this.right;){if(s.add(e),n.add(e),we(this.origin,e.origin)){if(e.id.client{e.p===t&&(e.p=this,!this.deleted&&this.countable&&(e.index-=this.length))})),t.keep&&(this.keep=!0),this.right=t.right,null!==this.right&&(this.right.left=this),this.length+=t.length,!0}return!1}delete(t){if(!this.deleted){const e=this.parent;this.countable&&null===this.parentSub&&(e._length-=this.length),this.markDeleted(),Ft(t.deleteSet,this.id.client,this.id.clock,this.length),Ue(t,e,this.parentSub),this.content.delete(t)}}gc(t,e){if(!this.deleted)throw wt();this.content.gc(t),e?((t,e,r)=>{const n=t.clients.get(e.id.client);n[ve(n,e.id.clock)]=r})(t,this,new Fr(this.id,this.length)):this.content=new Kr(this.length)}write(t,e){const r=e>0?ye(this.id.client,this.id.clock+e-1):this.origin,n=this.rightOrigin,s=this.parentSub,i=31&this.content.getRef()|(null===r?0:v)|(null===n?0:A)|(null===s?0:32);if(t.writeInfo(i),null!==r&&t.writeLeftID(r),null!==n&&t.writeRightID(n),null===r&&null===n){const e=this.parent;if(void 0!==e._item){const r=e._item;if(null===r){const r=(t=>{for(const[e,r]of t.doc.share.entries())if(r===t)return e;throw wt()})(e);t.writeParentInfo(!0),t.writeString(r)}else t.writeParentInfo(!1),t.writeLeftID(r.id)}else e.constructor===String?(t.writeParentInfo(!0),t.writeString(e)):e.constructor===pe?(t.writeParentInfo(!1),t.writeLeftID(e)):wt();null!==s&&t.writeString(s)}this.content.write(t,e)}}const gn=(t,e)=>fn[31&e](t),fn=[()=>{wt()},t=>new Kr(t.readLen()),t=>{const e=t.readLen(),r=[];for(let n=0;nnew Wr(t.readBuf()),t=>new tn(t.readString()),t=>new Gr(t.readJSON()),t=>new qr(t.readKey(),t.readJSON()),t=>new an(en[t.readTypeRef()](t)),t=>{const e=t.readLen(),r=[];for(let n=0;nnew Zr(Hr(t.readString(),t.readAny())),()=>{wt()}];class pn extends zr{get deleted(){return!0}delete(){}mergeWith(t){return this.constructor===t.constructor&&(this.length+=t.length,!0)}integrate(t,e){wt()}write(t,e){t.writeInfo(10),U(t.restEncoder,this.length-e)}getMissing(t,e){return null}}const wn="undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function yn(t,e){const r=_n(t);try{var n=e.constructor.name}catch(t){n="undefined"}if("YArray"==r&&"Array"==n){const r=e,n=t;return n.length==r.length&&r.every(((t,e)=>yn(n.get(e),r[e])))}if("YMap"==r&&"Object"==n){const r=e,n=t;let s=0;for(let t in r)if(s++,!yn(n.get(t),r[t]))return!1;return s==Array.from(n.keys()).length}return e===t}function mn(t,e){let r=!1;switch(_n(t)){case"YArray":if(!Array.isArray(e))throw new Error(`Sync failed, ${e} was not array`);const s=t,i=e,o=Symbol();let c=0;for(let t=0;ti.length?s.length:i.length;for(let n=c;!e&&n=c;t--)r=!0,s.delete(t);c=n+1-(n-c),e=!0}if(!e){try{var n=l.constructor.name}catch(t){n="undefined"}const t=ci.length;)r=!0,s.delete(i.length);break;case"YMap":if("Object"!==e.constructor.name)throw new Error(`Sync failed, ${e} was not object`);const l=t,h=e;for(const t of l.keys()){if(!(t in e)){l.delete(t),r=!0;continue}const s=l.get(t),i=h[t],o=_n(s);try{n=i.constructor.name}catch(t){n="undefined"}if("YMap"==o&&"Object"!==n||"YArray"==o&&"Array"!==n||!["YMap","YArray"].includes(o)&&o!==n)l.delete(t),r=!0;else if("YMap"==o||"YArray"==o){const t=mn(s,i);r||(r=t)}else s!==i&&(l.set(t,i),r=!0)}for(const t in h)if(!l.has(t)){const e=bn(h[t]);l.set(t,e),r=!0}break;default:throw new Error(`can only iterate over Y.Map and Y.Array, got ${t}`)}return r}function bn(t){try{var e=t.constructor.name}catch(t){e="undefined"}if("Array"==e){const e=new kr;return mn(e,t),e}if("Object"==e){const e=new Er;return mn(e,t),e}return t}function _n(t){try{return void 0!==t.length&&void 0!==t.get?"YArray":void 0!==t.keys&&void 0!==t.get?"YMap":t.constructor.name}catch(t){return"undefined"}}!0===wn["__ $YJS$ __"]&&console.warn("Yjs was already imported. Importing different versions of Yjs often leads to issues."),wn["__ $YJS$ __"]=!0;const kn="function"==typeof atob,Sn="function"==typeof btoa,En="function"==typeof Buffer,Dn=("function"==typeof TextDecoder&&new TextDecoder,"function"==typeof TextEncoder&&new TextEncoder,Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=")),Cn=(t=>{let e={};return t.forEach(((t,r)=>e[t]=r)),e})(Dn),An=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,vn=String.fromCharCode.bind(String),xn="function"==typeof Uint8Array.from?Uint8Array.from.bind(Uint8Array):(t,e=(t=>t))=>new Uint8Array(Array.prototype.slice.call(t,0).map(e)),Mn=t=>t.replace(/[^A-Za-z0-9\+\/]/g,""),On=Sn?t=>btoa(t):En?t=>Buffer.from(t,"binary").toString("base64"):t=>{let e,r,n,s,i="";const o=t.length%3;for(let o=0;o255||(n=t.charCodeAt(o++))>255||(s=t.charCodeAt(o++))>255)throw new TypeError("invalid character found");e=r<<16|n<<8|s,i+=Dn[e>>18&63]+Dn[e>>12&63]+Dn[e>>6&63]+Dn[63&e]}return o?i.slice(0,o-3)+"===".substring(o):i},In=En?t=>Buffer.from(t).toString("base64"):t=>{let e=[];for(let r=0,n=t.length;re?In(t).replace(/=/g,"").replace(/[+\/]/g,(t=>"+"==t?"-":"_")):In(t),Ln=kn?t=>atob(Mn(t)):En?t=>Buffer.from(t,"base64").toString("binary"):t=>{if(t=t.replace(/\s+/g,""),!An.test(t))throw new TypeError("malformed base64.");t+="==".slice(2-(3&t.length));let e,r,n,s="";for(let i=0;i>16&255):64===n?vn(e>>16&255,e>>8&255):vn(e>>16&255,e>>8&255,255&e);return s},Tn=En?t=>xn(Buffer.from(t,"base64")):t=>xn(Ln(t),(t=>t.charCodeAt(0))),Un=t=>Tn(Rn(t)),Rn=t=>Mn(t.replace(/[-_]/g,(t=>"-"==t?"+":"/")));var jn,Pn;const Vn=()=>(jn=new qt,Pn=complex?jn.getMap("r"):jn.getText("t"),!complex&&documentText&&documentText.length>0?Pn.insert(0,documentText):complex&&void 0!==documentObject&&mn(Pn,JSON.parse(documentObject)),"initialized"),Jn=()=>{let t=Un(encodedUpdate);return oe(jn,t),"hello"},Yn=()=>{let t;encodedStateVector&&encodedStateVector.length>0&&(t=Un(encodedStateVector));let e=ce(jn,t);return Nn(e)},$n=()=>Nn((t=>((t,e=new ne)=>(t instanceof Map?he(e,t):((t,e)=>{he(t,De(e.store))})(e,t),e.toUint8Array()))(t,new ee))(jn)),Bn=()=>complex?JSON.stringify(Pn.toJSON()):Pn.toString(),zn=()=>{Pn.insert(insertPosition,insertText)}}},e={};function r(n){var s=e[n];if(void 0!==s)return s.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(254)})(); -------------------------------------------------------------------------------- /yjs/document.go: -------------------------------------------------------------------------------- 1 | package yjs 2 | 3 | import ( 4 | _ "embed" 5 | v8 "rogchap.com/v8go" 6 | ) 7 | 8 | type Document struct { 9 | complex bool 10 | context *v8.Context 11 | script *v8.UnboundScript 12 | } 13 | 14 | //go:embed dist/bundle.js 15 | var source string 16 | 17 | var isolate *v8.Isolate 18 | var compiledScript *v8.UnboundScript 19 | var globalTemplate *v8.ObjectTemplate 20 | 21 | func newDocument() Document { 22 | var result Document 23 | var err error 24 | 25 | if isolate == nil { 26 | isolate = v8.NewIsolate() 27 | 28 | compiledScript, err = isolate.CompileUnboundScript(source, "app.js", v8.CompileOptions{}) // compile script in new isolate with cached data 29 | if err != nil { 30 | panic(err) 31 | } 32 | 33 | globalTemplate = v8.NewObjectTemplate(isolate) // a template that represents a JS Object 34 | } 35 | 36 | result.context = v8.NewContext(isolate, globalTemplate) 37 | 38 | _, err = compiledScript.Run(result.context) 39 | if err != nil { 40 | panic(err) 41 | } 42 | 43 | return result 44 | } 45 | 46 | func NewTextDocument(initialText *string) *Document { 47 | var result Document 48 | var err error 49 | 50 | result = newDocument() 51 | result.complex = false 52 | 53 | err = result.set("complex", false) 54 | 55 | if initialText != nil { 56 | err = result.set("documentText", *initialText) 57 | } else { 58 | err = result.set("documentText", v8.Undefined(isolate)) 59 | } 60 | if err != nil { 61 | panic(err) 62 | } 63 | 64 | value, err := result.context.RunScript("entry.initialize()", "app.js") 65 | if err != nil { 66 | panic(err) 67 | } 68 | 69 | if value.String() != "initialized" { 70 | panic("failed to initialize yjs Document") 71 | } 72 | 73 | return &result 74 | } 75 | 76 | func NewComplexDocument(initialObjectJson *string) *Document { 77 | var result Document 78 | var err error 79 | 80 | result = newDocument() 81 | result.complex = true 82 | 83 | err = result.set("complex", true) 84 | if err != nil { 85 | panic(err) 86 | } 87 | 88 | if initialObjectJson != nil { 89 | err = result.set("documentObject", *initialObjectJson) 90 | } else { 91 | err = result.set("documentObject", v8.Undefined(isolate)) 92 | } 93 | if err != nil { 94 | panic(err) 95 | } 96 | 97 | value, err := result.context.RunScript("entry.initialize()", "app.js") 98 | if err != nil { 99 | panic(err) 100 | } 101 | 102 | if value.String() != "initialized" { 103 | panic("failed to initialize yjs Document") 104 | } 105 | 106 | return &result 107 | } 108 | 109 | 110 | func (d *Document) ToString() (string, error) { 111 | var value *v8.Value 112 | var err error 113 | 114 | value, err = d.context.RunScript("entry.toString()", "app.js") 115 | 116 | if err != nil { 117 | return "", err 118 | } 119 | 120 | return value.String(), nil 121 | } 122 | 123 | 124 | 125 | func (d *Document) ApplyUpdate(encodedUpdate string) error { 126 | err := d.set("encodedUpdate", encodedUpdate) 127 | if err != nil { 128 | return err 129 | } 130 | 131 | _, err = d.context.RunScript("entry.applyUpdate()", "app.js") 132 | 133 | return err 134 | } 135 | 136 | func (d *Document) EncodeStateAsUpdate(targetStateVector string) (string, error) { 137 | err := d.set("encodedStateVector", targetStateVector) 138 | if err != nil { 139 | return "", err 140 | } 141 | 142 | result, err := d.context.RunScript("entry.encodeStateAsUpdate()", "app.js") 143 | if err != nil { 144 | return "", err 145 | } 146 | return result.String(), nil 147 | } 148 | 149 | func (d *Document) StateVector() (string, error) { 150 | result, err := d.context.RunScript("entry.stateVector()", "app.js") 151 | if err != nil { 152 | return "", err 153 | } 154 | return result.String(), nil 155 | } 156 | 157 | func (d *Document) Insert(position uint, content string) error { 158 | err := d.set("insertPosition", position) 159 | if err != nil { 160 | return err 161 | } 162 | err = d.set("insertText", content) 163 | if err != nil { 164 | return err 165 | } 166 | _, err = d.context.RunScript("entry.insert()", "app.js") 167 | return err 168 | } 169 | 170 | func (d *Document) set(name string, value interface{}) error { 171 | global := d.context.Global() 172 | 173 | return global.Set(name, value) 174 | } 175 | 176 | func (d *Document) Close() { 177 | d.context.Close() 178 | } 179 | -------------------------------------------------------------------------------- /yjs/document_test.go: -------------------------------------------------------------------------------- 1 | package yjs 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func TestDocumentWritingWorks(t *testing.T) { 8 | fox := "quick brown fox" 9 | d1 := NewTextDocument(&fox) 10 | d2 := NewTextDocument(nil) 11 | 12 | defer d1.Close() 13 | defer d2.Close() 14 | 15 | targetStateVector, err := d2.StateVector() 16 | if err != nil { 17 | t.Fatalf("Error: %v", err) 18 | } 19 | 20 | syncUpdate, err := d1.EncodeStateAsUpdate(targetStateVector) 21 | if err != nil { 22 | t.Fatalf("Error: %v", err) 23 | } 24 | 25 | err = d2.ApplyUpdate(syncUpdate) 26 | if err != nil { 27 | t.Fatalf("error: %v", err) 28 | } 29 | 30 | targetStateVector, err = d2.StateVector() 31 | if err != nil { 32 | t.Fatalf("Error: %v", err) 33 | } 34 | 35 | result, err := d2.ToString() 36 | if err != nil { 37 | t.Fatalf("error: %v", err) 38 | } 39 | if result != "quick brown fox" { 40 | t.Fatalf("Expected d2 to sync to same state, got %v", result) 41 | } 42 | 43 | finalStateVector1, err := d1.StateVector() 44 | if err != nil { 45 | t.Fatalf("Error: %v", err) 46 | } 47 | finalStateVector2, err := d2.StateVector() 48 | if err != nil { 49 | t.Fatalf("Error: %v", err) 50 | } 51 | if finalStateVector1 != finalStateVector2 { 52 | t.Fatalf("Expected equal final state vectors") 53 | } 54 | } 55 | 56 | func TestCreateFromJSON(t *testing.T) { 57 | obj := `{"foo": [1, 2, 3]}` 58 | 59 | d1 := NewComplexDocument(&obj) 60 | result, err := d1.ToString() 61 | if err != nil { 62 | t.Fatalf("error: %v", err) 63 | } 64 | 65 | if result != `{"foo":[1,2,3]}` { 66 | t.Fatalf("Expected d2 to sync to same state, got %v", result) 67 | } 68 | } 69 | 70 | func BenchmarkApplyUpdates(b *testing.B) { 71 | fox := "quick brown fox" 72 | blank := "" 73 | 74 | for i := 0; i < b.N * 100000; i++ { 75 | d1 := NewTextDocument(&fox) 76 | d2 := NewTextDocument(&blank) 77 | 78 | for j := 0; j < 10; j++ { 79 | d1.Insert(0,"a") 80 | sv, err := d2.StateVector() 81 | if err != nil { 82 | b.Fatalf("Error: %v", err) 83 | } 84 | update, err := d1.EncodeStateAsUpdate(sv) 85 | if err != nil { 86 | b.Fatalf("Error: %v", err) 87 | } 88 | err = d2.ApplyUpdate(update) 89 | if err != nil { 90 | b.Fatalf("Error: %v", err) 91 | } 92 | flatText, err := d2.ToString() 93 | if err != nil { 94 | b.Fatalf("Error: %v", err) 95 | } 96 | d3 := NewTextDocument(&flatText) 97 | _, err = d3.EncodeStateAsUpdate("") 98 | d3.Close() 99 | } 100 | 101 | d1.Close() 102 | d2.Close() 103 | } 104 | } -------------------------------------------------------------------------------- /yjs/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/boourns/yjsgo/yjs 2 | 3 | go 1.17 4 | 5 | require rogchap.com/v8go v0.7.0 6 | -------------------------------------------------------------------------------- /yjs/go.sum: -------------------------------------------------------------------------------- 1 | rogchap.com/v8go v0.7.0 h1:kgjbiO4zE5itA962ze6Hqmbs4HgZbGzmueCXsZtremg= 2 | rogchap.com/v8go v0.7.0/go.mod h1:MxgP3pL2MW4dpme/72QRs8sgNMmM0pRc8DPhcuLWPAs= 3 | --------------------------------------------------------------------------------