diff --git a/cypress.json b/cypress.json
index 17ef242..31161dc 100644
--- a/cypress.json
+++ b/cypress.json
@@ -1,3 +1,4 @@
{
- "baseUrl": "http://localhost:3000"
+ "baseUrl": "http://localhost:3000",
+ "ignoreTestFiles": ["**/__snapshots__/*", "**/__image_snapshots__/*"]
}
diff --git a/cypress/integration/WardrobePage/Basic outfit state.spec.js b/cypress/integration/WardrobePage/Basic outfit state.spec.js
new file mode 100644
index 0000000..4d0a124
--- /dev/null
+++ b/cypress/integration/WardrobePage/Basic outfit state.spec.js
@@ -0,0 +1,109 @@
+// Give network requests a bit of breathing room!
+const networkTimeout = { timeout: 12000 };
+
+describe("WardrobePage: Basic outfit state", () => {
+ it("Initialize simple outfit from URL", () => {
+ cy.visit("/outfits/new?species=1&color=8&objects[]=76789");
+
+ getSpeciesSelect(networkTimeout)
+ .find(":selected")
+ .should("have.text", "Acara");
+ getColorSelect().find(":selected").should("have.text", "Blue");
+ cy.location().toMatchSnapshot();
+
+ cy.contains("A Warm Winters Night Background", networkTimeout).should(
+ "exist"
+ );
+
+ getOutfitPreview().toMatchImageSnapshot();
+ });
+
+ it("Changes species and color", () => {
+ cy.visit("/outfits/new?species=1&color=8&objects[]=76789");
+
+ getSpeciesSelect(networkTimeout)
+ .find(":selected")
+ .should("have.text", "Acara");
+ getColorSelect().find(":selected").should("have.text", "Blue");
+ cy.location().toMatchSnapshot();
+ getOutfitPreview().toMatchImageSnapshot();
+
+ getSpeciesSelect().select("Aisha");
+
+ getSpeciesSelect().find(":selected").should("have.text", "Aisha");
+ getColorSelect().find(":selected").should("have.text", "Blue");
+ cy.location().toMatchSnapshot();
+ getOutfitPreview().toMatchImageSnapshot();
+
+ getColorSelect().select("Red");
+
+ getSpeciesSelect().find(":selected").should("have.text", "Aisha");
+ getColorSelect().find(":selected").should("have.text", "Red");
+ cy.location().toMatchSnapshot();
+ getOutfitPreview().toMatchImageSnapshot();
+ });
+
+ it.only("Changes pose", () => {
+ cy.visit("/outfits/new?species=1&color=8&pose=HAPPY_FEM");
+
+ getPosePickerButton(networkTimeout).click();
+ getPosePickerOption("Happy and Feminine").should("be.checked");
+ cy.location().toMatchSnapshot();
+ getOutfitPreview().toMatchImageSnapshot();
+
+ getPosePickerOption("Sad and Masculine").check({ force: true });
+ getPosePickerOption("Sad and Masculine").should("be.checked");
+ cy.location().toMatchSnapshot();
+ getOutfitPreview().toMatchImageSnapshot();
+ });
+
+ it("Toggles item", () => {
+ cy.visit("/outfits/new?species=1&color=8&objects[]=76789");
+
+ getOutfitPreview().toMatchImageSnapshot();
+ cy.location().toMatchSnapshot();
+
+ cy.contains("A Warm Winters Night Background").click();
+
+ getOutfitPreview().toMatchImageSnapshot();
+ cy.location().toMatchSnapshot();
+ });
+
+ it("Renames outfit", () => {
+ cy.visit("/outfits/new?name=My+outfit&species=1&color=8");
+
+ getOutfitName(networkTimeout).should("have.text", "My outfit");
+
+ getOutfitName().click().type("Awesome outfit{enter}");
+
+ getOutfitName().should("have.text", "Awesome outfit");
+ cy.location().toMatchSnapshot();
+ });
+});
+
+function getSpeciesSelect(options) {
+ return cy.get("[data-test-id=wardrobe-species-picker]", options);
+}
+
+function getColorSelect(options) {
+ return cy.get("[data-test-id=wardrobe-color-picker]", options);
+}
+
+function getPosePickerButton(options) {
+ return cy.get("[data-test-id=wardrobe-pose-picker]", options);
+}
+
+function getPosePickerOption(label, options) {
+ return cy.get(`input[aria-label="${CSS.escape(label)}"]`, options);
+}
+
+function getOutfitPreview() {
+ return cy.get("[data-test-id=wardrobe-outfit-preview]:not([data-loading])", {
+ // A bit of an extra-long timeout, to await both server data and image data
+ timeout: 15000,
+ });
+}
+
+function getOutfitName(options) {
+ return cy.get("[data-test-id=outfit-name]", options);
+}
diff --git a/cypress/integration/WardrobePage/SearchPanel.spec.js b/cypress/integration/WardrobePage/SearchPanel.spec.js
index 47abe22..883dc8c 100644
--- a/cypress/integration/WardrobePage/SearchPanel.spec.js
+++ b/cypress/integration/WardrobePage/SearchPanel.spec.js
@@ -1,10 +1,10 @@
// Give network requests a bit of breathing room!
-const networkTimeout = { timeout: 6000 };
+const networkTimeout = { timeout: 10000 };
describe("WardrobePage: SearchPanel", () => {
// NOTE: This test depends on specific search results on certain pages, and
// could break if a lot of matching items are added to the site!
- it.only("Searches by keyword", () => {
+ it("Searches by keyword", () => {
cy.visit("/outfits/new");
// The first page should contain this item.
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #0.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #0.png
new file mode 100644
index 0000000..3a2e8a8
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #0.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #1.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #1.png
new file mode 100644
index 0000000..c5be4d9
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes pose #1.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #0.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #0.png
new file mode 100644
index 0000000..0c3afe2
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #0.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #1.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #1.png
new file mode 100644
index 0000000..d7474cf
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #1.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #2.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #2.png
new file mode 100644
index 0000000..39065a4
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Changes species and color #2.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Initialize simple outfit from URL #0.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Initialize simple outfit from URL #0.png
new file mode 100644
index 0000000..0c3afe2
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Initialize simple outfit from URL #0.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #0.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #0.png
new file mode 100644
index 0000000..0c3afe2
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #0.png differ
diff --git a/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #1.png b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #1.png
new file mode 100644
index 0000000..8dfaf1b
Binary files /dev/null and b/cypress/integration/WardrobePage/__image_snapshots__/WardrobePage Basic outfit state Toggles item #1.png differ
diff --git a/cypress/integration/WardrobePage/__snapshots__/Basic outfit state.spec.js.snap b/cypress/integration/WardrobePage/__snapshots__/Basic outfit state.spec.js.snap
new file mode 100644
index 0000000..22c4aeb
--- /dev/null
+++ b/cypress/integration/WardrobePage/__snapshots__/Basic outfit state.spec.js.snap
@@ -0,0 +1,127 @@
+exports[`WardrobePage: Basic outfit state > Initialize simple outfit from URL #0`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Changes species and color #0`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Changes species and color #1`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=2&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=2&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Changes species and color #2`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=2&color=61&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=2&color=61&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Toggles item #0`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=HAPPY_FEM&objects%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Toggles item #1`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=HAPPY_FEM&closet%5B%5D=76789",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=HAPPY_FEM&closet%5B%5D=76789",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Changes pose #0`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=HAPPY_FEM",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=HAPPY_FEM",
+ "superDomain": "localhost"
+};
+
+exports[`WardrobePage: Basic outfit state > Changes pose #1`] =
+{
+ "auth": "",
+ "hash": "",
+ "host": "localhost:3000",
+ "hostname": "localhost",
+ "href": "http://localhost:3000/outfits/new?name=&species=1&color=8&pose=SAD_MASC",
+ "origin": "http://localhost:3000",
+ "originPolicy": "http://localhost:3000",
+ "pathname": "/outfits/new",
+ "port": "3000",
+ "protocol": "http:",
+ "search": "?name=&species=1&color=8&pose=SAD_MASC",
+ "superDomain": "localhost"
+};
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
index aa9918d..bb34830 100644
--- a/cypress/plugins/index.js
+++ b/cypress/plugins/index.js
@@ -1,21 +1,6 @@
-///
-// ***********************************************************
-// This example plugins/index.js can be used to load plugins
-//
-// You can change the location of this file or turn off loading
-// the plugins file with the 'pluginsFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/plugins-guide
-// ***********************************************************
+const { initPlugin } = require("cypress-plugin-snapshots/plugin");
-// This function is called when a project is opened or re-opened (e.g. due to
-// the project's config changing)
-
-/**
- * @type {Cypress.PluginConfig}
- */
module.exports = (on, config) => {
- // `on` is used to hook into various events Cypress emits
- // `config` is the resolved Cypress config
-}
+ initPlugin(on, config);
+ return config;
+};
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
index ca4d256..e1cb3a1 100644
--- a/cypress/support/commands.js
+++ b/cypress/support/commands.js
@@ -1,25 +1 @@
-// ***********************************************
-// This example commands.js shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
-// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add("login", (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
+import "cypress-plugin-snapshots/commands";
diff --git a/package.json b/package.json
index 3865606..c2a7eb2 100644
--- a/package.json
+++ b/package.json
@@ -89,6 +89,7 @@
"apollo-server-testing": "^2.12.0",
"auth0": "^2.28.0",
"cypress": "^6.4.0",
+ "cypress-plugin-snapshots": "^1.4.4",
"dotenv-cli": "^3.1.0",
"es6-promise-pool": "^2.5.0",
"inquirer": "^7.3.3",
diff --git a/src/app/WardrobePage/ItemsPanel.js b/src/app/WardrobePage/ItemsPanel.js
index 1ffb1d3..e377957 100644
--- a/src/app/WardrobePage/ItemsPanel.js
+++ b/src/app/WardrobePage/ItemsPanel.js
@@ -271,7 +271,7 @@ function OutfitHeading({ outfitState, dispatchToOutfit }) {
-
+
diff --git a/src/app/WardrobePage/OutfitControls.js b/src/app/WardrobePage/OutfitControls.js
index 58794d6..76ffd3c 100644
--- a/src/app/WardrobePage/OutfitControls.js
+++ b/src/app/WardrobePage/OutfitControls.js
@@ -197,6 +197,12 @@ function OutfitControls({
idealPose={outfitState.pose}
onChange={onSpeciesColorChange}
stateMustAlwaysBeValid
+ speciesPickerProps={{
+ "data-test-id": "wardrobe-species-picker",
+ }}
+ colorPickerProps={{
+ "data-test-id": "wardrobe-color-picker",
+ }}
/>
}
@@ -210,6 +216,7 @@ function OutfitControls({
dispatchToOutfit={dispatchToOutfit}
onLockFocus={onLockFocus}
onUnlockFocus={onUnlockFocus}
+ data-test-id="wardrobe-pose-picker"
/>
diff --git a/src/app/WardrobePage/PosePicker.js b/src/app/WardrobePage/PosePicker.js
index ce0cad3..a46eb99 100644
--- a/src/app/WardrobePage/PosePicker.js
+++ b/src/app/WardrobePage/PosePicker.js
@@ -63,6 +63,7 @@ function PosePicker({
dispatchToOutfit,
onLockFocus,
onUnlockFocus,
+ ...props
}) {
const theme = useTheme();
const initialFocusRef = React.useRef();
@@ -193,6 +194,7 @@ function PosePicker({
`,
isOpen && "is-open"
)}
+ {...props}
>
diff --git a/src/app/WardrobePage/WardrobePreviewAndControls.js b/src/app/WardrobePage/WardrobePreviewAndControls.js
index ddbc220..9f6f7f0 100644
--- a/src/app/WardrobePage/WardrobePreviewAndControls.js
+++ b/src/app/WardrobePage/WardrobePreviewAndControls.js
@@ -30,6 +30,7 @@ function WardrobePreviewAndControls({
wornItemIds: outfitState.wornItemIds,
onChangeHasAnimations: setHasAnimations,
backdrop: ,
+ "data-test-id": "wardrobe-outfit-preview",
});
return (
diff --git a/src/app/WardrobePage/useOutfitState.js b/src/app/WardrobePage/useOutfitState.js
index 961e907..044f25e 100644
--- a/src/app/WardrobePage/useOutfitState.js
+++ b/src/app/WardrobePage/useOutfitState.js
@@ -12,10 +12,10 @@ export const OutfitStateContext = React.createContext(null);
function useOutfitState() {
const apolloClient = useApolloClient();
- const initialState = useParseOutfitUrl();
- const [state, dispatchToOutfit] = React.useReducer(
+ const urlOutfitState = useParseOutfitUrl();
+ const [localOutfitState, dispatchToOutfit] = React.useReducer(
outfitStateReducer(apolloClient),
- initialState
+ urlOutfitState
);
// If there's an outfit ID (i.e. we're on /outfits/:id), load basic data
@@ -56,55 +56,61 @@ function useOutfitState() {
}
`,
{
- variables: { id: state.id },
- skip: state.id == null,
+ variables: { id: urlOutfitState.id },
+ skip: urlOutfitState.id == null,
returnPartialData: true,
onCompleted: (outfitData) => {
- // This is only called once the _entire_ query loads, regardless of
- // `returnPartialData`. We just use that for some early UI!
- //
- // Even though we do a HACK to make these values visible early, we
- // still want to write them to state, so that reducers can see them and
- // edit them!
- const outfit = outfitData.outfit;
dispatchToOutfit({
type: "reset",
- name: outfit.name,
- speciesId: outfit.petAppearance.species.id,
- colorId: outfit.petAppearance.color.id,
- pose: outfit.petAppearance.pose,
- wornItemIds: outfit.wornItems.map((item) => item.id),
- closetedItemIds: outfit.closetedItems.map((item) => item.id),
+ newState: getOutfitStateFromOutfitData(outfitData.outfit),
});
},
}
);
- // HACK: We fall back to outfit data here, to help the loading states go
- // smoother. (Otherwise, there's a flicker where `outfitLoading` is false,
- // but the `reset` action hasn't fired yet.) This also enables partial outfit
- // data to show early, like the name, if we're navigating from Your Outfits.
- //
- // We also call `Array.from` on our item IDs. It's more convenient to manage
- // them as a Set in state, but most callers will find it more convenient to
- // access them as arrays! e.g. for `.map()`.
- const outfit = outfitData?.outfit || null;
- const id = state.id;
- const creator = outfit?.creator || null;
- const name = state.name || outfit?.name || null;
- const speciesId =
- state.speciesId || outfit?.petAppearance?.species?.id || null;
- const colorId = state.colorId || outfit?.petAppearance?.color?.id || null;
- const pose = state.pose || outfit?.petAppearance?.pose || null;
- const appearanceId = state.appearanceId || null;
- const wornItemIds = Array.from(
- state.wornItemIds || outfit?.wornItems?.map((i) => i.id)
- );
- const closetedItemIds = Array.from(
- state.closetedItemIds || outfit?.closetedItems?.map((i) => i.id)
- );
+ const creator = outfitData?.outfit?.creator;
- const allItemIds = [...state.wornItemIds, ...state.closetedItemIds];
+ const savedOutfitState = getOutfitStateFromOutfitData(outfitData?.outfit);
+
+ // Choose which customization state to use. We want it to match the outfit in
+ // the URL immediately, without having to wait for any effects, to avoid race
+ // conditions!
+ //
+ // The reducer is generally the main source of truth for live changes!
+ //
+ // But if:
+ // - it's not initialized yet (e.g. the first frame of navigating to an
+ // outfit from Your Outfits), or
+ // - it's for a different outfit than the URL says (e.g. clicking Back
+ // or Forward to switch between saved outfits),
+ //
+ // Then use saved outfit data or the URL query string instead, because that's
+ // a better representation of the outfit in the URL. (If the saved outfit
+ // data isn't loaded yet, then this will be a customization state with
+ // partial data, and that's okay.)
+ let outfitState;
+ if (urlOutfitState.id === localOutfitState.id) {
+ // Use the reducer state: they're both for the same saved outfit, or both
+ // for an unsaved outfit (null === null).
+ outfitState = localOutfitState;
+ } else if (urlOutfitState.id && urlOutfitState.id === savedOutfitState.id) {
+ // Use the saved outfit state: it's for the saved outfit the URL points to.
+ outfitState = savedOutfitState;
+ } else {
+ // Use the URL state: it's more up-to-date than any of the others. (Worst
+ // case, it's empty except for ID, which is fine while the saved outfit
+ // data loads!)
+ outfitState = urlOutfitState;
+ }
+
+ // When unpacking the customization state, we call `Array.from` on our item
+ // IDs. It's more convenient to manage them as a Set in state, but most
+ // callers will find it more convenient to access them as arrays! e.g. for
+ // `.map()`.
+ const { name, speciesId, colorId, pose, appearanceId } = outfitState;
+ const wornItemIds = Array.from(outfitState.wornItemIds);
+ const closetedItemIds = Array.from(outfitState.closetedItemIds);
+ const allItemIds = [...wornItemIds, ...closetedItemIds];
const {
loading: itemsLoading,
@@ -209,10 +215,10 @@ function useOutfitState() {
.filter((i) => i.appearanceOn.layers.length === 0)
.sort((a, b) => a.name.localeCompare(b.name));
- const url = buildOutfitUrl(state);
+ const url = buildOutfitUrl(outfitState);
- const outfitState = {
- id,
+ const outfitStateWithExtras = {
+ id: urlOutfitState.outfitId,
creator,
zonesAndItems,
incompatibleItems,
@@ -235,7 +241,7 @@ function useOutfitState() {
return {
loading: outfitLoading || itemsLoading,
error: outfitError || itemsError,
- outfitState,
+ outfitState: outfitStateWithExtras,
dispatchToOutfit,
};
}
@@ -243,15 +249,16 @@ function useOutfitState() {
const outfitStateReducer = (apolloClient) => (baseState, action) => {
switch (action.type) {
case "rename":
- return { ...baseState, name: action.outfitName };
+ return produce(baseState, (state) => {
+ state.name = action.outfitName;
+ });
case "setSpeciesAndColor":
- return {
- ...baseState,
- speciesId: action.speciesId,
- colorId: action.colorId,
- pose: action.pose,
- appearanceId: null,
- };
+ return produce(baseState, (state) => {
+ state.speciesId = action.speciesId;
+ state.colorId = action.colorId;
+ state.pose = action.pose;
+ state.appearanceId = null;
+ });
case "wearItem":
return produce(baseState, (state) => {
const { wornItemIds, closetedItemIds } = state;
@@ -310,41 +317,31 @@ const outfitStateReducer = (apolloClient) => (baseState, action) => {
reconsiderItems(itemIdsToReconsider, state, apolloClient);
});
case "setPose":
- return {
- ...baseState,
- pose: action.pose,
-
+ return produce(baseState, (state) => {
+ state.pose = action.pose;
// Usually only the `pose` is specified, but `PosePickerSupport` can
// also specify a corresponding `appearanceId`, to get even more
// particular about which version of the pose to show if more than one.
- appearanceId: action.appearanceId || null,
- };
- case "reset":
- return produce(baseState, (state) => {
- const {
- name,
- speciesId,
- colorId,
- pose,
- wornItemIds,
- closetedItemIds,
- } = action;
- state.name = name;
- state.speciesId = speciesId ? String(speciesId) : baseState.speciesId;
- state.colorId = colorId ? String(colorId) : baseState.colorId;
- state.pose = pose || baseState.pose;
- state.wornItemIds = wornItemIds
- ? new Set(wornItemIds.map(String))
- : baseState.wornItemIds;
- state.closetedItemIds = closetedItemIds
- ? new Set(closetedItemIds.map(String))
- : baseState.closetedItemIds;
+ state.appearanceId = action.appearanceId || null;
});
+ case "reset":
+ return action.newState;
default:
throw new Error(`unexpected action ${JSON.stringify(action)}`);
}
};
+const EMPTY_CUSTOMIZATION_STATE = {
+ id: null,
+ name: null,
+ speciesId: null,
+ colorId: null,
+ pose: null,
+ appearanceId: null,
+ wornItemIds: [],
+ closetedItemIds: [],
+};
+
function useParseOutfitUrl() {
const { id } = useParams();
@@ -352,14 +349,8 @@ function useParseOutfitUrl() {
// outfit data to load in!
if (id != null) {
return {
+ ...EMPTY_CUSTOMIZATION_STATE,
id,
- name: null,
- speciesId: null,
- colorId: null,
- pose: null,
- appearanceId: null,
- wornItemIds: [],
- closetedItemIds: [],
};
}
@@ -367,7 +358,7 @@ function useParseOutfitUrl() {
// not specified.
const urlParams = new URLSearchParams(window.location.search);
return {
- id: id,
+ id: null,
name: urlParams.get("name"),
speciesId: urlParams.get("species") || "1",
colorId: urlParams.get("color") || "8",
@@ -378,6 +369,25 @@ function useParseOutfitUrl() {
};
}
+function getOutfitStateFromOutfitData(outfit) {
+ if (!outfit) {
+ return EMPTY_CUSTOMIZATION_STATE;
+ }
+
+ return {
+ id: outfit.id,
+ name: outfit.name,
+ // Note that these fields are intentionally null if loading, rather than
+ // falling back to a default appearance like Blue Acara.
+ speciesId: outfit.petAppearance?.species?.id,
+ colorId: outfit.petAppearance?.color?.id,
+ pose: outfit.petAppearance?.pose,
+ // Whereas the items are more convenient to just leave as empty lists!
+ wornItemIds: (outfit.wornItems || []).map((item) => item.id),
+ closetedItemIds: (outfit.closetedItems || []).map((item) => item.id),
+ };
+}
+
function findItemConflicts(itemIdToAdd, state, apolloClient) {
const { wornItemIds, speciesId, colorId } = state;
@@ -554,7 +564,7 @@ function getZonesAndItems(itemsById, wornItemIds, closetedItemIds) {
return zonesAndItems;
}
-function buildOutfitUrl(state) {
+function buildOutfitUrl(outfitState) {
const {
id,
name,
@@ -564,7 +574,7 @@ function buildOutfitUrl(state) {
appearanceId,
wornItemIds,
closetedItemIds,
- } = state;
+ } = outfitState;
const { origin, pathname } = window.location;
diff --git a/src/app/components/OutfitPreview.js b/src/app/components/OutfitPreview.js
index 42f8e29..36db461 100644
--- a/src/app/components/OutfitPreview.js
+++ b/src/app/components/OutfitPreview.js
@@ -52,6 +52,7 @@ export function useOutfitPreview({
loadingDelayMs,
spinnerVariant,
onChangeHasAnimations = null,
+ ...props
}) {
const appearance = useOutfitAppearance({
speciesId,
@@ -102,6 +103,7 @@ export function useOutfitPreview({
onChangeHasAnimations={onChangeHasAnimations}
doTransitions
isPaused={isPaused}
+ {...props}
/>
);
}
@@ -122,6 +124,7 @@ export function OutfitLayers({
spinnerVariant = "overlay",
doTransitions = false,
isPaused = true,
+ ...props
}) {
const containerRef = React.useRef(null);
const [canvasSize, setCanvasSize] = React.useState(0);
@@ -178,6 +181,8 @@ export function OutfitLayers({
// Create a stacking context, so the z-indexed layers don't escape!
zIndex="0"
ref={containerRef}
+ data-loading={loading ? true : undefined}
+ {...props}
>
{backdrop && (
diff --git a/src/app/components/SpeciesColorPicker.js b/src/app/components/SpeciesColorPicker.js
index ca651b2..9e7a8f3 100644
--- a/src/app/components/SpeciesColorPicker.js
+++ b/src/app/components/SpeciesColorPicker.js
@@ -27,6 +27,8 @@ function SpeciesColorPicker({
isDisabled = false,
speciesIsDisabled = false,
size = "md",
+ speciesPickerProps = {},
+ colorPickerProps = {},
onChange,
}) {
const { loading: loadingMeta, error: errorMeta, data: meta } = useQuery(gql`
@@ -188,6 +190,7 @@ function SpeciesColorPicker({
valids={valids}
speciesId={speciesId}
colorId={colorId}
+ {...colorPickerProps}
>
{
// If the selected color isn't in the set we have here, show the
@@ -231,6 +234,7 @@ function SpeciesColorPicker({
valids={valids}
speciesId={speciesId}
colorId={colorId}
+ {...speciesPickerProps}
>
{
// If the selected species isn't in the set we have here, show the
diff --git a/yarn.lock b/yarn.lock
index fa91c43..f217015 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3927,6 +3927,16 @@
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
+"@jimp/bmp@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.10.3.tgz#79a23678e8389865c62e77b0dccc3e069dfc27f0"
+ integrity sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ bmp-js "^0.1.0"
+ core-js "^3.4.1"
+
"@jimp/bmp@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.14.0.tgz#6df246026554f276f7b354047c6fff9f5b2b5182"
@@ -3936,6 +3946,24 @@
"@jimp/utils" "^0.14.0"
bmp-js "^0.1.0"
+"@jimp/core@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.10.3.tgz#4095f3bef43837c85d8f8373b912bc431cfe6d1f"
+ integrity sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ any-base "^1.1.0"
+ buffer "^5.2.0"
+ core-js "^3.4.1"
+ exif-parser "^0.1.12"
+ file-type "^9.0.0"
+ load-bmfont "^1.3.1"
+ mkdirp "^0.5.1"
+ phin "^2.9.1"
+ pixelmatch "^4.0.2"
+ tinycolor2 "^1.4.1"
+
"@jimp/core@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.14.0.tgz#870c9ca25b40be353ebda1d2abb48723d9010055"
@@ -3953,6 +3981,15 @@
pixelmatch "^4.0.2"
tinycolor2 "^1.4.1"
+"@jimp/custom@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.10.3.tgz#eb6201b2e8fdd83afc3d8b514538e5faa1d30980"
+ integrity sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/core" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/custom@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.14.0.tgz#1dbbf0094df7403f4e03bc984ed92e7458842f74"
@@ -3961,6 +3998,16 @@
"@babel/runtime" "^7.7.2"
"@jimp/core" "^0.14.0"
+"@jimp/gif@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.10.3.tgz#7661280fd2b9cb70175b20e80f4e2b3e3ecf614e"
+ integrity sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ omggif "^1.0.9"
+
"@jimp/gif@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.14.0.tgz#db159f57c3cfd1566bbe8b124958791998614960"
@@ -3971,6 +4018,16 @@
gifwrap "^0.9.2"
omggif "^1.0.9"
+"@jimp/jpeg@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.10.3.tgz#56f66874f204826291747ae12ff9eb337ab5cb8d"
+ integrity sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ jpeg-js "^0.3.4"
+
"@jimp/jpeg@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.14.0.tgz#8a687a6a653bbbae38c522edef8f84bb418d9461"
@@ -3980,6 +4037,15 @@
"@jimp/utils" "^0.14.0"
jpeg-js "^0.4.0"
+"@jimp/plugin-blit@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz#095bafbb2d82c300159334a49a094f0b7d362ae6"
+ integrity sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-blit@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.14.0.tgz#5eb374be1201313b2113899fb842232d8fcfd345"
@@ -3988,6 +4054,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-blur@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz#1bb91f730fda02b3c99d913e0191111327654766"
+ integrity sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-blur@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.14.0.tgz#fe07e4932d5a2f5d8c9831e245561553224bfc60"
@@ -3996,6 +4071,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-circle@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz#c5a6ec275cf1e86b1356824637910a299c9fd662"
+ integrity sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-circle@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.14.0.tgz#82c0e904a34e90fa672fb9c286bc892e92088ddf"
@@ -4004,6 +4088,16 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-color@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz#810c0f7cb4ceb21da1aecfbdb6ae09f00c1c0bfa"
+ integrity sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ tinycolor2 "^1.4.1"
+
"@jimp/plugin-color@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.14.0.tgz#772bd2d80a88bc66ea1331d010207870f169a74b"
@@ -4013,6 +4107,15 @@
"@jimp/utils" "^0.14.0"
tinycolor2 "^1.4.1"
+"@jimp/plugin-contain@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz#cf62126a60260359061be456b2193818c5eb1df5"
+ integrity sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-contain@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.14.0.tgz#c68115420d182e696f81bbe76fb5e704909b2b6a"
@@ -4021,6 +4124,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-cover@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz#7cdf56ce878c24adc35c583735015118c6de38b4"
+ integrity sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-cover@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.14.0.tgz#4755322589c5885e44e14e31b86b542e907297ce"
@@ -4029,6 +4141,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-crop@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz#03785181f62ddae9558ae73206f8d6217d7fa703"
+ integrity sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-crop@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.14.0.tgz#4cbd856ca84ffc37230fad2534906f2f75aa3057"
@@ -4037,6 +4158,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-displace@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz#cb5b225e6cf3cf44062b08cd2cf2115b3150d8c3"
+ integrity sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-displace@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.14.0.tgz#b0e6a57d00cb1f893f541413fe9d737d23c3b70c"
@@ -4045,6 +4175,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-dither@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz#c5c1cbbf157a771ba72b947dd9921a7bff3cf41a"
+ integrity sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-dither@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.14.0.tgz#9185ec4c38e02edc9e5831f5d709f6ba891e1b93"
@@ -4053,6 +4192,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-fisheye@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz#dee46d704df5c681556dc9ea9e87e8c77ac4fdda"
+ integrity sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-fisheye@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.14.0.tgz#9f26346cf2fbc660cc2008cd7fd30a83b5029e78"
@@ -4061,6 +4209,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-flip@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz#12f894f85b283ad4f43b492e0755f8ec9459bc60"
+ integrity sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-flip@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.14.0.tgz#7966d6aa3b5fe1aa4d2d561ff12b8ef5ccb9b071"
@@ -4069,6 +4226,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-gaussian@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz#279222fc5d3aec24fab6162df2a1190309c71874"
+ integrity sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-gaussian@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.14.0.tgz#452bc1971a4467ad9b984aa67f4c200bf941bb65"
@@ -4077,6 +4243,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-invert@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz#6b7beacbe507fa03eec87b1d6343feba80e342eb"
+ integrity sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-invert@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.14.0.tgz#cd31a555860e9f821394936d15af161c09c42921"
@@ -4085,6 +4260,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-mask@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz#72d994c3bb56c050a4edd6515f74b5b6d92dee69"
+ integrity sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-mask@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.14.0.tgz#52619643ac6222f85e6b27dee33c771ca3a6a4c9"
@@ -4093,6 +4277,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-normalize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz#f3cbb8a0fcc8e696619d5d46403b0620ee5240d6"
+ integrity sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-normalize@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.14.0.tgz#bf39e356b6d473f582ce95633ad49c9cdb82492b"
@@ -4101,6 +4294,16 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-print@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz#565d57a3a87dd59b4ede9cba7a6e34f8d01ed1b1"
+ integrity sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ load-bmfont "^1.4.0"
+
"@jimp/plugin-print@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.14.0.tgz#1c43c2a92a7adc05b464863882cb89ce486d63e6"
@@ -4110,6 +4313,15 @@
"@jimp/utils" "^0.14.0"
load-bmfont "^1.4.0"
+"@jimp/plugin-resize@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz#616fab55a1996a12e9583e7c1fb76815388fc14b"
+ integrity sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-resize@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.14.0.tgz#ef7fc6c2e45f8bcab62456baf8fd3bc415b02b64"
@@ -4118,6 +4330,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-rotate@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz#cfcbdad664e13c84ce9b008ddbc157e03d7baa31"
+ integrity sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-rotate@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.14.0.tgz#3632bc159bf1c3b9ec9f459d9c05d02a11781ee7"
@@ -4126,6 +4347,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-scale@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz#b593081ff35b0e9e11d5e0a3188c590eaa838434"
+ integrity sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-scale@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.14.0.tgz#d30f0cd1365b8e68f43fa423300ae7f124e9bf10"
@@ -4134,6 +4364,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-shadow@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz#a9d54c8081a55152e5cc830cf5c898ab882b519a"
+ integrity sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-shadow@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.14.0.tgz#471fdb9f109ff2d9e20d533d45e1e18e0b48c749"
@@ -4142,6 +4381,15 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugin-threshold@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz#8dd289c81de4bfbdb496f9c24496f9ee3b751ab5"
+ integrity sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+
"@jimp/plugin-threshold@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.14.0.tgz#ebd72721c7d1d518c5bb6e494e55d97ac3351d3b"
@@ -4150,6 +4398,36 @@
"@babel/runtime" "^7.7.2"
"@jimp/utils" "^0.14.0"
+"@jimp/plugins@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.10.3.tgz#e15d7ba3f9e2a6b479efad5c344c8b61e01b7cb2"
+ integrity sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/plugin-blit" "^0.10.3"
+ "@jimp/plugin-blur" "^0.10.3"
+ "@jimp/plugin-circle" "^0.10.3"
+ "@jimp/plugin-color" "^0.10.3"
+ "@jimp/plugin-contain" "^0.10.3"
+ "@jimp/plugin-cover" "^0.10.3"
+ "@jimp/plugin-crop" "^0.10.3"
+ "@jimp/plugin-displace" "^0.10.3"
+ "@jimp/plugin-dither" "^0.10.3"
+ "@jimp/plugin-fisheye" "^0.10.3"
+ "@jimp/plugin-flip" "^0.10.3"
+ "@jimp/plugin-gaussian" "^0.10.3"
+ "@jimp/plugin-invert" "^0.10.3"
+ "@jimp/plugin-mask" "^0.10.3"
+ "@jimp/plugin-normalize" "^0.10.3"
+ "@jimp/plugin-print" "^0.10.3"
+ "@jimp/plugin-resize" "^0.10.3"
+ "@jimp/plugin-rotate" "^0.10.3"
+ "@jimp/plugin-scale" "^0.10.3"
+ "@jimp/plugin-shadow" "^0.10.3"
+ "@jimp/plugin-threshold" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
"@jimp/plugins@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.14.0.tgz#41dba85f15ab8dadb4162100eb54e5f27b93ee2c"
@@ -4179,6 +4457,16 @@
"@jimp/plugin-threshold" "^0.14.0"
timm "^1.6.1"
+"@jimp/png@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.10.3.tgz#5282cad239d02743137d88239e4cb1804ed877dd"
+ integrity sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.10.3"
+ core-js "^3.4.1"
+ pngjs "^3.3.3"
+
"@jimp/png@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.14.0.tgz#0f2dddb5125c0795ca7e67c771204c5437fcda4b"
@@ -4188,6 +4476,15 @@
"@jimp/utils" "^0.14.0"
pngjs "^3.3.3"
+"@jimp/tiff@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.10.3.tgz#6d143bbc42b40c9f618686a596311b35f7ff8502"
+ integrity sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ utif "^2.0.1"
+
"@jimp/tiff@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.14.0.tgz#a5b25bbe7c43fc3b07bad4e2ab90e0e164c1967f"
@@ -4196,6 +4493,20 @@
"@babel/runtime" "^7.7.2"
utif "^2.0.1"
+"@jimp/types@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.10.3.tgz#9122e0a3c70129c7f26c05bbeae5030ed3a6fd5d"
+ integrity sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/bmp" "^0.10.3"
+ "@jimp/gif" "^0.10.3"
+ "@jimp/jpeg" "^0.10.3"
+ "@jimp/png" "^0.10.3"
+ "@jimp/tiff" "^0.10.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
"@jimp/types@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.14.0.tgz#ef681ff702883c5f105b5e4e30d49abf39ee9e34"
@@ -4209,6 +4520,15 @@
"@jimp/tiff" "^0.14.0"
timm "^1.6.1"
+"@jimp/utils@^0.10.3":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.10.3.tgz#69209dd6c2d6fd956a0beb67a47c26cb6f52f3fe"
+ integrity sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
"@jimp/utils@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.14.0.tgz#296254e63118554c62c31c19ac6b8c4bfe6490e5"
@@ -5666,6 +5986,11 @@ adjust-sourcemap-loader@3.0.0:
loader-utils "^2.0.0"
regex-parser "^2.2.11"
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
@@ -6300,6 +6625,11 @@ array.prototype.flatmap@^1.2.3:
es-abstract "^1.18.0-next.1"
function-bind "^1.1.1"
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
+
arrify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
@@ -6652,7 +6982,7 @@ babylon@^6.18.0:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
-backo2@^1.0.2:
+backo2@1.0.2, backo2@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
@@ -6662,11 +6992,21 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+base64-arraybuffer@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812"
+ integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=
+
base64-js@^1.0.2:
version "1.3.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+base64id@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
+ integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
+
base@^0.11.1:
version "0.11.2"
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
@@ -6729,6 +7069,11 @@ blob-util@2.0.2:
resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb"
integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
+
bluebird@^3.5.5, bluebird@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@@ -7596,11 +7941,26 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@^1.3.0:
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@^1.3.0, component-emitter@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
compose-function@3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f"
@@ -7732,6 +8092,11 @@ cookie@0.4.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+cookie@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
+ integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
+
cookiejar@^2.1.0, cookiejar@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
@@ -7797,6 +8162,11 @@ core-js@^3.0.1, core-js@^3.6.4, core-js@^3.6.5:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+core-js@^3.4.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.1.tgz#e683963978b6806dcc6c0a4a8bd4ab0bdaf3f21a"
+ integrity sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==
+
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -8183,6 +8553,27 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+cypress-plugin-snapshots@^1.4.4:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/cypress-plugin-snapshots/-/cypress-plugin-snapshots-1.4.4.tgz#3a57f9763da1ab6df34950b8ad01803820885310"
+ integrity sha512-rijq3RTEZNtxQA4KCUwjXinmE1Ww+z6cQW0B14iodFM/HlX5LN16XT/2QS3X1nUXRKt0QdTrAC5MQfMUrjBkSQ==
+ dependencies:
+ diff2html "^2.7.0"
+ fs-extra "^7.0.1"
+ image-size "^0.7.2"
+ jimp "^0.10.3"
+ js-base64 "^2.5.1"
+ lodash "^4.17.13"
+ pixelmatch "^4.0.2"
+ pngjs "^3.3.3"
+ prettier "^1.16.4"
+ rimraf "^2.6.3"
+ sanitize-filename "^1.6.1"
+ socket.io "^2.2.0"
+ socket.io-client "^2.2.0"
+ source-map-support "^0.5.10"
+ unidiff "1.0.2"
+
cypress@^6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.4.0.tgz#432c516bf4f1a0f042a6aa1f2c3a4278fa35a8b2"
@@ -8284,14 +8675,14 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@3.1.0, debug@=3.1.0:
+debug@3.1.0, debug@=3.1.0, debug@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -8525,6 +8916,21 @@ diff-sequences@^26.6.2:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
+diff2html@^2.7.0:
+ version "2.12.2"
+ resolved "https://registry.yarnpkg.com/diff2html/-/diff2html-2.12.2.tgz#356d35f9c87c42ebd11558bedf1c99c5b00886e8"
+ integrity sha512-G/Zn1KyG/OeC+67N/P26WHsQpjrjUiRyWGvg29ypy3MxSsBmF0bzsU/Irq70i2UAg+f/MzmLx4v/Nkt01TOU3g==
+ dependencies:
+ diff "^4.0.1"
+ hogan.js "^3.0.2"
+ merge "^1.2.1"
+ whatwg-fetch "^3.0.0"
+
+diff@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99"
+ integrity sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=
+
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@@ -8833,6 +9239,46 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
+engine.io-client@~3.5.0:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.5.1.tgz#b500458a39c0cd197a921e0e759721a746d0bdb9"
+ integrity sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==
+ dependencies:
+ component-emitter "~1.3.0"
+ component-inherit "0.0.3"
+ debug "~3.1.0"
+ engine.io-parser "~2.2.0"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.6"
+ parseuri "0.0.6"
+ ws "~7.4.2"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7"
+ integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.4"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.5.0.tgz#9d6b985c8a39b1fe87cd91eb014de0552259821b"
+ integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "2.0.0"
+ cookie "~0.4.1"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ ws "~7.4.2"
+
enhanced-resolve@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126"
@@ -9916,7 +10362,7 @@ fs-capacitor@^2.0.4:
resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c"
integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==
-fs-extra@^7.0.0:
+fs-extra@^7.0.0, fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
@@ -10375,6 +10821,18 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -10490,6 +10948,14 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
+hogan.js@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd"
+ integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=
+ dependencies:
+ mkdirp "0.3.0"
+ nopt "1.0.10"
+
hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
@@ -10768,6 +11234,11 @@ image-q@^1.1.1:
resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056"
integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=
+image-size@^0.7.2:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04"
+ integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==
+
immer@7.0.9:
version "7.0.9"
resolved "https://registry.yarnpkg.com/immer/-/immer-7.0.9.tgz#28e7552c21d39dd76feccd2b800b7bc86ee4a62e"
@@ -10857,6 +11328,11 @@ indexes-of@^1.0.1:
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
infer-owner@^1.0.3, infer-owner@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
@@ -11374,6 +11850,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -11917,6 +12398,18 @@ jest@26.6.0:
import-local "^3.0.2"
jest-cli "^26.6.0"
+jimp@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.10.3.tgz#285027b49eee3418259a8e1e9a20dd078cf8b7b1"
+ integrity sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/custom" "^0.10.3"
+ "@jimp/plugins" "^0.10.3"
+ "@jimp/types" "^0.10.3"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
jimp@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.14.0.tgz#fde55f69bdb918c1b01ac633d89a25853af85625"
@@ -11933,11 +12426,21 @@ jmespath@0.15.0:
resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217"
integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=
+jpeg-js@^0.3.4:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d"
+ integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==
+
jpeg-js@^0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.1.tgz#937a3ae911eb6427f151760f8123f04c8bfe6ef7"
integrity sha512-jA55yJiB5tCXEddos8JBbvW+IMrqY0y1tjjx9KNVtA+QPmu7ND5j0zkKopClpUTsaETL135uOM2XfcYG4XRjmw==
+js-base64@^2.5.1:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
+ integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -12730,6 +13233,11 @@ merge2@^1.3.0:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+merge@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+ integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+
methods@^1.1.1, methods@^1.1.2, methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@@ -12970,6 +13478,11 @@ mixin-object@^2.0.1:
for-in "^0.1.3"
is-extendable "^0.1.1"
+mkdirp@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
+ integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=
+
mkdirp@^0.5.0, mkdirp@^0.5.4, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
@@ -13248,6 +13761,13 @@ node-releases@^1.1.67:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
+nopt@1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+ integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
+ dependencies:
+ abbrev "1"
+
nopt@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
@@ -13861,6 +14381,16 @@ parse5@5.1.1:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+parseqs@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
+ integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==
+
+parseuri@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a"
+ integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==
+
parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -14815,6 +15345,11 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+prettier@^1.16.4:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
prettier@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
@@ -16040,6 +16575,13 @@ sane@^4.0.3:
minimist "^1.1.1"
walker "~1.0.5"
+sanitize-filename@^1.6.1:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+ integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
+ dependencies:
+ truncate-utf8-bytes "^1.0.0"
+
sanitize.css@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a"
@@ -16446,6 +16988,58 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0"
use "^3.1.0"
+socket.io-adapter@~1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9"
+ integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==
+
+socket.io-client@2.4.0, socket.io-client@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.4.0.tgz#aafb5d594a3c55a34355562fc8aea22ed9119a35"
+ integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==
+ dependencies:
+ backo2 "1.0.2"
+ component-bind "1.0.0"
+ component-emitter "~1.3.0"
+ debug "~3.1.0"
+ engine.io-client "~3.5.0"
+ has-binary2 "~1.0.2"
+ indexof "0.0.1"
+ parseqs "0.0.6"
+ parseuri "0.0.6"
+ socket.io-parser "~3.3.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.2.tgz#ef872009d0adcf704f2fbe830191a14752ad50b6"
+ integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==
+ dependencies:
+ component-emitter "~1.3.0"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io-parser@~3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a"
+ integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ isarray "2.0.1"
+
+socket.io@^2.2.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.4.1.tgz#95ad861c9a52369d7f1a68acf0d4a1b16da451d2"
+ integrity sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==
+ dependencies:
+ debug "~4.1.0"
+ engine.io "~3.5.0"
+ has-binary2 "~1.0.2"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.4.0"
+ socket.io-parser "~3.4.0"
+
sockjs-client@1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
@@ -16506,7 +17100,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@~0.5.19:
+source-map-support@^0.5.10, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@~0.5.19:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@@ -17329,6 +17923,11 @@ tmpl@1.0.x:
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
@@ -17410,6 +18009,13 @@ tr46@^2.0.2:
dependencies:
punycode "^2.1.1"
+truncate-utf8-bytes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+ integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys=
+ dependencies:
+ utf8-byte-length "^1.0.1"
+
tryer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
@@ -17629,6 +18235,13 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+unidiff@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unidiff/-/unidiff-1.0.2.tgz#8706eb36e4aa182a6ca699ecd2f8877f4b906ce0"
+ integrity sha512-2sbEzki5fBmjgAqoafwxRenfMcumMlmVAoJDwYJa3CI4ZVugkdR6qjTw5sVsl29/4JfBBXhWEAd5ars8nRdqXg==
+ dependencies:
+ diff "^2.2.2"
+
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
@@ -17828,6 +18441,11 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+utf8-byte-length@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+ integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=
+
utif@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
@@ -18161,6 +18779,11 @@ whatwg-encoding@^1.0.5:
dependencies:
iconv-lite "0.4.24"
+whatwg-fetch@^3.0.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
+ integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
+
whatwg-fetch@^3.4.1:
version "3.5.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868"
@@ -18454,6 +19077,11 @@ ws@^7.2.3:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb"
integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==
+ws@~7.4.2:
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59"
+ integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==
+
xdg-basedir@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
@@ -18515,6 +19143,11 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
xmlrpc@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/xmlrpc/-/xmlrpc-1.3.2.tgz#26b2ea347848d028aac7e7514b5351976de3e83d"
@@ -18625,6 +19258,11 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"