@yorkie-js/react 0.7.12-rc → 0.7.13
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/yorkie-js-react.d.ts +27 -1
- package/dist/yorkie-js-react.es.js +787 -41
- package/dist/yorkie-js-react.es.js.map +1 -1
- package/dist/yorkie-js-react.js +787 -41
- package/dist/yorkie-js-react.js.map +1 -1
- package/package.json +2 -2
package/dist/yorkie-js-react.js
CHANGED
|
@@ -5792,7 +5792,7 @@
|
|
|
5792
5792
|
}
|
|
5793
5793
|
};
|
|
5794
5794
|
}
|
|
5795
|
-
const file_yorkie_v1_resources = /* @__PURE__ */ fileDesc("Chl5b3JraWUvdjEvcmVzb3VyY2VzLnByb3RvEgl5b3JraWUudjEirgEKCFNuYXBzaG90EiQKBHJvb3QYASABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQSNQoJcHJlc2VuY2VzGAIgAygLMiIueW9ya2llLnYxLlNuYXBzaG90LlByZXNlbmNlc0VudHJ5GkUKDlByZXNlbmNlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZToCOAEi+wEKCkNoYW5nZVBhY2sSFAoMZG9jdW1lbnRfa2V5GAEgASgJEikKCmNoZWNrcG9pbnQYAiABKAsyFS55b3JraWUudjEuQ2hlY2twb2ludBIQCghzbmFwc2hvdBgDIAEoDBIiCgdjaGFuZ2VzGAQgAygLMhEueW9ya2llLnYxLkNoYW5nZRIwChFtaW5fc3luY2VkX3RpY2tldBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYBiABKAgSMAoOdmVyc2lvbl92ZWN0b3IYByABKAsyGC55b3JraWUudjEuVmVyc2lvblZlY3RvciKYAQoGQ2hhbmdlEh8KAmlkGAEgASgLMhMueW9ya2llLnYxLkNoYW5nZUlEEg8KB21lc3NhZ2UYAiABKAkSKAoKb3BlcmF0aW9ucxgDIAMoCzIULnlvcmtpZS52MS5PcGVyYXRpb24SMgoPcHJlc2VuY2VfY2hhbmdlGAQgASgLMhkueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlIocBCghDaGFuZ2VJRBISCgpjbGllbnRfc2VxGAEgASgNEhIKCnNlcnZlcl9zZXEYAiABKAMSDwoHbGFtcG9ydBgDIAEoAxIQCghhY3Rvcl9pZBgEIAEoDBIwCg52ZXJzaW9uX3ZlY3RvchgFIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yInQKDVZlcnNpb25WZWN0b3ISNAoGdmVjdG9yGAEgAygLMiQueW9ya2llLnYxLlZlcnNpb25WZWN0b3IuVmVjdG9yRW50cnkaLQoLVmVjdG9yRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDOgI4ASLZGgoJT3BlcmF0aW9uEicKA3NldBgBIAEoCzIYLnlvcmtpZS52MS5PcGVyYXRpb24uU2V0SAASJwoDYWRkGAIgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5BZGRIABIpCgRtb3ZlGAMgASgLMhkueW9ya2llLnYxLk9wZXJhdGlvbi5Nb3ZlSAASLQoGcmVtb3ZlGAQgASgLMhsueW9ya2llLnYxLk9wZXJhdGlvbi5SZW1vdmVIABIpCgRlZGl0GAUgASgLMhkueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0SAASKwoFc3R5bGUYByABKAsyGi55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlSAASMQoIaW5jcmVhc2UYCCABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLkluY3JlYXNlSAASMgoJdHJlZV9lZGl0GAkgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlRWRpdEgAEjQKCnRyZWVfc3R5bGUYCiABKAsyHi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZUgAEjIKCWFycmF5X3NldBgLIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uQXJyYXlTZXRIABqdAQoDU2V0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSCwoDa2V5GAIgASgJEisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQawAEKA0FkZBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQavwEKBE1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIuCg9wcmV2X2NyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqRAQoGUmVtb3ZlEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQa2QMKBEVkaXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIkCgRmcm9tGAIgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEiIKAnRvGAMgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zElMKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAQgAygLMjIueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIPCgdjb250ZW50GAUgASgJEioKC2V4ZWN1dGVkX2F0GAYgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSPQoKYXR0cmlidXRlcxgHIAMoCzIpLnlvcmtpZS52MS5PcGVyYXRpb24uRWRpdC5BdHRyaWJ1dGVzRW50cnkaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARrpAwoFU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIkCgRmcm9tGAIgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEiIKAnRvGAMgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEj4KCmF0dHJpYnV0ZXMYBCADKAsyKi55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkF0dHJpYnV0ZXNFbnRyeRIqCgtleGVjdXRlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0ElQKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAYgAygLMjMueW9ya2llLnYxLk9wZXJhdGlvbi5TdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSHAoUYXR0cmlidXRlc190b19yZW1vdmUYByADKAkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARqkAQoISW5jcmVhc2USMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIrCgV2YWx1ZRgCIAEoCzIcLnlvcmtpZS52MS5KU09ORWxlbWVudFNpbXBsZRIqCgtleGVjdXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg0KBWFjdG9yGAQgASgJGpMDCghUcmVlRWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiAKBGZyb20YAiABKAsyEi55b3JraWUudjEuVHJlZVBvcxIeCgJ0bxgDIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zElcKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAQgAygLMjYueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlRWRpdC5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSJgoIY29udGVudHMYBSADKAsyFC55b3JraWUudjEuVHJlZU5vZGVzEhMKC3NwbGl0X2xldmVsGAcgASgFEioKC2V4ZWN1dGVkX2F0GAYgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrtAwoJVHJlZVN0eWxlEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSQgoKYXR0cmlidXRlcxgEIAMoCzIuLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlLkF0dHJpYnV0ZXNFbnRyeRIqCgtleGVjdXRlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhwKFGF0dHJpYnV0ZXNfdG9fcmVtb3ZlGAYgAygJElgKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAcgAygLMjcueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5GjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGlEKGENyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldDoCOAEawAEKCEFycmF5U2V0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSLFAQoRSlNPTkVsZW1lbnRTaW1wbGUSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiIKBHR5cGUYBCABKA4yFC55b3JraWUudjEuVmFsdWVUeXBlEg0KBXZhbHVlGAUgASgMIp8LCgtKU09ORWxlbWVudBI4Cgtqc29uX29iamVjdBgBIAEoCzIhLnlvcmtpZS52MS5KU09ORWxlbWVudC5KU09OT2JqZWN0SAASNgoKanNvbl9hcnJheRgCIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5KU09OQXJyYXlIABI1CglwcmltaXRpdmUYAyABKAsyIC55b3JraWUudjEuSlNPTkVsZW1lbnQuUHJpbWl0aXZlSAASKwoEdGV4dBgFIAEoCzIbLnlvcmtpZS52MS5KU09ORWxlbWVudC5UZXh0SAASMQoHY291bnRlchgGIAEoCzIeLnlvcmtpZS52MS5KU09ORWxlbWVudC5Db3VudGVySAASKwoEdHJlZRgHIAEoCzIbLnlvcmtpZS52MS5KU09ORWxlbWVudC5UcmVlSAAargEKCkpTT05PYmplY3QSIQoFbm9kZXMYASADKAsyEi55b3JraWUudjEuUkhUTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQarQEKCUpTT05BcnJheRIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SR0FOb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq9AQoJUHJpbWl0aXZlEiIKBHR5cGUYASABKA4yFC55b3JraWUudjEuVmFsdWVUeXBlEg0KBXZhbHVlGAIgASgMEikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBSABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqpAQoEVGV4dBIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UZXh0Tm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQa2AEKB0NvdW50ZXISIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhUKDWhsbF9yZWdpc3RlcnMYByABKAxKBAgGEAcaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCLuAQoHUkdBTm9kZRIgCgRuZXh0GAEgASgLMhIueW9ya2llLnYxLlJHQU5vZGUSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBIyChNwb3NpdGlvbl9jcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSMAoRcG9zaXRpb25fbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIyChNwb3NpdGlvbl9yZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
|
|
5795
|
+
const file_yorkie_v1_resources = /* @__PURE__ */ fileDesc("Chl5b3JraWUvdjEvcmVzb3VyY2VzLnByb3RvEgl5b3JraWUudjEirgEKCFNuYXBzaG90EiQKBHJvb3QYASABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQSNQoJcHJlc2VuY2VzGAIgAygLMiIueW9ya2llLnYxLlNuYXBzaG90LlByZXNlbmNlc0VudHJ5GkUKDlByZXNlbmNlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZToCOAEi+wEKCkNoYW5nZVBhY2sSFAoMZG9jdW1lbnRfa2V5GAEgASgJEikKCmNoZWNrcG9pbnQYAiABKAsyFS55b3JraWUudjEuQ2hlY2twb2ludBIQCghzbmFwc2hvdBgDIAEoDBIiCgdjaGFuZ2VzGAQgAygLMhEueW9ya2llLnYxLkNoYW5nZRIwChFtaW5fc3luY2VkX3RpY2tldBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYBiABKAgSMAoOdmVyc2lvbl92ZWN0b3IYByABKAsyGC55b3JraWUudjEuVmVyc2lvblZlY3RvciKYAQoGQ2hhbmdlEh8KAmlkGAEgASgLMhMueW9ya2llLnYxLkNoYW5nZUlEEg8KB21lc3NhZ2UYAiABKAkSKAoKb3BlcmF0aW9ucxgDIAMoCzIULnlvcmtpZS52MS5PcGVyYXRpb24SMgoPcHJlc2VuY2VfY2hhbmdlGAQgASgLMhkueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlIocBCghDaGFuZ2VJRBISCgpjbGllbnRfc2VxGAEgASgNEhIKCnNlcnZlcl9zZXEYAiABKAMSDwoHbGFtcG9ydBgDIAEoAxIQCghhY3Rvcl9pZBgEIAEoDBIwCg52ZXJzaW9uX3ZlY3RvchgFIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yInQKDVZlcnNpb25WZWN0b3ISNAoGdmVjdG9yGAEgAygLMiQueW9ya2llLnYxLlZlcnNpb25WZWN0b3IuVmVjdG9yRW50cnkaLQoLVmVjdG9yRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDOgI4ASLpGwoJT3BlcmF0aW9uEicKA3NldBgBIAEoCzIYLnlvcmtpZS52MS5PcGVyYXRpb24uU2V0SAASJwoDYWRkGAIgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5BZGRIABIpCgRtb3ZlGAMgASgLMhkueW9ya2llLnYxLk9wZXJhdGlvbi5Nb3ZlSAASLQoGcmVtb3ZlGAQgASgLMhsueW9ya2llLnYxLk9wZXJhdGlvbi5SZW1vdmVIABIpCgRlZGl0GAUgASgLMhkueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0SAASKwoFc3R5bGUYByABKAsyGi55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlSAASMQoIaW5jcmVhc2UYCCABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLkluY3JlYXNlSAASMgoJdHJlZV9lZGl0GAkgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlRWRpdEgAEjQKCnRyZWVfc3R5bGUYCiABKAsyHi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZUgAEjIKCWFycmF5X3NldBgLIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uQXJyYXlTZXRIABqdAQoDU2V0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSCwoDa2V5GAIgASgJEisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQawAEKA0FkZBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQavwEKBE1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIuCg9wcmV2X2NyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqRAQoGUmVtb3ZlEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQa6QQKBEVkaXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIkCgRmcm9tGAIgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEiIKAnRvGAMgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zElMKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAQgAygLMjIueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIPCgdjb250ZW50GAUgASgJEioKC2V4ZWN1dGVkX2F0GAYgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSPQoKYXR0cmlidXRlcxgHIAMoCzIpLnlvcmtpZS52MS5PcGVyYXRpb24uRWRpdC5BdHRyaWJ1dGVzRW50cnkSLQoNcmVzdG9yZV9zcGFucxgIIAMoCzIWLnlvcmtpZS52MS5SZXN0b3JlU3BhbhIsCgxyZXN0b3JlX21vZGUYCSABKA4yFi55b3JraWUudjEuUmVzdG9yZU1vZGUSMQoRcmV0b21ic3RvbmVfc3BhbnMYCiADKAsyFi55b3JraWUudjEuUmVzdG9yZVNwYW4aUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARrpAwoFU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIkCgRmcm9tGAIgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEiIKAnRvGAMgASgLMhYueW9ya2llLnYxLlRleHROb2RlUG9zEj4KCmF0dHJpYnV0ZXMYBCADKAsyKi55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkF0dHJpYnV0ZXNFbnRyeRIqCgtleGVjdXRlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0ElQKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAYgAygLMjMueW9ya2llLnYxLk9wZXJhdGlvbi5TdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSHAoUYXR0cmlidXRlc190b19yZW1vdmUYByADKAkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARqkAQoISW5jcmVhc2USMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIrCgV2YWx1ZRgCIAEoCzIcLnlvcmtpZS52MS5KU09ORWxlbWVudFNpbXBsZRIqCgtleGVjdXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg0KBWFjdG9yGAQgASgJGpMDCghUcmVlRWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiAKBGZyb20YAiABKAsyEi55b3JraWUudjEuVHJlZVBvcxIeCgJ0bxgDIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zElcKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAQgAygLMjYueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlRWRpdC5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSJgoIY29udGVudHMYBSADKAsyFC55b3JraWUudjEuVHJlZU5vZGVzEhMKC3NwbGl0X2xldmVsGAcgASgFEioKC2V4ZWN1dGVkX2F0GAYgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrtAwoJVHJlZVN0eWxlEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSQgoKYXR0cmlidXRlcxgEIAMoCzIuLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlLkF0dHJpYnV0ZXNFbnRyeRIqCgtleGVjdXRlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhwKFGF0dHJpYnV0ZXNfdG9fcmVtb3ZlGAYgAygJElgKF2NyZWF0ZWRfYXRfbWFwX2J5X2FjdG9yGAcgAygLMjcueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5GjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGlEKGENyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldDoCOAEawAEKCEFycmF5U2V0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAMgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSLFAQoRSlNPTkVsZW1lbnRTaW1wbGUSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiIKBHR5cGUYBCABKA4yFC55b3JraWUudjEuVmFsdWVUeXBlEg0KBXZhbHVlGAUgASgMIp8LCgtKU09ORWxlbWVudBI4Cgtqc29uX29iamVjdBgBIAEoCzIhLnlvcmtpZS52MS5KU09ORWxlbWVudC5KU09OT2JqZWN0SAASNgoKanNvbl9hcnJheRgCIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5KU09OQXJyYXlIABI1CglwcmltaXRpdmUYAyABKAsyIC55b3JraWUudjEuSlNPTkVsZW1lbnQuUHJpbWl0aXZlSAASKwoEdGV4dBgFIAEoCzIbLnlvcmtpZS52MS5KU09ORWxlbWVudC5UZXh0SAASMQoHY291bnRlchgGIAEoCzIeLnlvcmtpZS52MS5KU09ORWxlbWVudC5Db3VudGVySAASKwoEdHJlZRgHIAEoCzIbLnlvcmtpZS52MS5KU09ORWxlbWVudC5UcmVlSAAargEKCkpTT05PYmplY3QSIQoFbm9kZXMYASADKAsyEi55b3JraWUudjEuUkhUTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQarQEKCUpTT05BcnJheRIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SR0FOb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq9AQoJUHJpbWl0aXZlEiIKBHR5cGUYASABKA4yFC55b3JraWUudjEuVmFsdWVUeXBlEg0KBXZhbHVlGAIgASgMEikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBSABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqpAQoEVGV4dBIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UZXh0Tm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQa2AEKB0NvdW50ZXISIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhUKDWhsbF9yZWdpc3RlcnMYByABKAxKBAgGEAcaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCLuAQoHUkdBTm9kZRIgCgRuZXh0GAEgASgLMhIueW9ya2llLnYxLlJHQU5vZGUSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBIyChNwb3NpdGlvbl9jcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSMAoRcG9zaXRpb25fbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIyChNwb3NpdGlvbl9yZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUi1AEKC1Jlc3RvcmVTcGFuEikKCmNyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBINCgVzdGFydBgCIAEoBRILCgNlbmQYAyABKAUSDwoHY29udGVudBgEIAEoCRI6CgphdHRyaWJ1dGVzGAUgAygLMiYueW9ya2llLnYxLlJlc3RvcmVTcGFuLkF0dHJpYnV0ZXNFbnRyeRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgpUaW1lVGlja2V0Eg8KB2xhbXBvcnQYASABKAMSEQoJZGVsaW1pdGVyGAIgASgNEhAKCGFjdG9yX2lkGAMgASgMIi4KDERvY0V2ZW50Qm9keRINCgV0b3BpYxgBIAEoCRIPCgdwYXlsb2FkGAIgASgMImsKCERvY0V2ZW50EiUKBHR5cGUYASABKA4yFy55b3JraWUudjEuRG9jRXZlbnRUeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIlCgRib2R5GAMgASgLMhcueW9ya2llLnYxLkRvY0V2ZW50Qm9keSLWAQoMQ2hhbm5lbEV2ZW50EioKBHR5cGUYASABKA4yHC55b3JraWUudjEuQ2hhbm5lbEV2ZW50LlR5cGUSEQoJcHVibGlzaGVyGAIgASgJEhUKDXNlc3Npb25fY291bnQYAyABKAMSCwoDc2VxGAQgASgDEg0KBXRvcGljGAUgASgJEg8KB3BheWxvYWQYBiABKAwiQwoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEQoNVFlQRV9QUkVTRU5DRRABEhIKDlRZUEVfQlJPQURDQVNUEAIiJgoIRGF0YVNpemUSDAoEZGF0YRgBIAEoBRIMCgRtZXRhGAIgASgFIk0KB0RvY1NpemUSIQoEbGl2ZRgBIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZRIfCgJnYxgCIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZSKRAQoGU2NoZW1hEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoBRIMCgRib2R5GAQgASgJEh4KBXJ1bGVzGAUgAygLMg8ueW9ya2llLnYxLlJ1bGUSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUAoMVHJlZU5vZGVSdWxlEhEKCW5vZGVfdHlwZRgBIAEoCRIPCgdjb250ZW50GAIgASgJEg0KBW1hcmtzGAMgASgJEg0KBWdyb3VwGAQgASgJIk8KBFJ1bGUSDAoEcGF0aBgBIAEoCRIMCgR0eXBlGAIgASgJEisKCnRyZWVfbm9kZXMYAyADKAsyFy55b3JraWUudjEuVHJlZU5vZGVSdWxlIoMBCg9SZXZpc2lvblN1bW1hcnkSCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSEAoIc25hcHNob3QYBCABKAkSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAqYwoLUmVzdG9yZU1vZGUSHAoYUkVTVE9SRV9NT0RFX1VOU1BFQ0lGSUVEEAASGAoUUkVTVE9SRV9NT0RFX1JFU1RPUkUQARIcChhSRVNUT1JFX01PREVfUkVUT01CU1RPTkUQAir8AgoJVmFsdWVUeXBlEhMKD1ZBTFVFX1RZUEVfTlVMTBAAEhYKElZBTFVFX1RZUEVfQk9PTEVBThABEhYKElZBTFVFX1RZUEVfSU5URUdFUhACEhMKD1ZBTFVFX1RZUEVfTE9ORxADEhUKEVZBTFVFX1RZUEVfRE9VQkxFEAQSFQoRVkFMVUVfVFlQRV9TVFJJTkcQBRIUChBWQUxVRV9UWVBFX0JZVEVTEAYSEwoPVkFMVUVfVFlQRV9EQVRFEAcSGgoWVkFMVUVfVFlQRV9KU09OX09CSkVDVBAIEhkKFVZBTFVFX1RZUEVfSlNPTl9BUlJBWRAJEhMKD1ZBTFVFX1RZUEVfVEVYVBAKEhoKFlZBTFVFX1RZUEVfSU5URUdFUl9DTlQQCxIXChNWQUxVRV9UWVBFX0xPTkdfQ05UEAwSEwoPVkFMVUVfVFlQRV9UUkVFEA0SIAocVkFMVUVfVFlQRV9JTlRFR0VSX0RFRFVQX0NOVBAOIgQIDxAPKqYBCgxEb2NFdmVudFR5cGUSIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfQ0hBTkdFRBAAEiMKH0RPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1dBVENIRUQQARIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9VTldBVENIRUQQAhIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9CUk9BRENBU1QQA0JFChFkZXYueW9ya2llLmFwaS52MVABWi5naXRodWIuY29tL3lvcmtpZS10ZWFtL3lvcmtpZS9hcGkveW9ya2llL3YxO3YxYgZwcm90bzM", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
|
|
5796
5796
|
const SnapshotSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 0);
|
|
5797
5797
|
const ChangePackSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 1);
|
|
5798
5798
|
const ChangeSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 2);
|
|
@@ -5837,13 +5837,20 @@
|
|
|
5837
5837
|
const PresenceSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 24);
|
|
5838
5838
|
const CheckpointSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 26);
|
|
5839
5839
|
const TextNodePosSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 27);
|
|
5840
|
-
const
|
|
5840
|
+
const RestoreSpanSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 28);
|
|
5841
|
+
const TimeTicketSchema = /* @__PURE__ */ messageDesc(file_yorkie_v1_resources, 29);
|
|
5841
5842
|
var ChannelEvent_Type = /* @__PURE__ */ ((ChannelEvent_Type2) => {
|
|
5842
5843
|
ChannelEvent_Type2[ChannelEvent_Type2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
5843
5844
|
ChannelEvent_Type2[ChannelEvent_Type2["PRESENCE"] = 1] = "PRESENCE";
|
|
5844
5845
|
ChannelEvent_Type2[ChannelEvent_Type2["BROADCAST"] = 2] = "BROADCAST";
|
|
5845
5846
|
return ChannelEvent_Type2;
|
|
5846
5847
|
})(ChannelEvent_Type || {});
|
|
5848
|
+
var RestoreMode = /* @__PURE__ */ ((RestoreMode2) => {
|
|
5849
|
+
RestoreMode2[RestoreMode2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
5850
|
+
RestoreMode2[RestoreMode2["RESTORE"] = 1] = "RESTORE";
|
|
5851
|
+
RestoreMode2[RestoreMode2["RETOMBSTONE"] = 2] = "RETOMBSTONE";
|
|
5852
|
+
return RestoreMode2;
|
|
5853
|
+
})(RestoreMode || {});
|
|
5847
5854
|
var ValueType = /* @__PURE__ */ ((ValueType2) => {
|
|
5848
5855
|
ValueType2[ValueType2["NULL"] = 0] = "NULL";
|
|
5849
5856
|
ValueType2[ValueType2["BOOLEAN"] = 1] = "BOOLEAN";
|
|
@@ -5869,7 +5876,7 @@
|
|
|
5869
5876
|
DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
|
|
5870
5877
|
return DocEventType2;
|
|
5871
5878
|
})(DocEventType$1 || {});
|
|
5872
|
-
const file_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("
|
|
5879
|
+
const file_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("ChZ5b3JraWUvdjEveW9ya2llLnByb3RvEgl5b3JraWUudjEingEKFUFjdGl2YXRlQ2xpZW50UmVxdWVzdBISCgpjbGllbnRfa2V5GAEgASgJEkAKCG1ldGFkYXRhGAIgAygLMi4ueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChZBY3RpdmF0ZUNsaWVudFJlc3BvbnNlEhEKCWNsaWVudF9pZBgBIAEoCSJBChdEZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLc3luY2hyb25vdXMYAiABKAgiGgoYRGVhY3RpdmF0ZUNsaWVudFJlc3BvbnNlIpgBChVBdHRhY2hEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEioKC2NoYW5nZV9wYWNrGAIgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEgoKc2NoZW1hX2tleRgDIAEoCRISCgpkaXNhYmxlX2djGAQgASgIEhgKEGRpc2FibGVfcHJlc2VuY2UYBSABKAgiuQEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUSGAoQZGlzYWJsZV9wcmVzZW5jZRgFIAEoCCKLAQoVRGV0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIqCgtjaGFuZ2VfcGFjaxgDIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEh4KFnJlbW92ZV9pZl9ub3RfYXR0YWNoZWQYBCABKAgiRAoWRGV0YWNoRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIlMKDFdhdGNoUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSMAoJcmVzb3VyY2VzGAIgAygLMh0ueW9ya2llLnYxLlJlc291cmNlRGVzY3JpcHRvciKEAQoSUmVzb3VyY2VEZXNjcmlwdG9yEjEKCGRvY3VtZW50GAEgASgLMh0ueW9ya2llLnYxLkRvY3VtZW50RGVzY3JpcHRvckgAEi8KB2NoYW5uZWwYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbERlc2NyaXB0b3JIAEIKCghyZXNvdXJjZSIpChJEb2N1bWVudERlc2NyaXB0b3ISEwoLZG9jdW1lbnRfaWQYASABKAkiKAoRQ2hhbm5lbERlc2NyaXB0b3ISEwoLY2hhbm5lbF9rZXkYASABKAkieQoNV2F0Y2hSZXNwb25zZRI4Cg5pbml0aWFsaXphdGlvbhgBIAEoCzIeLnlvcmtpZS52MS5XYXRjaEluaXRpYWxpemF0aW9uSAASJgoFZXZlbnQYAiABKAsyFS55b3JraWUudjEuV2F0Y2hFdmVudEgAQgYKBGJvZHkiRgoTV2F0Y2hJbml0aWFsaXphdGlvbhIvCg5yZXNvdXJjZV9pbml0cxgBIAMoCzIXLnlvcmtpZS52MS5SZXNvdXJjZUluaXQieAoMUmVzb3VyY2VJbml0EjAKDWRvY3VtZW50X2luaXQYASABKAsyFy55b3JraWUudjEuRG9jdW1lbnRJbml0SAASLgoMY2hhbm5lbF9pbml0GAIgASgLMhYueW9ya2llLnYxLkNoYW5uZWxJbml0SABCBgoEaW5pdCI3CgxEb2N1bWVudEluaXQSEwoLZG9jdW1lbnRfaWQYASABKAkSEgoKY2xpZW50X2lkcxgCIAMoCSJGCgtDaGFubmVsSW5pdBITCgtjaGFubmVsX2tleRgBIAEoCRIVCg1zZXNzaW9uX2NvdW50GAIgASgDEgsKA3NlcRgDIAEoAyJ7CgpXYXRjaEV2ZW50Ei0KCWRvY19ldmVudBgBIAEoCzIYLnlvcmtpZS52MS5Eb2NXYXRjaEV2ZW50SAASNQoNY2hhbm5lbF9ldmVudBgCIAEoCzIcLnlvcmtpZS52MS5DaGFubmVsV2F0Y2hFdmVudEgAQgcKBWV2ZW50IkgKDURvY1dhdGNoRXZlbnQSEwoLZG9jdW1lbnRfaWQYASABKAkSIgoFZXZlbnQYAiABKAsyEy55b3JraWUudjEuRG9jRXZlbnQiUAoRQ2hhbm5lbFdhdGNoRXZlbnQSEwoLY2hhbm5lbF9rZXkYASABKAkSJgoFZXZlbnQYAiABKAsyFy55b3JraWUudjEuQ2hhbm5lbEV2ZW50Ij4KFFdhdGNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCSK2AQoVV2F0Y2hEb2N1bWVudFJlc3BvbnNlEkkKDmluaXRpYWxpemF0aW9uGAEgASgLMi8ueW9ya2llLnYxLldhdGNoRG9jdW1lbnRSZXNwb25zZS5Jbml0aWFsaXphdGlvbkgAEiQKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50SAAaJAoOSW5pdGlhbGl6YXRpb24SEgoKY2xpZW50X2lkcxgBIAMoCUIGCgRib2R5Ij0KE1dhdGNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIoMBChRXYXRjaENoYW5uZWxSZXNwb25zZRI5Cgtpbml0aWFsaXplZBgBIAEoCzIiLnlvcmtpZS52MS5XYXRjaENoYW5uZWxJbml0aWFsaXplZEgAEigKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudEgAQgYKBGJvZHkiPQoXV2F0Y2hDaGFubmVsSW5pdGlhbGl6ZWQSFQoNc2Vzc2lvbl9jb3VudBgBIAEoAxILCgNzZXEYAiABKAMiawoVUmVtb3ZlRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIqCgtjaGFuZ2VfcGFjaxgDIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIkQKFlJlbW92ZURvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYASABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayKTAQoWUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIRCglwdXNoX29ubHkYBCABKAgSEgoKZGlzYWJsZV9nYxgFIAEoCCJFChdQdXNoUHVsbENoYW5nZXNSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrImMKFUNyZWF0ZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSDQoFbGFiZWwYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiRgoWQ3JlYXRlUmV2aXNpb25SZXNwb25zZRIsCghyZXZpc2lvbhgBIAEoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiUQoSR2V0UmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRITCgtyZXZpc2lvbl9pZBgDIAEoCSJDChNHZXRSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJ1ChRMaXN0UmV2aXNpb25zUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEQoJcGFnZV9zaXplGAMgASgFEg4KBm9mZnNldBgEIAEoBRISCgppc19mb3J3YXJkGAUgASgIIkYKFUxpc3RSZXZpc2lvbnNSZXNwb25zZRItCglyZXZpc2lvbnMYASADKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5IlUKFlJlc3RvcmVSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAQgASgJIhkKF1Jlc3RvcmVSZXZpc2lvblJlc3BvbnNlIj4KFEF0dGFjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCSJCChVBdHRhY2hDaGFubmVsUmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCRIVCg1zZXNzaW9uX2NvdW50GAIgASgDIlIKFERldGFjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIi4KFURldGFjaENoYW5uZWxSZXNwb25zZRIVCg1zZXNzaW9uX2NvdW50GAEgASgDItoBChVSZWZyZXNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkSEgoKY2xpZW50X2tleRgEIAEoCRJACghtZXRhZGF0YRgFIAMoCzIuLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlcXVlc3QuTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiVgoWUmVmcmVzaENoYW5uZWxSZXNwb25zZRIVCg1zZXNzaW9uX2NvdW50GAEgASgDEhEKCWNsaWVudF9pZBgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIikKElBlZWtDaGFubmVsUmVxdWVzdBITCgtjaGFubmVsX2tleRgBIAEoCSIsChNQZWVrQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMiWgoQQnJvYWRjYXN0UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkSDQoFdG9waWMYAyABKAkSDwoHcGF5bG9hZBgEIAEoDCITChFCcm9hZGNhc3RSZXNwb25zZTKVDAoNWW9ya2llU2VydmljZRJXCg5BY3RpdmF0ZUNsaWVudBIgLnlvcmtpZS52MS5BY3RpdmF0ZUNsaWVudFJlcXVlc3QaIS55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXNwb25zZSIAEl0KEERlYWN0aXZhdGVDbGllbnQSIi55b3JraWUudjEuRGVhY3RpdmF0ZUNsaWVudFJlcXVlc3QaIy55b3JraWUudjEuRGVhY3RpdmF0ZUNsaWVudFJlc3BvbnNlIgASVwoOQXR0YWNoRG9jdW1lbnQSIC55b3JraWUudjEuQXR0YWNoRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLkF0dGFjaERvY3VtZW50UmVzcG9uc2UiABJXCg5EZXRhY2hEb2N1bWVudBIgLnlvcmtpZS52MS5EZXRhY2hEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuRGV0YWNoRG9jdW1lbnRSZXNwb25zZSIAElcKDlJlbW92ZURvY3VtZW50EiAueW9ya2llLnYxLlJlbW92ZURvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5SZW1vdmVEb2N1bWVudFJlc3BvbnNlIgASWgoPUHVzaFB1bGxDaGFuZ2VzEiEueW9ya2llLnYxLlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QaIi55b3JraWUudjEuUHVzaFB1bGxDaGFuZ2VzUmVzcG9uc2UiABI+CgVXYXRjaBIXLnlvcmtpZS52MS5XYXRjaFJlcXVlc3QaGC55b3JraWUudjEuV2F0Y2hSZXNwb25zZSIAMAESVgoNV2F0Y2hEb2N1bWVudBIfLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVxdWVzdBogLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UiADABElMKDFdhdGNoQ2hhbm5lbBIeLnlvcmtpZS52MS5XYXRjaENoYW5uZWxSZXF1ZXN0Gh8ueW9ya2llLnYxLldhdGNoQ2hhbm5lbFJlc3BvbnNlIgAwARJXCg5DcmVhdGVSZXZpc2lvbhIgLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlcXVlc3QaIS55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXNwb25zZSIAEk4KC0dldFJldmlzaW9uEh0ueW9ya2llLnYxLkdldFJldmlzaW9uUmVxdWVzdBoeLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlc3BvbnNlIgASVAoNTGlzdFJldmlzaW9ucxIfLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVxdWVzdBogLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVzcG9uc2UiABJaCg9SZXN0b3JlUmV2aXNpb24SIS55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVxdWVzdBoiLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXNwb25zZSIAElQKDUF0dGFjaENoYW5uZWwSHy55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVAoNRGV0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVzcG9uc2UiABJXCg5SZWZyZXNoQ2hhbm5lbBIgLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlcXVlc3QaIS55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXNwb25zZSIAEk4KC1BlZWtDaGFubmVsEh0ueW9ya2llLnYxLlBlZWtDaGFubmVsUmVxdWVzdBoeLnlvcmtpZS52MS5QZWVrQ2hhbm5lbFJlc3BvbnNlIgASSAoJQnJvYWRjYXN0EhsueW9ya2llLnYxLkJyb2FkY2FzdFJlcXVlc3QaHC55b3JraWUudjEuQnJvYWRjYXN0UmVzcG9uc2UiAEJFChFkZXYueW9ya2llLmFwaS52MVABWi5naXRodWIuY29tL3lvcmtpZS10ZWFtL3lvcmtpZS9hcGkveW9ya2llL3YxO3YxYgZwcm90bzM", [file_yorkie_v1_resources]);
|
|
5873
5880
|
const YorkieService = /* @__PURE__ */ serviceDesc(file_yorkie_v1_yorkie, 0);
|
|
5874
5881
|
const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
|
|
5875
5882
|
const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
|
|
@@ -9688,10 +9695,20 @@
|
|
|
9688
9695
|
head;
|
|
9689
9696
|
treeByIndex;
|
|
9690
9697
|
treeByID;
|
|
9698
|
+
/**
|
|
9699
|
+
* `pendingGCPairs` buffers GC pairs for nodes that were created
|
|
9700
|
+
* already-tombstoned by splitting a removed node. Such pieces inherit
|
|
9701
|
+
* `removedAt` without ever passing through `remove()`, so they would
|
|
9702
|
+
* otherwise never be registered for GC. Callers that split nodes
|
|
9703
|
+
* (`edit`, `CRDTText.setStyle`, `CRDTText.removeStyle`) drain this
|
|
9704
|
+
* buffer into their returned GC pairs.
|
|
9705
|
+
*/
|
|
9706
|
+
pendingGCPairs;
|
|
9691
9707
|
constructor() {
|
|
9692
9708
|
this.head = RGATreeSplitNode.create(InitialRGATreeSplitNodeID);
|
|
9693
9709
|
this.treeByIndex = new SplayTree();
|
|
9694
9710
|
this.treeByID = new LLRBTree(RGATreeSplitNode.createComparator());
|
|
9711
|
+
this.pendingGCPairs = [];
|
|
9695
9712
|
this.treeByIndex.insert(this.head);
|
|
9696
9713
|
this.treeByID.put(this.head.getID(), this.head);
|
|
9697
9714
|
}
|
|
@@ -9724,7 +9741,7 @@
|
|
|
9724
9741
|
);
|
|
9725
9742
|
addDataSizes(diff, diffTo, diffFrom);
|
|
9726
9743
|
const nodesToDelete = this.findBetween(fromRight, toRight);
|
|
9727
|
-
const [changes, removedNodes] = this.deleteNodes(
|
|
9744
|
+
const [changes, removedNodes, alreadyRemovedIDs] = this.deleteNodes(
|
|
9728
9745
|
nodesToDelete,
|
|
9729
9746
|
editedAt,
|
|
9730
9747
|
versionVector
|
|
@@ -9755,11 +9772,285 @@
|
|
|
9755
9772
|
}
|
|
9756
9773
|
const pairs = [];
|
|
9757
9774
|
const removedValues = [];
|
|
9758
|
-
|
|
9759
|
-
|
|
9775
|
+
const removedSpans = [];
|
|
9776
|
+
for (const [id, removedNode] of removedNodes) {
|
|
9777
|
+
if (!alreadyRemovedIDs.has(id)) {
|
|
9778
|
+
pairs.push({ parent: this, child: removedNode });
|
|
9779
|
+
}
|
|
9760
9780
|
removedValues.push(removedNode.getValue());
|
|
9781
|
+
removedSpans.push({
|
|
9782
|
+
createdAt: removedNode.getCreatedAt(),
|
|
9783
|
+
start: removedNode.getID().getOffset(),
|
|
9784
|
+
end: removedNode.getID().getOffset() + removedNode.getContentLength(),
|
|
9785
|
+
value: removedNode.getValue().substring(0)
|
|
9786
|
+
});
|
|
9787
|
+
}
|
|
9788
|
+
pairs.push(...this.drainPendingGCPairs());
|
|
9789
|
+
return [caretPos, pairs, diff, changes, removedValues, removedSpans];
|
|
9790
|
+
}
|
|
9791
|
+
/**
|
|
9792
|
+
* `restore` re-establishes the characters described by `spans` under
|
|
9793
|
+
* their ORIGINAL identities. For each span, per overlapping region:
|
|
9794
|
+
* - live piece exists → skip (idempotent; another undo restored it)
|
|
9795
|
+
* - tombstoned piece exists → clear removedAt (un-tombstone)
|
|
9796
|
+
* - no piece exists (GC'd) → recreate a node with the original ID
|
|
9797
|
+
*
|
|
9798
|
+
* Returns [untombstonedNodes, recreatedNodes, changes, liveDiff,
|
|
9799
|
+
* pendingGCPairs]. `changes` describes the revived content as insertions
|
|
9800
|
+
* (ascending index) so editor bindings and remote sync can be driven
|
|
9801
|
+
* the same way as a normal edit.
|
|
9802
|
+
*
|
|
9803
|
+
* The caller must, in order: (1) register every pair in `pendingGCPairs`
|
|
9804
|
+
* — these are fragments `splitNode` buffered while isolating a target
|
|
9805
|
+
* range out of a larger tombstoned piece (see `drainPendingGCPairs`);
|
|
9806
|
+
* (2) unregister GC pairs for `untombstonedNodes`. Registering first is
|
|
9807
|
+
* required for `untombstonedNodes` entries whose node was itself one of
|
|
9808
|
+
* those split-born fragments (a target isolated from the interior of a
|
|
9809
|
+
* tombstone) — such a node was never registered under its own id, so
|
|
9810
|
+
* step (1) creates the entry that step (2) then correctly walks from gc
|
|
9811
|
+
* back to live; entries that remain tombstoned (siblings of the
|
|
9812
|
+
* restored target) simply stay registered. Finally, `root.acc(liveDiff)`
|
|
9813
|
+
* accounts the size of any nodes recreated from scratch (the GC'd-away
|
|
9814
|
+
* case), which `splitNode`'s buffering does not cover.
|
|
9815
|
+
*/
|
|
9816
|
+
restore(spans, executedAt, fallbackAnchor) {
|
|
9817
|
+
const untombstoned = [];
|
|
9818
|
+
const recreated = [];
|
|
9819
|
+
const liveDiff = { data: 0, meta: 0 };
|
|
9820
|
+
for (const span of spans) {
|
|
9821
|
+
const pieces = this.findPiecesOverlapping(
|
|
9822
|
+
span.createdAt,
|
|
9823
|
+
span.start,
|
|
9824
|
+
span.end
|
|
9825
|
+
);
|
|
9826
|
+
let cursor = span.start;
|
|
9827
|
+
let pieceIdx = 0;
|
|
9828
|
+
while (cursor < span.end) {
|
|
9829
|
+
const piece = pieces[pieceIdx];
|
|
9830
|
+
const pieceStart = piece ? piece.getID().getOffset() : Infinity;
|
|
9831
|
+
const pieceEnd = piece ? pieceStart + piece.getContentLength() : Infinity;
|
|
9832
|
+
if (piece && pieceStart <= cursor) {
|
|
9833
|
+
const overlapEnd = Math.min(pieceEnd, span.end);
|
|
9834
|
+
if (piece.isRemoved()) {
|
|
9835
|
+
const [target] = this.isolateRange(piece, cursor, overlapEnd);
|
|
9836
|
+
target.setRemovedAt(void 0);
|
|
9837
|
+
this.treeByIndex.splayNode(target);
|
|
9838
|
+
untombstoned.push(target);
|
|
9839
|
+
}
|
|
9840
|
+
cursor = overlapEnd;
|
|
9841
|
+
if (overlapEnd >= pieceEnd) {
|
|
9842
|
+
pieceIdx++;
|
|
9843
|
+
}
|
|
9844
|
+
} else {
|
|
9845
|
+
const gapEnd = Math.min(pieceStart, span.end);
|
|
9846
|
+
const value = span.value.substring(
|
|
9847
|
+
cursor - span.start,
|
|
9848
|
+
gapEnd - span.start
|
|
9849
|
+
);
|
|
9850
|
+
const newNode = RGATreeSplitNode.create(
|
|
9851
|
+
RGATreeSplitNodeID.of(span.createdAt, cursor),
|
|
9852
|
+
value
|
|
9853
|
+
);
|
|
9854
|
+
addDataSizes(liveDiff, newNode.getDataSize());
|
|
9855
|
+
const prev = this.findRestoreAnchor(
|
|
9856
|
+
span.createdAt,
|
|
9857
|
+
cursor,
|
|
9858
|
+
gapEnd,
|
|
9859
|
+
executedAt,
|
|
9860
|
+
fallbackAnchor
|
|
9861
|
+
);
|
|
9862
|
+
this.insertAfter(prev, newNode);
|
|
9863
|
+
recreated.push(newNode);
|
|
9864
|
+
cursor = gapEnd;
|
|
9865
|
+
}
|
|
9866
|
+
}
|
|
9867
|
+
}
|
|
9868
|
+
const pendingGCPairs = this.drainPendingGCPairs();
|
|
9869
|
+
const changes = [];
|
|
9870
|
+
for (const node of [...untombstoned, ...recreated]) {
|
|
9871
|
+
const [from] = this.findIndexesFromRange(node.createPosRange());
|
|
9872
|
+
changes.push({
|
|
9873
|
+
actor: executedAt.getActorID(),
|
|
9874
|
+
from,
|
|
9875
|
+
to: from,
|
|
9876
|
+
value: node.getValue()
|
|
9877
|
+
});
|
|
9878
|
+
}
|
|
9879
|
+
changes.sort((a, b) => a.from - b.from);
|
|
9880
|
+
return [untombstoned, recreated, changes, liveDiff, pendingGCPairs];
|
|
9881
|
+
}
|
|
9882
|
+
/**
|
|
9883
|
+
* `retombstone` re-deletes the characters described by `spans` (redo of
|
|
9884
|
+
* an identity-preserving undo). Only live pieces are affected; already
|
|
9885
|
+
* removed or purged regions are skipped (idempotent).
|
|
9886
|
+
*
|
|
9887
|
+
* Returns [pairs, changes, diff]: GCPairs for the newly tombstoned
|
|
9888
|
+
* nodes, the removed regions as deletions so editor bindings and remote
|
|
9889
|
+
* sync can be driven the same way as a normal edit, and the
|
|
9890
|
+
* metadata-size overhead from splitting the (live) pieces to isolate the
|
|
9891
|
+
* target range. The caller must `root.acc(diff)` before registering
|
|
9892
|
+
* `pairs`, mirroring how a normal edit's boundary splits are accounted
|
|
9893
|
+
* before its resulting tombstones are registered. Indices are captured
|
|
9894
|
+
* before each removal, so applying them in emission order stays
|
|
9895
|
+
* consistent.
|
|
9896
|
+
*/
|
|
9897
|
+
retombstone(spans, executedAt) {
|
|
9898
|
+
const pairs = [];
|
|
9899
|
+
const changes = [];
|
|
9900
|
+
const diff = { data: 0, meta: 0 };
|
|
9901
|
+
for (const span of spans) {
|
|
9902
|
+
const pieces = this.findPiecesOverlapping(
|
|
9903
|
+
span.createdAt,
|
|
9904
|
+
span.start,
|
|
9905
|
+
span.end
|
|
9906
|
+
);
|
|
9907
|
+
for (const piece of pieces) {
|
|
9908
|
+
if (piece.isRemoved()) {
|
|
9909
|
+
continue;
|
|
9910
|
+
}
|
|
9911
|
+
const pieceStart = piece.getID().getOffset();
|
|
9912
|
+
const pieceEnd = pieceStart + piece.getContentLength();
|
|
9913
|
+
const [target, splitDiff] = this.isolateRange(
|
|
9914
|
+
piece,
|
|
9915
|
+
Math.max(pieceStart, span.start),
|
|
9916
|
+
Math.min(pieceEnd, span.end)
|
|
9917
|
+
);
|
|
9918
|
+
addDataSizes(diff, splitDiff);
|
|
9919
|
+
const [from, to] = this.findIndexesFromRange(target.createPosRange());
|
|
9920
|
+
target.remove(executedAt);
|
|
9921
|
+
this.treeByIndex.splayNode(target);
|
|
9922
|
+
pairs.push({ parent: this, child: target });
|
|
9923
|
+
if (from < to) {
|
|
9924
|
+
changes.push({ actor: executedAt.getActorID(), from, to });
|
|
9925
|
+
}
|
|
9926
|
+
}
|
|
9927
|
+
}
|
|
9928
|
+
pairs.push(...this.drainPendingGCPairs());
|
|
9929
|
+
return [pairs, changes, diff];
|
|
9930
|
+
}
|
|
9931
|
+
/**
|
|
9932
|
+
* `findPiecesOverlapping` collects existing nodes (live or tombstoned)
|
|
9933
|
+
* belonging to the insertion `createdAt` that overlap the absolute-offset
|
|
9934
|
+
* interval [start, end), in ascending offset order. Works by descending
|
|
9935
|
+
* floorEntry probes over treeByID.
|
|
9936
|
+
*/
|
|
9937
|
+
findPiecesOverlapping(createdAt, start, end) {
|
|
9938
|
+
const pieces = [];
|
|
9939
|
+
let probe = end - 1;
|
|
9940
|
+
while (probe >= 0) {
|
|
9941
|
+
const key = RGATreeSplitNodeID.of(createdAt, probe);
|
|
9942
|
+
const entry = this.treeByID.floorEntry(key);
|
|
9943
|
+
if (!entry || !entry.key.hasSameCreatedAt(key)) {
|
|
9944
|
+
break;
|
|
9945
|
+
}
|
|
9946
|
+
const node = entry.value;
|
|
9947
|
+
const nodeStart = node.getID().getOffset();
|
|
9948
|
+
const nodeEnd = nodeStart + node.getContentLength();
|
|
9949
|
+
if (nodeEnd <= start) {
|
|
9950
|
+
break;
|
|
9951
|
+
}
|
|
9952
|
+
if (nodeStart < end && nodeEnd > start) {
|
|
9953
|
+
pieces.push(node);
|
|
9954
|
+
}
|
|
9955
|
+
if (nodeStart <= start) {
|
|
9956
|
+
break;
|
|
9957
|
+
}
|
|
9958
|
+
probe = nodeStart - 1;
|
|
9959
|
+
}
|
|
9960
|
+
return pieces.reverse();
|
|
9961
|
+
}
|
|
9962
|
+
/**
|
|
9963
|
+
* `findPieceCovering` returns the node of insertion `createdAt` whose
|
|
9964
|
+
* absolute-offset range covers `offset`, if present.
|
|
9965
|
+
*/
|
|
9966
|
+
findPieceCovering(createdAt, offset) {
|
|
9967
|
+
const key = RGATreeSplitNodeID.of(createdAt, offset);
|
|
9968
|
+
const entry = this.treeByID.floorEntry(key);
|
|
9969
|
+
if (!entry || !entry.key.hasSameCreatedAt(key)) {
|
|
9970
|
+
return;
|
|
9971
|
+
}
|
|
9972
|
+
const node = entry.value;
|
|
9973
|
+
const nodeStart = node.getID().getOffset();
|
|
9974
|
+
const nodeEnd = nodeStart + node.getContentLength();
|
|
9975
|
+
if (nodeStart <= offset && offset < nodeEnd) {
|
|
9976
|
+
return node;
|
|
9977
|
+
}
|
|
9978
|
+
return;
|
|
9979
|
+
}
|
|
9980
|
+
/**
|
|
9981
|
+
* `findRestoreAnchor` returns the physical node to insert a recreated
|
|
9982
|
+
* fragment [gapStart, gapEnd) of insertion `createdAt` AFTER.
|
|
9983
|
+
*
|
|
9984
|
+
* Resolution ladder (all rules key on op-carried data + ID lookups only):
|
|
9985
|
+
* (a) a piece covering gapEnd exists → directly before it
|
|
9986
|
+
* (originally-adjacent successor; exact original slot)
|
|
9987
|
+
* (b) nearest surviving piece of the same insertion left of gapStart
|
|
9988
|
+
* → directly after it
|
|
9989
|
+
* (c) rightmost surviving piece of the same insertion (must be right
|
|
9990
|
+
* of the gap) → directly before it
|
|
9991
|
+
* (d) the operation's fallback anchor (refined) — same exposure as the
|
|
9992
|
+
* current implementation's fromPos; see design-doc caveat
|
|
9993
|
+
* (e) head (deterministic last resort)
|
|
9994
|
+
*/
|
|
9995
|
+
findRestoreAnchor(createdAt, gapStart, gapEnd, executedAt, fallbackAnchor) {
|
|
9996
|
+
const succ = this.findPieceCovering(createdAt, gapEnd);
|
|
9997
|
+
if (succ) {
|
|
9998
|
+
return succ.getPrev();
|
|
9999
|
+
}
|
|
10000
|
+
if (gapStart > 0) {
|
|
10001
|
+
const key = RGATreeSplitNodeID.of(createdAt, gapStart - 1);
|
|
10002
|
+
const entry = this.treeByID.floorEntry(key);
|
|
10003
|
+
if (entry && entry.key.hasSameCreatedAt(key)) {
|
|
10004
|
+
return entry.value;
|
|
10005
|
+
}
|
|
10006
|
+
}
|
|
10007
|
+
const rightmostKey = RGATreeSplitNodeID.of(
|
|
10008
|
+
createdAt,
|
|
10009
|
+
Number.MAX_SAFE_INTEGER
|
|
10010
|
+
);
|
|
10011
|
+
const rightmost = this.treeByID.floorEntry(rightmostKey);
|
|
10012
|
+
if (rightmost && rightmost.key.hasSameCreatedAt(rightmostKey) && rightmost.value.getID().getOffset() >= gapEnd) {
|
|
10013
|
+
return rightmost.value.getPrev();
|
|
10014
|
+
}
|
|
10015
|
+
if (fallbackAnchor) {
|
|
10016
|
+
try {
|
|
10017
|
+
const refined = this.refinePos(fallbackAnchor);
|
|
10018
|
+
const [left] = this.findNodeWithSplit(refined, executedAt);
|
|
10019
|
+
return left;
|
|
10020
|
+
} catch {
|
|
10021
|
+
}
|
|
9761
10022
|
}
|
|
9762
|
-
return
|
|
10023
|
+
return this.head;
|
|
10024
|
+
}
|
|
10025
|
+
/**
|
|
10026
|
+
* `isolateRange` splits `piece` so that a node exactly covering the
|
|
10027
|
+
* absolute-offset interval [from, to) exists, and returns it along with
|
|
10028
|
+
* the net metadata-size overhead the split(s) introduced.
|
|
10029
|
+
*
|
|
10030
|
+
* When `piece` is live, this overhead is a normal live-bucket cost (same
|
|
10031
|
+
* as any other boundary split) and the caller should `root.acc` it.
|
|
10032
|
+
* When `piece` is tombstoned, `splitNode` itself buffers the overhead of
|
|
10033
|
+
* any born-removed fragment via `pendingGCPairs` (see `drainPendingGCPairs`),
|
|
10034
|
+
* so the returned diff is zero in that case — the caller must still
|
|
10035
|
+
* drain and register those pairs.
|
|
10036
|
+
*
|
|
10037
|
+
* Requires: pieceStart <= from < to <= pieceEnd.
|
|
10038
|
+
*/
|
|
10039
|
+
isolateRange(piece, from, to) {
|
|
10040
|
+
const diff = { data: 0, meta: 0 };
|
|
10041
|
+
let node = piece;
|
|
10042
|
+
const nodeStart = node.getID().getOffset();
|
|
10043
|
+
if (from > nodeStart) {
|
|
10044
|
+
const [right, splitDiff] = this.splitNode(node, from - nodeStart);
|
|
10045
|
+
addDataSizes(diff, splitDiff);
|
|
10046
|
+
node = right;
|
|
10047
|
+
}
|
|
10048
|
+
const newStart = node.getID().getOffset();
|
|
10049
|
+
if (to < newStart + node.getContentLength()) {
|
|
10050
|
+
const [, splitDiff] = this.splitNode(node, to - newStart);
|
|
10051
|
+
addDataSizes(diff, splitDiff);
|
|
10052
|
+
}
|
|
10053
|
+
return [node, diff];
|
|
9763
10054
|
}
|
|
9764
10055
|
/**
|
|
9765
10056
|
* `indexToPos` finds RGATreeSplitPos of given offset.
|
|
@@ -10029,11 +10320,28 @@
|
|
|
10029
10320
|
splitNode.setInsPrev(node);
|
|
10030
10321
|
addDataSizes(diff, node.getDataSize(), splitNode.getDataSize());
|
|
10031
10322
|
subDataSize(diff, prvSize);
|
|
10323
|
+
if (splitNode.isRemoved()) {
|
|
10324
|
+
this.pendingGCPairs.push({
|
|
10325
|
+
parent: this,
|
|
10326
|
+
child: splitNode,
|
|
10327
|
+
gcOnlySize: diff
|
|
10328
|
+
});
|
|
10329
|
+
return [splitNode, { data: 0, meta: 0 }];
|
|
10330
|
+
}
|
|
10032
10331
|
return [splitNode, diff];
|
|
10033
10332
|
}
|
|
10333
|
+
/**
|
|
10334
|
+
* `drainPendingGCPairs` returns the GC pairs buffered for born-tombstoned
|
|
10335
|
+
* split pieces and clears the buffer.
|
|
10336
|
+
*/
|
|
10337
|
+
drainPendingGCPairs() {
|
|
10338
|
+
const pairs = this.pendingGCPairs;
|
|
10339
|
+
this.pendingGCPairs = [];
|
|
10340
|
+
return pairs;
|
|
10341
|
+
}
|
|
10034
10342
|
deleteNodes(candidates, editedAt, vector) {
|
|
10035
10343
|
if (!candidates.length) {
|
|
10036
|
-
return [[], /* @__PURE__ */ new Map()];
|
|
10344
|
+
return [[], /* @__PURE__ */ new Map(), /* @__PURE__ */ new Set()];
|
|
10037
10345
|
}
|
|
10038
10346
|
const isLocal = vector === void 0 || vector.size() === 0;
|
|
10039
10347
|
const nodesToRemove = [];
|
|
@@ -10068,12 +10376,17 @@
|
|
|
10068
10376
|
nodesToKeep.push(rightEdge);
|
|
10069
10377
|
const changes = this.makeChanges(nodesToKeep, editedAt);
|
|
10070
10378
|
const removedNodes = /* @__PURE__ */ new Map();
|
|
10379
|
+
const alreadyRemovedIDs = /* @__PURE__ */ new Set();
|
|
10071
10380
|
for (const node of nodesToRemove) {
|
|
10072
|
-
|
|
10381
|
+
const id = node.getID().toIDString();
|
|
10382
|
+
if (node.isRemoved()) {
|
|
10383
|
+
alreadyRemovedIDs.add(id);
|
|
10384
|
+
}
|
|
10385
|
+
removedNodes.set(id, node);
|
|
10073
10386
|
node.remove(editedAt);
|
|
10074
10387
|
}
|
|
10075
10388
|
this.deleteIndexNodes(nodesToKeep);
|
|
10076
|
-
return [changes, removedNodes];
|
|
10389
|
+
return [changes, removedNodes, alreadyRemovedIDs];
|
|
10077
10390
|
}
|
|
10078
10391
|
/**
|
|
10079
10392
|
* `findEdgesOfCandidates` finds the edges outside `candidates`,
|
|
@@ -10545,7 +10858,7 @@
|
|
|
10545
10858
|
crdtTextValue.setAttr(k, v, editedAt);
|
|
10546
10859
|
}
|
|
10547
10860
|
}
|
|
10548
|
-
const [caretPos, pairs, diff, valueChanges, removedValues] = this.rgaTreeSplit.edit(range, editedAt, crdtTextValue, versionVector);
|
|
10861
|
+
const [caretPos, pairs, diff, valueChanges, removedValues, removedSpans] = this.rgaTreeSplit.edit(range, editedAt, crdtTextValue, versionVector);
|
|
10549
10862
|
const changes = valueChanges.map((change) => ({
|
|
10550
10863
|
...change,
|
|
10551
10864
|
value: change.value ? {
|
|
@@ -10558,7 +10871,56 @@
|
|
|
10558
10871
|
type: "content"
|
|
10559
10872
|
/* Content */
|
|
10560
10873
|
}));
|
|
10561
|
-
return [
|
|
10874
|
+
return [
|
|
10875
|
+
changes,
|
|
10876
|
+
pairs,
|
|
10877
|
+
diff,
|
|
10878
|
+
[caretPos, caretPos],
|
|
10879
|
+
removedValues,
|
|
10880
|
+
removedSpans
|
|
10881
|
+
];
|
|
10882
|
+
}
|
|
10883
|
+
/**
|
|
10884
|
+
* `restore` re-establishes removed characters under their original
|
|
10885
|
+
* identities (identity-preserving undo of a deletion).
|
|
10886
|
+
*/
|
|
10887
|
+
restore(spans, executedAt, fallbackAnchor) {
|
|
10888
|
+
const [untombstoned, recreated, valueChanges, liveDiff, pendingGCPairs] = this.rgaTreeSplit.restore(spans, executedAt, fallbackAnchor);
|
|
10889
|
+
return [
|
|
10890
|
+
untombstoned,
|
|
10891
|
+
recreated,
|
|
10892
|
+
this.toTextChanges(valueChanges),
|
|
10893
|
+
liveDiff,
|
|
10894
|
+
pendingGCPairs
|
|
10895
|
+
];
|
|
10896
|
+
}
|
|
10897
|
+
/**
|
|
10898
|
+
* `retombstone` re-deletes previously restored characters (redo).
|
|
10899
|
+
*/
|
|
10900
|
+
retombstone(spans, executedAt) {
|
|
10901
|
+
const [pairs, valueChanges, diff] = this.rgaTreeSplit.retombstone(
|
|
10902
|
+
spans,
|
|
10903
|
+
executedAt
|
|
10904
|
+
);
|
|
10905
|
+
return [pairs, this.toTextChanges(valueChanges), diff];
|
|
10906
|
+
}
|
|
10907
|
+
/**
|
|
10908
|
+
* `toTextChanges` wraps raw RGATreeSplit value changes into `TextChange`s,
|
|
10909
|
+
* mirroring the mapping used by `edit`.
|
|
10910
|
+
*/
|
|
10911
|
+
toTextChanges(valueChanges) {
|
|
10912
|
+
return valueChanges.map((change) => ({
|
|
10913
|
+
...change,
|
|
10914
|
+
value: change.value ? {
|
|
10915
|
+
attributes: parseObjectValues(change.value.getAttributes()),
|
|
10916
|
+
content: change.value.getContent()
|
|
10917
|
+
} : {
|
|
10918
|
+
attributes: void 0,
|
|
10919
|
+
content: ""
|
|
10920
|
+
},
|
|
10921
|
+
type: "content"
|
|
10922
|
+
/* Content */
|
|
10923
|
+
}));
|
|
10562
10924
|
}
|
|
10563
10925
|
/**
|
|
10564
10926
|
* `setStyle` applies the style of the given range.
|
|
@@ -10635,6 +10997,7 @@
|
|
|
10635
10997
|
}
|
|
10636
10998
|
}
|
|
10637
10999
|
}
|
|
11000
|
+
pairs.push(...this.rgaTreeSplit.drainPendingGCPairs());
|
|
10638
11001
|
return [pairs, diff, changes, prevAttributes, attributesToRemove];
|
|
10639
11002
|
}
|
|
10640
11003
|
/**
|
|
@@ -10705,6 +11068,7 @@
|
|
|
10705
11068
|
}
|
|
10706
11069
|
}
|
|
10707
11070
|
}
|
|
11071
|
+
pairs.push(...this.rgaTreeSplit.drainPendingGCPairs());
|
|
10708
11072
|
return [pairs, diff, changes, prevAttributes];
|
|
10709
11073
|
}
|
|
10710
11074
|
/**
|
|
@@ -10859,10 +11223,16 @@
|
|
|
10859
11223
|
const pairs = [];
|
|
10860
11224
|
for (const node of this.rgaTreeSplit) {
|
|
10861
11225
|
if (node.getRemovedAt()) {
|
|
10862
|
-
pairs.push({
|
|
11226
|
+
pairs.push({
|
|
11227
|
+
parent: this.rgaTreeSplit,
|
|
11228
|
+
child: node,
|
|
11229
|
+
gcOnlySize: node.getDataSize()
|
|
11230
|
+
});
|
|
10863
11231
|
}
|
|
10864
11232
|
for (const p of node.getValue().getGCPairs()) {
|
|
10865
|
-
pairs.push(
|
|
11233
|
+
pairs.push(
|
|
11234
|
+
node.getRemovedAt() ? { ...p, gcOnlySize: p.child.getDataSize() } : p
|
|
11235
|
+
);
|
|
10866
11236
|
}
|
|
10867
11237
|
}
|
|
10868
11238
|
return pairs;
|
|
@@ -10874,18 +11244,33 @@
|
|
|
10874
11244
|
content;
|
|
10875
11245
|
attributes;
|
|
10876
11246
|
isUndoOp;
|
|
10877
|
-
|
|
11247
|
+
restoreSpans;
|
|
11248
|
+
restoreMode;
|
|
11249
|
+
// `retombstoneSpans` is the companion span set for an identity-preserving
|
|
11250
|
+
// reverse op. `restoreSpans` describes content the reversed edit removed;
|
|
11251
|
+
// `retombstoneSpans` describes content the reversed edit inserted (non-empty
|
|
11252
|
+
// only for the reverse of a replace). `restoreMode` picks the direction:
|
|
11253
|
+
// 'restore' revives restoreSpans and re-removes retombstoneSpans; a
|
|
11254
|
+
// 'retombstone' op (the redo) does the opposite. Reversing an edit that both
|
|
11255
|
+
// inserts and deletes as two identity operations — rather than
|
|
11256
|
+
// copy-reinserting the deleted text as a fresh node — keeps a later revived
|
|
11257
|
+
// neighbour in its original relative order.
|
|
11258
|
+
retombstoneSpans;
|
|
11259
|
+
constructor(parentCreatedAt, fromPos, toPos, content, attributes, executedAt, isUndoOp, restoreSpans, restoreMode, retombstoneSpans) {
|
|
10878
11260
|
super(parentCreatedAt, executedAt);
|
|
10879
11261
|
this.fromPos = fromPos;
|
|
10880
11262
|
this.toPos = toPos;
|
|
10881
11263
|
this.content = content;
|
|
10882
11264
|
this.attributes = attributes;
|
|
10883
11265
|
this.isUndoOp = isUndoOp;
|
|
11266
|
+
this.restoreSpans = restoreSpans;
|
|
11267
|
+
this.restoreMode = restoreMode;
|
|
11268
|
+
this.retombstoneSpans = retombstoneSpans;
|
|
10884
11269
|
}
|
|
10885
11270
|
/**
|
|
10886
11271
|
* `create` creates a new instance of EditOperation.
|
|
10887
11272
|
*/
|
|
10888
|
-
static create(parentCreatedAt, fromPos, toPos, content, attributes, executedAt, isUndoOp) {
|
|
11273
|
+
static create(parentCreatedAt, fromPos, toPos, content, attributes, executedAt, isUndoOp, restoreSpans, restoreMode, retombstoneSpans) {
|
|
10889
11274
|
return new EditOperation(
|
|
10890
11275
|
parentCreatedAt,
|
|
10891
11276
|
fromPos,
|
|
@@ -10893,7 +11278,10 @@
|
|
|
10893
11278
|
content,
|
|
10894
11279
|
attributes,
|
|
10895
11280
|
executedAt,
|
|
10896
|
-
isUndoOp
|
|
11281
|
+
isUndoOp,
|
|
11282
|
+
restoreSpans,
|
|
11283
|
+
restoreMode,
|
|
11284
|
+
retombstoneSpans
|
|
10897
11285
|
);
|
|
10898
11286
|
}
|
|
10899
11287
|
/**
|
|
@@ -10914,11 +11302,71 @@
|
|
|
10914
11302
|
);
|
|
10915
11303
|
}
|
|
10916
11304
|
const text = parentObject;
|
|
11305
|
+
if (this.restoreSpans || this.retombstoneSpans) {
|
|
11306
|
+
const isRetombstone = this.restoreMode === "retombstone";
|
|
11307
|
+
const toRestore = (isRetombstone ? this.retombstoneSpans : this.restoreSpans) ?? [];
|
|
11308
|
+
const toRetombstone = (isRetombstone ? this.restoreSpans : this.retombstoneSpans) ?? [];
|
|
11309
|
+
const opInfos = [];
|
|
11310
|
+
const totalDiff = { data: 0, meta: 0 };
|
|
11311
|
+
const toOpInfo = (c) => ({
|
|
11312
|
+
type: "edit",
|
|
11313
|
+
from: c.from,
|
|
11314
|
+
to: c.to,
|
|
11315
|
+
value: c.value,
|
|
11316
|
+
path: root.createPath(this.getParentCreatedAt())
|
|
11317
|
+
});
|
|
11318
|
+
if (toRetombstone.length) {
|
|
11319
|
+
const [pairs2, changes2, diff2] = text.retombstone(
|
|
11320
|
+
toRetombstone,
|
|
11321
|
+
this.getExecutedAt()
|
|
11322
|
+
);
|
|
11323
|
+
addDataSizes(totalDiff, diff2);
|
|
11324
|
+
for (const pair of pairs2) {
|
|
11325
|
+
root.registerGCPair(pair);
|
|
11326
|
+
}
|
|
11327
|
+
for (const c of changes2) {
|
|
11328
|
+
opInfos.push(toOpInfo(c));
|
|
11329
|
+
}
|
|
11330
|
+
}
|
|
11331
|
+
if (toRestore.length) {
|
|
11332
|
+
const [untombstoned, , changes2, liveDiff, pendingGCPairs] = text.restore(toRestore, this.getExecutedAt(), this.fromPos);
|
|
11333
|
+
for (const pair of pendingGCPairs) {
|
|
11334
|
+
root.registerGCPair(pair);
|
|
11335
|
+
}
|
|
11336
|
+
for (const node of untombstoned) {
|
|
11337
|
+
root.unregisterGCPair({
|
|
11338
|
+
parent: text.getRGATreeSplit(),
|
|
11339
|
+
child: node
|
|
11340
|
+
});
|
|
11341
|
+
}
|
|
11342
|
+
addDataSizes(totalDiff, liveDiff);
|
|
11343
|
+
for (const c of changes2) {
|
|
11344
|
+
opInfos.push(toOpInfo(c));
|
|
11345
|
+
}
|
|
11346
|
+
}
|
|
11347
|
+
root.acc(totalDiff);
|
|
11348
|
+
return {
|
|
11349
|
+
opInfos,
|
|
11350
|
+
// Reverse keeps the same span sets and flips the direction.
|
|
11351
|
+
reverseOp: EditOperation.create(
|
|
11352
|
+
this.getParentCreatedAt(),
|
|
11353
|
+
this.fromPos,
|
|
11354
|
+
this.toPos,
|
|
11355
|
+
"",
|
|
11356
|
+
/* @__PURE__ */ new Map(),
|
|
11357
|
+
void 0,
|
|
11358
|
+
true,
|
|
11359
|
+
this.restoreSpans,
|
|
11360
|
+
isRetombstone ? "restore" : "retombstone",
|
|
11361
|
+
this.retombstoneSpans
|
|
11362
|
+
)
|
|
11363
|
+
};
|
|
11364
|
+
}
|
|
10917
11365
|
if (this.isUndoOp) {
|
|
10918
11366
|
this.fromPos = text.refinePos(this.fromPos);
|
|
10919
11367
|
this.toPos = text.refinePos(this.toPos);
|
|
10920
11368
|
}
|
|
10921
|
-
const [changes, pairs, diff, , removedValues] = text.edit(
|
|
11369
|
+
const [changes, pairs, diff, , removedValues, removedSpans] = text.edit(
|
|
10922
11370
|
[this.fromPos, this.toPos],
|
|
10923
11371
|
this.content,
|
|
10924
11372
|
this.getExecutedAt(),
|
|
@@ -10927,7 +11375,8 @@
|
|
|
10927
11375
|
);
|
|
10928
11376
|
const reverseOp = this.toReverseOperation(
|
|
10929
11377
|
removedValues,
|
|
10930
|
-
text.normalizePos(this.fromPos)
|
|
11378
|
+
text.normalizePos(this.fromPos),
|
|
11379
|
+
removedSpans
|
|
10931
11380
|
);
|
|
10932
11381
|
root.acc(diff);
|
|
10933
11382
|
for (const pair of pairs) {
|
|
@@ -10946,7 +11395,33 @@
|
|
|
10946
11395
|
reverseOp
|
|
10947
11396
|
};
|
|
10948
11397
|
}
|
|
10949
|
-
toReverseOperation(removedValues, fromPos) {
|
|
11398
|
+
toReverseOperation(removedValues, fromPos, removedSpans) {
|
|
11399
|
+
if (removedSpans.length || this.content?.length) {
|
|
11400
|
+
let insertedSpans;
|
|
11401
|
+
if (this.content?.length) {
|
|
11402
|
+
const value = CRDTTextValue.create(this.content);
|
|
11403
|
+
insertedSpans = [
|
|
11404
|
+
{
|
|
11405
|
+
createdAt: this.getExecutedAt(),
|
|
11406
|
+
start: 0,
|
|
11407
|
+
end: value.length,
|
|
11408
|
+
value
|
|
11409
|
+
}
|
|
11410
|
+
];
|
|
11411
|
+
}
|
|
11412
|
+
return EditOperation.create(
|
|
11413
|
+
this.getParentCreatedAt(),
|
|
11414
|
+
fromPos,
|
|
11415
|
+
fromPos,
|
|
11416
|
+
"",
|
|
11417
|
+
/* @__PURE__ */ new Map(),
|
|
11418
|
+
void 0,
|
|
11419
|
+
true,
|
|
11420
|
+
removedSpans.length ? removedSpans : void 0,
|
|
11421
|
+
"restore",
|
|
11422
|
+
insertedSpans
|
|
11423
|
+
);
|
|
11424
|
+
}
|
|
10950
11425
|
const content = removedValues?.length ? removedValues.map((v) => v.getContent()).join("") : "";
|
|
10951
11426
|
let attrs;
|
|
10952
11427
|
if (removedValues.length === 1) {
|
|
@@ -11084,6 +11559,26 @@
|
|
|
11084
11559
|
getAttributes() {
|
|
11085
11560
|
return this.attributes || /* @__PURE__ */ new Map();
|
|
11086
11561
|
}
|
|
11562
|
+
/**
|
|
11563
|
+
* `getRestoreSpans` returns the identity-preserving restore payload, if
|
|
11564
|
+
* this is a restore/retombstone operation.
|
|
11565
|
+
*/
|
|
11566
|
+
getRestoreSpans() {
|
|
11567
|
+
return this.restoreSpans;
|
|
11568
|
+
}
|
|
11569
|
+
/**
|
|
11570
|
+
* `getRestoreMode` returns the identity-preserving mode of this Edit.
|
|
11571
|
+
*/
|
|
11572
|
+
getRestoreMode() {
|
|
11573
|
+
return this.restoreMode;
|
|
11574
|
+
}
|
|
11575
|
+
/**
|
|
11576
|
+
* `getRetombstoneSpans` returns the companion span set (content the reversed
|
|
11577
|
+
* edit inserted) for an identity-preserving reverse op, if any.
|
|
11578
|
+
*/
|
|
11579
|
+
getRetombstoneSpans() {
|
|
11580
|
+
return this.retombstoneSpans;
|
|
11581
|
+
}
|
|
11087
11582
|
}
|
|
11088
11583
|
class StyleOperation extends Operation {
|
|
11089
11584
|
fromPos;
|
|
@@ -12384,6 +12879,10 @@
|
|
|
12384
12879
|
}
|
|
12385
12880
|
this.insNextID = split.id;
|
|
12386
12881
|
tree.registerNode(split);
|
|
12882
|
+
if (split.removedAt) {
|
|
12883
|
+
tree.registerPendingGCPair(split, diff);
|
|
12884
|
+
return [split, { data: 0, meta: 0 }];
|
|
12885
|
+
}
|
|
12387
12886
|
}
|
|
12388
12887
|
return [split, diff];
|
|
12389
12888
|
}
|
|
@@ -12481,7 +12980,11 @@
|
|
|
12481
12980
|
}
|
|
12482
12981
|
for (const node of this.attrs) {
|
|
12483
12982
|
if (node.getRemovedAt()) {
|
|
12484
|
-
pairs.push({
|
|
12983
|
+
pairs.push({
|
|
12984
|
+
parent: this,
|
|
12985
|
+
child: node,
|
|
12986
|
+
gcOnlySize: node.getDataSize()
|
|
12987
|
+
});
|
|
12485
12988
|
}
|
|
12486
12989
|
}
|
|
12487
12990
|
return pairs;
|
|
@@ -12548,10 +13051,19 @@
|
|
|
12548
13051
|
class CRDTTree extends CRDTElement {
|
|
12549
13052
|
indexTree;
|
|
12550
13053
|
nodeMapByID;
|
|
13054
|
+
/**
|
|
13055
|
+
* `pendingGCPairs` buffers GC pairs for nodes that were created
|
|
13056
|
+
* already-tombstoned by splitting a removed node. Such pieces inherit
|
|
13057
|
+
* `removedAt` without ever passing through `remove()`, so they would
|
|
13058
|
+
* otherwise never be registered for GC. `edit` and `style` drain this
|
|
13059
|
+
* buffer into their returned GC pairs.
|
|
13060
|
+
*/
|
|
13061
|
+
pendingGCPairs;
|
|
12551
13062
|
constructor(root, createdAt) {
|
|
12552
13063
|
super(createdAt);
|
|
12553
13064
|
this.indexTree = new IndexTree(root);
|
|
12554
13065
|
this.nodeMapByID = new LLRBTree(CRDTTreeNodeID.createComparator());
|
|
13066
|
+
this.pendingGCPairs = [];
|
|
12555
13067
|
this.indexTree.traverseAll((node) => {
|
|
12556
13068
|
this.nodeMapByID.put(node.id, node);
|
|
12557
13069
|
});
|
|
@@ -12653,6 +13165,25 @@
|
|
|
12653
13165
|
registerNode(node) {
|
|
12654
13166
|
this.nodeMapByID.put(node.id, node);
|
|
12655
13167
|
}
|
|
13168
|
+
/**
|
|
13169
|
+
* `registerPendingGCPair` buffers a GC pair for a node that was born
|
|
13170
|
+
* tombstoned (split off an already-removed node). The pair is picked up
|
|
13171
|
+
* by the next `edit` or `style` call via `drainPendingGCPairs`. `size`
|
|
13172
|
+
* is the net-new size created by the split; it is accounted to
|
|
13173
|
+
* docSize.gc at registration since the node was never live.
|
|
13174
|
+
*/
|
|
13175
|
+
registerPendingGCPair(node, size) {
|
|
13176
|
+
this.pendingGCPairs.push({ parent: this, child: node, gcOnlySize: size });
|
|
13177
|
+
}
|
|
13178
|
+
/**
|
|
13179
|
+
* `drainPendingGCPairs` returns the buffered GC pairs and clears the
|
|
13180
|
+
* buffer.
|
|
13181
|
+
*/
|
|
13182
|
+
drainPendingGCPairs() {
|
|
13183
|
+
const pairs = this.pendingGCPairs;
|
|
13184
|
+
this.pendingGCPairs = [];
|
|
13185
|
+
return pairs;
|
|
13186
|
+
}
|
|
12656
13187
|
/**
|
|
12657
13188
|
* `findNodesAndSplitText` finds `TreePos` of the given `CRDTTreeNodeID` and
|
|
12658
13189
|
* splits nodes if the position is in the middle of a text node.
|
|
@@ -12839,6 +13370,7 @@
|
|
|
12839
13370
|
}
|
|
12840
13371
|
}
|
|
12841
13372
|
);
|
|
13373
|
+
pairs.push(...this.drainPendingGCPairs());
|
|
12842
13374
|
return [pairs, changes, diff, prevAttributes, newAttrKeys];
|
|
12843
13375
|
}
|
|
12844
13376
|
/**
|
|
@@ -12942,6 +13474,7 @@
|
|
|
12942
13474
|
}
|
|
12943
13475
|
}
|
|
12944
13476
|
);
|
|
13477
|
+
pairs.push(...this.drainPendingGCPairs());
|
|
12945
13478
|
return [pairs, changes, diff, prevAttributes];
|
|
12946
13479
|
}
|
|
12947
13480
|
/**
|
|
@@ -13105,6 +13638,9 @@
|
|
|
13105
13638
|
parent = left.parent;
|
|
13106
13639
|
}
|
|
13107
13640
|
}
|
|
13641
|
+
if (!parent.parent) {
|
|
13642
|
+
break;
|
|
13643
|
+
}
|
|
13108
13644
|
parent.split(
|
|
13109
13645
|
this,
|
|
13110
13646
|
left !== parent ? parent.findOffset(left, true) + 1 : 0,
|
|
@@ -13164,6 +13700,7 @@
|
|
|
13164
13700
|
}
|
|
13165
13701
|
}
|
|
13166
13702
|
}
|
|
13703
|
+
pairs.push(...this.drainPendingGCPairs());
|
|
13167
13704
|
return [
|
|
13168
13705
|
changes,
|
|
13169
13706
|
pairs,
|
|
@@ -13228,9 +13765,13 @@
|
|
|
13228
13765
|
*/
|
|
13229
13766
|
getGCPairs() {
|
|
13230
13767
|
const pairs = [];
|
|
13231
|
-
this.indexTree.
|
|
13768
|
+
this.indexTree.traverseAll((node) => {
|
|
13232
13769
|
if (node.getRemovedAt()) {
|
|
13233
|
-
pairs.push({
|
|
13770
|
+
pairs.push({
|
|
13771
|
+
parent: this,
|
|
13772
|
+
child: node,
|
|
13773
|
+
gcOnlySize: node.getDataSize()
|
|
13774
|
+
});
|
|
13234
13775
|
}
|
|
13235
13776
|
for (const p of node.getGCPairs()) {
|
|
13236
13777
|
pairs.push(p);
|
|
@@ -15679,6 +16220,25 @@
|
|
|
15679
16220
|
pbAttributes[key] = value;
|
|
15680
16221
|
}
|
|
15681
16222
|
pbEditOperation.executedAt = toTimeTicket(editOperation.getExecutedAt());
|
|
16223
|
+
const toPbSpan = (span) => {
|
|
16224
|
+
const pbSpan = create(RestoreSpanSchema);
|
|
16225
|
+
pbSpan.createdAt = toTimeTicket(span.createdAt);
|
|
16226
|
+
pbSpan.start = span.start;
|
|
16227
|
+
pbSpan.end = span.end;
|
|
16228
|
+
pbSpan.content = span.value.getContent();
|
|
16229
|
+
const pbSpanAttrs = pbSpan.attributes;
|
|
16230
|
+
for (const [key, value] of Object.entries(span.value.getAttributes())) {
|
|
16231
|
+
pbSpanAttrs[key] = value;
|
|
16232
|
+
}
|
|
16233
|
+
return pbSpan;
|
|
16234
|
+
};
|
|
16235
|
+
const restoreSpans = editOperation.getRestoreSpans();
|
|
16236
|
+
const retombstoneSpans = editOperation.getRetombstoneSpans();
|
|
16237
|
+
if (restoreSpans && restoreSpans.length || retombstoneSpans && retombstoneSpans.length) {
|
|
16238
|
+
pbEditOperation.restoreSpans = (restoreSpans ?? []).map(toPbSpan);
|
|
16239
|
+
pbEditOperation.retombstoneSpans = (retombstoneSpans ?? []).map(toPbSpan);
|
|
16240
|
+
pbEditOperation.restoreMode = editOperation.getRestoreMode() === "retombstone" ? RestoreMode.RETOMBSTONE : RestoreMode.RESTORE;
|
|
16241
|
+
}
|
|
15682
16242
|
pbOperation.body.case = "edit";
|
|
15683
16243
|
pbOperation.body.value = pbEditOperation;
|
|
15684
16244
|
} else if (operation instanceof StyleOperation) {
|
|
@@ -16338,13 +16898,38 @@
|
|
|
16338
16898
|
Object.entries(pbEditOperation.attributes).forEach(([key, value]) => {
|
|
16339
16899
|
attributes.set(key, value);
|
|
16340
16900
|
});
|
|
16901
|
+
const executedAt = fromTimeTicket(pbEditOperation.executedAt);
|
|
16902
|
+
const fromPbSpan = (pbSpan) => {
|
|
16903
|
+
const value = CRDTTextValue.create(pbSpan.content);
|
|
16904
|
+
for (const [key, attr] of Object.entries(pbSpan.attributes)) {
|
|
16905
|
+
value.setAttr(key, attr, executedAt);
|
|
16906
|
+
}
|
|
16907
|
+
return {
|
|
16908
|
+
createdAt: fromTimeTicket(pbSpan.createdAt),
|
|
16909
|
+
start: pbSpan.start,
|
|
16910
|
+
end: pbSpan.end,
|
|
16911
|
+
value
|
|
16912
|
+
};
|
|
16913
|
+
};
|
|
16914
|
+
let restoreSpans;
|
|
16915
|
+
let retombstoneSpans;
|
|
16916
|
+
let restoreMode;
|
|
16917
|
+
if (pbEditOperation.restoreSpans.length || pbEditOperation.retombstoneSpans.length) {
|
|
16918
|
+
restoreSpans = pbEditOperation.restoreSpans.map(fromPbSpan);
|
|
16919
|
+
retombstoneSpans = pbEditOperation.retombstoneSpans.map(fromPbSpan);
|
|
16920
|
+
restoreMode = pbEditOperation.restoreMode === RestoreMode.RETOMBSTONE ? "retombstone" : "restore";
|
|
16921
|
+
}
|
|
16341
16922
|
return EditOperation.create(
|
|
16342
16923
|
fromTimeTicket(pbEditOperation.parentCreatedAt),
|
|
16343
16924
|
fromTextNodePos(pbEditOperation.from),
|
|
16344
16925
|
fromTextNodePos(pbEditOperation.to),
|
|
16345
16926
|
pbEditOperation.content,
|
|
16346
16927
|
attributes,
|
|
16347
|
-
|
|
16928
|
+
executedAt,
|
|
16929
|
+
restoreMode ? true : void 0,
|
|
16930
|
+
restoreSpans,
|
|
16931
|
+
restoreMode,
|
|
16932
|
+
retombstoneSpans
|
|
16348
16933
|
);
|
|
16349
16934
|
} else if (pbOperation.body.case === "style") {
|
|
16350
16935
|
const pbStyleOperation = pbOperation.body.value;
|
|
@@ -17027,6 +17612,25 @@
|
|
|
17027
17612
|
setPresenceChange(presenceChange) {
|
|
17028
17613
|
this.presenceChange = presenceChange;
|
|
17029
17614
|
}
|
|
17615
|
+
/**
|
|
17616
|
+
* `hasPresenceChange` returns whether a presence change was registered
|
|
17617
|
+
* during this context. Used by `Document.update` to detect a presence
|
|
17618
|
+
* emit when the document was attached with `disablePresence: true`.
|
|
17619
|
+
*/
|
|
17620
|
+
hasPresenceChange() {
|
|
17621
|
+
return this.presenceChange !== void 0;
|
|
17622
|
+
}
|
|
17623
|
+
/**
|
|
17624
|
+
* `dropPresenceChange` clears any presence change registered during
|
|
17625
|
+
* this context. Used by `Document.update` to silently drop presence
|
|
17626
|
+
* emits on documents attached with `disablePresence: true`. After
|
|
17627
|
+
* dropping, the change carries only its operations (if any); when
|
|
17628
|
+
* the context was presence-only the resulting `hasChange()` returns
|
|
17629
|
+
* false and no `Change` is enqueued.
|
|
17630
|
+
*/
|
|
17631
|
+
dropPresenceChange() {
|
|
17632
|
+
this.presenceChange = void 0;
|
|
17633
|
+
}
|
|
17030
17634
|
/**
|
|
17031
17635
|
* `setReversePresence` registers the previous presence to undo presence updates.
|
|
17032
17636
|
*/
|
|
@@ -17050,6 +17654,16 @@
|
|
|
17050
17654
|
}
|
|
17051
17655
|
return reversePresence;
|
|
17052
17656
|
}
|
|
17657
|
+
/**
|
|
17658
|
+
* `clearReversePresence` discards any reverse-presence keys recorded
|
|
17659
|
+
* during this context. Used by `Document.update` alongside
|
|
17660
|
+
* `dropPresenceChange` for documents attached with
|
|
17661
|
+
* `disablePresence: true`, so the dropped presence emit does not push
|
|
17662
|
+
* a no-op undo entry onto the history stack.
|
|
17663
|
+
*/
|
|
17664
|
+
clearReversePresence() {
|
|
17665
|
+
this.reversePresenceKeys.clear();
|
|
17666
|
+
}
|
|
17053
17667
|
/**
|
|
17054
17668
|
* `issueTimeTicket` creates a time ticket to be used to create a new operation.
|
|
17055
17669
|
*/
|
|
@@ -18951,7 +19565,9 @@
|
|
|
18951
19565
|
CRDTTreePos.fromStruct(range[0]),
|
|
18952
19566
|
CRDTTreePos.fromStruct(range[1])
|
|
18953
19567
|
];
|
|
18954
|
-
|
|
19568
|
+
const indexRange = this.tree.posRangeToIndexRange(posRange);
|
|
19569
|
+
this.registerPendingGCPairs();
|
|
19570
|
+
return indexRange;
|
|
18955
19571
|
}
|
|
18956
19572
|
/**
|
|
18957
19573
|
* `posRangeToPathRange` converts the position range into the path range.
|
|
@@ -18967,7 +19583,23 @@
|
|
|
18967
19583
|
CRDTTreePos.fromStruct(range[0]),
|
|
18968
19584
|
CRDTTreePos.fromStruct(range[1])
|
|
18969
19585
|
];
|
|
18970
|
-
|
|
19586
|
+
const pathRange = this.tree.posRangeToPathRange(posRange);
|
|
19587
|
+
this.registerPendingGCPairs();
|
|
19588
|
+
return pathRange;
|
|
19589
|
+
}
|
|
19590
|
+
/**
|
|
19591
|
+
* `registerPendingGCPairs` registers with the root any GC pairs the tree
|
|
19592
|
+
* buffered while resolving a position. `posRangeToIndexRange` and
|
|
19593
|
+
* `posRangeToPathRange` split text nodes to locate a position; when the
|
|
19594
|
+
* position lands inside a tombstoned node the split produces a
|
|
19595
|
+
* born-removed piece. Unlike edit/style/removeStyle, these read-path
|
|
19596
|
+
* conversions emit no operation, so the buffered pairs would otherwise
|
|
19597
|
+
* never reach the root and the piece would leak (invisible to GC).
|
|
19598
|
+
*/
|
|
19599
|
+
registerPendingGCPairs() {
|
|
19600
|
+
for (const pair of this.tree.drainPendingGCPairs()) {
|
|
19601
|
+
this.context.registerGCPair(pair);
|
|
19602
|
+
}
|
|
18971
19603
|
}
|
|
18972
19604
|
}
|
|
18973
19605
|
function createJSON(context, target) {
|
|
@@ -19210,6 +19842,10 @@
|
|
|
19210
19842
|
return;
|
|
19211
19843
|
}
|
|
19212
19844
|
this.gcPairMap.set(pair.child.toIDString(), pair);
|
|
19845
|
+
if (pair.gcOnlySize) {
|
|
19846
|
+
addDataSizes(this.docSize.gc, pair.gcOnlySize);
|
|
19847
|
+
return;
|
|
19848
|
+
}
|
|
19213
19849
|
const size = this.gcPairMap.get(pair.child.toIDString()).child.getDataSize();
|
|
19214
19850
|
addDataSizes(this.docSize.gc, size);
|
|
19215
19851
|
subDataSize(this.docSize.live, size);
|
|
@@ -19217,6 +19853,28 @@
|
|
|
19217
19853
|
this.docSize.live.meta += TimeTicketSize;
|
|
19218
19854
|
}
|
|
19219
19855
|
}
|
|
19856
|
+
/**
|
|
19857
|
+
* `unregisterGCPair` removes the given pair from the hash table. Called
|
|
19858
|
+
* when a tombstoned node is revived (un-tombstoned) by an
|
|
19859
|
+
* identity-preserving undo, so that a later re-registration (redo) is
|
|
19860
|
+
* not swallowed by the toggle in `registerGCPair`.
|
|
19861
|
+
*
|
|
19862
|
+
* NOTE: must be called AFTER the node's removedAt has been cleared, so
|
|
19863
|
+
* `getDataSize()` no longer includes the tombstone ticket.
|
|
19864
|
+
*/
|
|
19865
|
+
unregisterGCPair(pair) {
|
|
19866
|
+
const registered = this.gcPairMap.get(pair.child.toIDString());
|
|
19867
|
+
if (!registered) {
|
|
19868
|
+
return;
|
|
19869
|
+
}
|
|
19870
|
+
this.gcPairMap.delete(pair.child.toIDString());
|
|
19871
|
+
const size = pair.child.getDataSize();
|
|
19872
|
+
subDataSize(this.docSize.gc, size);
|
|
19873
|
+
addDataSizes(this.docSize.live, size);
|
|
19874
|
+
if (!(pair.child instanceof RHTNode)) {
|
|
19875
|
+
this.docSize.gc.meta -= TimeTicketSize;
|
|
19876
|
+
}
|
|
19877
|
+
}
|
|
19220
19878
|
/**
|
|
19221
19879
|
* `getElementMapSize` returns the size of element map.
|
|
19222
19880
|
*/
|
|
@@ -19279,6 +19937,10 @@
|
|
|
19279
19937
|
}
|
|
19280
19938
|
for (const [, pair] of this.gcPairMap) {
|
|
19281
19939
|
const removedAt = pair.child.getRemovedAt();
|
|
19940
|
+
if (!removedAt) {
|
|
19941
|
+
this.unregisterGCPair(pair);
|
|
19942
|
+
continue;
|
|
19943
|
+
}
|
|
19282
19944
|
if (removedAt && minSyncedVersionVector?.afterOrEqual(removedAt)) {
|
|
19283
19945
|
pair.parent.purge(pair.child);
|
|
19284
19946
|
subDataSize(this.docSize.gc, pair.child.getDataSize());
|
|
@@ -20101,6 +20763,17 @@
|
|
|
20101
20763
|
// remote actors' version vectors into changeID, keeping each subsequent
|
|
20102
20764
|
// local Change's VV at O(1) for high-fan-out Counter workloads.
|
|
20103
20765
|
disableGC;
|
|
20766
|
+
// `disablePresence`, when true, declares that this document does not use
|
|
20767
|
+
// presence. The client sets it from the local option on construction and
|
|
20768
|
+
// overwrites it from the server-fixated value in the attach response. While
|
|
20769
|
+
// true, `Document.update`'s `presence.set` calls are silently dropped on
|
|
20770
|
+
// the way out (server enforcement is authoritative for the wire side).
|
|
20771
|
+
disablePresence;
|
|
20772
|
+
// `presenceDropWarned` ensures the silent-drop warning emitted by
|
|
20773
|
+
// `Document.update` for opt-in documents fires only once per document
|
|
20774
|
+
// lifetime. Otherwise long-lived counter-only documents would spam the
|
|
20775
|
+
// console on every well-meaning `presence.set` call.
|
|
20776
|
+
presenceDropWarned;
|
|
20104
20777
|
/**
|
|
20105
20778
|
* `history` is exposed to the user to manage undo/redo operations.
|
|
20106
20779
|
*/
|
|
@@ -20115,6 +20788,8 @@
|
|
|
20115
20788
|
this.checkpoint = InitialCheckpoint;
|
|
20116
20789
|
this.localChanges = [];
|
|
20117
20790
|
this.disableGC = false;
|
|
20791
|
+
this.disablePresence = !!opts?.disablePresence;
|
|
20792
|
+
this.presenceDropWarned = false;
|
|
20118
20793
|
this.root = CRDTRoot.create();
|
|
20119
20794
|
this.presences = /* @__PURE__ */ new Map();
|
|
20120
20795
|
this.onlineClients = /* @__PURE__ */ new Set();
|
|
@@ -20162,6 +20837,16 @@
|
|
|
20162
20837
|
} finally {
|
|
20163
20838
|
this.isUpdating = false;
|
|
20164
20839
|
}
|
|
20840
|
+
if (this.disablePresence && ctx.hasPresenceChange()) {
|
|
20841
|
+
ctx.dropPresenceChange();
|
|
20842
|
+
ctx.clearReversePresence();
|
|
20843
|
+
if (!this.presenceDropWarned) {
|
|
20844
|
+
this.presenceDropWarned = true;
|
|
20845
|
+
logger.warn(
|
|
20846
|
+
`[Document] "${this.key}" was attached with disablePresence=true; presence updates from Document.update are silently dropped.`
|
|
20847
|
+
);
|
|
20848
|
+
}
|
|
20849
|
+
}
|
|
20165
20850
|
const rules = this.getSchemaRules();
|
|
20166
20851
|
if (!ctx.isPresenceOnlyChange() && rules.length) {
|
|
20167
20852
|
const result = validateYorkieRuleset(this.clone?.root.getObject(), rules);
|
|
@@ -20531,6 +21216,24 @@
|
|
|
20531
21216
|
setDisableGC(disableGC) {
|
|
20532
21217
|
this.disableGC = disableGC;
|
|
20533
21218
|
}
|
|
21219
|
+
/**
|
|
21220
|
+
* `setDisablePresence` records the server-fixated presence-disabled state
|
|
21221
|
+
* of this document. The client calls this on attach (before
|
|
21222
|
+
* `applyChangePack`) so any subsequent `Document.update` invocation sees
|
|
21223
|
+
* the gating state already settled. Flipping the flag at runtime is
|
|
21224
|
+
* supported: the next `update` honours the new value.
|
|
21225
|
+
*/
|
|
21226
|
+
setDisablePresence(disablePresence) {
|
|
21227
|
+
this.disablePresence = disablePresence;
|
|
21228
|
+
}
|
|
21229
|
+
/**
|
|
21230
|
+
* `isPresenceDisabled` returns the current presence-disabled state of
|
|
21231
|
+
* this document. Reflects the server-fixated value once attached;
|
|
21232
|
+
* before attach it reflects the local construction option.
|
|
21233
|
+
*/
|
|
21234
|
+
isPresenceDisabled() {
|
|
21235
|
+
return this.disablePresence;
|
|
21236
|
+
}
|
|
20534
21237
|
/**
|
|
20535
21238
|
* `isEnableDevtools` returns whether devtools is enabled or not.
|
|
20536
21239
|
*/
|
|
@@ -21268,6 +21971,14 @@
|
|
|
21268
21971
|
* omit the response VersionVector. Documents only.
|
|
21269
21972
|
*/
|
|
21270
21973
|
disableGC;
|
|
21974
|
+
/**
|
|
21975
|
+
* `disablePresence` mirrors the server-fixated value returned by the
|
|
21976
|
+
* attach response. `pushPullChanges` does **not** read this — the
|
|
21977
|
+
* `disable_presence` wire field is request-only (set on the first
|
|
21978
|
+
* attach, ignored thereafter on the server side). Carried here for
|
|
21979
|
+
* devtools / debugging visibility. Documents only.
|
|
21980
|
+
*/
|
|
21981
|
+
disablePresence;
|
|
21271
21982
|
/**
|
|
21272
21983
|
* `unsubscribeLocalBroadcast` is set by `attachChannel` when it forwards
|
|
21273
21984
|
* a Channel's `local-broadcast` events to the RPC client, and consumed
|
|
@@ -21283,7 +21994,7 @@
|
|
|
21283
21994
|
watchAbortController;
|
|
21284
21995
|
syncPromise;
|
|
21285
21996
|
_detaching = false;
|
|
21286
|
-
constructor(reconnectStreamDelay, resource, resourceID = "", syncMode, pollInterval = 0, pollIntervalPinned = false, disableGC = false) {
|
|
21997
|
+
constructor(reconnectStreamDelay, resource, resourceID = "", syncMode, pollInterval = 0, pollIntervalPinned = false, disableGC = false, disablePresence = false) {
|
|
21287
21998
|
this.reconnectStreamDelay = reconnectStreamDelay;
|
|
21288
21999
|
this.resource = resource;
|
|
21289
22000
|
this.resourceID = resourceID;
|
|
@@ -21293,6 +22004,7 @@
|
|
|
21293
22004
|
this.pollInterval = pollInterval;
|
|
21294
22005
|
this.pollIntervalPinned = pollIntervalPinned;
|
|
21295
22006
|
this.disableGC = disableGC;
|
|
22007
|
+
this.disablePresence = disablePresence;
|
|
21296
22008
|
this.cancelled = false;
|
|
21297
22009
|
}
|
|
21298
22010
|
/**
|
|
@@ -21452,7 +22164,7 @@
|
|
|
21452
22164
|
};
|
|
21453
22165
|
}
|
|
21454
22166
|
const name$1 = "@yorkie-js/sdk";
|
|
21455
|
-
const version$1 = "0.7.
|
|
22167
|
+
const version$1 = "0.7.13";
|
|
21456
22168
|
const pkg$1 = {
|
|
21457
22169
|
name: name$1,
|
|
21458
22170
|
version: version$1
|
|
@@ -21753,7 +22465,8 @@
|
|
|
21753
22465
|
syncLoopDuration: 50,
|
|
21754
22466
|
retrySyncLoopDelay: 1e3,
|
|
21755
22467
|
reconnectStreamDelay: 1e3,
|
|
21756
|
-
channelHeartbeatInterval: DefaultChannelHeartbeatMs
|
|
22468
|
+
channelHeartbeatInterval: DefaultChannelHeartbeatMs,
|
|
22469
|
+
deactivateOnUnload: true
|
|
21757
22470
|
};
|
|
21758
22471
|
const DefaultBroadcastOptions = {
|
|
21759
22472
|
maxRetries: Infinity,
|
|
@@ -21773,6 +22486,7 @@
|
|
|
21773
22486
|
reconnectStreamDelay;
|
|
21774
22487
|
retrySyncLoopDelay;
|
|
21775
22488
|
channelHeartbeatInterval;
|
|
22489
|
+
deactivateOnUnload;
|
|
21776
22490
|
rpcClient;
|
|
21777
22491
|
setAuthToken;
|
|
21778
22492
|
taskQueue;
|
|
@@ -21806,6 +22520,7 @@
|
|
|
21806
22520
|
this.reconnectStreamDelay = opts.reconnectStreamDelay ?? DefaultClientOptions.reconnectStreamDelay;
|
|
21807
22521
|
this.retrySyncLoopDelay = opts.retrySyncLoopDelay ?? DefaultClientOptions.retrySyncLoopDelay;
|
|
21808
22522
|
this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
|
|
22523
|
+
this.deactivateOnUnload = opts.deactivateOnUnload ?? DefaultClientOptions.deactivateOnUnload;
|
|
21809
22524
|
const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
|
|
21810
22525
|
this.setAuthToken = setToken;
|
|
21811
22526
|
const transportOptions = {
|
|
@@ -21884,9 +22599,14 @@
|
|
|
21884
22599
|
this.deactivating = false;
|
|
21885
22600
|
this.runSyncLoop();
|
|
21886
22601
|
logger.info(`[AC] c:"${this.getKey()}" activated, id:"${this.id}"`);
|
|
21887
|
-
if (typeof window !== "undefined") {
|
|
21888
|
-
window.addEventListener("beforeunload",
|
|
21889
|
-
|
|
22602
|
+
if (typeof window !== "undefined" && this.deactivateOnUnload) {
|
|
22603
|
+
window.addEventListener("beforeunload", () => {
|
|
22604
|
+
void this.deactivate({ keepalive: true }).catch((err) => {
|
|
22605
|
+
logger.debug(
|
|
22606
|
+
`[DC] c:"${this.getKey()}" beforeunload deactivate failed:`,
|
|
22607
|
+
err
|
|
22608
|
+
);
|
|
22609
|
+
});
|
|
21890
22610
|
});
|
|
21891
22611
|
}
|
|
21892
22612
|
} catch (err) {
|
|
@@ -21974,7 +22694,10 @@
|
|
|
21974
22694
|
);
|
|
21975
22695
|
}
|
|
21976
22696
|
doc.setActor(this.id);
|
|
21977
|
-
|
|
22697
|
+
const resolvedDisablePresence = opts.disablePresence ?? doc.isPresenceDisabled() ?? false;
|
|
22698
|
+
if (!resolvedDisablePresence) {
|
|
22699
|
+
doc.update((_, p) => p.set(opts.initialPresence || {}));
|
|
22700
|
+
}
|
|
21978
22701
|
const syncMode = opts.syncMode ?? "realtime";
|
|
21979
22702
|
if (opts.documentPollInterval !== void 0 && opts.documentPollInterval <= 0) {
|
|
21980
22703
|
throw new YorkieError(
|
|
@@ -21991,7 +22714,8 @@
|
|
|
21991
22714
|
clientId: this.id,
|
|
21992
22715
|
changePack: converter.toChangePack(doc.createChangePack()),
|
|
21993
22716
|
schemaKey: opts.schema,
|
|
21994
|
-
disableGc: opts.disableGC ?? false
|
|
22717
|
+
disableGc: opts.disableGC ?? false,
|
|
22718
|
+
disablePresence: resolvedDisablePresence
|
|
21995
22719
|
},
|
|
21996
22720
|
{ headers: { "x-shard-key": `${this.apiKey}/${doc.getKey()}` } }
|
|
21997
22721
|
);
|
|
@@ -22004,6 +22728,7 @@
|
|
|
22004
22728
|
}
|
|
22005
22729
|
const pack = converter.fromChangePack(res.changePack);
|
|
22006
22730
|
doc.setDisableGC(opts.disableGC ?? false);
|
|
22731
|
+
doc.setDisablePresence(res.disablePresence);
|
|
22007
22732
|
doc.applyChangePack(pack);
|
|
22008
22733
|
if (doc.getStatus() === DocStatus.Removed) {
|
|
22009
22734
|
return doc;
|
|
@@ -22018,7 +22743,8 @@
|
|
|
22018
22743
|
syncMode,
|
|
22019
22744
|
pollInterval,
|
|
22020
22745
|
pollIntervalPinned,
|
|
22021
|
-
opts.disableGC ?? false
|
|
22746
|
+
opts.disableGC ?? false,
|
|
22747
|
+
res.disablePresence
|
|
22022
22748
|
)
|
|
22023
22749
|
);
|
|
22024
22750
|
if (syncMode !== "manual" && syncMode !== "polling") {
|
|
@@ -23536,7 +24262,7 @@
|
|
|
23536
24262
|
};
|
|
23537
24263
|
}
|
|
23538
24264
|
const name = "@yorkie-js/react";
|
|
23539
|
-
const version = "0.7.
|
|
24265
|
+
const version = "0.7.13";
|
|
23540
24266
|
const pkg = {
|
|
23541
24267
|
name,
|
|
23542
24268
|
version
|
|
@@ -23577,7 +24303,7 @@
|
|
|
23577
24303
|
}
|
|
23578
24304
|
activateClient();
|
|
23579
24305
|
return () => {
|
|
23580
|
-
if (activate && client?.isActive()) {
|
|
24306
|
+
if (activate && client?.isActive() && opts.deactivateOnUnload !== false) {
|
|
23581
24307
|
client.deactivate({ keepalive: true });
|
|
23582
24308
|
}
|
|
23583
24309
|
};
|
|
@@ -23725,7 +24451,7 @@
|
|
|
23725
24451
|
valueB
|
|
23726
24452
|
);
|
|
23727
24453
|
}
|
|
23728
|
-
function useYorkieDocument(client, clientLoading, clientError, docKey, initialRoot, initialPresence, enableDevtools, syncMode, documentPollInterval, disableGC, docStore) {
|
|
24454
|
+
function useYorkieDocument(client, clientLoading, clientError, docKey, initialRoot, initialPresence, enableDevtools, syncMode, documentPollInterval, disableGC, disablePresence, docStore) {
|
|
23729
24455
|
const initialRootRef = react.useRef(initialRoot);
|
|
23730
24456
|
const initialPresenceRef = react.useRef(initialPresence);
|
|
23731
24457
|
const [didMount, setDidMount] = react.useState(false);
|
|
@@ -23753,7 +24479,10 @@
|
|
|
23753
24479
|
loading: true,
|
|
23754
24480
|
error: void 0
|
|
23755
24481
|
}));
|
|
23756
|
-
const newDoc = new Document(docKey, {
|
|
24482
|
+
const newDoc = new Document(docKey, {
|
|
24483
|
+
enableDevtools,
|
|
24484
|
+
disablePresence
|
|
24485
|
+
});
|
|
23757
24486
|
const unsubs = [];
|
|
23758
24487
|
unsubs.push(
|
|
23759
24488
|
newDoc.subscribe(() => {
|
|
@@ -23786,7 +24515,8 @@
|
|
|
23786
24515
|
initialPresence: initialPresenceRef.current,
|
|
23787
24516
|
syncMode,
|
|
23788
24517
|
documentPollInterval,
|
|
23789
|
-
disableGC
|
|
24518
|
+
disableGC,
|
|
24519
|
+
disablePresence
|
|
23790
24520
|
});
|
|
23791
24521
|
const update = (callback) => {
|
|
23792
24522
|
try {
|
|
@@ -23835,7 +24565,8 @@
|
|
|
23835
24565
|
didMount,
|
|
23836
24566
|
syncMode,
|
|
23837
24567
|
documentPollInterval,
|
|
23838
|
-
disableGC
|
|
24568
|
+
disableGC,
|
|
24569
|
+
disablePresence
|
|
23839
24570
|
]);
|
|
23840
24571
|
}
|
|
23841
24572
|
const DocumentContext = react.createContext(void 0);
|
|
@@ -23847,6 +24578,7 @@
|
|
|
23847
24578
|
syncMode,
|
|
23848
24579
|
documentPollInterval,
|
|
23849
24580
|
disableGC,
|
|
24581
|
+
disablePresence,
|
|
23850
24582
|
children
|
|
23851
24583
|
}) => {
|
|
23852
24584
|
const { client, loading: clientLoading, error: clientError } = useYorkie();
|
|
@@ -23875,6 +24607,7 @@
|
|
|
23875
24607
|
syncMode,
|
|
23876
24608
|
documentPollInterval,
|
|
23877
24609
|
disableGC,
|
|
24610
|
+
disablePresence,
|
|
23878
24611
|
documentStore
|
|
23879
24612
|
);
|
|
23880
24613
|
return /* @__PURE__ */ jsxRuntime.jsx(DocumentContext.Provider, { value: documentStore, children });
|
|
@@ -23950,6 +24683,17 @@
|
|
|
23950
24683
|
);
|
|
23951
24684
|
return { createRevision, listRevisions, getRevision, restoreRevision };
|
|
23952
24685
|
};
|
|
24686
|
+
const useRemoveDocument = () => {
|
|
24687
|
+
const { client } = useYorkie();
|
|
24688
|
+
const documentStore = useDocumentStore("useRemoveDocument");
|
|
24689
|
+
const doc = useSelector(documentStore, (store) => store.doc);
|
|
24690
|
+
return react.useCallback(async () => {
|
|
24691
|
+
if (!client || !doc) {
|
|
24692
|
+
throw new Error("Client or document is not ready");
|
|
24693
|
+
}
|
|
24694
|
+
await client.remove(doc);
|
|
24695
|
+
}, [client, doc]);
|
|
24696
|
+
};
|
|
23953
24697
|
const useDocumentStore = (hookName) => {
|
|
23954
24698
|
const documentStore = react.useContext(DocumentContext);
|
|
23955
24699
|
if (!documentStore) {
|
|
@@ -23995,6 +24739,7 @@
|
|
|
23995
24739
|
opts?.syncMode,
|
|
23996
24740
|
opts?.documentPollInterval,
|
|
23997
24741
|
opts?.disableGC,
|
|
24742
|
+
opts?.disablePresence,
|
|
23998
24743
|
documentStore
|
|
23999
24744
|
);
|
|
24000
24745
|
const documentState = useSelector(documentStore);
|
|
@@ -24261,6 +25006,7 @@
|
|
|
24261
25006
|
exports2.useDocument = useDocument;
|
|
24262
25007
|
exports2.usePeekChannel = usePeekChannel;
|
|
24263
25008
|
exports2.usePresences = usePresences;
|
|
25009
|
+
exports2.useRemoveDocument = useRemoveDocument;
|
|
24264
25010
|
exports2.useRevisions = useRevisions;
|
|
24265
25011
|
exports2.useRoot = useRoot;
|
|
24266
25012
|
exports2.useYorkie = useYorkie;
|