Browse Source

4/5 questions rdy

master
Niko 4 years ago
parent
commit
1daaff0290
6 changed files with 1270 additions and 791 deletions
  1. 1
    1
      .vscode/launch.json
  2. 1048
    0
      client/lebensmittel.txt
  3. 195
    160
      client/ws-client.js
  4. 0
    596
      lebensmittel.txt
  5. 25
    33
      server/package-lock.json
  6. 1
    1
      server/package.json

+ 1
- 1
.vscode/launch.json View File

@@ -6,7 +6,7 @@
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:8000",
"webRoot": "${workspaceFolder}"
"webRoot": "${workspaceFolder}/client"
},

{

+ 1048
- 0
client/lebensmittel.txt
File diff suppressed because it is too large
View File


+ 195
- 160
client/ws-client.js View File

@@ -1,23 +1,26 @@
// web speech recognition api
// #region web speech recognition api
var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition;
var SpeechGrammarList = SpeechGrammarList || webkitSpeechGrammarList;
var SpeechRecognitionEvent = SpeechRecognitionEvent || webkitSpeechRecognitionEvent;
// #endregion

// state management
// #region state management
var state = '';
var question = 0;
var rePrompt = false;
var partTwo = false;
var count = 0;
var questionThreeCount = 0;
var strike = 0;
// #endregion

// Questions
// #region questions
const QUESTION_ONE = 'Ich werde Ihnen jetzt langsam eine Liste mit Worten vorlesen. Danach wiederholen Sie bitte möglichst viele dieser Worte. Auf die Reihenfolge kommt es nicht an.';
const QUESTION_ONE_PT2 = 'Vielen Dank. Nun nenne ich Ihnen die gleichen 10 Worte ein zweites mal. Auch danach sollen Sie wieder möglichst viele Worte wiederholen';
const QUESTION_TWO = 'Nennen Sie mir bitte so viel Dinge wie möglich, die man im Supermarkt kaufen kann. Sie haben dafür eine Minute Zeit.';
const QUESTION_TWO = 'Nennen Sie mir bitte so viel Dinge wie möglich, die man im Supermarkt kaufen kann. Sie haben dafür eine Minute Zeit. Und Los';
const QUESTION_THREE = 'Ich werde Ihnen jetzt eine Zahlenreihe nennen, die Sie mir dann bitte in umgekehrter Reihenfolge wiederholen sollen. Wenn ich beispielsweise, vier - fünf sage, dann sagen Sie bitte, fünf - vier.';
// #endregion

// intents
// #region intents
const WELCOME_INTENT = 'Default Welcome Intent';
const WELCOME_FOLLOWUP_YES = 'Default Welcome Intent - yes';
const WELCOME_FOLLOWUP_NO = 'Default Welcome Intent - no';
@@ -29,24 +32,48 @@ const FALLBACK_INTENT = 'Default Fallback Intent';
const HELP_INTENT = 'Help Intent';
const CHOOSE_QUESTION = 'Frage_Starten';
const NEXT_QUESTION = 'Nächste Frage';
// #endregion

// question one results
const QUESTION_ONE_ANSWERS = ['teller', 'hund', 'lampe', 'brief', 'apfel', 'apfelwiese', 'apfelwiese', 'apfelbaum', 'apfelbaum', 'und', 'hose', 'tisch', 'wiese', 'glas', 'baum'];
// #region questions and expected results
const QUESTION_ONE_ANSWERS = { 'teller': 1, 'hund': 1, 'lampe': 1, 'brief': 1, 'apfel': 1, 'apfelwiese': 2, 'apfelbaum': 2, 'und': 1, 'hose': 1, 'tisch': 1, 'wiese': 1, 'glas': 1, 'baum': 1 };
const QUESTION_ONE_QUESTIONS = ['teller', 'hund', 'lampe', 'brief', 'apfel', 'hose', 'tisch', 'wiese', 'glas', 'baum'];
const QUESTION_TWO_ANSWERS = [''];
const QUESTION_TWO_QUESTIONS = [''];
const QUESTION_TWO_ANSWERS = {};
var QUESTION_TWO_QUESTIONS = [''];
const QUESTION_THREE_QUESTIONS_PT1 = ['7, 2', '4, 7, 9', '5, 4, 9, 6', '2, 7, 5, 3, 6', '8, 1, 3, 5, 4, 2'];
const QUESTION_THREE_QUESTIONS_PT2 = ['8, 6', '3, 1, 5', '1, 9, 7, 4', '1, 3, 5, 4, 8', '4, 1, 2, 7, 9, 5'];
const QUESTION_THREE_ANSWERS_PT1 = ['27', '974', '6945', '63572', '245318'];
const QUESTION_THREE_ANSWERS_PT2 = ['68', '513', '4791', '84531', '597214'];
LoadQuestionTwo();
function LoadQuestionTwo () {
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var text = xmlhttp.responseText.toLowerCase();
// Now convert it into array using regex
QUESTION_TWO_QUESTIONS = text.split('\r\n');
for (let word of QUESTION_TWO_QUESTIONS) {
QUESTION_TWO_ANSWERS[word] = 1;
}
}
};
xmlhttp.open('GET', 'lebensmittel.txt', true);
xmlhttp.send();
}
// #endregion

// points
// #region points
var questionOnePoints = 0;
var questionTwoPoints = 0;
var questionThreePoints = 0;
var questionFourPoints = 0;
var questionFivePoints = 0;
var questionSixPoints = 0;
// #endregion

// tokenization
const separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
@@ -54,20 +81,19 @@ const separators = [' ', '\\\+', '-', '\\\(', '\\\)', '\\*', '/', ':', '\\\?'];
// Timers
var timerId;

// html elements
// #region html elements
var serverPara = document.querySelector('.server');
var diagnosticPara = document.querySelector('.output');
var testBtn = document.querySelector('button');
var testBtn2 = document.getElementById('speechBtn');
var infoPara = document.getElementById('info');
var userPrompt = document.getElementById('query');

console.log(window.location.host + window.location.pathname);
// #endregion

// websocket to communicate with the server
var ws = new WebSocket('ws://localhost:8000/ws');
var ws = new WebSocket('ws://' + window.location.host + window.location.pathname + 'ws');

// speech recognition
// #region speech recognition initialization
var recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
// recognition.interimResults = false;
@@ -75,12 +101,15 @@ recognition.maxAlternatives = 1;
recognition.continuous = true;
var answerQuery = '';
var skipRecording = false;
// #endregion

// speech synthesis
// #region speech synthesis initialization
var speechsynth = new SpeechSynthesisUtterance();
var listSpeechsynth = new SpeechSynthesisUtterance();
var voices;
// #endregion

// #region speech events
window.speechSynthesis.onvoiceschanged = function () {
voices = window.speechSynthesis.getVoices();
voices.forEach(element => {
@@ -93,46 +122,29 @@ window.speechSynthesis.onvoiceschanged = function () {
listSpeechsynth.rate = 0.7;
};

function startDemenzScreening () {
console.log('button clicked');
ws.send('starte demenz test');
//
// state = 'answer'
// recognizeSpeech()

//
testBtn.disabled = true;
testBtn.textContent = 'Test in progress';
infoPara.textContent = 'wait...';
}

function speak (sentence) {
speechsynth.text = sentence;
window.speechSynthesis.speak(speechsynth);
}

function testSpeechOut () {
console.log('click');
// skipRecording = true
// let utterance = new SpeechSynthesisUtterance()
// utterance.voice = voices[2]
// // utterance.rate = 0.75
// utterance.text = QUESTION_THREE
// window.speechSynthesis.speak(utterance)
//
// question = 3;
// startQuestion(question);
// state = 'answer';
speechsynth.text = 'test 123';
speechsynth.volume = 1;
speechsynth.rate = 1;
console.log(speechsynth);
window.speechSynthesis.speak(speechsynth);
console.log(window.speechSynthesis);
// speak('Niko ist der größte hurn eu west');
}
speechsynth.onend = function (event) {
switch (question) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
}
if (!skipRecording) {
recognizeSpeech();
}
skipRecording = false;
diagnosticPara = '';
console.log('global speech end');
};
// #endregion

// websocket events
// #region websocket events
ws.onopen = function () {
serverPara.style.background = 'green';
serverPara.innerHTML = 'Server online';
@@ -143,22 +155,26 @@ ws.onmessage = function (payload) {
checkIntent(dialogflowResult);
document.querySelector('h1').innerHTML = dialogflowResult.intent.displayName;
};
// #endregion

// INTENT HANDLING
function checkIntent (result) {
switch (result.intent.displayName) {
case QUIT_INTENT:
state = 'quit';
if (timerId !== undefined) {
clearTimeout(timerId);
}
skipRecording = true;
speak('Okay, Danke fürs Benutzen.');
speak('Beende die Durchführung.');
break;
case WELCOME_INTENT:
state = 'detect';
// speak(result.fulfillmentText)
speak('go?');
speak('go');
break;
case WELCOME_FOLLOWUP_YES:
startQuestion(1);
startQuestion(2);
break;
case WELCOME_FOLLOWUP_NO:
skipRecording = true;
@@ -195,25 +211,25 @@ function checkIntent (result) {
}
}

// #region question handling
function startQuestion (number) {
question = number;
state = 'answer';
handleQuestion();
}

// QUESTION HANDLING
function handleQuestion () {
switch (question) {
case 1:
readQuestionOne(QUESTION_ONE);
skipRecording = true;
speak(QUESTION_ONE);
readQuestionOne();
break;
case 2:
readQuestionTwo(QUESTION_TWO);
readQuestionTwo();
break;
case 3:
// skipRecording = true;
// speak(QUESTION_THREE);
speak(QUESTION_THREE_QUESTIONS_PT1[0]);
readQuestionThree();
break;
case 4:
break;
@@ -222,6 +238,52 @@ function handleQuestion () {
}
}

function readQuestionOne () {
for (let i = 0; i < QUESTION_ONE_QUESTIONS.length; i++) {
let utterance = new SpeechSynthesisUtterance();
utterance.voice = voices[2];
utterance.rate = 0.75;
utterance.text = QUESTION_ONE_QUESTIONS[i];
window.speechSynthesis.speak(utterance);
if (i === 9) {
utterance.onend = function (event) {
recognizeSpeech();
};
}
}
}

function readQuestionTwo () {
let utterance = new SpeechSynthesisUtterance();
utterance.voice = voices[2];
utterance.text = QUESTION_TWO;
window.speechSynthesis.speak(utterance);
utterance.onend = function (event) {
window.setTimeout(
function () {
recognition.stop();
handleAnswer(answerQuery);
}, 6000);
recognizeSpeech();
};
}

function readQuestionThree () {
recognition = false;
speak('Dankeschön. Weiter geht es mit der nächsten Frage. ');
let utterance = new SpeechSynthesisUtterance();
utterance.voice = voices[2];
utterance.text = QUESTION_THREE;
window.speechSynthesis.speak(utterance);
utterance.onend = function (event) {
console.log('speach end');
speak(QUESTION_THREE_QUESTIONS_PT1[questionThreeCount]);
};
utterance.onerror = function (event) {
console.log('An error has occurred with the speech synthesis: ' + event.error);
};
}

function handleAnswer (query) {
switch (question) {
case 1:
@@ -242,14 +304,18 @@ function handleAnswer (query) {

function handleAnswerToFirstQuestion (answer) {
var tokens = answer.split(new RegExp(separators.join('|'), 'g'));
questionOnePoints = calculatePoints(tokens, QUESTION_ONE_ANSWERS);
questionOnePoints += calculatePoints(tokens, QUESTION_ONE_ANSWERS);
if (partTwo) {
partTwo = false;
skipRecording = true;
speak('Vielen Dank, nun geht es weiter mit der nächsten Frage');
startQuestion(2);
// state = 'detect'
} else {
rePrompt = false;
skipRecording = true;
speak(QUESTION_ONE_PT2);
readQuestionOne(QUESTION_ONE);
partTwo = true;
}
}
@@ -257,8 +323,6 @@ function handleAnswerToFirstQuestion (answer) {
function handleAnswerToSecondQuestion (answer) {
var tokens = answer.split(new RegExp(separators.join('|'), 'g'));
questionTwoPoints = calculatePoints(tokens, QUESTION_TWO_ANSWERS);
skipRecording = true;
speak('Sie haben ' + questionOnePoints + 'Punkte');
startQuestion(3);
// state = 'detect'
}
@@ -274,11 +338,11 @@ function handleAnswerToThirdQuestion (query) {
} else {
answerArray = QUESTION_THREE_ANSWERS_PT2;
}
if (query === answerArray[count]) {
if (query === answerArray[questionThreeCount]) {
strike = 0;
partTwo = false;
count++;
questionThreePoints = count + 1;
questionThreeCount++;
questionThreePoints = questionThreeCount + 1;
questionArray = QUESTION_THREE_QUESTIONS_PT1;
} else {
strike++;
@@ -286,7 +350,7 @@ function handleAnswerToThirdQuestion (query) {
questionArray = QUESTION_THREE_QUESTIONS_PT2;
}

if (strike === 2 || count === 5) {
if (strike === 2 || questionThreeCount === 5) {
speechsynth.rate = 1;
skipRecording = true;
speak('weiter geht es mit der Nächsten Frage');
@@ -294,104 +358,63 @@ function handleAnswerToThirdQuestion (query) {
return;
}

speak(questionArray[count]);
speak(questionArray[questionThreeCount]);

console.log('count: ' + count + ', strike: ' + strike + ', points: ' + questionThreePoints);
console.log('count: ' + questionThreeCount + ', strike: ' + strike + ', points: ' + questionThreePoints);
}
// #endregion

// Question specific functions
function readQuestionOne (text) {
skipRecording = true;
speak(text);
for (let i = 0; i < QUESTION_ONE_QUESTIONS.length; i++) {
let utterance = new SpeechSynthesisUtterance();
utterance.voice = voices[2];
utterance.rate = 0.75;
utterance.text = QUESTION_ONE_QUESTIONS[i];
window.speechSynthesis.speak(utterance);
if (i === 9) {
utterance.onend = function (event) {
console.log('end of aufzählung' + i);
recognizeSpeech();
};
}
}
// #region global functions
function startDemenzScreening () {
// ws.send('starte demenz test');
startQuestion(3);
testBtn.disabled = true;
testBtn.textContent = 'Test in progress';
infoPara.textContent = 'wait...';
diagnosticPara.textContent = 'detecting...';
}

function readQuestionTwo (text) {
let utterance = new SpeechSynthesisUtterance();
utterance.voice = voices[2];
utterance.text = text;
window.speechSynthesis.speak(utterance);
console.log('q 2 started');
utterance.onend = function (event) {
window.setTimeout(
function () {
recognition.stop();
handleAnswer(answerQuery);
}, 60000);
console.log('q 2 recognition started');
recognizeSpeech();
};
function speak (sentence) {
speechsynth.text = sentence;
window.speechSynthesis.speak(speechsynth);
}

function calculatePoints (tokens, array) {
let points = 0;
for (let i of array) {
for (let j of tokens) {
if (i === j) {
points++;
}
}
}
return points;
function testSpeechOut () {
console.log('click');
speechsynth.text = 'test 123';
speechsynth.volume = 1;
speechsynth.rate = 1;
console.log(speechsynth);
window.speechSynthesis.speak(speechsynth);
console.log(window.speechSynthesis);
}

speechsynth.onend = function (event) {
switch (question) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
}
if (!skipRecording) {
recognizeSpeech();
}
skipRecording = false;
console.log('global speech end');
};

function recognizeSpeech () {
if (state === 'answer') {
var arr;
switch (question) {
case 1:
arr = QUESTION_ONE_QUESTIONS;
break;
case 2:
return;
case 3:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
break;
case 4:
break;
case 5:
break;
}

var grammar = '#JSGF V1.0; grammar colors; public <color> = ' + arr.join(' | ') + ' ;';
var speechRecognitionList = new SpeechGrammarList();
speechRecognitionList.addFromString(grammar, 1);
recognition.grammars = speechRecognitionList;
}
// if (state === 'answer') {
// var arr;
// switch (question) {
// case 1:
// arr = QUESTION_ONE_QUESTIONS;
// break;
// case 2:
// // arr = QUESTION_TWO_QUESTIONS;
// break;
// case 3:
// arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// break;
// case 4:
// break;
// case 5:
// break;
// }

// // var grammar = '#JSGF V1.0; grammar colors; public <color> = ' + arr.join(' | ') + ' ;';
// // var speechRecognitionList = new SpeechGrammarList();
// // speechRecognitionList.addFromString(grammar, 1);
// // recognition.grammars = speechRecognitionList;
// }
recognition.start();
console.log('reocgnition started');
console.log('reocgnition started. Question: ' + question);

recognition.onresult = function (event) {
var last = event.results.length - 1;
@@ -400,7 +423,7 @@ function recognizeSpeech () {
diagnosticPara.textContent += speechResult + ' ';

// console.log('Confidence: ' + event.results[0][0].confidence)
console.log('process: ' + speechResult);
processSpeech(speechResult);
// testBtn.disabled = false
// testBtn.textContent = 'record...'
@@ -427,6 +450,7 @@ function recognizeSpeech () {
case 4:
break;
case 5:
timeOut = 6500;
break;
}

@@ -505,5 +529,16 @@ function recognizeSpeech () {
};
}

function calculatePoints (tokens, dict) {
let points = 0;
for (let word of tokens) {
if (dict[word] !== undefined) {
points += dict[word];
}
}
return points;
}
// #endregion

testBtn.addEventListener('click', startDemenzScreening);
testBtn2.addEventListener('click', testSpeechOut);

+ 0
- 596
lebensmittel.txt View File

@@ -1,596 +0,0 @@
Aalsuppe
Agavendicksaft
Ahornsirup
Ajvar
Ananas
Anis
Anona
Apfel
Apfelkompott
Apfelkraut
Apfelsine
Aprikose
Artischocke
Artischockenherz
Aubergine
Auflauf
Austernpilz
Avocado
Backaroma
Backfett
Backware
Backwerk
Baiser
Balsamessig
Balsamico
Banane
Basilikum
Bauernbrot
Bergkäse
Bienenstich
Birne
Biskuitteig
Bitterschokolade
Blattsalat
Blattspinat
Blaubeere
Blaukohl
Blaukraut
Blauschimmelkäse
Blätterteig
Blumenkohl
Blutorange
Blutwurst
Blütenhonig
Bockwurst
Bohne
Bohnenkraut
Bohnensuppe
Borschtsch
Boskop
Bouillon
Bouillonwürfel
Bratapfel
Bratwurst
Broccoli
Brokkoli
Brombeere
Brot
Brotaufstrich
Brotsuppe
Brotteig
Brunnenkresse
Brühwürfel
Buchweizen
Butter
Buttercreme
Buttergebäck
Butterkäse
Butterkeks
Butterpilz
Büchsenmilch
Béchamelsauce
Béchamelsoße
Calzone
Camembert
Cannelloni
Cashew
Cashewnuss
Cayennepfeffer
Champignon
Cheddarkäse
Chester
Chesterkäse
Chicorée
Chili
Chilisauce
Chilisoße
Chinakohl
Chorizo
Christstollen
Ciabatta
Citrusfrucht
Clementine
Consommé
Cookie
Corned beef
Cornflakes
Couscous
Cranberry
Croissant
Crème fraîche
Curry
Currypulver
Currysauce
Currysoße
Currywurst
Dattel
Dattelpflaume
Datteltraube
Dauerwurst
Delikatesse
Delikatessgurke
Delikatesssenf
Dessert
Diätzucker
Dickmilch
Dill
Dinkel
Dinkelmehl
Distelöl
Dominostein
Dosenfleisch
Dosenmilch
Dosensuppe
Dosenwurst
Döner
Dörrfleisch
Dörrgemüse
Dörrobst
Dörrpflaume
Dressing
Drops
Edamer
Edamer Käse
Edelpilzkäse
Ei
Eierkuchen
Eigelb
Einbrennsuppe
Eingemachtes
Eingetropftes
Eintopf
Eisbergsalat
Emmentaler
Ente
Entenklein
Erbse
Erbsensuppe
Erdbeere
Erdnuss
Erdnussbutter
Erdnussflip
Erdnussmus
Erdnussöl
Esrom
Essen
Essig
Essiggurke
Esskastanie
Esswaren
Estragon
Feige
Feinbackwaren
Feingebäck
Feinkost
Felchen
Feldbohne
Feldfrucht
Feldsalat
Fenchel
Feta
Fett
Fettuccine
Filet
Fisch
Fischfilet
Fischkonserve
Fischrogen
Fischstäbchen
Fischsuppe
Fladenbrot
Flammkuchen
Flädlesuppe
Flädlisuppe
Fleckerlsuppe
Fleischbrühe
Fleischkonserve
Fleischsuppe
Fliederbeere
Fliederbeersuppe
Florentiner
Foie gras
Frankfurter
Frischkäse
Frittatensuppe
Frozen Yoghurt
Frucht
Fruchtbonbon
Fruchteis
Fruchtjoghurt
Fruchtjogurt
Früchtebrot
Früchtequark
Frühlingsrolle
Frühlingssuppe
Frühlingszwiebel
Frühstücksbrot
Fufu
Garnele
Gebäck
Gehacktes
Gelee
Gemüsesuppe
Gemüsezwiebel
Gerste
Gerstensuppe
Gerstlsuppe
Getreide
Gewürz
Gewürzgurke
Gorgonzola
Gouda
Graupe
Graupensuppe
Greyerzer
Grieß
Grießbrei
Grießkloß
Grießklößchen
Grießknödel
Grießmehl
Grießnockerl
Grießpudding
Grießschmarren
Grießsuppe
Grünkohl
Gulasch
Gulaschsuppe
Gurke
Gyros
Hackepeter
Hackfleisch
Hafer
Haferflocken
Hagebutte
Haifischflossensuppe
Hartkäse
Harzer
Haselnuss
Hefe
Hefezopf
Heidelbeere
Hering
Heringssalat
Hibiskustee
Himbeere
Himbeereis
Hirse
Holunderblütensirup
Honig
Honigkuchen
Honigmelone
Hummer
Hummersuppe
Hummus
Hühnerfleisch
Igel
Ingwer
Instantsuppe
Jagdwurst
Jasmintee
Jägersuppe
Joghurt
Johannisbeere
Johannisbrot
Julienne
Juliennesuppe
Kakaopulver
Kaki
Kaltschale
Kandis
Kandiszucker
Karamell
Karamellbonbon
Kardamom
Karotte
Kartoffel
Kartoffelchip
Kartoffeln
Kartoffelsuppe
Käse
Käsebrötchen
Käsekuchen
Keks
Kirsche
Kiwi
Knoblauch
Knoblauchbutter
Knoblauchöl
Knoblauchpulver
Knoblauchsalz
Knoblauchsoße
Knoblauchwurst
Kohl
Kohlroulade
Koriander
Krakauer
Krankensuppe
Krapfen
Kraut
Kräuterbutter
Kräuterkäse
Krebsfleisch
Krebssuppe
Kreplach
Kreuzkümmel
Kuchen
Kurkuma
Kümmel
Kürbis
Kürbiskern
Kürbiskernbrot
Kürbissuppe
Labskaus
Lachs
Lammfleisch
Languste
Lauch
Lauchzwiebel
Lebensmittel
Leberwurst
Lebkuchen
Lebkuchengewürz
Limburger
Limette
Linguine
Linse
Linsensuppe
Lorbeerblatt
Magermilchpulver
Mais
Maisgrieß
Maiskolben
Maismehl
Majoran
Mandarine
Mandel
Mandelkern
Mango
Maniok
Maracuja
Margarine
Marmelade
Marmorkuchen
Marzipan
Mascarpone
Matcha
Meerrettich
Mehl
Melone
Mett
Mettwurst
Milchpulver
Milchsuppe
Mohn
Mohnbrötchen
Mozzarella
Möhre
Mus
Müsli
Nektarinen
Nockerl
Nockerlsuppe
Noisette
Noisetteschokolade
Nudeln
Nugat
Nuss
Nusskuchen
Nussschinken
Nussschokolade
Obst
Obstkuchen
Okroschka
Olive
Olivenöl
Omelett
Orange
Orangeat
Oregano
Pampelmuse
Panadelsuppe
Paprika
Paranuss
Parmesankäse
Pasta
Pastete
Pastinake
Pecannuss
Pekannuss
Peperoni
Persillade
Pesto
Petersilie
Pfannkuchen
Pfeffer
Pfefferkuchen
Pferdefleisch
Pfifferling
Pfirsich
Pflaume
Pilz
Pilzsuppe
Piment
Pinienkerne
Pistazie
Pita
Pitabrot
Pizza
Plätzchen
Polenta
Pommes frites
Porridge
Posaunensuppe
Potage
Preiselbeere
Puderzucker
Puffreis
Pumpernickel
Putenfleisch
Quark
Quarkbällchen
Quarktasche
Quiche
Quitte
Radicchio
Radieschen
Rahm
Rahmsuppe
Ramen
Ravioli
Räucherlachs
Reis
Reissuppe
Remoulade
Rettich
Rhabarber
Ricotta
Rindfleisch
Rindfleischsuppe
Roggen
Roggenbrot
Rohkost
Rohrzucker
Rollmops
Romadur
Rosenkohl
Rosine
Rosinenkuchen
Rosinenschnecke
Rosmarin
Rote Beete
Rotkohl
Rotkraut
Rotschimmelkäse
Rucola
Rumfordsuppe
Rumkugel
Rübe
Rübenkraut
Rübenzucker
Salami
Salatgurke
Salbei
Salz
Salzbrezel
Salzgurke
Salzstange
Sauerkraut
Sauermilch
Sauermilchquark
Sauerrahm
Schafskäse
Schalotte
Schildkrötensuppe
Schinken
Schleimsuppe
Schmorbraten
Schnittlauch
Schokolade
Schwalbennestersuppe
Schwarzbrot
Schwarzkümmel
Schwarzwurzel
Schweinefleisch
Seitan
Sellerie
Senf
Senfgurke
Sesam
Sesambrötchen
Sesamsauce
Soja
Sojasprossen
Soljanka
Sonnenblumenkern
Spaghetti
Spargel
Spargelsuppe
Spätzle
Spekulatius
Spinat
Spreewaldgurke
Spritzgebäck
Steinpilz
Sternanis
Stollen
Stracciatella
Stutenmilch
Suppenextrakt
Suppenfleisch
Suppengrün
Suppenhuhn
Suppenknochen
Suppenspargel
Suppenwürfel
Sushi
Süßkartoffel
Süßrahm
Süßrahmbutter
Tagessuppe
Tagliatelle
Tahin
Tamarinde
Tapioka
Teewurst
Tellerfleisch
Tempeh
Terrine
Tiefkühlkost
Tiefkühlpizza
Tilsiter
Tiramisu
Toast
Tofu
Tomate
Tomatenmark
Tomatensoße
Tomatensuppe
Topinambur
Tortellini
Traube
Traubenkernöl
Urbrot
Vanille
Vanillerostbraten
Vanillezucker
Vanillinzucker
Vollkornbrot
Vollkornmehl
Vollmilchpulver
Vollmilchschokolade
Vollrohrzucker
Walnuss
Wasabi
Wassersuppe
Weichkäse
Weihnachtsgebäck
Weintraube
Weißbrot
Weißkohl
Weißkraut
Weizen
Weizengrieß
Weizenmehl
Wirsing
Wurst
Wurstbrühe
Wurstsuppe
Zaziki
Ziegenkäse
Ziegenmilch
Zimt
Zimtstange
Zitronat
Zitrone
Zitronensaft
Zucker
Zuckerguss
Zuckerrübensirup
Zwiebel
Zwiebelkuchen
Zwiebelring
Zwiebelsuppe
Äpfel
Öl

+ 25
- 33
server/package-lock.json View File

@@ -13,9 +13,9 @@
},
"dependencies": {
"semver": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
"integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ=="
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz",
"integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A=="
}
}
},
@@ -630,9 +630,9 @@
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dialogflow": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/dialogflow/-/dialogflow-0.10.1.tgz",
"integrity": "sha512-aULzboCRdREOBvSlMQH3XWkBAW2EPnLyjztup/K61UYY+L0KzjC1jzDOUPZD42yMlB1p1SX0X296LF8rYvsDIA==",
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/dialogflow/-/dialogflow-0.10.2.tgz",
"integrity": "sha512-5E3+/TkAj5KlowsvhmaXxR26O+hC0LA0fj7pfhcwGDJbRWzEetWTnxNgV6pOpYd1NaI+GBVS6m34mJrL1L7biA==",
"requires": {
"google-gax": "^1.0.0",
"protobufjs": "^6.8.0"
@@ -1260,9 +1260,9 @@
}
},
"gcp-metadata": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-2.0.0.tgz",
"integrity": "sha512-BN6KUUWo6WLkDRst+Y7bqpXq1PYMrKUecNLRdZESp7oYtMjWcZdAM0UYvcip8wb0GXNO/j8Z8HTccK4iYtMvyQ==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-2.0.1.tgz",
"integrity": "sha512-nrbLj5O1MurvpLC/doFwzdTfKnmYGDYXlY/v7eQ4tJNVIvQXbOK672J9UFbradbtmuTkyHzjpzD8HD0Djz0LWw==",
"requires": {
"gaxios": "^2.0.0",
"json-bigint": "^0.3.0"
@@ -1303,9 +1303,9 @@
"dev": true
},
"google-auth-library": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-4.2.2.tgz",
"integrity": "sha512-PI8uGQMNIUgWL2upwsuDOjvJO1i9ON9MkvbZO44j7sIHeNmuUpwpP8YxKSGkmUh34L5V3xD9nS/0kgH0YY9qrQ==",
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-4.2.5.tgz",
"integrity": "sha512-Vfsr82M1KTdT0H0wjawwp0LHsT6mPKSolRp21ZpJ7Ydq63zRe8DbGKjRCCrhsRZHg+p17DuuSCMEznwk3CJRdw==",
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
@@ -1314,21 +1314,13 @@
"gcp-metadata": "^2.0.0",
"gtoken": "^3.0.0",
"jws": "^3.1.5",
"lru-cache": "^5.0.0",
"semver": "^6.0.0"
},
"dependencies": {
"semver": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
"integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ=="
}
"lru-cache": "^5.0.0"
}
},
"google-gax": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.1.2.tgz",
"integrity": "sha512-kl/7U5x0Db9TwY4qYKomyBjKAgy3ztb1iqpx/wC84CtUVMNa1JNyPVlVdjgJS2JgOUF0yxMp9z6amfvss6tSIA==",
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.1.3.tgz",
"integrity": "sha512-IBfapyt7+yh2RsisL5EOLfJz2fiqnp9GF8lZdfgSfmIjEE3eoMdCaGGpM7EgHA1OqwTvT4ePqLqIFGOhUF2Zmw==",
"requires": {
"@grpc/grpc-js": "^0.4.0",
"@grpc/proto-loader": "^0.5.1",
@@ -1344,16 +1336,16 @@
},
"dependencies": {
"semver": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
"integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ=="
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz",
"integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A=="
}
}
},
"google-p12-pem": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.0.tgz",
"integrity": "sha512-n8eGSKzWOb9/EmSBIh81sPvsQM939QlpHMXahTZDzuRIpCu09x3Oaqz+mXGjL4TeCvSbcnOC0YZRvjkJ9s9lnA==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.1.tgz",
"integrity": "sha512-6h6x+eBX3k+IDSe/c8dVYmn8Mzr1mUcmKC9MdUSwaBkFAXlqBEnwFWmSFgGC+tcqtsLn73BDP/vUNWEehf1Rww==",
"requires": {
"node-forge": "^0.8.0"
}
@@ -1364,9 +1356,9 @@
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
},
"gtoken": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-3.0.1.tgz",
"integrity": "sha512-/bOZFfO6c+BC2IoOrvV+NKfEWQ1CCycrWG55Ix8ZfO/tTM0iGg9ojoQUWPbH5QS+vf+JoQYeTJ0zS+EDCP5M9w==",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-3.0.2.tgz",
"integrity": "sha512-BOBi6Zz31JfxhSHRZBIDdbwIbOPyux10WxJHdx8wz/FMP1zyN1xFrsAWsgcLe5ww5v/OZu/MePUEZAjgJXSauA==",
"requires": {
"gaxios": "^2.0.0",
"google-p12-pem": "^2.0.0",

+ 1
- 1
server/package.json View File

@@ -11,7 +11,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"dialogflow": "^0.10.0",
"dialogflow": "^0.10.2",
"express": "^4.17.1",
"ngrok": "^3.1.1",
"path": "^0.12.7",

Loading…
Cancel
Save