UNPKG

1.45 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var helpers = require('./helpers.js');
6
7const handler = ({ path, identifier, key, index, i, k }) => ({
8 get(target, property) {
9 let x = helpers.getValueAtPath(path, target);
10
11 // x === the collection
12
13 if (property === identifier) {
14 for (let n in x) {
15 let v = x[n];
16 if (key) {
17 if (v[key] === k) return v
18 } else {
19 if (n == i) return v
20 }
21 }
22 }
23
24 if (property === index) {
25 for (let n in x) {
26 let v = x[n];
27 if (key) {
28 if (v[key] === k) return n
29 } else {
30 if (n == i) return n
31 }
32 }
33 }
34
35 let t = key ? x.find((v) => v[key] === k) : x[i];
36 if (t?.hasOwnProperty?.(property)) return t[property]
37
38 return Reflect.get(...arguments)
39 },
40 set(target, property, value) {
41 let x = helpers.getValueAtPath(path, target);
42 let t = key ? x.find((v) => v[key] === k) : x[i];
43 if (t && !helpers.isPrimitive(t)) {
44 t[property] = value;
45 return true
46 }
47
48 return Reflect.set(...arguments)
49 },
50});
51
52const createContext = (v = []) => {
53 let context = v;
54 return {
55 get: () => context,
56 push: (v) => context.push(v),
57 wrap: (state) => {
58 return context.reduce(
59 (target, ctx) => new Proxy(target, handler(ctx)),
60 state
61 )
62 },
63 }
64};
65
66exports.createContext = createContext;