(meta: DirectiveMeta)
| 44 | let isStructural: boolean = false; |
| 45 | |
| 46 | const addMetadata = (meta: DirectiveMeta): void => { |
| 47 | if (meta.baseClass === 'dynamic') { |
| 48 | isDynamic = true; |
| 49 | } else if (meta.baseClass !== null) { |
| 50 | const baseMeta = reader.getDirectiveMetadata(meta.baseClass); |
| 51 | if (baseMeta !== null) { |
| 52 | addMetadata(baseMeta); |
| 53 | } else { |
| 54 | // Missing metadata for the base class means it's effectively dynamic. |
| 55 | isDynamic = true; |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | isStructural = isStructural || meta.isStructural; |
| 60 | |
| 61 | inputs = ClassPropertyMapping.merge(inputs, meta.inputs); |
| 62 | outputs = ClassPropertyMapping.merge(outputs, meta.outputs); |
| 63 | |
| 64 | for (const coercedInputField of meta.coercedInputFields) { |
| 65 | coercedInputFields.add(coercedInputField); |
| 66 | } |
| 67 | for (const undeclaredInputField of meta.undeclaredInputFields) { |
| 68 | undeclaredInputFields.add(undeclaredInputField); |
| 69 | } |
| 70 | for (const restrictedInputField of meta.restrictedInputFields) { |
| 71 | restrictedInputFields.add(restrictedInputField); |
| 72 | } |
| 73 | for (const field of meta.stringLiteralInputFields) { |
| 74 | stringLiteralInputFields.add(field); |
| 75 | } |
| 76 | for (const name of meta.publicMethods) { |
| 77 | publicMethods.add(name); |
| 78 | } |
| 79 | if (meta.hostDirectives !== null && meta.hostDirectives.length > 0) { |
| 80 | hostDirectives ??= []; |
| 81 | hostDirectives.push(...meta.hostDirectives); |
| 82 | } |
| 83 | }; |
| 84 | |
| 85 | addMetadata(topMeta); |
| 86 |
no test coverage detected
searching dependent graphs…