File: repl.txt

package info (click to toggle)
node-stdlib 0.0.96%2Bds1%2B~cs0.0.429-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 421,476 kB
  • sloc: javascript: 1,562,831; ansic: 109,702; lisp: 49,823; cpp: 27,224; python: 7,871; sh: 6,807; makefile: 6,089; fortran: 3,102; awk: 387
file content (134 lines) | stat: -rw-r--r-- 4,098 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

{{alias}}( target, ...source )
    Merges objects into a target object.

    The target object is mutated.

    Only plain objects are merged and extended. Other values/types are either
    deep copied or assigned.

    Support for deep merging class instances is inherently fragile.

    `Number`, `String`, and `Boolean` objects are merged as primitives.

    Functions are not deep copied.

    Parameters
    ----------
    target: Object
        Target object.

    source: ...Object
        Source objects (i.e., objects to be merged into the target object).

    Returns
    -------
    out: Object
        Merged (target) object.

    Examples
    --------
    > var target = { 'a': 'beep' };
    > var source = { 'a': 'boop', 'b': 'bap' };
    > var out = {{alias}}( target, source )
    { 'a': 'boop', 'b': 'bap' }
    > var bool = ( out === target )
    true


{{alias}}.factory( options )
    Returns a function for merging and extending objects.

    Parameters
    ----------
    options: Object
        Options.

    options.level: integer (optional)
        Merge level. Default: Infinity.

    options.copy: boolean (optional)
        Boolean indicating whether to deep copy merged values. Deep copying
        prevents shared references and source object mutation. Default: true.

    options.override: boolean|Function (optional)
        Defines the merge strategy. If `true`, source object values will always
        override target object values. If `false`, source values never override
        target values (useful for adding, but not overwriting, properties). To
        define a custom merge strategy, provide a function. Default: true.

    options.extend: boolean (optional)
        Boolean indicating whether new properties can be added to the target
        object. If `false`, only shared properties are merged. Default: true.

    Returns
    -------
    fcn: Function
        Function which can be used to merge objects.

    Examples
    --------
    > var opts = {
    ...     'level': 100,
    ...     'copy': true,
    ...     'override': true,
    ...     'extend': true
    ... };
    > var merge = {{alias}}.factory( opts )
    <Function>

    // Set the `level` option to limit the merge depth:
    > merge = {{alias}}.factory( { 'level': 2 } );
    > var target = {
    ...     '1': { 'a': 'beep', '2': { '3': null, 'b': [ 5, 6, 7 ] } }
    ... };
    > var source = {
    ...     '1': { 'b': 'boop', '2': { '3': [ 1, 2, 3 ] } }
    ... };
    > var out = merge( target, source )
    { '1': { 'a': 'beep', 'b': 'boop', '2': { '3': [ 1, 2, 3 ] } } }

    // Set the `copy` option to `false` to allow shared references:
    > merge = {{alias}}.factory( { 'copy': false } );
    > target = {};
    > source = { 'a': [ 1, 2, 3 ] };
    > out = merge( target, source );
    > var bool = ( out.a === source.a )
    true

    // Set the `override` option to `false` to preserve existing properties:
    > merge = {{alias}}.factory( { 'override': false } );
    > target = { 'a': 'beep', 'b': 'boop' };
    > source = { 'a': null, 'c': 'bop' };
    > out = merge( target, source )
    { 'a': 'beep', 'b': 'boop', 'c': 'bop' }

    // Define a custom merge strategy:
    > function strategy( a, b, key ) {
    ...     // a => target value
    ...     // b => source value
    ...     // key => object key
    ...     if ( key === 'a' ) {
    ...         return b;
    ...     }
    ...     if ( key === 'b' ) {
    ...         return a;
    ...     }
    ...     return 'bebop';
    ... };
    > merge = {{alias}}.factory( { 'override': strategy } );
    > target = { 'a': 'beep', 'b': 'boop', 'c': 1234 };
    > source = { 'a': null, 'b': {}, 'c': 'bop' };
    > out = merge( target, source )
    { 'a': null, 'b': 'boop', 'c': 'bebop' }

    // Prevent non-existent properties from being added to the target object:
    > merge = {{alias}}.factory( { 'extend': false } );
    > target = { 'a': 'beep', 'b': 'boop' };
    > source = { 'b': 'hello', 'c': 'world' };
    > out = merge( target, source )
    { 'a': 'beep', 'b': 'hello' }

    See Also
    --------