mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-23 23:57:55 -05:00
Merge branch 'develop' into release/2021-04-15
This commit is contained in:
commit
1c4b1add76
6 changed files with 419 additions and 309 deletions
393
package-lock.json
generated
393
package-lock.json
generated
|
@ -16,9 +16,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/cli": {
|
"@babel/cli": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.16.tgz",
|
||||||
"integrity": "sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw==",
|
"integrity": "sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
|
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents",
|
||||||
|
@ -27,7 +27,6 @@
|
||||||
"convert-source-map": "^1.1.0",
|
"convert-source-map": "^1.1.0",
|
||||||
"fs-readdir-recursive": "^1.1.0",
|
"fs-readdir-recursive": "^1.1.0",
|
||||||
"glob": "^7.0.0",
|
"glob": "^7.0.0",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"make-dir": "^2.1.0",
|
"make-dir": "^2.1.0",
|
||||||
"slash": "^2.0.0",
|
"slash": "^2.0.0",
|
||||||
"source-map": "^0.5.0"
|
"source-map": "^0.5.0"
|
||||||
|
@ -159,12 +158,6 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"make-dir": {
|
"make-dir": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
||||||
|
@ -232,20 +225,20 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/core": {
|
"@babel/core": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz",
|
||||||
"integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==",
|
"integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.12.13",
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/generator": "^7.13.9",
|
"@babel/generator": "^7.13.16",
|
||||||
"@babel/helper-compilation-targets": "^7.13.13",
|
"@babel/helper-compilation-targets": "^7.13.16",
|
||||||
"@babel/helper-module-transforms": "^7.13.14",
|
"@babel/helper-module-transforms": "^7.13.14",
|
||||||
"@babel/helpers": "^7.13.10",
|
"@babel/helpers": "^7.13.16",
|
||||||
"@babel/parser": "^7.13.15",
|
"@babel/parser": "^7.13.16",
|
||||||
"@babel/template": "^7.12.13",
|
"@babel/template": "^7.12.13",
|
||||||
"@babel/traverse": "^7.13.15",
|
"@babel/traverse": "^7.13.15",
|
||||||
"@babel/types": "^7.13.14",
|
"@babel/types": "^7.13.16",
|
||||||
"convert-source-map": "^1.7.0",
|
"convert-source-map": "^1.7.0",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"gensync": "^1.0.0-beta.2",
|
"gensync": "^1.0.0-beta.2",
|
||||||
|
@ -264,12 +257,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.13.9",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
|
||||||
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
|
"integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.13.0",
|
"@babel/types": "^7.13.16",
|
||||||
"jsesc": "^2.5.1",
|
"jsesc": "^2.5.1",
|
||||||
"source-map": "^0.5.0"
|
"source-map": "^0.5.0"
|
||||||
}
|
}
|
||||||
|
@ -315,9 +308,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
|
||||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
|
"integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
|
@ -332,29 +325,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
|
||||||
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
|
"integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.12.13",
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/generator": "^7.13.9",
|
"@babel/generator": "^7.13.16",
|
||||||
"@babel/helper-function-name": "^7.12.13",
|
"@babel/helper-function-name": "^7.12.13",
|
||||||
"@babel/helper-split-export-declaration": "^7.12.13",
|
"@babel/helper-split-export-declaration": "^7.12.13",
|
||||||
"@babel/parser": "^7.13.15",
|
"@babel/parser": "^7.13.16",
|
||||||
"@babel/types": "^7.13.14",
|
"@babel/types": "^7.13.17",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"globals": "^11.1.0"
|
"globals": "^11.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -423,12 +415,6 @@
|
||||||
"minimist": "^1.2.5"
|
"minimist": "^1.2.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||||
|
@ -492,12 +478,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/helper-compilation-targets": {
|
"@babel/helper-compilation-targets": {
|
||||||
"version": "7.13.13",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
|
||||||
"integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==",
|
"integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/compat-data": "^7.13.12",
|
"@babel/compat-data": "^7.13.15",
|
||||||
"@babel/helper-validator-option": "^7.12.17",
|
"@babel/helper-validator-option": "^7.12.17",
|
||||||
"browserslist": "^4.14.5",
|
"browserslist": "^4.14.5",
|
||||||
"semver": "^6.3.0"
|
"semver": "^6.3.0"
|
||||||
|
@ -517,9 +503,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.3.717",
|
"version": "1.3.719",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.719.tgz",
|
||||||
"integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==",
|
"integrity": "sha512-heM78GKSqrIzO9Oz0/y22nTBN7bqSP1Pla2SyU9DiSnQD+Ea9SyyN5RWWlgqsqeBLNDkSlE9J9EHFmdMPzxB/g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
|
@ -560,22 +546,15 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -594,22 +573,15 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -644,12 +616,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.13.9",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
|
||||||
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
|
"integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.13.0",
|
"@babel/types": "^7.13.16",
|
||||||
"jsesc": "^2.5.1",
|
"jsesc": "^2.5.1",
|
||||||
"source-map": "^0.5.0"
|
"source-map": "^0.5.0"
|
||||||
}
|
}
|
||||||
|
@ -695,9 +667,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
|
||||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
|
"integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
|
@ -712,29 +684,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
|
||||||
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
|
"integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.12.13",
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/generator": "^7.13.9",
|
"@babel/generator": "^7.13.16",
|
||||||
"@babel/helper-function-name": "^7.12.13",
|
"@babel/helper-function-name": "^7.12.13",
|
||||||
"@babel/helper-split-export-declaration": "^7.12.13",
|
"@babel/helper-split-export-declaration": "^7.12.13",
|
||||||
"@babel/parser": "^7.13.15",
|
"@babel/parser": "^7.13.16",
|
||||||
"@babel/types": "^7.13.14",
|
"@babel/types": "^7.13.17",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"globals": "^11.1.0"
|
"globals": "^11.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -785,12 +756,6 @@
|
||||||
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
@ -824,22 +789,15 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -876,12 +834,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.13.9",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
|
||||||
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
|
"integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.13.0",
|
"@babel/types": "^7.13.16",
|
||||||
"jsesc": "^2.5.1",
|
"jsesc": "^2.5.1",
|
||||||
"source-map": "^0.5.0"
|
"source-map": "^0.5.0"
|
||||||
}
|
}
|
||||||
|
@ -927,9 +885,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
|
||||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
|
"integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
|
@ -944,29 +902,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
|
||||||
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
|
"integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.12.13",
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/generator": "^7.13.9",
|
"@babel/generator": "^7.13.16",
|
||||||
"@babel/helper-function-name": "^7.12.13",
|
"@babel/helper-function-name": "^7.12.13",
|
||||||
"@babel/helper-split-export-declaration": "^7.12.13",
|
"@babel/helper-split-export-declaration": "^7.12.13",
|
||||||
"@babel/parser": "^7.13.15",
|
"@babel/parser": "^7.13.16",
|
||||||
"@babel/types": "^7.13.14",
|
"@babel/types": "^7.13.17",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"globals": "^11.1.0"
|
"globals": "^11.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1017,12 +974,6 @@
|
||||||
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
@ -1056,22 +1007,15 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
|
@ -1102,14 +1046,14 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/helpers": {
|
"@babel/helpers": {
|
||||||
"version": "7.13.10",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz",
|
||||||
"integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
|
"integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/template": "^7.12.13",
|
"@babel/template": "^7.12.13",
|
||||||
"@babel/traverse": "^7.13.0",
|
"@babel/traverse": "^7.13.17",
|
||||||
"@babel/types": "^7.13.0"
|
"@babel/types": "^7.13.17"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": {
|
"@babel/code-frame": {
|
||||||
|
@ -1122,12 +1066,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.13.9",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
|
||||||
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
|
"integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.13.0",
|
"@babel/types": "^7.13.16",
|
||||||
"jsesc": "^2.5.1",
|
"jsesc": "^2.5.1",
|
||||||
"source-map": "^0.5.0"
|
"source-map": "^0.5.0"
|
||||||
}
|
}
|
||||||
|
@ -1173,9 +1117,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.16",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
|
||||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
|
"integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
|
@ -1190,29 +1134,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.13.15",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
|
||||||
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
|
"integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.12.13",
|
"@babel/code-frame": "^7.12.13",
|
||||||
"@babel/generator": "^7.13.9",
|
"@babel/generator": "^7.13.16",
|
||||||
"@babel/helper-function-name": "^7.12.13",
|
"@babel/helper-function-name": "^7.12.13",
|
||||||
"@babel/helper-split-export-declaration": "^7.12.13",
|
"@babel/helper-split-export-declaration": "^7.12.13",
|
||||||
"@babel/parser": "^7.13.15",
|
"@babel/parser": "^7.13.16",
|
||||||
"@babel/types": "^7.13.14",
|
"@babel/types": "^7.13.17",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
"globals": "^11.1.0"
|
"globals": "^11.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.13.14",
|
"version": "7.13.17",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
|
||||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
"integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.12.11",
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
"lodash": "^4.17.19",
|
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1263,12 +1206,6 @@
|
||||||
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
@ -4849,9 +4786,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001208",
|
"version": "1.0.30001214",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz",
|
||||||
"integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==",
|
"integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"canvas-fit": {
|
"canvas-fit": {
|
||||||
|
@ -20903,9 +20840,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-blocks": {
|
"scratch-blocks": {
|
||||||
"version": "0.1.0-prerelease.20210324033606",
|
"version": "0.1.0-prerelease.20210415062829",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210324033606.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210415062829.tgz",
|
||||||
"integrity": "sha512-zCf7mN64RLME1tA9t2HcDEnf5h5+ziMyksbQj3gsWOUylYLrrYksMBw7wprVEMdPBJwz+4HhpcpkkrCQV1NVnw==",
|
"integrity": "sha512-tQoVJdUb00kfBtLVyG7r1XTrtTVqSmol+cxUt0Z7IgIata9J1LOORJ/7zkEpohKMdMRE+76b2QXW/mR2I/bNAg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"exports-loader": "0.6.3",
|
"exports-loader": "0.6.3",
|
||||||
|
@ -20913,9 +20850,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-gui": {
|
"scratch-gui": {
|
||||||
"version": "0.1.0-prerelease.20210324120840",
|
"version": "0.1.0-prerelease.20210415094805",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210324120840.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210415094805.tgz",
|
||||||
"integrity": "sha512-6KLZfZdJLAMLBDJo/LC6f0ckUg0CefE941NvBiNmV2XOIAoMPe5gq/eX3C1JT6BDLAFw4ogw4+K1KmQX/PYibw==",
|
"integrity": "sha512-0NaKb++BNm+WLHsvkVGp6HBJYYyysdcvhUkrCAmfWIUvOucnLx2z/rbv8xY9EhA/6DJCeybFQ0sP+Tx757d6rQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"arraybuffer-loader": "^1.0.6",
|
"arraybuffer-loader": "^1.0.6",
|
||||||
|
@ -20966,14 +20903,14 @@
|
||||||
"redux": "3.7.2",
|
"redux": "3.7.2",
|
||||||
"redux-throttle": "0.1.1",
|
"redux-throttle": "0.1.1",
|
||||||
"scratch-audio": "0.1.0-prerelease.20200528195344",
|
"scratch-audio": "0.1.0-prerelease.20200528195344",
|
||||||
"scratch-blocks": "0.1.0-prerelease.20210324033606",
|
"scratch-blocks": "0.1.0-prerelease.20210415062829",
|
||||||
"scratch-l10n": "3.11.20210324031512",
|
"scratch-l10n": "3.11.20210415031450",
|
||||||
"scratch-paint": "0.2.0-prerelease.20210319222931",
|
"scratch-paint": "0.2.0-prerelease.20210407203313",
|
||||||
"scratch-render": "0.1.0-prerelease.20210317200605",
|
"scratch-render": "0.1.0-prerelease.20210325231800",
|
||||||
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
|
"scratch-render-fonts": "1.0.0-prerelease.20210401210003",
|
||||||
"scratch-storage": "1.3.3",
|
"scratch-storage": "1.3.3",
|
||||||
"scratch-svg-renderer": "0.2.0-prerelease.20210317184701",
|
"scratch-svg-renderer": "0.2.0-prerelease.20210408171934",
|
||||||
"scratch-vm": "0.2.0-prerelease.20210324111836",
|
"scratch-vm": "0.2.0-prerelease.20210412181234",
|
||||||
"startaudiocontext": "1.2.1",
|
"startaudiocontext": "1.2.1",
|
||||||
"style-loader": "^0.23.0",
|
"style-loader": "^0.23.0",
|
||||||
"text-encoding": "0.7.0",
|
"text-encoding": "0.7.0",
|
||||||
|
@ -21136,9 +21073,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.3.717",
|
"version": "1.3.719",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.719.tgz",
|
||||||
"integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==",
|
"integrity": "sha512-heM78GKSqrIzO9Oz0/y22nTBN7bqSP1Pla2SyU9DiSnQD+Ea9SyyN5RWWlgqsqeBLNDkSlE9J9EHFmdMPzxB/g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"has-flag": {
|
"has-flag": {
|
||||||
|
@ -21359,9 +21296,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"scratch-l10n": {
|
"scratch-l10n": {
|
||||||
"version": "3.11.20210324031512",
|
"version": "3.11.20210415031450",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210324031512.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210415031450.tgz",
|
||||||
"integrity": "sha512-dyv2cjNWVHrL78XpW64uF2azYaUhMKLjfJVH6vSCPJxm3EKCvO6EoaUSlIAwhsGoMwgfxWZ8D74+IaifGJfnCQ==",
|
"integrity": "sha512-8C/fNxF2PtHu3ZFCB6lSkGMTUs/R/Pyyk6RpiPh1Wn5faxFKcsB0C7IuIhBwDsbWYtHcrWYTHdbBSAaQA2Ho/A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/cli": "^7.1.2",
|
"@babel/cli": "^7.1.2",
|
||||||
|
@ -21438,9 +21375,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-l10n": {
|
"scratch-l10n": {
|
||||||
"version": "3.11.20210413031556",
|
"version": "3.11.20210421031523",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210413031556.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210421031523.tgz",
|
||||||
"integrity": "sha512-mmD0wvRCgkVgx7scN14CQ6NPDqaL0uT//ZFQWpp5foTBuXokXPh9jRrJ+KScCeXK7jaXMLeJa6r4q1ivpnVXGQ==",
|
"integrity": "sha512-Tp6/xlrpkDdsSzQN+IsqhqsUVkG1tT1xRlD+dcK3ctdH1Ro9B4dcJWBvsa2w3VQHj3f0yqn36jpu9TjnqEmoVg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/cli": "^7.1.2",
|
"@babel/cli": "^7.1.2",
|
||||||
|
@ -21451,9 +21388,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-paint": {
|
"scratch-paint": {
|
||||||
"version": "0.2.0-prerelease.20210319222931",
|
"version": "0.2.0-prerelease.20210407203313",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20210319222931.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20210407203313.tgz",
|
||||||
"integrity": "sha512-O5tIIQ6ECsLZ3iol2S3OV3yaVyM1i6Kk0YVAR219t6GnSv1ux6RCD3qs7g8HCa+G3f+PHKBcCIk4DCR8Qv59Uw==",
|
"integrity": "sha512-dAg+7Bh8X4PxukXnIXN1NVDELSCmPsTRh2a2taM1MGIl9zqZLTo3nxz95qZ2aC6tnVZYY/oJRjl9UAnm47Fe4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@scratch/paper": "0.11.20200728195508",
|
"@scratch/paper": "0.11.20200728195508",
|
||||||
|
@ -21463,8 +21400,7 @@
|
||||||
"lodash.omit": "4.5.0",
|
"lodash.omit": "4.5.0",
|
||||||
"minilog": "3.1.0",
|
"minilog": "3.1.0",
|
||||||
"parse-color": "1.0.0",
|
"parse-color": "1.0.0",
|
||||||
"prop-types": "^15.5.10",
|
"prop-types": "^15.5.10"
|
||||||
"scratch-render-fonts": "^1.0.0-prerelease.20210401210003"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lodash.omit": {
|
"lodash.omit": {
|
||||||
|
@ -21487,15 +21423,6 @@
|
||||||
"requires": {
|
"requires": {
|
||||||
"microee": "0.0.6"
|
"microee": "0.0.6"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"scratch-render-fonts": {
|
|
||||||
"version": "1.0.0-prerelease.20210401210003",
|
|
||||||
"resolved": "https://registry.npmjs.org/scratch-render-fonts/-/scratch-render-fonts-1.0.0-prerelease.20210401210003.tgz",
|
|
||||||
"integrity": "sha512-sgU+LIXTLKk4f7FZOv/B61dpvmfpnlXFf912T6T4GpOfzx99JPRhXPyErZWuwPz8NEzthkhpO7iF2AqgzUxJfA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"base64-loader": "1.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21522,9 +21449,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-render": {
|
"scratch-render": {
|
||||||
"version": "0.1.0-prerelease.20210317200605",
|
"version": "0.1.0-prerelease.20210325231800",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20210317200605.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20210325231800.tgz",
|
||||||
"integrity": "sha512-HbWHTOX9X/jlZw0HINKfHkZ8H7GHiyqR8Cj3jKowHrH2r8bTn7K8DfT3Ql81fepMxVqqeKFPPnpvHwvDEaYWKg==",
|
"integrity": "sha512-hjiIHRR8SuP/8UKKZ4O+TIJaCZ2wSN6uoEM49jwNjZecAaflBvd5t/OLL3NFQp3q7Ra6ncDi+B7URy7WRdm2fg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"grapheme-breaker": "0.3.2",
|
"grapheme-breaker": "0.3.2",
|
||||||
|
@ -21565,6 +21492,15 @@
|
||||||
"microee": "0.0.6"
|
"microee": "0.0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"scratch-render-fonts": {
|
||||||
|
"version": "1.0.0-prerelease.20200507182347",
|
||||||
|
"resolved": "https://registry.npmjs.org/scratch-render-fonts/-/scratch-render-fonts-1.0.0-prerelease.20200507182347.tgz",
|
||||||
|
"integrity": "sha512-tVt2s7lxsBhme9WKIZTnluMerdJVGEc80QSrDdIIzUvHXGCIYkLh6j7ytwXcyq2UsA34d93op9+I9Bh1SPkQkA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-loader": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scratch-storage": {
|
"scratch-storage": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
|
||||||
|
@ -21580,6 +21516,28 @@
|
||||||
"worker-loader": "^2.0.0"
|
"worker-loader": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"scratch-svg-renderer": {
|
||||||
|
"version": "0.2.0-prerelease.20210317184701",
|
||||||
|
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20210317184701.tgz",
|
||||||
|
"integrity": "sha512-drHD8kRTU//Rqgs8F6oWmBIQi6TunI86Skvp7BfM+mqalds3GzaPjZHKSCFkdkXbHO4i/zAPLvkQtMDdLm4Y6g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-js": "1.2.1",
|
||||||
|
"base64-loader": "1.0.0",
|
||||||
|
"dompurify": "2.1.1",
|
||||||
|
"minilog": "3.1.0",
|
||||||
|
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
|
||||||
|
"transformation-matrix": "1.15.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"text-encoding": {
|
"text-encoding": {
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
|
||||||
|
@ -21589,9 +21547,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-render-fonts": {
|
"scratch-render-fonts": {
|
||||||
"version": "1.0.0-prerelease.20200507182347",
|
"version": "1.0.0-prerelease.20210401210003",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-render-fonts/-/scratch-render-fonts-1.0.0-prerelease.20200507182347.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-render-fonts/-/scratch-render-fonts-1.0.0-prerelease.20210401210003.tgz",
|
||||||
"integrity": "sha512-tVt2s7lxsBhme9WKIZTnluMerdJVGEc80QSrDdIIzUvHXGCIYkLh6j7ytwXcyq2UsA34d93op9+I9Bh1SPkQkA==",
|
"integrity": "sha512-sgU+LIXTLKk4f7FZOv/B61dpvmfpnlXFf912T6T4GpOfzx99JPRhXPyErZWuwPz8NEzthkhpO7iF2AqgzUxJfA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-loader": "1.0.0"
|
"base64-loader": "1.0.0"
|
||||||
|
@ -21651,19 +21609,24 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-svg-renderer": {
|
"scratch-svg-renderer": {
|
||||||
"version": "0.2.0-prerelease.20210317184701",
|
"version": "0.2.0-prerelease.20210408171934",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20210317184701.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20210408171934.tgz",
|
||||||
"integrity": "sha512-drHD8kRTU//Rqgs8F6oWmBIQi6TunI86Skvp7BfM+mqalds3GzaPjZHKSCFkdkXbHO4i/zAPLvkQtMDdLm4Y6g==",
|
"integrity": "sha512-kc59fyZlJ58ooW86VQo9oqXNzpR48RH7vObehekVyPq4FMRENwtv9gCZ5XitLPNsLEheFCJdfRVPkVsMAjhPYQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-js": "1.2.1",
|
"base64-js": "1.2.1",
|
||||||
"base64-loader": "1.0.0",
|
"base64-loader": "1.0.0",
|
||||||
"dompurify": "2.1.1",
|
"dompurify": "2.2.7",
|
||||||
"minilog": "3.1.0",
|
"minilog": "3.1.0",
|
||||||
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
|
|
||||||
"transformation-matrix": "1.15.0"
|
"transformation-matrix": "1.15.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"dompurify": {
|
||||||
|
"version": "2.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.7.tgz",
|
||||||
|
"integrity": "sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"microee": {
|
"microee": {
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/microee/-/microee-0.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/microee/-/microee-0.0.6.tgz",
|
||||||
|
@ -21688,9 +21651,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"scratch-vm": {
|
"scratch-vm": {
|
||||||
"version": "0.2.0-prerelease.20210324111836",
|
"version": "0.2.0-prerelease.20210412181234",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20210324111836.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20210412181234.tgz",
|
||||||
"integrity": "sha512-vOayLHJJ3ZYS2XUIVPnIMZmaW/JuazC9x32Lc/i64ZxPsQjO8pANgeUN/8A5LdEc5ZO2YG2I3JWRBLnK6o+LEw==",
|
"integrity": "sha512-xhLd4GJ9O9kgPzHj4LJhOALYbR/9FJBszrnsjKoiU2ErQD3/iZwWYqsnFjHKVvqv8wo27SAmF4crjDQyEIGY+A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@vernier/godirect": "1.5.0",
|
"@vernier/godirect": "1.5.0",
|
||||||
|
|
|
@ -126,7 +126,7 @@
|
||||||
"redux-mock-store": "^1.2.3",
|
"redux-mock-store": "^1.2.3",
|
||||||
"redux-thunk": "2.0.1",
|
"redux-thunk": "2.0.1",
|
||||||
"sass-loader": "6.0.6",
|
"sass-loader": "6.0.6",
|
||||||
"scratch-gui": "0.1.0-prerelease.20210324120840",
|
"scratch-gui": "0.1.0-prerelease.20210415094805",
|
||||||
"scratch-l10n": "latest",
|
"scratch-l10n": "latest",
|
||||||
"selenium-webdriver": "3.6.0",
|
"selenium-webdriver": "3.6.0",
|
||||||
"slick-carousel": "1.6.0",
|
"slick-carousel": "1.6.0",
|
||||||
|
|
|
@ -31,8 +31,14 @@ const {
|
||||||
selectStudioId
|
selectStudioId
|
||||||
} = require('./studio');
|
} = require('./studio');
|
||||||
|
|
||||||
const getReplies = (studioId, commentIds, offset, isAdmin, token) => (dispatch => {
|
const getReplies = (commentIds, offset) => ((dispatch, getState) => {
|
||||||
|
if (!Array.isArray(commentIds)) commentIds = [commentIds];
|
||||||
|
|
||||||
dispatch(setFetchStatus('replies', Status.FETCHING));
|
dispatch(setFetchStatus('replies', Status.FETCHING));
|
||||||
|
const state = getState();
|
||||||
|
const studioId = selectStudioId(state);
|
||||||
|
const isAdmin = selectIsAdmin(state);
|
||||||
|
const token = selectToken(state);
|
||||||
const fetchedReplies = {};
|
const fetchedReplies = {};
|
||||||
eachLimit(commentIds, 10, (parentId, callback) => {
|
eachLimit(commentIds, 10, (parentId, callback) => {
|
||||||
api({
|
api({
|
||||||
|
@ -84,7 +90,7 @@ const getTopLevelComments = () => ((dispatch, getState) => {
|
||||||
}
|
}
|
||||||
dispatch(setFetchStatus('comments', Status.FETCHED));
|
dispatch(setFetchStatus('comments', Status.FETCHED));
|
||||||
dispatch(setComments(body));
|
dispatch(setComments(body));
|
||||||
dispatch(getReplies(id, body.map(comment => comment.id), 0, isAdmin, token));
|
dispatch(getReplies(body.map(comment => comment.id), 0));
|
||||||
|
|
||||||
// If we loaded a full page of comments, assume there are more to load.
|
// If we loaded a full page of comments, assume there are more to load.
|
||||||
// This will be wrong (1 / COMMENT_LIMIT) of the time, but does not require
|
// This will be wrong (1 / COMMENT_LIMIT) of the time, but does not require
|
||||||
|
@ -95,7 +101,11 @@ const getTopLevelComments = () => ((dispatch, getState) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const getCommentById = (studioId, commentId, isAdmin, token) => (dispatch => {
|
const getCommentById = commentId => ((dispatch, getState) => {
|
||||||
|
const state = getState();
|
||||||
|
const studioId = selectStudioId(state);
|
||||||
|
const isAdmin = selectIsAdmin(state);
|
||||||
|
const token = selectToken(state);
|
||||||
dispatch(setFetchStatus('comments', Status.FETCHING));
|
dispatch(setFetchStatus('comments', Status.FETCHING));
|
||||||
api({
|
api({
|
||||||
uri: `${isAdmin ? '/admin' : ''}/studios/${studioId}/comments/${commentId}`,
|
uri: `${isAdmin ? '/admin' : ''}/studios/${studioId}/comments/${commentId}`,
|
||||||
|
@ -114,18 +124,20 @@ const getCommentById = (studioId, commentId, isAdmin, token) => (dispatch => {
|
||||||
|
|
||||||
if (body.parent_id) {
|
if (body.parent_id) {
|
||||||
// If the comment is a reply, load the parent
|
// If the comment is a reply, load the parent
|
||||||
return dispatch(getCommentById(studioId, body.parent_id, isAdmin, token));
|
return dispatch(getCommentById(body.parent_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the comment is not a reply, show it as top level and load replies
|
// If the comment is not a reply, show it as top level and load replies
|
||||||
dispatch(setFetchStatus('comments', Status.FETCHED));
|
dispatch(setFetchStatus('comments', Status.FETCHED));
|
||||||
dispatch(setComments([body]));
|
dispatch(setComments([body]));
|
||||||
dispatch(getReplies(studioId, [body.id], 0, isAdmin, token));
|
dispatch(getReplies(body.id, 0));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const deleteComment = (studioId, commentId, topLevelCommentId, token) => (dispatch => {
|
const deleteComment = (commentId, topLevelCommentId) => ((dispatch, getState) => {
|
||||||
/* TODO fetching/fetched/error states updates for comment deleting */
|
const state = getState();
|
||||||
|
const studioId = selectStudioId(state);
|
||||||
|
const token = selectToken(state);
|
||||||
api({
|
api({
|
||||||
uri: `/proxy/comments/studio/${studioId}/comment/${commentId}`,
|
uri: `/proxy/comments/studio/${studioId}/comment/${commentId}`,
|
||||||
authentication: token,
|
authentication: token,
|
||||||
|
@ -144,7 +156,10 @@ const deleteComment = (studioId, commentId, topLevelCommentId, token) => (dispat
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const reportComment = (studioId, commentId, topLevelCommentId, token) => (dispatch => {
|
const reportComment = (commentId, topLevelCommentId) => ((dispatch, getState) => {
|
||||||
|
const state = getState();
|
||||||
|
const studioId = selectStudioId(state);
|
||||||
|
const token = selectToken(state);
|
||||||
api({
|
api({
|
||||||
uri: `/proxy/studio/${studioId}/comment/${commentId}/report`,
|
uri: `/proxy/studio/${studioId}/comment/${commentId}/report`,
|
||||||
authentication: token,
|
authentication: token,
|
||||||
|
@ -161,7 +176,10 @@ const reportComment = (studioId, commentId, topLevelCommentId, token) => (dispat
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const restoreComment = (studioId, commentId, topLevelCommentId, token) => (dispatch => {
|
const restoreComment = (commentId, topLevelCommentId) => ((dispatch, getState) => {
|
||||||
|
const state = getState();
|
||||||
|
const studioId = selectStudioId(state);
|
||||||
|
const token = selectToken(state);
|
||||||
api({
|
api({
|
||||||
uri: `/proxy/admin/studio/${studioId}/comment/${commentId}/undelete`,
|
uri: `/proxy/admin/studio/${studioId}/comment/${commentId}/undelete`,
|
||||||
authentication: token,
|
authentication: token,
|
||||||
|
|
|
@ -91,8 +91,14 @@ const selectCanAddProjects = state =>
|
||||||
isCurator(state) ||
|
isCurator(state) ||
|
||||||
(selectIsSocial(state) && state.studio.openToAll);
|
(selectIsSocial(state) && state.studio.openToAll);
|
||||||
|
|
||||||
// This isn't "canComment" since they could be muted, but comment composer handles that
|
|
||||||
const selectShowCommentComposer = state => selectIsSocial(state);
|
const selectShowCommentComposer = state => selectIsSocial(state);
|
||||||
|
const selectCanReportComment = state => selectIsSocial(state);
|
||||||
|
const selectCanRestoreComment = state => selectIsAdmin(state);
|
||||||
|
// On the project page, project owners can delete comments with a confirmation,
|
||||||
|
// and admins can delete comments without a confirmation. For now, only admins
|
||||||
|
// can delete studio comments, so the following two are the same.
|
||||||
|
const selectCanDeleteComment = state => selectIsAdmin(state);
|
||||||
|
const selectCanDeleteCommentWithoutConfirm = state => selectIsAdmin(state);
|
||||||
|
|
||||||
// Data selectors
|
// Data selectors
|
||||||
const selectStudioId = state => state.studio.id;
|
const selectStudioId = state => state.studio.id;
|
||||||
|
@ -157,5 +163,9 @@ module.exports = {
|
||||||
selectStudioId,
|
selectStudioId,
|
||||||
selectCanEditInfo,
|
selectCanEditInfo,
|
||||||
selectCanAddProjects,
|
selectCanAddProjects,
|
||||||
selectShowCommentComposer
|
selectShowCommentComposer,
|
||||||
|
selectCanDeleteComment,
|
||||||
|
selectCanDeleteCommentWithoutConfirm,
|
||||||
|
selectCanReportComment,
|
||||||
|
selectCanRestoreComment
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React, {useEffect} from 'react';
|
import React, {useEffect} from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import {useParams} from 'react-router-dom';
|
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
|
@ -9,7 +8,13 @@ import ComposeComment from '../preview/comment/compose-comment.jsx';
|
||||||
import TopLevelComment from '../preview/comment/top-level-comment.jsx';
|
import TopLevelComment from '../preview/comment/top-level-comment.jsx';
|
||||||
import studioCommentActions from '../../redux/studio-comment-actions.js';
|
import studioCommentActions from '../../redux/studio-comment-actions.js';
|
||||||
|
|
||||||
import {selectShowCommentComposer} from '../../redux/studio.js';
|
import {
|
||||||
|
selectShowCommentComposer,
|
||||||
|
selectCanDeleteComment,
|
||||||
|
selectCanDeleteCommentWithoutConfirm,
|
||||||
|
selectCanReportComment,
|
||||||
|
selectCanRestoreComment
|
||||||
|
} from '../../redux/studio.js';
|
||||||
|
|
||||||
const StudioComments = ({
|
const StudioComments = ({
|
||||||
comments,
|
comments,
|
||||||
|
@ -17,10 +22,17 @@ const StudioComments = ({
|
||||||
handleNewComment,
|
handleNewComment,
|
||||||
moreCommentsToLoad,
|
moreCommentsToLoad,
|
||||||
replies,
|
replies,
|
||||||
shouldShowCommentComposer
|
postURI,
|
||||||
|
shouldShowCommentComposer,
|
||||||
|
canDeleteComment,
|
||||||
|
canDeleteCommentWithoutConfirm,
|
||||||
|
canReportComment,
|
||||||
|
canRestoreComment,
|
||||||
|
handleDeleteComment,
|
||||||
|
handleRestoreComment,
|
||||||
|
handleReportComment,
|
||||||
|
handleLoadMoreReplies
|
||||||
}) => {
|
}) => {
|
||||||
const {studioId} = useParams();
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (comments.length === 0) handleLoadMoreComments();
|
if (comments.length === 0) handleLoadMoreComments();
|
||||||
}, []); // Only runs once after the first render
|
}, []); // Only runs once after the first render
|
||||||
|
@ -31,24 +43,32 @@ const StudioComments = ({
|
||||||
<div>
|
<div>
|
||||||
{shouldShowCommentComposer &&
|
{shouldShowCommentComposer &&
|
||||||
<ComposeComment
|
<ComposeComment
|
||||||
postURI={`/proxy/comments/studio/${studioId}`}
|
postURI={postURI}
|
||||||
onAddComment={handleNewComment}
|
onAddComment={handleNewComment}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{comments.map(comment => (
|
{comments.map(comment => (
|
||||||
<TopLevelComment
|
<TopLevelComment
|
||||||
author={comment.author}
|
author={comment.author}
|
||||||
|
canDelete={canDeleteComment}
|
||||||
|
canDeleteWithoutConfirm={canDeleteCommentWithoutConfirm}
|
||||||
canReply={shouldShowCommentComposer}
|
canReply={shouldShowCommentComposer}
|
||||||
|
canReport={canReportComment}
|
||||||
|
canRestore={canRestoreComment}
|
||||||
content={comment.content}
|
content={comment.content}
|
||||||
datetimeCreated={comment.datetime_created}
|
datetimeCreated={comment.datetime_created}
|
||||||
id={comment.id}
|
id={comment.id}
|
||||||
key={comment.id}
|
key={comment.id}
|
||||||
moreRepliesToLoad={comment.moreRepliesToLoad}
|
moreRepliesToLoad={comment.moreRepliesToLoad}
|
||||||
parentId={comment.parent_id}
|
parentId={comment.parent_id}
|
||||||
postURI={`/proxy/comments/studio/${studioId}`}
|
postURI={postURI}
|
||||||
replies={replies && replies[comment.id] ? replies[comment.id] : []}
|
replies={replies && replies[comment.id] ? replies[comment.id] : []}
|
||||||
visibility={comment.visibility}
|
visibility={comment.visibility}
|
||||||
onAddComment={handleNewComment}
|
onAddComment={handleNewComment}
|
||||||
|
onDelete={handleDeleteComment}
|
||||||
|
onRestore={handleRestoreComment}
|
||||||
|
onReport={handleReportComment}
|
||||||
|
onLoadMoreReplies={handleLoadMoreReplies}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{moreCommentsToLoad &&
|
{moreCommentsToLoad &&
|
||||||
|
@ -70,19 +90,37 @@ StudioComments.propTypes = {
|
||||||
handleNewComment: PropTypes.func,
|
handleNewComment: PropTypes.func,
|
||||||
moreCommentsToLoad: PropTypes.bool,
|
moreCommentsToLoad: PropTypes.bool,
|
||||||
replies: PropTypes.shape({}),
|
replies: PropTypes.shape({}),
|
||||||
shouldShowCommentComposer: PropTypes.bool
|
shouldShowCommentComposer: PropTypes.bool,
|
||||||
|
canDeleteComment: PropTypes.bool,
|
||||||
|
canDeleteCommentWithoutConfirm: PropTypes.bool,
|
||||||
|
canReportComment: PropTypes.bool,
|
||||||
|
canRestoreComment: PropTypes.bool,
|
||||||
|
handleDeleteComment: PropTypes.func,
|
||||||
|
handleRestoreComment: PropTypes.func,
|
||||||
|
handleReportComment: PropTypes.func,
|
||||||
|
handleLoadMoreReplies: PropTypes.func,
|
||||||
|
postURI: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
state => ({
|
state => ({
|
||||||
comments: state.comments.comments,
|
comments: state.comments.comments,
|
||||||
moreCommentsToLoad: state.comments.moreCommentsToLoad,
|
moreCommentsToLoad: state.comments.moreCommentsToLoad,
|
||||||
replies: state.comments.replies,
|
replies: state.comments.replies,
|
||||||
shouldShowCommentComposer: selectShowCommentComposer(state)
|
shouldShowCommentComposer: selectShowCommentComposer(state),
|
||||||
|
canDeleteComment: selectCanDeleteComment(state),
|
||||||
|
canDeleteCommentWithoutConfirm: selectCanDeleteCommentWithoutConfirm(state),
|
||||||
|
canReportComment: selectCanReportComment(state),
|
||||||
|
canRestoreComment: selectCanRestoreComment(state),
|
||||||
|
postURI: `/proxy/comments/studio/${state.studio.id}`
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
handleLoadMoreComments: studioCommentActions.getTopLevelComments,
|
handleLoadMoreComments: studioCommentActions.getTopLevelComments,
|
||||||
handleNewComment: studioCommentActions.addNewComment
|
handleNewComment: studioCommentActions.addNewComment,
|
||||||
|
handleDeleteComment: studioCommentActions.deleteComment,
|
||||||
|
handleRestoreComment: studioCommentActions.restoreComment,
|
||||||
|
handleReportComment: studioCommentActions.reportComment,
|
||||||
|
handleLoadMoreReplies: studioCommentActions.getReplies
|
||||||
|
|
||||||
}
|
}
|
||||||
)(StudioComments);
|
)(StudioComments);
|
||||||
|
|
|
@ -2,7 +2,11 @@ import {
|
||||||
getInitialState as getInitialStudioState,
|
getInitialState as getInitialStudioState,
|
||||||
selectCanEditInfo,
|
selectCanEditInfo,
|
||||||
selectCanAddProjects,
|
selectCanAddProjects,
|
||||||
selectShowCommentComposer
|
selectShowCommentComposer,
|
||||||
|
selectCanDeleteComment,
|
||||||
|
selectCanDeleteCommentWithoutConfirm,
|
||||||
|
selectCanReportComment,
|
||||||
|
selectCanRestoreComment
|
||||||
} from '../../../src/redux/studio';
|
} from '../../../src/redux/studio';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -11,79 +15,156 @@ import {
|
||||||
|
|
||||||
import {sessions, studios} from '../../helpers/state-fixtures.json';
|
import {sessions, studios} from '../../helpers/state-fixtures.json';
|
||||||
|
|
||||||
describe('studio selectors', () => {
|
let state;
|
||||||
let state;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
const setStateByRole = (role) => {
|
||||||
state = {
|
switch (role) {
|
||||||
session: getInitialSessionState(),
|
case 'admin':
|
||||||
studio: getInitialStudioState()
|
state.session = sessions.user1Admin;
|
||||||
};
|
break;
|
||||||
});
|
case 'curator':
|
||||||
|
state.studio = studios.isCurator;
|
||||||
|
state.session = sessions.user1Social;
|
||||||
|
break;
|
||||||
|
case 'manager':
|
||||||
|
state.studio = studios.isManager;
|
||||||
|
state.session = sessions.user1Social;
|
||||||
|
break;
|
||||||
|
case 'creator':
|
||||||
|
state.studio = studios.creator1;
|
||||||
|
state.session = sessions.user1Social;
|
||||||
|
break;
|
||||||
|
case 'logged in':
|
||||||
|
state.session = sessions.user1Social;
|
||||||
|
break;
|
||||||
|
case 'unconfirmed':
|
||||||
|
state.session = sessions.user1;
|
||||||
|
break;
|
||||||
|
case 'logged out': // Default state set in beforeEach
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error('Unknown user role in test: ' + role);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
describe('studio info', () => {
|
beforeEach(() => {
|
||||||
test('is editable by admin', () => {
|
state = {
|
||||||
state.session = sessions.user1Admin;
|
session: getInitialSessionState(),
|
||||||
expect(selectCanEditInfo(state)).toBe(true);
|
studio: getInitialStudioState()
|
||||||
});
|
};
|
||||||
test('is editable by managers and studio creator', () => {
|
});
|
||||||
state.studio = studios.isManager;
|
|
||||||
expect(selectCanEditInfo(state)).toBe(true);
|
|
||||||
|
|
||||||
state.studio = studios.creator1;
|
describe('studio info', () => {
|
||||||
state.session = sessions.user1;
|
describe('can edit studio info', () => {
|
||||||
expect(selectCanEditInfo(state)).toBe(true);
|
test.each([
|
||||||
});
|
['admin', true],
|
||||||
test('is not editable by curators', () => {
|
['curator', false],
|
||||||
state.studio = studios.isCurator;
|
['manager', true],
|
||||||
state.session = sessions.user1;
|
['creator', true],
|
||||||
expect(selectCanEditInfo(state)).toBe(false);
|
['logged in', false],
|
||||||
});
|
['unconfirmed', false],
|
||||||
test('is not editable by other logged in users', () => {
|
['logged out', false]
|
||||||
state.session = sessions.user1;
|
])('%s: %s', (role, expected) => {
|
||||||
expect(selectCanEditInfo(state)).toBe(false);
|
setStateByRole(role);
|
||||||
});
|
expect(selectCanEditInfo(state)).toBe(expected);
|
||||||
test('is not editable by logged out users', () => {
|
});
|
||||||
expect(selectCanEditInfo(state)).toBe(false);
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
describe('studio projects', () => {
|
||||||
describe('studio projects', () => {
|
describe('can add project, not open to all', () => {
|
||||||
test('cannot be added by admin', () => {
|
test.each([
|
||||||
state.session = sessions.user1Admin;
|
['admin', false],
|
||||||
expect(selectCanAddProjects(state)).toBe(false);
|
['curator', true],
|
||||||
});
|
['manager', true],
|
||||||
test('can be added by managers and studio creator', () => {
|
['creator', true],
|
||||||
state.studio = studios.isManager;
|
['logged in', false],
|
||||||
expect(selectCanAddProjects(state)).toBe(true);
|
['unconfirmed', false],
|
||||||
|
['logged out', false]
|
||||||
state.studio = studios.creator1;
|
])('%s: %s', (role, expected) => {
|
||||||
state.session = sessions.user1;
|
setStateByRole(role);
|
||||||
expect(selectCanAddProjects(state)).toBe(true);
|
expect(selectCanAddProjects(state)).toBe(expected);
|
||||||
});
|
});
|
||||||
test('can be added by curators', () => {
|
});
|
||||||
state.studio = studios.isCurator;
|
|
||||||
state.session = sessions.user1;
|
describe('can add project, open to all', () => {
|
||||||
expect(selectCanAddProjects(state)).toBe(true);
|
test.each([
|
||||||
});
|
['logged in', true],
|
||||||
test('can be added by social users if studio is openToAll', () => {
|
['unconfirmed', false],
|
||||||
state.studio = studios.openToAll;
|
['logged out', false]
|
||||||
state.session = sessions.user1Social;
|
])('%s: %s', (role, expected) => {
|
||||||
expect(selectCanAddProjects(state)).toBe(true);
|
setStateByRole(role);
|
||||||
});
|
state.studio.openToAll = true;
|
||||||
test('cannot be added by social users if not openToAll', () => {
|
expect(selectCanAddProjects(state)).toBe(expected);
|
||||||
state.session = sessions.user1Social;
|
});
|
||||||
expect(selectCanAddProjects(state)).toBe(false);
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
describe('studio comments', () => {
|
||||||
describe('studio comments', () => {
|
describe('showing comment composer', () => {
|
||||||
test('show comment composer only for social users', () => {
|
test.each([
|
||||||
expect(selectShowCommentComposer(state)).toBe(false);
|
['logged in', true],
|
||||||
state.session = sessions.user1;
|
['unconfirmed', false],
|
||||||
expect(selectShowCommentComposer(state)).toBe(false);
|
['logged out', false]
|
||||||
state.session = sessions.user1Social;
|
])('%s: %s', (role, expected) => {
|
||||||
expect(selectShowCommentComposer(state)).toBe(true);
|
setStateByRole(role);
|
||||||
|
expect(selectShowCommentComposer(state)).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('can report comment', () => {
|
||||||
|
test.each([
|
||||||
|
['logged in', true],
|
||||||
|
['unconfirmed', false],
|
||||||
|
['logged out', false]
|
||||||
|
])('%s: %s', (role, expected) => {
|
||||||
|
setStateByRole(role);
|
||||||
|
expect(selectCanReportComment(state)).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('can delete comment', () => {
|
||||||
|
test.each([
|
||||||
|
['admin', true],
|
||||||
|
['curator', false],
|
||||||
|
['manager', false],
|
||||||
|
['creator', false],
|
||||||
|
['logged in', false],
|
||||||
|
['unconfirmed', false],
|
||||||
|
['logged out', false]
|
||||||
|
])('%s: %s', (role, expected) => {
|
||||||
|
setStateByRole(role);
|
||||||
|
expect(selectCanDeleteComment(state)).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('can delete comment without confirmation', () => {
|
||||||
|
test.each([
|
||||||
|
['admin', true],
|
||||||
|
['curator', false],
|
||||||
|
['manager', false],
|
||||||
|
['creator', false],
|
||||||
|
['logged in', false],
|
||||||
|
['unconfirmed', false],
|
||||||
|
['logged out', false]
|
||||||
|
])('%s: %s', (role, expected) => {
|
||||||
|
setStateByRole(role);
|
||||||
|
expect(selectCanDeleteCommentWithoutConfirm(state)).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('can restore a comment', () => {
|
||||||
|
test.each([
|
||||||
|
['admin', true],
|
||||||
|
['curator', false],
|
||||||
|
['manager', false],
|
||||||
|
['creator', false],
|
||||||
|
['logged in', false],
|
||||||
|
['unconfirmed', false],
|
||||||
|
['logged out', false]
|
||||||
|
])('%s: %s', (role, expected) => {
|
||||||
|
setStateByRole(role);
|
||||||
|
expect(selectCanRestoreComment(state)).toBe(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue