@tuki-io/tuki-widgets 0.0.200 → 0.0.202

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 (53) hide show
  1. package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +4 -4
  2. package/esm2020/user-creation/src/app.constants.mjs +16 -2
  3. package/esm2020/user-creation/src/classes/notification.mjs +32 -0
  4. package/esm2020/user-creation/src/environments/environment.mjs +11 -0
  5. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +199 -0
  6. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +38 -0
  7. package/esm2020/user-creation/src/shared/material.module.mjs +35 -7
  8. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +30 -0
  9. package/esm2020/user-creation/src/shared/services/notification.service.mjs +62 -0
  10. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +43 -19
  11. package/esm2020/user-creation/src/shared/shared.module.mjs +27 -4
  12. package/esm2020/user-creation/src/user-creation.module.mjs +40 -7
  13. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +14 -0
  14. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +147 -0
  15. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +13 -0
  16. package/esm2020/user-creation/src/utils/device-name-validation.mjs +23 -0
  17. package/esm2020/user-creation/src/utils/model.mjs +19 -0
  18. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +26 -0
  19. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +512 -20
  20. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +3 -3
  21. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +80 -34
  22. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +83 -19
  23. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +599 -124
  24. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +3 -3
  25. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  26. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +2129 -325
  27. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  28. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +3 -3
  29. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  30. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +2084 -314
  31. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  32. package/package.json +1 -1
  33. package/user-creation/src/app.constants.d.ts +10 -0
  34. package/user-creation/src/classes/notification.d.ts +18 -0
  35. package/user-creation/src/environments/environment.d.ts +9 -0
  36. package/user-creation/src/interfaces/user-creation-wizard.interfaces.d.ts +554 -0
  37. package/user-creation/src/shared/components/notification/notification.component.d.ts +19 -0
  38. package/user-creation/src/shared/material.module.d.ts +5 -1
  39. package/user-creation/src/shared/pipes/truncate.pipe.d.ts +7 -0
  40. package/user-creation/src/shared/services/notification.service.d.ts +18 -0
  41. package/user-creation/src/shared/services/user-creation-api.service.d.ts +8 -2
  42. package/user-creation/src/shared/shared.module.d.ts +3 -1
  43. package/user-creation/src/user-creation.module.d.ts +17 -10
  44. package/user-creation/src/utils/app-loader/app-loader.d.ts +6 -0
  45. package/user-creation/src/utils/build-savable-end-user.d.ts +23 -0
  46. package/user-creation/src/utils/device-default-prefix.d.ts +5 -0
  47. package/user-creation/src/utils/device-name-validation.d.ts +6 -0
  48. package/user-creation/src/utils/model.d.ts +1 -0
  49. package/user-creation/src/utils/parse-device-name-rule.d.ts +8 -0
  50. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +83 -7
  51. package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +11 -4
  52. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +18 -0
  53. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +71 -56
@@ -0,0 +1,147 @@
1
+ export const ENTITY_CHANGE_TYPE = {
2
+ ADDED: 'added',
3
+ UPDATED: 'updated',
4
+ EXISTING: 'existing',
5
+ REMOVED: 'removed',
6
+ };
7
+ function deepClone(value) {
8
+ return JSON.parse(JSON.stringify(value));
9
+ }
10
+ function toApiBooleanString(value) {
11
+ if (value === true || value === 'true') {
12
+ return 'true';
13
+ }
14
+ if (value === false || value === 'false') {
15
+ return 'false';
16
+ }
17
+ return value == null || value === '' ? '' : String(value);
18
+ }
19
+ function toApiStringValue(value) {
20
+ if (value === true) {
21
+ return 'true';
22
+ }
23
+ if (value === false) {
24
+ return 'false';
25
+ }
26
+ return value == null ? '' : String(value);
27
+ }
28
+ function normalizeCallInfoDisplay(callInfoDisplay) {
29
+ if (!callInfoDisplay) {
30
+ return null;
31
+ }
32
+ if (typeof callInfoDisplay === 'string') {
33
+ try {
34
+ const parsed = JSON.parse(callInfoDisplay);
35
+ return normalizeCallInfoDisplay(parsed);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ if (typeof callInfoDisplay !== 'object') {
42
+ return null;
43
+ }
44
+ const source = callInfoDisplay;
45
+ return {
46
+ callerName: source['callerName'] != null ? toApiBooleanString(source['callerName']) : null,
47
+ callerNumber: source['callerNumber'] != null ? toApiBooleanString(source['callerNumber']) : null,
48
+ redirectedNumber: source['redirectedNumber'] != null ? toApiBooleanString(source['redirectedNumber']) : null,
49
+ dialedNumber: source['dialedNumber'] != null ? toApiBooleanString(source['dialedNumber']) : null,
50
+ };
51
+ }
52
+ function normalizeDidPattern(didPattern, line, directoryNumber) {
53
+ if (didPattern && typeof didPattern === 'object') {
54
+ return didPattern;
55
+ }
56
+ if (typeof didPattern === 'string' && didPattern.trim()) {
57
+ return { calledPartyTransformationMask: didPattern };
58
+ }
59
+ const dn = directoryNumber || line?.directoryNumber?.directoryNumber;
60
+ if (dn) {
61
+ return { calledPartyTransformationMask: dn };
62
+ }
63
+ return null;
64
+ }
65
+ function normalizeDirectoryNumber(directoryNumber) {
66
+ const { displayValue: _displayValue, ...rest } = directoryNumber;
67
+ return {
68
+ directoryNumber: rest.directoryNumber ?? '',
69
+ routePartitionName: rest.routePartitionName ?? '',
70
+ templateDirectoryNumber: rest.templateDirectoryNumber,
71
+ pkid: rest.pkid || null,
72
+ dnType: rest.dnType || null,
73
+ subType: rest.subType ?? null,
74
+ };
75
+ }
76
+ function prepareLineAssociation(association, line) {
77
+ const prepared = deepClone(association);
78
+ const lineDn = line?.directoryNumber;
79
+ if (lineDn) {
80
+ prepared.directoryNumber = {
81
+ ...prepared.directoryNumber,
82
+ directoryNumber: lineDn.directoryNumber || '',
83
+ routePartitionName: lineDn.routePartitionName || '',
84
+ templateDirectoryNumber: lineDn.templateDirectoryNumber ??
85
+ prepared.directoryNumber?.templateDirectoryNumber,
86
+ };
87
+ }
88
+ prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);
89
+ prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
90
+ prepared.logMissedCall = toApiBooleanString(prepared.logMissedCall) || 'false';
91
+ prepared.callInfoDisplay = normalizeCallInfoDisplay(prepared.callInfoDisplay);
92
+ prepared.didPattern = normalizeDidPattern(prepared.didPattern, line, prepared.directoryNumber?.directoryNumber);
93
+ prepared.visualMWI = toApiStringValue(prepared.visualMWI);
94
+ prepared.audibleMWI = toApiStringValue(prepared.audibleMWI);
95
+ prepared.associated = prepared.associated ?? true;
96
+ return prepared;
97
+ }
98
+ function prepareLine(line) {
99
+ const prepared = deepClone(line);
100
+ prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
101
+ if (prepared.directoryNumber) {
102
+ prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);
103
+ }
104
+ return prepared;
105
+ }
106
+ function syncDeviceLineAssociations(device, lines) {
107
+ device.lineAssociations = (device.lineAssociations || []).map((association, index) => prepareLineAssociation(association, lines[index]));
108
+ }
109
+ function prepareDeviceForSave(device, userId, lines, deviceName) {
110
+ const prepared = deepClone(device);
111
+ const resolvedName = deviceName.trim();
112
+ prepared.name = resolvedName;
113
+ prepared.newName = resolvedName;
114
+ prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
115
+ prepared.createDeviceMode = prepared.createDeviceMode ?? false;
116
+ if (prepared.extraOptions) {
117
+ prepared.extraOptions.mobilityUserId = userId;
118
+ }
119
+ syncDeviceLineAssociations(prepared, lines);
120
+ return prepared;
121
+ }
122
+ function resolvePrimaryLineReference(user) {
123
+ const firstDeviceAssociation = user.devices?.[0]?.lineAssociations?.[0]?.directoryNumber;
124
+ if (firstDeviceAssociation) {
125
+ return firstDeviceAssociation;
126
+ }
127
+ const firstLineDn = user.lines?.[0]?.directoryNumber;
128
+ return firstLineDn ?? null;
129
+ }
130
+ export function buildSavableEndUser(endUser, lines, devices, deviceProfiles, form, options = {}) {
131
+ const user = deepClone(endUser);
132
+ user.userid = form.userId || user.userid || '';
133
+ user.firstName = form.firstName || user.firstName || '';
134
+ user.lastName = form.lastName || user.lastName || '';
135
+ user.email = form.email || user.email || '';
136
+ user.createUserMode = false;
137
+ user.lines = (lines || []).map(line => prepareLine(line));
138
+ user.devices = (devices || []).map((device, index) => prepareDeviceForSave(device, user.userid || '', user.lines, options.resolveDeviceName?.(index, device) ?? device.name ?? device.newName ?? ''));
139
+ user.deviceProfiles = (deviceProfiles || []).map((profile, index) => prepareDeviceForSave(profile, user.userid || '', user.lines, options.resolveDeviceProfileName?.(index, profile) ?? profile.name ?? profile.newName ?? ''));
140
+ user.primaryLineReference = resolvePrimaryLineReference(user);
141
+ const snr = user.singleNumberReach;
142
+ if (snr && !snr.remoteDestinationProfileName) {
143
+ user.singleNumberReach = null;
144
+ }
145
+ return user;
146
+ }
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2F2YWJsZS1lbmQtdXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9idWlsZC1zYXZhYmxlLWVuZC11c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsT0FBTyxFQUFFLFNBQVM7Q0FDWixDQUFDO0FBb0JYLFNBQVMsU0FBUyxDQUFJLEtBQVE7SUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3RDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBQ0QsSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDdEMsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDaEIsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7UUFDakIsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FB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XHJcbiAgICBEZXZpY2VJbnRlcmZhY2UsXHJcbiAgICBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgTGluZUFzc29jaWF0aW9uLFxyXG4gICAgTGluZUludGVyZmFjZSxcclxuICAgIFVzZXJEZXRhaWxzRm9ybSxcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3VzZXItY3JlYXRpb24td2l6YXJkLmludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEVOVElUWV9DSEFOR0VfVFlQRSA9IHtcclxuICAgIEFEREVEOiAnYWRkZWQnLFxyXG4gICAgVVBEQVRFRDogJ3VwZGF0ZWQnLFxyXG4gICAgRVhJU1RJTkc6ICdleGlzdGluZycsXHJcbiAgICBSRU1PVkVEOiAncmVtb3ZlZCcsXHJcbn0gYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGxJbmZvRGlzcGxheVBheWxvYWQge1xyXG4gICAgY2FsbGVyTmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICBjYWxsZXJOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcmVkaXJlY3RlZE51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBkaWFsZWROdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZFBhdHRlcm5QYXlsb2FkIHtcclxuICAgIGNhbGxlZFBhcnR5VHJhbnNmb3JtYXRpb25NYXNrPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNhdmFibGVFbmRVc2VyT3B0aW9ucyB7XHJcbiAgICByZXNvbHZlRGV2aWNlTmFtZT86IChpbmRleDogbnVtYmVyLCBkZXZpY2U6IERldmljZUludGVyZmFjZSkgPT4gc3RyaW5nO1xyXG4gICAgcmVzb2x2ZURldmljZVByb2ZpbGVOYW1lPzogKGluZGV4OiBudW1iZXIsIGRldmljZTogRGV2aWNlSW50ZXJmYWNlKSA9PiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZXBDbG9uZTxUPih2YWx1ZTogVCk6IFQge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSBhcyBUO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FwaUJvb2xlYW5TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScpIHtcclxuICAgICAgICByZXR1cm4gJ3RydWUnO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHJldHVybiAnZmFsc2UnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnID8gJycgOiBTdHJpbmcodmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FwaVN0cmluZ1ZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiAndHJ1ZSc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYWxzZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplQ2FsbEluZm9EaXNwbGF5KFxyXG4gICAgY2FsbEluZm9EaXNwbGF5OiB1bmtub3duXHJcbik6IENhbGxJbmZvRGlzcGxheVBheWxvYWQgfCBudWxsIHtcclxuICAgIGlmICghY2FsbEluZm9EaXNwbGF5KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNhbGxJbmZvRGlzcGxheSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNhbGxJbmZvRGlzcGxheSk7XHJcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkocGFyc2VkKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBjYWxsSW5mb0Rpc3BsYXkgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3VyY2UgPSBjYWxsSW5mb0Rpc3BsYXkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbGxlck5hbWU6IHNvdXJjZVsnY2FsbGVyTmFtZSddICE9IG51bGwgPyB0b0FwaUJvb2xlYW5TdHJpbmcoc291cmNlWydjYWxsZXJOYW1lJ10pIDogbnVsbCxcclxuICAgICAgICBjYWxsZXJOdW1iZXI6IHNvdXJjZVsnY2FsbGVyTnVtYmVyJ10gIT0gbnVsbCA/IHRvQXBpQm9vbGVhblN0cmluZyhzb3VyY2VbJ2NhbGxlck51bWJlciddKSA6IG51bGwsXHJcbiAgICAgICAgcmVkaXJlY3RlZE51bWJlcjogc291cmNlWydyZWRpcmVjdGVkTnVtYmVyJ10gIT0gbnVsbCA/IHRvQXBpQm9vbGVhblN0cmluZyhzb3VyY2VbJ3JlZGlyZWN0ZWROdW1iZXInXSkgOiBudWxsLFxyXG4gICAgICAgIGRpYWxlZE51bWJlcjogc291cmNlWydkaWFsZWROdW1iZXInXSAhPSBudWxsID8gdG9BcGlCb29sZWFuU3RyaW5nKHNvdXJjZVsnZGlhbGVkTnVtYmVyJ10pIDogbnVsbCxcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZURpZFBhdHRlcm4oXHJcbiAgICBkaWRQYXR0ZXJuOiB1bmtub3duLFxyXG4gICAgbGluZT86IExpbmVJbnRlcmZhY2UsXHJcbiAgICBkaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmdcclxuKTogRGlkUGF0dGVyblBheWxvYWQgfCBudWxsIHtcclxuICAgIGlmIChkaWRQYXR0ZXJuICYmIHR5cGVvZiBkaWRQYXR0ZXJuID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBkaWRQYXR0ZXJuIGFzIERpZFBhdHRlcm5QYXlsb2FkO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBkaWRQYXR0ZXJuID09PSAnc3RyaW5nJyAmJiBkaWRQYXR0ZXJuLnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiB7IGNhbGxlZFBhcnR5VHJhbnNmb3JtYXRpb25NYXNrOiBkaWRQYXR0ZXJuIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkbiA9IGRpcmVjdG9yeU51bWJlciB8fCBsaW5lPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlcjtcclxuICAgIGlmIChkbikge1xyXG4gICAgICAgIHJldHVybiB7IGNhbGxlZFBhcnR5VHJhbnNmb3JtYXRpb25NYXNrOiBkbiB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdG9yeU51bWJlcihcclxuICAgIGRpcmVjdG9yeU51bWJlcjogTGluZUFzc29jaWF0aW9uWydkaXJlY3RvcnlOdW1iZXInXVxyXG4pOiBMaW5lQXNzb2NpYXRpb25bJ2RpcmVjdG9yeU51bWJlciddIHtcclxuICAgIGNvbnN0IHsgZGlzcGxheVZhbHVlOiBfZGlzcGxheVZhbHVlLCAuLi5yZXN0IH0gPSBkaXJlY3RvcnlOdW1iZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRpcmVjdG9yeU51bWJlcjogcmVzdC5kaXJlY3RvcnlOdW1iZXIgPz8gJycsXHJcbiAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiByZXN0LnJvdXRlUGFydGl0aW9uTmFtZSA/PyAnJyxcclxuICAgICAgICB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlcjogcmVzdC50ZW1wbGF0ZURpcmVjdG9yeU51bWJlcixcclxuICAgICAgICBwa2lkOiByZXN0LnBraWQgfHwgbnVsbCxcclxuICAgICAgICBkblR5cGU6IHJlc3QuZG5UeXBlIHx8IG51bGwsXHJcbiAgICAgICAgc3ViVHlwZTogcmVzdC5zdWJUeXBlID8/IG51bGwsXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlTGluZUFzc29jaWF0aW9uKFxyXG4gICAgYXNzb2NpYXRpb246IExpbmVBc3NvY2lhdGlvbixcclxuICAgIGxpbmU/OiBMaW5lSW50ZXJmYWNlXHJcbik6IExpbmVBc3NvY2lhdGlvbiB7XHJcbiAgICBjb25zdCBwcmVwYXJlZCA9IGRlZXBDbG9uZShhc3NvY2lhdGlvbik7XHJcbiAgICBjb25zdCBsaW5lRG4gPSBsaW5lPy5kaXJlY3RvcnlOdW1iZXI7XHJcblxyXG4gICAgaWYgKGxpbmVEbikge1xyXG4gICAgICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlciA9IHtcclxuICAgICAgICAgICAgLi4ucHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgICAgICBkaXJlY3RvcnlOdW1iZXI6IGxpbmVEbi5kaXJlY3RvcnlOdW1iZXIgfHwgJycsXHJcbiAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZURuLnJvdXRlUGFydGl0aW9uTmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXI6XHJcbiAgICAgICAgICAgICAgICBsaW5lRG4udGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPz9cclxuICAgICAgICAgICAgICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcj8udGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIsXHJcbiAgICAgICAgfSBhcyBMaW5lQXNzb2NpYXRpb25bJ2RpcmVjdG9yeU51bWJlciddO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlciA9IG5vcm1hbGl6ZURpcmVjdG9yeU51bWJlcihwcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIpO1xyXG4gICAgcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSA9IHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgfHwgRU5USVRZX0NIQU5HRV9UWVBFLkFEREVEO1xyXG4gICAgcHJlcGFyZWQubG9nTWlzc2VkQ2FsbCA9IHRvQXBpQm9vbGVhblN0cmluZyhwcmVwYXJlZC5sb2dNaXNzZWRDYWxsKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnbG9nTWlzc2VkQ2FsbCddIHx8ICdmYWxzZSc7XHJcbiAgICBwcmVwYXJlZC5jYWxsSW5mb0Rpc3BsYXkgPSBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkocHJlcGFyZWQuY2FsbEluZm9EaXNwbGF5KSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnY2FsbEluZm9EaXNwbGF5J107XHJcbiAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuID0gbm9ybWFsaXplRGlkUGF0dGVybihcclxuICAgICAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuLFxyXG4gICAgICAgIGxpbmUsXHJcbiAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXJcclxuICAgICkgYXMgdW5rbm93biBhcyBMaW5lQXNzb2NpYXRpb25bJ2RpZFBhdHRlcm4nXTtcclxuICAgIHByZXBhcmVkLnZpc3VhbE1XSSA9IHRvQXBpU3RyaW5nVmFsdWUocHJlcGFyZWQudmlzdWFsTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsndmlzdWFsTVdJJ107XHJcbiAgICBwcmVwYXJlZC5hdWRpYmxlTVdJID0gdG9BcGlTdHJpbmdWYWx1ZShwcmVwYXJlZC5hdWRpYmxlTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnYXVkaWJsZU1XSSddO1xyXG4gICAgcHJlcGFyZWQuYXNzb2NpYXRlZCA9IHByZXBhcmVkLmFzc29jaWF0ZWQgPz8gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcHJlcGFyZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVMaW5lKGxpbmU6IExpbmVJbnRlcmZhY2UpOiBMaW5lSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGxpbmUpO1xyXG4gICAgcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSA9IHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgfHwgRU5USVRZX0NIQU5HRV9UWVBFLkFEREVEO1xyXG4gICAgaWYgKHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlciA9IG5vcm1hbGl6ZURpcmVjdG9yeU51bWJlcihwcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByZXBhcmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzeW5jRGV2aWNlTGluZUFzc29jaWF0aW9ucyhkZXZpY2U6IERldmljZUludGVyZmFjZSwgbGluZXM6IExpbmVJbnRlcmZhY2VbXSk6IHZvaWQge1xyXG4gICAgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgPSAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW10pLm1hcCgoYXNzb2NpYXRpb24sIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVMaW5lQXNzb2NpYXRpb24oYXNzb2NpYXRpb24sIGxpbmVzW2luZGV4XSlcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UsXHJcbiAgICB1c2VySWQ6IHN0cmluZyxcclxuICAgIGxpbmVzOiBMaW5lSW50ZXJmYWNlW10sXHJcbiAgICBkZXZpY2VOYW1lOiBzdHJpbmdcclxuKTogRGV2aWNlSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGRldmljZSk7XHJcbiAgICBjb25zdCByZXNvbHZlZE5hbWUgPSBkZXZpY2VOYW1lLnRyaW0oKTtcclxuXHJcbiAgICBwcmVwYXJlZC5uYW1lID0gcmVzb2x2ZWROYW1lO1xyXG4gICAgcHJlcGFyZWQubmV3TmFtZSA9IHJlc29sdmVkTmFtZTtcclxuICAgIHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgPSBwcmVwYXJlZC5lbnRpdHlDaGFuZ2VUeXBlIHx8IEVOVElUWV9DSEFOR0VfVFlQRS5BRERFRDtcclxuICAgIHByZXBhcmVkLmNyZWF0ZURldmljZU1vZGUgPSBwcmVwYXJlZC5jcmVhdGVEZXZpY2VNb2RlID8/IGZhbHNlO1xyXG5cclxuICAgIGlmIChwcmVwYXJlZC5leHRyYU9wdGlvbnMpIHtcclxuICAgICAgICBwcmVwYXJlZC5leHRyYU9wdGlvbnMubW9iaWxpdHlVc2VySWQgPSB1c2VySWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3luY0RldmljZUxpbmVBc3NvY2lhdGlvbnMocHJlcGFyZWQsIGxpbmVzKTtcclxuICAgIHJldHVybiBwcmVwYXJlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVByaW1hcnlMaW5lUmVmZXJlbmNlKHVzZXI6IEVuZFVzZXJJbnRlcmZhY2UpOiB1bmtub3duIHwgbnVsbCB7XHJcbiAgICBjb25zdCBmaXJzdERldmljZUFzc29jaWF0aW9uID0gdXNlci5kZXZpY2VzPy5bMF0/LmxpbmVBc3NvY2lhdGlvbnM/LlswXT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgaWYgKGZpcnN0RGV2aWNlQXNzb2NpYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gZmlyc3REZXZpY2VBc3NvY2lhdGlvbjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpcnN0TGluZURuID0gdXNlci5saW5lcz8uWzBdPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICByZXR1cm4gZmlyc3RMaW5lRG4gPz8gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2F2YWJsZUVuZFVzZXIoXHJcbiAgICBlbmRVc2VyOiBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgbGluZXM6IExpbmVJbnRlcmZhY2VbXSxcclxuICAgIGRldmljZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZGV2aWNlUHJvZmlsZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZm9ybTogVXNlckRldGFpbHNGb3JtLFxyXG4gICAgb3B0aW9uczogQnVpbGRTYXZhYmxlRW5kVXNlck9wdGlvbnMgPSB7fVxyXG4pOiBFbmRVc2VySW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHVzZXIgPSBkZWVwQ2xvbmUoZW5kVXNlcik7XHJcblxyXG4gICAgdXNlci51c2VyaWQgPSBmb3JtLnVzZXJJZCB8fCB1c2VyLnVzZXJpZCB8fCAnJztcclxuICAgIHVzZXIuZmlyc3ROYW1lID0gZm9ybS5maXJzdE5hbWUgfHwgdXNlci5maXJzdE5hbWUgfHwgJyc7XHJcbiAgICB1c2VyLmxhc3ROYW1lID0gZm9ybS5sYXN0TmFtZSB8fCB1c2VyLmxhc3ROYW1lIHx8ICcnO1xyXG4gICAgdXNlci5lbWFpbCA9IGZvcm0uZW1haWwgfHwgdXNlci5lbWFpbCB8fCAnJztcclxuICAgIHVzZXIuY3JlYXRlVXNlck1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICB1c2VyLmxpbmVzID0gKGxpbmVzIHx8IFtdKS5tYXAobGluZSA9PiBwcmVwYXJlTGluZShsaW5lKSk7XHJcbiAgICB1c2VyLmRldmljZXMgPSAoZGV2aWNlcyB8fCBbXSkubWFwKChkZXZpY2UsIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgICAgICAgICBkZXZpY2UsXHJcbiAgICAgICAgICAgIHVzZXIudXNlcmlkIHx8ICcnLFxyXG4gICAgICAgICAgICB1c2VyLmxpbmVzLFxyXG4gICAgICAgICAgICBvcHRpb25zLnJlc29sdmVEZXZpY2VOYW1lPy4oaW5kZXgsIGRldmljZSkgPz8gZGV2aWNlLm5hbWUgPz8gZGV2aWNlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gICAgdXNlci5kZXZpY2VQcm9maWxlcyA9IChkZXZpY2VQcm9maWxlcyB8fCBbXSkubWFwKChwcm9maWxlLCBpbmRleCkgPT5cclxuICAgICAgICBwcmVwYXJlRGV2aWNlRm9yU2F2ZShcclxuICAgICAgICAgICAgcHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlci51c2VyaWQgfHwgJycsXHJcbiAgICAgICAgICAgIHVzZXIubGluZXMsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVzb2x2ZURldmljZVByb2ZpbGVOYW1lPy4oaW5kZXgsIHByb2ZpbGUpID8/IHByb2ZpbGUubmFtZSA/PyBwcm9maWxlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIHVzZXIucHJpbWFyeUxpbmVSZWZlcmVuY2UgPSByZXNvbHZlUHJpbWFyeUxpbmVSZWZlcmVuY2UodXNlcik7XHJcblxyXG4gICAgY29uc3Qgc25yID0gdXNlci5zaW5nbGVOdW1iZXJSZWFjaCBhcyB7IHJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHNuciAmJiAhc25yLnJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWUpIHtcclxuICAgICAgICB1c2VyLnNpbmdsZU51bWJlclJlYWNoID0gbnVsbCBhcyBFbmRVc2VySW50ZXJmYWNlWydzaW5nbGVOdW1iZXJSZWFjaCddO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1c2VyO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ /** Matches device types like `Cisco 8851`. */
2
+ export const CISCO_DIGIT_DEVICE_TYPE_PATTERN = /^Cisco\s+\d+$/i;
3
+ export const DEFAULT_SEP_DEVICE_PREFIX = 'SEP';
4
+ export function applyDefaultDevicePrefixIfMissing(device) {
5
+ if (device.prefix?.trim()) {
6
+ return;
7
+ }
8
+ const deviceType = device.deviceType?.trim() ?? '';
9
+ if (CISCO_DIGIT_DEVICE_TYPE_PATTERN.test(deviceType)) {
10
+ device.prefix = DEFAULT_SEP_DEVICE_PREFIX;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWRlZmF1bHQtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItY3JlYXRpb24vc3JjL3V0aWxzL2RldmljZS1kZWZhdWx0LXByZWZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsZ0JBQWdCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRS9DLE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxNQUFzRDtJQUNwRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsT0FBTztLQUNWO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztLQUM3QztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VzZXItY3JlYXRpb24td2l6YXJkLmludGVyZmFjZXMnO1xyXG5cclxuLyoqIE1hdGNoZXMgZGV2aWNlIHR5cGVzIGxpa2UgYENpc2NvIDg4NTFgLiAqL1xyXG5leHBvcnQgY29uc3QgQ0lTQ09fRElHSVRfREVWSUNFX1RZUEVfUEFUVEVSTiA9IC9eQ2lzY29cXHMrXFxkKyQvaTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUF9ERVZJQ0VfUFJFRklYID0gJ1NFUCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZWZhdWx0RGV2aWNlUHJlZml4SWZNaXNzaW5nKGRldmljZTogUGljazxEZXZpY2VJbnRlcmZhY2UsICdwcmVmaXgnIHwgJ2RldmljZVR5cGUnPik6IHZvaWQge1xyXG4gICAgaWYgKGRldmljZS5wcmVmaXg/LnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gZGV2aWNlLmRldmljZVR5cGU/LnRyaW0oKSA/PyAnJztcclxuICAgIGlmIChDSVNDT19ESUdJVF9ERVZJQ0VfVFlQRV9QQVRURVJOLnRlc3QoZGV2aWNlVHlwZSkpIHtcclxuICAgICAgICBkZXZpY2UucHJlZml4ID0gREVGQVVMVF9TRVBfREVWSUNFX1BSRUZJWDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,23 @@
1
+ export function deviceNameValidator(options) {
2
+ return (control) => {
3
+ const raw = String(control.value ?? '').trim();
4
+ if (!raw || !options.regex?.trim()) {
5
+ return null;
6
+ }
7
+ try {
8
+ const rule = new RegExp(`^(?:${options.regex})$`);
9
+ if (!rule.test(raw)) {
10
+ return {
11
+ deviceName: {
12
+ caption: options.caption || options.regex,
13
+ },
14
+ };
15
+ }
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ return null;
21
+ };
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLW5hbWUtdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9kZXZpY2UtbmFtZS12YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFtQztJQUNuRSxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUN6RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSTtZQUNBLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU87b0JBQ0gsVUFBVSxFQUFFO3dCQUNSLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLO3FCQUM1QztpQkFDSixDQUFDO2FBQ0w7U0FDSjtRQUFDLE1BQU07WUFDSixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERldmljZU5hbWVWYWxpZGF0b3JPcHRpb25zIHtcclxuICAgIHJlZ2V4OiBzdHJpbmc7XHJcbiAgICBjYXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRldmljZU5hbWVWYWxpZGF0b3Iob3B0aW9uczogRGV2aWNlTmFtZVZhbGlkYXRvck9wdGlvbnMpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICBjb25zdCByYXcgPSBTdHJpbmcoY29udHJvbC52YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmICghcmF3IHx8ICFvcHRpb25zLnJlZ2V4Py50cmltKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChgXig/OiR7b3B0aW9ucy5yZWdleH0pJGApO1xyXG4gICAgICAgICAgICBpZiAoIXJ1bGUudGVzdChyYXcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRldmljZU5hbWU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbjogb3B0aW9ucy5jYXB0aW9uIHx8IG9wdGlvbnMucmVnZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbn1cclxuIl19
@@ -0,0 +1,19 @@
1
+ export const getSavableData = (model, exclude) => {
2
+ let result = Object.keys(model);
3
+ if (exclude && exclude.length) {
4
+ result = result.filter(key => !exclude.some(item => item === key));
5
+ }
6
+ return result.reduce((result, key) => {
7
+ if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {
8
+ result[key] = model[key].map((item) => item.getSavableData());
9
+ }
10
+ else if (model[key] instanceof Object && model[key].getSavableData) {
11
+ result[key] = model[key].getSavableData();
12
+ }
13
+ else {
14
+ result[key] = model[key];
15
+ }
16
+ return result;
17
+ }, {});
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvdXRpbHMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQXVCLEVBQUUsRUFBRTtJQUNwRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwRTtJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN4QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFO1lBQ3BGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNwRTthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDM0M7YUFBTTtZQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZ2V0U2F2YWJsZURhdGEgPSAobW9kZWw6IGFueSwgZXhjbHVkZT86IEFycmF5PHN0cmluZz4pID0+IHtcclxuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMobW9kZWwpO1xyXG4gIGlmIChleGNsdWRlICYmIGV4Y2x1ZGUubGVuZ3RoKSB7XHJcbiAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGtleSA9PiAhZXhjbHVkZS5zb21lKGl0ZW0gPT4gaXRlbSA9PT0ga2V5KSk7XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQucmVkdWNlKChyZXN1bHQ6IGFueSwga2V5KSA9PiB7XHJcbiAgICBpZiAobW9kZWxba2V5XSBpbnN0YW5jZW9mIEFycmF5ICYmIG1vZGVsW2tleV0ubGVuZ3RoICYmIG1vZGVsW2tleV1bMF0uZ2V0U2F2YWJsZURhdGEpIHtcclxuICAgICAgcmVzdWx0W2tleV0gPSBtb2RlbFtrZXldLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldFNhdmFibGVEYXRhKCkpO1xyXG4gICAgfSBlbHNlIGlmIChtb2RlbFtrZXldIGluc3RhbmNlb2YgT2JqZWN0ICYmIG1vZGVsW2tleV0uZ2V0U2F2YWJsZURhdGEpIHtcclxuICAgICAgcmVzdWx0W2tleV0gPSBtb2RlbFtrZXldLmdldFNhdmFibGVEYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXN1bHRba2V5XSA9IG1vZGVsW2tleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH0sIHt9KTtcclxufTsiXX0=
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Strips a leading device-prefix group from `deviceNameRegex`, returning the pattern
3
+ * to validate the name field value (without matPrefix).
4
+ *
5
+ * - `([sS][eE][pP]|BAT)[0-9a-fA-F]{12}` → `[0-9a-fA-F]{12}`
6
+ * - `[a-zA-Z0-9]{1,15}` → `[a-zA-Z0-9]{1,15}` (unchanged)
7
+ */
8
+ export function parseDeviceNameRegexBody(deviceNameRegex) {
9
+ const fullRegex = deviceNameRegex?.trim() ?? '';
10
+ if (!fullRegex) {
11
+ return '';
12
+ }
13
+ return stripLeadingPrefixGroup(fullRegex);
14
+ }
15
+ function stripLeadingPrefixGroup(regex) {
16
+ const parenMatch = regex.match(/^(\(.+?\))(.+)$/s);
17
+ if (parenMatch?.[2]?.trim()) {
18
+ return parenMatch[2];
19
+ }
20
+ const literalMatch = regex.match(/^([A-Za-z]+)(\[.+\])$/s);
21
+ if (literalMatch?.[2]?.trim()) {
22
+ return literalMatch[2];
23
+ }
24
+ return regex;
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZGV2aWNlLW5hbWUtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9wYXJzZS1kZXZpY2UtbmFtZS1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxlQUEwQztJQUMvRSxNQUFNLFNBQVMsR0FBRyxlQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pCLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzNELElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDM0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUI7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFN0cmlwcyBhIGxlYWRpbmcgZGV2aWNlLXByZWZpeCBncm91cCBmcm9tIGBkZXZpY2VOYW1lUmVnZXhgLCByZXR1cm5pbmcgdGhlIHBhdHRlcm5cclxuICogdG8gdmFsaWRhdGUgdGhlIG5hbWUgZmllbGQgdmFsdWUgKHdpdGhvdXQgbWF0UHJlZml4KS5cclxuICpcclxuICogLSBgKFtzU11bZUVdW3BQXXxCQVQpWzAtOWEtZkEtRl17MTJ9YCDihpIgYFswLTlhLWZBLUZdezEyfWBcclxuICogLSBgW2EtekEtWjAtOV17MSwxNX1gIOKGkiBgW2EtekEtWjAtOV17MSwxNX1gICh1bmNoYW5nZWQpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZXZpY2VOYW1lUmVnZXhCb2R5KGRldmljZU5hbWVSZWdleDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmdWxsUmVnZXggPSBkZXZpY2VOYW1lUmVnZXg/LnRyaW0oKSA/PyAnJztcclxuICAgIGlmICghZnVsbFJlZ2V4KSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJpcExlYWRpbmdQcmVmaXhHcm91cChmdWxsUmVnZXgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdHJpcExlYWRpbmdQcmVmaXhHcm91cChyZWdleDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcmVuTWF0Y2ggPSByZWdleC5tYXRjaCgvXihcXCguKz9cXCkpKC4rKSQvcyk7XHJcbiAgICBpZiAocGFyZW5NYXRjaD8uWzJdPy50cmltKCkpIHtcclxuICAgICAgICByZXR1cm4gcGFyZW5NYXRjaFsyXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXRlcmFsTWF0Y2ggPSByZWdleC5tYXRjaCgvXihbQS1aYS16XSspKFxcWy4rXFxdKSQvcyk7XHJcbiAgICBpZiAobGl0ZXJhbE1hdGNoPy5bMl0/LnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiBsaXRlcmFsTWF0Y2hbMl07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlZ2V4O1xyXG59XHJcbiJdfQ==