From 540cea2e2bdae0ee5bcd110952cdb5cedd76aa37 Mon Sep 17 00:00:00 2001 From: andy cunningham Date: Mon, 9 Mar 2020 12:36:57 -0700 Subject: [PATCH] add cloudevents-sdk/v03 types (#38067) * add cloudevents-sdk/v03 types ignore no-single-declare-module because cloudevents-sdk/v03 is the documented way to import the cloudevent builder add cloudevents-sdk header module warning ignore * move CloudEvent interface into module, use named export for event() * use default export with event() as a prop to fix 'no default export' TS warning * allowSyntheticImports for cloudevents-sdk --- .../cloudevents-sdk/cloudevents-sdk-tests.ts | 14 ++++++++ types/cloudevents-sdk/index.d.ts | 36 +++++++++++++++++++ types/cloudevents-sdk/tsconfig.json | 22 ++++++++++++ types/cloudevents-sdk/tslint.json | 3 ++ 4 files changed, 75 insertions(+) create mode 100644 types/cloudevents-sdk/cloudevents-sdk-tests.ts create mode 100644 types/cloudevents-sdk/index.d.ts create mode 100644 types/cloudevents-sdk/tsconfig.json create mode 100644 types/cloudevents-sdk/tslint.json diff --git a/types/cloudevents-sdk/cloudevents-sdk-tests.ts b/types/cloudevents-sdk/cloudevents-sdk-tests.ts new file mode 100644 index 0000000000..65feb0c55f --- /dev/null +++ b/types/cloudevents-sdk/cloudevents-sdk-tests.ts @@ -0,0 +1,14 @@ +import Cloudevent from 'cloudevents-sdk/v03'; + +function testEventBuilder() { + const event = Cloudevent.event() + .dataContentType('application/json') + .id('43') + .time(new Date()) + .type('pull_request') + .source('github') + .data({ action: 'created' }) + .format(); + + const { id, datacontenttype, time, type, source, data } = event; +} diff --git a/types/cloudevents-sdk/index.d.ts b/types/cloudevents-sdk/index.d.ts new file mode 100644 index 0000000000..50ae6e82dd --- /dev/null +++ b/types/cloudevents-sdk/index.d.ts @@ -0,0 +1,36 @@ +// Type definitions for cloudevents-sdk 0.3 +// Project: https://github.com/cloudevents/sdk-javascript (Does not have to be to GitHub, but prefer linking to a source code repository rather than to a project website.) +// Definitions by: Andy Cunningham +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +// tslint:disable-next-line no-declare-current-package no-single-declare-module cloudevents-sdk/v03 is the documented way to import the cloudevent builder +declare module 'cloudevents-sdk/v03' { + // v03 CloudEvent payload + // https://github.com/cloudevents/sdk-javascript/blob/master/lib/specs/spec_0_3.js#L11 + interface CloudEvent { + id: string; + datacontenttype: 'application/json'; + time: string; + type: string; + source: string; + data: {}; + } + + // Cloudevent fluent builder + // https://github.com/cloudevents/sdk-javascript/blob/master/lib/cloudevent.js + interface CloudEventBuilder { + type: (type: string) => CloudEventBuilder; + dataContentType: (contentType: string) => CloudEventBuilder; + id: (id: string) => CloudEventBuilder; + time: (timestamp: Date) => CloudEventBuilder; + source: (source: string) => CloudEventBuilder; + data: (data: any) => CloudEventBuilder; + + format: () => CloudEvent; + toString: () => string; + } + + // Cloudevent.event() static constructor + // https://github.com/cloudevents/sdk-javascript#an-easy-way-to-create-events + function event(): CloudEventBuilder; +} diff --git a/types/cloudevents-sdk/tsconfig.json b/types/cloudevents-sdk/tsconfig.json new file mode 100644 index 0000000000..24df405fc9 --- /dev/null +++ b/types/cloudevents-sdk/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": ["../"], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "files": [ + "index.d.ts", + "cloudevents-sdk-tests.ts" + ] +} diff --git a/types/cloudevents-sdk/tslint.json b/types/cloudevents-sdk/tslint.json new file mode 100644 index 0000000000..6746359dda --- /dev/null +++ b/types/cloudevents-sdk/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "dtslint/dt.json" +}