From 23d3826ff4b620426931a33a8563ed97f4ac80ce Mon Sep 17 00:00:00 2001 From: Grant Timmerman Date: Thu, 23 Jul 2020 15:40:05 -0700 Subject: [PATCH] feat: simplify http version parsers Signed-off-by: Grant Timmerman --- src/transport/http/binary_receiver.ts | 4 +-- src/transport/http/structured_receiver.ts | 4 +-- src/transport/http/{v03/parsers.ts => v03.ts} | 31 +++++++++++++------ src/transport/http/v03/headers.ts | 23 -------------- src/transport/http/v03/index.ts | 1 - src/transport/http/{v1/parsers.ts => v1.ts} | 29 +++++++++++------ src/transport/http/v1/headers.ts | 22 ------------- src/transport/http/v1/index.ts | 1 - 8 files changed, 46 insertions(+), 69 deletions(-) rename src/transport/http/{v03/parsers.ts => v03.ts} (56%) delete mode 100644 src/transport/http/v03/headers.ts delete mode 100644 src/transport/http/v03/index.ts rename src/transport/http/{v1/parsers.ts => v1.ts} (60%) delete mode 100644 src/transport/http/v1/headers.ts delete mode 100644 src/transport/http/v1/index.ts diff --git a/src/transport/http/binary_receiver.ts b/src/transport/http/binary_receiver.ts index 5be62edf..83cda5c8 100644 --- a/src/transport/http/binary_receiver.ts +++ b/src/transport/http/binary_receiver.ts @@ -2,8 +2,8 @@ import { CloudEvent, Version } from "../.."; import { CloudEventV1, validateV1 } from "../../event/v1"; import { CloudEventV03, validateV03 } from "../../event/v03"; import { Headers, validate } from "./headers"; -import { binaryParsers as v1Parsers } from "./v1/parsers"; -import { binaryParsers as v03Parsers } from "./v03/parsers"; +import { binaryParsers as v1Parsers } from "./v1"; +import { binaryParsers as v03Parsers } from "./v03"; import { parserByContentType, MappedParser } from "../../parsers"; import { isString, isBase64, ValidationError, isStringOrObjectOrThrow } from "../../event/validation"; import CONSTANTS from "../../constants"; diff --git a/src/transport/http/structured_receiver.ts b/src/transport/http/structured_receiver.ts index bf6a7ea1..afff110a 100644 --- a/src/transport/http/structured_receiver.ts +++ b/src/transport/http/structured_receiver.ts @@ -2,8 +2,8 @@ import { CloudEvent, Version } from "../.."; import { Headers, sanitize } from "./headers"; import { Parser, JSONParser, MappedParser } from "../../parsers"; import { parserByContentType } from "../../parsers"; -import { structuredParsers as v1Parsers } from "./v1/parsers"; -import { structuredParsers as v03Parsers } from "./v03/parsers"; +import { structuredParsers as v1Parsers } from "./v1"; +import { structuredParsers as v03Parsers } from "./v03"; import { isString, isBase64, ValidationError, isStringOrObjectOrThrow } from "../../event/validation"; import { CloudEventV1, validateV1 } from "../../event/v1"; import { CloudEventV03, validateV03 } from "../../event/v03"; diff --git a/src/transport/http/v03/parsers.ts b/src/transport/http/v03.ts similarity index 56% rename from src/transport/http/v03/parsers.ts rename to src/transport/http/v03.ts index 04c3a8c3..2390eadd 100644 --- a/src/transport/http/v03/parsers.ts +++ b/src/transport/http/v03.ts @@ -1,12 +1,27 @@ -import { MappedParser, DateParser, PassThroughParser } from "../../../parsers"; -import CONSTANTS from "../../../constants"; +import { MappedParser, DateParser, PassThroughParser } from "../../parsers"; +import CONSTANTS from "../../constants"; -const passThrough = new PassThroughParser(); -function parser(name: string, parser = passThrough): MappedParser { - return { name: name, parser: parser }; +function parser(header: string, parser = new PassThroughParser()): MappedParser { + return { name: header, parser }; } -const binaryParsers: Record = Object.freeze({ +/** + * A utility Map used to retrieve the header names for a CloudEvent + * using the CloudEvent getter function. + */ +export const headerMap: Readonly<{ [key: string]: MappedParser }> = Object.freeze({ + [CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE]: parser(CONSTANTS.HEADER_CONTENT_TYPE), + [CONSTANTS.CE_ATTRIBUTES.SUBJECT]: parser(CONSTANTS.CE_HEADERS.SUBJECT), + [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_HEADERS.TYPE), + [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_HEADERS.SPEC_VERSION), + [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_HEADERS.SOURCE), + [CONSTANTS.CE_ATTRIBUTES.ID]: parser(CONSTANTS.CE_HEADERS.ID), + [CONSTANTS.CE_ATTRIBUTES.TIME]: parser(CONSTANTS.CE_HEADERS.TIME), + [CONSTANTS.STRUCTURED_ATTRS_03.CONTENT_ENCODING]: parser(CONSTANTS.BINARY_HEADERS_03.CONTENT_ENCODING), + [CONSTANTS.STRUCTURED_ATTRS_03.SCHEMA_URL]: parser(CONSTANTS.BINARY_HEADERS_03.SCHEMA_URL), +}); + +export const binaryParsers: Record = Object.freeze({ [CONSTANTS.CE_HEADERS.TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.TYPE), [CONSTANTS.CE_HEADERS.SPEC_VERSION]: parser(CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION), [CONSTANTS.CE_HEADERS.SOURCE]: parser(CONSTANTS.CE_ATTRIBUTES.SOURCE), @@ -18,7 +33,7 @@ const binaryParsers: Record = Object.freeze({ [CONSTANTS.HEADER_CONTENT_TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE), }); -const structuredParsers: Record = Object.freeze({ +export const structuredParsers: Record = Object.freeze({ [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.TYPE), [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION), [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_ATTRIBUTES.SOURCE), @@ -30,5 +45,3 @@ const structuredParsers: Record = Object.freeze({ [CONSTANTS.CE_ATTRIBUTES.SUBJECT]: parser(CONSTANTS.CE_ATTRIBUTES.SUBJECT), [CONSTANTS.CE_ATTRIBUTES.DATA]: parser(CONSTANTS.CE_ATTRIBUTES.DATA), }); - -export { binaryParsers, structuredParsers }; diff --git a/src/transport/http/v03/headers.ts b/src/transport/http/v03/headers.ts deleted file mode 100644 index e2d79d64..00000000 --- a/src/transport/http/v03/headers.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { PassThroughParser, MappedParser } from "../../../parsers"; -import CONSTANTS from "../../../constants"; - -const passThrough = new PassThroughParser(); -function parser(header: string, parser = passThrough): MappedParser { - return { name: header, parser }; -} - -/** - * A utility Map used to retrieve the header names for a CloudEvent - * using the CloudEvent getter function. - */ -export const headerMap: Readonly<{ [key: string]: MappedParser }> = Object.freeze({ - [CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE]: parser(CONSTANTS.HEADER_CONTENT_TYPE), - [CONSTANTS.CE_ATTRIBUTES.SUBJECT]: parser(CONSTANTS.CE_HEADERS.SUBJECT), - [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_HEADERS.TYPE), - [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_HEADERS.SPEC_VERSION), - [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_HEADERS.SOURCE), - [CONSTANTS.CE_ATTRIBUTES.ID]: parser(CONSTANTS.CE_HEADERS.ID), - [CONSTANTS.CE_ATTRIBUTES.TIME]: parser(CONSTANTS.CE_HEADERS.TIME), - [CONSTANTS.STRUCTURED_ATTRS_03.CONTENT_ENCODING]: parser(CONSTANTS.BINARY_HEADERS_03.CONTENT_ENCODING), - [CONSTANTS.STRUCTURED_ATTRS_03.SCHEMA_URL]: parser(CONSTANTS.BINARY_HEADERS_03.SCHEMA_URL), -}); diff --git a/src/transport/http/v03/index.ts b/src/transport/http/v03/index.ts deleted file mode 100644 index c871fea5..00000000 --- a/src/transport/http/v03/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./headers"; diff --git a/src/transport/http/v1/parsers.ts b/src/transport/http/v1.ts similarity index 60% rename from src/transport/http/v1/parsers.ts rename to src/transport/http/v1.ts index 907df37f..4176c1ad 100644 --- a/src/transport/http/v1/parsers.ts +++ b/src/transport/http/v1.ts @@ -1,13 +1,26 @@ -import { PassThroughParser, DateParser, MappedParser } from "../../../parsers"; -import CONSTANTS from "../../../constants"; +import { PassThroughParser, DateParser, MappedParser } from "../../parsers"; +import CONSTANTS from "../../constants"; -const passThrough = new PassThroughParser(); - -function parser(name: string, parser = passThrough): MappedParser { +function parser(name: string, parser = new PassThroughParser()): MappedParser { return { name: name, parser: parser }; } -const binaryParsers: Record = Object.freeze({ +/** + * A utility Map used to retrieve the header names for a CloudEvent + * using the CloudEvent getter function. + */ +export const headerMap: Readonly<{ [key: string]: MappedParser }> = Object.freeze({ + [CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE]: parser(CONSTANTS.HEADER_CONTENT_TYPE), + [CONSTANTS.CE_ATTRIBUTES.SUBJECT]: parser(CONSTANTS.CE_HEADERS.SUBJECT), + [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_HEADERS.TYPE), + [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_HEADERS.SPEC_VERSION), + [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_HEADERS.SOURCE), + [CONSTANTS.CE_ATTRIBUTES.ID]: parser(CONSTANTS.CE_HEADERS.ID), + [CONSTANTS.CE_ATTRIBUTES.TIME]: parser(CONSTANTS.CE_HEADERS.TIME), + [CONSTANTS.STRUCTURED_ATTRS_1.DATA_SCHEMA]: parser(CONSTANTS.BINARY_HEADERS_1.DATA_SCHEMA), +}); + +export const binaryParsers: Record = Object.freeze({ [CONSTANTS.CE_HEADERS.TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.TYPE), [CONSTANTS.CE_HEADERS.SPEC_VERSION]: parser(CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION), [CONSTANTS.CE_HEADERS.SOURCE]: parser(CONSTANTS.CE_ATTRIBUTES.SOURCE), @@ -19,7 +32,7 @@ const binaryParsers: Record = Object.freeze({ [CONSTANTS.HEADER_CONTENT_TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE), }); -const structuredParsers: Record = Object.freeze({ +export const structuredParsers: Record = Object.freeze({ [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_ATTRIBUTES.TYPE), [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION), [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_ATTRIBUTES.SOURCE), @@ -31,5 +44,3 @@ const structuredParsers: Record = Object.freeze({ [CONSTANTS.CE_ATTRIBUTES.DATA]: parser(CONSTANTS.CE_ATTRIBUTES.DATA), [CONSTANTS.STRUCTURED_ATTRS_1.DATA_BASE64]: parser(CONSTANTS.STRUCTURED_ATTRS_1.DATA_BASE64), }); - -export { structuredParsers, binaryParsers }; diff --git a/src/transport/http/v1/headers.ts b/src/transport/http/v1/headers.ts deleted file mode 100644 index d527d279..00000000 --- a/src/transport/http/v1/headers.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { MappedParser, PassThroughParser } from "../../../parsers"; -import CONSTANTS from "../../../constants"; - -const passThrough = new PassThroughParser(); -function parser(header: string, parser = passThrough): MappedParser { - return { name: header, parser }; -} - -/** - * A utility Map used to retrieve the header names for a CloudEvent - * using the CloudEvent getter function. - */ -export const headerMap: Readonly<{ [key: string]: MappedParser }> = Object.freeze({ - [CONSTANTS.CE_ATTRIBUTES.CONTENT_TYPE]: parser(CONSTANTS.HEADER_CONTENT_TYPE), - [CONSTANTS.CE_ATTRIBUTES.SUBJECT]: parser(CONSTANTS.CE_HEADERS.SUBJECT), - [CONSTANTS.CE_ATTRIBUTES.TYPE]: parser(CONSTANTS.CE_HEADERS.TYPE), - [CONSTANTS.CE_ATTRIBUTES.SPEC_VERSION]: parser(CONSTANTS.CE_HEADERS.SPEC_VERSION), - [CONSTANTS.CE_ATTRIBUTES.SOURCE]: parser(CONSTANTS.CE_HEADERS.SOURCE), - [CONSTANTS.CE_ATTRIBUTES.ID]: parser(CONSTANTS.CE_HEADERS.ID), - [CONSTANTS.CE_ATTRIBUTES.TIME]: parser(CONSTANTS.CE_HEADERS.TIME), - [CONSTANTS.STRUCTURED_ATTRS_1.DATA_SCHEMA]: parser(CONSTANTS.BINARY_HEADERS_1.DATA_SCHEMA), -}); diff --git a/src/transport/http/v1/index.ts b/src/transport/http/v1/index.ts deleted file mode 100644 index c871fea5..00000000 --- a/src/transport/http/v1/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./headers";