@yorkie-js/sdk 0.7.4 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -104,7 +104,7 @@
104
104
  }
105
105
  bytes.push(hi >>> 31 & 1);
106
106
  }
107
- const TWO_PWR_32_DBL$1 = 4294967296;
107
+ const TWO_PWR_32_DBL = 4294967296;
108
108
  function int64FromString(dec) {
109
109
  const minus = dec[0] === "-";
110
110
  if (minus) {
@@ -117,9 +117,9 @@
117
117
  const digit1e6 = Number(dec.slice(begin, end));
118
118
  highBits *= base;
119
119
  lowBits = lowBits * base + digit1e6;
120
- if (lowBits >= TWO_PWR_32_DBL$1) {
121
- highBits = highBits + (lowBits / TWO_PWR_32_DBL$1 | 0);
122
- lowBits = lowBits % TWO_PWR_32_DBL$1;
120
+ if (lowBits >= TWO_PWR_32_DBL) {
121
+ highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
122
+ lowBits = lowBits % TWO_PWR_32_DBL;
123
123
  }
124
124
  }
125
125
  add1e6digit(-24, -18);
@@ -140,7 +140,7 @@
140
140
  function uInt64ToString(lo, hi) {
141
141
  ({ lo, hi } = toUnsigned(lo, hi));
142
142
  if (hi <= 2097151) {
143
- return String(TWO_PWR_32_DBL$1 * hi + lo);
143
+ return String(TWO_PWR_32_DBL * hi + lo);
144
144
  }
145
145
  const low = lo & 16777215;
146
146
  const mid = (lo >>> 24 | hi << 8) & 16777215;
@@ -4387,6 +4387,19 @@
4387
4387
  }
4388
4388
  return name2[0].toLowerCase() + name2.substring(1).replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
4389
4389
  }
4390
+ let stringToCode;
4391
+ function codeFromString(value) {
4392
+ if (!stringToCode) {
4393
+ stringToCode = {};
4394
+ for (const value2 of Object.values(Code$1)) {
4395
+ if (typeof value2 == "string") {
4396
+ continue;
4397
+ }
4398
+ stringToCode[codeToString(value2)] = value2;
4399
+ }
4400
+ }
4401
+ return stringToCode[value];
4402
+ }
4390
4403
  class ConnectError extends Error {
4391
4404
  /**
4392
4405
  * Create a new ConnectError.
@@ -4475,6 +4488,15 @@
4475
4488
  throw ConnectError.from(e, Code$1.DataLoss);
4476
4489
  }
4477
4490
  }
4491
+ function appendHeaders(...headers) {
4492
+ const h = new Headers();
4493
+ for (const e of headers) {
4494
+ e.forEach((value, key) => {
4495
+ h.append(key, value);
4496
+ });
4497
+ }
4498
+ return h;
4499
+ }
4478
4500
  function makeAnyClient(service, createMethod) {
4479
4501
  const client = {};
4480
4502
  for (const desc of service.methods) {
@@ -4622,10 +4644,10 @@
4622
4644
  }, reject);
4623
4645
  }
4624
4646
  };
4625
- var __await$2 = function(v) {
4626
- return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4647
+ var __await$3 = function(v) {
4648
+ return this instanceof __await$3 ? (this.v = v, this) : new __await$3(v);
4627
4649
  };
4628
- var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4650
+ var __asyncGenerator$3 = function(thisArg, _arguments, generator) {
4629
4651
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4630
4652
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4631
4653
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4654,7 +4676,7 @@
4654
4676
  }
4655
4677
  }
4656
4678
  function step(r) {
4657
- r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4679
+ r.value instanceof __await$3 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4658
4680
  }
4659
4681
  function fulfill(value) {
4660
4682
  resume("next", value);
@@ -4675,13 +4697,13 @@
4675
4697
  }, i;
4676
4698
  function verb(n, f) {
4677
4699
  i[n] = o[n] ? function(v) {
4678
- return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4700
+ return (p = !p) ? { value: __await$3(o[n](v)), done: false } : f ? f(v) : v;
4679
4701
  } : f;
4680
4702
  }
4681
4703
  };
4682
4704
  function createAsyncIterable(items) {
4683
- return __asyncGenerator$2(this, arguments, function* createAsyncIterable_1() {
4684
- yield __await$2(yield* __asyncDelegator$1(__asyncValues$1(items)));
4705
+ return __asyncGenerator$3(this, arguments, function* createAsyncIterable_1() {
4706
+ yield __await$3(yield* __asyncDelegator$1(__asyncValues$1(items)));
4685
4707
  });
4686
4708
  }
4687
4709
  var __asyncValues = function(o) {
@@ -4703,8 +4725,8 @@
4703
4725
  }, reject);
4704
4726
  }
4705
4727
  };
4706
- var __await$1 = function(v) {
4707
- return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
4728
+ var __await$2 = function(v) {
4729
+ return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4708
4730
  };
4709
4731
  var __asyncDelegator = function(o) {
4710
4732
  var i, p;
@@ -4715,11 +4737,11 @@
4715
4737
  }, i;
4716
4738
  function verb(n, f) {
4717
4739
  i[n] = o[n] ? function(v) {
4718
- return (p = !p) ? { value: __await$1(o[n](v)), done: false } : f ? f(v) : v;
4740
+ return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4719
4741
  } : f;
4720
4742
  }
4721
4743
  };
4722
- var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4744
+ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4723
4745
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4724
4746
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4725
4747
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4748,7 +4770,7 @@
4748
4770
  }
4749
4771
  }
4750
4772
  function step(r) {
4751
- r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4773
+ r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4752
4774
  }
4753
4775
  function fulfill(value) {
4754
4776
  resume("next", value);
@@ -4828,11 +4850,11 @@
4828
4850
  }
4829
4851
  function handleStreamResponse(stream, options) {
4830
4852
  const it = (function() {
4831
- return __asyncGenerator$1(this, arguments, function* () {
4853
+ return __asyncGenerator$2(this, arguments, function* () {
4832
4854
  var _a, _b;
4833
- const response = yield __await$1(stream);
4855
+ const response = yield __await$2(stream);
4834
4856
  (_a = options === null || options === void 0 ? void 0 : options.onHeader) === null || _a === void 0 ? void 0 : _a.call(options, response.header);
4835
- yield __await$1(yield* __asyncDelegator(__asyncValues(response.message)));
4857
+ yield __await$2(yield* __asyncDelegator(__asyncValues(response.message)));
4836
4858
  (_b = options === null || options === void 0 ? void 0 : options.onTrailer) === null || _b === void 0 ? void 0 : _b.call(options, response.trailer);
4837
4859
  });
4838
4860
  })()[Symbol.asyncIterator]();
@@ -4922,12 +4944,12 @@
4922
4944
  }
4923
4945
  return headers;
4924
4946
  }
4925
- const headerContentType = "Content-Type";
4926
- const headerTimeout = "Grpc-Timeout";
4947
+ const headerContentType$1 = "Content-Type";
4948
+ const headerTimeout$1 = "Grpc-Timeout";
4927
4949
  const headerGrpcStatus = "Grpc-Status";
4928
4950
  const headerGrpcMessage = "Grpc-Message";
4929
4951
  const headerStatusDetailsBin = "Grpc-Status-Details-Bin";
4930
- const headerUserAgent = "User-Agent";
4952
+ const headerUserAgent$1 = "User-Agent";
4931
4953
  const headerXUserAgent = "X-User-Agent";
4932
4954
  const headerXGrpcWeb = "X-Grpc-Web";
4933
4955
  const contentTypeProto = "application/grpc-web+proto";
@@ -5065,6 +5087,204 @@
5065
5087
  }
5066
5088
  };
5067
5089
  }
5090
+ const contentTypeRegExp = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
5091
+ const contentTypeUnaryProto = "application/proto";
5092
+ const contentTypeUnaryJson = "application/json";
5093
+ const contentTypeStreamProto = "application/connect+proto";
5094
+ const contentTypeStreamJson = "application/connect+json";
5095
+ function parseContentType(contentType) {
5096
+ const match = contentType === null || contentType === void 0 ? void 0 : contentType.match(contentTypeRegExp);
5097
+ if (!match) {
5098
+ return void 0;
5099
+ }
5100
+ const stream = !!match[1];
5101
+ const binary = !!match[3];
5102
+ return { stream, binary };
5103
+ }
5104
+ (function(s, e) {
5105
+ var t = {};
5106
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5107
+ t[p] = s[p];
5108
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
5109
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5110
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
5111
+ t[p[i]] = s[p[i]];
5112
+ }
5113
+ return t;
5114
+ });
5115
+ function errorFromJson(jsonValue, metadata, fallback) {
5116
+ var _a;
5117
+ if (metadata) {
5118
+ new Headers(metadata).forEach((value, key) => fallback.metadata.append(key, value));
5119
+ }
5120
+ if (typeof jsonValue !== "object" || jsonValue == null || Array.isArray(jsonValue)) {
5121
+ throw fallback;
5122
+ }
5123
+ let code = fallback.code;
5124
+ if ("code" in jsonValue && typeof jsonValue.code === "string") {
5125
+ code = (_a = codeFromString(jsonValue.code)) !== null && _a !== void 0 ? _a : code;
5126
+ }
5127
+ const message = jsonValue.message;
5128
+ if (message != null && typeof message !== "string") {
5129
+ throw fallback;
5130
+ }
5131
+ const error = new ConnectError(message !== null && message !== void 0 ? message : "", code, metadata);
5132
+ if ("details" in jsonValue && Array.isArray(jsonValue.details)) {
5133
+ for (const detail of jsonValue.details) {
5134
+ if (detail === null || typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || typeof detail.value != "string") {
5135
+ throw fallback;
5136
+ }
5137
+ try {
5138
+ error.details.push({
5139
+ type: detail.type,
5140
+ value: base64Decode(detail.value),
5141
+ debug: detail.debug
5142
+ });
5143
+ } catch (e) {
5144
+ throw fallback;
5145
+ }
5146
+ }
5147
+ }
5148
+ return error;
5149
+ }
5150
+ const endStreamFlag = 2;
5151
+ function endStreamFromJson(data) {
5152
+ const parseErr = new ConnectError("invalid end stream", Code$1.Unknown);
5153
+ let jsonValue;
5154
+ try {
5155
+ jsonValue = JSON.parse(typeof data == "string" ? data : new TextDecoder().decode(data));
5156
+ } catch (e) {
5157
+ throw parseErr;
5158
+ }
5159
+ if (typeof jsonValue != "object" || jsonValue == null || Array.isArray(jsonValue)) {
5160
+ throw parseErr;
5161
+ }
5162
+ const metadata = new Headers();
5163
+ if ("metadata" in jsonValue) {
5164
+ if (typeof jsonValue.metadata != "object" || jsonValue.metadata == null || Array.isArray(jsonValue.metadata)) {
5165
+ throw parseErr;
5166
+ }
5167
+ for (const [key, values] of Object.entries(jsonValue.metadata)) {
5168
+ if (!Array.isArray(values) || values.some((value) => typeof value != "string")) {
5169
+ throw parseErr;
5170
+ }
5171
+ for (const value of values) {
5172
+ metadata.append(key, value);
5173
+ }
5174
+ }
5175
+ }
5176
+ const error = "error" in jsonValue && jsonValue.error != null ? errorFromJson(jsonValue.error, metadata, parseErr) : void 0;
5177
+ return { metadata, error };
5178
+ }
5179
+ const headerContentType = "Content-Type";
5180
+ const headerUnaryContentLength = "Content-Length";
5181
+ const headerUnaryEncoding = "Content-Encoding";
5182
+ const headerUnaryAcceptEncoding = "Accept-Encoding";
5183
+ const headerTimeout = "Connect-Timeout-Ms";
5184
+ const headerProtocolVersion = "Connect-Protocol-Version";
5185
+ const headerUserAgent = "User-Agent";
5186
+ function codeFromHttpStatus$1(httpStatus) {
5187
+ switch (httpStatus) {
5188
+ case 400:
5189
+ return Code$1.Internal;
5190
+ case 401:
5191
+ return Code$1.Unauthenticated;
5192
+ case 403:
5193
+ return Code$1.PermissionDenied;
5194
+ case 404:
5195
+ return Code$1.Unimplemented;
5196
+ case 429:
5197
+ return Code$1.Unavailable;
5198
+ case 502:
5199
+ return Code$1.Unavailable;
5200
+ case 503:
5201
+ return Code$1.Unavailable;
5202
+ case 504:
5203
+ return Code$1.Unavailable;
5204
+ default:
5205
+ return Code$1.Unknown;
5206
+ }
5207
+ }
5208
+ function trailerDemux(header) {
5209
+ const h = new Headers(), t = new Headers();
5210
+ header.forEach((value, key) => {
5211
+ if (key.toLowerCase().startsWith("trailer-")) {
5212
+ t.append(key.substring(8), value);
5213
+ } else {
5214
+ h.append(key, value);
5215
+ }
5216
+ });
5217
+ return [h, t];
5218
+ }
5219
+ const protocolVersion = "1";
5220
+ function requestHeader$1(methodKind, useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5221
+ const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5222
+ if (timeoutMs !== void 0) {
5223
+ result.set(headerTimeout, `${timeoutMs}`);
5224
+ }
5225
+ result.set(headerContentType, methodKind == "unary" ? useBinaryFormat ? contentTypeUnaryProto : contentTypeUnaryJson : useBinaryFormat ? contentTypeStreamProto : contentTypeStreamJson);
5226
+ result.set(headerProtocolVersion, protocolVersion);
5227
+ if (!result.has(headerUserAgent) && setUserAgent) ;
5228
+ return result;
5229
+ }
5230
+ function validateResponse$1(methodKind, useBinaryFormat, status, headers) {
5231
+ const mimeType = headers.get(headerContentType);
5232
+ const parsedType = parseContentType(mimeType);
5233
+ if (status !== 200) {
5234
+ const errorFromStatus = new ConnectError(`HTTP ${status}`, codeFromHttpStatus$1(status), headers);
5235
+ if (methodKind == "unary" && parsedType && !parsedType.binary) {
5236
+ return { isUnaryError: true, unaryError: errorFromStatus };
5237
+ }
5238
+ throw errorFromStatus;
5239
+ }
5240
+ const allowedContentType = {
5241
+ binary: useBinaryFormat,
5242
+ stream: methodKind !== "unary"
5243
+ };
5244
+ if ((parsedType === null || parsedType === void 0 ? void 0 : parsedType.binary) !== allowedContentType.binary || parsedType.stream !== allowedContentType.stream) {
5245
+ throw new ConnectError(`unsupported content type ${mimeType}`, parsedType === void 0 ? Code$1.Unknown : Code$1.Internal, headers);
5246
+ }
5247
+ return { isUnaryError: false };
5248
+ }
5249
+ const contentTypePrefix = "application/";
5250
+ function encodeMessageForUrl(message, useBase64) {
5251
+ if (useBase64) {
5252
+ return base64Encode(message, "url");
5253
+ }
5254
+ return encodeURIComponent(new TextDecoder().decode(message));
5255
+ }
5256
+ function transformConnectPostToGetRequest(request, message, useBase64) {
5257
+ let query = `?connect=v${protocolVersion}`;
5258
+ const contentType = request.header.get(headerContentType);
5259
+ if ((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(contentTypePrefix)) === 0) {
5260
+ query += "&encoding=" + encodeURIComponent(contentType.slice(contentTypePrefix.length));
5261
+ }
5262
+ const compression = request.header.get(headerUnaryEncoding);
5263
+ if (compression !== null && compression !== "identity") {
5264
+ query += "&compression=" + encodeURIComponent(compression);
5265
+ useBase64 = true;
5266
+ }
5267
+ if (useBase64) {
5268
+ query += "&base64=1";
5269
+ }
5270
+ query += "&message=" + encodeMessageForUrl(message, useBase64);
5271
+ const url = request.url + query;
5272
+ const header = new Headers(request.header);
5273
+ for (const h of [
5274
+ headerProtocolVersion,
5275
+ headerContentType,
5276
+ headerUnaryContentLength,
5277
+ headerUnaryEncoding,
5278
+ headerUnaryAcceptEncoding
5279
+ ]) {
5280
+ header.delete(h);
5281
+ }
5282
+ return Object.assign(Object.assign({}, request), {
5283
+ requestMethod: "GET",
5284
+ url,
5285
+ header
5286
+ });
5287
+ }
5068
5288
  function runUnaryCall(opt) {
5069
5289
  const next = applyInterceptors(opt.next, opt.interceptors);
5070
5290
  const [signal, abort, done] = setupSignal(opt);
@@ -5133,6 +5353,181 @@
5133
5353
  throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.");
5134
5354
  }
5135
5355
  }
5356
+ var __await$1 = function(v) {
5357
+ return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
5358
+ };
5359
+ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
5360
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5361
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
5362
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
5363
+ return this;
5364
+ }, i;
5365
+ function awaitReturn(f) {
5366
+ return function(v) {
5367
+ return Promise.resolve(v).then(f, reject);
5368
+ };
5369
+ }
5370
+ function verb(n, f) {
5371
+ if (g[n]) {
5372
+ i[n] = function(v) {
5373
+ return new Promise(function(a, b) {
5374
+ q.push([n, v, a, b]) > 1 || resume(n, v);
5375
+ });
5376
+ };
5377
+ if (f) i[n] = f(i[n]);
5378
+ }
5379
+ }
5380
+ function resume(n, v) {
5381
+ try {
5382
+ step(g[n](v));
5383
+ } catch (e) {
5384
+ settle(q[0][3], e);
5385
+ }
5386
+ }
5387
+ function step(r) {
5388
+ r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
5389
+ }
5390
+ function fulfill(value) {
5391
+ resume("next", value);
5392
+ }
5393
+ function reject(value) {
5394
+ resume("throw", value);
5395
+ }
5396
+ function settle(f, v) {
5397
+ if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
5398
+ }
5399
+ };
5400
+ const fetchOptions$1 = {
5401
+ redirect: "error"
5402
+ };
5403
+ function createConnectTransport(options) {
5404
+ var _a;
5405
+ assertFetchApi();
5406
+ const useBinaryFormat = (_a = options.useBinaryFormat) !== null && _a !== void 0 ? _a : false;
5407
+ return {
5408
+ async unary(method, signal, timeoutMs, header, message, contextValues) {
5409
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5410
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5411
+ return await runUnaryCall({
5412
+ interceptors: options.interceptors,
5413
+ signal,
5414
+ timeoutMs,
5415
+ req: {
5416
+ stream: false,
5417
+ service: method.parent,
5418
+ method,
5419
+ requestMethod: "POST",
5420
+ url: createMethodUrl(options.baseUrl, method),
5421
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5422
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5423
+ message
5424
+ },
5425
+ next: async (req) => {
5426
+ var _a2;
5427
+ const useGet = options.useHttpGet === true && method.idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
5428
+ let body = null;
5429
+ if (useGet) {
5430
+ req = transformConnectPostToGetRequest(req, serialize(req.message), useBinaryFormat);
5431
+ } else {
5432
+ body = serialize(req.message);
5433
+ }
5434
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5435
+ const response = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body }));
5436
+ const { isUnaryError, unaryError } = validateResponse$1(method.methodKind, useBinaryFormat, response.status, response.headers);
5437
+ if (isUnaryError) {
5438
+ throw errorFromJson(await response.json(), appendHeaders(...trailerDemux(response.headers)), unaryError);
5439
+ }
5440
+ const [demuxedHeader, demuxedTrailer] = trailerDemux(response.headers);
5441
+ return {
5442
+ stream: false,
5443
+ service: method.parent,
5444
+ method,
5445
+ header: demuxedHeader,
5446
+ message: useBinaryFormat ? parse2(new Uint8Array(await response.arrayBuffer())) : fromJson(method.output, await response.json(), getJsonOptions(options.jsonOptions)),
5447
+ trailer: demuxedTrailer
5448
+ };
5449
+ }
5450
+ });
5451
+ },
5452
+ async stream(method, signal, timeoutMs, header, input, contextValues) {
5453
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5454
+ function parseResponseBody(body, trailerTarget, header2, signal2) {
5455
+ return __asyncGenerator$1(this, arguments, function* parseResponseBody_1() {
5456
+ const reader = createEnvelopeReadableStream(body).getReader();
5457
+ let endStreamReceived = false;
5458
+ for (; ; ) {
5459
+ const result = yield __await$1(reader.read());
5460
+ if (result.done) {
5461
+ break;
5462
+ }
5463
+ const { flags, data } = result.value;
5464
+ if ((flags & compressedFlag) === compressedFlag) {
5465
+ throw new ConnectError(`protocol error: received unsupported compressed output`, Code$1.Internal);
5466
+ }
5467
+ if ((flags & endStreamFlag) === endStreamFlag) {
5468
+ endStreamReceived = true;
5469
+ const endStream = endStreamFromJson(data);
5470
+ if (endStream.error) {
5471
+ const error = endStream.error;
5472
+ header2.forEach((value, key) => {
5473
+ error.metadata.append(key, value);
5474
+ });
5475
+ throw error;
5476
+ }
5477
+ endStream.metadata.forEach((value, key) => trailerTarget.set(key, value));
5478
+ continue;
5479
+ }
5480
+ yield yield __await$1(parse2(data));
5481
+ }
5482
+ if ("throwIfAborted" in signal2) {
5483
+ signal2.throwIfAborted();
5484
+ }
5485
+ if (!endStreamReceived) {
5486
+ throw "missing EndStreamResponse";
5487
+ }
5488
+ });
5489
+ }
5490
+ async function createRequestBody(input2) {
5491
+ if (method.methodKind != "server_streaming") {
5492
+ throw "The fetch API does not support streaming request bodies";
5493
+ }
5494
+ const r = await input2[Symbol.asyncIterator]().next();
5495
+ if (r.done == true) {
5496
+ throw "missing request message";
5497
+ }
5498
+ return encodeEnvelope(0, serialize(r.value));
5499
+ }
5500
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5501
+ return await runStreamingCall({
5502
+ interceptors: options.interceptors,
5503
+ timeoutMs,
5504
+ signal,
5505
+ req: {
5506
+ stream: true,
5507
+ service: method.parent,
5508
+ method,
5509
+ requestMethod: "POST",
5510
+ url: createMethodUrl(options.baseUrl, method),
5511
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5512
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5513
+ message: input
5514
+ },
5515
+ next: async (req) => {
5516
+ var _a2;
5517
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5518
+ const fRes = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body: await createRequestBody(req.message) }));
5519
+ validateResponse$1(method.methodKind, useBinaryFormat, fRes.status, fRes.headers);
5520
+ if (fRes.body === null) {
5521
+ throw "missing response body";
5522
+ }
5523
+ const trailer = new Headers();
5524
+ const res = Object.assign(Object.assign({}, req), { header: fRes.headers, trailer, message: parseResponseBody(fRes.body, trailer, fRes.headers, req.signal) });
5525
+ return res;
5526
+ }
5527
+ });
5528
+ }
5529
+ };
5530
+ }
5136
5531
  function validateTrailer(trailer, header) {
5137
5532
  const err = findTrailerError(trailer);
5138
5533
  if (err) {
@@ -5148,12 +5543,12 @@
5148
5543
  function requestHeader(useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5149
5544
  var _a, _b;
5150
5545
  const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5151
- result.set(headerContentType, useBinaryFormat ? contentTypeProto : contentTypeJson);
5546
+ result.set(headerContentType$1, useBinaryFormat ? contentTypeProto : contentTypeJson);
5152
5547
  result.set(headerXGrpcWeb, "1");
5153
- const userAgent = (_b = (_a = result.get(headerUserAgent)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5548
+ const userAgent = (_b = (_a = result.get(headerUserAgent$1)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5154
5549
  result.set(headerXUserAgent, userAgent);
5155
5550
  if (timeoutMs !== void 0) {
5156
- result.set(headerTimeout, `${timeoutMs}m`);
5551
+ result.set(headerTimeout$1, `${timeoutMs}m`);
5157
5552
  }
5158
5553
  return result;
5159
5554
  }
@@ -5397,7 +5792,7 @@
5397
5792
  }
5398
5793
  };
5399
5794
  }
5400
- const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBIsoaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGpUBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwiggsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq7AQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCJUCgdSR0FOb2RlEiAKBG5leHQYASABKAsyEi55b3JraWUudjEuUkdBTm9kZRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlgKCE5vZGVBdHRyEg0KBXZhbHVlGAEgASgJEikKCnVwZGF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBISCgppc19yZW1vdmVkGAMgASgIIpQCCghUZXh0Tm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEg0KBXZhbHVlGAIgASgJEikKCnJlbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgEIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEjcKCmF0dHJpYnV0ZXMYBSADKAsyIy55b3JraWUudjEuVGV4dE5vZGUuQXR0cmlidXRlc0VudHJ5GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIkcKClRleHROb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSKzAwoIVHJlZU5vZGUSIQoCaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIMCgR0eXBlGAIgASgJEg0KBXZhbHVlGAMgASgJEikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgFIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEioKC2luc19uZXh0X2lkGAYgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSDQoFZGVwdGgYByABKAUSNwoKYXR0cmlidXRlcxgIIAMoCzIjLnlvcmtpZS52MS5UcmVlTm9kZS5BdHRyaWJ1dGVzRW50cnkSKgoLbWVyZ2VkX2Zyb20YCSABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIoCgltZXJnZWRfYXQYCiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpGCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLk5vZGVBdHRyOgI4ASIxCglUcmVlTm9kZXMSJAoHY29udGVudBgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZSJHCgpUcmVlTm9kZUlEEikKCmNyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIOCgZvZmZzZXQYAiABKAUiYwoHVHJlZVBvcxIoCglwYXJlbnRfaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIuCg9sZWZ0X3NpYmxpbmdfaWQYAiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRCJrCgRVc2VyEgoKAmlkGAEgASgJEhUKDWF1dGhfcHJvdmlkZXIYAiABKAkSEAoIdXNlcm5hbWUYAyABKAkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiiQEKBk1lbWJlchIKCgJpZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEg8KB3VzZXJfaWQYAyABKAkSEAoIdXNlcm5hbWUYBCABKAkSDAoEcm9sZRgFIAEoCRIuCgppbnZpdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLpBgoHUHJvamVjdBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhIKCnB1YmxpY19rZXkYAyABKAkSEgoKc2VjcmV0X2tleRgEIAEoCRIYChBhdXRoX3dlYmhvb2tfdXJsGAUgASgJEhwKFGF1dGhfd2ViaG9va19tZXRob2RzGAYgAygJEiAKGGF1dGhfd2ViaG9va19tYXhfcmV0cmllcxgRIAEoBBImCh5hdXRoX3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYEiABKAkSJgoeYXV0aF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBMgASgJEiQKHGF1dGhfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYFCABKAkSGQoRZXZlbnRfd2ViaG9va191cmwYByABKAkSHAoUZXZlbnRfd2ViaG9va19ldmVudHMYCCADKAkSIQoZZXZlbnRfd2ViaG9va19tYXhfcmV0cmllcxgVIAEoBBInCh9ldmVudF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBYgASgJEicKH2V2ZW50X3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYFyABKAkSJQodZXZlbnRfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYGCABKAkSIwobY2xpZW50X2RlYWN0aXZhdGVfdGhyZXNob2xkGAkgASgJEhoKEnNuYXBzaG90X3RocmVzaG9sZBgZIAEoAxIZChFzbmFwc2hvdF9pbnRlcnZhbBgaIAEoAxIkChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAogASgFEiQKHG1heF9hdHRhY2htZW50c19wZXJfZG9jdW1lbnQYCyABKAUSHQoVbWF4X3NpemVfcGVyX2RvY3VtZW50GA8gASgFEhgKEHJlbW92ZV9vbl9kZXRhY2gYECABKAgSHQoVYXV0b19yZXZpc2lvbl9lbmFibGVkGBsgASgIEhcKD2FsbG93ZWRfb3JpZ2lucxgOIAMoCRIuCgpjcmVhdGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIvCgtNZXRyaWNQb2ludBIRCgl0aW1lc3RhbXAYASABKAMSDQoFdmFsdWUYAiABKAUiowwKFlVwZGF0YWJsZVByb2plY3RGaWVsZHMSKgoEbmFtZRgBIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI2ChBhdXRoX3dlYmhvb2tfdXJsGAIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlElIKFGF1dGhfd2ViaG9va19tZXRob2RzGAMgASgLMjQueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQXV0aFdlYmhvb2tNZXRob2RzEj4KGGF1dGhfd2ViaG9va19tYXhfcmV0cmllcxgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYDSABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRAoeYXV0aF93ZWJob29rX21heF93YWl0X2ludGVydmFsGA4gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkIKHGF1dGhfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYDyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNwoRZXZlbnRfd2ViaG9va191cmwYBCABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUZXZlbnRfd2ViaG9va19ldmVudHMYBSABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5FdmVudFdlYmhvb2tFdmVudHMSPwoZZXZlbnRfd2ViaG9va19tYXhfcmV0cmllcxgQIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZRJFCh9ldmVudF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQwodZXZlbnRfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYEyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNwoSc25hcHNob3RfdGhyZXNob2xkGBQgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSNgoRc25hcHNob3RfaW50ZXJ2YWwYFSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRJBChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYBiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQQocbWF4X3N1YnNjcmliZXJzX3Blcl9kb2N1bWVudBgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEkEKHG1heF9hdHRhY2htZW50c19wZXJfZG9jdW1lbnQYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI6ChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYCiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI0ChByZW1vdmVfb25fZGV0YWNoGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRI5ChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEkkKD2FsbG93ZWRfb3JpZ2lucxgJIAEoCzIwLnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkFsbG93ZWRPcmlnaW5zGiUKEkF1dGhXZWJob29rTWV0aG9kcxIPCgdtZXRob2RzGAEgAygJGiQKEkV2ZW50V2ViaG9va0V2ZW50cxIOCgZldmVudHMYASADKAkaIQoOQWxsb3dlZE9yaWdpbnMSDwoHb3JpZ2lucxgBIAMoCSKnAwoPRG9jdW1lbnRTdW1tYXJ5EgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRyb290GAMgASgJEhgKEGF0dGFjaGVkX2NsaWVudHMYByABKAUSKQoNZG9jdW1lbnRfc2l6ZRgIIAEoCzISLnlvcmtpZS52MS5Eb2NTaXplEhIKCnNjaGVtYV9rZXkYCSABKAkSPAoJcHJlc2VuY2VzGAogAygLMikueW9ya2llLnYxLkRvY3VtZW50U3VtbWFyeS5QcmVzZW5jZXNFbnRyeRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgthY2Nlc3NlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASLaAQoOUHJlc2VuY2VDaGFuZ2USMgoEdHlwZRgBIAEoDjIkLnlvcmtpZS52MS5QcmVzZW5jZUNoYW5nZS5DaGFuZ2VUeXBlEiUKCHByZXNlbmNlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlIm0KCkNoYW5nZVR5cGUSGwoXQ0hBTkdFX1RZUEVfVU5TUEVDSUZJRUQQABITCg9DSEFOR0VfVFlQRV9QVVQQARIWChJDSEFOR0VfVFlQRV9ERUxFVEUQAhIVChFDSEFOR0VfVFlQRV9DTEVBUhADImQKCFByZXNlbmNlEisKBGRhdGEYASADKAsyHS55b3JraWUudjEuUHJlc2VuY2UuRGF0YUVudHJ5GisKCURhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjQKDkNoYW5uZWxTdW1tYXJ5EgsKA2tleRgBIAEoCRIVCg1zZXNzaW9uX2NvdW50GAIgASgFIjQKCkNoZWNrcG9pbnQSEgoKc2VydmVyX3NlcRgBIAEoAxISCgpjbGllbnRfc2VxGAIgASgNImEKC1RleHROb2RlUG9zEikKCmNyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIOCgZvZmZzZXQYAiABKAUSFwoPcmVsYXRpdmVfb2Zmc2V0GAMgASgFIkIKClRpbWVUaWNrZXQSDwoHbGFtcG9ydBgBIAEoAxIRCglkZWxpbWl0ZXIYAiABKA0SEAoIYWN0b3JfaWQYAyABKAwiLgoMRG9jRXZlbnRCb2R5Eg0KBXRvcGljGAEgASgJEg8KB3BheWxvYWQYAiABKAwiawoIRG9jRXZlbnQSJQoEdHlwZRgBIAEoDjIXLnlvcmtpZS52MS5Eb2NFdmVudFR5cGUSEQoJcHVibGlzaGVyGAIgASgJEiUKBGJvZHkYAyABKAsyFy55b3JraWUudjEuRG9jRXZlbnRCb2R5ItYBCgxDaGFubmVsRXZlbnQSKgoEdHlwZRgBIAEoDjIcLnlvcmtpZS52MS5DaGFubmVsRXZlbnQuVHlwZRIRCglwdWJsaXNoZXIYAiABKAkSFQoNc2Vzc2lvbl9jb3VudBgDIAEoAxILCgNzZXEYBCABKAMSDQoFdG9waWMYBSABKAkSDwoHcGF5bG9hZBgGIAEoDCJDCgRUeXBlEhQKEFRZUEVfVU5TUEVDSUZJRUQQABIRCg1UWVBFX1BSRVNFTkNFEAESEgoOVFlQRV9CUk9BRENBU1QQAiImCghEYXRhU2l6ZRIMCgRkYXRhGAEgASgFEgwKBG1ldGEYAiABKAUiTQoHRG9jU2l6ZRIhCgRsaXZlGAEgASgLMhMueW9ya2llLnYxLkRhdGFTaXplEh8KAmdjGAIgASgLMhMueW9ya2llLnYxLkRhdGFTaXplIpEBCgZTY2hlbWESCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgFEgwKBGJvZHkYBCABKAkSHgoFcnVsZXMYBSADKAsyDy55b3JraWUudjEuUnVsZRIuCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJQCgxUcmVlTm9kZVJ1bGUSEQoJbm9kZV90eXBlGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSDQoFbWFya3MYAyABKAkSDQoFZ3JvdXAYBCABKAkiTwoEUnVsZRIMCgRwYXRoGAEgASgJEgwKBHR5cGUYAiABKAkSKwoKdHJlZV9ub2RlcxgDIAMoCzIXLnlvcmtpZS52MS5UcmVlTm9kZVJ1bGUigwEKD1JldmlzaW9uU3VtbWFyeRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIQCghzbmFwc2hvdBgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCrUAgoJVmFsdWVUeXBlEhMKD1ZBTFVFX1RZUEVfTlVMTBAAEhYKElZBTFVFX1RZUEVfQk9PTEVBThABEhYKElZBTFVFX1RZUEVfSU5URUdFUhACEhMKD1ZBTFVFX1RZUEVfTE9ORxADEhUKEVZBTFVFX1RZUEVfRE9VQkxFEAQSFQoRVkFMVUVfVFlQRV9TVFJJTkcQBRIUChBWQUxVRV9UWVBFX0JZVEVTEAYSEwoPVkFMVUVfVFlQRV9EQVRFEAcSGgoWVkFMVUVfVFlQRV9KU09OX09CSkVDVBAIEhkKFVZBTFVFX1RZUEVfSlNPTl9BUlJBWRAJEhMKD1ZBTFVFX1RZUEVfVEVYVBAKEhoKFlZBTFVFX1RZUEVfSU5URUdFUl9DTlQQCxIXChNWQUxVRV9UWVBFX0xPTkdfQ05UEAwSEwoPVkFMVUVfVFlQRV9UUkVFEA0qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5795
+ const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItkaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGqQBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDQoFYWN0b3IYBCABKAkakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwinwsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrYAQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSFQoNaGxsX3JlZ2lzdGVycxgHIAEoDEoECAYQBxqpAQoEVHJlZRIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSI/CgdSSFROb2RlEgsKA2tleRgBIAEoCRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlQKB1JHQU5vZGUSIAoEbmV4dBgBIAEoCzISLnlvcmtpZS52MS5SR0FOb2RlEicKB2VsZW1lbnQYAiABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5401
5796
  const SnapshotSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 0);
5402
5797
  const ChangePackSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 1);
5403
5798
  const ChangeSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 2);
@@ -5464,6 +5859,7 @@
5464
5859
  ValueType2[ValueType2["INTEGER_CNT"] = 11] = "INTEGER_CNT";
5465
5860
  ValueType2[ValueType2["LONG_CNT"] = 12] = "LONG_CNT";
5466
5861
  ValueType2[ValueType2["TREE"] = 13] = "TREE";
5862
+ ValueType2[ValueType2["INTEGER_DEDUP_CNT"] = 14] = "INTEGER_DEDUP_CNT";
5467
5863
  return ValueType2;
5468
5864
  })(ValueType || {});
5469
5865
  var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
@@ -6609,929 +7005,38 @@
6609
7005
  return false;
6610
7006
  }
6611
7007
  isRightChild(node) {
6612
- if (node && node.hasParent()) {
6613
- return node.getParent().getRight() === node;
6614
- }
6615
- return false;
6616
- }
6617
- }
6618
- var wasm = null;
6619
- try {
6620
- wasm = new WebAssembly.Instance(
6621
- new WebAssembly.Module(
6622
- new Uint8Array([
6623
- // \0asm
6624
- 0,
6625
- 97,
6626
- 115,
6627
- 109,
6628
- // version 1
6629
- 1,
6630
- 0,
6631
- 0,
6632
- 0,
6633
- // section "type"
6634
- 1,
6635
- 13,
6636
- 2,
6637
- // 0, () => i32
6638
- 96,
6639
- 0,
6640
- 1,
6641
- 127,
6642
- // 1, (i32, i32, i32, i32) => i32
6643
- 96,
6644
- 4,
6645
- 127,
6646
- 127,
6647
- 127,
6648
- 127,
6649
- 1,
6650
- 127,
6651
- // section "function"
6652
- 3,
6653
- 7,
6654
- 6,
6655
- // 0, type 0
6656
- 0,
6657
- // 1, type 1
6658
- 1,
6659
- // 2, type 1
6660
- 1,
6661
- // 3, type 1
6662
- 1,
6663
- // 4, type 1
6664
- 1,
6665
- // 5, type 1
6666
- 1,
6667
- // section "global"
6668
- 6,
6669
- 6,
6670
- 1,
6671
- // 0, "high", mutable i32
6672
- 127,
6673
- 1,
6674
- 65,
6675
- 0,
6676
- 11,
6677
- // section "export"
6678
- 7,
6679
- 50,
6680
- 6,
6681
- // 0, "mul"
6682
- 3,
6683
- 109,
6684
- 117,
6685
- 108,
6686
- 0,
6687
- 1,
6688
- // 1, "div_s"
6689
- 5,
6690
- 100,
6691
- 105,
6692
- 118,
6693
- 95,
6694
- 115,
6695
- 0,
6696
- 2,
6697
- // 2, "div_u"
6698
- 5,
6699
- 100,
6700
- 105,
6701
- 118,
6702
- 95,
6703
- 117,
6704
- 0,
6705
- 3,
6706
- // 3, "rem_s"
6707
- 5,
6708
- 114,
6709
- 101,
6710
- 109,
6711
- 95,
6712
- 115,
6713
- 0,
6714
- 4,
6715
- // 4, "rem_u"
6716
- 5,
6717
- 114,
6718
- 101,
6719
- 109,
6720
- 95,
6721
- 117,
6722
- 0,
6723
- 5,
6724
- // 5, "get_high"
6725
- 8,
6726
- 103,
6727
- 101,
6728
- 116,
6729
- 95,
6730
- 104,
6731
- 105,
6732
- 103,
6733
- 104,
6734
- 0,
6735
- 0,
6736
- // section "code"
6737
- 10,
6738
- 191,
6739
- 1,
6740
- 6,
6741
- // 0, "get_high"
6742
- 4,
6743
- 0,
6744
- 35,
6745
- 0,
6746
- 11,
6747
- // 1, "mul"
6748
- 36,
6749
- 1,
6750
- 1,
6751
- 126,
6752
- 32,
6753
- 0,
6754
- 173,
6755
- 32,
6756
- 1,
6757
- 173,
6758
- 66,
6759
- 32,
6760
- 134,
6761
- 132,
6762
- 32,
6763
- 2,
6764
- 173,
6765
- 32,
6766
- 3,
6767
- 173,
6768
- 66,
6769
- 32,
6770
- 134,
6771
- 132,
6772
- 126,
6773
- 34,
6774
- 4,
6775
- 66,
6776
- 32,
6777
- 135,
6778
- 167,
6779
- 36,
6780
- 0,
6781
- 32,
6782
- 4,
6783
- 167,
6784
- 11,
6785
- // 2, "div_s"
6786
- 36,
6787
- 1,
6788
- 1,
6789
- 126,
6790
- 32,
6791
- 0,
6792
- 173,
6793
- 32,
6794
- 1,
6795
- 173,
6796
- 66,
6797
- 32,
6798
- 134,
6799
- 132,
6800
- 32,
6801
- 2,
6802
- 173,
6803
- 32,
6804
- 3,
6805
- 173,
6806
- 66,
6807
- 32,
6808
- 134,
6809
- 132,
6810
- 127,
6811
- 34,
6812
- 4,
6813
- 66,
6814
- 32,
6815
- 135,
6816
- 167,
6817
- 36,
6818
- 0,
6819
- 32,
6820
- 4,
6821
- 167,
6822
- 11,
6823
- // 3, "div_u"
6824
- 36,
6825
- 1,
6826
- 1,
6827
- 126,
6828
- 32,
6829
- 0,
6830
- 173,
6831
- 32,
6832
- 1,
6833
- 173,
6834
- 66,
6835
- 32,
6836
- 134,
6837
- 132,
6838
- 32,
6839
- 2,
6840
- 173,
6841
- 32,
6842
- 3,
6843
- 173,
6844
- 66,
6845
- 32,
6846
- 134,
6847
- 132,
6848
- 128,
6849
- 34,
6850
- 4,
6851
- 66,
6852
- 32,
6853
- 135,
6854
- 167,
6855
- 36,
6856
- 0,
6857
- 32,
6858
- 4,
6859
- 167,
6860
- 11,
6861
- // 4, "rem_s"
6862
- 36,
6863
- 1,
6864
- 1,
6865
- 126,
6866
- 32,
6867
- 0,
6868
- 173,
6869
- 32,
6870
- 1,
6871
- 173,
6872
- 66,
6873
- 32,
6874
- 134,
6875
- 132,
6876
- 32,
6877
- 2,
6878
- 173,
6879
- 32,
6880
- 3,
6881
- 173,
6882
- 66,
6883
- 32,
6884
- 134,
6885
- 132,
6886
- 129,
6887
- 34,
6888
- 4,
6889
- 66,
6890
- 32,
6891
- 135,
6892
- 167,
6893
- 36,
6894
- 0,
6895
- 32,
6896
- 4,
6897
- 167,
6898
- 11,
6899
- // 5, "rem_u"
6900
- 36,
6901
- 1,
6902
- 1,
6903
- 126,
6904
- 32,
6905
- 0,
6906
- 173,
6907
- 32,
6908
- 1,
6909
- 173,
6910
- 66,
6911
- 32,
6912
- 134,
6913
- 132,
6914
- 32,
6915
- 2,
6916
- 173,
6917
- 32,
6918
- 3,
6919
- 173,
6920
- 66,
6921
- 32,
6922
- 134,
6923
- 132,
6924
- 130,
6925
- 34,
6926
- 4,
6927
- 66,
6928
- 32,
6929
- 135,
6930
- 167,
6931
- 36,
6932
- 0,
6933
- 32,
6934
- 4,
6935
- 167,
6936
- 11
6937
- ])
6938
- ),
6939
- {}
6940
- ).exports;
6941
- } catch {
6942
- }
6943
- function Long(low, high, unsigned) {
6944
- this.low = low | 0;
6945
- this.high = high | 0;
6946
- this.unsigned = !!unsigned;
6947
- }
6948
- Long.prototype.__isLong__;
6949
- Object.defineProperty(Long.prototype, "__isLong__", { value: true });
6950
- function isLong$1(obj) {
6951
- return (obj && obj["__isLong__"]) === true;
6952
- }
6953
- function ctz32(value) {
6954
- var c = Math.clz32(value & -value);
6955
- return value ? 31 - c : c;
6956
- }
6957
- Long.isLong = isLong$1;
6958
- var INT_CACHE = {};
6959
- var UINT_CACHE = {};
6960
- function fromInt(value, unsigned) {
6961
- var obj, cachedObj, cache;
6962
- if (unsigned) {
6963
- value >>>= 0;
6964
- if (cache = 0 <= value && value < 256) {
6965
- cachedObj = UINT_CACHE[value];
6966
- if (cachedObj) return cachedObj;
6967
- }
6968
- obj = fromBits(value, 0, true);
6969
- if (cache) UINT_CACHE[value] = obj;
6970
- return obj;
6971
- } else {
6972
- value |= 0;
6973
- if (cache = -128 <= value && value < 128) {
6974
- cachedObj = INT_CACHE[value];
6975
- if (cachedObj) return cachedObj;
6976
- }
6977
- obj = fromBits(value, value < 0 ? -1 : 0, false);
6978
- if (cache) INT_CACHE[value] = obj;
6979
- return obj;
6980
- }
6981
- }
6982
- Long.fromInt = fromInt;
6983
- function fromNumber(value, unsigned) {
6984
- if (isNaN(value)) return unsigned ? UZERO : ZERO;
6985
- if (unsigned) {
6986
- if (value < 0) return UZERO;
6987
- if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
6988
- } else {
6989
- if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
6990
- if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
6991
- }
6992
- if (value < 0) return fromNumber(-value, unsigned).neg();
6993
- return fromBits(
6994
- value % TWO_PWR_32_DBL | 0,
6995
- value / TWO_PWR_32_DBL | 0,
6996
- unsigned
6997
- );
6998
- }
6999
- Long.fromNumber = fromNumber;
7000
- function fromBits(lowBits, highBits, unsigned) {
7001
- return new Long(lowBits, highBits, unsigned);
7002
- }
7003
- Long.fromBits = fromBits;
7004
- var pow_dbl = Math.pow;
7005
- function fromString(str, unsigned, radix) {
7006
- if (str.length === 0) throw Error("empty string");
7007
- if (typeof unsigned === "number") {
7008
- radix = unsigned;
7009
- unsigned = false;
7010
- } else {
7011
- unsigned = !!unsigned;
7012
- }
7013
- if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
7014
- return unsigned ? UZERO : ZERO;
7015
- radix = radix || 10;
7016
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7017
- var p;
7018
- if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen");
7019
- else if (p === 0) {
7020
- return fromString(str.substring(1), unsigned, radix).neg();
7021
- }
7022
- var radixToPower = fromNumber(pow_dbl(radix, 8));
7023
- var result = ZERO;
7024
- for (var i = 0; i < str.length; i += 8) {
7025
- var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);
7026
- if (size < 8) {
7027
- var power = fromNumber(pow_dbl(radix, size));
7028
- result = result.mul(power).add(fromNumber(value));
7029
- } else {
7030
- result = result.mul(radixToPower);
7031
- result = result.add(fromNumber(value));
7032
- }
7033
- }
7034
- result.unsigned = unsigned;
7035
- return result;
7036
- }
7037
- Long.fromString = fromString;
7038
- function fromValue(val, unsigned) {
7039
- if (typeof val === "number") return fromNumber(val, unsigned);
7040
- if (typeof val === "string") return fromString(val, unsigned);
7041
- return fromBits(
7042
- val.low,
7043
- val.high,
7044
- typeof unsigned === "boolean" ? unsigned : val.unsigned
7045
- );
7046
- }
7047
- Long.fromValue = fromValue;
7048
- var TWO_PWR_16_DBL = 1 << 16;
7049
- var TWO_PWR_24_DBL = 1 << 24;
7050
- var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
7051
- var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
7052
- var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
7053
- var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
7054
- var ZERO = fromInt(0);
7055
- Long.ZERO = ZERO;
7056
- var UZERO = fromInt(0, true);
7057
- Long.UZERO = UZERO;
7058
- var ONE = fromInt(1);
7059
- Long.ONE = ONE;
7060
- var UONE = fromInt(1, true);
7061
- Long.UONE = UONE;
7062
- var NEG_ONE = fromInt(-1);
7063
- Long.NEG_ONE = NEG_ONE;
7064
- var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false);
7065
- Long.MAX_VALUE = MAX_VALUE;
7066
- var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true);
7067
- Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
7068
- var MIN_VALUE = fromBits(0, 2147483648 | 0, false);
7069
- Long.MIN_VALUE = MIN_VALUE;
7070
- var LongPrototype = Long.prototype;
7071
- LongPrototype.toInt = function toInt() {
7072
- return this.unsigned ? this.low >>> 0 : this.low;
7073
- };
7074
- LongPrototype.toNumber = function toNumber() {
7075
- if (this.unsigned)
7076
- return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
7077
- return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
7078
- };
7079
- LongPrototype.toString = function toString(radix) {
7080
- radix = radix || 10;
7081
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7082
- if (this.isZero()) return "0";
7083
- if (this.isNegative()) {
7084
- if (this.eq(MIN_VALUE)) {
7085
- var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this);
7086
- return div.toString(radix) + rem1.toInt().toString(radix);
7087
- } else return "-" + this.neg().toString(radix);
7088
- }
7089
- var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this;
7090
- var result = "";
7091
- while (true) {
7092
- var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix);
7093
- rem = remDiv;
7094
- if (rem.isZero()) return digits + result;
7095
- else {
7096
- while (digits.length < 6) digits = "0" + digits;
7097
- result = "" + digits + result;
7098
- }
7099
- }
7100
- };
7101
- LongPrototype.getHighBits = function getHighBits() {
7102
- return this.high;
7103
- };
7104
- LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
7105
- return this.high >>> 0;
7106
- };
7107
- LongPrototype.getLowBits = function getLowBits() {
7108
- return this.low;
7109
- };
7110
- LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
7111
- return this.low >>> 0;
7112
- };
7113
- LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
7114
- if (this.isNegative())
7115
- return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
7116
- var val = this.high != 0 ? this.high : this.low;
7117
- for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
7118
- return this.high != 0 ? bit + 33 : bit + 1;
7119
- };
7120
- LongPrototype.isSafeInteger = function isSafeInteger() {
7121
- var top11Bits = this.high >> 21;
7122
- if (!top11Bits) return true;
7123
- if (this.unsigned) return false;
7124
- return top11Bits === -1 && !(this.low === 0 && this.high === -2097152);
7125
- };
7126
- LongPrototype.isZero = function isZero() {
7127
- return this.high === 0 && this.low === 0;
7128
- };
7129
- LongPrototype.eqz = LongPrototype.isZero;
7130
- LongPrototype.isNegative = function isNegative() {
7131
- return !this.unsigned && this.high < 0;
7132
- };
7133
- LongPrototype.isPositive = function isPositive() {
7134
- return this.unsigned || this.high >= 0;
7135
- };
7136
- LongPrototype.isOdd = function isOdd() {
7137
- return (this.low & 1) === 1;
7138
- };
7139
- LongPrototype.isEven = function isEven() {
7140
- return (this.low & 1) === 0;
7141
- };
7142
- LongPrototype.equals = function equals(other) {
7143
- if (!isLong$1(other)) other = fromValue(other);
7144
- if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1)
7145
- return false;
7146
- return this.high === other.high && this.low === other.low;
7147
- };
7148
- LongPrototype.eq = LongPrototype.equals;
7149
- LongPrototype.notEquals = function notEquals(other) {
7150
- return !this.eq(
7151
- /* validates */
7152
- other
7153
- );
7154
- };
7155
- LongPrototype.neq = LongPrototype.notEquals;
7156
- LongPrototype.ne = LongPrototype.notEquals;
7157
- LongPrototype.lessThan = function lessThan(other) {
7158
- return this.comp(
7159
- /* validates */
7160
- other
7161
- ) < 0;
7162
- };
7163
- LongPrototype.lt = LongPrototype.lessThan;
7164
- LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
7165
- return this.comp(
7166
- /* validates */
7167
- other
7168
- ) <= 0;
7169
- };
7170
- LongPrototype.lte = LongPrototype.lessThanOrEqual;
7171
- LongPrototype.le = LongPrototype.lessThanOrEqual;
7172
- LongPrototype.greaterThan = function greaterThan(other) {
7173
- return this.comp(
7174
- /* validates */
7175
- other
7176
- ) > 0;
7177
- };
7178
- LongPrototype.gt = LongPrototype.greaterThan;
7179
- LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
7180
- return this.comp(
7181
- /* validates */
7182
- other
7183
- ) >= 0;
7184
- };
7185
- LongPrototype.gte = LongPrototype.greaterThanOrEqual;
7186
- LongPrototype.ge = LongPrototype.greaterThanOrEqual;
7187
- LongPrototype.compare = function compare(other) {
7188
- if (!isLong$1(other)) other = fromValue(other);
7189
- if (this.eq(other)) return 0;
7190
- var thisNeg = this.isNegative(), otherNeg = other.isNegative();
7191
- if (thisNeg && !otherNeg) return -1;
7192
- if (!thisNeg && otherNeg) return 1;
7193
- if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
7194
- return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
7195
- };
7196
- LongPrototype.comp = LongPrototype.compare;
7197
- LongPrototype.negate = function negate2() {
7198
- if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
7199
- return this.not().add(ONE);
7200
- };
7201
- LongPrototype.neg = LongPrototype.negate;
7202
- LongPrototype.add = function add(addend) {
7203
- if (!isLong$1(addend)) addend = fromValue(addend);
7204
- var a48 = this.high >>> 16;
7205
- var a32 = this.high & 65535;
7206
- var a16 = this.low >>> 16;
7207
- var a00 = this.low & 65535;
7208
- var b48 = addend.high >>> 16;
7209
- var b32 = addend.high & 65535;
7210
- var b16 = addend.low >>> 16;
7211
- var b00 = addend.low & 65535;
7212
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7213
- c00 += a00 + b00;
7214
- c16 += c00 >>> 16;
7215
- c00 &= 65535;
7216
- c16 += a16 + b16;
7217
- c32 += c16 >>> 16;
7218
- c16 &= 65535;
7219
- c32 += a32 + b32;
7220
- c48 += c32 >>> 16;
7221
- c32 &= 65535;
7222
- c48 += a48 + b48;
7223
- c48 &= 65535;
7224
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7225
- };
7226
- LongPrototype.subtract = function subtract(subtrahend) {
7227
- if (!isLong$1(subtrahend)) subtrahend = fromValue(subtrahend);
7228
- return this.add(subtrahend.neg());
7229
- };
7230
- LongPrototype.sub = LongPrototype.subtract;
7231
- LongPrototype.multiply = function multiply(multiplier) {
7232
- if (this.isZero()) return this;
7233
- if (!isLong$1(multiplier)) multiplier = fromValue(multiplier);
7234
- if (wasm) {
7235
- var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
7236
- return fromBits(low, wasm["get_high"](), this.unsigned);
7237
- }
7238
- if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
7239
- if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
7240
- if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
7241
- if (this.isNegative()) {
7242
- if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());
7243
- else return this.neg().mul(multiplier).neg();
7244
- } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
7245
- if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
7246
- return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
7247
- var a48 = this.high >>> 16;
7248
- var a32 = this.high & 65535;
7249
- var a16 = this.low >>> 16;
7250
- var a00 = this.low & 65535;
7251
- var b48 = multiplier.high >>> 16;
7252
- var b32 = multiplier.high & 65535;
7253
- var b16 = multiplier.low >>> 16;
7254
- var b00 = multiplier.low & 65535;
7255
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7256
- c00 += a00 * b00;
7257
- c16 += c00 >>> 16;
7258
- c00 &= 65535;
7259
- c16 += a16 * b00;
7260
- c32 += c16 >>> 16;
7261
- c16 &= 65535;
7262
- c16 += a00 * b16;
7263
- c32 += c16 >>> 16;
7264
- c16 &= 65535;
7265
- c32 += a32 * b00;
7266
- c48 += c32 >>> 16;
7267
- c32 &= 65535;
7268
- c32 += a16 * b16;
7269
- c48 += c32 >>> 16;
7270
- c32 &= 65535;
7271
- c32 += a00 * b32;
7272
- c48 += c32 >>> 16;
7273
- c32 &= 65535;
7274
- c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
7275
- c48 &= 65535;
7276
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7277
- };
7278
- LongPrototype.mul = LongPrototype.multiply;
7279
- LongPrototype.divide = function divide(divisor) {
7280
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7281
- if (divisor.isZero()) throw Error("division by zero");
7282
- if (wasm) {
7283
- if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) {
7284
- return this;
7285
- }
7286
- var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(
7287
- this.low,
7288
- this.high,
7289
- divisor.low,
7290
- divisor.high
7291
- );
7292
- return fromBits(low, wasm["get_high"](), this.unsigned);
7293
- }
7294
- if (this.isZero()) return this.unsigned ? UZERO : ZERO;
7295
- var approx, rem, res;
7296
- if (!this.unsigned) {
7297
- if (this.eq(MIN_VALUE)) {
7298
- if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
7299
- return MIN_VALUE;
7300
- else if (divisor.eq(MIN_VALUE)) return ONE;
7301
- else {
7302
- var halfThis = this.shr(1);
7303
- approx = halfThis.div(divisor).shl(1);
7304
- if (approx.eq(ZERO)) {
7305
- return divisor.isNegative() ? ONE : NEG_ONE;
7306
- } else {
7307
- rem = this.sub(divisor.mul(approx));
7308
- res = approx.add(rem.div(divisor));
7309
- return res;
7310
- }
7311
- }
7312
- } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
7313
- if (this.isNegative()) {
7314
- if (divisor.isNegative()) return this.neg().div(divisor.neg());
7315
- return this.neg().div(divisor).neg();
7316
- } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
7317
- res = ZERO;
7318
- } else {
7319
- if (!divisor.unsigned) divisor = divisor.toUnsigned();
7320
- if (divisor.gt(this)) return UZERO;
7321
- if (divisor.gt(this.shru(1)))
7322
- return UONE;
7323
- res = UZERO;
7324
- }
7325
- rem = this;
7326
- while (rem.gte(divisor)) {
7327
- approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
7328
- var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor);
7329
- while (approxRem.isNegative() || approxRem.gt(rem)) {
7330
- approx -= delta;
7331
- approxRes = fromNumber(approx, this.unsigned);
7332
- approxRem = approxRes.mul(divisor);
7333
- }
7334
- if (approxRes.isZero()) approxRes = ONE;
7335
- res = res.add(approxRes);
7336
- rem = rem.sub(approxRem);
7337
- }
7338
- return res;
7339
- };
7340
- LongPrototype.div = LongPrototype.divide;
7341
- LongPrototype.modulo = function modulo(divisor) {
7342
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7343
- if (wasm) {
7344
- var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(
7345
- this.low,
7346
- this.high,
7347
- divisor.low,
7348
- divisor.high
7349
- );
7350
- return fromBits(low, wasm["get_high"](), this.unsigned);
7351
- }
7352
- return this.sub(this.div(divisor).mul(divisor));
7353
- };
7354
- LongPrototype.mod = LongPrototype.modulo;
7355
- LongPrototype.rem = LongPrototype.modulo;
7356
- LongPrototype.not = function not() {
7357
- return fromBits(~this.low, ~this.high, this.unsigned);
7358
- };
7359
- LongPrototype.countLeadingZeros = function countLeadingZeros() {
7360
- return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
7361
- };
7362
- LongPrototype.clz = LongPrototype.countLeadingZeros;
7363
- LongPrototype.countTrailingZeros = function countTrailingZeros() {
7364
- return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
7365
- };
7366
- LongPrototype.ctz = LongPrototype.countTrailingZeros;
7367
- LongPrototype.and = function and(other) {
7368
- if (!isLong$1(other)) other = fromValue(other);
7369
- return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
7370
- };
7371
- LongPrototype.or = function or(other) {
7372
- if (!isLong$1(other)) other = fromValue(other);
7373
- return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
7374
- };
7375
- LongPrototype.xor = function xor(other) {
7376
- if (!isLong$1(other)) other = fromValue(other);
7377
- return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
7378
- };
7379
- LongPrototype.shiftLeft = function shiftLeft(numBits) {
7380
- if (isLong$1(numBits)) numBits = numBits.toInt();
7381
- if ((numBits &= 63) === 0) return this;
7382
- else if (numBits < 32)
7383
- return fromBits(
7384
- this.low << numBits,
7385
- this.high << numBits | this.low >>> 32 - numBits,
7386
- this.unsigned
7387
- );
7388
- else return fromBits(0, this.low << numBits - 32, this.unsigned);
7389
- };
7390
- LongPrototype.shl = LongPrototype.shiftLeft;
7391
- LongPrototype.shiftRight = function shiftRight(numBits) {
7392
- if (isLong$1(numBits)) numBits = numBits.toInt();
7393
- if ((numBits &= 63) === 0) return this;
7394
- else if (numBits < 32)
7395
- return fromBits(
7396
- this.low >>> numBits | this.high << 32 - numBits,
7397
- this.high >> numBits,
7398
- this.unsigned
7399
- );
7400
- else
7401
- return fromBits(
7402
- this.high >> numBits - 32,
7403
- this.high >= 0 ? 0 : -1,
7404
- this.unsigned
7405
- );
7406
- };
7407
- LongPrototype.shr = LongPrototype.shiftRight;
7408
- LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
7409
- if (isLong$1(numBits)) numBits = numBits.toInt();
7410
- if ((numBits &= 63) === 0) return this;
7411
- if (numBits < 32)
7412
- return fromBits(
7413
- this.low >>> numBits | this.high << 32 - numBits,
7414
- this.high >>> numBits,
7415
- this.unsigned
7416
- );
7417
- if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
7418
- return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
7419
- };
7420
- LongPrototype.shru = LongPrototype.shiftRightUnsigned;
7421
- LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
7422
- LongPrototype.rotateLeft = function rotateLeft(numBits) {
7423
- var b;
7424
- if (isLong$1(numBits)) numBits = numBits.toInt();
7425
- if ((numBits &= 63) === 0) return this;
7426
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7427
- if (numBits < 32) {
7428
- b = 32 - numBits;
7429
- return fromBits(
7430
- this.low << numBits | this.high >>> b,
7431
- this.high << numBits | this.low >>> b,
7432
- this.unsigned
7433
- );
7008
+ if (node && node.hasParent()) {
7009
+ return node.getParent().getRight() === node;
7010
+ }
7011
+ return false;
7434
7012
  }
7435
- numBits -= 32;
7436
- b = 32 - numBits;
7437
- return fromBits(
7438
- this.high << numBits | this.low >>> b,
7439
- this.low << numBits | this.high >>> b,
7440
- this.unsigned
7441
- );
7442
- };
7443
- LongPrototype.rotl = LongPrototype.rotateLeft;
7444
- LongPrototype.rotateRight = function rotateRight(numBits) {
7445
- var b;
7446
- if (isLong$1(numBits)) numBits = numBits.toInt();
7447
- if ((numBits &= 63) === 0) return this;
7448
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7449
- if (numBits < 32) {
7450
- b = 32 - numBits;
7451
- return fromBits(
7452
- this.high << b | this.low >>> numBits,
7453
- this.low << b | this.high >>> numBits,
7454
- this.unsigned
7455
- );
7013
+ }
7014
+ const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
7015
+ function bigintToBytesLE(value) {
7016
+ const buf = new Uint8Array(8);
7017
+ let v = BigInt.asUintN(64, value);
7018
+ for (let i = 0; i < 8; i++) {
7019
+ buf[i] = Number(v & 0xffn);
7020
+ v >>= 8n;
7456
7021
  }
7457
- numBits -= 32;
7458
- b = 32 - numBits;
7459
- return fromBits(
7460
- this.low << b | this.high >>> numBits,
7461
- this.high << b | this.low >>> numBits,
7462
- this.unsigned
7463
- );
7464
- };
7465
- LongPrototype.rotr = LongPrototype.rotateRight;
7466
- LongPrototype.toSigned = function toSigned() {
7467
- if (!this.unsigned) return this;
7468
- return fromBits(this.low, this.high, false);
7469
- };
7470
- LongPrototype.toUnsigned = function toUnsigned2() {
7471
- if (this.unsigned) return this;
7472
- return fromBits(this.low, this.high, true);
7473
- };
7474
- LongPrototype.toBytes = function toBytes(le) {
7475
- return le ? this.toBytesLE() : this.toBytesBE();
7476
- };
7477
- LongPrototype.toBytesLE = function toBytesLE() {
7478
- var hi = this.high, lo = this.low;
7479
- return [
7480
- lo & 255,
7481
- lo >>> 8 & 255,
7482
- lo >>> 16 & 255,
7483
- lo >>> 24,
7484
- hi & 255,
7485
- hi >>> 8 & 255,
7486
- hi >>> 16 & 255,
7487
- hi >>> 24
7488
- ];
7489
- };
7490
- LongPrototype.toBytesBE = function toBytesBE() {
7491
- var hi = this.high, lo = this.low;
7492
- return [
7493
- hi >>> 24,
7494
- hi >>> 16 & 255,
7495
- hi >>> 8 & 255,
7496
- hi & 255,
7497
- lo >>> 24,
7498
- lo >>> 16 & 255,
7499
- lo >>> 8 & 255,
7500
- lo & 255
7501
- ];
7502
- };
7503
- Long.fromBytes = function fromBytes(bytes, unsigned, le) {
7504
- return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
7505
- };
7506
- Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
7507
- return new Long(
7508
- bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24,
7509
- bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24,
7510
- unsigned
7511
- );
7512
- };
7513
- Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
7514
- return new Long(
7515
- bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7],
7516
- bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3],
7517
- unsigned
7518
- );
7519
- };
7520
- if (typeof BigInt === "function") {
7521
- Long.fromBigInt = function fromBigInt(value, unsigned) {
7522
- var lowBits = Number(BigInt.asIntN(32, value));
7523
- var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));
7524
- return fromBits(lowBits, highBits, unsigned);
7525
- };
7526
- Long.fromValue = function fromValueWithBigInt(value, unsigned) {
7527
- if (typeof value === "bigint") return Long.fromBigInt(value, unsigned);
7528
- return fromValue(value, unsigned);
7529
- };
7530
- LongPrototype.toBigInt = function toBigInt() {
7531
- var lowBigInt = BigInt(this.low >>> 0);
7532
- var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);
7533
- return highBigInt << BigInt(32) | lowBigInt;
7534
- };
7022
+ return buf;
7023
+ }
7024
+ function bigintFromBytesLE(bytes) {
7025
+ let v = 0n;
7026
+ for (let i = 7; i >= 0; i--) {
7027
+ v = v << 8n | BigInt(bytes[i]);
7028
+ }
7029
+ return BigInt.asIntN(64, v);
7030
+ }
7031
+ function bigintFromBytesLEUnsigned(bytes) {
7032
+ let v = 0n;
7033
+ for (let i = 7; i >= 0; i--) {
7034
+ v = v << 8n | BigInt(bytes[i]);
7035
+ }
7036
+ return v;
7037
+ }
7038
+ function bigintToInt32(value) {
7039
+ return Number(BigInt.asIntN(32, value));
7535
7040
  }
7536
7041
  var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
7537
7042
  PrimitiveType2[PrimitiveType2["Null"] = 0] = "Null";
@@ -7579,11 +7084,11 @@
7579
7084
  case 5:
7580
7085
  return new TextDecoder("utf-8").decode(bytes);
7581
7086
  case 3:
7582
- return Long.fromBytesLE(Array.from(bytes));
7087
+ return bigintFromBytesLE(bytes);
7583
7088
  case 6:
7584
7089
  return bytes;
7585
7090
  case 7:
7586
- return new Date(Long.fromBytesLE(Array.from(bytes), true).toNumber());
7091
+ return new Date(Number(bigintFromBytesLEUnsigned(bytes)));
7587
7092
  default:
7588
7093
  throw new YorkieError(
7589
7094
  Code.ErrUnimplemented,
@@ -7684,13 +7189,13 @@
7684
7189
  } else {
7685
7190
  return 4;
7686
7191
  }
7192
+ case "bigint":
7193
+ return 3;
7687
7194
  case "string":
7688
7195
  return 5;
7689
7196
  case "object":
7690
7197
  if (value === null) {
7691
7198
  return 0;
7692
- } else if (value instanceof Long) {
7693
- return 3;
7694
7199
  } else if (value instanceof Uint8Array) {
7695
7200
  return 6;
7696
7201
  } else if (value instanceof Date) {
@@ -7760,9 +7265,7 @@
7760
7265
  return new TextEncoder().encode(this.value);
7761
7266
  }
7762
7267
  case 3: {
7763
- const longVal = this.value;
7764
- const longToBytes = longVal.toBytesLE();
7765
- return Uint8Array.from(longToBytes);
7268
+ return bigintToBytesLE(this.value);
7766
7269
  }
7767
7270
  case 6: {
7768
7271
  const bytesVal = this.value;
@@ -7770,11 +7273,7 @@
7770
7273
  }
7771
7274
  case 7: {
7772
7275
  const dateVal = this.value;
7773
- const dateToBytes = Long.fromNumber(
7774
- dateVal.getTime(),
7775
- true
7776
- ).toBytesLE();
7777
- return Uint8Array.from(dateToBytes);
7276
+ return bigintToBytesLE(BigInt(dateVal.getTime()));
7778
7277
  }
7779
7278
  default:
7780
7279
  throw new YorkieError(
@@ -11320,7 +10819,7 @@
11320
10819
  this._children = left;
11321
10820
  clone._children = actualRight;
11322
10821
  this.visibleSize = this._children.reduce(
11323
- (acc, child) => acc + child.paddedSize(),
10822
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11324
10823
  0
11325
10824
  );
11326
10825
  this.totalSize = this._children.reduce(
@@ -11328,7 +10827,7 @@
11328
10827
  0
11329
10828
  );
11330
10829
  clone.visibleSize = clone._children.reduce(
11331
- (acc, child) => acc + child.paddedSize(),
10830
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11332
10831
  0
11333
10832
  );
11334
10833
  clone.totalSize = clone._children.reduce(
@@ -12437,6 +11936,9 @@
12437
11936
  const changes = [];
12438
11937
  const attrs = attributes ? parseObjectValues(attributes) : {};
12439
11938
  const pairs = [];
11939
+ const prevAttributes = /* @__PURE__ */ new Map();
11940
+ const newAttrKeys = [];
11941
+ let capturedPrev = false;
12440
11942
  this.traverseInPosRange(
12441
11943
  fromParent,
12442
11944
  fromLeft,
@@ -12452,6 +11954,16 @@
12452
11954
  if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
12453
11955
  return;
12454
11956
  }
11957
+ if (!capturedPrev) {
11958
+ for (const key of Object.keys(attributes)) {
11959
+ if (node.attrs?.has(key)) {
11960
+ prevAttributes.set(key, node.attrs.get(key));
11961
+ } else {
11962
+ newAttrKeys.push(key);
11963
+ }
11964
+ }
11965
+ capturedPrev = true;
11966
+ }
12455
11967
  const updatedAttrPairs = node.setAttrs(attributes, editedAt);
12456
11968
  const affectedAttrs = updatedAttrPairs.reduce(
12457
11969
  (acc, [, curr]) => {
@@ -12490,7 +12002,7 @@
12490
12002
  }
12491
12003
  }
12492
12004
  );
12493
- return [pairs, changes, diff];
12005
+ return [pairs, changes, diff, prevAttributes, newAttrKeys];
12494
12006
  }
12495
12007
  /**
12496
12008
  * `removeStyle` removes the given attributes of the given range.
@@ -12508,6 +12020,8 @@
12508
12020
  addDataSizes(diff, diffTo, diffFrom);
12509
12021
  const changes = [];
12510
12022
  const pairs = [];
12023
+ const prevAttributes = /* @__PURE__ */ new Map();
12024
+ let capturedPrev = false;
12511
12025
  this.traverseInPosRange(
12512
12026
  fromParent,
12513
12027
  fromLeft,
@@ -12526,6 +12040,14 @@
12526
12040
  if (!node.attrs) {
12527
12041
  node.attrs = new RHT();
12528
12042
  }
12043
+ if (!capturedPrev) {
12044
+ for (const key of attributesToRemove) {
12045
+ if (node.attrs.has(key)) {
12046
+ prevAttributes.set(key, node.attrs.get(key));
12047
+ }
12048
+ }
12049
+ capturedPrev = true;
12050
+ }
12529
12051
  for (const value of attributesToRemove) {
12530
12052
  const nodesTobeRemoved = node.attrs.remove(value, editedAt);
12531
12053
  for (const rhtNode of nodesTobeRemoved) {
@@ -12546,7 +12068,7 @@
12546
12068
  }
12547
12069
  }
12548
12070
  );
12549
- return [pairs, changes, diff];
12071
+ return [pairs, changes, diff, prevAttributes];
12550
12072
  }
12551
12073
  /**
12552
12074
  * `edit` edits the tree with the given range and content.
@@ -12680,7 +12202,7 @@
12680
12202
  while (splitCount < splitLevel) {
12681
12203
  parent.split(
12682
12204
  this,
12683
- parent.findOffset(left) + 1,
12205
+ parent.findOffset(left, true) + 1,
12684
12206
  issueTimeTicket,
12685
12207
  versionVector
12686
12208
  );
@@ -13194,6 +12716,13 @@
13194
12716
  toIdx;
13195
12717
  lastFromIdx;
13196
12718
  lastToIdx;
12719
+ /**
12720
+ * `redoSplitLevel` is set on boundary-deletion undo ops that were generated
12721
+ * to reverse a split. When this op executes (as undo), `toReverseOperation`
12722
+ * uses this value to generate a proper split op for redo, rather than
12723
+ * re-inserting the raw tombstoned boundary nodes as content.
12724
+ */
12725
+ redoSplitLevel;
13197
12726
  constructor(parentCreatedAt, fromPos, toPos, contents, splitLevel, executedAt, isUndoOp, fromIdx, toIdx) {
13198
12727
  super(parentCreatedAt, executedAt);
13199
12728
  this.fromPos = fromPos;
@@ -13279,7 +12808,13 @@
13279
12808
  0
13280
12809
  );
13281
12810
  this.lastToIdx = preEditFromIdx + removedSize;
13282
- const reverseOp = this.splitLevel === 0 ? this.toReverseOperation(tree, removedNodes, preEditFromIdx) : void 0;
12811
+ let reverseOp;
12812
+ const isPureL1Split = this.splitLevel === 1 && !this.contents?.length && removedNodes.length === 0;
12813
+ if (this.splitLevel === 0) {
12814
+ reverseOp = this.toReverseOperation(tree, removedNodes, preEditFromIdx);
12815
+ } else if (isPureL1Split) {
12816
+ reverseOp = this.toSplitReverseOperation(tree, preEditFromIdx);
12817
+ }
13283
12818
  root.acc(diff);
13284
12819
  for (const pair of pairs) {
13285
12820
  root.registerGCPair(pair);
@@ -13315,6 +12850,24 @@
13315
12850
  * @param preEditFromIdx - The from index captured BEFORE the edit
13316
12851
  */
13317
12852
  toReverseOperation(tree, removedNodes, preEditFromIdx) {
12853
+ if (this.redoSplitLevel !== void 0 && this.redoSplitLevel > 0) {
12854
+ const splitRedoFromPos = tree.findPos(preEditFromIdx);
12855
+ const splitRedoOp = TreeEditOperation.create(
12856
+ this.getParentCreatedAt(),
12857
+ splitRedoFromPos,
12858
+ splitRedoFromPos,
12859
+ void 0,
12860
+ // no inserted content
12861
+ this.redoSplitLevel,
12862
+ void 0,
12863
+ // executedAt assigned at redo time
12864
+ true,
12865
+ // isUndoOp (treated as undo/redo op)
12866
+ preEditFromIdx,
12867
+ preEditFromIdx
12868
+ );
12869
+ return splitRedoOp;
12870
+ }
13318
12871
  const insertedContentSize = this.contents ? this.contents.reduce((sum, node) => sum + node.paddedSize(), 0) : 0;
13319
12872
  const maxNeededIdx = preEditFromIdx + insertedContentSize;
13320
12873
  if (maxNeededIdx > tree.getSize()) {
@@ -13352,6 +12905,45 @@
13352
12905
  reverseToIdx
13353
12906
  );
13354
12907
  }
12908
+ /**
12909
+ * `toSplitReverseOperation` creates the reverse operation for a split edit.
12910
+ *
12911
+ * A split creates element boundaries (close + open tags). The reverse
12912
+ * is a boundary deletion: a splitLevel=0 edit that removes those tokens,
12913
+ * merging the split elements back together.
12914
+ *
12915
+ * boundarySize = 2 * splitLevel (each level creates 1 close + 1 open tag)
12916
+ *
12917
+ * @param tree - The CRDTTree after the split has been applied
12918
+ * @param preEditFromIdx - The from index captured BEFORE the split
12919
+ */
12920
+ toSplitReverseOperation(tree, preEditFromIdx) {
12921
+ const boundarySize = 2 * this.splitLevel;
12922
+ const reverseFromIdx = preEditFromIdx;
12923
+ const reverseToIdx = preEditFromIdx + boundarySize;
12924
+ if (reverseToIdx > tree.getSize()) {
12925
+ return void 0;
12926
+ }
12927
+ const reverseFromPos = tree.findPos(reverseFromIdx);
12928
+ const reverseToPos = tree.findPos(reverseToIdx);
12929
+ const boundaryDeletionOp = TreeEditOperation.create(
12930
+ this.getParentCreatedAt(),
12931
+ reverseFromPos,
12932
+ reverseToPos,
12933
+ void 0,
12934
+ // no content — this is a deletion
12935
+ 0,
12936
+ // splitLevel=0: boundary deletion
12937
+ void 0,
12938
+ // executedAt assigned at undo time
12939
+ true,
12940
+ // isUndoOp
12941
+ reverseFromIdx,
12942
+ reverseToIdx
12943
+ );
12944
+ boundaryDeletionOp.redoSplitLevel = this.splitLevel;
12945
+ return boundaryDeletionOp;
12946
+ }
13355
12947
  /**
13356
12948
  * `normalizePos` returns the visible-index range of this operation.
13357
12949
  * For undo ops, returns the stored (possibly reconciled) indices.
@@ -14057,35 +13649,196 @@
14057
13649
  }
14058
13650
  }
14059
13651
  const InitialCheckpoint = new Checkpoint(0n, 0);
14060
- const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
13652
+ const hllPrecision = 14;
13653
+ const hllRegisterCount = 1 << hllPrecision;
13654
+ const prime64x1 = 0x9e3779b185ebca87n;
13655
+ const prime64x2 = 0xc2b2ae3d27d4eb4fn;
13656
+ const prime64x3 = 0x165667b19e3779f9n;
13657
+ const prime64x4 = 0x85ebca77c2b2ae63n;
13658
+ const prime64x5 = 0x27d4eb2f165667c5n;
13659
+ const mask64 = 0xffffffffffffffffn;
13660
+ class HLL {
13661
+ registers;
13662
+ constructor() {
13663
+ this.registers = new Uint8Array(hllRegisterCount);
13664
+ }
13665
+ /**
13666
+ * `add` adds a value to the HLL and returns true if the register was updated.
13667
+ */
13668
+ add(value) {
13669
+ const hash = xxhash64(value);
13670
+ const idx = Number(hash >> BigInt(64 - hllPrecision));
13671
+ const remaining = hash << BigInt(hllPrecision) & mask64 | 1n << BigInt(hllPrecision - 1);
13672
+ const rho = countLeadingZeros64(remaining) + 1;
13673
+ if (rho > this.registers[idx]) {
13674
+ this.registers[idx] = rho;
13675
+ return true;
13676
+ }
13677
+ return false;
13678
+ }
13679
+ /**
13680
+ * `count` returns the approximate cardinality estimate.
13681
+ */
13682
+ count() {
13683
+ const m = hllRegisterCount;
13684
+ const alpha = 0.7213 / (1 + 1.079 / m);
13685
+ let sum = 0;
13686
+ let zeros = 0;
13687
+ for (let i = 0; i < m; i++) {
13688
+ sum += Math.pow(2, -this.registers[i]);
13689
+ if (this.registers[i] === 0) zeros++;
13690
+ }
13691
+ let estimate = alpha * m * m / sum;
13692
+ if (estimate <= 2.5 * m && zeros > 0) {
13693
+ estimate = m * Math.log(m / zeros);
13694
+ }
13695
+ return Math.round(estimate);
13696
+ }
13697
+ /**
13698
+ * `merge` merges another HLL into this one by taking the max of each register.
13699
+ * This operation is commutative, associative, and idempotent.
13700
+ */
13701
+ merge(other) {
13702
+ for (let i = 0; i < hllRegisterCount; i++) {
13703
+ if (other.registers[i] > this.registers[i]) {
13704
+ this.registers[i] = other.registers[i];
13705
+ }
13706
+ }
13707
+ }
13708
+ /**
13709
+ * `toBytes` serializes the HLL registers to a byte array.
13710
+ */
13711
+ toBytes() {
13712
+ return new Uint8Array(this.registers);
13713
+ }
13714
+ /**
13715
+ * `restore` restores the HLL registers from a byte array.
13716
+ * Throws if the data length does not match the register count.
13717
+ */
13718
+ restore(data) {
13719
+ if (data.length !== hllRegisterCount) {
13720
+ throw new Error(
13721
+ `invalid HLL register payload: got ${data.length} bytes, want ${hllRegisterCount}`
13722
+ );
13723
+ }
13724
+ this.registers.set(data);
13725
+ }
13726
+ }
13727
+ function xxhash64(input) {
13728
+ const buf = new TextEncoder().encode(input);
13729
+ const len = buf.length;
13730
+ let h64;
13731
+ let offset = 0;
13732
+ const seed = 0n;
13733
+ if (len >= 32) {
13734
+ let v1 = seed + prime64x1 + prime64x2 & mask64;
13735
+ let v2 = seed + prime64x2 & mask64;
13736
+ let v3 = seed;
13737
+ let v4 = seed - prime64x1 & mask64;
13738
+ while (offset <= len - 32) {
13739
+ v1 = xxRound(v1, readU64LE(buf, offset));
13740
+ offset += 8;
13741
+ v2 = xxRound(v2, readU64LE(buf, offset));
13742
+ offset += 8;
13743
+ v3 = xxRound(v3, readU64LE(buf, offset));
13744
+ offset += 8;
13745
+ v4 = xxRound(v4, readU64LE(buf, offset));
13746
+ offset += 8;
13747
+ }
13748
+ h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & mask64;
13749
+ h64 = xxMergeRound(h64, v1);
13750
+ h64 = xxMergeRound(h64, v2);
13751
+ h64 = xxMergeRound(h64, v3);
13752
+ h64 = xxMergeRound(h64, v4);
13753
+ } else {
13754
+ h64 = seed + prime64x5 & mask64;
13755
+ }
13756
+ h64 = h64 + BigInt(len) & mask64;
13757
+ while (offset + 8 <= len) {
13758
+ const k1 = xxRound(0n, readU64LE(buf, offset));
13759
+ h64 = rotl64(h64 ^ k1, 27n) * prime64x1 + prime64x4 & mask64;
13760
+ offset += 8;
13761
+ }
13762
+ if (offset + 4 <= len) {
13763
+ h64 = h64 ^ readU32LE(buf, offset) * prime64x1 & mask64;
13764
+ h64 = rotl64(h64, 23n) * prime64x2 + prime64x3 & mask64;
13765
+ offset += 4;
13766
+ }
13767
+ while (offset < len) {
13768
+ h64 = h64 ^ BigInt(buf[offset]) * prime64x5 & mask64;
13769
+ h64 = rotl64(h64, 11n) * prime64x1 & mask64;
13770
+ offset++;
13771
+ }
13772
+ h64 = (h64 ^ h64 >> 33n) * prime64x2 & mask64;
13773
+ h64 = (h64 ^ h64 >> 29n) * prime64x3 & mask64;
13774
+ h64 = (h64 ^ h64 >> 32n) & mask64;
13775
+ return h64;
13776
+ }
13777
+ function rotl64(x, r) {
13778
+ return (x << r | x >> 64n - r) & mask64;
13779
+ }
13780
+ function xxRound(acc, input) {
13781
+ acc = acc + input * prime64x2 & mask64;
13782
+ acc = rotl64(acc, 31n);
13783
+ return acc * prime64x1 & mask64;
13784
+ }
13785
+ function xxMergeRound(acc, val) {
13786
+ val = xxRound(0n, val);
13787
+ acc = (acc ^ val) & mask64;
13788
+ return acc * prime64x1 + prime64x4 & mask64;
13789
+ }
13790
+ function readU64LE(buf, offset) {
13791
+ let val = 0n;
13792
+ for (let i = 7; i >= 0; i--) {
13793
+ val = val << 8n | BigInt(buf[offset + i]);
13794
+ }
13795
+ return val;
13796
+ }
13797
+ function readU32LE(buf, offset) {
13798
+ return BigInt(buf[offset]) | BigInt(buf[offset + 1]) << 8n | BigInt(buf[offset + 2]) << 16n | BigInt(buf[offset + 3]) << 24n;
13799
+ }
13800
+ function countLeadingZeros64(x) {
13801
+ if (x === 0n) return 64;
13802
+ let n = 0;
13803
+ while ((x & 1n << 63n) === 0n) {
13804
+ n++;
13805
+ x <<= 1n;
13806
+ }
13807
+ return n;
13808
+ }
14061
13809
  var CounterType = /* @__PURE__ */ ((CounterType2) => {
14062
13810
  CounterType2[CounterType2["Int"] = 0] = "Int";
14063
13811
  CounterType2[CounterType2["Long"] = 1] = "Long";
13812
+ CounterType2[CounterType2["IntDedup"] = 2] = "IntDedup";
14064
13813
  return CounterType2;
14065
13814
  })(CounterType || {});
14066
13815
  class CRDTCounter extends CRDTElement {
14067
13816
  valueType;
14068
13817
  value;
13818
+ hll;
14069
13819
  constructor(valueType, value, createdAt) {
14070
13820
  super(createdAt);
14071
13821
  this.valueType = valueType;
14072
13822
  switch (valueType) {
13823
+ case 2:
13824
+ this.value = 0;
13825
+ break;
14073
13826
  case 0:
14074
13827
  if (typeof value === "number") {
14075
13828
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
14076
- this.value = Long.fromNumber(value).toInt();
13829
+ this.value = bigintToInt32(BigInt(value));
14077
13830
  } else {
14078
13831
  this.value = removeDecimal(value);
14079
13832
  }
14080
13833
  } else {
14081
- this.value = value.toInt();
13834
+ this.value = bigintToInt32(value);
14082
13835
  }
14083
13836
  break;
14084
13837
  case 1:
14085
13838
  if (typeof value === "number") {
14086
- this.value = Long.fromNumber(value);
13839
+ this.value = BigInt.asIntN(64, BigInt(Math.trunc(value)));
14087
13840
  } else {
14088
- this.value = value;
13841
+ this.value = BigInt.asIntN(64, value);
14089
13842
  }
14090
13843
  break;
14091
13844
  default:
@@ -14094,6 +13847,9 @@
14094
13847
  `unimplemented type: ${valueType}`
14095
13848
  );
14096
13849
  }
13850
+ if (this.isDedup()) {
13851
+ this.hll ??= new HLL();
13852
+ }
14097
13853
  }
14098
13854
  /**
14099
13855
  * `of` creates a new instance of Counter.
@@ -14107,9 +13863,10 @@
14107
13863
  static valueFromBytes(counterType, bytes) {
14108
13864
  switch (counterType) {
14109
13865
  case 0:
13866
+ case 2:
14110
13867
  return bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
14111
13868
  case 1:
14112
- return Long.fromBytesLE(Array.from(bytes));
13869
+ return bigintFromBytesLE(bytes);
14113
13870
  default:
14114
13871
  throw new YorkieError(
14115
13872
  Code.ErrUnimplemented,
@@ -14121,7 +13878,10 @@
14121
13878
  * `getDataSize` returns the data usage of this element.
14122
13879
  */
14123
13880
  getDataSize() {
14124
- const data = this.valueType === 0 ? 4 : 8;
13881
+ let data = this.valueType === 0 || this.valueType === 2 ? 4 : 8;
13882
+ if (this.isDedup() && this.hll) {
13883
+ data += this.hll.toBytes().length;
13884
+ }
14125
13885
  return {
14126
13886
  data,
14127
13887
  meta: this.getMetaUsage()
@@ -14160,6 +13920,9 @@
14160
13920
  );
14161
13921
  clone.setRemovedAt(this.getRemovedAt());
14162
13922
  clone.setMovedAt(this.getMovedAt());
13923
+ if (this.isDedup() && this.hll) {
13924
+ clone.restoreHLL(this.hll.toBytes());
13925
+ }
14163
13926
  return clone;
14164
13927
  }
14165
13928
  /**
@@ -14173,12 +13936,8 @@
14173
13936
  */
14174
13937
  static getCounterType(value) {
14175
13938
  switch (typeof value) {
14176
- case "object":
14177
- if (value instanceof Long) {
14178
- return 1;
14179
- } else {
14180
- return;
14181
- }
13939
+ case "bigint":
13940
+ return 1;
14182
13941
  case "number":
14183
13942
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
14184
13943
  return 1;
@@ -14206,7 +13965,7 @@
14206
13965
  */
14207
13966
  isNumericType() {
14208
13967
  const t = this.valueType;
14209
- return t === 0 || t === 1;
13968
+ return t === 0 || t === 1 || t === 2;
14210
13969
  }
14211
13970
  /**
14212
13971
  * `getValueType` get counter value type.
@@ -14225,7 +13984,8 @@
14225
13984
  */
14226
13985
  toBytes() {
14227
13986
  switch (this.valueType) {
14228
- case 0: {
13987
+ case 0:
13988
+ case 2: {
14229
13989
  const intVal = this.value;
14230
13990
  return new Uint8Array([
14231
13991
  intVal & 255,
@@ -14235,9 +13995,7 @@
14235
13995
  ]);
14236
13996
  }
14237
13997
  case 1: {
14238
- const longVal = this.value;
14239
- const longToBytes = longVal.toBytesLE();
14240
- return Uint8Array.from(longToBytes);
13998
+ return bigintToBytesLE(this.value);
14241
13999
  }
14242
14000
  default:
14243
14001
  throw new YorkieError(
@@ -14246,10 +14004,76 @@
14246
14004
  );
14247
14005
  }
14248
14006
  }
14007
+ /**
14008
+ * `isDedup` returns whether dedup mode is enabled (derived from ValueType).
14009
+ */
14010
+ isDedup() {
14011
+ return this.valueType === 2;
14012
+ }
14013
+ /**
14014
+ * `increaseDedup` increases the counter using HLL-based dedup.
14015
+ * Only updates the value if the actor is new (not seen before).
14016
+ */
14017
+ increaseDedup(v, actor) {
14018
+ if (!this.isDedup() || !this.hll) {
14019
+ return this.increase(v);
14020
+ }
14021
+ if (!this.isNumericType() || !v.isNumericType()) {
14022
+ throw new TypeError(`Unsupported type of value: ${typeof v.getValue()}`);
14023
+ }
14024
+ if (!actor) {
14025
+ throw new YorkieError(
14026
+ Code.ErrInvalidArgument,
14027
+ "dedup counter requires actor"
14028
+ );
14029
+ }
14030
+ const val = v.getValue();
14031
+ const isUnit = v.getType() === PrimitiveType.Long ? val === 1n : val === 1;
14032
+ if (!isUnit) {
14033
+ throw new YorkieError(
14034
+ Code.ErrInvalidArgument,
14035
+ "dedup counter only supports increment by 1"
14036
+ );
14037
+ }
14038
+ if (this.hll.add(actor)) {
14039
+ this.recomputeValue();
14040
+ }
14041
+ return this;
14042
+ }
14043
+ /**
14044
+ * `hllBytes` returns the HLL register bytes, or undefined if not in dedup mode.
14045
+ */
14046
+ hllBytes() {
14047
+ return this.hll?.toBytes();
14048
+ }
14049
+ /**
14050
+ * `restoreHLL` restores the HLL state from serialized bytes.
14051
+ */
14052
+ restoreHLL(data) {
14053
+ if (!this.hll) {
14054
+ this.hll = new HLL();
14055
+ }
14056
+ this.hll.restore(data);
14057
+ this.recomputeValue();
14058
+ }
14059
+ /**
14060
+ * `recomputeValue` updates the counter value from the HLL cardinality estimate.
14061
+ */
14062
+ recomputeValue() {
14063
+ if (!this.hll) return;
14064
+ this.value = this.hll.count();
14065
+ }
14249
14066
  /**
14250
14067
  * `increase` increases numeric data.
14068
+ * Dedup counters must use increaseDedup() instead.
14251
14069
  */
14252
14070
  increase(v) {
14071
+ if (this.isDedup()) {
14072
+ throw new YorkieError(
14073
+ Code.ErrInvalidArgument,
14074
+ "dedup counter requires actor, use increaseDedup()"
14075
+ );
14076
+ }
14253
14077
  function checkNumericType(target) {
14254
14078
  if (!target.isNumericType()) {
14255
14079
  throw new TypeError(
@@ -14260,14 +14084,17 @@
14260
14084
  checkNumericType(this);
14261
14085
  checkNumericType(v);
14262
14086
  if (this.valueType === 1) {
14263
- this.value = this.value.add(v.getValue());
14087
+ const delta = typeof v.getValue() === "bigint" ? v.getValue() : BigInt(Math.trunc(v.getValue()));
14088
+ this.value = BigInt.asIntN(64, this.value + delta);
14264
14089
  } else {
14265
14090
  if (v.getType() === PrimitiveType.Long) {
14266
- this.value = this.value + v.getValue().toInt();
14091
+ this.value = this.value + bigintToInt32(v.getValue());
14267
14092
  } else {
14268
- this.value = Long.fromNumber(
14269
- this.value + removeDecimal(v.getValue())
14270
- ).toInt();
14093
+ this.value = bigintToInt32(
14094
+ BigInt(
14095
+ this.value + removeDecimal(v.getValue())
14096
+ )
14097
+ );
14271
14098
  }
14272
14099
  }
14273
14100
  return this;
@@ -14275,15 +14102,23 @@
14275
14102
  }
14276
14103
  class IncreaseOperation extends Operation {
14277
14104
  value;
14278
- constructor(parentCreatedAt, value, executedAt) {
14105
+ actor;
14106
+ constructor(parentCreatedAt, value, executedAt, actor) {
14279
14107
  super(parentCreatedAt, executedAt);
14280
14108
  this.value = value;
14109
+ this.actor = actor || "";
14281
14110
  }
14282
14111
  /**
14283
14112
  * `create` creates a new instance of IncreaseOperation.
14284
14113
  */
14285
- static create(parentCreatedAt, value, executedAt) {
14286
- return new IncreaseOperation(parentCreatedAt, value, executedAt);
14114
+ static create(parentCreatedAt, value, executedAt, actor) {
14115
+ return new IncreaseOperation(parentCreatedAt, value, executedAt, actor);
14116
+ }
14117
+ /**
14118
+ * `getActor` returns the actor ID associated with this operation.
14119
+ */
14120
+ getActor() {
14121
+ return this.actor;
14287
14122
  }
14288
14123
  /**
14289
14124
  * `execute` executes this operation on the given `CRDTRoot`.
@@ -14304,7 +14139,17 @@
14304
14139
  }
14305
14140
  const counter = parentObject;
14306
14141
  const value = this.value.deepcopy();
14307
- counter.increase(value);
14142
+ if (counter.isDedup()) {
14143
+ if (!this.actor) {
14144
+ throw new YorkieError(
14145
+ Code.ErrInvalidArgument,
14146
+ "dedup counter requires actor"
14147
+ );
14148
+ }
14149
+ counter.increaseDedup(value, this.actor);
14150
+ } else {
14151
+ counter.increase(value);
14152
+ }
14308
14153
  return {
14309
14154
  opInfos: [
14310
14155
  {
@@ -14313,7 +14158,9 @@
14313
14158
  value: value.getValue()
14314
14159
  }
14315
14160
  ],
14316
- reverseOp: this.toReverseOperation()
14161
+ // Dedup counters do not support undo/redo because HLL cannot
14162
+ // remove an actor once added.
14163
+ reverseOp: this.actor ? void 0 : this.toReverseOperation()
14317
14164
  };
14318
14165
  }
14319
14166
  /**
@@ -14322,7 +14169,7 @@
14322
14169
  toReverseOperation() {
14323
14170
  const primitiveValue = this.value.deepcopy();
14324
14171
  const valueType = primitiveValue.getType();
14325
- const value = valueType === PrimitiveType.Long ? primitiveValue.getValue().multiply(-1) : primitiveValue.getValue() * -1;
14172
+ const value = valueType === PrimitiveType.Long ? -primitiveValue.getValue() : primitiveValue.getValue() * -1;
14326
14173
  const reverseOp = IncreaseOperation.create(
14327
14174
  this.getParentCreatedAt(),
14328
14175
  Primitive.of(value, primitiveValue.getCreatedAt())
@@ -14407,28 +14254,67 @@
14407
14254
  let changes;
14408
14255
  let pairs;
14409
14256
  let diff = { data: 0, meta: 0 };
14257
+ const reversePrevAttributes = /* @__PURE__ */ new Map();
14258
+ const reverseAttrsToRemove = [];
14410
14259
  if (this.attributes.size) {
14411
14260
  const attributes = {};
14412
14261
  [...this.attributes].forEach(([key, value]) => attributes[key] = value);
14413
- [pairs, changes, diff] = tree.style(
14262
+ let prevAttributes;
14263
+ let newAttrKeys;
14264
+ [pairs, changes, diff, prevAttributes, newAttrKeys] = tree.style(
14414
14265
  [this.fromPos, this.toPos],
14415
14266
  attributes,
14416
14267
  this.getExecutedAt(),
14417
14268
  versionVector
14418
14269
  );
14270
+ for (const [key, value] of prevAttributes) {
14271
+ reversePrevAttributes.set(key, value);
14272
+ }
14273
+ reverseAttrsToRemove.push(...newAttrKeys);
14419
14274
  } else {
14420
14275
  const attributesToRemove = this.attributesToRemove;
14421
- [pairs, changes, diff] = tree.removeStyle(
14276
+ let prevAttributes;
14277
+ [pairs, changes, diff, prevAttributes] = tree.removeStyle(
14422
14278
  [this.fromPos, this.toPos],
14423
14279
  attributesToRemove,
14424
14280
  this.getExecutedAt(),
14425
14281
  versionVector
14426
14282
  );
14283
+ for (const [key, value] of prevAttributes) {
14284
+ reversePrevAttributes.set(key, value);
14285
+ }
14427
14286
  }
14428
14287
  root.acc(diff);
14429
14288
  for (const pair of pairs) {
14430
14289
  root.registerGCPair(pair);
14431
14290
  }
14291
+ let reverseOp;
14292
+ if (reversePrevAttributes.size > 0 && reverseAttrsToRemove.length > 0) {
14293
+ reverseOp = new TreeStyleOperation(
14294
+ this.getParentCreatedAt(),
14295
+ this.fromPos,
14296
+ this.toPos,
14297
+ reversePrevAttributes,
14298
+ reverseAttrsToRemove,
14299
+ void 0
14300
+ );
14301
+ } else if (reverseAttrsToRemove.length > 0) {
14302
+ reverseOp = TreeStyleOperation.createTreeRemoveStyleOperation(
14303
+ this.getParentCreatedAt(),
14304
+ this.fromPos,
14305
+ this.toPos,
14306
+ reverseAttrsToRemove,
14307
+ void 0
14308
+ );
14309
+ } else if (reversePrevAttributes.size > 0) {
14310
+ reverseOp = TreeStyleOperation.create(
14311
+ this.getParentCreatedAt(),
14312
+ this.fromPos,
14313
+ this.toPos,
14314
+ reversePrevAttributes,
14315
+ void 0
14316
+ );
14317
+ }
14432
14318
  return {
14433
14319
  opInfos: changes.map(({ from, to, value, fromPath, toPath }) => {
14434
14320
  return {
@@ -14440,7 +14326,8 @@
14440
14326
  toPath,
14441
14327
  path: root.createPath(this.getParentCreatedAt())
14442
14328
  };
14443
- })
14329
+ }),
14330
+ reverseOp
14444
14331
  };
14445
14332
  }
14446
14333
  /**
@@ -14661,6 +14548,8 @@
14661
14548
  return ValueType.INTEGER_CNT;
14662
14549
  case CounterType.Long:
14663
14550
  return ValueType.LONG_CNT;
14551
+ case CounterType.IntDedup:
14552
+ return ValueType.INTEGER_DEDUP_CNT;
14664
14553
  default:
14665
14554
  throw new YorkieError(
14666
14555
  Code.ErrInvalidType,
@@ -14833,6 +14722,7 @@
14833
14722
  pbIncreaseOperation.executedAt = toTimeTicket(
14834
14723
  increaseOperation.getExecutedAt()
14835
14724
  );
14725
+ pbIncreaseOperation.actor = increaseOperation.getActor();
14836
14726
  pbOperation.body.case = "increase";
14837
14727
  pbOperation.body.value = pbIncreaseOperation;
14838
14728
  } else if (operation instanceof TreeEditOperation) {
@@ -15084,7 +14974,8 @@
15084
14974
  value: counter.toBytes(),
15085
14975
  createdAt: toTimeTicket(counter.getCreatedAt()),
15086
14976
  movedAt: toTimeTicket(counter.getMovedAt()),
15087
- removedAt: toTimeTicket(counter.getRemovedAt())
14977
+ removedAt: toTimeTicket(counter.getRemovedAt()),
14978
+ hllRegisters: counter.hllBytes() || new Uint8Array()
15088
14979
  })
15089
14980
  }
15090
14981
  });
@@ -15248,6 +15139,8 @@
15248
15139
  return CounterType.Int;
15249
15140
  case ValueType.LONG_CNT:
15250
15141
  return CounterType.Long;
15142
+ case ValueType.INTEGER_DEDUP_CNT:
15143
+ return CounterType.IntDedup;
15251
15144
  }
15252
15145
  throw new YorkieError(
15253
15146
  Code.ErrUnimplemented,
@@ -15290,6 +15183,7 @@
15290
15183
  );
15291
15184
  case ValueType.INTEGER_CNT:
15292
15185
  case ValueType.LONG_CNT:
15186
+ case ValueType.INTEGER_DEDUP_CNT:
15293
15187
  return CRDTCounter.create(
15294
15188
  fromCounterType(pbElementSimple.type),
15295
15189
  CRDTCounter.valueFromBytes(
@@ -15472,7 +15366,8 @@
15472
15366
  return IncreaseOperation.create(
15473
15367
  fromTimeTicket(pbIncreaseOperation.parentCreatedAt),
15474
15368
  fromElementSimple(pbIncreaseOperation.value),
15475
- fromTimeTicket(pbIncreaseOperation.executedAt)
15369
+ fromTimeTicket(pbIncreaseOperation.executedAt),
15370
+ pbIncreaseOperation.actor || void 0
15476
15371
  );
15477
15372
  } else if (pbOperation.body.case === "treeEdit") {
15478
15373
  const pbTreeEditOperation = pbOperation.body.value;
@@ -15620,6 +15515,9 @@
15620
15515
  );
15621
15516
  counter.setMovedAt(fromTimeTicket(pbCounter.movedAt));
15622
15517
  counter.setRemovedAt(fromTimeTicket(pbCounter.removedAt));
15518
+ if (counter.isDedup() && pbCounter.hllRegisters.length > 0) {
15519
+ counter.restoreHLL(pbCounter.hllRegisters);
15520
+ }
15623
15521
  return counter;
15624
15522
  }
15625
15523
  function fromTree(pbTree) {
@@ -17089,7 +16987,7 @@
17089
16987
  return this.text.indexRangeToPosRange(fromIdx, toIdx);
17090
16988
  }
17091
16989
  }
17092
- class Counter {
16990
+ class BaseCounter {
17093
16991
  valueType;
17094
16992
  value;
17095
16993
  context;
@@ -17099,7 +16997,7 @@
17099
16997
  this.value = value;
17100
16998
  }
17101
16999
  /**
17102
- * `initialize` initialize this text with context and internal text.
17000
+ * `initialize` links this proxy to a ChangeContext and CRDTCounter.
17103
17001
  */
17104
17002
  initialize(context, counter) {
17105
17003
  this.valueType = counter.getValueType();
@@ -17108,17 +17006,11 @@
17108
17006
  this.value = counter.getValue();
17109
17007
  }
17110
17008
  /**
17111
- * `getID` returns the ID of this text.
17009
+ * `getID` returns the ID of this counter.
17112
17010
  */
17113
17011
  getID() {
17114
17012
  return this.counter.getID();
17115
17013
  }
17116
- /**
17117
- * `getValue` returns the value of this counter;
17118
- */
17119
- getValue() {
17120
- return this.value;
17121
- }
17122
17014
  /**
17123
17015
  * `getValueType` returns the value type of this counter.
17124
17016
  */
@@ -17126,15 +17018,45 @@
17126
17018
  return this.valueType;
17127
17019
  }
17128
17020
  /**
17129
- * `increase` increases numeric data.
17021
+ * `toJSForTest` returns value with meta data for testing.
17130
17022
  */
17131
- increase(v) {
17023
+ toJSForTest() {
17024
+ if (!this.context || !this.counter) {
17025
+ throw new YorkieError(
17026
+ Code.ErrNotInitialized,
17027
+ "Counter is not initialized yet"
17028
+ );
17029
+ }
17030
+ return this.counter.toJSForTest();
17031
+ }
17032
+ /**
17033
+ * `ensureInitialized` throws if this counter has not been initialized.
17034
+ */
17035
+ ensureInitialized() {
17132
17036
  if (!this.context || !this.counter) {
17133
17037
  throw new YorkieError(
17134
17038
  Code.ErrNotInitialized,
17135
17039
  "Counter is not initialized yet"
17136
17040
  );
17137
17041
  }
17042
+ }
17043
+ }
17044
+ class Counter extends BaseCounter {
17045
+ constructor(value) {
17046
+ const type = typeof value === "bigint" ? CounterType.Long : CounterType.Int;
17047
+ super(type, value);
17048
+ }
17049
+ /**
17050
+ * `getValue` returns the value of this counter.
17051
+ */
17052
+ getValue() {
17053
+ return this.value;
17054
+ }
17055
+ /**
17056
+ * `increase` increases numeric data.
17057
+ */
17058
+ increase(v) {
17059
+ this.ensureInitialized();
17138
17060
  const ticket = this.context.issueTimeTicket();
17139
17061
  const value = Primitive.of(v, ticket);
17140
17062
  if (!value.isNumericType()) {
@@ -17148,19 +17070,44 @@
17148
17070
  );
17149
17071
  return this;
17150
17072
  }
17073
+ }
17074
+ class DedupCounter extends BaseCounter {
17075
+ constructor() {
17076
+ super(CounterType.IntDedup, 0);
17077
+ }
17151
17078
  /**
17152
- * `toJSForTest` returns value with meta data for testing.
17079
+ * `getValue` returns the value of this counter. Always a number since
17080
+ * DedupCounter only supports IntDedup.
17153
17081
  */
17154
- toJSForTest() {
17155
- if (!this.context || !this.counter) {
17156
- throw new YorkieError(
17157
- Code.ErrNotInitialized,
17158
- "Counter is not initialized yet"
17159
- );
17082
+ getValue() {
17083
+ return this.value;
17084
+ }
17085
+ /**
17086
+ * `add` records a unique actor in the dedup counter. If the actor has
17087
+ * already been counted, the call is ignored.
17088
+ */
17089
+ add(actor) {
17090
+ this.ensureInitialized();
17091
+ if (!actor) {
17092
+ throw new YorkieError(Code.ErrInvalidArgument, "actor is required");
17160
17093
  }
17161
- return this.counter.toJSForTest();
17094
+ const ticket = this.context.issueTimeTicket();
17095
+ const value = Primitive.of(1, ticket);
17096
+ this.counter.increaseDedup(value, actor);
17097
+ this.context.push(
17098
+ IncreaseOperation.create(
17099
+ this.counter.getCreatedAt(),
17100
+ value,
17101
+ ticket,
17102
+ actor
17103
+ )
17104
+ );
17105
+ return this;
17162
17106
  }
17163
17107
  }
17108
+ function isCounter$1(value) {
17109
+ return value instanceof Counter || value instanceof DedupCounter;
17110
+ }
17164
17111
  function toTreeNode(node) {
17165
17112
  if (node.isText) {
17166
17113
  return {
@@ -17964,7 +17911,12 @@
17964
17911
  } else if (elem instanceof CRDTText) {
17965
17912
  return new Text(context, elem);
17966
17913
  } else if (elem instanceof CRDTCounter) {
17967
- const counter = new Counter(CounterType.Int, 0);
17914
+ if (elem.isDedup()) {
17915
+ const counter2 = new DedupCounter();
17916
+ counter2.initialize(context, elem);
17917
+ return counter2;
17918
+ }
17919
+ const counter = new Counter(0);
17968
17920
  counter.initialize(context, elem);
17969
17921
  return counter;
17970
17922
  } else if (elem instanceof CRDTTree) {
@@ -17994,7 +17946,7 @@
17994
17946
  if (value instanceof Text) {
17995
17947
  element = CRDTText.create(RGATreeSplit.create(), createdAt);
17996
17948
  value.initialize(context, element);
17997
- } else if (value instanceof Counter) {
17949
+ } else if (isCounter$1(value)) {
17998
17950
  element = CRDTCounter.create(
17999
17951
  value.getValueType(),
18000
17952
  value.getValue(),
@@ -20282,7 +20234,7 @@
20282
20234
  };
20283
20235
  }
20284
20236
  const name = "@yorkie-js/sdk";
20285
- const version = "0.7.4";
20237
+ const version = "0.7.5";
20286
20238
  const pkg = {
20287
20239
  name,
20288
20240
  version
@@ -20636,21 +20588,19 @@
20636
20588
  this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
20637
20589
  const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
20638
20590
  this.setAuthToken = setToken;
20591
+ const transportOptions = {
20592
+ baseUrl: rpcAddr,
20593
+ interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
20594
+ fetch: (input, init) => {
20595
+ return fetch(input, {
20596
+ ...init,
20597
+ keepalive: this.keepalive
20598
+ });
20599
+ }
20600
+ };
20639
20601
  this.rpcClient = createClient(
20640
20602
  YorkieService,
20641
- createGrpcWebTransport({
20642
- baseUrl: rpcAddr,
20643
- interceptors: [
20644
- authInterceptor,
20645
- createMetricInterceptor(opts?.userAgent)
20646
- ],
20647
- fetch: (input, init) => {
20648
- return fetch(input, {
20649
- ...init,
20650
- keepalive: this.keepalive
20651
- });
20652
- }
20653
- })
20603
+ opts.useGrpcWebTransport ? createGrpcWebTransport(transportOptions) : createConnectTransport(transportOptions)
20654
20604
  );
20655
20605
  this.taskQueue = [];
20656
20606
  }
@@ -22154,15 +22104,14 @@
22154
22104
  Primitive,
22155
22105
  Text,
22156
22106
  Counter,
22107
+ DedupCounter,
22157
22108
  Tree,
22158
22109
  Devtools,
22159
22110
  Channel,
22160
22111
  ChannelEventType,
22161
22112
  YSON,
22162
22113
  LogLevel,
22163
- setLogLevel,
22164
- IntType: CounterType.Int,
22165
- LongType: CounterType.Long
22114
+ setLogLevel
22166
22115
  };
22167
22116
  if (typeof globalThis !== "undefined") {
22168
22117
  globalThis.yorkie = {
@@ -22171,14 +22120,13 @@
22171
22120
  Primitive,
22172
22121
  Text,
22173
22122
  Counter,
22123
+ DedupCounter,
22174
22124
  Tree,
22175
22125
  Channel,
22176
22126
  ChannelEventType,
22177
22127
  YSON,
22178
22128
  LogLevel,
22179
- setLogLevel,
22180
- IntType: CounterType.Int,
22181
- LongType: CounterType.Long
22129
+ setLogLevel
22182
22130
  };
22183
22131
  }
22184
22132
  exports2.Change = Change;
@@ -22190,6 +22138,7 @@
22190
22138
  exports2.ClientStatus = ClientStatus;
22191
22139
  exports2.Counter = Counter;
22192
22140
  exports2.CounterType = CounterType;
22141
+ exports2.DedupCounter = DedupCounter;
22193
22142
  exports2.Devtools = Devtools;
22194
22143
  exports2.DocEventType = DocEventType;
22195
22144
  exports2.DocStatus = DocStatus;