aboutsummaryrefslogtreecommitdiff
path: root/node_modules/montage/core/deserializer.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/montage/core/deserializer.js')
-rwxr-xr-xnode_modules/montage/core/deserializer.js352
1 files changed, 277 insertions, 75 deletions
diff --git a/node_modules/montage/core/deserializer.js b/node_modules/montage/core/deserializer.js
index 7e812235..b8ed5618 100755
--- a/node_modules/montage/core/deserializer.js
+++ b/node_modules/montage/core/deserializer.js
@@ -98,6 +98,26 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
98 }}, 98 }},
99 99
100 /** 100 /**
101 Initializes the deserializer with a string
102 @param {String|Object} serialization A string or JSON-style object
103 describing the serialized objects.
104 @param {Function} require The module loader for the containing package.
105 @param {String} origin Usually a file name.
106 */
107 init: {
108 value: function (serialization, require, origin) {
109 if (typeof serialization !== "string") {
110 serialization = JSON.stringify(serialization);
111 }
112 this._reset();
113 this._serializationString = serialization;
114 this._require = require;
115 this._origin = origin;
116 return this;
117 }
118 },
119
120 /**
101 Initializes the deserializer with a string of serialized objects. 121 Initializes the deserializer with a string of serialized objects.
102 @function 122 @function
103 @param {String} string A string of serialized objects. 123 @param {String} string A string of serialized objects.
@@ -122,6 +142,14 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
122 return this; 142 return this;
123 }}, 143 }},
124 144
145 initWithObjectAndRequire: {value: function(string, require, origin) {
146 this._reset();
147 this._serializationString = JSON.stringify(object);
148 this._require = require;
149 this._origin = origin;
150 return this;
151 }},
152
125 /** 153 /**
126 Initializes the deserializer object with a serialization string and the require object used to load the modules containing the object's prototypes. 154 Initializes the deserializer object with a serialization string and the require object used to load the modules containing the object's prototypes.
127 @function 155 @function
@@ -168,8 +196,37 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
168 196
169 return objectsArray; 197 return objectsArray;
170 }}, 198 }},
199
200 chainDeserializer: {
201 value: function(deserializer) {
202 var chainedSerializations = this._chainedSerializations,
203 optimizedIds, chainedOptimizedIds;
204
205 if (!chainedSerializations) {
206 this._chainedSerializations = chainedSerializations = [];
207 }
208
209 chainedSerializations.push({
210 string: deserializer._serializationString,
211 compiledFunction: deserializer._compiledDeserializationFunction,
212 compiledFunctionString: deserializer._compiledDeserializationFunctionString
213 });
214
215 // need to copy the optimized ids too, ideally all chained templates are optimized for the same document
216 chainedOptimizedIds = deserializer._optimizedIds;
217 if (chainedOptimizedIds) {
218 if (!optimizedIds) {
219 this._optimizedIds = optimizedIds = {};
220 }
221 for (var id in chainedOptimizedIds) {
222 optimizedIds[id] = chainedOptimizedIds[id];
223 }
224 }
225 }
226 },
227
171 /** 228 /**
172 This function is to be used in the context of deserializeSelf delegate used for custom object deserializations. 229 This function is to be used in the context of deserializeProperties delegate used for custom object deserializations.
173 It reads an entry from the "properties" serialization unit of the object being deserialized. 230 It reads an entry from the "properties" serialization unit of the object being deserialized.
174 @function 231 @function
175 @param {string} name The name of the entry to be read. 232 @param {string} name The name of the entry to be read.
@@ -182,8 +239,93 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
182 return stack[ix][name]; 239 return stack[ix][name];
183 }}, 240 }},
184 241
242 deserializeProperties: {
243 value: function() {
244 var stack = this._objectStack,
245 ix = stack.length - 1,
246 object = stack[ix-1],
247 desc = stack[ix];
248
249 this._deserializeProperties(object, desc.properties);
250 }
251 },
252
253 getProperty: {
254 value: function(name) {
255 var stack = this._objectStack,
256 ix = stack.length - 1,
257 desc = stack[ix];
258
259 return desc.properties[name];
260 }
261 },
262
263 deserializeUnits: {
264 value: function() {
265 var stack = this._objectStack,
266 ix = stack.length - 1,
267 desc = stack[ix];
268
269 desc._units = this._indexedDeserializationUnits;
270 }
271 },
272
273 deserializeUnit: {
274 value: function(name) {
275 var stack = this._objectStack,
276 ix = stack.length - 1,
277 desc = stack[ix],
278 units;
279
280 if (desc._units) {
281 units = desc._units;
282 } else {
283 desc._units = units = {};
284 }
285
286 units[name] = this._indexedDeserializationUnits[name];
287 }
288 },
289
290 getType: {
291 value: function() {
292 var stack = this._objectStack,
293 ix = stack.length - 1,
294 desc = stack[ix];
295
296 return "object" in desc ? "object" : ("prototype" in desc ? "prototype" : null);
297 }
298 },
299
300 getTypeValue: {
301 value: function() {
302 var stack = this._objectStack,
303 ix = stack.length - 1,
304 desc = stack[ix];
305
306 return desc.object || desc.prototype;
307 }
308 },
309
310 getObjectByLabel: {
311 value: function(label) {
312 return this._objects[label] || this._objectLabels[label];
313 }
314 },
315
316 _customDeserialization: {
317 enumerable: false,
318 value: function(object, desc) {
319 this._pushContextObject(object);
320 this._pushContextObject(desc);
321 object.deserializeSelf(this);
322 this._popContextObject();
323 this._popContextObject();
324 }
325 },
326
185 /** 327 /**
186 This function is to be used in the context of deserializeSelf delegate used for custom object deserializations. 328 This function is to be used in the context of deserializeProperties delegate used for custom object deserializations.
187 It deserializes all the named properties of a serialized object into the object given. 329 It deserializes all the named properties of a serialized object into the object given.
188 @function 330 @function
189 @param {Object} object The target of the properties. 331 @param {Object} object The target of the properties.
@@ -383,7 +525,7 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
383 var serialization = this._serialization, 525 var serialization = this._serialization,
384 moduleIds = this._requiredModuleIds = [], 526 moduleIds = this._requiredModuleIds = [],
385 modules = this._modules, 527 modules = this._modules,
386 desc, moduleId; 528 desc, moduleId, name, objectLocation;
387 529
388 for (var label in serialization) { 530 for (var label in serialization) {
389 desc = serialization[label]; 531 desc = serialization[label];
@@ -391,7 +533,8 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
391 533
392 if ("module" in desc) { 534 if ("module" in desc) {
393 moduleId = desc.module; 535 moduleId = desc.module;
394 } else if (name = /*assignment*/(desc.prototype || desc.object)) { 536 } else if ("prototype" in desc || "object" in desc) {
537 name = desc.prototype || desc.object
395 objectLocation = name.split("["); 538 objectLocation = name.split("[");
396 moduleId = objectLocation[0]; 539 moduleId = objectLocation[0];
397 desc.module = moduleId; 540 desc.module = moduleId;
@@ -437,24 +580,30 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri
437 } 580 }
438 }, 581 },
439 582
583 _labelRegexp: {
584 enumerable: false,
585 value: /^[a-zA-Z_$][0-9a-zA-Z_$]*$/
586 },
587
440/** 588/**
441 @private 589 @private
442*/ 590*/
443 _compileAndDeserialize: {value: function(element, deserialize) { 591 _compileAndDeserialize: {value: function(element, serialization, exports, deserialize) {
444 var self = this, 592 var self = this,
445 serialization,