Compare commits

...

44 Commits

Author SHA1 Message Date
Felix Rieseberg
6b84c60051 Update links 2023-03-15 11:09:27 -07:00
Felix Rieseberg
5cdaad84cc Pin Ubunut version 2023-03-14 13:59:49 -07:00
Felix Rieseberg
fb930035c7 v1.2.0 2023-03-14 13:51:16 -07:00
Felix Rieseberg
b3991ef1d0 More build changes 2023-03-14 13:48:53 -07:00
Felix Rieseberg
7dda450bf6 v1.2.3 2023-03-13 17:20:24 -07:00
Felix Rieseberg
d68097b59b GitHub Actions: Limit arch 2023-03-13 17:20:19 -07:00
Felix Rieseberg
34eccc706c v1.2.2 2023-03-13 17:14:42 -07:00
Felix Rieseberg
cc94f198e2 No Linux ia32 2023-03-13 17:14:29 -07:00
Felix Rieseberg
f5ef5da750 v1.2.1 2023-03-13 17:01:45 -07:00
Felix Rieseberg
1482f6d443 Upgrade Node in GitHub Actions 2023-03-13 16:41:10 -07:00
Felix Rieseberg
1533ba7ec0 Upgrade Node in GitHub Actions 2023-03-13 16:33:43 -07:00
Felix Rieseberg
8a8aa0e7eb v1.2.0 2023-03-13 16:06:14 -07:00
Felix Rieseberg
05136c28c1 Update Electron 2023-03-13 16:06:00 -07:00
Felix Rieseberg
e5b24cc04a
Merge pull request #118 from kipdec/scaling
Added basic window resizing
2023-03-13 15:38:05 -07:00
Felix Rieseberg
d58444bc18
Merge pull request #121 from hmsjy2017/patch-1
Correct the wrong links
2022-09-05 12:34:13 -07:00
Felix Rieseberg
dc0b8fe19f
Merge pull request #92 from ghost/patch-1
fix: Update label for 64-bit Linux downloads
2022-09-05 12:33:45 -07:00
Felix Rieseberg
895ce4c743
Merge pull request #141 from Arecsu/patch-1
fixed windows links in readme
2022-09-05 12:32:53 -07:00
Alejandro Romano
35b769949c
fixed windows links in readme 2022-07-02 23:03:06 -03:00
Tony
4acf8bb312
Correct the wrong links
I found that several quoted links were wrong, which caused the downloaded files to not meet expectations.
2021-08-24 01:38:29 +08:00
Kip DeCastro
8821a4749f Cleaned up some unnecessary spaces 2021-07-27 23:34:52 -04:00
Kip DeCastro
4d57fc494c Added basic window resizing to the application 2021-07-27 23:32:18 -04:00
Felix Rieseberg
ede11165a9
Merge pull request #90 from ponyville/patch-1
Fix swapped links for x64 and M1 versions for macOS
2021-04-28 10:12:54 -07:00
Felix Rieseberg
bdb1033958
Merge pull request #104 from erichelgeson/master
Support .hda extension used with RaSCSI or BlueSCSI.
2021-04-28 10:12:44 -07:00
Felix Rieseberg
78411c9fa4
Merge pull request #109 from egasimus/patch-1
Fix x86_64 label; show how to get CPU type on Linux
2021-04-28 10:12:29 -07:00
Felix Rieseberg
47aba5bb36
Merge pull request #110 from staltz/patch-1
Fix 64-bit typo on the readme
2021-04-28 10:12:15 -07:00
André Staltz
da495a9b39
Fix 64-bit typo on the readme 2021-04-28 16:32:22 +03:00
Adam Avramov
c30866e58e
Fix x86_64 label; show how to get CPU type on Linux 2021-04-28 15:14:02 +03:00
Eric Helgeson
6c1ffff0e0 Support .hda extension used with RaSCSI or BlueSCSI. 2021-03-29 10:55:09 -05:00
Felix Rieseberg
e3c6d96785 chore: Update Readme 2021-01-31 09:24:14 -08:00
Paulo Ribeiro
60a3e787f5
fix: Update label for 64-bit Linux downloads 2021-01-08 12:58:39 +00:00
Michael Schwarz
57ad789c61
Fix swapped links for x64 and M1 versions for macOS 2021-01-04 23:37:57 +01:00
Felix Rieseberg
47863bb45e build: Update Node version 2021-01-04 10:31:12 -08:00
Felix Rieseberg
9c98bf1eb8 build: Check links, update REAADME 2021-01-04 09:52:49 -08:00
Felix Rieseberg
6df468db4d v1.1.0 2021-01-03 19:38:56 -08:00
Felix Rieseberg
5320b29eed build: Build for all archs, update dependencies 2021-01-03 19:38:45 -08:00
Felix Rieseberg
d5688df03f build: Build for all architectures 2021-01-03 19:32:12 -08:00
Felix Rieseberg
e121c457af v1.0.7 2020-10-23 14:52:26 -07:00
Felix Rieseberg
45d061f051 build: Update dependencies 2020-10-23 14:52:19 -07:00
Felix Rieseberg
d9a0353091
Merge pull request #74 from felixrieseberg/dependabot/npm_and_yarn/node-fetch-2.6.1
build(deps): Bump node-fetch from 2.6.0 to 2.6.1
2020-10-23 14:48:25 -07:00
Felix Rieseberg
9622100513
Merge pull request #81 from felixrieseberg/dependabot/npm_and_yarn/electron-10.1.2
build(deps-dev): Bump electron from 10.0.0-beta.12 to 10.1.2
2020-10-23 14:48:07 -07:00
dependabot[bot]
55b97251a0
build(deps-dev): Bump electron from 10.0.0-beta.12 to 10.1.2
Bumps [electron](https://github.com/electron/electron) from 10.0.0-beta.12 to 10.1.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v10.0.0-beta.12...v10.1.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-06 17:55:38 +00:00
dependabot[bot]
576200b489
build(deps): Bump node-fetch from 2.6.0 to 2.6.1
Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/bitinn/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-13 03:31:35 +00:00
Felix Rieseberg
da7c0b1513 docs: Update readme 2020-08-03 15:50:50 -07:00
Felix Rieseberg
f2d8191b0d chore: Remove unused master certs 2020-08-02 13:27:12 -07:00
14 changed files with 1700 additions and 1761 deletions

BIN
.github/images/linux.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
.github/images/macos.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
.github/images/windows.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -10,17 +10,17 @@ on:
jobs:
lint:
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 12.x
node-version: lts/*
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v1
- uses: actions/cache@v3
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@ -28,26 +28,42 @@ jobs:
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: yarn
run: yarn --frozen-lockfile
- name: lint
run: yarn lint
build:
needs: lint
name: Build (${{ matrix.os }})
name: Build (${{ matrix.os }} - ${{ matrix.arch }})
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ macOS-latest, ubuntu-latest, windows-latest ]
# Build for supported platforms
# https://github.com/electron/electron-packager/blob/ebcbd439ff3e0f6f92fa880ff28a8670a9bcf2ab/src/targets.js#L9
# 32-bit Linux unsupported as of 2019: https://www.electronjs.org/blog/linux-32bit-support
os: [ macOS-latest, ubuntu-20.04, windows-latest ]
arch: [ x64, arm64 ]
include:
- os: windows-latest
arch: ia32
- os: ubuntu-20.04
arch: armv7l
# Publishing artifacts for multiple Windows architectures has
# a bug which can cause the wrong architecture to be downloaded
# for an update, so until that is fixed, only build Windows x64
exclude:
- os: windows-latest
arch: arm64
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 12.x
node-version: lts/*
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v1
- uses: actions/cache@v3
if: matrix.os != 'macOS-latest'
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
@ -83,18 +99,12 @@ jobs:
run: yarn
- name: Make
if: startsWith(github.ref, 'refs/tags/')
run: yarn make
run: yarn make --arch=${{ matrix.arch }}
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
WINDOWS_CODESIGN_FILE: ${{ steps.write_file.outputs.filePath }}
WINDOWS_CODESIGN_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_PASSWORD }}
- name: Make (ia32)
if: matrix.os == 'windows-latest' && startsWith(github.ref, 'refs/tags/')
run: yarn make -- --arch=ia32
env:
WINDOWS_CODESIGN_FILE: ${{ steps.write_file.outputs.filePath }}
WINDOWS_CODESIGN_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_PASSWORD }}
# - name: Archive production artifacts
# uses: actions/upload-artifact@v2
# with:

View File

@ -6,10 +6,97 @@ This is Mac OS 8, running in an [Electron](https://electronjs.org/) app pretendi
## Downloads
| | Windows | macOS | Linux |
|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Standalone Download | 📦[Standalone, 32-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintosh.js-win32-ia32-1.0.5.zip) <br /> 📦[Standalone, 64-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintosh.js-win32-x64-1.0.5.zip) | 📦[Standalone](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintosh.js-darwin-x64-1.0.5.zip) | |
| Installer | 💽[Setup, 64-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintoshjs-1.0.5-setup-x64.exe) <br /> 💽[Setup, 32-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintoshjs-1.0.5-setup-ia32.exe) | | 💽[deb, 64-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintosh.js_1.0.5_amd64.deb) <br /> 💽[rpm, 64-bit](https://github.com/felixrieseberg/macintosh.js/releases/download/v1.0.5/macintosh.js-1.0.5-1.x86_64.rpm) |
<table class="is-fullwidth">
</thead>
<tbody>
</tbody>
<tr>
<td>
<img src="./.github/images/windows.png" width="24"><br />
Windows
</td>
<td>
<span>32-bit</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintoshjs-1.2.0-setup-ia32.exe">
💿 Installer
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintosh.js-win32-ia32-1.2.0.zip">
📦 Standalone Zip
</a>
<br />
<span>64-bit</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintoshjs-1.2.0-setup-x64.exe">
💿 Installer
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintosh.js-win32-x64-1.2.0.zip">
📦 Standalone Zip
</a><br />
<span>
❓ Don't know what kind of chip you have? Hit start, enter "processor" for info.
</span>
</td>
</tr>
<tr>
<td>
<img src="./.github/images/macos.png" width="24"><br />
macOS
</td>
<td>
<span>Intel Processor</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-darwin-x64-1.1.0.zip">
📦 Standalone Zip
</a><br />
<span>Apple M1 Processor</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-darwin-arm64-1.1.0.zip">
📦 Standalone Zip
</a><br />
<span>
❓ Don't know what kind of chip you have? Learn more at <a href="https://support.apple.com/en-us/HT211814">apple.com</a>.
</span>
</td>
</tr>
<tr>
<td>
<img src="./.github/images/linux.png" width="24"><br />
Linux
</td>
<td>
<span>32-bit</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.i386.rpm">
💿 rpm
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_i386.deb">
💿 deb
</a><br />
<span>64-bit</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.x86_64.rpm">
💿 rpm
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_amd64.deb">
💿 deb
</a><br />
<span>ARM64</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.arm64.rpm">
💿 rpm
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_arm64.deb">
💿 deb
</a><br />
<span>ARMv7 (armhf)</span>
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.armv7hl.rpm">
💿 rpm
</a> |
<a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_armhf.deb">
💿 deb
</a><br />
<span>
❓ Don't know what kind of chip you have? Run `uname -m` in the console.
</span>
</td>
</tr>
</table>
<hr />
## Does it work?
Yes! Quite well, actually - on macOS, Windows, and Linux. Bear in mind that this is written entirely in JavaScript, so please adjust your expectations. The virtual machine is emulating a 1991 Macintosh Quadra 900 with a Motorola CPU, which Apple used before switching to the PowerPC architecture (Apple/IBM/Motorola) in the mid 1990s.

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,7 @@
{
"name": "macintosh.js",
"productName": "macintosh.js",
"version": "1.0.6",
"version": "1.2.0",
"description": "Macintosh's System 8 in an Electron app. I'm sorry.",
"main": "src/main/index.js",
"scripts": {
@ -9,8 +9,9 @@
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish",
"lint": "npx prettier --check src/{main,renderer}/*.{js,css}",
"fix": "npx prettier --write src/{main,renderer}/*.{js,css}"
"lint": "npx prettier --check src/{main,renderer}/*.{js,css} && npm run check-links",
"fix": "npx prettier --write \"src/{main,renderer}/**.{js,css}\"",
"check-links": "node tools/check-links.js"
},
"keywords": [],
"author": {
@ -23,14 +24,15 @@
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0",
"update-electron-app": "^1.5.0"
"update-electron-app": "^2.0.1"
},
"devDependencies": {
"@electron-forge/cli": "6.0.0-beta.52",
"@electron-forge/maker-deb": "6.0.0-beta.52",
"@electron-forge/maker-rpm": "6.0.0-beta.52",
"@electron-forge/maker-squirrel": "6.0.0-beta.52",
"@electron-forge/maker-zip": "6.0.0-beta.52",
"electron": "10.0.0-beta.12"
"@electron-forge/cli": "6.0.5",
"@electron-forge/maker-deb": "6.0.5",
"@electron-forge/maker-rpm": "6.0.5",
"@electron-forge/maker-squirrel": "6.0.5",
"@electron-forge/maker-zip": "6.0.5",
"electron": "23.1.3",
"node-fetch": "^2.6.1"
}
}

View File

@ -27,7 +27,7 @@ function isCDImage(filename = '') {
}
function isDiskImage(filename = '') {
return filename.endsWith('.img') || filename.endsWith('.dsk');
return filename.endsWith('.img') || filename.endsWith('.dsk') || filename.endsWith('.hda');
}
function cleanupCopyPath() {

View File

@ -1,4 +1,5 @@
const { app, dialog } = require("electron");
const { getIsDevMode } = require("./devmode");
// If the app doesn't run from the /Applications folder,
// we don't get to create files, which keeps the emulator from
@ -8,6 +9,10 @@ function moveToAppFolderMaybe() {
return;
}
if (getIsDevMode()) {
return;
}
if (app.isInApplicationsFolder()) {
return;
}

View File

@ -1,4 +1,4 @@
const { app, BrowserWindow, shell } = require("electron");
const { BrowserWindow, shell } = require("electron");
const path = require("path");
const { getIsDevMode } = require("./devmode");
@ -61,18 +61,31 @@ function createWindow() {
width: 900,
height: 730,
useContentSize: true,
frame: false,
frame: true,
transparent: true,
resizable: false,
resizable: true,
webPreferences: {
nodeIntegration: true,
nodeIntegrationInWorker: true,
nativeWindowOpen: true,
contextIsolation: false,
navigateOnDragDrop: false,
nodeIntegrationInWorker: true,
sandbox: false,
},
});
// Ensure that we have access to SharedArrayBuffer
mainWindow.webContents.session.webRequest.onHeadersReceived(
(details, callback) => {
details.responseHeaders["Cross-Origin-Opener-Policy"] = ["same-origin"];
details.responseHeaders["Cross-Origin-Embedder-Policy"] = [
"require-corp",
];
callback({ responseHeaders: details.responseHeaders });
}
);
// and load the index.html of the app.
mainWindow.loadFile(path.join(__dirname, "../renderer/index.html"));

View File

@ -1,43 +1,63 @@
const { videoModeBufferView } = require("./video");
const { audioContext } = require("./audio");
const SCREEN_WIDTH = 800;
const SCREEN_HEIGHT = 600;
const SCREEN_BUFFER_SIZE = SCREEN_WIDTH * SCREEN_HEIGHT * 4; // 32bpp;
const BITS = 4;
const SCREEN_BUFFER_SIZE = 800 * 600 * BITS; // 32bpp;
const screenBuffer = new SharedArrayBuffer(SCREEN_BUFFER_SIZE);
const screenBufferView = new Uint8Array(screenBuffer);
canvas.width = SCREEN_WIDTH;
canvas.height = SCREEN_HEIGHT;
let screenWidth = 800;
let screenHeight = 600;
canvas.width = screenWidth;
canvas.height = screenHeight;
const canvasCtx = canvas.getContext("2d");
const imageData = canvasCtx.createImageData(SCREEN_WIDTH, SCREEN_HEIGHT);
let imageData = canvasCtx.createImageData(screenWidth, screenHeight);
window.addEventListener("resize", () => {
screenHeight = window.innerHeight - 35;
screenWidth = Math.floor(screenHeight * (4 / 3));
if (window.innerWidth < screenWidth) {
screenWidth = window.innerWidth;
screenHeight = Math.floor(screenWidth * 0.75);
}
canvas.width = screenWidth;
canvas.height = screenHeight;
imageData = canvasCtx.createImageData(screenWidth, screenHeight);
});
let stopDrawing = false;
function drawScreen() {
if (stopDrawing) return;
const pixelsRGBA = imageData.data;
const numPixels = SCREEN_WIDTH * SCREEN_HEIGHT;
const numPixels = screenWidth * screenHeight;
const expandedFromPalettedMode = videoModeBufferView[3];
const start = audioContext.currentTime;
if (expandedFromPalettedMode) {
for (var i = 0; i < numPixels; i++) {
for (let i = 0; i < numPixels; i++) {
// palette
pixelsRGBA[i * 4 + 0] = screenBufferView[i * 4 + 0];
pixelsRGBA[i * 4 + 1] = screenBufferView[i * 4 + 1];
pixelsRGBA[i * 4 + 2] = screenBufferView[i * 4 + 2];
pixelsRGBA[i * 4 + 3] = 255; // full opacity
pixelsRGBA[i * BITS + 0] = screenBufferView[i * BITS + 0];
pixelsRGBA[i * BITS + 1] = screenBufferView[i * BITS + 1];
pixelsRGBA[i * BITS + 2] = screenBufferView[i * BITS + 2];
pixelsRGBA[i * BITS + 3] = 255; // full opacity
}
} else {
for (var i = 0; i < numPixels; i++) {
// ARGB
pixelsRGBA[i * 4 + 0] = screenBufferView[i * 4 + 1];
pixelsRGBA[i * 4 + 1] = screenBufferView[i * 4 + 2];
pixelsRGBA[i * 4 + 2] = screenBufferView[i * 4 + 3];
pixelsRGBA[i * 4 + 3] = 255; // full opacity
for (let i = 0; i < screenHeight; i++) {
for (let j = 0; j < screenWidth; j++) {
// ARGB
const xRatio = 800 / screenWidth;
const yRatio = 600 / screenHeight;
const px = Math.floor(j * xRatio);
const py = Math.floor(i * yRatio);
pixelsRGBA[(i * screenWidth + j) * 4 + 0] =
screenBufferView[(py * 800 + px) * 4 + 1]; //- lineMult];
pixelsRGBA[(i * screenWidth + j) * 4 + 1] =
screenBufferView[(py * 800 + px) * 4 + 2]; //- lineMult];
pixelsRGBA[(i * screenWidth + j) * 4 + 2] =
screenBufferView[(py * 800 + px) * 4 + 3]; //- lineMult];
pixelsRGBA[(i * screenWidth + j) * 4 + 3] = 255; // full opacity
}
}
}
@ -69,7 +89,7 @@ module.exports = {
screenBufferView,
SCREEN_BUFFER_SIZE,
drawScreen,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SCREEN_WIDTH: screenWidth,
SCREEN_HEIGHT: screenHeight,
setCanvasBlank,
};

38
tools/check-links.js Normal file
View File

@ -0,0 +1,38 @@
const fs = require('fs/promises')
const path = require('path')
const fetch = require('node-fetch')
const LINK_RGX = /(http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?/g;
async function main() {
const readmePath = path.join(__dirname, '../README.md')
const readme = await fs.readFile(readmePath, 'utf-8')
const links = readme.match(LINK_RGX)
let failed = false
for (const link of links) {
try {
const response = await fetch(link, { method: 'HEAD' })
if (!response.ok) {
// If we're inside GitHub's release asset server, we just ran into AWS not allowing
// HEAD requests, which is different from a 404.
if (!response.url.startsWith('https://github-production-release-asset')) {
throw new Error (`HTTP Error Response: ${response.status} ${response.statusText}`)
}
}
console.log(`${link}`);
} catch (error) {
failed = true
console.log(`${link}\n${error}`)
}
}
if (failed) {
process.exit(-1);
}
}
main()

3166
yarn.lock

File diff suppressed because it is too large Load Diff