@yorkie-js/sdk 0.7.3 → 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.
- package/dist/counter.html +1 -1
- package/dist/multi.html +1 -1
- package/dist/yorkie-js-sdk.d.ts +197 -42
- package/dist/yorkie-js-sdk.es.js +1279 -1080
- package/dist/yorkie-js-sdk.es.js.map +1 -1
- package/dist/yorkie-js-sdk.js +1260 -1061
- package/dist/yorkie-js-sdk.js.map +1 -1
- package/package.json +2 -4
package/dist/yorkie-js-sdk.es.js
CHANGED
|
@@ -100,7 +100,7 @@ function varint64write(lo, hi, bytes) {
|
|
|
100
100
|
}
|
|
101
101
|
bytes.push(hi >>> 31 & 1);
|
|
102
102
|
}
|
|
103
|
-
const TWO_PWR_32_DBL
|
|
103
|
+
const TWO_PWR_32_DBL = 4294967296;
|
|
104
104
|
function int64FromString(dec) {
|
|
105
105
|
const minus = dec[0] === "-";
|
|
106
106
|
if (minus) {
|
|
@@ -113,9 +113,9 @@ function int64FromString(dec) {
|
|
|
113
113
|
const digit1e6 = Number(dec.slice(begin, end));
|
|
114
114
|
highBits *= base;
|
|
115
115
|
lowBits = lowBits * base + digit1e6;
|
|
116
|
-
if (lowBits >= TWO_PWR_32_DBL
|
|
117
|
-
highBits = highBits + (lowBits / TWO_PWR_32_DBL
|
|
118
|
-
lowBits = lowBits % TWO_PWR_32_DBL
|
|
116
|
+
if (lowBits >= TWO_PWR_32_DBL) {
|
|
117
|
+
highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
|
|
118
|
+
lowBits = lowBits % TWO_PWR_32_DBL;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
add1e6digit(-24, -18);
|
|
@@ -136,7 +136,7 @@ function int64ToString(lo, hi) {
|
|
|
136
136
|
function uInt64ToString(lo, hi) {
|
|
137
137
|
({ lo, hi } = toUnsigned(lo, hi));
|
|
138
138
|
if (hi <= 2097151) {
|
|
139
|
-
return String(TWO_PWR_32_DBL
|
|
139
|
+
return String(TWO_PWR_32_DBL * hi + lo);
|
|
140
140
|
}
|
|
141
141
|
const low = lo & 16777215;
|
|
142
142
|
const mid = (lo >>> 24 | hi << 8) & 16777215;
|
|
@@ -4383,6 +4383,19 @@ function codeToString(value) {
|
|
|
4383
4383
|
}
|
|
4384
4384
|
return name2[0].toLowerCase() + name2.substring(1).replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
|
|
4385
4385
|
}
|
|
4386
|
+
let stringToCode;
|
|
4387
|
+
function codeFromString(value) {
|
|
4388
|
+
if (!stringToCode) {
|
|
4389
|
+
stringToCode = {};
|
|
4390
|
+
for (const value2 of Object.values(Code$1)) {
|
|
4391
|
+
if (typeof value2 == "string") {
|
|
4392
|
+
continue;
|
|
4393
|
+
}
|
|
4394
|
+
stringToCode[codeToString(value2)] = value2;
|
|
4395
|
+
}
|
|
4396
|
+
}
|
|
4397
|
+
return stringToCode[value];
|
|
4398
|
+
}
|
|
4386
4399
|
class ConnectError extends Error {
|
|
4387
4400
|
/**
|
|
4388
4401
|
* Create a new ConnectError.
|
|
@@ -4471,6 +4484,15 @@ function decodeBinaryHeader(value, desc, options) {
|
|
|
4471
4484
|
throw ConnectError.from(e, Code$1.DataLoss);
|
|
4472
4485
|
}
|
|
4473
4486
|
}
|
|
4487
|
+
function appendHeaders(...headers) {
|
|
4488
|
+
const h = new Headers();
|
|
4489
|
+
for (const e of headers) {
|
|
4490
|
+
e.forEach((value, key) => {
|
|
4491
|
+
h.append(key, value);
|
|
4492
|
+
});
|
|
4493
|
+
}
|
|
4494
|
+
return h;
|
|
4495
|
+
}
|
|
4474
4496
|
function makeAnyClient(service, createMethod) {
|
|
4475
4497
|
const client = {};
|
|
4476
4498
|
for (const desc of service.methods) {
|
|
@@ -4618,10 +4640,10 @@ var __asyncValues$1 = function(o) {
|
|
|
4618
4640
|
}, reject);
|
|
4619
4641
|
}
|
|
4620
4642
|
};
|
|
4621
|
-
var __await$
|
|
4622
|
-
return this instanceof __await$
|
|
4643
|
+
var __await$3 = function(v) {
|
|
4644
|
+
return this instanceof __await$3 ? (this.v = v, this) : new __await$3(v);
|
|
4623
4645
|
};
|
|
4624
|
-
var __asyncGenerator$
|
|
4646
|
+
var __asyncGenerator$3 = function(thisArg, _arguments, generator) {
|
|
4625
4647
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4626
4648
|
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
4627
4649
|
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
|
|
@@ -4650,7 +4672,7 @@ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
|
|
|
4650
4672
|
}
|
|
4651
4673
|
}
|
|
4652
4674
|
function step(r) {
|
|
4653
|
-
r.value instanceof __await$
|
|
4675
|
+
r.value instanceof __await$3 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
4654
4676
|
}
|
|
4655
4677
|
function fulfill(value) {
|
|
4656
4678
|
resume("next", value);
|
|
@@ -4671,13 +4693,13 @@ var __asyncDelegator$1 = function(o) {
|
|
|
4671
4693
|
}, i;
|
|
4672
4694
|
function verb(n, f) {
|
|
4673
4695
|
i[n] = o[n] ? function(v) {
|
|
4674
|
-
return (p = !p) ? { value: __await$
|
|
4696
|
+
return (p = !p) ? { value: __await$3(o[n](v)), done: false } : f ? f(v) : v;
|
|
4675
4697
|
} : f;
|
|
4676
4698
|
}
|
|
4677
4699
|
};
|
|
4678
4700
|
function createAsyncIterable(items) {
|
|
4679
|
-
return __asyncGenerator$
|
|
4680
|
-
yield __await$
|
|
4701
|
+
return __asyncGenerator$3(this, arguments, function* createAsyncIterable_1() {
|
|
4702
|
+
yield __await$3(yield* __asyncDelegator$1(__asyncValues$1(items)));
|
|
4681
4703
|
});
|
|
4682
4704
|
}
|
|
4683
4705
|
var __asyncValues = function(o) {
|
|
@@ -4699,8 +4721,8 @@ var __asyncValues = function(o) {
|
|
|
4699
4721
|
}, reject);
|
|
4700
4722
|
}
|
|
4701
4723
|
};
|
|
4702
|
-
var __await$
|
|
4703
|
-
return this instanceof __await$
|
|
4724
|
+
var __await$2 = function(v) {
|
|
4725
|
+
return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
|
|
4704
4726
|
};
|
|
4705
4727
|
var __asyncDelegator = function(o) {
|
|
4706
4728
|
var i, p;
|
|
@@ -4711,11 +4733,11 @@ var __asyncDelegator = function(o) {
|
|
|
4711
4733
|
}, i;
|
|
4712
4734
|
function verb(n, f) {
|
|
4713
4735
|
i[n] = o[n] ? function(v) {
|
|
4714
|
-
return (p = !p) ? { value: __await$
|
|
4736
|
+
return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
|
|
4715
4737
|
} : f;
|
|
4716
4738
|
}
|
|
4717
4739
|
};
|
|
4718
|
-
var __asyncGenerator$
|
|
4740
|
+
var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
|
|
4719
4741
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4720
4742
|
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
4721
4743
|
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
|
|
@@ -4744,7 +4766,7 @@ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
|
|
|
4744
4766
|
}
|
|
4745
4767
|
}
|
|
4746
4768
|
function step(r) {
|
|
4747
|
-
r.value instanceof __await$
|
|
4769
|
+
r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
4748
4770
|
}
|
|
4749
4771
|
function fulfill(value) {
|
|
4750
4772
|
resume("next", value);
|
|
@@ -4824,11 +4846,11 @@ function createBiDiStreamingFn(transport, method) {
|
|
|
4824
4846
|
}
|
|
4825
4847
|
function handleStreamResponse(stream, options) {
|
|
4826
4848
|
const it = (function() {
|
|
4827
|
-
return __asyncGenerator$
|
|
4849
|
+
return __asyncGenerator$2(this, arguments, function* () {
|
|
4828
4850
|
var _a, _b;
|
|
4829
|
-
const response = yield __await$
|
|
4851
|
+
const response = yield __await$2(stream);
|
|
4830
4852
|
(_a = options === null || options === void 0 ? void 0 : options.onHeader) === null || _a === void 0 ? void 0 : _a.call(options, response.header);
|
|
4831
|
-
yield __await$
|
|
4853
|
+
yield __await$2(yield* __asyncDelegator(__asyncValues(response.message)));
|
|
4832
4854
|
(_b = options === null || options === void 0 ? void 0 : options.onTrailer) === null || _b === void 0 ? void 0 : _b.call(options, response.trailer);
|
|
4833
4855
|
});
|
|
4834
4856
|
})()[Symbol.asyncIterator]();
|
|
@@ -4918,12 +4940,12 @@ function trailerParse(data) {
|
|
|
4918
4940
|
}
|
|
4919
4941
|
return headers;
|
|
4920
4942
|
}
|
|
4921
|
-
const headerContentType = "Content-Type";
|
|
4922
|
-
const headerTimeout = "Grpc-Timeout";
|
|
4943
|
+
const headerContentType$1 = "Content-Type";
|
|
4944
|
+
const headerTimeout$1 = "Grpc-Timeout";
|
|
4923
4945
|
const headerGrpcStatus = "Grpc-Status";
|
|
4924
4946
|
const headerGrpcMessage = "Grpc-Message";
|
|
4925
4947
|
const headerStatusDetailsBin = "Grpc-Status-Details-Bin";
|
|
4926
|
-
const headerUserAgent = "User-Agent";
|
|
4948
|
+
const headerUserAgent$1 = "User-Agent";
|
|
4927
4949
|
const headerXUserAgent = "X-User-Agent";
|
|
4928
4950
|
const headerXGrpcWeb = "X-Grpc-Web";
|
|
4929
4951
|
const contentTypeProto = "application/grpc-web+proto";
|
|
@@ -5061,6 +5083,204 @@ function createJsonSerialization(desc, options) {
|
|
|
5061
5083
|
}
|
|
5062
5084
|
};
|
|
5063
5085
|
}
|
|
5086
|
+
const contentTypeRegExp = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
|
|
5087
|
+
const contentTypeUnaryProto = "application/proto";
|
|
5088
|
+
const contentTypeUnaryJson = "application/json";
|
|
5089
|
+
const contentTypeStreamProto = "application/connect+proto";
|
|
5090
|
+
const contentTypeStreamJson = "application/connect+json";
|
|
5091
|
+
function parseContentType(contentType) {
|
|
5092
|
+
const match = contentType === null || contentType === void 0 ? void 0 : contentType.match(contentTypeRegExp);
|
|
5093
|
+
if (!match) {
|
|
5094
|
+
return void 0;
|
|
5095
|
+
}
|
|
5096
|
+
const stream = !!match[1];
|
|
5097
|
+
const binary = !!match[3];
|
|
5098
|
+
return { stream, binary };
|
|
5099
|
+
}
|
|
5100
|
+
(function(s, e) {
|
|
5101
|
+
var t = {};
|
|
5102
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5103
|
+
t[p] = s[p];
|
|
5104
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
5105
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
5106
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
5107
|
+
t[p[i]] = s[p[i]];
|
|
5108
|
+
}
|
|
5109
|
+
return t;
|
|
5110
|
+
});
|
|
5111
|
+
function errorFromJson(jsonValue, metadata, fallback) {
|
|
5112
|
+
var _a;
|
|
5113
|
+
if (metadata) {
|
|
5114
|
+
new Headers(metadata).forEach((value, key) => fallback.metadata.append(key, value));
|
|
5115
|
+
}
|
|
5116
|
+
if (typeof jsonValue !== "object" || jsonValue == null || Array.isArray(jsonValue)) {
|
|
5117
|
+
throw fallback;
|
|
5118
|
+
}
|
|
5119
|
+
let code = fallback.code;
|
|
5120
|
+
if ("code" in jsonValue && typeof jsonValue.code === "string") {
|
|
5121
|
+
code = (_a = codeFromString(jsonValue.code)) !== null && _a !== void 0 ? _a : code;
|
|
5122
|
+
}
|
|
5123
|
+
const message = jsonValue.message;
|
|
5124
|
+
if (message != null && typeof message !== "string") {
|
|
5125
|
+
throw fallback;
|
|
5126
|
+
}
|
|
5127
|
+
const error = new ConnectError(message !== null && message !== void 0 ? message : "", code, metadata);
|
|
5128
|
+
if ("details" in jsonValue && Array.isArray(jsonValue.details)) {
|
|
5129
|
+
for (const detail of jsonValue.details) {
|
|
5130
|
+
if (detail === null || typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || typeof detail.value != "string") {
|
|
5131
|
+
throw fallback;
|
|
5132
|
+
}
|
|
5133
|
+
try {
|
|
5134
|
+
error.details.push({
|
|
5135
|
+
type: detail.type,
|
|
5136
|
+
value: base64Decode(detail.value),
|
|
5137
|
+
debug: detail.debug
|
|
5138
|
+
});
|
|
5139
|
+
} catch (e) {
|
|
5140
|
+
throw fallback;
|
|
5141
|
+
}
|
|
5142
|
+
}
|
|
5143
|
+
}
|
|
5144
|
+
return error;
|
|
5145
|
+
}
|
|
5146
|
+
const endStreamFlag = 2;
|
|
5147
|
+
function endStreamFromJson(data) {
|
|
5148
|
+
const parseErr = new ConnectError("invalid end stream", Code$1.Unknown);
|
|
5149
|
+
let jsonValue;
|
|
5150
|
+
try {
|
|
5151
|
+
jsonValue = JSON.parse(typeof data == "string" ? data : new TextDecoder().decode(data));
|
|
5152
|
+
} catch (e) {
|
|
5153
|
+
throw parseErr;
|
|
5154
|
+
}
|
|
5155
|
+
if (typeof jsonValue != "object" || jsonValue == null || Array.isArray(jsonValue)) {
|
|
5156
|
+
throw parseErr;
|
|
5157
|
+
}
|
|
5158
|
+
const metadata = new Headers();
|
|
5159
|
+
if ("metadata" in jsonValue) {
|
|
5160
|
+
if (typeof jsonValue.metadata != "object" || jsonValue.metadata == null || Array.isArray(jsonValue.metadata)) {
|
|
5161
|
+
throw parseErr;
|
|
5162
|
+
}
|
|
5163
|
+
for (const [key, values] of Object.entries(jsonValue.metadata)) {
|
|
5164
|
+
if (!Array.isArray(values) || values.some((value) => typeof value != "string")) {
|
|
5165
|
+
throw parseErr;
|
|
5166
|
+
}
|
|
5167
|
+
for (const value of values) {
|
|
5168
|
+
metadata.append(key, value);
|
|
5169
|
+
}
|
|
5170
|
+
}
|
|
5171
|
+
}
|
|
5172
|
+
const error = "error" in jsonValue && jsonValue.error != null ? errorFromJson(jsonValue.error, metadata, parseErr) : void 0;
|
|
5173
|
+
return { metadata, error };
|
|
5174
|
+
}
|
|
5175
|
+
const headerContentType = "Content-Type";
|
|
5176
|
+
const headerUnaryContentLength = "Content-Length";
|
|
5177
|
+
const headerUnaryEncoding = "Content-Encoding";
|
|
5178
|
+
const headerUnaryAcceptEncoding = "Accept-Encoding";
|
|
5179
|
+
const headerTimeout = "Connect-Timeout-Ms";
|
|
5180
|
+
const headerProtocolVersion = "Connect-Protocol-Version";
|
|
5181
|
+
const headerUserAgent = "User-Agent";
|
|
5182
|
+
function codeFromHttpStatus$1(httpStatus) {
|
|
5183
|
+
switch (httpStatus) {
|
|
5184
|
+
case 400:
|
|
5185
|
+
return Code$1.Internal;
|
|
5186
|
+
case 401:
|
|
5187
|
+
return Code$1.Unauthenticated;
|
|
5188
|
+
case 403:
|
|
5189
|
+
return Code$1.PermissionDenied;
|
|
5190
|
+
case 404:
|
|
5191
|
+
return Code$1.Unimplemented;
|
|
5192
|
+
case 429:
|
|
5193
|
+
return Code$1.Unavailable;
|
|
5194
|
+
case 502:
|
|
5195
|
+
return Code$1.Unavailable;
|
|
5196
|
+
case 503:
|
|
5197
|
+
return Code$1.Unavailable;
|
|
5198
|
+
case 504:
|
|
5199
|
+
return Code$1.Unavailable;
|
|
5200
|
+
default:
|
|
5201
|
+
return Code$1.Unknown;
|
|
5202
|
+
}
|
|
5203
|
+
}
|
|
5204
|
+
function trailerDemux(header) {
|
|
5205
|
+
const h = new Headers(), t = new Headers();
|
|
5206
|
+
header.forEach((value, key) => {
|
|
5207
|
+
if (key.toLowerCase().startsWith("trailer-")) {
|
|
5208
|
+
t.append(key.substring(8), value);
|
|
5209
|
+
} else {
|
|
5210
|
+
h.append(key, value);
|
|
5211
|
+
}
|
|
5212
|
+
});
|
|
5213
|
+
return [h, t];
|
|
5214
|
+
}
|
|
5215
|
+
const protocolVersion = "1";
|
|
5216
|
+
function requestHeader$1(methodKind, useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
|
|
5217
|
+
const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
|
|
5218
|
+
if (timeoutMs !== void 0) {
|
|
5219
|
+
result.set(headerTimeout, `${timeoutMs}`);
|
|
5220
|
+
}
|
|
5221
|
+
result.set(headerContentType, methodKind == "unary" ? useBinaryFormat ? contentTypeUnaryProto : contentTypeUnaryJson : useBinaryFormat ? contentTypeStreamProto : contentTypeStreamJson);
|
|
5222
|
+
result.set(headerProtocolVersion, protocolVersion);
|
|
5223
|
+
if (!result.has(headerUserAgent) && setUserAgent) ;
|
|
5224
|
+
return result;
|
|
5225
|
+
}
|
|
5226
|
+
function validateResponse$1(methodKind, useBinaryFormat, status, headers) {
|
|
5227
|
+
const mimeType = headers.get(headerContentType);
|
|
5228
|
+
const parsedType = parseContentType(mimeType);
|
|
5229
|
+
if (status !== 200) {
|
|
5230
|
+
const errorFromStatus = new ConnectError(`HTTP ${status}`, codeFromHttpStatus$1(status), headers);
|
|
5231
|
+
if (methodKind == "unary" && parsedType && !parsedType.binary) {
|
|
5232
|
+
return { isUnaryError: true, unaryError: errorFromStatus };
|
|
5233
|
+
}
|
|
5234
|
+
throw errorFromStatus;
|
|
5235
|
+
}
|
|
5236
|
+
const allowedContentType = {
|
|
5237
|
+
binary: useBinaryFormat,
|
|
5238
|
+
stream: methodKind !== "unary"
|
|
5239
|
+
};
|
|
5240
|
+
if ((parsedType === null || parsedType === void 0 ? void 0 : parsedType.binary) !== allowedContentType.binary || parsedType.stream !== allowedContentType.stream) {
|
|
5241
|
+
throw new ConnectError(`unsupported content type ${mimeType}`, parsedType === void 0 ? Code$1.Unknown : Code$1.Internal, headers);
|
|
5242
|
+
}
|
|
5243
|
+
return { isUnaryError: false };
|
|
5244
|
+
}
|
|
5245
|
+
const contentTypePrefix = "application/";
|
|
5246
|
+
function encodeMessageForUrl(message, useBase64) {
|
|
5247
|
+
if (useBase64) {
|
|
5248
|
+
return base64Encode(message, "url");
|
|
5249
|
+
}
|
|
5250
|
+
return encodeURIComponent(new TextDecoder().decode(message));
|
|
5251
|
+
}
|
|
5252
|
+
function transformConnectPostToGetRequest(request, message, useBase64) {
|
|
5253
|
+
let query = `?connect=v${protocolVersion}`;
|
|
5254
|
+
const contentType = request.header.get(headerContentType);
|
|
5255
|
+
if ((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(contentTypePrefix)) === 0) {
|
|
5256
|
+
query += "&encoding=" + encodeURIComponent(contentType.slice(contentTypePrefix.length));
|
|
5257
|
+
}
|
|
5258
|
+
const compression = request.header.get(headerUnaryEncoding);
|
|
5259
|
+
if (compression !== null && compression !== "identity") {
|
|
5260
|
+
query += "&compression=" + encodeURIComponent(compression);
|
|
5261
|
+
useBase64 = true;
|
|
5262
|
+
}
|
|
5263
|
+
if (useBase64) {
|
|
5264
|
+
query += "&base64=1";
|
|
5265
|
+
}
|
|
5266
|
+
query += "&message=" + encodeMessageForUrl(message, useBase64);
|
|
5267
|
+
const url = request.url + query;
|
|
5268
|
+
const header = new Headers(request.header);
|
|
5269
|
+
for (const h of [
|
|
5270
|
+
headerProtocolVersion,
|
|
5271
|
+
headerContentType,
|
|
5272
|
+
headerUnaryContentLength,
|
|
5273
|
+
headerUnaryEncoding,
|
|
5274
|
+
headerUnaryAcceptEncoding
|
|
5275
|
+
]) {
|
|
5276
|
+
header.delete(h);
|
|
5277
|
+
}
|
|
5278
|
+
return Object.assign(Object.assign({}, request), {
|
|
5279
|
+
requestMethod: "GET",
|
|
5280
|
+
url,
|
|
5281
|
+
header
|
|
5282
|
+
});
|
|
5283
|
+
}
|
|
5064
5284
|
function runUnaryCall(opt) {
|
|
5065
5285
|
const next = applyInterceptors(opt.next, opt.interceptors);
|
|
5066
5286
|
const [signal, abort, done] = setupSignal(opt);
|
|
@@ -5129,6 +5349,181 @@ function assertFetchApi() {
|
|
|
5129
5349
|
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.");
|
|
5130
5350
|
}
|
|
5131
5351
|
}
|
|
5352
|
+
var __await$1 = function(v) {
|
|
5353
|
+
return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
|
|
5354
|
+
};
|
|
5355
|
+
var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
|
|
5356
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
5357
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
5358
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
|
|
5359
|
+
return this;
|
|
5360
|
+
}, i;
|
|
5361
|
+
function awaitReturn(f) {
|
|
5362
|
+
return function(v) {
|
|
5363
|
+
return Promise.resolve(v).then(f, reject);
|
|
5364
|
+
};
|
|
5365
|
+
}
|
|
5366
|
+
function verb(n, f) {
|
|
5367
|
+
if (g[n]) {
|
|
5368
|
+
i[n] = function(v) {
|
|
5369
|
+
return new Promise(function(a, b) {
|
|
5370
|
+
q.push([n, v, a, b]) > 1 || resume(n, v);
|
|
5371
|
+
});
|
|
5372
|
+
};
|
|
5373
|
+
if (f) i[n] = f(i[n]);
|
|
5374
|
+
}
|
|
5375
|
+
}
|
|
5376
|
+
function resume(n, v) {
|
|
5377
|
+
try {
|
|
5378
|
+
step(g[n](v));
|
|
5379
|
+
} catch (e) {
|
|
5380
|
+
settle(q[0][3], e);
|
|
5381
|
+
}
|
|
5382
|
+
}
|
|
5383
|
+
function step(r) {
|
|
5384
|
+
r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
5385
|
+
}
|
|
5386
|
+
function fulfill(value) {
|
|
5387
|
+
resume("next", value);
|
|
5388
|
+
}
|
|
5389
|
+
function reject(value) {
|
|
5390
|
+
resume("throw", value);
|
|
5391
|
+
}
|
|
5392
|
+
function settle(f, v) {
|
|
5393
|
+
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
5394
|
+
}
|
|
5395
|
+
};
|
|
5396
|
+
const fetchOptions$1 = {
|
|
5397
|
+
redirect: "error"
|
|
5398
|
+
};
|
|
5399
|
+
function createConnectTransport(options) {
|
|
5400
|
+
var _a;
|
|
5401
|
+
assertFetchApi();
|
|
5402
|
+
const useBinaryFormat = (_a = options.useBinaryFormat) !== null && _a !== void 0 ? _a : false;
|
|
5403
|
+
return {
|
|
5404
|
+
async unary(method, signal, timeoutMs, header, message, contextValues) {
|
|
5405
|
+
const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
|
|
5406
|
+
timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
|
|
5407
|
+
return await runUnaryCall({
|
|
5408
|
+
interceptors: options.interceptors,
|
|
5409
|
+
signal,
|
|
5410
|
+
timeoutMs,
|
|
5411
|
+
req: {
|
|
5412
|
+
stream: false,
|
|
5413
|
+
service: method.parent,
|
|
5414
|
+
method,
|
|
5415
|
+
requestMethod: "POST",
|
|
5416
|
+
url: createMethodUrl(options.baseUrl, method),
|
|
5417
|
+
header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
|
|
5418
|
+
contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
|
|
5419
|
+
message
|
|
5420
|
+
},
|
|
5421
|
+
next: async (req) => {
|
|
5422
|
+
var _a2;
|
|
5423
|
+
const useGet = options.useHttpGet === true && method.idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
|
|
5424
|
+
let body = null;
|
|
5425
|
+
if (useGet) {
|
|
5426
|
+
req = transformConnectPostToGetRequest(req, serialize(req.message), useBinaryFormat);
|
|
5427
|
+
} else {
|
|
5428
|
+
body = serialize(req.message);
|
|
5429
|
+
}
|
|
5430
|
+
const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
|
|
5431
|
+
const response = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body }));
|
|
5432
|
+
const { isUnaryError, unaryError } = validateResponse$1(method.methodKind, useBinaryFormat, response.status, response.headers);
|
|
5433
|
+
if (isUnaryError) {
|
|
5434
|
+
throw errorFromJson(await response.json(), appendHeaders(...trailerDemux(response.headers)), unaryError);
|
|
5435
|
+
}
|
|
5436
|
+
const [demuxedHeader, demuxedTrailer] = trailerDemux(response.headers);
|
|
5437
|
+
return {
|
|
5438
|
+
stream: false,
|
|
5439
|
+
service: method.parent,
|
|
5440
|
+
method,
|
|
5441
|
+
header: demuxedHeader,
|
|
5442
|
+
message: useBinaryFormat ? parse2(new Uint8Array(await response.arrayBuffer())) : fromJson(method.output, await response.json(), getJsonOptions(options.jsonOptions)),
|
|
5443
|
+
trailer: demuxedTrailer
|
|
5444
|
+
};
|
|
5445
|
+
}
|
|
5446
|
+
});
|
|
5447
|
+
},
|
|
5448
|
+
async stream(method, signal, timeoutMs, header, input, contextValues) {
|
|
5449
|
+
const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
|
|
5450
|
+
function parseResponseBody(body, trailerTarget, header2, signal2) {
|
|
5451
|
+
return __asyncGenerator$1(this, arguments, function* parseResponseBody_1() {
|
|
5452
|
+
const reader = createEnvelopeReadableStream(body).getReader();
|
|
5453
|
+
let endStreamReceived = false;
|
|
5454
|
+
for (; ; ) {
|
|
5455
|
+
const result = yield __await$1(reader.read());
|
|
5456
|
+
if (result.done) {
|
|
5457
|
+
break;
|
|
5458
|
+
}
|
|
5459
|
+
const { flags, data } = result.value;
|
|
5460
|
+
if ((flags & compressedFlag) === compressedFlag) {
|
|
5461
|
+
throw new ConnectError(`protocol error: received unsupported compressed output`, Code$1.Internal);
|
|
5462
|
+
}
|
|
5463
|
+
if ((flags & endStreamFlag) === endStreamFlag) {
|
|
5464
|
+
endStreamReceived = true;
|
|
5465
|
+
const endStream = endStreamFromJson(data);
|
|
5466
|
+
if (endStream.error) {
|
|
5467
|
+
const error = endStream.error;
|
|
5468
|
+
header2.forEach((value, key) => {
|
|
5469
|
+
error.metadata.append(key, value);
|
|
5470
|
+
});
|
|
5471
|
+
throw error;
|
|
5472
|
+
}
|
|
5473
|
+
endStream.metadata.forEach((value, key) => trailerTarget.set(key, value));
|
|
5474
|
+
continue;
|
|
5475
|
+
}
|
|
5476
|
+
yield yield __await$1(parse2(data));
|
|
5477
|
+
}
|
|
5478
|
+
if ("throwIfAborted" in signal2) {
|
|
5479
|
+
signal2.throwIfAborted();
|
|
5480
|
+
}
|
|
5481
|
+
if (!endStreamReceived) {
|
|
5482
|
+
throw "missing EndStreamResponse";
|
|
5483
|
+
}
|
|
5484
|
+
});
|
|
5485
|
+
}
|
|
5486
|
+
async function createRequestBody(input2) {
|
|
5487
|
+
if (method.methodKind != "server_streaming") {
|
|
5488
|
+
throw "The fetch API does not support streaming request bodies";
|
|
5489
|
+
}
|
|
5490
|
+
const r = await input2[Symbol.asyncIterator]().next();
|
|
5491
|
+
if (r.done == true) {
|
|
5492
|
+
throw "missing request message";
|
|
5493
|
+
}
|
|
5494
|
+
return encodeEnvelope(0, serialize(r.value));
|
|
5495
|
+
}
|
|
5496
|
+
timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
|
|
5497
|
+
return await runStreamingCall({
|
|
5498
|
+
interceptors: options.interceptors,
|
|
5499
|
+
timeoutMs,
|
|
5500
|
+
signal,
|
|
5501
|
+
req: {
|
|
5502
|
+
stream: true,
|
|
5503
|
+
service: method.parent,
|
|
5504
|
+
method,
|
|
5505
|
+
requestMethod: "POST",
|
|
5506
|
+
url: createMethodUrl(options.baseUrl, method),
|
|
5507
|
+
header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
|
|
5508
|
+
contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
|
|
5509
|
+
message: input
|
|
5510
|
+
},
|
|
5511
|
+
next: async (req) => {
|
|
5512
|
+
var _a2;
|
|
5513
|
+
const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
|
|
5514
|
+
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) }));
|
|
5515
|
+
validateResponse$1(method.methodKind, useBinaryFormat, fRes.status, fRes.headers);
|
|
5516
|
+
if (fRes.body === null) {
|
|
5517
|
+
throw "missing response body";
|
|
5518
|
+
}
|
|
5519
|
+
const trailer = new Headers();
|
|
5520
|
+
const res = Object.assign(Object.assign({}, req), { header: fRes.headers, trailer, message: parseResponseBody(fRes.body, trailer, fRes.headers, req.signal) });
|
|
5521
|
+
return res;
|
|
5522
|
+
}
|
|
5523
|
+
});
|
|
5524
|
+
}
|
|
5525
|
+
};
|
|
5526
|
+
}
|
|
5132
5527
|
function validateTrailer(trailer, header) {
|
|
5133
5528
|
const err = findTrailerError(trailer);
|
|
5134
5529
|
if (err) {
|
|
@@ -5144,12 +5539,12 @@ function validateTrailer(trailer, header) {
|
|
|
5144
5539
|
function requestHeader(useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
|
|
5145
5540
|
var _a, _b;
|
|
5146
5541
|
const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
|
|
5147
|
-
result.set(headerContentType, useBinaryFormat ? contentTypeProto : contentTypeJson);
|
|
5542
|
+
result.set(headerContentType$1, useBinaryFormat ? contentTypeProto : contentTypeJson);
|
|
5148
5543
|
result.set(headerXGrpcWeb, "1");
|
|
5149
|
-
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";
|
|
5544
|
+
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";
|
|
5150
5545
|
result.set(headerXUserAgent, userAgent);
|
|
5151
5546
|
if (timeoutMs !== void 0) {
|
|
5152
|
-
result.set(headerTimeout, `${timeoutMs}m`);
|
|
5547
|
+
result.set(headerTimeout$1, `${timeoutMs}m`);
|
|
5153
5548
|
}
|
|
5154
5549
|
return result;
|
|
5155
5550
|
}
|
|
@@ -5393,7 +5788,7 @@ function createGrpcWebTransport(options) {
|
|
|
5393
5788
|
}
|
|
5394
5789
|
};
|
|
5395
5790
|
}
|
|
5396
|
-
const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBIsoaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGpUBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwiggsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq7AQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCJUCgdSR0FOb2RlEiAKBG5leHQYASABKAsyEi55b3JraWUudjEuUkdBTm9kZRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlgKCE5vZGVBdHRyEg0KBXZhbHVlGAEgASgJEikKCnVwZGF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBISCgppc19yZW1vdmVkGAMgASgIIpQCCghUZXh0Tm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEg0KBXZhbHVlGAIgASgJEikKCnJlbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgEIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEjcKCmF0dHJpYnV0ZXMYBSADKAsyIy55b3JraWUudjEuVGV4dE5vZGUuQXR0cmlidXRlc0VudHJ5GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIkcKClRleHROb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSLdAgoIVHJlZU5vZGUSIQoCaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIMCgR0eXBlGAIgASgJEg0KBXZhbHVlGAMgASgJEikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgFIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEioKC2luc19uZXh0X2lkGAYgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSDQoFZGVwdGgYByABKAUSNwoKYXR0cmlidXRlcxgIIAMoCzIjLnlvcmtpZS52MS5UcmVlTm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiMQoJVHJlZU5vZGVzEiQKB2NvbnRlbnQYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUiRwoKVHJlZU5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFImMKB1RyZWVQb3MSKAoJcGFyZW50X2lkGAEgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSLgoPbGVmdF9zaWJsaW5nX2lkGAIgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQiawoEVXNlchIKCgJpZBgBIAEoCRIVCg1hdXRoX3Byb3ZpZGVyGAIgASgJEhAKCHVzZXJuYW1lGAMgASgJEi4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIokBCgZNZW1iZXISCgoCaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIPCgd1c2VyX2lkGAMgASgJEhAKCHVzZXJuYW1lGAQgASgJEgwKBHJvbGUYBSABKAkSLgoKaW52aXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi6QYKB1Byb2plY3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRISCgpwdWJsaWNfa2V5GAMgASgJEhIKCnNlY3JldF9rZXkYBCABKAkSGAoQYXV0aF93ZWJob29rX3VybBgFIAEoCRIcChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgGIAMoCRIgChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYESABKAQSJgoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBIgASgJEiYKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgTIAEoCRIkChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBQgASgJEhkKEWV2ZW50X3dlYmhvb2tfdXJsGAcgASgJEhwKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAggAygJEiEKGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYFSABKAQSJwofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgWIAEoCRInCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBcgASgJEiUKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBggASgJEiMKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgJIAEoCRIaChJzbmFwc2hvdF90aHJlc2hvbGQYGSABKAMSGQoRc25hcHNob3RfaW50ZXJ2YWwYGiABKAMSJAocbWF4X3N1YnNjcmliZXJzX3Blcl9kb2N1bWVudBgKIAEoBRIkChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAsgASgFEh0KFW1heF9zaXplX3Blcl9kb2N1bWVudBgPIAEoBRIYChByZW1vdmVfb25fZGV0YWNoGBAgASgIEh0KFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgbIAEoCBIXCg9hbGxvd2VkX29yaWdpbnMYDiADKAkSLgoKY3JlYXRlZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwoLTWV0cmljUG9pbnQSEQoJdGltZXN0YW1wGAEgASgDEg0KBXZhbHVlGAIgASgFIqMMChZVcGRhdGFibGVQcm9qZWN0RmllbGRzEioKBG5hbWUYASABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNgoQYXV0aF93ZWJob29rX3VybBgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgDIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkF1dGhXZWJob29rTWV0aG9kcxI+ChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYDCABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRAoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkQKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJCChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEWV2ZW50X3dlYmhvb2tfdXJsGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlElIKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAUgASgLMjQueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuRXZlbnRXZWJob29rRXZlbnRzEj8KGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYECABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRQofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgRIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJFCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkMKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEnNuYXBzaG90X3RocmVzaG9sZBgUIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjYKEXNuYXBzaG90X2ludGVydmFsGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSQQobY2xpZW50X2RlYWN0aXZhdGVfdGhyZXNob2xkGAYgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkEKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRJBChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAggASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSOgoVbWF4X3NpemVfcGVyX2RvY3VtZW50GAogASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSNAoQcmVtb3ZlX29uX2RldGFjaBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSOQoVYXV0b19yZXZpc2lvbl9lbmFibGVkGBYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRJJCg9hbGxvd2VkX29yaWdpbnMYCSABKAsyMC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BbGxvd2VkT3JpZ2lucxolChJBdXRoV2ViaG9va01ldGhvZHMSDwoHbWV0aG9kcxgBIAMoCRokChJFdmVudFdlYmhvb2tFdmVudHMSDgoGZXZlbnRzGAEgAygJGiEKDkFsbG93ZWRPcmlnaW5zEg8KB29yaWdpbnMYASADKAkipwMKD0RvY3VtZW50U3VtbWFyeRIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEcm9vdBgDIAEoCRIYChBhdHRhY2hlZF9jbGllbnRzGAcgASgFEikKDWRvY3VtZW50X3NpemUYCCABKAsyEi55b3JraWUudjEuRG9jU2l6ZRISCgpzY2hlbWFfa2V5GAkgASgJEjwKCXByZXNlbmNlcxgKIAMoCzIpLnlvcmtpZS52MS5Eb2N1bWVudFN1bW1hcnkuUHJlc2VuY2VzRW50cnkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLYWNjZXNzZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGkUKDlByZXNlbmNlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZToCOAEi2gEKDlByZXNlbmNlQ2hhbmdlEjIKBHR5cGUYASABKA4yJC55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UuQ2hhbmdlVHlwZRIlCghwcmVzZW5jZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZSJtCgpDaGFuZ2VUeXBlEhsKF0NIQU5HRV9UWVBFX1VOU1BFQ0lGSUVEEAASEwoPQ0hBTkdFX1RZUEVfUFVUEAESFgoSQ0hBTkdFX1RZUEVfREVMRVRFEAISFQoRQ0hBTkdFX1RZUEVfQ0xFQVIQAyJkCghQcmVzZW5jZRIrCgRkYXRhGAEgAygLMh0ueW9ya2llLnYxLlByZXNlbmNlLkRhdGFFbnRyeRorCglEYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0Cg5DaGFubmVsU3VtbWFyeRILCgNrZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoBSI0CgpDaGVja3BvaW50EhIKCnNlcnZlcl9zZXEYASABKAMSEgoKY2xpZW50X3NlcRgCIAEoDSJhCgtUZXh0Tm9kZVBvcxIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFEhcKD3JlbGF0aXZlX29mZnNldBgDIAEoBSJCCgpUaW1lVGlja2V0Eg8KB2xhbXBvcnQYASABKAMSEQoJZGVsaW1pdGVyGAIgASgNEhAKCGFjdG9yX2lkGAMgASgMIi4KDERvY0V2ZW50Qm9keRINCgV0b3BpYxgBIAEoCRIPCgdwYXlsb2FkGAIgASgMImsKCERvY0V2ZW50EiUKBHR5cGUYASABKA4yFy55b3JraWUudjEuRG9jRXZlbnRUeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIlCgRib2R5GAMgASgLMhcueW9ya2llLnYxLkRvY0V2ZW50Qm9keSLWAQoMQ2hhbm5lbEV2ZW50EioKBHR5cGUYASABKA4yHC55b3JraWUudjEuQ2hhbm5lbEV2ZW50LlR5cGUSEQoJcHVibGlzaGVyGAIgASgJEhUKDXNlc3Npb25fY291bnQYAyABKAMSCwoDc2VxGAQgASgDEg0KBXRvcGljGAUgASgJEg8KB3BheWxvYWQYBiABKAwiQwoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEQoNVFlQRV9QUkVTRU5DRRABEhIKDlRZUEVfQlJPQURDQVNUEAIiJgoIRGF0YVNpemUSDAoEZGF0YRgBIAEoBRIMCgRtZXRhGAIgASgFIk0KB0RvY1NpemUSIQoEbGl2ZRgBIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZRIfCgJnYxgCIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZSKRAQoGU2NoZW1hEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoBRIMCgRib2R5GAQgASgJEh4KBXJ1bGVzGAUgAygLMg8ueW9ya2llLnYxLlJ1bGUSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUAoMVHJlZU5vZGVSdWxlEhEKCW5vZGVfdHlwZRgBIAEoCRIPCgdjb250ZW50GAIgASgJEg0KBW1hcmtzGAMgASgJEg0KBWdyb3VwGAQgASgJIk8KBFJ1bGUSDAoEcGF0aBgBIAEoCRIMCgR0eXBlGAIgASgJEisKCnRyZWVfbm9kZXMYAyADKAsyFy55b3JraWUudjEuVHJlZU5vZGVSdWxlIoMBCg9SZXZpc2lvblN1bW1hcnkSCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSEAoIc25hcHNob3QYBCABKAkSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAq1AIKCVZhbHVlVHlwZRITCg9WQUxVRV9UWVBFX05VTEwQABIWChJWQUxVRV9UWVBFX0JPT0xFQU4QARIWChJWQUxVRV9UWVBFX0lOVEVHRVIQAhITCg9WQUxVRV9UWVBFX0xPTkcQAxIVChFWQUxVRV9UWVBFX0RPVUJMRRAEEhUKEVZBTFVFX1RZUEVfU1RSSU5HEAUSFAoQVkFMVUVfVFlQRV9CWVRFUxAGEhMKD1ZBTFVFX1RZUEVfREFURRAHEhoKFlZBTFVFX1RZUEVfSlNPTl9PQkpFQ1QQCBIZChVWQUxVRV9UWVBFX0pTT05fQVJSQVkQCRITCg9WQUxVRV9UWVBFX1RFWFQQChIaChZWQUxVRV9UWVBFX0lOVEVHRVJfQ05UEAsSFwoTVkFMVUVfVFlQRV9MT05HX0NOVBAMEhMKD1ZBTFVFX1RZUEVfVFJFRRANKqYBCgxEb2NFdmVudFR5cGUSIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfQ0hBTkdFRBAAEiMKH0RPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1dBVENIRUQQARIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9VTldBVENIRUQQAhIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9CUk9BRENBU1QQA0JFChFkZXYueW9ya2llLmFwaS52MVABWi5naXRodWIuY29tL3lvcmtpZS10ZWFtL3lvcmtpZS9hcGkveW9ya2llL3YxO3YxYgZwcm90bzM", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
|
|
5791
|
+
const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItkaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGqQBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDQoFYWN0b3IYBCABKAkakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwinwsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrYAQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSFQoNaGxsX3JlZ2lzdGVycxgHIAEoDEoECAYQBxqpAQoEVHJlZRIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSI/CgdSSFROb2RlEgsKA2tleRgBIAEoCRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlQKB1JHQU5vZGUSIAoEbmV4dBgBIAEoCzISLnlvcmtpZS52MS5SR0FOb2RlEicKB2VsZW1lbnQYAiABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
|
|
5397
5792
|
const SnapshotSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 0);
|
|
5398
5793
|
const ChangePackSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 1);
|
|
5399
5794
|
const ChangeSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 2);
|
|
@@ -5460,6 +5855,7 @@ var ValueType = /* @__PURE__ */ ((ValueType2) => {
|
|
|
5460
5855
|
ValueType2[ValueType2["INTEGER_CNT"] = 11] = "INTEGER_CNT";
|
|
5461
5856
|
ValueType2[ValueType2["LONG_CNT"] = 12] = "LONG_CNT";
|
|
5462
5857
|
ValueType2[ValueType2["TREE"] = 13] = "TREE";
|
|
5858
|
+
ValueType2[ValueType2["INTEGER_DEDUP_CNT"] = 14] = "INTEGER_DEDUP_CNT";
|
|
5463
5859
|
return ValueType2;
|
|
5464
5860
|
})(ValueType || {});
|
|
5465
5861
|
var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
|
|
@@ -5469,7 +5865,7 @@ var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
|
|
|
5469
5865
|
DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
|
|
5470
5866
|
return DocEventType2;
|
|
5471
5867
|
})(DocEventType$1 || {});
|
|
5472
|
-
const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("
|
|
5868
|
+
const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCI+ChRXYXRjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkitgEKFVdhdGNoRG9jdW1lbnRSZXNwb25zZRJJCg5pbml0aWFsaXphdGlvbhgBIAEoCzIvLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UuSW5pdGlhbGl6YXRpb25IABIkCgVldmVudBgCIAEoCzITLnlvcmtpZS52MS5Eb2NFdmVudEgAGiQKDkluaXRpYWxpemF0aW9uEhIKCmNsaWVudF9pZHMYASADKAlCBgoEYm9keSI9ChNXYXRjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCSKDAQoUV2F0Y2hDaGFubmVsUmVzcG9uc2USOQoLaW5pdGlhbGl6ZWQYASABKAsyIi55b3JraWUudjEuV2F0Y2hDaGFubmVsSW5pdGlhbGl6ZWRIABIoCgVldmVudBgCIAEoCzIXLnlvcmtpZS52MS5DaGFubmVsRXZlbnRIAEIGCgRib2R5Ij0KF1dhdGNoQ2hhbm5lbEluaXRpYWxpemVkEhUKDXNlc3Npb25fY291bnQYASABKAMSCwoDc2VxGAIgASgDImsKFVJlbW92ZURvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJEChZSZW1vdmVEb2N1bWVudFJlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sifwoWUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIRCglwdXNoX29ubHkYBCABKAgiRQoXUHVzaFB1bGxDaGFuZ2VzUmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYASABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJjChVDcmVhdGVSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJIkYKFkNyZWF0ZVJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5IlEKEkdldFJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYAyABKAkiQwoTR2V0UmV2aXNpb25SZXNwb25zZRIsCghyZXZpc2lvbhgBIAEoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkidQoUTGlzdFJldmlzaW9uc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRIOCgZvZmZzZXQYBCABKAUSEgoKaXNfZm9yd2FyZBgFIAEoCCJGChVMaXN0UmV2aXNpb25zUmVzcG9uc2USLQoJcmV2aXNpb25zGAEgAygLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJVChZSZXN0b3JlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRITCgtyZXZpc2lvbl9pZBgEIAEoCSIZChdSZXN0b3JlUmV2aXNpb25SZXNwb25zZSI+ChRBdHRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkiQgoVQXR0YWNoQ2hhbm5lbFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAyJSChREZXRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkSEgoKc2Vzc2lvbl9pZBgDIAEoCSIuChVEZXRhY2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJTChVSZWZyZXNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLwoWUmVmcmVzaENoYW5uZWxSZXNwb25zZRIVCg1zZXNzaW9uX2NvdW50GAEgASgDIloKEEJyb2FkY2FzdFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEg0KBXRvcGljGAMgASgJEg8KB3BheWxvYWQYBCABKAwiEwoRQnJvYWRjYXN0UmVzcG9uc2UyxQsKDVlvcmtpZVNlcnZpY2USVwoOQWN0aXZhdGVDbGllbnQSIC55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0GiEueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJdChBEZWFjdGl2YXRlQ2xpZW50EiIueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXF1ZXN0GiMueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXNwb25zZSIAElcKDkF0dGFjaERvY3VtZW50EiAueW9ya2llLnYxLkF0dGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoORGV0YWNoRG9jdW1lbnQSIC55b3JraWUudjEuRGV0YWNoRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVzcG9uc2UiABJXCg5SZW1vdmVEb2N1bWVudBIgLnlvcmtpZS52MS5SZW1vdmVEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXNwb25zZSIAEloKD1B1c2hQdWxsQ2hhbmdlcxIhLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXF1ZXN0GiIueW9ya2llLnYxLlB1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlIgASPgoFV2F0Y2gSFy55b3JraWUudjEuV2F0Y2hSZXF1ZXN0GhgueW9ya2llLnYxLldhdGNoUmVzcG9uc2UiADABElYKDVdhdGNoRG9jdW1lbnQSHy55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlcXVlc3QaIC55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlc3BvbnNlIgAwARJTCgxXYXRjaENoYW5uZWwSHi55b3JraWUudjEuV2F0Y2hDaGFubmVsUmVxdWVzdBofLnlvcmtpZS52MS5XYXRjaENoYW5uZWxSZXNwb25zZSIAMAESVwoOQ3JlYXRlUmV2aXNpb24SIC55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXF1ZXN0GiEueW9ya2llLnYxLkNyZWF0ZVJldmlzaW9uUmVzcG9uc2UiABJOCgtHZXRSZXZpc2lvbhIdLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlcXVlc3QaHi55b3JraWUudjEuR2V0UmV2aXNpb25SZXNwb25zZSIAElQKDUxpc3RSZXZpc2lvbnMSHy55b3JraWUudjEuTGlzdFJldmlzaW9uc1JlcXVlc3QaIC55b3JraWUudjEuTGlzdFJldmlzaW9uc1Jlc3BvbnNlIgASWgoPUmVzdG9yZVJldmlzaW9uEiEueW9ya2llLnYxLlJlc3RvcmVSZXZpc2lvblJlcXVlc3QaIi55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiABJUCg1BdHRhY2hDaGFubmVsEh8ueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXF1ZXN0GiAueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXNwb25zZSIAElQKDURldGFjaENoYW5uZWwSHy55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVwoOUmVmcmVzaENoYW5uZWwSIC55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXF1ZXN0GiEueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVzcG9uc2UiABJICglCcm9hZGNhc3QSGy55b3JraWUudjEuQnJvYWRjYXN0UmVxdWVzdBocLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXNwb25zZSIAQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_src_api_yorkie_v1_resources]);
|
|
5473
5869
|
const YorkieService = /* @__PURE__ */ serviceDesc(file_src_api_yorkie_v1_yorkie, 0);
|
|
5474
5870
|
const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
|
|
5475
5871
|
const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
|
|
@@ -5616,9 +6012,9 @@ class TimeTicket {
|
|
|
5616
6012
|
} else if (other.lamport > this.lamport) {
|
|
5617
6013
|
return -1;
|
|
5618
6014
|
}
|
|
5619
|
-
const
|
|
5620
|
-
if (
|
|
5621
|
-
return
|
|
6015
|
+
const compare = this.actorID.localeCompare(other.actorID);
|
|
6016
|
+
if (compare !== 0) {
|
|
6017
|
+
return compare;
|
|
5622
6018
|
}
|
|
5623
6019
|
if (this.delimiter > other.delimiter) {
|
|
5624
6020
|
return 1;
|
|
@@ -6611,923 +7007,32 @@ class SplayTree {
|
|
|
6611
7007
|
return false;
|
|
6612
7008
|
}
|
|
6613
7009
|
}
|
|
6614
|
-
|
|
6615
|
-
|
|
6616
|
-
|
|
6617
|
-
|
|
6618
|
-
|
|
6619
|
-
|
|
6620
|
-
|
|
6621
|
-
97,
|
|
6622
|
-
115,
|
|
6623
|
-
109,
|
|
6624
|
-
// version 1
|
|
6625
|
-
1,
|
|
6626
|
-
0,
|
|
6627
|
-
0,
|
|
6628
|
-
0,
|
|
6629
|
-
// section "type"
|
|
6630
|
-
1,
|
|
6631
|
-
13,
|
|
6632
|
-
2,
|
|
6633
|
-
// 0, () => i32
|
|
6634
|
-
96,
|
|
6635
|
-
0,
|
|
6636
|
-
1,
|
|
6637
|
-
127,
|
|
6638
|
-
// 1, (i32, i32, i32, i32) => i32
|
|
6639
|
-
96,
|
|
6640
|
-
4,
|
|
6641
|
-
127,
|
|
6642
|
-
127,
|
|
6643
|
-
127,
|
|
6644
|
-
127,
|
|
6645
|
-
1,
|
|
6646
|
-
127,
|
|
6647
|
-
// section "function"
|
|
6648
|
-
3,
|
|
6649
|
-
7,
|
|
6650
|
-
6,
|
|
6651
|
-
// 0, type 0
|
|
6652
|
-
0,
|
|
6653
|
-
// 1, type 1
|
|
6654
|
-
1,
|
|
6655
|
-
// 2, type 1
|
|
6656
|
-
1,
|
|
6657
|
-
// 3, type 1
|
|
6658
|
-
1,
|
|
6659
|
-
// 4, type 1
|
|
6660
|
-
1,
|
|
6661
|
-
// 5, type 1
|
|
6662
|
-
1,
|
|
6663
|
-
// section "global"
|
|
6664
|
-
6,
|
|
6665
|
-
6,
|
|
6666
|
-
1,
|
|
6667
|
-
// 0, "high", mutable i32
|
|
6668
|
-
127,
|
|
6669
|
-
1,
|
|
6670
|
-
65,
|
|
6671
|
-
0,
|
|
6672
|
-
11,
|
|
6673
|
-
// section "export"
|
|
6674
|
-
7,
|
|
6675
|
-
50,
|
|
6676
|
-
6,
|
|
6677
|
-
// 0, "mul"
|
|
6678
|
-
3,
|
|
6679
|
-
109,
|
|
6680
|
-
117,
|
|
6681
|
-
108,
|
|
6682
|
-
0,
|
|
6683
|
-
1,
|
|
6684
|
-
// 1, "div_s"
|
|
6685
|
-
5,
|
|
6686
|
-
100,
|
|
6687
|
-
105,
|
|
6688
|
-
118,
|
|
6689
|
-
95,
|
|
6690
|
-
115,
|
|
6691
|
-
0,
|
|
6692
|
-
2,
|
|
6693
|
-
// 2, "div_u"
|
|
6694
|
-
5,
|
|
6695
|
-
100,
|
|
6696
|
-
105,
|
|
6697
|
-
118,
|
|
6698
|
-
95,
|
|
6699
|
-
117,
|
|
6700
|
-
0,
|
|
6701
|
-
3,
|
|
6702
|
-
// 3, "rem_s"
|
|
6703
|
-
5,
|
|
6704
|
-
114,
|
|
6705
|
-
101,
|
|
6706
|
-
109,
|
|
6707
|
-
95,
|
|
6708
|
-
115,
|
|
6709
|
-
0,
|
|
6710
|
-
4,
|
|
6711
|
-
// 4, "rem_u"
|
|
6712
|
-
5,
|
|
6713
|
-
114,
|
|
6714
|
-
101,
|
|
6715
|
-
109,
|
|
6716
|
-
95,
|
|
6717
|
-
117,
|
|
6718
|
-
0,
|
|
6719
|
-
5,
|
|
6720
|
-
// 5, "get_high"
|
|
6721
|
-
8,
|
|
6722
|
-
103,
|
|
6723
|
-
101,
|
|
6724
|
-
116,
|
|
6725
|
-
95,
|
|
6726
|
-
104,
|
|
6727
|
-
105,
|
|
6728
|
-
103,
|
|
6729
|
-
104,
|
|
6730
|
-
0,
|
|
6731
|
-
0,
|
|
6732
|
-
// section "code"
|
|
6733
|
-
10,
|
|
6734
|
-
191,
|
|
6735
|
-
1,
|
|
6736
|
-
6,
|
|
6737
|
-
// 0, "get_high"
|
|
6738
|
-
4,
|
|
6739
|
-
0,
|
|
6740
|
-
35,
|
|
6741
|
-
0,
|
|
6742
|
-
11,
|
|
6743
|
-
// 1, "mul"
|
|
6744
|
-
36,
|
|
6745
|
-
1,
|
|
6746
|
-
1,
|
|
6747
|
-
126,
|
|
6748
|
-
32,
|
|
6749
|
-
0,
|
|
6750
|
-
173,
|
|
6751
|
-
32,
|
|
6752
|
-
1,
|
|
6753
|
-
173,
|
|
6754
|
-
66,
|
|
6755
|
-
32,
|
|
6756
|
-
134,
|
|
6757
|
-
132,
|
|
6758
|
-
32,
|
|
6759
|
-
2,
|
|
6760
|
-
173,
|
|
6761
|
-
32,
|
|
6762
|
-
3,
|
|
6763
|
-
173,
|
|
6764
|
-
66,
|
|
6765
|
-
32,
|
|
6766
|
-
134,
|
|
6767
|
-
132,
|
|
6768
|
-
126,
|
|
6769
|
-
34,
|
|
6770
|
-
4,
|
|
6771
|
-
66,
|
|
6772
|
-
32,
|
|
6773
|
-
135,
|
|
6774
|
-
167,
|
|
6775
|
-
36,
|
|
6776
|
-
0,
|
|
6777
|
-
32,
|
|
6778
|
-
4,
|
|
6779
|
-
167,
|
|
6780
|
-
11,
|
|
6781
|
-
// 2, "div_s"
|
|
6782
|
-
36,
|
|
6783
|
-
1,
|
|
6784
|
-
1,
|
|
6785
|
-
126,
|
|
6786
|
-
32,
|
|
6787
|
-
0,
|
|
6788
|
-
173,
|
|
6789
|
-
32,
|
|
6790
|
-
1,
|
|
6791
|
-
173,
|
|
6792
|
-
66,
|
|
6793
|
-
32,
|
|
6794
|
-
134,
|
|
6795
|
-
132,
|
|
6796
|
-
32,
|
|
6797
|
-
2,
|
|
6798
|
-
173,
|
|
6799
|
-
32,
|
|
6800
|
-
3,
|
|
6801
|
-
173,
|
|
6802
|
-
66,
|
|
6803
|
-
32,
|
|
6804
|
-
134,
|
|
6805
|
-
132,
|
|
6806
|
-
127,
|
|
6807
|
-
34,
|
|
6808
|
-
4,
|
|
6809
|
-
66,
|
|
6810
|
-
32,
|
|
6811
|
-
135,
|
|
6812
|
-
167,
|
|
6813
|
-
36,
|
|
6814
|
-
0,
|
|
6815
|
-
32,
|
|
6816
|
-
4,
|
|
6817
|
-
167,
|
|
6818
|
-
11,
|
|
6819
|
-
// 3, "div_u"
|
|
6820
|
-
36,
|
|
6821
|
-
1,
|
|
6822
|
-
1,
|
|
6823
|
-
126,
|
|
6824
|
-
32,
|
|
6825
|
-
0,
|
|
6826
|
-
173,
|
|
6827
|
-
32,
|
|
6828
|
-
1,
|
|
6829
|
-
173,
|
|
6830
|
-
66,
|
|
6831
|
-
32,
|
|
6832
|
-
134,
|
|
6833
|
-
132,
|
|
6834
|
-
32,
|
|
6835
|
-
2,
|
|
6836
|
-
173,
|
|
6837
|
-
32,
|
|
6838
|
-
3,
|
|
6839
|
-
173,
|
|
6840
|
-
66,
|
|
6841
|
-
32,
|
|
6842
|
-
134,
|
|
6843
|
-
132,
|
|
6844
|
-
128,
|
|
6845
|
-
34,
|
|
6846
|
-
4,
|
|
6847
|
-
66,
|
|
6848
|
-
32,
|
|
6849
|
-
135,
|
|
6850
|
-
167,
|
|
6851
|
-
36,
|
|
6852
|
-
0,
|
|
6853
|
-
32,
|
|
6854
|
-
4,
|
|
6855
|
-
167,
|
|
6856
|
-
11,
|
|
6857
|
-
// 4, "rem_s"
|
|
6858
|
-
36,
|
|
6859
|
-
1,
|
|
6860
|
-
1,
|
|
6861
|
-
126,
|
|
6862
|
-
32,
|
|
6863
|
-
0,
|
|
6864
|
-
173,
|
|
6865
|
-
32,
|
|
6866
|
-
1,
|
|
6867
|
-
173,
|
|
6868
|
-
66,
|
|
6869
|
-
32,
|
|
6870
|
-
134,
|
|
6871
|
-
132,
|
|
6872
|
-
32,
|
|
6873
|
-
2,
|
|
6874
|
-
173,
|
|
6875
|
-
32,
|
|
6876
|
-
3,
|
|
6877
|
-
173,
|
|
6878
|
-
66,
|
|
6879
|
-
32,
|
|
6880
|
-
134,
|
|
6881
|
-
132,
|
|
6882
|
-
129,
|
|
6883
|
-
34,
|
|
6884
|
-
4,
|
|
6885
|
-
66,
|
|
6886
|
-
32,
|
|
6887
|
-
135,
|
|
6888
|
-
167,
|
|
6889
|
-
36,
|
|
6890
|
-
0,
|
|
6891
|
-
32,
|
|
6892
|
-
4,
|
|
6893
|
-
167,
|
|
6894
|
-
11,
|
|
6895
|
-
// 5, "rem_u"
|
|
6896
|
-
36,
|
|
6897
|
-
1,
|
|
6898
|
-
1,
|
|
6899
|
-
126,
|
|
6900
|
-
32,
|
|
6901
|
-
0,
|
|
6902
|
-
173,
|
|
6903
|
-
32,
|
|
6904
|
-
1,
|
|
6905
|
-
173,
|
|
6906
|
-
66,
|
|
6907
|
-
32,
|
|
6908
|
-
134,
|
|
6909
|
-
132,
|
|
6910
|
-
32,
|
|
6911
|
-
2,
|
|
6912
|
-
173,
|
|
6913
|
-
32,
|
|
6914
|
-
3,
|
|
6915
|
-
173,
|
|
6916
|
-
66,
|
|
6917
|
-
32,
|
|
6918
|
-
134,
|
|
6919
|
-
132,
|
|
6920
|
-
130,
|
|
6921
|
-
34,
|
|
6922
|
-
4,
|
|
6923
|
-
66,
|
|
6924
|
-
32,
|
|
6925
|
-
135,
|
|
6926
|
-
167,
|
|
6927
|
-
36,
|
|
6928
|
-
0,
|
|
6929
|
-
32,
|
|
6930
|
-
4,
|
|
6931
|
-
167,
|
|
6932
|
-
11
|
|
6933
|
-
])
|
|
6934
|
-
),
|
|
6935
|
-
{}
|
|
6936
|
-
).exports;
|
|
6937
|
-
} catch {
|
|
6938
|
-
}
|
|
6939
|
-
function Long(low, high, unsigned) {
|
|
6940
|
-
this.low = low | 0;
|
|
6941
|
-
this.high = high | 0;
|
|
6942
|
-
this.unsigned = !!unsigned;
|
|
6943
|
-
}
|
|
6944
|
-
Long.prototype.__isLong__;
|
|
6945
|
-
Object.defineProperty(Long.prototype, "__isLong__", { value: true });
|
|
6946
|
-
function isLong$1(obj) {
|
|
6947
|
-
return (obj && obj["__isLong__"]) === true;
|
|
6948
|
-
}
|
|
6949
|
-
function ctz32(value) {
|
|
6950
|
-
var c = Math.clz32(value & -value);
|
|
6951
|
-
return value ? 31 - c : c;
|
|
6952
|
-
}
|
|
6953
|
-
Long.isLong = isLong$1;
|
|
6954
|
-
var INT_CACHE = {};
|
|
6955
|
-
var UINT_CACHE = {};
|
|
6956
|
-
function fromInt(value, unsigned) {
|
|
6957
|
-
var obj, cachedObj, cache;
|
|
6958
|
-
if (unsigned) {
|
|
6959
|
-
value >>>= 0;
|
|
6960
|
-
if (cache = 0 <= value && value < 256) {
|
|
6961
|
-
cachedObj = UINT_CACHE[value];
|
|
6962
|
-
if (cachedObj) return cachedObj;
|
|
6963
|
-
}
|
|
6964
|
-
obj = fromBits(value, 0, true);
|
|
6965
|
-
if (cache) UINT_CACHE[value] = obj;
|
|
6966
|
-
return obj;
|
|
6967
|
-
} else {
|
|
6968
|
-
value |= 0;
|
|
6969
|
-
if (cache = -128 <= value && value < 128) {
|
|
6970
|
-
cachedObj = INT_CACHE[value];
|
|
6971
|
-
if (cachedObj) return cachedObj;
|
|
6972
|
-
}
|
|
6973
|
-
obj = fromBits(value, value < 0 ? -1 : 0, false);
|
|
6974
|
-
if (cache) INT_CACHE[value] = obj;
|
|
6975
|
-
return obj;
|
|
7010
|
+
const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
|
|
7011
|
+
function bigintToBytesLE(value) {
|
|
7012
|
+
const buf = new Uint8Array(8);
|
|
7013
|
+
let v = BigInt.asUintN(64, value);
|
|
7014
|
+
for (let i = 0; i < 8; i++) {
|
|
7015
|
+
buf[i] = Number(v & 0xffn);
|
|
7016
|
+
v >>= 8n;
|
|
6976
7017
|
}
|
|
7018
|
+
return buf;
|
|
6977
7019
|
}
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
if (value < 0) return UZERO;
|
|
6983
|
-
if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
|
|
6984
|
-
} else {
|
|
6985
|
-
if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
|
|
6986
|
-
if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
|
|
6987
|
-
}
|
|
6988
|
-
if (value < 0) return fromNumber(-value, unsigned).neg();
|
|
6989
|
-
return fromBits(
|
|
6990
|
-
value % TWO_PWR_32_DBL | 0,
|
|
6991
|
-
value / TWO_PWR_32_DBL | 0,
|
|
6992
|
-
unsigned
|
|
6993
|
-
);
|
|
6994
|
-
}
|
|
6995
|
-
Long.fromNumber = fromNumber;
|
|
6996
|
-
function fromBits(lowBits, highBits, unsigned) {
|
|
6997
|
-
return new Long(lowBits, highBits, unsigned);
|
|
6998
|
-
}
|
|
6999
|
-
Long.fromBits = fromBits;
|
|
7000
|
-
var pow_dbl = Math.pow;
|
|
7001
|
-
function fromString(str, unsigned, radix) {
|
|
7002
|
-
if (str.length === 0) throw Error("empty string");
|
|
7003
|
-
if (typeof unsigned === "number") {
|
|
7004
|
-
radix = unsigned;
|
|
7005
|
-
unsigned = false;
|
|
7006
|
-
} else {
|
|
7007
|
-
unsigned = !!unsigned;
|
|
7008
|
-
}
|
|
7009
|
-
if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
|
|
7010
|
-
return unsigned ? UZERO : ZERO;
|
|
7011
|
-
radix = radix || 10;
|
|
7012
|
-
if (radix < 2 || 36 < radix) throw RangeError("radix");
|
|
7013
|
-
var p;
|
|
7014
|
-
if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen");
|
|
7015
|
-
else if (p === 0) {
|
|
7016
|
-
return fromString(str.substring(1), unsigned, radix).neg();
|
|
7017
|
-
}
|
|
7018
|
-
var radixToPower = fromNumber(pow_dbl(radix, 8));
|
|
7019
|
-
var result = ZERO;
|
|
7020
|
-
for (var i = 0; i < str.length; i += 8) {
|
|
7021
|
-
var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);
|
|
7022
|
-
if (size < 8) {
|
|
7023
|
-
var power = fromNumber(pow_dbl(radix, size));
|
|
7024
|
-
result = result.mul(power).add(fromNumber(value));
|
|
7025
|
-
} else {
|
|
7026
|
-
result = result.mul(radixToPower);
|
|
7027
|
-
result = result.add(fromNumber(value));
|
|
7028
|
-
}
|
|
7020
|
+
function bigintFromBytesLE(bytes) {
|
|
7021
|
+
let v = 0n;
|
|
7022
|
+
for (let i = 7; i >= 0; i--) {
|
|
7023
|
+
v = v << 8n | BigInt(bytes[i]);
|
|
7029
7024
|
}
|
|
7030
|
-
|
|
7031
|
-
return result;
|
|
7025
|
+
return BigInt.asIntN(64, v);
|
|
7032
7026
|
}
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
return fromBits(
|
|
7038
|
-
val.low,
|
|
7039
|
-
val.high,
|
|
7040
|
-
typeof unsigned === "boolean" ? unsigned : val.unsigned
|
|
7041
|
-
);
|
|
7042
|
-
}
|
|
7043
|
-
Long.fromValue = fromValue;
|
|
7044
|
-
var TWO_PWR_16_DBL = 1 << 16;
|
|
7045
|
-
var TWO_PWR_24_DBL = 1 << 24;
|
|
7046
|
-
var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
|
|
7047
|
-
var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
|
|
7048
|
-
var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
|
|
7049
|
-
var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
|
|
7050
|
-
var ZERO = fromInt(0);
|
|
7051
|
-
Long.ZERO = ZERO;
|
|
7052
|
-
var UZERO = fromInt(0, true);
|
|
7053
|
-
Long.UZERO = UZERO;
|
|
7054
|
-
var ONE = fromInt(1);
|
|
7055
|
-
Long.ONE = ONE;
|
|
7056
|
-
var UONE = fromInt(1, true);
|
|
7057
|
-
Long.UONE = UONE;
|
|
7058
|
-
var NEG_ONE = fromInt(-1);
|
|
7059
|
-
Long.NEG_ONE = NEG_ONE;
|
|
7060
|
-
var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false);
|
|
7061
|
-
Long.MAX_VALUE = MAX_VALUE;
|
|
7062
|
-
var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true);
|
|
7063
|
-
Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
|
|
7064
|
-
var MIN_VALUE = fromBits(0, 2147483648 | 0, false);
|
|
7065
|
-
Long.MIN_VALUE = MIN_VALUE;
|
|
7066
|
-
var LongPrototype = Long.prototype;
|
|
7067
|
-
LongPrototype.toInt = function toInt() {
|
|
7068
|
-
return this.unsigned ? this.low >>> 0 : this.low;
|
|
7069
|
-
};
|
|
7070
|
-
LongPrototype.toNumber = function toNumber() {
|
|
7071
|
-
if (this.unsigned)
|
|
7072
|
-
return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
|
|
7073
|
-
return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
|
|
7074
|
-
};
|
|
7075
|
-
LongPrototype.toString = function toString(radix) {
|
|
7076
|
-
radix = radix || 10;
|
|
7077
|
-
if (radix < 2 || 36 < radix) throw RangeError("radix");
|
|
7078
|
-
if (this.isZero()) return "0";
|
|
7079
|
-
if (this.isNegative()) {
|
|
7080
|
-
if (this.eq(MIN_VALUE)) {
|
|
7081
|
-
var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this);
|
|
7082
|
-
return div.toString(radix) + rem1.toInt().toString(radix);
|
|
7083
|
-
} else return "-" + this.neg().toString(radix);
|
|
7084
|
-
}
|
|
7085
|
-
var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this;
|
|
7086
|
-
var result = "";
|
|
7087
|
-
while (true) {
|
|
7088
|
-
var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix);
|
|
7089
|
-
rem = remDiv;
|
|
7090
|
-
if (rem.isZero()) return digits + result;
|
|
7091
|
-
else {
|
|
7092
|
-
while (digits.length < 6) digits = "0" + digits;
|
|
7093
|
-
result = "" + digits + result;
|
|
7094
|
-
}
|
|
7095
|
-
}
|
|
7096
|
-
};
|
|
7097
|
-
LongPrototype.getHighBits = function getHighBits() {
|
|
7098
|
-
return this.high;
|
|
7099
|
-
};
|
|
7100
|
-
LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
|
|
7101
|
-
return this.high >>> 0;
|
|
7102
|
-
};
|
|
7103
|
-
LongPrototype.getLowBits = function getLowBits() {
|
|
7104
|
-
return this.low;
|
|
7105
|
-
};
|
|
7106
|
-
LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
|
|
7107
|
-
return this.low >>> 0;
|
|
7108
|
-
};
|
|
7109
|
-
LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
|
|
7110
|
-
if (this.isNegative())
|
|
7111
|
-
return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
|
|
7112
|
-
var val = this.high != 0 ? this.high : this.low;
|
|
7113
|
-
for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
|
|
7114
|
-
return this.high != 0 ? bit + 33 : bit + 1;
|
|
7115
|
-
};
|
|
7116
|
-
LongPrototype.isSafeInteger = function isSafeInteger() {
|
|
7117
|
-
var top11Bits = this.high >> 21;
|
|
7118
|
-
if (!top11Bits) return true;
|
|
7119
|
-
if (this.unsigned) return false;
|
|
7120
|
-
return top11Bits === -1 && !(this.low === 0 && this.high === -2097152);
|
|
7121
|
-
};
|
|
7122
|
-
LongPrototype.isZero = function isZero() {
|
|
7123
|
-
return this.high === 0 && this.low === 0;
|
|
7124
|
-
};
|
|
7125
|
-
LongPrototype.eqz = LongPrototype.isZero;
|
|
7126
|
-
LongPrototype.isNegative = function isNegative() {
|
|
7127
|
-
return !this.unsigned && this.high < 0;
|
|
7128
|
-
};
|
|
7129
|
-
LongPrototype.isPositive = function isPositive() {
|
|
7130
|
-
return this.unsigned || this.high >= 0;
|
|
7131
|
-
};
|
|
7132
|
-
LongPrototype.isOdd = function isOdd() {
|
|
7133
|
-
return (this.low & 1) === 1;
|
|
7134
|
-
};
|
|
7135
|
-
LongPrototype.isEven = function isEven() {
|
|
7136
|
-
return (this.low & 1) === 0;
|
|
7137
|
-
};
|
|
7138
|
-
LongPrototype.equals = function equals(other) {
|
|
7139
|
-
if (!isLong$1(other)) other = fromValue(other);
|
|
7140
|
-
if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1)
|
|
7141
|
-
return false;
|
|
7142
|
-
return this.high === other.high && this.low === other.low;
|
|
7143
|
-
};
|
|
7144
|
-
LongPrototype.eq = LongPrototype.equals;
|
|
7145
|
-
LongPrototype.notEquals = function notEquals(other) {
|
|
7146
|
-
return !this.eq(
|
|
7147
|
-
/* validates */
|
|
7148
|
-
other
|
|
7149
|
-
);
|
|
7150
|
-
};
|
|
7151
|
-
LongPrototype.neq = LongPrototype.notEquals;
|
|
7152
|
-
LongPrototype.ne = LongPrototype.notEquals;
|
|
7153
|
-
LongPrototype.lessThan = function lessThan(other) {
|
|
7154
|
-
return this.comp(
|
|
7155
|
-
/* validates */
|
|
7156
|
-
other
|
|
7157
|
-
) < 0;
|
|
7158
|
-
};
|
|
7159
|
-
LongPrototype.lt = LongPrototype.lessThan;
|
|
7160
|
-
LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
|
|
7161
|
-
return this.comp(
|
|
7162
|
-
/* validates */
|
|
7163
|
-
other
|
|
7164
|
-
) <= 0;
|
|
7165
|
-
};
|
|
7166
|
-
LongPrototype.lte = LongPrototype.lessThanOrEqual;
|
|
7167
|
-
LongPrototype.le = LongPrototype.lessThanOrEqual;
|
|
7168
|
-
LongPrototype.greaterThan = function greaterThan(other) {
|
|
7169
|
-
return this.comp(
|
|
7170
|
-
/* validates */
|
|
7171
|
-
other
|
|
7172
|
-
) > 0;
|
|
7173
|
-
};
|
|
7174
|
-
LongPrototype.gt = LongPrototype.greaterThan;
|
|
7175
|
-
LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
|
|
7176
|
-
return this.comp(
|
|
7177
|
-
/* validates */
|
|
7178
|
-
other
|
|
7179
|
-
) >= 0;
|
|
7180
|
-
};
|
|
7181
|
-
LongPrototype.gte = LongPrototype.greaterThanOrEqual;
|
|
7182
|
-
LongPrototype.ge = LongPrototype.greaterThanOrEqual;
|
|
7183
|
-
LongPrototype.compare = function compare(other) {
|
|
7184
|
-
if (!isLong$1(other)) other = fromValue(other);
|
|
7185
|
-
if (this.eq(other)) return 0;
|
|
7186
|
-
var thisNeg = this.isNegative(), otherNeg = other.isNegative();
|
|
7187
|
-
if (thisNeg && !otherNeg) return -1;
|
|
7188
|
-
if (!thisNeg && otherNeg) return 1;
|
|
7189
|
-
if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
|
|
7190
|
-
return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
|
|
7191
|
-
};
|
|
7192
|
-
LongPrototype.comp = LongPrototype.compare;
|
|
7193
|
-
LongPrototype.negate = function negate2() {
|
|
7194
|
-
if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
|
|
7195
|
-
return this.not().add(ONE);
|
|
7196
|
-
};
|
|
7197
|
-
LongPrototype.neg = LongPrototype.negate;
|
|
7198
|
-
LongPrototype.add = function add(addend) {
|
|
7199
|
-
if (!isLong$1(addend)) addend = fromValue(addend);
|
|
7200
|
-
var a48 = this.high >>> 16;
|
|
7201
|
-
var a32 = this.high & 65535;
|
|
7202
|
-
var a16 = this.low >>> 16;
|
|
7203
|
-
var a00 = this.low & 65535;
|
|
7204
|
-
var b48 = addend.high >>> 16;
|
|
7205
|
-
var b32 = addend.high & 65535;
|
|
7206
|
-
var b16 = addend.low >>> 16;
|
|
7207
|
-
var b00 = addend.low & 65535;
|
|
7208
|
-
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
|
|
7209
|
-
c00 += a00 + b00;
|
|
7210
|
-
c16 += c00 >>> 16;
|
|
7211
|
-
c00 &= 65535;
|
|
7212
|
-
c16 += a16 + b16;
|
|
7213
|
-
c32 += c16 >>> 16;
|
|
7214
|
-
c16 &= 65535;
|
|
7215
|
-
c32 += a32 + b32;
|
|
7216
|
-
c48 += c32 >>> 16;
|
|
7217
|
-
c32 &= 65535;
|
|
7218
|
-
c48 += a48 + b48;
|
|
7219
|
-
c48 &= 65535;
|
|
7220
|
-
return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
|
|
7221
|
-
};
|
|
7222
|
-
LongPrototype.subtract = function subtract(subtrahend) {
|
|
7223
|
-
if (!isLong$1(subtrahend)) subtrahend = fromValue(subtrahend);
|
|
7224
|
-
return this.add(subtrahend.neg());
|
|
7225
|
-
};
|
|
7226
|
-
LongPrototype.sub = LongPrototype.subtract;
|
|
7227
|
-
LongPrototype.multiply = function multiply(multiplier) {
|
|
7228
|
-
if (this.isZero()) return this;
|
|
7229
|
-
if (!isLong$1(multiplier)) multiplier = fromValue(multiplier);
|
|
7230
|
-
if (wasm) {
|
|
7231
|
-
var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
|
|
7232
|
-
return fromBits(low, wasm["get_high"](), this.unsigned);
|
|
7233
|
-
}
|
|
7234
|
-
if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
|
|
7235
|
-
if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
|
|
7236
|
-
if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
|
|
7237
|
-
if (this.isNegative()) {
|
|
7238
|
-
if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());
|
|
7239
|
-
else return this.neg().mul(multiplier).neg();
|
|
7240
|
-
} else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
|
|
7241
|
-
if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
|
|
7242
|
-
return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
|
|
7243
|
-
var a48 = this.high >>> 16;
|
|
7244
|
-
var a32 = this.high & 65535;
|
|
7245
|
-
var a16 = this.low >>> 16;
|
|
7246
|
-
var a00 = this.low & 65535;
|
|
7247
|
-
var b48 = multiplier.high >>> 16;
|
|
7248
|
-
var b32 = multiplier.high & 65535;
|
|
7249
|
-
var b16 = multiplier.low >>> 16;
|
|
7250
|
-
var b00 = multiplier.low & 65535;
|
|
7251
|
-
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
|
|
7252
|
-
c00 += a00 * b00;
|
|
7253
|
-
c16 += c00 >>> 16;
|
|
7254
|
-
c00 &= 65535;
|
|
7255
|
-
c16 += a16 * b00;
|
|
7256
|
-
c32 += c16 >>> 16;
|
|
7257
|
-
c16 &= 65535;
|
|
7258
|
-
c16 += a00 * b16;
|
|
7259
|
-
c32 += c16 >>> 16;
|
|
7260
|
-
c16 &= 65535;
|
|
7261
|
-
c32 += a32 * b00;
|
|
7262
|
-
c48 += c32 >>> 16;
|
|
7263
|
-
c32 &= 65535;
|
|
7264
|
-
c32 += a16 * b16;
|
|
7265
|
-
c48 += c32 >>> 16;
|
|
7266
|
-
c32 &= 65535;
|
|
7267
|
-
c32 += a00 * b32;
|
|
7268
|
-
c48 += c32 >>> 16;
|
|
7269
|
-
c32 &= 65535;
|
|
7270
|
-
c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
|
|
7271
|
-
c48 &= 65535;
|
|
7272
|
-
return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
|
|
7273
|
-
};
|
|
7274
|
-
LongPrototype.mul = LongPrototype.multiply;
|
|
7275
|
-
LongPrototype.divide = function divide(divisor) {
|
|
7276
|
-
if (!isLong$1(divisor)) divisor = fromValue(divisor);
|
|
7277
|
-
if (divisor.isZero()) throw Error("division by zero");
|
|
7278
|
-
if (wasm) {
|
|
7279
|
-
if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) {
|
|
7280
|
-
return this;
|
|
7281
|
-
}
|
|
7282
|
-
var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(
|
|
7283
|
-
this.low,
|
|
7284
|
-
this.high,
|
|
7285
|
-
divisor.low,
|
|
7286
|
-
divisor.high
|
|
7287
|
-
);
|
|
7288
|
-
return fromBits(low, wasm["get_high"](), this.unsigned);
|
|
7289
|
-
}
|
|
7290
|
-
if (this.isZero()) return this.unsigned ? UZERO : ZERO;
|
|
7291
|
-
var approx, rem, res;
|
|
7292
|
-
if (!this.unsigned) {
|
|
7293
|
-
if (this.eq(MIN_VALUE)) {
|
|
7294
|
-
if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
|
|
7295
|
-
return MIN_VALUE;
|
|
7296
|
-
else if (divisor.eq(MIN_VALUE)) return ONE;
|
|
7297
|
-
else {
|
|
7298
|
-
var halfThis = this.shr(1);
|
|
7299
|
-
approx = halfThis.div(divisor).shl(1);
|
|
7300
|
-
if (approx.eq(ZERO)) {
|
|
7301
|
-
return divisor.isNegative() ? ONE : NEG_ONE;
|
|
7302
|
-
} else {
|
|
7303
|
-
rem = this.sub(divisor.mul(approx));
|
|
7304
|
-
res = approx.add(rem.div(divisor));
|
|
7305
|
-
return res;
|
|
7306
|
-
}
|
|
7307
|
-
}
|
|
7308
|
-
} else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
|
|
7309
|
-
if (this.isNegative()) {
|
|
7310
|
-
if (divisor.isNegative()) return this.neg().div(divisor.neg());
|
|
7311
|
-
return this.neg().div(divisor).neg();
|
|
7312
|
-
} else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
|
|
7313
|
-
res = ZERO;
|
|
7314
|
-
} else {
|
|
7315
|
-
if (!divisor.unsigned) divisor = divisor.toUnsigned();
|
|
7316
|
-
if (divisor.gt(this)) return UZERO;
|
|
7317
|
-
if (divisor.gt(this.shru(1)))
|
|
7318
|
-
return UONE;
|
|
7319
|
-
res = UZERO;
|
|
7320
|
-
}
|
|
7321
|
-
rem = this;
|
|
7322
|
-
while (rem.gte(divisor)) {
|
|
7323
|
-
approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
|
|
7324
|
-
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);
|
|
7325
|
-
while (approxRem.isNegative() || approxRem.gt(rem)) {
|
|
7326
|
-
approx -= delta;
|
|
7327
|
-
approxRes = fromNumber(approx, this.unsigned);
|
|
7328
|
-
approxRem = approxRes.mul(divisor);
|
|
7329
|
-
}
|
|
7330
|
-
if (approxRes.isZero()) approxRes = ONE;
|
|
7331
|
-
res = res.add(approxRes);
|
|
7332
|
-
rem = rem.sub(approxRem);
|
|
7333
|
-
}
|
|
7334
|
-
return res;
|
|
7335
|
-
};
|
|
7336
|
-
LongPrototype.div = LongPrototype.divide;
|
|
7337
|
-
LongPrototype.modulo = function modulo(divisor) {
|
|
7338
|
-
if (!isLong$1(divisor)) divisor = fromValue(divisor);
|
|
7339
|
-
if (wasm) {
|
|
7340
|
-
var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(
|
|
7341
|
-
this.low,
|
|
7342
|
-
this.high,
|
|
7343
|
-
divisor.low,
|
|
7344
|
-
divisor.high
|
|
7345
|
-
);
|
|
7346
|
-
return fromBits(low, wasm["get_high"](), this.unsigned);
|
|
7347
|
-
}
|
|
7348
|
-
return this.sub(this.div(divisor).mul(divisor));
|
|
7349
|
-
};
|
|
7350
|
-
LongPrototype.mod = LongPrototype.modulo;
|
|
7351
|
-
LongPrototype.rem = LongPrototype.modulo;
|
|
7352
|
-
LongPrototype.not = function not() {
|
|
7353
|
-
return fromBits(~this.low, ~this.high, this.unsigned);
|
|
7354
|
-
};
|
|
7355
|
-
LongPrototype.countLeadingZeros = function countLeadingZeros() {
|
|
7356
|
-
return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
|
|
7357
|
-
};
|
|
7358
|
-
LongPrototype.clz = LongPrototype.countLeadingZeros;
|
|
7359
|
-
LongPrototype.countTrailingZeros = function countTrailingZeros() {
|
|
7360
|
-
return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
|
|
7361
|
-
};
|
|
7362
|
-
LongPrototype.ctz = LongPrototype.countTrailingZeros;
|
|
7363
|
-
LongPrototype.and = function and(other) {
|
|
7364
|
-
if (!isLong$1(other)) other = fromValue(other);
|
|
7365
|
-
return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
|
|
7366
|
-
};
|
|
7367
|
-
LongPrototype.or = function or(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.xor = function xor(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.shiftLeft = function shiftLeft(numBits) {
|
|
7376
|
-
if (isLong$1(numBits)) numBits = numBits.toInt();
|
|
7377
|
-
if ((numBits &= 63) === 0) return this;
|
|
7378
|
-
else if (numBits < 32)
|
|
7379
|
-
return fromBits(
|
|
7380
|
-
this.low << numBits,
|
|
7381
|
-
this.high << numBits | this.low >>> 32 - numBits,
|
|
7382
|
-
this.unsigned
|
|
7383
|
-
);
|
|
7384
|
-
else return fromBits(0, this.low << numBits - 32, this.unsigned);
|
|
7385
|
-
};
|
|
7386
|
-
LongPrototype.shl = LongPrototype.shiftLeft;
|
|
7387
|
-
LongPrototype.shiftRight = function shiftRight(numBits) {
|
|
7388
|
-
if (isLong$1(numBits)) numBits = numBits.toInt();
|
|
7389
|
-
if ((numBits &= 63) === 0) return this;
|
|
7390
|
-
else if (numBits < 32)
|
|
7391
|
-
return fromBits(
|
|
7392
|
-
this.low >>> numBits | this.high << 32 - numBits,
|
|
7393
|
-
this.high >> numBits,
|
|
7394
|
-
this.unsigned
|
|
7395
|
-
);
|
|
7396
|
-
else
|
|
7397
|
-
return fromBits(
|
|
7398
|
-
this.high >> numBits - 32,
|
|
7399
|
-
this.high >= 0 ? 0 : -1,
|
|
7400
|
-
this.unsigned
|
|
7401
|
-
);
|
|
7402
|
-
};
|
|
7403
|
-
LongPrototype.shr = LongPrototype.shiftRight;
|
|
7404
|
-
LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
|
|
7405
|
-
if (isLong$1(numBits)) numBits = numBits.toInt();
|
|
7406
|
-
if ((numBits &= 63) === 0) return this;
|
|
7407
|
-
if (numBits < 32)
|
|
7408
|
-
return fromBits(
|
|
7409
|
-
this.low >>> numBits | this.high << 32 - numBits,
|
|
7410
|
-
this.high >>> numBits,
|
|
7411
|
-
this.unsigned
|
|
7412
|
-
);
|
|
7413
|
-
if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
|
|
7414
|
-
return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
|
|
7415
|
-
};
|
|
7416
|
-
LongPrototype.shru = LongPrototype.shiftRightUnsigned;
|
|
7417
|
-
LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
|
|
7418
|
-
LongPrototype.rotateLeft = function rotateLeft(numBits) {
|
|
7419
|
-
var b;
|
|
7420
|
-
if (isLong$1(numBits)) numBits = numBits.toInt();
|
|
7421
|
-
if ((numBits &= 63) === 0) return this;
|
|
7422
|
-
if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
|
|
7423
|
-
if (numBits < 32) {
|
|
7424
|
-
b = 32 - numBits;
|
|
7425
|
-
return fromBits(
|
|
7426
|
-
this.low << numBits | this.high >>> b,
|
|
7427
|
-
this.high << numBits | this.low >>> b,
|
|
7428
|
-
this.unsigned
|
|
7429
|
-
);
|
|
7430
|
-
}
|
|
7431
|
-
numBits -= 32;
|
|
7432
|
-
b = 32 - numBits;
|
|
7433
|
-
return fromBits(
|
|
7434
|
-
this.high << numBits | this.low >>> b,
|
|
7435
|
-
this.low << numBits | this.high >>> b,
|
|
7436
|
-
this.unsigned
|
|
7437
|
-
);
|
|
7438
|
-
};
|
|
7439
|
-
LongPrototype.rotl = LongPrototype.rotateLeft;
|
|
7440
|
-
LongPrototype.rotateRight = function rotateRight(numBits) {
|
|
7441
|
-
var b;
|
|
7442
|
-
if (isLong$1(numBits)) numBits = numBits.toInt();
|
|
7443
|
-
if ((numBits &= 63) === 0) return this;
|
|
7444
|
-
if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
|
|
7445
|
-
if (numBits < 32) {
|
|
7446
|
-
b = 32 - numBits;
|
|
7447
|
-
return fromBits(
|
|
7448
|
-
this.high << b | this.low >>> numBits,
|
|
7449
|
-
this.low << b | this.high >>> numBits,
|
|
7450
|
-
this.unsigned
|
|
7451
|
-
);
|
|
7027
|
+
function bigintFromBytesLEUnsigned(bytes) {
|
|
7028
|
+
let v = 0n;
|
|
7029
|
+
for (let i = 7; i >= 0; i--) {
|
|
7030
|
+
v = v << 8n | BigInt(bytes[i]);
|
|
7452
7031
|
}
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
this.high << b | this.low >>> numBits,
|
|
7458
|
-
this.unsigned
|
|
7459
|
-
);
|
|
7460
|
-
};
|
|
7461
|
-
LongPrototype.rotr = LongPrototype.rotateRight;
|
|
7462
|
-
LongPrototype.toSigned = function toSigned() {
|
|
7463
|
-
if (!this.unsigned) return this;
|
|
7464
|
-
return fromBits(this.low, this.high, false);
|
|
7465
|
-
};
|
|
7466
|
-
LongPrototype.toUnsigned = function toUnsigned2() {
|
|
7467
|
-
if (this.unsigned) return this;
|
|
7468
|
-
return fromBits(this.low, this.high, true);
|
|
7469
|
-
};
|
|
7470
|
-
LongPrototype.toBytes = function toBytes(le) {
|
|
7471
|
-
return le ? this.toBytesLE() : this.toBytesBE();
|
|
7472
|
-
};
|
|
7473
|
-
LongPrototype.toBytesLE = function toBytesLE() {
|
|
7474
|
-
var hi = this.high, lo = this.low;
|
|
7475
|
-
return [
|
|
7476
|
-
lo & 255,
|
|
7477
|
-
lo >>> 8 & 255,
|
|
7478
|
-
lo >>> 16 & 255,
|
|
7479
|
-
lo >>> 24,
|
|
7480
|
-
hi & 255,
|
|
7481
|
-
hi >>> 8 & 255,
|
|
7482
|
-
hi >>> 16 & 255,
|
|
7483
|
-
hi >>> 24
|
|
7484
|
-
];
|
|
7485
|
-
};
|
|
7486
|
-
LongPrototype.toBytesBE = function toBytesBE() {
|
|
7487
|
-
var hi = this.high, lo = this.low;
|
|
7488
|
-
return [
|
|
7489
|
-
hi >>> 24,
|
|
7490
|
-
hi >>> 16 & 255,
|
|
7491
|
-
hi >>> 8 & 255,
|
|
7492
|
-
hi & 255,
|
|
7493
|
-
lo >>> 24,
|
|
7494
|
-
lo >>> 16 & 255,
|
|
7495
|
-
lo >>> 8 & 255,
|
|
7496
|
-
lo & 255
|
|
7497
|
-
];
|
|
7498
|
-
};
|
|
7499
|
-
Long.fromBytes = function fromBytes(bytes, unsigned, le) {
|
|
7500
|
-
return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
|
|
7501
|
-
};
|
|
7502
|
-
Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
|
|
7503
|
-
return new Long(
|
|
7504
|
-
bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24,
|
|
7505
|
-
bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24,
|
|
7506
|
-
unsigned
|
|
7507
|
-
);
|
|
7508
|
-
};
|
|
7509
|
-
Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
|
|
7510
|
-
return new Long(
|
|
7511
|
-
bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7],
|
|
7512
|
-
bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3],
|
|
7513
|
-
unsigned
|
|
7514
|
-
);
|
|
7515
|
-
};
|
|
7516
|
-
if (typeof BigInt === "function") {
|
|
7517
|
-
Long.fromBigInt = function fromBigInt(value, unsigned) {
|
|
7518
|
-
var lowBits = Number(BigInt.asIntN(32, value));
|
|
7519
|
-
var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));
|
|
7520
|
-
return fromBits(lowBits, highBits, unsigned);
|
|
7521
|
-
};
|
|
7522
|
-
Long.fromValue = function fromValueWithBigInt(value, unsigned) {
|
|
7523
|
-
if (typeof value === "bigint") return Long.fromBigInt(value, unsigned);
|
|
7524
|
-
return fromValue(value, unsigned);
|
|
7525
|
-
};
|
|
7526
|
-
LongPrototype.toBigInt = function toBigInt() {
|
|
7527
|
-
var lowBigInt = BigInt(this.low >>> 0);
|
|
7528
|
-
var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);
|
|
7529
|
-
return highBigInt << BigInt(32) | lowBigInt;
|
|
7530
|
-
};
|
|
7032
|
+
return v;
|
|
7033
|
+
}
|
|
7034
|
+
function bigintToInt32(value) {
|
|
7035
|
+
return Number(BigInt.asIntN(32, value));
|
|
7531
7036
|
}
|
|
7532
7037
|
var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
|
|
7533
7038
|
PrimitiveType2[PrimitiveType2["Null"] = 0] = "Null";
|
|
@@ -7575,11 +7080,11 @@ class Primitive extends CRDTElement {
|
|
|
7575
7080
|
case 5:
|
|
7576
7081
|
return new TextDecoder("utf-8").decode(bytes);
|
|
7577
7082
|
case 3:
|
|
7578
|
-
return
|
|
7083
|
+
return bigintFromBytesLE(bytes);
|
|
7579
7084
|
case 6:
|
|
7580
7085
|
return bytes;
|
|
7581
7086
|
case 7:
|
|
7582
|
-
return new Date(
|
|
7087
|
+
return new Date(Number(bigintFromBytesLEUnsigned(bytes)));
|
|
7583
7088
|
default:
|
|
7584
7089
|
throw new YorkieError(
|
|
7585
7090
|
Code.ErrUnimplemented,
|
|
@@ -7680,13 +7185,13 @@ class Primitive extends CRDTElement {
|
|
|
7680
7185
|
} else {
|
|
7681
7186
|
return 4;
|
|
7682
7187
|
}
|
|
7188
|
+
case "bigint":
|
|
7189
|
+
return 3;
|
|
7683
7190
|
case "string":
|
|
7684
7191
|
return 5;
|
|
7685
7192
|
case "object":
|
|
7686
7193
|
if (value === null) {
|
|
7687
7194
|
return 0;
|
|
7688
|
-
} else if (value instanceof Long) {
|
|
7689
|
-
return 3;
|
|
7690
7195
|
} else if (value instanceof Uint8Array) {
|
|
7691
7196
|
return 6;
|
|
7692
7197
|
} else if (value instanceof Date) {
|
|
@@ -7756,9 +7261,7 @@ class Primitive extends CRDTElement {
|
|
|
7756
7261
|
return new TextEncoder().encode(this.value);
|
|
7757
7262
|
}
|
|
7758
7263
|
case 3: {
|
|
7759
|
-
|
|
7760
|
-
const longToBytes = longVal.toBytesLE();
|
|
7761
|
-
return Uint8Array.from(longToBytes);
|
|
7264
|
+
return bigintToBytesLE(this.value);
|
|
7762
7265
|
}
|
|
7763
7266
|
case 6: {
|
|
7764
7267
|
const bytesVal = this.value;
|
|
@@ -7766,11 +7269,7 @@ class Primitive extends CRDTElement {
|
|
|
7766
7269
|
}
|
|
7767
7270
|
case 7: {
|
|
7768
7271
|
const dateVal = this.value;
|
|
7769
|
-
|
|
7770
|
-
dateVal.getTime(),
|
|
7771
|
-
true
|
|
7772
|
-
).toBytesLE();
|
|
7773
|
-
return Uint8Array.from(dateToBytes);
|
|
7272
|
+
return bigintToBytesLE(BigInt(dateVal.getTime()));
|
|
7774
7273
|
}
|
|
7775
7274
|
default:
|
|
7776
7275
|
throw new YorkieError(
|
|
@@ -8843,10 +8342,10 @@ class LLRBTree {
|
|
|
8843
8342
|
let node = this.root;
|
|
8844
8343
|
let result = void 0;
|
|
8845
8344
|
while (node) {
|
|
8846
|
-
const
|
|
8847
|
-
if (
|
|
8345
|
+
const compare = this.comparator(key, node.key);
|
|
8346
|
+
if (compare === 0) {
|
|
8848
8347
|
return node;
|
|
8849
|
-
} else if (
|
|
8348
|
+
} else if (compare < 0) {
|
|
8850
8349
|
node = node.left;
|
|
8851
8350
|
} else {
|
|
8852
8351
|
result = node;
|
|
@@ -8882,12 +8381,12 @@ class LLRBTree {
|
|
|
8882
8381
|
}
|
|
8883
8382
|
getInternal(key, node) {
|
|
8884
8383
|
while (node) {
|
|
8885
|
-
const
|
|
8886
|
-
if (
|
|
8384
|
+
const compare = this.comparator(key, node.key);
|
|
8385
|
+
if (compare === 0) {
|
|
8887
8386
|
return node;
|
|
8888
|
-
} else if (
|
|
8387
|
+
} else if (compare < 0) {
|
|
8889
8388
|
node = node.left;
|
|
8890
|
-
} else if (
|
|
8389
|
+
} else if (compare > 0) {
|
|
8891
8390
|
node = node.right;
|
|
8892
8391
|
}
|
|
8893
8392
|
}
|
|
@@ -8898,10 +8397,10 @@ class LLRBTree {
|
|
|
8898
8397
|
this.counter += 1;
|
|
8899
8398
|
return new LLRBNode(key, value, true);
|
|
8900
8399
|
}
|
|
8901
|
-
const
|
|
8902
|
-
if (
|
|
8400
|
+
const compare = this.comparator(key, node.key);
|
|
8401
|
+
if (compare < 0) {
|
|
8903
8402
|
node.left = this.putInternal(key, value, node.left);
|
|
8904
|
-
} else if (
|
|
8403
|
+
} else if (compare > 0) {
|
|
8905
8404
|
node.right = this.putInternal(key, value, node.right);
|
|
8906
8405
|
} else {
|
|
8907
8406
|
node.value = value;
|
|
@@ -9200,9 +8699,9 @@ class RGATreeSplitNode extends SplayNode {
|
|
|
9200
8699
|
*/
|
|
9201
8700
|
static createComparator() {
|
|
9202
8701
|
return (p1, p2) => {
|
|
9203
|
-
const
|
|
9204
|
-
if (
|
|
9205
|
-
return
|
|
8702
|
+
const compare = p1.getCreatedAt().compare(p2.getCreatedAt());
|
|
8703
|
+
if (compare !== 0) {
|
|
8704
|
+
return compare;
|
|
9206
8705
|
}
|
|
9207
8706
|
if (p1.getOffset() > p2.getOffset()) {
|
|
9208
8707
|
return 1;
|
|
@@ -11251,6 +10750,24 @@ class IndexTreeNode {
|
|
|
11251
10750
|
* In this method, the child is physically removed from the tree.
|
|
11252
10751
|
*/
|
|
11253
10752
|
removeChild(child) {
|
|
10753
|
+
if (this.isText) {
|
|
10754
|
+
throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
|
|
10755
|
+
}
|
|
10756
|
+
const offset = this._children.indexOf(child);
|
|
10757
|
+
if (offset === -1) {
|
|
10758
|
+
return;
|
|
10759
|
+
}
|
|
10760
|
+
this._children.splice(offset, 1);
|
|
10761
|
+
child.updateAncestorsSize(-child.paddedSize(true), true);
|
|
10762
|
+
child.parent = void 0;
|
|
10763
|
+
}
|
|
10764
|
+
/**
|
|
10765
|
+
* `detachChild` removes the given child from this node's children list
|
|
10766
|
+
* and updates both visibleSize and totalSize. Unlike `removeChild` which
|
|
10767
|
+
* is used for GC purge of tombstoned nodes, `detachChild` is used for
|
|
10768
|
+
* moving alive nodes between parents.
|
|
10769
|
+
*/
|
|
10770
|
+
detachChild(child) {
|
|
11254
10771
|
if (this.isText) {
|
|
11255
10772
|
throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
|
|
11256
10773
|
}
|
|
@@ -11259,25 +10776,46 @@ class IndexTreeNode {
|
|
|
11259
10776
|
throw new YorkieError(Code.ErrInvalidArgument, "child not found");
|
|
11260
10777
|
}
|
|
11261
10778
|
this._children.splice(offset, 1);
|
|
10779
|
+
child.updateAncestorsSize(-child.paddedSize());
|
|
11262
10780
|
child.updateAncestorsSize(-child.paddedSize(true), true);
|
|
11263
10781
|
child.parent = void 0;
|
|
11264
10782
|
}
|
|
11265
10783
|
/**
|
|
11266
10784
|
* `splitElement` splits the given element at the given offset.
|
|
11267
10785
|
*/
|
|
11268
|
-
splitElement(offset, issueTimeTicket) {
|
|
10786
|
+
splitElement(offset, issueTimeTicket, versionVector) {
|
|
11269
10787
|
const diff = { data: 0, meta: 0 };
|
|
11270
10788
|
const prvSize = this.getDataSize();
|
|
11271
10789
|
const clone = this.cloneElement(issueTimeTicket);
|
|
11272
10790
|
this.parent.insertAfterInternal(clone, this);
|
|
11273
10791
|
clone.updateAncestorsSize(clone.paddedSize());
|
|
11274
10792
|
clone.updateAncestorsSize(clone.paddedSize(true), true);
|
|
11275
|
-
const
|
|
11276
|
-
const
|
|
11277
|
-
|
|
11278
|
-
|
|
10793
|
+
const left = this._children.slice(0, offset);
|
|
10794
|
+
const right = this._children.slice(offset);
|
|
10795
|
+
const allChildren = [...left, ...right];
|
|
10796
|
+
const actualRight = [];
|
|
10797
|
+
for (const child of right) {
|
|
10798
|
+
if ("mergedFrom" in child && child.mergedFrom != null && "mergedAt" in child && child.mergedAt != null) {
|
|
10799
|
+
if (versionVector) {
|
|
10800
|
+
const mergedAt = child.mergedAt;
|
|
10801
|
+
if (!versionVector.afterOrEqual(mergedAt)) {
|
|
10802
|
+
const mergedFrom = child.mergedFrom;
|
|
10803
|
+
const sourceIsChild = allChildren.some(
|
|
10804
|
+
(sibling) => "id" in sibling && sibling.id.equals(mergedFrom)
|
|
10805
|
+
);
|
|
10806
|
+
if (sourceIsChild) {
|
|
10807
|
+
left.push(child);
|
|
10808
|
+
continue;
|
|
10809
|
+
}
|
|
10810
|
+
}
|
|
10811
|
+
}
|
|
10812
|
+
}
|
|
10813
|
+
actualRight.push(child);
|
|
10814
|
+
}
|
|
10815
|
+
this._children = left;
|
|
10816
|
+
clone._children = actualRight;
|
|
11279
10817
|
this.visibleSize = this._children.reduce(
|
|
11280
|
-
(acc, child) => acc + child.paddedSize(),
|
|
10818
|
+
(acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
|
|
11281
10819
|
0
|
|
11282
10820
|
);
|
|
11283
10821
|
this.totalSize = this._children.reduce(
|
|
@@ -11285,7 +10823,7 @@ class IndexTreeNode {
|
|
|
11285
10823
|
0
|
|
11286
10824
|
);
|
|
11287
10825
|
clone.visibleSize = clone._children.reduce(
|
|
11288
|
-
(acc, child) => acc + child.paddedSize(
|
|
10826
|
+
(acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
|
|
11289
10827
|
0
|
|
11290
10828
|
);
|
|
11291
10829
|
clone.totalSize = clone._children.reduce(
|
|
@@ -11820,9 +11358,9 @@ class CRDTTreeNodeID {
|
|
|
11820
11358
|
*/
|
|
11821
11359
|
static createComparator() {
|
|
11822
11360
|
return (idA, idB) => {
|
|
11823
|
-
const
|
|
11824
|
-
if (
|
|
11825
|
-
return
|
|
11361
|
+
const compare = idA.getCreatedAt().compare(idB.getCreatedAt());
|
|
11362
|
+
if (compare !== 0) {
|
|
11363
|
+
return compare;
|
|
11826
11364
|
}
|
|
11827
11365
|
if (idA.getOffset() > idB.getOffset()) {
|
|
11828
11366
|
return 1;
|
|
@@ -11891,6 +11429,29 @@ class CRDTTreeNode extends IndexTreeNode {
|
|
|
11891
11429
|
* `insNextID` is the previous node id of this node after the node is split.
|
|
11892
11430
|
*/
|
|
11893
11431
|
insNextID;
|
|
11432
|
+
/**
|
|
11433
|
+
* `mergedFrom` records the source parent's ID when this node was moved
|
|
11434
|
+
* by a concurrent merge. Persisted in the snapshot encoding as the
|
|
11435
|
+
* witness of the merge relationship.
|
|
11436
|
+
*/
|
|
11437
|
+
mergedFrom;
|
|
11438
|
+
/**
|
|
11439
|
+
* `mergedAt` records the immutable ticket of the merge operation.
|
|
11440
|
+
* Persisted alongside `mergedFrom` because the source parent's
|
|
11441
|
+
* `removedAt` may be overwritten by later LWW tombstones and thus
|
|
11442
|
+
* cannot serve as the merge-time causal boundary for splitElement's
|
|
11443
|
+
* Fix 8 version-vector check.
|
|
11444
|
+
*/
|
|
11445
|
+
mergedAt;
|
|
11446
|
+
/**
|
|
11447
|
+
* `mergedInto` is a runtime cache set on the source parent pointing
|
|
11448
|
+
* at the merge target. Set locally during merge execution and rebuilt
|
|
11449
|
+
* from `mergedFrom` on snapshot load. Used for the fast
|
|
11450
|
+
* "is this tombstoned parent a merge source?" check in
|
|
11451
|
+
* `FindTreeNodesWithSplitText`; the alternative (scanning
|
|
11452
|
+
* `nodeMapByID` on every position resolution) would be too expensive.
|
|
11453
|
+
*/
|
|
11454
|
+
mergedInto;
|
|
11894
11455
|
_value = "";
|
|
11895
11456
|
constructor(id, type, opts, attributes, removedAt) {
|
|
11896
11457
|
super(type);
|
|
@@ -11940,6 +11501,9 @@ class CRDTTreeNode extends IndexTreeNode {
|
|
|
11940
11501
|
});
|
|
11941
11502
|
clone.insPrevID = this.insPrevID;
|
|
11942
11503
|
clone.insNextID = this.insNextID;
|
|
11504
|
+
clone.mergedFrom = this.mergedFrom;
|
|
11505
|
+
clone.mergedAt = this.mergedAt;
|
|
11506
|
+
clone.mergedInto = this.mergedInto;
|
|
11943
11507
|
return clone;
|
|
11944
11508
|
}
|
|
11945
11509
|
/**
|
|
@@ -11992,13 +11556,16 @@ class CRDTTreeNode extends IndexTreeNode {
|
|
|
11992
11556
|
* `cloneText` clones this text node with the given offset.
|
|
11993
11557
|
*/
|
|
11994
11558
|
cloneText(offset) {
|
|
11995
|
-
|
|
11559
|
+
const clone = new CRDTTreeNode(
|
|
11996
11560
|
CRDTTreeNodeID.of(this.id.getCreatedAt(), offset),
|
|
11997
11561
|
this.type,
|
|
11998
11562
|
void 0,
|
|
11999
11563
|
void 0,
|
|
12000
11564
|
this.removedAt
|
|
12001
11565
|
);
|
|
11566
|
+
clone.mergedFrom = this.mergedFrom;
|
|
11567
|
+
clone.mergedAt = this.mergedAt;
|
|
11568
|
+
return clone;
|
|
12002
11569
|
}
|
|
12003
11570
|
/**
|
|
12004
11571
|
* `cloneElement` clones this element node with the given issueTimeTicket function.
|
|
@@ -12015,8 +11582,8 @@ class CRDTTreeNode extends IndexTreeNode {
|
|
|
12015
11582
|
/**
|
|
12016
11583
|
* `split` splits the given offset of this node.
|
|
12017
11584
|
*/
|
|
12018
|
-
split(tree, offset, issueTimeTicket) {
|
|
12019
|
-
const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket);
|
|
11585
|
+
split(tree, offset, issueTimeTicket, versionVector) {
|
|
11586
|
+
const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket, versionVector);
|
|
12020
11587
|
if (split) {
|
|
12021
11588
|
split.insPrevID = this.id;
|
|
12022
11589
|
if (this.insNextID) {
|
|
@@ -12129,6 +11696,13 @@ class CRDTTreeNode extends IndexTreeNode {
|
|
|
12129
11696
|
return pairs;
|
|
12130
11697
|
}
|
|
12131
11698
|
}
|
|
11699
|
+
function ticketKnown(vv, ticket) {
|
|
11700
|
+
if (vv === void 0) {
|
|
11701
|
+
return true;
|
|
11702
|
+
}
|
|
11703
|
+
const l = vv.get(ticket.getActorID());
|
|
11704
|
+
return l !== void 0 && l >= ticket.getLamport();
|
|
11705
|
+
}
|
|
12132
11706
|
function toTreeNode$1(node) {
|
|
12133
11707
|
if (node.isText) {
|
|
12134
11708
|
const currentNode = node;
|
|
@@ -12190,6 +11764,33 @@ class CRDTTree extends CRDTElement {
|
|
|
12190
11764
|
this.indexTree.traverseAll((node) => {
|
|
12191
11765
|
this.nodeMapByID.put(node.id, node);
|
|
12192
11766
|
});
|
|
11767
|
+
this.rebuildMergeState();
|
|
11768
|
+
}
|
|
11769
|
+
/**
|
|
11770
|
+
* `rebuildMergeState` reconstructs the `mergedInto` cache on source
|
|
11771
|
+
* parents from the persisted `mergedFrom` field on moved children.
|
|
11772
|
+
* For snapshots written before `mergedAt` was added to the proto,
|
|
11773
|
+
* it also falls back to the source's `removedAt` — an approximation
|
|
11774
|
+
* that may be wrong if the source was later overwritten by a
|
|
11775
|
+
* concurrent delete, but this is the best we can do without the
|
|
11776
|
+
* persisted merge ticket.
|
|
11777
|
+
*/
|
|
11778
|
+
rebuildMergeState() {
|
|
11779
|
+
this.indexTree.traverseAll((node) => {
|
|
11780
|
+
if (!node.mergedFrom || !node.parent) {
|
|
11781
|
+
return;
|
|
11782
|
+
}
|
|
11783
|
+
const src = this.findFloorNode(node.mergedFrom);
|
|
11784
|
+
if (!src) {
|
|
11785
|
+
return;
|
|
11786
|
+
}
|
|
11787
|
+
if (!node.mergedAt && src.removedAt) {
|
|
11788
|
+
node.mergedAt = src.removedAt;
|
|
11789
|
+
}
|
|
11790
|
+
if (!src.mergedInto) {
|
|
11791
|
+
src.mergedInto = node.parent.id;
|
|
11792
|
+
}
|
|
11793
|
+
});
|
|
12193
11794
|
}
|
|
12194
11795
|
/**
|
|
12195
11796
|
* `create` creates a new instance of `CRDTTree`.
|
|
@@ -12207,6 +11808,51 @@ class CRDTTree extends CRDTElement {
|
|
|
12207
11808
|
}
|
|
12208
11809
|
return entry.value;
|
|
12209
11810
|
}
|
|
11811
|
+
/**
|
|
11812
|
+
* `advancePastUnknownSplitSiblings` follows the insNextID chain of the
|
|
11813
|
+
* given node, advancing past element-type split siblings that the editing
|
|
11814
|
+
* client did not know about (not in versionVector).
|
|
11815
|
+
*/
|
|
11816
|
+
advancePastUnknownSplitSiblings(node, versionVector) {
|
|
11817
|
+
if (!versionVector || !node) {
|
|
11818
|
+
return node;
|
|
11819
|
+
}
|
|
11820
|
+
let current = node;
|
|
11821
|
+
while (current.insNextID) {
|
|
11822
|
+
const next = this.findFloorNode(current.insNextID);
|
|
11823
|
+
if (!next || next.isText) {
|
|
11824
|
+
break;
|
|
11825
|
+
}
|
|
11826
|
+
if (next.parent !== current.parent) {
|
|
11827
|
+
break;
|
|
11828
|
+
}
|
|
11829
|
+
const actorID = next.id.getCreatedAt().getActorID();
|
|
11830
|
+
const knownLamport = versionVector.get(actorID);
|
|
11831
|
+
if (knownLamport !== void 0 && knownLamport >= next.id.getCreatedAt().getLamport()) {
|
|
11832
|
+
break;
|
|
11833
|
+
}
|
|
11834
|
+
current = next;
|
|
11835
|
+
}
|
|
11836
|
+
return current;
|
|
11837
|
+
}
|
|
11838
|
+
/**
|
|
11839
|
+
* `hasUnknownSplitSibling` checks whether the given element node has a
|
|
11840
|
+
* split sibling (via insNextID) whose creation the editor did not know
|
|
11841
|
+
* about. Used to prevent styling via End tokens when a concurrent split
|
|
11842
|
+
* extended the range into the split sibling.
|
|
11843
|
+
*/
|
|
11844
|
+
hasUnknownSplitSibling(node, versionVector) {
|
|
11845
|
+
if (!node.insNextID) {
|
|
11846
|
+
return false;
|
|
11847
|
+
}
|
|
11848
|
+
const next = this.findFloorNode(node.insNextID);
|
|
11849
|
+
if (!next || next.isText) {
|
|
11850
|
+
return false;
|
|
11851
|
+
}
|
|
11852
|
+
const actorID = next.id.getCreatedAt().getActorID();
|
|
11853
|
+
const knownLamport = versionVector.get(actorID);
|
|
11854
|
+
return knownLamport === void 0 || knownLamport < next.id.getCreatedAt().getLamport();
|
|
11855
|
+
}
|
|
12210
11856
|
/**
|
|
12211
11857
|
* `registerNode` registers the given node to the tree.
|
|
12212
11858
|
*/
|
|
@@ -12230,6 +11876,23 @@ class CRDTTree extends CRDTElement {
|
|
|
12230
11876
|
let leftNode = leftSibling;
|
|
12231
11877
|
const isLeftMost = parent === leftNode;
|
|
12232
11878
|
const realParent = leftNode.parent && !isLeftMost ? leftNode.parent : parent;
|
|
11879
|
+
if (realParent.isRemoved && isLeftMost && realParent.mergedInto) {
|
|
11880
|
+
const mergeTarget = this.findFloorNode(realParent.mergedInto);
|
|
11881
|
+
if (mergeTarget && !mergeTarget.isRemoved) {
|
|
11882
|
+
const allCh = mergeTarget.allChildren;
|
|
11883
|
+
for (let i = 0; i < allCh.length; i++) {
|
|
11884
|
+
const targetChild = allCh[i];
|
|
11885
|
+
if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(realParent.id)) {
|
|
11886
|
+
continue;
|
|
11887
|
+
}
|
|
11888
|
+
if (i === 0) {
|
|
11889
|
+
return [[mergeTarget, mergeTarget], diff];
|
|
11890
|
+
}
|
|
11891
|
+
return [[mergeTarget, allCh[i - 1]], diff];
|
|
11892
|
+
}
|
|
11893
|
+
return [[mergeTarget, mergeTarget], diff];
|
|
11894
|
+
}
|
|
11895
|
+
}
|
|
12233
11896
|
if (leftNode.isText) {
|
|
12234
11897
|
const [, splitedDiff] = leftNode.split(
|
|
12235
11898
|
this,
|
|
@@ -12255,18 +11918,23 @@ class CRDTTree extends CRDTElement {
|
|
|
12255
11918
|
*/
|
|
12256
11919
|
style(range, attributes, editedAt, versionVector) {
|
|
12257
11920
|
const diff = { data: 0, meta: 0 };
|
|
12258
|
-
const [[fromParent,
|
|
11921
|
+
const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
|
|
12259
11922
|
range[0],
|
|
12260
11923
|
editedAt
|
|
12261
11924
|
);
|
|
12262
|
-
const [[toParent,
|
|
11925
|
+
const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
|
|
12263
11926
|
range[1],
|
|
12264
11927
|
editedAt
|
|
12265
11928
|
);
|
|
12266
11929
|
addDataSizes(diff, diffTo, diffFrom);
|
|
11930
|
+
const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
|
|
11931
|
+
const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
|
|
12267
11932
|
const changes = [];
|
|
12268
11933
|
const attrs = attributes ? parseObjectValues(attributes) : {};
|
|
12269
11934
|
const pairs = [];
|
|
11935
|
+
const prevAttributes = /* @__PURE__ */ new Map();
|
|
11936
|
+
const newAttrKeys = [];
|
|
11937
|
+
let capturedPrev = false;
|
|
12270
11938
|
this.traverseInPosRange(
|
|
12271
11939
|
fromParent,
|
|
12272
11940
|
fromLeft,
|
|
@@ -12279,6 +11947,19 @@ class CRDTTree extends CRDTElement {
|
|
|
12279
11947
|
clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
|
|
12280
11948
|
}
|
|
12281
11949
|
if (node.canStyle(editedAt, clientLamportAtChange) && attributes) {
|
|
11950
|
+
if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
|
|
11951
|
+
return;
|
|
11952
|
+
}
|
|
11953
|
+
if (!capturedPrev) {
|
|
11954
|
+
for (const key of Object.keys(attributes)) {
|
|
11955
|
+
if (node.attrs?.has(key)) {
|
|
11956
|
+
prevAttributes.set(key, node.attrs.get(key));
|
|
11957
|
+
} else {
|
|
11958
|
+
newAttrKeys.push(key);
|
|
11959
|
+
}
|
|
11960
|
+
}
|
|
11961
|
+
capturedPrev = true;
|
|
11962
|
+
}
|
|
12282
11963
|
const updatedAttrPairs = node.setAttrs(attributes, editedAt);
|
|
12283
11964
|
const affectedAttrs = updatedAttrPairs.reduce(
|
|
12284
11965
|
(acc, [, curr]) => {
|
|
@@ -12317,7 +11998,7 @@ class CRDTTree extends CRDTElement {
|
|
|
12317
11998
|
}
|
|
12318
11999
|
}
|
|
12319
12000
|
);
|
|
12320
|
-
return [pairs, changes, diff];
|
|
12001
|
+
return [pairs, changes, diff, prevAttributes, newAttrKeys];
|
|
12321
12002
|
}
|
|
12322
12003
|
/**
|
|
12323
12004
|
* `removeStyle` removes the given attributes of the given range.
|
|
@@ -12335,21 +12016,34 @@ class CRDTTree extends CRDTElement {
|
|
|
12335
12016
|
addDataSizes(diff, diffTo, diffFrom);
|
|
12336
12017
|
const changes = [];
|
|
12337
12018
|
const pairs = [];
|
|
12019
|
+
const prevAttributes = /* @__PURE__ */ new Map();
|
|
12020
|
+
let capturedPrev = false;
|
|
12338
12021
|
this.traverseInPosRange(
|
|
12339
12022
|
fromParent,
|
|
12340
12023
|
fromLeft,
|
|
12341
12024
|
toParent,
|
|
12342
12025
|
toLeft,
|
|
12343
|
-
([node]) => {
|
|
12026
|
+
([node, tokenType]) => {
|
|
12344
12027
|
const actorID = node.getCreatedAt().getActorID();
|
|
12345
12028
|
let clientLamportAtChange = MaxLamport;
|
|
12346
12029
|
if (versionVector != void 0) {
|
|
12347
12030
|
clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
|
|
12348
12031
|
}
|
|
12349
12032
|
if (node.canStyle(editedAt, clientLamportAtChange) && attributesToRemove) {
|
|
12033
|
+
if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
|
|
12034
|
+
return;
|
|
12035
|
+
}
|
|
12350
12036
|
if (!node.attrs) {
|
|
12351
12037
|
node.attrs = new RHT();
|
|
12352
12038
|
}
|
|
12039
|
+
if (!capturedPrev) {
|
|
12040
|
+
for (const key of attributesToRemove) {
|
|
12041
|
+
if (node.attrs.has(key)) {
|
|
12042
|
+
prevAttributes.set(key, node.attrs.get(key));
|
|
12043
|
+
}
|
|
12044
|
+
}
|
|
12045
|
+
capturedPrev = true;
|
|
12046
|
+
}
|
|
12353
12047
|
for (const value of attributesToRemove) {
|
|
12354
12048
|
const nodesTobeRemoved = node.attrs.remove(value, editedAt);
|
|
12355
12049
|
for (const rhtNode of nodesTobeRemoved) {
|
|
@@ -12370,7 +12064,7 @@ class CRDTTree extends CRDTElement {
|
|
|
12370
12064
|
}
|
|
12371
12065
|
}
|
|
12372
12066
|
);
|
|
12373
|
-
return [pairs, changes, diff];
|
|
12067
|
+
return [pairs, changes, diff, prevAttributes];
|
|
12374
12068
|
}
|
|
12375
12069
|
/**
|
|
12376
12070
|
* `edit` edits the tree with the given range and content.
|
|
@@ -12378,20 +12072,24 @@ class CRDTTree extends CRDTElement {
|
|
|
12378
12072
|
*/
|
|
12379
12073
|
edit(range, contents, splitLevel, editedAt, issueTimeTicket, versionVector) {
|
|
12380
12074
|
const diff = { data: 0, meta: 0 };
|
|
12381
|
-
const [[fromParent,
|
|
12075
|
+
const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
|
|
12382
12076
|
range[0],
|
|
12383
12077
|
editedAt
|
|
12384
12078
|
);
|
|
12385
|
-
const [[toParent,
|
|
12079
|
+
const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
|
|
12386
12080
|
range[1],
|
|
12387
12081
|
editedAt
|
|
12388
12082
|
);
|
|
12389
12083
|
addDataSizes(diff, diffTo, diffFrom);
|
|
12084
|
+
const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
|
|
12085
|
+
const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
|
|
12390
12086
|
const fromIdx = this.toIndex(fromParent, fromLeft);
|
|
12391
12087
|
const fromPath = this.toPath(fromParent, fromLeft);
|
|
12392
12088
|
const nodesToBeRemoved = [];
|
|
12393
12089
|
const tokensToBeRemoved = [];
|
|
12394
12090
|
const toBeMovedToFromParents = [];
|
|
12091
|
+
const toBeMergedNodes = [];
|
|
12092
|
+
const preTombstoned = /* @__PURE__ */ new Set();
|
|
12395
12093
|
this.traverseInPosRange(
|
|
12396
12094
|
fromParent,
|
|
12397
12095
|
fromLeft,
|
|
@@ -12399,24 +12097,39 @@ class CRDTTree extends CRDTElement {
|
|
|
12399
12097
|
toLeft,
|
|
12400
12098
|
([node, tokenType], ended) => {
|
|
12401
12099
|
if (tokenType === TokenType.Start && !ended) {
|
|
12402
|
-
|
|
12403
|
-
|
|
12100
|
+
if (ticketKnown(versionVector, node.id.getCreatedAt())) {
|
|
12101
|
+
toBeMergedNodes.push(node);
|
|
12102
|
+
for (const child of node.children) {
|
|
12103
|
+
toBeMovedToFromParents.push(child);
|
|
12104
|
+
}
|
|
12404
12105
|
}
|
|
12405
12106
|
}
|
|
12406
|
-
const
|
|
12407
|
-
|
|
12408
|
-
|
|
12409
|
-
node.id.getCreatedAt().getActorID()
|
|
12107
|
+
const creationKnown = ticketKnown(
|
|
12108
|
+
versionVector,
|
|
12109
|
+
node.id.getCreatedAt()
|
|
12410
12110
|
);
|
|
12411
|
-
|
|
12412
|
-
|
|
12413
|
-
if (node.removedAt) {
|
|
12414
|
-
const removedAtVV = versionVector?.get(node.removedAt.getActorID());
|
|
12415
|
-
tombstoneKnown = isLocal || removedAtVV !== void 0 && removedAtVV >= node.removedAt.getLamport();
|
|
12416
|
-
}
|
|
12417
|
-
if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent)) {
|
|
12111
|
+
const tombstoneKnown = !!node.removedAt && ticketKnown(versionVector, node.removedAt);
|
|
12112
|
+
if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent) && !toBeMergedNodes.includes(node.parent)) {
|
|
12418
12113
|
if (tokenType === TokenType.Text || tokenType === TokenType.Start) {
|
|
12114
|
+
if (node.isRemoved) {
|
|
12115
|
+
preTombstoned.add(node.id.toIDString());
|
|
12116
|
+
}
|
|
12419
12117
|
nodesToBeRemoved.push(node);
|
|
12118
|
+
if (!node.isText && node.insNextID && !toBeMergedNodes.includes(node)) {
|
|
12119
|
+
let next = this.findFloorNode(node.insNextID);
|
|
12120
|
+
while (next) {
|
|
12121
|
+
if (!ticketKnown(versionVector, next.id.getCreatedAt())) {
|
|
12122
|
+
nodesToBeRemoved.push(next);
|
|
12123
|
+
traverseAll(next, (n) => {
|
|
12124
|
+
if (n !== next) {
|
|
12125
|
+
nodesToBeRemoved.push(n);
|
|
12126
|
+
}
|
|
12127
|
+
});
|
|
12128
|
+
}
|
|
12129
|
+
if (!next.insNextID) break;
|
|
12130
|
+
next = this.findFloorNode(next.insNextID);
|
|
12131
|
+
}
|
|
12132
|
+
}
|
|
12420
12133
|
}
|
|
12421
12134
|
tokensToBeRemoved.push([node, tokenType]);
|
|
12422
12135
|
}
|
|
@@ -12429,22 +12142,66 @@ class CRDTTree extends CRDTElement {
|
|
|
12429
12142
|
);
|
|
12430
12143
|
const pairs = [];
|
|
12431
12144
|
for (const node of nodesToBeRemoved) {
|
|
12432
|
-
node.remove(editedAt)
|
|
12433
|
-
if (node.isRemoved) {
|
|
12145
|
+
if (node.remove(editedAt)) {
|
|
12434
12146
|
pairs.push({ parent: this, child: node });
|
|
12435
12147
|
}
|
|
12436
12148
|
}
|
|
12437
12149
|
for (const node of toBeMovedToFromParents) {
|
|
12438
12150
|
if (!node.removedAt) {
|
|
12151
|
+
if (node.parent) {
|
|
12152
|
+
node.mergedFrom = node.parent.id;
|
|
12153
|
+
node.mergedAt = editedAt;
|
|
12154
|
+
}
|
|
12155
|
+
if (node.parent) {
|
|
12156
|
+
try {
|
|
12157
|
+
node.parent.detachChild(node);
|
|
12158
|
+
} catch {
|
|
12159
|
+
}
|
|
12160
|
+
}
|
|
12439
12161
|
fromParent.append(node);
|
|
12440
12162
|
}
|
|
12441
12163
|
}
|
|
12164
|
+
for (const src of toBeMergedNodes) {
|
|
12165
|
+
src.mergedInto = fromParent.id;
|
|
12166
|
+
}
|
|
12167
|
+
for (const node of nodesToBeRemoved) {
|
|
12168
|
+
if (!node.mergedInto || toBeMergedNodes.includes(node) || node.mergedInto.equals(fromParent.id)) {
|
|
12169
|
+
continue;
|
|
12170
|
+
}
|
|
12171
|
+
const mergeTarget = this.findFloorNode(node.mergedInto);
|
|
12172
|
+
if (!mergeTarget) {
|
|
12173
|
+
continue;
|
|
12174
|
+
}
|
|
12175
|
+
for (const targetChild of mergeTarget.allChildren) {
|
|
12176
|
+
if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(node.id)) {
|
|
12177
|
+
continue;
|
|
12178
|
+
}
|
|
12179
|
+
if (targetChild.removedAt) {
|
|
12180
|
+
continue;
|
|
12181
|
+
}
|
|
12182
|
+
if (targetChild.remove(editedAt)) {
|
|
12183
|
+
pairs.push({ parent: this, child: targetChild });
|
|
12184
|
+
}
|
|
12185
|
+
traverseAll(targetChild, (n) => {
|
|
12186
|
+
if (n !== targetChild && !n.removedAt) {
|
|
12187
|
+
if (n.remove(editedAt)) {
|
|
12188
|
+
pairs.push({ parent: this, child: n });
|
|
12189
|
+
}
|
|
12190
|
+
}
|
|
12191
|
+
});
|
|
12192
|
+
}
|
|
12193
|
+
}
|
|
12442
12194
|
if (splitLevel > 0) {
|
|
12443
12195
|
let splitCount = 0;
|
|
12444
12196
|
let parent = fromParent;
|
|
12445
12197
|
let left = fromLeft;
|
|
12446
12198
|
while (splitCount < splitLevel) {
|
|
12447
|
-
parent.split(
|
|
12199
|
+
parent.split(
|
|
12200
|
+
this,
|
|
12201
|
+
parent.findOffset(left, true) + 1,
|
|
12202
|
+
issueTimeTicket,
|
|
12203
|
+
versionVector
|
|
12204
|
+
);
|
|
12448
12205
|
left = parent;
|
|
12449
12206
|
parent = parent.parent;
|
|
12450
12207
|
splitCount++;
|
|
@@ -12794,6 +12551,9 @@ class CRDTTree extends CRDTElement {
|
|
|
12794
12551
|
traverseInPosRange(fromParent, fromLeft, toParent, toLeft, callback, includeRemoved = false) {
|
|
12795
12552
|
const fromIdx = this.toIndex(fromParent, fromLeft, includeRemoved);
|
|
12796
12553
|
const toIdx = this.toIndex(toParent, toLeft, includeRemoved);
|
|
12554
|
+
if (fromIdx > toIdx) {
|
|
12555
|
+
return;
|
|
12556
|
+
}
|
|
12797
12557
|
this.indexTree.tokensBetween(fromIdx, toIdx, callback, includeRemoved);
|
|
12798
12558
|
}
|
|
12799
12559
|
/**
|
|
@@ -12952,6 +12712,13 @@ class TreeEditOperation extends Operation {
|
|
|
12952
12712
|
toIdx;
|
|
12953
12713
|
lastFromIdx;
|
|
12954
12714
|
lastToIdx;
|
|
12715
|
+
/**
|
|
12716
|
+
* `redoSplitLevel` is set on boundary-deletion undo ops that were generated
|
|
12717
|
+
* to reverse a split. When this op executes (as undo), `toReverseOperation`
|
|
12718
|
+
* uses this value to generate a proper split op for redo, rather than
|
|
12719
|
+
* re-inserting the raw tombstoned boundary nodes as content.
|
|
12720
|
+
*/
|
|
12721
|
+
redoSplitLevel;
|
|
12955
12722
|
constructor(parentCreatedAt, fromPos, toPos, contents, splitLevel, executedAt, isUndoOp, fromIdx, toIdx) {
|
|
12956
12723
|
super(parentCreatedAt, executedAt);
|
|
12957
12724
|
this.fromPos = fromPos;
|
|
@@ -13037,7 +12804,13 @@ class TreeEditOperation extends Operation {
|
|
|
13037
12804
|
0
|
|
13038
12805
|
);
|
|
13039
12806
|
this.lastToIdx = preEditFromIdx + removedSize;
|
|
13040
|
-
|
|
12807
|
+
let reverseOp;
|
|
12808
|
+
const isPureL1Split = this.splitLevel === 1 && !this.contents?.length && removedNodes.length === 0;
|
|
12809
|
+
if (this.splitLevel === 0) {
|
|
12810
|
+
reverseOp = this.toReverseOperation(tree, removedNodes, preEditFromIdx);
|
|
12811
|
+
} else if (isPureL1Split) {
|
|
12812
|
+
reverseOp = this.toSplitReverseOperation(tree, preEditFromIdx);
|
|
12813
|
+
}
|
|
13041
12814
|
root.acc(diff);
|
|
13042
12815
|
for (const pair of pairs) {
|
|
13043
12816
|
root.registerGCPair(pair);
|
|
@@ -13073,6 +12846,24 @@ class TreeEditOperation extends Operation {
|
|
|
13073
12846
|
* @param preEditFromIdx - The from index captured BEFORE the edit
|
|
13074
12847
|
*/
|
|
13075
12848
|
toReverseOperation(tree, removedNodes, preEditFromIdx) {
|
|
12849
|
+
if (this.redoSplitLevel !== void 0 && this.redoSplitLevel > 0) {
|
|
12850
|
+
const splitRedoFromPos = tree.findPos(preEditFromIdx);
|
|
12851
|
+
const splitRedoOp = TreeEditOperation.create(
|
|
12852
|
+
this.getParentCreatedAt(),
|
|
12853
|
+
splitRedoFromPos,
|
|
12854
|
+
splitRedoFromPos,
|
|
12855
|
+
void 0,
|
|
12856
|
+
// no inserted content
|
|
12857
|
+
this.redoSplitLevel,
|
|
12858
|
+
void 0,
|
|
12859
|
+
// executedAt assigned at redo time
|
|
12860
|
+
true,
|
|
12861
|
+
// isUndoOp (treated as undo/redo op)
|
|
12862
|
+
preEditFromIdx,
|
|
12863
|
+
preEditFromIdx
|
|
12864
|
+
);
|
|
12865
|
+
return splitRedoOp;
|
|
12866
|
+
}
|
|
13076
12867
|
const insertedContentSize = this.contents ? this.contents.reduce((sum, node) => sum + node.paddedSize(), 0) : 0;
|
|
13077
12868
|
const maxNeededIdx = preEditFromIdx + insertedContentSize;
|
|
13078
12869
|
if (maxNeededIdx > tree.getSize()) {
|
|
@@ -13110,6 +12901,45 @@ class TreeEditOperation extends Operation {
|
|
|
13110
12901
|
reverseToIdx
|
|
13111
12902
|
);
|
|
13112
12903
|
}
|
|
12904
|
+
/**
|
|
12905
|
+
* `toSplitReverseOperation` creates the reverse operation for a split edit.
|
|
12906
|
+
*
|
|
12907
|
+
* A split creates element boundaries (close + open tags). The reverse
|
|
12908
|
+
* is a boundary deletion: a splitLevel=0 edit that removes those tokens,
|
|
12909
|
+
* merging the split elements back together.
|
|
12910
|
+
*
|
|
12911
|
+
* boundarySize = 2 * splitLevel (each level creates 1 close + 1 open tag)
|
|
12912
|
+
*
|
|
12913
|
+
* @param tree - The CRDTTree after the split has been applied
|
|
12914
|
+
* @param preEditFromIdx - The from index captured BEFORE the split
|
|
12915
|
+
*/
|
|
12916
|
+
toSplitReverseOperation(tree, preEditFromIdx) {
|
|
12917
|
+
const boundarySize = 2 * this.splitLevel;
|
|
12918
|
+
const reverseFromIdx = preEditFromIdx;
|
|
12919
|
+
const reverseToIdx = preEditFromIdx + boundarySize;
|
|
12920
|
+
if (reverseToIdx > tree.getSize()) {
|
|
12921
|
+
return void 0;
|
|
12922
|
+
}
|
|
12923
|
+
const reverseFromPos = tree.findPos(reverseFromIdx);
|
|
12924
|
+
const reverseToPos = tree.findPos(reverseToIdx);
|
|
12925
|
+
const boundaryDeletionOp = TreeEditOperation.create(
|
|
12926
|
+
this.getParentCreatedAt(),
|
|
12927
|
+
reverseFromPos,
|
|
12928
|
+
reverseToPos,
|
|
12929
|
+
void 0,
|
|
12930
|
+
// no content — this is a deletion
|
|
12931
|
+
0,
|
|
12932
|
+
// splitLevel=0: boundary deletion
|
|
12933
|
+
void 0,
|
|
12934
|
+
// executedAt assigned at undo time
|
|
12935
|
+
true,
|
|
12936
|
+
// isUndoOp
|
|
12937
|
+
reverseFromIdx,
|
|
12938
|
+
reverseToIdx
|
|
12939
|
+
);
|
|
12940
|
+
boundaryDeletionOp.redoSplitLevel = this.splitLevel;
|
|
12941
|
+
return boundaryDeletionOp;
|
|
12942
|
+
}
|
|
13113
12943
|
/**
|
|
13114
12944
|
* `normalizePos` returns the visible-index range of this operation.
|
|
13115
12945
|
* For undo ops, returns the stored (possibly reconciled) indices.
|
|
@@ -13815,35 +13645,196 @@ class Checkpoint {
|
|
|
13815
13645
|
}
|
|
13816
13646
|
}
|
|
13817
13647
|
const InitialCheckpoint = new Checkpoint(0n, 0);
|
|
13818
|
-
const
|
|
13648
|
+
const hllPrecision = 14;
|
|
13649
|
+
const hllRegisterCount = 1 << hllPrecision;
|
|
13650
|
+
const prime64x1 = 0x9e3779b185ebca87n;
|
|
13651
|
+
const prime64x2 = 0xc2b2ae3d27d4eb4fn;
|
|
13652
|
+
const prime64x3 = 0x165667b19e3779f9n;
|
|
13653
|
+
const prime64x4 = 0x85ebca77c2b2ae63n;
|
|
13654
|
+
const prime64x5 = 0x27d4eb2f165667c5n;
|
|
13655
|
+
const mask64 = 0xffffffffffffffffn;
|
|
13656
|
+
class HLL {
|
|
13657
|
+
registers;
|
|
13658
|
+
constructor() {
|
|
13659
|
+
this.registers = new Uint8Array(hllRegisterCount);
|
|
13660
|
+
}
|
|
13661
|
+
/**
|
|
13662
|
+
* `add` adds a value to the HLL and returns true if the register was updated.
|
|
13663
|
+
*/
|
|
13664
|
+
add(value) {
|
|
13665
|
+
const hash = xxhash64(value);
|
|
13666
|
+
const idx = Number(hash >> BigInt(64 - hllPrecision));
|
|
13667
|
+
const remaining = hash << BigInt(hllPrecision) & mask64 | 1n << BigInt(hllPrecision - 1);
|
|
13668
|
+
const rho = countLeadingZeros64(remaining) + 1;
|
|
13669
|
+
if (rho > this.registers[idx]) {
|
|
13670
|
+
this.registers[idx] = rho;
|
|
13671
|
+
return true;
|
|
13672
|
+
}
|
|
13673
|
+
return false;
|
|
13674
|
+
}
|
|
13675
|
+
/**
|
|
13676
|
+
* `count` returns the approximate cardinality estimate.
|
|
13677
|
+
*/
|
|
13678
|
+
count() {
|
|
13679
|
+
const m = hllRegisterCount;
|
|
13680
|
+
const alpha = 0.7213 / (1 + 1.079 / m);
|
|
13681
|
+
let sum = 0;
|
|
13682
|
+
let zeros = 0;
|
|
13683
|
+
for (let i = 0; i < m; i++) {
|
|
13684
|
+
sum += Math.pow(2, -this.registers[i]);
|
|
13685
|
+
if (this.registers[i] === 0) zeros++;
|
|
13686
|
+
}
|
|
13687
|
+
let estimate = alpha * m * m / sum;
|
|
13688
|
+
if (estimate <= 2.5 * m && zeros > 0) {
|
|
13689
|
+
estimate = m * Math.log(m / zeros);
|
|
13690
|
+
}
|
|
13691
|
+
return Math.round(estimate);
|
|
13692
|
+
}
|
|
13693
|
+
/**
|
|
13694
|
+
* `merge` merges another HLL into this one by taking the max of each register.
|
|
13695
|
+
* This operation is commutative, associative, and idempotent.
|
|
13696
|
+
*/
|
|
13697
|
+
merge(other) {
|
|
13698
|
+
for (let i = 0; i < hllRegisterCount; i++) {
|
|
13699
|
+
if (other.registers[i] > this.registers[i]) {
|
|
13700
|
+
this.registers[i] = other.registers[i];
|
|
13701
|
+
}
|
|
13702
|
+
}
|
|
13703
|
+
}
|
|
13704
|
+
/**
|
|
13705
|
+
* `toBytes` serializes the HLL registers to a byte array.
|
|
13706
|
+
*/
|
|
13707
|
+
toBytes() {
|
|
13708
|
+
return new Uint8Array(this.registers);
|
|
13709
|
+
}
|
|
13710
|
+
/**
|
|
13711
|
+
* `restore` restores the HLL registers from a byte array.
|
|
13712
|
+
* Throws if the data length does not match the register count.
|
|
13713
|
+
*/
|
|
13714
|
+
restore(data) {
|
|
13715
|
+
if (data.length !== hllRegisterCount) {
|
|
13716
|
+
throw new Error(
|
|
13717
|
+
`invalid HLL register payload: got ${data.length} bytes, want ${hllRegisterCount}`
|
|
13718
|
+
);
|
|
13719
|
+
}
|
|
13720
|
+
this.registers.set(data);
|
|
13721
|
+
}
|
|
13722
|
+
}
|
|
13723
|
+
function xxhash64(input) {
|
|
13724
|
+
const buf = new TextEncoder().encode(input);
|
|
13725
|
+
const len = buf.length;
|
|
13726
|
+
let h64;
|
|
13727
|
+
let offset = 0;
|
|
13728
|
+
const seed = 0n;
|
|
13729
|
+
if (len >= 32) {
|
|
13730
|
+
let v1 = seed + prime64x1 + prime64x2 & mask64;
|
|
13731
|
+
let v2 = seed + prime64x2 & mask64;
|
|
13732
|
+
let v3 = seed;
|
|
13733
|
+
let v4 = seed - prime64x1 & mask64;
|
|
13734
|
+
while (offset <= len - 32) {
|
|
13735
|
+
v1 = xxRound(v1, readU64LE(buf, offset));
|
|
13736
|
+
offset += 8;
|
|
13737
|
+
v2 = xxRound(v2, readU64LE(buf, offset));
|
|
13738
|
+
offset += 8;
|
|
13739
|
+
v3 = xxRound(v3, readU64LE(buf, offset));
|
|
13740
|
+
offset += 8;
|
|
13741
|
+
v4 = xxRound(v4, readU64LE(buf, offset));
|
|
13742
|
+
offset += 8;
|
|
13743
|
+
}
|
|
13744
|
+
h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & mask64;
|
|
13745
|
+
h64 = xxMergeRound(h64, v1);
|
|
13746
|
+
h64 = xxMergeRound(h64, v2);
|
|
13747
|
+
h64 = xxMergeRound(h64, v3);
|
|
13748
|
+
h64 = xxMergeRound(h64, v4);
|
|
13749
|
+
} else {
|
|
13750
|
+
h64 = seed + prime64x5 & mask64;
|
|
13751
|
+
}
|
|
13752
|
+
h64 = h64 + BigInt(len) & mask64;
|
|
13753
|
+
while (offset + 8 <= len) {
|
|
13754
|
+
const k1 = xxRound(0n, readU64LE(buf, offset));
|
|
13755
|
+
h64 = rotl64(h64 ^ k1, 27n) * prime64x1 + prime64x4 & mask64;
|
|
13756
|
+
offset += 8;
|
|
13757
|
+
}
|
|
13758
|
+
if (offset + 4 <= len) {
|
|
13759
|
+
h64 = h64 ^ readU32LE(buf, offset) * prime64x1 & mask64;
|
|
13760
|
+
h64 = rotl64(h64, 23n) * prime64x2 + prime64x3 & mask64;
|
|
13761
|
+
offset += 4;
|
|
13762
|
+
}
|
|
13763
|
+
while (offset < len) {
|
|
13764
|
+
h64 = h64 ^ BigInt(buf[offset]) * prime64x5 & mask64;
|
|
13765
|
+
h64 = rotl64(h64, 11n) * prime64x1 & mask64;
|
|
13766
|
+
offset++;
|
|
13767
|
+
}
|
|
13768
|
+
h64 = (h64 ^ h64 >> 33n) * prime64x2 & mask64;
|
|
13769
|
+
h64 = (h64 ^ h64 >> 29n) * prime64x3 & mask64;
|
|
13770
|
+
h64 = (h64 ^ h64 >> 32n) & mask64;
|
|
13771
|
+
return h64;
|
|
13772
|
+
}
|
|
13773
|
+
function rotl64(x, r) {
|
|
13774
|
+
return (x << r | x >> 64n - r) & mask64;
|
|
13775
|
+
}
|
|
13776
|
+
function xxRound(acc, input) {
|
|
13777
|
+
acc = acc + input * prime64x2 & mask64;
|
|
13778
|
+
acc = rotl64(acc, 31n);
|
|
13779
|
+
return acc * prime64x1 & mask64;
|
|
13780
|
+
}
|
|
13781
|
+
function xxMergeRound(acc, val) {
|
|
13782
|
+
val = xxRound(0n, val);
|
|
13783
|
+
acc = (acc ^ val) & mask64;
|
|
13784
|
+
return acc * prime64x1 + prime64x4 & mask64;
|
|
13785
|
+
}
|
|
13786
|
+
function readU64LE(buf, offset) {
|
|
13787
|
+
let val = 0n;
|
|
13788
|
+
for (let i = 7; i >= 0; i--) {
|
|
13789
|
+
val = val << 8n | BigInt(buf[offset + i]);
|
|
13790
|
+
}
|
|
13791
|
+
return val;
|
|
13792
|
+
}
|
|
13793
|
+
function readU32LE(buf, offset) {
|
|
13794
|
+
return BigInt(buf[offset]) | BigInt(buf[offset + 1]) << 8n | BigInt(buf[offset + 2]) << 16n | BigInt(buf[offset + 3]) << 24n;
|
|
13795
|
+
}
|
|
13796
|
+
function countLeadingZeros64(x) {
|
|
13797
|
+
if (x === 0n) return 64;
|
|
13798
|
+
let n = 0;
|
|
13799
|
+
while ((x & 1n << 63n) === 0n) {
|
|
13800
|
+
n++;
|
|
13801
|
+
x <<= 1n;
|
|
13802
|
+
}
|
|
13803
|
+
return n;
|
|
13804
|
+
}
|
|
13819
13805
|
var CounterType = /* @__PURE__ */ ((CounterType2) => {
|
|
13820
13806
|
CounterType2[CounterType2["Int"] = 0] = "Int";
|
|
13821
13807
|
CounterType2[CounterType2["Long"] = 1] = "Long";
|
|
13808
|
+
CounterType2[CounterType2["IntDedup"] = 2] = "IntDedup";
|
|
13822
13809
|
return CounterType2;
|
|
13823
13810
|
})(CounterType || {});
|
|
13824
13811
|
class CRDTCounter extends CRDTElement {
|
|
13825
13812
|
valueType;
|
|
13826
13813
|
value;
|
|
13814
|
+
hll;
|
|
13827
13815
|
constructor(valueType, value, createdAt) {
|
|
13828
13816
|
super(createdAt);
|
|
13829
13817
|
this.valueType = valueType;
|
|
13830
13818
|
switch (valueType) {
|
|
13819
|
+
case 2:
|
|
13820
|
+
this.value = 0;
|
|
13821
|
+
break;
|
|
13831
13822
|
case 0:
|
|
13832
13823
|
if (typeof value === "number") {
|
|
13833
13824
|
if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
|
|
13834
|
-
this.value =
|
|
13825
|
+
this.value = bigintToInt32(BigInt(value));
|
|
13835
13826
|
} else {
|
|
13836
13827
|
this.value = removeDecimal(value);
|
|
13837
13828
|
}
|
|
13838
13829
|
} else {
|
|
13839
|
-
this.value = value
|
|
13830
|
+
this.value = bigintToInt32(value);
|
|
13840
13831
|
}
|
|
13841
13832
|
break;
|
|
13842
13833
|
case 1:
|
|
13843
13834
|
if (typeof value === "number") {
|
|
13844
|
-
this.value =
|
|
13835
|
+
this.value = BigInt.asIntN(64, BigInt(Math.trunc(value)));
|
|
13845
13836
|
} else {
|
|
13846
|
-
this.value = value;
|
|
13837
|
+
this.value = BigInt.asIntN(64, value);
|
|
13847
13838
|
}
|
|
13848
13839
|
break;
|
|
13849
13840
|
default:
|
|
@@ -13852,6 +13843,9 @@ class CRDTCounter extends CRDTElement {
|
|
|
13852
13843
|
`unimplemented type: ${valueType}`
|
|
13853
13844
|
);
|
|
13854
13845
|
}
|
|
13846
|
+
if (this.isDedup()) {
|
|
13847
|
+
this.hll ??= new HLL();
|
|
13848
|
+
}
|
|
13855
13849
|
}
|
|
13856
13850
|
/**
|
|
13857
13851
|
* `of` creates a new instance of Counter.
|
|
@@ -13865,9 +13859,10 @@ class CRDTCounter extends CRDTElement {
|
|
|
13865
13859
|
static valueFromBytes(counterType, bytes) {
|
|
13866
13860
|
switch (counterType) {
|
|
13867
13861
|
case 0:
|
|
13862
|
+
case 2:
|
|
13868
13863
|
return bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
|
|
13869
13864
|
case 1:
|
|
13870
|
-
return
|
|
13865
|
+
return bigintFromBytesLE(bytes);
|
|
13871
13866
|
default:
|
|
13872
13867
|
throw new YorkieError(
|
|
13873
13868
|
Code.ErrUnimplemented,
|
|
@@ -13879,7 +13874,10 @@ class CRDTCounter extends CRDTElement {
|
|
|
13879
13874
|
* `getDataSize` returns the data usage of this element.
|
|
13880
13875
|
*/
|
|
13881
13876
|
getDataSize() {
|
|
13882
|
-
|
|
13877
|
+
let data = this.valueType === 0 || this.valueType === 2 ? 4 : 8;
|
|
13878
|
+
if (this.isDedup() && this.hll) {
|
|
13879
|
+
data += this.hll.toBytes().length;
|
|
13880
|
+
}
|
|
13883
13881
|
return {
|
|
13884
13882
|
data,
|
|
13885
13883
|
meta: this.getMetaUsage()
|
|
@@ -13918,6 +13916,9 @@ class CRDTCounter extends CRDTElement {
|
|
|
13918
13916
|
);
|
|
13919
13917
|
clone.setRemovedAt(this.getRemovedAt());
|
|
13920
13918
|
clone.setMovedAt(this.getMovedAt());
|
|
13919
|
+
if (this.isDedup() && this.hll) {
|
|
13920
|
+
clone.restoreHLL(this.hll.toBytes());
|
|
13921
|
+
}
|
|
13921
13922
|
return clone;
|
|
13922
13923
|
}
|
|
13923
13924
|
/**
|
|
@@ -13931,12 +13932,8 @@ class CRDTCounter extends CRDTElement {
|
|
|
13931
13932
|
*/
|
|
13932
13933
|
static getCounterType(value) {
|
|
13933
13934
|
switch (typeof value) {
|
|
13934
|
-
case "
|
|
13935
|
-
|
|
13936
|
-
return 1;
|
|
13937
|
-
} else {
|
|
13938
|
-
return;
|
|
13939
|
-
}
|
|
13935
|
+
case "bigint":
|
|
13936
|
+
return 1;
|
|
13940
13937
|
case "number":
|
|
13941
13938
|
if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
|
|
13942
13939
|
return 1;
|
|
@@ -13964,7 +13961,7 @@ class CRDTCounter extends CRDTElement {
|
|
|
13964
13961
|
*/
|
|
13965
13962
|
isNumericType() {
|
|
13966
13963
|
const t = this.valueType;
|
|
13967
|
-
return t === 0 || t === 1;
|
|
13964
|
+
return t === 0 || t === 1 || t === 2;
|
|
13968
13965
|
}
|
|
13969
13966
|
/**
|
|
13970
13967
|
* `getValueType` get counter value type.
|
|
@@ -13983,7 +13980,8 @@ class CRDTCounter extends CRDTElement {
|
|
|
13983
13980
|
*/
|
|
13984
13981
|
toBytes() {
|
|
13985
13982
|
switch (this.valueType) {
|
|
13986
|
-
case 0:
|
|
13983
|
+
case 0:
|
|
13984
|
+
case 2: {
|
|
13987
13985
|
const intVal = this.value;
|
|
13988
13986
|
return new Uint8Array([
|
|
13989
13987
|
intVal & 255,
|
|
@@ -13993,9 +13991,7 @@ class CRDTCounter extends CRDTElement {
|
|
|
13993
13991
|
]);
|
|
13994
13992
|
}
|
|
13995
13993
|
case 1: {
|
|
13996
|
-
|
|
13997
|
-
const longToBytes = longVal.toBytesLE();
|
|
13998
|
-
return Uint8Array.from(longToBytes);
|
|
13994
|
+
return bigintToBytesLE(this.value);
|
|
13999
13995
|
}
|
|
14000
13996
|
default:
|
|
14001
13997
|
throw new YorkieError(
|
|
@@ -14004,10 +14000,76 @@ class CRDTCounter extends CRDTElement {
|
|
|
14004
14000
|
);
|
|
14005
14001
|
}
|
|
14006
14002
|
}
|
|
14003
|
+
/**
|
|
14004
|
+
* `isDedup` returns whether dedup mode is enabled (derived from ValueType).
|
|
14005
|
+
*/
|
|
14006
|
+
isDedup() {
|
|
14007
|
+
return this.valueType === 2;
|
|
14008
|
+
}
|
|
14009
|
+
/**
|
|
14010
|
+
* `increaseDedup` increases the counter using HLL-based dedup.
|
|
14011
|
+
* Only updates the value if the actor is new (not seen before).
|
|
14012
|
+
*/
|
|
14013
|
+
increaseDedup(v, actor) {
|
|
14014
|
+
if (!this.isDedup() || !this.hll) {
|
|
14015
|
+
return this.increase(v);
|
|
14016
|
+
}
|
|
14017
|
+
if (!this.isNumericType() || !v.isNumericType()) {
|
|
14018
|
+
throw new TypeError(`Unsupported type of value: ${typeof v.getValue()}`);
|
|
14019
|
+
}
|
|
14020
|
+
if (!actor) {
|
|
14021
|
+
throw new YorkieError(
|
|
14022
|
+
Code.ErrInvalidArgument,
|
|
14023
|
+
"dedup counter requires actor"
|
|
14024
|
+
);
|
|
14025
|
+
}
|
|
14026
|
+
const val = v.getValue();
|
|
14027
|
+
const isUnit = v.getType() === PrimitiveType.Long ? val === 1n : val === 1;
|
|
14028
|
+
if (!isUnit) {
|
|
14029
|
+
throw new YorkieError(
|
|
14030
|
+
Code.ErrInvalidArgument,
|
|
14031
|
+
"dedup counter only supports increment by 1"
|
|
14032
|
+
);
|
|
14033
|
+
}
|
|
14034
|
+
if (this.hll.add(actor)) {
|
|
14035
|
+
this.recomputeValue();
|
|
14036
|
+
}
|
|
14037
|
+
return this;
|
|
14038
|
+
}
|
|
14039
|
+
/**
|
|
14040
|
+
* `hllBytes` returns the HLL register bytes, or undefined if not in dedup mode.
|
|
14041
|
+
*/
|
|
14042
|
+
hllBytes() {
|
|
14043
|
+
return this.hll?.toBytes();
|
|
14044
|
+
}
|
|
14045
|
+
/**
|
|
14046
|
+
* `restoreHLL` restores the HLL state from serialized bytes.
|
|
14047
|
+
*/
|
|
14048
|
+
restoreHLL(data) {
|
|
14049
|
+
if (!this.hll) {
|
|
14050
|
+
this.hll = new HLL();
|
|
14051
|
+
}
|
|
14052
|
+
this.hll.restore(data);
|
|
14053
|
+
this.recomputeValue();
|
|
14054
|
+
}
|
|
14055
|
+
/**
|
|
14056
|
+
* `recomputeValue` updates the counter value from the HLL cardinality estimate.
|
|
14057
|
+
*/
|
|
14058
|
+
recomputeValue() {
|
|
14059
|
+
if (!this.hll) return;
|
|
14060
|
+
this.value = this.hll.count();
|
|
14061
|
+
}
|
|
14007
14062
|
/**
|
|
14008
14063
|
* `increase` increases numeric data.
|
|
14064
|
+
* Dedup counters must use increaseDedup() instead.
|
|
14009
14065
|
*/
|
|
14010
14066
|
increase(v) {
|
|
14067
|
+
if (this.isDedup()) {
|
|
14068
|
+
throw new YorkieError(
|
|
14069
|
+
Code.ErrInvalidArgument,
|
|
14070
|
+
"dedup counter requires actor, use increaseDedup()"
|
|
14071
|
+
);
|
|
14072
|
+
}
|
|
14011
14073
|
function checkNumericType(target) {
|
|
14012
14074
|
if (!target.isNumericType()) {
|
|
14013
14075
|
throw new TypeError(
|
|
@@ -14018,14 +14080,17 @@ class CRDTCounter extends CRDTElement {
|
|
|
14018
14080
|
checkNumericType(this);
|
|
14019
14081
|
checkNumericType(v);
|
|
14020
14082
|
if (this.valueType === 1) {
|
|
14021
|
-
|
|
14083
|
+
const delta = typeof v.getValue() === "bigint" ? v.getValue() : BigInt(Math.trunc(v.getValue()));
|
|
14084
|
+
this.value = BigInt.asIntN(64, this.value + delta);
|
|
14022
14085
|
} else {
|
|
14023
14086
|
if (v.getType() === PrimitiveType.Long) {
|
|
14024
|
-
this.value = this.value + v.getValue()
|
|
14087
|
+
this.value = this.value + bigintToInt32(v.getValue());
|
|
14025
14088
|
} else {
|
|
14026
|
-
this.value =
|
|
14027
|
-
|
|
14028
|
-
|
|
14089
|
+
this.value = bigintToInt32(
|
|
14090
|
+
BigInt(
|
|
14091
|
+
this.value + removeDecimal(v.getValue())
|
|
14092
|
+
)
|
|
14093
|
+
);
|
|
14029
14094
|
}
|
|
14030
14095
|
}
|
|
14031
14096
|
return this;
|
|
@@ -14033,15 +14098,23 @@ class CRDTCounter extends CRDTElement {
|
|
|
14033
14098
|
}
|
|
14034
14099
|
class IncreaseOperation extends Operation {
|
|
14035
14100
|
value;
|
|
14036
|
-
|
|
14101
|
+
actor;
|
|
14102
|
+
constructor(parentCreatedAt, value, executedAt, actor) {
|
|
14037
14103
|
super(parentCreatedAt, executedAt);
|
|
14038
14104
|
this.value = value;
|
|
14105
|
+
this.actor = actor || "";
|
|
14039
14106
|
}
|
|
14040
14107
|
/**
|
|
14041
14108
|
* `create` creates a new instance of IncreaseOperation.
|
|
14042
14109
|
*/
|
|
14043
|
-
static create(parentCreatedAt, value, executedAt) {
|
|
14044
|
-
return new IncreaseOperation(parentCreatedAt, value, executedAt);
|
|
14110
|
+
static create(parentCreatedAt, value, executedAt, actor) {
|
|
14111
|
+
return new IncreaseOperation(parentCreatedAt, value, executedAt, actor);
|
|
14112
|
+
}
|
|
14113
|
+
/**
|
|
14114
|
+
* `getActor` returns the actor ID associated with this operation.
|
|
14115
|
+
*/
|
|
14116
|
+
getActor() {
|
|
14117
|
+
return this.actor;
|
|
14045
14118
|
}
|
|
14046
14119
|
/**
|
|
14047
14120
|
* `execute` executes this operation on the given `CRDTRoot`.
|
|
@@ -14062,7 +14135,17 @@ class IncreaseOperation extends Operation {
|
|
|
14062
14135
|
}
|
|
14063
14136
|
const counter = parentObject;
|
|
14064
14137
|
const value = this.value.deepcopy();
|
|
14065
|
-
counter.
|
|
14138
|
+
if (counter.isDedup()) {
|
|
14139
|
+
if (!this.actor) {
|
|
14140
|
+
throw new YorkieError(
|
|
14141
|
+
Code.ErrInvalidArgument,
|
|
14142
|
+
"dedup counter requires actor"
|
|
14143
|
+
);
|
|
14144
|
+
}
|
|
14145
|
+
counter.increaseDedup(value, this.actor);
|
|
14146
|
+
} else {
|
|
14147
|
+
counter.increase(value);
|
|
14148
|
+
}
|
|
14066
14149
|
return {
|
|
14067
14150
|
opInfos: [
|
|
14068
14151
|
{
|
|
@@ -14071,7 +14154,9 @@ class IncreaseOperation extends Operation {
|
|
|
14071
14154
|
value: value.getValue()
|
|
14072
14155
|
}
|
|
14073
14156
|
],
|
|
14074
|
-
|
|
14157
|
+
// Dedup counters do not support undo/redo because HLL cannot
|
|
14158
|
+
// remove an actor once added.
|
|
14159
|
+
reverseOp: this.actor ? void 0 : this.toReverseOperation()
|
|
14075
14160
|
};
|
|
14076
14161
|
}
|
|
14077
14162
|
/**
|
|
@@ -14080,7 +14165,7 @@ class IncreaseOperation extends Operation {
|
|
|
14080
14165
|
toReverseOperation() {
|
|
14081
14166
|
const primitiveValue = this.value.deepcopy();
|
|
14082
14167
|
const valueType = primitiveValue.getType();
|
|
14083
|
-
const value = valueType === PrimitiveType.Long ? primitiveValue.getValue()
|
|
14168
|
+
const value = valueType === PrimitiveType.Long ? -primitiveValue.getValue() : primitiveValue.getValue() * -1;
|
|
14084
14169
|
const reverseOp = IncreaseOperation.create(
|
|
14085
14170
|
this.getParentCreatedAt(),
|
|
14086
14171
|
Primitive.of(value, primitiveValue.getCreatedAt())
|
|
@@ -14165,28 +14250,67 @@ class TreeStyleOperation extends Operation {
|
|
|
14165
14250
|
let changes;
|
|
14166
14251
|
let pairs;
|
|
14167
14252
|
let diff = { data: 0, meta: 0 };
|
|
14253
|
+
const reversePrevAttributes = /* @__PURE__ */ new Map();
|
|
14254
|
+
const reverseAttrsToRemove = [];
|
|
14168
14255
|
if (this.attributes.size) {
|
|
14169
14256
|
const attributes = {};
|
|
14170
14257
|
[...this.attributes].forEach(([key, value]) => attributes[key] = value);
|
|
14171
|
-
|
|
14258
|
+
let prevAttributes;
|
|
14259
|
+
let newAttrKeys;
|
|
14260
|
+
[pairs, changes, diff, prevAttributes, newAttrKeys] = tree.style(
|
|
14172
14261
|
[this.fromPos, this.toPos],
|
|
14173
14262
|
attributes,
|
|
14174
14263
|
this.getExecutedAt(),
|
|
14175
14264
|
versionVector
|
|
14176
14265
|
);
|
|
14266
|
+
for (const [key, value] of prevAttributes) {
|
|
14267
|
+
reversePrevAttributes.set(key, value);
|
|
14268
|
+
}
|
|
14269
|
+
reverseAttrsToRemove.push(...newAttrKeys);
|
|
14177
14270
|
} else {
|
|
14178
14271
|
const attributesToRemove = this.attributesToRemove;
|
|
14179
|
-
|
|
14272
|
+
let prevAttributes;
|
|
14273
|
+
[pairs, changes, diff, prevAttributes] = tree.removeStyle(
|
|
14180
14274
|
[this.fromPos, this.toPos],
|
|
14181
14275
|
attributesToRemove,
|
|
14182
14276
|
this.getExecutedAt(),
|
|
14183
14277
|
versionVector
|
|
14184
14278
|
);
|
|
14279
|
+
for (const [key, value] of prevAttributes) {
|
|
14280
|
+
reversePrevAttributes.set(key, value);
|
|
14281
|
+
}
|
|
14185
14282
|
}
|
|
14186
14283
|
root.acc(diff);
|
|
14187
14284
|
for (const pair of pairs) {
|
|
14188
14285
|
root.registerGCPair(pair);
|
|
14189
14286
|
}
|
|
14287
|
+
let reverseOp;
|
|
14288
|
+
if (reversePrevAttributes.size > 0 && reverseAttrsToRemove.length > 0) {
|
|
14289
|
+
reverseOp = new TreeStyleOperation(
|
|
14290
|
+
this.getParentCreatedAt(),
|
|
14291
|
+
this.fromPos,
|
|
14292
|
+
this.toPos,
|
|
14293
|
+
reversePrevAttributes,
|
|
14294
|
+
reverseAttrsToRemove,
|
|
14295
|
+
void 0
|
|
14296
|
+
);
|
|
14297
|
+
} else if (reverseAttrsToRemove.length > 0) {
|
|
14298
|
+
reverseOp = TreeStyleOperation.createTreeRemoveStyleOperation(
|
|
14299
|
+
this.getParentCreatedAt(),
|
|
14300
|
+
this.fromPos,
|
|
14301
|
+
this.toPos,
|
|
14302
|
+
reverseAttrsToRemove,
|
|
14303
|
+
void 0
|
|
14304
|
+
);
|
|
14305
|
+
} else if (reversePrevAttributes.size > 0) {
|
|
14306
|
+
reverseOp = TreeStyleOperation.create(
|
|
14307
|
+
this.getParentCreatedAt(),
|
|
14308
|
+
this.fromPos,
|
|
14309
|
+
this.toPos,
|
|
14310
|
+
reversePrevAttributes,
|
|
14311
|
+
void 0
|
|
14312
|
+
);
|
|
14313
|
+
}
|
|
14190
14314
|
return {
|
|
14191
14315
|
opInfos: changes.map(({ from, to, value, fromPath, toPath }) => {
|
|
14192
14316
|
return {
|
|
@@ -14198,7 +14322,8 @@ class TreeStyleOperation extends Operation {
|
|
|
14198
14322
|
toPath,
|
|
14199
14323
|
path: root.createPath(this.getParentCreatedAt())
|
|
14200
14324
|
};
|
|
14201
|
-
})
|
|
14325
|
+
}),
|
|
14326
|
+
reverseOp
|
|
14202
14327
|
};
|
|
14203
14328
|
}
|
|
14204
14329
|
/**
|
|
@@ -14419,6 +14544,8 @@ function toCounterType(valueType) {
|
|
|
14419
14544
|
return ValueType.INTEGER_CNT;
|
|
14420
14545
|
case CounterType.Long:
|
|
14421
14546
|
return ValueType.LONG_CNT;
|
|
14547
|
+
case CounterType.IntDedup:
|
|
14548
|
+
return ValueType.INTEGER_DEDUP_CNT;
|
|
14422
14549
|
default:
|
|
14423
14550
|
throw new YorkieError(
|
|
14424
14551
|
Code.ErrInvalidType,
|
|
@@ -14591,6 +14718,7 @@ function toOperation(operation) {
|
|
|
14591
14718
|
pbIncreaseOperation.executedAt = toTimeTicket(
|
|
14592
14719
|
increaseOperation.getExecutedAt()
|
|
14593
14720
|
);
|
|
14721
|
+
pbIncreaseOperation.actor = increaseOperation.getActor();
|
|
14594
14722
|
pbOperation.body.case = "increase";
|
|
14595
14723
|
pbOperation.body.value = pbIncreaseOperation;
|
|
14596
14724
|
} else if (operation instanceof TreeEditOperation) {
|
|
@@ -14767,6 +14895,12 @@ function toTreeNodes(node) {
|
|
|
14767
14895
|
if (n.insNextID) {
|
|
14768
14896
|
pbTreeNode.insNextId = toTreeNodeID(n.insNextID);
|
|
14769
14897
|
}
|
|
14898
|
+
if (n.mergedFrom) {
|
|
14899
|
+
pbTreeNode.mergedFrom = toTreeNodeID(n.mergedFrom);
|
|
14900
|
+
}
|
|
14901
|
+
if (n.mergedAt) {
|
|
14902
|
+
pbTreeNode.mergedAt = toTimeTicket(n.mergedAt);
|
|
14903
|
+
}
|
|
14770
14904
|
if (n.attrs) {
|
|
14771
14905
|
pbTreeNode.attributes = toRHT(n.attrs);
|
|
14772
14906
|
}
|
|
@@ -14836,7 +14970,8 @@ function toCounter(counter) {
|
|
|
14836
14970
|
value: counter.toBytes(),
|
|
14837
14971
|
createdAt: toTimeTicket(counter.getCreatedAt()),
|
|
14838
14972
|
movedAt: toTimeTicket(counter.getMovedAt()),
|
|
14839
|
-
removedAt: toTimeTicket(counter.getRemovedAt())
|
|
14973
|
+
removedAt: toTimeTicket(counter.getRemovedAt()),
|
|
14974
|
+
hllRegisters: counter.hllBytes() || new Uint8Array()
|
|
14840
14975
|
})
|
|
14841
14976
|
}
|
|
14842
14977
|
});
|
|
@@ -15000,6 +15135,8 @@ function fromCounterType(pbValueType) {
|
|
|
15000
15135
|
return CounterType.Int;
|
|
15001
15136
|
case ValueType.LONG_CNT:
|
|
15002
15137
|
return CounterType.Long;
|
|
15138
|
+
case ValueType.INTEGER_DEDUP_CNT:
|
|
15139
|
+
return CounterType.IntDedup;
|
|
15003
15140
|
}
|
|
15004
15141
|
throw new YorkieError(
|
|
15005
15142
|
Code.ErrUnimplemented,
|
|
@@ -15042,6 +15179,7 @@ function fromElementSimple(pbElementSimple) {
|
|
|
15042
15179
|
);
|
|
15043
15180
|
case ValueType.INTEGER_CNT:
|
|
15044
15181
|
case ValueType.LONG_CNT:
|
|
15182
|
+
case ValueType.INTEGER_DEDUP_CNT:
|
|
15045
15183
|
return CRDTCounter.create(
|
|
15046
15184
|
fromCounterType(pbElementSimple.type),
|
|
15047
15185
|
CRDTCounter.valueFromBytes(
|
|
@@ -15149,6 +15287,12 @@ function fromTreeNode(pbTreeNode) {
|
|
|
15149
15287
|
if (pbTreeNode.insNextId) {
|
|
15150
15288
|
node.insNextID = fromTreeNodeID(pbTreeNode.insNextId);
|
|
15151
15289
|
}
|
|
15290
|
+
if (pbTreeNode.mergedFrom) {
|
|
15291
|
+
node.mergedFrom = fromTreeNodeID(pbTreeNode.mergedFrom);
|
|
15292
|
+
}
|
|
15293
|
+
if (pbTreeNode.mergedAt) {
|
|
15294
|
+
node.mergedAt = fromTimeTicket(pbTreeNode.mergedAt);
|
|
15295
|
+
}
|
|
15152
15296
|
node.removedAt = fromTimeTicket(pbTreeNode.removedAt);
|
|
15153
15297
|
return node;
|
|
15154
15298
|
}
|
|
@@ -15218,7 +15362,8 @@ function fromOperation(pbOperation) {
|
|
|
15218
15362
|
return IncreaseOperation.create(
|
|
15219
15363
|
fromTimeTicket(pbIncreaseOperation.parentCreatedAt),
|
|
15220
15364
|
fromElementSimple(pbIncreaseOperation.value),
|
|
15221
|
-
fromTimeTicket(pbIncreaseOperation.executedAt)
|
|
15365
|
+
fromTimeTicket(pbIncreaseOperation.executedAt),
|
|
15366
|
+
pbIncreaseOperation.actor || void 0
|
|
15222
15367
|
);
|
|
15223
15368
|
} else if (pbOperation.body.case === "treeEdit") {
|
|
15224
15369
|
const pbTreeEditOperation = pbOperation.body.value;
|
|
@@ -15366,6 +15511,9 @@ function fromCounter(pbCounter) {
|
|
|
15366
15511
|
);
|
|
15367
15512
|
counter.setMovedAt(fromTimeTicket(pbCounter.movedAt));
|
|
15368
15513
|
counter.setRemovedAt(fromTimeTicket(pbCounter.removedAt));
|
|
15514
|
+
if (counter.isDedup() && pbCounter.hllRegisters.length > 0) {
|
|
15515
|
+
counter.restoreHLL(pbCounter.hllRegisters);
|
|
15516
|
+
}
|
|
15369
15517
|
return counter;
|
|
15370
15518
|
}
|
|
15371
15519
|
function fromTree(pbTree) {
|
|
@@ -16835,7 +16983,7 @@ class Text {
|
|
|
16835
16983
|
return this.text.indexRangeToPosRange(fromIdx, toIdx);
|
|
16836
16984
|
}
|
|
16837
16985
|
}
|
|
16838
|
-
class
|
|
16986
|
+
class BaseCounter {
|
|
16839
16987
|
valueType;
|
|
16840
16988
|
value;
|
|
16841
16989
|
context;
|
|
@@ -16845,7 +16993,7 @@ class Counter {
|
|
|
16845
16993
|
this.value = value;
|
|
16846
16994
|
}
|
|
16847
16995
|
/**
|
|
16848
|
-
* `initialize`
|
|
16996
|
+
* `initialize` links this proxy to a ChangeContext and CRDTCounter.
|
|
16849
16997
|
*/
|
|
16850
16998
|
initialize(context, counter) {
|
|
16851
16999
|
this.valueType = counter.getValueType();
|
|
@@ -16854,17 +17002,11 @@ class Counter {
|
|
|
16854
17002
|
this.value = counter.getValue();
|
|
16855
17003
|
}
|
|
16856
17004
|
/**
|
|
16857
|
-
* `getID` returns the ID of this
|
|
17005
|
+
* `getID` returns the ID of this counter.
|
|
16858
17006
|
*/
|
|
16859
17007
|
getID() {
|
|
16860
17008
|
return this.counter.getID();
|
|
16861
17009
|
}
|
|
16862
|
-
/**
|
|
16863
|
-
* `getValue` returns the value of this counter;
|
|
16864
|
-
*/
|
|
16865
|
-
getValue() {
|
|
16866
|
-
return this.value;
|
|
16867
|
-
}
|
|
16868
17010
|
/**
|
|
16869
17011
|
* `getValueType` returns the value type of this counter.
|
|
16870
17012
|
*/
|
|
@@ -16872,15 +17014,45 @@ class Counter {
|
|
|
16872
17014
|
return this.valueType;
|
|
16873
17015
|
}
|
|
16874
17016
|
/**
|
|
16875
|
-
* `
|
|
17017
|
+
* `toJSForTest` returns value with meta data for testing.
|
|
16876
17018
|
*/
|
|
16877
|
-
|
|
17019
|
+
toJSForTest() {
|
|
17020
|
+
if (!this.context || !this.counter) {
|
|
17021
|
+
throw new YorkieError(
|
|
17022
|
+
Code.ErrNotInitialized,
|
|
17023
|
+
"Counter is not initialized yet"
|
|
17024
|
+
);
|
|
17025
|
+
}
|
|
17026
|
+
return this.counter.toJSForTest();
|
|
17027
|
+
}
|
|
17028
|
+
/**
|
|
17029
|
+
* `ensureInitialized` throws if this counter has not been initialized.
|
|
17030
|
+
*/
|
|
17031
|
+
ensureInitialized() {
|
|
16878
17032
|
if (!this.context || !this.counter) {
|
|
16879
17033
|
throw new YorkieError(
|
|
16880
17034
|
Code.ErrNotInitialized,
|
|
16881
17035
|
"Counter is not initialized yet"
|
|
16882
17036
|
);
|
|
16883
17037
|
}
|
|
17038
|
+
}
|
|
17039
|
+
}
|
|
17040
|
+
class Counter extends BaseCounter {
|
|
17041
|
+
constructor(value) {
|
|
17042
|
+
const type = typeof value === "bigint" ? CounterType.Long : CounterType.Int;
|
|
17043
|
+
super(type, value);
|
|
17044
|
+
}
|
|
17045
|
+
/**
|
|
17046
|
+
* `getValue` returns the value of this counter.
|
|
17047
|
+
*/
|
|
17048
|
+
getValue() {
|
|
17049
|
+
return this.value;
|
|
17050
|
+
}
|
|
17051
|
+
/**
|
|
17052
|
+
* `increase` increases numeric data.
|
|
17053
|
+
*/
|
|
17054
|
+
increase(v) {
|
|
17055
|
+
this.ensureInitialized();
|
|
16884
17056
|
const ticket = this.context.issueTimeTicket();
|
|
16885
17057
|
const value = Primitive.of(v, ticket);
|
|
16886
17058
|
if (!value.isNumericType()) {
|
|
@@ -16894,19 +17066,44 @@ class Counter {
|
|
|
16894
17066
|
);
|
|
16895
17067
|
return this;
|
|
16896
17068
|
}
|
|
17069
|
+
}
|
|
17070
|
+
class DedupCounter extends BaseCounter {
|
|
17071
|
+
constructor() {
|
|
17072
|
+
super(CounterType.IntDedup, 0);
|
|
17073
|
+
}
|
|
16897
17074
|
/**
|
|
16898
|
-
* `
|
|
17075
|
+
* `getValue` returns the value of this counter. Always a number since
|
|
17076
|
+
* DedupCounter only supports IntDedup.
|
|
16899
17077
|
*/
|
|
16900
|
-
|
|
16901
|
-
|
|
16902
|
-
|
|
16903
|
-
|
|
16904
|
-
|
|
16905
|
-
|
|
17078
|
+
getValue() {
|
|
17079
|
+
return this.value;
|
|
17080
|
+
}
|
|
17081
|
+
/**
|
|
17082
|
+
* `add` records a unique actor in the dedup counter. If the actor has
|
|
17083
|
+
* already been counted, the call is ignored.
|
|
17084
|
+
*/
|
|
17085
|
+
add(actor) {
|
|
17086
|
+
this.ensureInitialized();
|
|
17087
|
+
if (!actor) {
|
|
17088
|
+
throw new YorkieError(Code.ErrInvalidArgument, "actor is required");
|
|
16906
17089
|
}
|
|
16907
|
-
|
|
17090
|
+
const ticket = this.context.issueTimeTicket();
|
|
17091
|
+
const value = Primitive.of(1, ticket);
|
|
17092
|
+
this.counter.increaseDedup(value, actor);
|
|
17093
|
+
this.context.push(
|
|
17094
|
+
IncreaseOperation.create(
|
|
17095
|
+
this.counter.getCreatedAt(),
|
|
17096
|
+
value,
|
|
17097
|
+
ticket,
|
|
17098
|
+
actor
|
|
17099
|
+
)
|
|
17100
|
+
);
|
|
17101
|
+
return this;
|
|
16908
17102
|
}
|
|
16909
17103
|
}
|
|
17104
|
+
function isCounter$1(value) {
|
|
17105
|
+
return value instanceof Counter || value instanceof DedupCounter;
|
|
17106
|
+
}
|
|
16910
17107
|
function toTreeNode(node) {
|
|
16911
17108
|
if (node.isText) {
|
|
16912
17109
|
return {
|
|
@@ -17710,7 +17907,12 @@ function toWrappedElement(context, elem) {
|
|
|
17710
17907
|
} else if (elem instanceof CRDTText) {
|
|
17711
17908
|
return new Text(context, elem);
|
|
17712
17909
|
} else if (elem instanceof CRDTCounter) {
|
|
17713
|
-
|
|
17910
|
+
if (elem.isDedup()) {
|
|
17911
|
+
const counter2 = new DedupCounter();
|
|
17912
|
+
counter2.initialize(context, elem);
|
|
17913
|
+
return counter2;
|
|
17914
|
+
}
|
|
17915
|
+
const counter = new Counter(0);
|
|
17714
17916
|
counter.initialize(context, elem);
|
|
17715
17917
|
return counter;
|
|
17716
17918
|
} else if (elem instanceof CRDTTree) {
|
|
@@ -17740,7 +17942,7 @@ function buildCRDTElement(context, value, createdAt) {
|
|
|
17740
17942
|
if (value instanceof Text) {
|
|
17741
17943
|
element = CRDTText.create(RGATreeSplit.create(), createdAt);
|
|
17742
17944
|
value.initialize(context, element);
|
|
17743
|
-
} else if (value
|
|
17945
|
+
} else if (isCounter$1(value)) {
|
|
17744
17946
|
element = CRDTCounter.create(
|
|
17745
17947
|
value.getValueType(),
|
|
17746
17948
|
value.getValue(),
|
|
@@ -20028,7 +20230,7 @@ function createAuthInterceptor(apiKey, token) {
|
|
|
20028
20230
|
};
|
|
20029
20231
|
}
|
|
20030
20232
|
const name = "@yorkie-js/sdk";
|
|
20031
|
-
const version = "0.7.
|
|
20233
|
+
const version = "0.7.5";
|
|
20032
20234
|
const pkg = {
|
|
20033
20235
|
name,
|
|
20034
20236
|
version
|
|
@@ -20382,21 +20584,19 @@ class Client {
|
|
|
20382
20584
|
this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
|
|
20383
20585
|
const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
|
|
20384
20586
|
this.setAuthToken = setToken;
|
|
20587
|
+
const transportOptions = {
|
|
20588
|
+
baseUrl: rpcAddr,
|
|
20589
|
+
interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
|
|
20590
|
+
fetch: (input, init) => {
|
|
20591
|
+
return fetch(input, {
|
|
20592
|
+
...init,
|
|
20593
|
+
keepalive: this.keepalive
|
|
20594
|
+
});
|
|
20595
|
+
}
|
|
20596
|
+
};
|
|
20385
20597
|
this.rpcClient = createClient(
|
|
20386
20598
|
YorkieService,
|
|
20387
|
-
createGrpcWebTransport(
|
|
20388
|
-
baseUrl: rpcAddr,
|
|
20389
|
-
interceptors: [
|
|
20390
|
-
authInterceptor,
|
|
20391
|
-
createMetricInterceptor(opts?.userAgent)
|
|
20392
|
-
],
|
|
20393
|
-
fetch: (input, init) => {
|
|
20394
|
-
return fetch(input, {
|
|
20395
|
-
...init,
|
|
20396
|
-
keepalive: this.keepalive
|
|
20397
|
-
});
|
|
20398
|
-
}
|
|
20399
|
-
})
|
|
20599
|
+
opts.useGrpcWebTransport ? createGrpcWebTransport(transportOptions) : createConnectTransport(transportOptions)
|
|
20400
20600
|
);
|
|
20401
20601
|
this.taskQueue = [];
|
|
20402
20602
|
}
|
|
@@ -21900,15 +22100,14 @@ const yorkie = {
|
|
|
21900
22100
|
Primitive,
|
|
21901
22101
|
Text,
|
|
21902
22102
|
Counter,
|
|
22103
|
+
DedupCounter,
|
|
21903
22104
|
Tree,
|
|
21904
22105
|
Devtools,
|
|
21905
22106
|
Channel: Channel2,
|
|
21906
22107
|
ChannelEventType,
|
|
21907
22108
|
YSON,
|
|
21908
22109
|
LogLevel,
|
|
21909
|
-
setLogLevel
|
|
21910
|
-
IntType: CounterType.Int,
|
|
21911
|
-
LongType: CounterType.Long
|
|
22110
|
+
setLogLevel
|
|
21912
22111
|
};
|
|
21913
22112
|
if (typeof globalThis !== "undefined") {
|
|
21914
22113
|
globalThis.yorkie = {
|
|
@@ -21917,14 +22116,13 @@ if (typeof globalThis !== "undefined") {
|
|
|
21917
22116
|
Primitive,
|
|
21918
22117
|
Text,
|
|
21919
22118
|
Counter,
|
|
22119
|
+
DedupCounter,
|
|
21920
22120
|
Tree,
|
|
21921
22121
|
Channel: Channel2,
|
|
21922
22122
|
ChannelEventType,
|
|
21923
22123
|
YSON,
|
|
21924
22124
|
LogLevel,
|
|
21925
|
-
setLogLevel
|
|
21926
|
-
IntType: CounterType.Int,
|
|
21927
|
-
LongType: CounterType.Long
|
|
22125
|
+
setLogLevel
|
|
21928
22126
|
};
|
|
21929
22127
|
}
|
|
21930
22128
|
export {
|
|
@@ -21937,6 +22135,7 @@ export {
|
|
|
21937
22135
|
ClientStatus,
|
|
21938
22136
|
Counter,
|
|
21939
22137
|
CounterType,
|
|
22138
|
+
DedupCounter,
|
|
21940
22139
|
Devtools,
|
|
21941
22140
|
DocEventType,
|
|
21942
22141
|
DocStatus,
|