UNPKG

73.7 kBJavaScriptView Raw
1/* automatically generated by jscov - do not edit */
2if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
3if (! _$jscoverage['manikin-mongodb.js']) {
4 _$jscoverage['manikin-mongodb.js'] = [];
5 _$jscoverage['manikin-mongodb.js'][2] = 0;
6 _$jscoverage['manikin-mongodb.js'][3] = 0;
7 _$jscoverage['manikin-mongodb.js'][5] = 0;
8 _$jscoverage['manikin-mongodb.js'][8] = 0;
9 _$jscoverage['manikin-mongodb.js'][10] = 0;
10 _$jscoverage['manikin-mongodb.js'][12] = 0;
11 _$jscoverage['manikin-mongodb.js'][14] = 0;
12 _$jscoverage['manikin-mongodb.js'][15] = 0;
13 _$jscoverage['manikin-mongodb.js'][16] = 0;
14 _$jscoverage['manikin-mongodb.js'][17] = 0;
15 _$jscoverage['manikin-mongodb.js'][18] = 0;
16 _$jscoverage['manikin-mongodb.js'][20] = 0;
17 _$jscoverage['manikin-mongodb.js'][21] = 0;
18 _$jscoverage['manikin-mongodb.js'][24] = 0;
19 _$jscoverage['manikin-mongodb.js'][25] = 0;
20 _$jscoverage['manikin-mongodb.js'][26] = 0;
21 _$jscoverage['manikin-mongodb.js'][28] = 0;
22 _$jscoverage['manikin-mongodb.js'][29] = 0;
23 _$jscoverage['manikin-mongodb.js'][30] = 0;
24 _$jscoverage['manikin-mongodb.js'][33] = 0;
25 _$jscoverage['manikin-mongodb.js'][34] = 0;
26 _$jscoverage['manikin-mongodb.js'][35] = 0;
27 _$jscoverage['manikin-mongodb.js'][37] = 0;
28 _$jscoverage['manikin-mongodb.js'][41] = 0;
29 _$jscoverage['manikin-mongodb.js'][42] = 0;
30 _$jscoverage['manikin-mongodb.js'][45] = 0;
31 _$jscoverage['manikin-mongodb.js'][46] = 0;
32 _$jscoverage['manikin-mongodb.js'][47] = 0;
33 _$jscoverage['manikin-mongodb.js'][48] = 0;
34 _$jscoverage['manikin-mongodb.js'][50] = 0;
35 _$jscoverage['manikin-mongodb.js'][55] = 0;
36 _$jscoverage['manikin-mongodb.js'][56] = 0;
37 _$jscoverage['manikin-mongodb.js'][57] = 0;
38 _$jscoverage['manikin-mongodb.js'][58] = 0;
39 _$jscoverage['manikin-mongodb.js'][59] = 0;
40 _$jscoverage['manikin-mongodb.js'][60] = 0;
41 _$jscoverage['manikin-mongodb.js'][62] = 0;
42 _$jscoverage['manikin-mongodb.js'][67] = 0;
43 _$jscoverage['manikin-mongodb.js'][68] = 0;
44 _$jscoverage['manikin-mongodb.js'][69] = 0;
45 _$jscoverage['manikin-mongodb.js'][70] = 0;
46 _$jscoverage['manikin-mongodb.js'][72] = 0;
47 _$jscoverage['manikin-mongodb.js'][73] = 0;
48 _$jscoverage['manikin-mongodb.js'][75] = 0;
49 _$jscoverage['manikin-mongodb.js'][76] = 0;
50 _$jscoverage['manikin-mongodb.js'][77] = 0;
51 _$jscoverage['manikin-mongodb.js'][78] = 0;
52 _$jscoverage['manikin-mongodb.js'][80] = 0;
53 _$jscoverage['manikin-mongodb.js'][82] = 0;
54 _$jscoverage['manikin-mongodb.js'][85] = 0;
55 _$jscoverage['manikin-mongodb.js'][88] = 0;
56 _$jscoverage['manikin-mongodb.js'][89] = 0;
57 _$jscoverage['manikin-mongodb.js'][90] = 0;
58 _$jscoverage['manikin-mongodb.js'][91] = 0;
59 _$jscoverage['manikin-mongodb.js'][92] = 0;
60 _$jscoverage['manikin-mongodb.js'][95] = 0;
61 _$jscoverage['manikin-mongodb.js'][96] = 0;
62 _$jscoverage['manikin-mongodb.js'][97] = 0;
63 _$jscoverage['manikin-mongodb.js'][98] = 0;
64 _$jscoverage['manikin-mongodb.js'][99] = 0;
65 _$jscoverage['manikin-mongodb.js'][100] = 0;
66 _$jscoverage['manikin-mongodb.js'][101] = 0;
67 _$jscoverage['manikin-mongodb.js'][102] = 0;
68 _$jscoverage['manikin-mongodb.js'][103] = 0;
69 _$jscoverage['manikin-mongodb.js'][104] = 0;
70 _$jscoverage['manikin-mongodb.js'][105] = 0;
71 _$jscoverage['manikin-mongodb.js'][106] = 0;
72 _$jscoverage['manikin-mongodb.js'][109] = 0;
73 _$jscoverage['manikin-mongodb.js'][110] = 0;
74 _$jscoverage['manikin-mongodb.js'][112] = 0;
75 _$jscoverage['manikin-mongodb.js'][113] = 0;
76 _$jscoverage['manikin-mongodb.js'][115] = 0;
77 _$jscoverage['manikin-mongodb.js'][116] = 0;
78 _$jscoverage['manikin-mongodb.js'][117] = 0;
79 _$jscoverage['manikin-mongodb.js'][118] = 0;
80 _$jscoverage['manikin-mongodb.js'][119] = 0;
81 _$jscoverage['manikin-mongodb.js'][120] = 0;
82 _$jscoverage['manikin-mongodb.js'][121] = 0;
83 _$jscoverage['manikin-mongodb.js'][123] = 0;
84 _$jscoverage['manikin-mongodb.js'][129] = 0;
85 _$jscoverage['manikin-mongodb.js'][130] = 0;
86 _$jscoverage['manikin-mongodb.js'][132] = 0;
87 _$jscoverage['manikin-mongodb.js'][133] = 0;
88 _$jscoverage['manikin-mongodb.js'][136] = 0;
89 _$jscoverage['manikin-mongodb.js'][137] = 0;
90 _$jscoverage['manikin-mongodb.js'][138] = 0;
91 _$jscoverage['manikin-mongodb.js'][139] = 0;
92 _$jscoverage['manikin-mongodb.js'][140] = 0;
93 _$jscoverage['manikin-mongodb.js'][143] = 0;
94 _$jscoverage['manikin-mongodb.js'][149] = 0;
95 _$jscoverage['manikin-mongodb.js'][150] = 0;
96 _$jscoverage['manikin-mongodb.js'][151] = 0;
97 _$jscoverage['manikin-mongodb.js'][152] = 0;
98 _$jscoverage['manikin-mongodb.js'][153] = 0;
99 _$jscoverage['manikin-mongodb.js'][155] = 0;
100 _$jscoverage['manikin-mongodb.js'][156] = 0;
101 _$jscoverage['manikin-mongodb.js'][157] = 0;
102 _$jscoverage['manikin-mongodb.js'][159] = 0;
103 _$jscoverage['manikin-mongodb.js'][160] = 0;
104 _$jscoverage['manikin-mongodb.js'][161] = 0;
105 _$jscoverage['manikin-mongodb.js'][162] = 0;
106 _$jscoverage['manikin-mongodb.js'][163] = 0;
107 _$jscoverage['manikin-mongodb.js'][164] = 0;
108 _$jscoverage['manikin-mongodb.js'][165] = 0;
109 _$jscoverage['manikin-mongodb.js'][169] = 0;
110 _$jscoverage['manikin-mongodb.js'][170] = 0;
111 _$jscoverage['manikin-mongodb.js'][171] = 0;
112 _$jscoverage['manikin-mongodb.js'][173] = 0;
113 _$jscoverage['manikin-mongodb.js'][174] = 0;
114 _$jscoverage['manikin-mongodb.js'][175] = 0;
115 _$jscoverage['manikin-mongodb.js'][176] = 0;
116 _$jscoverage['manikin-mongodb.js'][177] = 0;
117 _$jscoverage['manikin-mongodb.js'][183] = 0;
118 _$jscoverage['manikin-mongodb.js'][184] = 0;
119 _$jscoverage['manikin-mongodb.js'][185] = 0;
120 _$jscoverage['manikin-mongodb.js'][186] = 0;
121 _$jscoverage['manikin-mongodb.js'][187] = 0;
122 _$jscoverage['manikin-mongodb.js'][188] = 0;
123 _$jscoverage['manikin-mongodb.js'][189] = 0;
124 _$jscoverage['manikin-mongodb.js'][191] = 0;
125 _$jscoverage['manikin-mongodb.js'][197] = 0;
126 _$jscoverage['manikin-mongodb.js'][198] = 0;
127 _$jscoverage['manikin-mongodb.js'][199] = 0;
128 _$jscoverage['manikin-mongodb.js'][200] = 0;
129 _$jscoverage['manikin-mongodb.js'][201] = 0;
130 _$jscoverage['manikin-mongodb.js'][202] = 0;
131 _$jscoverage['manikin-mongodb.js'][203] = 0;
132 _$jscoverage['manikin-mongodb.js'][208] = 0;
133 _$jscoverage['manikin-mongodb.js'][209] = 0;
134 _$jscoverage['manikin-mongodb.js'][210] = 0;
135 _$jscoverage['manikin-mongodb.js'][211] = 0;
136 _$jscoverage['manikin-mongodb.js'][214] = 0;
137 _$jscoverage['manikin-mongodb.js'][215] = 0;
138 _$jscoverage['manikin-mongodb.js'][216] = 0;
139 _$jscoverage['manikin-mongodb.js'][217] = 0;
140 _$jscoverage['manikin-mongodb.js'][218] = 0;
141 _$jscoverage['manikin-mongodb.js'][221] = 0;
142 _$jscoverage['manikin-mongodb.js'][222] = 0;
143 _$jscoverage['manikin-mongodb.js'][223] = 0;
144 _$jscoverage['manikin-mongodb.js'][226] = 0;
145 _$jscoverage['manikin-mongodb.js'][227] = 0;
146 _$jscoverage['manikin-mongodb.js'][230] = 0;
147 _$jscoverage['manikin-mongodb.js'][231] = 0;
148 _$jscoverage['manikin-mongodb.js'][234] = 0;
149 _$jscoverage['manikin-mongodb.js'][235] = 0;
150 _$jscoverage['manikin-mongodb.js'][238] = 0;
151 _$jscoverage['manikin-mongodb.js'][239] = 0;
152 _$jscoverage['manikin-mongodb.js'][243] = 0;
153 _$jscoverage['manikin-mongodb.js'][244] = 0;
154 _$jscoverage['manikin-mongodb.js'][251] = 0;
155 _$jscoverage['manikin-mongodb.js'][261] = 0;
156 _$jscoverage['manikin-mongodb.js'][262] = 0;
157 _$jscoverage['manikin-mongodb.js'][263] = 0;
158 _$jscoverage['manikin-mongodb.js'][264] = 0;
159 _$jscoverage['manikin-mongodb.js'][265] = 0;
160 _$jscoverage['manikin-mongodb.js'][266] = 0;
161 _$jscoverage['manikin-mongodb.js'][267] = 0;
162 _$jscoverage['manikin-mongodb.js'][268] = 0;
163 _$jscoverage['manikin-mongodb.js'][270] = 0;
164 _$jscoverage['manikin-mongodb.js'][271] = 0;
165 _$jscoverage['manikin-mongodb.js'][272] = 0;
166 _$jscoverage['manikin-mongodb.js'][273] = 0;
167 _$jscoverage['manikin-mongodb.js'][274] = 0;
168 _$jscoverage['manikin-mongodb.js'][275] = 0;
169 _$jscoverage['manikin-mongodb.js'][276] = 0;
170 _$jscoverage['manikin-mongodb.js'][280] = 0;
171 _$jscoverage['manikin-mongodb.js'][281] = 0;
172 _$jscoverage['manikin-mongodb.js'][282] = 0;
173 _$jscoverage['manikin-mongodb.js'][283] = 0;
174 _$jscoverage['manikin-mongodb.js'][284] = 0;
175 _$jscoverage['manikin-mongodb.js'][291] = 0;
176 _$jscoverage['manikin-mongodb.js'][292] = 0;
177 _$jscoverage['manikin-mongodb.js'][299] = 0;
178 _$jscoverage['manikin-mongodb.js'][300] = 0;
179 _$jscoverage['manikin-mongodb.js'][301] = 0;
180 _$jscoverage['manikin-mongodb.js'][304] = 0;
181 _$jscoverage['manikin-mongodb.js'][306] = 0;
182 _$jscoverage['manikin-mongodb.js'][307] = 0;
183 _$jscoverage['manikin-mongodb.js'][309] = 0;
184 _$jscoverage['manikin-mongodb.js'][310] = 0;
185 _$jscoverage['manikin-mongodb.js'][311] = 0;
186 _$jscoverage['manikin-mongodb.js'][312] = 0;
187 _$jscoverage['manikin-mongodb.js'][313] = 0;
188 _$jscoverage['manikin-mongodb.js'][314] = 0;
189 _$jscoverage['manikin-mongodb.js'][315] = 0;
190 _$jscoverage['manikin-mongodb.js'][316] = 0;
191 _$jscoverage['manikin-mongodb.js'][317] = 0;
192 _$jscoverage['manikin-mongodb.js'][318] = 0;
193 _$jscoverage['manikin-mongodb.js'][319] = 0;
194 _$jscoverage['manikin-mongodb.js'][320] = 0;
195 _$jscoverage['manikin-mongodb.js'][321] = 0;
196 _$jscoverage['manikin-mongodb.js'][323] = 0;
197 _$jscoverage['manikin-mongodb.js'][324] = 0;
198 _$jscoverage['manikin-mongodb.js'][328] = 0;
199 _$jscoverage['manikin-mongodb.js'][329] = 0;
200 _$jscoverage['manikin-mongodb.js'][331] = 0;
201 _$jscoverage['manikin-mongodb.js'][333] = 0;
202 _$jscoverage['manikin-mongodb.js'][334] = 0;
203 _$jscoverage['manikin-mongodb.js'][335] = 0;
204 _$jscoverage['manikin-mongodb.js'][338] = 0;
205 _$jscoverage['manikin-mongodb.js'][339] = 0;
206 _$jscoverage['manikin-mongodb.js'][340] = 0;
207 _$jscoverage['manikin-mongodb.js'][341] = 0;
208 _$jscoverage['manikin-mongodb.js'][342] = 0;
209 _$jscoverage['manikin-mongodb.js'][343] = 0;
210 _$jscoverage['manikin-mongodb.js'][344] = 0;
211 _$jscoverage['manikin-mongodb.js'][345] = 0;
212 _$jscoverage['manikin-mongodb.js'][346] = 0;
213 _$jscoverage['manikin-mongodb.js'][347] = 0;
214 _$jscoverage['manikin-mongodb.js'][349] = 0;
215 _$jscoverage['manikin-mongodb.js'][352] = 0;
216 _$jscoverage['manikin-mongodb.js'][356] = 0;
217 _$jscoverage['manikin-mongodb.js'][357] = 0;
218 _$jscoverage['manikin-mongodb.js'][358] = 0;
219 _$jscoverage['manikin-mongodb.js'][359] = 0;
220 _$jscoverage['manikin-mongodb.js'][361] = 0;
221 _$jscoverage['manikin-mongodb.js'][362] = 0;
222 _$jscoverage['manikin-mongodb.js'][364] = 0;
223 _$jscoverage['manikin-mongodb.js'][369] = 0;
224 _$jscoverage['manikin-mongodb.js'][370] = 0;
225 _$jscoverage['manikin-mongodb.js'][371] = 0;
226 _$jscoverage['manikin-mongodb.js'][372] = 0;
227 _$jscoverage['manikin-mongodb.js'][374] = 0;
228 _$jscoverage['manikin-mongodb.js'][375] = 0;
229 _$jscoverage['manikin-mongodb.js'][377] = 0;
230 _$jscoverage['manikin-mongodb.js'][381] = 0;
231 _$jscoverage['manikin-mongodb.js'][382] = 0;
232 _$jscoverage['manikin-mongodb.js'][383] = 0;
233 _$jscoverage['manikin-mongodb.js'][384] = 0;
234 _$jscoverage['manikin-mongodb.js'][385] = 0;
235 _$jscoverage['manikin-mongodb.js'][386] = 0;
236 _$jscoverage['manikin-mongodb.js'][387] = 0;
237 _$jscoverage['manikin-mongodb.js'][389] = 0;
238 _$jscoverage['manikin-mongodb.js'][391] = 0;
239 _$jscoverage['manikin-mongodb.js'][392] = 0;
240 _$jscoverage['manikin-mongodb.js'][393] = 0;
241 _$jscoverage['manikin-mongodb.js'][394] = 0;
242 _$jscoverage['manikin-mongodb.js'][395] = 0;
243 _$jscoverage['manikin-mongodb.js'][396] = 0;
244 _$jscoverage['manikin-mongodb.js'][397] = 0;
245 _$jscoverage['manikin-mongodb.js'][399] = 0;
246 _$jscoverage['manikin-mongodb.js'][401] = 0;
247 _$jscoverage['manikin-mongodb.js'][402] = 0;
248 _$jscoverage['manikin-mongodb.js'][404] = 0;
249 _$jscoverage['manikin-mongodb.js'][408] = 0;
250 _$jscoverage['manikin-mongodb.js'][409] = 0;
251 _$jscoverage['manikin-mongodb.js'][410] = 0;
252 _$jscoverage['manikin-mongodb.js'][411] = 0;
253 _$jscoverage['manikin-mongodb.js'][412] = 0;
254 _$jscoverage['manikin-mongodb.js'][413] = 0;
255 _$jscoverage['manikin-mongodb.js'][415] = 0;
256 _$jscoverage['manikin-mongodb.js'][417] = 0;
257 _$jscoverage['manikin-mongodb.js'][418] = 0;
258 _$jscoverage['manikin-mongodb.js'][420] = 0;
259 _$jscoverage['manikin-mongodb.js'][421] = 0;
260 _$jscoverage['manikin-mongodb.js'][426] = 0;
261 _$jscoverage['manikin-mongodb.js'][427] = 0;
262 _$jscoverage['manikin-mongodb.js'][428] = 0;
263 _$jscoverage['manikin-mongodb.js'][429] = 0;
264 _$jscoverage['manikin-mongodb.js'][430] = 0;
265 _$jscoverage['manikin-mongodb.js'][431] = 0;
266 _$jscoverage['manikin-mongodb.js'][432] = 0;
267 _$jscoverage['manikin-mongodb.js'][433] = 0;
268 _$jscoverage['manikin-mongodb.js'][434] = 0;
269 _$jscoverage['manikin-mongodb.js'][435] = 0;
270 _$jscoverage['manikin-mongodb.js'][436] = 0;
271 _$jscoverage['manikin-mongodb.js'][438] = 0;
272 _$jscoverage['manikin-mongodb.js'][439] = 0;
273 _$jscoverage['manikin-mongodb.js'][440] = 0;
274 _$jscoverage['manikin-mongodb.js'][441] = 0;
275 _$jscoverage['manikin-mongodb.js'][443] = 0;
276 _$jscoverage['manikin-mongodb.js'][445] = 0;
277 _$jscoverage['manikin-mongodb.js'][447] = 0;
278 _$jscoverage['manikin-mongodb.js'][448] = 0;
279 _$jscoverage['manikin-mongodb.js'][449] = 0;
280 _$jscoverage['manikin-mongodb.js'][451] = 0;
281 _$jscoverage['manikin-mongodb.js'][452] = 0;
282 _$jscoverage['manikin-mongodb.js'][454] = 0;
283 _$jscoverage['manikin-mongodb.js'][455] = 0;
284 _$jscoverage['manikin-mongodb.js'][459] = 0;
285 _$jscoverage['manikin-mongodb.js'][460] = 0;
286 _$jscoverage['manikin-mongodb.js'][461] = 0;
287 _$jscoverage['manikin-mongodb.js'][462] = 0;
288 _$jscoverage['manikin-mongodb.js'][464] = 0;
289 _$jscoverage['manikin-mongodb.js'][465] = 0;
290 _$jscoverage['manikin-mongodb.js'][466] = 0;
291 _$jscoverage['manikin-mongodb.js'][468] = 0;
292 _$jscoverage['manikin-mongodb.js'][469] = 0;
293 _$jscoverage['manikin-mongodb.js'][470] = 0;
294 _$jscoverage['manikin-mongodb.js'][483] = 0;
295 _$jscoverage['manikin-mongodb.js'][484] = 0;
296 _$jscoverage['manikin-mongodb.js'][485] = 0;
297 _$jscoverage['manikin-mongodb.js'][488] = 0;
298 _$jscoverage['manikin-mongodb.js'][491] = 0;
299 _$jscoverage['manikin-mongodb.js'][492] = 0;
300 _$jscoverage['manikin-mongodb.js'][493] = 0;
301 _$jscoverage['manikin-mongodb.js'][498] = 0;
302 _$jscoverage['manikin-mongodb.js'][499] = 0;
303 _$jscoverage['manikin-mongodb.js'][500] = 0;
304 _$jscoverage['manikin-mongodb.js'][501] = 0;
305 _$jscoverage['manikin-mongodb.js'][502] = 0;
306 _$jscoverage['manikin-mongodb.js'][504] = 0;
307 _$jscoverage['manikin-mongodb.js'][505] = 0;
308 _$jscoverage['manikin-mongodb.js'][506] = 0;
309 _$jscoverage['manikin-mongodb.js'][508] = 0;
310 _$jscoverage['manikin-mongodb.js'][509] = 0;
311 _$jscoverage['manikin-mongodb.js'][510] = 0;
312 _$jscoverage['manikin-mongodb.js'][523] = 0;
313 _$jscoverage['manikin-mongodb.js'][524] = 0;
314 _$jscoverage['manikin-mongodb.js'][526] = 0;
315 _$jscoverage['manikin-mongodb.js'][527] = 0;
316 _$jscoverage['manikin-mongodb.js'][528] = 0;
317 _$jscoverage['manikin-mongodb.js'][531] = 0;
318 _$jscoverage['manikin-mongodb.js'][532] = 0;
319 _$jscoverage['manikin-mongodb.js'][535] = 0;
320 _$jscoverage['manikin-mongodb.js'][537] = 0;
321 _$jscoverage['manikin-mongodb.js'][538] = 0;
322 _$jscoverage['manikin-mongodb.js'][540] = 0;
323 _$jscoverage['manikin-mongodb.js'][541] = 0;
324 _$jscoverage['manikin-mongodb.js'][543] = 0;
325 _$jscoverage['manikin-mongodb.js'][544] = 0;
326 _$jscoverage['manikin-mongodb.js'][545] = 0;
327 _$jscoverage['manikin-mongodb.js'][546] = 0;
328 _$jscoverage['manikin-mongodb.js'][547] = 0;
329 _$jscoverage['manikin-mongodb.js'][548] = 0;
330 _$jscoverage['manikin-mongodb.js'][551] = 0;
331 _$jscoverage['manikin-mongodb.js'][552] = 0;
332 _$jscoverage['manikin-mongodb.js'][553] = 0;
333 _$jscoverage['manikin-mongodb.js'][555] = 0;
334 _$jscoverage['manikin-mongodb.js'][558] = 0;
335 _$jscoverage['manikin-mongodb.js'][559] = 0;
336 _$jscoverage['manikin-mongodb.js'][561] = 0;
337 _$jscoverage['manikin-mongodb.js'][562] = 0;
338 _$jscoverage['manikin-mongodb.js'][564] = 0;
339 _$jscoverage['manikin-mongodb.js'][566] = 0;
340 _$jscoverage['manikin-mongodb.js'][572] = 0;
341 _$jscoverage['manikin-mongodb.js'][573] = 0;
342 _$jscoverage['manikin-mongodb.js'][576] = 0;
343 _$jscoverage['manikin-mongodb.js'][579] = 0;
344}
345_$jscoverage['manikin-mongodb.js'][2]++;
346(function () {
347 _$jscoverage['manikin-mongodb.js'][3]++;
348 'use strict';
349 _$jscoverage['manikin-mongodb.js'][5]++;
350 var async, getKeys, massage, massageCore, massageOne, massaged, preprocFilter, propagate, tools, _, __slice = [].slice;
351 _$jscoverage['manikin-mongodb.js'][8]++;
352 async = require('async');
353 _$jscoverage['manikin-mongodb.js'][10]++;
354 _ = require('underscore');
355 _$jscoverage['manikin-mongodb.js'][12]++;
356 tools = require('./manikin-tools');
357 _$jscoverage['manikin-mongodb.js'][14]++;
358 preprocFilter = function (filter) {
359 _$jscoverage['manikin-mongodb.js'][15]++;
360 var x;
361 _$jscoverage['manikin-mongodb.js'][16]++;
362 x = _.extend({}, filter);
363 _$jscoverage['manikin-mongodb.js'][17]++;
364 if (x.id) {
365 _$jscoverage['manikin-mongodb.js'][18]++;
366 x._id = x.id;
367 }
368 _$jscoverage['manikin-mongodb.js'][20]++;
369 delete x.id;
370 _$jscoverage['manikin-mongodb.js'][21]++;
371 return x;
372 };
373 _$jscoverage['manikin-mongodb.js'][24]++;
374 massageOne = function (x) {
375 _$jscoverage['manikin-mongodb.js'][25]++;
376 if (!(x != null)) {
377 _$jscoverage['manikin-mongodb.js'][26]++;
378 return x;
379 }
380 _$jscoverage['manikin-mongodb.js'][28]++;
381 x.id = x._id;
382 _$jscoverage['manikin-mongodb.js'][29]++;
383 delete x._id;
384 _$jscoverage['manikin-mongodb.js'][30]++;
385 return x;
386 };
387 _$jscoverage['manikin-mongodb.js'][33]++;
388 massageCore = function (r2) {
389 _$jscoverage['manikin-mongodb.js'][34]++;
390 if (Array.isArray(r2)) {
391 _$jscoverage['manikin-mongodb.js'][35]++;
392 return r2.map(massageOne);
393 } else {
394 _$jscoverage['manikin-mongodb.js'][37]++;
395 return massageOne(r2);
396 }
397 };
398 _$jscoverage['manikin-mongodb.js'][41]++;
399 massage = function (r2) {
400 _$jscoverage['manikin-mongodb.js'][42]++;
401 return massageCore(JSON.parse(JSON.stringify(r2)));
402 };
403 _$jscoverage['manikin-mongodb.js'][45]++;
404 massaged = function (f) {
405 _$jscoverage['manikin-mongodb.js'][46]++;
406 return function (err, data) {
407 _$jscoverage['manikin-mongodb.js'][47]++;
408 if (err) {
409 _$jscoverage['manikin-mongodb.js'][48]++;
410 return f(err);
411 } else {
412 _$jscoverage['manikin-mongodb.js'][50]++;
413 return f(null, massage(data));
414 }
415 };
416 };
417 _$jscoverage['manikin-mongodb.js'][55]++;
418 propagate = function (callback, f) {
419 _$jscoverage['manikin-mongodb.js'][56]++;
420 return function () {
421 _$jscoverage['manikin-mongodb.js'][57]++;
422 var args, err;
423 _$jscoverage['manikin-mongodb.js'][58]++;
424 err = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
425 _$jscoverage['manikin-mongodb.js'][59]++;
426 if (err) {
427 _$jscoverage['manikin-mongodb.js'][60]++;
428 return callback(err);
429 } else {
430 _$jscoverage['manikin-mongodb.js'][62]++;
431 return f.apply(this, args);
432 }
433 };
434 };
435 _$jscoverage['manikin-mongodb.js'][67]++;
436 getKeys = function (data, target, prefix) {
437 _$jscoverage['manikin-mongodb.js'][68]++;
438 var valids;
439 _$jscoverage['manikin-mongodb.js'][69]++;
440 if (target == null) {
441 _$jscoverage['manikin-mongodb.js'][70]++;
442 target = [];
443 }
444 _$jscoverage['manikin-mongodb.js'][72]++;
445 if (prefix == null) {
446 _$jscoverage['manikin-mongodb.js'][73]++;
447 prefix = '';
448 }
449 _$jscoverage['manikin-mongodb.js'][75]++;
450 valids = [
451 'Array',
452 'String',
453 'Boolean',
454 'Date',
455 'Number',
456 'Null'
457 ];
458 _$jscoverage['manikin-mongodb.js'][76]++;
459 Object.keys(data).forEach(function (key) {
460 _$jscoverage['manikin-mongodb.js'][77]++;
461 if (valids.some(function (x) {
462 _$jscoverage['manikin-mongodb.js'][78]++;
463 return _(data[key])['is' + x]();
464 })) {
465 _$jscoverage['manikin-mongodb.js'][80]++;
466 return target.push(prefix + key);
467 } else {
468 _$jscoverage['manikin-mongodb.js'][82]++;
469 return getKeys(data[key], target, prefix + key + '.');
470 }
471 });
472 _$jscoverage['manikin-mongodb.js'][85]++;
473 return target;
474 };
475 _$jscoverage['manikin-mongodb.js'][88]++;
476 exports.create = function () {
477 _$jscoverage['manikin-mongodb.js'][89]++;
478 var Mixed, ObjectID, ObjectId, Schema, api, defModels, getMeta, insertOps, internalListSub, key, makeModel, metaData, models, mongoose, nullablesValidation, preRemoveCascadeNonNullable, preRemoveCascadeNullable, specTransform, specmodels;
479 _$jscoverage['manikin-mongodb.js'][90]++;
480 if (process.env.NODE_ENV !== 'production') {
481 _$jscoverage['manikin-mongodb.js'][91]++;
482 for (key in require.cache) {
483 _$jscoverage['manikin-mongodb.js'][92]++;
484 delete require.cache[key];
485 }
486 }
487 _$jscoverage['manikin-mongodb.js'][95]++;
488 mongoose = require('mongoose');
489 _$jscoverage['manikin-mongodb.js'][96]++;
490 Schema = mongoose.Schema;
491 _$jscoverage['manikin-mongodb.js'][97]++;
492 Mixed = mongoose.Schema.Types.Mixed;
493 _$jscoverage['manikin-mongodb.js'][98]++;
494 ObjectID = mongoose.mongo.ObjectID;
495 _$jscoverage['manikin-mongodb.js'][99]++;
496 ObjectId = mongoose.Schema.ObjectId;
497 _$jscoverage['manikin-mongodb.js'][100]++;
498 api = {};
499 _$jscoverage['manikin-mongodb.js'][101]++;
500 models = {};
501 _$jscoverage['manikin-mongodb.js'][102]++;
502 specmodels = {};
503 _$jscoverage['manikin-mongodb.js'][103]++;
504 metaData = null;
505 _$jscoverage['manikin-mongodb.js'][104]++;
506 makeModel = function (connection, name, schema) {
507 _$jscoverage['manikin-mongodb.js'][105]++;
508 var ss;
509 _$jscoverage['manikin-mongodb.js'][106]++;
510 ss = new Schema(schema, { strict: true });
511 _$jscoverage['manikin-mongodb.js'][109]++;
512 ss.set('versionKey', false);
513 _$jscoverage['manikin-mongodb.js'][110]++;
514 return connection.model(name, ss, name);
515 };
516 _$jscoverage['manikin-mongodb.js'][112]++;
517 getMeta = function (modelName) {
518 _$jscoverage['manikin-mongodb.js'][113]++;
519 return metaData[modelName];
520 };
521 _$jscoverage['manikin-mongodb.js'][115]++;
522 nullablesValidation = function (schema) {
523 _$jscoverage['manikin-mongodb.js'][116]++;
524 return function (next) {
525 _$jscoverage['manikin-mongodb.js'][117]++;
526 var nonNullOuters, outers, paths, self;
527 _$jscoverage['manikin-mongodb.js'][118]++;
528 self = this;
529 _$jscoverage['manikin-mongodb.js'][119]++;
530 paths = schema.paths;
531 _$jscoverage['manikin-mongodb.js'][120]++;
532 outers = Object.keys(paths).filter(function (x) {
533 _$jscoverage['manikin-mongodb.js'][121]++;
534 return paths[x].options.type === ObjectId && typeof paths[x].options.ref === 'string' && !paths[x].options['x-owner'];
535 }).map(function (x) {
536 _$jscoverage['manikin-mongodb.js'][123]++;
537 return {
538 plur: paths[x].options.ref,
539 sing: x,
540 validation: paths[x].options['x-validation']
541 };
542 });
543 _$jscoverage['manikin-mongodb.js'][129]++;
544 nonNullOuters = outers.filter(function (x) {
545 _$jscoverage['manikin-mongodb.js'][130]++;
546 return self[x.sing] != null;
547 });
548 _$jscoverage['manikin-mongodb.js'][132]++;
549 return async.forEach(nonNullOuters, function (o, callback) {
550 _$jscoverage['manikin-mongodb.js'][133]++;
551 return api.getOne(o.plur, { id: self[o.sing] }, function (err, data) {
552 _$jscoverage['manikin-mongodb.js'][136]++;
553 if (err || !data) {
554 _$jscoverage['manikin-mongodb.js'][137]++;
555 return callback(new Error('Invalid pointer'));
556 } else {
557 _$jscoverage['manikin-mongodb.js'][138]++;
558 if (o.validation) {
559 _$jscoverage['manikin-mongodb.js'][139]++;
560 return o.validation(self, data, function (err) {
561 _$jscoverage['manikin-mongodb.js'][140]++;
562 return callback(err ? new Error(err) : void 0);
563 });
564 } else {
565 _$jscoverage['manikin-mongodb.js'][143]++;
566 return callback();
567 }
568 }
569 });
570 }, next);
571 };
572 };
573 _$jscoverage['manikin-mongodb.js'][149]++;
574 internalListSub = function (model, outer, id, filter, callback) {
575 _$jscoverage['manikin-mongodb.js'][150]++;
576 var finalFilter;
577 _$jscoverage['manikin-mongodb.js'][151]++;
578 if (filter[outer] != null && filter[outer].toString() !== id.toString()) {
579 _$jscoverage['manikin-mongodb.js'][152]++;
580 callback(new Error('No such id'));
581 _$jscoverage['manikin-mongodb.js'][153]++;
582 return;
583 }
584 _$jscoverage['manikin-mongodb.js'][155]++;
585 filter = preprocFilter(filter);
586 _$jscoverage['manikin-mongodb.js'][156]++;
587 finalFilter = _.extend({}, filter, _.object([[
588 outer,
589 id
590 ]]));
591 _$jscoverage['manikin-mongodb.js'][157]++;
592 return models[model].find(finalFilter, callback);
593 };
594 _$jscoverage['manikin-mongodb.js'][159]++;
595 preRemoveCascadeNonNullable = function (owner, id, next) {
596 _$jscoverage['manikin-mongodb.js'][160]++;
597 var manys;
598 _$jscoverage['manikin-mongodb.js'][161]++;
599 manys = getMeta(owner.modelName).manyToMany;
600 _$jscoverage['manikin-mongodb.js'][162]++;
601 return async.forEach(manys, function (many, callback) {
602 _$jscoverage['manikin-mongodb.js'][163]++;
603 var obj;
604 _$jscoverage['manikin-mongodb.js'][164]++;
605 obj = _.object([[
606 many.inverseName,
607 id
608 ]]);
609 _$jscoverage['manikin-mongodb.js'][165]++;
610 return models[many.ref].update(obj, { $pull: obj }, callback);
611 }, function (err) {
612 _$jscoverage['manikin-mongodb.js'][169]++;
613 var flattenedModels;
614 _$jscoverage['manikin-mongodb.js'][170]++;
615 if (err) {
616 _$jscoverage['manikin-mongodb.js'][171]++;
617 return next(err);
618 }
619 _$jscoverage['manikin-mongodb.js'][173]++;
620 flattenedModels = getMeta(owner.modelName).owns;
621 _$jscoverage['manikin-mongodb.js'][174]++;
622 return async.forEach(flattenedModels, function (mod, callback) {
623 _$jscoverage['manikin-mongodb.js'][175]++;
624 return internalListSub(mod.name, mod.field, id, {}, propagate(callback, function (data) {
625 _$jscoverage['manikin-mongodb.js'][176]++;
626 return async.forEach(data, function (item, callback) {
627 _$jscoverage['manikin-mongodb.js'][177]++;
628 return item.remove(callback);
629 }, callback);
630 }));
631 }, next);
632 });
633 };
634 _$jscoverage['manikin-mongodb.js'][183]++;
635 preRemoveCascadeNullable = function (owner, id, next) {
636 _$jscoverage['manikin-mongodb.js'][184]++;
637 var flattenedModels, ownedModels;
638 _$jscoverage['manikin-mongodb.js'][185]++;
639 ownedModels = Object.keys(models).map(function (modelName) {
640 _$jscoverage['manikin-mongodb.js'][186]++;
641 var paths;
642 _$jscoverage['manikin-mongodb.js'][187]++;
643 paths = models[modelName].schema.paths;
644 _$jscoverage['manikin-mongodb.js'][188]++;
645 return Object.keys(paths).filter(function (x) {
646 _$jscoverage['manikin-mongodb.js'][189]++;
647 return paths[x].options.type === ObjectId && paths[x].options.ref === owner.modelName && !paths[x].options['x-owner'];
648 }).map(function (x) {
649 _$jscoverage['manikin-mongodb.js'][191]++;
650 return {
651 name: modelName,
652 field: x
653 };
654 });
655 });
656 _$jscoverage['manikin-mongodb.js'][197]++;
657 flattenedModels = _.flatten(ownedModels);
658 _$jscoverage['manikin-mongodb.js'][198]++;
659 return async.forEach(flattenedModels, function (mod, callback) {
660 _$jscoverage['manikin-mongodb.js'][199]++;
661 return internalListSub(mod.name, mod.field, id, {}, propagate(callback, function (data) {
662 _$jscoverage['manikin-mongodb.js'][200]++;
663 return async.forEach(data, function (item, callback) {
664 _$jscoverage['manikin-mongodb.js'][201]++;
665 item[mod.field] = null;
666 _$jscoverage['manikin-mongodb.js'][202]++;
667 item.save();
668 _$jscoverage['manikin-mongodb.js'][203]++;
669 return callback();
670 }, callback);
671 }));
672 }, next);
673 };
674 _$jscoverage['manikin-mongodb.js'][208]++;
675 specTransform = function (allspec, modelName, tgt, src, keys) {
676 _$jscoverage['manikin-mongodb.js'][209]++;
677 return keys.forEach(function (key) {
678 _$jscoverage['manikin-mongodb.js'][210]++;
679 if (src[key].type === 'mixed') {
680 _$jscoverage['manikin-mongodb.js'][211]++;
681 return tgt[key] = { type: Mixed };
682 } else {
683 _$jscoverage['manikin-mongodb.js'][214]++;
684 if (src[key].type === 'nested') {
685 _$jscoverage['manikin-mongodb.js'][215]++;
686 tgt[key] = {};
687 _$jscoverage['manikin-mongodb.js'][216]++;
688 return specTransform(allspec, modelName, tgt[key], src[key], _.without(Object.keys(src[key]), 'type'));
689 } else {
690 _$jscoverage['manikin-mongodb.js'][217]++;
691 if (src[key].type === 'string') {
692 _$jscoverage['manikin-mongodb.js'][218]++;
693 tgt[key] = _.extend({}, src[key], { type: String });
694 _$jscoverage['manikin-mongodb.js'][221]++;
695 if (src[key].validate != null) {
696 _$jscoverage['manikin-mongodb.js'][222]++;
697 return tgt[key].validate = function (value, callback) {
698 _$jscoverage['manikin-mongodb.js'][223]++;
699 return src[key].validate(api, value, callback);
700 };
701 }
702 } else {
703 _$jscoverage['manikin-mongodb.js'][226]++;
704 if (src[key].type === 'number') {
705 _$jscoverage['manikin-mongodb.js'][227]++;
706 return tgt[key] = _.extend({}, src[key], { type: Number });
707 } else {
708 _$jscoverage['manikin-mongodb.js'][230]++;
709 if (src[key].type === 'date') {
710 _$jscoverage['manikin-mongodb.js'][231]++;
711 return tgt[key] = _.extend({}, src[key], { type: Date });
712 } else {
713 _$jscoverage['manikin-mongodb.js'][234]++;
714 if (src[key].type === 'boolean') {
715 _$jscoverage['manikin-mongodb.js'][235]++;
716 return tgt[key] = _.extend({}, src[key], { type: Boolean });
717 } else {
718 _$jscoverage['manikin-mongodb.js'][238]++;
719 if (src[key].type === 'hasOne') {
720 _$jscoverage['manikin-mongodb.js'][239]++;
721 return tgt[key] = {
722 ref: src[key].model,
723 'x-validation': src[key].validation
724 };
725 } else {
726 _$jscoverage['manikin-mongodb.js'][243]++;
727 if (src[key].type === 'hasMany') {
728 _$jscoverage['manikin-mongodb.js'][244]++;
729 tgt[key] = [{
730 type: ObjectId,
731 ref: src[key].model,
732 inverseName: src[key].inverseName
733 }];
734 _$jscoverage['manikin-mongodb.js'][251]++;
735 return allspec[src[key].model][src[key].inverseName] = [{
736 type: ObjectId,
737 ref: modelName,
738 inverseName: key
739 }];
740 }
741 }
742 }
743 }
744 }
745 }
746 }
747 }
748 });
749 };
750 _$jscoverage['manikin-mongodb.js'][261]++;
751 defModels = function (models) {
752 _$jscoverage['manikin-mongodb.js'][262]++;
753 var allspec, newrest, toDef;
754 _$jscoverage['manikin-mongodb.js'][263]++;
755 specmodels = tools.desugar(models);
756 _$jscoverage['manikin-mongodb.js'][264]++;
757 toDef = [];
758 _$jscoverage['manikin-mongodb.js'][265]++;
759 newrest = {};
760 _$jscoverage['manikin-mongodb.js'][266]++;
761 allspec = {};
762 _$jscoverage['manikin-mongodb.js'][267]++;
763 Object.keys(specmodels).forEach(function (modelName) {
764 _$jscoverage['manikin-mongodb.js'][268]++;
765 return allspec[modelName] = {};
766 });
767 _$jscoverage['manikin-mongodb.js'][270]++;
768 Object.keys(specmodels).forEach(function (modelName) {
769 _$jscoverage['manikin-mongodb.js'][271]++;
770 var inspec, owners, spec;
771 _$jscoverage['manikin-mongodb.js'][272]++;
772 spec = allspec[modelName];
773 _$jscoverage['manikin-mongodb.js'][273]++;
774 owners = specmodels[modelName].owners || {};
775 _$jscoverage['manikin-mongodb.js'][274]++;
776 inspec = specmodels[modelName].fields || {};
777 _$jscoverage['manikin-mongodb.js'][275]++;
778 specTransform(allspec, modelName, spec, inspec, Object.keys(inspec));
779 _$jscoverage['manikin-mongodb.js'][276]++;
780 return newrest[modelName] = _.extend({}, specmodels[modelName], { fields: spec });
781 });
782 _$jscoverage['manikin-mongodb.js'][280]++;
783 Object.keys(newrest).forEach(function (modelName) {
784 _$jscoverage['manikin-mongodb.js'][281]++;
785 var conf;
786 _$jscoverage['manikin-mongodb.js'][282]++;
787 conf = newrest[modelName];
788 _$jscoverage['manikin-mongodb.js'][283]++;
789 Object.keys(conf.owners).forEach(function (ownerName) {
790 _$jscoverage['manikin-mongodb.js'][284]++;
791 return conf.fields[ownerName] = {
792 type: ObjectId,
793 ref: conf.owners[ownerName],
794 required: true,
795 'x-owner': true
796 };
797 });
798 _$jscoverage['manikin-mongodb.js'][291]++;
799 Object.keys(conf.indirectOwners).forEach(function (p) {
800 _$jscoverage['manikin-mongodb.js'][292]++;
801 return conf.fields[p] = {
802 type: ObjectId,
803 ref: conf.indirectOwners[p],
804 required: true,
805 'x-indirect-owner': true
806 };
807 });
808 _$jscoverage['manikin-mongodb.js'][299]++;
809 Object.keys(conf.fields).forEach(function (fieldName) {
810 _$jscoverage['manikin-mongodb.js'][300]++;
811 if (conf.fields[fieldName].ref != null) {
812 _$jscoverage['manikin-mongodb.js'][301]++;
813 return conf.fields[fieldName].type = ObjectId;
814 }
815 });
816 _$jscoverage['manikin-mongodb.js'][304]++;
817 return toDef.push([
818 modelName,
819 newrest[modelName]
820 ]);
821 });
822 _$jscoverage['manikin-mongodb.js'][306]++;
823 metaData = tools.getMeta(specmodels);
824 _$jscoverage['manikin-mongodb.js'][307]++;
825 return toDef;
826 };
827 _$jscoverage['manikin-mongodb.js'][309]++;
828 (function () {
829 _$jscoverage['manikin-mongodb.js'][310]++;
830 var connection;
831 _$jscoverage['manikin-mongodb.js'][311]++;
832 connection = null;
833 _$jscoverage['manikin-mongodb.js'][312]++;
834 api.connect = function (databaseUrl, inputModels, callback) {
835 _$jscoverage['manikin-mongodb.js'][313]++;
836 try {
837 _$jscoverage['manikin-mongodb.js'][314]++;
838 connection = mongoose.createConnection(databaseUrl);
839 _$jscoverage['manikin-mongodb.js'][315]++;
840 defModels(inputModels).forEach(function (_arg) {
841 _$jscoverage['manikin-mongodb.js'][316]++;
842 var name, v;
843 _$jscoverage['manikin-mongodb.js'][317]++;
844 name = _arg[0], v = _arg[1];
845 _$jscoverage['manikin-mongodb.js'][318]++;
846 models[name] = makeModel(connection, name, v.fields);
847 _$jscoverage['manikin-mongodb.js'][319]++;
848 models[name].schema.pre('save', nullablesValidation(models[name].schema));
849 _$jscoverage['manikin-mongodb.js'][320]++;
850 models[name].schema.pre('remove', function (next) {
851 _$jscoverage['manikin-mongodb.js'][321]++;
852 return preRemoveCascadeNonNullable(models[name], this._id.toString(), next);
853 });
854 _$jscoverage['manikin-mongodb.js'][323]++;
855 return models[name].schema.pre('remove', function (next) {
856 _$jscoverage['manikin-mongodb.js'][324]++;
857 return preRemoveCascadeNullable(models[name], this._id.toString(), next);
858 });
859 });
860 } catch (ex) {
861 _$jscoverage['manikin-mongodb.js'][328]++;
862 callback(ex);
863 _$jscoverage['manikin-mongodb.js'][329]++;
864 return;
865 }
866 _$jscoverage['manikin-mongodb.js'][331]++;
867 return callback();
868 };
869 _$jscoverage['manikin-mongodb.js'][333]++;
870 return api.close = function (callback) {
871 _$jscoverage['manikin-mongodb.js'][334]++;
872 connection.close();
873 _$jscoverage['manikin-mongodb.js'][335]++;
874 return callback();
875 };
876 }());
877 _$jscoverage['manikin-mongodb.js'][338]++;
878 api.post = function (model, indata, callback) {
879 _$jscoverage['manikin-mongodb.js'][339]++;
880 var owners, ownersOwners, ownersRaw, saveFunc;
881 _$jscoverage['manikin-mongodb.js'][340]++;
882 saveFunc = function (data) {
883 _$jscoverage['manikin-mongodb.js'][341]++;
884 return new models[model](data).save(function (err) {
885 _$jscoverage['manikin-mongodb.js'][342]++;
886 var fieldMatch, valueMatch;
887 _$jscoverage['manikin-mongodb.js'][343]++;
888 if (err && err.code === 11000) {
889 _$jscoverage['manikin-mongodb.js'][344]++;
890 fieldMatch = err.err.match(/([a-zA-Z]+)_1/);
891 _$jscoverage['manikin-mongodb.js'][345]++;
892 valueMatch = err.err.match(/"([a-zA-Z]+)"/);
893 _$jscoverage['manikin-mongodb.js'][346]++;
894 if (fieldMatch && valueMatch) {
895 _$jscoverage['manikin-mongodb.js'][347]++;
896 return callback(new Error('Duplicate value \'' + valueMatch[1] + '\' for ' + fieldMatch[1]));
897 } else {
898 _$jscoverage['manikin-mongodb.js'][349]++;
899 return callback(new Error('Unique constraint violated'));
900 }
901 } else {
902 _$jscoverage['manikin-mongodb.js'][352]++;
903 return massaged(callback).apply(this, arguments);
904 }
905 });
906 };
907 _$jscoverage['manikin-mongodb.js'][356]++;
908 ownersRaw = getMeta(model).owners;
909 _$jscoverage['manikin-mongodb.js'][357]++;
910 owners = _(ownersRaw).pluck('plur');
911 _$jscoverage['manikin-mongodb.js'][358]++;
912 ownersOwners = _.flatten(owners.map(function (x) {
913 _$jscoverage['manikin-mongodb.js'][359]++;
914 return getMeta(x).owners;
915 }));
916 _$jscoverage['manikin-mongodb.js'][361]++;
917 if (ownersOwners.length === 0) {
918 _$jscoverage['manikin-mongodb.js'][362]++;
919 return saveFunc(indata);
920 } else {
921 _$jscoverage['manikin-mongodb.js'][364]++;
922 return api.getOne(owners[0], { filter: { id: indata[ownersRaw[0].sing] } }, propagate(callback, function (ownerdata) {
923 _$jscoverage['manikin-mongodb.js'][369]++;
924 var metaFields, paths;
925 _$jscoverage['manikin-mongodb.js'][370]++;
926 paths = models[owners[0]].schema.paths;
927 _$jscoverage['manikin-mongodb.js'][371]++;
928 metaFields = Object.keys(paths).filter(function (key) {
929 _$jscoverage['manikin-mongodb.js'][372]++;
930 return !!paths[key].options['x-owner'] || !!paths[key].options['x-indirect-owner'];
931 });
932 _$jscoverage['manikin-mongodb.js'][374]++;
933 metaFields.forEach(function (key) {
934 _$jscoverage['manikin-mongodb.js'][375]++;
935 return indata[key] = ownerdata[key];
936 });
937 _$jscoverage['manikin-mongodb.js'][377]++;
938 return saveFunc(indata);
939 }));
940 }
941 };
942 _$jscoverage['manikin-mongodb.js'][381]++;
943 api.list = function (model, filter, callback) {
944 _$jscoverage['manikin-mongodb.js'][382]++;
945 var defaultSort, rr;
946 _$jscoverage['manikin-mongodb.js'][383]++;
947 filter = preprocFilter(filter);
948 _$jscoverage['manikin-mongodb.js'][384]++;
949 defaultSort = specmodels[model].defaultSort;
950 _$jscoverage['manikin-mongodb.js'][385]++;
951 rr = models[model].find(filter);
952 _$jscoverage['manikin-mongodb.js'][386]++;
953 if (defaultSort != null) {
954 _$jscoverage['manikin-mongodb.js'][387]++;
955 rr = rr.sort(_.object([[
956 defaultSort,
957 'asc'
958 ]]));
959 }
960 _$jscoverage['manikin-mongodb.js'][389]++;
961 return rr.exec(massaged(callback));
962 };
963 _$jscoverage['manikin-mongodb.js'][391]++;
964 api.getOne = function (model, config, callback) {
965 _$jscoverage['manikin-mongodb.js'][392]++;
966 var filter;
967 _$jscoverage['manikin-mongodb.js'][393]++;
968 filter = preprocFilter(config.filter || {});
969 _$jscoverage['manikin-mongodb.js'][394]++;
970 return models[model].findOne(filter, function (err, data) {
971 _$jscoverage['manikin-mongodb.js'][395]++;
972 if (err) {
973 _$jscoverage['manikin-mongodb.js'][396]++;
974 if (err.toString() === 'Error: Invalid ObjectId') {
975 _$jscoverage['manikin-mongodb.js'][397]++;
976 callback(new Error('No such id'));
977 } else {
978 _$jscoverage['manikin-mongodb.js'][399]++;
979 callback(err);
980 }
981 } else {
982 _$jscoverage['manikin-mongodb.js'][401]++;
983 if (!(data != null)) {
984 _$jscoverage['manikin-mongodb.js'][402]++;
985 return callback(new Error('No match'));
986 } else {
987 _$jscoverage['manikin-mongodb.js'][404]++;
988 return callback(null, massage(data));
989 }
990 }
991 });
992 };
993 _$jscoverage['manikin-mongodb.js'][408]++;
994 api.delOne = function (model, filter, callback) {
995 _$jscoverage['manikin-mongodb.js'][409]++;
996 filter = preprocFilter(filter);
997 _$jscoverage['manikin-mongodb.js'][410]++;
998 return models[model].findOne(filter, function (err, d) {
999 _$jscoverage['manikin-mongodb.js'][411]++;
1000 if (err) {
1001 _$jscoverage['manikin-mongodb.js'][412]++;
1002 if (err.toString() === 'Error: Invalid ObjectId') {
1003 _$jscoverage['manikin-mongodb.js'][413]++;
1004 return callback(new Error('No such id'));
1005 } else {
1006 _$jscoverage['manikin-mongodb.js'][415]++;
1007 return callback(err);
1008 }
1009 } else {
1010 _$jscoverage['manikin-mongodb.js'][417]++;
1011 if (!(d != null)) {
1012 _$jscoverage['manikin-mongodb.js'][418]++;
1013 return callback(new Error('No such id'));
1014 } else {
1015 _$jscoverage['manikin-mongodb.js'][420]++;
1016 return d.remove(function (err) {
1017 _$jscoverage['manikin-mongodb.js'][421]++;
1018 return callback(err, !err ? massage(d) : void 0);
1019 });
1020 }
1021 }
1022 });
1023 };
1024 _$jscoverage['manikin-mongodb.js'][426]++;
1025 api.putOne = function (modelName, data, filter, callback) {
1026 _$jscoverage['manikin-mongodb.js'][427]++;
1027 var inputFields, inputFieldsValid, invalidFields, model, validField;
1028 _$jscoverage['manikin-mongodb.js'][428]++;
1029 filter = preprocFilter(filter);
1030 _$jscoverage['manikin-mongodb.js'][429]++;
1031 model = models[modelName];
1032 _$jscoverage['manikin-mongodb.js'][430]++;
1033 inputFieldsValid = getKeys(data);
1034 _$jscoverage['manikin-mongodb.js'][431]++;
1035 inputFields = Object.keys(data);
1036 _$jscoverage['manikin-mongodb.js'][432]++;
1037 validField = Object.keys(model.schema.paths);
1038 _$jscoverage['manikin-mongodb.js'][433]++;
1039 invalidFields = _.difference(inputFieldsValid, validField);
1040 _$jscoverage['manikin-mongodb.js'][434]++;
1041 if (invalidFields.length > 0) {
1042 _$jscoverage['manikin-mongodb.js'][435]++;
1043 callback(new Error('Invalid fields: ' + invalidFields.join(', ')));
1044 _$jscoverage['manikin-mongodb.js'][436]++;
1045 return;
1046 }
1047 _$jscoverage['manikin-mongodb.js'][438]++;
1048 return model.findOne(filter, function (err, d) {
1049 _$jscoverage['manikin-mongodb.js'][439]++;
1050 if (err != null) {
1051 _$jscoverage['manikin-mongodb.js'][440]++;
1052 if (err.message === 'Invalid ObjectId') {
1053 _$jscoverage['manikin-mongodb.js'][441]++;
1054 callback(new Error('No such id'));
1055 } else {
1056 _$jscoverage['manikin-mongodb.js'][443]++;
1057 callback(err);
1058 }
1059 _$jscoverage['manikin-mongodb.js'][445]++;
1060 return;
1061 }
1062 _$jscoverage['manikin-mongodb.js'][447]++;
1063 if (!(d != null)) {
1064 _$jscoverage['manikin-mongodb.js'][448]++;
1065 callback(new Error('No such id'));
1066 _$jscoverage['manikin-mongodb.js'][449]++;
1067 return;
1068 }
1069 _$jscoverage['manikin-mongodb.js'][451]++;
1070 inputFields.forEach(function (key) {
1071 _$jscoverage['manikin-mongodb.js'][452]++;
1072 return d[key] = data[key];
1073 });
1074 _$jscoverage['manikin-mongodb.js'][454]++;
1075 return d.save(function (err) {
1076 _$jscoverage['manikin-mongodb.js'][455]++;
1077 return callback(err, err ? null : massage(d));
1078 });
1079 });
1080 };
1081 _$jscoverage['manikin-mongodb.js'][459]++;
1082 api.delMany = function (primaryModel, primaryId, propertyName, secondaryId, callback) {
1083 _$jscoverage['manikin-mongodb.js'][460]++;
1084 var inverseName, mm, secondaryModel;
1085 _$jscoverage['manikin-mongodb.js'][461]++;
1086 mm = getMeta(primaryModel).manyToMany.filter(function (x) {
1087 _$jscoverage['manikin-mongodb.js'][462]++;
1088 return x.name === propertyName;
1089 })[0];
1090 _$jscoverage['manikin-mongodb.js'][464]++;
1091 if (!(mm != null)) {
1092 _$jscoverage['manikin-mongodb.js'][465]++;
1093 callback(new Error('Invalid many-to-many property'));
1094 _$jscoverage['manikin-mongodb.js'][466]++;
1095 return;
1096 }
1097 _$jscoverage['manikin-mongodb.js'][468]++;
1098 secondaryModel = mm.ref;
1099 _$jscoverage['manikin-mongodb.js'][469]++;
1100 inverseName = mm.inverseName;
1101 _$jscoverage['manikin-mongodb.js'][470]++;
1102 return async.forEach([
1103 {
1104 model: primaryModel,
1105 id: primaryId,
1106 property: propertyName,
1107 secondaryId: secondaryId
1108 },
1109 {
1110 model: secondaryModel,
1111 id: secondaryId,
1112 property: inverseName,
1113 secondaryId: primaryId
1114 }
1115 ], function (item, callback) {
1116 _$jscoverage['manikin-mongodb.js'][483]++;
1117 return models[item.model].findById(item.id, propagate(callback, function (data) {
1118 _$jscoverage['manikin-mongodb.js'][484]++;
1119 var conditions, options, update;
1120 _$jscoverage['manikin-mongodb.js'][485]++;
1121 conditions = { _id: item.id };
1122 _$jscoverage['manikin-mongodb.js'][488]++;
1123 update = {
1124 $pull: _.object([[
1125 item.property,
1126 item.secondaryId
1127 ]])
1128 };
1129 _$jscoverage['manikin-mongodb.js'][491]++;
1130 options = {};
1131 _$jscoverage['manikin-mongodb.js'][492]++;
1132 return models[item.model].update(conditions, update, options, function (err, numAffected) {
1133 _$jscoverage['manikin-mongodb.js'][493]++;
1134 return callback(err);
1135 });
1136 }));
1137 }, callback);
1138 };
1139 _$jscoverage['manikin-mongodb.js'][498]++;
1140 insertOps = [];
1141 _$jscoverage['manikin-mongodb.js'][499]++;
1142 api.postMany = function (primaryModel, primaryId, propertyName, secondaryId, callback) {
1143 _$jscoverage['manikin-mongodb.js'][500]++;
1144 var hasAlready, insertOpMatch, insertOpNow, inverseName, mm, secondaryModel;
1145 _$jscoverage['manikin-mongodb.js'][501]++;
1146 mm = getMeta(primaryModel).manyToMany.filter(function (x) {
1147 _$jscoverage['manikin-mongodb.js'][502]++;
1148 return x.name === propertyName;
1149 })[0];
1150 _$jscoverage['manikin-mongodb.js'][504]++;
1151 if (!(mm != null)) {
1152 _$jscoverage['manikin-mongodb.js'][505]++;
1153 callback(new Error('Invalid many-to-many property'));
1154 _$jscoverage['manikin-mongodb.js'][506]++;
1155 return;
1156 }
1157 _$jscoverage['manikin-mongodb.js'][508]++;
1158 secondaryModel = mm.ref;
1159 _$jscoverage['manikin-mongodb.js'][509]++;
1160 inverseName = mm.inverseName;
1161 _$jscoverage['manikin-mongodb.js'][510]++;
1162 insertOpNow = [
1163 {
1164 primaryModel: primaryModel,
1165 primaryId: primaryId,
1166 propertyName: propertyName,
1167 secondaryId: secondaryId
1168 },
1169 {
1170 primaryModel: secondaryModel,
1171 primaryId: secondaryId,
1172 propertyName: inverseName,
1173 secondaryId: primaryId
1174 }
1175 ];
1176 _$jscoverage['manikin-mongodb.js'][523]++;
1177 insertOpMatch = function (x1, x2) {
1178 _$jscoverage['manikin-mongodb.js'][524]++;
1179 return x1.primaryModel === x2.primaryModel && x1.primaryId === x2.primaryId && x1.propertyName === x2.propertyName && x1.secondaryId === x2.secondaryId;
1180 };
1181 _$jscoverage['manikin-mongodb.js'][526]++;
1182 hasAlready = insertOps.some(function (x) {
1183 _$jscoverage['manikin-mongodb.js'][527]++;
1184 return insertOpNow.some(function (y) {
1185 _$jscoverage['manikin-mongodb.js'][528]++;
1186 return insertOpMatch(x, y);
1187 });
1188 });
1189 _$jscoverage['manikin-mongodb.js'][531]++;
1190 if (hasAlready) {
1191 _$jscoverage['manikin-mongodb.js'][532]++;
1192 callback(null, { status: 'insert already in progress' });
1193 _$jscoverage['manikin-mongodb.js'][535]++;
1194 return;
1195 }
1196 _$jscoverage['manikin-mongodb.js'][537]++;
1197 insertOpNow.forEach(function (op) {
1198 _$jscoverage['manikin-mongodb.js'][538]++;
1199 return insertOps.push(op);
1200 });
1201 _$jscoverage['manikin-mongodb.js'][540]++;
1202 return async.map(insertOpNow, function (item, callback) {
1203 _$jscoverage['manikin-mongodb.js'][541]++;
1204 return models[item.primaryModel].findById(item.primaryId, callback);
1205 }, propagate(callback, function (datas) {
1206 _$jscoverage['manikin-mongodb.js'][543]++;
1207 var updated;
1208 _$jscoverage['manikin-mongodb.js'][544]++;
1209 updated = [
1210 false,
1211 false
1212 ];
1213 _$jscoverage['manikin-mongodb.js'][545]++;
1214 insertOpNow.forEach(function (conf, i) {
1215 _$jscoverage['manikin-mongodb.js'][546]++;
1216 if (-1 === datas[i][conf.propertyName].indexOf(conf.secondaryId)) {
1217 _$jscoverage['manikin-mongodb.js'][547]++;
1218 datas[i][conf.propertyName].push(conf.secondaryId);
1219 _$jscoverage['manikin-mongodb.js'][548]++;
1220 return updated[i] = true;
1221 }
1222 });
1223 _$jscoverage['manikin-mongodb.js'][551]++;
1224 return async.forEach([
1225 0,
1226 1
1227 ], function (index, callback) {
1228 _$jscoverage['manikin-mongodb.js'][552]++;
1229 if (updated[index]) {
1230 _$jscoverage['manikin-mongodb.js'][553]++;
1231 return datas[index].save(callback);
1232 } else {
1233 _$jscoverage['manikin-mongodb.js'][555]++;
1234 return callback();
1235 }
1236 }, function (err) {
1237 _$jscoverage['manikin-mongodb.js'][558]++;
1238 if (err) {
1239 _$jscoverage['manikin-mongodb.js'][559]++;
1240 return callback(err);
1241 }
1242 _$jscoverage['manikin-mongodb.js'][561]++;
1243 insertOps = insertOps.filter(function (x) {
1244 _$jscoverage['manikin-mongodb.js'][562]++;
1245 return !_(insertOpNow).contains(x);
1246 });
1247 _$jscoverage['manikin-mongodb.js'][564]++;
1248 return callback(null, {
1249 status: updated.some(function (x) {
1250 _$jscoverage['manikin-mongodb.js'][566]++;
1251 return x;
1252 }) ? 'inserted' : 'already inserted'
1253 });
1254 });
1255 }));
1256 };
1257 _$jscoverage['manikin-mongodb.js'][572]++;
1258 api.getMany = function (primaryModel, primaryId, propertyName, callback) {
1259 _$jscoverage['manikin-mongodb.js'][573]++;
1260 return models[primaryModel].findOne({ _id: primaryId }).populate(propertyName).exec(function (err, story) {
1261 _$jscoverage['manikin-mongodb.js'][576]++;
1262 return callback(err, massage(story[propertyName]));
1263 });
1264 };
1265 _$jscoverage['manikin-mongodb.js'][579]++;
1266 return api;
1267 };
1268}.call(this));
1269_$jscoverage['manikin-mongodb.js'].source = ["// Generated by CoffeeScript 1.4.0","(function() {"," \"use strict\";",""," var async, getKeys, massage, massageCore, massageOne, massaged, preprocFilter, propagate, tools, _,"," __slice = [].slice;",""," async = require('async');",""," _ = require('underscore');",""," tools = require('./manikin-tools');",""," preprocFilter = function(filter) {"," var x;"," x = _.extend({}, filter);"," if (x.id) {"," x._id = x.id;"," }"," delete x.id;"," return x;"," };",""," massageOne = function(x) {"," if (!(x != null)) {"," return x;"," }"," x.id = x._id;"," delete x._id;"," return x;"," };",""," massageCore = function(r2) {"," if (Array.isArray(r2)) {"," return r2.map(massageOne);"," } else {"," return massageOne(r2);"," }"," };",""," massage = function(r2) {"," return massageCore(JSON.parse(JSON.stringify(r2)));"," };",""," massaged = function(f) {"," return function(err, data) {"," if (err) {"," return f(err);"," } else {"," return f(null, massage(data));"," }"," };"," };",""," propagate = function(callback, f) {"," return function() {"," var args, err;"," err = arguments[0], args = 2 &lt;= arguments.length ? __slice.call(arguments, 1) : [];"," if (err) {"," return callback(err);"," } else {"," return f.apply(this, args);"," }"," };"," };",""," getKeys = function(data, target, prefix) {"," var valids;"," if (target == null) {"," target = [];"," }"," if (prefix == null) {"," prefix = '';"," }"," valids = ['Array', 'String', 'Boolean', 'Date', 'Number', 'Null'];"," Object.keys(data).forEach(function(key) {"," if (valids.some(function(x) {"," return _(data[key])['is' + x]();"," })) {"," return target.push(prefix + key);"," } else {"," return getKeys(data[key], target, prefix + key + '.');"," }"," });"," return target;"," };",""," exports.create = function() {"," var Mixed, ObjectID, ObjectId, Schema, api, defModels, getMeta, insertOps, internalListSub, key, makeModel, metaData, models, mongoose, nullablesValidation, preRemoveCascadeNonNullable, preRemoveCascadeNullable, specTransform, specmodels;"," if (process.env.NODE_ENV !== 'production') {"," for (key in require.cache) {"," delete require.cache[key];"," }"," }"," mongoose = require('mongoose');"," Schema = mongoose.Schema;"," Mixed = mongoose.Schema.Types.Mixed;"," ObjectID = mongoose.mongo.ObjectID;"," ObjectId = mongoose.Schema.ObjectId;"," api = {};"," models = {};"," specmodels = {};"," metaData = null;"," makeModel = function(connection, name, schema) {"," var ss;"," ss = new Schema(schema, {"," strict: true"," });"," ss.set('versionKey', false);"," return connection.model(name, ss, name);"," };"," getMeta = function(modelName) {"," return metaData[modelName];"," };"," nullablesValidation = function(schema) {"," return function(next) {"," var nonNullOuters, outers, paths, self;"," self = this;"," paths = schema.paths;"," outers = Object.keys(paths).filter(function(x) {"," return paths[x].options.type === ObjectId &amp;&amp; typeof paths[x].options.ref === 'string' &amp;&amp; !paths[x].options['x-owner'];"," }).map(function(x) {"," return {"," plur: paths[x].options.ref,"," sing: x,"," validation: paths[x].options['x-validation']"," };"," });"," nonNullOuters = outers.filter(function(x) {"," return self[x.sing] != null;"," });"," return async.forEach(nonNullOuters, function(o, callback) {"," return api.getOne(o.plur, {"," id: self[o.sing]"," }, function(err, data) {"," if (err || !data) {"," return callback(new Error(\"Invalid pointer\"));"," } else if (o.validation) {"," return o.validation(self, data, function(err) {"," return callback(err ? new Error(err) : void 0);"," });"," } else {"," return callback();"," }"," });"," }, next);"," };"," };"," internalListSub = function(model, outer, id, filter, callback) {"," var finalFilter;"," if ((filter[outer] != null) &amp;&amp; filter[outer].toString() !== id.toString()) {"," callback(new Error('No such id'));"," return;"," }"," filter = preprocFilter(filter);"," finalFilter = _.extend({}, filter, _.object([[outer, id]]));"," return models[model].find(finalFilter, callback);"," };"," preRemoveCascadeNonNullable = function(owner, id, next) {"," var manys;"," manys = getMeta(owner.modelName).manyToMany;"," return async.forEach(manys, function(many, callback) {"," var obj;"," obj = _.object([[many.inverseName, id]]);"," return models[many.ref].update(obj, {"," $pull: obj"," }, callback);"," }, function(err) {"," var flattenedModels;"," if (err) {"," return next(err);"," }"," flattenedModels = getMeta(owner.modelName).owns;"," return async.forEach(flattenedModels, function(mod, callback) {"," return internalListSub(mod.name, mod.field, id, {}, propagate(callback, function(data) {"," return async.forEach(data, function(item, callback) {"," return item.remove(callback);"," }, callback);"," }));"," }, next);"," });"," };"," preRemoveCascadeNullable = function(owner, id, next) {"," var flattenedModels, ownedModels;"," ownedModels = Object.keys(models).map(function(modelName) {"," var paths;"," paths = models[modelName].schema.paths;"," return Object.keys(paths).filter(function(x) {"," return paths[x].options.type === ObjectId &amp;&amp; paths[x].options.ref === owner.modelName &amp;&amp; !paths[x].options['x-owner'];"," }).map(function(x) {"," return {"," name: modelName,"," field: x"," };"," });"," });"," flattenedModels = _.flatten(ownedModels);"," return async.forEach(flattenedModels, function(mod, callback) {"," return internalListSub(mod.name, mod.field, id, {}, propagate(callback, function(data) {"," return async.forEach(data, function(item, callback) {"," item[mod.field] = null;"," item.save();"," return callback();"," }, callback);"," }));"," }, next);"," };"," specTransform = function(allspec, modelName, tgt, src, keys) {"," return keys.forEach(function(key) {"," if (src[key].type === 'mixed') {"," return tgt[key] = {"," type: Mixed"," };"," } else if (src[key].type === 'nested') {"," tgt[key] = {};"," return specTransform(allspec, modelName, tgt[key], src[key], _.without(Object.keys(src[key]), 'type'));"," } else if (src[key].type === 'string') {"," tgt[key] = _.extend({}, src[key], {"," type: String"," });"," if (src[key].validate != null) {"," return tgt[key].validate = function(value, callback) {"," return src[key].validate(api, value, callback);"," };"," }"," } else if (src[key].type === 'number') {"," return tgt[key] = _.extend({}, src[key], {"," type: Number"," });"," } else if (src[key].type === 'date') {"," return tgt[key] = _.extend({}, src[key], {"," type: Date"," });"," } else if (src[key].type === 'boolean') {"," return tgt[key] = _.extend({}, src[key], {"," type: Boolean"," });"," } else if (src[key].type === 'hasOne') {"," return tgt[key] = {"," ref: src[key].model,"," 'x-validation': src[key].validation"," };"," } else if (src[key].type === 'hasMany') {"," tgt[key] = ["," {"," type: ObjectId,"," ref: src[key].model,"," inverseName: src[key].inverseName"," }"," ];"," return allspec[src[key].model][src[key].inverseName] = ["," {"," type: ObjectId,"," ref: modelName,"," inverseName: key"," }"," ];"," }"," });"," };"," defModels = function(models) {"," var allspec, newrest, toDef;"," specmodels = tools.desugar(models);"," toDef = [];"," newrest = {};"," allspec = {};"," Object.keys(specmodels).forEach(function(modelName) {"," return allspec[modelName] = {};"," });"," Object.keys(specmodels).forEach(function(modelName) {"," var inspec, owners, spec;"," spec = allspec[modelName];"," owners = specmodels[modelName].owners || {};"," inspec = specmodels[modelName].fields || {};"," specTransform(allspec, modelName, spec, inspec, Object.keys(inspec));"," return newrest[modelName] = _.extend({}, specmodels[modelName], {"," fields: spec"," });"," });"," Object.keys(newrest).forEach(function(modelName) {"," var conf;"," conf = newrest[modelName];"," Object.keys(conf.owners).forEach(function(ownerName) {"," return conf.fields[ownerName] = {"," type: ObjectId,"," ref: conf.owners[ownerName],"," required: true,"," 'x-owner': true"," };"," });"," Object.keys(conf.indirectOwners).forEach(function(p) {"," return conf.fields[p] = {"," type: ObjectId,"," ref: conf.indirectOwners[p],"," required: true,"," 'x-indirect-owner': true"," };"," });"," Object.keys(conf.fields).forEach(function(fieldName) {"," if (conf.fields[fieldName].ref != null) {"," return conf.fields[fieldName].type = ObjectId;"," }"," });"," return toDef.push([modelName, newrest[modelName]]);"," });"," metaData = tools.getMeta(specmodels);"," return toDef;"," };"," (function() {"," var connection;"," connection = null;"," api.connect = function(databaseUrl, inputModels, callback) {"," try {"," connection = mongoose.createConnection(databaseUrl);"," defModels(inputModels).forEach(function(_arg) {"," var name, v;"," name = _arg[0], v = _arg[1];"," models[name] = makeModel(connection, name, v.fields);"," models[name].schema.pre('save', nullablesValidation(models[name].schema));"," models[name].schema.pre('remove', function(next) {"," return preRemoveCascadeNonNullable(models[name], this._id.toString(), next);"," });"," return models[name].schema.pre('remove', function(next) {"," return preRemoveCascadeNullable(models[name], this._id.toString(), next);"," });"," });"," } catch (ex) {"," callback(ex);"," return;"," }"," return callback();"," };"," return api.close = function(callback) {"," connection.close();"," return callback();"," };"," })();"," api.post = function(model, indata, callback) {"," var owners, ownersOwners, ownersRaw, saveFunc;"," saveFunc = function(data) {"," return new models[model](data).save(function(err) {"," var fieldMatch, valueMatch;"," if (err &amp;&amp; err.code === 11000) {"," fieldMatch = err.err.match(/([a-zA-Z]+)_1/);"," valueMatch = err.err.match(/\"([a-zA-Z]+)\"/);"," if (fieldMatch &amp;&amp; valueMatch) {"," return callback(new Error(\"Duplicate value '\" + valueMatch[1] + \"' for \" + fieldMatch[1]));"," } else {"," return callback(new Error(\"Unique constraint violated\"));"," }"," } else {"," return massaged(callback).apply(this, arguments);"," }"," });"," };"," ownersRaw = getMeta(model).owners;"," owners = _(ownersRaw).pluck('plur');"," ownersOwners = _.flatten(owners.map(function(x) {"," return getMeta(x).owners;"," }));"," if (ownersOwners.length === 0) {"," return saveFunc(indata);"," } else {"," return api.getOne(owners[0], {"," filter: {"," id: indata[ownersRaw[0].sing]"," }"," }, propagate(callback, function(ownerdata) {"," var metaFields, paths;"," paths = models[owners[0]].schema.paths;"," metaFields = Object.keys(paths).filter(function(key) {"," return !!paths[key].options['x-owner'] || !!paths[key].options['x-indirect-owner'];"," });"," metaFields.forEach(function(key) {"," return indata[key] = ownerdata[key];"," });"," return saveFunc(indata);"," }));"," }"," };"," api.list = function(model, filter, callback) {"," var defaultSort, rr;"," filter = preprocFilter(filter);"," defaultSort = specmodels[model].defaultSort;"," rr = models[model].find(filter);"," if (defaultSort != null) {"," rr = rr.sort(_.object([[defaultSort, 'asc']]));"," }"," return rr.exec(massaged(callback));"," };"," api.getOne = function(model, config, callback) {"," var filter;"," filter = preprocFilter(config.filter || {});"," return models[model].findOne(filter, function(err, data) {"," if (err) {"," if (err.toString() === 'Error: Invalid ObjectId') {"," callback(new Error('No such id'));"," } else {"," callback(err);"," }"," } else if (!(data != null)) {"," return callback(new Error('No match'));"," } else {"," return callback(null, massage(data));"," }"," });"," };"," api.delOne = function(model, filter, callback) {"," filter = preprocFilter(filter);"," return models[model].findOne(filter, function(err, d) {"," if (err) {"," if (err.toString() === 'Error: Invalid ObjectId') {"," return callback(new Error('No such id'));"," } else {"," return callback(err);"," }"," } else if (!(d != null)) {"," return callback(new Error('No such id'));"," } else {"," return d.remove(function(err) {"," return callback(err, !err ? massage(d) : void 0);"," });"," }"," });"," };"," api.putOne = function(modelName, data, filter, callback) {"," var inputFields, inputFieldsValid, invalidFields, model, validField;"," filter = preprocFilter(filter);"," model = models[modelName];"," inputFieldsValid = getKeys(data);"," inputFields = Object.keys(data);"," validField = Object.keys(model.schema.paths);"," invalidFields = _.difference(inputFieldsValid, validField);"," if (invalidFields.length &gt; 0) {"," callback(new Error(\"Invalid fields: \" + invalidFields.join(', ')));"," return;"," }"," return model.findOne(filter, function(err, d) {"," if (err != null) {"," if (err.message === 'Invalid ObjectId') {"," callback(new Error(\"No such id\"));"," } else {"," callback(err);"," }"," return;"," }"," if (!(d != null)) {"," callback(new Error(\"No such id\"));"," return;"," }"," inputFields.forEach(function(key) {"," return d[key] = data[key];"," });"," return d.save(function(err) {"," return callback(err, err ? null : massage(d));"," });"," });"," };"," api.delMany = function(primaryModel, primaryId, propertyName, secondaryId, callback) {"," var inverseName, mm, secondaryModel;"," mm = getMeta(primaryModel).manyToMany.filter(function(x) {"," return x.name === propertyName;"," })[0];"," if (!(mm != null)) {"," callback(new Error('Invalid many-to-many property'));"," return;"," }"," secondaryModel = mm.ref;"," inverseName = mm.inverseName;"," return async.forEach(["," {"," model: primaryModel,"," id: primaryId,"," property: propertyName,"," secondaryId: secondaryId"," }, {"," model: secondaryModel,"," id: secondaryId,"," property: inverseName,"," secondaryId: primaryId"," }"," ], function(item, callback) {"," return models[item.model].findById(item.id, propagate(callback, function(data) {"," var conditions, options, update;"," conditions = {"," _id: item.id"," };"," update = {"," $pull: _.object([[item.property, item.secondaryId]])"," };"," options = {};"," return models[item.model].update(conditions, update, options, function(err, numAffected) {"," return callback(err);"," });"," }));"," }, callback);"," };"," insertOps = [];"," api.postMany = function(primaryModel, primaryId, propertyName, secondaryId, callback) {"," var hasAlready, insertOpMatch, insertOpNow, inverseName, mm, secondaryModel;"," mm = getMeta(primaryModel).manyToMany.filter(function(x) {"," return x.name === propertyName;"," })[0];"," if (!(mm != null)) {"," callback(new Error('Invalid many-to-many property'));"," return;"," }"," secondaryModel = mm.ref;"," inverseName = mm.inverseName;"," insertOpNow = ["," {"," primaryModel: primaryModel,"," primaryId: primaryId,"," propertyName: propertyName,"," secondaryId: secondaryId"," }, {"," primaryModel: secondaryModel,"," primaryId: secondaryId,"," propertyName: inverseName,"," secondaryId: primaryId"," }"," ];"," insertOpMatch = function(x1, x2) {"," return x1.primaryModel === x2.primaryModel &amp;&amp; x1.primaryId === x2.primaryId &amp;&amp; x1.propertyName === x2.propertyName &amp;&amp; x1.secondaryId === x2.secondaryId;"," };"," hasAlready = insertOps.some(function(x) {"," return insertOpNow.some(function(y) {"," return insertOpMatch(x, y);"," });"," });"," if (hasAlready) {"," callback(null, {"," status: 'insert already in progress'"," });"," return;"," }"," insertOpNow.forEach(function(op) {"," return insertOps.push(op);"," });"," return async.map(insertOpNow, function(item, callback) {"," return models[item.primaryModel].findById(item.primaryId, callback);"," }, propagate(callback, function(datas) {"," var updated;"," updated = [false, false];"," insertOpNow.forEach(function(conf, i) {"," if (-1 === datas[i][conf.propertyName].indexOf(conf.secondaryId)) {"," datas[i][conf.propertyName].push(conf.secondaryId);"," return updated[i] = true;"," }"," });"," return async.forEach([0, 1], function(index, callback) {"," if (updated[index]) {"," return datas[index].save(callback);"," } else {"," return callback();"," }"," }, function(err) {"," if (err) {"," return callback(err);"," }"," insertOps = insertOps.filter(function(x) {"," return !_(insertOpNow).contains(x);"," });"," return callback(null, {"," status: (updated.some(function(x) {"," return x;"," }) ? 'inserted' : 'already inserted')"," });"," });"," }));"," };"," api.getMany = function(primaryModel, primaryId, propertyName, callback) {"," return models[primaryModel].findOne({"," _id: primaryId"," }).populate(propertyName).exec(function(err, story) {"," return callback(err, massage(story[propertyName]));"," });"," };"," return api;"," };","","}).call(this);"];
\No newline at end of file