@doctorus/common 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/operations/labels.d.ts +10 -0
- package/lib/operations/labels.js +173 -0
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Action } from './actions';
|
|
2
|
+
import { Operation } from './operation';
|
|
3
|
+
import { Resource } from './resources';
|
|
4
|
+
export type LocaleInput = string;
|
|
5
|
+
export declare function getActionLabel(action: Action, locale?: LocaleInput): string;
|
|
6
|
+
export declare function getResourceLabel(resource: Resource, locale?: LocaleInput): string;
|
|
7
|
+
export declare function getOperationLabel(operation: Operation | string, locale?: LocaleInput, opts?: {
|
|
8
|
+
order?: 'action-resource' | 'resource-action';
|
|
9
|
+
separator?: string;
|
|
10
|
+
}): string;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getActionLabel = getActionLabel;
|
|
4
|
+
exports.getResourceLabel = getResourceLabel;
|
|
5
|
+
exports.getOperationLabel = getOperationLabel;
|
|
6
|
+
const actions_1 = require("./actions");
|
|
7
|
+
const operation_1 = require("./operation");
|
|
8
|
+
const resources_1 = require("./resources");
|
|
9
|
+
function normalizeLocale(locale) {
|
|
10
|
+
if (!locale)
|
|
11
|
+
return 'en';
|
|
12
|
+
const lower = locale.toLowerCase();
|
|
13
|
+
if (lower.startsWith('fr'))
|
|
14
|
+
return 'fr';
|
|
15
|
+
return 'en';
|
|
16
|
+
}
|
|
17
|
+
const enAction = {
|
|
18
|
+
[actions_1.Action.CREATE]: 'Create',
|
|
19
|
+
[actions_1.Action.READ]: 'Read',
|
|
20
|
+
[actions_1.Action.UPDATE]: 'Update',
|
|
21
|
+
[actions_1.Action.DELETE]: 'Delete',
|
|
22
|
+
[actions_1.Action.PUT]: 'Put',
|
|
23
|
+
[actions_1.Action.LIST]: 'List',
|
|
24
|
+
[actions_1.Action.MANAGE]: 'Manage',
|
|
25
|
+
[actions_1.Action.VIEW]: 'View',
|
|
26
|
+
[actions_1.Action.SEARCH]: 'Search',
|
|
27
|
+
[actions_1.Action.GRANT]: 'Grant',
|
|
28
|
+
[actions_1.Action.REVOKE]: 'Revoke',
|
|
29
|
+
[actions_1.Action.PRESCRIBE]: 'Prescribe',
|
|
30
|
+
[actions_1.Action.DIAGNOSE]: 'Diagnose',
|
|
31
|
+
[actions_1.Action.SCHEDULE]: 'Schedule',
|
|
32
|
+
[actions_1.Action.CANCEL]: 'Cancel',
|
|
33
|
+
[actions_1.Action.APPROVE]: 'Approve',
|
|
34
|
+
[actions_1.Action.REJECT]: 'Reject',
|
|
35
|
+
[actions_1.Action.SIGN]: 'Sign',
|
|
36
|
+
[actions_1.Action.VERIFY]: 'Verify',
|
|
37
|
+
[actions_1.Action.SET_MEDICAL_SERVICE_STATUS]: 'Set medical service status',
|
|
38
|
+
[actions_1.Action.SET_MEDICAL_SERVICE_FEES]: 'Set medical service fees',
|
|
39
|
+
[actions_1.Action.UPDATE_STATUS]: 'Update status',
|
|
40
|
+
[actions_1.Action.VIEW_PATIENTS]: 'View patients',
|
|
41
|
+
[actions_1.Action.PUT_PATIENT_PAYMENT]: 'Put patient payment',
|
|
42
|
+
[actions_1.Action.DELETE_PATIENT_PAYMENT]: 'Delete patient payment',
|
|
43
|
+
[actions_1.Action.EXPORT]: 'Export',
|
|
44
|
+
[actions_1.Action.IMPORT]: 'Import',
|
|
45
|
+
[actions_1.Action.ARCHIVE]: 'Archive',
|
|
46
|
+
[actions_1.Action.RESTORE]: 'Restore',
|
|
47
|
+
[actions_1.Action.SHARE]: 'Share',
|
|
48
|
+
[actions_1.Action.DOWNLOAD]: 'Download',
|
|
49
|
+
[actions_1.Action.UPLOAD]: 'Upload',
|
|
50
|
+
[actions_1.Action.LOGIN]: 'Login',
|
|
51
|
+
[actions_1.Action.LOGOUT]: 'Logout',
|
|
52
|
+
[actions_1.Action.CONFIGURE]: 'Configure',
|
|
53
|
+
[actions_1.Action.AUDIT]: 'Audit',
|
|
54
|
+
};
|
|
55
|
+
const frAction = {
|
|
56
|
+
[actions_1.Action.CREATE]: 'Créer',
|
|
57
|
+
[actions_1.Action.READ]: 'Lire',
|
|
58
|
+
[actions_1.Action.UPDATE]: 'Mettre à jour',
|
|
59
|
+
[actions_1.Action.DELETE]: 'Supprimer',
|
|
60
|
+
[actions_1.Action.PUT]: 'Mettre',
|
|
61
|
+
[actions_1.Action.LIST]: 'Lister',
|
|
62
|
+
[actions_1.Action.MANAGE]: 'Gérer',
|
|
63
|
+
[actions_1.Action.VIEW]: 'Voir',
|
|
64
|
+
[actions_1.Action.SEARCH]: 'Rechercher',
|
|
65
|
+
[actions_1.Action.GRANT]: 'Accorder',
|
|
66
|
+
[actions_1.Action.REVOKE]: 'Révoquer',
|
|
67
|
+
[actions_1.Action.PRESCRIBE]: 'Prescrire',
|
|
68
|
+
[actions_1.Action.DIAGNOSE]: 'Diagnostiquer',
|
|
69
|
+
[actions_1.Action.SCHEDULE]: 'Planifier',
|
|
70
|
+
[actions_1.Action.CANCEL]: 'Annuler',
|
|
71
|
+
[actions_1.Action.APPROVE]: 'Approuver',
|
|
72
|
+
[actions_1.Action.REJECT]: 'Rejeter',
|
|
73
|
+
[actions_1.Action.SIGN]: 'Signer',
|
|
74
|
+
[actions_1.Action.VERIFY]: 'Vérifier',
|
|
75
|
+
[actions_1.Action.SET_MEDICAL_SERVICE_STATUS]: 'Définir le statut du service médical',
|
|
76
|
+
[actions_1.Action.SET_MEDICAL_SERVICE_FEES]: 'Définir les frais du service médical',
|
|
77
|
+
[actions_1.Action.UPDATE_STATUS]: 'Mettre à jour le statut',
|
|
78
|
+
[actions_1.Action.VIEW_PATIENTS]: 'Voir les patients',
|
|
79
|
+
[actions_1.Action.PUT_PATIENT_PAYMENT]: 'Enregistrer le paiement patient',
|
|
80
|
+
[actions_1.Action.DELETE_PATIENT_PAYMENT]: 'Supprimer le paiement patient',
|
|
81
|
+
[actions_1.Action.EXPORT]: 'Exporter',
|
|
82
|
+
[actions_1.Action.IMPORT]: 'Importer',
|
|
83
|
+
[actions_1.Action.ARCHIVE]: 'Archiver',
|
|
84
|
+
[actions_1.Action.RESTORE]: 'Restaurer',
|
|
85
|
+
[actions_1.Action.SHARE]: 'Partager',
|
|
86
|
+
[actions_1.Action.DOWNLOAD]: 'Télécharger',
|
|
87
|
+
[actions_1.Action.UPLOAD]: 'Téléverser',
|
|
88
|
+
[actions_1.Action.LOGIN]: 'Connexion',
|
|
89
|
+
[actions_1.Action.LOGOUT]: 'Déconnexion',
|
|
90
|
+
[actions_1.Action.CONFIGURE]: 'Configurer',
|
|
91
|
+
[actions_1.Action.AUDIT]: 'Auditer',
|
|
92
|
+
};
|
|
93
|
+
// For resources we provide a few explicit French overrides and default to humanized names
|
|
94
|
+
const frResourceOverrides = {
|
|
95
|
+
[resources_1.Resource.ACCOUNT]: 'Compte',
|
|
96
|
+
[resources_1.Resource.ACCOUNT_OWNERSHIP]: 'Propriété du compte',
|
|
97
|
+
[resources_1.Resource.ACCOUNT_PREFERENCES]: 'Préférences du compte',
|
|
98
|
+
[resources_1.Resource.USER]: 'Utilisateur',
|
|
99
|
+
[resources_1.Resource.CONTACT]: 'Contact',
|
|
100
|
+
[resources_1.Resource.PATIENT]: 'Patient',
|
|
101
|
+
[resources_1.Resource.PATIENT_MEDICAL_NOTES]: 'Notes médicales du patient',
|
|
102
|
+
[resources_1.Resource.PATIENT_MEDICAL_PROPERTIES]: 'Propriétés médicales du patient',
|
|
103
|
+
[resources_1.Resource.PATIENT_PUBLIC_PROPERTIES]: 'Propriétés publiques du patient',
|
|
104
|
+
[resources_1.Resource.PATIENT_PAYMENT]: 'Paiement du patient',
|
|
105
|
+
[resources_1.Resource.MEDICAL_SERVICE]: 'Service médical',
|
|
106
|
+
[resources_1.Resource.MEDICAL_SERVICE_NOTE]: 'Note du service médical',
|
|
107
|
+
[resources_1.Resource.MEDICAL_SERVICE_SCHEDULE]: 'Planification du service médical',
|
|
108
|
+
[resources_1.Resource.MEDICAL_SERVICE_FEES]: 'Frais du service médical',
|
|
109
|
+
[resources_1.Resource.MEDICAL_SERVICE_STATUS]: 'Statut du service médical',
|
|
110
|
+
[resources_1.Resource.MEDICAL_NOTE]: 'Note médicale',
|
|
111
|
+
[resources_1.Resource.MEDICAL_RECORD]: 'Dossier médical',
|
|
112
|
+
[resources_1.Resource.MEDICAL_HISTORY]: 'Antécédents médicaux',
|
|
113
|
+
[resources_1.Resource.MEDICAL_HISTORY_MODEL]: "Modèle d'antécédents médicaux",
|
|
114
|
+
[resources_1.Resource.PRESCRIPTION]: 'Ordonnance',
|
|
115
|
+
[resources_1.Resource.DIAGNOSIS]: 'Diagnostic',
|
|
116
|
+
[resources_1.Resource.OBSERVATION]: 'Observation',
|
|
117
|
+
[resources_1.Resource.MEDICATION]: 'Médication',
|
|
118
|
+
[resources_1.Resource.ALLERGY]: 'Allergie',
|
|
119
|
+
[resources_1.Resource.IMMUNIZATION]: 'Vaccination',
|
|
120
|
+
[resources_1.Resource.PROCEDURE]: 'Procédure',
|
|
121
|
+
[resources_1.Resource.CLINICAL_NOTE]: 'Note clinique',
|
|
122
|
+
[resources_1.Resource.VITAL_SIGNS]: 'Signes vitaux',
|
|
123
|
+
[resources_1.Resource.MEASURE_MODEL]: 'Modèle de mesure',
|
|
124
|
+
[resources_1.Resource.CALCULATED_MEASURE_MODEL]: 'Modèle de mesure calculée',
|
|
125
|
+
[resources_1.Resource.UPLOADED_DOCUMENT]: 'Document téléversé',
|
|
126
|
+
[resources_1.Resource.DOCUMENT_LAYOUT]: 'Mise en page du document',
|
|
127
|
+
[resources_1.Resource.GENERATED_DOCUMENT]: 'Document généré',
|
|
128
|
+
[resources_1.Resource.DOCUMENT_MODEL]: 'Modèle de document',
|
|
129
|
+
[resources_1.Resource.SNIPPET]: 'Extrait',
|
|
130
|
+
[resources_1.Resource.LOCATION]: 'Lieu',
|
|
131
|
+
[resources_1.Resource.TASK_TYPE]: 'Type de tâche',
|
|
132
|
+
[resources_1.Resource.LAB_RESULT]: 'Résultat de laboratoire',
|
|
133
|
+
[resources_1.Resource.IMAGING]: 'Imagerie',
|
|
134
|
+
[resources_1.Resource.MEMBERSHIP]: 'Adhésion',
|
|
135
|
+
[resources_1.Resource.SETTINGS]: 'Paramètres',
|
|
136
|
+
[resources_1.Resource.NOTIFICATION]: 'Notification',
|
|
137
|
+
[resources_1.Resource.REPORT]: 'Rapport',
|
|
138
|
+
[resources_1.Resource.AUDIT_LOG]: "Journal d'audit",
|
|
139
|
+
[resources_1.Resource.SYSTEM]: 'Système',
|
|
140
|
+
[resources_1.Resource.PUBLIC_RESOURCE]: 'Ressource publique',
|
|
141
|
+
[resources_1.Resource.MEDICAL_RESOURCE]: 'Ressource médicale',
|
|
142
|
+
};
|
|
143
|
+
function humanizeKey(key) {
|
|
144
|
+
return key
|
|
145
|
+
.toLowerCase()
|
|
146
|
+
.split('_')
|
|
147
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
148
|
+
.join(' ');
|
|
149
|
+
}
|
|
150
|
+
function getActionLabel(action, locale = 'en') {
|
|
151
|
+
const norm = normalizeLocale(locale);
|
|
152
|
+
if (norm === 'fr')
|
|
153
|
+
return frAction[action] ?? humanizeKey(action);
|
|
154
|
+
return enAction[action] ?? humanizeKey(action);
|
|
155
|
+
}
|
|
156
|
+
function getResourceLabel(resource, locale = 'en') {
|
|
157
|
+
const norm = normalizeLocale(locale);
|
|
158
|
+
if (norm === 'fr')
|
|
159
|
+
return frResourceOverrides[resource] ?? humanizeKey(resource);
|
|
160
|
+
return humanizeKey(resource);
|
|
161
|
+
}
|
|
162
|
+
function getOperationLabel(operation, locale = 'en', opts) {
|
|
163
|
+
const norm = normalizeLocale(locale);
|
|
164
|
+
const order = opts?.order ?? 'action-resource';
|
|
165
|
+
const sep = opts?.separator ?? ' ';
|
|
166
|
+
const op = typeof operation === 'string' ? operation_1.Operation.fromString(operation) : operation;
|
|
167
|
+
if (!op)
|
|
168
|
+
return '';
|
|
169
|
+
const a = getActionLabel(op.action, norm);
|
|
170
|
+
const r = getResourceLabel(op.resource, norm);
|
|
171
|
+
return order === 'resource-action' ? `${r}${sep}${a}` : `${a}${sep}${r}`;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvbGFiZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUpBLHdDQUlDO0FBRUQsNENBSUM7QUFFRCw4Q0FjQztBQWpMRCx1Q0FBbUM7QUFDbkMsMkNBQXdDO0FBQ3hDLDJDQUF1QztBQUt2QyxTQUFTLGVBQWUsQ0FBQyxNQUFvQjtJQUMzQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQW9DO0lBQ2hELENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO0lBQ25CLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0lBQ3ZCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXO0lBQy9CLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO0lBQzdCLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO0lBQzdCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO0lBQzNCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQ3pCLENBQUMsZ0JBQU0sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLDRCQUE0QjtJQUNqRSxDQUFDLGdCQUFNLENBQUMsd0JBQXdCLENBQUMsRUFBRSwwQkFBMEI7SUFDN0QsQ0FBQyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWU7SUFDdkMsQ0FBQyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWU7SUFDdkMsQ0FBQyxnQkFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUscUJBQXFCO0lBQ25ELENBQUMsZ0JBQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLHdCQUF3QjtJQUN6RCxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtJQUN6QixDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtJQUN6QixDQUFDLGdCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUztJQUMzQixDQUFDLGdCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUztJQUMzQixDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztJQUN2QixDQUFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVTtJQUM3QixDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtJQUN6QixDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztJQUN2QixDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtJQUN6QixDQUFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVztJQUMvQixDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztDQUN4QixDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQW9DO0lBQ2hELENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPO0lBQ3hCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlO0lBQ2hDLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXO0lBQzVCLENBQUMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRO0lBQ3RCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRO0lBQ3ZCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPO0lBQ3hCLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0lBQ3JCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZO0lBQzdCLENBQUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVO0lBQzFCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVO0lBQzNCLENBQUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXO0lBQy9CLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlO0lBQ2xDLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXO0lBQzlCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO0lBQzFCLENBQUMsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXO0lBQzdCLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO0lBQzFCLENB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LFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLFNBQTZCLEVBQzdCLFNBQXNCLElBQUksRUFDMUIsSUFBNEU7SUFFNUUsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksaUJBQWlCLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7SUFFbkMsTUFBTSxFQUFFLEdBQUcsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbkIsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxPQUFPLEtBQUssS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgeyBPcGVyYXRpb24gfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2VzJztcblxuLy8gQWNjZXB0IGZ1bGwgQkNQLTQ3IGxvY2FsZSBjb2RlcyBsaWtlIGVuLVVTLCBmci1GUiBidXQgaW50ZXJuYWxseSBub3JtYWxpemUgdG8gYmFzZSBsYW5ndWFnZVxuZXhwb3J0IHR5cGUgTG9jYWxlSW5wdXQgPSBzdHJpbmc7IC8vIGUuZy4gJ2VuJywgJ2VuLVVTJywgJ2ZyJywgJ2ZyLUZSJ1xuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhbGUobG9jYWxlPzogTG9jYWxlSW5wdXQpOiAnZW4nIHwgJ2ZyJyB7XG4gIGlmICghbG9jYWxlKSByZXR1cm4gJ2VuJztcbiAgY29uc3QgbG93ZXIgPSBsb2NhbGUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoJ2ZyJykpIHJldHVybiAnZnInO1xuICByZXR1cm4gJ2VuJztcbn1cblxuY29uc3QgZW5BY3Rpb246IFBhcnRpYWw8UmVjb3JkPEFjdGlvbiwgc3RyaW5nPj4gPSB7XG4gIFtBY3Rpb24uQ1JFQVRFXTogJ0NyZWF0ZScsXG4gIFtBY3Rpb24uUkVBRF06ICdSZWFkJyxcbiAgW0FjdGlvbi5VUERBVEVdOiAnVXBkYXRlJyxcbiAgW0FjdGlvbi5ERUxFVEVdOiAnRGVsZXRlJyxcbiAgW0FjdGlvbi5QVVRdOiAnUHV0JyxcbiAgW0FjdGlvbi5MSVNUXTogJ0xpc3QnLFxuICBbQWN0aW9uLk1BTkFHRV06ICdNYW5hZ2UnLFxuICBbQWN0aW9uLlZJRVddOiAnVmlldycsXG4gIFtBY3Rpb24uU0VBUkNIXTogJ1NlYXJjaCcsXG4gIFtBY3Rpb24uR1JBTlRdOiAnR3JhbnQnLFxuICBbQWN0aW9uLlJFVk9LRV06ICdSZXZva2UnLFxuICBbQWN0aW9uLlBSRVNDUklCRV06ICdQcmVzY3JpYmUnLFxuICBbQWN0aW9uLkRJQUdOT1NFXTogJ0RpYWdub3NlJyxcbiAgW0FjdGlvbi5TQ0hFRFVMRV06ICdTY2hlZHVsZScsXG4gIFtBY3Rpb24uQ0FOQ0VMXTogJ0NhbmNlbCcsXG4gIFtBY3Rpb24uQVBQUk9WRV06ICdBcHByb3ZlJyxcbiAgW0FjdGlvbi5SRUpFQ1RdOiAnUmVqZWN0JyxcbiAgW0FjdGlvbi5TSUdOXTogJ1NpZ24nLFxuICBbQWN0aW9uLlZFUklGWV06ICdWZXJpZnknLFxuICBbQWN0aW9uLlNFVF9NRURJQ0FMX1NFUlZJQ0VfU1RBVFVTXTogJ1NldCBtZWRpY2FsIHNlcnZpY2Ugc3RhdHVzJyxcbiAgW0FjdGlvbi5TRVRfTUVESUNBTF9TRVJWSUNFX0ZFRVNdOiAnU2V0IG1lZGljYWwgc2VydmljZSBmZWVzJyxcbiAgW0FjdGlvbi5VUERBVEVfU1RBVFVTXTogJ1VwZGF0ZSBzdGF0dXMnLFxuICBbQWN0aW9uLlZJRVdfUEFUSUVOVFNdOiAnVmlldyBwYXRpZW50cycsXG4gIFtBY3Rpb24uUFVUX1BBVElFTlRfUEFZTUVOVF06ICdQdXQgcGF0aWVudCBwYXltZW50JyxcbiAgW0FjdGlvbi5ERUxFVEVfUEFUSUVOVF9QQVlNRU5UXTogJ0RlbGV0ZSBwYXRpZW50IHBheW1lbnQnLFxuICBbQWN0aW9uLkVYUE9SVF06ICdFeHBvcnQnLFxuICBbQWN0aW9uLklNUE9SVF06ICdJbXBvcnQnLFxuICBbQWN0aW9uLkFSQ0hJVkVdOiAnQXJjaGl2ZScsXG4gIFtBY3Rpb24uUkVTVE9SRV06ICdSZXN0b3JlJyxcbiAgW0FjdGlvbi5TSEFSRV06ICdTaGFyZScsXG4gIFtBY3Rpb24uRE9XTkxPQURdOiAnRG93bmxvYWQnLFxuICBbQWN0aW9uLlVQTE9BRF06ICdVcGxvYWQnLFxuICBbQWN0aW9uLkxPR0lOXTogJ0xvZ2luJyxcbiAgW0FjdGlvbi5MT0dPVVRdOiAnTG9nb3V0JyxcbiAgW0FjdGlvbi5DT05GSUdVUkVdOiAnQ29uZmlndXJlJyxcbiAgW0FjdGlvbi5BVURJVF06ICdBdWRpdCcsXG59O1xuXG5jb25zdCBmckFjdGlvbjogUGFydGlhbDxSZWNvcmQ8QWN0aW9uLCBzdHJpbmc+PiA9IHtcbiAgW0FjdGlvbi5DUkVBVEVdOiAnQ3LDqWVyJyxcbiAgW0FjdGlvbi5SRUFEXTogJ0xpcmUnLFxuICBbQWN0aW9uLlVQREFURV06ICdNZXR0cmUgw6Agam91cicsXG4gIFtBY3Rpb24uREVMRVRFXTogJ1N1cHByaW1lcicsXG4gIFtBY3Rpb24uUFVUXTogJ01ldHRyZScsXG4gIFtBY3Rpb24uTElTVF06ICdMaXN0ZXInLFxuICBbQWN0aW9uLk1BTkFHRV06ICdHw6lyZXInLFxuICBbQWN0aW9uLlZJRVddOiAnVm9pcicsXG4gIFtBY3Rpb24uU0VBUkNIXTogJ1JlY2hlcmNoZXInLFxuICBbQWN0aW9uLkdSQU5UXTogJ0FjY29yZGVyJyxcbiAgW0FjdGlvbi5SRVZPS0VdOiAnUsOpdm9xdWVyJyxcbiAgW0FjdGlvbi5QUkVTQ1JJQkVdOiAnUHJlc2NyaXJlJyxcbiAgW0FjdGlvbi5ESUFHTk9TRV06ICdEaWFnbm9zdGlxdWVyJyxcbiAgW0FjdGlvbi5TQ0hFRFVMRV06ICdQbGFuaWZpZXInLFxuICBbQWN0aW9uLkNBTkNFTF06ICdBbm51bGVyJyxcbiAgW0FjdGlvbi5BUFBST1ZFXTogJ0FwcHJvdXZlcicsXG4gIFtBY3Rpb24uUkVKRUNUXTogJ1JlamV0ZXInLFxuICBbQWN0aW9uLlNJR05dOiAnU2lnbmVyJyxcbiAgW0FjdGlvbi5WRVJJRlldOiAnVsOpcmlmaWVyJyxcbiAgW0FjdGlvbi5TRVRfTUVESUNBTF9TRVJWSUNFX1NUQVRVU106ICdEw6lmaW5pciBsZSBzdGF0dXQgZHUgc2VydmljZSBtw6lkaWNhbCcsXG4gIFtBY3Rpb24uU0VUX01FRElDQUxfU0VSVklDRV9GRUVTXTogJ0TDqWZpbmlyIGxlcyBmcmFpcyBkdSBzZXJ2aWNlIG3DqWRpY2FsJyxcbiAgW0FjdGlvbi5VUERBVEVfU1RBVFVTXTogJ01ldHRyZSDDoCBqb3VyIGxlIHN0YXR1dCcsXG4gIFtBY3Rpb24uVklFV19QQVRJRU5UU106ICdWb2lyIGxlcyBwYXRpZW50cycsXG4gIFtBY3Rpb24uUFVUX1BBVElFTlRfUEFZTUVOVF06ICdFbnJlZ2lzdHJlciBsZSBwYWllbWVudCBwYXRpZW50JyxcbiAgW0FjdGlvbi5ERUxFVEVfUEFUSUVOVF9QQVlNRU5UXTogJ1N1cHByaW1lciBsZSBwYWllbWVudCBwYXRpZW50JyxcbiAgW0FjdGlvbi5FWFBPUlRdOiAnRXhwb3J0ZXInLFxuICBbQWN0aW9uLklNUE9SVF06ICdJbXBvcnRlcicsXG4gIFtBY3Rpb24uQVJDSElWRV06ICdBcmNoaXZlcicsXG4gIFtBY3Rpb24uUkVTVE9SRV06ICdSZXN0YXVyZXInLFxuICBbQWN0aW9uLlNIQVJFXTogJ1BhcnRhZ2VyJyxcbiAgW0FjdGlvbi5ET1dOTE9BRF06ICdUw6lsw6ljaGFyZ2VyJyxcbiAgW0FjdGlvbi5VUExPQURdOiAnVMOpbMOpdmVyc2VyJyxcbiAgW0FjdGlvbi5MT0dJTl06ICdDb25uZXhpb24nLFxuICBbQWN0aW9uLkxPR09VVF06ICdEw6ljb25uZXhpb24nLFxuICBbQWN0aW9uLkNPTkZJR1VSRV06ICdDb25maWd1cmVyJyxcbiAgW0FjdGlvbi5BVURJVF06ICdBdWRpdGVyJyxcbn07XG5cbi8vIEZvciByZXNvdXJjZXMgd2UgcHJvdmlkZSBhIGZldyBleHBsaWNpdCBGcmVuY2ggb3ZlcnJpZGVzIGFuZCBkZWZhdWx0IHRvIGh1bWFuaXplZCBuYW1lc1xuY29uc3QgZnJSZXNvdXJjZU92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8UmVzb3VyY2UsIHN0cmluZz4+ID0ge1xuICBbUmVzb3VyY2UuQUNDT1VOVF06ICdDb21wdGUnLFxuICBbUmVzb3VyY2UuQUNDT1VOVF9PV05FUlNISVBdOiAnUHJvcHJpw6l0w6kgZHUgY29tcHRlJyxcbiAgW1Jlc291cmNlLkFDQ09VTlRfUFJFRkVSRU5DRVNdOiAnUHLDqWbDqXJlbmNlcyBkdSBjb21wdGUnLFxuICBbUmVzb3VyY2UuVVNFUl06ICdVdGlsaXNhdGV1cicsXG4gIFtSZXNvdXJjZS5DT05UQUNUXTogJ0NvbnRhY3QnLFxuICBbUmVzb3VyY2UuUEFUSUVOVF06ICdQYXRpZW50JyxcbiAgW1Jlc291cmNlLlBBVElFTlRfTUVESUNBTF9OT1RFU106ICdOb3RlcyBtw6lkaWNhbGVzIGR1IHBhdGllbnQnLFxuICBbUmVzb3VyY2UuUEFUSUVOVF9NRURJQ0FMX1BST1BFUlRJRVNdOiAnUHJvcHJpw6l0w6lzIG3DqWRpY2FsZXMgZHUgcGF0aWVudCcsXG4gIFtSZXNvdXJjZS5QQVRJRU5UX1BVQkxJQ19QUk9QRVJUSUVTXTogJ1Byb3ByacOpdMOpcyBwdWJsaXF1ZXMgZHUgcGF0aWVudCcsXG4gIFtSZXNvdXJjZS5QQVRJRU5UX1BBWU1FTlRdOiAnUGFpZW1lbnQgZHUgcGF0aWVudCcsXG4gIFtSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VdOiAnU2VydmljZSBtw6lkaWNhbCcsXG4gIFtSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VfTk9URV06ICdOb3RlIGR1IHNlcnZpY2UgbcOpZGljYWwnLFxuICBbUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFX1NDSEVEVUxFXTogJ1BsYW5pZmljYXRpb24gZHUgc2VydmljZSBtw6lkaWNhbCcsXG4gIFtSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VfRkVFU106ICdGcmFpcyBkdSBzZXJ2aWNlIG3DqWRpY2FsJyxcbiAgW1Jlc291cmNlLk1FRElDQUxfU0VSVklDRV9TVEFUVVNdOiAnU3RhdHV0IGR1IHNlcnZpY2UgbcOpZGljYWwnLFxuICBbUmVzb3VyY2UuTUVESUNBTF9OT1RFXTogJ05vdGUgbcOpZGljYWxlJyxcbiAgW1Jlc291cmNlLk1FRElDQUxfUkVDT1JEXTogJ0Rvc3NpZXIgbcOpZGljYWwnLFxuICBbUmVzb3VyY2UuTUVESUNBTF9ISVNUT1JZXTogJ0FudMOpY8OpZGVudHMgbcOpZGljYXV4JyxcbiAgW1Jlc291cmNlLk1FRElDQUxfSElTVE9SWV9NT0RFTF06IFwiTW9kw6hsZSBkJ2FudMOpY8OpZGVudHMgbcOpZGljYXV4XCIsXG4gIFtSZXNvdXJjZS5QUkVTQ1JJUFRJT05dOiAnT3Jkb25uYW5jZScsXG4gIFtSZXNvdXJjZS5ESUFHTk9TSVNdOiAnRGlhZ25vc3RpYycsXG4gIFtSZXNvdXJjZS5PQlNFUlZBVElPTl06ICdPYnNlcnZhdGlvbicsXG4gIFtSZXNvdXJjZS5NRURJQ0FUSU9OXTogJ03DqWRpY2F0aW9uJyxcbiAgW1Jlc291cmNlLkFMTEVSR1ldOiAnQWxsZXJnaWUnLFxuICBbUmVzb3VyY2UuSU1NVU5JWkFUSU9OXTogJ1ZhY2NpbmF0aW9uJyxcbiAgW1Jlc291cmNlLlBST0NFRFVSRV06ICdQcm9jw6lkdXJlJyxcbiAgW1Jlc291cmNlLkNMSU5JQ0FMX05PVEVdOiAnTm90ZSBjbGluaXF1ZScsXG4gIFtSZXNvdXJjZS5WSVRBTF9TSUdOU106ICdTaWduZXMgdml0YXV4JyxcbiAgW1Jlc291cmNlLk1FQVNVUkVfTU9ERUxdOiAnTW9kw6hsZSBkZSBtZXN1cmUnLFxuICBbUmVzb3VyY2UuQ0FMQ1VMQVRFRF9NRUFTVVJFX01PREVMXTogJ01vZMOobGUgZGUgbWVzdXJlIGNhbGN1bMOpZScsXG4gIFtSZXNvdXJjZS5VUExPQURFRF9ET0NVTUVOVF06ICdEb2N1bWVudCB0w6lsw6l2ZXJzw6knLFxuICBbUmVzb3VyY2UuRE9DVU1FTlRfTEFZT1VUXTogJ01pc2UgZW4gcGFnZSBkdSBkb2N1bWVudCcsXG4gIFtSZXNvdXJjZS5HRU5FUkFURURfRE9DVU1FTlRdOiAnRG9jdW1lbnQgZ8OpbsOpcsOpJyxcbiAgW1Jlc291cmNlLkRPQ1VNRU5UX01PREVMXTogJ01vZMOobGUgZGUgZG9jdW1lbnQnLFxuICBbUmVzb3VyY2UuU05JUFBFVF06ICdFeHRyYWl0JyxcbiAgW1Jlc291cmNlLkxPQ0FUSU9OXTogJ0xpZXUnLFxuICBbUmVzb3VyY2UuVEFTS19UWVBFXTogJ1R5cGUgZGUgdMOiY2hlJyxcbiAgW1Jlc291cmNlLkxBQl9SRVNVTFRdOiAnUsOpc3VsdGF0IGRlIGxhYm9yYXRvaXJlJyxcbiAgW1Jlc291cmNlLklNQUdJTkddOiAnSW1hZ2VyaWUnLFxuICBbUmVzb3VyY2UuTUVNQkVSU0hJUF06ICdBZGjDqXNpb24nLFxuICBbUmVzb3VyY2UuU0VUVElOR1NdOiAnUGFyYW3DqHRyZXMnLFxuICBbUmVzb3VyY2UuTk9USUZJQ0FUSU9OXTogJ05vdGlmaWNhdGlvbicsXG4gIFtSZXNvdXJjZS5SRVBPUlRdOiAnUmFwcG9ydCcsXG4gIFtSZXNvdXJjZS5BVURJVF9MT0ddOiBcIkpvdXJuYWwgZCdhdWRpdFwiLFxuICBbUmVzb3VyY2UuU1lTVEVNXTogJ1N5c3TDqG1lJyxcbiAgW1Jlc291cmNlLlBVQkxJQ19SRVNPVVJDRV06ICdSZXNzb3VyY2UgcHVibGlxdWUnLFxuICBbUmVzb3VyY2UuTUVESUNBTF9SRVNPVVJDRV06ICdSZXNzb3VyY2UgbcOpZGljYWxlJyxcbn07XG5cbmZ1bmN0aW9uIGh1bWFuaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnNwbGl0KCdfJylcbiAgICAubWFwKCh3KSA9PiB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uTGFiZWwoYWN0aW9uOiBBY3Rpb24sIGxvY2FsZTogTG9jYWxlSW5wdXQgPSAnZW4nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybSA9IG5vcm1hbGl6ZUxvY2FsZShsb2NhbGUpO1xuICBpZiAobm9ybSA9PT0gJ2ZyJykgcmV0dXJuIGZyQWN0aW9uW2FjdGlvbl0gPz8gaHVtYW5pemVLZXkoYWN0aW9uKTtcbiAgcmV0dXJuIGVuQWN0aW9uW2FjdGlvbl0gPz8gaHVtYW5pemVLZXkoYWN0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlTGFiZWwocmVzb3VyY2U6IFJlc291cmNlLCBsb2NhbGU6IExvY2FsZUlucHV0ID0gJ2VuJyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm0gPSBub3JtYWxpemVMb2NhbGUobG9jYWxlKTtcbiAgaWYgKG5vcm0gPT09ICdmcicpIHJldHVybiBmclJlc291cmNlT3ZlcnJpZGVzW3Jlc291cmNlXSA/PyBodW1hbml6ZUtleShyZXNvdXJjZSk7XG4gIHJldHVybiBodW1hbml6ZUtleShyZXNvdXJjZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcGVyYXRpb25MYWJlbChcbiAgb3BlcmF0aW9uOiBPcGVyYXRpb24gfCBzdHJpbmcsXG4gIGxvY2FsZTogTG9jYWxlSW5wdXQgPSAnZW4nLFxuICBvcHRzPzogeyBvcmRlcj86ICdhY3Rpb24tcmVzb3VyY2UnIHwgJ3Jlc291cmNlLWFjdGlvbic7IHNlcGFyYXRvcj86IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybSA9IG5vcm1hbGl6ZUxvY2FsZShsb2NhbGUpO1xuICBjb25zdCBvcmRlciA9IG9wdHM/Lm9yZGVyID8/ICdhY3Rpb24tcmVzb3VyY2UnO1xuICBjb25zdCBzZXAgPSBvcHRzPy5zZXBhcmF0b3IgPz8gJyAnO1xuXG4gIGNvbnN0IG9wID0gdHlwZW9mIG9wZXJhdGlvbiA9PT0gJ3N0cmluZycgPyBPcGVyYXRpb24uZnJvbVN0cmluZyhvcGVyYXRpb24pIDogb3BlcmF0aW9uO1xuICBpZiAoIW9wKSByZXR1cm4gJyc7XG4gIGNvbnN0IGEgPSBnZXRBY3Rpb25MYWJlbChvcC5hY3Rpb24sIG5vcm0pO1xuICBjb25zdCByID0gZ2V0UmVzb3VyY2VMYWJlbChvcC5yZXNvdXJjZSwgbm9ybSk7XG4gIHJldHVybiBvcmRlciA9PT0gJ3Jlc291cmNlLWFjdGlvbicgPyBgJHtyfSR7c2VwfSR7YX1gIDogYCR7YX0ke3NlcH0ke3J9YDtcbn1cbiJdfQ==
|