Composable data framework for ambitious web applications.

Related tags

Database orbit
Overview

Orbit Join the chat at https://gitter.im/orbitjs/orbit.js

Orbit is a composable data framework for managing the complex needs of today's web applications.

Although Orbit is primarily used as a flexible client-side ORM, it can also be used server-side in Node.js.

Orbit is designed for applications that need to:

  • Interact with data from a variety of sources: a REST server, a WebSocket stream, an IndexedDB backup, an in-memory store, etc.

  • Work offline, work online, and seamlessly transition between both modes.

  • Create optimistic and pessimistic user experiences (and even both in the same app).

  • Use a common schema to model data, regardless of its source.

  • Query and update data with a common set of expressions, understood across sources.

  • Track changes deterministically.

  • Fork immutable stores and then merge changes back if and when ready.

  • Support undo / redo.

Orbit is written in Typescript and distributed on npm through the @orbit organization. Pre-built distributions are provided in several module formats and ES language levels.

Docs and Guides

Please visit orbitjs.com to learn how to make the most of Orbit.

Contributing

Orbit's main packages are maintained in this monorepo and managed by lerna.

Installation

Install dependencies:

yarn install

Building

Build distributions for all packages:

yarn build

Testing

Test all packages:

yarn test

Or cd into each package's dir and test it individually in the browser:

cd packages/@orbit/PACKAGE-NAME
yarn testem

License

Copyright 2014-2020 Cerebris Corporation. MIT License (see LICENSE for details).

Comments
  • Offline Mode - Ember

    Offline Mode - Ember

    Hi,

    I'm wondering what the best strategy is to handle offline mode with Orbit.

    Our use case is:

    1. Users enter all form data
    2. Syncs to local storage
    3. Background syncs to server anytime there is network access

    Questions:

    1. How would I go about something like this with Orbit and Ember.
    2. Are there hooks to watch for failed attempts, how can we periodically retry to sync.
    3. What's the best strategy to test for network connectivity before attempting to save, and how could I make the transform connector only work when connection is available?

    Thank you!

    question 
    opened by brancusi 38
  • Consolidate operation encoding and identification

    Consolidate operation encoding and identification

    This PR pulls together operation encoding and identification into a single class, OperationEncoder. The intention is to ensure that operations are created and identified consistently. I've moved the terminology towards that of the schema but I think it could be made even closer (see below).

    Operation identification

    Currently this is handled by various conditions throughout the code such as operation.path.length === 4. This can cause problems however, e.g. I wanted to set a hasMany with

    {op: `add`, path: `planet/planet1/__rel/moons`, value: {}}
    

    but it was being misidentified as an add hasOne.

    The operationEncoder introduces an identify(operation) method which will respond with one of the following: addRecord, replaceRecord, removeRecord, addHasMany, replaceHasMany, removeHasMany, addToHasMany, removeFromHasMany, addHasOne, replaceHasOne, removeHasOne, addAttribute, replaceAttribute, removeAttribute.

    If the operation can't be identified it will throw an OperationNotAllowed error.

    Operation generation

    The operationEncoder introduces the following methods: addRecordOp(), replaceRecordOp(), removeRecordOp(), replaceAttributeOp(), addLinkOp(), removeLinkOp() and updateLinkOp(). The intention is to match the schema semantics as far as possible, the exception being the link operations which I`d perhaps prefer to mirror the identifiers returned by operationEncoder.identify(). This seems like a good place to start though.

    I'm going to continue this PR by swapping out conditionals where appropriate to make use of the identification provided by operationEncoder.identify() but I'm keen to hear what people think about the general direction.

    opened by opsb 26
  • Proposal: extract related inverse operations generation

    Proposal: extract related inverse operations generation

    In orbit-firebase I was previously relying on the memory-source to generate the related inverse operations which were then propagated across to the orbit-firebase source. I'm very happy to see that the inverse operations aren't propagated anymore but it now means that I need to generate the inverse operations inside orbit-firebase.

    Currently the related-inverse-links processor generates inverse operations for a particular link but it doesn't handle the transitive inverse operations (this is handled by the recursive calls to cache.transform).

    Ideally we could extract the recursion from cache.transform so that relatedInverseLinksProcessor.process too care of it. This would mean separating generation of the inverse links and the reverse links (currently they're handled in the same code path) so that we'd end up with something like:

    transform: function(operation){
        var relatedOperations = relatedOperationsLinkProcessor.process(operation);
        this._transformCache(relatedOperations);
        this._addReverseLinks(relatedOperations);
    }
    

    Would need to work dependentOps in there as well somehow (not sure if they could be performed in a batch after the relatedOperations or if they need to be mixed in as they currently are).

    @dgeb how does this sit with you as a general approach?

    opened by opsb 24
  • RFC: Structure of Query results and LiveQuery JSON patches

    RFC: Structure of Query results and LiveQuery JSON patches

    Motivation

    Orbit.js allows both Queries and LiveQueries (realtime queries) to be issued against the Store. This proposal assumes the use of the Orbit Query Language (oql) for issuing queries.

    Examples of store.query() and store.liveQuery()
    const result = store.query({oql: oqe('recordsOfType', 'planet')});
    result === {
      pluto: { type: 'planet', id: 'pluto', attributes: {name: 'Pluto'}
    }
    
    const liveQuery = store.liveQuery({oql: oqe('recordsOfType', 'planet')});
    liveQuery.subscribe(jsonPatchOperation => { 
      // operations received for initial results and changes to results for oqe('recordsOfType')
    })
    

    It's important to note that both the queries and results are expressed as JSON. In the above example oqe() is used as a shortcut to produce JSON e.g.

    oqe('recordsOfType', 'pluto') === {
      op: 'recordsOfType',
      args: ['pluto']
    }
    

    OQL Operators

    Currently the following Object Query Language (OQL) operators exist:

    • recordsOfType(type) => Set of records
    • relatedRecord(type, recordId, hasOneRelationship) => Individual record
    • relatedRecords(type, recordId, hasManyRelationship) => Set of records
    • filter(setOfRecords, predicateFunction) => Set of records
    • get(relativePath) => valueExpression (path is relative to the current record for the filter function)
    • and(predicationFunction, predicationFunction, …predicateFunction) => predicateFunction
    • or(predicationFunction, predicationFunction, …predicateFunction) => predicateFunction
    • equal(value, value, …value) => predicateFunction

    It's also desireable to add operators similar to the following:

    • count(setOrArray) => Integer
    • pluck(arrayOfRecords) => Array of values
    • distinct(array) => Set of values
    • orderBy(setOrArrayOfRecords, valueExpression) => orderedArrayOfRecords

    These operators may be composed, e.g.

    const oql = 
      oqe('filter', 
        oqe('recordsOfType', 'moon'), 
          oqe('equal', 
            get('attributes/name'),          
            'Callisto'));
    
    store.query({oql}) === setOfPlanetsAssociatedWithMoons;
    

    While Query results may be any JSON structure, when considering integration between different operators and with orbit.js consumers (e.g. ember-orbit) it's useful to specify some commonly used structures and corresponding JSON Patch operations (for use with LiveQueries). This allows implementations to achieve full interop while requiring a minimum of inputs/outputs to be handled.


    # Proposal
    ## Overview

    The following Structures and JSON Patch operations would be recognised as 'first class' meaning that operator implementations and app/libraries that conform to them can guarantee good interoperation.

    Structures

    • Individual records or values
    • Sets of records or values
    • Arrays of records or values

    JSON Patch operations

    | Helper | JSON | | --- | --- | | replaceResult(anyStructure) | {op: 'replace', path: '.', value: anyStructure} | | addResult(recordOrValue) | {op: 'add', path: './recordOrValueHash', value: value} | | removeResult(recordOrValue) | {op: 'remove', path: './recordOrValueHash'} | | insertResultAt(index, recordOrValue) | {'add', path: './${index}', value: recordOrValue} | | removeResultAt(index) | {'remove'}, path: './${index}' |


    Detailed description of supported Structures/JSON Patch operations


    ## Individual records or values #### Structure
    recordOrValue
    

    JSON Patch operations

    | Helper | JSON | | --- | --- | | replaceResult(record) | {op: 'replace', path: '.', value: recordOrValue} |

    Query examples

    Record
    oqe('relatedRecord', 'moon', 'io', 'planet')
    

    =>

    {type: 'planet', id: 'io', attributes: {name: 'Jupiter'}}
    
    Value
    oqe('count', oqe('recordsOfType', 'planet'))
    

    =>

    8
    

    ## Set of records or values

    As JSON doesn't support Sets natively it's necessary to add the semantics. These semantics are added by using a JSON object where the records or values are stored against keys which are calculated by determining a hash for the record or value.

    Given the two common cases are:

    1. A Set of records

    2. A Set of values that can be easily converted to Strings

    We could perhaps use an implementation like:

    Orbit.jsonHash = function(json) {
      if(json.type && json.id) return `${json.type}:${json.id}`;
      if(!isObject(json)) return JSON.stringify(json); 
      return Orbit.fallbackJsonHash(json); // JSON.stringify is non deterministic for objects so we can't use it in the general case
    }
    
    Orbit.fallbackJsonHash = someSlowerButMoreGenericJsonHashingFunction;
    // could perhaps throw a "fallbackJsonHash function required" error by default.
    

    This gives us fast hash values with an extension point so that an orbit.js consumer may provide a function that's fast for their particular data.

    Structure

    {record1Hash: record1, record2Hash: record2} {value1Hash: value1, value2Hash: value2}

    JSON Patch operations

    | Helper | JSON | | --- | --- | | replaceResult([array, of, results]) | {op: 'replace', path: '.', value: {record1Hash: record1, record2Hash: record2}} | | addResult(record) | {op: 'add', path: 'recordHash', value: record} | | removeResult(record) | {op: 'remove', path: 'recordHash'} |

    edit: replaceResult([array, of, results]) needs some thought as it requires conversion from an Array to a Set. As replaceResult is also to replace an Array it's not clear how it would know which structure to return. edit: As it's a helper we could perhaps pass an ES6 Set in i.e. replaceResult(new Set([1, 2])), not the cleanest signature though...

    Query examples

    Records
    oqe('recordsOfType', 'planet')
    

    =>

    {
      "jupiter": {type: 'planet', id: 'jupiter', attributes: {name: 'Jupiter'}}, 
      "pluto" {type: 'planet', id: 'pluto', attributes: {name: 'Pluto'}}
    }
    
    Values
    oqe('distinct', oqe('pluck', oqe('recordsOfType', 'planet'), 'attributes/name'))
    

    =>

    {Mercury: 'Mercury', Venus: 'Venus', Earth: 'Earth', Mars: 'Mars'}
    

    ## Array of records or values #### Structure
    [array, of, records, or, values]
    

    JSON Patch operations

    | Helper | JSON | | --- | --- | | replaceResult(recordOrValue) | {'replace', path: '.', value: arrayOfRrecordsOrValues} | | insertResultAt(index, recordOrValue) | {'add', path: './${index}', value: recordOrValue} | | removeResultAt(index) | {'remove'}, path: './${index}' |

    Query examples

    oqe('pluck', oqe('recordsOfType', 'planet'), 'attributes/name')
    

    =>

    ['Mercury', 'Venus', 'Earth', 'Mars']

    opened by opsb 21
  • Transform refactor

    Transform refactor

    Edit: Updated to reflect changes as of Aug. 12

    This represents a significant change to the Transformable interface and expectations for sources that implement it.

    The concept of a "transform" has been codified in the Transform class, which represents an array of operations to be applied against a source. Transforms are considered immutable. Once they are applied, their id and operations should not change.

    Limiting sources to performing a single operation at a time maximum was previously a severe limitation for sources such as the JSONAPISource. Each source now has the ability to merge and coalesce operations as it sees fit, and then perform as many of them together as possible (e.g. through a single ajax request).

    The _transform method should now return either a TransformResult or a promise that resolves to a TransformResult. Previously, sources were expected to call didTransform as they performed transformations, but this has been deprecated. A TransformResult contains an array of completed operations as well as an array of inverseOperations.

    The transformed method has been introduced for sources to call when they experience transformations besides those requested via transform. This is useful both for sources that spontaneously receive data and for sources that perform operations additional to the ones requested. The transformed method takes a single argument: a TransformResult. Any calls to didTransform made outside of a request to transform should now be changed to invoke transformed.

    The didTransform event is still triggered when a source changes, either from a call to transform or transformed. Event handlers can expect two arguments: a Transform and a TransformResult.

    I realize that this includes a number of breaking changes, but I believe the architecture is now much cleaner and more capable.

    opened by dgeb 21
  • AngularJS Integration

    AngularJS Integration

    Hi. First at all, thanks for this great package.

    I'm currently working on a project using AngularJS and I've looked for an integration example with Orbit with no results. Do you have any example which illustrates that integration? Can the configuration option Orbit.Promise take a $q reference or it's not possible?

    Thanks in advance.

    opened by eduardmartinez 18
  • Proposal to refactor `Requestable` interface into `Queryable` interface.

    Proposal to refactor `Requestable` interface into `Queryable` interface.

    In my experience, "requestable" methods that mutate a source, such as add, remove, and update, are not appropriate for assisting / rescuing. Instead, these methods provide thin wrappers over transform, and the Transformable interface provides the best way to engage with mutations.

    The "requestable" methods that are in fact appropriate for assisting / rescuing are all related to querying a source: find, query, findLink, and findLinked. I think all these methods could be distilled into a single query method, given the right query definition language (see #192).

    I believe we should refactor the Requestable interface into a Queryable interface that supports a single query method. This will nicely parallel the Transformable interface that supports a single transform method.

    The query method will take two arguments: a query object and an options object. The query object might be as simple as specifying path: '/planets' or path: '/planets/1' or it might involve filters and conditionals (still TBD). It's possible that options should simply be a member of the query object instead of a separate argument.

    I believe that this simplification will keep sources as lean and standardized as possible.

    Convenience methods such as add, remove, update, and find could be added to a new class Store. A store will wrap a memory source (with a cache of course), and will be the primary interface developers use to interact with data. Behind the scenes, other sources can be wired up with their much simplified interfaces.

    Major credit to @gnarf and @opsb for discussions that led to thinking about this new direction.

    I'm in the midst of updating the normalized form (as per #157), which seems to make all this much more feasible.

    opened by dgeb 18
  • Add actsAsOrderedSet

    Add actsAsOrderedSet

    @dgeb this is still a work in progress, I've made the updates to orbit.js and the tests look good. I had a quick go at integrating it with ember-orbit in an app I'm working on but it looks like I'll need to spend some time looking at how ember-orbit and orbit.js integrate tomorrow. I've put this up in case you get a chance to review.

    opened by opsb 18
  • Implement live query on @orbit/record-cache

    Implement live query on @orbit/record-cache

    This a new proposition to introduce query observers. This one is not relying on any known interface such as RX or async iterator. It uses orbit events. It does expose an LiveQuery interface, but it is simply an object with a subscribe method with returns a subscription with an unsubscribe method.

    The current one has a downside of looking like an RX/Zen Observable but not being one. I am worried it might confuse folks. One option I considered is to pass the callback directly to liveQuery method, but it makes it for a complex signature because of optional options and id arguments...

    What do you think @dgeb?

    enhancement 
    opened by tchak 17
  • Update normalized form to follow JSON API

    Update normalized form to follow JSON API

    I'd like to update Orbit's normalized form to follow the document structure defined by JSON API.

    Instead of flattening attributes, relationships, and keys at a single level, I'd like to structure them as follows:

    {
      type: 'planet',
      id: '29e127ea-fb2b-4f7d-9f49-3d502f31d74a',
      attributes: {
        name: 'Jupiter',
        classification: 'gas giant'
      },
      relationships: {
        moons: {
          data: [
            {type: 'moon', id: '13567508-f2a9-4db4-b895-49273ea42009'},
            {type: 'moon', id: '76897508-f2a9-4db4-b895-49273ea42123'}
          ]
        }
      }
    }
    

    Some details:

    • type - the record type (i.e. model name)
    • id - the value of the primary key (note that this is Orbit's primary key)
    • attributes - attributes, previously stored at the record root
    • relationships - relationships, previously stored as __rel

    Advantages

    Moving to this normalized form should provide the following benefits:

    • The structure allows for much more to be determined in sources semantically without requiring constant references to the schema.
    • The structure is extensible and allows for links and meta information.
    • It should pave the way for supporting heterogeneous collections and polymorphic relationships.
    • The JSONAPISerializer should largely be a noop.

    TBD

    Secondary keys (e.g. remote IDs) could be stored either:

    • in a separate keys object for each resource, or
    • exclusively in a map shared centrally by sources.

    If stored in a map, the map's contents will need to be extractable so it can be kept in browser storage.

    I'm leaning towards using a separate keys object for simplicity and consistency. Obviously, this element would only be needed for schema that use secondary keys.

    opened by dgeb 17
  • Add per model ID mapping and modelDefaults

    Add per model ID mapping and modelDefaults

    Adds per model ID field mapping support via a new Schema option: modelDefaults. This is used for specifying default schema attributes and links (including ID fields) for all models in the schema.

    Since ID mapping is now per model, the id mapping concern has been integrated into the Schema class and the type lookup based IdMap removed.

    An MIT licensed v4 UUID implementation has been added and made the default id generator.

    Tests have been enhanced.

    Addresses issues raised in #42

    opened by ahacking 17
  • Iterate more correctly over localStorage keys

    Iterate more correctly over localStorage keys

    Check for "inverseRels" keys when iterating over localStorage. This means we won't accidentally end up with inverse relationship data as part of the records we return from a call to findRecords() without a type argument. This was causing normalization errors when trying to restore all records from a localStorage backup.

    Also switches from for...in to for...of as this allows polyfills to control iteration via the Symbol.iterator property on the localStorage object.

    opened by ApexDevelopment 0
  • Bump express from 4.17.1 to 4.18.2

    Bump express from 4.17.1 to 4.18.2

    Bumps express from 4.17.1 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump qs from 6.5.2 to 6.5.3

    Bump qs from 6.5.2 to 6.5.3

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2

    Bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump loader-utils from 2.0.0 to 2.0.4 in /website

    Bump loader-utils from 2.0.0 to 2.0.4 in /website

    Bumps loader-utils from 2.0.0 to 2.0.4.

    Release notes

    Sourced from loader-utils's releases.

    v2.0.4

    2.0.4 (2022-11-11)

    Bug Fixes

    v2.0.3

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)

    v2.0.2

    2.0.2 (2021-11-04)

    Bug Fixes

    • base64 generation and unicode characters (#197) (8c2d24e)

    v2.0.1

    2.0.1 (2021-10-29)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    2.0.4 (2022-11-11)

    Bug Fixes

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)

    2.0.2 (2021-11-04)

    Bug Fixes

    • base64 generation and unicode characters (#197) (8c2d24e)

    2.0.1 (2021-10-29)

    Bug Fixes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump socket.io-parser from 3.3.2 to 3.3.3

    Bump socket.io-parser from 3.3.2 to 3.3.3

    Bumps socket.io-parser from 3.3.2 to 3.3.3.

    Changelog

    Sourced from socket.io-parser's changelog.

    3.3.3 (2022-11-09)

    Bug Fixes

    • check the format of the index of each attachment (fb21e42)

    3.4.2 (2022-11-09)

    Bug Fixes

    • check the format of the index of each attachment (04d23ce)

    4.2.1 (2022-06-27)

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    4.0.5 (2022-06-27)

    Bug Fixes

    • check the format of the index of each attachment (b559f05)

    4.2.0 (2022-04-17)

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    4.1.2 (2022-02-17)

    Bug Fixes

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v0.17.2)
  • v0.17.2(Mar 6, 2022)

  • v0.17.1(Mar 1, 2022)

    Changelog

    :bug: Bug Fix

    • @orbit/indexeddb
      • #932 IndexedDBCache: Fix handling of empty operations array (@dgeb)
    • @orbit/jsonapi
      • #925 Ensure that fetch errors always throw errors that contain response [jsonapi] (@dgeb)

    :memo: Documentation

    • #928 Fix incorrect uses of "relationship" instead of "relation" in filtering docs (@bradjones1)
    • #924 Refinements to v0.17 docs (@dgeb)

    :house: Internal

    Committers: 2

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Jan 31, 2022)

  • v0.17.0-beta.28(Jan 30, 2022)

  • v0.17.0-beta.27(Jan 30, 2022)

  • v0.17.0-beta.26(Jan 22, 2022)

    Changelog

    :boom: Breaking Change

    • @orbit/record-cache, @orbit/records
      • #915 Introduce autoValidate setting for RecordCache and RecordSource (@dgeb)
    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/jsonapi, @orbit/records

    :rocket: Enhancement

    • @orbit/indexeddb
      • #916 Encourage use of useBuffer: true for improved IndexedDB write performance (@dgeb)
    • @orbit/record-cache, @orbit/records
      • #915 Introduce autoValidate setting for RecordCache and RecordSource (@dgeb)
    • @orbit/core
      • #913 Use crypto.randomUUID by default for Orbit.uuid (@dgeb)
    • @orbit/build, @orbit/core, @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory
      • #911 Improve building of JSONAPI fetch params (@dgeb)
    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/jsonapi, @orbit/records
    • @orbit/record-cache, @orbit/records, @orbit/validators
      • #896 Expand validation error descriptions (@dgeb)

    :memo: Documentation

    • @orbit/records
      • #919 Mark KeyDefinition#primaryKey deprecated (@dgeb)
    • Other

    :house: Internal

    Committers: 2

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.25(Aug 12, 2021)

    Changelog

    :rocket: Enhancement

    • @orbit/jsonapi
      • #883 [jsonapi] Introduce partialSet request option (@dgeb)
      • #882 JSONAPISource: Allow multiple consecutive removeFromRelatedRecords ops to be coalesced (@dgeb)
    • @orbit/indexeddb
      • #881 IndexedDBCache: Provide a naive, idempotent default implementation of migrateDB (@dgeb)
    • @orbit/memory
      • #877 Introduce MemorySource#reset (@dgeb)
      • #876 MemoryCache#reset now resets state to match its base cache, if present (@dgeb)

    :house: Internal

    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/serializers, @orbit/utils
      • #884 Add top-level LICENSE file and update all copyright dates (@dgeb)
    • Other

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.24(Jul 26, 2021)

    Changelog

    :rocket: Enhancement

    • @orbit/memory
      • #873 Introduce new fork / merge possibilities in MemorySource and MemoryCache (@dgeb)

    :memo: Documentation

    :house: Internal

    • Other
    • @orbit/integration-tests, @orbit/record-cache
      • #871 Fill out tests to improve checking update responses (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.23(Jul 18, 2021)

  • v0.17.0-beta.22(Jul 16, 2021)

    Changelog

    :bug: Bug Fix

    • @orbit/jsonapi
      • #867 Ensure JSONAPISource query and update return arrays to match array requests (@dgeb)
    • @orbit/validators
      • #866 validateObject should not accept null as a valid object (@dgeb)

    :memo: Documentation

    • Other
    • @orbit/records

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.21(Jul 7, 2021)

  • v0.17.0-beta.20(Jul 4, 2021)

  • v0.17.0-beta.19(Jul 3, 2021)

    Changelog

    :boom: Breaking Change

    • @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #855 Allow for explicit "singular" requests (queries / transforms) (@dgeb)

    :rocket: Enhancement

    • @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #855 Allow for explicit "singular" requests (queries / transforms) (@dgeb)
    • @orbit/core, @orbit/data, @orbit/local-storage-bucket, @orbit/utils
      • #854 Improve typings for core interfaces (@dgeb)
    • @orbit/memory
      • #853 Improve MemorySource#merge typings and deprecate transformOptions (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.18(Jun 22, 2021)

  • v0.17.0-beta.17(Jun 11, 2021)

    Changelog

    :bug: Bug Fix

    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory
      • #848 Fix sharing of validatorFor function between record sources and caches, and memory sources and forks (@dgeb)
    • @orbit/data
      • #847 Fix data-only response from update when a transform has already been applied (@dgeb)

    :house: Internal

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.16(May 22, 2021)

    Changelog

    :rocket: Enhancement

    • @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/validators
      • #842 Introduce @orbit/validators and record-specific validators (@dgeb)
    • @orbit/jsonapi, @orbit/records, @orbit/serializers
      • #837 Refinement of serialization options (@dgeb)
    • @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/utils
    • @orbit/data
      • #832 Deprecate Pullable and Pushable interfaces (@dgeb)
    • @orbit/coordinator, @orbit/core, @orbit/indexeddb-bucket, @orbit/jsonapi, @orbit/record-cache, @orbit/records
      • #831 Add debug setting to Orbit global (@dgeb)
    • @orbit/data, @orbit/records
      • #830 Support use of a transform builder in Syncable (@dgeb)
    • @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #828 Deprecate Record interface in favor of InitializedRecord (@dgeb)
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory
      • #827 Allow record-cache-based sources to define a custom cacheClass (@dgeb)
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #822 Introduce RecordTransformBuffer for improving performance and atomicity of cache updates (@dgeb)

    :house: Internal

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.15(Mar 7, 2021)

    :boom: Important: Action is needed to update existing @orbit/indexeddb databases. :boom:

    This release includes an update to the @orbit/indexeddb package which fixes a potential data integrity issue that's fully described in #823. Please read the details in that PR.

    This also includes an improvement (#821) to IndexedDB performance in which bulk operations (get/put/delete) are performed simultaneously rather than serially for bulk operations. Only the last request needs an onsuccess handler. This approach is not only more performant but much more robust when applying very large (> 5000 record) updates.

    Changelog

    :rocket: Enhancement

    • @orbit/indexeddb
      • #826 Add fallback and error logging guidance to improve PR 823 (@dgeb)
      • #821 Improve bulk IndexedDB performance (@dgeb)

    :bug: Bug Fix

    • @orbit/indexeddb
      • #823 Fix IndexedDBCache getInverseRelationshipsAsync (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.16.8(Mar 7, 2021)

    :boom: Important: Action is needed to update existing @orbit/indexeddb databases. :boom:

    This release includes an update to the @orbit/indexeddb package which fixes a potential data integrity issue that's fully described in #825. Please read the details in that PR.

    Changelog

    :bug: Bug Fix

    • @orbit/indexeddb

    :house: Internal

    • #824 Update release-0-16 branch to use GH actions (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.14(Feb 22, 2021)

    Publishes a new version of all packages that reflects the updated tsconfig settings.

    Changelog

    :house: Internal

    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/serializers, @orbit/utils
      • #820 Move all tsconfig settings to each package (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.13(Feb 22, 2021)

    Changelog

    :rocket: Enhancement

    • Other
      • #819 tsconfig: enable alwaysStrict + noFallthroughCasesInSwitch options (@dgeb)
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory, @orbit/record-cache
      • #818 Introduce raiseNotFoundException option for transform requests (@dgeb)

    :house: Internal

    • @orbit/record-cache
      • #817 Fill in tests for update for sync+async caches (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.12(Feb 17, 2021)

    With this release, all of Orbit's standard sources now support the Queryable and Updatable interfaces. Thus, you can now call query or update against an IndexedDBSource or LocalStorageSource in the same way that you can query or update a MemorySource or JSONAPISource. Furthermore, all caches now support query and update (some sync and some async), so there is broad consistency across the board. 🎉

    As mentioned in #813:

    This will allow for the deprecation of Pullable and Pushable, now that equivalent results can be achieved via query and update calls with the fullResponse: true option. Reducing the number of interfaces per-source should be a nice simplification that allows for more flexibility.

    These deprecations should happen just prior to, or following, the final release of v0.17 (i.e. very soon).

    Changelog

    :rocket: Enhancement

    • @orbit/coordinator
      • #814 Coordinator: Allow generic typing of getStrategy & getSource (@dgeb)
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory
      • #813 Implement Queryable + Updatable across all cache-based sources (@dgeb)

    :house: Internal

    • @orbit/build, @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/serializers, @orbit/utils

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.11(Feb 11, 2021)

  • v0.17.0-beta.10(Feb 11, 2021)

    A few minor enhancements intended to smooth the way to using all the new features in the previous beta.

    Changelog

    :rocket: Enhancement

    • @orbit/records
      • #811 Use generics in typing record query/transform results (@dgeb)
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #810 Ensure that query/transform options are shared between sources and their caches (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.9(Feb 9, 2021)

    This is perhaps the most major "beta" release in orbit's history. It fulfills a number of long-requested goals:

    • [BREAKING] Moves the record-specific interfaces in @orbit/data into their own package: @orbit/records. Unfortunately, this will require a number of imports to be refactored, and is a breaking change. However, this refactor was necessary to make sense of the massive TypeScript interface improvements needed to support the rest of this PR. It also paves the way to use orbit with document-centric, rather than record-centric, protocols. See #794 for details.

    • [BREAKING] Another breaking change has been made to allow for consistent handling of "not found" errors across sources. The default behavior is to now return undefined for queries instead of raising a RecordNotFoundException. This makes it possible to issue multiple query expressions at once without worrying that a single record not found will prevent access to the rest of the results. If you'd like to continue to raise RecordNotFoundException in these cases, use the raiseNotFoundExceptions: true option. This can be set per-query, or per-expression, or as a default option for a source via the defaultQueryOptions setting.

    • Adds support for more detailed, full responses from requests. Using the fullResponse: true option, you can now request details such as the full response document for JSONAPISource queries and updates. See #794 for details.

    • Ensures consistency between the query and update interfaces used by both caches and sources (with the exception that synchronous caches of course still return results immediately). The patch method has been deprecated for caches. Again, part of #794.

    • Support for parallel fetch requests for multi-expression queries and multi-operation updates made to the JSONAPISource. By default, queries will be run in parallel now, while transform operations will still run in series. See #806.

    More details and examples will be provided in the full v0.17 release notes.

    Changelog

    :boom: Breaking Change

    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #794 Extract @orbit/records from @orbit/data and introduce full, detailed responses across all sources and caches (@dgeb)

    :rocket: Enhancement

    • @orbit/core, @orbit/indexeddb, @orbit/local-storage, @orbit/memory, @orbit/records
      • #808 Ensure that schema + source upgrades are reliably async (@dgeb)
    • @orbit/core, @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #807 Improve typings via separate interface definitions, overloaded methods, and more generics (@dgeb)
    • @orbit/integration-tests, @orbit/jsonapi
      • #806 JSONAPISource: Introduce parallelRequests option (@dgeb)
    • @orbit/data, @orbit/jsonapi
      • #805 Improve usage of transform / query options (@dgeb)
    • @orbit/data, @orbit/integration-tests
      • #804 Remove includeSources request option (@dgeb)
    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records
      • #794 Extract @orbit/records from @orbit/data and introduce full, detailed responses across all sources and caches (@dgeb)
    • @orbit/jsonapi
      • #793 Update operations serializers to follow atomic operations extention (@tchak)
    • @orbit/memory
      • #795 Improve perf by cloning only newly added relationship (@enspandi)
    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/serializers, @orbit/utils
      • #789 Further improvements in typings (@dgeb)

    :house: Internal

    • @orbit/build, @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/records, @orbit/serializers, @orbit/utils
      • #809 Add publishConfig settings to package.json (@dgeb)
    • Other
      • #802 CI: Separate lint+compile job from test job (@dgeb)
      • #800 Switch CI from Travis to Github (@dgeb)
    • @orbit/jsonapi
      • #792 Add multi-expression/operation tests for jsonapi (@dgeb)
    • @orbit/jsonapi, @orbit/record-cache
      • #791 Separate extra-long test modules into multiple modules (@dgeb)

    Committers: 3

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.8(Sep 27, 2020)

    Changelog

    :rocket: Enhancement

    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/serializers, @orbit/utils
    • @orbit/data
      • #784 Introduce UninitializedRecord interface, with optional id (@dgeb)

    :memo: Documentation

    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/indexeddb-bucket, @orbit/local-storage-bucket, @orbit/memory, @orbit/utils
      • #787 Remove redundant / unnecessary type-related comments (@dgeb)
    • @orbit/utils
      • #786 Deprecate merge, extend, and expose utility fns (@dgeb)
    • @orbit/data
      • #785 Deprecate inflectors (singularize/pluralize) on Schema (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.7(Sep 16, 2020)

    This beta release contains a fix to the mergeOperations function, which is especially important when merging a fork of a memory source back into its root. addRecord + updateRecord operations are now fully coalesced (#780). Thanks to @chbonser for reporting and creating a failing test.

    Also included are a few refinements to the new serializers in @orbit/jsonapi. Now, by default, attributes of type object, array, and unknown (i.e. undefined) will be handled by the NoopSerializer, so the values will be passed through "as-is" on serialization / deserialization. This behavior can be overridden per type, but should provide a smoother transition for developers who had used these types, or no types, to define attributes in their schemas in v0.16.

    Changelog

    :rocket: Enhancement

    • @orbit/jsonapi
      • #783 [jsonapi] Register object and array types to use NoopSerializer by default (@dgeb)
      • #775 Add unknown serializer (@tchak)

    :bug: Bug Fix

    • @orbit/data
      • #780 Support coalescing of addRecord/updateRecord + updateRecord (@dgeb)

    :house: Internal

    • @orbit/build, @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/serializers, @orbit/utils
    • @orbit/record-cache
      • #776 Expand record-cache tests for liveQuery (@dgeb)

    Committers: 3

    Source code(tar.gz)
    Source code(zip)
  • v0.16.7(Sep 14, 2020)

    This release backports PR #780 to v0.16. This addresses an issue in mergeOperations in which addRecord and updateRecord operations were not being merged with subsequent updateRecord operations for the same record.

    Many thanks to @chbonser for finding this bug and preparing a failing test in #777.

    :bug: Bug Fix

    • @orbit/data

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.5(Jul 31, 2020)

    This beta release solves a few issues remaining from v0.17.0-beta.4:

    • Fixes an oversight in which the deprecated jsonapi-serializer module was no longer exported from @orbit/jsonapi.
    • Exposes several methods on the JSONAPISource related to transform and query request processing, as well as the supporting lib modules, to allow for easier customization on a per-request level.
    • Expands recordDiffs to handle all possible record fields. For @orbit/jsonapi this will allow any server-driven changes to a record, including fields such as meta and links, to flow back to other sources as updates to records.

    Changelog

    :rocket: Enhancement

    • @orbit/data
      • #772 Fill out recordDiffs implementation (@dgeb)
    • @orbit/jsonapi
      • #771 Expand exports in @orbit/jsonapi (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0-beta.4(Jul 27, 2020)

    This is the fourth, and likely final, beta release for v0.17. The extensive contents of this release will be covered in depth in a release post for v0.17. Please review the changelog below and follow up with any questions or problems you encounter.

    Changelog

    :boom: Breaking Change

    • @orbit/integration-tests, @orbit/jsonapi
    • @orbit/core, @orbit/data, @orbit/indexeddb, @orbit/jsonapi, @orbit/memory, @orbit/record-cache, @orbit/utils

    :rocket: Enhancement

    • @orbit/data, @orbit/jsonapi, @orbit/memory, @orbit/record-cache
      • #765 Add options to QueryExpression and Operation (@tchak)
    • @orbit/integration-tests, @orbit/jsonapi
    • @orbit/serializers, @orbit/utils
      • #761 Introduce inflectors to @orbit/serializers (@dgeb)
    • @orbit/jsonapi, @orbit/serializers
    • @orbit/indexeddb, @orbit/local-storage, @orbit/memory
      • #759 cache settings as part of source settings should be partial (@tchak)

    :bug: Bug Fix

    • @orbit/memory, @orbit/record-cache
      • #762 Fix cache integrity processors' handling of relationships without explicit inverses. (@dgeb)
    • @orbit/indexeddb
      • #752 Finish opening/upgrading indexeddb dbs before closing them (@dgeb)

    :house: Internal

    • @orbit/build
    • @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache
      • #766 Refactor internal modules to remove default module exports (@dgeb)
    • Other
      • #764 Upgrade build dependencies (except snowpack) (@dgeb)
      • #753 Test on travis with updated ubuntu (and thus updated Chrome) (@dgeb)
    • @orbit/build, @orbit/coordinator, @orbit/core, @orbit/data, @orbit/identity-map, @orbit/immutable, @orbit/indexeddb-bucket, @orbit/indexeddb, @orbit/integration-tests, @orbit/jsonapi, @orbit/local-storage-bucket, @orbit/local-storage, @orbit/memory, @orbit/record-cache, @orbit/serializers, @orbit/utils
    • @orbit/integration-tests
      • #748 Reintroduce @orbit/integration-tests (@dgeb)

    Committers: 2

    Source code(tar.gz)
    Source code(zip)
  • v0.16.6(Jul 24, 2020)

    This release backports PR #762 to v0.16. This fixes a bug in the cache integrity processors' handling of relationships without explicit inverse declarations. It ensures that relationship bookkeeping is done properly on both ends (see #760 to understand a failure case).

    :bug: Bug Fix

    • @orbit/record-cache
      • #763 Backport PR 762 to v0.16 (Fix cache integrity processors' handling of relationships without explicit inverses) (@dgeb)

    Committers: 1

    Source code(tar.gz)
    Source code(zip)
A progressive Node.js framework for building efficient and scalable server-side applications

A progressive Node.js framework for building efficient and scalable server-side applications. Description Nest framework TypeScript starter repository

Gustavo Lopes 3 Oct 31, 2022
An example repository on how to start building graph applications on streaming data. Just clone and start building 💻 💪

Example Streaming App ?? ?? This repository serves as a point of reference when developing a streaming application with Memgraph and a message broker

Memgraph 40 Dec 20, 2022
A transparent, in-memory, streaming write-on-update JavaScript database for Small Web applications that persists to a JavaScript transaction log.

JavaScript Database (JSDB) A zero-dependency, transparent, in-memory, streaming write-on-update JavaScript database for the Small Web that persists to

Small Technology Foundation 237 Nov 13, 2022
PathQL is a json standard based on GraphQL to build simple web applications.

PathQL Usage You can simple create a new PathQL Entry, which allows you to automize database over an orm and client requests over the PathQL JSON Requ

Nowhere 3 Jul 20, 2022
Nodeparse - A lightweight, vanilla replacement for Express framework when parsing the HTTP body's data or parsing the URL parameters and queries with NodeJS.

nodeparse A lightweight, vanilla replacement for Express framework when parsing the HTTP body's data or parsing the URL parameters and queries with No

Trần Quang Kha 1 Jan 8, 2022
AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.

Please use version 1.x as prior versions has a security flaw if you use user generated data to concat your SQL strings instead of providing them as a

Andrey Gershun 6.1k Jan 9, 2023
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.

Azure Data Studio is a data management tool that enables working with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.

Microsoft 7k Dec 31, 2022
🔄 A realtime Database for JavaScript Applications

RxDB A realtime Database for JavaScript Applications RxDB (short for Reactive Database) is a NoSQL-database for JavaScript Applications like Websites,

Daniel Meyer 18.6k Dec 31, 2022
Cli created by shoulders to facilitate the development of Nest.js applications that use our seed!

Nest CLZ Your CLI by Shoulders to create a backend started with nest-seed Installation We will launch the application soon! Using npm: npm i -g nest-c

Shoulders 2 Mar 22, 2022
Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express.

Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express.

Jared Hanson 5 Oct 11, 2022
Jsynchronous.js - Data synchronization for games and real-time web apps.

Jsynchronous.js Synchronize your rapidly changing app state with all connected browsers. Jsynchronous ensures all clients see the same data as what’s

Sirius 111 Dec 16, 2022
Type Driven Database Framework.

cosmotype Type Driven Database Framework. Features Compatibility. Complete driver-independent. Supports many drivers with a unified API. Powerful. It

null 8 Dec 15, 2022
Memcached module for Nest framework (node.js) 🐈

Memcached module and service for Nest, a progressive Node.js framework for building efficient and scalable server-side applications. Installation npm

Andrea Francesco Speziale 11 Nov 24, 2022
An open source cybersecurity protocol for syncing decentralized graph data.

GUN is an ecosystem of tools that let you build community run and encrypted applications. Currently, Internet Archive and HackerNoon run GUN in produc

Mark Nadal 16.7k Dec 27, 2022
TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite databases.

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite datab

MikroORM 5.4k Dec 31, 2022
:green_book: SheetJS Community Edition -- Spreadsheet Data Toolkit

SheetJS js-xlsx Parser and writer for various spreadsheet formats. Pure-JS cleanroom implementation from official specifications, related documents, a

SheetJS 32k Jan 9, 2023
Bluzelle is a smart, in-memory data store. It can be used as a cache or as a database.

SwarmDB ABOUT SWARMDB Bluzelle brings together the sharing economy and token economy. Bluzelle enables people to rent out their computer storage space

Bluzelle 225 Dec 31, 2022
Add hic et nunc data into your websites and Node.js scripts

hic et nunc API Guide Build websites and Node.js scripts with hic et nunc data hic et nunc is a decentralized NFT marketplace built on the Tezos block

Ian Petrarca 34 May 3, 2022
Python ELT Studio, an application for building ELT (and ETL) data flows.

PELT Studio The Python Extract, Load, Transform Studio is an application for performing ELT (and ETL) tasks. Under the hood the application consists o

Schlerp 55 Nov 18, 2022