@tuki-io/tuki-widgets 0.0.190 → 0.0.192

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 (30) hide show
  1. package/esm2020/user-creation/src/app.constants.mjs +9 -2
  2. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +19 -0
  3. package/esm2020/user-creation/src/shared/material.module.mjs +35 -7
  4. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +42 -19
  5. package/esm2020/user-creation/src/user-creation.module.mjs +4 -1
  6. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +14 -0
  7. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +147 -0
  8. package/esm2020/user-creation/src/utils/validation.mjs +14 -0
  9. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +429 -20
  10. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +3 -3
  11. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +80 -34
  12. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +61 -11
  13. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +509 -130
  14. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +1446 -300
  15. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  16. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +1408 -287
  17. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/user-creation/src/app.constants.d.ts +7 -0
  20. package/user-creation/src/interfaces/user-creation-wizard.interfaces.d.ts +483 -0
  21. package/user-creation/src/shared/material.module.d.ts +5 -1
  22. package/user-creation/src/shared/services/user-creation-api.service.d.ts +8 -2
  23. package/user-creation/src/user-creation.module.d.ts +11 -10
  24. package/user-creation/src/utils/app-loader/app-loader.d.ts +6 -0
  25. package/user-creation/src/utils/build-savable-end-user.d.ts +23 -0
  26. package/user-creation/src/utils/validation.d.ts +4 -0
  27. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +75 -7
  28. package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +11 -4
  29. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +13 -0
  30. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +57 -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);
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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dmljZUludGVyZmFjZSxcclxuICAgIEVuZFVzZXJJbnRlcmZhY2UsXHJcbiAgICBMaW5lQXNzb2NpYXRpb24sXHJcbiAgICBMaW5lSW50ZXJmYWNlLFxyXG4gICAgVXNlckRldGFpbHNGb3JtLFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvdXNlci1jcmVhdGlvbi13aXphcmQuaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY29uc3QgRU5USVRZX0NIQU5HRV9UWVBFID0ge1xyXG4gICAgQURERUQ6ICdhZGRlZCcsXHJcbiAgICBVUERBVEVEOiAndXBkYXRlZCcsXHJcbiAgICBFWElTVElORzogJ2V4aXN0aW5nJyxcclxuICAgIFJFTU9WRUQ6ICdyZW1vdmVkJyxcclxufSBhcyBjb25zdDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEluZm9EaXNwbGF5UGF5bG9hZCB7XHJcbiAgICBjYWxsZXJOYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNhbGxlck51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbiAgICByZWRpcmVjdGVkTnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGRpYWxlZE51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlkUGF0dGVyblBheWxvYWQge1xyXG4gICAgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcGF0dGVybj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU2F2YWJsZUVuZFVzZXJPcHRpb25zIHtcclxuICAgIHJlc29sdmVEZXZpY2VOYW1lPzogKGluZGV4OiBudW1iZXIsIGRldmljZTogRGV2aWNlSW50ZXJmYWNlKSA9PiBzdHJpbmc7XHJcbiAgICByZXNvbHZlRGV2aWNlUHJvZmlsZU5hbWU/OiAoaW5kZXg6IG51bWJlciwgZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UpID0+IHN0cmluZztcclxufVxyXG5cclxuZnVuY3Rpb24gZGVlcENsb25lPFQ+KHZhbHVlOiBUKTogVCB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIGFzIFQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXBpQm9vbGVhblN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHJldHVybiAndHJ1ZSc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYWxzZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXBpU3RyaW5nVmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuICd0cnVlJztcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gJ2ZhbHNlJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkoXHJcbiAgICBjYWxsSW5mb0Rpc3BsYXk6IHVua25vd25cclxuKTogQ2FsbEluZm9EaXNwbGF5UGF5bG9hZCB8IG51bGwge1xyXG4gICAgaWYgKCFjYWxsSW5mb0Rpc3BsYXkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY2FsbEluZm9EaXNwbGF5ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2FsbEluZm9EaXNwbGF5KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNhbGxJbmZvRGlzcGxheShwYXJzZWQpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNhbGxJbmZvRGlzcGxheSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvdXJjZSA9IGNhbGxJbmZvRGlzcGxheSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGVyTmFtZTogc291cmNlWydjYWxsZXJOYW1lJ10gIT0gbnVsbCA/IHRvQXBpQm9vbGVhblN0cmluZyhzb3VyY2VbJ2NhbGxlck5hbWUnXSkgOiBudWxsLFxyXG4gICAgICAgIGNhbGxlck51bWJlcjogc291cmNlWydjYWxsZXJOdW1iZXInXSAhPSBudWxsID8gdG9BcGlCb29sZWFuU3RyaW5nKHNvdXJjZVsnY2FsbGVyTnVtYmVyJ10pIDogbnVsbCxcclxuICAgICAgICByZWRpcmVjdGVkTnVtYmVyOiBzb3VyY2VbJ3JlZGlyZWN0ZWROdW1iZXInXSAhPSBudWxsID8gdG9BcGlCb29sZWFuU3RyaW5nKHNvdXJjZVsncmVkaXJlY3RlZE51bWJlciddKSA6IG51bGwsXHJcbiAgICAgICAgZGlhbGVkTnVtYmVyOiBzb3VyY2VbJ2RpYWxlZE51bWJlciddICE9IG51bGwgPyB0b0FwaUJvb2xlYW5TdHJpbmcoc291cmNlWydkaWFsZWROdW1iZXInXSkgOiBudWxsLFxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplRGlkUGF0dGVybihcclxuICAgIGRpZFBhdHRlcm46IHVua25vd24sXHJcbiAgICBsaW5lPzogTGluZUludGVyZmFjZSxcclxuICAgIGRpcmVjdG9yeU51bWJlcj86IHN0cmluZ1xyXG4pOiBEaWRQYXR0ZXJuUGF5bG9hZCB8IG51bGwge1xyXG4gICAgaWYgKGRpZFBhdHRlcm4gJiYgdHlwZW9mIGRpZFBhdHRlcm4gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpZFBhdHRlcm4gYXMgRGlkUGF0dGVyblBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRpZFBhdHRlcm4gPT09ICdzdHJpbmcnICYmIGRpZFBhdHRlcm4udHJpbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGRpZFBhdHRlcm4gfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRuID0gZGlyZWN0b3J5TnVtYmVyIHx8IGxpbmU/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgaWYgKGRuKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGRuIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0b3J5TnVtYmVyKFxyXG4gICAgZGlyZWN0b3J5TnVtYmVyOiBMaW5lQXNzb2NpYXRpb25bJ2RpcmVjdG9yeU51bWJlciddXHJcbik6IExpbmVBc3NvY2lhdGlvblsnZGlyZWN0b3J5TnVtYmVyJ10ge1xyXG4gICAgY29uc3QgeyBkaXNwbGF5VmFsdWU6IF9kaXNwbGF5VmFsdWUsIC4uLnJlc3QgfSA9IGRpcmVjdG9yeU51bWJlcjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGlyZWN0b3J5TnVtYmVyOiByZXN0LmRpcmVjdG9yeU51bWJlciA/PyAnJyxcclxuICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHJlc3Qucm91dGVQYXJ0aXRpb25OYW1lID8/ICcnLFxyXG4gICAgICAgIHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyOiByZXN0LnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgIHBraWQ6IHJlc3QucGtpZCB8fCBudWxsLFxyXG4gICAgICAgIGRuVHlwZTogcmVzdC5kblR5cGUgfHwgbnVsbCxcclxuICAgICAgICBzdWJUeXBlOiByZXN0LnN1YlR5cGUgPz8gbnVsbCxcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVMaW5lQXNzb2NpYXRpb24oXHJcbiAgICBhc3NvY2lhdGlvbjogTGluZUFzc29jaWF0aW9uLFxyXG4gICAgbGluZT86IExpbmVJbnRlcmZhY2VcclxuKTogTGluZUFzc29jaWF0aW9uIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGFzc29jaWF0aW9uKTtcclxuICAgIGNvbnN0IGxpbmVEbiA9IGxpbmU/LmRpcmVjdG9yeU51bWJlcjtcclxuXHJcbiAgICBpZiAobGluZURuKSB7XHJcbiAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyID0ge1xyXG4gICAgICAgICAgICAuLi5wcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIsXHJcbiAgICAgICAgICAgIGRpcmVjdG9yeU51bWJlcjogbGluZURuLmRpcmVjdG9yeU51bWJlciB8fCAnJyxcclxuICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lRG4ucm91dGVQYXJ0aXRpb25OYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlcjpcclxuICAgICAgICAgICAgICAgIGxpbmVEbi50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA/P1xyXG4gICAgICAgICAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyPy50ZW1wbGF0ZURpcmVjdG9yeU51bWJlcixcclxuICAgICAgICB9IGFzIExpbmVBc3NvY2lhdGlvblsnZGlyZWN0b3J5TnVtYmVyJ107XHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyID0gbm9ybWFsaXplRGlyZWN0b3J5TnVtYmVyKHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcik7XHJcbiAgICBwcmVwYXJlZC5lbnRpdHlDaGFuZ2VUeXBlID0gcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSB8fCBFTlRJVFlfQ0hBTkdFX1RZUEUuQURERUQ7XHJcbiAgICBwcmVwYXJlZC5sb2dNaXNzZWRDYWxsID0gdG9BcGlCb29sZWFuU3RyaW5nKHByZXBhcmVkLmxvZ01pc3NlZENhbGwpIGFzIHVua25vd24gYXMgTGluZUFzc29jaWF0aW9uWydsb2dNaXNzZWRDYWxsJ107XHJcbiAgICBwcmVwYXJlZC5jYWxsSW5mb0Rpc3BsYXkgPSBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkocHJlcGFyZWQuY2FsbEluZm9EaXNwbGF5KSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnY2FsbEluZm9EaXNwbGF5J107XHJcbiAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuID0gbm9ybWFsaXplRGlkUGF0dGVybihcclxuICAgICAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuLFxyXG4gICAgICAgIGxpbmUsXHJcbiAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXJcclxuICAgICkgYXMgdW5rbm93biBhcyBMaW5lQXNzb2NpYXRpb25bJ2RpZFBhdHRlcm4nXTtcclxuICAgIHByZXBhcmVkLnZpc3VhbE1XSSA9IHRvQXBpU3RyaW5nVmFsdWUocHJlcGFyZWQudmlzdWFsTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsndmlzdWFsTVdJJ107XHJcbiAgICBwcmVwYXJlZC5hdWRpYmxlTVdJID0gdG9BcGlTdHJpbmdWYWx1ZShwcmVwYXJlZC5hdWRpYmxlTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnYXVkaWJsZU1XSSddO1xyXG4gICAgcHJlcGFyZWQuYXNzb2NpYXRlZCA9IHByZXBhcmVkLmFzc29jaWF0ZWQgPz8gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcHJlcGFyZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVMaW5lKGxpbmU6IExpbmVJbnRlcmZhY2UpOiBMaW5lSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGxpbmUpO1xyXG4gICAgcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSA9IHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgfHwgRU5USVRZX0NIQU5HRV9UWVBFLkFEREVEO1xyXG4gICAgaWYgKHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlciA9IG5vcm1hbGl6ZURpcmVjdG9yeU51bWJlcihwcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByZXBhcmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzeW5jRGV2aWNlTGluZUFzc29jaWF0aW9ucyhkZXZpY2U6IERldmljZUludGVyZmFjZSwgbGluZXM6IExpbmVJbnRlcmZhY2VbXSk6IHZvaWQge1xyXG4gICAgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgPSAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW10pLm1hcCgoYXNzb2NpYXRpb24sIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVMaW5lQXNzb2NpYXRpb24oYXNzb2NpYXRpb24sIGxpbmVzW2luZGV4XSlcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UsXHJcbiAgICB1c2VySWQ6IHN0cmluZyxcclxuICAgIGxpbmVzOiBMaW5lSW50ZXJmYWNlW10sXHJcbiAgICBkZXZpY2VOYW1lOiBzdHJpbmdcclxuKTogRGV2aWNlSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGRldmljZSk7XHJcbiAgICBjb25zdCByZXNvbHZlZE5hbWUgPSBkZXZpY2VOYW1lLnRyaW0oKTtcclxuXHJcbiAgICBwcmVwYXJlZC5uYW1lID0gcmVzb2x2ZWROYW1lO1xyXG4gICAgcHJlcGFyZWQubmV3TmFtZSA9IHJlc29sdmVkTmFtZTtcclxuICAgIHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgPSBwcmVwYXJlZC5lbnRpdHlDaGFuZ2VUeXBlIHx8IEVOVElUWV9DSEFOR0VfVFlQRS5BRERFRDtcclxuICAgIHByZXBhcmVkLmNyZWF0ZURldmljZU1vZGUgPSBwcmVwYXJlZC5jcmVhdGVEZXZpY2VNb2RlID8/IGZhbHNlO1xyXG5cclxuICAgIGlmIChwcmVwYXJlZC5leHRyYU9wdGlvbnMpIHtcclxuICAgICAgICBwcmVwYXJlZC5leHRyYU9wdGlvbnMubW9iaWxpdHlVc2VySWQgPSB1c2VySWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3luY0RldmljZUxpbmVBc3NvY2lhdGlvbnMocHJlcGFyZWQsIGxpbmVzKTtcclxuICAgIHJldHVybiBwcmVwYXJlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVByaW1hcnlMaW5lUmVmZXJlbmNlKHVzZXI6IEVuZFVzZXJJbnRlcmZhY2UpOiB1bmtub3duIHwgbnVsbCB7XHJcbiAgICBjb25zdCBmaXJzdERldmljZUFzc29jaWF0aW9uID0gdXNlci5kZXZpY2VzPy5bMF0/LmxpbmVBc3NvY2lhdGlvbnM/LlswXT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgaWYgKGZpcnN0RGV2aWNlQXNzb2NpYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gZmlyc3REZXZpY2VBc3NvY2lhdGlvbjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpcnN0TGluZURuID0gdXNlci5saW5lcz8uWzBdPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICByZXR1cm4gZmlyc3RMaW5lRG4gPz8gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2F2YWJsZUVuZFVzZXIoXHJcbiAgICBlbmRVc2VyOiBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgbGluZXM6IExpbmVJbnRlcmZhY2VbXSxcclxuICAgIGRldmljZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZGV2aWNlUHJvZmlsZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZm9ybTogVXNlckRldGFpbHNGb3JtLFxyXG4gICAgb3B0aW9uczogQnVpbGRTYXZhYmxlRW5kVXNlck9wdGlvbnMgPSB7fVxyXG4pOiBFbmRVc2VySW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHVzZXIgPSBkZWVwQ2xvbmUoZW5kVXNlcik7XHJcblxyXG4gICAgdXNlci51c2VyaWQgPSBmb3JtLnVzZXJJZCB8fCB1c2VyLnVzZXJpZCB8fCAnJztcclxuICAgIHVzZXIuZmlyc3ROYW1lID0gZm9ybS5maXJzdE5hbWUgfHwgdXNlci5maXJzdE5hbWUgfHwgJyc7XHJcbiAgICB1c2VyLmxhc3ROYW1lID0gZm9ybS5sYXN0TmFtZSB8fCB1c2VyLmxhc3ROYW1lIHx8ICcnO1xyXG4gICAgdXNlci5lbWFpbCA9IGZvcm0uZW1haWwgfHwgdXNlci5lbWFpbCB8fCAnJztcclxuICAgIHVzZXIuY3JlYXRlVXNlck1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICB1c2VyLmxpbmVzID0gKGxpbmVzIHx8IFtdKS5tYXAobGluZSA9PiBwcmVwYXJlTGluZShsaW5lKSk7XHJcbiAgICB1c2VyLmRldmljZXMgPSAoZGV2aWNlcyB8fCBbXSkubWFwKChkZXZpY2UsIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgICAgICAgICBkZXZpY2UsXHJcbiAgICAgICAgICAgIHVzZXIudXNlcmlkIHx8ICcnLFxyXG4gICAgICAgICAgICB1c2VyLmxpbmVzLFxyXG4gICAgICAgICAgICBvcHRpb25zLnJlc29sdmVEZXZpY2VOYW1lPy4oaW5kZXgsIGRldmljZSkgPz8gZGV2aWNlLm5hbWUgPz8gZGV2aWNlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gICAgdXNlci5kZXZpY2VQcm9maWxlcyA9IChkZXZpY2VQcm9maWxlcyB8fCBbXSkubWFwKChwcm9maWxlLCBpbmRleCkgPT5cclxuICAgICAgICBwcmVwYXJlRGV2aWNlRm9yU2F2ZShcclxuICAgICAgICAgICAgcHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlci51c2VyaWQgfHwgJycsXHJcbiAgICAgICAgICAgIHVzZXIubGluZXMsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVzb2x2ZURldmljZVByb2ZpbGVOYW1lPy4oaW5kZXgsIHByb2ZpbGUpID8/IHByb2ZpbGUubmFtZSA/PyBwcm9maWxlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIHVzZXIucHJpbWFyeUxpbmVSZWZlcmVuY2UgPSByZXNvbHZlUHJpbWFyeUxpbmVSZWZlcmVuY2UodXNlcik7XHJcblxyXG4gICAgY29uc3Qgc25yID0gdXNlci5zaW5nbGVOdW1iZXJSZWFjaCBhcyB7IHJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHNuciAmJiAhc25yLnJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWUpIHtcclxuICAgICAgICB1c2VyLnNpbmdsZU51bWJlclJlYWNoID0gbnVsbCBhcyBFbmRVc2VySW50ZXJmYWNlWydzaW5nbGVOdW1iZXJSZWFjaCddO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1c2VyO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,14 @@
1
+ const MAC_ADDRESS_REGEX = /^[A-Fa-f0-9]{12}$/;
2
+ export const Validation = {
3
+ macAddress() {
4
+ return (control) => {
5
+ const raw = String(control.value ?? '').trim();
6
+ if (!raw) {
7
+ return null;
8
+ }
9
+ const normalized = raw.replace(/^SEP\s*/i, '').trim();
10
+ return MAC_ADDRESS_REGEX.test(normalized) ? null : { macAddress: true };
11
+ };
12
+ },
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCLFVBQVU7UUFDTixPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUN6RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1RSxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5jb25zdCBNQUNfQUREUkVTU19SRUdFWCA9IC9eW0EtRmEtZjAtOV17MTJ9JC87XHJcblxyXG5leHBvcnQgY29uc3QgVmFsaWRhdGlvbiA9IHtcclxuICAgIG1hY0FkZHJlc3MoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByYXcgPSBTdHJpbmcoY29udHJvbC52YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIXJhdykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHJhdy5yZXBsYWNlKC9eU0VQXFxzKi9pLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gTUFDX0FERFJFU1NfUkVHRVgudGVzdChub3JtYWxpemVkKSA/IG51bGwgOiB7IG1hY0FkZHJlc3M6IHRydWUgfTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxufTtcclxuIl19