1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Merge branch 'master' into puzzle-mode

This commit is contained in:
Greg Considine 2021-03-22 11:08:22 -04:00
commit ddab63bd2e
16 changed files with 395 additions and 364 deletions

View File

@ -1,12 +1,12 @@
/* eslint-disable quotes,no-undef */ /* eslint-disable quotes,no-undef */
const { app, BrowserWindow, Menu, MenuItem, session } = require("electron"); const { app, BrowserWindow, Menu, MenuItem, ipcMain, shell } = require("electron");
const path = require("path"); const path = require("path");
const url = require("url"); const url = require("url");
const childProcess = require("child_process");
const { ipcMain, shell } = require("electron");
const fs = require("fs"); const fs = require("fs");
const steam = require('./steam'); const steam = require("./steam");
const asyncLock = require("async-lock");
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;
@ -153,7 +153,82 @@ ipcMain.on("exit-app", (event, flag) => {
app.quit(); app.quit();
}); });
function performFsJob(job) { let renameCounter = 1;
const fileLock = new asyncLock({
timeout: 30000,
maxPending: 1000,
});
function niceFileName(filename) {
return filename.replace(storePath, "@");
}
async function writeFileSafe(filename, contents) {
++renameCounter;
const prefix = "[ " + renameCounter + ":" + niceFileName(filename) + " ] ";
const transactionId = String(new Date().getTime()) + "." + renameCounter;
if (fileLock.isBusy()) {
console.warn(prefix, "Concurrent write process on", filename);
}
fileLock.acquire(filename, async () => {
console.log(prefix, "Starting write on", niceFileName(filename), "in transaction", transactionId);
if (!fs.existsSync(filename)) {
// this one is easy
console.log(prefix, "Writing file instantly because it does not exist:", niceFileName(filename));
await fs.promises.writeFile(filename, contents, { encoding: "utf8" });
return;
}
// first, write a temporary file (.tmp-XXX)
const tempName = filename + ".tmp-" + transactionId;
console.log(prefix, "Writing temporary file", niceFileName(tempName));
await fs.promises.writeFile(tempName, contents, { encoding: "utf8" });
// now, rename the original file to (.backup-XXX)
const oldTemporaryName = filename + ".backup-" + transactionId;
console.log(
prefix,
"Renaming old file",
niceFileName(filename),
"to",
niceFileName(oldTemporaryName)
);
await fs.promises.rename(filename, oldTemporaryName);
// now, rename the temporary file (.tmp-XXX) to the target
console.log(
prefix,
"Renaming the temporary file",
niceFileName(tempName),
"to the original",
niceFileName(filename)
);
await fs.promises.rename(tempName, filename);
// we are done now, try to create a backup, but don't fail if the backup fails
try {
// check if there is an old backup file
const backupFileName = filename + ".backup";
if (fs.existsSync(backupFileName)) {
console.log(prefix, "Deleting old backup file", niceFileName(backupFileName));
// delete the old backup
await fs.promises.unlink(backupFileName);
}
// rename the old file to the new backup file
console.log(prefix, "Moving", niceFileName(oldTemporaryName), "to the backup file location");
await fs.promises.rename(oldTemporaryName, backupFileName);
} catch (ex) {
console.error(prefix, "Failed to switch backup files:", ex);
}
});
}
async function performFsJob(job) {
const fname = path.join(storePath, job.filename); const fname = path.join(storePath, job.filename);
switch (job.type) { switch (job.type) {
@ -165,38 +240,35 @@ function performFsJob(job) {
}; };
} }
let contents = "";
try { try {
contents = fs.readFileSync(fname, { encoding: "utf8" }); const data = await fs.promises.readFile(fname, { encoding: "utf8" });
return {
success: true,
data,
};
} catch (ex) { } catch (ex) {
return { return {
error: ex, error: ex,
}; };
} }
return {
success: true,
data: contents,
};
} }
case "write": { case "write": {
try { try {
fs.writeFileSync(fname, job.contents); await writeFileSafe(fname, job.contents);
} catch (ex) {
return {
error: ex,
};
}
return { return {
success: true, success: true,
data: job.contents, data: job.contents,
}; };
} catch (ex) {
return {
error: ex,
};
}
} }
case "delete": { case "delete": {
try { try {
fs.unlinkSync(fname); await fs.promises.unlink(fname);
} catch (ex) { } catch (ex) {
return { return {
error: ex, error: ex,
@ -214,15 +286,7 @@ function performFsJob(job) {
} }
} }
ipcMain.on("fs-job", (event, arg) => { ipcMain.handle("fs-job", (event, arg) => performFsJob(arg));
const result = performFsJob(arg);
event.reply("fs-response", { id: arg.id, result });
});
ipcMain.on("fs-sync-job", (event, arg) => {
const result = performFsJob(arg);
event.returnValue = result;
});
steam.init(isDev); steam.init(isDev);
steam.listen(); steam.listen();

View File

@ -10,9 +10,12 @@
"start": "electron --disable-direct-composition --in-process-gpu ." "start": "electron --disable-direct-composition --in-process-gpu ."
}, },
"devDependencies": { "devDependencies": {
"electron": "11.3.0" "electron": "10.4.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85" "shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85"
},
"dependencies": {
"async-lock": "^1.2.8"
} }
} }

View File

@ -4,7 +4,7 @@
"@electron/get@^1.0.1": "@electron/get@^1.0.1":
version "1.12.4" version "1.12.4"
resolved "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab"
integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg== integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==
dependencies: dependencies:
debug "^4.1.1" debug "^4.1.1"
@ -20,39 +20,44 @@
"@sindresorhus/is@^0.14.0": "@sindresorhus/is@^0.14.0":
version "0.14.0" version "0.14.0"
resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
"@szmarczak/http-timer@^1.1.2": "@szmarczak/http-timer@^1.1.2":
version "1.1.2" version "1.1.2"
resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
dependencies: dependencies:
defer-to-connect "^1.0.1" defer-to-connect "^1.0.1"
"@types/node@^12.0.12": "@types/node@^12.0.12":
version "12.20.5" version "12.20.5"
resolved "https://registry.npmjs.org/@types/node/-/node-12.20.5.tgz" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.5.tgz#4ca82a766f05c359fd6c77505007e5a272f4bb9b"
integrity sha512-5Oy7tYZnu3a4pnJ//d4yVvOImExl4Vtwf0D40iKUlU+XlUsyV9iyFWyCFlwy489b72FMAik/EFwRkNLjjOdSPg== integrity sha512-5Oy7tYZnu3a4pnJ//d4yVvOImExl4Vtwf0D40iKUlU+XlUsyV9iyFWyCFlwy489b72FMAik/EFwRkNLjjOdSPg==
async-lock@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.8.tgz#7b02bdfa2de603c0713acecd11184cf97bbc7c4c"
integrity sha512-G+26B2jc0Gw0EG/WN2M6IczuGepBsfR1+DtqLnyFSH4p2C668qkOCtEkGNVEaaNAVlYwEMazy1+/jnLxltBkIQ==
boolean@^3.0.1: boolean@^3.0.1:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz" resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570"
integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g== integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==
buffer-crc32@~0.2.3: buffer-crc32@~0.2.3:
version "0.2.13" version "0.2.13"
resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
buffer-from@^1.0.0: buffer-from@^1.0.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
cacheable-request@^6.0.0: cacheable-request@^6.0.0:
version "6.1.0" version "6.1.0"
resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
dependencies: dependencies:
clone-response "^1.0.2" clone-response "^1.0.2"
@ -65,14 +70,14 @@ cacheable-request@^6.0.0:
clone-response@^1.0.2: clone-response@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
dependencies: dependencies:
mimic-response "^1.0.0" mimic-response "^1.0.0"
concat-stream@^1.6.2: concat-stream@^1.6.2:
version "1.6.2" version "1.6.2"
resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies: dependencies:
buffer-from "^1.0.0" buffer-from "^1.0.0"
@ -82,7 +87,7 @@ concat-stream@^1.6.2:
config-chain@^1.1.11: config-chain@^1.1.11:
version "1.1.12" version "1.1.12"
resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
dependencies: dependencies:
ini "^1.3.4" ini "^1.3.4"
@ -90,61 +95,61 @@ config-chain@^1.1.11:
core-js@^3.6.5: core-js@^3.6.5:
version "3.9.1" version "3.9.1"
resolved "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae"
integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==
core-util-is@~1.0.0: core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
debug@^2.6.9: debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@^4.1.0, debug@^4.1.1: debug@^4.1.0, debug@^4.1.1:
version "4.3.1" version "4.3.1"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
decompress-response@^3.3.0: decompress-response@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
dependencies: dependencies:
mimic-response "^1.0.0" mimic-response "^1.0.0"
defer-to-connect@^1.0.1: defer-to-connect@^1.0.1:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
define-properties@^1.1.3: define-properties@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
dependencies: dependencies:
object-keys "^1.0.12" object-keys "^1.0.12"
detect-node@^2.0.4: detect-node@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
duplexer3@^0.1.4: duplexer3@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
electron@11.3.0: electron@10.4.0:
version "11.3.0" version "10.4.0"
resolved "https://registry.npmjs.org/electron/-/electron-11.3.0.tgz" resolved "https://registry.yarnpkg.com/electron/-/electron-10.4.0.tgz#018385914474b56110a5a43087a53c114b67c08d"
integrity sha512-MhdS0gok3wZBTscLBbYrOhLaQybCSAfkupazbK1dMP5c+84eVMxJE/QGohiWQkzs0tVFIJsAHyN19YKPbelNrQ== integrity sha512-qK8OOCWuNvEFWThmjkukkqDwIpBqULlDuMXVC9MC/2P4UaWJEjIYvBmBuTyxtFcKoE3kWvcWyeRDUuvzVxxXjA==
dependencies: dependencies:
"@electron/get" "^1.0.1" "@electron/get" "^1.0.1"
"@types/node" "^12.0.12" "@types/node" "^12.0.12"
@ -152,34 +157,34 @@ electron@11.3.0:
encodeurl@^1.0.2: encodeurl@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
end-of-stream@^1.1.0: end-of-stream@^1.1.0:
version "1.4.4" version "1.4.4"
resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
env-paths@^2.2.0: env-paths@^2.2.0:
version "2.2.1" version "2.2.1"
resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
es6-error@^4.1.1: es6-error@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
escape-string-regexp@^4.0.0: escape-string-regexp@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
extract-zip@^1.0.3: extract-zip@^1.0.3:
version "1.7.0" version "1.7.0"
resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
dependencies: dependencies:
concat-stream "^1.6.2" concat-stream "^1.6.2"
@ -189,14 +194,14 @@ extract-zip@^1.0.3:
fd-slicer@~1.1.0: fd-slicer@~1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
dependencies: dependencies:
pend "~1.2.0" pend "~1.2.0"
fs-extra@^8.1.0: fs-extra@^8.1.0:
version "8.1.0" version "8.1.0"
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies: dependencies:
graceful-fs "^4.2.0" graceful-fs "^4.2.0"
@ -205,21 +210,21 @@ fs-extra@^8.1.0:
get-stream@^4.1.0: get-stream@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
dependencies: dependencies:
pump "^3.0.0" pump "^3.0.0"
get-stream@^5.1.0: get-stream@^5.1.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
dependencies: dependencies:
pump "^3.0.0" pump "^3.0.0"
global-agent@^2.0.2: global-agent@^2.0.2:
version "2.1.12" version "2.1.12"
resolved "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.12.tgz#e4ae3812b731a9e81cbf825f9377ef450a8e4195"
integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg== integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==
dependencies: dependencies:
boolean "^3.0.1" boolean "^3.0.1"
@ -232,7 +237,7 @@ global-agent@^2.0.2:
global-tunnel-ng@^2.7.1: global-tunnel-ng@^2.7.1:
version "2.7.1" version "2.7.1"
resolved "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz" resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f"
integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==
dependencies: dependencies:
encodeurl "^1.0.2" encodeurl "^1.0.2"
@ -242,14 +247,14 @@ global-tunnel-ng@^2.7.1:
globalthis@^1.0.1: globalthis@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b"
integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==
dependencies: dependencies:
define-properties "^1.1.3" define-properties "^1.1.3"
got@^9.6.0: got@^9.6.0:
version "9.6.0" version "9.6.0"
resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
dependencies: dependencies:
"@sindresorhus/is" "^0.14.0" "@sindresorhus/is" "^0.14.0"
@ -266,117 +271,117 @@ got@^9.6.0:
graceful-fs@^4.1.6, graceful-fs@^4.2.0: graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.6" version "4.2.6"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
http-cache-semantics@^4.0.0: http-cache-semantics@^4.0.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
inherits@^2.0.3, inherits@~2.0.3: inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.4: ini@^1.3.4:
version "1.3.8" version "1.3.8"
resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
isarray@~1.0.0: isarray@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
json-buffer@3.0.0: json-buffer@3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
json-stringify-safe@^5.0.1: json-stringify-safe@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsonfile@^4.0.0: jsonfile@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies: optionalDependencies:
graceful-fs "^4.1.6" graceful-fs "^4.1.6"
keyv@^3.0.0: keyv@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
dependencies: dependencies:
json-buffer "3.0.0" json-buffer "3.0.0"
lodash@^4.17.10: lodash@^4.17.10:
version "4.17.21" version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
lowercase-keys@^2.0.0: lowercase-keys@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
lru-cache@^6.0.0: lru-cache@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
matcher@^3.0.0: matcher@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
dependencies: dependencies:
escape-string-regexp "^4.0.0" escape-string-regexp "^4.0.0"
mimic-response@^1.0.0, mimic-response@^1.0.1: mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
minimist@^1.2.5: minimist@^1.2.5:
version "1.2.5" version "1.2.5"
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mkdirp@^0.5.4: mkdirp@^0.5.4:
version "0.5.5" version "0.5.5"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies: dependencies:
minimist "^1.2.5" minimist "^1.2.5"
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@2.1.2: ms@2.1.2:
version "2.1.2" version "2.1.2"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
normalize-url@^4.1.0: normalize-url@^4.1.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
npm-conf@^1.1.3: npm-conf@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
dependencies: dependencies:
config-chain "^1.1.11" config-chain "^1.1.11"
@ -384,54 +389,54 @@ npm-conf@^1.1.3:
object-keys@^1.0.12: object-keys@^1.0.12:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
once@^1.3.1, once@^1.4.0: once@^1.3.1, once@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies: dependencies:
wrappy "1" wrappy "1"
p-cancelable@^1.0.0: p-cancelable@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
pend@~1.2.0: pend@~1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
pify@^3.0.0: pify@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
prepend-http@^2.0.0: prepend-http@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
process-nextick-args@~2.0.0: process-nextick-args@~2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
progress@^2.0.3: progress@^2.0.3:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
proto-list@~1.2.1: proto-list@~1.2.1:
version "1.2.4" version "1.2.4"
resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
pump@^3.0.0: pump@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies: dependencies:
end-of-stream "^1.1.0" end-of-stream "^1.1.0"
@ -439,7 +444,7 @@ pump@^3.0.0:
readable-stream@^2.2.2: readable-stream@^2.2.2:
version "2.3.7" version "2.3.7"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies: dependencies:
core-util-is "~1.0.0" core-util-is "~1.0.0"
@ -452,14 +457,14 @@ readable-stream@^2.2.2:
responselike@^1.0.2: responselike@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
dependencies: dependencies:
lowercase-keys "^1.0.0" lowercase-keys "^1.0.0"
roarr@^2.15.3: roarr@^2.15.3:
version "2.15.4" version "2.15.4"
resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
dependencies: dependencies:
boolean "^3.0.1" boolean "^3.0.1"
@ -471,29 +476,29 @@ roarr@^2.15.3:
safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2" version "5.1.2"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
semver-compare@^1.0.0: semver-compare@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
semver@^6.2.0: semver@^6.2.0:
version "6.3.0" version "6.3.0"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.2: semver@^7.3.2:
version "7.3.4" version "7.3.4"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies: dependencies:
lru-cache "^6.0.0" lru-cache "^6.0.0"
serialize-error@^7.0.1: serialize-error@^7.0.1:
version "7.0.1" version "7.0.1"
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
dependencies: dependencies:
type-fest "^0.13.1" type-fest "^0.13.1"
@ -504,73 +509,73 @@ serialize-error@^7.0.1:
sprintf-js@^1.1.2: sprintf-js@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
string_decoder@~1.1.1: string_decoder@~1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies: dependencies:
safe-buffer "~5.1.0" safe-buffer "~5.1.0"
sumchecker@^3.0.1: sumchecker@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
dependencies: dependencies:
debug "^4.1.0" debug "^4.1.0"
to-readable-stream@^1.0.0: to-readable-stream@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
tunnel@^0.0.6: tunnel@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
type-fest@^0.13.1: type-fest@^0.13.1:
version "0.13.1" version "0.13.1"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
typedarray@^0.0.6: typedarray@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
universalify@^0.1.0: universalify@^0.1.0:
version "0.1.2" version "0.1.2"
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
url-parse-lax@^3.0.0: url-parse-lax@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
dependencies: dependencies:
prepend-http "^2.0.0" prepend-http "^2.0.0"
util-deprecate@~1.0.1: util-deprecate@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
wrappy@1: wrappy@1:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
yallist@^4.0.0: yallist@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yauzl@^2.10.0: yauzl@^2.10.0:
version "2.10.0" version "2.10.0"
resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
dependencies: dependencies:
buffer-crc32 "~0.2.3" buffer-crc32 "~0.2.3"

View File

@ -14,7 +14,7 @@ function gulptasksStandalone($, gulp) {
{ {
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"), tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"),
suffix: "", suffix: "",
taskPrefix: "" taskPrefix: "",
}, },
{ {
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"), tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"),
@ -27,8 +27,7 @@ function gulptasksStandalone($, gulp) {
const tempDestBuildDir = path.join(tempDestDir, "built"); const tempDestBuildDir = path.join(tempDestDir, "built");
gulp.task(taskPrefix + "standalone.prepare.cleanup", () => { gulp.task(taskPrefix + "standalone.prepare.cleanup", () => {
return gulp.src(tempDestDir, { read: false, allowEmpty: true }) return gulp.src(tempDestDir, { read: false, allowEmpty: true }).pipe($.clean({ force: true }));
.pipe($.clean({ force: true }));
}); });
gulp.task(taskPrefix + "standalone.prepare.copyPrefab", () => { gulp.task(taskPrefix + "standalone.prepare.copyPrefab", () => {
@ -42,18 +41,22 @@ function gulptasksStandalone($, gulp) {
// https://github.com/gulpjs/gulp/issues/1427 // https://github.com/gulpjs/gulp/issues/1427
// path.join(electronBaseDir, "node_modules", "**", "*"), // path.join(electronBaseDir, "node_modules", "**", "*"),
]; ];
return gulp.src(requiredFiles, { base: electronBaseDir }) return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir));
.pipe(gulp.dest(tempDestBuildDir));
}); });
gulp.task(taskPrefix + "standalone.prepare.writePackageJson", cb => { gulp.task(taskPrefix + "standalone.prepare.writePackageJson", cb => {
const packageJsonString = JSON.stringify({ const packageJsonString = JSON.stringify(
{
scripts: { scripts: {
start: pj.scripts.start start: pj.scripts.start,
}, },
devDependencies: pj.devDependencies, devDependencies: pj.devDependencies,
optionalDependencies: pj.optionalDependencies dependencies: pj.dependencies,
}, null, 4); optionalDependencies: pj.optionalDependencies,
},
null,
4
);
fs.writeFileSync(path.join(tempDestBuildDir, "package.json"), packageJsonString); fs.writeFileSync(path.join(tempDestBuildDir, "package.json"), packageJsonString);
@ -79,8 +82,7 @@ function gulptasksStandalone($, gulp) {
}); });
gulp.task(taskPrefix + "standalone.prepare.copyGamefiles", () => { gulp.task(taskPrefix + "standalone.prepare.copyGamefiles", () => {
return gulp.src("../build/**/*.*", { base: "../build" }) return gulp.src("../build/**/*.*", { base: "../build" }).pipe(gulp.dest(tempDestBuildDir));
.pipe(gulp.dest(tempDestBuildDir));
}); });
gulp.task(taskPrefix + "standalone.killRunningInstances", cb => { gulp.task(taskPrefix + "standalone.killRunningInstances", cb => {
@ -175,9 +177,7 @@ function gulptasksStandalone($, gulp) {
); );
} }
gulp.task(taskPrefix + "standalone.package.prod.win64", cb => gulp.task(taskPrefix + "standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb));
packageStandalone("win32", "x64", cb)
);
gulp.task(taskPrefix + "standalone.package.prod.linux64", cb => gulp.task(taskPrefix + "standalone.package.prod.linux64", cb =>
packageStandalone("linux", "x64", cb) packageStandalone("linux", "x64", cb)
); );

View File

@ -1,4 +1,12 @@
export const CHANGELOG = [ export const CHANGELOG = [
{
version: "1.3.1",
date: "beta",
entries: [
"Fixed savegames getting corrupt in rare conditions",
"Fixed game crashing sometimes since the achievements update",
],
},
{ {
version: "1.3.0", version: "1.3.0",
date: "12.03.2020", date: "12.03.2020",

View File

@ -492,12 +492,11 @@ export class AchievementCollection {
/** @param {ShapeDefinition} definition @returns {boolean} */ /** @param {ShapeDefinition} definition @returns {boolean} */
isIrrelevantShapeValid(definition) { isIrrelevantShapeValid(definition) {
if (definition.cachedHash === this.root.hubGoals.currentGoal.definition.cachedHash) { const levels = this.root.gameMode.getLevelDefinitions();
for (let i = 0; i < levels.length; i++) {
if (definition.cachedHash === levels[i].shape) {
return false; return false;
} }
if (definition.cachedHash === this.root.gameMode.getBlueprintShapeKey()) {
return false;
} }
const upgrades = this.root.gameMode.getUpgrades(); const upgrades = this.root.gameMode.getUpgrades();

View File

@ -58,11 +58,6 @@ export class StorageImplBrowser extends StorageInterface {
}); });
} }
writeFileSyncIfSupported(filename, contents) {
window.localStorage.setItem(filename, contents);
return true;
}
readFileAsync(filename) { readFileAsync(filename) {
if (this.currentBusyFilename === filename) { if (this.currentBusyFilename === filename) {
logger.warn("Attempt to read", filename, "while write progress on it is ongoing!"); logger.warn("Attempt to read", filename, "while write progress on it is ongoing!");

View File

@ -94,12 +94,6 @@ export class StorageImplBrowserIndexedDB extends StorageInterface {
}); });
} }
writeFileSyncIfSupported(filename, contents) {
// Not supported
this.writeFileAsync(filename, contents);
return true;
}
readFileAsync(filename) { readFileAsync(filename) {
if (!this.database) { if (!this.database) {
return Promise.reject("Storage not ready"); return Promise.reject("Storage not ready");

View File

@ -7,24 +7,6 @@ const logger = createLogger("electron-storage");
export class StorageImplElectron extends StorageInterface { export class StorageImplElectron extends StorageInterface {
constructor(app) { constructor(app) {
super(app); super(app);
/** @type {Object.<number, {resolve:Function, reject: Function}>} */
this.jobs = {};
this.jobId = 0;
getIPCRenderer().on("fs-response", (event, arg) => {
const id = arg.id;
if (!this.jobs[id]) {
logger.warn("Got unhandled FS response, job not known:", id);
return;
}
const { resolve, reject } = this.jobs[id];
if (arg.result.success) {
resolve(arg.result.data);
} else {
reject(arg.result.error);
}
});
} }
initialize() { initialize() {
@ -33,50 +15,52 @@ export class StorageImplElectron extends StorageInterface {
writeFileAsync(filename, contents) { writeFileAsync(filename, contents) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "write", type: "write",
filename, filename,
contents, contents,
id: jobId, })
}); .then(result => {
}); if (result.success) {
resolve(result.data);
} else {
reject(result.error);
} }
});
writeFileSyncIfSupported(filename, contents) {
return getIPCRenderer().sendSync("fs-sync-job", {
type: "write",
filename,
contents,
}); });
} }
readFileAsync(filename) { readFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "read", type: "read",
filename, filename,
id: jobId, })
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
}); });
}); });
} }
deleteFileAsync(filename) { deleteFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "delete", type: "delete",
filename, filename,
id: jobId, })
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
}); });
}); });
} }

View File

@ -30,16 +30,6 @@ export class StorageInterface {
return Promise.reject(); return Promise.reject();
} }
/**
* Tries to write a file synchronously, used in unload handler
* @param {string} filename
* @param {string} contents
*/
writeFileSyncIfSupported(filename, contents) {
abstract;
return false;
}
/** /**
* Reads a string asynchronously. Returns Promise<FILE_NOT_FOUND> if file was not found. * Reads a string asynchronously. Returns Promise<FILE_NOT_FOUND> if file was not found.
* @param {string} filename * @param {string} filename

View File

@ -348,8 +348,8 @@ ingame:
title: Unterstütze Mich title: Unterstütze Mich
desc: Ich entwickle in meiner Freizeit! desc: Ich entwickle in meiner Freizeit!
achievements: achievements:
title: Achievements title: Errungenschaften
desc: Hunt them all! desc: Hol sie dir alle!
shopUpgrades: shopUpgrades:
belt: belt:
name: Fließbänder, Verteiler & Tunnel name: Fließbänder, Verteiler & Tunnel
@ -912,9 +912,8 @@ settings:
description: If activated the zoom will happen in the direction of your mouse description: If activated the zoom will happen in the direction of your mouse
position, otherwise in the middle of the screen. position, otherwise in the middle of the screen.
mapResourcesScale: mapResourcesScale:
title: Map Resources Size title: Größe der Ressourcen auf der Karte
description: Controls the size of the shapes on the map overview (when zooming description: Legt die Größe der Ressourcen auf der Karte (beim Herauszoomen) fest.
out).
keybindings: keybindings:
title: Tastenbelegung title: Tastenbelegung
hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene
@ -988,10 +987,10 @@ keybindings:
placementDisableAutoOrientation: Automatische Orientierung deaktivieren placementDisableAutoOrientation: Automatische Orientierung deaktivieren
placeMultiple: Im Platziermodus bleiben placeMultiple: Im Platziermodus bleiben
placeInverse: Automatische Fließbandorientierung invertieren placeInverse: Automatische Fließbandorientierung invertieren
rotateToUp: "Rotate: Point Up" rotateToUp: "Rotieren: Nach oben zeigend"
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotieren: Nach unten zeigend"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotieren: Nach rechts zeigend"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotieren: Nach links zeigend"
about: about:
title: Über dieses Spiel title: Über dieses Spiel
body: Dieses Spiel ist quelloffen (Open Source) und wurde von <a body: Dieses Spiel ist quelloffen (Open Source) und wurde von <a

View File

@ -14,7 +14,7 @@ steamPage:
Vaikka alussa vain prosessoit muotoja, myöhemmin niitä pitää myös maalata - tätä varten sinun täytyy kerätä ja sekoittaa värejä Vaikka alussa vain prosessoit muotoja, myöhemmin niitä pitää myös maalata - tätä varten sinun täytyy kerätä ja sekoittaa värejä
Pelin ostaminen Steamista antaa sinulle pääsyn pelin täysversioon, mutta voit myös pelata kokeiluversiota ensin sivuillamme shapez.io ja päättää myöhemmin! Pelin ostaminen Steamista antaa sinulle pääsyn pelin täysversioon, mutta voit myös pelata kokeiluversiota ensin sivuillamme shapez.io ja päättää myöhemmin!
what_others_say: What people say about shapez.io what_others_say: Muiden mielipiteitä shapez.io:sta
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: This game is great - I'm having a wonderful time playing,
and time has flown by. and time has flown by.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Oh crap. I really should sleep, but I think I just figured out
@ -30,7 +30,7 @@ global:
suffix: suffix:
thousands: k thousands: k
millions: M millions: M
billions: B billions: G
trillions: T trillions: T
infinite: infinite:
time: time:
@ -195,7 +195,7 @@ ingame:
delete: Poista delete: Poista
pasteLastBlueprint: Liitä viimeisin piirustus pasteLastBlueprint: Liitä viimeisin piirustus
lockBeltDirection: Ota kuljettimen suunnittelija käyttöön lockBeltDirection: Ota kuljettimen suunnittelija käyttöön
plannerSwitchSide: Käännä suunnittelijan puoli plannerSwitchSide: Vaihda suunnittelijan puolta
cutSelection: Leikkaa cutSelection: Leikkaa
copySelection: Kopioi copySelection: Kopioi
clearSelection: Tyhjennä valinta clearSelection: Tyhjennä valinta
@ -347,8 +347,8 @@ ingame:
title: Tue minua title: Tue minua
desc: Kehitän peliä vapaa-ajallani! desc: Kehitän peliä vapaa-ajallani!
achievements: achievements:
title: Achievements title: Saavutukset
desc: Hunt them all! desc: Metsästä kaikki!
shopUpgrades: shopUpgrades:
belt: belt:
name: Kuljettimet, jakelijat & tunnelit name: Kuljettimet, jakelijat & tunnelit
@ -454,16 +454,16 @@ buildings:
description: Monikäyttöinen - Jakaa sisääntulot tasaisesti kaikkiin description: Monikäyttöinen - Jakaa sisääntulot tasaisesti kaikkiin
ulostuloihin. ulostuloihin.
merger: merger:
name: Yhdistäjä (compact) name: Yhdistäjä (kompakti)
description: Yhdistää kaksi kuljetinta yhteen. description: Yhdistää kaksi kuljetinta yhteen.
merger-inverse: merger-inverse:
name: Yhdistäjä (compact) name: Yhdistäjä (kompakti)
description: Yhdistää kaksi kuljetinta yhteen. description: Yhdistää kaksi kuljetinta yhteen.
splitter: splitter:
name: Erottaja (compact) name: Erottaja (kompakti)
description: Erottaa kuljettimen kahteen kuljettimeen. description: Erottaa kuljettimen kahteen kuljettimeen.
splitter-inverse: splitter-inverse:
name: Erottaja (compact) name: Erottaja (kompakti)
description: Erottaa kuljettimen kahteen kuljettimeen. description: Erottaa kuljettimen kahteen kuljettimeen.
storage: storage:
default: default:
@ -562,12 +562,12 @@ buildings:
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Muotojen Leikkaus title: Muotojen Leikkaus
desc: You just unlocked the <strong>cutter</strong>, which cuts shapes in half desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja
from top to bottom <strong>regardless of its ylhäältä alas <strong>muodon suunnasta
orientation</strong>!<br><br>Be sure to get rid of the waste, or riippumatta</strong>!<br><br>muista hankkiutua eroon jätteestä, tai
otherwise <strong>it will clog and stall</strong> - For this purpose muuten <strong>se tukkii ja pysäyttää leikkurin</strong> - Siksi
I have given you the <strong>trash</strong>, which destroys olen antanut sinulle <strong>roskiksen</strong>, joka tuhoaa
everything you put into it! kaiken sinne laitetun!
reward_rotater: reward_rotater:
title: Kääntö title: Kääntö
desc: Avasit <strong>Kääntäjän</strong>! Se kääntää muotoja myötäpäivään 90 desc: Avasit <strong>Kääntäjän</strong>! Se kääntää muotoja myötäpäivään 90
@ -629,12 +629,12 @@ storyRewards:
reward_freeplay: reward_freeplay:
title: Vapaapeli title: Vapaapeli
desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan
nyt <strong>satunnaisesti</strong><br><br> Since the hub will nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus vaatii
require a <strong>throughput</strong> from now on, I highly tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin, suosittelen
recommend to build a machine which automatically delivers the lämpimästi rakentamaan koneen, joka tuottaa vaaditun muodon
requested shape!<br><br> The HUB outputs the requested shape on the automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn muodon
wires layer, so all you have to do is to analyze it and johtotasolle, joten sinun ei tarvitse kuin analysoida se ja
automatically configure your factory based on that. konfiguroida tehtaasi sen perusteella.
reward_blueprints: reward_blueprints:
title: Piirustukset title: Piirustukset
desc: Nyt voit <strong>Kopioida ja Liittää</strong> paloja tehtaastasi! Valitse desc: Nyt voit <strong>Kopioida ja Liittää</strong> paloja tehtaastasi! Valitse
@ -928,7 +928,7 @@ keybindings:
pasteLastBlueprint: Liitä viimeisin piirustus pasteLastBlueprint: Liitä viimeisin piirustus
cycleBuildings: Valitse rakennuksia cycleBuildings: Valitse rakennuksia
lockBeltDirection: Ota kuljetinsuunnittelija käyttöön lockBeltDirection: Ota kuljetinsuunnittelija käyttöön
switchDirectionLockSide: "Suunnittelija: Muuta sivua" switchDirectionLockSide: "Suunnittelija: Vaihda sivua"
massSelectStart: Pidä pohjassa ja raahaa aloittaaksesi massSelectStart: Pidä pohjassa ja raahaa aloittaaksesi
massSelectSelectMultiple: Valitse useita alueita massSelectSelectMultiple: Valitse useita alueita
massSelectCopy: Kopioi alue massSelectCopy: Kopioi alue
@ -952,24 +952,24 @@ keybindings:
comparator: Vertaa comparator: Vertaa
item_producer: Signaaligeneraattori (Hiekkalaattikko) item_producer: Signaaligeneraattori (Hiekkalaattikko)
copyWireValue: "Johdot: Kopioi arvo kursorin kohdalta" copyWireValue: "Johdot: Kopioi arvo kursorin kohdalta"
rotateToUp: "Rotate: Point Up" rotateToUp: "Käännä: osoittaa ylös"
rotateToDown: "Rotate: Point Down" rotateToDown: "Käännä: osoittaa alas"
rotateToRight: "Rotate: Point Right" rotateToRight: "Käännä: osoittaa oikealle"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Käännä: osoittaa vasemmalle"
about: about:
title: Tietoja tästä pelistä title: Tietoja tästä pelistä
body: >- body: >-
This game is open source and developed by <a Tämä peli on avointa lähdekoodia ja <a
href="https://github.com/tobspr" target="_blank">Tobias Springer</a> href="https://github.com/tobspr" target="_blank">Tobias Springer</a>in
(this is me).<br><br> (siis minun) kehittämäni.<br><br>
If you want to contribute, check out <a href="<githublink>" target="_blank">shapez.io on GitHub</a>.<br><br> Jos haluat avustaa, käy katsomassa <a href="<githublink>" target="_blank">shapez.io GitHubissa</a>.<br><br>
This game wouldn't have been possible without the great Discord community around my games - You should really join the <a href="<discordlink>" target="_blank">Discord server</a>!<br><br> Tämä peli ei olisi mahdollinen ilman pelieni ympärillä olevaa Discord-yhteisöä - Sinun todella kannattaisi liittyä <a href="<discordlink>" target="_blank">Discord serverillemme</a>!<br><br>
The soundtrack was made by <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> - He's awesome.<br><br> Ääniraidan on tehnyt <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> - Hän on uskomattoman loistava.<br><br>
Finally, huge thanks to my best friend <a href="https://github.com/niklas-dahl" target="_blank">Niklas</a> - Without our Factorio sessions, this game would never have existed. Lopuksi valtavat kiitokset parhaalle ystävälleni <a href="https://github.com/niklas-dahl" target="_blank">Niklakselle</a> - Ilman Factorio-sessioitamme tätä peliä ei olisi olemassa.
changelog: changelog:
title: Muutosloki title: Muutosloki
demo: demo:

View File

@ -11,14 +11,14 @@ steamPage:
Dan jita itu tidak cukup, kamu juga perlu memproduksi bentuk secara eksponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun kamu hanya perlu memproses bentuk di awal, nantinya kamu harus memberinya warna - dengan mengekstrak dan mencampur warna! Dan jita itu tidak cukup, kamu juga perlu memproduksi bentuk secara eksponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun kamu hanya perlu memproses bentuk di awal, nantinya kamu harus memberinya warna - dengan mengekstrak dan mencampur warna!
Membeli game ini di Steam memberikan kamu akses ke versi lengkap, namun kamu juga dapat mencoba demo dan memutuskan nanti! Membeli game ini di Steam memberikan kamu akses ke versi lengkap, namun kamu juga dapat mencoba demo dan memutuskan nanti!
what_others_say: What people say about shapez.io what_others_say: Apa yang orang lain katakan tentang shapez.io
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: Game ini bagus - Saya sangat menikmati waktu saya ketika
and time has flown by. memainkan game ini, dan waktu telah berlalu.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Oh sial. Saya benar-benar harus tidur, namun sepertinya saya baru
how to make a computer in shapez.io menemukan bagaimana cara membuat komputer di shapez.io
steam_review_comment: This game has stolen my life and I don't want it back. steam_review_comment: Game ini telah mencuri hidup saya dan saya tidak
Very chill factory game that won't let me stop making my lines more menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang tidak
efficient. akan membiarkan saya berhenti membuat pabrik saya lebih efisien.
global: global:
loading: Memuat loading: Memuat
error: Terjadi kesalahan error: Terjadi kesalahan

View File

@ -9,14 +9,11 @@ steamPage:
しかし、それだけでは不十分です。指数関数的に増大していく形状の要求量に対応する必要があり――「スケーリング」が、唯一の対抗策と成り得ます。また、最初は形状を加工するだけですが、後々着色も必要になってきます。色を抽出して混ぜ合わせましょう! しかし、それだけでは不十分です。指数関数的に増大していく形状の要求量に対応する必要があり――「スケーリング」が、唯一の対抗策と成り得ます。また、最初は形状を加工するだけですが、後々着色も必要になってきます。色を抽出して混ぜ合わせましょう!
Steamでゲームを購入するとフルバージョンで遊べますが、まずshapez.ioでデモをプレイし、その後で決めることもできます Steamでゲームを購入するとフルバージョンで遊べますが、まずshapez.ioでデモをプレイし、その後で決めることもできます
what_others_say: What people say about shapez.io what_others_say: shapez.ioプレイヤーの反応
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: これはすごいゲーム。プレイ体験が最高な上に時間の溶け方が尋常でない。
and time has flown by. notch_comment: いややばいって。マジで寝なきゃなんだけど、今ならshapez.ioで計算機組めそうな気がする。
notch_comment: Oh crap. I really should sleep, but I think I just figured out steam_review_comment: このゲームは私の生活を奪い去っていったが、返して欲しいとは思わない。
how to make a computer in shapez.io いくらでも気の向くままに生産ラインを効率化させてくれる、そんなとても穏やかな工場ゲームだ。
steam_review_comment: This game has stolen my life and I don't want it back.
Very chill factory game that won't let me stop making my lines more
efficient.
global: global:
loading: ロード中 loading: ロード中
error: エラー error: エラー
@ -60,9 +57,9 @@ mainMenu:
importSavegame: インポート importSavegame: インポート
openSourceHint: このゲームはオープンソースです openSourceHint: このゲームはオープンソースです
discordLink: 公式Discordサーバー discordLink: 公式Discordサーバー
helpTranslate: 翻訳を助けてください! helpTranslate: 翻訳にご協力ください!
madeBy: <author-link>によって作られました madeBy: <author-link>によって作られました
browserWarning: このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることでこの問題は避けられます。 browserWarning: このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることで解決できます。
savegameLevel: レベル <x> savegameLevel: レベル <x>
savegameLevelUnknown: 不明なレベル savegameLevelUnknown: 不明なレベル
savegameUnnamed: 無名のデータ savegameUnnamed: 無名のデータ
@ -153,7 +150,7 @@ dialogs:
desc: スクリーンショット出力を実行します。この処理は工場の全体像があまりに大きいと、 ゲームが遅くなったりクラッシュしてしまう可能性があります! desc: スクリーンショット出力を実行します。この処理は工場の全体像があまりに大きいと、 ゲームが遅くなったりクラッシュしてしまう可能性があります!
renameSavegame: renameSavegame:
title: セーブデータの名前を変更 title: セーブデータの名前を変更
desc: セーブデータの名前を変更することができます desc: セーブデータの名前を変更できます
tutorialVideoAvailable: tutorialVideoAvailable:
title: チュートリアル視聴可能 title: チュートリアル視聴可能
desc: このレベルで利用できるチュートリアル動画があります! 確認しますか? desc: このレベルで利用できるチュートリアル動画があります! 確認しますか?
@ -179,7 +176,7 @@ ingame:
cutSelection: カット cutSelection: カット
copySelection: コピー copySelection: コピー
clearSelection: 選択範囲をクリア clearSelection: 選択範囲をクリア
pipette: ピペッ pipette: スポイ
switchLayers: レイヤーを変更 switchLayers: レイヤーを変更
colors: colors:
red: red:
@ -266,7 +263,7 @@ ingame:
2_1_place_cutter: "次に、<strong>切断機</strong>を設置し、円を 二分割します!<br><br> 追記: 2_1_place_cutter: "次に、<strong>切断機</strong>を設置し、円を 二分割します!<br><br> 追記:
切断機はそれの向きに関わらず、<strong>縦の線</strong>で切断します。" 切断機はそれの向きに関わらず、<strong>縦の線</strong>で切断します。"
2_2_place_trash: 切断機は<strong>詰まる</strong>場合があります!<br><br> 2_2_place_trash: 切断機は<strong>詰まる</strong>場合があります!<br><br>
<strong>ゴミ箱</strong>を利用して、不必要な部品を廃棄することができます。 <strong>ゴミ箱</strong>を利用して、不必要な部品を廃棄できます。
2_3_more_cutters: "いいですね! <strong>更に2つ以上の切断機</strong>を設置して処理をスピードアップさせましょう!<br>\ 2_3_more_cutters: "いいですね! <strong>更に2つ以上の切断機</strong>を設置して処理をスピードアップさせましょう!<br>\
<br> 追記: <strong>0から9 のホットキー</strong>を使用すると素早く部品にアクセスできます。" <br> 追記: <strong>0から9 のホットキー</strong>を使用すると素早く部品にアクセスできます。"
3_1_rectangles: "それでは四角形を抽出しましょう! <strong>4つの抽出機を作成</strong>してそれをハブに接続します。<br><\ 3_1_rectangles: "それでは四角形を抽出しましょう! <strong>4つの抽出機を作成</strong>してそれをハブに接続します。<br><\
@ -299,8 +296,8 @@ ingame:
title: 新しい18個の設置物 title: 新しい18個の設置物
desc: あなたの工場を完全自動化しましょう! desc: あなたの工場を完全自動化しましょう!
upgrades: upgrades:
title: 20個のアップデートティア title: 無限のアップグレード段階
desc: このデモバージョンでは5ティアのみです! desc: このデモバージョンでは5段階のみです!
markers: markers:
title: 無限個のマップマーカー title: 無限個のマップマーカー
desc: これでもうあなたの工場を見失いません! desc: これでもうあなたの工場を見失いません!
@ -314,20 +311,20 @@ ingame:
title: 製作者をサポート title: 製作者をサポート
desc: 余暇に制作しています! desc: 余暇に制作しています!
achievements: achievements:
title: Achievements title: アチーブメント
desc: Hunt them all! desc: 取り尽くせ!
shopUpgrades: shopUpgrades:
belt: belt:
name: ベルト、ディストリビュータとトンネル name: ベルト、分配機とトンネル
description: スピード x<currentMult> → x<newMult> description: スピード x<currentMult> → x<newMult>
miner: miner:
name: 抽出 name: 抽出
description: スピード x<currentMult> → x<newMult> description: スピード x<currentMult> → x<newMult>
processors: processors:
name: 切断、回転と積み重ね name: 切断、回転と積み重ね
description: スピード x<currentMult> → x<newMult> description: スピード x<currentMult> → x<newMult>
painting: painting:
name: と着色 name: と着色
description: スピード x<currentMult> → x<newMult> description: スピード x<currentMult> → x<newMult>
buildings: buildings:
hub: hub:
@ -389,11 +386,11 @@ buildings:
stacker: stacker:
default: default:
name: 積層機 name: 積層機
description: 入力アイテムを積み重ねます。もしうまく統合できなかった場合は、右の入力アイテムを左の入力アイテムの上に重ねます。 description: 入力アイテムを積み重ねます。可能なら同じレイヤーに統合し、そうでなければ右の入力アイテムを左の入力アイテムの上に重ねます。
mixer: mixer:
default: default:
name: name:
description: 2つの色を加算混合で混ぜ合わせます。 description: 2つの色を加法混色で混ぜ合わせます。
painter: painter:
default: default:
name: 着色機 name: 着色機
@ -403,10 +400,10 @@ buildings:
description: 左から入力された形の全体を、下から入力された色で着色します。 description: 左から入力された形の全体を、下から入力された色で着色します。
double: double:
name: 着色機 (ダブル) name: 着色機 (ダブル)
description: 左から入力された形を、上から入力された色で着色します。 description: 左から入力された複数の形を、上から入力された色で着色します。
quad: quad:
name: 着色機 (四分割) name: 着色機 (四分割)
description: 入力された形を四分割づつ別の色で塗り分けられます。 description: 入力された形の四部分をそれぞれ別の色で塗り分けられます。
<strong>真らしい信号</strong>が流れているスロットのみがペイントされます! <strong>真らしい信号</strong>が流れているスロットのみがペイントされます!
trash: trash:
default: default:
@ -467,7 +464,7 @@ buildings:
reader: reader:
default: default:
name: ベルトリーダー name: ベルトリーダー
description: 平均スループットを計測できます。 アンロック後は、 最後に通過したアイテムの情報を出力します。 description: 平均スループットを計測できます。 ワイヤレイヤのアンロック後は、 最後に通過したアイテムの情報を出力します。
analyzer: analyzer:
default: default:
name: 形状解析機 name: 形状解析機
@ -482,7 +479,7 @@ buildings:
description: 形状の信号を2つに切断できます。 description: 形状の信号を2つに切断できます。
rotater: rotater:
name: 仮想回転機 name: 仮想回転機
description: 形状の信号を時計回り、反時計回りに回転させます。 description: 形状の信号を時計回りに回転させます。
unstacker: unstacker:
name: 仮想分離機 name: 仮想分離機
description: 形状の信号の最上層を右側に出力し、残りの層を左側に出力します。 description: 形状の信号の最上層を右側に出力し、残りの層を左側に出力します。
@ -509,8 +506,8 @@ storyRewards:
desc: "<strong>着色機</strong>が利用可能になりました。(今まで形状でやってきた方法で)色を抽出し、形状と合成することで着色します! <\ desc: "<strong>着色機</strong>が利用可能になりました。(今まで形状でやってきた方法で)色を抽出し、形状と合成することで着色します! <\
br><br>追伸: もし色覚特性をお持ちでしたら、 設定に<strong>色覚特性モード</strong>があります!" br><br>追伸: もし色覚特性をお持ちでしたら、 設定に<strong>色覚特性モード</strong>があります!"
reward_mixer: reward_mixer:
title: 色の混合 title: 混色
desc: <strong>混機</strong>が利用可能になりました。この建造物は2つの色を<strong>加算混合で</strong>混ぜ合わせます! desc: <strong>混機</strong>が利用可能になりました。この建造物は2つの色を<strong>加法混色で</strong>混ぜ合わせます!
reward_stacker: reward_stacker:
title: 積層機 title: 積層機
desc: <strong>積層機</strong>で形を組み合わせ可能になりました! 双方の入力を組み合わせ、連続した形になっていればそれらは<strong>融合してひとつ</strong>になります。そうでなければ、左の入力の<strong>上に右の入力が重なります!</strong> desc: <strong>積層機</strong>で形を組み合わせ可能になりました! 双方の入力を組み合わせ、連続した形になっていればそれらは<strong>融合してひとつ</strong>になります。そうでなければ、左の入力の<strong>上に右の入力が重なります!</strong>
@ -530,7 +527,7 @@ storyRewards:
reward_underground_belt_tier_2: reward_underground_belt_tier_2:
title: トンネル レベルII title: トンネル レベルII
desc: <strong>トンネル</strong>のバリエーションが利用可能になりました。 - desc: <strong>トンネル</strong>のバリエーションが利用可能になりました。 -
<strong>距離拡張版が追加され</strong>、以前のものと組み合わせて目的に応じて利用することができます! <strong>距離拡張版が追加され</strong>、以前のものと組み合わせて目的に応じて利用できます!
reward_merger: reward_merger:
title: コンパクトな合流機 title: コンパクトな合流機
desc: <strong>合流機</strong>の<strong>コンパクトバージョン</strong>が利用可能になりました 2つの入力を1つの出力に合流させます desc: <strong>合流機</strong>の<strong>コンパクトバージョン</strong>が利用可能になりました 2つの入力を1つの出力に合流させます
@ -539,54 +536,49 @@ storyRewards:
desc: <strong>分配機</strong>の<strong>コンパクトバージョン</strong>が利用可能になりました 1つの入力を2つの出力に分配します desc: <strong>分配機</strong>の<strong>コンパクトバージョン</strong>が利用可能になりました 1つの入力を2つの出力に分配します
reward_belt_reader: reward_belt_reader:
title: ベルトリーダー title: ベルトリーダー
desc: <strong>ベルトリーダー</strong>が利用可能になりました! ベルトのスループットを計測できます。<br><br>ワイヤーのロックが解除されれば、より便利になります! desc: <strong>ベルトリーダー</strong>が利用可能になりました! ベルトのスループットを計測できます。<br><br>ワイヤ関連の機能がアンロックされれば、より便利になります!
reward_cutter_quad: reward_cutter_quad:
title: 四分割 title: 四分割切断機
desc: <strong>切断機</strong>のバリエーションが利用可能になりました。 - desc: <strong>切断機</strong>のバリエーションが利用可能になりました。 -
上下の二分割ではなく、<strong>四分割</strong>に切断できます! 左右二分割ではなく、<strong>四つ</strong>に切断できます!
reward_painter_double: reward_painter_double:
title: 着色機 (ダブル) title: 着色機 (ダブル)
desc: <strong>着色機</strong>のバリエーションが利用可能になりました。 - desc: <strong>着色機</strong>のバリエーションが利用可能になりました。 -
通常の着色機と同様に機能しますが、ひとつの色の消費で<strong>一度に2つの形</strong>を着色処理できます! 通常の着色機と同様に機能しますが、ひとつの色の消費で<strong>一度に2つの形</strong>を着色処理できます!
reward_storage: reward_storage:
title: 余剰の貯蓄 title: ストレージ
desc: <strong>ゴミ箱</strong>のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます!<br><br> desc: <strong>ストレージ</strong>が利用可能になりました。 - 容量上限までアイテムを格納できます!<br><br>
左側の出力を優先するため、<strong>オーバーフローゲート</strong>としても使用できます! 左側の出力を優先するため、<strong>オーバーフローゲート</strong>としても使用できます!
reward_blueprints: reward_blueprints:
title: ブループリント title: ブループリント
desc: 工場の建造物の<strong>コピー&ペースト</strong>が利用可能になりました! desc: 工場の建造物の<strong>コピー&ペースト</strong>が利用可能になりました!
範囲選択(CTRLキーを押したままマウスドラッグ)した状態で、'C'キーを押すことでコピーができます。<br><br>ペーストは<strong>タダではありません。</strong><strong>ブループリントの形</strong>を生産することで可能になります!(たった今納品したものです) 範囲選択(CTRLキーを押したままマウスドラッグ)した状態で、'C'キーを押すことでコピーができます。<br><br>ただしペーストは<strong>タダではありません。</strong><strong>ブループリントの形</strong>を生産する必要があります!(たった今納品した形です)
reward_rotater_180: reward_rotater_180:
title: 180度の回転 title: 回転180°
desc: <strong>回転機</strong>のバリエーションが利用可能になりました 180度の回転ができるようになります!(サプライズ! :D) desc: <strong>回転機</strong>のバリエーションが利用可能になりました 180°の回転ができるようになります!(サプライズ! :D
reward_wires_painter_and_levers: reward_wires_painter_and_levers:
title: ワイヤ&着色機(四分割) title: ワイヤ&着色機(四分割)
desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の レイヤーの上にある別のレイヤであり、多くの新しい要素が desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br>
あります!<br><br> 最初に、<strong>四色 着色機</strong>が利用可能になりました - まず最初に、<strong>四色着色機</strong>が利用可能になりました - 着色するスロットをワイヤレイヤで接続してください!<br><br>
着色するスロットをワイヤレイヤで 接続します!<br><br> ワイヤレイヤに切り替えるには、 ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br>
<strong>E</strong>を押します。 <br><br> 補足: 補足: 設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。"
設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。"
reward_filter: reward_filter:
title: アイテムフィルタ title: アイテムフィルタ
desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、 desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。<br><br>
アイテムを上部または右側の出力に分離します。<br><br>真偽値(0/1)信号を利用することで また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。
どんなアイテムでも通過させるか、または通過させないかを選ぶこともできます。
reward_display: reward_display:
title: ディスプレイ title: ディスプレイ
desc: "<strong>ディスプレイ</strong>が利用可能になりました - ワイヤレイヤで desc: "<strong>ディスプレイ</strong>が利用可能になりました - ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br>
信号を接続することで、その内容を視認することができます!<br><br> 補足: ベルトリーダーとストレージが 補足: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!"
最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに 表示してみてください!"
reward_constant_signal: reward_constant_signal:
title: 定数信号 title: 定数信号
desc: <strong>定数信号</strong>がワイヤレイヤで desc: <strong>定数信号</strong>がワイヤレイヤで利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続すると便利です。<br><br>
利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続する 場合に便利です。<br><br> 発信できる信号は<strong>形状</strong>、<strong>色</strong>、<strong>真偽値</strong>(1か0)です。
定数信号は <strong>形状</strong>、<strong>色</strong>または
<strong>真偽値</strong>(1か0)を発信できます。
reward_logic_gates: reward_logic_gates:
title: 論理ゲート title: 論理ゲート
desc: <strong>論理ゲート</strong>が利用可能になりました! 興奮する必要はありませんが、非常に優秀なのです<br><br> desc: <strong>論理ゲート</strong>が利用可能になりました! 興奮する必要はありませんが、これは非常に優秀なんですよ<br><br>
これでAND, OR, XOR, これでAND, OR, XOR, NOTを計算できます。<br><br>
NOTを計算できます。<br><br>ボーナスとして<strong>トランジスタ</strong>も追加しました! ボーナスとして<strong>トランジスタ</strong>も追加しました!
reward_virtual_processing: reward_virtual_processing:
title: 仮想処理 title: 仮想処理
desc: <strong>形状処理をシミュレート</strong>できる新しい部品をたくさん追加しました!<br><br> desc: <strong>形状処理をシミュレート</strong>できる新しい部品をたくさん追加しました!<br><br>
@ -596,9 +588,8 @@ storyRewards:
- ワイヤでイカしたものを作る。<br><br> - 今までのように工場を建設する。<br><br> いずれにしても、楽しんでください! - ワイヤでイカしたものを作る。<br><br> - 今までのように工場を建設する。<br><br> いずれにしても、楽しんでください!
no_reward: no_reward:
title: 次のレベル title: 次のレベル
desc: "このレベルには報酬はありません。次にはあるでしょう! <br><br> 補足: すでに作った生産ラインは削除しないようにしましょう。 - desc: "このレベルには報酬はありません。次はきっとありますよ! <br><br> 補足: すでに作った生産ラインは削除しないようにしましょう。 -
生産された形は<strong>すべて</strong>、後に<strong>アップグレードの解除</strong>のために必要になりま\ 生産された形は<strong>すべて</strong>、後で<strong>アップグレードの解除</strong>に必要になります!"
す!"
no_reward_freeplay: no_reward_freeplay:
title: 次のレベル title: 次のレベル
desc: おめでとうございます! desc: おめでとうございます!
@ -606,8 +597,8 @@ storyRewards:
title: フリープレイ title: フリープレイ
desc: やりましたね! <strong>フリープレイモード</strong>が利用可能になりました。 - desc: やりましたね! <strong>フリープレイモード</strong>が利用可能になりました。 -
これからは納品すべき形は<strong>ランダムに</strong>生成されます!<br><br> これからは納品すべき形は<strong>ランダムに</strong>生成されます!<br><br>
今後、ハブは<strong>スループット</strong>が必要になるため、要求する形状を自動的に納品するマシンを構築することを強くお勧めします!<br><br> 今後、ハブは<strong>スループット</strong>を要求してきます。要求された形状を自動的に納品するマシンを構築することを強くお勧めします!<br><br>
ハブは要求する形状をワイヤレイヤに出力するので、それを分析し自動的に調整する工場を作成するだけです ハブは要求する形状をワイヤレイヤに出力するので、それを分析して自動的に工場を調整するだけですよ
reward_demo_end: reward_demo_end:
title: お試し終了 title: お試し終了
desc: デモ版の最後に到達しました! desc: デモ版の最後に到達しました!
@ -665,13 +656,13 @@ settings:
extremely_fast: 極速 extremely_fast: 極速
language: language:
title: 言語 title: 言語
description: 言語を変更します。すべての翻訳はユーザーからの協力で成り立っており、まだ完全には完了していない可能性があります! description: 言語を変更します。すべての翻訳はユーザーの皆さんの協力によるものであり、まだ不完全な可能性があります!
enableColorBlindHelper: enableColorBlindHelper:
title: 色覚モード title: 色覚モード
description: 色覚特性を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。 description: 色覚特性を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。
fullscreen: fullscreen:
title: フルスクリーン title: フルスクリーン
description: フルスクリーンでのプレイが推奨す。スタンドアローン版のみ変更可能です。 description: フルスクリーンでのプレイが推奨されます。スタンドアローン版のみ変更可能です。
soundsMuted: soundsMuted:
title: 効果音ミュート title: 効果音ミュート
description: 有効に設定するとすべての効果音をミュートします。 description: 有効に設定するとすべての効果音をミュートします。
@ -686,13 +677,13 @@ settings:
description: 音楽の音量を設定してください。 description: 音楽の音量を設定してください。
theme: theme:
title: ゲームテーマ title: ゲームテーマ
description: ゲームテーマを選択します。 (ライト / ダーク). description: ゲームテーマを選択します。(ライト/ダーク)
themes: themes:
dark: ダーク dark: ダーク
light: ライト light: ライト
refreshRate: refreshRate:
title: シミュレーション対象 title: リフレッシュレート
description: もし144hzのモニターを利用しているなら、この設定でリフレッシュレートを変更することで、ゲームが高リフレッシュレートを正しくシミュレーションします。利用しているPCが非力な場合、この設定により実効FPSが遅くなる可能性があります。 description: 秒間何回ゲームが更新されるかを設定できます。一般的には値が高いほど正確になりますが、パフォーマンスは低下します。値が低い場合、正確なスループットを計測できなくなる可能性があります。
alwaysMultiplace: alwaysMultiplace:
title: 連続配置 title: 連続配置
description: この設定を有効にすると、建造物を選択後に意図的にキャンセルするまで選択された状態を維持します。これはSHIFTキーを押し続けている状態と同等です。 description: この設定を有効にすると、建造物を選択後に意図的にキャンセルするまで選択された状態を維持します。これはSHIFTキーを押し続けている状態と同等です。
@ -749,7 +740,7 @@ settings:
description: ズームアウトしたときの図形のサイズを調節します。 description: ズームアウトしたときの図形のサイズを調節します。
keybindings: keybindings:
title: キー設定 title: キー設定
hint: "Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。" hint: "Tip: CTRL, SHIFT, ALTを活用してください。建造物配置の際の追加機能がそれぞれ割り当てられています。"
resetKeybindings: キー設定をリセット resetKeybindings: キー設定をリセット
categoryLabels: categoryLabels:
general: アプリケーション general: アプリケーション
@ -785,7 +776,7 @@ keybindings:
cutter: 切断機 cutter: 切断機
rotater: 回転機 rotater: 回転機
stacker: 積層機 stacker: 積層機
mixer: mixer:
painter: 着色機 painter: 着色機
trash: ゴミ箱 trash: ゴミ箱
storage: ストレージ storage: ストレージ
@ -811,31 +802,31 @@ keybindings:
cycleBuildings: 建造物の選択 cycleBuildings: 建造物の選択
lockBeltDirection: ベルトプランナーを有効化 lockBeltDirection: ベルトプランナーを有効化
switchDirectionLockSide: "プランナー: 通る側を切り替え" switchDirectionLockSide: "プランナー: 通る側を切り替え"
copyWireValue: "ワイヤ: カーソルに合っている形状信号をキーとしてコピー" copyWireValue: "ワイヤ: カーソルの下の形状信号をキーとしてコピー"
massSelectStart: マウスドラッグで開始 massSelectStart: マウスドラッグで開始
massSelectSelectMultiple: 複数範囲選択 massSelectSelectMultiple: 複数範囲選択
massSelectCopy: 範囲コピー massSelectCopy: 範囲コピー
massSelectCut: 範囲カット massSelectCut: 範囲カット
placementDisableAutoOrientation: 自動向き合わせ無効 placementDisableAutoOrientation: 自動向き合わせ無効
placeMultiple: 配置モードの維持 placeMultiple: 配置モードの維持
placeInverse: ベルトの自動向き合わせを逆転 placeInverse: ベルトの自動向き合わせを逆転
rotateToUp: "Rotate: Point Up" rotateToUp: "回転: 上向きにする"
rotateToDown: "Rotate: Point Down" rotateToDown: "回転: 下向きにする"
rotateToRight: "Rotate: Point Right" rotateToRight: "回転: 右向きにする"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "回転: 左向きにする"
about: about:
title: このゲームについて title: このゲームについて
body: >- body: >-
このゲームはオープンソースであり、<a href="https://github.com/tobspr" このゲームはオープンソースであり、<a href="https://github.com/tobspr"
target="_blank">Tobias Springer</a> (私)によって開発されています。<br><br> target="_blank">Tobias Springer</a> (私です)によって開発されています。<br><br>
開発に参加したい場合は以下をチェックしてみてください。<a href="<githublink>" target="_blank">shapez.io on github</a>.<br><br> 開発に参加したい場合はこちらをチェックしてみてください:<a href="<githublink>" target="_blank">shapez.io on github</a>.<br><br>
このゲームはdiscordでの素晴らしいコミュニティなしには実現しませんでした。 - このサーバにも是非参加してください! <a href="<discordlink>" target="_blank">Discord server</a>!<br><br> このゲームは素晴らしいDiscordコミュニティなしには実現しませんでした。 - このサーバにも是非参加してください! <a href="<discordlink>" target="_blank">Discord server</a>!<br><br>
サウンドトラックは<a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a>により製作されました。 - 彼は素晴らしいです<br><br> サウンドトラックは<a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a>により製作されました。 - 彼は素晴らしいです<br><br>
最後に、私の最高の友人<a href="https://github.com/niklas-dahl" target="_blank">Niklas</a>に大きな感謝を。 - 彼とのFactorioのゲーム体験がなければ、このゲームは存在しませんでした 最後に、私の最高の友人<a href="https://github.com/niklas-dahl" target="_blank">Niklas</a>に大きな感謝を。 - 彼とのFactorioのゲーム体験がなければ、このゲームは存在しなかったでしょう
changelog: changelog:
title: 更新履歴 title: 更新履歴
demo: demo:
@ -869,9 +860,9 @@ tips:
- 切断機は配置された向きを考慮せず、常に垂直に切断します。 - 切断機は配置された向きを考慮せず、常に垂直に切断します。
- ストレージは左側の出力を優先します。 - ストレージは左側の出力を優先します。
- 増築可能なデザインを作るために時間を使ってください。それだけの価値があります! - 増築可能なデザインを作るために時間を使ってください。それだけの価値があります!
- Invest time to build repeatable designs - it's worth it! - <b>SHIFT</b>を使用すると複数の建物を一度に配置できます。
- <b>ALT</b>を押しながらベルトを設置すると、逆向きに設置できます。 - <b>ALT</b>を押しながらベルトを設置すると、向きを逆転できます。
- You can hold <b>ALT</b> to invert the direction of placed belts. - 効率が重要です!
- ハブから遠くに離れるほど、形状資源はより複雑な形になります。 - ハブから遠くに離れるほど、形状資源はより複雑な形になります。
- 機械の速度には上限があるので、最大効率を得るためには入力を分割してください。 - 機械の速度には上限があるので、最大効率を得るためには入力を分割してください。
- 効率を最大化するために分配機/合流機を使用できます。 - 効率を最大化するために分配機/合流機を使用できます。
@ -886,9 +877,9 @@ tips:
- 最大の効率を得るためには、切断する前に着色をしてください。 - 最大の効率を得るためには、切断する前に着色をしてください。
- モジュールがあれば、空間はただの認識に過ぎなくなる――生ある人間に対する気遣いだ。 - モジュールがあれば、空間はただの認識に過ぎなくなる――生ある人間に対する気遣いだ。
- 設計図としての工場を別に作っておくと、工場のモジュール化において重要な役割を果たします。 - 設計図としての工場を別に作っておくと、工場のモジュール化において重要な役割を果たします。
- 機をよく見ると、色の混ぜ方が解ります。 - 機をよく見ると、色の混ぜ方が解ります。
- Have a closer look at the color mixer, and your questions will be answered. - <b>CTRL</b> + クリックで範囲選択ができます。
- Use <b>CTRL</b> + Click to select an area. - ハブに近すぎる設計物を作ると、のちの設計の邪魔になるかもしれません。
- アップグレードリストの各形状の横にあるピンのアイコンは、その形状を画面左に固定表示します。 - アップグレードリストの各形状の横にあるピンのアイコンは、その形状を画面左に固定表示します。
- 三原色全てを混ぜ合わせると白になります! - 三原色全てを混ぜ合わせると白になります!
- マップは無限の広さがあります。臆せずに拡張してください。 - マップは無限の広さがあります。臆せずに拡張してください。
@ -899,7 +890,6 @@ tips:
- このゲームにはたくさんの設定があります。是非チェックしてみてください! - このゲームにはたくさんの設定があります。是非チェックしてみてください!
- ハブのマーカーには、その方向を示す小さなコンパスがついています。 - ハブのマーカーには、その方向を示す小さなコンパスがついています。
- ベルトの中身をクリアするには、範囲選択して同じ場所に貼り付けをします。 - ベルトの中身をクリアするには、範囲選択して同じ場所に貼り付けをします。
- F4を押すことで、FPSとTickレートを表示することができます。 - F4を押すことで、FPSとTickレートを表示できます。
- F4を2回押すと、マウスとカメラの座標を表示することができます。 - F4を2回押すと、マウスとカメラの座標を表示できます。
- 左のピン留めされた図形をクリックすると、固定を解除できます。 - 左のピン留めされた図形をクリックすると、固定を解除できます。
- You can click a pinned shape on the left side to unpin it.

View File

@ -13,14 +13,14 @@ steamPage:
Enquanto no começo você apenas processa as formas, mais a frente você deve pintá-las - para isso você deve extrair e misturar cores! Enquanto no começo você apenas processa as formas, mais a frente você deve pintá-las - para isso você deve extrair e misturar cores!
Comprar o jogo na Steam te garante acesso à versão completa, mas você pode jogar a versão demo em shapez.io primeiro e decidir depois! Comprar o jogo na Steam te garante acesso à versão completa, mas você pode jogar a versão demo em shapez.io primeiro e decidir depois!
what_others_say: What people say about shapez.io what_others_say: O que as pessoas dizem sobre o shapez.io
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando
and time has flown by. e o tempo passou voando.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei
how to make a computer in shapez.io de descobrir como fazer um computador no shapez.io
steam_review_comment: This game has stolen my life and I don't want it back. steam_review_comment: Este jogo roubou minha vida e eu não a quero de volta.
Very chill factory game that won't let me stop making my lines more Jogo de fábrica muito descontraído que não me deixa parar de fazer
efficient. linhas mais eficientes.
global: global:
loading: Carregando loading: Carregando
error: Erro error: Erro
@ -214,7 +214,7 @@ ingame:
uncolored: Sem cor uncolored: Sem cor
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Aperte <key> para variações. cycleBuildingVariants: Aperte <key> para variações.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Tecla: <key>"
infoTexts: infoTexts:
speed: Velocidade speed: Velocidade
range: Distância range: Distância
@ -299,7 +299,7 @@ ingame:
não for necessário. não for necessário.
2_3_more_cutters: "Bom trabalho! Agora coloque <strong>mais 2 2_3_more_cutters: "Bom trabalho! Agora coloque <strong>mais 2
cortadores</strong> para acelerar este processo lento!<br><br> cortadores</strong> para acelerar este processo lento!<br><br>
PS: Use as <strong> hotkeys 0-9 </strong> para acessar as PS: Use as <strong> teclas 0-9 </strong> para acessar as
construções mais rápido!" construções mais rápido!"
3_1_rectangles: "Vamos extrair alguns retângulos! <strong>Construa 4 3_1_rectangles: "Vamos extrair alguns retângulos! <strong>Construa 4
extratores</strong> e conecte-os ao hub.<br><br> PS: Segure extratores</strong> e conecte-os ao hub.<br><br> PS: Segure

View File

@ -1 +1 @@
1.3.0 1.3.1