@decaf-ts/for-couchdb 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +297 -0
- package/dist/esm/for-couchdb.bundle.min.esm.js +2 -0
- package/dist/esm/for-couchdb.bundle.min.esm.js.LICENSE.txt +25 -0
- package/dist/for-couchdb.bundle.min.js +2 -0
- package/dist/for-couchdb.bundle.min.js.LICENSE.txt +25 -0
- package/lib/adapter.cjs +332 -0
- package/lib/adapter.d.ts +32 -0
- package/lib/constants.cjs +15 -0
- package/lib/constants.d.ts +10 -0
- package/lib/errors.cjs +12 -0
- package/lib/errors.d.ts +4 -0
- package/lib/esm/adapter.d.ts +32 -0
- package/lib/esm/adapter.js +328 -0
- package/lib/esm/constants.d.ts +10 -0
- package/lib/esm/constants.js +12 -0
- package/lib/esm/errors.d.ts +4 -0
- package/lib/esm/errors.js +8 -0
- package/lib/esm/index.d.ts +24 -0
- package/lib/esm/index.js +26 -0
- package/lib/esm/indexes/generator.d.ts +3 -0
- package/lib/esm/indexes/generator.js +72 -0
- package/lib/esm/indexes/index.d.ts +2 -0
- package/lib/esm/indexes/index.js +4 -0
- package/lib/esm/indexes/types.d.ts +11 -0
- package/lib/esm/indexes/types.js +3 -0
- package/lib/esm/interfaces/CouchDBRepository.d.ts +7 -0
- package/lib/esm/interfaces/CouchDBRepository.js +3 -0
- package/lib/esm/interfaces/index.d.ts +1 -0
- package/lib/esm/interfaces/index.js +3 -0
- package/lib/esm/model/CouchDBSequence.d.ts +20 -0
- package/lib/esm/model/CouchDBSequence.js +49 -0
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +3 -0
- package/lib/esm/query/FromClause.d.ts +7 -0
- package/lib/esm/query/FromClause.js +21 -0
- package/lib/esm/query/InsertClause.d.ts +7 -0
- package/lib/esm/query/InsertClause.js +14 -0
- package/lib/esm/query/Paginator.d.ts +10 -0
- package/lib/esm/query/Paginator.js +58 -0
- package/lib/esm/query/SelectClause.d.ts +7 -0
- package/lib/esm/query/SelectClause.js +17 -0
- package/lib/esm/query/Statement.d.ts +13 -0
- package/lib/esm/query/Statement.js +55 -0
- package/lib/esm/query/ValuesClause.d.ts +7 -0
- package/lib/esm/query/ValuesClause.js +13 -0
- package/lib/esm/query/WhereClause.d.ts +7 -0
- package/lib/esm/query/WhereClause.js +58 -0
- package/lib/esm/query/constants.d.ts +4 -0
- package/lib/esm/query/constants.js +22 -0
- package/lib/esm/query/factory.d.ts +24 -0
- package/lib/esm/query/factory.js +118 -0
- package/lib/esm/query/index.d.ts +1 -0
- package/lib/esm/query/index.js +3 -0
- package/lib/esm/query/translate.d.ts +3 -0
- package/lib/esm/query/translate.js +12 -0
- package/lib/esm/sequences/Sequence.d.ts +48 -0
- package/lib/esm/sequences/Sequence.js +127 -0
- package/lib/esm/sequences/index.d.ts +1 -0
- package/lib/esm/sequences/index.js +3 -0
- package/lib/esm/sequences/utils.d.ts +1 -0
- package/lib/esm/sequences/utils.js +17 -0
- package/lib/esm/utils.d.ts +7 -0
- package/lib/esm/utils.js +72 -0
- package/lib/index.cjs +43 -0
- package/lib/index.d.ts +24 -0
- package/lib/indexes/generator.cjs +75 -0
- package/lib/indexes/generator.d.ts +3 -0
- package/lib/indexes/index.cjs +20 -0
- package/lib/indexes/index.d.ts +2 -0
- package/lib/indexes/types.cjs +4 -0
- package/lib/indexes/types.d.ts +11 -0
- package/lib/interfaces/CouchDBRepository.cjs +4 -0
- package/lib/interfaces/CouchDBRepository.d.ts +7 -0
- package/lib/interfaces/index.cjs +19 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/model/CouchDBSequence.cjs +52 -0
- package/lib/model/CouchDBSequence.d.ts +20 -0
- package/lib/model/index.cjs +19 -0
- package/lib/model/index.d.ts +1 -0
- package/lib/query/FromClause.cjs +25 -0
- package/lib/query/FromClause.d.ts +7 -0
- package/lib/query/InsertClause.cjs +18 -0
- package/lib/query/InsertClause.d.ts +7 -0
- package/lib/query/Paginator.cjs +62 -0
- package/lib/query/Paginator.d.ts +10 -0
- package/lib/query/SelectClause.cjs +21 -0
- package/lib/query/SelectClause.d.ts +7 -0
- package/lib/query/Statement.cjs +59 -0
- package/lib/query/Statement.d.ts +13 -0
- package/lib/query/ValuesClause.cjs +17 -0
- package/lib/query/ValuesClause.d.ts +7 -0
- package/lib/query/WhereClause.cjs +62 -0
- package/lib/query/WhereClause.d.ts +7 -0
- package/lib/query/constants.cjs +25 -0
- package/lib/query/constants.d.ts +4 -0
- package/lib/query/factory.cjs +122 -0
- package/lib/query/factory.d.ts +24 -0
- package/lib/query/index.cjs +19 -0
- package/lib/query/index.d.ts +1 -0
- package/lib/query/translate.cjs +15 -0
- package/lib/query/translate.d.ts +3 -0
- package/lib/sequences/Sequence.cjs +131 -0
- package/lib/sequences/Sequence.d.ts +48 -0
- package/lib/sequences/index.cjs +19 -0
- package/lib/sequences/index.d.ts +1 -0
- package/lib/sequences/utils.cjs +20 -0
- package/lib/sequences/utils.d.ts +1 -0
- package/lib/utils.cjs +79 -0
- package/lib/utils.d.ts +7 -0
- package/package.json +124 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { Adapter, PersistenceKeys, Operator, GroupOperator, ConnectionError, Repository, } from "@decaf-ts/core";
|
|
2
|
+
import * as Nano from "nano";
|
|
3
|
+
import { CouchDBKeys, reservedAttributes } from "./constants";
|
|
4
|
+
import { BaseError, ConflictError, InternalError, NotFoundError, } from "@decaf-ts/db-decorators";
|
|
5
|
+
import "reflect-metadata";
|
|
6
|
+
import { CouchDBStatement } from "./query/Statement";
|
|
7
|
+
import { Factory } from "./query";
|
|
8
|
+
import { translateOperators } from "./query/translate";
|
|
9
|
+
import { CouchDBSequence } from "./sequences/Sequence";
|
|
10
|
+
import { IndexError } from "./errors";
|
|
11
|
+
import { generateIndexes } from "./indexes/generator";
|
|
12
|
+
export class CouchDBAdapter extends Adapter {
|
|
13
|
+
constructor(scope, flavour) {
|
|
14
|
+
super(scope, flavour);
|
|
15
|
+
}
|
|
16
|
+
get Clauses() {
|
|
17
|
+
if (!this.factory)
|
|
18
|
+
this.factory = new Factory(this);
|
|
19
|
+
return this.factory;
|
|
20
|
+
}
|
|
21
|
+
Query() {
|
|
22
|
+
return super.Query();
|
|
23
|
+
}
|
|
24
|
+
get Statement() {
|
|
25
|
+
return new CouchDBStatement(this);
|
|
26
|
+
}
|
|
27
|
+
parseCondition(condition) {
|
|
28
|
+
function merge(op, obj1, obj2) {
|
|
29
|
+
const result = { selector: {} };
|
|
30
|
+
result.selector[op] = [obj1, obj2];
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
const { attr1, operator, comparison } = condition;
|
|
34
|
+
let op = {};
|
|
35
|
+
if ([GroupOperator.AND, GroupOperator.OR, Operator.NOT].indexOf(operator) === -1) {
|
|
36
|
+
op[attr1] = {};
|
|
37
|
+
op[attr1][translateOperators(operator)] =
|
|
38
|
+
comparison;
|
|
39
|
+
}
|
|
40
|
+
else if (operator === Operator.NOT) {
|
|
41
|
+
op = this.parseCondition(attr1).selector;
|
|
42
|
+
op[translateOperators(Operator.NOT)] = {};
|
|
43
|
+
op[translateOperators(Operator.NOT)][attr1.attr1] = comparison;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const op1 = this.parseCondition(attr1).selector;
|
|
47
|
+
const op2 = this.parseCondition(comparison).selector;
|
|
48
|
+
op = merge(translateOperators(operator), op1, op2).selector;
|
|
49
|
+
}
|
|
50
|
+
return { selector: op };
|
|
51
|
+
}
|
|
52
|
+
async Sequence(options) {
|
|
53
|
+
return new CouchDBSequence(options);
|
|
54
|
+
}
|
|
55
|
+
async initialize() {
|
|
56
|
+
const managedModels = Adapter.models(this.flavour);
|
|
57
|
+
return this.index(...managedModels);
|
|
58
|
+
}
|
|
59
|
+
async index(...models) {
|
|
60
|
+
const indexes = generateIndexes(models);
|
|
61
|
+
for (const index of indexes) {
|
|
62
|
+
const res = await this.native.createIndex(index);
|
|
63
|
+
const { result, id, name } = res;
|
|
64
|
+
if (result === "existing")
|
|
65
|
+
throw new ConflictError(`Index for table ${name} with id ${id}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async user() {
|
|
69
|
+
try {
|
|
70
|
+
const user = await this.native[CouchDBKeys.NATIVE].session();
|
|
71
|
+
return user.userCtx.name;
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
throw this.parseError(e);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async raw(rawInput, process = true) {
|
|
78
|
+
try {
|
|
79
|
+
const response = await this.native.find(rawInput);
|
|
80
|
+
if (process)
|
|
81
|
+
return response.docs;
|
|
82
|
+
return response;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
throw this.parseError(e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async create(tableName, id, model) {
|
|
89
|
+
const record = {};
|
|
90
|
+
record[CouchDBKeys.TABLE] = tableName;
|
|
91
|
+
record[CouchDBKeys.ID] = this.generateId(tableName, id);
|
|
92
|
+
Object.assign(record, model);
|
|
93
|
+
let response;
|
|
94
|
+
try {
|
|
95
|
+
response = await this.native.insert(record);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
throw this.parseError(e);
|
|
99
|
+
}
|
|
100
|
+
if (!response.ok)
|
|
101
|
+
throw new InternalError(`Failed to insert doc id: ${id} in table ${tableName}`);
|
|
102
|
+
Object.defineProperty(model, PersistenceKeys.METADATA, {
|
|
103
|
+
enumerable: false,
|
|
104
|
+
configurable: false,
|
|
105
|
+
writable: false,
|
|
106
|
+
value: response.rev,
|
|
107
|
+
});
|
|
108
|
+
return model;
|
|
109
|
+
}
|
|
110
|
+
async createAll(tableName, ids, models) {
|
|
111
|
+
if (ids.length !== models.length)
|
|
112
|
+
throw new InternalError("Ids and models must have the same length");
|
|
113
|
+
const records = ids.map((id, count) => {
|
|
114
|
+
const record = {};
|
|
115
|
+
record[CouchDBKeys.TABLE] = tableName;
|
|
116
|
+
record[CouchDBKeys.ID] = this.generateId(tableName, id);
|
|
117
|
+
Object.assign(record, models[count]);
|
|
118
|
+
return record;
|
|
119
|
+
});
|
|
120
|
+
let response;
|
|
121
|
+
try {
|
|
122
|
+
response = await this.native.bulk({ docs: records });
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
throw this.parseError(e);
|
|
126
|
+
}
|
|
127
|
+
if (!response.every((r) => !r.error)) {
|
|
128
|
+
const errors = response.reduce((accum, el, i) => {
|
|
129
|
+
if (el.error)
|
|
130
|
+
accum.push(`el ${i}: ${el.error}${el.reason ? ` - ${el.reason}` : ""}`);
|
|
131
|
+
return accum;
|
|
132
|
+
}, []);
|
|
133
|
+
throw new InternalError(errors.join("\n"));
|
|
134
|
+
}
|
|
135
|
+
models.forEach((m, i) => {
|
|
136
|
+
Repository.setMetadata(m, response[i].rev);
|
|
137
|
+
return m;
|
|
138
|
+
});
|
|
139
|
+
return models;
|
|
140
|
+
}
|
|
141
|
+
async read(tableName, id) {
|
|
142
|
+
const _id = this.generateId(tableName, id);
|
|
143
|
+
let record;
|
|
144
|
+
try {
|
|
145
|
+
record = await this.native.get(_id);
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
throw this.parseError(e);
|
|
149
|
+
}
|
|
150
|
+
Object.defineProperty(record, PersistenceKeys.METADATA, {
|
|
151
|
+
enumerable: false,
|
|
152
|
+
writable: false,
|
|
153
|
+
value: record._rev,
|
|
154
|
+
});
|
|
155
|
+
return record;
|
|
156
|
+
}
|
|
157
|
+
async update(tableName, id, model) {
|
|
158
|
+
const record = {};
|
|
159
|
+
record[CouchDBKeys.TABLE] = tableName;
|
|
160
|
+
record[CouchDBKeys.ID] = this.generateId(tableName, id);
|
|
161
|
+
const rev = model[PersistenceKeys.METADATA];
|
|
162
|
+
if (!rev)
|
|
163
|
+
throw new InternalError(`No revision number found for record with id ${id}`);
|
|
164
|
+
Object.assign(record, model);
|
|
165
|
+
record[CouchDBKeys.REV] = rev;
|
|
166
|
+
let response;
|
|
167
|
+
try {
|
|
168
|
+
response = await this.native.insert(record);
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
throw this.parseError(e);
|
|
172
|
+
}
|
|
173
|
+
if (!response.ok)
|
|
174
|
+
throw new InternalError(`Failed to update doc id: ${id} in table ${tableName}`);
|
|
175
|
+
Object.defineProperty(model, PersistenceKeys.METADATA, {
|
|
176
|
+
enumerable: false,
|
|
177
|
+
configurable: false,
|
|
178
|
+
writable: false,
|
|
179
|
+
value: response.rev,
|
|
180
|
+
});
|
|
181
|
+
return model;
|
|
182
|
+
}
|
|
183
|
+
async delete(tableName, id) {
|
|
184
|
+
const _id = this.generateId(tableName, id);
|
|
185
|
+
let record;
|
|
186
|
+
try {
|
|
187
|
+
record = await this.native.get(_id);
|
|
188
|
+
await this.native.destroy(_id, record._rev);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
throw this.parseError(e);
|
|
192
|
+
}
|
|
193
|
+
Object.defineProperty(record, PersistenceKeys.METADATA, {
|
|
194
|
+
enumerable: false,
|
|
195
|
+
configurable: false,
|
|
196
|
+
writable: false,
|
|
197
|
+
value: record._rev,
|
|
198
|
+
});
|
|
199
|
+
return record;
|
|
200
|
+
}
|
|
201
|
+
generateId(tableName, id) {
|
|
202
|
+
return [tableName, id].join(CouchDBKeys.SEPARATOR);
|
|
203
|
+
}
|
|
204
|
+
parseError(err, reason) {
|
|
205
|
+
return CouchDBAdapter.parseError(err, reason);
|
|
206
|
+
}
|
|
207
|
+
isReserved(attr) {
|
|
208
|
+
return !!attr.match(reservedAttributes);
|
|
209
|
+
}
|
|
210
|
+
static parseError(err, reason) {
|
|
211
|
+
if (err instanceof BaseError)
|
|
212
|
+
return err;
|
|
213
|
+
let code = "";
|
|
214
|
+
if (typeof err === "string") {
|
|
215
|
+
code = err;
|
|
216
|
+
if (code.match(/already exist|update conflict/g))
|
|
217
|
+
return new ConflictError(code);
|
|
218
|
+
if (code.match(/missing|deleted/g))
|
|
219
|
+
return new NotFoundError(code);
|
|
220
|
+
}
|
|
221
|
+
else if (err.code) {
|
|
222
|
+
code = err.code;
|
|
223
|
+
reason = reason || err.message;
|
|
224
|
+
}
|
|
225
|
+
else if (err.statusCode) {
|
|
226
|
+
code = err.statusCode;
|
|
227
|
+
reason = reason || err.message;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
code = err.message;
|
|
231
|
+
}
|
|
232
|
+
switch (code.toString()) {
|
|
233
|
+
case "401":
|
|
234
|
+
case "412":
|
|
235
|
+
case "409":
|
|
236
|
+
return new ConflictError(reason);
|
|
237
|
+
case "404":
|
|
238
|
+
return new NotFoundError(reason);
|
|
239
|
+
case "400":
|
|
240
|
+
if (code.toString().match(/No\sindex\sexists/g))
|
|
241
|
+
return new IndexError(err);
|
|
242
|
+
return new InternalError(err);
|
|
243
|
+
default:
|
|
244
|
+
if (code.toString().match(/ECONNREFUSED/g))
|
|
245
|
+
return new ConnectionError(err);
|
|
246
|
+
return new InternalError(err);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
static connect(user, pass, host = "localhost:5984", protocol = "http") {
|
|
250
|
+
return Nano(`${protocol}://${user}:${pass}@${host}`);
|
|
251
|
+
}
|
|
252
|
+
static async createDatabase(con, name) {
|
|
253
|
+
let result;
|
|
254
|
+
try {
|
|
255
|
+
result = await con.db.create(name);
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
throw this.parseError(e);
|
|
259
|
+
}
|
|
260
|
+
const { ok, error, reason } = result;
|
|
261
|
+
if (!ok)
|
|
262
|
+
throw this.parseError(error, reason);
|
|
263
|
+
}
|
|
264
|
+
static async deleteDatabase(con, name) {
|
|
265
|
+
let result;
|
|
266
|
+
try {
|
|
267
|
+
result = await con.db.destroy(name);
|
|
268
|
+
}
|
|
269
|
+
catch (e) {
|
|
270
|
+
throw this.parseError(e);
|
|
271
|
+
}
|
|
272
|
+
const { ok } = result;
|
|
273
|
+
if (!ok)
|
|
274
|
+
throw new InternalError(`Failed to delete database with name ${name}`);
|
|
275
|
+
}
|
|
276
|
+
static async createUser(con, dbName, user, pass, roles = ["reader", "writer"]) {
|
|
277
|
+
const users = await con.db.use("_users");
|
|
278
|
+
const usr = {
|
|
279
|
+
_id: "org.couchdb.user:" + user,
|
|
280
|
+
name: user,
|
|
281
|
+
password: pass,
|
|
282
|
+
roles: roles,
|
|
283
|
+
type: "user",
|
|
284
|
+
};
|
|
285
|
+
try {
|
|
286
|
+
const created = await users.insert(usr);
|
|
287
|
+
const { ok } = created;
|
|
288
|
+
if (!ok)
|
|
289
|
+
throw new InternalError(`Failed to create user ${user}`);
|
|
290
|
+
const security = await con.request({
|
|
291
|
+
db: dbName,
|
|
292
|
+
method: "put",
|
|
293
|
+
path: "_security",
|
|
294
|
+
// headers: {
|
|
295
|
+
//
|
|
296
|
+
// },
|
|
297
|
+
body: {
|
|
298
|
+
admins: {
|
|
299
|
+
names: [user],
|
|
300
|
+
roles: [],
|
|
301
|
+
},
|
|
302
|
+
members: {
|
|
303
|
+
names: [user],
|
|
304
|
+
roles: roles,
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
if (!security.ok)
|
|
309
|
+
throw new InternalError(`Failed to authorize user ${user} to db ${dbName}`);
|
|
310
|
+
}
|
|
311
|
+
catch (e) {
|
|
312
|
+
throw this.parseError(e);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
static async deleteUser(con, dbName, user) {
|
|
316
|
+
const users = await con.db.use("_users");
|
|
317
|
+
const id = "org.couchdb.user:" + user;
|
|
318
|
+
try {
|
|
319
|
+
const usr = await users.get(id);
|
|
320
|
+
await users.destroy(id, usr._rev);
|
|
321
|
+
}
|
|
322
|
+
catch (e) {
|
|
323
|
+
throw this.parseError(e);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QVUsTUFBTSxFQUFFLENBQ25ELENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFnQixFQUFFLE1BQWMsRUFBRSxJQUFZO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsTUFBTSxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0FDRiIsImZpbGUiOiJhZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRhcHRlcixcbiAgU2VxdWVuY2UsXG4gIFNlcXVlbmNlT3B0aW9ucyxcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBPcGVyYXRvcixcbiAgR3JvdXBPcGVyYXRvcixcbiAgU3RhdGVtZW50LFxuICBRdWVyeSxcbiAgQ2xhdXNlRmFjdG9yeSxcbiAgQ29uZGl0aW9uLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHtcbiAgTWFuZ29RdWVyeSxcbiAgRG9jdW1lbnRTY29wZSxcbiAgRG9jdW1lbnRJbnNlcnRSZXNwb25zZSxcbiAgRG9jdW1lbnRHZXRSZXNwb25zZSxcbiAgU2VydmVyU2NvcGUsXG4gIERhdGFiYXNlQ3JlYXRlUmVzcG9uc2UsXG4gIE1heWJlRG9jdW1lbnQsXG4gIE1hbmdvUmVzcG9uc2UsXG4gIE1hbmdvU2VsZWN0b3IsXG4gIERvY3VtZW50QnVsa1Jlc3BvbnNlLFxuICBNYW5nb09wZXJhdG9yLFxuICBEYXRhYmFzZVNlc3Npb25SZXNwb25zZSxcbiAgQ3JlYXRlSW5kZXhSZXF1ZXN0LFxufSBmcm9tIFwibmFub1wiO1xuaW1wb3J0ICogYXMgTmFubyBmcm9tIFwibmFub1wiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMsIHJlc2VydmVkQXR0cmlidXRlcyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IENvdWNoREJTdGF0ZW1lbnQgfSBmcm9tIFwiLi9xdWVyeS9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IEZhY3RvcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuaW1wb3J0IHsgdHJhbnNsYXRlT3BlcmF0b3JzIH0gZnJvbSBcIi4vcXVlcnkvdHJhbnNsYXRlXCI7XG5pbXBvcnQgeyBDb3VjaERCU2VxdWVuY2UgfSBmcm9tIFwiLi9zZXF1ZW5jZXMvU2VxdWVuY2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEluZGV4RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IGdlbmVyYXRlSW5kZXhlcyB9IGZyb20gXCIuL2luZGV4ZXMvZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBjbGFzcyBDb3VjaERCQWRhcHRlciBleHRlbmRzIEFkYXB0ZXI8RG9jdW1lbnRTY29wZTxhbnk+LCBNYW5nb1F1ZXJ5PiB7XG4gIHByaXZhdGUgZmFjdG9yeT86IEZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IERvY3VtZW50U2NvcGU8YW55PiwgZmxhdm91cjogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGZsYXZvdXIpO1xuICB9XG5cbiAgZ2V0IENsYXVzZXMoKTogQ2xhdXNlRmFjdG9yeTxEb2N1bWVudFNjb3BlPGFueT4sIE1hbmdvUXVlcnk+IHtcbiAgICBpZiAoIXRoaXMuZmFjdG9yeSkgdGhpcy5mYWN0b3J5ID0gbmV3IEZhY3RvcnkodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMuZmFjdG9yeTtcbiAgfVxuXG4gIFF1ZXJ5PE0gZXh0ZW5kcyBNb2RlbD4oKTogUXVlcnk8TWFuZ29RdWVyeSwgTT4ge1xuICAgIHJldHVybiBzdXBlci5RdWVyeSgpO1xuICB9XG5cbiAgZ2V0IFN0YXRlbWVudCgpOiBTdGF0ZW1lbnQ8TWFuZ29RdWVyeT4ge1xuICAgIHJldHVybiBuZXcgQ291Y2hEQlN0YXRlbWVudCh0aGlzKTtcbiAgfVxuXG4gIHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uKTogTWFuZ29RdWVyeSB7XG4gICAgZnVuY3Rpb24gbWVyZ2UoXG4gICAgICBvcDogTWFuZ29PcGVyYXRvcixcbiAgICAgIG9iajE6IE1hbmdvU2VsZWN0b3IsXG4gICAgICBvYmoyOiBNYW5nb1NlbGVjdG9yXG4gICAgKTogTWFuZ29RdWVyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiB7fSBhcyBNYW5nb1NlbGVjdG9yIH07XG4gICAgICByZXN1bHQuc2VsZWN0b3Jbb3BdID0gW29iajEsIG9iajJdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgfTtcblxuICAgIGxldCBvcDogTWFuZ29TZWxlY3RvciA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgaWYgKFxuICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgIG9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3JcbiAgICAgICkgPT09IC0xXG4gICAgKSB7XG4gICAgICBvcFthdHRyMSBhcyBzdHJpbmddID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIChvcFthdHRyMSBhcyBzdHJpbmddIGFzIE1hbmdvU2VsZWN0b3IpW3RyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcildID1cbiAgICAgICAgY29tcGFyaXNvbjtcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBPcGVyYXRvci5OT1QpIHtcbiAgICAgIG9wID0gdGhpcy5wYXJzZUNvbmRpdGlvbihhdHRyMSBhcyBDb25kaXRpb24pLnNlbGVjdG9yIGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICBvcFt0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKV0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKG9wW3RyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXSBhcyBNYW5nb1NlbGVjdG9yKVtcbiAgICAgICAgKGF0dHIxIGFzIHVua25vd24gYXMgeyBhdHRyMTogc3RyaW5nIH0pLmF0dHIxXG4gICAgICBdID0gY29tcGFyaXNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3AxOiBhbnkgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbikuc2VsZWN0b3I7XG4gICAgICBjb25zdCBvcDI6IGFueSA9IHRoaXMucGFyc2VDb25kaXRpb24oY29tcGFyaXNvbiBhcyBDb25kaXRpb24pLnNlbGVjdG9yO1xuICAgICAgb3AgPSBtZXJnZSh0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpLCBvcDEsIG9wMikuc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VsZWN0b3I6IG9wIH07XG4gIH1cblxuICBhc3luYyBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIG5ldyBDb3VjaERCU2VxdWVuY2Uob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hbmFnZWRNb2RlbHMgPSBBZGFwdGVyLm1vZGVscyh0aGlzLmZsYXZvdXIpO1xuICAgIHJldHVybiB0aGlzLmluZGV4KC4uLm1hbmFnZWRNb2RlbHMpO1xuICB9XG5cbiAgYXN5bmMgaW5kZXg8TSBleHRlbmRzIE1vZGVsPiguLi5tb2RlbHM6IENvbnN0cnVjdG9yPE0+W10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGluZGV4ZXM6IENyZWF0ZUluZGV4UmVxdWVzdFtdID0gZ2VuZXJhdGVJbmRleGVzKG1vZGVscyk7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChpbmRleCk7XG4gICAgICBjb25zdCB7IHJlc3VsdCwgaWQsIG5hbWUgfSA9IHJlcztcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiZXhpc3RpbmdcIilcbiAgICAgICAgdGhyb3cgbmV3IENvbmZsaWN0RXJyb3IoYEluZGV4IGZvciB0YWJsZSAke25hbWV9IHdpdGggaWQgJHtpZH1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1c2VyKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyOiBEYXRhYmFzZVNlc3Npb25SZXNwb25zZSA9IGF3YWl0IChcbiAgICAgICAgKHRoaXMubmF0aXZlIGFzIGFueSlbQ291Y2hEQktleXMuTkFUSVZFXSBhcyBTZXJ2ZXJTY29wZVxuICAgICAgKS5zZXNzaW9uKCk7XG4gICAgICByZXR1cm4gdXNlci51c2VyQ3R4Lm5hbWU7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmF3PFY+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5LCBwcm9jZXNzID0gdHJ1ZSk6IFByb21pc2U8Vj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogTWFuZ29SZXNwb25zZTxWPiA9IGF3YWl0IHRoaXMubmF0aXZlLmZpbmQocmF3SW5wdXQpO1xuICAgICAgaWYgKHByb2Nlc3MpIHJldHVybiByZXNwb25zZS5kb2NzIGFzIFY7XG4gICAgICByZXR1cm4gcmVzcG9uc2UgYXMgVjtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICBsZXQgcmVzcG9uc2U6IERvY3VtZW50SW5zZXJ0UmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUuaW5zZXJ0KHJlY29yZCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGluc2VydCBkb2MgaWQ6ICR7aWR9IGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZGVsLCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiByZXNwb25zZS5yZXYsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQWxsKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKGlkLCBjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbHNbY291bnRdKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgbGV0IHJlc3BvbnNlOiBEb2N1bWVudEJ1bGtSZXNwb25zZVtdO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLmJ1bGsoeyBkb2NzOiByZWNvcmRzIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLmV2ZXJ5KChyKSA9PiAhci5lcnJvcikpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHJlc3BvbnNlLnJlZHVjZSgoYWNjdW06IHN0cmluZ1tdLCBlbCwgaSkgPT4ge1xuICAgICAgICBpZiAoZWwuZXJyb3IpXG4gICAgICAgICAgYWNjdW0ucHVzaChcbiAgICAgICAgICAgIGBlbCAke2l9OiAke2VsLmVycm9yfSR7ZWwucmVhc29uID8gYCAtICR7ZWwucmVhc29ufWAgOiBcIlwifWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCBbXSk7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlcnJvcnMuam9pbihcIlxcblwiKSk7XG4gICAgfVxuXG4gICAgbW9kZWxzLmZvckVhY2goKG0sIGkpID0+IHtcbiAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSBhcyBhbnksIHJlc3BvbnNlW2ldLnJldik7XG4gICAgICByZXR1cm4gbTtcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgYXN5bmMgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IF9pZCA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBsZXQgcmVjb3JkOiBEb2N1bWVudEdldFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZWNvcmQgPSBhd2FpdCB0aGlzLm5hdGl2ZS5nZXQoX2lkKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlY29yZCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiByZWNvcmQuX3JldixcbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGNvbnN0IHJldiA9IG1vZGVsW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gICAgaWYgKCFyZXYpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIHJldmlzaW9uIG51bWJlciBmb3VuZCBmb3IgcmVjb3JkIHdpdGggaWQgJHtpZH1gXG4gICAgICApO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlJFVl0gPSByZXY7XG4gICAgbGV0IHJlc3BvbnNlOiBEb2N1bWVudEluc2VydFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLmluc2VydChyZWNvcmQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2Uub2spXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byB1cGRhdGUgZG9jIGlkOiAke2lkfSBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogcmVzcG9uc2UucmV2LFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IF9pZCA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBsZXQgcmVjb3JkOiBEb2N1bWVudEdldFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZWNvcmQgPSBhd2FpdCB0aGlzLm5hdGl2ZS5nZXQoX2lkKTtcbiAgICAgIGF3YWl0IHRoaXMubmF0aXZlLmRlc3Ryb3koX2lkLCByZWNvcmQuX3Jldik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWNvcmQsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHJlY29yZC5fcmV2LFxuICAgIH0pO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSWQodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRdLmpvaW4oQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgcmV0dXJuIENvdWNoREJBZGFwdGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzUmVzZXJ2ZWQoYXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXR0ci5tYXRjaChyZXNlcnZlZEF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIGVyciBhcyBhbnk7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvZGUgPSBlcnI7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3QvZykpXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKTtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9taXNzaW5nfGRlbGV0ZWQvZykpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5jb2RlKSB7XG4gICAgICBjb2RlID0gKGVyciBhcyBhbnkpLmNvZGU7XG4gICAgICByZWFzb24gPSByZWFzb24gfHwgZXJyLm1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmICgoZXJyIGFzIGFueSkuc3RhdHVzQ29kZSkge1xuICAgICAgY29kZSA9IChlcnIgYXMgYW55KS5zdGF0dXNDb2RlO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgXCI0MDFcIjpcbiAgICAgIGNhc2UgXCI0MTJcIjpcbiAgICAgIGNhc2UgXCI0MDlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwNFwiOlxuICAgICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDAwXCI6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL05vXFxzaW5kZXhcXHNleGlzdHMvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBJbmRleEVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvRUNPTk5SRUZVU0VEL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb25uZWN0KFxuICAgIHVzZXI6IHN0cmluZyxcbiAgICBwYXNzOiBzdHJpbmcsXG4gICAgaG9zdCA9IFwibG9jYWxob3N0OjU5ODRcIixcbiAgICBwcm90b2NvbDogXCJodHRwXCIgfCBcImh0dHBzXCIgPSBcImh0dHBcIlxuICApOiBTZXJ2ZXJTY29wZSB7XG4gICAgcmV0dXJuIE5hbm8oYCR7cHJvdG9jb2x9Oi8vJHt1c2VyfToke3Bhc3N9QCR7aG9zdH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVEYXRhYmFzZShjb246IFNlcnZlclNjb3BlLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0OiBEYXRhYmFzZUNyZWF0ZVJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjb24uZGIuY3JlYXRlKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICBjb25zdCB7IG9rLCBlcnJvciwgcmVhc29uIH0gPSByZXN1bHQ7XG4gICAgaWYgKCFvaykgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yIGFzIHN0cmluZywgcmVhc29uKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkZWxldGVEYXRhYmFzZShjb246IFNlcnZlclNjb3BlLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjb24uZGIuZGVzdHJveShuYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgY29uc3QgeyBvayB9ID0gcmVzdWx0O1xuICAgIGlmICghb2spXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSB3aXRoIG5hbWUgJHtuYW1lfWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVVzZXIoXG4gICAgY29uOiBTZXJ2ZXJTY29wZSxcbiAgICBkYk5hbWU6IHN0cmluZyxcbiAgICB1c2VyOiBzdHJpbmcsXG4gICAgcGFzczogc3RyaW5nLFxuICAgIHJvbGVzOiBzdHJpbmdbXSA9IFtcInJlYWRlclwiLCBcIndyaXRlclwiXVxuICApIHtcbiAgICBjb25zdCB1c2VycyA9IGF3YWl0IGNvbi5kYi51c2UoXCJfdXNlcnNcIik7XG4gICAgY29uc3QgdXNyID0ge1xuICAgICAgX2lkOiBcIm9yZy5jb3VjaGRiLnVzZXI6XCIgKyB1c2VyLFxuICAgICAgbmFtZTogdXNlcixcbiAgICAgIHBhc3N3b3JkOiBwYXNzLFxuICAgICAgcm9sZXM6IHJvbGVzLFxuICAgICAgdHlwZTogXCJ1c2VyXCIsXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlYXRlZDogRG9jdW1lbnRJbnNlcnRSZXNwb25zZSA9IGF3YWl0IHVzZXJzLmluc2VydChcbiAgICAgICAgdXNyIGFzIE1heWJlRG9jdW1lbnRcbiAgICAgICk7XG4gICAgICBjb25zdCB7IG9rIH0gPSBjcmVhdGVkO1xuICAgICAgaWYgKCFvaykgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgdXNlciAke3VzZXJ9YCk7XG4gICAgICBjb25zdCBzZWN1cml0eTogYW55ID0gYXdhaXQgY29uLnJlcXVlc3Qoe1xuICAgICAgICBkYjogZGJOYW1lLFxuICAgICAgICBtZXRob2Q6IFwicHV0XCIsXG4gICAgICAgIHBhdGg6IFwiX3NlY3VyaXR5XCIsXG4gICAgICAgIC8vIGhlYWRlcnM6IHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGFkbWluczoge1xuICAgICAgICAgICAgbmFtZXM6IFt1c2VyXSxcbiAgICAgICAgICAgIHJvbGVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcnM6IHtcbiAgICAgICAgICAgIG5hbWVzOiBbdXNlcl0sXG4gICAgICAgICAgICByb2xlczogcm9sZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFzZWN1cml0eS5vaylcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBhdXRob3JpemUgdXNlciAke3VzZXJ9IHRvIGRiICR7ZGJOYW1lfWBcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGVsZXRlVXNlcihjb246IFNlcnZlclNjb3BlLCBkYk5hbWU6IHN0cmluZywgdXNlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgdXNlcnMgPSBhd2FpdCBjb24uZGIudXNlKFwiX3VzZXJzXCIpO1xuICAgIGNvbnN0IGlkID0gXCJvcmcuY291Y2hkYi51c2VyOlwiICsgdXNlcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNyID0gYXdhaXQgdXNlcnMuZ2V0KGlkKTtcbiAgICAgIGF3YWl0IHVzZXJzLmRlc3Ryb3koaWQsIHVzci5fcmV2KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const reservedAttributes = /^_.*$/g;
|
|
2
|
+
export const CouchDBKeys = {
|
|
3
|
+
SEPARATOR: "_",
|
|
4
|
+
ID: "_id",
|
|
5
|
+
REV: "_rev",
|
|
6
|
+
TABLE: "??table",
|
|
7
|
+
DDOC: "ddoc",
|
|
8
|
+
NATIVE: "__native",
|
|
9
|
+
INDEX: "index",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixTQUFTLEVBQUUsR0FBRztJQUNkLEVBQUUsRUFBRSxLQUFLO0lBQ1QsR0FBRyxFQUFFLE1BQU07SUFDWCxLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQyIsImZpbGUiOiJjb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmVzZXJ2ZWRBdHRyaWJ1dGVzID0gL15fLiokL2c7XG5cbmV4cG9ydCBjb25zdCBDb3VjaERCS2V5cyA9IHtcbiAgU0VQQVJBVE9SOiBcIl9cIixcbiAgSUQ6IFwiX2lkXCIsXG4gIFJFVjogXCJfcmV2XCIsXG4gIFRBQkxFOiBcIj8/dGFibGVcIixcbiAgRERPQzogXCJkZG9jXCIsXG4gIE5BVElWRTogXCJfX25hdGl2ZVwiLFxuICBJTkRFWDogXCJpbmRleFwiLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseError } from "@decaf-ts/db-decorators";
|
|
2
|
+
export class IndexError extends BaseError {
|
|
3
|
+
constructor(msg) {
|
|
4
|
+
super(IndexError.name, msg);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE1BQU0sT0FBTyxVQUFXLFNBQVEsU0FBUztJQUN2QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsImZpbGUiOiJlcnJvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGNsYXNzIEluZGV4RXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZyB8IEVycm9yKSB7XG4gICAgc3VwZXIoSW5kZXhFcnJvci5uYW1lLCBtc2cpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./sequences";
|
|
3
|
+
export * from "./adapter";
|
|
4
|
+
export * from "./constants";
|
|
5
|
+
export * from "./errors";
|
|
6
|
+
export * from "./utils";
|
|
7
|
+
/**
|
|
8
|
+
* @summary Module summary
|
|
9
|
+
* @description Module description
|
|
10
|
+
* @module ts-workspace
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @summary Namespace summary
|
|
14
|
+
* @description Namespace description
|
|
15
|
+
* @namespace Namespace
|
|
16
|
+
* @memberOf module:ts-workspace
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @summary stores the current package version
|
|
20
|
+
* @description this is how you should document a constant
|
|
21
|
+
* @const VERSION
|
|
22
|
+
* @memberOf module:ts-workspace
|
|
23
|
+
*/
|
|
24
|
+
export declare const VERSION = "0.0.1";
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export * from "./model";
|
|
2
|
+
export * from "./sequences";
|
|
3
|
+
export * from "./adapter";
|
|
4
|
+
export * from "./constants";
|
|
5
|
+
export * from "./errors";
|
|
6
|
+
export * from "./utils";
|
|
7
|
+
/**
|
|
8
|
+
* @summary Module summary
|
|
9
|
+
* @description Module description
|
|
10
|
+
* @module ts-workspace
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @summary Namespace summary
|
|
14
|
+
* @description Namespace description
|
|
15
|
+
* @namespace Namespace
|
|
16
|
+
* @memberOf module:ts-workspace
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @summary stores the current package version
|
|
20
|
+
* @description this is how you should document a constant
|
|
21
|
+
* @const VERSION
|
|
22
|
+
* @memberOf module:ts-workspace
|
|
23
|
+
*/
|
|
24
|
+
export const VERSION = "0.0.1";
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUV4Qjs7OztHQUlHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VxdWVuY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBNb2R1bGUgc3VtbWFyeVxuICogQGRlc2NyaXB0aW9uIE1vZHVsZSBkZXNjcmlwdGlvblxuICogQG1vZHVsZSB0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IE5hbWVzcGFjZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTmFtZXNwYWNlIGRlc2NyaXB0aW9uXG4gKiBAbmFtZXNwYWNlIE5hbWVzcGFjZVxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IHN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb25cbiAqIEBkZXNjcmlwdGlvbiB0aGlzIGlzIGhvdyB5b3Ugc2hvdWxkIGRvY3VtZW50IGEgY29uc3RhbnRcbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRzLXdvcmtzcGFjZVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMC4wLjFcIjtcbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { PersistenceKeys, Repository, } from "@decaf-ts/core";
|
|
2
|
+
import { CouchDBKeys } from "../constants";
|
|
3
|
+
import { DefaultSeparator } from "@decaf-ts/db-decorators";
|
|
4
|
+
import { CouchDBOperator } from "../query/constants";
|
|
5
|
+
function generateIndexName(name, direction, compositions, separator = DefaultSeparator) {
|
|
6
|
+
return [
|
|
7
|
+
...name.map((n) => (n === CouchDBKeys.TABLE ? "table" : n)),
|
|
8
|
+
...(compositions || []),
|
|
9
|
+
...(direction ? [direction] : []),
|
|
10
|
+
CouchDBKeys.INDEX,
|
|
11
|
+
].join(separator);
|
|
12
|
+
}
|
|
13
|
+
export function generateIndexes(models) {
|
|
14
|
+
const tableName = generateIndexName([CouchDBKeys.TABLE]);
|
|
15
|
+
const indexes = {};
|
|
16
|
+
indexes[tableName] = {
|
|
17
|
+
index: {
|
|
18
|
+
fields: [CouchDBKeys.TABLE],
|
|
19
|
+
},
|
|
20
|
+
name: tableName,
|
|
21
|
+
ddoc: tableName,
|
|
22
|
+
type: "json",
|
|
23
|
+
};
|
|
24
|
+
models.forEach((m) => {
|
|
25
|
+
const ind = Repository.indexes(m);
|
|
26
|
+
Object.entries(ind).forEach(([key, value]) => {
|
|
27
|
+
const k = Object.keys(value)[0];
|
|
28
|
+
// eslint-disable-next-line prefer-const
|
|
29
|
+
let { directions, compositions } = value[k];
|
|
30
|
+
const tableName = Repository.table(m);
|
|
31
|
+
compositions = compositions || [];
|
|
32
|
+
function generate(sort) {
|
|
33
|
+
const name = [
|
|
34
|
+
tableName,
|
|
35
|
+
key,
|
|
36
|
+
...compositions,
|
|
37
|
+
PersistenceKeys.INDEX,
|
|
38
|
+
].join(DefaultSeparator);
|
|
39
|
+
indexes[name] = {
|
|
40
|
+
index: {
|
|
41
|
+
fields: [key, ...compositions, CouchDBKeys.TABLE].reduce((accum, el) => {
|
|
42
|
+
if (sort) {
|
|
43
|
+
const res = {};
|
|
44
|
+
res[el] = sort;
|
|
45
|
+
accum.push(res);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
accum.push(el);
|
|
49
|
+
}
|
|
50
|
+
return accum;
|
|
51
|
+
}, []),
|
|
52
|
+
},
|
|
53
|
+
name: name,
|
|
54
|
+
ddoc: name,
|
|
55
|
+
type: "json",
|
|
56
|
+
};
|
|
57
|
+
if (!sort) {
|
|
58
|
+
const tableFilter = {};
|
|
59
|
+
tableFilter[CouchDBKeys.TABLE] = {};
|
|
60
|
+
tableFilter[CouchDBKeys.TABLE][CouchDBOperator.EQUAL] = tableName;
|
|
61
|
+
indexes[name].index.partial_filter_selector = tableFilter;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
generate();
|
|
65
|
+
if (directions)
|
|
66
|
+
directions.forEach((d) => generate(d));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
return Object.values(indexes);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleGVzL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsZUFBZSxFQUNmLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELFNBQVMsaUJBQWlCLENBQ3hCLElBQWMsRUFDZCxTQUEwQixFQUMxQixZQUF1QixFQUN2QixTQUFTLEdBQUcsZ0JBQWdCO0lBRTVCLE9BQU87UUFDTCxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDdkIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFdBQVcsQ0FBQyxLQUFLO0tBQ2xCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUF3QjtJQUV4QixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUF1QyxFQUFFLENBQUM7SUFDdkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHO1FBQ25CLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDNUI7UUFDRCxJQUFJLEVBQUUsU0FBUztRQUNmLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLE1BQU07S0FDYixDQUFDO0lBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFrQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLHdDQUF3QztZQUN4QyxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFJLEtBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLFlBQVksR0FBRyxZQUFZLElBQUksRUFBRSxDQUFDO1lBRWxDLFNBQVMsUUFBUSxDQUFDLElBQXFCO2dCQUNyQyxNQUFNLElBQUksR0FBRztvQkFDWCxTQUFTO29CQUNULEdBQUc7b0JBQ0gsR0FBSSxZQUFtQjtvQkFDdkIsZUFBZSxDQUFDLEtBQUs7aUJBQ3RCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXpCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDZCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUksWUFBbUIsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEtBQVksRUFBRSxFQUFFLEVBQUUsRUFBRTs0QkFDbkIsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQ0FDVCxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7Z0NBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7Z0NBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDbEIsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ2pCLENBQUM7NEJBQ0QsT0FBTyxLQUFLLENBQUM7d0JBQ2YsQ0FBQyxFQUNELEVBQUUsQ0FDSDtxQkFDRjtvQkFDRCxJQUFJLEVBQUUsSUFBSTtvQkFDVixJQUFJLEVBQUUsSUFBSTtvQkFDVixJQUFJLEVBQUUsTUFBTTtpQkFDYixDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDVixNQUFNLFdBQVcsR0FBd0IsRUFBRSxDQUFDO29CQUM1QyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDcEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUNsRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLFdBQVcsQ0FBQztnQkFDNUQsQ0FBQztZQUNILENBQUM7WUFFRCxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksVUFBVTtnQkFDWCxVQUEwQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwiZmlsZSI6ImluZGV4ZXMvZ2VuZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5kZXhNZXRhZGF0YSxcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFBlcnNpc3RlbmNlS2V5cyxcbiAgUmVwb3NpdG9yeSxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBDb3VjaERCS2V5cyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IERlZmF1bHRTZXBhcmF0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuaW1wb3J0IHsgQ3JlYXRlSW5kZXhSZXF1ZXN0IH0gZnJvbSBcIm5hbm9cIjtcbmltcG9ydCB7IENvdWNoREJPcGVyYXRvciB9IGZyb20gXCIuLi9xdWVyeS9jb25zdGFudHNcIjtcblxuZnVuY3Rpb24gZ2VuZXJhdGVJbmRleE5hbWUoXG4gIG5hbWU6IHN0cmluZ1tdLFxuICBkaXJlY3Rpb24/OiBPcmRlckRpcmVjdGlvbixcbiAgY29tcG9zaXRpb25zPzogc3RyaW5nW10sXG4gIHNlcGFyYXRvciA9IERlZmF1bHRTZXBhcmF0b3Jcbikge1xuICByZXR1cm4gW1xuICAgIC4uLm5hbWUubWFwKChuKSA9PiAobiA9PT0gQ291Y2hEQktleXMuVEFCTEUgPyBcInRhYmxlXCIgOiBuKSksXG4gICAgLi4uKGNvbXBvc2l0aW9ucyB8fCBbXSksXG4gICAgLi4uKGRpcmVjdGlvbiA/IFtkaXJlY3Rpb25dIDogW10pLFxuICAgIENvdWNoREJLZXlzLklOREVYLFxuICBdLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbHM6IENvbnN0cnVjdG9yPE0+W11cbik6IENyZWF0ZUluZGV4UmVxdWVzdFtdIHtcbiAgY29uc3QgdGFibGVOYW1lID0gZ2VuZXJhdGVJbmRleE5hbWUoW0NvdWNoREJLZXlzLlRBQkxFXSk7XG4gIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIENyZWF0ZUluZGV4UmVxdWVzdD4gPSB7fTtcbiAgaW5kZXhlc1t0YWJsZU5hbWVdID0ge1xuICAgIGluZGV4OiB7XG4gICAgICBmaWVsZHM6IFtDb3VjaERCS2V5cy5UQUJMRV0sXG4gICAgfSxcbiAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgZGRvYzogdGFibGVOYW1lLFxuICAgIHR5cGU6IFwianNvblwiLFxuICB9O1xuXG4gIG1vZGVscy5mb3JFYWNoKChtKSA9PiB7XG4gICAgY29uc3QgaW5kOiBSZWNvcmQ8c3RyaW5nLCBJbmRleE1ldGFkYXRhPiA9IFJlcG9zaXRvcnkuaW5kZXhlcyhtKTtcbiAgICBPYmplY3QuZW50cmllcyhpbmQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgayA9IE9iamVjdC5rZXlzKHZhbHVlKVswXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGxldCB7IGRpcmVjdGlvbnMsIGNvbXBvc2l0aW9ucyB9ID0gKHZhbHVlIGFzIGFueSlba107XG4gICAgICBjb25zdCB0YWJsZU5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKG0pO1xuICAgICAgY29tcG9zaXRpb25zID0gY29tcG9zaXRpb25zIHx8IFtdO1xuXG4gICAgICBmdW5jdGlvbiBnZW5lcmF0ZShzb3J0PzogT3JkZXJEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IFtcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIC4uLihjb21wb3NpdGlvbnMgYXMgW10pLFxuICAgICAgICAgIFBlcnNpc3RlbmNlS2V5cy5JTkRFWCxcbiAgICAgICAgXS5qb2luKERlZmF1bHRTZXBhcmF0b3IpO1xuXG4gICAgICAgIGluZGV4ZXNbbmFtZV0gPSB7XG4gICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgIGZpZWxkczogW2tleSwgLi4uKGNvbXBvc2l0aW9ucyBhcyBbXSksIENvdWNoREJLZXlzLlRBQkxFXS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2N1bTogYW55W10sIGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvcnQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICByZXNbZWxdID0gc29ydDtcbiAgICAgICAgICAgICAgICAgIGFjY3VtLnB1c2gocmVzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYWNjdW0ucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIGRkb2M6IG5hbWUsXG4gICAgICAgICAgdHlwZTogXCJqc29uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc29ydCkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgICAgdGFibGVGaWx0ZXJbQ291Y2hEQktleXMuVEFCTEVdID0ge307XG4gICAgICAgICAgdGFibGVGaWx0ZXJbQ291Y2hEQktleXMuVEFCTEVdW0NvdWNoREJPcGVyYXRvci5FUVVBTF0gPSB0YWJsZU5hbWU7XG4gICAgICAgICAgaW5kZXhlc1tuYW1lXS5pbmRleC5wYXJ0aWFsX2ZpbHRlcl9zZWxlY3RvciA9IHRhYmxlRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRlKCk7XG4gICAgICBpZiAoZGlyZWN0aW9ucylcbiAgICAgICAgKGRpcmVjdGlvbnMgYXMgdW5rbm93biBhcyBPcmRlckRpcmVjdGlvbltdKS5mb3JFYWNoKChkKSA9PiBnZW5lcmF0ZShkKSk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpbmRleGVzKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./generator";
|
|
2
|
+
export * from "./types";
|
|
3
|
+
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDIiwiZmlsZSI6ImluZGV4ZXMvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleGVzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW5kZXhlcy90eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIEluZGV4ID0ge1xuICBpbmRleDoge1xuICAgIGZpZWxkczogc3RyaW5nW10gfCB7IFtrOiBzdHJpbmddOiBPcmRlckRpcmVjdGlvbiB9O1xuICB9O1xuICBkZG9jPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwianNvblwiO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Repository } from "@decaf-ts/core";
|
|
2
|
+
import { MangoQuery } from "nano";
|
|
3
|
+
import { CouchDBAdapter } from "../adapter";
|
|
4
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
5
|
+
export interface CouchDBRepository<M extends Model> extends Repository<M, MangoQuery> {
|
|
6
|
+
adapter: CouchDBAdapter;
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0NvdWNoREJSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW50ZXJmYWNlcy9Db3VjaERCUmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwibmFub1wiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ291Y2hEQlJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPlxuICBleHRlbmRzIFJlcG9zaXRvcnk8TSwgTWFuZ29RdWVyeT4ge1xuICBhZGFwdGVyOiBDb3VjaERCQWRhcHRlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./CouchDBRepository";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./CouchDBRepository";
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUMiLCJmaWxlIjoiaW50ZXJmYWNlcy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvdWNoREJSZXBvc2l0b3J5XCI7XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ModelArg } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { BaseModel } from "@decaf-ts/core";
|
|
3
|
+
export declare class Sequence extends BaseModel {
|
|
4
|
+
/**
|
|
5
|
+
* @summary the Primary key for the DBSequence
|
|
6
|
+
* @prop name
|
|
7
|
+
*
|
|
8
|
+
* @see pk
|
|
9
|
+
*/
|
|
10
|
+
id?: string;
|
|
11
|
+
/**
|
|
12
|
+
* @summary the current value for the DBSequence
|
|
13
|
+
* @prop current
|
|
14
|
+
*
|
|
15
|
+
* @see required
|
|
16
|
+
* @see index
|
|
17
|
+
*/
|
|
18
|
+
current?: string | number;
|
|
19
|
+
constructor(seq?: ModelArg<Sequence>);
|
|
20
|
+
}
|