1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _regenerator = require('babel-runtime/regenerator');
|
8 |
|
9 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
10 |
|
11 | var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
12 |
|
13 | var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
14 |
|
15 | exports.default = function (racer) {
|
16 | racer.Model.prototype.subDoc = generateMethodOfType(_subscriptionTypeFns.subDoc);
|
17 | racer.Model.prototype.subQuery = generateMethodOfType(_subscriptionTypeFns.subQuery);
|
18 | racer.Model.prototype.subLocal = generateMethodOfType(_subscriptionTypeFns.subLocal);
|
19 | racer.Model.prototype.subValue = generateMethodOfType(_subscriptionTypeFns.subValue);
|
20 | racer.Model.prototype.subApi = generateMethodOfType(_subscriptionTypeFns.subApi);
|
21 | };
|
22 |
|
23 | exports.getCollectionName = getCollectionName;
|
24 | exports.getItemFromParams = getItemFromParams;
|
25 |
|
26 | var _Doc = require('./types/Doc');
|
27 |
|
28 | var _Doc2 = _interopRequireDefault(_Doc);
|
29 |
|
30 | var _Query = require('./types/Query');
|
31 |
|
32 | var _Query2 = _interopRequireDefault(_Query);
|
33 |
|
34 | var _QueryExtra = require('./types/QueryExtra');
|
35 |
|
36 | var _QueryExtra2 = _interopRequireDefault(_QueryExtra);
|
37 |
|
38 | var _Local = require('./types/Local');
|
39 |
|
40 | var _Local2 = _interopRequireDefault(_Local);
|
41 |
|
42 | var _Value = require('./types/Value');
|
43 |
|
44 | var _Value2 = _interopRequireDefault(_Value);
|
45 |
|
46 | var _Api = require('./types/Api');
|
47 |
|
48 | var _Api2 = _interopRequireDefault(_Api);
|
49 |
|
50 | var _subscriptionTypeFns = require('./subscriptionTypeFns');
|
51 |
|
52 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
53 |
|
54 | var SUBS_COLLECTION = '$subs';
|
55 |
|
56 | function generateMethodOfType(typeFn) {
|
57 | var _this = this;
|
58 |
|
59 | var isQuery = typeFn === _subscriptionTypeFns.subQuery;
|
60 | var isSync = typeFn === _subscriptionTypeFns.subLocal || typeFn === _subscriptionTypeFns.subValue;
|
61 |
|
62 |
|
63 |
|
64 |
|
65 | return function () {
|
66 | var _ref = (0, _asyncToGenerator3.default)( _regenerator2.default.mark(function _callee() {
|
67 | var $subs,
|
68 | subId,
|
69 | params,
|
70 | item,
|
71 | unsubscribe,
|
72 | collectionName,
|
73 | $queryCollection,
|
74 | $model,
|
75 | data,
|
76 | _args = arguments;
|
77 | return _regenerator2.default.wrap(function _callee$(_context) {
|
78 | while (1) {
|
79 | switch (_context.prev = _context.next) {
|
80 | case 0:
|
81 | $subs = _this.scope(SUBS_COLLECTION);
|
82 | subId = _this.id();
|
83 | params = typeFn.apply(undefined, _args);
|
84 | item = getItemFromParams(params, $subs, subId);
|
85 |
|
86 | unsubscribe = function unsubscribe() {
|
87 | item.unrefModel();
|
88 | item.destroy();
|
89 | $subs.destroy(subId);
|
90 | };
|
91 |
|
92 | if (isSync) {
|
93 | _context.next = 8;
|
94 | break;
|
95 | }
|
96 |
|
97 | _context.next = 8;
|
98 | return item.init(true, { optional: true });
|
99 |
|
100 | case 8:
|
101 | item.refModel();
|
102 |
|
103 |
|
104 |
|
105 |
|
106 | collectionName = isQuery ? getCollectionName(params) : undefined;
|
107 | $queryCollection = isQuery ? _this.scope(collectionName) : undefined;
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | $model = !isQuery ? $subs.at(subId) : undefined;
|
114 |
|
115 |
|
116 |
|
117 | data = $subs.get()[subId];
|
118 | return _context.abrupt('return', [unsubscribe, data,
|
119 |
|
120 |
|
121 |
|
122 | $queryCollection || $model]);
|
123 |
|
124 | case 14:
|
125 | case 'end':
|
126 | return _context.stop();
|
127 | }
|
128 | }
|
129 | }, _callee, _this);
|
130 | }));
|
131 |
|
132 | return function () {
|
133 | return _ref.apply(this, arguments);
|
134 | };
|
135 | }();
|
136 | }
|
137 |
|
138 | function getCollectionName(params) {
|
139 | return params && params.params && params.params[0];
|
140 | }
|
141 |
|
142 | function getItemFromParams(params, model, key) {
|
143 | var explicitType = params && params.__subscriptionType;
|
144 | var subscriptionParams = params.params;
|
145 | var constructor = getItemConstructor(explicitType);
|
146 | return new constructor(model, key, subscriptionParams);
|
147 | }
|
148 |
|
149 | function getItemConstructor(type) {
|
150 | switch (type) {
|
151 | case 'Local':
|
152 | return _Local2.default;
|
153 | case 'Doc':
|
154 | return _Doc2.default;
|
155 | case 'Query':
|
156 | return _Query2.default;
|
157 | case 'QueryExtra':
|
158 | return _QueryExtra2.default;
|
159 | case 'Value':
|
160 | return _Value2.default;
|
161 | case 'Api':
|
162 | return _Api2.default;
|
163 | default:
|
164 | throw new Error('Unsupported subscription type: ' + type);
|
165 | }
|
166 | } |
\ | No newline at end of file |