Skip to content

Commit d1dd266

Browse files
authored
Merge pull request #345 from smalruby/pwa
feat: pwa
2 parents b7d6346 + 159302b commit d1dd266

File tree

10 files changed

+7515
-57
lines changed

10 files changed

+7515
-57
lines changed

package-lock.json

Lines changed: 2173 additions & 54 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"scripts": {
1414
"setup-opal": "node ./scripts/make-setup-opal.js",
1515
"setup-scratch-vm": "cd node_modules/scratch-vm && npm install && $(npm bin)/webpack --colors --bail --silent",
16-
"build": "npm run clean && webpack --colors --bail",
16+
"build": "npm run clean && node ./scripts/makePWAAssetsManifest.js && webpack --colors --bail",
1717
"clean": "rimraf ./build && mkdirp build && rimraf ./dist && mkdirp dist",
1818
"deploy": "touch build/.nojekyll && gh-pages -t -d build -m \"[skip ci] Build for $(git log --pretty=format:%H -n1)\"",
1919
"deploy:smalruby.app": "rimraf node_modules/gh-pages/.cache && echo \"smalruby.app\" > build/CNAME && touch build/.nojekyll && gh-pages -t -d build -m \"build: build for $(git log --pretty=format:%H -n1) [skip ci] \"",
@@ -155,6 +155,8 @@
155155
"webpack": "4.47.0",
156156
"webpack-cli": "3.3.12",
157157
"webpack-dev-server": "3.11.2",
158+
"webpack-pwa-manifest": "^4.3.0",
159+
"workbox-webpack-plugin": "^6.1.5",
158160
"yauzl": "2.10.0"
159161
},
160162
"jest": {

scripts/lib/libraries.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const backdrops = require('../../src/lib/libraries/backdrops.json');
2+
const costumes = require('../../src/lib/libraries/costumes.json');
3+
const sounds = require('../../src/lib/libraries/sounds.json');
4+
const sprites = require('../../src/lib/libraries/sprites.json');
5+
6+
const libraries = {
7+
backdrops,
8+
costumes,
9+
sounds,
10+
sprites
11+
};
12+
13+
module.exports = libraries;

scripts/makePWAAssetsManifest.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* eslint-disable no-undef */
2+
/* eslint-disable no-console */
3+
const fs = require('fs');
4+
const path = require('path');
5+
const util = require('util');
6+
7+
const libraries = require('./lib/libraries');
8+
9+
const manifest = path.resolve(__dirname, '../src/assetsManifest.json');
10+
11+
12+
const describe = function (object) {
13+
return util.inspect(object, false, Infinity, true);
14+
};
15+
16+
const collectSimple = function (library, dest, debugLabel = 'Item') {
17+
library.forEach(item => {
18+
let md5Count = 0;
19+
if (item.md5) {
20+
++md5Count;
21+
dest.add(item.md5);
22+
}
23+
if (item.baseLayerMD5) { // 2.0 library syntax for costumes
24+
++md5Count;
25+
dest.add(item.baseLayerMD5);
26+
}
27+
if (item.md5ext) { // 3.0 library syntax for costumes
28+
++md5Count;
29+
dest.add(item.md5ext);
30+
}
31+
if (md5Count < 1) {
32+
console.warn(`${debugLabel} has no MD5 property:\n${describe(item)}`);
33+
} else if (md5Count > 1) {
34+
// is this actually bad?
35+
console.warn(`${debugLabel} has multiple MD5 properties:\n${describe(item)}`);
36+
}
37+
});
38+
return dest;
39+
};
40+
41+
const collectAssets = function (dest) {
42+
collectSimple(libraries.backdrops, dest, 'Backdrop');
43+
collectSimple(libraries.costumes, dest, 'Costume');
44+
collectSimple(libraries.sounds, dest, 'Sound');
45+
libraries.sprites.forEach(sprite => {
46+
if (sprite.costumes) {
47+
collectSimple(sprite.costumes, dest, `Costume for sprite ${sprite.name}`);
48+
}
49+
if (sprite.sounds) {
50+
collectSimple(sprite.sounds, dest, `Sound for sprite ${sprite.name}`);
51+
}
52+
});
53+
return dest;
54+
};
55+
56+
57+
const listAllAssets = function () {
58+
const allAssets = collectAssets(new Set());
59+
console.log(`Total library assets: ${allAssets.size}`);
60+
const urls = Array.from(allAssets).map(file =>
61+
({
62+
url: `https://assets.scratch.mit.edu/internalapi/asset/${file}/get/`,
63+
revision: file.split('.').slice(0, -1)[0]
64+
}));
65+
fs.writeFile(manifest, JSON.stringify(urls, null, 2), err => {
66+
if (err) throw err;
67+
console.log('Assets Manifest has been saved!');
68+
});
69+
};
70+
71+
listAllAssets();

0 commit comments

Comments
 (0)