cloudcms-server 4.0.0-beta.2 → 4.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -5
- package/cloudcms-server.iml +1 -0
- package/index.js +58 -32
- package/middleware/authentication/authentication.js +40 -12
- package/middleware/authentication/providers/saml.js +8 -4
- package/middleware/awareness/awareness.js +8 -7
- package/middleware/awareness/plugins/api_event.js +105 -0
- package/middleware/awareness/plugins/editorial.js +54 -3
- package/middleware/awareness/plugins/resources.js +13 -5
- package/middleware/config/adapter.js +0 -44
- package/middleware/deployment/deployment.js +22 -24
- package/middleware/driver/driver.js +24 -1
- package/middleware/driver-config/driver-config.js +0 -6
- package/middleware/modules/modules.js +11 -5
- package/middleware/perf/perf.js +3 -2
- package/middleware/registration/registration.js +0 -5
- package/middleware/stores/engines/empty.js +0 -4
- package/middleware/stores/engines/fs-caching-adapter.js +0 -5
- package/middleware/stores/engines/fs.js +0 -9
- package/middleware/stores/engines/s3.js +0 -5
- package/middleware/stores/engines/s3fs.js +0 -5
- package/middleware/stores/multistore.js +0 -29
- package/middleware/stores/store.js +0 -10
- package/middleware/stores/stores.js +2 -2
- package/middleware/virtual-config/virtual-config.js +253 -206
- package/middleware/virtual-files/virtual-files.js +0 -3
- package/middleware/welcome/welcome.js +0 -3
- package/notifications/notifications.js +72 -10
- package/notifications/providers/kafka.js +182 -0
- package/notifications/providers/stomp.js +4 -0
- package/package.json +40 -56
- package/server/index.js +216 -123
- package/server/standalone.js +1 -6
- package/util/auth.js +10 -4
- package/util/cloudcms.js +77 -35
- package/util/loaders.js +113 -0
- package/util/proxy-factory.js +143 -168
- package/util/request.js +6 -2
- package/util/workqueue.js +111 -0
- package/.last_command +0 -7
- package/duster/helpers/core/cloudcms/associations.js +0 -34
- package/duster/helpers/core/cloudcms/beta/markdown.js +0 -46
- package/duster/helpers/core/cloudcms/beta/nodeAttachmentText.js +0 -46
- package/duster/helpers/core/cloudcms/beta/params.js +0 -33
- package/duster/helpers/core/cloudcms/beta/processTemplate.js +0 -82
- package/duster/helpers/core/cloudcms/content.js +0 -34
- package/duster/helpers/core/cloudcms/expand.js +0 -38
- package/duster/helpers/core/cloudcms/form.js +0 -34
- package/duster/helpers/core/cloudcms/query.js +0 -34
- package/duster/helpers/core/cloudcms/queryOne.js +0 -34
- package/duster/helpers/core/cloudcms/relatives.js +0 -34
- package/duster/helpers/core/cloudcms/search.js +0 -34
- package/duster/helpers/core/cloudcms/searchOne.js +0 -34
- package/duster/helpers/core/cloudcms/wcm/dependency.js +0 -83
- package/duster/helpers/core/cloudcms/wcm/fragment.js +0 -34
- package/duster/helpers/core/dev/debug.js +0 -42
- package/duster/helpers/core/dom/block.js +0 -49
- package/duster/helpers/core/dom/include.js +0 -38
- package/duster/helpers/core/dom/layout.js +0 -49
- package/duster/helpers/core/dom/link.js +0 -81
- package/duster/helpers/core/dom/resource.js +0 -77
- package/duster/helpers/core/engine.js +0 -1580
- package/duster/helpers/core/ice/value.js +0 -65
- package/duster/helpers/core/index.js +0 -49
- package/duster/helpers/core/operators/if.js +0 -64
- package/duster/helpers/core/operators/iter.js +0 -45
- package/duster/helpers/core/operators/iterate.js +0 -129
- package/duster/helpers/sample/nyt.js +0 -114
- package/duster/index.js +0 -319
- package/duster/support.js +0 -436
- package/duster/tracker.js +0 -262
- package/middleware/authentication/providers/cas.js +0 -73
- package/middleware/authentication/providers/facebook.js +0 -120
- package/middleware/authentication/providers/github.js +0 -88
- package/middleware/authentication/providers/linkedin.js +0 -112
- package/middleware/authentication/providers/twitter.js +0 -120
- package/middleware/server-tags/server-tags.js +0 -113
- package/middleware/wcm/wcm.js +0 -1437
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @value
|
|
3
|
-
*
|
|
4
|
-
* @param app
|
|
5
|
-
* @param dust
|
|
6
|
-
* @param callback
|
|
7
|
-
*/
|
|
8
|
-
module.exports = function(app, dust, callback)
|
|
9
|
-
{
|
|
10
|
-
var engine = require("../engine")(app, dust);
|
|
11
|
-
var map = engine.map;
|
|
12
|
-
var end = engine.end;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Displays a value and allows for optional in-context editing.
|
|
16
|
-
*
|
|
17
|
-
* Syntax:
|
|
18
|
-
*
|
|
19
|
-
* {@value node="_doc" property="propertyName"}
|
|
20
|
-
* {propertyValue}
|
|
21
|
-
* {/value}
|
|
22
|
-
*
|
|
23
|
-
* @param chunk
|
|
24
|
-
* @param context
|
|
25
|
-
* @param bodies
|
|
26
|
-
* @param params
|
|
27
|
-
*/
|
|
28
|
-
dust.helpers.value = function(chunk, context, bodies, params)
|
|
29
|
-
{
|
|
30
|
-
params = params || {};
|
|
31
|
-
|
|
32
|
-
var nodeId = context.resolve(params.node);
|
|
33
|
-
var propertyId = context.resolve(params.property);
|
|
34
|
-
|
|
35
|
-
return map(chunk, function(chunk) {
|
|
36
|
-
|
|
37
|
-
var req = context.get("req");
|
|
38
|
-
req.branch(function(err, branch) {
|
|
39
|
-
|
|
40
|
-
if (err) {
|
|
41
|
-
return end(chunk, context);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
var repositoryId = branch.getRepositoryId();
|
|
45
|
-
var branchId = branch.getId();
|
|
46
|
-
|
|
47
|
-
var wrapperStart = "<div class='cloudcms-value' data-repository-id='" + repositoryId + "' data-branch-id='" + branchId + "' data-node-id='" + nodeId + "'";
|
|
48
|
-
if (propertyId) {
|
|
49
|
-
wrapperStart += " data-property-id='" + propertyId + "'";
|
|
50
|
-
}
|
|
51
|
-
wrapperStart += ">";
|
|
52
|
-
var wrapperEnd = "</div>";
|
|
53
|
-
|
|
54
|
-
chunk.write(wrapperStart);
|
|
55
|
-
chunk.render(bodies.block, context);
|
|
56
|
-
chunk.write(wrapperEnd);
|
|
57
|
-
|
|
58
|
-
end(chunk, context);
|
|
59
|
-
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
callback();
|
|
65
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core dust tags.
|
|
3
|
-
*
|
|
4
|
-
* @type {Function}
|
|
5
|
-
*/
|
|
6
|
-
module.exports = function(app, dust, callback)
|
|
7
|
-
{
|
|
8
|
-
var filepaths = [
|
|
9
|
-
|
|
10
|
-
"./helpers/core/cloudcms/beta/nodeAttachmentText",
|
|
11
|
-
"./helpers/core/cloudcms/beta/processTemplate",
|
|
12
|
-
"./helpers/core/cloudcms/beta/markdown",
|
|
13
|
-
"./helpers/core/cloudcms/beta/params",
|
|
14
|
-
|
|
15
|
-
"./helpers/core/cloudcms/associations",
|
|
16
|
-
"./helpers/core/cloudcms/content",
|
|
17
|
-
"./helpers/core/cloudcms/form",
|
|
18
|
-
"./helpers/core/cloudcms/query",
|
|
19
|
-
"./helpers/core/cloudcms/queryOne",
|
|
20
|
-
"./helpers/core/cloudcms/relatives",
|
|
21
|
-
"./helpers/core/cloudcms/search",
|
|
22
|
-
"./helpers/core/cloudcms/searchOne",
|
|
23
|
-
"./helpers/core/cloudcms/expand",
|
|
24
|
-
|
|
25
|
-
"./helpers/core/cloudcms/wcm/dependency",
|
|
26
|
-
"./helpers/core/cloudcms/wcm/fragment",
|
|
27
|
-
|
|
28
|
-
"./helpers/core/dev/debug",
|
|
29
|
-
|
|
30
|
-
"./helpers/core/dom/block",
|
|
31
|
-
"./helpers/core/dom/include",
|
|
32
|
-
"./helpers/core/dom/layout",
|
|
33
|
-
"./helpers/core/dom/link",
|
|
34
|
-
"./helpers/core/dom/resource",
|
|
35
|
-
|
|
36
|
-
"./helpers/core/ice/value",
|
|
37
|
-
|
|
38
|
-
"./helpers/core/operators/if",
|
|
39
|
-
"./helpers/core/operators/iter",
|
|
40
|
-
"./helpers/core/operators/iterate"
|
|
41
|
-
|
|
42
|
-
];
|
|
43
|
-
|
|
44
|
-
var support = require("../../support")(dust);
|
|
45
|
-
|
|
46
|
-
support.addHelpers(app, dust, filepaths, function() {
|
|
47
|
-
callback();
|
|
48
|
-
});
|
|
49
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @if
|
|
3
|
-
*
|
|
4
|
-
* @param app
|
|
5
|
-
* @param dust
|
|
6
|
-
* @param callback
|
|
7
|
-
*/
|
|
8
|
-
module.exports = function(app, dust, callback)
|
|
9
|
-
{
|
|
10
|
-
var engine = require("../engine")(app, dust);
|
|
11
|
-
var map = engine.map;
|
|
12
|
-
var end = engine.end;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* It seems ridiculous to me that we should have to add this back in. But it was deprecated in newer versions of
|
|
16
|
-
* dust.js. Logic is sound but frankly, I expect most of our users will want to use @if.
|
|
17
|
-
*
|
|
18
|
-
* @param chunk
|
|
19
|
-
* @param context
|
|
20
|
-
* @param bodies
|
|
21
|
-
* @param params
|
|
22
|
-
* @returns {*}
|
|
23
|
-
*/
|
|
24
|
-
dust.helpers.if = function( chunk, context, bodies, params ){
|
|
25
|
-
|
|
26
|
-
var body = bodies.block;
|
|
27
|
-
var skip = bodies['else'];
|
|
28
|
-
|
|
29
|
-
if( params && params.cond)
|
|
30
|
-
{
|
|
31
|
-
var cond = params.cond;
|
|
32
|
-
cond = context.resolve(cond);
|
|
33
|
-
|
|
34
|
-
// eval expressions with given dust references
|
|
35
|
-
if (eval(cond))
|
|
36
|
-
{
|
|
37
|
-
if (body)
|
|
38
|
-
{
|
|
39
|
-
return chunk.render( bodies.block, context );
|
|
40
|
-
}
|
|
41
|
-
else
|
|
42
|
-
{
|
|
43
|
-
console.log( "Missing body block in the if helper!" );
|
|
44
|
-
return chunk;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (skip)
|
|
49
|
-
{
|
|
50
|
-
return chunk.render( bodies['else'], context );
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// no condition
|
|
54
|
-
else
|
|
55
|
-
{
|
|
56
|
-
console.log( "No condition given in the if helper!" );
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return chunk;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
callback();
|
|
63
|
-
|
|
64
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @iter
|
|
3
|
-
*
|
|
4
|
-
* @param app
|
|
5
|
-
* @param dust
|
|
6
|
-
* @param callback
|
|
7
|
-
*/
|
|
8
|
-
module.exports = function(app, dust, callback)
|
|
9
|
-
{
|
|
10
|
-
var engine = require("../engine")(app, dust);
|
|
11
|
-
var map = engine.map;
|
|
12
|
-
var end = engine.end;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* iterates over keys of an object. Something that Dust apparently is not capable of.
|
|
16
|
-
*
|
|
17
|
-
* Syntax:
|
|
18
|
-
*
|
|
19
|
-
* {@iter obj=jsonObject}
|
|
20
|
-
* type: {$key}
|
|
21
|
-
* value: {$value}
|
|
22
|
-
* type: {$type}
|
|
23
|
-
* {/iter}
|
|
24
|
-
*
|
|
25
|
-
* @param chunk
|
|
26
|
-
* @param context
|
|
27
|
-
* @param bodies
|
|
28
|
-
* @param params
|
|
29
|
-
*/
|
|
30
|
-
dust.helpers.iter = function(chunk, context, bodies, params) {
|
|
31
|
-
|
|
32
|
-
// TODO: there is already an @iterate helper defined in this helper file
|
|
33
|
-
// TODO: do we need another?
|
|
34
|
-
// TODO: {@iterate over=obj}{$key}-{$value} of type {$type}{~n}{/iterate}
|
|
35
|
-
|
|
36
|
-
var obj = context.resolve(params.obj);
|
|
37
|
-
|
|
38
|
-
var params2 = {};
|
|
39
|
-
params2.over = obj;
|
|
40
|
-
|
|
41
|
-
return dust.helpers.iterate(chunk, context, bodies, params2);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
callback();
|
|
45
|
-
};
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @iter
|
|
3
|
-
*
|
|
4
|
-
* @param app
|
|
5
|
-
* @param dust
|
|
6
|
-
* @param callback
|
|
7
|
-
*/
|
|
8
|
-
module.exports = function(app, dust, callback)
|
|
9
|
-
{
|
|
10
|
-
var engine = require("../engine")(app, dust);
|
|
11
|
-
var util = engine.util;
|
|
12
|
-
var map = engine.map;
|
|
13
|
-
var end = engine.end;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Iterate helper, looks over a given object.
|
|
17
|
-
*
|
|
18
|
-
* Example:
|
|
19
|
-
* {@iterate over=obj}{$key}-{$value} of type {$type}{~n}{/iterate}
|
|
20
|
-
*
|
|
21
|
-
* @param key - object of the iteration - Mandatory parameter
|
|
22
|
-
* @param sort - Optional. If omitted, no sort is done. Values allowed:
|
|
23
|
-
* sort="1" - sort ascending (per JavaScript array sort rules)
|
|
24
|
-
* sort="-1" - sort descending
|
|
25
|
-
*/
|
|
26
|
-
dust.helpers.iterate = dust.helpers.it = function(chunk, context, bodies, params)
|
|
27
|
-
{
|
|
28
|
-
params = params || {};
|
|
29
|
-
|
|
30
|
-
var over = context.resolve(params.over);
|
|
31
|
-
if (!over) {
|
|
32
|
-
console.log("Missing over");
|
|
33
|
-
return chunk;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
var sort = context.resolve(params.sort);
|
|
37
|
-
if (typeof(sort) === "undefined") {
|
|
38
|
-
sort = "asc";
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
var body = bodies.block;
|
|
42
|
-
if (!body)
|
|
43
|
-
{
|
|
44
|
-
console.log('Missing body block in the iterate helper.');
|
|
45
|
-
return chunk;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
var asc = function(a, b) {
|
|
49
|
-
return desc(a, b) * -1;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
var desc = function(a, b) {
|
|
53
|
-
if (a.sortable < b.sortable) {
|
|
54
|
-
return 1;
|
|
55
|
-
} else if (a.sortable > b.sortable) {
|
|
56
|
-
return -1;
|
|
57
|
-
}
|
|
58
|
-
return 0;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
var processBody = function(key, value) {
|
|
62
|
-
return body(chunk, context.push({
|
|
63
|
-
$key: key,
|
|
64
|
-
$value: value,
|
|
65
|
-
$type: typeof(value)
|
|
66
|
-
}));
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
if (util.isObject(over) || util.isArray(over))
|
|
70
|
-
{
|
|
71
|
-
if (typeof(params.sort) !== "undefined")
|
|
72
|
-
{
|
|
73
|
-
// construct sort elements
|
|
74
|
-
var elements = [];
|
|
75
|
-
for (var k in over)
|
|
76
|
-
{
|
|
77
|
-
if (over.hasOwnProperty(k))
|
|
78
|
-
{
|
|
79
|
-
var element = {};
|
|
80
|
-
element.key = k;
|
|
81
|
-
element.value = over[k];
|
|
82
|
-
|
|
83
|
-
if (util.isObject(over))
|
|
84
|
-
{
|
|
85
|
-
element.sortable = k;
|
|
86
|
-
}
|
|
87
|
-
else if (util.isArray(over))
|
|
88
|
-
{
|
|
89
|
-
element.sortable = over[k];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
elements.push(element);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// run the sort
|
|
97
|
-
if (sort === "-1" || sort === "desc")
|
|
98
|
-
{
|
|
99
|
-
elements.sort(desc);
|
|
100
|
-
}
|
|
101
|
-
else if (sort === "1" || sort === "asc")
|
|
102
|
-
{
|
|
103
|
-
elements.sort(asc);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// process in order
|
|
107
|
-
for (var i = 0; i < elements.length; i++)
|
|
108
|
-
{
|
|
109
|
-
chunk = processBody(elements[i].key, elements[i].value);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else
|
|
113
|
-
{
|
|
114
|
-
// just do the natural order
|
|
115
|
-
for (var k in over)
|
|
116
|
-
{
|
|
117
|
-
if (over.hasOwnProperty(k))
|
|
118
|
-
{
|
|
119
|
-
chunk = processBody(k, over[k]);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return chunk;
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
callback();
|
|
129
|
-
};
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
var request = require("../../util/request");
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Sample New York Times Events tag for Dust.
|
|
5
|
-
*
|
|
6
|
-
* @type {Function}
|
|
7
|
-
*/
|
|
8
|
-
exports = module.exports = function(app, dust, callback)
|
|
9
|
-
{
|
|
10
|
-
var support = require("../support")(dust);
|
|
11
|
-
|
|
12
|
-
// helper functions
|
|
13
|
-
var isDefined = support.isDefined;
|
|
14
|
-
//var resolveVariables = support.resolveVariables;
|
|
15
|
-
var map = support.map;
|
|
16
|
-
var end = support.end;
|
|
17
|
-
|
|
18
|
-
dust.helpers.nytEvents = function(chunk, context, bodies, params)
|
|
19
|
-
{
|
|
20
|
-
params = params || {};
|
|
21
|
-
|
|
22
|
-
var latitude = dust.helpers.tap(params.latitude, chunk, context);
|
|
23
|
-
var longitude = dust.helpers.tap(params.longitude, chunk, context);
|
|
24
|
-
var radius = dust.helpers.tap(params.radius, chunk, context);
|
|
25
|
-
if (!radius)
|
|
26
|
-
{
|
|
27
|
-
radius = 1000;
|
|
28
|
-
}
|
|
29
|
-
var text = dust.helpers.tap(params.text, chunk, context);
|
|
30
|
-
var limit = dust.helpers.tap(params.limit, chunk, context);
|
|
31
|
-
if (isDefined(limit))
|
|
32
|
-
{
|
|
33
|
-
limit = parseInt(limit);
|
|
34
|
-
}
|
|
35
|
-
var filter = dust.helpers.tap(params.filter, chunk, context)
|
|
36
|
-
|
|
37
|
-
var filters = null;
|
|
38
|
-
if (filter)
|
|
39
|
-
{
|
|
40
|
-
filter = filter.toLowerCase();
|
|
41
|
-
}
|
|
42
|
-
if (filter === "broadway")
|
|
43
|
-
{
|
|
44
|
-
filters = 'category:"Broadway"';
|
|
45
|
-
}
|
|
46
|
-
if (filter === "pick")
|
|
47
|
-
{
|
|
48
|
-
filters = "times_pick:true";
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return map(chunk, function(chunk) {
|
|
52
|
-
setTimeout(function() {
|
|
53
|
-
|
|
54
|
-
var API_KEY = "3d8d573ec0ae966ea57245357cfcf57f:1:70698955";
|
|
55
|
-
|
|
56
|
-
var url = "http://api.nytimes.com/svc/events/v2/listings.json?api-key=" + API_KEY;
|
|
57
|
-
if (latitude && longitude)
|
|
58
|
-
{
|
|
59
|
-
var latLong = latitude + "," + longitude;
|
|
60
|
-
url += "&ll=" + latLong;
|
|
61
|
-
url += "&radius=" + radius;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (text)
|
|
65
|
-
{
|
|
66
|
-
url += "&query=" + text;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (isDefined(limit))
|
|
70
|
-
{
|
|
71
|
-
url += "&limit=" + limit;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (filters)
|
|
75
|
-
{
|
|
76
|
-
url += "&filters=" + filters;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
//console.log("URL:" + url);
|
|
80
|
-
|
|
81
|
-
request(url, function (error, response, json) {
|
|
82
|
-
|
|
83
|
-
if (error || response.status !== 200)
|
|
84
|
-
{
|
|
85
|
-
if (error) {
|
|
86
|
-
console.log("ERROR: " + error);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (response.status !== 200) {
|
|
90
|
-
console.log("STATUS CODE: " + response.status);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
chunk.write("There was an error loading this section");
|
|
94
|
-
end(chunk);
|
|
95
|
-
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
console.log("BODY: " + JSON.stringify(json, null, " "));
|
|
100
|
-
|
|
101
|
-
var resultObject = {
|
|
102
|
-
"rows": json.results
|
|
103
|
-
};
|
|
104
|
-
var newContext = context.push(resultObject);
|
|
105
|
-
|
|
106
|
-
chunk.render(bodies.block, newContext);
|
|
107
|
-
end(chunk, context);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
callback();
|
|
114
|
-
};
|