@payloadcms/db-postgres 3.0.0-alpha.18 → 3.0.0-alpha.20
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/connect.js +17 -32
- package/dist/create.js +6 -21
- package/dist/createGlobal.js +6 -21
- package/dist/createGlobalVersion.js +10 -25
- package/dist/createMigration.js +11 -26
- package/dist/createVersion.js +10 -25
- package/dist/deleteMany.js +8 -23
- package/dist/deleteOne.js +10 -25
- package/dist/deleteVersions.js +10 -25
- package/dist/destroy.js +2 -12
- package/dist/find/buildFindManyArgs.js +6 -14
- package/dist/find/chainMethods.js +2 -11
- package/dist/find/findMany.js +14 -29
- package/dist/find/traverseFields.js +8 -23
- package/dist/find.js +6 -21
- package/dist/findGlobal.js +6 -21
- package/dist/findGlobalVersions.js +8 -23
- package/dist/findOne.js +6 -21
- package/dist/findVersions.js +8 -23
- package/dist/index.js +72 -87
- package/dist/init.js +17 -32
- package/dist/migrate.js +15 -30
- package/dist/migrateDown.js +12 -22
- package/dist/migrateFresh.js +15 -28
- package/dist/migrateRefresh.js +18 -26
- package/dist/migrateReset.js +13 -21
- package/dist/migrateStatus.js +9 -19
- package/dist/queries/buildAndOrConditions.js +4 -14
- package/dist/queries/buildQuery.js +10 -20
- package/dist/queries/createJSONQuery/convertPathToJSONTraversal.js +4 -14
- package/dist/queries/createJSONQuery/formatJSONPathSegment.js +2 -12
- package/dist/queries/createJSONQuery/index.js +6 -16
- package/dist/queries/getTableColumnFromPath.js +38 -49
- package/dist/queries/operatorMap.js +17 -27
- package/dist/queries/parseParams.js +32 -42
- package/dist/queries/sanitizeQueryValue.js +8 -18
- package/dist/queryDrafts.js +10 -25
- package/dist/schema/build.js +49 -64
- package/dist/schema/createIndex.js +5 -15
- package/dist/schema/idToUUID.js +2 -12
- package/dist/schema/parentIDColumnMap.js +7 -17
- package/dist/schema/setColumnID.js +10 -20
- package/dist/schema/traverseFields.js +62 -77
- package/dist/schema/validateExistingBlockIsIdentical.js +9 -19
- package/dist/transactions/beginTransaction.js +4 -14
- package/dist/transactions/commitTransaction.js +2 -12
- package/dist/transactions/rollbackTransaction.js +2 -12
- package/dist/transform/read/hasManyNumber.js +2 -12
- package/dist/transform/read/hasManyText.js +2 -12
- package/dist/transform/read/index.js +12 -20
- package/dist/transform/read/relationship.js +2 -12
- package/dist/transform/read/traverseFields.js +15 -23
- package/dist/transform/write/array.js +6 -16
- package/dist/transform/write/blocks.js +6 -21
- package/dist/transform/write/index.js +4 -14
- package/dist/transform/write/numbers.js +2 -12
- package/dist/transform/write/relationships.js +4 -14
- package/dist/transform/write/selects.js +4 -14
- package/dist/transform/write/texts.js +2 -12
- package/dist/transform/write/traverseFields.js +30 -45
- package/dist/transform/write/types.js +2 -5
- package/dist/types.js +2 -5
- package/dist/update.js +11 -26
- package/dist/updateGlobal.js +6 -21
- package/dist/updateGlobalVersion.js +10 -25
- package/dist/updateVersion.js +10 -25
- package/dist/upsertRow/deleteExistingArrayRows.js +5 -15
- package/dist/upsertRow/deleteExistingRowsByPath.js +9 -19
- package/dist/upsertRow/index.js +24 -34
- package/dist/upsertRow/insertArrays.js +2 -12
- package/dist/upsertRow/types.js +2 -5
- package/dist/utilities/appendPrefixToKeys.js +2 -12
- package/dist/utilities/createBlocksMap.js +2 -12
- package/dist/utilities/createMigrationTable.js +4 -14
- package/dist/utilities/createRelationshipMap.js +2 -12
- package/dist/utilities/hasLocalesTable.js +5 -15
- package/dist/utilities/isArrayOfRows.js +2 -12
- package/dist/utilities/migrationTableExists.js +4 -14
- package/dist/utilities/parseError.js +6 -14
- package/package.json +5 -4
package/dist/schema/build.js
CHANGED
@@ -1,26 +1,11 @@
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _drizzleorm = require("drizzle-orm");
|
12
|
-
const _pgcore = require("drizzle-orm/pg-core");
|
13
|
-
const _types = require("payload/types");
|
14
|
-
const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-case"));
|
15
|
-
const _parentIDColumnMap = require("./parentIDColumnMap");
|
16
|
-
const _setColumnID = require("./setColumnID");
|
17
|
-
const _traverseFields = require("./traverseFields");
|
18
|
-
function _interop_require_default(obj) {
|
19
|
-
return obj && obj.__esModule ? obj : {
|
20
|
-
default: obj
|
21
|
-
};
|
22
|
-
}
|
23
|
-
const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique = false, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps })=>{
|
1
|
+
/* eslint-disable no-param-reassign */ import { relations } from 'drizzle-orm';
|
2
|
+
import { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core';
|
3
|
+
import { fieldAffectsData } from 'payload/types';
|
4
|
+
import toSnakeCase from 'to-snake-case';
|
5
|
+
import { parentIDColumnMap } from './parentIDColumnMap';
|
6
|
+
import { setColumnID } from './setColumnID';
|
7
|
+
import { traverseFields } from './traverseFields';
|
8
|
+
export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique = false, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps })=>{
|
24
9
|
const rootTableName = incomingRootTableName || tableName;
|
25
10
|
const columns = baseColumns;
|
26
11
|
const indexes = {};
|
@@ -40,12 +25,12 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
40
25
|
let relationshipsTable;
|
41
26
|
// Drizzle relations
|
42
27
|
const relationsToBuild = new Map();
|
43
|
-
const idColType =
|
28
|
+
const idColType = setColumnID({
|
44
29
|
adapter,
|
45
30
|
columns,
|
46
31
|
fields
|
47
32
|
});
|
48
|
-
({ hasLocalizedField, hasLocalizedManyNumberField, hasLocalizedManyTextField, hasLocalizedRelationshipField, hasManyNumberField, hasManyTextField } =
|
33
|
+
({ hasLocalizedField, hasLocalizedManyNumberField, hasLocalizedManyTextField, hasLocalizedRelationshipField, hasManyNumberField, hasManyTextField } = traverseFields({
|
49
34
|
adapter,
|
50
35
|
buildNumbers,
|
51
36
|
buildRelationships,
|
@@ -66,12 +51,12 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
66
51
|
rootTableName
|
67
52
|
}));
|
68
53
|
if (timestamps) {
|
69
|
-
columns.createdAt =
|
54
|
+
columns.createdAt = timestamp('created_at', {
|
70
55
|
mode: 'string',
|
71
56
|
precision: 3,
|
72
57
|
withTimezone: true
|
73
58
|
}).defaultNow().notNull();
|
74
|
-
columns.updatedAt =
|
59
|
+
columns.updatedAt = timestamp('updated_at', {
|
75
60
|
mode: 'string',
|
76
61
|
precision: 3,
|
77
62
|
withTimezone: true
|
@@ -90,9 +75,9 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
90
75
|
adapter.tables[tableName] = table;
|
91
76
|
if (hasLocalizedField) {
|
92
77
|
const localeTableName = `${tableName}_locales`;
|
93
|
-
localesColumns.id =
|
78
|
+
localesColumns.id = serial('id').primaryKey();
|
94
79
|
localesColumns._locale = adapter.enums.enum__locales('_locale').notNull();
|
95
|
-
localesColumns._parentID =
|
80
|
+
localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').references(()=>table.id, {
|
96
81
|
onDelete: 'cascade'
|
97
82
|
}).notNull();
|
98
83
|
localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols)=>{
|
@@ -100,11 +85,11 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
100
85
|
acc[colName] = func(cols);
|
101
86
|
return acc;
|
102
87
|
}, {
|
103
|
-
_localeParent:
|
88
|
+
_localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(cols._locale, cols._parentID)
|
104
89
|
});
|
105
90
|
});
|
106
91
|
adapter.tables[localeTableName] = localesTable;
|
107
|
-
const localesTableRelations =
|
92
|
+
const localesTableRelations = relations(localesTable, ({ one })=>({
|
108
93
|
_parentID: one(table, {
|
109
94
|
fields: [
|
110
95
|
localesTable._parentID
|
@@ -119,31 +104,31 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
119
104
|
if (hasManyTextField && buildTexts) {
|
120
105
|
const textsTableName = `${rootTableName}_texts`;
|
121
106
|
const columns = {
|
122
|
-
id:
|
123
|
-
order:
|
124
|
-
parent:
|
107
|
+
id: serial('id').primaryKey(),
|
108
|
+
order: integer('order').notNull(),
|
109
|
+
parent: parentIDColumnMap[idColType]('parent_id').references(()=>table.id, {
|
125
110
|
onDelete: 'cascade'
|
126
111
|
}).notNull(),
|
127
|
-
path:
|
128
|
-
text:
|
112
|
+
path: varchar('path').notNull(),
|
113
|
+
text: varchar('text')
|
129
114
|
};
|
130
115
|
if (hasLocalizedManyTextField) {
|
131
116
|
columns.locale = adapter.enums.enum__locales('locale');
|
132
117
|
}
|
133
118
|
textsTable = adapter.pgSchema.table(textsTableName, columns, (cols)=>{
|
134
119
|
const indexes = {
|
135
|
-
orderParentIdx:
|
120
|
+
orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent)
|
136
121
|
};
|
137
122
|
if (hasManyTextField === 'index') {
|
138
|
-
indexes.text_idx =
|
123
|
+
indexes.text_idx = index(`${textsTableName}_text_idx`).on(cols.text);
|
139
124
|
}
|
140
125
|
if (hasLocalizedManyTextField) {
|
141
|
-
indexes.localeParent =
|
126
|
+
indexes.localeParent = index(`${textsTableName}_locale_parent`).on(cols.locale, cols.parent);
|
142
127
|
}
|
143
128
|
return indexes;
|
144
129
|
});
|
145
130
|
adapter.tables[textsTableName] = textsTable;
|
146
|
-
const textsTableRelations =
|
131
|
+
const textsTableRelations = relations(textsTable, ({ one })=>({
|
147
132
|
parent: one(table, {
|
148
133
|
fields: [
|
149
134
|
textsTable.parent
|
@@ -158,31 +143,31 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
158
143
|
if (hasManyNumberField && buildNumbers) {
|
159
144
|
const numbersTableName = `${rootTableName}_numbers`;
|
160
145
|
const columns = {
|
161
|
-
id:
|
162
|
-
number:
|
163
|
-
order:
|
164
|
-
parent:
|
146
|
+
id: serial('id').primaryKey(),
|
147
|
+
number: numeric('number'),
|
148
|
+
order: integer('order').notNull(),
|
149
|
+
parent: parentIDColumnMap[idColType]('parent_id').references(()=>table.id, {
|
165
150
|
onDelete: 'cascade'
|
166
151
|
}).notNull(),
|
167
|
-
path:
|
152
|
+
path: varchar('path').notNull()
|
168
153
|
};
|
169
154
|
if (hasLocalizedManyNumberField) {
|
170
155
|
columns.locale = adapter.enums.enum__locales('locale');
|
171
156
|
}
|
172
157
|
numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols)=>{
|
173
158
|
const indexes = {
|
174
|
-
orderParentIdx:
|
159
|
+
orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent)
|
175
160
|
};
|
176
161
|
if (hasManyNumberField === 'index') {
|
177
|
-
indexes.numberIdx =
|
162
|
+
indexes.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number);
|
178
163
|
}
|
179
164
|
if (hasLocalizedManyNumberField) {
|
180
|
-
indexes.localeParent =
|
165
|
+
indexes.localeParent = index(`${numbersTableName}_locale_parent`).on(cols.locale, cols.parent);
|
181
166
|
}
|
182
167
|
return indexes;
|
183
168
|
});
|
184
169
|
adapter.tables[numbersTableName] = numbersTable;
|
185
|
-
const numbersTableRelations =
|
170
|
+
const numbersTableRelations = relations(numbersTable, ({ one })=>({
|
186
171
|
parent: one(table, {
|
187
172
|
fields: [
|
188
173
|
numbersTable.parent
|
@@ -197,40 +182,40 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
197
182
|
if (buildRelationships) {
|
198
183
|
if (relationships.size) {
|
199
184
|
const relationshipColumns = {
|
200
|
-
id:
|
201
|
-
order:
|
202
|
-
parent:
|
185
|
+
id: serial('id').primaryKey(),
|
186
|
+
order: integer('order'),
|
187
|
+
parent: parentIDColumnMap[idColType]('parent_id').references(()=>table.id, {
|
203
188
|
onDelete: 'cascade'
|
204
189
|
}).notNull(),
|
205
|
-
path:
|
190
|
+
path: varchar('path').notNull()
|
206
191
|
};
|
207
192
|
if (hasLocalizedRelationshipField) {
|
208
193
|
relationshipColumns.locale = adapter.enums.enum__locales('locale');
|
209
194
|
}
|
210
195
|
relationships.forEach((relationTo)=>{
|
211
|
-
const formattedRelationTo = (
|
196
|
+
const formattedRelationTo = toSnakeCase(relationTo);
|
212
197
|
let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer';
|
213
|
-
const relatedCollectionCustomID = adapter.payload.collections[relationTo].config.fields.find((field)=>
|
198
|
+
const relatedCollectionCustomID = adapter.payload.collections[relationTo].config.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
|
214
199
|
if (relatedCollectionCustomID?.type === 'number') colType = 'numeric';
|
215
200
|
if (relatedCollectionCustomID?.type === 'text') colType = 'varchar';
|
216
|
-
relationshipColumns[`${relationTo}ID`] =
|
201
|
+
relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](`${formattedRelationTo}_id`).references(()=>adapter.tables[formattedRelationTo].id, {
|
217
202
|
onDelete: 'cascade'
|
218
203
|
});
|
219
204
|
});
|
220
205
|
const relationshipsTableName = `${tableName}_rels`;
|
221
206
|
relationshipsTable = adapter.pgSchema.table(relationshipsTableName, relationshipColumns, (cols)=>{
|
222
207
|
const result = {
|
223
|
-
order:
|
224
|
-
parentIdx:
|
225
|
-
pathIdx:
|
208
|
+
order: index(`${relationshipsTableName}_order_idx`).on(cols.order),
|
209
|
+
parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),
|
210
|
+
pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path)
|
226
211
|
};
|
227
212
|
if (hasLocalizedRelationshipField) {
|
228
|
-
result.localeIdx =
|
213
|
+
result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale);
|
229
214
|
}
|
230
215
|
return result;
|
231
216
|
});
|
232
217
|
adapter.tables[relationshipsTableName] = relationshipsTable;
|
233
|
-
const relationshipsTableRelations =
|
218
|
+
const relationshipsTableRelations = relations(relationshipsTable, ({ one })=>{
|
234
219
|
const result = {
|
235
220
|
parent: one(table, {
|
236
221
|
fields: [
|
@@ -243,7 +228,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
243
228
|
})
|
244
229
|
};
|
245
230
|
relationships.forEach((relationTo)=>{
|
246
|
-
const relatedTableName = (
|
231
|
+
const relatedTableName = toSnakeCase(relationTo);
|
247
232
|
const idColumnName = `${relationTo}ID`;
|
248
233
|
result[idColumnName] = one(adapter.tables[relatedTableName], {
|
249
234
|
fields: [
|
@@ -259,7 +244,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
259
244
|
adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations;
|
260
245
|
}
|
261
246
|
}
|
262
|
-
const tableRelations =
|
247
|
+
const tableRelations = relations(table, ({ many })=>{
|
263
248
|
const result = {};
|
264
249
|
relationsToBuild.forEach((val, key)=>{
|
265
250
|
result[key] = many(adapter.tables[val]);
|
@@ -288,4 +273,4 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumb
|
|
288
273
|
};
|
289
274
|
};
|
290
275
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHtcbiAgSW5kZXhCdWlsZGVyLFxuICBQZ0NvbHVtbkJ1aWxkZXIsXG4gIFBnVGFibGVXaXRoQ29sdW1ucyxcbiAgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgcmVsYXRpb25zIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgeyBpbmRleCwgaW50ZWdlciwgbnVtZXJpYywgc2VyaWFsLCB0aW1lc3RhbXAsIHVuaXF1ZSwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB0b1NuYWtlQ2FzZSBmcm9tICd0by1zbmFrZS1jYXNlJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNDb2x1bW5zLCBHZW5lcmljVGFibGUsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHNldENvbHVtbklEIH0gZnJvbSAnLi9zZXRDb2x1bW5JRCdcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYmFzZUNvbHVtbnM/OiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGJhc2VFeHRyYUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXI+XG4gIGJ1aWxkTnVtYmVycz86IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBidWlsZFRleHRzPzogYm9vbGVhblxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc2hpcHM/OiBTZXQ8c3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU/OiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICB0aW1lc3RhbXBzPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRhYmxlID0gKHtcbiAgYWRhcHRlcixcbiAgYmFzZUNvbHVtbnMgPSB7fSxcbiAgYmFzZUV4dHJhQ29uZmlnID0ge30sXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBkaXNhYmxlTm90TnVsbCxcbiAgZGlzYWJsZVVuaXF1ZSA9IGZhbHNlLFxuICBmaWVsZHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290UmVsYXRpb25zaGlwcyxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHRhYmxlTmFtZSxcbiAgdGltZXN0YW1wcyxcbn06IEFyZ3MpOiBSZXN1bHQgPT4ge1xuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0gYmFzZUNvbHVtbnNcbiAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cblxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbiAgbGV0IHRleHRzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG5cbiAgLy8gUmVsYXRpb25zaGlwcyB0byB0aGUgYmFzZSBjb2xsZWN0aW9uXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+ID0gcm9vdFJlbGF0aW9uc2hpcHMgfHwgbmV3IFNldCgpXG5cbiAgbGV0IHJlbGF0aW9uc2hpcHNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cblxuICAvLyBEcml6emxlIHJlbGF0aW9uc1xuICBjb25zdCByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgY29uc3QgaWRDb2xUeXBlOiBJRFR5cGUgPSBzZXRDb2x1bW5JRCh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9KVxuXG4gIDsoe1xuICAgIGhhc0xvY2FsaXplZEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgIGhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNNYW55VGV4dEZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGROdW1iZXJzLFxuICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICBidWlsZFRleHRzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZU5vdE51bGwsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWUsXG4gIH0pKVxuXG4gIGlmICh0aW1lc3RhbXBzKSB7XG4gICAgY29sdW1ucy5jcmVhdGVkQXQgPSB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7XG4gICAgICBtb2RlOiAnc3RyaW5nJyxcbiAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICB9KVxuICAgICAgLmRlZmF1bHROb3coKVxuICAgICAgLm5vdE51bGwoKVxuICAgIGNvbHVtbnMudXBkYXRlZEF0ID0gdGltZXN0YW1wKCd1cGRhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgfVxuXG4gIGNvbnN0IHRhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZSh0YWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFDb25maWcgPSBPYmplY3QuZW50cmllcyhiYXNlRXh0cmFDb25maWcpLnJlZHVjZSgoY29uZmlnLCBba2V5LCBmdW5jXSkgPT4ge1xuICAgICAgY29uZmlnW2tleV0gPSBmdW5jKGNvbHMpXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfSwge30pXG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5kZXhlcykucmVkdWNlKChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGV4dHJhQ29uZmlnKVxuICB9KVxuXG4gIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0gPSB0YWJsZVxuXG4gIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgIGNvbnN0IGxvY2FsZVRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcbiAgICBsb2NhbGVzQ29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgICBsb2NhbGVzQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX3BhcmVudElEID0gcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAubm90TnVsbCgpXG5cbiAgICBsb2NhbGVzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKGxvY2FsZVRhYmxlTmFtZSwgbG9jYWxlc0NvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxlc0luZGV4ZXMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2NvbE5hbWUsIGZ1bmNdKSA9PiB7XG4gICAgICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9sb2NhbGVQYXJlbnQ6IHVuaXF1ZShgJHtsb2NhbGVUYWJsZU5hbWV9X2xvY2FsZV9wYXJlbnRfaWRfdW5pcXVlYCkub24oXG4gICAgICAgICAgICBjb2xzLl9sb2NhbGUsXG4gICAgICAgICAgICBjb2xzLl9wYXJlbnRJRCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1tsb2NhbGVUYWJsZU5hbWVdID0gbG9jYWxlc1RhYmxlXG5cbiAgICBjb25zdCBsb2NhbGVzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobG9jYWxlc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIF9wYXJlbnRJRDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW2xvY2FsZXNUYWJsZS5fcGFyZW50SURdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bG9jYWxlVGFibGVOYW1lfWBdID0gbG9jYWxlc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueVRleHRGaWVsZCAmJiBidWlsZFRleHRzKSB7XG4gICAgY29uc3QgdGV4dHNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV90ZXh0c2BcbiAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB0ZXh0OiB2YXJjaGFyKCd0ZXh0JyksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIHtcbiAgICAgIGNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKVxuICAgIH1cblxuICAgIHRleHRzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKHRleHRzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9vcmRlcl9wYXJlbnRfaWR4YCkub24oY29scy5vcmRlciwgY29scy5wYXJlbnQpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4Jykge1xuICAgICAgICBpbmRleGVzLnRleHRfaWR4ID0gaW5kZXgoYCR7dGV4dHNUYWJsZU5hbWV9X3RleHRfaWR4YCkub24oY29scy50ZXh0KVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkge1xuICAgICAgICBpbmRleGVzLmxvY2FsZVBhcmVudCA9IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oY29scy5sb2NhbGUsIGNvbHMucGFyZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlc1xuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1t0ZXh0c1RhYmxlTmFtZV0gPSB0ZXh0c1RhYmxlXG5cbiAgICBjb25zdCB0ZXh0c1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHRleHRzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbdGV4dHNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7dGV4dHNUYWJsZU5hbWV9YF0gPSB0ZXh0c1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueU51bWJlckZpZWxkICYmIGJ1aWxkTnVtYmVycykge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV9udW1iZXJzYFxuICAgIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICBpZDogc2VyaWFsKCdpZCcpLnByaW1hcnlLZXkoKSxcbiAgICAgIG51bWJlcjogbnVtZXJpYygnbnVtYmVyJyksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgY29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgfVxuXG4gICAgbnVtYmVyc1RhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZShudW1iZXJzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke251bWJlcnNUYWJsZU5hbWV9X29yZGVyX3BhcmVudF9pZHhgKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9udW1iZXJfaWR4YCkub24oY29scy5udW1iZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgaW5kZXhlcy5sb2NhbGVQYXJlbnQgPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oXG4gICAgICAgICAgY29scy5sb2NhbGUsXG4gICAgICAgICAgY29scy5wYXJlbnQsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbnVtYmVyc1RhYmxlTmFtZV0gPSBudW1iZXJzVGFibGVcblxuICAgIGNvbnN0IG51bWJlcnNUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhudW1iZXJzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbbnVtYmVyc1RhYmxlLnBhcmVudF0sXG4gICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICB9KSxcbiAgICB9KSlcblxuICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtudW1iZXJzVGFibGVOYW1lfWBdID0gbnVtYmVyc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoYnVpbGRSZWxhdGlvbnNoaXBzKSB7XG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICAgIH1cblxuICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlbGF0aW9uVG8gPSB0b1NuYWtlQ2FzZShyZWxhdGlvblRvKVxuICAgICAgICBsZXQgY29sVHlwZSA9IGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcgPyAndXVpZCcgOiAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IGFkYXB0ZXIucGdTY2hlbWEudGFibGUoXG4gICAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUsXG4gICAgICAgIHJlbGF0aW9uc2hpcENvbHVtbnMsXG4gICAgICAgIChjb2xzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogaW5kZXgoYCR7cmVsYXRpb25zaGlwc1RhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICAgIHBhdGhJZHg6IGluZGV4KGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5wYXRoKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvbnNoaXBzVGFibGVOYW1lXSA9IHJlbGF0aW9uc2hpcHNUYWJsZVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMocmVsYXRpb25zaGlwc1RhYmxlLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGUucGFyZW50XSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICAgICAgICByZWxhdGlvbk5hbWU6ICdfcmVscycsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHJlbGF0aW9uVG8pID0+IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkVGFibGVOYW1lID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtyZWxhdGlvblRvfUlEYFxuICAgICAgICAgIHJlc3VsdFtpZENvbHVtbk5hbWVdID0gb25lKGFkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGVbaWRDb2x1bW5OYW1lXV0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcmVsYXRlZFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9YF0gPSByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnNcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0YWJsZSwgKHsgbWFueSB9KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHt9XG5cbiAgICByZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICB9KVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZEZpZWxkKSB7XG4gICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGxvY2FsZXNUYWJsZSlcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll90ZXh0cyA9IG1hbnkodGV4dHNUYWJsZSlcbiAgICB9XG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IGhhc01hbnlOdW1iZXJGaWVsZCwgaGFzTWFueVRleHRGaWVsZCwgcmVsYXRpb25zVG9CdWlsZCB9XG59XG4iXSwibmFtZXMiOlsiYnVpbGRUYWJsZSIsImFkYXB0ZXIiLCJiYXNlQ29sdW1ucyIsImJhc2VFeHRyYUNvbmZpZyIsImJ1aWxkTnVtYmVycyIsImJ1aWxkUmVsYXRpb25zaGlwcyIsImJ1aWxkVGV4dHMiLCJkaXNhYmxlTm90TnVsbCIsImRpc2FibGVVbmlxdWUiLCJmaWVsZHMiLCJyb290UmVsYXRpb25zVG9CdWlsZCIsInJvb3RSZWxhdGlvbnNoaXBzIiwicm9vdFRhYmxlSURDb2xUeXBlIiwicm9vdFRhYmxlTmFtZSIsImluY29taW5nUm9vdFRhYmxlTmFtZSIsInRhYmxlTmFtZSIsInRpbWVzdGFtcHMiLCJjb2x1bW5zIiwiaW5kZXhlcyIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJsb2NhbGVzVGFibGUiLCJ0ZXh0c1RhYmxlIiwibnVtYmVyc1RhYmxlIiwicmVsYXRpb25zaGlwcyIsIlNldCIsInJlbGF0aW9uc2hpcHNUYWJsZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJNYXAiLCJpZENvbFR5cGUiLCJzZXRDb2x1bW5JRCIsInRyYXZlcnNlRmllbGRzIiwibmV3VGFibGVOYW1lIiwicGFyZW50VGFibGVOYW1lIiwiY3JlYXRlZEF0IiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImRlZmF1bHROb3ciLCJub3ROdWxsIiwidXBkYXRlZEF0IiwidGFibGUiLCJwZ1NjaGVtYSIsImNvbHMiLCJleHRyYUNvbmZpZyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJjb25maWciLCJrZXkiLCJmdW5jIiwiYWNjIiwiY29sTmFtZSIsInRhYmxlcyIsImxvY2FsZVRhYmxlTmFtZSIsImlkIiwic2VyaWFsIiwicHJpbWFyeUtleSIsIl9sb2NhbGUiLCJlbnVtcyIsImVudW1fX2xvY2FsZXMiLCJfcGFyZW50SUQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJvbkRlbGV0ZSIsIl9sb2NhbGVQYXJlbnQiLCJ1bmlxdWUiLCJvbiIsImxvY2FsZXNUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInRleHRzVGFibGVOYW1lIiwib3JkZXIiLCJpbnRlZ2VyIiwicGFyZW50IiwicGF0aCIsInZhcmNoYXIiLCJ0ZXh0IiwibG9jYWxlIiwib3JkZXJQYXJlbnRJZHgiLCJpbmRleCIsInRleHRfaWR4IiwibG9jYWxlUGFyZW50IiwidGV4dHNUYWJsZVJlbGF0aW9ucyIsIm51bWJlcnNUYWJsZU5hbWUiLCJudW1iZXIiLCJudW1lcmljIiwibnVtYmVySWR4IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJ0b1NuYWtlQ2FzZSIsImNvbFR5cGUiLCJpZFR5cGUiLCJyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEIiwicGF5bG9hZCIsImNvbGxlY3Rpb25zIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJ0eXBlIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsInBhcmVudElkeCIsInBhdGhJZHgiLCJsb2NhbGVJZHgiLCJyZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbk5hbWUiLCJyZWxhdGVkVGFibGVOYW1lIiwiaWRDb2x1bW5OYW1lIiwidGFibGVSZWxhdGlvbnMiLCJtYW55IiwidmFsIiwiX2xvY2FsZXMiLCJfdGV4dHMiLCJfbnVtYmVycyIsIl9yZWxzIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBNkN2QkE7OztlQUFBQTs7OzRCQW5DYTt3QkFDa0Q7dUJBQzNDO29FQUNUO21DQUlVOzZCQUNOO2dDQUNHOzs7Ozs7QUEwQnhCLE1BQU1BLGFBQWEsQ0FBQyxFQUN6QkMsT0FBTyxFQUNQQyxjQUFjLENBQUMsQ0FBQyxFQUNoQkMsa0JBQWtCLENBQUMsQ0FBQyxFQUNwQkMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxnQkFBZ0IsS0FBSyxFQUNyQkMsTUFBTSxFQUNOQyxvQkFBb0IsRUFDcEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxlQUFlQyxxQkFBcUIsRUFDcENDLFNBQVMsRUFDVEMsVUFBVSxFQUNMO0lBQ0wsTUFBTUgsZ0JBQWdCQyx5QkFBeUJDO0lBQy9DLE1BQU1FLFVBQTJDZjtJQUNq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
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHtcbiAgSW5kZXhCdWlsZGVyLFxuICBQZ0NvbHVtbkJ1aWxkZXIsXG4gIFBnVGFibGVXaXRoQ29sdW1ucyxcbiAgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgcmVsYXRpb25zIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgeyBpbmRleCwgaW50ZWdlciwgbnVtZXJpYywgc2VyaWFsLCB0aW1lc3RhbXAsIHVuaXF1ZSwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB0b1NuYWtlQ2FzZSBmcm9tICd0by1zbmFrZS1jYXNlJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNDb2x1bW5zLCBHZW5lcmljVGFibGUsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHNldENvbHVtbklEIH0gZnJvbSAnLi9zZXRDb2x1bW5JRCdcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYmFzZUNvbHVtbnM/OiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGJhc2VFeHRyYUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXI+XG4gIGJ1aWxkTnVtYmVycz86IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBidWlsZFRleHRzPzogYm9vbGVhblxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc2hpcHM/OiBTZXQ8c3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU/OiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICB0aW1lc3RhbXBzPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRhYmxlID0gKHtcbiAgYWRhcHRlcixcbiAgYmFzZUNvbHVtbnMgPSB7fSxcbiAgYmFzZUV4dHJhQ29uZmlnID0ge30sXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBkaXNhYmxlTm90TnVsbCxcbiAgZGlzYWJsZVVuaXF1ZSA9IGZhbHNlLFxuICBmaWVsZHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290UmVsYXRpb25zaGlwcyxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHRhYmxlTmFtZSxcbiAgdGltZXN0YW1wcyxcbn06IEFyZ3MpOiBSZXN1bHQgPT4ge1xuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0gYmFzZUNvbHVtbnNcbiAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cblxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbiAgbGV0IHRleHRzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG5cbiAgLy8gUmVsYXRpb25zaGlwcyB0byB0aGUgYmFzZSBjb2xsZWN0aW9uXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+ID0gcm9vdFJlbGF0aW9uc2hpcHMgfHwgbmV3IFNldCgpXG5cbiAgbGV0IHJlbGF0aW9uc2hpcHNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cblxuICAvLyBEcml6emxlIHJlbGF0aW9uc1xuICBjb25zdCByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgY29uc3QgaWRDb2xUeXBlOiBJRFR5cGUgPSBzZXRDb2x1bW5JRCh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9KVxuXG4gIDsoe1xuICAgIGhhc0xvY2FsaXplZEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgIGhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNNYW55VGV4dEZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGROdW1iZXJzLFxuICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICBidWlsZFRleHRzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZU5vdE51bGwsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWUsXG4gIH0pKVxuXG4gIGlmICh0aW1lc3RhbXBzKSB7XG4gICAgY29sdW1ucy5jcmVhdGVkQXQgPSB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7XG4gICAgICBtb2RlOiAnc3RyaW5nJyxcbiAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICB9KVxuICAgICAgLmRlZmF1bHROb3coKVxuICAgICAgLm5vdE51bGwoKVxuICAgIGNvbHVtbnMudXBkYXRlZEF0ID0gdGltZXN0YW1wKCd1cGRhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgfVxuXG4gIGNvbnN0IHRhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZSh0YWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFDb25maWcgPSBPYmplY3QuZW50cmllcyhiYXNlRXh0cmFDb25maWcpLnJlZHVjZSgoY29uZmlnLCBba2V5LCBmdW5jXSkgPT4ge1xuICAgICAgY29uZmlnW2tleV0gPSBmdW5jKGNvbHMpXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfSwge30pXG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5kZXhlcykucmVkdWNlKChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGV4dHJhQ29uZmlnKVxuICB9KVxuXG4gIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0gPSB0YWJsZVxuXG4gIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgIGNvbnN0IGxvY2FsZVRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcbiAgICBsb2NhbGVzQ29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgICBsb2NhbGVzQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX3BhcmVudElEID0gcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAubm90TnVsbCgpXG5cbiAgICBsb2NhbGVzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKGxvY2FsZVRhYmxlTmFtZSwgbG9jYWxlc0NvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxlc0luZGV4ZXMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2NvbE5hbWUsIGZ1bmNdKSA9PiB7XG4gICAgICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9sb2NhbGVQYXJlbnQ6IHVuaXF1ZShgJHtsb2NhbGVUYWJsZU5hbWV9X2xvY2FsZV9wYXJlbnRfaWRfdW5pcXVlYCkub24oXG4gICAgICAgICAgICBjb2xzLl9sb2NhbGUsXG4gICAgICAgICAgICBjb2xzLl9wYXJlbnRJRCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1tsb2NhbGVUYWJsZU5hbWVdID0gbG9jYWxlc1RhYmxlXG5cbiAgICBjb25zdCBsb2NhbGVzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobG9jYWxlc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIF9wYXJlbnRJRDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW2xvY2FsZXNUYWJsZS5fcGFyZW50SURdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bG9jYWxlVGFibGVOYW1lfWBdID0gbG9jYWxlc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueVRleHRGaWVsZCAmJiBidWlsZFRleHRzKSB7XG4gICAgY29uc3QgdGV4dHNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV90ZXh0c2BcbiAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB0ZXh0OiB2YXJjaGFyKCd0ZXh0JyksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIHtcbiAgICAgIGNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKVxuICAgIH1cblxuICAgIHRleHRzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKHRleHRzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9vcmRlcl9wYXJlbnRfaWR4YCkub24oY29scy5vcmRlciwgY29scy5wYXJlbnQpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4Jykge1xuICAgICAgICBpbmRleGVzLnRleHRfaWR4ID0gaW5kZXgoYCR7dGV4dHNUYWJsZU5hbWV9X3RleHRfaWR4YCkub24oY29scy50ZXh0KVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkge1xuICAgICAgICBpbmRleGVzLmxvY2FsZVBhcmVudCA9IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oY29scy5sb2NhbGUsIGNvbHMucGFyZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlc1xuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1t0ZXh0c1RhYmxlTmFtZV0gPSB0ZXh0c1RhYmxlXG5cbiAgICBjb25zdCB0ZXh0c1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHRleHRzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbdGV4dHNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7dGV4dHNUYWJsZU5hbWV9YF0gPSB0ZXh0c1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueU51bWJlckZpZWxkICYmIGJ1aWxkTnVtYmVycykge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV9udW1iZXJzYFxuICAgIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICBpZDogc2VyaWFsKCdpZCcpLnByaW1hcnlLZXkoKSxcbiAgICAgIG51bWJlcjogbnVtZXJpYygnbnVtYmVyJyksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgY29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgfVxuXG4gICAgbnVtYmVyc1RhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZShudW1iZXJzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke251bWJlcnNUYWJsZU5hbWV9X29yZGVyX3BhcmVudF9pZHhgKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9udW1iZXJfaWR4YCkub24oY29scy5udW1iZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgaW5kZXhlcy5sb2NhbGVQYXJlbnQgPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oXG4gICAgICAgICAgY29scy5sb2NhbGUsXG4gICAgICAgICAgY29scy5wYXJlbnQsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbnVtYmVyc1RhYmxlTmFtZV0gPSBudW1iZXJzVGFibGVcblxuICAgIGNvbnN0IG51bWJlcnNUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhudW1iZXJzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbbnVtYmVyc1RhYmxlLnBhcmVudF0sXG4gICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICB9KSxcbiAgICB9KSlcblxuICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtudW1iZXJzVGFibGVOYW1lfWBdID0gbnVtYmVyc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoYnVpbGRSZWxhdGlvbnNoaXBzKSB7XG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICAgIH1cblxuICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlbGF0aW9uVG8gPSB0b1NuYWtlQ2FzZShyZWxhdGlvblRvKVxuICAgICAgICBsZXQgY29sVHlwZSA9IGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcgPyAndXVpZCcgOiAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IGFkYXB0ZXIucGdTY2hlbWEudGFibGUoXG4gICAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUsXG4gICAgICAgIHJlbGF0aW9uc2hpcENvbHVtbnMsXG4gICAgICAgIChjb2xzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogaW5kZXgoYCR7cmVsYXRpb25zaGlwc1RhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICAgIHBhdGhJZHg6IGluZGV4KGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5wYXRoKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvbnNoaXBzVGFibGVOYW1lXSA9IHJlbGF0aW9uc2hpcHNUYWJsZVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMocmVsYXRpb25zaGlwc1RhYmxlLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGUucGFyZW50XSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICAgICAgICByZWxhdGlvbk5hbWU6ICdfcmVscycsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHJlbGF0aW9uVG8pID0+IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkVGFibGVOYW1lID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtyZWxhdGlvblRvfUlEYFxuICAgICAgICAgIHJlc3VsdFtpZENvbHVtbk5hbWVdID0gb25lKGFkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGVbaWRDb2x1bW5OYW1lXV0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcmVsYXRlZFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9YF0gPSByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnNcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0YWJsZSwgKHsgbWFueSB9KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHt9XG5cbiAgICByZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICB9KVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZEZpZWxkKSB7XG4gICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGxvY2FsZXNUYWJsZSlcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll90ZXh0cyA9IG1hbnkodGV4dHNUYWJsZSlcbiAgICB9XG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IGhhc01hbnlOdW1iZXJGaWVsZCwgaGFzTWFueVRleHRGaWVsZCwgcmVsYXRpb25zVG9CdWlsZCB9XG59XG4iXSwibmFtZXMiOlsicmVsYXRpb25zIiwiaW5kZXgiLCJpbnRlZ2VyIiwibnVtZXJpYyIsInNlcmlhbCIsInRpbWVzdGFtcCIsInVuaXF1ZSIsInZhcmNoYXIiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJwYXJlbnRJRENvbHVtbk1hcCIsInNldENvbHVtbklEIiwidHJhdmVyc2VGaWVsZHMiLCJidWlsZFRhYmxlIiwiYWRhcHRlciIsImJhc2VDb2x1bW5zIiwiYmFzZUV4dHJhQ29uZmlnIiwiYnVpbGROdW1iZXJzIiwiYnVpbGRSZWxhdGlvbnNoaXBzIiwiYnVpbGRUZXh0cyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkcyIsInJvb3RSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFJlbGF0aW9uc2hpcHMiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwiaW5jb21pbmdSb290VGFibGVOYW1lIiwidGFibGVOYW1lIiwidGltZXN0YW1wcyIsImNvbHVtbnMiLCJpbmRleGVzIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlUZXh0RmllbGQiLCJoYXNNYW55TnVtYmVyRmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsImxvY2FsZXNUYWJsZSIsInRleHRzVGFibGUiLCJudW1iZXJzVGFibGUiLCJyZWxhdGlvbnNoaXBzIiwiU2V0IiwicmVsYXRpb25zaGlwc1RhYmxlIiwicmVsYXRpb25zVG9CdWlsZCIsIk1hcCIsImlkQ29sVHlwZSIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsImNyZWF0ZWRBdCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJkZWZhdWx0Tm93Iiwibm90TnVsbCIsInVwZGF0ZWRBdCIsInRhYmxlIiwicGdTY2hlbWEiLCJjb2xzIiwiZXh0cmFDb25maWciLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiY29uZmlnIiwia2V5IiwiZnVuYyIsImFjYyIsImNvbE5hbWUiLCJ0YWJsZXMiLCJsb2NhbGVUYWJsZU5hbWUiLCJpZCIsInByaW1hcnlLZXkiLCJfbG9jYWxlIiwiZW51bXMiLCJlbnVtX19sb2NhbGVzIiwiX3BhcmVudElEIiwicmVmZXJlbmNlcyIsIm9uRGVsZXRlIiwiX2xvY2FsZVBhcmVudCIsIm9uIiwibG9jYWxlc1RhYmxlUmVsYXRpb25zIiwib25lIiwidGV4dHNUYWJsZU5hbWUiLCJvcmRlciIsInBhcmVudCIsInBhdGgiLCJ0ZXh0IiwibG9jYWxlIiwib3JkZXJQYXJlbnRJZHgiLCJ0ZXh0X2lkeCIsImxvY2FsZVBhcmVudCIsInRleHRzVGFibGVSZWxhdGlvbnMiLCJudW1iZXJzVGFibGVOYW1lIiwibnVtYmVyIiwibnVtYmVySWR4IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJjb2xUeXBlIiwiaWRUeXBlIiwicmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCIsInBheWxvYWQiLCJjb2xsZWN0aW9ucyIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJ0eXBlIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsInBhcmVudElkeCIsInBhdGhJZHgiLCJsb2NhbGVJZHgiLCJyZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbk5hbWUiLCJyZWxhdGVkVGFibGVOYW1lIiwiaWRDb2x1bW5OYW1lIiwidGFibGVSZWxhdGlvbnMiLCJtYW55IiwidmFsIiwiX2xvY2FsZXMiLCJfdGV4dHMiLCJfbnVtYmVycyIsIl9yZWxzIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0MsR0FVcEMsU0FBU0EsU0FBUyxRQUFRLGNBQWE7QUFDdkMsU0FBU0MsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxRQUFRLHNCQUFxQjtBQUNqRyxTQUFTQyxnQkFBZ0IsUUFBUSxnQkFBZTtBQUNoRCxPQUFPQyxpQkFBaUIsZ0JBQWU7QUFJdkMsU0FBU0MsaUJBQWlCLFFBQVEsc0JBQXFCO0FBQ3ZELFNBQVNDLFdBQVcsUUFBUSxnQkFBZTtBQUMzQyxTQUFTQyxjQUFjLFFBQVEsbUJBQWtCO0FBMEJqRCxPQUFPLE1BQU1DLGFBQWEsQ0FBQyxFQUN6QkMsT0FBTyxFQUNQQyxjQUFjLENBQUMsQ0FBQyxFQUNoQkMsa0JBQWtCLENBQUMsQ0FBQyxFQUNwQkMsWUFBWSxFQUNaQyxr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
|
@@ -1,15 +1,5 @@
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
2
|
-
|
3
|
-
value: true
|
4
|
-
});
|
5
|
-
Object.defineProperty(exports, "createIndex", {
|
6
|
-
enumerable: true,
|
7
|
-
get: function() {
|
8
|
-
return createIndex;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _pgcore = require("drizzle-orm/pg-core");
|
12
|
-
const createIndex = ({ name, columnName, tableName, unique })=>{
|
1
|
+
/* eslint-disable no-param-reassign */ import { index, uniqueIndex } from 'drizzle-orm/pg-core';
|
2
|
+
export const createIndex = ({ name, columnName, tableName, unique })=>{
|
13
3
|
return (table)=>{
|
14
4
|
let columns;
|
15
5
|
if (Array.isArray(name)) {
|
@@ -20,9 +10,9 @@ const createIndex = ({ name, columnName, tableName, unique })=>{
|
|
20
10
|
table[name]
|
21
11
|
];
|
22
12
|
}
|
23
|
-
if (unique) return
|
24
|
-
return
|
13
|
+
if (unique) return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1));
|
14
|
+
return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1));
|
25
15
|
};
|
26
16
|
};
|
27
17
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvY3JlYXRlSW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbiB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIENyZWF0ZUluZGV4QXJncyA9IHtcbiAgY29sdW1uTmFtZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIHVuaXF1ZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUluZGV4ID0gKHsgbmFtZSwgY29sdW1uTmFtZSwgdGFibGVOYW1lLCB1bmlxdWUgfTogQ3JlYXRlSW5kZXhBcmdzKSA9PiB7XG4gIHJldHVybiAodGFibGU6IHsgW3g6IHN0cmluZ106IEdlbmVyaWNDb2x1bW4gfSkgPT4ge1xuICAgIGxldCBjb2x1bW5zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgIGNvbHVtbnMgPSBuYW1lXG4gICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvY3JlYXRlSW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbiB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIENyZWF0ZUluZGV4QXJncyA9IHtcbiAgY29sdW1uTmFtZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIHVuaXF1ZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUluZGV4ID0gKHsgbmFtZSwgY29sdW1uTmFtZSwgdGFibGVOYW1lLCB1bmlxdWUgfTogQ3JlYXRlSW5kZXhBcmdzKSA9PiB7XG4gIHJldHVybiAodGFibGU6IHsgW3g6IHN0cmluZ106IEdlbmVyaWNDb2x1bW4gfSkgPT4ge1xuICAgIGxldCBjb2x1bW5zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgIGNvbHVtbnMgPSBuYW1lXG4gICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+IHRhYmxlW2NvbHVtbk5hbWVdKVxuICAgICAgICAvLyBleGNsdWRlIGZpZWxkcyB3ZXJlIGluY2x1ZGVkIGluIGNvbXBvdW5kIGluZGV4ZXMgYnV0IGRvIG5vdCBleGlzdCBvbiB0aGUgdGFibGVcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiB0eXBlb2YgY29sICE9PSAndW5kZWZpbmVkJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1ucyA9IFt0YWJsZVtuYW1lXV1cbiAgICB9XG4gICAgaWYgKHVuaXF1ZSlcbiAgICAgIHJldHVybiB1bmlxdWVJbmRleChgJHt0YWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1faWR4YCkub24oY29sdW1uc1swXSwgLi4uY29sdW1ucy5zbGljZSgxKSlcbiAgICByZXR1cm4gaW5kZXgoYCR7dGFibGVOYW1lfV8ke2NvbHVtbk5hbWV9X2lkeGApLm9uKGNvbHVtbnNbMF0sIC4uLmNvbHVtbnMuc2xpY2UoMSkpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmRleCIsInVuaXF1ZUluZGV4IiwiY3JlYXRlSW5kZXgiLCJuYW1lIiwiY29sdW1uTmFtZSIsInRhYmxlTmFtZSIsInVuaXF1ZSIsInRhYmxlIiwiY29sdW1ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImZpbHRlciIsImNvbCIsIm9uIiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQyxHQUNwQyxTQUFTQSxLQUFLLEVBQUVDLFdBQVcsUUFBUSxzQkFBcUI7QUFXeEQsT0FBTyxNQUFNQyxjQUFjLENBQUMsRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFtQjtJQUNsRixPQUFPLENBQUNDO1FBQ04sSUFBSUM7UUFDSixJQUFJQyxNQUFNQyxPQUFPLENBQUNQLE9BQU87WUFDdkJLLFVBQVVMLEtBQ1BRLEdBQUcsQ0FBQyxDQUFDUCxhQUFlRyxLQUFLLENBQUNILFdBQVcsQ0FDdEMsaUZBQWlGO2FBQ2hGUSxNQUFNLENBQUMsQ0FBQ0MsTUFBUSxPQUFPQSxRQUFRO1FBQ3BDLE9BQU87WUFDTEwsVUFBVTtnQkFBQ0QsS0FBSyxDQUFDSixLQUFLO2FBQUM7UUFDekI7UUFDQSxJQUFJRyxRQUNGLE9BQU9MLFlBQVksQ0FBQyxFQUFFSSxVQUFVLENBQUMsRUFBRUQsV0FBVyxJQUFJLENBQUMsRUFBRVUsRUFBRSxDQUFDTixPQUFPLENBQUMsRUFBRSxLQUFLQSxRQUFRTyxLQUFLLENBQUM7UUFDdkYsT0FBT2YsTUFBTSxDQUFDLEVBQUVLLFVBQVUsQ0FBQyxFQUFFRCxXQUFXLElBQUksQ0FBQyxFQUFFVSxFQUFFLENBQUNOLE9BQU8sQ0FBQyxFQUFFLEtBQUtBLFFBQVFPLEtBQUssQ0FBQztJQUNqRjtBQUNGLEVBQUMifQ==
|
package/dist/schema/idToUUID.js
CHANGED
@@ -1,14 +1,4 @@
|
|
1
|
-
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
3
|
-
value: true
|
4
|
-
});
|
5
|
-
Object.defineProperty(exports, "idToUUID", {
|
6
|
-
enumerable: true,
|
7
|
-
get: function() {
|
8
|
-
return idToUUID;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const idToUUID = (fields)=>fields.map((field)=>{
|
1
|
+
export const idToUUID = (fields)=>fields.map((field)=>{
|
12
2
|
if ('name' in field && field.name === 'id') {
|
13
3
|
return {
|
14
4
|
...field,
|
@@ -18,4 +8,4 @@ const idToUUID = (fields)=>fields.map((field)=>{
|
|
18
8
|
return field;
|
19
9
|
});
|
20
10
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaWRUb1VVSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZCB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpZFRvVVVJRCA9IChmaWVsZHM6IEZpZWxkW10pOiBGaWVsZFtdID0+
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaWRUb1VVSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZCB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpZFRvVVVJRCA9IChmaWVsZHM6IEZpZWxkW10pOiBGaWVsZFtdID0+XG4gIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgaWYgKCduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgbmFtZTogJ191dWlkJyxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRcbiAgfSlcbiJdLCJuYW1lcyI6WyJpZFRvVVVJRCIsImZpZWxkcyIsIm1hcCIsImZpZWxkIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxNQUFNQSxXQUFXLENBQUNDLFNBQ3ZCQSxPQUFPQyxHQUFHLENBQUMsQ0FBQ0M7UUFDVixJQUFJLFVBQVVBLFNBQVNBLE1BQU1DLElBQUksS0FBSyxNQUFNO1lBQzFDLE9BQU87Z0JBQ0wsR0FBR0QsS0FBSztnQkFDUkMsTUFBTTtZQUNSO1FBQ0Y7UUFFQSxPQUFPRDtJQUNULEdBQUUifQ==
|
@@ -1,19 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
get: function() {
|
8
|
-
return parentIDColumnMap;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _pgcore = require("drizzle-orm/pg-core");
|
12
|
-
const parentIDColumnMap = {
|
13
|
-
integer: _pgcore.integer,
|
14
|
-
numeric: _pgcore.numeric,
|
15
|
-
uuid: _pgcore.uuid,
|
16
|
-
varchar: _pgcore.varchar
|
1
|
+
import { integer, numeric, uuid, varchar } from 'drizzle-orm/pg-core';
|
2
|
+
export const parentIDColumnMap = {
|
3
|
+
integer,
|
4
|
+
numeric,
|
5
|
+
uuid,
|
6
|
+
varchar
|
17
7
|
};
|
18
8
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcGFyZW50SURDb2x1bW5NYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdlciwgbnVtZXJpYywgdXVpZCwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgSURUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBwYXJlbnRJRENvbHVtbk1hcDogUmVjb3JkPFxuICBJRFR5cGUsXG4gIHR5cGVvZiBpbnRlZ2VyPHN0cmluZz4gfCB0eXBlb2YgbnVtZXJpYzxzdHJpbmc+IHwgdHlwZW9mIHV1aWQ8c3RyaW5nPiB8IHR5cGVvZiB2YXJjaGFyXG4+
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcGFyZW50SURDb2x1bW5NYXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdlciwgbnVtZXJpYywgdXVpZCwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgSURUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBwYXJlbnRJRENvbHVtbk1hcDogUmVjb3JkPFxuICBJRFR5cGUsXG4gIHR5cGVvZiBpbnRlZ2VyPHN0cmluZz4gfCB0eXBlb2YgbnVtZXJpYzxzdHJpbmc+IHwgdHlwZW9mIHV1aWQ8c3RyaW5nPiB8IHR5cGVvZiB2YXJjaGFyXG4+ID0ge1xuICBpbnRlZ2VyLFxuICBudW1lcmljLFxuICB1dWlkLFxuICB2YXJjaGFyLFxufVxuIl0sIm5hbWVzIjpbImludGVnZXIiLCJudW1lcmljIiwidXVpZCIsInZhcmNoYXIiLCJwYXJlbnRJRENvbHVtbk1hcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRUMsT0FBTyxRQUFRLHNCQUFxQjtBQUlyRSxPQUFPLE1BQU1DLG9CQUdUO0lBQ0ZKO0lBQ0FDO0lBQ0FDO0lBQ0FDO0FBQ0YsRUFBQyJ9
|
@@ -1,34 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
})
|
5
|
-
|
6
|
-
enumerable: true,
|
7
|
-
get: function() {
|
8
|
-
return setColumnID;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _pgcore = require("drizzle-orm/pg-core");
|
12
|
-
const _types = require("payload/types");
|
13
|
-
const _utilities = require("payload/utilities");
|
14
|
-
const setColumnID = ({ adapter, columns, fields })=>{
|
15
|
-
const idField = (0, _utilities.flattenTopLevelFields)(fields).find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
|
1
|
+
import { numeric, serial, uuid, varchar } from 'drizzle-orm/pg-core';
|
2
|
+
import { fieldAffectsData } from 'payload/types';
|
3
|
+
import { flattenTopLevelFields } from 'payload/utilities';
|
4
|
+
export const setColumnID = ({ adapter, columns, fields })=>{
|
5
|
+
const idField = flattenTopLevelFields(fields).find((field)=>fieldAffectsData(field) && field.name === 'id');
|
16
6
|
if (idField) {
|
17
7
|
if (idField.type === 'number') {
|
18
|
-
columns.id =
|
8
|
+
columns.id = numeric('id').primaryKey();
|
19
9
|
return 'numeric';
|
20
10
|
}
|
21
11
|
if (idField.type === 'text') {
|
22
|
-
columns.id =
|
12
|
+
columns.id = varchar('id').primaryKey();
|
23
13
|
return 'varchar';
|
24
14
|
}
|
25
15
|
}
|
26
16
|
if (adapter.idType === 'uuid') {
|
27
|
-
columns.id =
|
17
|
+
columns.id = uuid('id').defaultRandom().primaryKey();
|
28
18
|
return 'uuid';
|
29
19
|
}
|
30
|
-
columns.id =
|
20
|
+
columns.id = serial('id').primaryKey();
|
31
21
|
return 'integer';
|
32
22
|
};
|
33
23
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvc2V0Q29sdW1uSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQZ0NvbHVtbkJ1aWxkZXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuXG5pbXBvcnQgeyBudW1lcmljLCBzZXJpYWwsIHV1aWQsIHZhcmNoYXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgdHlwZSBGaWVsZCwgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgeyBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcblxuaW1wb3J0IHR5cGUgeyBJRFR5cGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7IGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlcjsgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPjsgZmllbGRzOiBGaWVsZFtdIH1cbmV4cG9ydCBjb25zdCBzZXRDb2x1bW5JRCA9ICh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9OiBBcmdzKTogSURUeXBlID0+
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvc2V0Q29sdW1uSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQZ0NvbHVtbkJ1aWxkZXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuXG5pbXBvcnQgeyBudW1lcmljLCBzZXJpYWwsIHV1aWQsIHZhcmNoYXIgfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgdHlwZSBGaWVsZCwgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgeyBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcblxuaW1wb3J0IHR5cGUgeyBJRFR5cGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7IGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlcjsgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPjsgZmllbGRzOiBGaWVsZFtdIH1cbmV4cG9ydCBjb25zdCBzZXRDb2x1bW5JRCA9ICh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9OiBBcmdzKTogSURUeXBlID0+IHtcbiAgY29uc3QgaWRGaWVsZCA9IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyhmaWVsZHMpLmZpbmQoXG4gICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICApXG4gIGlmIChpZEZpZWxkKSB7XG4gICAgaWYgKGlkRmllbGQudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbHVtbnMuaWQgPSBudW1lcmljKCdpZCcpLnByaW1hcnlLZXkoKVxuICAgICAgcmV0dXJuICdudW1lcmljJ1xuICAgIH1cblxuICAgIGlmIChpZEZpZWxkLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgY29sdW1ucy5pZCA9IHZhcmNoYXIoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgICByZXR1cm4gJ3ZhcmNoYXInXG4gICAgfVxuICB9XG5cbiAgaWYgKGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcpIHtcbiAgICBjb2x1bW5zLmlkID0gdXVpZCgnaWQnKS5kZWZhdWx0UmFuZG9tKCkucHJpbWFyeUtleSgpXG4gICAgcmV0dXJuICd1dWlkJ1xuICB9XG5cbiAgY29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgcmV0dXJuICdpbnRlZ2VyJ1xufVxuIl0sIm5hbWVzIjpbIm51bWVyaWMiLCJzZXJpYWwiLCJ1dWlkIiwidmFyY2hhciIsImZpZWxkQWZmZWN0c0RhdGEiLCJmbGF0dGVuVG9wTGV2ZWxGaWVsZHMiLCJzZXRDb2x1bW5JRCIsImFkYXB0ZXIiLCJjb2x1bW5zIiwiZmllbGRzIiwiaWRGaWVsZCIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJ0eXBlIiwiaWQiLCJwcmltYXJ5S2V5IiwiaWRUeXBlIiwiZGVmYXVsdFJhbmRvbSJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsT0FBTyxRQUFRLHNCQUFxQjtBQUNwRSxTQUFxQkMsZ0JBQWdCLFFBQVEsZ0JBQWU7QUFDNUQsU0FBU0MscUJBQXFCLFFBQVEsb0JBQW1CO0FBS3pELE9BQU8sTUFBTUMsY0FBYyxDQUFDLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQVE7SUFDNUQsTUFBTUMsVUFBVUwsc0JBQXNCSSxRQUFRRSxJQUFJLENBQ2hELENBQUNDLFFBQVVSLGlCQUFpQlEsVUFBVUEsTUFBTUMsSUFBSSxLQUFLO0lBRXZELElBQUlILFNBQVM7UUFDWCxJQUFJQSxRQUFRSSxJQUFJLEtBQUssVUFBVTtZQUM3Qk4sUUFBUU8sRUFBRSxHQUFHZixRQUFRLE1BQU1nQixVQUFVO1lBQ3JDLE9BQU87UUFDVDtRQUVBLElBQUlOLFFBQVFJLElBQUksS0FBSyxRQUFRO1lBQzNCTixRQUFRTyxFQUFFLEdBQUdaLFFBQVEsTUFBTWEsVUFBVTtZQUNyQyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlULFFBQVFVLE1BQU0sS0FBSyxRQUFRO1FBQzdCVCxRQUFRTyxFQUFFLEdBQUdiLEtBQUssTUFBTWdCLGFBQWEsR0FBR0YsVUFBVTtRQUNsRCxPQUFPO0lBQ1Q7SUFFQVIsUUFBUU8sRUFBRSxHQUFHZCxPQUFPLE1BQU1lLFVBQVU7SUFDcEMsT0FBTztBQUNULEVBQUMifQ==
|