paypal / paypal-js

Loading wrapper and TypeScript types for the PayPal JS SDK
Apache License 2.0
238 stars 83 forks source link

Create TypeScript typings #39

Closed mstuart closed 4 years ago

mstuart commented 4 years ago

This project isn't written in TypeScript, but many TypeScript users would like to use published typings. For this issue, create TypeScript typings that cover the exported functions, and contribute it back to DefinitelyTyped!

This issue is great for someone who wants to learn more about TypeScript!

issue-label-bot[bot] commented 4 years ago

Issue-Label Bot is automatically applying the label feature_request to this issue, with a confidence of 0.96. Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback!

Links: app homepage, dashboard and code for this bot.

ReazerDev commented 4 years ago

Hi, I'm interested in this. Never made typings for ts, sounds interesting!

claeusdev commented 4 years ago

Ah @ReazerDev beat me to it. If you need an extra hand lemme know.

mstuart commented 4 years ago

No worries @claeusdev! If you're wanting to hack around w/ TypeScript, there are some other similar ones under these repos too! https://github.com/paypal/hacktoberfest/blob/main/README.md#repos

ReazerDev commented 4 years ago

Wait, am I too eligible to get the socks?^^ I'm asking since I don't commit anything to this repo, but to DefinitelyTyped

mstuart commented 4 years ago

@ReazerDev No problem! When you commit it to DefinitelyTyped, can you drop the link here?

ReazerDev commented 4 years ago

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48454

ReazerDev commented 4 years ago

Has been merged :)

mstuart commented 4 years ago

@ReazerDev wow, that was really fast 😸 Thanks! We have you down for some fancy socks. Have fun hacking :)

ReazerDev commented 4 years ago

Nice :) Was a lot of fun, thank you. You too have fun^^

ReazerDev commented 4 years ago

Am I getting an email regarding shipping information?

mstuart commented 4 years ago

I was thinking the same thing. I'm not sure how to get your shipping info. We probably should've included a google form or thought that through.

Can you add your email to your GitHub profile real quick? Then you can take it down afterwards. Open to other ideas too. Or maybe I can DM you on Twitter or another way? Hmm... 🤔

ReazerDev commented 4 years ago

My Twitter is: Reazer_Dev

gregjopa commented 4 years ago

@ReazerDev thanks so much for adding types for paypal-js to DefinitelyTyped! 👏

I was reviewing the PR and noticed a minor issue. The public api for paypal-js v1 is a single function loadScript() and a string attribute named version. The functions in utils.js are not publicly exported and should be removed from the typescript definitions. I could see how this is confusing since the paypal-js project lacks an index.js that clearly defines what is publicly exported.

Would you be up for sending a follow up PR to DefinitelyTyped to remove the types for the private functions? The types files should look like this:

// Type definitions for @paypal/paypal-js 1.0
// Project: https://github.com/paypal/paypal-js
// Definitions by: ReazerDev <https://github.com/ReazerDev>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

export interface ScriptOptions {
  // options here
}

export function loadScript(options: ScriptOptions): Promise<any>;
export const version: string;
ReazerDev commented 4 years ago

@ReazerDev thanks so much for adding types for paypal-js to DefinitelyTyped! 👏

I was reviewing the PR and noticed a minor issue. The public api for paypal-js v1 is a single function loadScript() and a string attribute named version. The functions in utils.js are not publicly exported and should be removed from the typescript definitions. I could see how this is confusing since the paypal-js project lacks an index.js that clearly defines what is publicly exported.

Would you be up for sending a follow up PR to DefinitelyTyped to remove the types for the private functions? The types files should look like this:

// Type definitions for @paypal/paypal-js 1.0
// Project: https://github.com/paypal/paypal-js
// Definitions by: ReazerDev <https://github.com/ReazerDev>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

export interface ScriptOptions {
  // options here
}

export function loadScript(options: ScriptOptions): Promise<any>;
export const version: string;

Oh yes, of course! Will do once I'm home!

gregjopa commented 4 years ago

Awesome! Thanks @ReazerDev!

Also, thanks for documenting all the scriptOptions. I think you got almost all of them. Here's a list I have on my end of all the different available options. It's in React PropTypes, but it should help with identifying any missing ones.

        "buyer-country": PropTypes.string,
        "client-id": PropTypes.string.isRequired,
        commit: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
        components: PropTypes.string,
        currency: PropTypes.string,
        "data-csp-nonce": PropTypes.string,
        "data-order-id": PropTypes.string,
        "data-page-type": PropTypes.string,
        "data-partner-attribution-id": PropTypes.string,
        debug: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
        "disable-funding": PropTypes.string,
        "integration-date": PropTypes.string,
        intent: PropTypes.string,
        locale: PropTypes.string,
        "merchant-id": PropTypes.string,
        vault: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
ReazerDev commented 4 years ago

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48513

gregjopa commented 4 years ago

Great improvements @ReazerDev! Thanks for taking care of this so quickly. I approved the PR and it looks like you can merge it whenever you're ready: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/48513#issuecomment-703802557

ReazerDev commented 4 years ago

Yup merged it

gregjopa commented 4 years ago

Thanks again @ReazerDev. I verified the types locally by installing @types/paypal__paypal-js and it works great 😄

ReazerDev commented 4 years ago

Great! Was fun working on it!