UNPKG

1.08 kBtext/coffeescriptView Raw
1lenses = require './agson/lenses'
2traversals = require './agson/traversals'
3combinators = require './agson/combinators'
4
5liftThen = (lensf) -> (args...) ->
6 if @lens is lenses.identity
7 new AgsonQuery lensf args...
8 else
9 new AgsonQuery @lens.then lensf args...
10
11run = (f) -> (args...) ->
12 run: (data) =>
13 f(@lens.run(data))(args...)
14
15
16class AgsonQuery
17
18 constructor: (@lens) ->
19 toString: ->
20 "agson(#{@lens.toString()})"
21
22 then: (query) ->
23 new AgsonQuery @lens.then query.lens
24
25 selectMany: (key) ->
26 new AgsonQuery @lens.then lenses.property(key).then traversals.list
27
28 list: liftThen -> traversals.list
29 object: liftThen -> traversals.object
30 property: liftThen lenses.property
31 index: liftThen lenses.property
32
33 where: liftThen (predicate) ->
34 combinators.where (ma) ->
35 ma.map(predicate).getOrElse false
36
37 recurse: ->
38 lens = @lens.then traversals.recurse -> lens
39 new AgsonQuery lens
40
41 get: run (s) -> -> s.get()
42 set: run (s) -> (v) -> s.set v
43 map: run (s) -> (f) -> s.map f
44
45module.exports = new AgsonQuery lenses.identity