1 |
|
2 | if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
|
3 | if (! _$jscoverage['manikin-tools.js']) {
|
4 | _$jscoverage['manikin-tools.js'] = [];
|
5 | _$jscoverage['manikin-tools.js'][2] = 0;
|
6 | _$jscoverage['manikin-tools.js'][3] = 0;
|
7 | _$jscoverage['manikin-tools.js'][5] = 0;
|
8 | _$jscoverage['manikin-tools.js'][8] = 0;
|
9 | _$jscoverage['manikin-tools.js'][10] = 0;
|
10 | _$jscoverage['manikin-tools.js'][11] = 0;
|
11 | _$jscoverage['manikin-tools.js'][12] = 0;
|
12 | _$jscoverage['manikin-tools.js'][13] = 0;
|
13 | _$jscoverage['manikin-tools.js'][14] = 0;
|
14 | _$jscoverage['manikin-tools.js'][15] = 0;
|
15 | _$jscoverage['manikin-tools.js'][18] = 0;
|
16 | _$jscoverage['manikin-tools.js'][19] = 0;
|
17 | _$jscoverage['manikin-tools.js'][20] = 0;
|
18 | _$jscoverage['manikin-tools.js'][21] = 0;
|
19 | _$jscoverage['manikin-tools.js'][22] = 0;
|
20 | _$jscoverage['manikin-tools.js'][25] = 0;
|
21 | _$jscoverage['manikin-tools.js'][26] = 0;
|
22 | _$jscoverage['manikin-tools.js'][29] = 0;
|
23 | _$jscoverage['manikin-tools.js'][30] = 0;
|
24 | _$jscoverage['manikin-tools.js'][31] = 0;
|
25 | _$jscoverage['manikin-tools.js'][37] = 0;
|
26 | _$jscoverage['manikin-tools.js'][38] = 0;
|
27 | _$jscoverage['manikin-tools.js'][40] = 0;
|
28 | _$jscoverage['manikin-tools.js'][41] = 0;
|
29 | _$jscoverage['manikin-tools.js'][43] = 0;
|
30 | _$jscoverage['manikin-tools.js'][44] = 0;
|
31 | _$jscoverage['manikin-tools.js'][45] = 0;
|
32 | _$jscoverage['manikin-tools.js'][46] = 0;
|
33 | _$jscoverage['manikin-tools.js'][47] = 0;
|
34 | _$jscoverage['manikin-tools.js'][49] = 0;
|
35 | _$jscoverage['manikin-tools.js'][54] = 0;
|
36 | _$jscoverage['manikin-tools.js'][55] = 0;
|
37 | _$jscoverage['manikin-tools.js'][56] = 0;
|
38 | _$jscoverage['manikin-tools.js'][57] = 0;
|
39 | _$jscoverage['manikin-tools.js'][58] = 0;
|
40 | _$jscoverage['manikin-tools.js'][60] = 0;
|
41 | _$jscoverage['manikin-tools.js'][63] = 0;
|
42 | _$jscoverage['manikin-tools.js'][64] = 0;
|
43 | _$jscoverage['manikin-tools.js'][65] = 0;
|
44 | _$jscoverage['manikin-tools.js'][66] = 0;
|
45 | _$jscoverage['manikin-tools.js'][67] = 0;
|
46 | _$jscoverage['manikin-tools.js'][69] = 0;
|
47 | _$jscoverage['manikin-tools.js'][72] = 0;
|
48 | _$jscoverage['manikin-tools.js'][73] = 0;
|
49 | _$jscoverage['manikin-tools.js'][74] = 0;
|
50 | _$jscoverage['manikin-tools.js'][75] = 0;
|
51 | _$jscoverage['manikin-tools.js'][76] = 0;
|
52 | _$jscoverage['manikin-tools.js'][77] = 0;
|
53 | _$jscoverage['manikin-tools.js'][78] = 0;
|
54 | _$jscoverage['manikin-tools.js'][79] = 0;
|
55 | _$jscoverage['manikin-tools.js'][80] = 0;
|
56 | _$jscoverage['manikin-tools.js'][83] = 0;
|
57 | _$jscoverage['manikin-tools.js'][84] = 0;
|
58 | _$jscoverage['manikin-tools.js'][87] = 0;
|
59 | _$jscoverage['manikin-tools.js'][88] = 0;
|
60 | _$jscoverage['manikin-tools.js'][90] = 0;
|
61 | _$jscoverage['manikin-tools.js'][93] = 0;
|
62 | _$jscoverage['manikin-tools.js'][94] = 0;
|
63 | _$jscoverage['manikin-tools.js'][95] = 0;
|
64 | _$jscoverage['manikin-tools.js'][96] = 0;
|
65 | _$jscoverage['manikin-tools.js'][97] = 0;
|
66 | _$jscoverage['manikin-tools.js'][98] = 0;
|
67 | _$jscoverage['manikin-tools.js'][99] = 0;
|
68 | _$jscoverage['manikin-tools.js'][100] = 0;
|
69 | _$jscoverage['manikin-tools.js'][101] = 0;
|
70 | _$jscoverage['manikin-tools.js'][102] = 0;
|
71 | _$jscoverage['manikin-tools.js'][107] = 0;
|
72 | _$jscoverage['manikin-tools.js'][115] = 0;
|
73 | _$jscoverage['manikin-tools.js'][116] = 0;
|
74 | _$jscoverage['manikin-tools.js'][117] = 0;
|
75 | _$jscoverage['manikin-tools.js'][118] = 0;
|
76 | _$jscoverage['manikin-tools.js'][120] = 0;
|
77 | _$jscoverage['manikin-tools.js'][121] = 0;
|
78 | _$jscoverage['manikin-tools.js'][122] = 0;
|
79 | _$jscoverage['manikin-tools.js'][129] = 0;
|
80 | _$jscoverage['manikin-tools.js'][130] = 0;
|
81 | _$jscoverage['manikin-tools.js'][131] = 0;
|
82 | _$jscoverage['manikin-tools.js'][132] = 0;
|
83 | _$jscoverage['manikin-tools.js'][139] = 0;
|
84 | _$jscoverage['manikin-tools.js'][140] = 0;
|
85 | _$jscoverage['manikin-tools.js'][141] = 0;
|
86 | _$jscoverage['manikin-tools.js'][142] = 0;
|
87 | _$jscoverage['manikin-tools.js'][149] = 0;
|
88 | _$jscoverage['manikin-tools.js'][150] = 0;
|
89 | _$jscoverage['manikin-tools.js'][152] = 0;
|
90 | _$jscoverage['manikin-tools.js'][153] = 0;
|
91 | _$jscoverage['manikin-tools.js'][154] = 0;
|
92 | _$jscoverage['manikin-tools.js'][155] = 0;
|
93 | _$jscoverage['manikin-tools.js'][156] = 0;
|
94 | _$jscoverage['manikin-tools.js'][159] = 0;
|
95 | _$jscoverage['manikin-tools.js'][160] = 0;
|
96 | _$jscoverage['manikin-tools.js'][161] = 0;
|
97 | _$jscoverage['manikin-tools.js'][162] = 0;
|
98 | _$jscoverage['manikin-tools.js'][168] = 0;
|
99 | _$jscoverage['manikin-tools.js'][169] = 0;
|
100 | _$jscoverage['manikin-tools.js'][170] = 0;
|
101 | _$jscoverage['manikin-tools.js'][171] = 0;
|
102 | _$jscoverage['manikin-tools.js'][172] = 0;
|
103 | _$jscoverage['manikin-tools.js'][173] = 0;
|
104 | _$jscoverage['manikin-tools.js'][175] = 0;
|
105 | _$jscoverage['manikin-tools.js'][176] = 0;
|
106 | _$jscoverage['manikin-tools.js'][177] = 0;
|
107 | _$jscoverage['manikin-tools.js'][178] = 0;
|
108 | _$jscoverage['manikin-tools.js'][185] = 0;
|
109 | _$jscoverage['manikin-tools.js'][187] = 0;
|
110 | _$jscoverage['manikin-tools.js'][188] = 0;
|
111 | _$jscoverage['manikin-tools.js'][189] = 0;
|
112 | _$jscoverage['manikin-tools.js'][190] = 0;
|
113 | _$jscoverage['manikin-tools.js'][192] = 0;
|
114 | _$jscoverage['manikin-tools.js'][199] = 0;
|
115 | }
|
116 | _$jscoverage['manikin-tools.js'][2]++;
|
117 | (function () {
|
118 | _$jscoverage['manikin-tools.js'][3]++;
|
119 | 'use strict';
|
120 | _$jscoverage['manikin-tools.js'][5]++;
|
121 | var desugarModel, getAllIndirectOwners, getAllOwners, _, __slice = [].slice;
|
122 | _$jscoverage['manikin-tools.js'][8]++;
|
123 | _ = require('underscore');
|
124 | _$jscoverage['manikin-tools.js'][10]++;
|
125 | desugarModel = function (modelName, tgt, src, keys) {
|
126 | _$jscoverage['manikin-tools.js'][11]++;
|
127 | return keys.forEach(function (key) {
|
128 | _$jscoverage['manikin-tools.js'][12]++;
|
129 | var obj;
|
130 | _$jscoverage['manikin-tools.js'][13]++;
|
131 | if (typeof src[key] === 'string') {
|
132 | _$jscoverage['manikin-tools.js'][14]++;
|
133 | obj = {};
|
134 | _$jscoverage['manikin-tools.js'][15]++;
|
135 | obj[key] = { type: src[key] };
|
136 | _$jscoverage['manikin-tools.js'][18]++;
|
137 | return desugarModel(modelName, tgt, obj, [key]);
|
138 | } else {
|
139 | _$jscoverage['manikin-tools.js'][19]++;
|
140 | if (!(src[key].type != null)) {
|
141 | _$jscoverage['manikin-tools.js'][20]++;
|
142 | throw new Error('must assign a type: ' + key);
|
143 | } else {
|
144 | _$jscoverage['manikin-tools.js'][21]++;
|
145 | if (src[key].type === 'mixed') {
|
146 | _$jscoverage['manikin-tools.js'][22]++;
|
147 | return tgt[key] = { type: 'mixed' };
|
148 | } else {
|
149 | _$jscoverage['manikin-tools.js'][25]++;
|
150 | if (src[key].type === 'nested') {
|
151 | _$jscoverage['manikin-tools.js'][26]++;
|
152 | tgt[key] = { type: 'nested' };
|
153 | _$jscoverage['manikin-tools.js'][29]++;
|
154 | return desugarModel(modelName, tgt[key], src[key], _.without(Object.keys(src[key]), 'type'));
|
155 | } else {
|
156 | _$jscoverage['manikin-tools.js'][30]++;
|
157 | if (_([
|
158 | 'string',
|
159 | 'number',
|
160 | 'date',
|
161 | 'boolean'
|
162 | ]).contains(src[key].type)) {
|
163 | _$jscoverage['manikin-tools.js'][31]++;
|
164 | tgt[key] = {
|
165 | type: src[key].type,
|
166 | required: !!src[key].required,
|
167 | index: !!src[key].index,
|
168 | unique: !!src[key].unique
|
169 | };
|
170 | _$jscoverage['manikin-tools.js'][37]++;
|
171 | if (src[key]['default'] != null) {
|
172 | _$jscoverage['manikin-tools.js'][38]++;
|
173 | tgt[key]['default'] = src[key]['default'];
|
174 | }
|
175 | _$jscoverage['manikin-tools.js'][40]++;
|
176 | if (src[key].validate != null) {
|
177 | _$jscoverage['manikin-tools.js'][41]++;
|
178 | return tgt[key].validate = src[key].validate;
|
179 | }
|
180 | } else {
|
181 | _$jscoverage['manikin-tools.js'][43]++;
|
182 | if (src[key].type === 'hasOne') {
|
183 | _$jscoverage['manikin-tools.js'][44]++;
|
184 | return tgt[key] = src[key];
|
185 | } else {
|
186 | _$jscoverage['manikin-tools.js'][45]++;
|
187 | if (src[key].type === 'hasMany') {
|
188 | _$jscoverage['manikin-tools.js'][46]++;
|
189 | tgt[key] = src[key];
|
190 | _$jscoverage['manikin-tools.js'][47]++;
|
191 | return tgt[key].inverseName = src[key].inverseName || key;
|
192 | } else {
|
193 | _$jscoverage['manikin-tools.js'][49]++;
|
194 | throw new Error('Invalid type: ' + src[key].type);
|
195 | }
|
196 | }
|
197 | }
|
198 | }
|
199 | }
|
200 | }
|
201 | }
|
202 | });
|
203 | };
|
204 | _$jscoverage['manikin-tools.js'][54]++;
|
205 | getAllOwners = function (specmodels, modelName) {
|
206 | _$jscoverage['manikin-tools.js'][55]++;
|
207 | var indirect, owners;
|
208 | _$jscoverage['manikin-tools.js'][56]++;
|
209 | owners = specmodels[modelName].owners;
|
210 | _$jscoverage['manikin-tools.js'][57]++;
|
211 | indirect = _.values(owners).map(function (model) {
|
212 | _$jscoverage['manikin-tools.js'][58]++;
|
213 | return getAllOwners(specmodels, model);
|
214 | });
|
215 | _$jscoverage['manikin-tools.js'][60]++;
|
216 | return _.extend.apply(_, [
|
217 | {},
|
218 | owners
|
219 | ].concat(__slice.call(indirect)));
|
220 | };
|
221 | _$jscoverage['manikin-tools.js'][63]++;
|
222 | getAllIndirectOwners = function (specmodels, modelName) {
|
223 | _$jscoverage['manikin-tools.js'][64]++;
|
224 | var indirect, owners;
|
225 | _$jscoverage['manikin-tools.js'][65]++;
|
226 | owners = specmodels[modelName].owners;
|
227 | _$jscoverage['manikin-tools.js'][66]++;
|
228 | indirect = _.flatten(_.values(owners).map(function (model) {
|
229 | _$jscoverage['manikin-tools.js'][67]++;
|
230 | return getAllOwners(specmodels, model);
|
231 | }));
|
232 | _$jscoverage['manikin-tools.js'][69]++;
|
233 | return _.extend.apply(_, [{}].concat(__slice.call(indirect)));
|
234 | };
|
235 | _$jscoverage['manikin-tools.js'][72]++;
|
236 | exports.desugar = function (models) {
|
237 | _$jscoverage['manikin-tools.js'][73]++;
|
238 | var rest;
|
239 | _$jscoverage['manikin-tools.js'][74]++;
|
240 | rest = {};
|
241 | _$jscoverage['manikin-tools.js'][75]++;
|
242 | Object.keys(models).forEach(function (modelName) {
|
243 | _$jscoverage['manikin-tools.js'][76]++;
|
244 | var inspec, spec;
|
245 | _$jscoverage['manikin-tools.js'][77]++;
|
246 | spec = {};
|
247 | _$jscoverage['manikin-tools.js'][78]++;
|
248 | inspec = models[modelName].fields || {};
|
249 | _$jscoverage['manikin-tools.js'][79]++;
|
250 | desugarModel(modelName, spec, inspec, Object.keys(inspec));
|
251 | _$jscoverage['manikin-tools.js'][80]++;
|
252 | rest[modelName] = _.extend({}, models[modelName], { fields: spec });
|
253 | _$jscoverage['manikin-tools.js'][83]++;
|
254 | if (!rest[modelName].owners) {
|
255 | _$jscoverage['manikin-tools.js'][84]++;
|
256 | return rest[modelName].owners = {};
|
257 | }
|
258 | });
|
259 | _$jscoverage['manikin-tools.js'][87]++;
|
260 | Object.keys(rest).forEach(function (modelName) {
|
261 | _$jscoverage['manikin-tools.js'][88]++;
|
262 | return rest[modelName].indirectOwners = getAllIndirectOwners(rest, modelName);
|
263 | });
|
264 | _$jscoverage['manikin-tools.js'][90]++;
|
265 | return rest;
|
266 | };
|
267 | _$jscoverage['manikin-tools.js'][93]++;
|
268 | exports.getMeta = function (specmodels) {
|
269 | _$jscoverage['manikin-tools.js'][94]++;
|
270 | var meta;
|
271 | _$jscoverage['manikin-tools.js'][95]++;
|
272 | meta = {};
|
273 | _$jscoverage['manikin-tools.js'][96]++;
|
274 | Object.keys(specmodels).forEach(function (modelName) {
|
275 | _$jscoverage['manikin-tools.js'][97]++;
|
276 | var apa, otherMany, ownMany;
|
277 | _$jscoverage['manikin-tools.js'][98]++;
|
278 | meta[modelName] = meta[modelName] || {};
|
279 | _$jscoverage['manikin-tools.js'][99]++;
|
280 | meta[modelName].owners = _.pairs(specmodels[modelName].owners).map(function (_arg) {
|
281 | _$jscoverage['manikin-tools.js'][100]++;
|
282 | var plur, sing;
|
283 | _$jscoverage['manikin-tools.js'][101]++;
|
284 | sing = _arg[0], plur = _arg[1];
|
285 | _$jscoverage['manikin-tools.js'][102]++;
|
286 | return {
|
287 | sing: sing,
|
288 | plur: plur
|
289 | };
|
290 | });
|
291 | _$jscoverage['manikin-tools.js'][107]++;
|
292 | meta[modelName].fields = [{
|
293 | name: 'id',
|
294 | readonly: true,
|
295 | required: false,
|
296 | type: 'string'
|
297 | }];
|
298 | _$jscoverage['manikin-tools.js'][115]++;
|
299 | meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].fields).filter(function (_arg) {
|
300 | _$jscoverage['manikin-tools.js'][116]++;
|
301 | var k, v;
|
302 | _$jscoverage['manikin-tools.js'][117]++;
|
303 | k = _arg[0], v = _arg[1];
|
304 | _$jscoverage['manikin-tools.js'][118]++;
|
305 | return v.type !== 'hasMany';
|
306 | }).map(function (_arg) {
|
307 | _$jscoverage['manikin-tools.js'][120]++;
|
308 | var k, v;
|
309 | _$jscoverage['manikin-tools.js'][121]++;
|
310 | k = _arg[0], v = _arg[1];
|
311 | _$jscoverage['manikin-tools.js'][122]++;
|
312 | return {
|
313 | name: k,
|
314 | readonly: k === '_id',
|
315 | required: !!v.require,
|
316 | type: v.type
|
317 | };
|
318 | }));
|
319 | _$jscoverage['manikin-tools.js'][129]++;
|
320 | meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].owners).map(function (_arg) {
|
321 | _$jscoverage['manikin-tools.js'][130]++;
|
322 | var k, v;
|
323 | _$jscoverage['manikin-tools.js'][131]++;
|
324 | k = _arg[0], v = _arg[1];
|
325 | _$jscoverage['manikin-tools.js'][132]++;
|
326 | return {
|
327 | name: k,
|
328 | readonly: true,
|
329 | required: true,
|
330 | type: 'string'
|
331 | };
|
332 | }));
|
333 | _$jscoverage['manikin-tools.js'][139]++;
|
334 | meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].indirectOwners).map(function (_arg) {
|
335 | _$jscoverage['manikin-tools.js'][140]++;
|
336 | var k, v;
|
337 | _$jscoverage['manikin-tools.js'][141]++;
|
338 | k = _arg[0], v = _arg[1];
|
339 | _$jscoverage['manikin-tools.js'][142]++;
|
340 | return {
|
341 | name: k,
|
342 | readonly: true,
|
343 | required: true,
|
344 | type: 'string'
|
345 | };
|
346 | }));
|
347 | _$jscoverage['manikin-tools.js'][149]++;
|
348 | meta[modelName].fields = _.sortBy(meta[modelName].fields, function (x) {
|
349 | _$jscoverage['manikin-tools.js'][150]++;
|
350 | return x.name;
|
351 | });
|
352 | _$jscoverage['manikin-tools.js'][152]++;
|
353 | apa = function (modelName) {
|
354 | _$jscoverage['manikin-tools.js'][153]++;
|
355 | return _.pairs(specmodels[modelName].fields).filter(function (_arg) {
|
356 | _$jscoverage['manikin-tools.js'][154]++;
|
357 | var key, value;
|
358 | _$jscoverage['manikin-tools.js'][155]++;
|
359 | key = _arg[0], value = _arg[1];
|
360 | _$jscoverage['manikin-tools.js'][156]++;
|
361 | return value.type === 'hasMany';
|
362 | });
|
363 | };
|
364 | _$jscoverage['manikin-tools.js'][159]++;
|
365 | ownMany = apa(modelName).map(function (_arg) {
|
366 | _$jscoverage['manikin-tools.js'][160]++;
|
367 | var k, v;
|
368 | _$jscoverage['manikin-tools.js'][161]++;
|
369 | k = _arg[0], v = _arg[1];
|
370 | _$jscoverage['manikin-tools.js'][162]++;
|
371 | return {
|
372 | ref: v.model,
|
373 | name: k,
|
374 | inverseName: v.inverseName
|
375 | };
|
376 | });
|
377 | _$jscoverage['manikin-tools.js'][168]++;
|
378 | otherMany = Object.keys(specmodels).map(function (mn) {
|
379 | _$jscoverage['manikin-tools.js'][169]++;
|
380 | var fd;
|
381 | _$jscoverage['manikin-tools.js'][170]++;
|
382 | fd = apa(mn).filter(function (_arg) {
|
383 | _$jscoverage['manikin-tools.js'][171]++;
|
384 | var k, v;
|
385 | _$jscoverage['manikin-tools.js'][172]++;
|
386 | k = _arg[0], v = _arg[1];
|
387 | _$jscoverage['manikin-tools.js'][173]++;
|
388 | return v.model === modelName;
|
389 | });
|
390 | _$jscoverage['manikin-tools.js'][175]++;
|
391 | return fd.map(function (_arg) {
|
392 | _$jscoverage['manikin-tools.js'][176]++;
|
393 | var k, v;
|
394 | _$jscoverage['manikin-tools.js'][177]++;
|
395 | k = _arg[0], v = _arg[1];
|
396 | _$jscoverage['manikin-tools.js'][178]++;
|
397 | return {
|
398 | ref: mn,
|
399 | name: v.inverseName,
|
400 | inverseName: k
|
401 | };
|
402 | });
|
403 | });
|
404 | _$jscoverage['manikin-tools.js'][185]++;
|
405 | return meta[modelName].manyToMany = _.flatten(ownMany.concat(otherMany));
|
406 | });
|
407 | _$jscoverage['manikin-tools.js'][187]++;
|
408 | Object.keys(meta).forEach(function (metaName) {
|
409 | _$jscoverage['manikin-tools.js'][188]++;
|
410 | return meta[metaName].owns = _.flatten(Object.keys(meta).map(function (mn) {
|
411 | _$jscoverage['manikin-tools.js'][189]++;
|
412 | return meta[mn].owners.filter(function (x) {
|
413 | _$jscoverage['manikin-tools.js'][190]++;
|
414 | return x.plur === metaName;
|
415 | }).map(function (x) {
|
416 | _$jscoverage['manikin-tools.js'][192]++;
|
417 | return {
|
418 | name: mn,
|
419 | field: x.sing
|
420 | };
|
421 | });
|
422 | }));
|
423 | });
|
424 | _$jscoverage['manikin-tools.js'][199]++;
|
425 | return meta;
|
426 | };
|
427 | }.call(this));
|
428 | _$jscoverage['manikin-tools.js'].source = ["// Generated by CoffeeScript 1.4.0","(function() {"," \"use strict\";",""," var desugarModel, getAllIndirectOwners, getAllOwners, _,"," __slice = [].slice;",""," _ = require('underscore');",""," desugarModel = function(modelName, tgt, src, keys) {"," return keys.forEach(function(key) {"," var obj;"," if (typeof src[key] === 'string') {"," obj = {};"," obj[key] = {"," type: src[key]"," };"," return desugarModel(modelName, tgt, obj, [key]);"," } else if (!(src[key].type != null)) {"," throw new Error(\"must assign a type: \" + key);"," } else if (src[key].type === 'mixed') {"," return tgt[key] = {"," type: 'mixed'"," };"," } else if (src[key].type === 'nested') {"," tgt[key] = {"," type: 'nested'"," };"," return desugarModel(modelName, tgt[key], src[key], _.without(Object.keys(src[key]), 'type'));"," } else if (_(['string', 'number', 'date', 'boolean']).contains(src[key].type)) {"," tgt[key] = {"," type: src[key].type,"," required: !!src[key].required,"," index: !!src[key].index,"," unique: !!src[key].unique"," };"," if (src[key][\"default\"] != null) {"," tgt[key][\"default\"] = src[key][\"default\"];"," }"," if (src[key].validate != null) {"," return tgt[key].validate = src[key].validate;"," }"," } else if (src[key].type === 'hasOne') {"," return tgt[key] = src[key];"," } else if (src[key].type === 'hasMany') {"," tgt[key] = src[key];"," return tgt[key].inverseName = src[key].inverseName || key;"," } else {"," throw new Error(\"Invalid type: \" + src[key].type);"," }"," });"," };",""," getAllOwners = function(specmodels, modelName) {"," var indirect, owners;"," owners = specmodels[modelName].owners;"," indirect = _.values(owners).map(function(model) {"," return getAllOwners(specmodels, model);"," });"," return _.extend.apply(_, [{}, owners].concat(__slice.call(indirect)));"," };",""," getAllIndirectOwners = function(specmodels, modelName) {"," var indirect, owners;"," owners = specmodels[modelName].owners;"," indirect = _.flatten(_.values(owners).map(function(model) {"," return getAllOwners(specmodels, model);"," }));"," return _.extend.apply(_, [{}].concat(__slice.call(indirect)));"," };",""," exports.desugar = function(models) {"," var rest;"," rest = {};"," Object.keys(models).forEach(function(modelName) {"," var inspec, spec;"," spec = {};"," inspec = models[modelName].fields || {};"," desugarModel(modelName, spec, inspec, Object.keys(inspec));"," rest[modelName] = _.extend({}, models[modelName], {"," fields: spec"," });"," if (!rest[modelName].owners) {"," return rest[modelName].owners = {};"," }"," });"," Object.keys(rest).forEach(function(modelName) {"," return rest[modelName].indirectOwners = getAllIndirectOwners(rest, modelName);"," });"," return rest;"," };",""," exports.getMeta = function(specmodels) {"," var meta;"," meta = {};"," Object.keys(specmodels).forEach(function(modelName) {"," var apa, otherMany, ownMany;"," meta[modelName] = meta[modelName] || {};"," meta[modelName].owners = _.pairs(specmodels[modelName].owners).map(function(_arg) {"," var plur, sing;"," sing = _arg[0], plur = _arg[1];"," return {"," sing: sing,"," plur: plur"," };"," });"," meta[modelName].fields = ["," {"," name: 'id',"," readonly: true,"," required: false,"," type: 'string'"," }"," ];"," meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].fields).filter(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return v.type !== 'hasMany';"," }).map(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return {"," name: k,"," readonly: k === '_id',"," required: !!v.require,"," type: v.type"," };"," }));"," meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].owners).map(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return {"," name: k,"," readonly: true,"," required: true,"," type: 'string'"," };"," }));"," meta[modelName].fields = meta[modelName].fields.concat(_.pairs(specmodels[modelName].indirectOwners).map(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return {"," name: k,"," readonly: true,"," required: true,"," type: 'string'"," };"," }));"," meta[modelName].fields = _.sortBy(meta[modelName].fields, function(x) {"," return x.name;"," });"," apa = function(modelName) {"," return _.pairs(specmodels[modelName].fields).filter(function(_arg) {"," var key, value;"," key = _arg[0], value = _arg[1];"," return value.type === 'hasMany';"," });"," };"," ownMany = apa(modelName).map(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return {"," ref: v.model,"," name: k,"," inverseName: v.inverseName"," };"," });"," otherMany = Object.keys(specmodels).map(function(mn) {"," var fd;"," fd = apa(mn).filter(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return v.model === modelName;"," });"," return fd.map(function(_arg) {"," var k, v;"," k = _arg[0], v = _arg[1];"," return {"," ref: mn,"," name: v.inverseName,"," inverseName: k"," };"," });"," });"," return meta[modelName].manyToMany = _.flatten(ownMany.concat(otherMany));"," });"," Object.keys(meta).forEach(function(metaName) {"," return meta[metaName].owns = _.flatten(Object.keys(meta).map(function(mn) {"," return meta[mn].owners.filter(function(x) {"," return x.plur === metaName;"," }).map(function(x) {"," return {"," name: mn,"," field: x.sing"," };"," });"," }));"," });"," return meta;"," };","","}).call(this);"]; |
\ | No newline at end of file |