amazon-route-53-dns-zone-file
Version:
Makes DNS Zone File easy. Parses and validates BIND zone files and can be extended for custom features. Functionality is modular. Features are made open for extension and closed for runtime mutation. Written in TypeScript.
76 lines (62 loc) • 2.04 kB
text/typescript
import { InputTypings } from '../src/parser/types_parser';
import { ExampleZoneFile, ExampleDomain } from '../example/example_types';
import {
getErrorText,
importZoneAdapter,
clientServiceApi,
createRecordValidator,
} from '../example/example_consumer';
import { Validator } from '../src';
import { Parser } from '../src/parser/parser';
export const parse = (text: string, $originName?: string) =>
new Parser($originName).setText(text).parse();
export const validate = (parser: Parser) =>
new Validator({ getErrorText }).validate(parser);
export const mergeMultipleSpaces = (x: string): string => x.replace(/\s+/, ' ');
export const spyOnCreateApi = () =>
jest.spyOn(clientServiceApi, 'createRecords');
export type MockSupportedRecordType =
| InputTypings.SupportedRecordType
| 'GENERAL'
| 'SOA';
export const hz = {
name: 'igloo.com.',
};
export const fromApiRecordToClientRecord = (
record: ExampleDomain.ApiRecord
): ExampleDomain.ClientRecord => ({
name: record.recordName,
endpoints: record.routeTrafficToEndpoints,
type: record.recordType,
ttl: ['string', 'number'].includes(typeof record.ttl) ? +record.ttl : 0,
});
export const testParseAdaptAndValidate = (
txt: string,
hz: ExampleDomain.HostedZone
) => {
const parser = parse(txt, hz?.name);
const { records, warnings } = importZoneAdapter(parser, hz);
const { errors } = new Validator({
getErrorText,
postValidators: [createRecordValidator(records)],
}).validate(parser);
return { errors, warnings, records, parser };
};
export const testImportZoneFile = (
txt: string
): ExampleZoneFile.ParsedAndValidated => {
const { parser, records, warnings, errors } = testParseAdaptAndValidate(
txt,
hz
);
return {
records: records.map(fromApiRecordToClientRecord),
error: errors[0],
warnings,
parser,
};
};
export const testImportZoneFileAndCallApi = (txt: string) => {
const { records } = testParseAdaptAndValidate(txt, hz);
return clientServiceApi.createRecords(hz, records);
};