Commit Graph

215 Commits

Author SHA1 Message Date
Jack Franklin
ff50c86332
chore(release): mark v7.0.2 (#6842) 2021-02-09 08:17:15 +00:00
Jack Franklin
f1b46ab5fa
fix: much better TypeScript definitions (#6837)
This PR aims to vastly improve our TS types and how we ship them.

Our previous attempt at shipping TypeScript was unfortunately flawed for
many reasons when compared to the @types/puppeteer package:

* It only worked if you needed the default export. If you wanted to
  import a type that Puppeteer uses, you'd have to do `import type X
  from 'puppeteer/lib/...'`. This is not something we want to encourage
  because that means our internal file structure becomes almost public
  API.
* It gave absolutely no help to CommonJS users in JS files because it
  would warn people they needed to do `const pptr =
  require('puppeteer').default, which is not correct.
* I found a bug in the `evaluate` types which mean't you couldn't
  override the types to provide more info, and TS would insist the types
  were all `unknown`.

The goal of this PR is to support:

1. In a `ts` file, `import puppeteer from 'puppeteer'`
1. In a `ts` file, `import type {ElementHandle} from 'puppeteer'`
1. In a `ts` file, referencing a type as `puppeteer.ElementHandle`
1. In a `ts` file, you can get good type inference when running
   `foo.evaluate(x => x.clientHeight)`.
1. In a `js` file using CJS, you can do `const puppeteer =
   require('puppeteer')` and get good type help from VSCode.

To test this I created a new empty repository with two test files in,
one `.ts` file with this in:
https://gist.github.com/jackfranklin/22ba2f390f97c7312cd70025a2096fc8,
and a `js` file with this in:
https://gist.github.com/jackfranklin/06bed136fdb22419cb7a8a9a4d4ef32f.

These files included enough code to check that the types were behaving
as I expected.

The fix for our types was to make use of API Extractor, which we already
use for our docs, to "rollup" all the disparate type files that TS
generates into one large `types.d.ts` which contains all the various
types that we define, such as:

```ts
export declare class ElementHandle {...}

export type EvaluateFn ...
```

If we then update our `package.json` `types` field to point to that file
in `lib/types.d.ts`, this then allows a developer to write:

```
import type {ElementHandle} from 'puppeteer'
```

And get the correct type definitions. However, what the `types.d.ts`
file doesn't do out of the box is declare the default export, so
importing Puppeteer's default export to call a method such as `launch`
on it will get you an error.

That's where the `script/add-default-export-to-types.ts` comes in. It
appends the following to the auto-generated `types.d.ts` file:

```ts
declare const puppeteer: PuppeteerNode;
export = puppeteer;
```

This tells TypeScript what the default export is, and by using the
`export =` syntax, we make sure TS understands both in a TS ESM
environment and in a JS CJS environment.

Now the `build` step, which is run by GitHub Actions when we release,
will generate the `.d.ts` file and then extend it with the default
export code.

To ensure that I was generating a valid package, I created a new
repository locally with the two code samples linked in Gists above. I
then ran:

```
npm init -y
npm install --save-dev typescript
npx tsc --init
```

Which gives me a base to test from. In Puppeteer, I ran `npm pack`,
which packs the module into a tar that's almost identical to what would
be published, so I can be confident that the .d.ts files in there are
what would be published.

I then installed it:

```
npm install --save-dev ../../puppeteer/puppeteer-7.0.1-post.tgz
```

And then reloaded VSCode in my dummy project. By deliberately making
typos and hovering over the code, I could confirm that all the goals
listed above were met, and this seems like a vast improvement on our
types.
2021-02-09 08:00:42 +00:00
Jack Franklin
eb0d604bf3
chore(release): mark v7.0.1 (#6812) 2021-02-04 10:07:37 +00:00
Jan Scheffler
edd8bcc619
chore(release): mark v7.0.0 (#6804) 2021-02-03 16:33:32 +01:00
Jan Scheffler
ef4767080a
chore(release): mark v6.0.0 (#6800) 2021-02-02 12:00:09 +01:00
Mathias Bynens
f7f122dc41
chore: drop Travis CI config (#6799)
Now that we’ve migrated to GitHub Actions and everything seems to work correctly, we can remove Travis CI without losing confidence.

Issue: #6726
2021-02-02 11:03:31 +01:00
Mathias Bynens
0a76cd0bd6 chore: drop README badge 2021-02-02 08:42:37 +01:00
Mathias Bynens
18143b3573
chore(release): mark v5.5.0 (#6604) 2020-11-16 14:38:50 +01:00
Jack Franklin
562c9c2723
chore: mark version 5.4.1 (#6552) 2020-10-27 15:05:43 +00:00
Johan Bay
729cdfe98a
chore: mark version v5.4.0 (#6542) 2020-10-23 16:28:38 +02:00
Maksim Sadym
c7d32cb92f
chore: mark version v5.3.1 (#6439) 2020-09-22 12:49:28 +02:00
Maksim Sadym
030fcaa075
chore: mark version v5.3.0 (#6412) 2020-09-11 10:43:09 +02:00
Johan Bay
4ee4649de6
chore: mark v5.2.1 (#6254) 2020-07-21 14:53:02 +02:00
Jack Franklin
028f144256
chore: mark v5.2.0 (#6238) 2020-07-17 13:44:29 +02:00
Changhao Han
8fa18aef99
chore: mark version v5.1.0 (#6206)
Co-authored-by: Changhao Han <changhaohan@chromium.org>
2020-07-13 10:25:14 +02:00
Jack Franklin
6d06adea10
chore: mark v5.0.0 (#6143) 2020-07-02 14:32:43 +01:00
Jack Franklin
1f5e333f00
chore: Don't store revisions in package.json (#6109)
* chore: Don't store revisions in `package.json`

It's quite messy to have to require the `package.json` file in multiple
places purely to find out what revision of a given browser we want to
use. We can also achieve better type safety by placing it in an actual
source file.

This commit makes that change and also tidies up our reliance on
`package.json` within the source code generally; we now only use it to
find the location of the Puppeteer root such that we know where to
install downloaded browsers to.

To avoid using `package.json` to parse the name of the module, we also
now explicitly have an entry point for the Puppeteer module and the
Puppeter Core module. This will make it easier in the future to ship
less code as part of core (e.g. core never needs to download a browser,
so why ship that code?). Core can also then not have any revisions based
info contained in it.

The test install script has also been updated to ensure that
puppeteer-core can be installed correctly too.

Finally, the `install` script has been moved to TypeScript for nicer
typechecking and safety. The functionality of it has not changed.
2020-06-29 16:13:24 +01:00
Jack Franklin
46fc6ca41a
feat(types): improve typing of .evaluate() (#6096)
* feat(types): improve typing of `.evaluate()`

This is the start of the work to take the types from the
`@types/puppeteer` repository and port them into our repo so we can ship
our built-in types out the box.

This change types the `evaluate` function properly. It takes a generic
type which is the type of the function you're passing, and the arguments
and the return that you get back from the `evaluate` call are typed
correctly.
2020-06-25 13:38:01 +01:00
Mathias Bynens
f1ec6a3df0
chore: update references to branch names (#6022) 2020-06-15 17:34:16 +02:00
Jack Franklin
2ffe710177
chore: mark version 4.0.0 (#6018) 2020-06-15 14:48:37 +01:00
Jack Franklin
e84e579c3c
chore: mark version v3.3.0 (#5959) 2020-06-02 09:53:53 +01:00
Jack Franklin
88b5265be1
chore: mark version v3.2.0 (#5937) 2020-05-29 10:22:13 +01:00
Alex Rudenko
8ba36752e7
chore: mark version v3.1.0 (#5883)
* chore: mark version v3.1.0

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2020-05-18 13:47:03 +02:00
Jack Franklin
c214d20d54
chore: mark version v3.0.4 (#5823) 2020-05-07 11:52:59 +02:00
Jack Franklin
dd5bdf1616
chore: mark version v3.0.3 (#5813) 2020-05-06 15:57:04 +01:00
Anderson Aguiar
209e25c0e1
docs(readme): syntax-highlight nested snippets in debugging section (#5799) 2020-05-05 07:45:21 +02:00
Jack Franklin
646f42e98c
chore: mark version v3.0.2 (#5752) 2020-04-28 10:23:19 +01:00
Jack Franklin
6029fdd618
chore: mark version v3.0.1 (#5709) 2020-04-22 11:10:04 +01:00
Changhao Han
6760b9225e
chore: mark version v3.0.0 (#5642)
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2020-04-16 10:43:12 +02:00
Mathias Bynens
c5df4902cb
docs(readme): update cross-browser FAQ (#5634) 2020-04-15 16:46:01 +02:00
Mathias Bynens
bbdaf92116
docs(README): remove unused badges 2020-04-08 10:16:45 +02:00
Maja Frydrychowicz
33f1967072
(feat) Add option to fetch Firefox Nightly (#5467)
* (feat) Add option to fetch Firefox Nightly

Add Firefox support to BrowserFetcher and the install script.
By default, the latest Firefox Nightly is downloaded
directly from archive.mozilla.org (dmg, tar.bz2 and zip)

This also required changes that impact `puppeteer.launch()`
and `puppeteer.executablePath()`

Fixes #5151

* Update docs/api.md

Co-Authored-By: Mathias Bynens <mathias@qiwi.be>

* Clean up revision promise

* Improve error handling in revision check

* Remove matchAll

* Use explicit octal mode

* Update .gitignore

Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2020-03-10 21:59:03 +01:00
Changhao Han
807fbbdc20
chore: drop Node.js v8 support (#5365)
* chore: update relevant Node.js versions from 8 to 10

* chore: remove node6 and node8 folders from puppeteer-firefox ci

* fix: loosen definition for proc.stdio

* fix: update typescript version used in npm run test-types
2020-03-10 21:55:32 +01:00
Changhao Han
46386eb866
chore: mark version v2.1.1 (#5388) 2020-02-05 14:36:04 +01:00
Tim van der Lippe
1a1ef83e8d
Add FAQ entry on cross-browser support (#5360)
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2020-01-29 15:52:20 +01:00
Mathias Bynens
a30cf05e3a chore: mark version v2.1.0 (#5347)
This changes the Chromium revision to r722234 (Chrome 80.0.3987.0),
since that's the most recent version in the Chromium 80 range for
which a download exists for all supported platforms.
2020-01-27 15:48:40 +01:00
Lawrence Chou
c7af7ded66 docs(readme): update link for ndb (#5272) 2020-01-08 12:26:22 +01:00
Mathias Bynens
eddb23b521
chore: update URLs (#5185) 2019-11-26 13:12:25 +01:00
Mathias Bynens
aa246973b9
chore: mark version v2.0.0 (#5078) 2019-10-24 14:46:50 +02:00
Mathias Bynens
11ff374ca3
chore: drop Node.js v6 support (#5045)
Node.js v6 was end-of-life'd in April, 2019, with AWS Lambda prohibiting updaets to the Node.js v6 runtime since June 30, 2019.

This makes it quite safe for us to remove the Node 6 support from the repository.
2019-10-16 17:00:20 +02:00
Mathias Bynens
83c327a0f6
docs(readme): correct Slack link
Fixes #4969.
2019-10-10 14:23:21 +01:00
Mathias Bynens
a5f03ce1c8 chore: mark version v1.20.0 (#4928) 2019-09-12 15:21:21 -07:00
Maximilian Tagher
e17d38c61b docs(readme): explain significance of Chromium revision (#4811) 2019-09-11 10:33:01 +02:00
James George
135bb424ba docs: update README.md (#4857)
add issue resolution badge
2019-09-04 15:07:47 -07:00
Andrey Lushnikov
af0d229044
chore: mark version v1.19.0 (#4744) 2019-07-22 22:02:45 -07:00
Andrey Lushnikov
a2cf81dd78
chore: mark version v1.18.1 (#4628) 2019-06-26 10:40:38 -07:00
Andrey Lushnikov
c96454d42c
chore: mark version v1.18.0 (#4606) 2019-06-20 18:13:45 -04:00
MaxHorstmann
6c2007f1e3 docs(README.md): fix spelling of Stack Overflow (#4590) 2019-06-14 22:12:24 -07:00
Andrey Lushnikov
1840ef01cc
chore: mark version v1.17.0 (#4467) 2019-05-24 03:13:14 +03:00
calvinballing
f7bac6ea1d docs(readme): Turn troubleshooting question into a question (#4426) 2019-05-18 12:49:23 +03:00
Andrey Lushnikov
9f2635c4ac
chore: mark version v1.16.0 (#4421) 2019-05-14 01:15:35 +03:00
melissachang
5f66d82638 docs(readme): Document debugging with node --inspect-brk (#4345)
To me, this is the most important type of debugging. It's what I think of when I think of debugging my test. I was happy to find the instructions [buried here](https://github.com/GoogleChrome/puppeteer/issues/398#issuecomment-323551586).
2019-05-09 18:00:32 -07:00
Andrey Lushnikov
b9f4a95175
chore: mark version v1.15.0 (#4346) 2019-04-25 19:25:16 -07:00
Andrey Lushnikov
3def8a2558
docs(readme): fix debugging tips (#4304)
Since we migrated to flatten protocol, the `protocol:session` DEBUG
namespace no longer exists.

Fix #4299.
2019-04-18 10:03:30 -07:00
Andrey Lushnikov
3fa91cace3
chore: mark version v1.14.0 (#4222) 2019-03-28 22:33:38 -07:00
Andrey Lushnikov
77a969419e
chore: mark version v1.13.0 (#4114) 2019-03-04 18:39:45 -08:00
Andrey Lushnikov
b0afb17b68
chore: mark version v1.12.2 (#3914) 2019-02-05 11:38:04 -08:00
Andrey Lushnikov
a1abd6c1fc
chore: mark version v1.12.1 (#3885)
References #3878.
2019-02-01 12:30:21 -08:00
Andrey Lushnikov
7f05a084f1
chore: mark version v1.12.0 (#3875) 2019-01-31 19:33:54 -08:00
Andrey Lushnikov
2e36b55a89
docs(readme): migrate travis.org shield to travis.com (#3767) 2019-01-14 15:35:25 -08:00
Joel Einbinder
c44564aa94 feat(docs): mention puppeteer@chrome tagged releases (#3528) 2019-01-10 21:42:24 -08:00
Andrey Lushnikov
00b15994a4
chore: mark version v1.11.0 (#3610) 2018-11-29 22:11:44 -08:00
Nat Zimmermann
04b6ca85d0 Fix dead link (#3497)
Closes #3493
2018-11-05 10:58:21 -08:00
Andrey Lushnikov
e9d89a2e21
chore: mark version v1.10.0 (#3482) 2018-11-01 20:09:04 -07:00
Sony AK
0bb462c8f5 docs(readme): clarify SPA and SSR (#3363) 2018-10-09 14:20:49 -07:00
Andrey Lushnikov
f6c05e6efd
chore: mark version v1.9.0 (#3350) 2018-10-04 14:37:40 -07:00
Andrey Lushnikov
4abf7d1fba
docs(bundling): add docs about bundling for web (#3348) 2018-10-04 14:23:03 -07:00
Andrey Lushnikov
f0beabd22a
chore: drop DEBUG for public API calls (#3246)
This proved to be useless: we've never used it since we
released the initial version of puppeteer more than a year ago.
2018-09-14 18:23:30 +01:00
Elias Ojala
56b3bd809e docs(readme.md): Added yarn guide also to puppeteer-core (#3227) 2018-09-11 12:19:13 +01:00
Yaniv Efraim
6581ee974c docs: add ndb as a debugging tip (#3195) 2018-09-08 11:54:09 +01:00
Andrey Lushnikov
aeb6a9991e
chore: mark version v1.8.0 (#3211) 2018-09-06 21:49:44 +01:00
Andrey Lushnikov
7db4f0f798
chore: preserve links to master version of API from README.md (#3197)
One of our checks makes sure all links from README.md to API.md
point to the last-released version of the API.

This sometimes doesn't work: when we refer to a section
in api.md that is just added, we should be able to reference
the "master" version of the api.md

This patch:
- teaches the doclint check to keep links to tip-of-tree version
  of api.md in README.md intact.
- starts refering to tip-of-tree version of api.md in `puppeter-core` section
2018-09-05 20:33:04 +01:00
Andrey Lushnikov
2de5a42d1f
docs(api.md): expand on puppeteer-core vs puppeteer (#3189) 2018-09-04 17:32:57 +01:00
Andrey Lushnikov
bfed64fbf6
docs(readme.md): change Megabits to Megabytes. 2018-08-29 17:44:47 +01:00
Andrey Lushnikov
b8e0d626f3
docs(readme): refer to awesome-puppeteer (#3062) 2018-08-10 01:34:45 -07:00
Andrey Lushnikov
3ae85e4649
docs: mention puppeteer-core (#3061) 2018-08-09 19:31:14 -07:00
Andrey Lushnikov
66caee4c60
chore: mark version v1.7.0 (#3059) 2018-08-09 18:53:24 -07:00
Andrey Lushnikov
1be7545b70
chore: enhance markdown preprocessor (#3050)
Use preprocessor to make sure all the links in out README.md point
to the last-released version of documentation.

Fixes #3038.
2018-08-08 18:20:20 -07:00
Andrey Lushnikov
e36a7ae677
chore: bump version to v1.6.2-post (#3009) 2018-08-01 13:52:34 -07:00
Andrey Lushnikov
d305c7d8c1
chore: bump version after minor release (#2985) 2018-07-30 18:05:10 -07:00
Pavel Pomerantsev
26cd16c724 docs(api.md): expand on testing Chrome Extensions (#2893)
Fixes #2823
2018-07-18 19:33:51 -07:00
Andrey Lushnikov
3762de7b91
chore: mark version v1.6.0 (#2882) 2018-07-12 17:26:57 -07:00
Benjamin Atkin
4f8d00e64e docs(readme): Update README.md (#2863) 2018-07-11 17:07:27 -07:00
Nat Zimmermann
88362f710f docs(readme.md): Fix typo (#2858) 2018-07-09 21:56:31 +03:00
Andrey Lushnikov
9313c83ad2
docs(readme): update FAQ (#2826) 2018-07-05 09:13:26 +03:00
Andrey Lushnikov
fb7c4e0984
docs(readme): minor nits (#2827) 2018-06-29 21:35:52 -07:00
Joel Einbinder
194d580026
chore: mark version v1.5.0 (#2698) 2018-06-07 12:19:25 -07:00
Corey Cole
3e82a54fd1 docs: update slack invite link in README.md (#2690) 2018-06-06 20:12:44 -05:00
Andrey Lushnikov
1c4a8f0bbb
docs(README): remove duplicate line 2018-05-16 14:39:02 -07:00
Andrey Lushnikov
808bf8e558
chore: mark version v1.4.0 (#2517) 2018-05-08 21:46:32 -07:00
Yaniv Efraim
afee0104be docs(README): add a debugging section (#2467) 2018-04-30 21:01:35 +03:00
Andrey Lushnikov
0820d48f80
chore: link to the latest-released API from the README.md (#2449)
This patch adds a preprocessor command to link to the latest-released
API from the README.md.

Fixes #1923.
2018-04-25 18:18:08 -07:00
Andrey Lushnikov
62fa3bc81e
docs(README): add FAQ entry on where to ask questions (#2392) 2018-04-17 10:57:21 -07:00
Shayne Hartford
f51a315911 docs(README): Removed --save flag for npm install (#2302)
NPM 5+ --save is default to true.
2018-04-03 10:26:21 -07:00
Fedor Korotkov
554bd59588 chore(CI): add experimental Cirrus CI (#2181)
This patch adds experimental support for Cirrus CI builds.
Cirrus CI has both Windows and Linux, uses google cloud and runs builds
in Docker containers.

This seems to be a promising combination for our needs.
2018-03-13 08:06:40 -07:00
Kyle Sloan
44d8000de1 docs(README): clarify how to launch scripts (#2133) 2018-03-07 08:50:06 +03:00
Eric Bidelman
b07e705dc9 docs(README): mention testing prelease (#2088) 2018-02-23 11:17:14 -08:00
JoelEinbinder
ee7ebd6e17 docs(README): drop scraping bullet (#2080) 2018-02-22 17:49:17 -08:00
Drew Diamantoukos
b275e66594 chore: Spelling and Markdown Consistency (#1998)
- Adding missing language tags to markdown code blocks.
- Fixed various spelling mistakes my IDE complained to me about.
2018-02-08 22:59:46 -05:00
Olivier Tille
18a1fb9385 docs(README): Correcting Chrome dependency size (#1946)
This patch corrects chromium binary size in README.md.
2018-02-07 18:01:40 -05:00