All notable changes to Yorkie JS SDK will be documented in this file.
The format is based on Keep a Changelog, and Yorkie JS SDK adheres to Semantic Versioning.
- Introduce broadcast API for event sharing by @gwbaik9717 in yorkie-team#884
- Update npm-publish command for sdk by @hackerwins in yorkie-team#886
- Update MAINTAINING.md by @chacha912 in yorkie-team#887
- Lock version of
@codemirror/view
to prevent potential issues with Korean character input by @devleejb in yorkie-team#890
- Update example version to v0.4.28 by @chacha912 in yorkie-team#877
- Unify error throwing methods by @gwbaik9717 yorkie-team#878
- Update docker compose command to V2 by @kokodak in yorkie-team#879
- Introduce monorepo to manage packages using pnpm @gwbaik9717 yorkie-team#880
- Improve performance for creating crdt.TreeNode by @hackerwins in yorkie-team#875
- Add Root-Only Filter Feature in History Tab by @gwbaik9717 in yorkie-team#872
- Update example version to v0.4.27 by @chacha912 in yorkie-team#870
- Adjust Default LogLevel to Warn by @gwbaik9717 in yorkie-team#871
- Add taskQueue to handle each request one by one by @hackerwins in yorkie-team#862
- Remove Custom JSDOM by @hackerwins in yorkie-team#864
- Remove vitest-environment-custom-jsdom from dependencies by @blurfx in yorkie-team#866
- Remove jsdom from dependencies by @blurfx in yorkie-team#867
- Handle retry for syncLoop and watchLoop by @hackerwins in yorkie-team#863
- Handle ErrClientNotActivated and ErrClientNotFound by @hackerwins in yorkie-team#865
- Handle local changes correctly when receiving snapshot by @hackerwins in yorkie-team#868
- Update example version to v0.4.25 by @chacha912 in yorkie-team#858
- Remove node from indexes during GC by @hackerwins in yorkie-team#860
- Add
doc.subscribe('status', callback)
function by @chacha912 in yorkie-team#828
- Use module import style for Protobuf by @hackerwins in yorkie-team#853
- Remove reattach test code by @hackerwins in yorkie-team#855
- Show removed node in devtools by @chacha912 in yorkie-team#835
- Update examples version to v0.4.22 by @chacha912 in yorkie-team#845
- Fix miscalculation of tree size in concurrent editing by @hackerwins in yorkie-team#846
- Add RHTNode removal to converter for consistency by @raararaara in yorkie-team#842
- Update examples version to v0.4.21 by @chacha912 in yorkie-team#840
- Simplify type checking for style attributes in TreeStyleOpInfo by @chacha912 in yorkie-team#841
- Add conditional checks for
window
object by @chacha912 in yorkie-team#839
- Update example version to v0.4.20 by @chacha912 in yorkie-team#822
- Remove skip from style-style-test by @hackerwins in yorkie-team#829
- Include all nodes in tree.toJSInfoForTest by @chacha912 in yorkie-team#832
- Add ServerSeq into ChangeInfo by @hackerwins in yorkie-team#833
- Prevent remote-change events in RealtimeSyncOff mode by @chacha912 in yorkie-team#824
- Fix invalid error message in CRDTTreePos by @hackerwins in yorkie-team#830
- Fix incorrect tree snapshot encoding/decoding by @hackerwins in yorkie-team#836
- Fix incorrect indexes in TreeChange by @chacha912 in yorkie-team#837
- Implement RHT.GC by @raararaara in yorkie-team#815
- Update examples version to v0.4.19 by @chacha912 in yorkie-team#812
- Enhance type inference in Document.subscribe by @chacha912 in yorkie-team#814
- Apply GCPair to TreeNode, TextNode by @raararaara in yorkie-team#819
- Handle Tree.toXML to return proper XML string by @raararaara in yorkie-team#805
- Avoid unnecessary syncs in push-only syncmode by @chacha912 in yorkie-team#818
- Add Tree concurrency tests by @justiceHui, @hackerwins in yorkie-team#792
- Update examples version to v0.4.18 by @chacha912 in yorkie-team#785
- Remove Client.subscribe by @chacha912 in yorkie-team#789
- Replace
benchmark.js
withvitest bench
by @hackerwins in yorkie-team#793 - Replace webpack with vite by @hackerwins in yorkie-team#795
- Reset online clients when stream is disconnected by @chacha912 in yorkie-team#796
- Replace TSDoc with TypeDoc by @hackerwins in yorkie-team#800
- Add vite-plugin-dts to build yorkie-js-sdk.d.ts by @hackerwins in yorkie-team#801
- Export OpSource by @chacha912 in yorkie-team#786
- Add window type condition for using devtools by @chacha912 in yorkie-team#787
- Update GitHub Action workflow for create-yorkie-app by @hackerwins in yorkie-team#790
- Handle exception for the client without proper presence value in example by @chacha912 in yorkie-team#798
- Handle concurrent editing and styling in Tree by @raararaara in yorkie-team#803
- Fix invalid tree style changes by @hackerwins in yorkie-team#804
- Fix gc for multiple nodes in text and tree type by @chacha912 in yorkie-team#806
- Add history tab and enhance visualization features to devtools by @chacha912 in yorkie-team#760
- Add RealtimeSyncOff and refactor interface of SyncMode by @chacha912 in yorkie-team#772
- Fix issue of incorrect display of remote selection in Quill example by @chacha912 in yorkie-team#769
- Reverse TreeChanges when Deleting in Tree by @raararaara in yorkie-team#774
- Remove unnecessary stubs from the test code by @chacha912 in yorkie-team#776
- Provide CODECOV_TOKEN to codecov-action by @hackerwins in yorkie-team#777
- Fix issue of referencing process object on browser by @blurfx in yorkie-team#778
- Implement Protocol Changes for Tree.RemoveStyle by @raararaara in yorkie-team#755
- Implement Tree.RemoveStyle by @raararaara in yorkie-team#745
- Change actorID to be non-optional by @chacha912 in yorkie-team#747
- Fix invalid sync when editing multiple cursors in CodeMirror6 by @devleejb in yorkie-team#743
- Fix incorrect index returned when using posRangeToIndexRange by @chacha912 in yorkie-team#742
- Fix incorrect calculation in
indexTree.treePosToPath
operation by @raararaara in yorkie-team#751 - Fix errors when editing Tree due to missing insPrevID in CRDTTree by @raararaara in yorkie-team#756
- Prevent remote-change events from occurring in push-only mode by @chacha912 in yorkie-team#759
- Export LogLevel and setLogLevel @devleejb in yorkie-team#737
- Add design document for devtools extension by @chacha912 in yorkie-team#735
- Follow up work after devtools mvp by @chacha912 in yorkie-team#734
- Fix invalid TreeChanges in concurrent Tree.Style by @hackerwins in yorkie-team#738
- Restore interface changes due to server DB sharding by @sejongk yorkie-team#740
- Implement devtools chrome extension by @chacha912 in yorkie-team#717
- Reflect interface changes of server DB sharding by @sejongk in yorkie-team#726
- Complement concurrent editing test cases in Tree by @sejongk in yorkie-team#721
- Export devtools type by @chacha912 in yorkie-team#730
- Update examples version to v0.4.12 by @hackerwins in yorkie-team#722
- Fix multiple versions of prosemirror-model were loaded by @hackerwins in yorkie-team#728
- Fix invalid tree conversion by @hackerwins in yorkie-team#719
- Add concurrent editing test cases in Tree by @sejongk in yorkie-team#710
- Generate correct TreeChange in concurrent edits by @sejongk in yorkie-team#712
- Add forced sync when switching to realtime mode by @chacha912 in yorkie-team#713
- Fix
getGarbageLen
to retrun correct size by @devleejb in yorkie-team#714 - Prevent deregisterElement from deregistering twice in nested object by @justiceHui in yorkie-team#716
- Address duplicate node IDs in Tree.Split by @sejongk, @hackerwins in yorkie-team#707
- Add test filtering and log printing guide to CONTRIBUTING.md by @sejongk in yorkie-team#708
- Support concurrent insertion and splitting in Tree by @sejongk in yorkie-team#709
- Migrate RPC to ConnectRPC by @krapie, @hackerwins in yorkie-team#698
- Add create-yorkie-app by @se030, @blurfx in yorkie-team#690
- Implement splitLevel of Tree.Edit by @hackerwins in yorkie-team#704
- Add
removeIfNotAttached
toclient.detach()
options by @chacha912 in yorkie-team#703
- Fix reading wrong .env path by @blurfx in yorkie-team#694
- Handle escape string for strings containing quotes by @chacha912 in yorkie-team#700
- Correct typos in the installation command on README.md in the example by @ymw0407 in yorkie-team#702
- Implement merge elements in
Tree.Edit
by @hackerwins in yorkie-team#681 - Add README and thumbnail on example 'simultaneous-cursors'by @banma1234 in yorkie-team#683
- Support Undo/Redo for object.set and object.remove operations by @chacha912 in yorkie-team#658
- Refactor ProseMirror example and Tree codes by @hackerwins in yorkie-team#686
- Enhance Set and Add for representing nested elements by @chacha912 in yorkie-team#691
- Add missing
removedAt
during Primitive deepcopy by @chacha912 in yorkie-team#692 - Prevent empty ops are applied during undo/redo by @chacha912 in yorkie-team#687
- Replace karma with vitest by @blurfx, @hackerwins in yorkie-team#665
- Remove vitest single thread config by @blurfx in yorkie-team#667
- Publish npm package with provenance by @jongwooo in yorkie-team#669
- Update examples version to v0.4.7 by @hackerwins in yorkie-team#671
- Update nextjs-scheduler to export static files by @hackerwins in yorkie-team#672
- Bump browserify-sign from 4.2.1 to 4.2.2 by @dependabot in yorkie-team#678
- Bump @babel/traverse from 7.22.11 to 7.23.2 by @dependabot in yorkie-team#670
- Remove redundant types from tree by @JOOHOJANG in yorkie-team#666
- Fix missing collection of removed elements from the root by @hackerwins in yorkie-team#676
- Add more GC tests to reflect current server modifications by @hackerwins in yorkie-team#677
- Fit Next.js example style to the yorkie homepage by @blurfx in yorkie-team#675
- Disable jekyll on github actions by @blurfx in yorkie-team#674
- Introduce basic architecture to support undo and redo by @hyemmie, @chacha912 and @hackerwins in yorkie-team#650
- Add Text devtool to CodeMirror example by @chacha912 and @hackerwins in yorkie-team#646
- Add DisableGC option to document by @hackerwins in yorkie-team#644
- Add toJS to return TreeNode of Tree by @JOOHOJANG and @hackerwins in yorkie-team#639
- Add Tree.Edit benchmark and improve performance by @JOOHOJANG and @hackerwins in yorkie-team#641
- Add simultaneous cursors example and Update examples to v0.4.6 by @YoonKiJin and @chacha912 in yorkie-team#581
- Add nextjs-scheduler example by @banma1234 and @hackerwins in yorkie-team#637
- Improve tldraw example performance by @devleejb in yorkie-team#640
- Drop node 16 support by @blurfx in yorkie-team#653
- Strip internals from package d.ts files by @mojosoeun in yorkie-team#596
- Disable realtime sync in GC test (#656) by @sejongk and @hackerwins in yorkie-team#656
- Remove unused trie by @hackerwins in yorkie-team#651
- Remove SelectOpInfo by @chacha912 in yorkie-team#636
- Support concurrent formatting of Text by @MoonGyu1 in yorkie-team#642
- Recover istanbul-instrumenter-loader to use debugger by @hackerwins in yorkie-team#659
- Recover Select to prevent unsupported operation by @hackerwins in yorkie-team#634
- Build error on node 18+ by @blurfx in yorkie-team#584
- Add .nvmrc to specify Node version to LTS by @kutta97 in yorkie-team#586
- Add client deactivation before unmount by @degurii in yorkie-team#595
- Add
presence.get()
to get presence value in doc.update() by @chacha912 in yorkie-team#600 - Add test for concurrent rich-text editing in the Peritext example by @chacha912 in yorkie-team#610
- Concurrent case handling for Yorkie.tree by @ehuas in yorkie-team#611
- Support multi-level and parital element selection by @sejongk in yorkie-team#631
- Move "Building & Testing" Guide to CONTRIBUTING.md by @g2hhh2ee in yorkie-team#589
- Define more specific condition to check whether the input is opened by @su-ram in yorkie-team#597
- Clean up methods related to presence by @chacha912 in yorkie-team#599
- Refactor presence event code in examples by @chacha912 in yorkie-team#614
- Change TreeNode to have IDs instead of insPrev, insNext by @JOOHOJANG in yorkie-team#627
- Remove select operation from text by @blurfx in yorkie-team#622
- Fix invalid path of style changes by @hackerwins in yorkie-team#632
- Fix
pathToTreePos
TC by @JOOHOJANG in yorkie-team#571 - Fix GC to remove all removed nodes by @JOOHOJANG in yorkie-team#568
- Expose pathToIndex API by @JOOHOJANG in yorkie-team#567
- Fix react-tldraw readme typo by @blurfx in yorkie-team#598
- Fix event-related tests to be deterministic by @chacha912 in yorkie-team#602
- Fix high and critical vulnerabilities by @mojosoeun in yorkie-team#630
- Move Presence from Client to Document by @chacha912 in yorkie-team#574
- Tree edit update by @ehuas in yorkie-team#576
- Replace selection with presence by @chacha912 in yorkie-team#578
- Bump word-wrap from 1.2.3 to 1.2.4 by @dependabot in yorkie-team#575
- Bump up protobuf by @JOOHOJANG in yorkie-team#570
- Prevent usage of
.
in JSONObject key by @chacha912 in yorkie-team#569
- Remove duplicated test by @hackerwins in yorkie-team#564
- Remove InternalOpInfo by @chacha912 in yorkie-team#566
- Fix
pathToTreePos
TC by @JOOHOJANG in yorkie-team#571 - Fix GC to remove all removed nodes by @JOOHOJANG in yorkie-team#568
- Expose pathToIndex API by @JOOHOJANG in yorkie-team#567
- Cleanup of test-related terminology by @chacha912 in yorkie-team#562
- Use TreeRangeStruct to represent tree selection by @chacha912 in yorkie-team#561
- Apply garbage collection to tree by @JOOHOJANG in yorkie-team#550
- Cleanup TextChange by @chacha912 in yorkie-team#551
- Fix garbage collection bug by @JOOHOJANG in yorkie-team#555
- Support for OperationInfo inference on Document.subscribe by @easylogic in yorkie-team#535
- Add peer selection display example by @easylogic in yorkie-team#544
- Implement Tree.Style and Tree.StyleByPath by @JOOHOJANG, @hackerwins in yorkie-team#542
- Bump vite from 3.2.5 to 3.2.7 by @dependabot in yorkie-team#531
- change to next method as synchronously by @easylogic in yorkie-team#526
- Change the value of XXXChange to Change in Document.subscribe by @easylogic in yorkie-team#538
- Replace Tree.onChanges with Document.subscribe by @easylogic in yorkie-team#523
- Implement yorkie.Tree for text editors using tree model by @hackerwins in yorkie-team#507
- Bump socket.io-parser from 4.2.1 to 4.2.3 by @dependabot in yorkie-team#516
- Replace Text.onChanges with Document.subscribe by @easylogic in yorkie-team#519
- Bump yaml and husky by @dependabot in yorkie-team#505
- Apply Integration of SDK and Admin RPC Server by @krapie in yorkie-team#512
- Fix quill example page image rendering issue by @JOOHOJANG in yorkie-team#504
- Add actor to ChangeInfo / update api-reference by @JOOHOJANG in yorkie-team#508
- Add the
document.subscribe(targetPath, (event) => {})
, which enables users to subscribe to a specific target in a document by @chacha912 in #487 - Add the
document.getValueByPath()
to get the value of a document by specifying the path by @chacha912 in #487 - Add benchmark tests for yorkie.Document by @JOOHOJANG in #494
- Add client sync mode, which enables users to pause and resume remote changes by @chacha912 in #495
- Add x-shard-key to APIs by @hackerwins in #486
- Add yorkie user agent in grpc metadata by @emplam27 in #488
- Change Counter.increase() to remove the decimal part instead of using Math.floor() when a decimal number is passed as an argument by @JOOHOJANG in #496
- Return undefined when searching for presence of non-existent peer by @chacha912 in #493
- Add optimization option in production mode by @easylogic in yorkie-team#474
- Add RemoveDocument API by @chacha912 in yorkie-team#480
- Add pause and resume to Client by @hackerwins in yorkie-team#482
- Clarify the ClientEvent that is sent to client.subscribe by @chacha912 in yorkie-team#464
- Rename initialization to initialized in PeersChangedEvent by @chacha912 in yorkie-team#478
- Fix ValueChange dependency by @krapie in yorkie-team#470
- Add
delete
andempty
method toText
data type by @cozitive in yorkie-team#454
- Reduce bundle size for production by @easylogic in yorkie-team#460
- Remove string dependency of RGATreeSplit value by @cozitive in yorkie-team#459
- Remove priority queue from RHTPQMap and entire project by @blurfx in yorkie-team#462
- Modify config to run the webpack-bundle-analyzer when using
profile:bundle
script by @chacha912 in yorkie-team#468
- Fix invalid indexOf SplayTree with single node by @chacha912 in yorkie-team#463
- Merge Text and RichText by @chacha912 in yorkie-team#425
- Fix the value type of Counter and remove double type from Counter by @cozitive in yorkie-team#426
- Let Client.attach wait until stream initialization is finished by @cozitive in yorkie-team#440
- Add the toJS method to the ObjectProxy's handler by @chacha912 in yorkie-team#449
- Increase CRDT Counter in local change by @chacha912 in yorkie-team#441
- Add benchmark tests by @parkeunae in #358, #359
- Add CodeMirror6 integration example by @blurfx in #394
- Add vuejs-kanban example by @hackerwins in #399
- Add profile-stack example by @chacha912 #414
- Bump socket.io-parser from 4.0.4 to 4.0.5 by @dependabot in #403
- Bump engine.io and socket.io by @dependabot in #407
- Bump express from 4.17.1 to 4.18.2 by @dependabot in #411
- Bump minimatch from 3.0.4 to 3.1.2 by @dependabot in #412
- Fix issues identified during iOS SDK development by @hackerwins in #398
- Use uint64 for date value by @hackerwins in #408
- Rename keyOf to subPathOf: #391
- Remove unused nodeMapByCreatedAt in RHT: #386
- Change lamport from uint64 to int64: #390
- Apply generics to support any types of properties in RichText: #354
- Send peers-changed event to the user who updated one's own presence: #371
- Fix the error that occurs when importing JS SDK in Next.js: #378
- Add snapshot event observer to Quill example: #365
- Bump up proto files to the latest: #367
- Export Change APIs to generate history snapshots in admin: #368
- Change trie traverse parameter name to isTerminalIncluded: #363
- Reduce the number of paths of change events: #351
- Fix the problem local changes were applied twice: #356
- Update CodeMirror example to handle snapshot events: #360
- Support Quill embeds type to example project: #344
- Fix a bug when overwriting in Object: #349
- Fix incorrect index for nodes newly created then concurrently removed: #334
- Fix initial value bug in counter proxy: #333
- Escape string to return valid json: #330
- Implement array methods with objects: #327
- Improve performance deletion in Text: #326
- Fix a bug when deleting blocks concurrently: #328
- Implement inserting elements with splice() method: #318
- Revert text deletion improvements: #323
- Add read-only Array methods to ArrayProxy: #310
- Add Array.splice to ArrayProxy: #317
- Use types more strictly in Document.update: #314
- Revert Document and Text: #47478e7
- Improve performance deletion in Text: #312, #316
- Remove size cache from RGATreeList and use SplayTree instead: #315
- Fix bug when setting non-string values in Presence: #311
- Expose constructors for user-accessible types
- Refine SDK interface: #300
- Add apiKey option: #295
- Fix incorrect type hint in document.update handler: #289
- Rename Client Metadata to Presence: #293
- Remove collection from document: #292
- Bump up yorkie.proto to 0.2.3
2nd Year Release
- Garbage collection for Text and RichText
- Improve Client's metadata to be updatable
- Improved Peer Awareness
- Supporting TLS and Auth webhook
- Fix a bug where text nodes with tombstones were not counted: #263
- Add Array.toJS() and Object.toJS(): #237
- Print log message more accurately: #5ce95c6, #de05448
- Fix quill example page: #260
- Hide clock from value of peers-changed event
- Improve Client's metadata to be updatable: #240
- Fix reduce array size when deleting the same position: #229
- Handle special characters in keys of the path in change events: #247
- Add client.getStatus and client.Metadata: #162f2d5
- Change getElementByID to return undefined if the element doesnt exist: #208
- Change esnext to ES2019 in compiler target option: #197
- Clean up JS SDK Reference: #181, #218, #219
- Fix a bug where deleted values from objects are revivded after GC: #216
- Add moveFront, moveAfter, moveLast, insertBefore to Array: #194, #203, #206, #207
- Add AuthInterceptor: #199
- Fix the concurrent editing issue of Move Operation: #196
- Fix a bug when pushing an array element in Array: #200
- Delete RequestHeader in Protobuf
- Rename Document.getKey().toIDString() to Document.getKey(): #178
- Only display exported objects in JS SDK Reference: #179
- Rename Document to DocumentReplica: #10f2b72
- Fix a bug occurs when setting an empty string as a key: #182
- Fix a bug that the first element of an array was not deleted: #185
- Fix a bug that the size of the array increases when moving element: #186
- Fix a bug that did not move after pushing in same update: #188
- Pass paths to change events: #162
- Support null and undefined values: #157
- Add type parameter to Document: #148
- Rename getRootObject to getRoot: #158
- Rename updateSelection to select: #170
- Fix error that occurred when deleting value using missing key or index: #149
- Fix invalid states of SplayTree: #153
- Remove errors that occur when insPrev does not exist: #166
- Add customizable metadata for peer awareness: #123
- Add garbage collection for Text and RichText: #137
- Replace the type of client_id to a byte array to reduce payload: #133
- Fix a bug that attributes were lost when splitting RichText nodes: #136
- Add garbage collect for Container type: #101
- Update libs to fix security vulnerability: #103
- Fix quill paragraph style errors: #104
- Change Logger to receive all values: #100
0.1.0 - 2020-11-07
First public release
- Add
Client
andDocument
- Add Custom CRDT data type
Text
for code editor - Add Custom CRDT data type
RichText
for WYSIWYG editor - Add examples: CodeMirror, Drawing, Quill
- Support Network Auto Recovery
- Add Peer Awareness
- Add Custom CRDT data type
Counter