-
-
+
+
+
@@ -147,35 +154,43 @@
-
-
diff --git a/src/plugins/pricelist/components/CalculationTable/NewPrice.vue b/src/plugins/pricelist/components/CalculationTable/NewPrice.vue
new file mode 100644
index 0000000..978736b
--- /dev/null
+++ b/src/plugins/pricelist/components/CalculationTable/NewPrice.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/components/CalculationTable/PriceTable.vue b/src/plugins/pricelist/components/CalculationTable/PriceTable.vue
deleted file mode 100644
index a9bd41c..0000000
--- a/src/plugins/pricelist/components/CalculationTable/PriceTable.vue
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
- {{ prices_props.row.price.toFixed(2) }}€
-
-
-
- {{ prices_props.row.description }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/plugins/pricelist/components/DrinkModify.vue b/src/plugins/pricelist/components/DrinkModify.vue
new file mode 100644
index 0000000..d5c1bc2
--- /dev/null
+++ b/src/plugins/pricelist/components/DrinkModify.vue
@@ -0,0 +1,354 @@
+
+
+
+ Getränk Bearbeiten
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bild entfernen
+
+
+
+
+
+
+
+
+ {{ item.opt.name }}
+
+
+
+
+
+
+ {{ item.opt.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/components/DrinkTypes.vue b/src/plugins/pricelist/components/DrinkTypes.vue
index 348cc74..517e4c6 100644
--- a/src/plugins/pricelist/components/DrinkTypes.vue
+++ b/src/plugins/pricelist/components/DrinkTypes.vue
@@ -1,48 +1,48 @@
-
-
-
-
- Editere Getränkeart {{ actualDrinkType.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Getränkeart hinzufügen
+
+
+
+
+
+
+ {{ props.row.name }}
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/src/plugins/pricelist/components/ExtraIngredients.vue b/src/plugins/pricelist/components/ExtraIngredients.vue
index 209a59e..171d801 100644
--- a/src/plugins/pricelist/components/ExtraIngredients.vue
+++ b/src/plugins/pricelist/components/ExtraIngredients.vue
@@ -1,60 +1,67 @@
-
-
-
- Editere Extrazutaten {{ actualExtraIngredient.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
+
+
+
+ Zutat hinzufügen
+
+
-
-
-
-
-
+
+
+
+ {{ props.row.name }}
+
+
+
+
+
+
+
+ {{ props.row.price.toFixed(2) }}€
+
+
+
+
+
@@ -75,8 +82,6 @@ export default defineComponent({
id: -1,
};
const newExtraIngredient = ref
(emptyExtraIngredient);
- const edittype = ref(false);
- const actualExtraIngredient = ref(emptyExtraIngredient);
const rows = computed(() => store.extraIngredients);
const columns = [
@@ -93,6 +98,7 @@ export default defineComponent({
field: 'price',
sortable: true,
format: (val: number) => `${val.toFixed(2)}€`,
+ align: 'right',
},
{
name: 'actions',
@@ -108,38 +114,38 @@ export default defineComponent({
discardChanges();
}
- function editType(extraIngredient: FG.ExtraIngredient) {
- edittype.value = true;
- actualExtraIngredient.value = extraIngredient;
- }
-
- async function saveChanges() {
- await store.updateExtraIngredient(actualExtraIngredient.value);
- setTimeout(() => discardChanges(), 200);
+ function saveChanges(ingredient: FG.ExtraIngredient) {
+ setTimeout(() => {
+ const _ingredient = store.extraIngredients.find((a) => a.id === ingredient.id);
+ if (_ingredient) {
+ void store.updateExtraIngredient(_ingredient);
+ }
+ }, 50);
}
function discardChanges() {
- actualExtraIngredient.value = emptyExtraIngredient;
newExtraIngredient.value.name = '';
newExtraIngredient.value.price = 0;
- edittype.value = false;
}
function deleteType(extraIngredient: FG.ExtraIngredient) {
void store.deleteExtraIngredient(extraIngredient);
}
+ const pagination = ref({
+ sortBy: 'name',
+ rowsPerPage: 10,
+ });
+
return {
columns,
rows,
addExtraIngredient,
newExtraIngredient,
deleteType,
- edittype,
- editType,
- actualExtraIngredient,
discardChanges,
saveChanges,
+ pagination,
};
},
});
diff --git a/src/plugins/pricelist/components/Pricelist.vue b/src/plugins/pricelist/components/Pricelist.vue
new file mode 100644
index 0000000..d1c26bd
--- /dev/null
+++ b/src/plugins/pricelist/components/Pricelist.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+ Reihenfolge ändern
+
+
+
+
+
+ {{ element.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tag.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/components/SearchInput.vue b/src/plugins/pricelist/components/SearchInput.vue
new file mode 100644
index 0000000..cd5dfb5
--- /dev/null
+++ b/src/plugins/pricelist/components/SearchInput.vue
@@ -0,0 +1,89 @@
+
+
+
+
+ Suche
+
+
+
+
+ Wenn du in die Suche etwas eingibst, wird in allen Spalten gesucht. Mit einem `@` Zeichen,
+ kann man die Suche eingrenzen auf eine Spalte. Zumbeispiel: `Tequilaparty@Tags`
+
+
+
+ Mögliche Suchbegriffe nach dem @:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+a
diff --git a/src/plugins/pricelist/components/Tags.vue b/src/plugins/pricelist/components/Tags.vue
new file mode 100644
index 0000000..1cb3be8
--- /dev/null
+++ b/src/plugins/pricelist/components/Tags.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+ Tag hinzufügen
+
+
+ {
+ newTag.color = val;
+ }
+ "
+ />
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}
+
+
+
+
+
+
+
+ {{ props.row.name }}
+
+
+
+
+
+
+
+
+
+ {{ props.row.color }}
+
+
+
+
+
+
+ (slot.value = val)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/pages/CocktailBuilder.vue b/src/plugins/pricelist/pages/CocktailBuilder.vue
new file mode 100644
index 0000000..3193fd6
--- /dev/null
+++ b/src/plugins/pricelist/pages/CocktailBuilder.vue
@@ -0,0 +1,65 @@
+
+
+
+ Cocktailbuilder
+
+
+
+
+
+ Du solltest mindest sowiel verlangen oder bezahlen:
+
+
+
+ {{ min_price.percentage }}%
+
+
{{ min_price.price.toFixed(2) }}€
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/pages/InnerPricelist.vue b/src/plugins/pricelist/pages/InnerPricelist.vue
new file mode 100644
index 0000000..626bbb3
--- /dev/null
+++ b/src/plugins/pricelist/pages/InnerPricelist.vue
@@ -0,0 +1,38 @@
+
+
+
+ Zur Listenansicht wechseln
+
+
+
+
+ Zur Kartenansicht wechseln
+
+
+
+
diff --git a/src/plugins/pricelist/pages/OuterPricelist.vue b/src/plugins/pricelist/pages/OuterPricelist.vue
new file mode 100644
index 0000000..05011d5
--- /dev/null
+++ b/src/plugins/pricelist/pages/OuterPricelist.vue
@@ -0,0 +1,36 @@
+
+
+
+ Zur Listenansicht wechseln
+
+
+
+
+ Zur Kartenansicht wechseln
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/pages/Pricelist.vue b/src/plugins/pricelist/pages/Pricelist.vue
deleted file mode 100644
index 1a6c827..0000000
--- a/src/plugins/pricelist/pages/Pricelist.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/plugins/pricelist/pages/Receipts.vue b/src/plugins/pricelist/pages/Receipts.vue
new file mode 100644
index 0000000..bb7232c
--- /dev/null
+++ b/src/plugins/pricelist/pages/Receipts.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.row.name }}
+
+
+ {{ props.row.type.name }}
+
+
+
+
+
+ {{ tag.name }}
+
+
+
+
+ Anleitung
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/pricelist/pages/Settings.vue b/src/plugins/pricelist/pages/Settings.vue
index afe4675..8b9f744 100644
--- a/src/plugins/pricelist/pages/Settings.vue
+++ b/src/plugins/pricelist/pages/Settings.vue
@@ -32,7 +32,7 @@
class="q-ma-none q-pa-none fit row justify-center content-start items-start"
>
-
+
@@ -40,6 +40,9 @@
+
+
+
@@ -51,15 +54,18 @@ import { Screen } from 'quasar';
import DrinkTypes from 'src/plugins/pricelist/components/DrinkTypes.vue';
import CalculationTable from 'src/plugins/pricelist/components/CalculationTable.vue';
import ExtraIngredients from 'src/plugins/pricelist/components/ExtraIngredients.vue';
+import Tags from '../components/Tags.vue';
import { usePricelistStore } from 'src/plugins/pricelist/store';
+import { hasPermissions } from 'src/utils/permission';
export default defineComponent({
name: 'Settings',
- components: { ExtraIngredients, DrinkTypes, CalculationTable },
+ components: { ExtraIngredients, DrinkTypes, Tags, CalculationTable },
setup() {
interface Tab {
name: string;
label: string;
+ permissions: Array;
}
const store = usePricelistStore();
onBeforeMount(() => {
@@ -69,6 +75,7 @@ export default defineComponent({
console.log(store.extraIngredients);
})
.catch((err) => console.log(err));
+ void store.getTags();
void store.getDrinkTypes();
void store.getDrinks();
void store.get_min_prices();
@@ -85,12 +92,40 @@ export default defineComponent({
},
});
- const tabs: Tab[] = [
- { name: 'pricelist', label: 'Getränke' },
- { name: 'extra_ingredients', label: 'Zutaten' },
- { name: 'drink_types', label: 'Getränketypen' },
+ const _tabs: Tab[] = [
+ { name: 'pricelist', label: 'Getränke', permissions: ['drink_edit'] },
+ {
+ name: 'extra_ingredients',
+ label: 'Zutaten',
+ permissions: ['edit_ingredients', 'delete_ingredients'],
+ },
+ {
+ name: 'drink_types',
+ label: 'Getränketypen',
+ permissions: ['drink_type_edit', 'drink_type_delete'],
+ },
+ {
+ name: 'tags',
+ label: 'Tags',
+ permissions: ['drink_tag_edit', 'drink_tag_create', 'drink_tag_delete'],
+ },
];
+ const tabs = computed(() => {
+ const retVal: Tab[] = [];
+ _tabs.forEach((tab) => {
+ if (tab.permissions.length > 0) {
+ if (hasPermissions(tab.permissions)) {
+ retVal.push(tab);
+ }
+ }
+ if (tab.permissions.length === 0) {
+ retVal.push(tab);
+ }
+ });
+ return retVal;
+ });
+
const tab = ref('pricelist');
return { tabs, tab, showDrawer };
diff --git a/src/plugins/pricelist/permissions.ts b/src/plugins/pricelist/permissions.ts
new file mode 100644
index 0000000..a378a74
--- /dev/null
+++ b/src/plugins/pricelist/permissions.ts
@@ -0,0 +1,33 @@
+export const PERMISSIONS = {
+ CREATE: 'drink_create',
+
+ EDIT: 'drink_edit',
+
+ DELETE: 'drink_delete',
+
+ CREATE_TAG: 'drink_tag_create',
+
+ EDIT_PRICE: 'edit_price',
+ DELETE_PRICE: 'delete_price',
+
+ EDIT_VOLUME: 'edit_volume',
+ DELETE_VOLUME: 'delete_volume',
+
+ EDIT_INGREDIENTS_DRINK: 'edit_ingredients_drink',
+ DELETE_INGREDIENTS_DRINK: 'delete_ingredients_drink',
+
+ EDIT_INGREDIENTS: 'edit_ingredients',
+ DELETE_INGREDIENTS: 'delete_ingredients',
+
+ EDIT_TAG: 'drink_tag_edit',
+
+ DELETE_TAG: 'drink_tag_delete',
+
+ CREATE_TYPE: 'drink_type_create',
+
+ EDIT_TYPE: 'drink_type_edit',
+
+ DELETE_TYPE: 'drink_type_delete',
+
+ EDIT_MIN_PRICES: 'edit_min_prices',
+};
diff --git a/src/plugins/pricelist/plugin.ts b/src/plugins/pricelist/plugin.ts
index c6f9d67..fd0e5e1 100644
--- a/src/plugins/pricelist/plugin.ts
+++ b/src/plugins/pricelist/plugin.ts
@@ -1,9 +1,10 @@
-import { innerRoutes } from './routes';
+import { innerRoutes, outerRoutes } from './routes';
import { FG_Plugin } from 'src/plugins';
const plugin: FG_Plugin.Plugin = {
name: 'Pricelist',
innerRoutes,
+ outerRoutes,
requiredModules: [],
requiredBackendModules: ['pricelist'],
version: '0.0.1',
diff --git a/src/plugins/pricelist/routes/index.ts b/src/plugins/pricelist/routes/index.ts
index 3ec87fe..fd28920 100644
--- a/src/plugins/pricelist/routes/index.ts
+++ b/src/plugins/pricelist/routes/index.ts
@@ -19,14 +19,36 @@ export const innerRoutes: FG_Plugin.MenuRoute[] = [
route: {
path: 'pricelist',
name: 'drinks-pricelist',
- component: () => import('../pages/Pricelist.vue'),
+ component: () => import('../pages/InnerPricelist.vue'),
+ },
+ },
+ {
+ title: 'Rezepte',
+ shortcut: false,
+ icon: 'mdi-receipt',
+ permissions: ['user'],
+ route: {
+ path: 'reciepts',
+ name: 'reciepts',
+ component: () => import('../pages/Receipts.vue'),
+ },
+ },
+ {
+ title: 'Cocktailbuilder',
+ shortcut: false,
+ icon: 'mdi-glass-cocktail',
+ permissions: ['user'],
+ route: {
+ path: 'cocktail-builder',
+ name: 'cocktail-builder',
+ component: () => import('../pages/CocktailBuilder.vue'),
},
},
{
title: 'Einstellungen',
icon: 'mdi-coffee-to-go',
shortcut: false,
- permissions: ['user'],
+ permissions: ['drink_edit', 'drink_tag_edit'],
route: {
path: 'settings',
name: 'drinks-settings',
@@ -36,3 +58,16 @@ export const innerRoutes: FG_Plugin.MenuRoute[] = [
],
},
];
+
+export const outerRoutes: FG_Plugin.MenuRoute[] = [
+ {
+ title: 'Preisliste',
+ icon: 'mdi-glass-mug-variant',
+ shortcut: true,
+ route: {
+ path: 'pricelist',
+ name: 'outter-pricelist',
+ component: () => import('../pages/OuterPricelist.vue'),
+ },
+ },
+];
diff --git a/src/plugins/pricelist/store.ts b/src/plugins/pricelist/store.ts
index 0769f75..a0da12a 100644
--- a/src/plugins/pricelist/store.ts
+++ b/src/plugins/pricelist/store.ts
@@ -1,20 +1,30 @@
import { api } from 'src/boot/axios';
import { defineStore } from 'pinia';
-import { AxiosResponse } from 'axios';
-import { computed, ComputedRef, WritableComputedRef } from 'vue';
+import {
+ calc_volume,
+ calc_cost_per_volume,
+ calc_all_min_prices,
+} from 'src/plugins/pricelist/utils/utils';
-interface MinPrice extends Omit {
- price?: WritableComputedRef;
-}
-interface DrinkPriceVolume extends Omit, 'min_prices'> {
+interface DrinkPriceVolume extends Omit {
_volume: number;
- volume?: WritableComputedRef;
- min_prices: MinPrice[];
+ volume?: number;
}
-interface Drink extends Omit, 'volumes'> {
+
+interface Drink extends Omit, 'volumes'> {
volumes: DrinkPriceVolume[];
- cost_price_pro_volume: WritableComputedRef;
- _cost_price_pro_volume?: number;
+ cost_per_volume?: number;
+ _cost_per_volume?: number;
+}
+
+interface Pricelist {
+ name: string;
+ type: FG.DrinkType;
+ tags: Array;
+ volume: number;
+ price: number;
+ public: boolean;
+ description: string;
}
class DrinkPriceVolume implements DrinkPriceVolume {
@@ -24,23 +34,7 @@ class DrinkPriceVolume implements DrinkPriceVolume {
this.prices = prices;
this.ingredients = ingredients;
this.min_prices = [];
- this.volume = computed({
- get: () => {
- if (this.ingredients.some((ingredient) => !!ingredient.drink_ingredient)) {
- let retVal = 0;
- this.ingredients.forEach((ingredient) => {
- if (ingredient.drink_ingredient?.volume) {
- retVal += ingredient.drink_ingredient.volume;
- }
- });
- this._volume = retVal;
- return retVal;
- } else {
- return this._volume;
- }
- },
- set: (val) => (this._volume = val),
- });
+ this.volume = calc_volume(this);
}
}
@@ -55,6 +49,8 @@ class Drink {
cost_per_package,
tags,
type,
+ uuid,
+ receipt,
}: FG.Drink) {
this.id = id;
this.article_id = article_id;
@@ -62,25 +58,21 @@ class Drink {
this.name = name;
this.volume = volume;
this.cost_per_package = cost_per_package;
- this.cost_per_volume = cost_per_volume;
- this.cost_price_pro_volume = computed({
- get: () => {
- if (!!this.volume && !!this.package_size && !!this.cost_per_package) {
- const retVal =
- ((this.cost_per_package || 0) / ((this.volume || 0) * (this.package_size || 0))) * 1.19;
- this._cost_price_pro_volume = Math.round(retVal * 1000) / 1000;
- }
-
- return this._cost_price_pro_volume;
- },
- set: (val) => (this._cost_price_pro_volume = val),
- });
+ this._cost_per_volume = cost_per_volume;
+ this.cost_per_volume = calc_cost_per_volume(this);
this.tags = tags;
this.type = type;
this.volumes = [];
+ this.uuid = uuid;
+ this.receipt = receipt || [];
}
}
+interface Order {
+ label: string;
+ name: string;
+}
+
export const usePricelistStore = defineStore({
id: 'pricelist',
@@ -88,8 +80,11 @@ export const usePricelistStore = defineStore({
drinkTypes: [] as Array,
drinks: [] as Array,
extraIngredients: [] as Array,
- pricecalc_columns: [] as Array,
min_prices: [] as Array,
+ tags: [] as Array,
+ pricecalc_columns: [] as Array,
+ pricelist_view: false as boolean,
+ pricelist_columns_order: [] as Array,
}),
actions: {
@@ -157,7 +152,7 @@ export const usePricelistStore = defineStore({
});
this.drinks.push(_drink);
});
- this.create_min_prices();
+ calc_all_min_prices(this.drinks, this.min_prices);
},
sortPrices(volume: DrinkPriceVolume) {
volume.prices.sort((a, b) => {
@@ -166,51 +161,36 @@ export const usePricelistStore = defineStore({
return 0;
});
},
- deletePrice(price: FG.DrinkPrice, volume: FG.DrinkPriceVolume) {
- api
- .delete(`pricelist/prices/${price.id}`)
- .then(() => {
- const index = volume.prices.findIndex((a) => a.id == price.id);
- if (index > -1) {
- volume.prices.splice(index, 1);
- }
- })
- .catch((err) => console.warn(err));
+ async deletePrice(price: FG.DrinkPrice) {
+ await api.delete(`pricelist/prices/${price.id}`);
},
- deleteVolume(volume: FG.DrinkPriceVolume, drink: FG.Drink) {
- api
- .delete(`pricelist/volumes/${volume.id}`)
- .then(() => {
- const index = drink.volumes.findIndex((a) => a.id === volume.id);
- if (index > -1) {
- drink.volumes.splice(index, 1);
- }
- })
- .catch((err) => console.warn(err));
+ async deleteVolume(volume: DrinkPriceVolume, drink: Drink) {
+ await api.delete(`pricelist/volumes/${volume.id}`);
+ const index = drink.volumes.findIndex((a) => a.id === volume.id);
+ if (index > -1) {
+ drink.volumes.splice(index, 1);
+ }
},
- deleteIngredient(ingredient: FG.Ingredient, volume: DrinkPriceVolume) {
- api
- .delete(`pricelist/ingredients/${ingredient.id}`)
- .then(() => {
- const index = volume.ingredients.findIndex((a) => a.id === ingredient.id);
- if (index > -1) {
- volume.ingredients.splice(index, 1);
- }
- })
- .catch((err) => console.warn(err));
+ async deleteIngredient(ingredient: FG.Ingredient) {
+ await api.delete(`pricelist/ingredients/${ingredient.id}`);
},
- async setDrink(drink: FG.Drink) {
- const { data } = await api.post('pricelist/drinks', drink);
+ async setDrink(drink: Drink) {
+ const { data } = await api.post('pricelist/drinks', {
+ ...drink,
+ });
const _drink = new Drink(data);
data.volumes.forEach((volume) => {
const _volume = new DrinkPriceVolume(volume);
_drink.volumes.push(_volume);
});
this.drinks.push(_drink);
- this.create_min_prices();
+ calc_all_min_prices(this.drinks, this.min_prices);
+ return _drink;
},
async updateDrink(drink: Drink) {
- const { data } = await api.put(`pricelist/drinks/${drink.id}`, drink);
+ const { data } = await api.put(`pricelist/drinks/${drink.id}`, {
+ ...drink,
+ });
const index = this.drinks.findIndex((a) => a.id === data.id);
if (index > -1) {
const _drink = new Drink(data);
@@ -220,7 +200,7 @@ export const usePricelistStore = defineStore({
});
this.drinks[index] = _drink;
}
- this.create_min_prices();
+ calc_all_min_prices(this.drinks, this.min_prices);
},
deleteDrink(drink: Drink) {
api
@@ -233,81 +213,101 @@ export const usePricelistStore = defineStore({
})
.catch((err) => console.warn(err));
},
- getPriceCalcColumn(userid: string) {
- api
- .get(`pricelist/users/${userid}/pricecalc_columns`)
- .then(({ data }: AxiosResponse>) => {
- if (data.length > 0) {
- this.pricecalc_columns = data;
- }
- })
- .catch((err) => console.log(err));
- },
- updatePriceCalcColumn(userid: string, data: Array) {
- api
- .put(`pricelist/users/${userid}/pricecalc_columns`, data)
- .then(() => {
- this.pricecalc_columns = data;
- })
- .catch((err) => console.log(err));
- },
async get_min_prices() {
const { data } = await api.get>('pricelist/settings/min_prices');
this.min_prices = data;
},
async set_min_prices() {
await api.post>('pricelist/settings/min_prices', this.min_prices);
- this.create_min_prices();
- },
- create_min_prices() {
- this.drinks.forEach((drink) => {
- drink.volumes.forEach((volume) => {
- volume.min_prices = [];
- this.min_prices.forEach((min_price) => {
- let computedMinPrice: ComputedRef;
- if (drink.cost_price_pro_volume) {
- computedMinPrice = computed(
- () =>
- ((drink.cost_price_pro_volume) *
- (volume.volume) *
- min_price) /
- 100
- );
- } else {
- computedMinPrice = computed(() => {
- let retVal = 0;
- let extraIngredientPrice = 0;
- volume.ingredients.forEach((ingredient) => {
- if (ingredient.drink_ingredient) {
- const _drink = usePricelistStore().drinks.find(
- (a) => a.id === ingredient.drink_ingredient?.ingredient_id
- );
- retVal +=
- ingredient.drink_ingredient.volume *
- (_drink?.cost_price_pro_volume);
- }
- if (ingredient.extra_ingredient) {
- extraIngredientPrice += ingredient.extra_ingredient.price;
- }
- });
- return (retVal * min_price) / 100 + extraIngredientPrice;
- });
- }
- volume.min_prices.push({ percentage: min_price, price: computedMinPrice });
- });
- });
- });
+ calc_all_min_prices(this.drinks, this.min_prices);
},
async upload_drink_picture(drink: Drink, file: File) {
const formData = new FormData();
formData.append('file', file);
- await api.post(`pricelist/drinks/${drink.id}/picture`, formData, {
+ const { data } = await api.post(`pricelist/drinks/${drink.id}/picture`, formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
+ const _drink = this.drinks.find((a) => a.id === drink.id);
+ if (_drink) {
+ _drink.uuid = data.uuid;
+ }
+ },
+ async delete_drink_picture(drink: Drink) {
+ await api.delete(`pricelist/drinks/${drink.id}/picture`);
+ drink.uuid = '';
+ },
+ async getTags() {
+ const { data } = await api.get>('/pricelist/tags');
+ this.tags = data;
+ },
+ async setTag(tag: FG.Tag) {
+ const { data } = await api.post('/pricelist/tags', tag);
+ this.tags.push(data);
+ },
+ async updateTag(tag: FG.Tag) {
+ const { data } = await api.put(`/pricelist/tags/${tag.id}`, tag);
+ const index = this.tags.findIndex((a) => a.id === data.id);
+ if (index > -1) {
+ this.tags[index] = data;
+ }
+ },
+ async deleteTag(tag: FG.Tag) {
+ await api.delete(`/pricelist/tags/${tag.id}`);
+ const index = this.tags.findIndex((a) => a.id === tag.id);
+ if (index > -1) {
+ this.tags.splice(index, 1);
+ }
+ },
+ async getPriceCalcColumn(userid: string) {
+ const { data } = await api.get>(`pricelist/users/${userid}/pricecalc_columns`);
+ this.pricecalc_columns = data;
+ },
+ async updatePriceCalcColumn(userid: string, data: Array) {
+ await api.put>(`pricelist/users/${userid}/pricecalc_columns`, data);
+ this.pricecalc_columns = data;
+ },
+ async getPriceListView(userid: string) {
+ const { data } = await api.get<{ value: boolean }>(`pricelist/users/${userid}/pricelist`);
+ this.pricelist_view = data.value;
+ },
+ async updatePriceListView(userid: string, data: boolean) {
+ await api.put>(`pricelist/users/${userid}/pricelist`, { value: data });
+ this.pricelist_view = data;
+ },
+ async getPriceListColumnOrder(userid: string) {
+ const { data } = await api.get>(
+ `pricelist/users/${userid}/pricecalc_columns_order`
+ );
+ this.pricelist_columns_order = data;
+ },
+ async updatePriceListColumnOrder(userid: string, data: Array) {
+ await api.put>(`pricelist/users/${userid}/pricecalc_columns_order`, data);
+ this.pricelist_columns_order = data;
+ },
+ },
+ getters: {
+ pricelist() {
+ const retVal: Array = [];
+ this.drinks.forEach((drink) => {
+ drink.volumes.forEach((volume) => {
+ volume.prices.forEach((price) => {
+ retVal.push({
+ name: drink.name,
+ type: drink.type,
+ tags: >drink.tags,
+ volume: volume.volume,
+ price: price.price,
+ public: price.public,
+ description: price.description,
+ });
+ });
+ });
+ });
+ return retVal;
},
},
});
-export { DrinkPriceVolume, MinPrice, Drink };
+export { DrinkPriceVolume, Drink, Order };
diff --git a/src/plugins/pricelist/utils/filter.ts b/src/plugins/pricelist/utils/filter.ts
new file mode 100644
index 0000000..cb8c5ba
--- /dev/null
+++ b/src/plugins/pricelist/utils/filter.ts
@@ -0,0 +1,39 @@
+import { Drink } from '../store';
+
+function filter(
+ rows: Array,
+ terms: Search,
+ cols: Array,
+ cellValue: { (col: Col, row: Drink): string }
+) {
+ if (terms.value) {
+ return rows.filter((row) => {
+ if (!terms.key || terms.key === '') {
+ return cols.some((col) => {
+ const val = cellValue(col, row) + '';
+ const haystack = val === 'undefined' || val === 'null' ? '' : val.toLowerCase();
+ return haystack.indexOf(terms.value) !== -1;
+ });
+ }
+ const index = cols.findIndex((col) => col.name === terms.key);
+ const val = cellValue(cols[index], row) + '';
+ const haystack = val === 'undefined' || val === 'null' ? '' : val.toLowerCase();
+ return haystack.indexOf(terms.value) !== -1;
+ });
+ }
+ return rows;
+}
+
+interface Search {
+ value: string;
+ label: string | undefined;
+ key: string | undefined;
+}
+
+interface Col {
+ name: string;
+ label: string;
+ field: string;
+}
+
+export { filter, Search, Col };
diff --git a/src/plugins/pricelist/utils/sort.ts b/src/plugins/pricelist/utils/sort.ts
new file mode 100644
index 0000000..cfd6f2a
--- /dev/null
+++ b/src/plugins/pricelist/utils/sort.ts
@@ -0,0 +1,7 @@
+function sort(a: string | number, b: string | number) {
+ if (a > b) return 1;
+ if (b > a) return -1;
+ return 0;
+}
+
+export { sort };
diff --git a/src/plugins/pricelist/utils/utils.ts b/src/plugins/pricelist/utils/utils.ts
new file mode 100644
index 0000000..1bc4de6
--- /dev/null
+++ b/src/plugins/pricelist/utils/utils.ts
@@ -0,0 +1,84 @@
+import { Drink, DrinkPriceVolume, usePricelistStore } from 'src/plugins/pricelist/store';
+
+function calc_volume(volume: DrinkPriceVolume) {
+ if (volume.ingredients.some((ingredient) => !!ingredient.drink_ingredient)) {
+ let retVal = 0;
+ volume.ingredients.forEach((ingredient) => {
+ if (ingredient.drink_ingredient?.volume) {
+ retVal += ingredient.drink_ingredient.volume;
+ }
+ });
+ return retVal;
+ } else {
+ return volume._volume;
+ }
+}
+
+function calc_cost_per_volume(drink: Drink) {
+ let retVal = drink._cost_per_volume;
+ if (!!drink.volume && !!drink.package_size && !!drink.cost_per_package) {
+ retVal =
+ ((drink.cost_per_package || 0) / ((drink.volume || 0) * (drink.package_size || 0))) * 1.19;
+ }
+
+ return retVal ? Math.round(retVal * 1000) / 1000 : retVal;
+}
+
+function calc_all_min_prices(drinks: Array, min_prices: Array) {
+ drinks.forEach((drink) => {
+ drink.volumes.forEach((volume) => {
+ volume.min_prices = calc_min_prices(volume, drink.cost_per_volume, min_prices);
+ });
+ });
+}
+
+function helper(volume: DrinkPriceVolume, min_price: number) {
+ let retVal = 0;
+ let extraIngredientPrice = 0;
+ volume.ingredients.forEach((ingredient) => {
+ if (ingredient.drink_ingredient) {
+ const _drink = usePricelistStore().drinks.find(
+ (a) => a.id === ingredient.drink_ingredient?.ingredient_id
+ );
+ retVal += ingredient.drink_ingredient.volume * (_drink?.cost_per_volume);
+ }
+ if (ingredient.extra_ingredient) {
+ extraIngredientPrice += ingredient.extra_ingredient.price;
+ }
+ });
+ return (retVal * min_price) / 100 + extraIngredientPrice;
+}
+
+function calc_min_prices(
+ volume: DrinkPriceVolume,
+ cost_per_volume: number | undefined,
+ min_prices: Array
+) {
+ const retVal: Array = [];
+ volume.min_prices = [];
+ if (min_prices) {
+ min_prices.forEach((min_price) => {
+ let computedMinPrice: number;
+ if (cost_per_volume) {
+ computedMinPrice = (cost_per_volume * volume.volume * min_price) / 100;
+ } else {
+ computedMinPrice = helper(volume, min_price);
+ }
+ retVal.push({ percentage: min_price, price: computedMinPrice });
+ });
+ }
+ return retVal;
+}
+
+function clone(o: T): T {
+ return JSON.parse(JSON.stringify(o));
+}
+
+interface DeleteObjects {
+ prices: Array;
+ volumes: Array;
+ ingredients: Array;
+}
+export { DeleteObjects };
+
+export { calc_volume, calc_cost_per_volume, calc_all_min_prices, calc_min_prices, clone };
diff --git a/yarn.lock b/yarn.lock
index b8431e3..023678d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -904,7 +904,7 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
-"@electron/get@^1.3.1":
+"@electron/get@^1.0.1", "@electron/get@^1.3.1", "@electron/get@^1.6.0":
version "1.12.4"
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab"
integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==
@@ -1155,7 +1155,7 @@
"@quasar/quasar-app-extension-qcalendar@file:deps/quasar-ui-qcalendar/app-extension":
version "4.0.0-alpha.1"
dependencies:
- "@quasar/quasar-ui-qcalendar" "link:../../../../../.cache/yarn/v6/npm-@quasar-quasar-app-extension-qcalendar-4.0.0-alpha.1-58d88196-365a-4cd9-b287-335eb40035ac-1617715095074/node_modules/@quasar/ui"
+ "@quasar/quasar-ui-qcalendar" "link:../../Library/Caches/Yarn/v6/npm-@quasar-quasar-app-extension-qcalendar-4.0.0-alpha.1-c42f9f4b-6777-438d-bf23-9bdcfb44ae8c-1618669700018/node_modules/@quasar/ui"
"@quasar/quasar-ui-qcalendar@link:deps/quasar-ui-qcalendar/ui":
version "0.0.0"
@@ -1318,6 +1318,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8"
integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==
+"@types/node@^14.6.2":
+ version "14.14.41"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615"
+ integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==
+
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
@@ -2182,6 +2187,21 @@ arrify@^2.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+asar@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/asar/-/asar-2.1.0.tgz#97c6a570408c4e38a18d4a3fb748a621b5a7844e"
+ integrity sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==
+ dependencies:
+ chromium-pickle-js "^0.2.0"
+ commander "^2.20.0"
+ cuint "^0.2.2"
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ tmp-promise "^1.0.5"
+ optionalDependencies:
+ "@types/glob" "^7.1.1"
+
asn1.js@^5.2.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
@@ -2259,6 +2279,11 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+author-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450"
+ integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=
+
autoprefixer@9.8.6:
version "9.8.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
@@ -2412,7 +2437,7 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"
-bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2:
+bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
@@ -2607,7 +2632,7 @@ buffer-alloc@^1.2.0:
buffer-alloc-unsafe "^1.1.0"
buffer-fill "^1.0.0"
-buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
+buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
@@ -2911,6 +2936,11 @@ chrome-trace-event@^1.0.2:
dependencies:
tslib "^1.9.0"
+chromium-pickle-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+ integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=
+
ci-info@2.0.0, ci-info@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
@@ -3160,7 +3190,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.0:
+concat-stream@^1.5.0, concat-stream@^1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -3505,6 +3535,13 @@ cross-spawn@^6.0.0:
shebang-command "^1.2.0"
which "^1.2.9"
+cross-zip@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cross-zip/-/cross-zip-3.1.0.tgz#2b7d33f2a893bf83e232ccbabf4c6c706f6b313c"
+ integrity sha512-aX02l0SD3KE27pMl69gkxDdDM5D3u9Ic4Je+2b1B2fP0dWnlWWY6ns2Vk5DEgCXJRhL3GasSpicNQRNbDkq0+w==
+ dependencies:
+ rimraf "^3.0.0"
+
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -3680,6 +3717,11 @@ csstype@^2.6.8:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39"
integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==
+cuint@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
+ integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
+
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -3699,7 +3741,7 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -4047,6 +4089,14 @@ electron-notarize@^0.1.1:
debug "^4.1.1"
fs-extra "^8.0.1"
+electron-notarize@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-0.2.1.tgz#759e8006decae19134f82996ed910db26d9192cc"
+ integrity sha512-oZ6/NhKeXmEKNROiFmRNfytqu3cxqC95sjooG7kBXQVEUSQkZnbiAhxVh5jXngL881G197pbwpeVPJyM7Ikmxw==
+ dependencies:
+ debug "^4.1.1"
+ fs-extra "^8.1.0"
+
electron-osx-sign@^0.4.11:
version "0.4.17"
resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz#2727ca0c79e1e4e5ccd3861fb3da9c3c913b006c"
@@ -4059,11 +4109,43 @@ electron-osx-sign@^0.4.11:
minimist "^1.2.0"
plist "^3.0.1"
+electron-packager@^14.1.1:
+ version "14.2.1"
+ resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-14.2.1.tgz#e1884eee608455e71e96342717e0527d25a329df"
+ integrity sha512-g6y3BVrAOz/iavKD+VMFbehrQcwCWuA3CZvVbmmbQuCfegGA1ytwWn0BNIDDrEdbuz31Fti7mnNHhb5L+3Wq9A==
+ dependencies:
+ "@electron/get" "^1.6.0"
+ asar "^2.0.1"
+ cross-zip "^3.0.0"
+ debug "^4.0.1"
+ electron-notarize "^0.2.0"
+ electron-osx-sign "^0.4.11"
+ fs-extra "^8.1.0"
+ galactus "^0.2.1"
+ get-package-info "^1.0.0"
+ junk "^3.1.0"
+ parse-author "^2.0.0"
+ plist "^3.0.0"
+ rcedit "^2.0.0"
+ resolve "^1.1.6"
+ sanitize-filename "^1.6.0"
+ semver "^6.0.0"
+ yargs-parser "^16.0.0"
+
electron-to-chromium@^1.3.649:
version "1.3.704"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.704.tgz#894205a237cbe0097d63da8f6d19e605dd13ab51"
integrity sha512-6cz0jvawlUe4h5AbfQWxPzb+8LzVyswGAWiGc32EJEmfj39HTQyNPkLXirc7+L4x5I6RgRkzua8Ryu5QZqc8cA==
+electron@^12.0.4:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-12.0.4.tgz#c2ca4710d0e4da7db6d31c4f55777b08bfcb08e5"
+ integrity sha512-A8Lq3YMZ1CaO1z5z5nsyFxIwkgwXLHUwL2pf9MVUHpq7fv3XUewCMD98EnLL3DdtiyCvw5KMkeT1WGsZh8qFug==
+ dependencies:
+ "@electron/get" "^1.0.1"
+ "@types/node" "^14.6.2"
+ extract-zip "^1.0.3"
+
elementtree@0.1.7, elementtree@^0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0"
@@ -4183,7 +4265,7 @@ errno@^0.1.3, errno@~0.1.7:
dependencies:
prr "~1.0.1"
-error-ex@^1.3.1:
+error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
@@ -4577,6 +4659,16 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+extract-zip@^1.0.3:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
+ integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
+ dependencies:
+ concat-stream "^1.6.2"
+ debug "^2.6.9"
+ mkdirp "^0.5.4"
+ yauzl "^2.10.0"
+
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -4633,6 +4725,13 @@ faye-websocket@^0.11.3:
dependencies:
websocket-driver ">=0.5.1"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+ dependencies:
+ pend "~1.2.0"
+
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -4733,7 +4832,7 @@ find-cache-dir@^3.3.1:
make-dir "^3.0.2"
pkg-dir "^4.1.0"
-find-up@^2.1.0:
+find-up@^2.0.0, find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
@@ -4776,6 +4875,14 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+flora-colossus@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93"
+ integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==
+ dependencies:
+ debug "^4.1.1"
+ fs-extra "^7.0.0"
+
flush-write-stream@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
@@ -4875,6 +4982,24 @@ fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.0.1:
jsonfile "^6.0.1"
universalify "^2.0.0"
+fs-extra@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs-extra@^8.0.1, fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -4934,6 +5059,15 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+galactus@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9"
+ integrity sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=
+ dependencies:
+ debug "^3.1.0"
+ flora-colossus "^1.0.0"
+ fs-extra "^4.0.0"
+
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -4974,6 +5108,16 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
has "^1.0.3"
has-symbols "^1.0.1"
+get-package-info@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c"
+ integrity sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=
+ dependencies:
+ bluebird "^3.1.1"
+ debug "^2.2.0"
+ lodash.get "^4.0.0"
+ read-pkg-up "^2.0.0"
+
get-stream@^4.0.0, get-stream@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -6278,6 +6422,11 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+junk@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
+ integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
+
keyv@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
@@ -6369,6 +6518,16 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
loader-runner@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
@@ -6455,6 +6614,11 @@ lodash.flatten@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+lodash.get@^4.0.0:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
lodash.isplainobject@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
@@ -6907,7 +7071,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -7119,7 +7283,7 @@ nopt@^5.0.0:
dependencies:
abbrev "1"
-normalize-package-data@^2.0.0:
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.2:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -7677,6 +7841,20 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-author@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f"
+ integrity sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=
+ dependencies:
+ author-regex "^1.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -7763,6 +7941,13 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -7779,6 +7964,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -7854,7 +8044,7 @@ pkg-up@^3.1.0:
dependencies:
find-up "^3.0.0"
-plist@^3.0.1:
+plist@^3.0.0, plist@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.2.tgz#74bbf011124b90421c22d15779cee60060ba95bc"
integrity sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==
@@ -8525,6 +8715,11 @@ rc@^1.2.8:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+rcedit@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-2.3.0.tgz#951685a079db98a4cc8c21ebab75e374d5a0b108"
+ integrity sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==
+
read-chunk@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca"
@@ -8551,6 +8746,23 @@ read-package-json-fast@^2.0.1:
normalize-package-data "^2.0.0"
npm-normalize-package-bin "^1.0.0"
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
read@1, read@~1.0.1:
version "1.0.7"
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
@@ -8795,7 +9007,7 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1:
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -8944,6 +9156,13 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sanitize-filename@^1.6.0:
+ 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"
+
sass-loader@10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.0.tgz#1727fcc0c32ab3eb197cda61d78adf4e9174a4b3"
@@ -9306,6 +9525,11 @@ sort-keys@^1.0.0:
dependencies:
is-plain-obj "^1.0.0"
+sortablejs@1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
+ integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==
+
source-list-map@^2.0.0, source-list-map@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@@ -9613,6 +9837,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
strip-bom@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
@@ -9862,6 +10091,21 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+tmp-promise@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c"
+ integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==
+ dependencies:
+ bluebird "^3.5.0"
+ tmp "0.1.0"
+
+tmp@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877"
+ integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
+ dependencies:
+ rimraf "^2.6.3"
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -9950,6 +10194,13 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
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"
+
ts-loader@8.0.17:
version "8.0.17"
resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc"
@@ -10252,6 +10503,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=
+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -10396,6 +10652,13 @@ vue@3.0.11:
"@vue/runtime-dom" "3.0.11"
"@vue/shared" "3.0.11"
+vuedraggable@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.0.1.tgz#3bcaab0808b7944030b7d9a29f9a63d59dfa12c5"
+ integrity sha512-7qN5jhB1SLfx5P+HCm3JUW+pvgA1bSLgYLSVOeLWBDH9z+zbaEH0OlyZBVMLOxFR+JUHJjwDD0oy7T4r9TEgDA==
+ dependencies:
+ sortablejs "1.10.2"
+
vuex@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.0.tgz#ac877aa76a9c45368c979471e461b520d38e6cf5"
@@ -10802,6 +11065,14 @@ yargs-parser@^13.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^16.0.0:
+ version "16.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1"
+ integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^18.1.2:
version "18.1.3"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
@@ -10843,6 +11114,14 @@ yargs@^13.3.2:
y18n "^4.0.0"
yargs-parser "^13.1.2"
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"