npm.io
2.0.3 • Published 3 years ago

@tangle/overwrite-fields

Licence
LGPL-3.0-or-later
Version
2.0.3
Deps
2
Size
27 kB
Vulns
0
Weekly
0

@tangle/overwrite-fields

This strategy can be used to handle transformations which are objects which have arbitrarily set keys and values (potentially conforming to some pattern):

const T = {
  '@mix': 'mix irving',
  '@colin': 'Colin Pilborow'
}

Using concat, subfields can be given new values and additional subfields can be added.

overwrite.concat(
  {
    '@mix': 'mixmix',
    '@colin': 'Colin Pilborow'
  },
  {
    '@mix': 'Mix Irving',
    '@cherese': 'Cherese Epinu'
  }
)
// => {
//   '@mix': 'Mix Irving',        // overwrite
//   '@colin': 'Colin Pilborow'
//   '@cherese': 'Cherese Epinu'
// }

The internal implementation means that once a subfield is set, it cannot be unset. If you must erase a field you may want to allow values such as null and then choose to ignore that. This strategy is noncommutative, so it conflicts if the same subfield is set to different values in different branches. A merge is valid if it overwrites all conflicting subfields. see tests for examples.

API

Overwrite(opts) => overwrite

opts Object (optional) can have properties:

  • opts.keyPattern String
    • add a JSON-schema string pattern
    • default: '^.+
  • opts.valueSchema Object
    • add a JSON-schema to validate the values which are allowed to be passed in
    • default: { type: 'string' }
overwrite.schema
overwrite.isValid
overwrite.identity() => I
overwrite.concat(R, S) => T
overwrite.mapFromInput(input, currentTips) => T
overwrite.mapToOutput(T) => state
overwrite.isConflict(graph, nodeIds, field) => Boolean

where:

  • graph is a @tangle/graph instance
  • nodeIds is an Array of nodeIds you're wanting to check for conflict
  • field String contains the the data fields node.data[field] you're checking for conflicts
overwrite.isValidMerge(graph, mergeNode, field) => Boolean

where:

  • graph is a @tangle/graph instance
  • mergeNode is the proposed merge-node
  • field String contains the the data fields node.data[field] you're checking for merge validity
overwrite.merge(graph, mergeNode, field) => T

similar to isValidMerge, but return a transformation, T If it cannot, an error is thrown!

  • __INLINE_CODE_5__ Object
    • add a JSON-schema to validate the values which are allowed to be passed in
    • default: __INLINE_CODE_6__
  • __INLINE_CODE_7__
    __INLINE_CODE_8__
    __INLINE_CODE_9__
    __INLINE_CODE_10__
    __INLINE_CODE_11__
    __INLINE_CODE_12__
    __INLINE_CODE_13__

    where:

    • __INLINE_CODE_14__ is a __INLINE_CODE_15__ instance
    • __INLINE_CODE_16__ is an Array of nodeIds you're wanting to check for conflict
    • __INLINE_CODE_17__ String contains the the data fields __INLINE_CODE_18__ you're checking for conflicts
    __INLINE_CODE_19__

    where:

    • __INLINE_CODE_20__ is a __INLINE_CODE_21__ instance
    • __INLINE_CODE_22__ is the proposed merge-node
    • __INLINE_CODE_23__ String contains the the data fields __INLINE_CODE_24__ you're checking for merge validity
    __INLINE_CODE_25__

    similar to __INLINE_CODE_26__, but return a transformation, __INLINE_CODE_27__ If it cannot, an error is thrown!

    Keywords