From 2a4a6d66af7020298689e7be6e2fa0398ef27b53 Mon Sep 17 00:00:00 2001 From: Eunchong Yu Date: Thu, 18 Oct 2018 00:41:51 +0900 Subject: [PATCH 01/81] [koa-websocket] Fix to match with its implementation (#29611) * Fix koa-websocket to match with its implementation The major change is about `Middleware`. Koa-websocket doesn't inject `this` argument to its middlewares. Instead, additional properties are appended on the Koa context. https://github.com/kudos/koa-websocket/blob/master/index.js * Extract Context.websocket It's necessary to use well with other middlewares, like koa-router or else. * Add Context.app to be able to access ctx.app.ws * Add a test about Context.app * Remove the target requirement --- types/koa-websocket/index.d.ts | 27 ++++++++++++++-------- types/koa-websocket/koa-websocket-tests.ts | 14 ++++++++--- types/koa-websocket/tsconfig.json | 2 +- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/types/koa-websocket/index.d.ts b/types/koa-websocket/index.d.ts index 91b50b5ace..c23c9036b8 100644 --- a/types/koa-websocket/index.d.ts +++ b/types/koa-websocket/index.d.ts @@ -3,32 +3,41 @@ // Definitions by: Maël Lavault // Jaco Greeff // Martin Ždila +// Eunchong Yu // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 import Koa = require('koa'); +import compose = require('koa-compose'); import * as ws from 'ws'; import * as http from 'http'; import * as https from 'https'; -declare namespace KoaWebsocket { - type ConnectionHandler = (socket: ws) => void; - - type Middleware = (this: MiddlewareContext, context: Koa.Context, next: () => Promise) => any; - - interface MiddlewareContext extends Koa.Context { +declare module "koa" { + interface Context { websocket: ws; path: string; } +} + +declare namespace KoaWebsocket { + type Middleware = compose.Middleware; + + interface MiddlewareContext extends Koa.Context { + // Limitation: Declaration merging cannot overwrap existing properties. + // That's why this property is here, not in the merged declaration above. + app: App; + } class Server { - app: Koa; - middleware: Koa.Middleware[]; + app: App; + middleware: Middleware[]; + server?: ws.Server; constructor(app: Koa); listen(options: ws.ServerOptions): ws.Server; - onConnection(handler: ConnectionHandler): void; + onConnection(socket: ws, request: http.IncomingMessage): void; use(middleware: Middleware): this; } diff --git a/types/koa-websocket/koa-websocket-tests.ts b/types/koa-websocket/koa-websocket-tests.ts index bd99c3d17e..502b366652 100644 --- a/types/koa-websocket/koa-websocket-tests.ts +++ b/types/koa-websocket/koa-websocket-tests.ts @@ -3,11 +3,19 @@ import websocket = require('koa-websocket'); const app = websocket(new Koa()); -app.ws.use(async function(context, next) { - this.websocket.on('message', (message) => { +app.ws.use(async (ctx, next) => { + ctx.websocket.on('message', (message) => { console.log(message); + const server = ctx.app.ws.server; + if (server) { + server.clients.forEach(client => { + if (client !== ctx.websocket) { + client.send(message); + } + }); + } }); - this.websocket.send('Hello world'); + ctx.websocket.send('Hello world'); await next(); }); diff --git a/types/koa-websocket/tsconfig.json b/types/koa-websocket/tsconfig.json index 87c9225d08..ffe283f2ad 100644 --- a/types/koa-websocket/tsconfig.json +++ b/types/koa-websocket/tsconfig.json @@ -20,4 +20,4 @@ "index.d.ts", "koa-websocket-tests.ts" ] -} \ No newline at end of file +} From fb1a9771d48ef02d8cf7c1fe38930c5acefcc0ed Mon Sep 17 00:00:00 2001 From: Dimitry Date: Wed, 17 Oct 2018 18:44:11 +0300 Subject: [PATCH 02/81] react-native-video: add tolerance to seek method (#29640) * react-native-video: add tolerance to seek method * react-native-video: add allowsExternalPlayback prop --- types/react-native-video/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/types/react-native-video/index.d.ts b/types/react-native-video/index.d.ts index ad1be7a0b4..190d731394 100644 --- a/types/react-native-video/index.d.ts +++ b/types/react-native-video/index.d.ts @@ -68,6 +68,7 @@ export interface VideoProperties extends ViewProps { currentTime?: number; progressUpdateInterval?: number; useTextureView?: boolean; + allowsExternalPlayback?: boolean; onLoadStart?(): void; onLoad?(data: OnLoadData): void; onBuffer?(): void; @@ -99,7 +100,7 @@ export interface VideoProperties extends ViewProps { } export default class Video extends React.Component { - seek(time: number): void; + seek(time: number, tolerance?: number): void; presentFullscreenPlayer(): void; dismissFullscreenPlayer(): void; } From 5ae6d3dd4f2763485f48683bf07dfabfbb5c2d9e Mon Sep 17 00:00:00 2001 From: Dan Manastireanu <498419+danmana@users.noreply.github.com> Date: Wed, 17 Oct 2018 18:46:32 +0300 Subject: [PATCH 03/81] Update amplitude-js to 4.4.0 (#29649) --- types/amplitude-js/amplitude-js-tests.ts | 143 +++++++++++++---------- types/amplitude-js/index.d.ts | 109 +++++++++++++++-- 2 files changed, 181 insertions(+), 71 deletions(-) diff --git a/types/amplitude-js/amplitude-js-tests.ts b/types/amplitude-js/amplitude-js-tests.ts index 4f3c2ea307..c5ffbe9898 100644 --- a/types/amplitude-js/amplitude-js-tests.ts +++ b/types/amplitude-js/amplitude-js-tests.ts @@ -1,85 +1,110 @@ // Tests for Amplitude SDK TypeScript definitions module Amplitude.Tests { + function all() { - amplitude.init('YOUR_API_KEY_HERE', null, { - // optional configuration options + var client: amplitude.AmplitudeClient = new amplitude.AmplitudeClient(); + var identify: amplitude.Identify = new amplitude.Identify(); + var revenue: amplitude.Revenue = new amplitude.Revenue(); + + client = amplitude.getInstance(); + client = amplitude.getInstance('some name'); + + amplitude.__VERSION__ === '1.2.3'; + amplitude.options.logLevel = 'WARN'; + + amplitude.init('API_KEY', 'USER_ID', { saveEvents: true, includeUtm: true, includeReferrer: true, batchEvents: true, eventUploadThreshold: 50 - }); - amplitude.init('YOUR_API_KEY_HERE', 'USER_ID_HERE', null, () => {}); + }, function () { }); + amplitude.init('API_KEY', 'USER_ID', { includeReferrer: true, includeUtm: true }); + amplitude.init('API_KEY', 'USER_ID'); + amplitude.init('API_KEY'); - amplitude.logEvent('EVENT_IDENTIFIER_HERE'); - amplitude.setUserId('USER_ID_HERE'); - amplitude.init('YOUR_API_KEY_HERE', 'USER_ID_HERE'); - amplitude.setUserId(null); // not string 'null' - amplitude.setVersionName('VERSION_NAME_HERE'); - - amplitude.regenerateDeviceId(); - amplitude.setDeviceId('CUSTOM_DEVICE_ID'); - - amplitude.logEvent('EVENT_IDENTIFIER_HERE', { - 'color': 'blue', - 'age': 20, - 'key': 'value' - }); + amplitude.logEvent('Clicked Homepage Button', { 'finished_flow': false, 'clicks': 15 }); + amplitude.logEvent('EVENT_IDENTIFIER_HERE', { 'color': 'blue', 'age': 20, 'key': 'value' }); amplitude.logEvent("EVENT_IDENTIFIER_HERE", null, (httpCode, response) => { }); + amplitude.logEventWithGroups('initialize_game', { 'key': 'value' }, { 'sport': 'soccer' }); + + amplitude.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0'); + amplitude.setDomain('.amplitude.com'); + amplitude.setGroup('orgId', '15'); + amplitude.setGroup('orgId', ['15', '16']); + amplitude.setUserId('joe@gmail.com'); + amplitude.setUserProperties({ 'gender': 'female', 'sign_up_complete': true }) + amplitude.setVersionName('1.12.3'); + amplitude.isNewSession(); + amplitude.getSessionId() === 123; - let identify = new amplitude.Identify().set('gender', 'female').set('age', 20); amplitude.identify(identify); + amplitude.logRevenue(3.99, 1, 'product_1234'); + amplitude.logRevenueV2(revenue); - identify = new amplitude.Identify().setOnce('sign_up_date', '08/24/2015'); - amplitude.identify(identify); - identify = new amplitude.Identify().setOnce('sign_up_date', '09/14/2015'); - amplitude.identify(identify); + client.init('API_KEY', 'USER_ID', { + saveEvents: true, + includeUtm: true, + includeReferrer: true, + batchEvents: true, + eventUploadThreshold: 50 + }, function () { }); + client.init('API_KEY', 'USER_ID', { includeReferrer: true, includeUtm: true }); + client.init('API_KEY', 'USER_ID'); + client.init('API_KEY'); - identify = new amplitude.Identify().unset('gender').unset('age'); - amplitude.identify(identify); + client.logEvent('Clicked Homepage Button', { 'finished_flow': false, 'clicks': 15 }); + client.logEvent('EVENT_IDENTIFIER_HERE', { 'color': 'blue', 'age': 20, 'key': 'value' }); + client.logEvent("EVENT_IDENTIFIER_HERE", null, (httpCode, response) => { }); + client.logEventWithGroups('initialize_game', { 'key': 'value' }, { 'sport': 'soccer' }); + client.logEventWithTimestamp('EVENT_IDENTIFIER_HERE', { 'key': 'value' }, 1505430378000, (httpCode, response) => { }); + + client.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0'); + client.setDomain('.amplitude.com'); + client.setUserId('joe@gmail.com'); + client.setOptOut(true); + client.setGroup('type', 'name'); + client.setGroup('type', ['name', 'name2']); + client.setUserProperties({ 'gender': 'female', 'sign_up_complete': true }); + client.setGlobalUserProperties({ 'gender': 'female', 'sign_up_complete': true }); + client.setVersionName('1.12.3'); + client.setSessionId(1505430378000); + + client.options.logLevel = 'WARN'; + client.getSessionId() === 123; + client.isNewSession() === true; + client.regenerateDeviceId(); + client.clearUserProperties(); + + client.identify(identify); + client.logRevenue(3.99, 1, 'product_1234'); + client.logRevenueV2(revenue); + + + identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31'); identify = new amplitude.Identify().add('karma', 1).add('friends', 1); - amplitude.identify(identify); - - identify = new amplitude.Identify().append('ab-tests', 'new-user-test').append('some_list', [1, 2, 3, 4, 'values']); - amplitude.identify(identify); - - identify = new amplitude.Identify().prepend('ab-tests', 'new-user-test').prepend('some_list', [1, 2, 3, 4, 'values']); - amplitude.identify(identify); - - identify = new amplitude.Identify() - .set('karma', 10) - .add('karma', 1) - .unset('karma'); - amplitude.identify(identify); - + identify = new amplitude.Identify().set('karma', 10).add('karma', 1).unset('karma'); + identify = new amplitude.Identify().append('ab-tests', 'new-user-tests'); + identify.append('some_list', [1, 2, 3, 4, 'values']); + identify = new amplitude.Identify().prepend('ab-tests', 'new-user-tests'); + identify.prepend('some_list', [1, 2, 3, 4, 'values']); + identify = new amplitude.Identify().set('user_type', 'beta'); + identify.set('name', { 'first': 'John', 'last': 'Doe' }); + identify = new amplitude.Identify().setOnce('sign_up_date', '2016-04-01'); + identify = new amplitude.Identify().unset('user_type').unset('age'); identify = new amplitude.Identify() .set('colors', ['rose', 'gold']) .append('ab-tests', 'campaign_a') .append('existing_list', [4, 5]); - amplitude.identify(identify); - amplitude.setUserProperties({ - gender: 'female', - age: 20 - }); - amplitude.clearUserProperties(); - - amplitude.setOptOut(true); - amplitude.setOptOut(false); - - amplitude.setGroup('orgId', '15'); - amplitude.setGroup('sport', ['soccer', 'tennis']); - - // TODO: Implement those. - /* - var revenue = new amplitude.Revenue().setProductId('com.company.productId').setPrice(3.99).setQuantity(3); - amplitude.logRevenueV2(revenue); - - amplitude.logEventWithGroups('initialize_game', { 'key': 'value' }, { 'sport': 'soccer' }); - */ + revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99); + revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setEventProperties({ 'city': 'San Francisco' }); + revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setQuantity(5); + revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setRevenueType('purchase'); } + } diff --git a/types/amplitude-js/index.d.ts b/types/amplitude-js/index.d.ts index 613f5ad5d8..1cdb843589 100644 --- a/types/amplitude-js/index.d.ts +++ b/types/amplitude-js/index.d.ts @@ -1,61 +1,146 @@ -// Type definitions for Amplitude SDK 2.12.1 +// Type definitions for Amplitude SDK 4.4.0 // Project: https://github.com/amplitude/Amplitude-Javascript // Definitions by: Arvydas Sidorenko -// Definitions: https://github.com/Asido/DefinitelyTyped +// Dan Manastireanu +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare module amplitude { + + type Callback = (responseCode: number, responseBody: string, details?: { reason: string; }) => void; + type LogReturn = number | void; + interface Config { + apiEndpoint?: string; batchEvents?: boolean; cookieExpiration?: number; cookieName?: string; + userId?: string; deviceId?: string; + deviceIdFromUrlParam?: boolean; domain?: string; eventUploadPeriodMillis?: number; eventUploadThreshold?: number; + forceHttps?: boolean; + includeGclid?: boolean; includeReferrer?: boolean; includeUtm?: boolean; language?: string; + logLevel?: 'DISABLE' | 'ERROR' | 'WARN' | 'INFO'; optOut?: boolean; platform?: string; saveEvents?: boolean; savedMaxCount?: number; + saveParamsReferrerOncePerSession?: boolean; sessionTimeout?: number; + trackingOptions?: { + city?: boolean; + country?: boolean; + device_model?: boolean; + dma?: boolean; + ip_address?: boolean; + language?: boolean; + os_name?: boolean; + os_version?: boolean; + platform?: boolean; + region?: boolean; + version_name?: boolean; + }, + unsentKey?: string; + unsentIdentifyKey?: string; uploadBatchSize?: number; } export class Identify { set(key: string, value: any): Identify; setOnce(key: string, value: any): Identify; - add(key: string, value: number): Identify; + add(key: string, value: number | string): Identify; append(key: string, value: any): Identify; prepend(key: string, value: any): Identify; unset(key: string): Identify; } - export function init(apiKey: string): void; - export function init(apiKey: string, userId: string): void; - export function init(apiKey: string, userId: string, options: Config): void; - export function init(apiKey: string, userId: string, options: Config, callback: () => void): void; + export class Revenue { + + setProductId(productId: string): Revenue; + setQuantity(quantity: number): Revenue; + setPrice(price: number): Revenue; + setRevenueType(revenueType: string): Revenue; + setEventProperties(eventProperties: any): Revenue; + } + + export class AmplitudeClient { + + constructor(instanceName?: string); + + options: Config; + + init(apiKey: string, userId?: string, config?: Config, callback?: (client: AmplitudeClient) => void): void; + + setVersionName(versionName: string): void; + + isNewSession(): boolean; + setSessionId(sessionId: number): void; + getSessionId(): number; + + setDomain(domain: string): void; + setUserId(userId: string): void; + + setDeviceId(id: string): void; + regenerateDeviceId(): void; + + identify(identify_obj: Identify, opt_callback?: Callback): void; + + setUserProperties(properties: any): void; + setGlobalUserProperties(properties: any): void; + clearUserProperties(): void; + + setOptOut(enable: boolean): void; + + setGroup(groupType: string, groupName: string | string[]): void; + + logEvent(event: string, data?: any, callback?: Callback): LogReturn; + logEventWithGroups(event: string, data?: any, groups?: any, callback?: Callback): LogReturn; + logRevenueV2(revenue_obj: Revenue): LogReturn; + logRevenue(pric: number, quantity: number, product: string): LogReturn; + logEventWithTimestamp(event: string, data?: any, timestamp?: number, callback?: Callback): LogReturn; + } + + // Proxy methods that get executed on the default AmplitudeClient instance (not all client methods are proxied) + + export function init(apiKey: string, userId?: string, options?: Config, callback?: (client: AmplitudeClient) => void): void; export function setVersionName(version: string): void; + + export function isNewSession(): boolean; + export function getSessionId(): number; + + export function setDomain(domain: string): void; + export function setUserId(userId: string): void; export function setDeviceId(id: string): void; export function regenerateDeviceId(): void; - export function identify(identify: Identify): void; + export function identify(identify: Identify, callback?: Callback): void; - export function setUserProperties(properties: Object): void; + export function setUserProperties(properties: any): void; + export function setGlobalUserProperties(properties: any): void; export function clearUserProperties(): void; export function setOptOut(optOut: boolean): void; export function setGroup(groupType: string, groupName: string | string[]): void; - export function logEvent(event: string): void; - export function logEvent(event: string, data: Object): void; - export function logEvent(event: string, data: Object, callback: (httpCode: number, response: any) => void): void; + export function logEvent(event: string, data?: any, callback?: Callback): LogReturn; + export function logEventWithGroups(event: string, data?: any, groups?: any, callback?: Callback): LogReturn; + export function logRevenueV2(revenue_obj: Revenue): LogReturn; + export function logRevenue(pric: number, quantity: number, product: string): LogReturn; + export function logEventWithTimestamp(event: string, data?: any, timestamp?: number, callback?: Callback): LogReturn; + + + export function getInstance(instanceName?: string): AmplitudeClient; + export const __VERSION__: string; export var options: Config; } From 8a342681894fb74a6d25b4aae06a270c2dee85e6 Mon Sep 17 00:00:00 2001 From: Lenny Date: Wed, 17 Oct 2018 08:50:32 -0700 Subject: [PATCH 04/81] [@types/stripe] deleteExternalAccount should return IDeleteConfirmation (#29673) --- types/stripe/index.d.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/types/stripe/index.d.ts b/types/stripe/index.d.ts index 9b0fe09059..732a58fc7d 100644 --- a/types/stripe/index.d.ts +++ b/types/stripe/index.d.ts @@ -5493,8 +5493,8 @@ declare namespace Stripe { * currency is not the Stripe account's default currency. Otherwise, you must set another external account to be the default for the currency * before deleting it. */ - deleteExternalAccount(accId: string, id: string, options: HeaderOptions, response?: IResponseFn): Promise; - deleteExternalAccount(accId: string, id: string, response?: IResponseFn): Promise; + deleteExternalAccount(accId: string, id: string, options: HeaderOptions, response?: IResponseFn): Promise; + deleteExternalAccount(accId: string, id: string, response?: IResponseFn): Promise; /** * You can see a list of the bank accounts belonging to a managed account. Note that the 10 most recent external accounts are always @@ -7365,7 +7365,11 @@ declare namespace Stripe { (err: IStripeError, value: R): void; } - interface IDeleteConfirmation { id: string; deleted: boolean; } + interface IDeleteConfirmation { + id: string; + object: string; + deleted: boolean; + } /** * A filter on the list based on this object field. The value can From 83b0f8edf05f6fd251dd0b307cd638811b735efe Mon Sep 17 00:00:00 2001 From: Ste Prescott Date: Wed, 17 Oct 2018 16:53:06 +0100 Subject: [PATCH 05/81] Expose properties of HttpProxyAgent (#29745) * Expose properties of HttpProxyAgent * Use 4 spaces over tabs * Remove options & timeout properties --- types/http-proxy-agent/http-proxy-agent-tests.ts | 3 +++ types/http-proxy-agent/index.d.ts | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/types/http-proxy-agent/http-proxy-agent-tests.ts b/types/http-proxy-agent/http-proxy-agent-tests.ts index f730cd1bde..2158a9129f 100644 --- a/types/http-proxy-agent/http-proxy-agent-tests.ts +++ b/types/http-proxy-agent/http-proxy-agent-tests.ts @@ -5,6 +5,9 @@ new Agent('url'); new Agent({}); new Agent({ host: 'url' }); +new Agent({}).proxy; +new Agent({}).secureProxy; + // $ExpectError new Agent(); diff --git a/types/http-proxy-agent/index.d.ts b/types/http-proxy-agent/index.d.ts index 015508b5d1..b518fddf0c 100644 --- a/types/http-proxy-agent/index.d.ts +++ b/types/http-proxy-agent/index.d.ts @@ -1,6 +1,7 @@ // Type definitions for http-proxy-agent 2.0 // Project: https://github.com/TooTallNate/node-http-proxy-agent // Definitions by: mrmlnc +// steprescott // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// @@ -10,6 +11,9 @@ import { Url } from 'url'; declare class HttpProxyAgent extends Agent { constructor(options: string | Url); + + proxy: Url; + secureProxy: boolean; } export = HttpProxyAgent; From 6a357014b9882e22d00602a06378c9d9e66c615c Mon Sep 17 00:00:00 2001 From: Tom Raviv Date: Wed, 17 Oct 2018 18:58:26 +0300 Subject: [PATCH 06/81] [murmurhash] fix optional seed argument (#29788) * fix murmurhash optional argument * improved readability of jsdocs --- types/murmurhash/index.d.ts | 22 ++++++++++++++-------- types/murmurhash/murmurhash-tests.ts | 5 +++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/types/murmurhash/index.d.ts b/types/murmurhash/index.d.ts index 31c663fd33..eac6b500b7 100644 --- a/types/murmurhash/index.d.ts +++ b/types/murmurhash/index.d.ts @@ -9,21 +9,27 @@ export = murmurhash; * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) * * @param key - ASCII only - * @param seed - Positive integer only - * @return - 32-bit positive integer hash + * @param seed - (optional) positive integer + * @returns 32-bit positive integer hash */ -declare function murmurhash(key: string, seed: number): number; +declare function murmurhash(key: string, seed?: number): number; declare namespace murmurhash { - // Circular reference from murmurhash - function v3(key: string, seed: number): number; + /** + * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + * + * @param key - ASCII only + * @param seed - (optional) positive integer + * @returns 32-bit positive integer hash + */ + function v3(key: string, seed?: number): number; /** * JS Implementation of MurmurHash2 * * @param str - ASCII only - * @param seed - Positive integer only - * @return - 32-bit positive integer hash + * @param seed - (optional) positive integer + * @returns 32-bit positive integer hash */ - function v2(str: string, seed: number): number; + function v2(str: string, seed?: number): number; } diff --git a/types/murmurhash/murmurhash-tests.ts b/types/murmurhash/murmurhash-tests.ts index ebbbf09cab..fe7fc9c501 100644 --- a/types/murmurhash/murmurhash-tests.ts +++ b/types/murmurhash/murmurhash-tests.ts @@ -3,6 +3,11 @@ import murmurhash = require('murmurhash'); const stringValue = "test"; let numberValue = 123; +numberValue = murmurhash(stringValue); numberValue = murmurhash(stringValue, numberValue); + +numberValue = murmurhash.v2(stringValue); numberValue = murmurhash.v2(stringValue, numberValue); + +numberValue = murmurhash.v3(stringValue); numberValue = murmurhash.v3(stringValue, numberValue); From 68765b81a894be967d05858bbaca69051c560c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Gonz=C3=A1lez=20Giraldo?= Date: Wed, 17 Oct 2018 11:01:19 -0500 Subject: [PATCH 07/81] Add critters webpack plugin (#29796) * Added critters-webpack-plugin definition * Modified to allow export default * Minor fixes * Added TypeScript version * Added missing strictFunctionTypes * Added version * Removed patch from version and removed unnecesary asterisks in jsdocs * Added new line at end of @deault statements on jsDocs * Empty the first line of every jsDoc --- .../critters-webpack-plugin-tests.ts | 10 +++ types/critters-webpack-plugin/index.d.ts | 65 +++++++++++++++++++ types/critters-webpack-plugin/tsconfig.json | 16 +++++ types/critters-webpack-plugin/tslint.json | 1 + 4 files changed, 92 insertions(+) create mode 100644 types/critters-webpack-plugin/critters-webpack-plugin-tests.ts create mode 100644 types/critters-webpack-plugin/index.d.ts create mode 100644 types/critters-webpack-plugin/tsconfig.json create mode 100644 types/critters-webpack-plugin/tslint.json diff --git a/types/critters-webpack-plugin/critters-webpack-plugin-tests.ts b/types/critters-webpack-plugin/critters-webpack-plugin-tests.ts new file mode 100644 index 0000000000..cb975b1cc0 --- /dev/null +++ b/types/critters-webpack-plugin/critters-webpack-plugin-tests.ts @@ -0,0 +1,10 @@ +import Critters from 'critters-webpack-plugin'; + +new Critters({ + compress: true, + external: true, + inlineFonts: false, + preloadFonts: true, + keyframes: 'critical', + noscriptFallback: true, +}); diff --git a/types/critters-webpack-plugin/index.d.ts b/types/critters-webpack-plugin/index.d.ts new file mode 100644 index 0000000000..df758a42e7 --- /dev/null +++ b/types/critters-webpack-plugin/index.d.ts @@ -0,0 +1,65 @@ +// Type definitions for critters-webpack-plugin 1.3 +// Project: https://github.com/GoogleChromeLabs/critters +// Definitions by: Juan José González Giraldo +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.3 + +import { Plugin } from 'webpack'; + +export default Critters; +declare class Critters extends Plugin { + constructor(options?: Critters.CrittersOptions); +} + +declare namespace Critters { + interface CrittersOptions { + /** + * Inline styles from external stylesheets. + * @default true + */ + external?: boolean; + /** + * The mechanism to use for lazy-loading stylesheets. [JS] indicates that a strategy requires JavaScript (falls back to