nextlove 2.20.0 → 3.0.1

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.
@@ -0,0 +1,241 @@
1
+ import {
2
+ init_esm_shims
3
+ } from "./chunk-2HL2TLDY.mjs";
4
+
5
+ // src/lib/zod-compat.ts
6
+ init_esm_shims();
7
+ function getDef(schema) {
8
+ if ("_zod" in schema) {
9
+ return schema._zod.def;
10
+ }
11
+ return schema._def;
12
+ }
13
+ function getTypeName(schema) {
14
+ var _a;
15
+ if ("_zod" in schema) {
16
+ const zod = schema._zod;
17
+ const constructorName = schema.constructor.name;
18
+ if (constructorName && constructorName.startsWith("$Zod")) {
19
+ return constructorName.slice(1);
20
+ }
21
+ if (zod.def && zod.def.type) {
22
+ return normalizeZodV4Type(zod.def.type);
23
+ }
24
+ return constructorName || "Unknown";
25
+ }
26
+ return ((_a = schema._def) == null ? void 0 : _a.typeName) || "Unknown";
27
+ }
28
+ function normalizeZodV4Type(type) {
29
+ const typeMap = {
30
+ string: "ZodString",
31
+ number: "ZodNumber",
32
+ bigint: "ZodBigInt",
33
+ boolean: "ZodBoolean",
34
+ date: "ZodDate",
35
+ undefined: "ZodUndefined",
36
+ null: "ZodNull",
37
+ void: "ZodVoid",
38
+ any: "ZodAny",
39
+ unknown: "ZodUnknown",
40
+ never: "ZodNever",
41
+ literal: "ZodLiteral",
42
+ enum: "ZodEnum",
43
+ nativeEnum: "ZodNativeEnum",
44
+ object: "ZodObject",
45
+ array: "ZodArray",
46
+ tuple: "ZodTuple",
47
+ union: "ZodUnion",
48
+ discriminatedUnion: "ZodDiscriminatedUnion",
49
+ intersection: "ZodIntersection",
50
+ record: "ZodRecord",
51
+ map: "ZodMap",
52
+ set: "ZodSet",
53
+ function: "ZodFunction",
54
+ lazy: "ZodLazy",
55
+ promise: "ZodPromise",
56
+ optional: "ZodOptional",
57
+ nullable: "ZodNullable",
58
+ default: "ZodDefault",
59
+ effects: "ZodEffects",
60
+ transformer: "ZodTransformer",
61
+ branded: "ZodBranded",
62
+ pipeline: "ZodPipeline",
63
+ readonly: "ZodReadonly"
64
+ };
65
+ return typeMap[type] || `Zod${type.charAt(0).toUpperCase() + type.slice(1)}`;
66
+ }
67
+ function getEffectsSchema(schema) {
68
+ const def = getDef(schema);
69
+ return def == null ? void 0 : def.schema;
70
+ }
71
+ function getInnerType(schema) {
72
+ const def = getDef(schema);
73
+ return def == null ? void 0 : def.innerType;
74
+ }
75
+ function getShape(schema) {
76
+ const def = getDef(schema);
77
+ if (typeof (def == null ? void 0 : def.shape) === "function") {
78
+ return def.shape();
79
+ }
80
+ return def == null ? void 0 : def.shape;
81
+ }
82
+ function getChecks(schema) {
83
+ const def = getDef(schema);
84
+ const checks = (def == null ? void 0 : def.checks) || [];
85
+ return checks.map((check) => {
86
+ var _a;
87
+ if ((_a = check._zod) == null ? void 0 : _a.def) {
88
+ return { ...check._zod.def };
89
+ }
90
+ return check;
91
+ });
92
+ }
93
+ function getEnumValues(schema) {
94
+ if ("options" in schema && Array.isArray(schema.options)) {
95
+ return schema.options;
96
+ }
97
+ if ("enum" in schema && schema.enum) {
98
+ return schema.enum;
99
+ }
100
+ const def = getDef(schema);
101
+ return (def == null ? void 0 : def.values) || (def == null ? void 0 : def.entries);
102
+ }
103
+ function getLiteralValue(schema) {
104
+ if ("value" in schema) {
105
+ return schema.value;
106
+ }
107
+ const def = getDef(schema);
108
+ if (Array.isArray(def == null ? void 0 : def.values)) {
109
+ return def.values[0];
110
+ }
111
+ return def == null ? void 0 : def.value;
112
+ }
113
+ function getDefaultValue(schema) {
114
+ const def = getDef(schema);
115
+ if (typeof (def == null ? void 0 : def.defaultValue) === "function") {
116
+ return def.defaultValue();
117
+ }
118
+ return def == null ? void 0 : def.defaultValue;
119
+ }
120
+ function getArrayConstraints(schema) {
121
+ const def = getDef(schema);
122
+ return {
123
+ exactLength: def == null ? void 0 : def.exactLength,
124
+ minLength: def == null ? void 0 : def.minLength,
125
+ maxLength: def == null ? void 0 : def.maxLength
126
+ };
127
+ }
128
+ function getArrayType(schema) {
129
+ var _a;
130
+ const def = getDef(schema);
131
+ return (_a = def == null ? void 0 : def.element) != null ? _a : def == null ? void 0 : def.type;
132
+ }
133
+ function getRecordValueType(schema) {
134
+ const def = getDef(schema);
135
+ return def == null ? void 0 : def.valueType;
136
+ }
137
+ function getCatchall(schema) {
138
+ const def = getDef(schema);
139
+ return def == null ? void 0 : def.catchall;
140
+ }
141
+ function getUnknownKeys(schema) {
142
+ const def = getDef(schema);
143
+ return def == null ? void 0 : def.unknownKeys;
144
+ }
145
+ function getIntersectionParts(schema) {
146
+ const def = getDef(schema);
147
+ return {
148
+ left: def == null ? void 0 : def.left,
149
+ right: def == null ? void 0 : def.right
150
+ };
151
+ }
152
+ function getUnionOptions(schema) {
153
+ const def = getDef(schema);
154
+ const options = def == null ? void 0 : def.options;
155
+ if (options instanceof Map) {
156
+ return Array.from(options.values());
157
+ }
158
+ if (Array.isArray(options)) {
159
+ return options;
160
+ }
161
+ return [];
162
+ }
163
+ function getDiscriminator(schema) {
164
+ const def = getDef(schema);
165
+ return def == null ? void 0 : def.discriminator;
166
+ }
167
+ function getEffect(schema) {
168
+ const def = getDef(schema);
169
+ return def == null ? void 0 : def.effect;
170
+ }
171
+ function getPipelineParts(schema) {
172
+ const def = getDef(schema);
173
+ return {
174
+ in: def == null ? void 0 : def.in,
175
+ out: def == null ? void 0 : def.out
176
+ };
177
+ }
178
+ function getBrandedType(schema) {
179
+ const def = getDef(schema);
180
+ return def == null ? void 0 : def.type;
181
+ }
182
+ function getTupleItems(schema) {
183
+ const def = getDef(schema);
184
+ return (def == null ? void 0 : def.items) || [];
185
+ }
186
+ function getFunctionParts(schema) {
187
+ const def = getDef(schema);
188
+ return {
189
+ args: def == null ? void 0 : def.args,
190
+ returns: def == null ? void 0 : def.returns
191
+ };
192
+ }
193
+ function getMapTypes(schema) {
194
+ const def = getDef(schema);
195
+ return {
196
+ keyType: def == null ? void 0 : def.keyType,
197
+ valueType: def == null ? void 0 : def.valueType
198
+ };
199
+ }
200
+ function getSetValueType(schema) {
201
+ const def = getDef(schema);
202
+ return def == null ? void 0 : def.valueType;
203
+ }
204
+ function getPromiseType(schema) {
205
+ var _a;
206
+ const def = getDef(schema);
207
+ return (_a = def == null ? void 0 : def.innerType) != null ? _a : def == null ? void 0 : def.type;
208
+ }
209
+ function getCustomTypeGetter(schema) {
210
+ const def = getDef(schema);
211
+ return def == null ? void 0 : def.getType;
212
+ }
213
+
214
+ export {
215
+ getTypeName,
216
+ getEffectsSchema,
217
+ getInnerType,
218
+ getShape,
219
+ getChecks,
220
+ getEnumValues,
221
+ getLiteralValue,
222
+ getDefaultValue,
223
+ getArrayConstraints,
224
+ getArrayType,
225
+ getRecordValueType,
226
+ getCatchall,
227
+ getUnknownKeys,
228
+ getIntersectionParts,
229
+ getUnionOptions,
230
+ getDiscriminator,
231
+ getEffect,
232
+ getPipelineParts,
233
+ getBrandedType,
234
+ getTupleItems,
235
+ getFunctionParts,
236
+ getMapTypes,
237
+ getSetValueType,
238
+ getPromiseType,
239
+ getCustomTypeGetter
240
+ };
241
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xpYi96b2QtY29tcGF0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIFpvZCBDb21wYXRpYmlsaXR5IExheWVyXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIFpvZCB2MyBhbmQgWm9kIHY0LlxuICogSW4gWm9kIHY0LCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGNoYW5nZWQ6XG4gKiAtIGAuX2RlZmAgbW92ZWQgdG8gYC5fem9kLmRlZmBcbiAqIC0gYC5fZGVmLnR5cGVOYW1lYCBtb3ZlZCB0byBgLl96b2QuZGVmLnR5cGVgXG4gKlxuICogVGhpcyBtb2R1bGUgYWJzdHJhY3RzIHRoZXNlIGRpZmZlcmVuY2VzIHRvIHN1cHBvcnQgYm90aCB2ZXJzaW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBab2RUeXBlQW55IH0gZnJvbSBcInpvZFwiXG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgdXNpbmcgWm9kIHY0K1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNab2RWNChzY2hlbWE6IFpvZFR5cGVBbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIFwiX3pvZFwiIGluIHNjaGVtYVxufVxuXG4vKipcbiAqIEdldCB0aGUgaW50ZXJuYWwgZGVmaW5pdGlvbiBvYmplY3QgZnJvbSBhIFpvZCBzY2hlbWEuXG4gKiBXb3JrcyB3aXRoIGJvdGggWm9kIHYzICguX2RlZikgYW5kIFpvZCB2NCAoLl96b2QuZGVmKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmKHNjaGVtYTogWm9kVHlwZUFueSk6IGFueSB7XG4gIGlmIChcIl96b2RcIiBpbiBzY2hlbWEpIHtcbiAgICAvLyBab2QgdjRcbiAgICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLl96b2QuZGVmXG4gIH1cbiAgLy8gWm9kIHYzXG4gIHJldHVybiAoc2NoZW1hIGFzIGFueSkuX2RlZlxufVxuXG4vKipcbiAqIEdldCB0aGUgdHlwZSBuYW1lIG9mIGEgWm9kIHNjaGVtYS5cbiAqIFpvZCB2Mzogc2NoZW1hLl9kZWYudHlwZU5hbWUgKGUuZy4sIFwiWm9kU3RyaW5nXCIpXG4gKiBab2QgdjQ6IHNjaGVtYS5fem9kLmRlZi50eXBlIChlLmcuLCBcInN0cmluZ1wiKSAtIGJ1dCB3ZSBub3JtYWxpemUgdG8gdjMtc3R5bGUgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVOYW1lKHNjaGVtYTogWm9kVHlwZUFueSk6IHN0cmluZyB7XG4gIGlmIChcIl96b2RcIiBpbiBzY2hlbWEpIHtcbiAgICAvLyBab2QgdjQgLSB0aGUgdHlwZSBpcyBzdG9yZWQgZGlmZmVyZW50bHlcbiAgICBjb25zdCB6b2QgPSAoc2NoZW1hIGFzIGFueSkuX3pvZFxuICAgIC8vIEluIFpvZCB2NCwgdGhlIGNvbnN0cnVjdG9yIG5hbWUgZ2l2ZXMgdXMgdGhlIHR5cGVcbiAgICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBzY2hlbWEuY29uc3RydWN0b3IubmFtZVxuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgJiYgY29uc3RydWN0b3JOYW1lLnN0YXJ0c1dpdGgoXCIkWm9kXCIpKSB7XG4gICAgICAvLyBab2QgdjQgdXNlcyAkWm9kU3RyaW5nLCAkWm9kTnVtYmVyLCBldGMgLSBjb252ZXJ0IHRvIFpvZFN0cmluZywgWm9kTnVtYmVyXG4gICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lLnNsaWNlKDEpXG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIGRlZi50eXBlIGlmIGF2YWlsYWJsZVxuICAgIGlmICh6b2QuZGVmICYmIHpvZC5kZWYudHlwZSkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVpvZFY0VHlwZSh6b2QuZGVmLnR5cGUpXG4gICAgfVxuICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWUgfHwgXCJVbmtub3duXCJcbiAgfVxuICAvLyBab2QgdjNcbiAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS5fZGVmPy50eXBlTmFtZSB8fCBcIlVua25vd25cIlxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBab2QgdjQgdHlwZSBuYW1lcyB0byB2My1zdHlsZSBuYW1lcyBmb3IgY29uc2lzdGVuY3lcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplWm9kVjRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgc3RyaW5nOiBcIlpvZFN0cmluZ1wiLFxuICAgIG51bWJlcjogXCJab2ROdW1iZXJcIixcbiAgICBiaWdpbnQ6IFwiWm9kQmlnSW50XCIsXG4gICAgYm9vbGVhbjogXCJab2RCb29sZWFuXCIsXG4gICAgZGF0ZTogXCJab2REYXRlXCIsXG4gICAgdW5kZWZpbmVkOiBcIlpvZFVuZGVmaW5lZFwiLFxuICAgIG51bGw6IFwiWm9kTnVsbFwiLFxuICAgIHZvaWQ6IFwiWm9kVm9pZFwiLFxuICAgIGFueTogXCJab2RBbnlcIixcbiAgICB1bmtub3duOiBcIlpvZFVua25vd25cIixcbiAgICBuZXZlcjogXCJab2ROZXZlclwiLFxuICAgIGxpdGVyYWw6IFwiWm9kTGl0ZXJhbFwiLFxuICAgIGVudW06IFwiWm9kRW51bVwiLFxuICAgIG5hdGl2ZUVudW06IFwiWm9kTmF0aXZlRW51bVwiLFxuICAgIG9iamVjdDogXCJab2RPYmplY3RcIixcbiAgICBhcnJheTogXCJab2RBcnJheVwiLFxuICAgIHR1cGxlOiBcIlpvZFR1cGxlXCIsXG4gICAgdW5pb246IFwiWm9kVW5pb25cIixcbiAgICBkaXNjcmltaW5hdGVkVW5pb246IFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCIsXG4gICAgaW50ZXJzZWN0aW9uOiBcIlpvZEludGVyc2VjdGlvblwiLFxuICAgIHJlY29yZDogXCJab2RSZWNvcmRcIixcbiAgICBtYXA6IFwiWm9kTWFwXCIsXG4gICAgc2V0OiBcIlpvZFNldFwiLFxuICAgIGZ1bmN0aW9uOiBcIlpvZEZ1bmN0aW9uXCIsXG4gICAgbGF6eTogXCJab2RMYXp5XCIsXG4gICAgcHJvbWlzZTogXCJab2RQcm9taXNlXCIsXG4gICAgb3B0aW9uYWw6IFwiWm9kT3B0aW9uYWxcIixcbiAgICBudWxsYWJsZTogXCJab2ROdWxsYWJsZVwiLFxuICAgIGRlZmF1bHQ6IFwiWm9kRGVmYXVsdFwiLFxuICAgIGVmZmVjdHM6IFwiWm9kRWZmZWN0c1wiLFxuICAgIHRyYW5zZm9ybWVyOiBcIlpvZFRyYW5zZm9ybWVyXCIsXG4gICAgYnJhbmRlZDogXCJab2RCcmFuZGVkXCIsXG4gICAgcGlwZWxpbmU6IFwiWm9kUGlwZWxpbmVcIixcbiAgICByZWFkb25seTogXCJab2RSZWFkb25seVwiLFxuICB9XG4gIHJldHVybiB0eXBlTWFwW3R5cGVdIHx8IGBab2Qke3R5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpfWBcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGlubmVyIHNjaGVtYSBmcm9tIGEgWm9kRWZmZWN0cy9ab2RUcmFuc2Zvcm1lclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWZmZWN0c1NjaGVtYShzY2hlbWE6IFpvZFR5cGVBbnkpOiBab2RUeXBlQW55IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8uc2NoZW1hXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbm5lciB0eXBlIGZyb20gWm9kT3B0aW9uYWwsIFpvZE51bGxhYmxlLCBab2REZWZhdWx0LCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbm5lclR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmlubmVyVHlwZVxufVxuXG4vKipcbiAqIEdldCB0aGUgc2hhcGUgb2YgYSBab2RPYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNoYXBlKFxuICBzY2hlbWE6IFpvZFR5cGVBbnlcbik6IFJlY29yZDxzdHJpbmcsIFpvZFR5cGVBbnk+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgaWYgKHR5cGVvZiBkZWY/LnNoYXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZGVmLnNoYXBlKClcbiAgfVxuICByZXR1cm4gZGVmPy5zaGFwZVxufVxuXG4vKipcbiAqIEdldCB0aGUgY2hlY2tzIGFycmF5IGZyb20gYSBzdHJpbmcvbnVtYmVyIHNjaGVtYVxuICogSW4gWm9kIDQsIGNoZWNrcyBhcmUgb2JqZWN0cyB3aXRoIF96b2QuZGVmIGNvbnRhaW5pbmcgdGhlIGNoZWNrIGRldGFpbHNcbiAqIFdlIG5vcm1hbGl6ZSB0aGVtIHRvIGhhdmUgdGhlIHByb3BlcnRpZXMgZGlyZWN0bHkgYWNjZXNzaWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tzKHNjaGVtYTogWm9kVHlwZUFueSk6IGFueVtdIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgY29uc3QgY2hlY2tzID0gZGVmPy5jaGVja3MgfHwgW11cblxuICAvLyBOb3JtYWxpemUgWm9kIDQgY2hlY2sgb2JqZWN0c1xuICByZXR1cm4gY2hlY2tzLm1hcCgoY2hlY2s6IGFueSkgPT4ge1xuICAgIGlmIChjaGVjay5fem9kPy5kZWYpIHtcbiAgICAgIC8vIFpvZCA0OiBmbGF0dGVuIF96b2QuZGVmIHByb3BlcnRpZXMgb250byB0aGUgY2hlY2sgb2JqZWN0XG4gICAgICByZXR1cm4geyAuLi5jaGVjay5fem9kLmRlZiB9XG4gICAgfVxuICAgIC8vIFpvZCAzOiBhbHJlYWR5IGhhcyBwcm9wZXJ0aWVzIGRpcmVjdGx5XG4gICAgcmV0dXJuIGNoZWNrXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IHZhbHVlcyBmcm9tIGEgWm9kRW51bSBvciBab2ROYXRpdmVFbnVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtVmFsdWVzKFxuICBzY2hlbWE6IFpvZFR5cGVBbnlcbik6IGFueVtdIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIC8vIFpvZCA0OiB1c2Ugc2NoZW1hLm9wdGlvbnMgKGFycmF5KSBvciBzY2hlbWEuZW51bSAob2JqZWN0KVxuICBpZiAoXCJvcHRpb25zXCIgaW4gc2NoZW1hICYmIEFycmF5LmlzQXJyYXkoKHNjaGVtYSBhcyBhbnkpLm9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIChzY2hlbWEgYXMgYW55KS5vcHRpb25zXG4gIH1cbiAgaWYgKFwiZW51bVwiIGluIHNjaGVtYSAmJiAoc2NoZW1hIGFzIGFueSkuZW51bSkge1xuICAgIHJldHVybiAoc2NoZW1hIGFzIGFueSkuZW51bVxuICB9XG4gIC8vIFpvZCAzIGZhbGxiYWNrXG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIC8vIFpvZCA0IGFsc28gaGFzIGVudHJpZXMgaW4gZGVmXG4gIHJldHVybiBkZWY/LnZhbHVlcyB8fCBkZWY/LmVudHJpZXNcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpdGVyYWwgdmFsdWUgZnJvbSBhIFpvZExpdGVyYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpdGVyYWxWYWx1ZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBhbnkge1xuICAvLyBab2QgNDogdHJ5IHNjaGVtYS52YWx1ZSBmaXJzdCAocHVibGljIEFQSSlcbiAgaWYgKFwidmFsdWVcIiBpbiBzY2hlbWEpIHtcbiAgICByZXR1cm4gKHNjaGVtYSBhcyBhbnkpLnZhbHVlXG4gIH1cbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgLy8gWm9kIDQ6IHZhbHVlcyBpcyBhbiBhcnJheVxuICBpZiAoQXJyYXkuaXNBcnJheShkZWY/LnZhbHVlcykpIHtcbiAgICByZXR1cm4gZGVmLnZhbHVlc1swXVxuICB9XG4gIC8vIFpvZCAzOiB2YWx1ZSBpcyBhIHNpbmdsZSB2YWx1ZVxuICByZXR1cm4gZGVmPy52YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIGEgWm9kRGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYTogWm9kVHlwZUFueSk6IGFueSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIGlmICh0eXBlb2YgZGVmPy5kZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBkZWYuZGVmYXVsdFZhbHVlKClcbiAgfVxuICByZXR1cm4gZGVmPy5kZWZhdWx0VmFsdWVcbn1cblxuLyoqXG4gKiBHZXQgYXJyYXkgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFycmF5Q29uc3RyYWludHMoc2NoZW1hOiBab2RUeXBlQW55KToge1xuICBleGFjdExlbmd0aD86IHsgdmFsdWU6IG51bWJlciB9XG4gIG1pbkxlbmd0aD86IHsgdmFsdWU6IG51bWJlciB9XG4gIG1heExlbmd0aD86IHsgdmFsdWU6IG51bWJlciB9XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBleGFjdExlbmd0aDogZGVmPy5leGFjdExlbmd0aCxcbiAgICBtaW5MZW5ndGg6IGRlZj8ubWluTGVuZ3RoLFxuICAgIG1heExlbmd0aDogZGVmPy5tYXhMZW5ndGgsXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGVsZW1lbnQgdHlwZSBmcm9tIGEgWm9kQXJyYXlcbiAqIFpvZCB2MzogZGVmLnR5cGUgY29udGFpbnMgdGhlIGVsZW1lbnQgc2NoZW1hXG4gKiBab2QgdjQ6IGRlZi5lbGVtZW50IGNvbnRhaW5zIHRoZSBlbGVtZW50IHNjaGVtYSAoZGVmLnR5cGUgaXMgdGhlIHN0cmluZyBcImFycmF5XCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcnJheVR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIC8vIFpvZCB2NCB1c2VzIGRlZi5lbGVtZW50LCBab2QgdjMgdXNlcyBkZWYudHlwZVxuICByZXR1cm4gZGVmPy5lbGVtZW50ID8/IGRlZj8udHlwZVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgdHlwZSBmcm9tIGEgWm9kUmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWNvcmRWYWx1ZVR5cGUoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LnZhbHVlVHlwZVxufVxuXG4vKipcbiAqIEdldCBjYXRjaGFsbCBmcm9tIFpvZE9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2F0Y2hhbGwoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmNhdGNoYWxsXG59XG5cbi8qKlxuICogR2V0IHVua25vd25LZXlzIGZyb20gWm9kT2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmtub3duS2V5cyhcbiAgc2NoZW1hOiBab2RUeXBlQW55XG4pOiBcInBhc3N0aHJvdWdoXCIgfCBcInN0cmljdFwiIHwgXCJzdHJpcFwiIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8udW5rbm93bktleXNcbn1cblxuLyoqXG4gKiBHZXQgbGVmdC9yaWdodCBmcm9tIFpvZEludGVyc2VjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uUGFydHMoc2NoZW1hOiBab2RUeXBlQW55KToge1xuICBsZWZ0PzogWm9kVHlwZUFueVxuICByaWdodD86IFpvZFR5cGVBbnlcbn0ge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGRlZj8ubGVmdCxcbiAgICByaWdodDogZGVmPy5yaWdodCxcbiAgfVxufVxuXG4vKipcbiAqIEdldCBvcHRpb25zIGZyb20gWm9kVW5pb24gb3IgWm9kRGlzY3JpbWluYXRlZFVuaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlvbk9wdGlvbnMoc2NoZW1hOiBab2RUeXBlQW55KTogWm9kVHlwZUFueVtdIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgY29uc3Qgb3B0aW9ucyA9IGRlZj8ub3B0aW9uc1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIE1hcCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKG9wdGlvbnMudmFsdWVzKCkpXG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIEdldCBkaXNjcmltaW5hdG9yIGZyb20gWm9kRGlzY3JpbWluYXRlZFVuaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNjcmltaW5hdG9yKHNjaGVtYTogWm9kVHlwZUFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmRpc2NyaW1pbmF0b3Jcbn1cblxuLyoqXG4gKiBHZXQgZWZmZWN0IGZyb20gWm9kRWZmZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWZmZWN0KHNjaGVtYTogWm9kVHlwZUFueSk6IGFueSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmVmZmVjdFxufVxuXG4vKipcbiAqIEdldCBwaXBlbGluZSBpbi9vdXQgZnJvbSBab2RQaXBlbGluZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlwZWxpbmVQYXJ0cyhzY2hlbWE6IFpvZFR5cGVBbnkpOiB7XG4gIGluPzogWm9kVHlwZUFueVxuICBvdXQ/OiBab2RUeXBlQW55XG59IHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIHtcbiAgICBpbjogZGVmPy5pbixcbiAgICBvdXQ6IGRlZj8ub3V0LFxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBicmFuZGVkIHR5cGUgZnJvbSBab2RCcmFuZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmFuZGVkVHlwZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBab2RUeXBlQW55IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8udHlwZVxufVxuXG4vKipcbiAqIEdldCB0dXBsZSBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHVwbGVJdGVtcyhzY2hlbWE6IFpvZFR5cGVBbnkpOiBab2RUeXBlQW55W10ge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4gZGVmPy5pdGVtcyB8fCBbXVxufVxuXG4vKipcbiAqIEdldCBmdW5jdGlvbiBhcmdzIGFuZCByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvblBhcnRzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAgYXJncz86IFpvZFR5cGVBbnlcbiAgcmV0dXJucz86IFpvZFR5cGVBbnlcbn0ge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGRlZj8uYXJncyxcbiAgICByZXR1cm5zOiBkZWY/LnJldHVybnMsXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgbWFwIGtleSBhbmQgdmFsdWUgdHlwZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcFR5cGVzKHNjaGVtYTogWm9kVHlwZUFueSk6IHtcbiAga2V5VHlwZT86IFpvZFR5cGVBbnlcbiAgdmFsdWVUeXBlPzogWm9kVHlwZUFueVxufSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiB7XG4gICAga2V5VHlwZTogZGVmPy5rZXlUeXBlLFxuICAgIHZhbHVlVHlwZTogZGVmPy52YWx1ZVR5cGUsXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgc2V0IHZhbHVlIHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNldFZhbHVlVHlwZShzY2hlbWE6IFpvZFR5cGVBbnkpOiBab2RUeXBlQW55IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHNjaGVtYSlcbiAgcmV0dXJuIGRlZj8udmFsdWVUeXBlXG59XG5cbi8qKlxuICogR2V0IHByb21pc2UgdHlwZVxuICogWm9kIHYzOiBkZWYudHlwZSBjb250YWlucyB0aGUgaW5uZXIgc2NoZW1hXG4gKiBab2QgdjQ6IGRlZi5pbm5lclR5cGUgY29udGFpbnMgdGhlIGlubmVyIHNjaGVtYSAoZGVmLnR5cGUgaXMgdGhlIHN0cmluZyBcInByb21pc2VcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByb21pc2VUeXBlKHNjaGVtYTogWm9kVHlwZUFueSk6IFpvZFR5cGVBbnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWYgPSBnZXREZWYoc2NoZW1hKVxuICAvLyBab2QgdjQgdXNlcyBkZWYuaW5uZXJUeXBlLCBab2QgdjMgdXNlcyBkZWYudHlwZVxuICByZXR1cm4gZGVmPy5pbm5lclR5cGUgPz8gZGVmPy50eXBlXG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXN0b20gdHlwZSBnZXR0ZXIgaWYgYXZhaWxhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21UeXBlR2V0dGVyKHNjaGVtYTogWm9kVHlwZUFueSk6IGFueSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZihzY2hlbWEpXG4gIHJldHVybiBkZWY/LmdldFR5cGVcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBQUE7QUF3Qk8sU0FBUyxPQUFPLFFBQXlCO0FBQzlDLE1BQUksVUFBVSxRQUFRO0FBRXBCLFdBQVEsT0FBZSxLQUFLO0FBQUEsRUFDOUI7QUFFQSxTQUFRLE9BQWU7QUFDekI7QUFPTyxTQUFTLFlBQVksUUFBNEI7QUF0Q3hEO0FBdUNFLE1BQUksVUFB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