@rjsf/core 3.0.1 → 3.2.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.
Files changed (127) hide show
  1. package/dist/cjs/components/AddButton.js +32 -0
  2. package/dist/cjs/components/ErrorList.js +29 -0
  3. package/dist/cjs/components/Form.js +567 -0
  4. package/dist/cjs/components/IconButton.js +32 -0
  5. package/dist/cjs/components/fields/ArrayField.js +854 -0
  6. package/dist/cjs/components/fields/BooleanField.js +105 -0
  7. package/dist/cjs/components/fields/DescriptionField.js +44 -0
  8. package/dist/cjs/components/fields/MultiSchemaField.js +257 -0
  9. package/dist/cjs/components/fields/NullField.js +66 -0
  10. package/dist/cjs/components/fields/NumberField.js +153 -0
  11. package/dist/cjs/components/fields/ObjectField.js +341 -0
  12. package/dist/cjs/components/fields/SchemaField.js +455 -0
  13. package/dist/cjs/components/fields/StringField.js +96 -0
  14. package/dist/cjs/components/fields/TitleField.js +37 -0
  15. package/dist/cjs/components/fields/UnsupportedField.js +33 -0
  16. package/dist/cjs/components/fields/index.js +47 -0
  17. package/dist/cjs/components/widgets/AltDateTimeWidget.js +45 -0
  18. package/dist/cjs/components/widgets/AltDateWidget.js +282 -0
  19. package/dist/cjs/components/widgets/BaseInput.js +144 -0
  20. package/dist/cjs/components/widgets/CheckboxWidget.js +74 -0
  21. package/dist/cjs/components/widgets/CheckboxesWidget.js +106 -0
  22. package/dist/cjs/components/widgets/ColorWidget.js +42 -0
  23. package/dist/cjs/components/widgets/DateTimeWidget.js +40 -0
  24. package/dist/cjs/components/widgets/DateWidget.js +36 -0
  25. package/dist/cjs/components/widgets/EmailWidget.js +31 -0
  26. package/dist/cjs/components/widgets/FileWidget.js +198 -0
  27. package/dist/cjs/components/widgets/HiddenWidget.js +33 -0
  28. package/dist/cjs/components/widgets/PasswordWidget.js +31 -0
  29. package/dist/cjs/components/widgets/RadioWidget.js +92 -0
  30. package/dist/cjs/components/widgets/RangeWidget.js +39 -0
  31. package/dist/cjs/components/widgets/SelectWidget.js +143 -0
  32. package/dist/cjs/components/widgets/TextWidget.js +28 -0
  33. package/dist/cjs/components/widgets/TextareaWidget.js +78 -0
  34. package/dist/cjs/components/widgets/URLWidget.js +31 -0
  35. package/dist/cjs/components/widgets/UpDownWidget.js +33 -0
  36. package/dist/cjs/components/widgets/index.js +70 -0
  37. package/dist/cjs/index.js +28 -0
  38. package/dist/cjs/types.js +47 -0
  39. package/dist/cjs/utils.js +1337 -0
  40. package/dist/cjs/validate.js +354 -0
  41. package/dist/cjs/withTheme.js +50 -0
  42. package/dist/es/components/AddButton.js +21 -0
  43. package/dist/es/components/ErrorList.js +19 -0
  44. package/dist/es/components/Form.js +552 -0
  45. package/dist/es/components/IconButton.js +22 -0
  46. package/dist/es/components/fields/ArrayField.js +836 -0
  47. package/dist/es/components/fields/BooleanField.js +91 -0
  48. package/dist/es/components/fields/DescriptionField.js +33 -0
  49. package/dist/es/components/fields/MultiSchemaField.js +243 -0
  50. package/dist/es/components/fields/NullField.js +55 -0
  51. package/dist/es/components/fields/NumberField.js +138 -0
  52. package/dist/es/components/fields/ObjectField.js +326 -0
  53. package/dist/es/components/fields/SchemaField.js +437 -0
  54. package/dist/es/components/fields/StringField.js +82 -0
  55. package/dist/es/components/fields/TitleField.js +25 -0
  56. package/dist/es/components/fields/UnsupportedField.js +22 -0
  57. package/dist/es/components/fields/index.js +26 -0
  58. package/dist/es/components/widgets/AltDateTimeWidget.js +33 -0
  59. package/dist/es/components/widgets/AltDateWidget.js +268 -0
  60. package/dist/es/components/widgets/BaseInput.js +133 -0
  61. package/dist/es/components/widgets/CheckboxWidget.js +62 -0
  62. package/dist/es/components/widgets/CheckboxesWidget.js +93 -0
  63. package/dist/es/components/widgets/ColorWidget.js +31 -0
  64. package/dist/es/components/widgets/DateTimeWidget.js +28 -0
  65. package/dist/es/components/widgets/DateWidget.js +25 -0
  66. package/dist/es/components/widgets/EmailWidget.js +20 -0
  67. package/dist/es/components/widgets/FileWidget.js +184 -0
  68. package/dist/es/components/widgets/HiddenWidget.js +22 -0
  69. package/dist/es/components/widgets/PasswordWidget.js +20 -0
  70. package/dist/es/components/widgets/RadioWidget.js +79 -0
  71. package/dist/es/components/widgets/RangeWidget.js +27 -0
  72. package/dist/es/components/widgets/SelectWidget.js +130 -0
  73. package/dist/es/components/widgets/TextWidget.js +17 -0
  74. package/dist/es/components/widgets/TextareaWidget.js +67 -0
  75. package/dist/es/components/widgets/URLWidget.js +20 -0
  76. package/dist/es/components/widgets/UpDownWidget.js +21 -0
  77. package/dist/es/components/widgets/index.js +41 -0
  78. package/dist/es/index.js +6 -0
  79. package/dist/es/types.js +34 -0
  80. package/dist/es/utils.js +1239 -0
  81. package/dist/es/validate.js +338 -0
  82. package/dist/es/withTheme.js +36 -0
  83. package/dist/react-jsonschema-form.js +11 -0
  84. package/dist/react-jsonschema-form.js.map +1 -0
  85. package/index.d.ts +30 -23
  86. package/lib/components/AddButton.js +21 -0
  87. package/lib/components/ErrorList.js +19 -0
  88. package/lib/components/Form.js +552 -0
  89. package/lib/components/IconButton.js +22 -0
  90. package/lib/components/fields/ArrayField.js +836 -0
  91. package/lib/components/fields/BooleanField.js +91 -0
  92. package/lib/components/fields/DescriptionField.js +33 -0
  93. package/lib/components/fields/MultiSchemaField.js +243 -0
  94. package/lib/components/fields/NullField.js +55 -0
  95. package/lib/components/fields/NumberField.js +138 -0
  96. package/lib/components/fields/ObjectField.js +326 -0
  97. package/lib/components/fields/SchemaField.js +437 -0
  98. package/lib/components/fields/StringField.js +82 -0
  99. package/lib/components/fields/TitleField.js +25 -0
  100. package/lib/components/fields/UnsupportedField.js +22 -0
  101. package/lib/components/fields/index.js +26 -0
  102. package/lib/components/widgets/AltDateTimeWidget.js +33 -0
  103. package/lib/components/widgets/AltDateWidget.js +268 -0
  104. package/lib/components/widgets/BaseInput.js +133 -0
  105. package/lib/components/widgets/CheckboxWidget.js +62 -0
  106. package/lib/components/widgets/CheckboxesWidget.js +93 -0
  107. package/lib/components/widgets/ColorWidget.js +31 -0
  108. package/lib/components/widgets/DateTimeWidget.js +28 -0
  109. package/lib/components/widgets/DateWidget.js +25 -0
  110. package/lib/components/widgets/EmailWidget.js +20 -0
  111. package/lib/components/widgets/FileWidget.js +184 -0
  112. package/lib/components/widgets/HiddenWidget.js +22 -0
  113. package/lib/components/widgets/PasswordWidget.js +20 -0
  114. package/lib/components/widgets/RadioWidget.js +79 -0
  115. package/lib/components/widgets/RangeWidget.js +27 -0
  116. package/lib/components/widgets/SelectWidget.js +130 -0
  117. package/lib/components/widgets/TextWidget.js +17 -0
  118. package/lib/components/widgets/TextareaWidget.js +67 -0
  119. package/lib/components/widgets/URLWidget.js +20 -0
  120. package/lib/components/widgets/UpDownWidget.js +21 -0
  121. package/lib/components/widgets/index.js +41 -0
  122. package/lib/index.js +6 -0
  123. package/lib/types.js +34 -0
  124. package/lib/utils.js +1239 -0
  125. package/lib/validate.js +338 -0
  126. package/lib/withTheme.js +36 -0
  127. package/package.json +3 -3
package/index.d.ts CHANGED
@@ -19,6 +19,7 @@ declare module '@rjsf/core' {
19
19
  className?: string;
20
20
  customFormats?: { [k: string]: string | RegExp | ((data: string) => boolean) };
21
21
  disabled?: boolean;
22
+ readonly?: boolean;
22
23
  enctype?: string;
23
24
  extraErrors?: any;
24
25
  ErrorList?: React.StatelessComponent<ErrorListProps>;
@@ -114,12 +115,22 @@ declare module '@rjsf/core' {
114
115
  label: string;
115
116
  multiple: boolean;
116
117
  rawErrors: string[];
118
+ registry: Registry;
119
+ [prop: string]: any; // Allow for other props
117
120
  }
118
121
 
119
122
  export type Widget = React.StatelessComponent<WidgetProps> | React.ComponentClass<WidgetProps>;
120
123
 
124
+ export interface Registry {
125
+ fields: { [name: string]: Field };
126
+ widgets: { [name: string]: Widget };
127
+ definitions: { [name: string]: any };
128
+ formContext: any;
129
+ rootSchema: JSONSchema7;
130
+ }
131
+
121
132
  export interface FieldProps<T = any>
122
- extends Pick<React.HTMLAttributes<HTMLElement>, Exclude<keyof React.HTMLAttributes<HTMLElement>, 'onBlur'>> {
133
+ extends Pick<React.HTMLAttributes<HTMLElement>, Exclude<keyof React.HTMLAttributes<HTMLElement>, 'onBlur' | 'onFocus'>> {
123
134
  schema: JSONSchema7;
124
135
  uiSchema: UiSchema;
125
136
  idSchema: IdSchema;
@@ -127,19 +138,15 @@ declare module '@rjsf/core' {
127
138
  errorSchema: ErrorSchema;
128
139
  onChange: (e: IChangeEvent<T> | any, es?: ErrorSchema) => any;
129
140
  onBlur: (id: string, value: any) => void;
130
- registry: {
131
- fields: { [name: string]: Field };
132
- widgets: { [name: string]: Widget };
133
- definitions: { [name: string]: any };
134
- formContext: any;
135
- };
141
+ onFocus: (id: string, value: any) => void;
142
+ registry: Registry;
136
143
  formContext: any;
137
144
  autofocus: boolean;
138
145
  disabled: boolean;
139
146
  readonly: boolean;
140
147
  required: boolean;
141
148
  name: string;
142
- [prop: string]: any;
149
+ [prop: string]: any; // Allow for other props
143
150
  }
144
151
 
145
152
  export type Field = React.StatelessComponent<FieldProps> | React.ComponentClass<FieldProps>;
@@ -168,7 +175,7 @@ declare module '@rjsf/core' {
168
175
  onChange: (value: T) => void;
169
176
  onKeyChange: (value: string) => () => void;
170
177
  onDropPropertyClick: (value: string) => () => void;
171
- registry: FieldProps['registry'];
178
+ registry: Registry;
172
179
  };
173
180
 
174
181
  export type ArrayFieldTemplateProps<T = any> = {
@@ -201,7 +208,7 @@ declare module '@rjsf/core' {
201
208
  title: string;
202
209
  formContext: any;
203
210
  formData: T;
204
- registry: FieldProps['registry'];
211
+ registry: Registry;
205
212
  };
206
213
 
207
214
  export type ObjectFieldTemplateProps<T = any> = {
@@ -225,7 +232,7 @@ declare module '@rjsf/core' {
225
232
  idSchema: IdSchema;
226
233
  formData: T;
227
234
  formContext: any;
228
- registry: FieldProps['registry'];
235
+ registry: Registry;
229
236
  };
230
237
 
231
238
  export type AjvError = {
@@ -290,7 +297,7 @@ declare module '@rjsf/core' {
290
297
 
291
298
  export function canExpand(schema: JSONSchema7, uiSchema: UiSchema, formData: any): boolean;
292
299
 
293
- export function getDefaultRegistry(): FieldProps['registry'];
300
+ export function getDefaultRegistry(): Registry;
294
301
 
295
302
  export function getSchemaType(schema: JSONSchema7): string;
296
303
 
@@ -309,7 +316,7 @@ declare module '@rjsf/core' {
309
316
  export function computeDefaults<T = any>(
310
317
  schema: JSONSchema7,
311
318
  parentDefaults: JSONSchema7['default'][],
312
- definitions: FieldProps['registry']['definitions'],
319
+ definitions: Registry['definitions'],
313
320
  rawFormData?: T,
314
321
  includeUndefinedValues?: boolean,
315
322
  ): JSONSchema7['default'][];
@@ -317,7 +324,7 @@ declare module '@rjsf/core' {
317
324
  export function getDefaultFormState<T = any>(
318
325
  schema: JSONSchema7,
319
326
  formData: T,
320
- definitions?: FieldProps['registry']['definitions'],
327
+ definitions?: Registry['definitions'],
321
328
  includeUndefinedValues?: boolean,
322
329
  ): T | JSONSchema7['default'][];
323
330
 
@@ -337,14 +344,14 @@ declare module '@rjsf/core' {
337
344
 
338
345
  export function toConstant(schema: JSONSchema7): JSONSchema7Type | JSONSchema7['const'];
339
346
 
340
- export function isSelect(_schema: JSONSchema7, definitions?: FieldProps['registry']['definitions']): boolean;
347
+ export function isSelect(_schema: JSONSchema7, definitions?: Registry['definitions']): boolean;
341
348
 
342
- export function isMultiSelect(schema: JSONSchema7, definitions?: FieldProps['registry']['definitions']): boolean;
349
+ export function isMultiSelect(schema: JSONSchema7, definitions?: Registry['definitions']): boolean;
343
350
 
344
351
  export function isFilesArray(
345
352
  schema: JSONSchema7,
346
353
  uiSchema: UiSchema,
347
- definitions?: FieldProps['registry']['definitions'],
354
+ definitions?: Registry['definitions'],
348
355
  ): boolean;
349
356
 
350
357
  export function isFixedItems(schema: JSONSchema7): boolean;
@@ -361,19 +368,19 @@ declare module '@rjsf/core' {
361
368
 
362
369
  export function stubExistingAdditionalProperties<T = any>(
363
370
  schema: JSONSchema7,
364
- definitions?: FieldProps['registry']['definitions'],
371
+ definitions?: Registry['definitions'],
365
372
  formData?: T,
366
373
  ): JSONSchema7;
367
374
 
368
375
  export function resolveSchema<T = any>(
369
376
  schema: JSONSchema7Definition,
370
- definitions?: FieldProps['registry']['definitions'],
377
+ definitions?: Registry['definitions'],
371
378
  formData?: T,
372
379
  ): JSONSchema7;
373
380
 
374
381
  export function retrieveSchema<T = any>(
375
382
  schema: JSONSchema7Definition,
376
- definitions?: FieldProps['registry']['definitions'],
383
+ definitions?: Registry['definitions'],
377
384
  formData?: T,
378
385
  ): JSONSchema7;
379
386
 
@@ -384,7 +391,7 @@ declare module '@rjsf/core' {
384
391
  export function toIdSchema<T = any>(
385
392
  schema: JSONSchema7Definition,
386
393
  id: string,
387
- definitions: FieldProps['registry']['definitions'],
394
+ definitions: Registry['definitions'],
388
395
  formData?: T,
389
396
  idPredix?: string,
390
397
  ): IdSchema | IdSchema[];
@@ -392,7 +399,7 @@ declare module '@rjsf/core' {
392
399
  export function toPathSchema<T = any>(
393
400
  schema: JSONSchema7Definition,
394
401
  name: string | undefined,
395
- definitions: FieldProps['registry']['definitions'],
402
+ definitions: Registry['definitions'],
396
403
  formData?: T,
397
404
  ): PathSchema | PathSchema[];
398
405
 
@@ -430,7 +437,7 @@ declare module '@rjsf/core' {
430
437
  export function getMatchingOption(
431
438
  formData: any,
432
439
  options: JSONSchema7[],
433
- definitions: FieldProps['registry']['definitions'],
440
+ definitions: Registry['definitions'],
434
441
  ): number;
435
442
 
436
443
  export function schemaRequiresTrueValue(schema: JSONSchema7): boolean;
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import IconButton from "./IconButton";
3
+ export default function AddButton(_ref) {
4
+ var className = _ref.className,
5
+ onClick = _ref.onClick,
6
+ disabled = _ref.disabled;
7
+ return React.createElement("div", {
8
+ className: "row"
9
+ }, React.createElement("p", {
10
+ className: "col-xs-3 col-xs-offset-9 text-right ".concat(className)
11
+ }, React.createElement(IconButton, {
12
+ type: "info",
13
+ icon: "plus",
14
+ className: "btn-add col-xs-12",
15
+ "aria-label": "Add",
16
+ tabIndex: "0",
17
+ onClick: onClick,
18
+ disabled: disabled
19
+ })));
20
+ }
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0FkZEJ1dHRvbi5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsIkljb25CdXR0b24iLCJBZGRCdXR0b24iLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiZGlzYWJsZWQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLGNBQXZCO0FBRUEsZUFBZSxTQUFTQyxTQUFULE9BQXFEO0FBQUEsTUFBaENDLFNBQWdDLFFBQWhDQSxTQUFnQztBQUFBLE1BQXJCQyxPQUFxQixRQUFyQkEsT0FBcUI7QUFBQSxNQUFaQyxRQUFZLFFBQVpBLFFBQVk7QUFDbEUsU0FDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDRTtBQUFHLElBQUEsU0FBUyxnREFBeUNGLFNBQXpDO0FBQVosS0FDRSxvQkFBQyxVQUFEO0FBQ0UsSUFBQSxJQUFJLEVBQUMsTUFEUDtBQUVFLElBQUEsSUFBSSxFQUFDLE1BRlA7QUFHRSxJQUFBLFNBQVMsRUFBQyxtQkFIWjtBQUlFLGtCQUFXLEtBSmI7QUFLRSxJQUFBLFFBQVEsRUFBQyxHQUxYO0FBTUUsSUFBQSxPQUFPLEVBQUVDLE9BTlg7QUFPRSxJQUFBLFFBQVEsRUFBRUM7QUFQWixJQURGLENBREYsQ0FERjtBQWVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGRCdXR0b24oeyBjbGFzc05hbWUsIG9uQ2xpY2ssIGRpc2FibGVkIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgPHAgY2xhc3NOYW1lPXtgY29sLXhzLTMgY29sLXhzLW9mZnNldC05IHRleHQtcmlnaHQgJHtjbGFzc05hbWV9YH0+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImluZm9cIlxuICAgICAgICAgIGljb249XCJwbHVzXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJidG4tYWRkIGNvbC14cy0xMlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkFkZFwiXG4gICAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ export default function ErrorList(props) {
3
+ var errors = props.errors;
4
+ return React.createElement("div", {
5
+ className: "panel panel-danger errors"
6
+ }, React.createElement("div", {
7
+ className: "panel-heading"
8
+ }, React.createElement("h3", {
9
+ className: "panel-title"
10
+ }, "Errors")), React.createElement("ul", {
11
+ className: "list-group"
12
+ }, errors.map(function (error, i) {
13
+ return React.createElement("li", {
14
+ key: i,
15
+ className: "list-group-item text-danger"
16
+ }, error.stack);
17
+ })));
18
+ }
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0Vycm9yTGlzdC5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsIkVycm9yTGlzdCIsInByb3BzIiwiZXJyb3JzIiwibWFwIiwiZXJyb3IiLCJpIiwic3RhY2siXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7QUFFQSxlQUFlLFNBQVNDLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTBCO0FBQUEsTUFDL0JDLE1BRCtCLEdBQ3BCRCxLQURvQixDQUMvQkMsTUFEK0I7QUFFdkMsU0FDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDRTtBQUFLLElBQUEsU0FBUyxFQUFDO0FBQWYsS0FDRTtBQUFJLElBQUEsU0FBUyxFQUFDO0FBQWQsY0FERixDQURGLEVBSUU7QUFBSSxJQUFBLFNBQVMsRUFBQztBQUFkLEtBQ0dBLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLFVBQUNDLEtBQUQsRUFBUUMsQ0FBUixFQUFjO0FBQ3hCLFdBQ0U7QUFBSSxNQUFBLEdBQUcsRUFBRUEsQ0FBVDtBQUFZLE1BQUEsU0FBUyxFQUFDO0FBQXRCLE9BQ0dELEtBQUssQ0FBQ0UsS0FEVCxDQURGO0FBS0QsR0FOQSxDQURILENBSkYsQ0FERjtBQWdCRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXJyb3JMaXN0KHByb3BzKSB7XG4gIGNvbnN0IHsgZXJyb3JzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRhbmdlciBlcnJvcnNcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj5FcnJvcnM8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8dWwgY2xhc3NOYW1lPVwibGlzdC1ncm91cFwiPlxuICAgICAgICB7ZXJyb3JzLm1hcCgoZXJyb3IsIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpIGtleT17aX0gY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtIHRleHQtZGFuZ2VyXCI+XG4gICAgICAgICAgICAgIHtlcnJvci5zdGFja31cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19