Commit Graph

421 Commits

Author SHA1 Message Date
Remco Haszing
723052d5bb
feat(typescript): allow using puppeteer without dom lib (#6998)
The dom lib inserts all dom related types into the project, which is often
undesirable when working on a NodeJS project.

This change injects global stubs for the dom types required by puppeteer, so
puppeteer can work without users having to add dom types to their project.

Closes #6989
2021-09-11 20:59:51 +00:00
Jack Franklin
6fde41c6b6
fix(docs): deploy includes website documentation (#7469)
We now generate the docs into `website/docs` such that it's used by
Docusaurus when we build the site, we need to update the deploy script
to generate those docs first.
2021-08-05 10:01:25 +00:00
Maksim Sadym
939ac7f94b
chore: bump version to v10.2.0-post (#7468) 2021-08-04 17:30:25 +02:00
Maksim Sadym
c510df8d8e
chore(release): mark v10.2.0 (#7467) 2021-08-04 14:45:31 +02:00
Jan Scheffler
e10faad4f2
feat(chromium): roll to Chromium 93.0.4577.0 (r901912) (#7387) 2021-08-04 14:22:15 +02:00
TASNEEM KOUSHAR
c5a0d500e4
chore: add documentation to new website 2021-08-04 09:00:48 +00:00
Jack Franklin
39c1f08fd6
chore(docs): basic docusaurus setup (#7438) 2021-07-26 11:52:25 +00:00
TASNEEM KOUSHAR
ea3df80ed1
fix: add script to remove html comments from docs markdown (#7394) 2021-07-06 10:55:42 +01:00
Jan Scheffler
558b35567c
chore: bump version to v10.1.0-post (#7386) 2021-06-29 07:44:38 +00:00
Jan Scheffler
6b13a17ed9
chore(release): mark v10.1.0 (#7331) 2021-06-29 09:26:24 +02:00
Jack Franklin
c07e6d4fa9
chore(docs): ensure old docs are removed when generating (#7308)
I lost time today due to some old docs files lingering for code that is now gone. To avoid that happening, let's remove the directories before generating.

As part of this work I also changed the API Extractor to not output to `temp/X.api.json` and instead `docs-api-json/X.api.json` to make it clearer what that folder is for.
2021-06-10 08:30:40 +00:00
Jan Scheffler
f2ab11c640
chore: bump version to v10.0.0-post (#7302) 2021-05-31 16:07:51 +02:00
Jan Scheffler
9df7b71e3b
chore(release): mark v10.0.0 (#7299) 2021-05-31 14:34:04 +02:00
Rodrigo Bermúdez Schettino
1854192abb
chore: update ws dependency to a non-vulnerable version (#7296)
Issue: https://github.com/advisories/GHSA-6fc8-4gx4-v693
2021-05-31 11:24:48 +02:00
Jan Scheffler
f863f4bfe0
feat(chromium): roll to Chromium 92.0.4512.0 (r884014) (#7288) 2021-05-26 16:44:29 +00:00
Jack Franklin
4796382f01
chore: enforce pinned dependencies (#7238)
* chore: enforce pinned dependencies

Because we don't check our `package-lock.json` in, we can end up with
different versions installed locally vs CI, or even two devs having
different versions. Let's pin and enforce we pin every version to
avoid this.
2021-05-14 12:02:36 +01:00
Jack Franklin
3204f2780f
chore: fix eslint warnings around type defs (#7230)
This PR updates some code to remove constant ESLint warnings. It also
upgrades those warnings to errors - so that they have to be resolved
as part of the PR, rather than landing as a warning and causing noise.

Fixes #7229.
2021-05-12 17:43:05 +01:00
Jack Franklin
523aa0aafa
chore: upgrade and pin prettier dependencies (#7232)
We're seeing odd failures with Prettier on some CI branches; my hunch is that they are installing different versions of the package and therefore getting formatting conflicts. This PR updates them all and pins them to specific versions - something we should probably consider generally, or remove our `package-lock.json` from the gitignore.
2021-05-12 16:48:30 +02:00
Mathias Bynens
d9ace6c664
chore: disable markdownlint for api.md (#7228)
api.md is autogenerated anyhow, and this avoids the recent CI failures.

Issue: #7227
2021-05-12 14:47:27 +02:00
Jan Scheffler
476e9259fe
chore: bump version to v9.1.1-post (#7206) 2021-05-05 09:57:19 +00:00
Jan Scheffler
d615dd3d2c
chore(release): mark v9.1.1 (#7205) 2021-05-05 10:38:53 +02:00
Jan Scheffler
8816645c71
chore: bump version to v9.1.0-post (#7202) 2021-05-03 12:40:47 +00:00
Jan Scheffler
1d473bc79f
chore(release): mark v9.1.0 (#7201) 2021-05-03 14:08:44 +02:00
Jan Scheffler
ad6b736039
fix: change rm -rf to rimraf (#7168)
Currently, `npm clean-lib` fails on windows with `cmd` because it does not now about `rm`.
This change uses the already installed `rimraf` to do the job instead.
2021-04-27 10:32:15 +02:00
Maksim Sadym
0fa0a34802
chore: bump version to v9.0.0-post (#7112) 2021-04-21 11:43:49 +00:00
Maksim Sadym
5872e7178a
chore(release): mark v9.0.0 (#7111) 2021-04-21 11:18:09 +00:00
Maksim Sadym
715e7a8d62
feat(chromium): roll to Chromium 91.0.4469.0 (r869685) (#7110)
* Roll to Chromium 91.0.4469.0 (r869685).
* Update CONTRIBUTING.md.
2021-04-21 10:43:08 +00:00
David Barton
c62b02f177
chore: automate prettier in docs (#7014)
Issue: #7012
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2021-03-23 10:02:34 +01:00
Henrik Skupin
669f04a7a6
chore: enable unit tests for Firefox on Windows (#6895)
Co-authored-by: Jan Scheffler <janscheffler@chromium.org>
2021-03-05 09:00:56 +00:00
Alex Rudenko
0c26301bee
chore: bump version to v8.0.0-post (#6929) 2021-02-26 08:51:52 +00:00
Alex Rudenko
0b5969dea9
chore(release): mark v8.0.0 (#6928) 2021-02-26 08:32:27 +00:00
Alex Rudenko
0c688bd75e
feat(chromium): roll Chromium to r856583 (#6927)
* feat(chromium): roll Chromium to r856583

This corresponds to Chromium 90.0.4427.0

This roll includes:
- Add sourceScheme, sourcePort, and sameParty to DevTools backend (https://crbug.com/1170548, https://crbug.com/1142606)
2021-02-26 09:12:43 +01:00
Jack Franklin
8adf5b467d
chore: upgrade TypeScript to 4.1.5 (#6889)
We were blocked on doing this because API Extractor didn't support it,
but now it does, so we can bump TS and the API tooling in one go. None
of the breaking changes in TS4 cause us any issues.
2021-02-16 10:43:32 +00:00
Jack Franklin
29c059427e
chore: bump to 7.1.0-post (#6880) 2021-02-12 11:19:06 +00:00
Jack Franklin
a681aac7e3
chore(release): mark v7.1.0 (#6879) 2021-02-12 10:51:43 +00:00
Jack Franklin
0889b7eb66
chore: upgrade @web/test-runner and increase timeout (#6870)
We've seen the odd timeout on the bots; increasing this in the hope that
it helps stop the flakes.
2021-02-11 12:38:22 +01:00
Jack Franklin
6a0eb7841f
fix: wider compat TS types and CI checks to ensure correct type defs (#6855)
* fix: wider compat TS types and CI checks to ensure correct type defs

This PR improves our TS types further to make sure they are usable in a
TS environment where ES Modules are the target output. Our use of
`export =` is problematic this environment as TypeScript does not allow
`export =` to be used and it errors.

The fix for the type issues to avoid `export =` is to instead define the
functions that you gain access to when you import Puppeteer as top level
functions in our `types.d.ts` file. We can do this by declaring them
explicitly in `src/node.ts`. These are then rolled into `lib/types.d.ts`
at build time. The downside to this is that we have to keep those
declarations in sync with the Puppeteer API; should we add a new method
to the `Puppeteer` class, we must add it to the `nodes.ts` declarations.
However, this could easily be automated by a small script that walks the
AST and generates these. I will do that in a follow-up PR, but I
consider this low risk given how rarely the very top level API of
Puppeteer changes. The nice thing about this approach is we no longer
need our script that hacks on changes to `lib/types.d.ts`.

To avoid yet more releases to fix issues in one particular TS
environment, this PR also includes a suite of example setups that we
test on each CI run. Each sample folder contains `good.ts`, which should
have no TS errors, and `bad.ts`, which should have some errors. The test
first packs Puppeteer into a tar, and then installs it from that tar
into each project. This should replicate how the published package
behaves when it is installed. We then check that we get no errors on
`good.ts`, and the expected errors on `bad.ts`.

We have a variety of test projects that cover both TS and JS source
code, and CJS and ESM imports and outputs.
2021-02-10 12:04:36 +00:00
Jack Franklin
e16741dee2
chore: mark version 7.0.4-post (#6851) 2021-02-09 14:10:28 +00:00
Jack Franklin
db2b4898e1
chore(release): mark v7.0.4 (#6850) 2021-02-09 13:24:44 +01:00
Jack Franklin
fd857474cc
chore: fix doclint violations (#6849) 2021-02-09 11:52:35 +00:00
Jack Franklin
f718b14b64
fix: make publish bot run full build, not just tsc (#6848)
`npm run tsc` is not enough to do a full build now we also include the
`types.d.ts` file, so we need to run `build.`
2021-02-09 11:34:21 +00:00
Jack Franklin
de904db51d
chore: bump version to 7.0.3-post (#6846) 2021-02-09 09:56:17 +01:00
Jack Franklin
27eaf607ce
chore(release): mark v7.0.3 (#6845) 2021-02-09 09:49:44 +01:00
Jack Franklin
a1d4d7f854
chore: bump version to 7.0.2-post (#6843)
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2021-02-09 09:44:52 +01:00
Jack Franklin
e34f317b37
fix: include lib/types.d.ts in files list (#6844)
Else it's missed when npm publish happens. Didn't pick this up in my testing because a previous PR that changed this hadn't landed at the time of testing so the bug was missed.
2021-02-09 09:44:23 +01:00
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
6fec36d8ba
chore: don’t ship tsbuildinfo files in npm package (#6809)
This PR updates our `files` list to be more specific; rather than include everything from `lib`, we include just `.js`, `.d.ts`, and their equivalent sourcemaps. This prevents noisy meta-files like `.tsbuildinfo` sneaking into the package, which are no use to anyone.
2021-02-08 16:21:41 +00:00
Arjen Korevaar
3b13012d1f
chore: update proxy-from-env (#6660) 2021-02-05 09:20:40 +01:00
Jack Franklin
c936b18651
chore: bump version to 7.0.1-post (#6814) 2021-02-04 10:32:11 +00:00