Skip to content

Commit

Permalink
Merge pull request #305 from marp-team/patch-for-apple-m1
Browse files Browse the repository at this point in the history
Patch os.arch() to fix Puppeteer issue on Apple M1
  • Loading branch information
yhatt committed Nov 28, 2020
2 parents 9bb91e6 + 68c2b1d commit a6ae24e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## [Unreleased]

### Fixed

- Compatibility with Apple Silicon ([#301](https://github.com/marp-team/marp-cli/issues/301), [#305](https://github.com/marp-team/marp-cli/pull/305))

## v0.22.0 - 2020-10-18

### Added
Expand Down
3 changes: 2 additions & 1 deletion src/converter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { ThemeSet } from './theme'
import {
generatePuppeteerDataDirPath,
generatePuppeteerLaunchArgs,
launchPuppeteer,
} from './utils/puppeteer'
import { isChromeInWSLHost, resolveWSLPathToHost } from './utils/wsl'
import { notifier } from './watcher'
Expand Down Expand Up @@ -461,7 +462,7 @@ export class Converter {
if (!Converter.browser) {
const baseArgs = generatePuppeteerLaunchArgs()

Converter.browser = await puppeteer.launch({
Converter.browser = await launchPuppeteer({
...baseArgs,
userDataDir: await generatePuppeteerDataDirPath('marp-cli-conversion', {
wslHost: isChromeInWSLHost(baseArgs.executablePath),
Expand Down
3 changes: 2 additions & 1 deletion src/preview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { File, FileType } from './file'
import {
generatePuppeteerDataDirPath,
generatePuppeteerLaunchArgs,
launchPuppeteer,
} from './utils/puppeteer'
import TypedEventEmitter from './utils/typed-event-emitter'
import { isChromeInWSLHost } from './utils/wsl'
Expand Down Expand Up @@ -135,7 +136,7 @@ export class Preview extends TypedEventEmitter<Preview.Events> {
private async launch() {
const baseArgs = generatePuppeteerLaunchArgs()

this.puppeteerInternal = await puppeteer.launch({
this.puppeteerInternal = await launchPuppeteer({
...baseArgs,
args: [
...baseArgs.args,
Expand Down
20 changes: 20 additions & 0 deletions src/utils/puppeteer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os from 'os'
import path from 'path'
import { Launcher } from 'chrome-launcher'
import puppeteer from 'puppeteer-core'
import { warn } from '../cli'
import { CLIErrorCode, error } from '../error'
import { findEdgeInstallation } from './edge-finder'
Expand Down Expand Up @@ -73,3 +74,22 @@ export const generatePuppeteerLaunchArgs = () => {
: undefined,
}
}

export const launchPuppeteer = (
...args: Parameters<typeof puppeteer['launch']>
) => {
const { arch } = os

try {
os.arch = () => {
// Patch for Apple M1 (arm64)
// @see https://github.com/puppeteer/puppeteer/issues/6634
if (process.platform === 'darwin' && arch() === 'arm64') return 'x64'
return arch()
}

return puppeteer.launch(...args)
} finally {
os.arch = arch
}
}

0 comments on commit a6ae24e

Please sign in to comment.