Merge branch 'master' into patch-1
8
.editorconfig
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[{src, translations}/*]
|
||||||
|
end_of_line = crlf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
||||||
4
.gitattributes
vendored
@ -1,4 +0,0 @@
|
|||||||
*.wav filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.webm filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.psd filter=lfs diff=lfs merge=lfs -text
|
|
||||||
18
.github/workflows/ci.yml
vendored
@ -35,19 +35,23 @@ jobs:
|
|||||||
cd gulp/
|
cd gulp/
|
||||||
yarn
|
yarn
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: |
|
run: |
|
||||||
yarn lint
|
yarn lint
|
||||||
|
|
||||||
- name: YAML Lint
|
|
||||||
uses: ibiqlik/action-yamllint@v1.0.0
|
|
||||||
with:
|
|
||||||
file_or_dir: translations/*.yaml
|
|
||||||
|
|
||||||
- name: TSLint
|
- name: TSLint
|
||||||
run: |
|
run: |
|
||||||
cd gulp
|
cd gulp
|
||||||
yarn gulp translations.fullBuild
|
yarn gulp translations.fullBuild
|
||||||
cd ..
|
cd ..
|
||||||
yarn tslint
|
yarn tslint
|
||||||
|
|
||||||
|
yaml-lint:
|
||||||
|
name: yaml-lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: YAML Lint
|
||||||
|
uses: ibiqlik/action-yamllint@v1.0.0
|
||||||
|
with:
|
||||||
|
file_or_dir: translations/*.yaml
|
||||||
|
|||||||
66
.gitignore
vendored
@ -15,34 +15,11 @@ pids
|
|||||||
*.seed
|
*.seed
|
||||||
*.pid.lock
|
*.pid.lock
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
*.lcov
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
build/Release
|
build/Release
|
||||||
|
|
||||||
# Dependency directories
|
# Dependency directories
|
||||||
node_modules/
|
node_modules/
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# TypeScript v1 declaration files
|
|
||||||
typings/
|
|
||||||
|
|
||||||
# TypeScript cache
|
# TypeScript cache
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
@ -53,18 +30,9 @@ typings/
|
|||||||
# Optional eslint cache
|
# Optional eslint cache
|
||||||
.eslintcache
|
.eslintcache
|
||||||
|
|
||||||
# Microbundle cache
|
|
||||||
.rpt2_cache/
|
|
||||||
.rts2_cache_cjs/
|
|
||||||
.rts2_cache_es/
|
|
||||||
.rts2_cache_umd/
|
|
||||||
|
|
||||||
# Optional REPL history
|
# Optional REPL history
|
||||||
.node_repl_history
|
.node_repl_history
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
# Yarn Integrity file
|
||||||
.yarn-integrity
|
.yarn-integrity
|
||||||
|
|
||||||
@ -72,41 +40,11 @@ typings/
|
|||||||
.env
|
.env
|
||||||
.env.test
|
.env.test
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# Next.js build output
|
|
||||||
.next
|
|
||||||
|
|
||||||
# Nuxt.js build / generate output
|
|
||||||
.nuxt
|
|
||||||
dist
|
|
||||||
|
|
||||||
# Gatsby files
|
|
||||||
.cache/
|
|
||||||
# Comment in the public line in if your project uses Gatsby and *not* Next.js
|
|
||||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
||||||
# public
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless/
|
|
||||||
|
|
||||||
# FuseBox cache
|
|
||||||
.fusebox/
|
|
||||||
|
|
||||||
# DynamoDB Local files
|
|
||||||
.dynamodb/
|
|
||||||
|
|
||||||
# TernJS port file
|
|
||||||
.tern-port
|
|
||||||
|
|
||||||
|
|
||||||
# Buildfiles
|
# Buildfiles
|
||||||
build
|
build
|
||||||
|
res_built
|
||||||
|
|
||||||
|
gulp/runnable-texturepacker.jar
|
||||||
tmp_standalone_files
|
tmp_standalone_files
|
||||||
|
|
||||||
# Local config
|
# Local config
|
||||||
|
|||||||
4
.gitpod.Dockerfile
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
FROM gitpod/workspace-full
|
||||||
|
|
||||||
|
RUN sudo apt-get update \
|
||||||
|
&& sudo apt install ffmpeg -yq
|
||||||
10
.gitpod.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
image:
|
||||||
|
file: .gitpod.Dockerfile
|
||||||
|
tasks:
|
||||||
|
- init: yarn && gp sync-done boot
|
||||||
|
- before: cd gulp
|
||||||
|
init: gp sync-await boot && yarn
|
||||||
|
command: yarn gulp
|
||||||
|
ports:
|
||||||
|
- port: 3005
|
||||||
|
onOpen: open-preview
|
||||||
4
.vscode/settings.json
vendored
@ -1,3 +1,5 @@
|
|||||||
{
|
{
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"files.trimTrailingWhitespace": true,
|
||||||
|
"editor.formatOnSave": true
|
||||||
}
|
}
|
||||||
@ -4,3 +4,4 @@ rules:
|
|||||||
line-length:
|
line-length:
|
||||||
level: warning
|
level: warning
|
||||||
max: 200
|
max: 200
|
||||||
|
document-start: disable
|
||||||
|
|||||||
31
Dockerfile
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
FROM node:12 as base
|
||||||
|
|
||||||
|
EXPOSE 3001 3005
|
||||||
|
|
||||||
|
WORKDIR /shapez.io
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
ffmpeg default-jre \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY package.json yarn.lock ./
|
||||||
|
RUN yarn
|
||||||
|
|
||||||
|
COPY gulp ./gulp
|
||||||
|
WORKDIR /shapez.io/gulp
|
||||||
|
RUN yarn
|
||||||
|
|
||||||
|
WORKDIR /shapez.io
|
||||||
|
COPY res ./res
|
||||||
|
COPY src/html ./src/html
|
||||||
|
COPY src/css ./src/css
|
||||||
|
COPY version ./version
|
||||||
|
COPY sync-translations.js ./
|
||||||
|
COPY translations ./translations
|
||||||
|
COPY src/js ./src/js
|
||||||
|
COPY res_raw ./res_raw
|
||||||
|
COPY .git ./.git
|
||||||
|
|
||||||
|
WORKDIR /shapez.io/gulp
|
||||||
|
ENTRYPOINT ["yarn", "gulp"]
|
||||||
45
README.md
@ -22,15 +22,24 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts
|
|||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
- Make sure git `git lfs` extension is on your path
|
|
||||||
- Run `git lfs pull` to download sound assets
|
|
||||||
- Make sure `ffmpeg` is on your path
|
- Make sure `ffmpeg` is on your path
|
||||||
- Install Node.js and Yarn
|
- Install Node.js and Yarn
|
||||||
|
- Install Java (required for textures)
|
||||||
- Run `yarn` in the root folder
|
- Run `yarn` in the root folder
|
||||||
- Cd into `gulp` folder
|
- Cd into `gulp` folder
|
||||||
- Run `yarn` and then `yarn gulp` - it should now open in your browser
|
- Run `yarn` and then `yarn gulp` - it should now open in your browser
|
||||||
|
|
||||||
**Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify `config.js`.
|
**Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify [`src/js/core/config.js`](src/js/core/config.js).
|
||||||
|
|
||||||
|
## Build Online with one-click setup
|
||||||
|
|
||||||
|
You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically:
|
||||||
|
|
||||||
|
- clone the `shapez.io` repo.
|
||||||
|
- install all of the dependencies.
|
||||||
|
- start `gulp` in `gulp/` directory.
|
||||||
|
|
||||||
|
[](https://gitpod.io/from-referrer/)
|
||||||
|
|
||||||
## Helping translate
|
## Helping translate
|
||||||
|
|
||||||
@ -64,7 +73,7 @@ This project is based on ES5. Some ES2015 features are used but most of them are
|
|||||||
5. Add a constructor. **The constructor must be called with optional parameters only!** `new MyFancyComponent({})` should always work.
|
5. Add a constructor. **The constructor must be called with optional parameters only!** `new MyFancyComponent({})` should always work.
|
||||||
6. Add any props you need in the constructor.
|
6. Add any props you need in the constructor.
|
||||||
7. Add the component in `src/js/game/component_registry.js`
|
7. Add the component in `src/js/game/component_registry.js`
|
||||||
8. Add the componetn in `src/js/game/entity_components.js`
|
8. Add the component in `src/js/game/entity_components.js`
|
||||||
9. Done! You can use your component now
|
9. Done! You can use your component now
|
||||||
|
|
||||||
#### Adding a new building
|
#### Adding a new building
|
||||||
@ -81,7 +90,7 @@ This project is based on ES5. Some ES2015 features are used but most of them are
|
|||||||
8. In `translations/base-en.yaml` add it to two sections: `buildings.[my_building].XXX` (See other buildings) and also `keybindings.mappings.[my_building]`. Be sure to do it the same way as other buildings do!
|
8. In `translations/base-en.yaml` add it to two sections: `buildings.[my_building].XXX` (See other buildings) and also `keybindings.mappings.[my_building]`. Be sure to do it the same way as other buildings do!
|
||||||
9. Create a icon (128x128, [prefab](https://github.com/tobspr/shapez.io-artwork/blob/master/ui/toolbar-icons.psd)) for your building and save it in `res/ui/buildings_icons` with the id of your building
|
9. Create a icon (128x128, [prefab](https://github.com/tobspr/shapez.io-artwork/blob/master/ui/toolbar-icons.psd)) for your building and save it in `res/ui/buildings_icons` with the id of your building
|
||||||
10. Create a tutorial image (600x600) for your building and save it in `res/ui/building_tutorials`
|
10. Create a tutorial image (600x600) for your building and save it in `res/ui/building_tutorials`
|
||||||
11. In `src/css/icons.scss` add your building to `$buildings` as well as `$buildingAndVariants`
|
11. In `src/css/resources.scss` add your building to `$buildings` as well as `$buildingAndVariants`
|
||||||
12. Done! Optional: Add a new reward for unlocking your building at some point.
|
12. Done! Optional: Add a new reward for unlocking your building at some point.
|
||||||
|
|
||||||
#### Adding a new game system
|
#### Adding a new game system
|
||||||
@ -92,10 +101,32 @@ This project is based on ES5. Some ES2015 features are used but most of them are
|
|||||||
4. Add the system in `src/js/game/game_system_manager.js` (To `this.systems` and also call `add` in the `internalInitSystems()` method)
|
4. Add the system in `src/js/game/game_system_manager.js` (To `this.systems` and also call `add` in the `internalInitSystems()` method)
|
||||||
5. If your system should draw stuff, this is a bit more complicated. Have a look at existing systems on how they do it.
|
5. If your system should draw stuff, this is a bit more complicated. Have a look at existing systems on how they do it.
|
||||||
|
|
||||||
|
#### Checklist for a new building / testing it
|
||||||
|
|
||||||
|
This is a quick checklist, if a new building is added this points should be fulfilled:
|
||||||
|
|
||||||
|
2. The translation for all variants is done and finalized
|
||||||
|
3. The artwork (regular sprite) is finalized
|
||||||
|
4. The blueprint sprite has been generated and is up to date
|
||||||
|
5. The building has been added to the appropriate toolbar
|
||||||
|
6. The building has a keybinding which makes sense
|
||||||
|
7. The building has a reward assigned and is unlocked at a meaningful point
|
||||||
|
8. The reward for the building has a proper translation
|
||||||
|
9. The reward for the building has a proper image
|
||||||
|
10. The building has a proper tutorial image assigned
|
||||||
|
11. The buliding has a proper toolbar icon
|
||||||
|
12. The reward requires a proper shape
|
||||||
|
13. The building has a proper silhouette color
|
||||||
|
14. The building has a proper matrix for being rendered on the minimap
|
||||||
|
15. The building has proper statistics in the dialog
|
||||||
|
16. The building properly contributes to the shapes produced analytics
|
||||||
|
17. The building is properly persisted in the savegame
|
||||||
|
18. The building is explained properly, ideally via an interactive tutorial
|
||||||
|
|
||||||
### Assets
|
### Assets
|
||||||
|
|
||||||
For most assets I use Adobe Photoshop, you can find them in `assets/`.
|
For most assets I use Adobe Photoshop, you can find them <a href="//github.com/tobspr/shapez.io-artwork" target="_blank">here</a>.
|
||||||
|
|
||||||
You will need a <a href="https://www.codeandweb.com/texturepacker" target="_blank">Texture Packer</a> license in order to regenerate the atlas. If you don't have one but want to contribute assets, let me know and I might compile it for you. I'm currently switching to an open source solution but I can't give an estimate when thats done.
|
All assets will be automatically rebuilt into the atlas once changed (Thanks to dengr1065!)
|
||||||
|
|
||||||
<img src="https://i.imgur.com/W25Fkl0.png" alt="shapez.io Screenshot">
|
<img src="https://i.imgur.com/W25Fkl0.png" alt="shapez.io Screenshot">
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
The artwork can be found here:
|
|
||||||
|
|
||||||
https://github.com/tobspr/shapez.io-artwork
|
|
||||||
@ -4,7 +4,7 @@ const { app, BrowserWindow, Menu, MenuItem, session } = require("electron");
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const url = require("url");
|
const url = require("url");
|
||||||
const childProcess = require("child_process");
|
const childProcess = require("child_process");
|
||||||
const { ipcMain } = require("electron");
|
const { ipcMain, shell } = require("electron");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const isDev = process.argv.indexOf("--dev") >= 0;
|
const isDev = process.argv.indexOf("--dev") >= 0;
|
||||||
const isLocal = process.argv.indexOf("--local") >= 0;
|
const isLocal = process.argv.indexOf("--local") >= 0;
|
||||||
@ -67,11 +67,7 @@ function createWindow() {
|
|||||||
|
|
||||||
win.webContents.on("new-window", (event, pth) => {
|
win.webContents.on("new-window", (event, pth) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (process.platform == "win32") {
|
shell.openExternal(pth);
|
||||||
childProcess.execSync("start " + pth);
|
|
||||||
} else if (process.platform == "linux") {
|
|
||||||
childProcess.execSync("xdg-open " + pth);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
win.on("closed", () => {
|
win.on("closed", () => {
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
"start": "electron --disable-direct-composition --in-process-gpu ."
|
"start": "electron --disable-direct-composition --in-process-gpu ."
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^6.1.12"
|
"electron": "10.1.3"
|
||||||
},
|
},
|
||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
}
|
}
|
||||||
|
|||||||
1087
electron/yarn.lock
1
gulp/.gitattributes
vendored
@ -1 +0,0 @@
|
|||||||
*.wav filter=lfs diff=lfs merge=lfs -text
|
|
||||||
1
gulp/.gitignore
vendored
@ -1,2 +1 @@
|
|||||||
additional_build_files
|
additional_build_files
|
||||||
steampipe
|
|
||||||
|
|||||||
127
gulp/atlas2json.js
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
const { join, resolve } = require("path");
|
||||||
|
const { readFileSync, readdirSync, writeFileSync } = require("fs");
|
||||||
|
|
||||||
|
const suffixToScale = {
|
||||||
|
lq: "0.25",
|
||||||
|
mq: "0.5",
|
||||||
|
hq: "0.75"
|
||||||
|
};
|
||||||
|
|
||||||
|
function convert(srcDir) {
|
||||||
|
const full = resolve(srcDir);
|
||||||
|
const srcFiles = readdirSync(full)
|
||||||
|
.filter(n => n.endsWith(".atlas"))
|
||||||
|
.map(n => join(full, n));
|
||||||
|
|
||||||
|
for (const atlas of srcFiles) {
|
||||||
|
console.log(`Processing: ${atlas}`);
|
||||||
|
|
||||||
|
// Read all text, split it into line array
|
||||||
|
// and filter all empty lines
|
||||||
|
const lines = readFileSync(atlas, "utf-8")
|
||||||
|
.split("\n")
|
||||||
|
.filter(n => n.trim());
|
||||||
|
|
||||||
|
// Get source image name
|
||||||
|
const image = lines.shift();
|
||||||
|
const srcMeta = {};
|
||||||
|
|
||||||
|
// Read all metadata (supports only one page)
|
||||||
|
while (true) {
|
||||||
|
const kv = lines.shift().split(":");
|
||||||
|
if (kv.length != 2) {
|
||||||
|
lines.unshift(kv[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
srcMeta[kv[0]] = kv[1].trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
const frames = {};
|
||||||
|
let current = null;
|
||||||
|
|
||||||
|
lines.push("Dummy line to make it convert last frame");
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
if (!line.startsWith(" ")) {
|
||||||
|
// New frame, convert previous if it exists
|
||||||
|
if (current != null) {
|
||||||
|
let { name, rotate, xy, size, orig, offset, index } = current;
|
||||||
|
|
||||||
|
// Convert to arrays because Node.js doesn't
|
||||||
|
// support latest JS features
|
||||||
|
xy = xy.split(",").map(v => Number(v));
|
||||||
|
size = size.split(",").map(v => Number(v));
|
||||||
|
orig = orig.split(",").map(v => Number(v));
|
||||||
|
offset = offset.split(",").map(v => Number(v));
|
||||||
|
|
||||||
|
// GDX TexturePacker removes index suffixes
|
||||||
|
const indexSuff = index != -1 ? `_${index}` : "";
|
||||||
|
const isTrimmed = size != orig;
|
||||||
|
|
||||||
|
frames[`${name}${indexSuff}.png`] = {
|
||||||
|
// Bounds on atlas
|
||||||
|
frame: {
|
||||||
|
x: xy[0],
|
||||||
|
y: xy[1],
|
||||||
|
w: size[0],
|
||||||
|
h: size[1]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Whether image was rotated
|
||||||
|
rotated: rotate == "true",
|
||||||
|
trimmed: isTrimmed,
|
||||||
|
|
||||||
|
// How is the image trimmed
|
||||||
|
spriteSourceSize: {
|
||||||
|
x: offset[0],
|
||||||
|
y: (orig[1] - size[1]) - offset[1],
|
||||||
|
w: size[0],
|
||||||
|
h: size[1]
|
||||||
|
},
|
||||||
|
|
||||||
|
sourceSize: {
|
||||||
|
w: orig[0],
|
||||||
|
h: orig[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple object that will hold other metadata
|
||||||
|
current = {
|
||||||
|
name: line
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// Read and set current image metadata
|
||||||
|
const kv = line.split(":").map(v => v.trim());
|
||||||
|
current[kv[0]] = isNaN(Number(kv[1])) ? kv[1] : Number(kv[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const atlasSize = srcMeta.size.split(",").map(v => Number(v));
|
||||||
|
const atlasScale = suffixToScale[atlas.match(/_(\w+)\.atlas$/)[1]];
|
||||||
|
|
||||||
|
const result = JSON.stringify({
|
||||||
|
frames,
|
||||||
|
meta: {
|
||||||
|
image,
|
||||||
|
format: srcMeta.format,
|
||||||
|
size: {
|
||||||
|
w: atlasSize[0],
|
||||||
|
h: atlasSize[1]
|
||||||
|
},
|
||||||
|
scale: atlasScale.toString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
writeFileSync(atlas.replace(".atlas", ".json"), result, {
|
||||||
|
encoding: "utf-8"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (require.main == module) {
|
||||||
|
convert(process.argv[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { convert };
|
||||||
@ -25,6 +25,14 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getTag() {
|
||||||
|
try {
|
||||||
|
return execSync("git describe --tag --exact-match").toString("ascii");
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error('Current git HEAD is not a version tag');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
getVersion() {
|
getVersion() {
|
||||||
return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString());
|
return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString());
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,96 +0,0 @@
|
|||||||
// Converts the atlas description to a JSON file
|
|
||||||
|
|
||||||
String.prototype.replaceAll = function (search, replacement) {
|
|
||||||
var target = this;
|
|
||||||
return target.split(search).join(replacement);
|
|
||||||
};
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
const path = require("path");
|
|
||||||
|
|
||||||
const folder = path.join(__dirname, "res_built", "atlas");
|
|
||||||
const files = fs.readdirSync(folder);
|
|
||||||
|
|
||||||
const metadata = [];
|
|
||||||
|
|
||||||
files.forEach(filename => {
|
|
||||||
if (filename.endsWith(".atlas")) {
|
|
||||||
// Read content
|
|
||||||
|
|
||||||
const content = fs.readFileSync(path.join(folder, filename), "ascii");
|
|
||||||
|
|
||||||
const lines = content.replaceAll("\r", "").replaceAll("\t", "").split("\n");
|
|
||||||
|
|
||||||
const readLine = () => lines.splice(0, 1)[0];
|
|
||||||
const readValue = () => readLine().replaceAll(" ", "").split(":")[1];
|
|
||||||
const readVector = () =>
|
|
||||||
readValue()
|
|
||||||
.split(",")
|
|
||||||
.map(d => parseInt(d, 10));
|
|
||||||
|
|
||||||
let maxAtlas = 100;
|
|
||||||
|
|
||||||
atlasLoop: while (maxAtlas-- > 0 && lines.length >= 7) {
|
|
||||||
const result = {
|
|
||||||
entries: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
// Extract header
|
|
||||||
const header_fileStart = readLine();
|
|
||||||
const header_fileName = readLine();
|
|
||||||
const header_size = readVector();
|
|
||||||
const header_format = readLine();
|
|
||||||
const header_filter = readLine();
|
|
||||||
const header_repeat = readLine();
|
|
||||||
const baseAtlasName = header_fileName.replace(".png", "");
|
|
||||||
|
|
||||||
// Store size
|
|
||||||
result.size = header_size;
|
|
||||||
|
|
||||||
lineLoop: while (lines.length >= 7) {
|
|
||||||
const entryResult = {};
|
|
||||||
|
|
||||||
const nextLine = lines[0];
|
|
||||||
if (nextLine.length === 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const entry_fileName = readLine() + ".png";
|
|
||||||
|
|
||||||
const entry_rotate = readValue();
|
|
||||||
const entry_xy = readVector();
|
|
||||||
const entry_size = readVector();
|
|
||||||
const entry_orig = readVector();
|
|
||||||
const entry_offset = readVector();
|
|
||||||
const entry_index = readValue();
|
|
||||||
|
|
||||||
entryResult.filename = entry_fileName;
|
|
||||||
entryResult.xy = entry_xy;
|
|
||||||
entryResult.size = entry_size;
|
|
||||||
// entryResult.offset = entry_offset;
|
|
||||||
|
|
||||||
entryResult.origSize = entry_orig;
|
|
||||||
|
|
||||||
let offset = [0, 0];
|
|
||||||
|
|
||||||
// GDX Atlas packer uses 1 - y coordinates. This sucks, and we have to convert it
|
|
||||||
offset[0] = entry_offset[0];
|
|
||||||
offset[1] = entry_orig[1] - entry_offset[1] - entry_size[1];
|
|
||||||
|
|
||||||
entryResult.offset = offset;
|
|
||||||
|
|
||||||
result.entries.push(entryResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("[Atlas]", "'" + baseAtlasName + "'", "has", result.entries.length, "entries");
|
|
||||||
// fs.writeFileSync(path.join(folder, baseAtlasName + ".gen.json"), JSON.stringify(result));
|
|
||||||
|
|
||||||
metadata.push({
|
|
||||||
filename: baseAtlasName + ".png",
|
|
||||||
entries: result,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
fs.writeFileSync(path.join(folder, "meta.gen.json"), JSON.stringify(metadata, null, 4));
|
|
||||||
86
gulp/css.js
@ -58,40 +58,78 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) {
|
|||||||
.pipe($.sassLint.failOnError());
|
.pipe($.sassLint.failOnError());
|
||||||
});
|
});
|
||||||
|
|
||||||
// Builds the css in dev mode
|
function resourcesTask({ cachebust, isProd }) {
|
||||||
gulp.task("css.dev", () => {
|
|
||||||
return gulp
|
return gulp
|
||||||
.src(["../src/css/main.scss"])
|
.src("../src/css/main.scss", { cwd: __dirname })
|
||||||
.pipe($.plumber())
|
.pipe($.plumber())
|
||||||
.pipe($.sass.sync().on("error", $.sass.logError))
|
.pipe($.sass.sync().on("error", $.sass.logError))
|
||||||
.pipe($.postcss(postcssPlugins(false, {})))
|
.pipe(
|
||||||
|
$.postcss([
|
||||||
|
$.postcssCriticalSplit({
|
||||||
|
blockTag: "@load-async",
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
.pipe($.rename("async-resources.css"))
|
||||||
|
.pipe($.postcss(postcssPlugins(isProd, { cachebust })))
|
||||||
.pipe(gulp.dest(buildFolder))
|
.pipe(gulp.dest(buildFolder))
|
||||||
.pipe(browserSync.stream());
|
.pipe(browserSync.stream());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builds the css resources
|
||||||
|
gulp.task("css.resources.dev", () => {
|
||||||
|
return resourcesTask({ cachebust: false, isProd: false });
|
||||||
});
|
});
|
||||||
|
|
||||||
// Builds the css in production mode (=minified)
|
// Builds the css resources in prod (=minified)
|
||||||
gulp.task("css.prod", () => {
|
gulp.task("css.resources.prod", () => {
|
||||||
return (
|
return resourcesTask({ cachebust: true, isProd: true });
|
||||||
gulp
|
|
||||||
.src("../src/css/main.scss", { cwd: __dirname })
|
|
||||||
.pipe($.plumber())
|
|
||||||
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
|
|
||||||
.pipe($.postcss(postcssPlugins(true, { cachebust: true })))
|
|
||||||
.pipe(gulp.dest(buildFolder))
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Builds the css in production mode (=minified), without cachebusting
|
// Builds the css resources in prod (=minified), without cachebusting
|
||||||
gulp.task("css.prod-standalone", () => {
|
gulp.task("css.resources.prod-standalone", () => {
|
||||||
return (
|
return resourcesTask({ cachebust: false, isProd: true });
|
||||||
gulp
|
|
||||||
.src("../src/css/main.scss", { cwd: __dirname })
|
|
||||||
.pipe($.plumber())
|
|
||||||
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
|
|
||||||
.pipe($.postcss(postcssPlugins(true, { cachebust: false })))
|
|
||||||
.pipe(gulp.dest(buildFolder))
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function mainTask({ cachebust, isProd }) {
|
||||||
|
return gulp
|
||||||
|
.src("../src/css/main.scss", { cwd: __dirname })
|
||||||
|
.pipe($.plumber())
|
||||||
|
.pipe($.sass.sync().on("error", $.sass.logError))
|
||||||
|
.pipe(
|
||||||
|
$.postcss([
|
||||||
|
$.postcssCriticalSplit({
|
||||||
|
blockTag: "@load-async",
|
||||||
|
output: "rest",
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
.pipe($.postcss(postcssPlugins(isProd, { cachebust })))
|
||||||
|
.pipe(gulp.dest(buildFolder))
|
||||||
|
.pipe(browserSync.stream());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builds the css main
|
||||||
|
gulp.task("css.main.dev", () => {
|
||||||
|
return mainTask({ cachebust: false, isProd: false });
|
||||||
|
});
|
||||||
|
|
||||||
|
// Builds the css main in prod (=minified)
|
||||||
|
gulp.task("css.main.prod", () => {
|
||||||
|
return mainTask({ cachebust: true, isProd: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
// Builds the css main in prod (=minified), without cachebusting
|
||||||
|
gulp.task("css.main.prod-standalone", () => {
|
||||||
|
return mainTask({ cachebust: false, isProd: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("css.dev", gulp.parallel("css.main.dev", "css.resources.dev"));
|
||||||
|
gulp.task("css.prod", gulp.parallel("css.main.prod", "css.resources.prod"));
|
||||||
|
gulp.task(
|
||||||
|
"css.prod-standalone",
|
||||||
|
gulp.parallel("css.main.prod-standalone", "css.resources.prod-standalone")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
12
gulp/entitlements.plist
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.debugger</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@ -8,23 +8,6 @@ const path = require("path");
|
|||||||
const deleteEmpty = require("delete-empty");
|
const deleteEmpty = require("delete-empty");
|
||||||
const execSync = require("child_process").execSync;
|
const execSync = require("child_process").execSync;
|
||||||
|
|
||||||
const lfsOutput = execSync("git lfs install", { encoding: "utf-8" });
|
|
||||||
if (!lfsOutput.toLowerCase().includes("git lfs initialized")) {
|
|
||||||
console.error(`
|
|
||||||
Git LFS is not installed, unable to build.
|
|
||||||
|
|
||||||
To install Git LFS on Linux:
|
|
||||||
- Arch:
|
|
||||||
sudo pacman -S git-lfs
|
|
||||||
- Debian/Ubuntu:
|
|
||||||
sudo apt install git-lfs
|
|
||||||
|
|
||||||
For other systems, see:
|
|
||||||
https://github.com/git-lfs/git-lfs/wiki/Installation
|
|
||||||
`);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load other plugins dynamically
|
// Load other plugins dynamically
|
||||||
const $ = require("gulp-load-plugins")({
|
const $ = require("gulp-load-plugins")({
|
||||||
scope: ["devDependencies"],
|
scope: ["devDependencies"],
|
||||||
@ -42,6 +25,10 @@ const envVars = [
|
|||||||
"SHAPEZ_CLI_STAGING_FTP_PW",
|
"SHAPEZ_CLI_STAGING_FTP_PW",
|
||||||
"SHAPEZ_CLI_LIVE_FTP_USER",
|
"SHAPEZ_CLI_LIVE_FTP_USER",
|
||||||
"SHAPEZ_CLI_LIVE_FTP_PW",
|
"SHAPEZ_CLI_LIVE_FTP_PW",
|
||||||
|
"SHAPEZ_CLI_APPLE_ID",
|
||||||
|
"SHAPEZ_CLI_APPLE_CERT_NAME",
|
||||||
|
"SHAPEZ_CLI_GITHUB_USER",
|
||||||
|
"SHAPEZ_CLI_GITHUB_TOKEN",
|
||||||
];
|
];
|
||||||
|
|
||||||
for (let i = 0; i < envVars.length; ++i) {
|
for (let i = 0; i < envVars.length; ++i) {
|
||||||
@ -78,13 +65,12 @@ docs.gulptasksDocs($, gulp, buildFolder);
|
|||||||
const standalone = require("./standalone");
|
const standalone = require("./standalone");
|
||||||
standalone.gulptasksStandalone($, gulp, buildFolder);
|
standalone.gulptasksStandalone($, gulp, buildFolder);
|
||||||
|
|
||||||
|
const releaseUploader = require("./release-uploader");
|
||||||
|
releaseUploader.gulptasksReleaseUploader($, gulp, buildFolder);
|
||||||
|
|
||||||
const translations = require("./translations");
|
const translations = require("./translations");
|
||||||
translations.gulptasksTranslations($, gulp, buildFolder);
|
translations.gulptasksTranslations($, gulp, buildFolder);
|
||||||
|
|
||||||
// FIXME
|
|
||||||
// const cordova = require("./cordova");
|
|
||||||
// cordova.gulptasksCordova($, gulp, buildFolder);
|
|
||||||
|
|
||||||
///////////////////// BUILD TASKS /////////////////////
|
///////////////////// BUILD TASKS /////////////////////
|
||||||
|
|
||||||
// Cleans up everything
|
// Cleans up everything
|
||||||
@ -96,8 +82,16 @@ gulp.task("utils.cleanBuildTempFolder", () => {
|
|||||||
.src(path.join(__dirname, "..", "src", "js", "built-temp"), { read: false, allowEmpty: true })
|
.src(path.join(__dirname, "..", "src", "js", "built-temp"), { read: false, allowEmpty: true })
|
||||||
.pipe($.clean({ force: true }));
|
.pipe($.clean({ force: true }));
|
||||||
});
|
});
|
||||||
|
gulp.task("utils.cleanImageBuildFolder", () => {
|
||||||
|
return gulp
|
||||||
|
.src(path.join(__dirname, "res_built"), { read: false, allowEmpty: true })
|
||||||
|
.pipe($.clean({ force: true }));
|
||||||
|
});
|
||||||
|
|
||||||
gulp.task("utils.cleanup", gulp.series("utils.cleanBuildFolder", "utils.cleanBuildTempFolder"));
|
gulp.task(
|
||||||
|
"utils.cleanup",
|
||||||
|
gulp.series("utils.cleanBuildFolder", "utils.cleanImageBuildFolder", "utils.cleanBuildTempFolder")
|
||||||
|
);
|
||||||
|
|
||||||
// Requires no uncomitted files
|
// Requires no uncomitted files
|
||||||
gulp.task("utils.requireCleanWorkingTree", cb => {
|
gulp.task("utils.requireCleanWorkingTree", cb => {
|
||||||
@ -184,10 +178,12 @@ function serve({ standalone }) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Watch resource files and copy them on change
|
// Watch resource files and copy them on change
|
||||||
|
gulp.watch(imgres.rawImageResourcesGlobs, gulp.series("imgres.buildAtlas"));
|
||||||
gulp.watch(imgres.nonImageResourcesGlobs, gulp.series("imgres.copyNonImageResources"));
|
gulp.watch(imgres.nonImageResourcesGlobs, gulp.series("imgres.copyNonImageResources"));
|
||||||
gulp.watch(imgres.imageResourcesGlobs, gulp.series("imgres.copyImageResources"));
|
gulp.watch(imgres.imageResourcesGlobs, gulp.series("imgres.copyImageResources"));
|
||||||
|
|
||||||
// Watch .atlas files and recompile the atlas on change
|
// Watch .atlas files and recompile the atlas on change
|
||||||
|
gulp.watch("../res_built/atlas/*.atlas", gulp.series("imgres.atlasToJson"));
|
||||||
gulp.watch("../res_built/atlas/*.json", gulp.series("imgres.atlas"));
|
gulp.watch("../res_built/atlas/*.json", gulp.series("imgres.atlas"));
|
||||||
|
|
||||||
// Watch the build folder and reload when anything changed
|
// Watch the build folder and reload when anything changed
|
||||||
@ -225,6 +221,8 @@ gulp.task(
|
|||||||
gulp.series(
|
gulp.series(
|
||||||
"utils.cleanup",
|
"utils.cleanup",
|
||||||
"utils.copyAdditionalBuildFiles",
|
"utils.copyAdditionalBuildFiles",
|
||||||
|
"imgres.buildAtlas",
|
||||||
|
"imgres.atlasToJson",
|
||||||
"imgres.atlas",
|
"imgres.atlas",
|
||||||
"sounds.dev",
|
"sounds.dev",
|
||||||
"imgres.copyImageResources",
|
"imgres.copyImageResources",
|
||||||
@ -240,12 +238,13 @@ gulp.task(
|
|||||||
"build.standalone.dev",
|
"build.standalone.dev",
|
||||||
gulp.series(
|
gulp.series(
|
||||||
"utils.cleanup",
|
"utils.cleanup",
|
||||||
|
"imgres.buildAtlas",
|
||||||
|
"imgres.atlasToJson",
|
||||||
"imgres.atlas",
|
"imgres.atlas",
|
||||||
"sounds.dev",
|
"sounds.dev",
|
||||||
"imgres.copyImageResources",
|
"imgres.copyImageResources",
|
||||||
"imgres.copyNonImageResources",
|
"imgres.copyNonImageResources",
|
||||||
"translations.fullBuild",
|
"translations.fullBuild",
|
||||||
"js.standalone-dev",
|
|
||||||
"css.dev",
|
"css.dev",
|
||||||
"html.standalone-dev"
|
"html.standalone-dev"
|
||||||
)
|
)
|
||||||
@ -299,6 +298,17 @@ gulp.task(
|
|||||||
gulp.series("utils.cleanup", "step.standalone-prod.all", "step.postbuild")
|
gulp.series("utils.cleanup", "step.standalone-prod.all", "step.postbuild")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// OS X build and release upload
|
||||||
|
gulp.task(
|
||||||
|
"build.darwin64-prod",
|
||||||
|
gulp.series(
|
||||||
|
"build.standalone-prod",
|
||||||
|
"standalone.prepare",
|
||||||
|
"standalone.package.prod.darwin64",
|
||||||
|
"standalone.uploadRelease.darwin64"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Deploying!
|
// Deploying!
|
||||||
gulp.task(
|
gulp.task(
|
||||||
"main.deploy.alpha",
|
"main.deploy.alpha",
|
||||||
|
|||||||
236
gulp/html.js
@ -27,86 +27,103 @@ function gulptasksHTML($, gulp, buildFolder) {
|
|||||||
return gulp
|
return gulp
|
||||||
.src("../src/html/" + (standalone ? "index.standalone.html" : "index.html"))
|
.src("../src/html/" + (standalone ? "index.standalone.html" : "index.html"))
|
||||||
.pipe(
|
.pipe(
|
||||||
$.dom(/** @this {Document} **/ function () {
|
$.dom(
|
||||||
const document = this;
|
/** @this {Document} **/ function () {
|
||||||
|
const document = this;
|
||||||
|
|
||||||
// Preconnect to api
|
// Preconnect to api
|
||||||
const prefetchLink = document.createElement("link");
|
const prefetchLink = document.createElement("link");
|
||||||
prefetchLink.rel = "preconnect";
|
prefetchLink.rel = "preconnect";
|
||||||
prefetchLink.href = apiUrl;
|
prefetchLink.href = apiUrl;
|
||||||
prefetchLink.setAttribute("crossorigin", "anonymous");
|
prefetchLink.setAttribute("crossorigin", "anonymous");
|
||||||
document.head.appendChild(prefetchLink);
|
document.head.appendChild(prefetchLink);
|
||||||
|
|
||||||
// Append css
|
// Append css
|
||||||
const css = document.createElement("link");
|
const css = document.createElement("link");
|
||||||
css.rel = "stylesheet";
|
css.rel = "stylesheet";
|
||||||
css.type = "text/css";
|
css.type = "text/css";
|
||||||
css.media = "none";
|
css.media = "none";
|
||||||
css.setAttribute("onload", "this.media='all'");
|
css.setAttribute("onload", "this.media='all'");
|
||||||
css.href = cachebust("main.css");
|
css.href = cachebust("main.css");
|
||||||
if (integrity) {
|
if (integrity) {
|
||||||
css.setAttribute(
|
css.setAttribute(
|
||||||
"integrity",
|
"integrity",
|
||||||
computeIntegrityHash(path.join(buildFolder, "main.css"))
|
computeIntegrityHash(path.join(buildFolder, "main.css"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
document.head.appendChild(css);
|
document.head.appendChild(css);
|
||||||
|
|
||||||
if (app) {
|
// Append async css
|
||||||
// Append cordova link
|
// const asyncCss = document.createElement("link");
|
||||||
const cdv = document.createElement("script");
|
// asyncCss.rel = "stylesheet";
|
||||||
cdv.src = "cordova.js";
|
// asyncCss.type = "text/css";
|
||||||
cdv.type = "text/javascript";
|
// asyncCss.media = "none";
|
||||||
document.head.appendChild(cdv);
|
// asyncCss.setAttribute("onload", "this.media='all'");
|
||||||
}
|
// asyncCss.href = cachebust("async-resources.css");
|
||||||
|
// if (integrity) {
|
||||||
|
// asyncCss.setAttribute(
|
||||||
|
// "integrity",
|
||||||
|
// computeIntegrityHash(path.join(buildFolder, "async-resources.css"))
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// document.head.appendChild(asyncCss);
|
||||||
|
|
||||||
// Google analytics
|
if (app) {
|
||||||
if (analytics) {
|
// Append cordova link
|
||||||
const tagManagerScript = document.createElement("script");
|
const cdv = document.createElement("script");
|
||||||
tagManagerScript.src = "https://www.googletagmanager.com/gtag/js?id=UA-165342524-1";
|
cdv.src = "cordova.js";
|
||||||
tagManagerScript.setAttribute("async", "");
|
cdv.type = "text/javascript";
|
||||||
document.head.appendChild(tagManagerScript);
|
document.head.appendChild(cdv);
|
||||||
|
}
|
||||||
|
|
||||||
const initScript = document.createElement("script");
|
// Google analytics
|
||||||
initScript.textContent = `
|
if (analytics) {
|
||||||
|
const tagManagerScript = document.createElement("script");
|
||||||
|
tagManagerScript.src =
|
||||||
|
"https://www.googletagmanager.com/gtag/js?id=UA-165342524-1";
|
||||||
|
tagManagerScript.setAttribute("async", "");
|
||||||
|
document.head.appendChild(tagManagerScript);
|
||||||
|
|
||||||
|
const initScript = document.createElement("script");
|
||||||
|
initScript.textContent = `
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
function gtag(){dataLayer.push(arguments);}
|
function gtag(){dataLayer.push(arguments);}
|
||||||
gtag('js', new Date());
|
gtag('js', new Date());
|
||||||
gtag('config', 'UA-165342524-1', { anonymize_ip: true });
|
gtag('config', 'UA-165342524-1', { anonymize_ip: true });
|
||||||
`;
|
`;
|
||||||
document.head.appendChild(initScript);
|
document.head.appendChild(initScript);
|
||||||
|
|
||||||
const abTestingScript = document.createElement("script");
|
const abTestingScript = document.createElement("script");
|
||||||
abTestingScript.setAttribute(
|
abTestingScript.setAttribute(
|
||||||
"src",
|
"src",
|
||||||
"https://www.googleoptimize.com/optimize.js?id=OPT-M5NHCV7"
|
"https://www.googleoptimize.com/optimize.js?id=OPT-M5NHCV7"
|
||||||
);
|
);
|
||||||
abTestingScript.setAttribute("async", "");
|
abTestingScript.setAttribute("async", "");
|
||||||
document.head.appendChild(abTestingScript);
|
document.head.appendChild(abTestingScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not need to preload in app or standalone
|
// Do not need to preload in app or standalone
|
||||||
if (!hasLocalFiles) {
|
if (!hasLocalFiles) {
|
||||||
// Preload essentials
|
// Preload essentials
|
||||||
const preloads = ["fonts/GameFont.woff2"];
|
const preloads = ["fonts/GameFont.woff2"];
|
||||||
|
|
||||||
preloads.forEach(src => {
|
preloads.forEach(src => {
|
||||||
const preloadLink = document.createElement("link");
|
const preloadLink = document.createElement("link");
|
||||||
preloadLink.rel = "preload";
|
preloadLink.rel = "preload";
|
||||||
preloadLink.href = cachebust("res/" + src);
|
preloadLink.href = cachebust("res/" + src);
|
||||||
if (src.endsWith(".woff2")) {
|
if (src.endsWith(".woff2")) {
|
||||||
preloadLink.setAttribute("crossorigin", "anonymous");
|
preloadLink.setAttribute("crossorigin", "anonymous");
|
||||||
preloadLink.setAttribute("as", "font");
|
preloadLink.setAttribute("as", "font");
|
||||||
} else {
|
} else {
|
||||||
preloadLink.setAttribute("as", "image");
|
preloadLink.setAttribute("as", "image");
|
||||||
}
|
}
|
||||||
document.head.appendChild(preloadLink);
|
document.head.appendChild(preloadLink);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadingSvg = `background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46YXV0bztiYWNrZ3JvdW5kOjAgMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgZGlzcGxheT0iYmxvY2siPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM5Mzc0NyIgc3Ryb2tlLXdpZHRoPSIzIiByPSI0MiIgc3Ryb2tlLWRhc2hhcnJheT0iMTk3LjkyMDMzNzE3NjE1Njk4IDY3Ljk3MzQ0NTcyNTM4NTY2IiB0cmFuc2Zvcm09InJvdGF0ZSg0OC4yNjUgNTAgNTApIj48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iNS41NTU1NTU1NTU1NTU1NTVzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIi8+PC9jaXJjbGU+PC9zdmc+")`;
|
const loadingSvg = `background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46YXV0bztiYWNrZ3JvdW5kOjAgMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgZGlzcGxheT0iYmxvY2siPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM5Mzc0NyIgc3Ryb2tlLXdpZHRoPSIzIiByPSI0MiIgc3Ryb2tlLWRhc2hhcnJheT0iMTk3LjkyMDMzNzE3NjE1Njk4IDY3Ljk3MzQ0NTcyNTM4NTY2IiB0cmFuc2Zvcm09InJvdGF0ZSg0OC4yNjUgNTAgNTApIj48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iNS41NTU1NTU1NTU1NTU1NTVzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIi8+PC9jaXJjbGU+PC9zdmc+")`;
|
||||||
|
|
||||||
const loadingCss = `
|
const loadingCss = `
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'GameFont';
|
font-family: 'GameFont';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
@ -158,52 +175,52 @@ function gulptasksHTML($, gulp, buildFolder) {
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const style = document.createElement("style");
|
const style = document.createElement("style");
|
||||||
style.setAttribute("type", "text/css");
|
style.setAttribute("type", "text/css");
|
||||||
style.textContent = loadingCss;
|
style.textContent = loadingCss;
|
||||||
document.head.appendChild(style);
|
document.head.appendChild(style);
|
||||||
|
|
||||||
// Append loader, but not in standalone (directly include bundle there)
|
// Append loader, but not in standalone (directly include bundle there)
|
||||||
if (standalone) {
|
if (standalone) {
|
||||||
const bundleScript = document.createElement("script");
|
const bundleScript = document.createElement("script");
|
||||||
bundleScript.type = "text/javascript";
|
bundleScript.type = "text/javascript";
|
||||||
bundleScript.src = "bundle.js";
|
bundleScript.src = "bundle.js";
|
||||||
if (integrity) {
|
if (integrity) {
|
||||||
bundleScript.setAttribute(
|
bundleScript.setAttribute(
|
||||||
"integrity",
|
"integrity",
|
||||||
computeIntegrityHash(path.join(buildFolder, "bundle.js"))
|
computeIntegrityHash(path.join(buildFolder, "bundle.js"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
document.head.appendChild(bundleScript);
|
document.head.appendChild(bundleScript);
|
||||||
} else {
|
|
||||||
const loadJs = document.createElement("script");
|
|
||||||
loadJs.type = "text/javascript";
|
|
||||||
let scriptContent = "";
|
|
||||||
scriptContent += `var bundleSrc = '${cachebust("bundle.js")}';\n`;
|
|
||||||
scriptContent += `var bundleSrcTranspiled = '${cachebust(
|
|
||||||
"bundle-transpiled.js"
|
|
||||||
)}';\n`;
|
|
||||||
|
|
||||||
if (integrity) {
|
|
||||||
scriptContent +=
|
|
||||||
"var bundleIntegrity = '" +
|
|
||||||
computeIntegrityHash(path.join(buildFolder, "bundle.js")) +
|
|
||||||
"';\n";
|
|
||||||
scriptContent +=
|
|
||||||
"var bundleIntegrityTranspiled = '" +
|
|
||||||
computeIntegrityHash(path.join(buildFolder, "bundle-transpiled.js")) +
|
|
||||||
"';\n";
|
|
||||||
} else {
|
} else {
|
||||||
scriptContent += "var bundleIntegrity = null;\n";
|
const loadJs = document.createElement("script");
|
||||||
scriptContent += "var bundleIntegrityTranspiled = null;\n";
|
loadJs.type = "text/javascript";
|
||||||
|
let scriptContent = "";
|
||||||
|
scriptContent += `var bundleSrc = '${cachebust("bundle.js")}';\n`;
|
||||||
|
scriptContent += `var bundleSrcTranspiled = '${cachebust(
|
||||||
|
"bundle-transpiled.js"
|
||||||
|
)}';\n`;
|
||||||
|
|
||||||
|
if (integrity) {
|
||||||
|
scriptContent +=
|
||||||
|
"var bundleIntegrity = '" +
|
||||||
|
computeIntegrityHash(path.join(buildFolder, "bundle.js")) +
|
||||||
|
"';\n";
|
||||||
|
scriptContent +=
|
||||||
|
"var bundleIntegrityTranspiled = '" +
|
||||||
|
computeIntegrityHash(path.join(buildFolder, "bundle-transpiled.js")) +
|
||||||
|
"';\n";
|
||||||
|
} else {
|
||||||
|
scriptContent += "var bundleIntegrity = null;\n";
|
||||||
|
scriptContent += "var bundleIntegrityTranspiled = null;\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
scriptContent += fs.readFileSync("./bundle-loader.js").toString();
|
||||||
|
loadJs.textContent = scriptContent;
|
||||||
|
document.head.appendChild(loadJs);
|
||||||
}
|
}
|
||||||
|
|
||||||
scriptContent += fs.readFileSync("./bundle-loader.js").toString();
|
const bodyContent = `
|
||||||
loadJs.textContent = scriptContent;
|
|
||||||
document.head.appendChild(loadJs);
|
|
||||||
}
|
|
||||||
|
|
||||||
const bodyContent = `
|
|
||||||
<div id="ll_fp">_</div>
|
<div id="ll_fp">_</div>
|
||||||
<div id="ll_p">
|
<div id="ll_p">
|
||||||
<span></span>
|
<span></span>
|
||||||
@ -211,8 +228,9 @@ function gulptasksHTML($, gulp, buildFolder) {
|
|||||||
</div >
|
</div >
|
||||||
`;
|
`;
|
||||||
|
|
||||||
document.body.innerHTML = bodyContent;
|
document.body.innerHTML = bodyContent;
|
||||||
})
|
}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
.pipe(
|
.pipe(
|
||||||
$.htmlmin({
|
$.htmlmin({
|
||||||
|
|||||||
@ -1,5 +1,15 @@
|
|||||||
|
const { existsSync } = require("fs");
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
const atlasToJson = require("./atlas2json");
|
||||||
|
|
||||||
|
const execute = command =>
|
||||||
|
require("child_process").execSync(command, {
|
||||||
|
encoding: "utf-8",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Globs for atlas resources
|
||||||
|
const rawImageResourcesGlobs = ["../res_raw/atlas.json", "../res_raw/**/*.png"];
|
||||||
|
|
||||||
// Globs for non-ui resources
|
// Globs for non-ui resources
|
||||||
const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"];
|
const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"];
|
||||||
@ -7,6 +17,9 @@ const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/
|
|||||||
// Globs for ui resources
|
// Globs for ui resources
|
||||||
const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"];
|
const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"];
|
||||||
|
|
||||||
|
// Link to download LibGDX runnable-texturepacker.jar
|
||||||
|
const runnableTPSource = "https://libgdx.badlogicgames.com/ci/nightlies/runnables/runnable-texturepacker.jar";
|
||||||
|
|
||||||
function gulptasksImageResources($, gulp, buildFolder) {
|
function gulptasksImageResources($, gulp, buildFolder) {
|
||||||
// Lossless options
|
// Lossless options
|
||||||
const minifyImagesOptsLossless = () => [
|
const minifyImagesOptsLossless = () => [
|
||||||
@ -59,19 +72,63 @@ function gulptasksImageResources($, gulp, buildFolder) {
|
|||||||
|
|
||||||
/////////////// ATLAS /////////////////////
|
/////////////// ATLAS /////////////////////
|
||||||
|
|
||||||
|
gulp.task("imgres.buildAtlas", cb => {
|
||||||
|
const config = JSON.stringify("../res_raw/atlas.json");
|
||||||
|
const source = JSON.stringify("../res_raw");
|
||||||
|
const dest = JSON.stringify("../res_built/atlas");
|
||||||
|
|
||||||
|
try {
|
||||||
|
// First check whether Java is installed
|
||||||
|
execute("java -version");
|
||||||
|
// Now check and try downloading runnable-texturepacker.jar (22MB)
|
||||||
|
if (!existsSync("./runnable-texturepacker.jar")) {
|
||||||
|
const safeLink = JSON.stringify(runnableTPSource);
|
||||||
|
const commands = [
|
||||||
|
// linux/macos if installed
|
||||||
|
`wget -O runnable-texturepacker.jar ${safeLink}`,
|
||||||
|
// linux/macos, latest windows 10
|
||||||
|
`curl -o runnable-texturepacker.jar ${safeLink}`,
|
||||||
|
// windows 10 / updated windows 7+
|
||||||
|
"powershell.exe -Command (new-object System.Net.WebClient)" +
|
||||||
|
`.DownloadFile(${safeLink.replace(/"/g, "'")}, 'runnable-texturepacker.jar')`,
|
||||||
|
// windows 7+, vulnerability exploit
|
||||||
|
`certutil.exe -urlcache -split -f ${safeLink} runnable-texturepacker.jar`,
|
||||||
|
];
|
||||||
|
|
||||||
|
while (commands.length) {
|
||||||
|
try {
|
||||||
|
execute(commands.shift());
|
||||||
|
break;
|
||||||
|
} catch {
|
||||||
|
if (!commands.length) {
|
||||||
|
throw new Error("Failed to download runnable-texturepacker.jar!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
execute(`java -jar runnable-texturepacker.jar ${source} ${dest} atlas0 ${config}`);
|
||||||
|
} catch {
|
||||||
|
console.warn("Building atlas failed. Java not found / unsupported version?");
|
||||||
|
}
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Converts .atlas LibGDX files to JSON
|
||||||
|
gulp.task("imgres.atlasToJson", cb => {
|
||||||
|
atlasToJson.convert("../res_built/atlas");
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
// Copies the atlas to the final destination
|
// Copies the atlas to the final destination
|
||||||
gulp.task("imgres.atlas", () => {
|
gulp.task("imgres.atlas", () => {
|
||||||
return gulp
|
return gulp.src(["../res_built/atlas/*.png"]).pipe(gulp.dest(resourcesDestFolder));
|
||||||
.src(["../res_built/atlas/*.png"])
|
|
||||||
.pipe($.cached("imgres.atlas"))
|
|
||||||
.pipe(gulp.dest(resourcesDestFolder));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Copies the atlas to the final destination after optimizing it (lossy compression)
|
// Copies the atlas to the final destination after optimizing it (lossy compression)
|
||||||
gulp.task("imgres.atlasOptimized", () => {
|
gulp.task("imgres.atlasOptimized", () => {
|
||||||
return gulp
|
return gulp
|
||||||
.src(["../res_built/atlas/*.png"])
|
.src(["../res_built/atlas/*.png"])
|
||||||
.pipe($.cached("imgres.atlasOptimized"))
|
|
||||||
.pipe(
|
.pipe(
|
||||||
$.if(
|
$.if(
|
||||||
fname => fileMustBeLossless(fname.history[0]),
|
fname => fileMustBeLossless(fname.history[0]),
|
||||||
@ -86,17 +143,15 @@ function gulptasksImageResources($, gulp, buildFolder) {
|
|||||||
|
|
||||||
// Copies all resources which are no ui resources
|
// Copies all resources which are no ui resources
|
||||||
gulp.task("imgres.copyNonImageResources", () => {
|
gulp.task("imgres.copyNonImageResources", () => {
|
||||||
return gulp
|
return gulp.src(nonImageResourcesGlobs).pipe(gulp.dest(resourcesDestFolder));
|
||||||
.src(nonImageResourcesGlobs)
|
|
||||||
.pipe($.cached("imgres.copyNonImageResources"))
|
|
||||||
.pipe(gulp.dest(resourcesDestFolder));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Copies all ui resources
|
// Copies all ui resources
|
||||||
gulp.task("imgres.copyImageResources", () => {
|
gulp.task("imgres.copyImageResources", () => {
|
||||||
return gulp
|
return gulp
|
||||||
.src(imageResourcesGlobs)
|
.src(imageResourcesGlobs)
|
||||||
.pipe($.cached("copyImageResources"))
|
|
||||||
|
.pipe($.cached("imgres.copyImageResources"))
|
||||||
.pipe(gulp.dest(path.join(resourcesDestFolder)));
|
.pipe(gulp.dest(path.join(resourcesDestFolder)));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -104,7 +159,6 @@ function gulptasksImageResources($, gulp, buildFolder) {
|
|||||||
gulp.task("imgres.copyImageResourcesOptimized", () => {
|
gulp.task("imgres.copyImageResourcesOptimized", () => {
|
||||||
return gulp
|
return gulp
|
||||||
.src(imageResourcesGlobs)
|
.src(imageResourcesGlobs)
|
||||||
.pipe($.cached("imgres.copyImageResourcesOptimized"))
|
|
||||||
.pipe(
|
.pipe(
|
||||||
$.if(
|
$.if(
|
||||||
fname => fileMustBeLossless(fname.history[0]),
|
fname => fileMustBeLossless(fname.history[0]),
|
||||||
@ -119,6 +173,8 @@ function gulptasksImageResources($, gulp, buildFolder) {
|
|||||||
gulp.task(
|
gulp.task(
|
||||||
"imgres.allOptimized",
|
"imgres.allOptimized",
|
||||||
gulp.parallel(
|
gulp.parallel(
|
||||||
|
"imgres.buildAtlas",
|
||||||
|
"imgres.atlasToJson",
|
||||||
"imgres.atlasOptimized",
|
"imgres.atlasOptimized",
|
||||||
"imgres.copyNonImageResources",
|
"imgres.copyNonImageResources",
|
||||||
"imgres.copyImageResourcesOptimized"
|
"imgres.copyImageResourcesOptimized"
|
||||||
@ -142,6 +198,7 @@ function gulptasksImageResources($, gulp, buildFolder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
rawImageResourcesGlobs,
|
||||||
nonImageResourcesGlobs,
|
nonImageResourcesGlobs,
|
||||||
imageResourcesGlobs,
|
imageResourcesGlobs,
|
||||||
gulptasksImageResources,
|
gulptasksImageResources,
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
"@types/node": "^12.7.5",
|
"@types/node": "^12.7.5",
|
||||||
"ajv": "^6.10.2",
|
"ajv": "^6.10.2",
|
||||||
"audiosprite": "^0.7.2",
|
"audiosprite": "^0.7.2",
|
||||||
|
"babel-core": "^6.26.3",
|
||||||
"babel-loader": "^8.1.0",
|
"babel-loader": "^8.1.0",
|
||||||
"browser-sync": "^2.26.10",
|
"browser-sync": "^2.26.10",
|
||||||
"circular-dependency-plugin": "^5.0.2",
|
"circular-dependency-plugin": "^5.0.2",
|
||||||
@ -45,8 +46,10 @@
|
|||||||
"query-string": "^6.8.1",
|
"query-string": "^6.8.1",
|
||||||
"rusha": "^0.8.13",
|
"rusha": "^0.8.13",
|
||||||
"serialize-error": "^3.0.0",
|
"serialize-error": "^3.0.0",
|
||||||
|
"stream-browserify": "^3.0.0",
|
||||||
"strictdom": "^1.0.1",
|
"strictdom": "^1.0.1",
|
||||||
"string-replace-webpack-plugin": "^0.1.3",
|
"string-replace-webpack-plugin": "^0.1.3",
|
||||||
|
"strip-indent": "^3.0.0",
|
||||||
"terser-webpack-plugin": "^1.1.0",
|
"terser-webpack-plugin": "^1.1.0",
|
||||||
"through2": "^3.0.1",
|
"through2": "^3.0.1",
|
||||||
"uglify-template-string-loader": "^1.1.0",
|
"uglify-template-string-loader": "^1.1.0",
|
||||||
@ -98,6 +101,7 @@
|
|||||||
"jimp": "^0.6.1",
|
"jimp": "^0.6.1",
|
||||||
"js-yaml": "^3.13.1",
|
"js-yaml": "^3.13.1",
|
||||||
"postcss-assets": "^5.0.0",
|
"postcss-assets": "^5.0.0",
|
||||||
|
"postcss-critical-split": "^2.5.3",
|
||||||
"postcss-preset-env": "^6.5.0",
|
"postcss-preset-env": "^6.5.0",
|
||||||
"postcss-round-subpixels": "^1.2.0",
|
"postcss-round-subpixels": "^1.2.0",
|
||||||
"postcss-unprefix": "^2.1.3",
|
"postcss-unprefix": "^2.1.3",
|
||||||
|
|||||||
66
gulp/release-uploader.js
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const fs = require("fs");
|
||||||
|
const execSync = require("child_process").execSync;
|
||||||
|
const { Octokit } = require("@octokit/rest");
|
||||||
|
const buildutils = require("./buildutils");
|
||||||
|
|
||||||
|
function gulptasksReleaseUploader($, gulp, buildFolder) {
|
||||||
|
const standaloneDir = path.join(__dirname, "..", "tmp_standalone_files");
|
||||||
|
const darwinApp = path.join(standaloneDir, "shapez.io-standalone-darwin-x64", "shapez.io-standalone.app");
|
||||||
|
const dmgName = "shapez.io-standalone.dmg";
|
||||||
|
const dmgPath = path.join(standaloneDir, "shapez.io-standalone-darwin-x64", dmgName);
|
||||||
|
|
||||||
|
gulp.task("standalone.uploadRelease.darwin64.cleanup", () => {
|
||||||
|
return gulp.src(dmgPath, { read: false, allowEmpty: true }).pipe($.clean({ force: true }));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("standalone.uploadRelease.darwin64.compress", cb => {
|
||||||
|
console.log("Packaging disk image", dmgPath);
|
||||||
|
execSync(`hdiutil create -format UDBZ -srcfolder ${darwinApp} ${dmgPath}`);
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("standalone.uploadRelease.darwin64.upload", async cb => {
|
||||||
|
const currentTag = buildutils.getTag();
|
||||||
|
|
||||||
|
const octokit = new Octokit({
|
||||||
|
auth: process.env.SHAPEZ_CLI_GITHUB_TOKEN
|
||||||
|
});
|
||||||
|
|
||||||
|
const createdRelease = await octokit.request("POST /repos/{owner}/{repo}/releases", {
|
||||||
|
owner: process.env.SHAPEZ_CLI_GITHUB_USER,
|
||||||
|
repo: "shapez.io",
|
||||||
|
tag_name: currentTag,
|
||||||
|
name: currentTag,
|
||||||
|
draft: true
|
||||||
|
});
|
||||||
|
|
||||||
|
const { data: { id, upload_url } } = createdRelease;
|
||||||
|
console.log(`Created release ${id} for tag ${currentTag}`);
|
||||||
|
|
||||||
|
const dmgContents = fs.readFileSync(dmgPath);
|
||||||
|
const dmgSize = fs.statSync(dmgPath).size;
|
||||||
|
console.log("Uploading", dmgContents.length / 1024 / 1024, "MB to", upload_url);
|
||||||
|
|
||||||
|
await octokit.request({
|
||||||
|
method: "POST",
|
||||||
|
url: upload_url,
|
||||||
|
headers: {
|
||||||
|
"content-type": "application/x-apple-diskimage"
|
||||||
|
},
|
||||||
|
name: dmgName,
|
||||||
|
data: dmgContents
|
||||||
|
});
|
||||||
|
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("standalone.uploadRelease.darwin64",
|
||||||
|
gulp.series(
|
||||||
|
"standalone.uploadRelease.darwin64.cleanup",
|
||||||
|
"standalone.uploadRelease.darwin64.compress",
|
||||||
|
"standalone.uploadRelease.darwin64.upload"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { gulptasksReleaseUploader };
|
||||||
@ -16,6 +16,12 @@ function gulptasksSounds($, gulp, buildFolder) {
|
|||||||
cacheDirName: "shapezio-precompiled-sounds",
|
cacheDirName: "shapezio-precompiled-sounds",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getFileCacheValue(file) {
|
||||||
|
const { _isVinyl, base, cwd, contents, history, stat, path } = file;
|
||||||
|
const encodedContents = Buffer.from(contents).toString("base64");
|
||||||
|
return { _isVinyl, base, cwd, contents: encodedContents, history, stat, path };
|
||||||
|
}
|
||||||
|
|
||||||
// Encodes the game music
|
// Encodes the game music
|
||||||
gulp.task("sounds.music", () => {
|
gulp.task("sounds.music", () => {
|
||||||
return gulp
|
return gulp
|
||||||
@ -34,6 +40,7 @@ function gulptasksSounds($, gulp, buildFolder) {
|
|||||||
{
|
{
|
||||||
name: "music",
|
name: "music",
|
||||||
fileCache,
|
fileCache,
|
||||||
|
value: getFileCacheValue,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -58,6 +65,7 @@ function gulptasksSounds($, gulp, buildFolder) {
|
|||||||
{
|
{
|
||||||
name: "music-high-quality",
|
name: "music-high-quality",
|
||||||
fileCache,
|
fileCache,
|
||||||
|
value: getFileCacheValue,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -110,7 +118,6 @@ function gulptasksSounds($, gulp, buildFolder) {
|
|||||||
return gulp
|
return gulp
|
||||||
.src(path.join(builtSoundsDir, "**", "*.mp3"))
|
.src(path.join(builtSoundsDir, "**", "*.mp3"))
|
||||||
.pipe($.plumber())
|
.pipe($.plumber())
|
||||||
.pipe($.cached("sounds.copy"))
|
|
||||||
.pipe(gulp.dest(path.join(buildFolder, "res", "sounds")));
|
.pipe(gulp.dest(path.join(buildFolder, "res", "sounds")));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
|
require("colors");
|
||||||
const packager = require("electron-packager");
|
const packager = require("electron-packager");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const { getVersion } = require("./buildutils");
|
const { getVersion } = require("./buildutils");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const fse = require("fs-extra");
|
const fse = require("fs-extra");
|
||||||
|
const buildutils = require("./buildutils");
|
||||||
const execSync = require("child_process").execSync;
|
const execSync = require("child_process").execSync;
|
||||||
|
|
||||||
function gulptasksStandalone($, gulp) {
|
function gulptasksStandalone($, gulp) {
|
||||||
@ -46,6 +48,20 @@ function gulptasksStandalone($, gulp) {
|
|||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
gulp.task("standalone.prepareVDF", cb => {
|
||||||
|
const hash = buildutils.getRevision();
|
||||||
|
|
||||||
|
const steampipeDir = path.join(__dirname, "steampipe", "scripts");
|
||||||
|
const templateContents = fs
|
||||||
|
.readFileSync(path.join(steampipeDir, "app.vdf.template"), { encoding: "utf-8" })
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
const convertedContents = templateContents.replace("$DESC$", "Commit " + hash);
|
||||||
|
fs.writeFileSync(path.join(steampipeDir, "app.vdf"), convertedContents);
|
||||||
|
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
gulp.task("standalone.prepare.minifyCode", () => {
|
gulp.task("standalone.prepare.minifyCode", () => {
|
||||||
return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir));
|
return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir));
|
||||||
});
|
});
|
||||||
@ -80,8 +96,9 @@ function gulptasksStandalone($, gulp) {
|
|||||||
* @param {'win32'|'linux'|'darwin'} platform
|
* @param {'win32'|'linux'|'darwin'} platform
|
||||||
* @param {'x64'|'ia32'} arch
|
* @param {'x64'|'ia32'} arch
|
||||||
* @param {function():void} cb
|
* @param {function():void} cb
|
||||||
|
* @param {boolean=} isRelease
|
||||||
*/
|
*/
|
||||||
function packageStandalone(platform, arch, cb) {
|
function packageStandalone(platform, arch, cb, isRelease = true) {
|
||||||
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
|
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
|
||||||
|
|
||||||
packager({
|
packager({
|
||||||
@ -99,6 +116,21 @@ function gulptasksStandalone($, gulp) {
|
|||||||
overwrite: true,
|
overwrite: true,
|
||||||
appBundleId: "io.shapez.standalone",
|
appBundleId: "io.shapez.standalone",
|
||||||
appCategoryType: "public.app-category.games",
|
appCategoryType: "public.app-category.games",
|
||||||
|
...(isRelease &&
|
||||||
|
platform === "darwin" && {
|
||||||
|
osxSign: {
|
||||||
|
"identity": process.env.SHAPEZ_CLI_APPLE_CERT_NAME,
|
||||||
|
"hardened-runtime": true,
|
||||||
|
"hardenedRuntime": true,
|
||||||
|
"entitlements": "entitlements.plist",
|
||||||
|
"entitlements-inherit": "entitlements.plist",
|
||||||
|
"signature-flags": "library",
|
||||||
|
},
|
||||||
|
osxNotarize: {
|
||||||
|
appleId: process.env.SHAPEZ_CLI_APPLE_ID,
|
||||||
|
appleIdPassword: "@keychain:SHAPEZ_CLI_APPLE_ID",
|
||||||
|
},
|
||||||
|
}),
|
||||||
}).then(
|
}).then(
|
||||||
appPaths => {
|
appPaths => {
|
||||||
console.log("Packages created:", appPaths);
|
console.log("Packages created:", appPaths);
|
||||||
@ -123,7 +155,15 @@ function gulptasksStandalone($, gulp) {
|
|||||||
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
|
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (platform === "darwin") {
|
if (process.platform === "win32" && platform === "darwin") {
|
||||||
|
console.warn(
|
||||||
|
"Cross-building for macOS on Windows: dereferencing symlinks.\n".red +
|
||||||
|
"This will nearly double app size and make code signature invalid. Sorry!\n"
|
||||||
|
.red.bold +
|
||||||
|
"For more information, see " +
|
||||||
|
"https://github.com/electron/electron-packager/issues/71".underline
|
||||||
|
);
|
||||||
|
|
||||||
// Clear up framework folders
|
// Clear up framework folders
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path.join(appPath, "play.sh"),
|
path.join(appPath, "play.sh"),
|
||||||
@ -175,6 +215,9 @@ function gulptasksStandalone($, gulp) {
|
|||||||
gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb));
|
gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb));
|
||||||
gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb));
|
gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb));
|
||||||
gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb));
|
gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb));
|
||||||
|
gulp.task("standalone.package.prod.darwin64.unsigned", cb =>
|
||||||
|
packageStandalone("darwin", "x64", cb, false)
|
||||||
|
);
|
||||||
|
|
||||||
gulp.task(
|
gulp.task(
|
||||||
"standalone.package.prod",
|
"standalone.package.prod",
|
||||||
|
|||||||
2
gulp/steampipe/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
steamtemp
|
||||||
|
app.vdf
|
||||||
15
gulp/steampipe/scripts/app.vdf.template
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
"appbuild"
|
||||||
|
{
|
||||||
|
"appid" "1318690"
|
||||||
|
"desc" "$DESC$"
|
||||||
|
"buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp"
|
||||||
|
"contentroot" ""
|
||||||
|
"setlive" ""
|
||||||
|
"preview" "0"
|
||||||
|
"local" ""
|
||||||
|
"depots"
|
||||||
|
{
|
||||||
|
"1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf"
|
||||||
|
"1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf"
|
||||||
|
}
|
||||||
|
}
|
||||||
12
gulp/steampipe/scripts/linux.vdf
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
"DepotBuildConfig"
|
||||||
|
{
|
||||||
|
"DepotID" "1318692"
|
||||||
|
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64"
|
||||||
|
"FileMapping"
|
||||||
|
{
|
||||||
|
"LocalPath" "*"
|
||||||
|
"DepotPath" "."
|
||||||
|
"recursive" "1"
|
||||||
|
}
|
||||||
|
"FileExclusion" "*.pdb"
|
||||||
|
}
|
||||||
12
gulp/steampipe/scripts/windows.vdf
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
"DepotBuildConfig"
|
||||||
|
{
|
||||||
|
"DepotID" "1318691"
|
||||||
|
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64"
|
||||||
|
"FileMapping"
|
||||||
|
{
|
||||||
|
"LocalPath" "*"
|
||||||
|
"DepotPath" "."
|
||||||
|
"recursive" "1"
|
||||||
|
}
|
||||||
|
"FileExclusion" "*.pdb"
|
||||||
|
}
|
||||||
4
gulp/steampipe/upload.bat
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@echo off
|
||||||
|
cmd /c gulp standalone.prepareVDF
|
||||||
|
steamcmd +login %STEAM_UPLOAD_SHAPEZ_ID% %STEAM_UPLOAD_SHAPEZ_USER% +run_app_build %cd%/scripts/app.vdf +quit
|
||||||
|
start https://partner.steamgames.com/apps/builds/1318690
|
||||||
@ -1,6 +1,9 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
const fs = require("fs");
|
||||||
const yaml = require("gulp-yaml");
|
const gulpYaml = require("gulp-yaml");
|
||||||
|
const YAML = require("yaml");
|
||||||
|
const stripIndent = require("strip-indent");
|
||||||
|
const trim = require("trim");
|
||||||
|
|
||||||
const translationsSourceDir = path.join(__dirname, "..", "translations");
|
const translationsSourceDir = path.join(__dirname, "..", "translations");
|
||||||
const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp");
|
const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp");
|
||||||
@ -10,11 +13,75 @@ function gulptasksTranslations($, gulp) {
|
|||||||
return gulp
|
return gulp
|
||||||
.src(path.join(translationsSourceDir, "*.yaml"))
|
.src(path.join(translationsSourceDir, "*.yaml"))
|
||||||
.pipe($.plumber())
|
.pipe($.plumber())
|
||||||
.pipe(yaml({ space: 2, safe: true }))
|
.pipe(gulpYaml({ space: 2, safe: true }))
|
||||||
.pipe(gulp.dest(translationsJsonDir));
|
.pipe(gulp.dest(translationsJsonDir));
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task("translations.fullBuild", gulp.series("translations.convertToJson"));
|
gulp.task("translations.fullBuild", gulp.series("translations.convertToJson"));
|
||||||
|
|
||||||
|
gulp.task("translations.prepareSteamPage", cb => {
|
||||||
|
const files = fs.readdirSync(translationsSourceDir);
|
||||||
|
|
||||||
|
files
|
||||||
|
.filter(name => name.endsWith(".yaml"))
|
||||||
|
.forEach(fname => {
|
||||||
|
const languageName = fname.replace(".yaml", "");
|
||||||
|
const abspath = path.join(translationsSourceDir, fname);
|
||||||
|
|
||||||
|
const destpath = path.join(translationsSourceDir, "tmp", languageName + "-store.txt");
|
||||||
|
|
||||||
|
const contents = fs.readFileSync(abspath, { encoding: "utf-8" });
|
||||||
|
const data = YAML.parse(contents);
|
||||||
|
|
||||||
|
const storePage = data.steamPage;
|
||||||
|
|
||||||
|
const content = `
|
||||||
|
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
|
||||||
|
|
||||||
|
${storePage.intro.replace(/\n/gi, "\n\n")}
|
||||||
|
|
||||||
|
[h2]${storePage.title_advantages}[/h2]
|
||||||
|
|
||||||
|
[list]
|
||||||
|
${storePage.advantages
|
||||||
|
.map(x => "[*] " + x.replace(/<b>/, "[b]").replace(/<\/b>/, "[/b]"))
|
||||||
|
.join("\n")}
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
[h2]${storePage.title_future}[/h2]
|
||||||
|
|
||||||
|
[list]
|
||||||
|
${storePage.planned
|
||||||
|
.map(x => "[*] " + x.replace(/<b>/, "[b]").replace(/<\/b>/, "[/b]"))
|
||||||
|
.join("\n")}
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
[h2]${storePage.title_open_source}[/h2]
|
||||||
|
|
||||||
|
${storePage.text_open_source.replace(/\n/gi, "\n\n")}
|
||||||
|
|
||||||
|
[h2]${storePage.title_links}[/h2]
|
||||||
|
|
||||||
|
[list]
|
||||||
|
[*] [url=https://discord.com/invite/HN7EVzV]${storePage.links.discord}[/url]
|
||||||
|
[*] [url=https://trello.com/b/ISQncpJP/shapezio]${storePage.links.roadmap}[/url]
|
||||||
|
[*] [url=https://www.reddit.com/r/shapezio]${storePage.links.subreddit}[/url]
|
||||||
|
[*] [url=https://github.com/tobspr/shapez.io]${storePage.links.source_code}[/url]
|
||||||
|
[*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]${
|
||||||
|
storePage.links.translate
|
||||||
|
}[/url]
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
fs.writeFileSync(destpath, trim(content.replace(/(\n[ \t\r]*)/gi, "\n")), {
|
||||||
|
encoding: "utf-8",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
cb();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
255
gulp/yarn.lock
@ -1923,6 +1923,62 @@ axios@0.19.0:
|
|||||||
follow-redirects "1.5.10"
|
follow-redirects "1.5.10"
|
||||||
is-buffer "^2.0.2"
|
is-buffer "^2.0.2"
|
||||||
|
|
||||||
|
babel-code-frame@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
||||||
|
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.3"
|
||||||
|
esutils "^2.0.2"
|
||||||
|
js-tokens "^3.0.2"
|
||||||
|
|
||||||
|
babel-core@^6.26.0, babel-core@^6.26.3:
|
||||||
|
version "6.26.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
|
||||||
|
integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
|
||||||
|
dependencies:
|
||||||
|
babel-code-frame "^6.26.0"
|
||||||
|
babel-generator "^6.26.0"
|
||||||
|
babel-helpers "^6.24.1"
|
||||||
|
babel-messages "^6.23.0"
|
||||||
|
babel-register "^6.26.0"
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
babel-template "^6.26.0"
|
||||||
|
babel-traverse "^6.26.0"
|
||||||
|
babel-types "^6.26.0"
|
||||||
|
babylon "^6.18.0"
|
||||||
|
convert-source-map "^1.5.1"
|
||||||
|
debug "^2.6.9"
|
||||||
|
json5 "^0.5.1"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
path-is-absolute "^1.0.1"
|
||||||
|
private "^0.1.8"
|
||||||
|
slash "^1.0.0"
|
||||||
|
source-map "^0.5.7"
|
||||||
|
|
||||||
|
babel-generator@^6.26.0:
|
||||||
|
version "6.26.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
|
||||||
|
integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
|
||||||
|
dependencies:
|
||||||
|
babel-messages "^6.23.0"
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
babel-types "^6.26.0"
|
||||||
|
detect-indent "^4.0.0"
|
||||||
|
jsesc "^1.3.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
source-map "^0.5.7"
|
||||||
|
trim-right "^1.0.1"
|
||||||
|
|
||||||
|
babel-helpers@^6.24.1:
|
||||||
|
version "6.24.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
|
||||||
|
integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
|
||||||
|
dependencies:
|
||||||
|
babel-runtime "^6.22.0"
|
||||||
|
babel-template "^6.24.1"
|
||||||
|
|
||||||
babel-loader@^8.1.0:
|
babel-loader@^8.1.0:
|
||||||
version "8.1.0"
|
version "8.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
|
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
|
||||||
@ -1934,6 +1990,13 @@ babel-loader@^8.1.0:
|
|||||||
pify "^4.0.1"
|
pify "^4.0.1"
|
||||||
schema-utils "^2.6.5"
|
schema-utils "^2.6.5"
|
||||||
|
|
||||||
|
babel-messages@^6.23.0:
|
||||||
|
version "6.23.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
|
||||||
|
integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
|
||||||
|
dependencies:
|
||||||
|
babel-runtime "^6.22.0"
|
||||||
|
|
||||||
babel-plugin-closure-elimination@^1.3.0:
|
babel-plugin-closure-elimination@^1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz#3217fbf6d416dfdf14ff41a8a34e4d0a6bfc22b2"
|
resolved "https://registry.yarnpkg.com/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz#3217fbf6d416dfdf14ff41a8a34e4d0a6bfc22b2"
|
||||||
@ -1956,6 +2019,27 @@ babel-plugin-dynamic-import-node@^2.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
object.assign "^4.1.0"
|
object.assign "^4.1.0"
|
||||||
|
|
||||||
|
babel-register@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
|
||||||
|
integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
|
||||||
|
dependencies:
|
||||||
|
babel-core "^6.26.0"
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
core-js "^2.5.0"
|
||||||
|
home-or-tmp "^2.0.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
|
source-map-support "^0.4.15"
|
||||||
|
|
||||||
|
babel-runtime@^6.22.0, babel-runtime@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
|
||||||
|
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
|
||||||
|
dependencies:
|
||||||
|
core-js "^2.4.0"
|
||||||
|
regenerator-runtime "^0.11.0"
|
||||||
|
|
||||||
babel-runtime@^7.0.0-beta.3:
|
babel-runtime@^7.0.0-beta.3:
|
||||||
version "7.0.0-beta.3"
|
version "7.0.0-beta.3"
|
||||||
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2"
|
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2"
|
||||||
@ -1964,6 +2048,47 @@ babel-runtime@^7.0.0-beta.3:
|
|||||||
core-js "^2.4.0"
|
core-js "^2.4.0"
|
||||||
regenerator-runtime "^0.11.0"
|
regenerator-runtime "^0.11.0"
|
||||||
|
|
||||||
|
babel-template@^6.24.1, babel-template@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
|
||||||
|
integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
|
||||||
|
dependencies:
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
babel-traverse "^6.26.0"
|
||||||
|
babel-types "^6.26.0"
|
||||||
|
babylon "^6.18.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
|
||||||
|
babel-traverse@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
|
||||||
|
integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
|
||||||
|
dependencies:
|
||||||
|
babel-code-frame "^6.26.0"
|
||||||
|
babel-messages "^6.23.0"
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
babel-types "^6.26.0"
|
||||||
|
babylon "^6.18.0"
|
||||||
|
debug "^2.6.8"
|
||||||
|
globals "^9.18.0"
|
||||||
|
invariant "^2.2.2"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
|
||||||
|
babel-types@^6.26.0:
|
||||||
|
version "6.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
|
||||||
|
integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
|
||||||
|
dependencies:
|
||||||
|
babel-runtime "^6.26.0"
|
||||||
|
esutils "^2.0.2"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
to-fast-properties "^1.0.3"
|
||||||
|
|
||||||
|
babylon@^6.18.0:
|
||||||
|
version "6.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
|
||||||
|
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
|
||||||
|
|
||||||
bach@^1.0.0:
|
bach@^1.0.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880"
|
resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880"
|
||||||
@ -2965,6 +3090,11 @@ color@^3.0.0:
|
|||||||
color-convert "^1.9.1"
|
color-convert "^1.9.1"
|
||||||
color-string "^1.5.2"
|
color-string "^1.5.2"
|
||||||
|
|
||||||
|
colorette@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
||||||
|
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
||||||
|
|
||||||
colors@1.0.x:
|
colors@1.0.x:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
||||||
@ -3135,7 +3265,7 @@ content-disposition@^0.5.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer "5.1.2"
|
safe-buffer "5.1.2"
|
||||||
|
|
||||||
convert-source-map@^1.5.0, convert-source-map@^1.7.0:
|
convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
||||||
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
|
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
|
||||||
@ -3190,6 +3320,11 @@ core-js@^2.4.0, core-js@^2.5.7:
|
|||||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
|
||||||
integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
|
integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
|
||||||
|
|
||||||
|
core-js@^2.5.0:
|
||||||
|
version "2.6.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
|
||||||
|
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
|
||||||
|
|
||||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
@ -3581,7 +3716,7 @@ dateformat@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
|
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
|
||||||
integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=
|
integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=
|
||||||
|
|
||||||
debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
|
debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||||
@ -3808,6 +3943,13 @@ detect-file@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
|
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
|
||||||
integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
|
integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
|
||||||
|
|
||||||
|
detect-indent@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
|
||||||
|
integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
|
||||||
|
dependencies:
|
||||||
|
repeating "^2.0.0"
|
||||||
|
|
||||||
detect-libc@^1.0.2:
|
detect-libc@^1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
||||||
@ -5607,7 +5749,7 @@ globals@^11.1.0, globals@^11.7.0:
|
|||||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||||
|
|
||||||
globals@^9.2.0:
|
globals@^9.18.0, globals@^9.2.0:
|
||||||
version "9.18.0"
|
version "9.18.0"
|
||||||
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
||||||
integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
|
integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
|
||||||
@ -6265,6 +6407,14 @@ hmac-drbg@^1.0.0:
|
|||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.0"
|
||||||
minimalistic-crypto-utils "^1.0.1"
|
minimalistic-crypto-utils "^1.0.1"
|
||||||
|
|
||||||
|
home-or-tmp@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
|
||||||
|
integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
|
||||||
|
dependencies:
|
||||||
|
os-homedir "^1.0.0"
|
||||||
|
os-tmpdir "^1.0.1"
|
||||||
|
|
||||||
homedir-polyfill@^1.0.1:
|
homedir-polyfill@^1.0.1:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
|
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
|
||||||
@ -6602,7 +6752,7 @@ inherits@1:
|
|||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
|
||||||
integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=
|
integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=
|
||||||
|
|
||||||
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
@ -7172,6 +7322,11 @@ js-levenshtein@^1.1.3:
|
|||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||||
|
|
||||||
|
js-tokens@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||||
|
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
||||||
|
|
||||||
js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4:
|
js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4:
|
||||||
version "3.13.1"
|
version "3.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||||
@ -7216,6 +7371,11 @@ jsdom@12.2.0:
|
|||||||
ws "^6.1.0"
|
ws "^6.1.0"
|
||||||
xml-name-validator "^3.0.0"
|
xml-name-validator "^3.0.0"
|
||||||
|
|
||||||
|
jsesc@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
|
||||||
|
integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
|
||||||
|
|
||||||
jsesc@^2.5.1:
|
jsesc@^2.5.1:
|
||||||
version "2.5.2"
|
version "2.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||||
@ -7263,7 +7423,7 @@ json-stringify-safe@~5.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||||
|
|
||||||
json5@^0.5.0:
|
json5@^0.5.0, json5@^0.5.1:
|
||||||
version "0.5.1"
|
version "0.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
||||||
integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
|
integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
|
||||||
@ -7463,6 +7623,14 @@ limiter@^1.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.4.tgz#87c9c3972d389fdb0ba67a45aadbc5d2f8413bc1"
|
resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.4.tgz#87c9c3972d389fdb0ba67a45aadbc5d2f8413bc1"
|
||||||
integrity sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==
|
integrity sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==
|
||||||
|
|
||||||
|
line-column@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
|
||||||
|
integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=
|
||||||
|
dependencies:
|
||||||
|
isarray "^1.0.0"
|
||||||
|
isobject "^2.0.0"
|
||||||
|
|
||||||
load-bmfont@^1.3.1, load-bmfont@^1.4.0:
|
load-bmfont@^1.3.1, load-bmfont@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
|
resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
|
||||||
@ -7851,6 +8019,11 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12
|
|||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
||||||
|
|
||||||
|
lodash@^4.17.4:
|
||||||
|
version "4.17.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||||
|
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||||
|
|
||||||
lodash@~1.0.1:
|
lodash@~1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
|
||||||
@ -8198,6 +8371,11 @@ min-document@^2.19.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
dom-walk "^0.1.0"
|
dom-walk "^0.1.0"
|
||||||
|
|
||||||
|
min-indent@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
||||||
|
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
|
||||||
|
|
||||||
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
||||||
@ -8399,6 +8577,11 @@ nan@^2.12.1, nan@^2.13.2:
|
|||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
||||||
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
|
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
|
||||||
|
|
||||||
|
nanoid@^3.1.12:
|
||||||
|
version "3.1.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"
|
||||||
|
integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==
|
||||||
|
|
||||||
nanomatch@^1.2.9:
|
nanomatch@^1.2.9:
|
||||||
version "1.2.13"
|
version "1.2.13"
|
||||||
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
|
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
|
||||||
@ -8977,7 +9160,7 @@ os-locale@^3.1.0:
|
|||||||
lcid "^2.0.0"
|
lcid "^2.0.0"
|
||||||
mem "^4.0.0"
|
mem "^4.0.0"
|
||||||
|
|
||||||
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
|
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||||
@ -9299,7 +9482,7 @@ path-exists@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||||
|
|
||||||
path-is-absolute@^1.0.0:
|
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||||
@ -9623,6 +9806,14 @@ postcss-convert-values@^4.0.1:
|
|||||||
postcss "^7.0.0"
|
postcss "^7.0.0"
|
||||||
postcss-value-parser "^3.0.0"
|
postcss-value-parser "^3.0.0"
|
||||||
|
|
||||||
|
postcss-critical-split@^2.5.3:
|
||||||
|
version "2.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss-critical-split/-/postcss-critical-split-2.5.3.tgz#9339d3699f6363d0a3ad0952420dc9faa181363b"
|
||||||
|
integrity sha512-FDG+evU4RBGM9/LQ5nCktzFKjYH2O/SLollJwtrdGagXXbMvk620Bc9o8WpqHJnu573uxVkx9lhob1HZvSWhZg==
|
||||||
|
dependencies:
|
||||||
|
merge "^1.2.0"
|
||||||
|
postcss "^6.0.1"
|
||||||
|
|
||||||
postcss-custom-media@^7.0.8:
|
postcss-custom-media@^7.0.8:
|
||||||
version "7.0.8"
|
version "7.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c"
|
resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c"
|
||||||
@ -10181,7 +10372,7 @@ postcss@^5.0.2:
|
|||||||
source-map "^0.5.6"
|
source-map "^0.5.6"
|
||||||
supports-color "^3.2.3"
|
supports-color "^3.2.3"
|
||||||
|
|
||||||
postcss@^6.0.10, postcss@^6.0.9:
|
postcss@^6.0.1, postcss@^6.0.10, postcss@^6.0.9:
|
||||||
version "6.0.23"
|
version "6.0.23"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
|
||||||
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
|
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
|
||||||
@ -10199,6 +10390,16 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2
|
|||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
supports-color "^6.1.0"
|
supports-color "^6.1.0"
|
||||||
|
|
||||||
|
postcss@^8.1.1:
|
||||||
|
version "8.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.1.tgz#c3a287dd10e4f6c84cb3791052b96a5d859c9389"
|
||||||
|
integrity sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg==
|
||||||
|
dependencies:
|
||||||
|
colorette "^1.2.1"
|
||||||
|
line-column "^1.0.2"
|
||||||
|
nanoid "^3.1.12"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
prelude-ls@~1.1.2:
|
prelude-ls@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
@ -10229,7 +10430,7 @@ pretty-hrtime@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
|
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
|
||||||
integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
|
integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
|
||||||
|
|
||||||
private@^0.1.6, private@~0.1.5:
|
private@^0.1.6, private@^0.1.8, private@~0.1.5:
|
||||||
version "0.1.8"
|
version "0.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||||
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
|
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
|
||||||
@ -10560,7 +10761,7 @@ readable-stream@^1.0.27-1, readable-stream@~1.1.9:
|
|||||||
isarray "0.0.1"
|
isarray "0.0.1"
|
||||||
string_decoder "~0.10.x"
|
string_decoder "~0.10.x"
|
||||||
|
|
||||||
readable-stream@^3.0.2, readable-stream@^3.1.1:
|
readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||||
@ -11359,6 +11560,11 @@ simple-swizzle@^0.2.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.3.1"
|
is-arrayish "^0.3.1"
|
||||||
|
|
||||||
|
slash@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
||||||
|
integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
|
||||||
|
|
||||||
slash@^3.0.0:
|
slash@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||||
@ -11520,6 +11726,13 @@ source-map-resolve@^0.5.0:
|
|||||||
source-map-url "^0.4.0"
|
source-map-url "^0.4.0"
|
||||||
urix "^0.1.0"
|
urix "^0.1.0"
|
||||||
|
|
||||||
|
source-map-support@^0.4.15:
|
||||||
|
version "0.4.18"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
|
||||||
|
integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
|
||||||
|
dependencies:
|
||||||
|
source-map "^0.5.6"
|
||||||
|
|
||||||
source-map-support@~0.5.12:
|
source-map-support@~0.5.12:
|
||||||
version "0.5.13"
|
version "0.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
|
||||||
@ -11540,7 +11753,7 @@ source-map@^0.4.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
amdefine ">=0.0.4"
|
amdefine ">=0.0.4"
|
||||||
|
|
||||||
source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0:
|
source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0:
|
||||||
version "0.5.7"
|
version "0.5.7"
|
||||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||||
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
|
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
|
||||||
@ -11705,6 +11918,14 @@ stream-browserify@^2.0.1:
|
|||||||
inherits "~2.0.1"
|
inherits "~2.0.1"
|
||||||
readable-stream "^2.0.2"
|
readable-stream "^2.0.2"
|
||||||
|
|
||||||
|
stream-browserify@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
|
||||||
|
integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
|
||||||
|
dependencies:
|
||||||
|
inherits "~2.0.4"
|
||||||
|
readable-stream "^3.5.0"
|
||||||
|
|
||||||
stream-consume@~0.1.0:
|
stream-consume@~0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"
|
resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"
|
||||||
@ -11937,6 +12158,13 @@ strip-indent@^1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
get-stdin "^4.0.1"
|
get-stdin "^4.0.1"
|
||||||
|
|
||||||
|
strip-indent@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
|
||||||
|
integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
|
||||||
|
dependencies:
|
||||||
|
min-indent "^1.0.0"
|
||||||
|
|
||||||
strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
|
strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||||
@ -12374,6 +12602,11 @@ to-buffer@^1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
||||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
||||||
|
|
||||||
|
to-fast-properties@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
||||||
|
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
|
||||||
|
|
||||||
to-fast-properties@^2.0.0:
|
to-fast-properties@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
"@types/cordova": "^0.0.34",
|
"@types/cordova": "^0.0.34",
|
||||||
"@types/filesystem": "^0.0.29",
|
"@types/filesystem": "^0.0.29",
|
||||||
"ajv": "^6.10.2",
|
"ajv": "^6.10.2",
|
||||||
|
"babel-core": "^6.26.3",
|
||||||
"babel-loader": "^8.0.4",
|
"babel-loader": "^8.0.4",
|
||||||
"circular-dependency-plugin": "^5.0.2",
|
"circular-dependency-plugin": "^5.0.2",
|
||||||
"circular-json": "^0.5.9",
|
"circular-json": "^0.5.9",
|
||||||
@ -49,6 +50,7 @@
|
|||||||
"markdown-loader": "^4.0.0",
|
"markdown-loader": "^4.0.0",
|
||||||
"match-all": "^1.2.5",
|
"match-all": "^1.2.5",
|
||||||
"phonegap-plugin-mobile-accessibility": "^1.0.5",
|
"phonegap-plugin-mobile-accessibility": "^1.0.5",
|
||||||
|
"postcss": ">=5.0.0",
|
||||||
"promise-polyfill": "^8.1.0",
|
"promise-polyfill": "^8.1.0",
|
||||||
"query-string": "^6.8.1",
|
"query-string": "^6.8.1",
|
||||||
"rusha": "^0.8.13",
|
"rusha": "^0.8.13",
|
||||||
@ -71,6 +73,7 @@
|
|||||||
"yawn-yaml": "^1.5.0"
|
"yawn-yaml": "^1.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@octokit/rest": "^18.0.6",
|
||||||
"@typescript-eslint/eslint-plugin": "3.0.1",
|
"@typescript-eslint/eslint-plugin": "3.0.1",
|
||||||
"@typescript-eslint/parser": "3.0.1",
|
"@typescript-eslint/parser": "3.0.1",
|
||||||
"autoprefixer": "^9.4.3",
|
"autoprefixer": "^9.4.3",
|
||||||
|
|||||||
BIN
res/ui/building_icons/analyzer.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
res/ui/building_icons/balancer.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.5 KiB |
BIN
res/ui/building_icons/comparator.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.2 KiB |
BIN
res/ui/building_icons/item_producer.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.4 KiB |
BIN
res/ui/building_icons/storage.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
res/ui/building_icons/transistor.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.8 KiB |
BIN
res/ui/building_tutorials/analyzer.png
Normal file
|
After Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
BIN
res/ui/building_tutorials/balancer-splitter.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
BIN
res/ui/building_tutorials/comparator.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
res/ui/building_tutorials/constant_signal.png
Normal file
|
After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
BIN
res/ui/building_tutorials/display.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
res/ui/building_tutorials/item_producer.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
res/ui/building_tutorials/lever.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
res/ui/building_tutorials/logic_gate-and.png
Normal file
|
After Width: | Height: | Size: 281 KiB |
BIN
res/ui/building_tutorials/logic_gate-not.png
Normal file
|
After Width: | Height: | Size: 287 KiB |
BIN
res/ui/building_tutorials/logic_gate-or.png
Normal file
|
After Width: | Height: | Size: 283 KiB |
BIN
res/ui/building_tutorials/logic_gate-xor.png
Normal file
|
After Width: | Height: | Size: 286 KiB |
BIN
res/ui/building_tutorials/painter-mirrored.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 44 KiB |
BIN
res/ui/building_tutorials/reader.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 34 KiB |
BIN
res/ui/building_tutorials/rotater-rotate180.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 106 KiB |
BIN
res/ui/building_tutorials/storage.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
res/ui/building_tutorials/transistor.png
Normal file
|
After Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 40 KiB |
BIN
res/ui/building_tutorials/virtual_processor-cutter.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
res/ui/building_tutorials/virtual_processor-painter.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
res/ui/building_tutorials/virtual_processor-rotater.png
Normal file
|
After Width: | Height: | Size: 132 KiB |
BIN
res/ui/building_tutorials/virtual_processor-stacker.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
res/ui/building_tutorials/virtual_processor-unstacker.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
res/ui/building_tutorials/wire-second.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
res/ui/building_tutorials/wire.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
res/ui/building_tutorials/wire_tunnel.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
res/ui/get_on_steam_with_price.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
res/ui/icons/advantage_buildings.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
res/ui/icons/advantage_dark_mode.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |