Releases: loro-dev/loro
Releases · loro-dev/loro
[email protected]
Minor Changes
-
10a405b: feat: JSONPath rfc9535 #848
Thanks to @zolero for the thorough implementation of JSONPath support!
LoroDoc now supports querying and mutating document data using JSONPath, following the RFC 9535 specification.
🧩 API
// Execute a JSONPath query on the document doc.JSONPath(path: string): any[];
📚 Query Examples
Example data setup
const doc = new LoroDoc(); const store = doc.getMap("store"); // Simplified setup for illustration purposes store.set("books", [ { title: "1984", author: "George Orwell", price: 10, available: true, isbn: "978-0451524935", }, { title: "Animal Farm", author: "George Orwell", price: 8, available: true, }, { title: "Brave New World", author: "Aldous Huxley", price: 12, available: false, }, { title: "Fahrenheit 451", author: "Ray Bradbury", price: 9, available: true, }, { title: "The Great Gatsby", author: "F. Scott Fitzgerald", price: null, available: true, }, { title: "To Kill a Mockingbird", author: "Harper Lee", price: 11, available: true, }, { title: "The Catcher in the Rye", author: "J.D. Salinger", price: 10, available: false, }, { title: "Lord of the Flies", author: "William Golding", price: 9, available: true, }, { title: "Pride and Prejudice", author: "Jane Austen", price: 7, available: true, }, { title: "The Hobbit", author: "J.R.R. Tolkien", price: 14, available: true, }, ]); store.set("featured_authors", ["George Orwell", "Jane Austen"]);
// 1. Get all book titles doc.JSONPath("$.store.books[*].title"); // → ["1984", "Animal Farm", "Brave New World", "The Hobbit"] // 2. Filter: available books only doc.JSONPath("$.store.books[?(@.available)].title"); // → ["1984", "Animal Farm", "The Hobbit"] // 3. Filter: books with price > 10 doc.JSONPath("$.store.books[?(@.price > 10)].title"); // → ["The Hobbit"] // 4. Use recursive descent to get all prices doc.JSONPath("$..price"); // → [10, 8, 12, 9, null, 11, 14] // 5. Slice syntax: first three books doc.JSONPath("$.store.books[0:3].title"); // → ["1984", "Animal Farm", "Brave New World"] // 6. Membership test: authors in featured list doc.JSONPath("$.store.books[?(@.author in $.store.featured_authors)].title"); // → ["1984", "Animal Farm", "Pride and Prejudice"] // 7. String match using `contains` doc.JSONPath("$.store.books[?(@.title contains 'The')].author"); // → ["F. Scott Fitzgerald", "J.R.R. Tolkien"]
-
10a405b: refactor!: remove deprecated encoding format in v0.x #849
Patch Changes
[email protected]
Minor Changes
-
10a405b: feat: JSONPath rfc9535 #848
Thanks to @zolero for the thorough implementation of JSONPath support!
LoroDoc now supports querying and mutating document data using JSONPath, following the RFC 9535 specification.
🧩 API
// Execute a JSONPath query on the document doc.JSONPath(path: string): any[];
📚 Query Examples
Example data setup
const doc = new LoroDoc(); const store = doc.getMap("store"); // Simplified setup for illustration purposes store.set("books", [ { title: "1984", author: "George Orwell", price: 10, available: true, isbn: "978-0451524935", }, { title: "Animal Farm", author: "George Orwell", price: 8, available: true, }, { title: "Brave New World", author: "Aldous Huxley", price: 12, available: false, }, { title: "Fahrenheit 451", author: "Ray Bradbury", price: 9, available: true, }, { title: "The Great Gatsby", author: "F. Scott Fitzgerald", price: null, available: true, }, { title: "To Kill a Mockingbird", author: "Harper Lee", price: 11, available: true, }, { title: "The Catcher in the Rye", author: "J.D. Salinger", price: 10, available: false, }, { title: "Lord of the Flies", author: "William Golding", price: 9, available: true, }, { title: "Pride and Prejudice", author: "Jane Austen", price: 7, available: true, }, { title: "The Hobbit", author: "J.R.R. Tolkien", price: 14, available: true, }, ]); store.set("featured_authors", ["George Orwell", "Jane Austen"]);
// 1. Get all book titles doc.JSONPath("$.store.books[*].title"); // → ["1984", "Animal Farm", "Brave New World", "The Hobbit"] // 2. Filter: available books only doc.JSONPath("$.store.books[?(@.available)].title"); // → ["1984", "Animal Farm", "The Hobbit"] // 3. Filter: books with price > 10 doc.JSONPath("$.store.books[?(@.price > 10)].title"); // → ["The Hobbit"] // 4. Use recursive descent to get all prices doc.JSONPath("$..price"); // → [10, 8, 12, 9, null, 11, 14] // 5. Slice syntax: first three books doc.JSONPath("$.store.books[0:3].title"); // → ["1984", "Animal Farm", "Brave New World"] // 6. Membership test: authors in featured list doc.JSONPath("$.store.books[?(@.author in $.store.featured_authors)].title"); // → ["1984", "Animal Farm", "Pride and Prejudice"] // 7. String match using `contains` doc.JSONPath("$.store.books[?(@.title contains 'The')].author"); // → ["F. Scott Fitzgerald", "J.R.R. Tolkien"]
-
10a405b: refactor!: remove deprecated encoding format in v0.x #849
Patch Changes
[email protected]
Patch Changes
- 53f5533: Extract sourcemap to another package
[email protected]
Patch Changes
- 53f5533: Extract sourcemap to another package