Full Code of acuminous/yadda for AI

master 23888edbf640 cached
590 files
20.3 MB
5.4M tokens
26783 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (21,448K chars total). Download the full file to get everything.
Repository: acuminous/yadda
Branch: master
Commit: 23888edbf640
Files: 590
Total size: 20.3 MB

Directory structure:
gitextract_pdomq_n9/

├── .codeclimate.yml
├── .eslintignore
├── .eslintrc
├── .github/
│   └── workflows/
│       ├── codeql-analysis.yml
│       └── node-js-ci.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-commit
├── .jshintignore
├── .mocharc.json
├── .npmignore
├── .prettierignore
├── .prettierrc.json
├── CHANGELOG.md
├── README.md
├── bin/
│   ├── browserify.js
│   ├── examples.bat
│   ├── examples.js
│   ├── examples.sh
│   └── rev.sh
├── bower.json
├── component.json
├── dist/
│   ├── yadda-0.10.0.js
│   ├── yadda-0.10.1.js
│   ├── yadda-0.10.10.js
│   ├── yadda-0.10.11.js
│   ├── yadda-0.10.12.js
│   ├── yadda-0.10.13.js
│   ├── yadda-0.10.14.js
│   ├── yadda-0.10.2.js
│   ├── yadda-0.10.3.js
│   ├── yadda-0.10.4.js
│   ├── yadda-0.10.5.js
│   ├── yadda-0.10.6.js
│   ├── yadda-0.10.7.js
│   ├── yadda-0.10.8.js
│   ├── yadda-0.10.9.js
│   ├── yadda-0.11.0.js
│   ├── yadda-0.11.1.js
│   ├── yadda-0.11.2.js
│   ├── yadda-0.11.3.js
│   ├── yadda-0.11.4.js
│   ├── yadda-0.11.5.js
│   ├── yadda-0.11.6.js
│   ├── yadda-0.11.7.js
│   ├── yadda-0.12.0.js
│   ├── yadda-0.12.1.js
│   ├── yadda-0.13.0.js
│   ├── yadda-0.13.1.js
│   ├── yadda-0.14.0.js
│   ├── yadda-0.14.1.js
│   ├── yadda-0.14.2.js
│   ├── yadda-0.15.0.js
│   ├── yadda-0.15.1.js
│   ├── yadda-0.15.2.js
│   ├── yadda-0.15.3.js
│   ├── yadda-0.15.4.js
│   ├── yadda-0.15.5.js
│   ├── yadda-0.16.0.js
│   ├── yadda-0.16.1.js
│   ├── yadda-0.16.2.js
│   ├── yadda-0.16.3.js
│   ├── yadda-0.17.0.js
│   ├── yadda-0.17.1.js
│   ├── yadda-0.17.10.js
│   ├── yadda-0.17.2.js
│   ├── yadda-0.17.3.js
│   ├── yadda-0.17.4.js
│   ├── yadda-0.17.5.js
│   ├── yadda-0.17.6.js
│   ├── yadda-0.17.7.js
│   ├── yadda-0.17.8.js
│   ├── yadda-0.17.9.js
│   ├── yadda-0.18.0.js
│   ├── yadda-0.19.0.js
│   ├── yadda-0.20.0.js
│   ├── yadda-0.21.0.js
│   ├── yadda-0.22.0.js
│   ├── yadda-0.22.1.js
│   ├── yadda-0.22.2.js
│   ├── yadda-0.3.0.js
│   ├── yadda-0.4.0.js
│   ├── yadda-0.4.1.js
│   ├── yadda-0.4.2.js
│   ├── yadda-0.4.3.js
│   ├── yadda-0.4.4.js
│   ├── yadda-0.4.5.js
│   ├── yadda-0.4.6.js
│   ├── yadda-0.4.7.js
│   ├── yadda-0.5.0.js
│   ├── yadda-0.5.1.js
│   ├── yadda-0.5.2.js
│   ├── yadda-0.6.0.js
│   ├── yadda-0.6.1.js
│   ├── yadda-0.6.2.js
│   ├── yadda-0.6.3.js
│   ├── yadda-0.6.4.js
│   ├── yadda-0.6.5.js
│   ├── yadda-0.7.0.js
│   ├── yadda-0.7.1.js
│   ├── yadda-0.7.2.js
│   ├── yadda-0.8.0.js
│   ├── yadda-0.8.1.js
│   ├── yadda-0.8.2.js
│   ├── yadda-0.8.3.js
│   ├── yadda-0.8.4.js
│   ├── yadda-0.8.5.js
│   ├── yadda-0.8.6.js
│   ├── yadda-0.9.0.js
│   ├── yadda-0.9.1.js
│   ├── yadda-0.9.10.js
│   ├── yadda-0.9.11.js
│   ├── yadda-0.9.2.js
│   ├── yadda-0.9.3.js
│   ├── yadda-0.9.4.js
│   ├── yadda-0.9.5.js
│   ├── yadda-0.9.6.js
│   ├── yadda-0.9.7.js
│   ├── yadda-0.9.8.js
│   ├── yadda-0.9.9.js
│   ├── yadda-1.0.0.js
│   ├── yadda-1.0.1.js
│   ├── yadda-1.1.0.js
│   ├── yadda-1.1.1.js
│   ├── yadda-1.2.0.js
│   ├── yadda-1.3.0.js
│   ├── yadda-1.3.1.js
│   ├── yadda-1.4.0.js
│   ├── yadda-1.5.0.js
│   ├── yadda-1.5.1.js
│   ├── yadda-2.0.0.js
│   ├── yadda-2.0.1.js
│   ├── yadda-2.1.0.js
│   ├── yadda-2.1.1.js
│   ├── yadda-2.2.0.js
│   ├── yadda-umd-0.10.0.js
│   ├── yadda-umd-0.10.1.js
│   ├── yadda-umd-0.10.10.js
│   ├── yadda-umd-0.10.11.js
│   ├── yadda-umd-0.10.12.js
│   ├── yadda-umd-0.10.13.js
│   ├── yadda-umd-0.10.14.js
│   ├── yadda-umd-0.10.2.js
│   ├── yadda-umd-0.10.3.js
│   ├── yadda-umd-0.10.4.js
│   ├── yadda-umd-0.10.5.js
│   ├── yadda-umd-0.10.6.js
│   ├── yadda-umd-0.10.7.js
│   ├── yadda-umd-0.10.8.js
│   ├── yadda-umd-0.10.9.js
│   ├── yadda-umd-0.11.0.js
│   ├── yadda-umd-0.11.1.js
│   ├── yadda-umd-0.11.2.js
│   ├── yadda-umd-0.11.3.js
│   ├── yadda-umd-0.11.4.js
│   ├── yadda-umd-0.11.5.js
│   ├── yadda-umd-0.11.6.js
│   ├── yadda-umd-0.11.7.js
│   ├── yadda-umd-0.12.0.js
│   ├── yadda-umd-0.12.1.js
│   ├── yadda-umd-0.13.0.js
│   ├── yadda-umd-0.13.1.js
│   ├── yadda-umd-0.14.0.js
│   ├── yadda-umd-0.14.1.js
│   ├── yadda-umd-0.14.2.js
│   ├── yadda-umd-0.15.0.js
│   ├── yadda-umd-0.15.1.js
│   ├── yadda-umd-0.15.2.js
│   ├── yadda-umd-0.15.3.js
│   ├── yadda-umd-0.15.4.js
│   ├── yadda-umd-0.15.5.js
│   ├── yadda-umd-0.16.0.js
│   ├── yadda-umd-0.16.1.js
│   ├── yadda-umd-0.16.2.js
│   ├── yadda-umd-0.16.3.js
│   ├── yadda-umd-0.17.0.js
│   ├── yadda-umd-0.17.1.js
│   ├── yadda-umd-0.17.10.js
│   ├── yadda-umd-0.17.2.js
│   ├── yadda-umd-0.17.3.js
│   ├── yadda-umd-0.17.4.js
│   ├── yadda-umd-0.17.5.js
│   ├── yadda-umd-0.17.6.js
│   ├── yadda-umd-0.17.7.js
│   ├── yadda-umd-0.17.8.js
│   ├── yadda-umd-0.17.9.js
│   ├── yadda-umd-0.18.0.js
│   ├── yadda-umd-0.19.0.js
│   ├── yadda-umd-0.20.0.js
│   ├── yadda-umd-0.21.0.js
│   ├── yadda-umd-0.22.0.js
│   ├── yadda-umd-0.22.1.js
│   ├── yadda-umd-0.22.2.js
│   ├── yadda-umd-0.3.0.js
│   ├── yadda-umd-0.4.0.js
│   ├── yadda-umd-0.4.1.js
│   ├── yadda-umd-0.4.2.js
│   ├── yadda-umd-0.4.3.js
│   ├── yadda-umd-0.4.4.js
│   ├── yadda-umd-0.4.5.js
│   ├── yadda-umd-0.4.6.js
│   ├── yadda-umd-0.4.7.js
│   ├── yadda-umd-0.5.0.js
│   ├── yadda-umd-0.5.1.js
│   ├── yadda-umd-0.5.2.js
│   ├── yadda-umd-0.6.0.js
│   ├── yadda-umd-0.6.1.js
│   ├── yadda-umd-0.6.2.js
│   ├── yadda-umd-0.6.3.js
│   ├── yadda-umd-0.6.4.js
│   ├── yadda-umd-0.6.5.js
│   ├── yadda-umd-0.7.0.js
│   ├── yadda-umd-0.7.1.js
│   ├── yadda-umd-0.7.2.js
│   ├── yadda-umd-0.8.0.js
│   ├── yadda-umd-0.8.1.js
│   ├── yadda-umd-0.8.2.js
│   ├── yadda-umd-0.8.3.js
│   ├── yadda-umd-0.8.4.js
│   ├── yadda-umd-0.8.5.js
│   ├── yadda-umd-0.8.6.js
│   ├── yadda-umd-0.9.0.js
│   ├── yadda-umd-0.9.1.js
│   ├── yadda-umd-0.9.10.js
│   ├── yadda-umd-0.9.11.js
│   ├── yadda-umd-0.9.2.js
│   ├── yadda-umd-0.9.3.js
│   ├── yadda-umd-0.9.4.js
│   ├── yadda-umd-0.9.5.js
│   ├── yadda-umd-0.9.6.js
│   ├── yadda-umd-0.9.7.js
│   ├── yadda-umd-0.9.8.js
│   ├── yadda-umd-0.9.9.js
│   ├── yadda-umd-1.0.0.js
│   ├── yadda-umd-1.0.1.js
│   ├── yadda-umd-1.1.0.js
│   ├── yadda-umd-1.1.1.js
│   ├── yadda-umd-1.2.0.js
│   ├── yadda-umd-1.3.0.js
│   ├── yadda-umd-1.3.1.js
│   ├── yadda-umd-1.4.0.js
│   ├── yadda-umd-1.5.0.js
│   ├── yadda-umd-1.5.1.js
│   ├── yadda-umd-2.0.0.js
│   ├── yadda-umd-2.0.1.js
│   ├── yadda-umd-2.1.0.js
│   ├── yadda-umd-2.1.1.js
│   └── yadda-umd-2.2.0.js
├── examples/
│   ├── basic/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── demo.js
│   │   ├── lib/
│   │   │   └── bottles-library.js
│   │   └── package.json
│   ├── basic-async/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── demo.js
│   │   ├── lib/
│   │   │   └── bottles-library.js
│   │   └── package.json
│   ├── context/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── context.feature
│   │   ├── lib/
│   │   │   ├── discharge-library.js
│   │   │   ├── hospital-library.js
│   │   │   └── patient-library.js
│   │   ├── package.json
│   │   └── test.js
│   ├── data-tables/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── data-tables.feature
│   │   ├── library.js
│   │   ├── package.json
│   │   └── test.js
│   ├── dictionary/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── dictionary-library.js
│   │   ├── features/
│   │   │   └── dictionary.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── jasmine/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── spec/
│   │       ├── bottles-spec.js
│   │       └── support/
│   │           └── jasmine.json
│   ├── localisation/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async-slp/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async-thenable/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   ├── bottles.feature
│   │   │   └── cups.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-express/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── routes/
│   │   │   ├── bottles.js
│   │   │   └── server.js
│   │   └── test/
│   │       ├── features/
│   │       │   └── bottles.feature
│   │       ├── steps/
│   │       │   └── bottles-library.js
│   │       └── test.js
│   ├── mocha-mixed-async-sync/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-multi-library/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   ├── bottles.feature
│   │   │   └── vases.feature
│   │   ├── lib/
│   │   │   ├── Wall.js
│   │   │   ├── bottle-steps.js
│   │   │   ├── common-steps.js
│   │   │   ├── dictionary.js
│   │   │   └── vase-steps.js
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-sync/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── multiline-examples-table/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── transpile.feature
│   │   ├── package.json
│   │   ├── test.js
│   │   └── transpile-library.js
│   ├── multiline-steps/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── csv-library.js
│   │   ├── features/
│   │   │   └── multiline-steps.feature
│   │   ├── package.json
│   │   ├── poem-library.js
│   │   ├── test.js
│   │   └── transpile-library.js
│   ├── nightwatch/
│   │   ├── .gitignore
│   │   ├── archive/
│   │   │   ├── logs/
│   │   │   │   └── .gitkeep
│   │   │   └── screenshots/
│   │   │       └── .gitkeep
│   │   ├── nightwatch.conf.js
│   │   ├── package.json
│   │   └── tests/
│   │       ├── assertions/
│   │       │   └── .gitkeep
│   │       ├── commands/
│   │       │   └── .gitkeep
│   │       ├── converters/
│   │       │   ├── filter.js
│   │       │   └── index.js
│   │       ├── features/
│   │       │   └── job-search.spec
│   │       ├── pages/
│   │       │   ├── jobsHome.js
│   │       │   └── jobsSearch.js
│   │       ├── runner/
│   │       │   └── index.js
│   │       └── steps/
│   │           ├── dictionary.js
│   │           ├── jobsHome.js
│   │           └── jobsSearch.js
│   ├── nodeunit/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── qunit/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── lib/
│   │   │   ├── qunit-1.10.0.css
│   │   │   └── qunit-1.10.0.js
│   │   ├── package.json
│   │   └── test.html
│   ├── report-unused-steps/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   └── resuable-scenarios/
│       ├── README.md
│       ├── bin/
│       │   ├── example.bat
│       │   ├── example.js
│       │   └── example.sh
│       ├── bottles-library.js
│       ├── features/
│       │   └── bottles.feature
│       ├── package.json
│       └── test.js
├── karma.conf.js
├── lib/
│   ├── Array.js
│   ├── Competition.js
│   ├── Context.js
│   ├── Dictionary.js
│   ├── EventBus.js
│   ├── FeatureFileSearch.js
│   ├── FileSearch.js
│   ├── Interpreter.js
│   ├── Library.js
│   ├── Macro.js
│   ├── Platform.js
│   ├── RegularExpression.js
│   ├── StringUtils.js
│   ├── Yadda.js
│   ├── converters/
│   │   ├── date-converter.js
│   │   ├── float-converter.js
│   │   ├── index.js
│   │   ├── integer-converter.js
│   │   ├── list-converter.js
│   │   ├── pass-through-converter.js
│   │   └── table-converter.js
│   ├── fn.js
│   ├── index.js
│   ├── localisation/
│   │   ├── Chinese.js
│   │   ├── Dutch.js
│   │   ├── English.js
│   │   ├── French.js
│   │   ├── German.js
│   │   ├── Language.js
│   │   ├── Norwegian.js
│   │   ├── Pirate.js
│   │   ├── Polish.js
│   │   ├── Portuguese.js
│   │   ├── Russian.js
│   │   ├── Spanish.js
│   │   ├── Ukrainian.js
│   │   └── index.js
│   ├── parsers/
│   │   ├── FeatureFileParser.js
│   │   ├── FeatureParser.js
│   │   ├── StepParser.js
│   │   └── index.js
│   ├── plugins/
│   │   ├── CasperPlugin.js
│   │   ├── index.js
│   │   └── mocha/
│   │       ├── BasePlugin.js
│   │       ├── ScenarioLevelPlugin.js
│   │       └── StepLevelPlugin.js
│   ├── scores/
│   │   ├── LevenshteinDistanceScore.js
│   │   ├── MultiScore.js
│   │   └── SameLibraryScore.js
│   └── shims/
│       ├── index.js
│       ├── karma-fs.js
│       ├── karma-path.js
│       ├── karma-process.js
│       ├── phantom-fs.js
│       ├── phantom-path.js
│       └── phantom-process.js
├── package.json
└── test/
    ├── ArrayTests.js
    ├── CompetitionTests.js
    ├── ContextTests.js
    ├── Counter.js
    ├── DictionaryTests.js
    ├── EventBusTests.js
    ├── FeatureFileSearchTests.js
    ├── FeatureParserTests.js
    ├── FileSearchTests.js
    ├── FunctionalTests.js
    ├── InterpreterTests.js
    ├── LibraryTests.js
    ├── LocalisationTests.js
    ├── MacroTests.js
    ├── RegularExpressionTests.js
    ├── StepParserTests.js
    ├── StringUtilsTests.js
    ├── YaddaTests.js
    ├── converters/
    │   ├── DateConverterTest.js
    │   ├── FloatConverterTest.js
    │   ├── IntegerConverterTest.js
    │   ├── ListConverterTest.js
    │   └── TableConverterTest.js
    ├── features/
    │   ├── annotated/
    │   │   ├── annotated_example_table.feature
    │   │   ├── annotated_feature.feature
    │   │   ├── annotated_feature_non_alphanumeric.feature
    │   │   ├── annotated_multiline_example_table.feature
    │   │   ├── annotated_scenario.feature
    │   │   ├── annotated_scenario_after_background.feature
    │   │   ├── untrimmed_annotated_feature.feature
    │   │   └── untrimmed_annotated_scenario.feature
    │   ├── background/
    │   │   ├── background_with_multiline_step.feature
    │   │   ├── feature_with_background.feature
    │   │   └── malformed_background_annotated.feature
    │   ├── comment/
    │   │   ├── multiline_comment.feature
    │   │   └── singleline_comment.feature
    │   ├── example_table/
    │   │   ├── complex_multiline_example_table.feature
    │   │   ├── example_table.feature
    │   │   ├── example_table_2506.feature
    │   │   ├── example_table_followed_by_annotated_scenario.feature
    │   │   ├── example_table_with_chevrons.feature
    │   │   ├── example_table_with_outer_borders.feature
    │   │   ├── feature_with_background_and_example_table.feature
    │   │   ├── incomplete_example_table_1.feature
    │   │   ├── incomplete_example_table_2.feature
    │   │   ├── incomplete_example_table_3.feature
    │   │   ├── incomplete_example_table_4.feature
    │   │   ├── malformed_example_table_1.feature
    │   │   ├── malformed_example_table_2.feature
    │   │   ├── malformed_example_table_3.feature
    │   │   ├── malformed_multiline_example_table_1.feature
    │   │   ├── malformed_multiline_example_table_2.feature
    │   │   ├── malformed_multiline_example_table_3.feature
    │   │   ├── meta_fields.feature
    │   │   ├── meta_fields_multiline_example_table.feature
    │   │   ├── multiline_example_table_with_outer_border.feature
    │   │   ├── multiline_step_example_table.feature
    │   │   └── simple_multiline_example_table.feature
    │   ├── feature/
    │   │   ├── feature_description.feature
    │   │   ├── incomplete_feature.feature
    │   │   ├── multiple_features.feature
    │   │   └── simple_feature.feature
    │   ├── localisation/
    │   │   └── pirate_feature.feature
    │   └── scenario/
    │       ├── complex_scenario.feature
    │       ├── incomplete_scenario_1.feature
    │       ├── incomplete_scenario_2.feature
    │       ├── incomplete_scenario_3.feature
    │       ├── incomplete_scenario_4.feature
    │       ├── malformed_multiline_scenario_1.feature
    │       ├── malformed_multiline_scenario_2.feature
    │       ├── malformed_multiline_scenario_3.feature
    │       ├── malformed_multiline_scenario_4.feature
    │       ├── malformed_multiline_scenario_5.feature
    │       ├── missing_scenario.feature
    │       ├── multiline_step_scenario.feature
    │       ├── multiline_step_scenario_with_ending_dash.feature
    │       ├── multiline_step_scenario_with_followers.feature
    │       ├── multiline_step_scenario_with_indentation.feature
    │       ├── multiline_step_scenario_with_multiple_blocks.feature
    │       ├── multiline_step_scenario_with_multiple_blocks_and_blank.feature
    │       ├── multiple_scenarios.feature
    │       └── simple_scenario.feature
    ├── filesearch/
    │   ├── exclude.js
    │   ├── include.feature
    │   ├── subdir1/
    │   │   ├── exclude.js
    │   │   └── include.spec
    │   └── subdir2/
    │       └── subdir3/
    │           ├── exclude.js
    │           └── include.specification
    ├── lib/
    │   ├── hospital-steps.js
    │   └── hospital.js
    ├── scores/
    │   └── MultiScoreTests.js
    └── shims/
        ├── FileSystemTests.js
        ├── PathTests.js
        ├── ProcessTests.js
        └── data/
            ├── file3.json
            ├── subdir1/
            │   └── file1.json
            └── subdir2/
                └── file2.feature

================================================
FILE CONTENTS
================================================

================================================
FILE: .codeclimate.yml
================================================
version: '2'
engines:
  eslint:
    enabled: false
  duplication:
    enabled: true
    config:
      languages:
        - javascript
    exclude_paths:
      - test
      - lib/parsers/FeatureParser.js
      - lib/localisation/*
checks:
  method-complexity:
    enabled: false
  method-lines:
    enabled: false

ratings:
  paths:
    - index.js
    - lib/**

exclude_paths:
  - bin
  - dist
  - examples


================================================
FILE: .eslintignore
================================================
coverage/*
examples/*
dist/*


================================================
FILE: .eslintrc
================================================
{
  "extends": ["prettier"],
  "plugins": ["prettier"],
  "env": {
    "node": true
  },
  "parserOptions": {
    "ecmaVersion": 5
  },
  "rules": {
    "no-control-regex": 0
  }
}


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: 'CodeQL'

on:
  push:
    branches: [master]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [master]
  schedule:
    - cron: '39 15 * * 0'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: ['javascript']
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      # Initializes the CodeQL tools for scanning.
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v2
        with:
          languages: ${{ matrix.language }}
          # If you wish to specify custom queries, you can do so here or in a config file.
          # By default, queries listed here will override any specified in a config file.
          # Prefix the list here with "+" to use these queries and those in the config file.

          # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
          # queries: security-extended,security-and-quality

      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
      # If this step fails, then you should remove it and run the build manually (see below)
      - name: Autobuild
        uses: github/codeql-action/autobuild@v2

      # ℹ️ Command-line programs to run using the OS shell.
      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

      #   If the Autobuild fails above, remove it and uncomment the following three lines.
      #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

      # - run: |
      #   echo "Run, Build Application using script"
      #   ./location_of_script_within_repo/buildscript.sh

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v2


================================================
FILE: .github/workflows/node-js-ci.yml
================================================
name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x, 18.x]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npx prettier --check .
      - run: npm run lint
      - run: npm test
      - run: npm run karma

  code-climate:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '14.x'
      - run: npm ci
      - run: curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
      - run: chmod +x ./cc-test-reporter
      - run: ./cc-test-reporter before-build
      - run: npm run coverage
      - run: ./cc-test-reporter format-coverage -t lcov coverage/lcov.info
      - run: ./cc-test-reporter upload-coverage
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}


================================================
FILE: .gitignore
================================================
node_modules/
coverage/
npm-debug.log
.DS_Store
*.swp
*.swo
*.iml
components/
build/
.idea
.codeclimate
.nyc_output


================================================
FILE: .husky/.gitignore
================================================
_


================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run lint-staged && npm run test



================================================
FILE: .jshintignore
================================================
node_modules/*
dist/*
examples/*
coverage/*


================================================
FILE: .mocharc.json
================================================
{
  "timeout": "2000",
  "recursive": true
}


================================================
FILE: .npmignore
================================================
.idea
.codeclimate
.nyc_output
build
components
coverage
dist
node_modules
npm-debug.log
.DS_Store
*.swp
*.swo
*.iml


================================================
FILE: .prettierignore
================================================
dist
coverage
.nyc_output

================================================
FILE: .prettierrc.json
================================================
{
  "singleQuote": true,
  "printWidth": 300
}


================================================
FILE: CHANGELOG.md
================================================
# Change Log

## Unreleased

- Restrict dependabot to direct dependencies

## [2.2.0]

- Add support for custom example placeholder delimiters to mocha plugin

## [2.1.1]

- Bump dev dependencies
- Move to prettier
- Move to github actions

## [2.1.0]

- Update dependencies

## [2.0.1]

- Fix broken requires. See https://github.com/acuminous/yadda/pull/244. Thanks [nonlux](https://github.com/nonlux)

## [2.0.0]

- Fixes [bug](https://github.com/acuminous/yadda/issues/#243)
- No longer testing on node 4 and 5

## [1.5.1]

- Update dependencies
- Remove examples with insecure depenencies

## [1.5.0]

- Add support of programatically skipping mocha tests when using the step level plugin
- Fix examples in npm 5

## [1.4.0]

- Updated more dev deps including browserify

## [1.3.1]

- Updated dev dependencies
- Automated codeclimate

## [1.3.0]

- Ukranian Localisation - thanks [dedmazayukr](https://github.com/dedmazayukr).

## [1.2.0]

- Passing options through localised steps definition. See #232. Thanks [bogus34](https://github.com/bogus34).

## [1.1.1]

- npms didn't pick up the build

## [1.1.0]

- Switching to eslint

## [1.0.0]

- Tidy up
- Configuring Code Climate

## [0.22.1]

- Fixes [bug](https://github.com/acuminous/yadda/issues/#225) where errors returned by steps in jasmine were swallowed.
- Removed webdriver examples (webdriver.js is not longer maintained)

## [0.22.0]

- Fixes [bug](https://github.com/acuminous/yadda/issues/223) where errors thrown by synchronous steps were swallowed.

## [0.21.0]

- Converters can yield multiple values

## [0.20.0]

- Working around [this](https://github.com/mochajs/mocha/issues/2465) issue with mocha 3.

## [0.19.0]

- Removed dist from npm package

## [0.18.0]

- Closes #217 (using catch with promises)
- Closes #216 (improves step sync/async detection)

## [0.17.10]

- GLOBAL is dead. Long live global. Fixes [#215](https://github.com/acuminous/yadda/issues/215)

## [0.17.9]

- Registering in bower repo.

## [0.17.8]

- Adding the ability to report unused steps. See the report-unused-steps-example.

## [0.17.7]

- [simonihmig](https://github.com/simonihmig) reported and fixed a bug with the step selection routines which caused different behaviour in chrome and phantom.

## [0.17.6]

- Fixing a bug where the interpreter wasn't favoring an ambiguous step from the same library as the previous step

## [0.17.5]

- Supports mixed async and sync - Thanks [chrisns](https://github.com/chrisns)
- Steps can return promises - Thanks [chrisns](https://github.com/chrisns)
- Stopped casper integration throwing an exception when path module could not be found

## [0.17.4]

- Fixing a typo

## [0.17.3]

- Configurable placeholder characters used in example tables. Requested in [#203](https://github.com/acuminous/yadda/issues/203)

## [0.17.2]

- Karma support courtesy of [inf3rno](https://github.com/inf3rno). Thanks very much.
- Removed NODE_ENV=test which caused failures on windows.

## [0.17.1]

- Chinese Localisation - thanks [snowyu](https://github.com/snowyu).

## [0.17.0]

- Fixed a [bug](https://github.com/acuminous/yadda/issues/188) which discarded blank lines at the end of a multline step. If the scenario had multiple multline steps, then an ending blank line in the first step, was injected into the second step.

## [0.16.3]

- Fixed a [bug](https://github.com/acuminous/yadda/issues/187) introduced in 0.16.2 which meant Yadda picked the more undesirable step when two step implementations in the same library matches the step text.

## [0.16.2]

- When yadda find two matching steps with the same Levenshtein distance, it will prefer the one defined in the same library as the previous step.

## [0.16.1]

- Removed bind so phantom works without polyfill

## [0.16.0]

- Outer borders on data tables are ignored

## [0.15.5]

- Fixed but with the mocha ScenarioLevelPlugin which cased all tests to timeout

## [0.15.4]

- Dutch language support courtesy of [https://github.com/remkoboschker](remkoboschker). Thanks.

## [0.15.3]

- Step name included in context automatically courtesy of [remkoboschker](https://github.com/remkoboschker). Thanks.

## [0.15.2]

- Multiline Steps and data-table converters (multiline data tables are still a work in progress)
- Protractor example courtesy of [mgijsbertihodenpijl])[https://github.com/mgijsbertihodenpijl]. Thanks

## [0.15.1]

- Converted README into a gitbook
- Fixed a minor bug with example tables

## [0.15.0]

- Breaking Change: Multiline steps in scenarios and backgrounds

## [0.14.2]

- Example table meta fields for incorporating index, line and column values into your scenarios.

## [0.14.1]

- Dictionary converters can take multilpe arguments.

## [0.14.0]

- Dictionaries can be used to convert arguments into arbitary types. Integer, float and date converters are provided out of the box.

## [0.13.1]

- Fixes an issues where the new Annotations class broke moonraker

## [0.13.0]

- An amazing amount of work adding multiline example tables be [thr0w](http://github.com/thr0w).
- [thr0w](http://github.com/thr0w) also added annotation support to example tables.
- Breaking Change: In reworking some of [thr0w's](http://github.com/thr0w) example table code we added a breaking change around example table formating. You'll only notice if you centered column headings. If this feature is important to you then we suggest adding column separators to the outer left and right edges table, e.g.

```
|   one  |   two   |  three  |
| banana | orange  | apricot |
```

- Breaking Change: Annotations have been reworked into a class. If you access annotations you need to do so via the get method

```js
// Instead of
feature.annotations.pending;
// Do
feature.annotations.get('pending');
```

Annotations can be requested using any case but are stored internally in lowercase. It is not longer valid for annotation names to contain spaces and non alhpanumerics are no longer converted to an underscore.

- Breaking Change: Removed deprecated mocha plugin
- Breaking Change: Background can no longer have descriptions
- If you're using a recent version of mocha in combination with the StepLevelPlugin aborted steps will be marked as Pending.

## [0.12.1]

- Adding @Only support to jasmine plugin

## [0.12.0]

- Removing deprecated mocha plugin.
- Allow the default language to be overriden. See https://github.com/acuminous/yadda/issues/102.

## [0.11.7]

- Portuguese language support courtesy of [https://github.com/thr0w](thr0w). Thanks.

## [0.11.6]

- Added console.log to request user feedback on whether [background descriptions](https://github.com/acuminous/yadda/issues/146) can be decprecated
- Improved examples

## [0.11.5]

- Russian language support kindly contributed by [vectart](https://github.com/vectart)

## [0.11.4]

- Added a friendlier syntax

## [0.11.3]

- Node is fixed. Removing warning about failing travis build from readme

## [0.11.2]

- Fix for [issue 120](https://github.com/acuminous/yadda/issues/120) - False positives with the new StepLevelPlugin

## [0.11.1]

- Scenarios created from example tables no longer share annotations. See [PR #119](https://github.com/acuminous/yadda/pull/119)

## [0.11.0]

- Removal of scenario descriptions which forced a blank line between scenario title and steps. See [issue #55](https://github.com/acuminous/yadda/issues/55)
- Deprecation of AsyncScenarioLevelPlugin, SyncScenarioLevelPlugin, AsyncStepLevelPlugin, SyncStepLevelPlugin. Use the new ScenarioLevelPlugin or StepLevelPlugin replacements instead
- Improved readme - Thanks [prokls](https://github.com/prokls)

## [0.10.14]

- Adding German language support - Thanks [prokls](https://github.com/prokls)

## [0.10.13]

- Locking down the webdriver examples to 2.41.x as (problems)[https://github.com/acuminous/yadda/issues/105] where reported with 2.42

## [0.10.12]

- Adds support for mocha's only feature to the Mocha plugin - see [issue-98](https://github.com/acuminous/yadda/issues/98)

## [0.10.11]

- Fixes [issue-97](https://github.com/acuminous/yadda/issues/97) - scenario annotations after a background caused the parser to fail.

## [0.10.10]

- Added a really basic example
- Added jshint

## [0.10.9]

- Fix for [issue-93](https://github.com/acuminous/yadda/issue/93). Thanks [simoami](https://github.com/simoami)

## [0.10.8]

- Fix for [issue-88](https://github.com/acuminous/yadda/issues/88)
- Removal of incorrect French translation for 'background'

## [0.10.7]

- The new mocha plugins can be passed a custom parser
- Polish language support - Thanks [macie](https://github.com/macie)
- A fix for multiline commments

## [0.10.6]

- Fix for [issue-82](https://github.com/acuminous/yadda/issues/82)
- Jasmine webdriver example

## [0.10.5]

- Supporting multiple variations of Pending annotation. See [issue 78](https://github.com/acuminous/yadda/issues/78)

## [0.10.4]

- Annotations can now be prefixed with a space. See [issue79](https://github.com/acuminous/yadda/issues/79)

## [0.10.3]

- The webdriver example uses new mocha plugin

## [0.10.2]

- Fixes to the mocha-sync and mocha-express examples
- Bower support - Thanks [jeffreytgilbert](http://github.com/jeffreytgilbert)
- Improved French localisation - Thanks [poum](http://github.com/poum)
- Improved README - Thanks [gblosser42](http://github.com/gblosser42)

## [0.10.1]

- Improved nodejs detection - Thanks [eXon](http://github.com/eXon)

## [0.10.0]

- Added support for backgrounds - Thanks [mucsi](http://github.com/mucsi)
- Added support for step level output in mocha tests - Thanks [simoami](http://github.com/simoami)
- Fixed a few minor bugs in the FeatureParser
- This release involves a complete rewrite of the mocha/jasmine plugin. The old plugin will be deprecated in 0.12.0.
  The replacement syntax is:

```
var Yadda = require('yadda');
Yadda.plugins.mocha.AsyncScenarioLevelPlugin.init();

new Yadda.FeatureFileSearch('features').each(function(file) {

    // Previously features(file, function(feature))
    featureFile(file, function(feature) {

        var library = require('./bottles-library');
        var yadda = new Yadda.Yadda(library);

        scenarios(feature.scenarios, function(scenario, done) {
            yadda.yadda(scenario.steps, done);
        });
    });
});
```

To get step level output use SyncStepLevelPlugin or AsyncStepLevelPlugin as appropriate, e.g.

```
var Yadda = require('yadda');
Yadda.plugins.mocha.AsyncStepLevelPlugin.init();

new Yadda.FeatureFileSearch('features').each(function(file) {

    // Previously features(file, function(feature))
    featureFile(file, function(feature) {

        var library = require('./bottles-library');
        var yadda = new Yadda.Yadda(library);

        scenarios(feature.scenarios, function(scenario) {
            steps(scenario.steps, function(step, done) {
                yadda.yadda(step, done);
            })
        });
    });
});
```

## [0.9.11]

- Updated French translations - Thanks [poum](https://github.com/poum)

## [0.9.10]

- You can use Scenario and Scenario Outline interchangeably

## [0.9.9]

- Added an example using mocha and express

## [0.9.8]

- Added support for component - thanks [johntron](https://github.com/johntron).

## [0.9.7]

- Spanish localisation - thanks [feliun](https://github.com/feliun).

## [0.9.6]

- Fix for [issue 43 - @Pending not working](https://github.com/acuminous/yadda/issues/43)
- Improvements to French localsation and examples - thanks [ami44](https://github.com/ami44).

## [0.9.5]

- Added Zombie JS example
- Added Multi library example
- Generally improved other examples

## [0.9.4]

- Added FeatureFileSearch as discussed in https://github.com/acuminous/yadda/issues/47
- Using npm link to install yadda for the examples
- Yadda now lists undefined and ambiguous steps as discussed in https://github.com/acuminous/yadda/issues/30

## [0.9.3]

- French localisation for example tables - thanks [ami44](https://github.com/ami44).

## [0.9.2]

- Added package.json to the example projects so than can be run with `npm install; npm test`

## [0.9.1]

- French Localisation - thanks [ami44](https://github.com/ami44).

## [0.9.0]

- Adds support for example tables
- Fixes a bug in the MochaPlugin which didn't recognise non English @Pending annotations on scenarios
- Adds both original and lowercase annotations to the feature / scenarios, so that code which accesses them looks more normal

## [0.8.6]

- Fixes bug in qunit example contributed by [RaulMB](https://github.com/RaulMB

## [0.8.5]

- Fixes to localisation contributed by [kjell](https://github.com/kjelloe).

## [0.8.4]

- Improvements to localisation suggested by [kjell](https://github.com/kjelloe).

## [0.8.3]

- Adds a FileSearch class so you can slurp feature files by directory and pattern instead of having to explicitly list them in your tests.

## [0.8.2]

- Fixeds a bug in the mocha plugin output

## [0.8.1]

- Any text between a Feature line and a Scenario line is ignored.
- Added support for multiline comments
- Norwegian Localisation - thanks [kjelloe](https://github.com/kjelloe).

## [0.8.0]

- FeatureParser can be localised. Unfortunately this involved a breaking change to the Yadda.localisation.English API.
  Thankfully the adjustment is simple.

```js
// Old Code (< 0.8.0)
var library = new Yadda.localisation.English(optional_dictionary);

// New Code  (>= 0.8.0)
var library = Yadda.localisation.English.library(optional_dictionary);
```

## [0.7.2]

- FeatureParser supports single line comments (any line where the first non whitespace character is #)

## [0.7.1]

- Localised libraries slurp whitespace from the start of steps [Pull 31](https://github.com/acuminous/yadda/pull/31). Thanks [Hans](https://github.com/hans-d).

## [0.7.0]

- TextParser renamed to FeatureParser as per [Issue 12](https://github.com/acuminous/yadda/issues/12).
- StepParser added

## [0.6.5]

- Dictionaries can now be merged

## [0.6.4]

- This release adds jasmine examples

## [0.6.3]

- This release adds selenium / webdriver examples, based on those created by [mrwiggles](https://github.com/mrwiggles) for [Issue 18](https://github.com/acuminous/yadda/issues/18).

## [0.6.2]

- This release adds support for annotations on scenarios. Theses were previously only available on features. Support for simple annoations, e.g. @Pending, is also included.

## [0.6.1]

- Yadda now throws Error objects instead of Strings. See [Issue #24](https://github.com/acuminous/yadda/issues/24).

## [0.6.0]

- Fix for [Issue #23](https://github.com/acuminous/yadda/issues/23) which prevented the scenario context being shared between steps when using the Mocha plugin. The plugin API was made clearer at the same time, which unfortunately necessitated breaking changes. The following demonstrates how to migrate < 0.6 mocha tests to the 0.6 api.

&lt; 0.6.0

```js
var Yadda = require('yadda');
Yadda.plugins.mocha();
var library = require('./bottles-library');
var yadda = new Yadda.Yadda(library);

yadda.mocha('Bottles', './spec/bottles-spec.txt');
```

&gt;= 0.6.0

```js
var Yadda = require('yadda');
Yadda.plugins.mocha();

feature('./features/bottles.feature', function (feature) {
  var library = require('./bottles-library');
  var yadda = new Yadda.Yadda(library);

  scenarios(feature.scenarios, function (scenario, done) {
    yadda.yadda(scenario.steps, done);
  });
});
```

## [0.5.2]

- Adds annoations to features in feature files. Thanks [mrwiggles](https://github.com/mrwiggles).

## [0.5.1]

- Yadda now emits events, which can be useful for debugging. See the README.md for more details.

## [0.5.0]

- This adds the feature title to the output from the text parser contributed by [akikhtenko](https://github.com/akikhtenko) (thanks). Since this changes the object structure returned by TextParser.parse() if you're using the TextParser directly rather than via the Mocha or Casper plugins, it's a breaking change, but the change is very minor...

```js
var scenarios = parser.parse(text); // < 0.5.0
var scenarios = parser.parse(text).scenarios; // >= 0.5.0
```

## [0.4.7]

- The stable version of casperjs is no longer recommended by the casperjs author. It's also problematic to require modules. The latest version of casperjs (installed from master after 13th September 2013) fixes these problems, so I've updated the example to reflect this.

## [0.4.6]

- Accepted pull request for feature blocks. See [Issue 8](https://github.com/acuminous/yadda/pull/8). Thanks [mrwiggles](https://github.com/mrwiggles).

## [0.4.5]

- Fixed scenario parsing on windows bug. See [Issue 6](https://github.com/acuminous/yadda/issues/6). Thanks [grofit](https://github.com/grofit).

## [0.4.4]

- Changed the CasperPlugin API

## [0.4.3]

- Changed the MochaPlugin API

## [0.4.2]

- TextParser no longer maintains state between parses

## [0.4.1]

- Stopped pending asynchronous steps hanging the test run
- Added mocha plugin

## [0.4.0]

- Yadda now supports both asynchronous and synchronous usage
- Deleted the before and after hook (after cannot be guaranteed to run when asynchronous)

### Breaking API Changes

#### Removal of before and after hooks

The before and after hooks have been removed because after cannot be guaranteed to run when yadda
is asynchronous. Use your test runner's before and after mechanism instead.

#### Removal of non-object contexts

You can no longer pass non-object contexts to yadda, i.e. instead of...

```js
library.define('blah blah blah') function() {
    this.assert();
});
new Yadda(library).('blah blah blah', test);
```

Do...

```js
library.define('blah blah blah') function() {
    this.test.assert();
});
new Yadda(library).('blah blah blah', { test: test });
```

## [0.3.0]

- Re-implemented as a nodejs module
- Used browserify for compatability with browser test frameworks like qunit

### Breaking API Changes

Yadda has been re-implemented as a nodejs module. This means that the
global 'Yadda' prefixed class names are no longer exposed and that
all Yadda classes must be explicitly 'required'

In a node environment this is straightforward...

```
npm install yadda
```

```js
var Yadda = require('yadda').Yadda;
var Library = require('yadda').Library;

var library = new Library();
library.given('$NUM bottles of beer', function (n) {
  console.log(n + ' ' + 'bottles of beer');
});
new Yadda(library).yadda('100 bottles of beer');
```

Thanks to browserify it straightforward from a browser environment too...

```html
<head>
  <script src="http://www.github.com/acuminous/yadda/dist/yadda-0.3.0.js"></script>
  <script type="text/javascript">
    var Yadda = require('yadda').Yadda;
    var Library = require('yadda').Library;

    var library = new Library();
    library.given('$NUM bottles of beer', function (n) {
      console.log(n + ' ' + 'bottles of beer');
    });
    new Yadda(library).yadda('100 bottles of beer');
  </script>
</head>
```

In a CasperJS environment it's less straightforward. We haven't found how to get casper to
understand commonjs or umd node modules and Casper's 'require' function clashes with the one created by browserify. For the moment we're working around this with the following ugly hack...

```
var oldRequire = require;
phantom.injectJs('../../dist/yadda-0.3.0.js');
window.Yadda = require('yadda').Yadda;
window.CasperPlugin = require('yadda').plugins.CasperPlugin;
window.Library = require('yadda').Library;
window.require = oldRequire;

library.given('$NUM bottles of beer', function(n) {
  console.log(n + ' ' + 'bottles of beer');
};
var yadda = new Yadda(library).yadda('100 bottles of beer');
casper = new CasperPlugin(yadda, casper).init();
```

## Yadda 0.2.2

- Added a feature file parser
- Improved documentation and examples

## Yadda 0.2.1

- Added a CoffeeScript example
- Added a Nodeunit example
- Added a Mocha example
- Added a new context variable to the interpret method. See Nodeunit example for usage.
- Ensured that Yadda.after is called even if an error occurs
- Fixed distance_table typo

## Yadda 0.2.0

### Breaking API Changes

In Yadda 0.1.0 you invoked yadda with

```js
new Yadda(steps).yadda(['some scenario']);
```

The equivalent syntax in 0.2.2 is

```js
new Yadda.yadda(library).yadda(['some scenario']);
```

where library is an instance of Yadda.Library

#### Combining Steps / Libraries

```js
var steps = new Steps();
steps.importSteps(other_steps);
var yadda = new Yadda(steps);
```

Now you pass yadda an array of libraries instead of a single merged one

```js
var lib1 = new Yadda.Library();
var lib2 = new Yadda.Library();
var yadda = new Yadda().yadda([lib1, lib2]);
```

alternatively you can do

```js
var yadda = new Yadda.yadda();
yadda.requires(lib1);
yadda.requires(lib2);
```

or

```js
var yadda = new Yadda.yadda();
yadda.requires([lib1, lib2]);
```

#### Defining Steps

Previously you defined steps using the addStep method, or a given, when, then helper method, e.g.

```js
steps.addStep('some text', function () {
  // some code
});
```

Step.addStep has been replaced with Library.define

```js
library.define('some text', function () {
  // some code
});
```

The helper methods are no longer available by default, but you can restore them by including yadda-0.2.2-localisation.js and creating your libraries as instances of Yadda.Library.English, e.g.

```js
var library = Yadda.Library.English.library()
  .given('a (\\d+) green bottles', function () {
    // some code
  })
  .when('(\\d+) falls', function () {
    // some code
  })
  .then('there are (\\d+) green bottles', function () {
    // some code
  });
```


================================================
FILE: README.md
================================================
# Yadda

[![Gitter](https://badges.gitter.im/acuminous/yadda.svg)](https://gitter.im/acuminous/yadda?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![NPM version](https://img.shields.io/npm/v/yadda.svg?style=flat-square)](https://www.npmjs.com/package/yadda)
[![NPM downloads](https://img.shields.io/npm/dm/yadda.svg?style=flat-square)](https://www.npmjs.com/package/yadda)
[![Node.js CI](https://github.com/acuminous/yadda/workflows/Node.js%20CI/badge.svg)](https://github.com/acuminous/yadda/actions?query=workflow%3A%22Node.js+CI%22)
[![Code Climate](https://codeclimate.com/github/acuminous/yadda/badges/gpa.svg)](https://codeclimate.com/github/acuminous/yadda)
[![Test Coverage](https://codeclimate.com/github/acuminous/yadda/badges/coverage.svg)](https://codeclimate.com/github/acuminous/yadda/coverage)
[![Code Style](https://img.shields.io/badge/code%20style-prettier-brightgreen.svg)](https://github.com/prettier/prettier)

Yadda brings _true_ BDD to JavaScript frameworks such as [Jasmine](https://jasmine.github.io/), [Mocha](http://mochajs.org/), [QUnit](http://qunitjs.com), [Nodeunit](https://github.com/caolan/nodeunit), [WebdriverIO](http://webdriver.io/) and [CasperJS](http://casperjs.org). By _true_ BDD we mean that the ordinary language (e.g. English) steps are mapped to code, as opposed to simply decorating it. This is important because just like comments, the decorative steps such as those used by [Jasmine](https://jasmine.github.io/), [Mocha](http://mochajs.org/) and [Vows](http://vowsjs.org) can fall out of date and are a form of duplication.

Yadda's BDD implementation is like [Cucumber's](http://cukes.info/) in that it maps the ordinary language steps to code. Not only are the steps less likely to go stale, but they also provide a valuable abstraction layer and encourage re-use. You could of course just use [CucumberJS](https://github.com/cucumber/cucumber-js), but we find Yadda less invasive and prefer its flexible syntax to Gherkin's. Yadda's conflict resolution is smarter too.

## Latest Version

The current version of Yadda is 2.2.0

## Documentation

Please refer to the the [Yadda User Guide](http://acuminous.gitbooks.io/yadda-user-guide).

## tl;dr

### Step 1 - Decide upon a directory structure, e.g.

```
.
├── bottles-test.js
├── lib
│    └── wall.js
└── test
    ├── features
    │   └── bottles.feature
    └── steps
        └── bottles-library.js
```

### Step 2 - Write your first scenario

./test/features/bottles.feature

```
Feature: 100 Green Bottles

Scenario: Should fall from the wall

   Given 100 green bottles are standing on the wall
   When 1 green bottle accidentally falls
   Then there are 99 green bottles standing on the wall

```

### Step 3 - Implement the step library

./test/steps/bottles-library.js

```js
var assert = require('assert');
var English = require('yadda').localisation.English;
var Wall = require('../../lib/wall'); // The library that you wish to test

module.exports = (function () {
  return English.library()
    .given('$NUM green bottles are standing on the wall', function (number, next) {
      wall = new Wall(number);
      next();
    })
    .when('$NUM green bottle accidentally falls', function (number, next) {
      wall.fall(number);
      next();
    })
    .then('there are $NUM green bottles standing on the wall', function (number, next) {
      assert.equal(number, wall.bottles);
      next();
    });
})();
```

(If your test runner & code are synchronous you can omit the calls to 'next')

### Step 4 - Integrate Yadda with your testing framework (e.g. Mocha)

./bottles-test.js

```js
var Yadda = require('yadda');
Yadda.plugins.mocha.StepLevelPlugin.init();

new Yadda.FeatureFileSearch('./test/features').each(function (file) {
  featureFile(file, function (feature) {
    var library = require('./test/steps/bottles-library');
    var yadda = Yadda.createInstance(library);

    scenarios(feature.scenarios, function (scenario) {
      steps(scenario.steps, function (step, done) {
        yadda.run(step, done);
      });
    });
  });
});
```

### Step 5 - Write your code

./lib/wall.js

```js
module.exports = function (bottles) {
  this.bottles = bottles;
  this.fall = function (n) {
    this.bottles -= n;
  };
};
```

### Step 6 - Run your tests

```
  mocha --reporter spec bottles-test.js

  100 Green Bottles
    Should fall from the wall
      ✓ Given 100 green bottles are standing on the wall
      ✓ When 1 green bottle accidentally falls
      ✓ Then there are 99 green bottles standing on the wall
```


================================================
FILE: bin/browserify.js
================================================
'use strict';

var browserify = require('browserify');
var path = require('path');
var fs = require('fs');
var rootpath = process.cwd();
var pkg = require(path.join(rootpath, 'package.json'));

(function web_bundle() {
  var bundle = fs.createWriteStream(path.join(rootpath, 'dist', 'yadda-' + pkg.version + '.js'));

  var b = browserify();
  b.add('./lib/index.js');
  b.require('./lib/index.js', { expose: 'yadda' });
  b.ignore('casper');
  b.bundle().pipe(bundle);
})();

(function umd_bundle() {
  var bundle = fs.createWriteStream(path.join(rootpath, 'dist', 'yadda-umd-' + pkg.version + '.js'));

  var b = browserify();
  b.add('./lib/index.js');

  b.require('./lib/index.js', { expose: 'yadda' });
  b.ignore('casper');

  b.bundle().pipe(bundle);
})();


================================================
FILE: bin/examples.bat
================================================
@echo off
setlocal

:run
call npm link
pushd examples
for /d %%D in (*.*) do echo Running %%D example & pushd %%D & call npm --loglevel error install & call npm test & popd
popd

endlocal


================================================
FILE: bin/examples.js
================================================
'use strict';

var spawn = require('child_process').spawn;
var platform = require('os').platform();
var cmd = /^win/.test(platform) ? 'bin\\examples.bat' : 'bin/examples.sh';
spawn(cmd, [], { stdio: 'inherit' }).on('exit', function (code) {
  process.exit(code);
});


================================================
FILE: bin/examples.sh
================================================
#!/bin/bash

set -e

npm link
pushd examples
for D in *; do
    echo "Running ${D} example"
    pushd ${D}
    npm --loglevel error install
    npm test
    popd
done
popd


================================================
FILE: bin/rev.sh
================================================
#!/bin/bash
set -e

VERSION_PATTERN=[0-9]+\\.[0-9]+\\.[0-9]+
VERSION=$1

if [ -z "$VERSION" ]; then
    echo "usage: rev <VERSION>"
    exit 1
fi

npm run lint
npm test
npm run karma

sed -i '' -E "s/\"version\": \"$VERSION_PATTERN\"/\"version\": \"$VERSION\"/" package.json
sed -i '' -E "s/\"version\": \"$VERSION_PATTERN\"/\"version\": \"$VERSION\"/" component.json
sed -i '' -E "s/\"version\": \"$VERSION_PATTERN\"/\"version\": \"$VERSION\"/" bower.json
sed -i '' -E "s/The current version of Yadda is $VERSION_PATTERN/The current version of Yadda is $VERSION/" README.md
sed -i '' -E "s/yadda-$VERSION_PATTERN.js/yadda-$VERSION.js/" README.md
sed -i '' -E "s/Yadda $VERSION_PATTERN/Yadda $VERSION/" lib/Yadda.js
sed -i '' -E "s/yadda-$VERSION_PATTERN.js/yadda-$VERSION.js/" examples/qunit/test.html

npm run browserify
npm run examples


================================================
FILE: bower.json
================================================
{
  "name": "yadda",
  "version": "2.2.0",
  "homepage": "https://github.com/acuminous/yadda",
  "description": "A true BDD framework for JavaScript",
  "main": "lib/index.js",
  "moduleType": ["node"],
  "keywords": ["BDD", "Specification", "Natural", "Test", "Behaviour", "Driven", "Jasmine", "Mocha", "QUnit", "Nodeunit"],
  "authors": ["Stephen Cresswell"],
  "license": "Apache2",
  "ignore": ["**/.*", "node_modules", "bower_components", "test", "tests"]
}


================================================
FILE: component.json
================================================
{
  "name": "yadda",
  "version": "2.2.0",
  "description": "A true BDD framework for JavaScript",
  "repo": "acuminous/yadda",
  "keywords": ["BDD", "Specification", "Natural", "Test", "Behaviour", "Driven", "Jasmine", "Mocha", "QUnit", "Nodeunit"],
  "main": "lib/index.js",
  "scripts": [
    "lib/StringUtils.js",
    "lib/Array.js",
    "lib/Competition.js",
    "lib/Context.js",
    "lib/converters/date-converter.js",
    "lib/converters/float-converter.js",
    "lib/converters/index.js",
    "lib/converters/integer-converter.js",
    "lib/converters/pass-through-converter.js",
    "lib/Dictionary.js",
    "lib/EventBus.js",
    "lib/FileSearch.js",
    "lib/FeatureFileSearch.js",
    "lib/fn.js",
    "lib/index.js",
    "lib/Interpreter.js",
    "lib/LevenshteinDistanceScore.js",
    "lib/Library.js",
    "lib/localisation/English.js",
    "lib/localisation/French.js",
    "lib/localisation/German.js",
    "lib/localisation/index.js",
    "lib/localisation/Language.js",
    "lib/localisation/Pirate.js",
    "lib/localisation/Polish.js",
    "lib/localisation/Russian.js",
    "lib/localisation/Spanish.js",
    "lib/localisation/Norwegian.js",
    "lib/localisation/Portuguese.js",
    "lib/Macro.js",
    "lib/parsers/FeatureParser.js",
    "lib/parsers/FeatureFileParser.js",
    "lib/parsers/StepParser.js",
    "lib/parsers/index.js",
    "lib/Platform.js",
    "lib/plugins/CasperPlugin.js",
    "lib/plugins/index.js",
    "lib/plugins/mocha/ScenarioLevelPlugin.js",
    "lib/plugins/mocha/StepLevelPlugin.js",
    "lib/plugins/mocha/BasePlugin.js",
    "lib/RegularExpression.js",
    "lib/shims/index.js",
    "lib/Yadda.js"
  ],
  "development": {
    "visionmedia/mocha": "*"
  },
  "author": "Stephen Cresswell",
  "license": "Apache2",
  "readmeFilename": "README.md"
}


================================================
FILE: dist/yadda-0.10.0.js
================================================
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var fn = require('./fn');

module.exports = function(obj) {

    function ensure_array(obj) {
        var array = obj ? [].concat(obj) : [];
        array.in_array = fn.curry(array, in_array, array);
        array.each = fn.curry(array, each, array);
        array.each_async = fn.curry(array, each_async, array);
        array.collect = fn.curry(array, collect, array);
        array.flatten = fn.curry(array, flatten, array);
        array.inject = fn.curry(array, inject, array);
        array.push_all = fn.curry(array, push_all, array);
        array.find_all = fn.curry(array, find_all, array);
        array.find = fn.curry(array, find, array);
        array.naked = fn.curry(array, naked, array);
        return array;
    };

    function is_array(obj) {
        return Object.prototype.toString.call(obj) === '[object Array]'
    };

    function in_array(items, item) {
        for (var i = 0; i < items.length; i++) {
            if (items[i] == item) {
                return true;
            }
        }
    };

    function flatten(items) {
        if (!is_array(items)) return [items];
        if (items.length == 0) return [];
        var head = flatten(items[0]);
        var tail = flatten(items.slice(1));
        return ensure_array(head.concat(tail));
    };

    function each(items, iterator) {
        var result;
        for (var i = 0; i < items.length; i++) {
            result = iterator(items[i], i);
        };
        return result;
    };

    function each_async(items, iterator, callback) {
        callback = callback || fn.noop;
        if (!items.length) return callback();
        var completed = 0;
        var iterate = function() {
            iterator(items[completed], completed, function(err, result) {
                if (err) return callback(err);
                if (++completed >= items.length) return callback(null, result);
                iterate();
            });
        };
        iterate();
    };

    function collect(items, iterator) {
        var results = ensure_array();
        for (var i = 0; i < items.length; i++) {
            results.push(iterator(items[i]));
        }
        return results;
    };

    function inject(items, default_value, iterator) {
        var result = default_value;
        for (var i = 0; i < items.length; i++) {
            result = iterator(result, items[i]);
        }
        return result;
    };

    function push_all(items, more_items) {
        var more_items = more_items ? [].concat(more_items) : [];
        for (var i = 0; i < more_items.length; i++) {
            items.push(more_items[i]);
        }
    };

    function find_all(items, test) {
        var results = ensure_array();
        for (var i = 0; i < items.length; i++) {
            if (test(items[i])) {
                results.push(items[i]);
            }
        };
        return results;
    };

    function find(items, test) {
        var result;
        for (var i = 0; i < items.length; i++) {
            if (test(items[i])) {
                result = items[i];
                break;
            }
        };
        return result;
    };

    function naked(items) {
        return [].concat(items);
    };

    return ensure_array(obj);
};
},{"./fn":15}],2:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var LevenshteinDistanceScore = require('./LevenshteinDistanceScore');
var $ = require('./Array');

// Understands appropriateness of macros in relation to a specific step
var Competition = function(step, macros) {

    var results = [];   

    this.validate = function() {
        if (is_undefined()) return { step: step, valid: false, reason: 'Undefined Step' };
        if (is_ambiguous()) return { step: step, valid: false, reason: 'Ambiguous Step (Patterns [' + winning_patterns() + '] are all equally good candidates)' };
        return { step: step, valid: true };
    };

    this.clear_winner = function() {
        if (is_undefined()) throw new Error('Undefined Step: [' + step + ']');
        if (is_ambiguous()) throw new Error('Ambiguous Step: [' + step + ']. Patterns [' + winning_patterns() + '] match equally well.');
        return this.winner();
    };   

    function is_undefined() {
        return results.length == 0;
    };

    function is_ambiguous() {
        return (results.length > 1) && results[0].score.equals(results[1].score); 
    };

    this.winner = function() {
        return results[0].macro;
    };

    function winning_patterns() {
        return results.find_all(by_winning_score).collect(macro_signatures).join(', ');
    };

    function rank(step, macros) {
        results = macros.collect(function(macro) {
            return { 
                macro: macro, 
                score: new LevenshteinDistanceScore(step, macro.levenshtein_signature())
            }
        }).sort( by_ascending_score );
    };

    function by_ascending_score(a, b) { 
        return b.score.beats(a.score);
    };

    function by_winning_score(result) {
        return result.score.equals(results[0].score);
    };

    function macro_signatures(result) {
        return result.macro.toString();
    };

    rank(step, $(macros));
};

module.exports = Competition;
},{"./Array":1,"./LevenshteinDistanceScore":9}],3:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Constructs an object that macros will be bound to before execution
var Context = function(properties) {

    this.properties = {};

    this.merge = function(other) {
        if (other instanceof Context) return this.merge(other.properties);
        return new Context(this.properties)._merge(other);
    };

    this._merge = function(other) {
        for (var key in other) { this.properties[key] = other[key] }; 
        return this;
    };

    this._merge(properties);
};

module.exports = Context;
},{}],4:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('./Array');
var RegularExpression = require('./RegularExpression');

// Understands term definitions
var Dictionary = function(prefix) {

    var prefix = prefix || '$';
    var terms = {};
    var term_pattern = new RegularExpression(new RegExp('(?:^|[^\\\\])\\' + prefix + '(\\w+)', 'g'));
    var _this = this;

    this.define = function(term, definition) {
        if (this.is_defined(term)) throw new Error('Duplicate definition: [' + term + ']');
        terms[term] = normalise(definition);
        return this;
    };

    this.is_defined = function(term) {
        return terms[term];
    };

    this.expand = function(term, already_expanding) {
        if (!is_expandable(term)) return term;
        return expand_sub_terms(term, $(already_expanding));
    };

    this.merge = function(other) {
        if (other._prefix() != this._prefix()) throw new Error('Cannot merge dictionaries with different prefixes');
        return new Dictionary(prefix)._merge(this)._merge(other);
    };

    this._merge = function(other) {
        other.each_term(this.define.bind(this));
        return this;
    };

    this._prefix = function() {
        return prefix;
    };

    this.each_term = function(callback) {
        for (key in terms) {
            callback(key, terms[key])
        };
    };

    var expand_sub_terms = function(term, already_expanding) {
        return get_sub_terms(term).each(function(sub_term) {
            if (already_expanding.in_array(sub_term)) throw new Error('Circular Definition: \[' + already_expanding.join(', ') + '\]');
            var sub_term_definition = expand_sub_term(sub_term, already_expanding);
            return term = term.replace(prefix + sub_term, sub_term_definition);
        });
    };

    var get_sub_terms = function(term) {
        return term_pattern.groups(term);
    }

    var expand_sub_term = function(sub_term, already_expanding) {
        var definition = terms[sub_term] || '(.+)';
        return is_expandable(definition) ? _this.expand(definition, already_expanding.concat(sub_term)) : definition;
    }

    var normalise = function(definition) {
        return definition.toString().replace(/^\/|\/$/g, '');
    }

    var is_expandable = function(definition) {
        return term_pattern.test(definition);
    };
};


module.exports = Dictionary;
},{"./Array":1,"./RegularExpression":13}],5:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('./Array');
var fn = require('./fn');
var event_bus = new EventBus();

// A communication channel between event emitters and event listeners
function EventBus() {

    var event_handlers = $();
    var _this = this;

    this.send = function(event_name, event_data, next) {
        if (arguments.length == 1) return this.send(event_name, {});
        if (arguments.length == 2 && fn.is_function(event_data)) return this.send(event_name, {}, event_data);      
        notify_handlers(event_name, event_data);
        next && next();        
        return this;
    };

    this.on = function(event_pattern, callback) {
        event_handlers.push({ pattern: event_pattern, callback: callback });
        return this;
    };

    var notify_handlers = function(event_name, event_data) {
        find_handlers(event_name).each(function(callback) {
            callback({ name: event_name, data: event_data });
        });
    };

    var find_handlers = function(event_name) {
        return event_handlers.find_all(function(handler) {
            return new RegExp(handler.pattern).test(event_name);
        }).collect(function(handler) {
            return handler.callback;
        });
    };  
};

function instance() {
    return event_bus;
};

module.exports = {
    instance: instance,
    ON_SCENARIO: '__ON_SCENARIO__',
    ON_STEP: '__ON_STEP__',
    ON_EXECUTE: '__ON_EXECUTE__'
};
},{"./Array":1,"./fn":15}],6:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var FileSearch = require('./FileSearch');

var FeatureFileSearch = function(directories) {
    this.constructor(directories, /.*\.(?:feature|spec|specification)$/);
};
FeatureFileSearch.prototype = new FileSearch();

module.exports = FeatureFileSearch;
},{"./FileSearch":7}],7:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var shims = require('./shims/index');
var path = shims.path;
var process = shims.process;
var fs = shims.fs;
var $ = require('./Array');

// Searches for files in the given directories and their sub-directories, matching at least one of the given patterns
var FileSearch = function(directories, patterns) {

    var patterns = patterns || /.*/;

    this.each = function(fn) {
        this.list().forEach(fn);
    };

    this.list = function() {
        return $(directories).inject($(), function(files, directory) {
            return files.concat(list_files(directory).find_all(by_pattern));
        });
    };

    var list_files = function(directory) {
        return $(list_immediate_files(directory).concat(list_sub_directory_files(directory)));
    };

    var list_immediate_files = function(directory) {
        return ls(directory).find_all(by_file);
    };

    var list_sub_directory_files = function(directory) {
        return ls(directory).find_all(by_directory).inject($(), function(files, directory) {
            return files.concat(list_files(directory));
        });
    };

    var ls = function(directory) {
        if (!fs.existsSync(directory)) return $();
        return $(fs.readdirSync(directory)).collect(function(file) {
            return path.join(directory, file);
        });
    };

    var by_file = function(file) {
        return !by_directory(file);
    };

    var by_directory = function(file) {
        return fs.statSync(file).isDirectory();
    }

    var by_pattern = function(filename) {
        return $(patterns).find(function(pattern) {
            return new RegExp(pattern).test(filename)
        })
    };
};

module.exports = FileSearch;
},{"./Array":1,"./shims/index":37}],8:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Competition = require('./Competition');
var Context = require('./Context');
var EventBus = require('./EventBus');
var $ = require('./Array');
var fn = require('./fn');

// Understands a scenario
var Interpreter = function(libraries) {

    var libraries = $(libraries);
    var event_bus = EventBus.instance();
    var _this = this;

    this.requires = function(libraries) {
        libraries.push_all(libraries);
        return this;
    };

    this.validate = function(scenario) {
        var results = $(scenario).collect(function(step) {
            return _this.rank_macros(step).validate();
        });
        if (results.find(by_invalid_step)) throw new Error('Scenario cannot be interpreted\n' + results.collect(validation_report).join('\n'));
    };

    function by_invalid_step(result) {
        return !result.valid;  
    };

    function validation_report(result) {
        return result.step + (result.valid ? '' : ' <-- ' + result.reason);
    };

    this.interpret = function(scenario, scenario_context, next) {
        scenario_context = new Context().merge(scenario_context);
        event_bus.send(EventBus.ON_SCENARIO, { scenario: scenario, ctx: scenario_context.properties });
        var iterator = make_step_iterator(scenario_context, next);
        $(scenario).each_async(iterator, next);
    };

    var make_step_iterator = function(scenario_context, next) {
        var iterator = function(step, index, callback) {
            _this.interpret_step(step, scenario_context, callback);
        };
        return next ? iterator : fn.asynchronize(null, iterator);        
    };

    this.interpret_step = function(step, scenario_context, next) {
        var context = new Context().merge(scenario_context);
        event_bus.send(EventBus.ON_STEP, { step: step, ctx: context.properties });        
        this.rank_macros(step).clear_winner().interpret(step, context || {}, next);
    };  

    this.rank_macros = function(step) {
        return new Competition(step, compatible_macros(step));
    };

    var compatible_macros = function(step) {
        return libraries.inject([], function(macros, library) {
            return macros.concat(library.find_compatible_macros(step));
        });
    };
};

module.exports = Interpreter;
},{"./Array":1,"./Competition":2,"./Context":3,"./EventBus":5,"./fn":15}],9:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Understands similarity of two strings
var LevenshteinDistanceScore = function(s1, s2) {

    this.value;
    this.type = 'LevenshteinDistanceScore';    
    var distance_table;
    var _this = this;

    var initialise = function() {

        var x = s1.length;
        var y = s2.length;

        distance_table = new Array(x + 1);

        for (i = 0; i <= x; i++) {
            distance_table[i] = new Array(y + 1);
        }

        for (var i = 0; i <= x; i++) {
            for (var j = 0; j <= y; j++) {
                distance_table[i][j] = 0;
            }
        }

        for (var i = 0; i <= x; i++) {
            distance_table[i][0] = i;
        }

        for (var j = 0; j <= y; j++) {
            distance_table[0][j] = j;
        }
    };

    var score = function() {

        if (s1 == s2) return _this.value = 0;

        for (var j = 0; j < s2.length; j++) {
            for (var i = 0; i < s1.length; i++) {
                if (s1[i] == s2[j]) {
                    distance_table[i+1][j+1] = distance_table[i][j];
                } else {
                    var deletion = distance_table[i][j+1] + 1;
                    var insertion = distance_table[i+1][j] + 1;
                    var substitution = distance_table[i][j] + 1;
                    distance_table[i+1][j+1] = Math.min(substitution, deletion, insertion)
                }
            }
        }
        _this.value = distance_table[s1.length][s2.length];
    };

    this.beats = function(other) {
        return this.value < other.value;
    } 

    this.equals = function(other) {
        if (!other) return false;
        return (this.type == other.type && this.value == other.value);
    }   

    initialise();
    score();
};

module.exports = LevenshteinDistanceScore;
},{}],10:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Macro = require('./Macro');
var Dictionary = require('./Dictionary');
var $ = require('./Array');

// Understands how to index macros
var Library = function(dictionary) {

    var dictionary = dictionary || new Dictionary();
    var macros = $();
    var _this = this;    

    this.define = function(signatures, fn, macro_context) {
        $(signatures).each(function(signature) {            
            define_macro(signature, fn, macro_context);
        });
        return this;        
    };

    var define_macro = function(signature, fn, macro_context) {
        if (_this.get_macro(signature)) throw new Error('Duplicate macro: [' + signature + ']');
        macros.push(new Macro(signature, dictionary.expand(signature), fn, macro_context));
    }

    this.get_macro = function(signature) {      
        return macros.find(function(other_macro) {
            return other_macro.is_identified_by(signature);
        });
    };

    this.find_compatible_macros = function(step) {
        return macros.find_all(function(macro) {
            return macro.can_interpret(step);
        });
    };
};

module.exports = Library;
},{"./Array":1,"./Dictionary":4,"./Macro":11}],11:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var fn = require('./fn');
var Context = require('./Context');
var RegularExpression = require('./RegularExpression');
var EventBus = require('./EventBus');

// Understands how to invoke a step
var Macro = function(signature, signature_pattern, macro, macro_context) {

    var signature_pattern = new RegularExpression(signature_pattern);
    var macro = macro || fn.async_noop;
    var event_bus = EventBus.instance();
    var _this = this;

    var init = function(signature, signature_pattern) {
        _this.signature = normalise(signature);
    }

    this.is_identified_by = function(other_signature) {
        return this.signature == normalise(other_signature);
    };

    this.can_interpret = function(step) {
        return signature_pattern.test(step);
    };

    this.interpret = function(step, scenario_context, next) {
        var context = new Context().merge(macro_context).merge(scenario_context);
        var args = signature_pattern.groups(step);
        event_bus.send(EventBus.ON_EXECUTE, { step: step, ctx: context.properties, pattern: signature_pattern.toString(), args: args });
        fn.invoke(macro, context.properties, args.concat(next));
    };

    this.levenshtein_signature = function() {
        return signature_pattern.without_expressions();
    };

    var normalise = function(signature) {
        return new RegExp(signature).toString();
    }

    this.toString = function() {
        return this.signature;
    };

    init(signature, signature_pattern);
};

module.exports = Macro;

},{"./Context":3,"./EventBus":5,"./RegularExpression":13,"./fn":15}],12:[function(require,module,exports){
var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};module.exports = Platform;

function Platform() {

    function get_container() {
        if (is_browser()) return window;
        if (is_node()) return global; 
        if (is_phantom()) return phantom;
    }

    function is_node() {
        return typeof global != 'undefined' &&
               typeof global.process != 'undefined' &&
               global.process.title == 'node';
    }

    function is_browser() {
        return typeof window != 'undefined';
    }

    function is_phantom() {
        return typeof phantom != 'undefined';
    }

    return {
        get_container: get_container,
        is_node: is_node,
        is_browser: is_browser,
        is_phantom: is_phantom
    }

}
},{}],13:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
var $ = require('./Array');

// Wrapper for JavaScript Regular Expressions
var RegularExpression = function(pattern_or_regexp) {

    var groups_pattern = /(^|[^\\\\])\(.*?\)/g;
    var sets_pattern = /(^|[^\\\\])\[.*?\]/g;
    var repetitions_pattern = /(^|[^\\\\])\{.*?\}/g;
    var regex_aliases_pattern = /(^|[^\\\\])\\./g;
    var non_word_tokens_pattern = /[^\w\s]/g;
    var regexp = new RegExp(pattern_or_regexp);

    this.test = function(text) {
        var result = regexp.test(text);
        this.reset();        
        return result;
    };  

    this.groups = function(text) {
        var results = $();
        var match = regexp.exec(text);
        while (match) {            
            var groups = match.slice(1, match.length);
            results.push(groups)
            match = regexp.global && regexp.exec(text)
        }
        this.reset();
        return results.flatten();        
    };   

    this.reset = function() {
        regexp.lastIndex = 0;
        return this;
    };

    this.without_expressions = function() {
        return regexp.source.replace(groups_pattern, '$1')
                            .replace(sets_pattern, '$1')
                            .replace(repetitions_pattern, '$1')
                            .replace(regex_aliases_pattern, '$1')
                            .replace(non_word_tokens_pattern, '');
    };    

    this.equals = function(other) {
        return this.toString() == other.toString();
    };    

    this.toString = function() {
        return "/" + regexp.source + "/";
    };
};

module.exports = RegularExpression;
},{"./Array":1}],14:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Interpreter = require('./Interpreter');
var Context = require('./Context');
var fn = require('./fn');

// Provides a repetitive interface, i.e. new Yadda().yadda().yadda() to the Yadda Interpreter
var Yadda = function(libraries, interpreter_context) {

    this.interpreter = new Interpreter(libraries);
    var _this = this;

    this.requires = function(libraries) {
        this.interpreter.requires(libraries);
        return this;
    };

    this.yadda = function(scenario, scenario_context, next) {
        if (arguments.length == 0) return this;
        if (arguments.length == 2 && fn.is_function(scenario_context)) return this.yadda(scenario, {}, scenario_context);
        this.interpreter.validate(scenario);
        this.interpreter.interpret(scenario, new Context().merge(interpreter_context).merge(scenario_context), next);
    };

    this.toString = function() {
        return "Yadda 0.10.0 Copyright 2010 Acuminous Ltd / Energized Work Ltd";
    };
};

module.exports = Yadda;

},{"./Context":3,"./Interpreter":8,"./fn":15}],15:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function() {

    var slice = Array.prototype.slice;

    function curry(ctx, fn) {
        var args = slice.call(arguments, 2);
        return function() {
            return fn.apply(ctx, args.concat(slice.call(arguments)));
        }
    };

    function invoke(fn, ctx, args) {
        return fn.apply(ctx, args);
    };

    function is_function(object) {
        var getType = {};
        return object && getType.toString.call(object) === '[object Function]';
    };

    function noop() {};

    function asynchronize(ctx, fn) {
        return function() {
            var next = slice.call(arguments, arguments.length - 1)[0];
            var args = slice.call(arguments, 0, arguments.length - 2);
            fn.apply(ctx, args);
            if (next) next();
        };
    };

    return {
        noop: noop,
        async_noop: asynchronize(null, noop), 
        asynchronize: asynchronize,
        is_function: is_function,
        curry: curry,
        invoke: invoke
    };


})();

},{}],"yadda":[function(require,module,exports){
module.exports=require('3V0FPO');
},{}],"3V0FPO":[function(require,module,exports){
module.exports = {
    Yadda: require('./Yadda'),
    EventBus: require('./EventBus'),
    Interpreter: require('./Interpreter'),
    Context: require('./Context'),
    Library: require('./Library'),
    Dictionary: require('./Dictionary'),
    FeatureFileSearch: require('./FeatureFileSearch'),    
    FileSearch: require('./FileSearch'),
    Platform: require('./Platform'),    
    localisation: require('./localisation/index'),
    parsers: require('./parsers/index'),
    plugins: require('./plugins/index'),
    shims: require('./shims/index')
};

},{"./Context":3,"./Dictionary":4,"./EventBus":5,"./FeatureFileSearch":6,"./FileSearch":7,"./Interpreter":8,"./Library":10,"./Platform":12,"./Yadda":14,"./localisation/index":24,"./parsers/index":28,"./plugins/index":31,"./shims/index":37}],18:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '[Ff]eature',
        scenario: '(?:[Ss]cenario|[Ss]cenario [Oo]utline)',
        examples: '(?:[Ee]xamples|[Ww]here)',
        pending: 'Pending',
        background: '[Bb]ackground',
        given: '(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)',
        when: '(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut)',
        then: '(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut)',
        _steps: ['given', 'when', 'then']
    };

    return new Language('English', vocabulary);
})();

},{"./Language":20}],19:[function(require,module,exports){
/* -*- coding: utf-8 -*-
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {
    
    var vocabulary = {
        feature: '(?:[Ff]onctionnalité)',
        scenario: '(?:[Ss]cénario|[Pp]lan [Dd]u [Ss]cénario)',
        examples: '(?:[Ee]xemples|[Ee]xemple|[Oo][uù])',
        pending: 'En attente',
        background: '[Ff]ond',
        given: '(?:[Ss]oit|[ÉéEe]tant données|[ÉéEe]tant donnée|[ÉéEe]tant donnés|[ÉéEe]tant donné|[Aa]vec|[Ee]t|[Mm]ais|[Aa]ttendre)',
        when: '(?:[Qq]uand|[Ll]orsqu\'|[Ll]orsque|[Ss]i|[Ee]t|[Mm]ais)',
        then: '(?:[Aa]lors|[Aa]ttendre|[Ee]t|[Mm]ais)',
        
        _steps: [
            'given', 'when', 'then', 
            'soit', 'etantdonnees', 'etantdonnee', 'etantdonne',
            'quand', 'lorsque',
            'alors'
        ],
        // Also aliasing French verbs for given-when-then for signature-lookup
        get soit() { return this.given },
        get etantdonnees() { return this.given },
        get etantdonnee() { return this.given },
        get etantdonne() { return this.given },
        get quand() { return this.when },
        get lorsque() { return this.when },
        get alors() { return this.then }
    };
    
    return new Language('French', vocabulary);
})();



},{"./Language":20}],20:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Library = require('../Library');
var $ = require('../Array');

module.exports = function(name, vocabulary) {

    var _this = this;

    this.library = function(dictionary) {
        return _this.localise_library(new Library(dictionary));
    };

    this.localise_library = function(library) {
        $(vocabulary._steps).each(function(keyword) {
            library[keyword] = function(signatures, fn, ctx) {
                return $(signatures).each(function(signature) {
                    var signature = prefix_signature(_this.localise(keyword), signature);
                    return library.define(signature, fn, ctx);
                });
            };
        });
        return library;
    };

    var prefix_signature = function(prefix, signature) {
        var regex_delimiters = new RegExp('^/|/$', 'g');
        var start_of_signature = new RegExp(/^(?:\^)?/);
        var one_or_more_spaces = '\\s+';
        return signature.toString().replace(regex_delimiters, '').replace(start_of_signature, prefix + one_or_more_spaces);
    };

    this.localise = function(keyword) {
        if (vocabulary[keyword] == undefined) throw new Error('Keyword "' + keyword + '" has not been translated into ' + name + '.');
        return vocabulary[keyword];
    };
};
},{"../Array":1,"../Library":10}],21:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '[Ee]genskap',
        scenario: '[Ss]cenario',
        examples: '[Ee]ksempler',
        pending: 'Avventer',
        background: '[Bb]akgrunn',
        given: '(?:[Gg]itt|[Mm]ed|[Oo]g|[Mm]en|[Uu]nntatt)',
        when: '(?:[Nn]år|[Oo]g|[Mm]en)',
        then: '(?:[Ss]å|[Ff]forvent|[Oo]g|[Mm]en)',
        _steps: ['given', 'when', 'then', 'gitt', 'når', 'så'],
        // Also aliasing Norwegian verbs for given-when-then for signature-lookup
        get gitt() { return this.given },
        get når() { return this.when },
        get så() { return this.then }
    };

    return new Language('Norwegian', vocabulary);
})();

},{"./Language":20}],22:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '(?:[Tt]ale|[Yy]arn)',
        scenario: '(?:[Aa]dventure|[Ss]ortie)',
        examples: '[Ww]herest',
        pending: 'Brig',
        background: '[Aa]ftground',
        given: '(?:[Gg]iveth|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)',
        when: '(?:[Ww]hence|[Ii]f|[Aa]nd|[Bb]ut)',
        then: '(?:[Tt]hence|[Ee]xpect|[Aa]nd|[Bb]ut)',
        _steps: ['given', 'when', 'then', 'giveth', 'whence', 'thence'],
        // Also aliasing Pirate verbs for given-when-then for signature-lookup
        get giveth() { return this.given },
        get whence() { return this.when },
        get thence() { return this.then }        

    };

    return new Language('Pirate', vocabulary);
})();

},{"./Language":20}],23:[function(require,module,exports){
/* -*- coding: utf-8 -*-
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {
    
    var vocabulary = {
        feature: '(?:[Ff]uncionalidad|[Cc]aracterística)',
        scenario: '(?:[Ee]scenario|[Cc]aso)',
        examples: '(?:[Ee]jemplos|[Ee]jemplo)',
        pending: 'Pendiente',
        background: '[Ff]ondo',
        given: '(?:[Ss]ea|[Ss]ean|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas)',
        when: '(?:[Cc]uando|[Ss]i|[Qq]ue)',
        then: '(?:[Ee]ntonces)',
        
        _steps: [
            'given', 'when', 'then', 
            'sea', 'sean', 'dado', 'dada','dados', 'dadas',
            'cuando', 'si',
            'entonces'
        ],

        get sea() { return this.given },
        get sean() { return this.given },
        get dado() { return this.given },
        get dada() { return this.given },
        get dados() { return this.given },
        get dadas() { return this.given },
        get cuando() { return this.when },
        get si() { return this.when },
        get entonces() { return this.then }
    };
    
    return new Language('Spanish', vocabulary);
})();



},{"./Language":20}],24:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = {
    English: require('./English'),
    Spanish: require('./Spanish'),
    French: require('./French'),
    Norwegian: require('./Norwegian'),
    Pirate: require('./Pirate'),
    Language: require('./Language')
}
},{"./English":18,"./French":19,"./Language":20,"./Norwegian":21,"./Pirate":22,"./Spanish":23}],25:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
var FeatureFileParser = function(language) {

    // Requiring fs locally so it doesn't break component
    var fs = require('fs');
    var FeatureParser = require('./FeatureParser');
    var parser = new FeatureParser(language);

    this.parse = function(file, next) {
        var text = fs.readFileSync(file, 'utf8');
        var feature = parser.parse(text);
        return next && next(feature) || feature;
    } 
}

module.exports = FeatureFileParser;
},{"./FeatureParser":26,"fs":42}],26:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../Array');
var fn = require('../fn');

var English = require('../localisation/English');

var FeatureParser = function(language) {

    var language = language || English;

    var FEATURE_REGEX = new RegExp('^\\s*' + language.localise('feature') + ':\\s*(.*)', 'i');
    var SCENARIO_REGEX = new RegExp('^\\s*' + language.localise('scenario') + ':\\s*(.*)', 'i');
    var BACKGROUND_REGEX = new RegExp('^\\s*' + language.localise('background') + ':\\s*(.*)', 'i');
    var EXAMPLES_REGEX = new RegExp('^\\s*' + language.localise('examples') + ':', 'i');
    var TEXT_REGEX = new RegExp('^\\s*([^\\s].*)', 'i');
    var SINGLE_LINE_COMMENT_REGEX = new RegExp('^\\s*#');
    var MULTI_LINE_COMMENT_REGEX = new RegExp('^\\s*#{3,}')
    var BLANK_REGEX = new RegExp('^\\s*$');
    var SIMPLE_ANNOTATION_REGEX = new RegExp('^@([^=]*)$');
    var NVP_ANNOTATION_REGEX = new RegExp('^@([^=]*)=(.*)$');

    var specification = undefined;
    var comment = undefined;
    var line = undefined;
    var line_number = 0;

    this.parse = function(text, next) {
        reset();
        split(text).each(parse_line);
        return next && next(specification.export()) || specification.export();
    };

    function reset() {
        specification = new Specification();
        comment = false;
        line_number = 0;
    };

    function split(text) {
        return $(text.split(/\r\n|\n/));
    };

    function parse_line(line, index) {
        var match;
        try {
            if (match = MULTI_LINE_COMMENT_REGEX.test(line)) return comment = !comment;
            if (match = SINGLE_LINE_COMMENT_REGEX.test(line)) return;        
            if (match = SIMPLE_ANNOTATION_REGEX.exec(line)) return specification.handle('Annotation', { key: match[1], value: true });
            if (match = NVP_ANNOTATION_REGEX.exec(line)) return specification.handle('Annotation', { key: match[1], value: match[2] });
            if (match = FEATURE_REGEX.exec(line)) return specification.handle('Feature', match[1]);
            if (match = SCENARIO_REGEX.exec(line)) return specification.handle('Scenario', match[1]);
            if (match = BACKGROUND_REGEX.exec(line)) return specification.handle('Background', match[1]);
            if (match = EXAMPLES_REGEX.exec(line)) return specification.handle('Examples');
            if (match = BLANK_REGEX.test(line)) return specification.handle('Blank');
            if (match = TEXT_REGEX.exec(line)) return specification.handle('Text', match[1]);
        } catch (e) {
            throw new Error('Error parsing line ' + (index  + 1) + ', "' + line + '".\n' + e.message);
        };
    };
}

var Handlers = function(handlers) {

    var handlers = handlers || {};

    this.register = function(event, handler) {
        handlers[event] = handler;
    };

    this.unregister = function(event) {
        delete handlers[event];
    };

    this.find = function(event) {
        if (!handlers[event.toLowerCase()]) throw new Error(event + ' is unexpected at this time');
        return { handle: handlers[event.toLowerCase()] };
    };
};

var Specification = function() {

    var current_element = this;
    var feature = undefined;
    var annotations = {};
    var handlers = new Handlers({
        text: fn.noop,
        blank: fn.noop,        
        annotation: stash_annotation,
        feature: start_feature,
        scenario: start_scenario,
        background: start_background,
    });

    function stash_annotation(event, annotation) {
        handlers.unregister('background');
        annotations[annotation.key] = annotation.value;
        annotations[annotation.key.toLowerCase().replace(/\W/g, '_')] = annotation.value;
    };

    function start_feature(event, title) {
        return feature = new Feature(title, annotations, {});
    };

    function start_scenario(event, title) {
        feature = new Feature(title, {}, annotations);
        return feature.on(event, title);
    }; 

    var start_background = start_scenario;  

    this.handle = function(event, data) {
        current_element = current_element.on(event, data);
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;        
    };

    this.export = function() {
        if (!feature) throw new Error('A feature must contain one or more scenarios');
        return feature.export();
    };
};

var Feature = function(title, annotations, stashed_annotations) {

    var description = [];
    var scenarios = [];
    var background = new NullBackground();
    var handlers = new Handlers({
        text: capture_description,
        blank: end_description,        
        annotation: stash_annotation,        
        scenario: start_scenario,
        background: start_background
    }); 
    var _this = this;

    function start_background(event, title) {
        background = new Background(title, _this);
        stashed_annotations = {};
        return background;
    };

    function stash_annotation(event, annotation) {
        handlers.unregister('background');        
        stashed_annotations[annotation.key] = annotation.value;
        stashed_annotations[annotation.key.toLowerCase().replace(/\W/g, '_')] = annotation.value;
    };

    function capture_description(event, text) {
        description.push(text);
    };

    function end_description() {
        handlers.unregister('text');
        handlers.register('blank', fn.noop);
    };

    function start_scenario(event, title) {
        var scenario = new Scenario(title, background, stashed_annotations, _this);
        scenarios.push(scenario);
        stashed_annotations = {};        
        return scenario;
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        return {
            title: title,
            annotations: annotations,
            description: description,
            scenarios: $(scenarios).collect(function(scenario) {
                return scenario.export();
            }).flatten().naked()
        };        
    };
};

var Background = function(title, feature) {

    var steps = [];
    var handlers = new Handlers({
        text: fn.noop,        
        blank: end_description,
        scenario: start_scenario
    }); 
    var _this = this;  

    function end_description() {
        handlers.register('text', capture_step);
        handlers.register('blank', fn.noop);
    };

    function capture_step(event, text) {
        steps.push(text);
    }

    function start_scenario(event, data) {
        validate();
        return feature.on(event, data);
    };  

    function validate() {
        if (steps.length == 0) throw new Error('Background requires one or more steps');        
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        validate();
        return {
            steps: steps
        };
    };
};

var NullBackground = function() {
    var handlers = new Handlers(); 

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        return {
            steps: []
        };
    };    
}

var Scenario = function(title, background, annotations, feature) {

    var description = [];
    var steps = [];
    var examples = undefined;
    var handlers = new Handlers({
        text: capture_description,        
        blank: end_description,
        annotation: start_scenario,
        scenario: start_scenario,
        examples: start_examples
    }); 
    var _this = this;  

    function capture_description(event, text) {
        description.push(text);
    };

    function end_description() {
        handlers.register('text', capture_step);
        handlers.register('blank', fn.noop);
    };

    function capture_step(event, text) {
        steps.push(text);
    }

    function start_scenario(event, data) {
        validate();
        return feature.on(event, data);
    };  

    function start_examples(event, data) {
        validate();
        return examples = new Examples(_this);
    };

    function validate() {
        if (steps.length == 0) throw new Error('Scenario requires one or more steps');        
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        validate();
        var result = {
            title: title,
            annotations: annotations,
            description: description,
            steps: background.export().steps.concat(steps)
        };
        return examples ? examples.expand(result) : result;
    };
};

var Examples = function(scenario) {

    var SURROUNDING_WHITESPACE_REGEX = /^\s+|\s+$/g;

    var headings = [];
    var examples = $();
    var handlers = new Handlers({
        text: capture_headings,        
        blank: fn.noop,
        annotation: start_scenario,
        scenario: start_scenario,
    });
    var _this = this;

    function capture_headings(event, data) {
        handlers.register('text', capture_example);
        headings = split(data).collect(function(column) {
            return column.replace(SURROUNDING_WHITESPACE_REGEX, '');
        }).naked();
    };

    function capture_example(event, data) {
        var fields = split(data, headings.length);
        var example = {};
        fields.each(function(field, index) {
            example[headings[index]] = field.replace(SURROUNDING_WHITESPACE_REGEX, '');            
        });
        examples.push(example);
    };

    function split(row, number_of_fields) {
        var fields = $(row.split('|'));
        if (number_of_fields != undefined && number_of_fields != fields.length) {
            throw new Error('Incorrect number of fields in example table. Expected ' + number_of_fields + ' but found ' + fields.length);                    
        }
        return fields;
    };

    function start_scenario(event, data) {
        validate();
        return scenario.on(event, data);
    };

    function validate() {
        if (headings.length == 0) throw new Error('Examples table requires one or more headings');
        if (examples.length == 0) throw new Error('Examples table requires one or more rows');        
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.expand = function(scenario) {
        validate();
        return examples.collect(function(example) {
            return {
                title: substitute(example, scenario.title),
                annotations: scenario.annotations,
                description: substitute_all(example, scenario.description),
                steps: substitute_all(example, scenario.steps)
            };
        }).naked();
    };

    function substitute_all(example, lines) {
        return $(lines).collect(function(line) {
            return substitute(example, line);
        }).naked();
    };

    function substitute(example, line) {
        for (var heading in example) {
            line = line.replace(new RegExp('\\[\\s*' + heading + '\\s*\\]', 'g'), example[heading]);
        };
        return line;        
    };
};

module.exports = FeatureParser;
},{"../Array":1,"../fn":15,"../localisation/English":18}],27:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


var $ = require('../Array');

var StepParser = function() {

    var NON_BLANK_REGEX = /[^\s]/;

    this.parse = function(text, next) {
        var steps = split(text).find_all(non_blanks);
        return next && next(steps) || steps;
    };

    var split = function(text) {
        return $(text.split(/\n/));
    };

    var non_blanks = function(text) {
        return text && NON_BLANK_REGEX.test(text);
    };
};

module.exports = StepParser;
},{"../Array":1}],28:[function(require,module,exports){
module.exports = {
    StepParser: require('./StepParser'),
    FeatureParser: require('./FeatureParser'),
    FeatureFileParser: require('./FeatureFileParser')
}
},{"./FeatureFileParser":25,"./FeatureParser":26,"./StepParser":27}],29:[function(require,module,exports){
var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};if (!module.client) {   
    var fs = require('fs');
    global.process = global.process || {
        cwd: function() {
            return fs.workingDirectory
        }
    };
}


module.exports = function(yadda, casper) {

    var EventBus = require('yadda').EventBus;

    yadda.interpreter.interpret_step = function(step, ctx, next) {

        var _this = this;
        casper.then(function() {
            casper.test.info(step);
            EventBus.instance().send(EventBus.ON_STEP, { step: step, ctx: ctx });
            _this.rank_macros(step).clear_winner().interpret(step, ctx, next);
        });
    };

    casper.yadda = function(script, ctx) {
        if (script == undefined) return this;
        yadda.yadda(script, ctx);
    }
};

},{"fs":42,"yadda":"3V0FPO"}],30:[function(require,module,exports){
if (!module.client) {
	var fs = require('fs');
}
var English = require('../localisation/English');
var FeatureParser = require('../parsers/FeatureParser');
var $ = require('../Array');

module.exports = function(options) {

    var options = options || {};
    var language = options.language || English;
    var parser = options.parser || new FeatureParser(language);
    var mode = options.mode || 'async';

    if (options.deprecation_warning != false) {
        console.log('The MochaPlugin is deprecated as os 0.10.0 and will be removed in 0.12.0');
        console.log('Replace it with one of AsyncScenarioLevelPlugin, SyncScenarioLevelPlugin, AsyncStepLevelPlugin or SyncStepLevelPlugin');
        console.log('To disable this message use Yadda.plugins.mocha({deprecation_warning: false})');
        console.log('See the readme for more details')        
    }

	if (module.client) {
		var feature = function (text, next) {
			parser.parse(text, function(feature) {
				var _describe = feature.annotations[language.localise('pending')] ? xdescribe : describe;
				_describe(feature.title || filename, function() {
					next(feature)
				});
			});
		};
	} else {
		var feature = function (filenames, next) {
			$(filenames).each(function(filename) {
				var text = fs.readFileSync(filename, 'utf8');
				parser.parse(text, function(feature) {
					var _describe = feature.annotations[language.localise('pending')] ? xdescribe : describe;
					_describe(feature.title || filename, function() {
						next(feature)
					});
				});
			});
		};
	}

    function async_scenarios(scenarios, next) {
        $(scenarios).each(function(scenario) {
            var _it = scenario.annotations[language.localise('pending')] ? xit : it;
            _it(scenario.title, function(done) {
                next(scenario, done)
            });
        });
    };

    function sync_scenarios(scenarios, next) {
        $(scenarios).each(function(scenario) {
            var _it = scenario.annotations[language.localise('pending')] ? xit : it;
            _it(scenario.title, function() {
                next(scenario)
            });
        });
    };

	if (typeof GLOBAL !== 'undefined') {
		GLOBAL.features = GLOBAL.feature = feature;
		GLOBAL.scenarios = mode == 'async' ? async_scenarios : sync_scenarios;
	}

	if (typeof window !== 'undefined') {
		window.features = window.feature = feature;
		window.scenarios = mode == 'async' ? async_scenarios : sync_scenarios;
	}
};

},{"../Array":1,"../localisation/English":18,"../parsers/FeatureParser":26,"fs":42}],31:[function(require,module,exports){
module.exports = {
    casper: require('./CasperPlugin'),
    get mocha() { 
        var legacyPlugin = require('./MochaPlugin');
        legacyPlugin.AsyncScenarioLevelPlugin = require('./mocha/AsyncScenarioLevelPlugin');
        legacyPlugin.SyncScenarioLevelPlugin = require('./mocha/SyncScenarioLevelPlugin');
        legacyPlugin.AsyncStepLevelPlugin = require('./mocha/AsyncStepLevelPlugin');
        legacyPlugin.SyncStepLevelPlugin = require('./mocha/SyncStepLevelPlugin');
        return legacyPlugin;
    },
    get jasmine() { 
        return this.mocha
    }
}
},{"./CasperPlugin":29,"./MochaPlugin":30,"./mocha/AsyncScenarioLevelPlugin":32,"./mocha/AsyncStepLevelPlugin":33,"./mocha/SyncScenarioLevelPlugin":35,"./mocha/SyncStepLevelPlugin":36}],32:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../../Array');
var Platform = require('../../Platform');
var BasePlugin = require('./BasePlugin');

module.exports.init = function(options) {

    var platform = new Platform();
    var options = options || {};    
    var container = options.container || platform.get_container();

    var base_plugin = BasePlugin.create(options);

    function scenarios(scenarios, iterator) {        
        $(scenarios).each(function(scenario) {
            base_plugin.it_async(scenario.title, scenario, iterator);
        });
    }    

    container.featureFiles = container.featureFile = base_plugin.featureFiles;
    container.features = container.feature = base_plugin.features;
    container.scenarios = container.scenario = scenarios;          
};
},{"../../Array":1,"../../Platform":12,"./BasePlugin":34}],33:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../../Array');
var Platform = require('../../Platform');
var BasePlugin = require('./BasePlugin');

module.exports.init = function(options) {

    var platform = new Platform();
    var options = options || {};
    var container = options.container || platform.get_container();

    var base_plugin = BasePlugin.create(options);

    function scenarios(scenarios, iterator) {
        $(scenarios).each(function(scenario) {
            base_plugin.describe(scenario.title, scenario, iterator);                        
        });        
    } 

    function steps(steps, iterator) {
        $(steps).each(function(step) {
            base_plugin.it_async(step, step, iterator);
        });        
    }     

    container.featureFiles = container.featureFile = base_plugin.featureFiles;
    container.features = container.feature = base_plugin.feature;
    container.scenarios = container.scenario = scenarios;
    container.steps = steps;
};
},{"../../Array":1,"../../Platform":12,"./BasePlugin":34}],34:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


var English = require('../../localisation/English');
var Platform = require('../../Platform');
var FeatureFileParser = require('../../parsers/FeatureFileParser');
var $ = require('../../Array');

module.exports.create = function(options) {

    var platform = new Platform();
    var language = options.language || English;
    var container = options.container || platform.get_container();
        
    function featureFiles(files, iterator) {
        var parser = new FeatureFileParser(language);
        $(files).each(function(file) {
            features(parser.parse(file), iterator)
        });
    };

    function features(features, iterator) {
        $(features).each(function(feature) {
            describe(feature.title, feature, iterator);
        });        
    };

    function describe(title, subject, iterator) {
        var _describe = is_pending(subject) ? container.xdescribe : container.describe;
        _describe(title, function() {
            iterator(subject)
        });        
    }    

    function it_async(title, subject, iterator) {
        var _it = is_pending(subject) ? container.xit : container.it;
        _it(title, function(done) {
            iterator(subject, done);
        }) 
    }

    function it_sync(title, subject, iterator) {
        var _it = is_pending(subject) ? container.xit : container.it;
        _it(title, function() {
            iterator(subject);
        }) 
    }  

    function is_pending(subject) {
        return subject.annotations && subject.annotations[language.localise('pending')];
    }

    return {
        featureFiles: featureFiles,
        features: features,
        describe: describe,
        it_async: it_async,
        it_sync: it_sync
    }        
};
},{"../../Array":1,"../../Platform":12,"../../localisation/English":18,"../../parsers/FeatureFileParser":25}],35:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../../Array');
var Platform = require('../../Platform');
var BasePlugin = require('./BasePlugin');

module.exports.init = function(options) {

    var platform = new Platform();
    var options = options || {};    
    var container = options.container || platform.get_container();

    var base_plugin = BasePlugin.create(options);

    function scenarios(scenarios, iterator) {
        $(scenarios).each(function(scenario) {
            base_plugin.it_sync(scenario.title, scenario, iterator);
        });
    }

    container.featureFiles = container.featureFile = base_plugin.featureFiles;
    container.features = container.feature = base_plugin.features;
    container.scenarios = container.scenario = scenarios;     
};
},{"../../Array":1,"../../Platform":12,"./BasePlugin":34}],36:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../../Array');
var Platform = require('../../Platform');
var BasePlugin = require('./BasePlugin');

module.exports.init = function(options) {

    var platform = new Platform();
    var options = options || {};    
    var container = options.container || platform.get_container();

    var base_plugin = BasePlugin.create(options);

    function scenarios(scenarios, iterator) {
        $(scenarios).each(function(scenario) {
            base_plugin.describe(scenario.title, scenario, iterator);                        
        });        
    } 

    function steps(steps, iterator) {
        $(steps).each(function(step) {
            base_plugin.it_sync(step, step, iterator);
        });        
    }  

    container.featureFiles = container.featureFile = base_plugin.featureFiles;
    container.features = container.feature = base_plugin.features;
    container.scenarios = container.scenario = scenarios;
    container.steps = steps;
};
},{"../../Array":1,"../../Platform":12,"./BasePlugin":34}],37:[function(require,module,exports){
var process=require("__browserify_process");/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Platform = require('../Platform');

module.exports = (function() {

    var platform = new Platform();

    var shims = {
        node: function() {
            return {
                fs: require('fs'),
                path: require('path'),
                process: process
            }
        },
        phantom: function() {
            return {
                fs: require('./phantom-fs'),
                path: require('./phantom-path'),
                process: require('./phantom-process')
            }
        }
    }

    function get_shim() {
        if (platform.is_node()) return shims.node();

        if (platform.is_phantom()) return shims.phantom();
        throw new Error('Unsupported Platform');
    }

    return get_shim();
})();

},{"../Platform":12,"./phantom-fs":38,"./phantom-path":39,"./phantom-process":40,"__browserify_process":45,"fs":42,"path":43}],38:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function() {
    if (module.client) {
        // Running in browser, not via node
        return {}; // short-circuit;
    }

    var fs = require('fs');

    fs.existsSync = fs.existsSync || fs.exists;

    fs.readdirSync = fs.readdirSync || function(path) {
        return fs.list(path).filter(function(name) {
            return name != '.' && name != '..';
        });
    };

    fs.statSync = fs.statSync || function(path) {
        return {
            isDirectory: function() {
                return fs.isDirectory(path);
            }
        }
    };

    return fs;
})();

},{"fs":42}],39:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function() {
    if (module.client) {
        // Running in browser, not via node
        return {}; // short-circuit;
    }

    var fs = require('fs');
    var path = {};

    try {
        path = require('path');
    } catch (e) {
        // meh
    };

    path.join = path.join || function() {
        return Array.prototype.join.call(arguments, fs.separator);
    };

    path.relative = path.relative || function(from, to) {
        return from + fs.separator + to;
    };

    return path;

})();

},{"fs":42,"path":43}],40:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function() {
    if (module.client) {
        // Running in browser, not via node
        return {}; // short-circuit;
    }

    var fs = require('fs');
    var process = typeof process != 'undefined' ? process : {};

    process.cwd = function() {
        return fs.workingDirectory;
    };

    return process;

})();

},{"fs":42}],41:[function(require,module,exports){


//
// The shims in this file are not fully implemented shims for the ES5
// features, but do work for the particular usecases there is in
// the other modules.
//

var toString = Object.prototype.toString;
var hasOwnProperty = Object.prototype.hasOwnProperty;

// Array.isArray is supported in IE9
function isArray(xs) {
  return toString.call(xs) === '[object Array]';
}
exports.isArray = typeof Array.isArray === 'function' ? Array.isArray : isArray;

// Array.prototype.indexOf is supported in IE9
exports.indexOf = function indexOf(xs, x) {
  if (xs.indexOf) return xs.indexOf(x);
  for (var i = 0; i < xs.length; i++) {
    if (x === xs[i]) return i;
  }
  return -1;
};

// Array.prototype.filter is supported in IE9
exports.filter = function filter(xs, fn) {
  if (xs.filter) return xs.filter(fn);
  var res = [];
  for (var i = 0; i < xs.length; i++) {
    if (fn(xs[i], i, xs)) res.push(xs[i]);
  }
  return res;
};

// Array.prototype.forEach is supported in IE9
exports.forEach = function forEach(xs, fn, self) {
  if (xs.forEach) return xs.forEach(fn, self);
  for (var i = 0; i < xs.length; i++) {
    fn.call(self, xs[i], i, xs);
  }
};

// Array.prototype.map is supported in IE9
exports.map = function map(xs, fn) {
  if (xs.map) return xs.map(fn);
  var out = new Array(xs.length);
  for (var i = 0; i < xs.length; i++) {
    out[i] = fn(xs[i], i, xs);
  }
  return out;
};

// Array.prototype.reduce is supported in IE9
exports.reduce = function reduce(array, callback, opt_initialValue) {
  if (array.reduce) return array.reduce(callback, opt_initialValue);
  var value, isValueSet = false;

  if (2 < arguments.length) {
    value = opt_initialValue;
    isValueSet = true;
  }
  for (var i = 0, l = array.length; l > i; ++i) {
    if (array.hasOwnProperty(i)) {
      if (isValueSet) {
        value = callback(value, array[i], i, array);
      }
      else {
        value = array[i];
        isValueSet = true;
      }
    }
  }

  return value;
};

// String.prototype.substr - negative index don't work in IE8
if ('ab'.substr(-1) !== 'b') {
  exports.substr = function (str, start, length) {
    // did we get a negative start, calculate how much it is from the beginning of the string
    if (start < 0) start = str.length + start;

    // call the original function
    return str.substr(start, length);
  };
} else {
  exports.substr = function (str, start, length) {
    return str.substr(start, length);
  };
}

// String.prototype.trim is supported in IE9
exports.trim = function (str) {
  if (str.trim) return str.trim();
  return str.replace(/^\s+|\s+$/g, '');
};

// Function.prototype.bind is supported in IE9
exports.bind = function () {
  var args = Array.prototype.slice.call(arguments);
  var fn = args.shift();
  if (fn.bind) return fn.bind.apply(fn, args);
  var self = args.shift();
  return function () {
    fn.apply(self, args.concat([Array.prototype.slice.call(arguments)]));
  };
};

// Object.create is supported in IE9
function create(prototype, properties) {
  var object;
  if (prototype === null) {
    object = { '__proto__' : null };
  }
  else {
    if (typeof prototype !== 'object') {
      throw new TypeError(
        'typeof prototype[' + (typeof prototype) + '] != \'object\''
      );
    }
    var Type = function () {};
    Type.prototype = prototype;
    object = new Type();
    object.__proto__ = prototype;
  }
  if (typeof properties !== 'undefined' && Object.defineProperties) {
    Object.defineProperties(object, properties);
  }
  return object;
}
exports.create = typeof Object.create === 'function' ? Object.create : create;

// Object.keys and Object.getOwnPropertyNames is supported in IE9 however
// they do show a description and number property on Error objects
function notObject(object) {
  return ((typeof object != "object" && typeof object != "function") || object === null);
}

function keysShim(object) {
  if (notObject(object)) {
    throw new TypeError("Object.keys called on a non-object");
  }

  var result = [];
  for (var name in object) {
    if (hasOwnProperty.call(object, name)) {
      result.push(name);
    }
  }
  return result;
}

// getOwnPropertyNames is almost the same as Object.keys one key feature
//  is that it returns hidden properties, since that can't be implemented,
//  this feature gets reduced so it just shows the length property on arrays
function propertyShim(object) {
  if (notObject(object)) {
    throw new TypeError("Object.getOwnPropertyNames called on a non-object");
  }

  var result = keysShim(object);
  if (exports.isArray(object) && exports.indexOf(object, 'length') === -1) {
    result.push('length');
  }
  return result;
}

var keys = typeof Object.keys === 'function' ? Object.keys : keysShim;
var getOwnPropertyNames = typeof Object.getOwnPropertyNames === 'function' ?
  Object.getOwnPropertyNames : propertyShim;

if (new Error().hasOwnProperty('description')) {
  var ERROR_PROPERTY_FILTER = function (obj, array) {
    if (toString.call(obj) === '[object Error]') {
      array = exports.filter(array, function (name) {
        return name !== 'description' && name !== 'number' && name !== 'message';
      });
    }
    return array;
  };

  exports.keys = function (object) {
    return ERROR_PROPERTY_FILTER(object, keys(object));
  };
  exports.getOwnPropertyNames = function (object) {
    return ERROR_PROPERTY_FILTER(object, getOwnPropertyNames(object));
  };
} else {
  exports.keys = keys;
  exports.getOwnPropertyNames = getOwnPropertyNames;
}

// Object.getOwnPropertyDescriptor - supported in IE8 but only on dom elements
function valueObject(value, key) {
  return { value: value[key] };
}

if (typeof Object.getOwnPropertyDescriptor === 'function') {
  try {
    Object.getOwnPropertyDescriptor({'a': 1}, 'a');
    exports.getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
  } catch (e) {
    // IE8 dom element issue - use a try catch and default to valueObject
    exports.getOwnPropertyDescriptor = function (value, key) {
      try {
        return Object.getOwnPropertyDescriptor(value, key);
      } catch (e) {
        return valueObject(value, key);
      }
    };
  }
} else {
  exports.getOwnPropertyDescriptor = valueObject;
}

},{}],42:[function(require,module,exports){

// not implemented
// The reason for having an empty file and not throwing is to allow
// untraditional implementation of this module.

},{}],43:[function(require,module,exports){
var process=require("__browserify_process");// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

var util = require('util');
var shims = require('_shims');

// resolves . and .. elements in a path array with directory names there
// must be no slashes, empty elements, or device names (c:\) in the array
// (so also no leading and trailing slashes - it does not distinguish
// relative and absolute paths)
function normalizeArray(parts, allowAboveRoot) {
  // if the path tries to go above the root, `up` ends up > 0
  var up = 0;
  for (var i = parts.length - 1; i >= 0; i--) {
    var last = parts[i];
    if (last === '.') {
      parts.splice(i, 1);
    } else if (last === '..') {
      parts.splice(i, 1);
      up++;
    } else if (up) {
      parts.splice(i, 1);
      up--;
    }
  }

  // if the path is allowed to go above the root, restore leading ..s
  if (allowAboveRoot) {
    for (; up--; up) {
      parts.unshift('..');
    }
  }

  return parts;
}

// Split a filename into [root, dir, basename, ext], unix version
// 'root' is just a slash, or nothing.
var splitPathRe =
    /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
var splitPath = function(filename) {
  return splitPathRe.exec(filename).slice(1);
};

// path.resolve([from ...], to)
// posix version
exports.resolve = function() {
  var resolvedPath = '',
      resolvedAbsolute = false;

  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
    var path = (i >= 0) ? arguments[i] : process.cwd();

    // Skip empty and invalid entries
    if (!util.isString(path)) {
      throw new TypeError('Arguments to path.resolve must be strings');
    } else if (!path) {
      continue;
    }

    resolvedPath = path + '/' + resolvedPath;
    resolvedAbsolute = path.charAt(0) === '/';
  }

  // At this point the path should be resolved to a full absolute path, but
  // handle relative paths to be safe (might happen when process.cwd() fails)

  // Normalize the path
  resolvedPath = normalizeArray(shims.filter(resolvedPath.split('/'), function(p) {
    return !!p;
  }), !resolvedAbsolute).join('/');

  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
};

// path.normalize(path)
// posix version
exports.normalize = function(path) {
  var isAbsolute = exports.isAbsolute(path),
      trailingSlash = shims.substr(path, -1) === '/';

  // Normalize the path
  path = normalizeArray(shims.filter(path.split('/'), function(p) {
    return !!p;
  }), !isAbsolute).join('/');

  if (!path && !isAbsolute) {
    path = '.';
  }
  if (path && trailingSlash) {
    path += '/';
  }

  return (isAbsolute ? '/' : '') + path;
};

// posix version
exports.isAbsolute = function(path) {
  return path.charAt(0) === '/';
};

// posix version
exports.join = function() {
  var paths = Array.prototype.slice.call(arguments, 0);
  return exports.normalize(shims.filter(paths, function(p, index) {
    if (!util.isString(p)) {
      throw new TypeError('Arguments to path.join must be strings');
    }
    return p;
  }).join('/'));
};


// path.relative(from, to)
// posix version
exports.relative = function(from, to) {
  from = exports.resolve(from).substr(1);
  to = exports.resolve(to).substr(1);

  function trim(arr) {
    var start = 0;
    for (; start < arr.length; start++) {
      if (arr[start] !== '') break;
    }

    var end = arr.length - 1;
    for (; end >= 0; end--) {
      if (arr[end] !== '') break;
    }

    if (start > end) return [];
    return arr.slice(start, end - start + 1);
  }

  var fromParts = trim(from.split('/'));
  var toParts = trim(to.split('/'));

  var length = Math.min(fromParts.length, toParts.length);
  var samePartsLength = length;
  for (var i = 0; i < length; i++) {
    if (fromParts[i] !== toParts[i]) {
      samePartsLength = i;
      break;
    }
  }

  var outputParts = [];
  for (var i = samePartsLength; i < fromParts.length; i++) {
    outputParts.push('..');
  }

  outputParts = outputParts.concat(toParts.slice(samePartsLength));

  return outputParts.join('/');
};

exports.sep = '/';
exports.delimiter = ':';

exports.dirname = function(path) {
  var result = splitPath(path),
      root = result[0],
      dir = result[1];

  if (!root && !dir) {
    // No dirname whatsoever
    return '.';
  }

  if (dir) {
    // It has a dirname, strip trailing slash
    dir = dir.substr(0, dir.length - 1);
  }

  return root + dir;
};


exports.basename = function(path, ext) {
  var f = splitPath(path)[2];
  // TODO: make this comparison case-insensitive on windows?
  if (ext && f.substr(-1 * ext.length) === ext) {
    f = f.substr(0, f.length - ext.length);
  }
  return f;
};


exports.extname = function(path) {
  return splitPath(path)[3];
};

},{"__browserify_process":45,"_shims":41,"util":44}],44:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

var shims = require('_shims');

var formatRegExp = /%[sdj%]/g;
exports.format = function(f) {
  if (!isString(f)) {
    var objects = [];
    for (var i = 0; i < arguments.length; i++) {
      objects.push(inspect(arguments[i]));
    }
    return objects.join(' ');
  }

  var i = 1;
  var args = arguments;
  var len = args.length;
  var str = String(f).replace(formatRegExp, function(x) {
    if (x === '%%') return '%';
    if (i >= len) return x;
    switch (x) {
      case '%s': return String(args[i++]);
      case '%d': return Number(args[i++]);
      case '%j':
        try {
          return JSON.stringify(args[i++]);
        } catch (_) {
          return '[Circular]';
        }
      default:
        return x;
    }
  });
  for (var x = args[i]; i < len; x = args[++i]) {
    if (isNull(x) || !isObject(x)) {
      str += ' ' + x;
    } else {
      str += ' ' + inspect(x);
    }
  }
  return str;
};

/**
 * Echos the value of a value. Trys to print the value out
 * in the best way possible given the different types.
 *
 * @param {Object} obj The object to print out.
 * @param {Object} opts Optional options object that alters the output.
 */
/* legacy: obj, showHidden, depth, colors*/
function inspect(obj, opts) {
  // default options
  var ctx = {
    seen: [],
    stylize: stylizeNoColor
  };
  // legacy...
  if (arguments.length >= 3) ctx.depth = arguments[2];
  if (arguments.length >= 4) ctx.colors = arguments[3];
  if (isBoolean(opts)) {
    // legacy...
    ctx.showHidden = opts;
  } else if (opts) {
    // got an "options" object
    exports._extend(ctx, opts);
  }
  // set default options
  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  if (isUndefined(ctx.depth)) ctx.depth = 2;
  if (isUndefined(ctx.colors)) ctx.colors = false;
  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  if (ctx.colors) ctx.stylize = stylizeWithColor;
  return formatValue(ctx, obj, ctx.depth);
}
exports.inspect = inspect;


// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
inspect.colors = {
  'bold' : [1, 22],
  'italic' : [3, 23],
  'underline' : [4, 24],
  'inverse' : [7, 27],
  'white' : [37, 39],
  'grey' : [90, 39],
  'black' : [30, 39],
  'blue' : [34, 39],
  'cyan' : [36, 39],
  'green' : [32, 39],
  'magenta' : [35, 39],
  'red' : [31, 39],
  'yellow' : [33, 39]
};

// Don't use 'blue' not visible on cmd.exe
inspect.styles = {
  'special': 'cyan',
  'number': 'yellow',
  'boolean': 'yellow',
  'undefined': 'grey',
  'null': 'bold',
  'string': 'green',
  'date': 'magenta',
  // "name": intentionally not styling
  'regexp': 'red'
};


function stylizeWithColor(str, styleType) {
  var style = inspect.styles[styleType];

  if (style) {
    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
           '\u001b[' + inspect.colors[style][1] + 'm';
  } else {
    return str;
  }
}


function stylizeNoColor(str, styleType) {
  return str;
}


function arrayToHash(array) {
  var hash = {};

  shims.forEach(array, function(val, idx) {
    hash[val] = true;
  });

  return hash;
}


function formatValue(ctx, value, recurseTimes) {
  // Provide a hook for user-specified inspect functions.
  // Check that value is an object with an inspect function on it
  if (ctx.customInspect &&
      value &&
      isFunction(value.inspect) &&
      // Filter out the util module, it's inspect function is special
      value.inspect !== exports.inspect &&
      // Also filter out any prototype objects using the circular check.
      !(value.constructor && value.constructor.prototype === value)) {
    var ret = value.inspect(recurseTimes);
    if (!isString(ret)) {
      ret = formatValue(ctx, ret, recurseTimes);
    }
    return ret;
  }

  // Primitive types cannot have properties
  var primitive = formatPrimitive(ctx, value);
  if (primitive) {
    return primitive;
  }

  // Look up the keys of the object.
  var keys = shims.keys(value);
  var visibleKeys = arrayToHash(keys);

  if (ctx.showHidden) {
    keys = shims.getOwnPropertyNames(value);
  }

  // Some type of object without properties can be shortcutted.
  if (keys.length === 0) {
    if (isFunction(value)) {
      var name = value.name ? ': ' + value.name : '';
      return ctx.stylize('[Function' + name + ']', 'special');
    }
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    }
    if (isDate(value)) {
      return ctx.stylize(Date.prototype.toString.call(value), 'date');
    }
    if (isError(value)) {
      return formatError(value);
    }
  }

  var base = '', array = false, braces = ['{', '}'];

  // Make Array say that they are Array
  if (isArray(value)) {
    array = true;
    braces = ['[', ']'];
  }

  // Make functions say that they are functions
  if (isFunction(value)) {
    var n = value.name ? ': ' + value.name : '';
    base = ' [Function' + n + ']';
  }

  // Make RegExps say that they are RegExps
  if (isRegExp(value)) {
    base = ' ' + RegExp.prototype.toString.call(value);
  }

  // Make dates with properties first say the date
  if (isDate(value)) {
    base = ' ' + Date.prototype.toUTCString.call(value);
  }

  // Make error with message first say the error
  if (isError(value)) {
    base = ' ' + formatError(value);
  }

  if (keys.length === 0 && (!array || value.length == 0)) {
    return braces[0] + base + braces[1];
  }

  if (recurseTimes < 0) {
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    } else {
      return ctx.stylize('[Object]', 'special');
    }
  }

  ctx.seen.push(value);

  var output;
  if (array) {
    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  } else {
    output = keys.map(function(key) {
      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
    });
  }

  ctx.seen.pop();

  return reduceToSingleString(output, base, braces);
}


function formatPrimitive(ctx, value) {
  if (isUndefined(value))
    return ctx.stylize('undefined', 'undefined');
  if (isString(value)) {
    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
                                             .replace(/'/g, "\\'")
                                             .replace(/\\"/g, '"') + '\'';
    return ctx.stylize(simple, 'string');
  }
  if (isNumber(value))
    return ctx.stylize('' + value, 'number');
  if (isBoolean(value))
    return ctx.stylize('' + value, 'boolean');
  // For some reason typeof null is "object", so special case here.
  if (isNull(value))
    return ctx.stylize('null', 'null');
}


function formatError(value) {
  return '[' + Error.prototype.toString.call(value) + ']';
}


function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  var output = [];
  for (var i = 0, l = value.length; i < l; ++i) {
    if (hasOwnProperty(value, String(i))) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          String(i), true));
    } else {
      output.push('');
    }
  }

  shims.forEach(keys, function(key) {
    if (!key.match(/^\d+$/)) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          key, true));
    }
  });
  return output;
}


function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  var name, str, desc;
  desc = shims.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  if (desc.get) {
    if (desc.set) {
      str = ctx.stylize('[Getter/Setter]', 'special');
    } else {
      str = ctx.stylize('[Getter]', 'special');
    }
  } else {
    if (desc.set) {
      str = ctx.stylize('[Setter]', 'special');
    }
  }

  if (!hasOwnProperty(visibleKeys, key)) {
    name = '[' + key + ']';
  }
  if (!str) {
    if (shims.indexOf(ctx.seen, desc.value) < 0) {
      if (isNull(recurseTimes)) {
        str = formatValue(ctx, desc.value, null);
      } else {
        str = formatValue(ctx, desc.value, recurseTimes - 1);
      }
      if (str.indexOf('\n') > -1) {
        if (array) {
          str = str.split('\n').map(function(line) {
            return '  ' + line;
          }).join('\n').substr(2);
        } else {
          str = '\n' + str.split('\n').map(function(line) {
            return '   ' + line;
          }).join('\n');
        }
      }
    } else {
      str = ctx.stylize('[Circular]', 'special');
    }
  }
  if (isUndefined(name)) {
    if (array && key.match(/^\d+$/)) {
      return str;
    }
    name = JSON.stringify('' + key);
    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
      name = name.substr(1, name.length - 2);
      name = ctx.stylize(name, 'name');
    } else {
      name = name.replace(/'/g, "\\'")
                 .replace(/\\"/g, '"')
                 .replace(/(^"|"$)/g, "'");
      name = ctx.stylize(name, 'string');
    }
  }

  return name + ': ' + str;
}


function reduceToSingleString(output, base, braces) {
  var numLinesEst = 0;
  var length = shims.reduce(output, function(prev, cur) {
    numLinesEst++;
    if (cur.indexOf('\n') >= 0) numLinesEst++;
    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  }, 0);

  if (length > 60) {
    return braces[0] +
           (base === '' ? '' : base + '\n ') +
           ' ' +
           output.join(',\n  ') +
           ' ' +
           braces[1];
  }

  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
}


// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.
function isArray(ar) {
  return shims.isArray(ar);
}
exports.isArray = isArray;

function isBoolean(arg) {
  return typeof arg === 'boolean';
}
exports.isBoolean = isBoolean;

function isNull(arg) {
  return arg === null;
}
exports.isNull = isNull;

function isNullOrUndefined(arg) {
  return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;

function isNumber(arg) {
  return typeof arg === 'number';
}
exports.isNumber = isNumber;

function isString(arg) {
  return typeof arg === 'string';
}
exports.isString = isString;

function isSymbol(arg) {
  return typeof arg === 'symbol';
}
exports.isSymbol = isSymbol;

function isUndefined(arg) {
  return arg === void 0;
}
exports.isUndefined = isUndefined;

function isRegExp(re) {
  return isObject(re) && objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;

function isObject(arg) {
  return typeof arg === 'object' && arg;
}
exports.isObject = isObject;

function isDate(d) {
  return isObject(d) && objectToString(d) === '[object Date]';
}
exports.isDate = isDate;

function isError(e) {
  return isObject(e) && objectToString(e) === '[object Error]';
}
exports.isError = isError;

function isFunction(arg) {
  return typeof arg === 'function';
}
exports.isFunction = isFunction;

function isPrimitive(arg) {
  return arg === null ||
         typeof arg === 'boolean' ||
         typeof arg === 'number' ||
         typeof arg === 'string' ||
         typeof arg === 'symbol' ||  // ES6 symbol
         typeof arg === 'undefined';
}
exports.isPrimitive = isPrimitive;

function isBuffer(arg) {
  return arg && typeof arg === 'object'
    && typeof arg.copy === 'function'
    && typeof arg.fill === 'function'
    && typeof arg.binarySlice === 'function'
  ;
}
exports.isBuffer = isBuffer;

function objectToString(o) {
  return Object.prototype.toString.call(o);
}


function pad(n) {
  return n < 10 ? '0' + n.toString(10) : n.toString(10);
}


var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
              'Oct', 'Nov', 'Dec'];

// 26 Feb 16:19:34
function timestamp() {
  var d = new Date();
  var time = [pad(d.getHours()),
              pad(d.getMinutes()),
              pad(d.getSeconds())].join(':');
  return [d.getDate(), months[d.getMonth()], time].join(' ');
}


// log is just a thin wrapper to console.log that prepends a timestamp
exports.log = function() {
  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
};


/**
 * Inherit the prototype methods from one constructor into another.
 *
 * The Function.prototype.inherits from lang.js rewritten as a standalone
 * function (not on Function.prototype). NOTE: If this file is to be loaded
 * during bootstrapping this function needs to be rewritten using some native
 * functions as prototype setup using normal JavaScript does not work as
 * expected during bootstrapping (see mirror.js in r114903).
 *
 * @param {function} ctor Constructor function which needs to inherit the
 *     prototype.
 * @param {function} superCtor Constructor function to inherit prototype from.
 */
exports.inherits = function(ctor, superCtor) {
  ctor.super_ = superCtor;
  ctor.prototype = shims.create(superCtor.prototype, {
    constructor: {
      value: ctor,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
};

exports._extend = function(origin, add) {
  // Don't do anything if add isn't an object
  if (!add || !isObject(add)) return origin;

  var keys = shims.keys(add);
  var i = keys.length;
  while (i--) {
    origin[keys[i]] = add[keys[i]];
  }
  return origin;
};

function hasOwnProperty(obj, prop) {
  return Object.prototype.hasOwnProperty.call(obj, prop);
}

},{"_shims":41}],45:[function(require,module,exports){
// shim for using process in browser

var process = module.exports = {};

process.nextTick = (function () {
    var canSetImmediate = typeof window !== 'undefined'
    && window.setImmediate;
    var canPost = typeof window !== 'undefined'
    && window.postMessage && window.addEventListener
    ;

    if (canSetImmediate) {
        return function (f) { return window.setImmediate(f) };
    }

    if (canPost) {
        var queue = [];
        window.addEventListener('message', function (ev) {
            if (ev.source === window && ev.data === 'process-tick') {
                ev.stopPropagation();
                if (queue.length > 0) {
                    var fn = queue.shift();
                    fn();
                }
            }
        }, true);

        return function nextTick(fn) {
            queue.push(fn);
            window.postMessage('process-tick', '*');
        };
    }

    return function nextTick(fn) {
        setTimeout(fn, 0);
    };
})();

process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];

process.binding = function (name) {
    throw new Error('process.binding is not supported');
}

// TODO(shtylman)
process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};

},{}]},{},["3V0FPO"])
;

================================================
FILE: dist/yadda-0.10.1.js
================================================
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var fn = require('./fn');

module.exports = function(obj) {

    function ensure_array(obj) {
        var array = obj ? [].concat(obj) : [];
        array.in_array = fn.curry(array, in_array, array);
        array.each = fn.curry(array, each, array);
        array.each_async = fn.curry(array, each_async, array);
        array.collect = fn.curry(array, collect, array);
        array.flatten = fn.curry(array, flatten, array);
        array.inject = fn.curry(array, inject, array);
        array.push_all = fn.curry(array, push_all, array);
        array.find_all = fn.curry(array, find_all, array);
        array.find = fn.curry(array, find, array);
        array.naked = fn.curry(array, naked, array);
        return array;
    };

    function is_array(obj) {
        return Object.prototype.toString.call(obj) === '[object Array]'
    };

    function in_array(items, item) {
        for (var i = 0; i < items.length; i++) {
            if (items[i] == item) {
                return true;
            }
        }
    };

    function flatten(items) {
        if (!is_array(items)) return [items];
        if (items.length == 0) return [];
        var head = flatten(items[0]);
        var tail = flatten(items.slice(1));
        return ensure_array(head.concat(tail));
    };

    function each(items, iterator) {
        var result;
        for (var i = 0; i < items.length; i++) {
            result = iterator(items[i], i);
        };
        return result;
    };

    function each_async(items, iterator, callback) {
        callback = callback || fn.noop;
        if (!items.length) return callback();
        var completed = 0;
        var iterate = function() {
            iterator(items[completed], completed, function(err, result) {
                if (err) return callback(err);
                if (++completed >= items.length) return callback(null, result);
                iterate();
            });
        };
        iterate();
    };

    function collect(items, iterator) {
        var results = ensure_array();
        for (var i = 0; i < items.length; i++) {
            results.push(iterator(items[i]));
        }
        return results;
    };

    function inject(items, default_value, iterator) {
        var result = default_value;
        for (var i = 0; i < items.length; i++) {
            result = iterator(result, items[i]);
        }
        return result;
    };

    function push_all(items, more_items) {
        var more_items = more_items ? [].concat(more_items) : [];
        for (var i = 0; i < more_items.length; i++) {
            items.push(more_items[i]);
        }
    };

    function find_all(items, test) {
        var results = ensure_array();
        for (var i = 0; i < items.length; i++) {
            if (test(items[i])) {
                results.push(items[i]);
            }
        };
        return results;
    };

    function find(items, test) {
        var result;
        for (var i = 0; i < items.length; i++) {
            if (test(items[i])) {
                result = items[i];
                break;
            }
        };
        return result;
    };

    function naked(items) {
        return [].concat(items);
    };

    return ensure_array(obj);
};
},{"./fn":15}],2:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var LevenshteinDistanceScore = require('./LevenshteinDistanceScore');
var $ = require('./Array');

// Understands appropriateness of macros in relation to a specific step
var Competition = function(step, macros) {

    var results = [];   

    this.validate = function() {
        if (is_undefined()) return { step: step, valid: false, reason: 'Undefined Step' };
        if (is_ambiguous()) return { step: step, valid: false, reason: 'Ambiguous Step (Patterns [' + winning_patterns() + '] are all equally good candidates)' };
        return { step: step, valid: true };
    };

    this.clear_winner = function() {
        if (is_undefined()) throw new Error('Undefined Step: [' + step + ']');
        if (is_ambiguous()) throw new Error('Ambiguous Step: [' + step + ']. Patterns [' + winning_patterns() + '] match equally well.');
        return this.winner();
    };   

    function is_undefined() {
        return results.length == 0;
    };

    function is_ambiguous() {
        return (results.length > 1) && results[0].score.equals(results[1].score); 
    };

    this.winner = function() {
        return results[0].macro;
    };

    function winning_patterns() {
        return results.find_all(by_winning_score).collect(macro_signatures).join(', ');
    };

    function rank(step, macros) {
        results = macros.collect(function(macro) {
            return { 
                macro: macro, 
                score: new LevenshteinDistanceScore(step, macro.levenshtein_signature())
            }
        }).sort( by_ascending_score );
    };

    function by_ascending_score(a, b) { 
        return b.score.beats(a.score);
    };

    function by_winning_score(result) {
        return result.score.equals(results[0].score);
    };

    function macro_signatures(result) {
        return result.macro.toString();
    };

    rank(step, $(macros));
};

module.exports = Competition;
},{"./Array":1,"./LevenshteinDistanceScore":9}],3:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Constructs an object that macros will be bound to before execution
var Context = function(properties) {

    this.properties = {};

    this.merge = function(other) {
        if (other instanceof Context) return this.merge(other.properties);
        return new Context(this.properties)._merge(other);
    };

    this._merge = function(other) {
        for (var key in other) { this.properties[key] = other[key] }; 
        return this;
    };

    this._merge(properties);
};

module.exports = Context;
},{}],4:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('./Array');
var RegularExpression = require('./RegularExpression');

// Understands term definitions
var Dictionary = function(prefix) {

    var prefix = prefix || '$';
    var terms = {};
    var term_pattern = new RegularExpression(new RegExp('(?:^|[^\\\\])\\' + prefix + '(\\w+)', 'g'));
    var _this = this;

    this.define = function(term, definition) {
        if (this.is_defined(term)) throw new Error('Duplicate definition: [' + term + ']');
        terms[term] = normalise(definition);
        return this;
    };

    this.is_defined = function(term) {
        return terms[term];
    };

    this.expand = function(term, already_expanding) {
        if (!is_expandable(term)) return term;
        return expand_sub_terms(term, $(already_expanding));
    };

    this.merge = function(other) {
        if (other._prefix() != this._prefix()) throw new Error('Cannot merge dictionaries with different prefixes');
        return new Dictionary(prefix)._merge(this)._merge(other);
    };

    this._merge = function(other) {
        other.each_term(this.define.bind(this));
        return this;
    };

    this._prefix = function() {
        return prefix;
    };

    this.each_term = function(callback) {
        for (key in terms) {
            callback(key, terms[key])
        };
    };

    var expand_sub_terms = function(term, already_expanding) {
        return get_sub_terms(term).each(function(sub_term) {
            if (already_expanding.in_array(sub_term)) throw new Error('Circular Definition: \[' + already_expanding.join(', ') + '\]');
            var sub_term_definition = expand_sub_term(sub_term, already_expanding);
            return term = term.replace(prefix + sub_term, sub_term_definition);
        });
    };

    var get_sub_terms = function(term) {
        return term_pattern.groups(term);
    }

    var expand_sub_term = function(sub_term, already_expanding) {
        var definition = terms[sub_term] || '(.+)';
        return is_expandable(definition) ? _this.expand(definition, already_expanding.concat(sub_term)) : definition;
    }

    var normalise = function(definition) {
        return definition.toString().replace(/^\/|\/$/g, '');
    }

    var is_expandable = function(definition) {
        return term_pattern.test(definition);
    };
};


module.exports = Dictionary;
},{"./Array":1,"./RegularExpression":13}],5:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('./Array');
var fn = require('./fn');
var event_bus = new EventBus();

// A communication channel between event emitters and event listeners
function EventBus() {

    var event_handlers = $();
    var _this = this;

    this.send = function(event_name, event_data, next) {
        if (arguments.length == 1) return this.send(event_name, {});
        if (arguments.length == 2 && fn.is_function(event_data)) return this.send(event_name, {}, event_data);      
        notify_handlers(event_name, event_data);
        next && next();        
        return this;
    };

    this.on = function(event_pattern, callback) {
        event_handlers.push({ pattern: event_pattern, callback: callback });
        return this;
    };

    var notify_handlers = function(event_name, event_data) {
        find_handlers(event_name).each(function(callback) {
            callback({ name: event_name, data: event_data });
        });
    };

    var find_handlers = function(event_name) {
        return event_handlers.find_all(function(handler) {
            return new RegExp(handler.pattern).test(event_name);
        }).collect(function(handler) {
            return handler.callback;
        });
    };  
};

function instance() {
    return event_bus;
};

module.exports = {
    instance: instance,
    ON_SCENARIO: '__ON_SCENARIO__',
    ON_STEP: '__ON_STEP__',
    ON_EXECUTE: '__ON_EXECUTE__'
};
},{"./Array":1,"./fn":15}],6:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var FileSearch = require('./FileSearch');

var FeatureFileSearch = function(directories) {
    this.constructor(directories, /.*\.(?:feature|spec|specification)$/);
};
FeatureFileSearch.prototype = new FileSearch();

module.exports = FeatureFileSearch;
},{"./FileSearch":7}],7:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var shims = require('./shims/index');
var path = shims.path;
var process = shims.process;
var fs = shims.fs;
var $ = require('./Array');

// Searches for files in the given directories and their sub-directories, matching at least one of the given patterns
var FileSearch = function(directories, patterns) {

    var patterns = patterns || /.*/;

    this.each = function(fn) {
        this.list().forEach(fn);
    };

    this.list = function() {
        return $(directories).inject($(), function(files, directory) {
            return files.concat(list_files(directory).find_all(by_pattern));
        });
    };

    var list_files = function(directory) {
        return $(list_immediate_files(directory).concat(list_sub_directory_files(directory)));
    };

    var list_immediate_files = function(directory) {
        return ls(directory).find_all(by_file);
    };

    var list_sub_directory_files = function(directory) {
        return ls(directory).find_all(by_directory).inject($(), function(files, directory) {
            return files.concat(list_files(directory));
        });
    };

    var ls = function(directory) {
        if (!fs.existsSync(directory)) return $();
        return $(fs.readdirSync(directory)).collect(function(file) {
            return path.join(directory, file);
        });
    };

    var by_file = function(file) {
        return !by_directory(file);
    };

    var by_directory = function(file) {
        return fs.statSync(file).isDirectory();
    }

    var by_pattern = function(filename) {
        return $(patterns).find(function(pattern) {
            return new RegExp(pattern).test(filename)
        })
    };
};

module.exports = FileSearch;
},{"./Array":1,"./shims/index":37}],8:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Competition = require('./Competition');
var Context = require('./Context');
var EventBus = require('./EventBus');
var $ = require('./Array');
var fn = require('./fn');

// Understands a scenario
var Interpreter = function(libraries) {

    var libraries = $(libraries);
    var event_bus = EventBus.instance();
    var _this = this;

    this.requires = function(libraries) {
        libraries.push_all(libraries);
        return this;
    };

    this.validate = function(scenario) {
        var results = $(scenario).collect(function(step) {
            return _this.rank_macros(step).validate();
        });
        if (results.find(by_invalid_step)) throw new Error('Scenario cannot be interpreted\n' + results.collect(validation_report).join('\n'));
    };

    function by_invalid_step(result) {
        return !result.valid;  
    };

    function validation_report(result) {
        return result.step + (result.valid ? '' : ' <-- ' + result.reason);
    };

    this.interpret = function(scenario, scenario_context, next) {
        scenario_context = new Context().merge(scenario_context);
        event_bus.send(EventBus.ON_SCENARIO, { scenario: scenario, ctx: scenario_context.properties });
        var iterator = make_step_iterator(scenario_context, next);
        $(scenario).each_async(iterator, next);
    };

    var make_step_iterator = function(scenario_context, next) {
        var iterator = function(step, index, callback) {
            _this.interpret_step(step, scenario_context, callback);
        };
        return next ? iterator : fn.asynchronize(null, iterator);        
    };

    this.interpret_step = function(step, scenario_context, next) {
        var context = new Context().merge(scenario_context);
        event_bus.send(EventBus.ON_STEP, { step: step, ctx: context.properties });        
        this.rank_macros(step).clear_winner().interpret(step, context || {}, next);
    };  

    this.rank_macros = function(step) {
        return new Competition(step, compatible_macros(step));
    };

    var compatible_macros = function(step) {
        return libraries.inject([], function(macros, library) {
            return macros.concat(library.find_compatible_macros(step));
        });
    };
};

module.exports = Interpreter;
},{"./Array":1,"./Competition":2,"./Context":3,"./EventBus":5,"./fn":15}],9:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Understands similarity of two strings
var LevenshteinDistanceScore = function(s1, s2) {

    this.value;
    this.type = 'LevenshteinDistanceScore';    
    var distance_table;
    var _this = this;

    var initialise = function() {

        var x = s1.length;
        var y = s2.length;

        distance_table = new Array(x + 1);

        for (i = 0; i <= x; i++) {
            distance_table[i] = new Array(y + 1);
        }

        for (var i = 0; i <= x; i++) {
            for (var j = 0; j <= y; j++) {
                distance_table[i][j] = 0;
            }
        }

        for (var i = 0; i <= x; i++) {
            distance_table[i][0] = i;
        }

        for (var j = 0; j <= y; j++) {
            distance_table[0][j] = j;
        }
    };

    var score = function() {

        if (s1 == s2) return _this.value = 0;

        for (var j = 0; j < s2.length; j++) {
            for (var i = 0; i < s1.length; i++) {
                if (s1[i] == s2[j]) {
                    distance_table[i+1][j+1] = distance_table[i][j];
                } else {
                    var deletion = distance_table[i][j+1] + 1;
                    var insertion = distance_table[i+1][j] + 1;
                    var substitution = distance_table[i][j] + 1;
                    distance_table[i+1][j+1] = Math.min(substitution, deletion, insertion)
                }
            }
        }
        _this.value = distance_table[s1.length][s2.length];
    };

    this.beats = function(other) {
        return this.value < other.value;
    } 

    this.equals = function(other) {
        if (!other) return false;
        return (this.type == other.type && this.value == other.value);
    }   

    initialise();
    score();
};

module.exports = LevenshteinDistanceScore;
},{}],10:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Macro = require('./Macro');
var Dictionary = require('./Dictionary');
var $ = require('./Array');

// Understands how to index macros
var Library = function(dictionary) {

    var dictionary = dictionary || new Dictionary();
    var macros = $();
    var _this = this;    

    this.define = function(signatures, fn, macro_context) {
        $(signatures).each(function(signature) {            
            define_macro(signature, fn, macro_context);
        });
        return this;        
    };

    var define_macro = function(signature, fn, macro_context) {
        if (_this.get_macro(signature)) throw new Error('Duplicate macro: [' + signature + ']');
        macros.push(new Macro(signature, dictionary.expand(signature), fn, macro_context));
    }

    this.get_macro = function(signature) {      
        return macros.find(function(other_macro) {
            return other_macro.is_identified_by(signature);
        });
    };

    this.find_compatible_macros = function(step) {
        return macros.find_all(function(macro) {
            return macro.can_interpret(step);
        });
    };
};

module.exports = Library;
},{"./Array":1,"./Dictionary":4,"./Macro":11}],11:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var fn = require('./fn');
var Context = require('./Context');
var RegularExpression = require('./RegularExpression');
var EventBus = require('./EventBus');

// Understands how to invoke a step
var Macro = function(signature, signature_pattern, macro, macro_context) {

    var signature_pattern = new RegularExpression(signature_pattern);
    var macro = macro || fn.async_noop;
    var event_bus = EventBus.instance();
    var _this = this;

    var init = function(signature, signature_pattern) {
        _this.signature = normalise(signature);
    }

    this.is_identified_by = function(other_signature) {
        return this.signature == normalise(other_signature);
    };

    this.can_interpret = function(step) {
        return signature_pattern.test(step);
    };

    this.interpret = function(step, scenario_context, next) {
        var context = new Context().merge(macro_context).merge(scenario_context);
        var args = signature_pattern.groups(step);
        event_bus.send(EventBus.ON_EXECUTE, { step: step, ctx: context.properties, pattern: signature_pattern.toString(), args: args });
        fn.invoke(macro, context.properties, args.concat(next));
    };

    this.levenshtein_signature = function() {
        return signature_pattern.without_expressions();
    };

    var normalise = function(signature) {
        return new RegExp(signature).toString();
    }

    this.toString = function() {
        return this.signature;
    };

    init(signature, signature_pattern);
};

module.exports = Macro;

},{"./Context":3,"./EventBus":5,"./RegularExpression":13,"./fn":15}],12:[function(require,module,exports){
var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};module.exports = Platform;

function Platform() {

    function get_container() {
        if (is_browser()) return window;
        if (is_phantom()) return phantom;
        if (is_node()) return global;         
    }

    function is_node() {
        return typeof module != 'undefined' &&
               typeof module.exports != 'undefined';
    }

    function is_browser() {
        return typeof window != 'undefined';
    }

    function is_phantom() {
        return typeof phantom != 'undefined';
    }

    return {
        get_container: get_container,
        is_node: is_node,
        is_browser: is_browser,
        is_phantom: is_phantom
    }

}

},{}],13:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
var $ = require('./Array');

// Wrapper for JavaScript Regular Expressions
var RegularExpression = function(pattern_or_regexp) {

    var groups_pattern = /(^|[^\\\\])\(.*?\)/g;
    var sets_pattern = /(^|[^\\\\])\[.*?\]/g;
    var repetitions_pattern = /(^|[^\\\\])\{.*?\}/g;
    var regex_aliases_pattern = /(^|[^\\\\])\\./g;
    var non_word_tokens_pattern = /[^\w\s]/g;
    var regexp = new RegExp(pattern_or_regexp);

    this.test = function(text) {
        var result = regexp.test(text);
        this.reset();        
        return result;
    };  

    this.groups = function(text) {
        var results = $();
        var match = regexp.exec(text);
        while (match) {            
            var groups = match.slice(1, match.length);
            results.push(groups)
            match = regexp.global && regexp.exec(text)
        }
        this.reset();
        return results.flatten();        
    };   

    this.reset = function() {
        regexp.lastIndex = 0;
        return this;
    };

    this.without_expressions = function() {
        return regexp.source.replace(groups_pattern, '$1')
                            .replace(sets_pattern, '$1')
                            .replace(repetitions_pattern, '$1')
                            .replace(regex_aliases_pattern, '$1')
                            .replace(non_word_tokens_pattern, '');
    };    

    this.equals = function(other) {
        return this.toString() == other.toString();
    };    

    this.toString = function() {
        return "/" + regexp.source + "/";
    };
};

module.exports = RegularExpression;
},{"./Array":1}],14:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Interpreter = require('./Interpreter');
var Context = require('./Context');
var fn = require('./fn');

// Provides a repetitive interface, i.e. new Yadda().yadda().yadda() to the Yadda Interpreter
var Yadda = function(libraries, interpreter_context) {

    this.interpreter = new Interpreter(libraries);
    var _this = this;

    this.requires = function(libraries) {
        this.interpreter.requires(libraries);
        return this;
    };

    this.yadda = function(scenario, scenario_context, next) {
        if (arguments.length == 0) return this;
        if (arguments.length == 2 && fn.is_function(scenario_context)) return this.yadda(scenario, {}, scenario_context);
        this.interpreter.validate(scenario);
        this.interpreter.interpret(scenario, new Context().merge(interpreter_context).merge(scenario_context), next);
    };

    this.toString = function() {
        return "Yadda 0.10.0 Copyright 2010 Acuminous Ltd / Energized Work Ltd";
    };
};

module.exports = Yadda;

},{"./Context":3,"./Interpreter":8,"./fn":15}],15:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function() {

    var slice = Array.prototype.slice;

    function curry(ctx, fn) {
        var args = slice.call(arguments, 2);
        return function() {
            return fn.apply(ctx, args.concat(slice.call(arguments)));
        }
    };

    function invoke(fn, ctx, args) {
        return fn.apply(ctx, args);
    };

    function is_function(object) {
        var getType = {};
        return object && getType.toString.call(object) === '[object Function]';
    };

    function noop() {};

    function asynchronize(ctx, fn) {
        return function() {
            var next = slice.call(arguments, arguments.length - 1)[0];
            var args = slice.call(arguments, 0, arguments.length - 2);
            fn.apply(ctx, args);
            if (next) next();
        };
    };

    return {
        noop: noop,
        async_noop: asynchronize(null, noop), 
        asynchronize: asynchronize,
        is_function: is_function,
        curry: curry,
        invoke: invoke
    };


})();

},{}],"yadda":[function(require,module,exports){
module.exports=require('3V0FPO');
},{}],"3V0FPO":[function(require,module,exports){
module.exports = {
    Yadda: require('./Yadda'),
    EventBus: require('./EventBus'),
    Interpreter: require('./Interpreter'),
    Context: require('./Context'),
    Library: require('./Library'),
    Dictionary: require('./Dictionary'),
    FeatureFileSearch: require('./FeatureFileSearch'),    
    FileSearch: require('./FileSearch'),
    Platform: require('./Platform'),    
    localisation: require('./localisation/index'),
    parsers: require('./parsers/index'),
    plugins: require('./plugins/index'),
    shims: require('./shims/index')
};

},{"./Context":3,"./Dictionary":4,"./EventBus":5,"./FeatureFileSearch":6,"./FileSearch":7,"./Interpreter":8,"./Library":10,"./Platform":12,"./Yadda":14,"./localisation/index":24,"./parsers/index":28,"./plugins/index":31,"./shims/index":37}],18:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '[Ff]eature',
        scenario: '(?:[Ss]cenario|[Ss]cenario [Oo]utline)',
        examples: '(?:[Ee]xamples|[Ww]here)',
        pending: 'Pending',
        background: '[Bb]ackground',
        given: '(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)',
        when: '(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut)',
        then: '(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut)',
        _steps: ['given', 'when', 'then']
    };

    return new Language('English', vocabulary);
})();

},{"./Language":20}],19:[function(require,module,exports){
/* -*- coding: utf-8 -*-
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {
    
    var vocabulary = {
        feature: '(?:[Ff]onctionnalité)',
        scenario: '(?:[Ss]cénario|[Pp]lan [Dd]u [Ss]cénario)',
        examples: '(?:[Ee]xemples|[Ee]xemple|[Oo][uù])',
        pending: 'En attente',
        background: '[Ff]ond',
        given: '(?:[Ss]oit|[ÉéEe]tant données|[ÉéEe]tant donnée|[ÉéEe]tant donnés|[ÉéEe]tant donné|[Aa]vec|[Ee]t|[Mm]ais|[Aa]ttendre)',
        when: '(?:[Qq]uand|[Ll]orsqu\'|[Ll]orsque|[Ss]i|[Ee]t|[Mm]ais)',
        then: '(?:[Aa]lors|[Aa]ttendre|[Ee]t|[Mm]ais)',
        
        _steps: [
            'given', 'when', 'then', 
            'soit', 'etantdonnees', 'etantdonnee', 'etantdonne',
            'quand', 'lorsque',
            'alors'
        ],
        // Also aliasing French verbs for given-when-then for signature-lookup
        get soit() { return this.given },
        get etantdonnees() { return this.given },
        get etantdonnee() { return this.given },
        get etantdonne() { return this.given },
        get quand() { return this.when },
        get lorsque() { return this.when },
        get alors() { return this.then }
    };
    
    return new Language('French', vocabulary);
})();



},{"./Language":20}],20:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Library = require('../Library');
var $ = require('../Array');

module.exports = function(name, vocabulary) {

    var _this = this;

    this.library = function(dictionary) {
        return _this.localise_library(new Library(dictionary));
    };

    this.localise_library = function(library) {
        $(vocabulary._steps).each(function(keyword) {
            library[keyword] = function(signatures, fn, ctx) {
                return $(signatures).each(function(signature) {
                    var signature = prefix_signature(_this.localise(keyword), signature);
                    return library.define(signature, fn, ctx);
                });
            };
        });
        return library;
    };

    var prefix_signature = function(prefix, signature) {
        var regex_delimiters = new RegExp('^/|/$', 'g');
        var start_of_signature = new RegExp(/^(?:\^)?/);
        var one_or_more_spaces = '\\s+';
        return signature.toString().replace(regex_delimiters, '').replace(start_of_signature, prefix + one_or_more_spaces);
    };

    this.localise = function(keyword) {
        if (vocabulary[keyword] == undefined) throw new Error('Keyword "' + keyword + '" has not been translated into ' + name + '.');
        return vocabulary[keyword];
    };
};
},{"../Array":1,"../Library":10}],21:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '[Ee]genskap',
        scenario: '[Ss]cenario',
        examples: '[Ee]ksempler',
        pending: 'Avventer',
        background: '[Bb]akgrunn',
        given: '(?:[Gg]itt|[Mm]ed|[Oo]g|[Mm]en|[Uu]nntatt)',
        when: '(?:[Nn]år|[Oo]g|[Mm]en)',
        then: '(?:[Ss]å|[Ff]forvent|[Oo]g|[Mm]en)',
        _steps: ['given', 'when', 'then', 'gitt', 'når', 'så'],
        // Also aliasing Norwegian verbs for given-when-then for signature-lookup
        get gitt() { return this.given },
        get når() { return this.when },
        get så() { return this.then }
    };

    return new Language('Norwegian', vocabulary);
})();

},{"./Language":20}],22:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {

    var vocabulary = {
        feature: '(?:[Tt]ale|[Yy]arn)',
        scenario: '(?:[Aa]dventure|[Ss]ortie)',
        examples: '[Ww]herest',
        pending: 'Brig',
        background: '[Aa]ftground',
        given: '(?:[Gg]iveth|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)',
        when: '(?:[Ww]hence|[Ii]f|[Aa]nd|[Bb]ut)',
        then: '(?:[Tt]hence|[Ee]xpect|[Aa]nd|[Bb]ut)',
        _steps: ['given', 'when', 'then', 'giveth', 'whence', 'thence'],
        // Also aliasing Pirate verbs for given-when-then for signature-lookup
        get giveth() { return this.given },
        get whence() { return this.when },
        get thence() { return this.then }        

    };

    return new Language('Pirate', vocabulary);
})();

},{"./Language":20}],23:[function(require,module,exports){
/* -*- coding: utf-8 -*-
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var Language = require('./Language');

module.exports = (function() {
    
    var vocabulary = {
        feature: '(?:[Ff]uncionalidad|[Cc]aracterística)',
        scenario: '(?:[Ee]scenario|[Cc]aso)',
        examples: '(?:[Ee]jemplos|[Ee]jemplo)',
        pending: 'Pendiente',
        background: '[Ff]ondo',
        given: '(?:[Ss]ea|[Ss]ean|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas)',
        when: '(?:[Cc]uando|[Ss]i|[Qq]ue)',
        then: '(?:[Ee]ntonces)',
        
        _steps: [
            'given', 'when', 'then', 
            'sea', 'sean', 'dado', 'dada','dados', 'dadas',
            'cuando', 'si',
            'entonces'
        ],

        get sea() { return this.given },
        get sean() { return this.given },
        get dado() { return this.given },
        get dada() { return this.given },
        get dados() { return this.given },
        get dadas() { return this.given },
        get cuando() { return this.when },
        get si() { return this.when },
        get entonces() { return this.then }
    };
    
    return new Language('Spanish', vocabulary);
})();



},{"./Language":20}],24:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = {
    English: require('./English'),
    Spanish: require('./Spanish'),
    French: require('./French'),
    Norwegian: require('./Norwegian'),
    Pirate: require('./Pirate'),
    Language: require('./Language')
}
},{"./English":18,"./French":19,"./Language":20,"./Norwegian":21,"./Pirate":22,"./Spanish":23}],25:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
var FeatureFileParser = function(language) {

    // Requiring fs locally so it doesn't break component
    var fs = require('fs');
    var FeatureParser = require('./FeatureParser');
    var parser = new FeatureParser(language);

    this.parse = function(file, next) {
        var text = fs.readFileSync(file, 'utf8');
        var feature = parser.parse(text);
        return next && next(feature) || feature;
    } 
}

module.exports = FeatureFileParser;
},{"./FeatureParser":26,"fs":42}],26:[function(require,module,exports){
/*
 * Copyright 2010 Acuminous Ltd / Energized Work Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var $ = require('../Array');
var fn = require('../fn');

var English = require('../localisation/English');

var FeatureParser = function(language) {

    var language = language || English;

    var FEATURE_REGEX = new RegExp('^\\s*' + language.localise('feature') + ':\\s*(.*)', 'i');
    var SCENARIO_REGEX = new RegExp('^\\s*' + language.localise('scenario') + ':\\s*(.*)', 'i');
    var BACKGROUND_REGEX = new RegExp('^\\s*' + language.localise('background') + ':\\s*(.*)', 'i');
    var EXAMPLES_REGEX = new RegExp('^\\s*' + language.localise('examples') + ':', 'i');
    var TEXT_REGEX = new RegExp('^\\s*([^\\s].*)', 'i');
    var SINGLE_LINE_COMMENT_REGEX = new RegExp('^\\s*#');
    var MULTI_LINE_COMMENT_REGEX = new RegExp('^\\s*#{3,}')
    var BLANK_REGEX = new RegExp('^\\s*$');
    var SIMPLE_ANNOTATION_REGEX = new RegExp('^@([^=]*)$');
    var NVP_ANNOTATION_REGEX = new RegExp('^@([^=]*)=(.*)$');

    var specification = undefined;
    var comment = undefined;
    var line = undefined;
    var line_number = 0;

    this.parse = function(text, next) {
        reset();
        split(text).each(parse_line);
        return next && next(specification.export()) || specification.export();
    };

    function reset() {
        specification = new Specification();
        comment = false;
        line_number = 0;
    };

    function split(text) {
        return $(text.split(/\r\n|\n/));
    };

    function parse_line(line, index) {
        var match;
        try {
            if (match = MULTI_LINE_COMMENT_REGEX.test(line)) return comment = !comment;
            if (match = SINGLE_LINE_COMMENT_REGEX.test(line)) return;        
            if (match = SIMPLE_ANNOTATION_REGEX.exec(line)) return specification.handle('Annotation', { key: match[1], value: true });
            if (match = NVP_ANNOTATION_REGEX.exec(line)) return specification.handle('Annotation', { key: match[1], value: match[2] });
            if (match = FEATURE_REGEX.exec(line)) return specification.handle('Feature', match[1]);
            if (match = SCENARIO_REGEX.exec(line)) return specification.handle('Scenario', match[1]);
            if (match = BACKGROUND_REGEX.exec(line)) return specification.handle('Background', match[1]);
            if (match = EXAMPLES_REGEX.exec(line)) return specification.handle('Examples');
            if (match = BLANK_REGEX.test(line)) return specification.handle('Blank');
            if (match = TEXT_REGEX.exec(line)) return specification.handle('Text', match[1]);
        } catch (e) {
            throw new Error('Error parsing line ' + (index  + 1) + ', "' + line + '".\n' + e.message);
        };
    };
}

var Handlers = function(handlers) {

    var handlers = handlers || {};

    this.register = function(event, handler) {
        handlers[event] = handler;
    };

    this.unregister = function(event) {
        delete handlers[event];
    };

    this.find = function(event) {
        if (!handlers[event.toLowerCase()]) throw new Error(event + ' is unexpected at this time');
        return { handle: handlers[event.toLowerCase()] };
    };
};

var Specification = function() {

    var current_element = this;
    var feature = undefined;
    var annotations = {};
    var handlers = new Handlers({
        text: fn.noop,
        blank: fn.noop,        
        annotation: stash_annotation,
        feature: start_feature,
        scenario: start_scenario,
        background: start_background,
    });

    function stash_annotation(event, annotation) {
        handlers.unregister('background');
        annotations[annotation.key] = annotation.value;
        annotations[annotation.key.toLowerCase().replace(/\W/g, '_')] = annotation.value;
    };

    function start_feature(event, title) {
        return feature = new Feature(title, annotations, {});
    };

    function start_scenario(event, title) {
        feature = new Feature(title, {}, annotations);
        return feature.on(event, title);
    }; 

    var start_background = start_scenario;  

    this.handle = function(event, data) {
        current_element = current_element.on(event, data);
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;        
    };

    this.export = function() {
        if (!feature) throw new Error('A feature must contain one or more scenarios');
        return feature.export();
    };
};

var Feature = function(title, annotations, stashed_annotations) {

    var description = [];
    var scenarios = [];
    var background = new NullBackground();
    var handlers = new Handlers({
        text: capture_description,
        blank: end_description,        
        annotation: stash_annotation,        
        scenario: start_scenario,
        background: start_background
    }); 
    var _this = this;

    function start_background(event, title) {
        background = new Background(title, _this);
        stashed_annotations = {};
        return background;
    };

    function stash_annotation(event, annotation) {
        handlers.unregister('background');        
        stashed_annotations[annotation.key] = annotation.value;
        stashed_annotations[annotation.key.toLowerCase().replace(/\W/g, '_')] = annotation.value;
    };

    function capture_description(event, text) {
        description.push(text);
    };

    function end_description() {
        handlers.unregister('text');
        handlers.register('blank', fn.noop);
    };

    function start_scenario(event, title) {
        var scenario = new Scenario(title, background, stashed_annotations, _this);
        scenarios.push(scenario);
        stashed_annotations = {};        
        return scenario;
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        return {
            title: title,
            annotations: annotations,
            description: description,
            scenarios: $(scenarios).collect(function(scenario) {
                return scenario.export();
            }).flatten().naked()
        };        
    };
};

var Background = function(title, feature) {

    var steps = [];
    var handlers = new Handlers({
        text: fn.noop,        
        blank: end_description,
        scenario: start_scenario
    }); 
    var _this = this;  

    function end_description() {
        handlers.register('text', capture_step);
        handlers.register('blank', fn.noop);
    };

    function capture_step(event, text) {
        steps.push(text);
    }

    function start_scenario(event, data) {
        validate();
        return feature.on(event, data);
    };  

    function validate() {
        if (steps.length == 0) throw new Error('Background requires one or more steps');        
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        validate();
        return {
            steps: steps
        };
    };
};

var NullBackground = function() {
    var handlers = new Handlers(); 

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        return {
            steps: []
        };
    };    
}

var Scenario = function(title, background, annotations, feature) {

    var description = [];
    var steps = [];
    var examples = undefined;
    var handlers = new Handlers({
        text: capture_description,        
        blank: end_description,
        annotation: start_scenario,
        scenario: start_scenario,
        examples: start_examples
    }); 
    var _this = this;  

    function capture_description(event, text) {
        description.push(text);
    };

    function end_description() {
        handlers.register('text', capture_step);
        handlers.register('blank', fn.noop);
    };

    function capture_step(event, text) {
        steps.push(text);
    }

    function start_scenario(event, data) {
        validate();
        return feature.on(event, data);
    };  

    function start_examples(event, data) {
        validate();
        return examples = new Examples(_this);
    };

    function validate() {
        if (steps.length == 0) throw new Error('Scenario requires one or more steps');        
    };

    this.on = function(event, data) {
        return handlers.find(event).handle(event, data) || this;
    };

    this.export = function() {
        validate();
        var result = {
            title: title,
            annotations: annotations,
            description: description,
            steps: background.export().steps.concat(steps)
        };
        return examples ? examples.expand(result) : result;
    };
};

var Examples = function(scenario) {

    var SURROUNDING_WHITESPACE_REGEX = /^\s+|\s+$/g;

    var headings = [];
    var examples = $();
    var handlers = new Handlers({
        text: capture_headings,        
        blank: fn.noop,
        annotation: start_scenario,
        scenario: start_scenario,
    });
    var _this = this;

    function capture_headings(event, data) {
        handlers.register('text', capture_example);
        headings = split(data).collect(function(column) {
            return column.replace(SURROUNDING_WHITESPACE_REGEX, '');
        }).naked();
    };

    function capture_example(event, data) {
        var fields = split(data, headings.length);
        var example = {};
        fields.each(function(field, index) {
            example[headings[index]] = field.replace(SURROUNDING_WHITESPACE_REGEX, '');            
        });
        examples.push(example);
    };

    function split(row, number_of_fields) {
        var fields = $(row.split('|'));
        if (number_of_fields != undefined && number_of_fields != fields.length) {
            throw new Error('Incorrect number of fields in example table. Expected ' + number_of_fields + ' but found ' + fields.length);                    
        }
        return fields;
    };

    function start_scenario(event, data) {
Download .txt
gitextract_pdomq_n9/

├── .codeclimate.yml
├── .eslintignore
├── .eslintrc
├── .github/
│   └── workflows/
│       ├── codeql-analysis.yml
│       └── node-js-ci.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   └── pre-commit
├── .jshintignore
├── .mocharc.json
├── .npmignore
├── .prettierignore
├── .prettierrc.json
├── CHANGELOG.md
├── README.md
├── bin/
│   ├── browserify.js
│   ├── examples.bat
│   ├── examples.js
│   ├── examples.sh
│   └── rev.sh
├── bower.json
├── component.json
├── dist/
│   ├── yadda-0.10.0.js
│   ├── yadda-0.10.1.js
│   ├── yadda-0.10.10.js
│   ├── yadda-0.10.11.js
│   ├── yadda-0.10.12.js
│   ├── yadda-0.10.13.js
│   ├── yadda-0.10.14.js
│   ├── yadda-0.10.2.js
│   ├── yadda-0.10.3.js
│   ├── yadda-0.10.4.js
│   ├── yadda-0.10.5.js
│   ├── yadda-0.10.6.js
│   ├── yadda-0.10.7.js
│   ├── yadda-0.10.8.js
│   ├── yadda-0.10.9.js
│   ├── yadda-0.11.0.js
│   ├── yadda-0.11.1.js
│   ├── yadda-0.11.2.js
│   ├── yadda-0.11.3.js
│   ├── yadda-0.11.4.js
│   ├── yadda-0.11.5.js
│   ├── yadda-0.11.6.js
│   ├── yadda-0.11.7.js
│   ├── yadda-0.12.0.js
│   ├── yadda-0.12.1.js
│   ├── yadda-0.13.0.js
│   ├── yadda-0.13.1.js
│   ├── yadda-0.14.0.js
│   ├── yadda-0.14.1.js
│   ├── yadda-0.14.2.js
│   ├── yadda-0.15.0.js
│   ├── yadda-0.15.1.js
│   ├── yadda-0.15.2.js
│   ├── yadda-0.15.3.js
│   ├── yadda-0.15.4.js
│   ├── yadda-0.15.5.js
│   ├── yadda-0.16.0.js
│   ├── yadda-0.16.1.js
│   ├── yadda-0.16.2.js
│   ├── yadda-0.16.3.js
│   ├── yadda-0.17.0.js
│   ├── yadda-0.17.1.js
│   ├── yadda-0.17.10.js
│   ├── yadda-0.17.2.js
│   ├── yadda-0.17.3.js
│   ├── yadda-0.17.4.js
│   ├── yadda-0.17.5.js
│   ├── yadda-0.17.6.js
│   ├── yadda-0.17.7.js
│   ├── yadda-0.17.8.js
│   ├── yadda-0.17.9.js
│   ├── yadda-0.18.0.js
│   ├── yadda-0.19.0.js
│   ├── yadda-0.20.0.js
│   ├── yadda-0.21.0.js
│   ├── yadda-0.22.0.js
│   ├── yadda-0.22.1.js
│   ├── yadda-0.22.2.js
│   ├── yadda-0.3.0.js
│   ├── yadda-0.4.0.js
│   ├── yadda-0.4.1.js
│   ├── yadda-0.4.2.js
│   ├── yadda-0.4.3.js
│   ├── yadda-0.4.4.js
│   ├── yadda-0.4.5.js
│   ├── yadda-0.4.6.js
│   ├── yadda-0.4.7.js
│   ├── yadda-0.5.0.js
│   ├── yadda-0.5.1.js
│   ├── yadda-0.5.2.js
│   ├── yadda-0.6.0.js
│   ├── yadda-0.6.1.js
│   ├── yadda-0.6.2.js
│   ├── yadda-0.6.3.js
│   ├── yadda-0.6.4.js
│   ├── yadda-0.6.5.js
│   ├── yadda-0.7.0.js
│   ├── yadda-0.7.1.js
│   ├── yadda-0.7.2.js
│   ├── yadda-0.8.0.js
│   ├── yadda-0.8.1.js
│   ├── yadda-0.8.2.js
│   ├── yadda-0.8.3.js
│   ├── yadda-0.8.4.js
│   ├── yadda-0.8.5.js
│   ├── yadda-0.8.6.js
│   ├── yadda-0.9.0.js
│   ├── yadda-0.9.1.js
│   ├── yadda-0.9.10.js
│   ├── yadda-0.9.11.js
│   ├── yadda-0.9.2.js
│   ├── yadda-0.9.3.js
│   ├── yadda-0.9.4.js
│   ├── yadda-0.9.5.js
│   ├── yadda-0.9.6.js
│   ├── yadda-0.9.7.js
│   ├── yadda-0.9.8.js
│   ├── yadda-0.9.9.js
│   ├── yadda-1.0.0.js
│   ├── yadda-1.0.1.js
│   ├── yadda-1.1.0.js
│   ├── yadda-1.1.1.js
│   ├── yadda-1.2.0.js
│   ├── yadda-1.3.0.js
│   ├── yadda-1.3.1.js
│   ├── yadda-1.4.0.js
│   ├── yadda-1.5.0.js
│   ├── yadda-1.5.1.js
│   ├── yadda-2.0.0.js
│   ├── yadda-2.0.1.js
│   ├── yadda-2.1.0.js
│   ├── yadda-2.1.1.js
│   ├── yadda-2.2.0.js
│   ├── yadda-umd-0.10.0.js
│   ├── yadda-umd-0.10.1.js
│   ├── yadda-umd-0.10.10.js
│   ├── yadda-umd-0.10.11.js
│   ├── yadda-umd-0.10.12.js
│   ├── yadda-umd-0.10.13.js
│   ├── yadda-umd-0.10.14.js
│   ├── yadda-umd-0.10.2.js
│   ├── yadda-umd-0.10.3.js
│   ├── yadda-umd-0.10.4.js
│   ├── yadda-umd-0.10.5.js
│   ├── yadda-umd-0.10.6.js
│   ├── yadda-umd-0.10.7.js
│   ├── yadda-umd-0.10.8.js
│   ├── yadda-umd-0.10.9.js
│   ├── yadda-umd-0.11.0.js
│   ├── yadda-umd-0.11.1.js
│   ├── yadda-umd-0.11.2.js
│   ├── yadda-umd-0.11.3.js
│   ├── yadda-umd-0.11.4.js
│   ├── yadda-umd-0.11.5.js
│   ├── yadda-umd-0.11.6.js
│   ├── yadda-umd-0.11.7.js
│   ├── yadda-umd-0.12.0.js
│   ├── yadda-umd-0.12.1.js
│   ├── yadda-umd-0.13.0.js
│   ├── yadda-umd-0.13.1.js
│   ├── yadda-umd-0.14.0.js
│   ├── yadda-umd-0.14.1.js
│   ├── yadda-umd-0.14.2.js
│   ├── yadda-umd-0.15.0.js
│   ├── yadda-umd-0.15.1.js
│   ├── yadda-umd-0.15.2.js
│   ├── yadda-umd-0.15.3.js
│   ├── yadda-umd-0.15.4.js
│   ├── yadda-umd-0.15.5.js
│   ├── yadda-umd-0.16.0.js
│   ├── yadda-umd-0.16.1.js
│   ├── yadda-umd-0.16.2.js
│   ├── yadda-umd-0.16.3.js
│   ├── yadda-umd-0.17.0.js
│   ├── yadda-umd-0.17.1.js
│   ├── yadda-umd-0.17.10.js
│   ├── yadda-umd-0.17.2.js
│   ├── yadda-umd-0.17.3.js
│   ├── yadda-umd-0.17.4.js
│   ├── yadda-umd-0.17.5.js
│   ├── yadda-umd-0.17.6.js
│   ├── yadda-umd-0.17.7.js
│   ├── yadda-umd-0.17.8.js
│   ├── yadda-umd-0.17.9.js
│   ├── yadda-umd-0.18.0.js
│   ├── yadda-umd-0.19.0.js
│   ├── yadda-umd-0.20.0.js
│   ├── yadda-umd-0.21.0.js
│   ├── yadda-umd-0.22.0.js
│   ├── yadda-umd-0.22.1.js
│   ├── yadda-umd-0.22.2.js
│   ├── yadda-umd-0.3.0.js
│   ├── yadda-umd-0.4.0.js
│   ├── yadda-umd-0.4.1.js
│   ├── yadda-umd-0.4.2.js
│   ├── yadda-umd-0.4.3.js
│   ├── yadda-umd-0.4.4.js
│   ├── yadda-umd-0.4.5.js
│   ├── yadda-umd-0.4.6.js
│   ├── yadda-umd-0.4.7.js
│   ├── yadda-umd-0.5.0.js
│   ├── yadda-umd-0.5.1.js
│   ├── yadda-umd-0.5.2.js
│   ├── yadda-umd-0.6.0.js
│   ├── yadda-umd-0.6.1.js
│   ├── yadda-umd-0.6.2.js
│   ├── yadda-umd-0.6.3.js
│   ├── yadda-umd-0.6.4.js
│   ├── yadda-umd-0.6.5.js
│   ├── yadda-umd-0.7.0.js
│   ├── yadda-umd-0.7.1.js
│   ├── yadda-umd-0.7.2.js
│   ├── yadda-umd-0.8.0.js
│   ├── yadda-umd-0.8.1.js
│   ├── yadda-umd-0.8.2.js
│   ├── yadda-umd-0.8.3.js
│   ├── yadda-umd-0.8.4.js
│   ├── yadda-umd-0.8.5.js
│   ├── yadda-umd-0.8.6.js
│   ├── yadda-umd-0.9.0.js
│   ├── yadda-umd-0.9.1.js
│   ├── yadda-umd-0.9.10.js
│   ├── yadda-umd-0.9.11.js
│   ├── yadda-umd-0.9.2.js
│   ├── yadda-umd-0.9.3.js
│   ├── yadda-umd-0.9.4.js
│   ├── yadda-umd-0.9.5.js
│   ├── yadda-umd-0.9.6.js
│   ├── yadda-umd-0.9.7.js
│   ├── yadda-umd-0.9.8.js
│   ├── yadda-umd-0.9.9.js
│   ├── yadda-umd-1.0.0.js
│   ├── yadda-umd-1.0.1.js
│   ├── yadda-umd-1.1.0.js
│   ├── yadda-umd-1.1.1.js
│   ├── yadda-umd-1.2.0.js
│   ├── yadda-umd-1.3.0.js
│   ├── yadda-umd-1.3.1.js
│   ├── yadda-umd-1.4.0.js
│   ├── yadda-umd-1.5.0.js
│   ├── yadda-umd-1.5.1.js
│   ├── yadda-umd-2.0.0.js
│   ├── yadda-umd-2.0.1.js
│   ├── yadda-umd-2.1.0.js
│   ├── yadda-umd-2.1.1.js
│   └── yadda-umd-2.2.0.js
├── examples/
│   ├── basic/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── demo.js
│   │   ├── lib/
│   │   │   └── bottles-library.js
│   │   └── package.json
│   ├── basic-async/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── demo.js
│   │   ├── lib/
│   │   │   └── bottles-library.js
│   │   └── package.json
│   ├── context/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── context.feature
│   │   ├── lib/
│   │   │   ├── discharge-library.js
│   │   │   ├── hospital-library.js
│   │   │   └── patient-library.js
│   │   ├── package.json
│   │   └── test.js
│   ├── data-tables/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── data-tables.feature
│   │   ├── library.js
│   │   ├── package.json
│   │   └── test.js
│   ├── dictionary/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── dictionary-library.js
│   │   ├── features/
│   │   │   └── dictionary.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── jasmine/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── spec/
│   │       ├── bottles-spec.js
│   │       └── support/
│   │           └── jasmine.json
│   ├── localisation/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async-slp/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-async-thenable/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   ├── bottles.feature
│   │   │   └── cups.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-express/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── routes/
│   │   │   ├── bottles.js
│   │   │   └── server.js
│   │   └── test/
│   │       ├── features/
│   │       │   └── bottles.feature
│   │       ├── steps/
│   │       │   └── bottles-library.js
│   │       └── test.js
│   ├── mocha-mixed-async-sync/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-multi-library/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   ├── bottles.feature
│   │   │   └── vases.feature
│   │   ├── lib/
│   │   │   ├── Wall.js
│   │   │   ├── bottle-steps.js
│   │   │   ├── common-steps.js
│   │   │   ├── dictionary.js
│   │   │   └── vase-steps.js
│   │   ├── package.json
│   │   └── test.js
│   ├── mocha-sync/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── multiline-examples-table/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── features/
│   │   │   └── transpile.feature
│   │   ├── package.json
│   │   ├── test.js
│   │   └── transpile-library.js
│   ├── multiline-steps/
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── csv-library.js
│   │   ├── features/
│   │   │   └── multiline-steps.feature
│   │   ├── package.json
│   │   ├── poem-library.js
│   │   ├── test.js
│   │   └── transpile-library.js
│   ├── nightwatch/
│   │   ├── .gitignore
│   │   ├── archive/
│   │   │   ├── logs/
│   │   │   │   └── .gitkeep
│   │   │   └── screenshots/
│   │   │       └── .gitkeep
│   │   ├── nightwatch.conf.js
│   │   ├── package.json
│   │   └── tests/
│   │       ├── assertions/
│   │       │   └── .gitkeep
│   │       ├── commands/
│   │       │   └── .gitkeep
│   │       ├── converters/
│   │       │   ├── filter.js
│   │       │   └── index.js
│   │       ├── features/
│   │       │   └── job-search.spec
│   │       ├── pages/
│   │       │   ├── jobsHome.js
│   │       │   └── jobsSearch.js
│   │       ├── runner/
│   │       │   └── index.js
│   │       └── steps/
│   │           ├── dictionary.js
│   │           ├── jobsHome.js
│   │           └── jobsSearch.js
│   ├── nodeunit/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   ├── qunit/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── lib/
│   │   │   ├── qunit-1.10.0.css
│   │   │   └── qunit-1.10.0.js
│   │   ├── package.json
│   │   └── test.html
│   ├── report-unused-steps/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   ├── example.bat
│   │   │   ├── example.js
│   │   │   └── example.sh
│   │   ├── bottles-library.js
│   │   ├── features/
│   │   │   └── bottles.feature
│   │   ├── package.json
│   │   └── test.js
│   └── resuable-scenarios/
│       ├── README.md
│       ├── bin/
│       │   ├── example.bat
│       │   ├── example.js
│       │   └── example.sh
│       ├── bottles-library.js
│       ├── features/
│       │   └── bottles.feature
│       ├── package.json
│       └── test.js
├── karma.conf.js
├── lib/
│   ├── Array.js
│   ├── Competition.js
│   ├── Context.js
│   ├── Dictionary.js
│   ├── EventBus.js
│   ├── FeatureFileSearch.js
│   ├── FileSearch.js
│   ├── Interpreter.js
│   ├── Library.js
│   ├── Macro.js
│   ├── Platform.js
│   ├── RegularExpression.js
│   ├── StringUtils.js
│   ├── Yadda.js
│   ├── converters/
│   │   ├── date-converter.js
│   │   ├── float-converter.js
│   │   ├── index.js
│   │   ├── integer-converter.js
│   │   ├── list-converter.js
│   │   ├── pass-through-converter.js
│   │   └── table-converter.js
│   ├── fn.js
│   ├── index.js
│   ├── localisation/
│   │   ├── Chinese.js
│   │   ├── Dutch.js
│   │   ├── English.js
│   │   ├── French.js
│   │   ├── German.js
│   │   ├── Language.js
│   │   ├── Norwegian.js
│   │   ├── Pirate.js
│   │   ├── Polish.js
│   │   ├── Portuguese.js
│   │   ├── Russian.js
│   │   ├── Spanish.js
│   │   ├── Ukrainian.js
│   │   └── index.js
│   ├── parsers/
│   │   ├── FeatureFileParser.js
│   │   ├── FeatureParser.js
│   │   ├── StepParser.js
│   │   └── index.js
│   ├── plugins/
│   │   ├── CasperPlugin.js
│   │   ├── index.js
│   │   └── mocha/
│   │       ├── BasePlugin.js
│   │       ├── ScenarioLevelPlugin.js
│   │       └── StepLevelPlugin.js
│   ├── scores/
│   │   ├── LevenshteinDistanceScore.js
│   │   ├── MultiScore.js
│   │   └── SameLibraryScore.js
│   └── shims/
│       ├── index.js
│       ├── karma-fs.js
│       ├── karma-path.js
│       ├── karma-process.js
│       ├── phantom-fs.js
│       ├── phantom-path.js
│       └── phantom-process.js
├── package.json
└── test/
    ├── ArrayTests.js
    ├── CompetitionTests.js
    ├── ContextTests.js
    ├── Counter.js
    ├── DictionaryTests.js
    ├── EventBusTests.js
    ├── FeatureFileSearchTests.js
    ├── FeatureParserTests.js
    ├── FileSearchTests.js
    ├── FunctionalTests.js
    ├── InterpreterTests.js
    ├── LibraryTests.js
    ├── LocalisationTests.js
    ├── MacroTests.js
    ├── RegularExpressionTests.js
    ├── StepParserTests.js
    ├── StringUtilsTests.js
    ├── YaddaTests.js
    ├── converters/
    │   ├── DateConverterTest.js
    │   ├── FloatConverterTest.js
    │   ├── IntegerConverterTest.js
    │   ├── ListConverterTest.js
    │   └── TableConverterTest.js
    ├── features/
    │   ├── annotated/
    │   │   ├── annotated_example_table.feature
    │   │   ├── annotated_feature.feature
    │   │   ├── annotated_feature_non_alphanumeric.feature
    │   │   ├── annotated_multiline_example_table.feature
    │   │   ├── annotated_scenario.feature
    │   │   ├── annotated_scenario_after_background.feature
    │   │   ├── untrimmed_annotated_feature.feature
    │   │   └── untrimmed_annotated_scenario.feature
    │   ├── background/
    │   │   ├── background_with_multiline_step.feature
    │   │   ├── feature_with_background.feature
    │   │   └── malformed_background_annotated.feature
    │   ├── comment/
    │   │   ├── multiline_comment.feature
    │   │   └── singleline_comment.feature
    │   ├── example_table/
    │   │   ├── complex_multiline_example_table.feature
    │   │   ├── example_table.feature
    │   │   ├── example_table_2506.feature
    │   │   ├── example_table_followed_by_annotated_scenario.feature
    │   │   ├── example_table_with_chevrons.feature
    │   │   ├── example_table_with_outer_borders.feature
    │   │   ├── feature_with_background_and_example_table.feature
    │   │   ├── incomplete_example_table_1.feature
    │   │   ├── incomplete_example_table_2.feature
    │   │   ├── incomplete_example_table_3.feature
    │   │   ├── incomplete_example_table_4.feature
    │   │   ├── malformed_example_table_1.feature
    │   │   ├── malformed_example_table_2.feature
    │   │   ├── malformed_example_table_3.feature
    │   │   ├── malformed_multiline_example_table_1.feature
    │   │   ├── malformed_multiline_example_table_2.feature
    │   │   ├── malformed_multiline_example_table_3.feature
    │   │   ├── meta_fields.feature
    │   │   ├── meta_fields_multiline_example_table.feature
    │   │   ├── multiline_example_table_with_outer_border.feature
    │   │   ├── multiline_step_example_table.feature
    │   │   └── simple_multiline_example_table.feature
    │   ├── feature/
    │   │   ├── feature_description.feature
    │   │   ├── incomplete_feature.feature
    │   │   ├── multiple_features.feature
    │   │   └── simple_feature.feature
    │   ├── localisation/
    │   │   └── pirate_feature.feature
    │   └── scenario/
    │       ├── complex_scenario.feature
    │       ├── incomplete_scenario_1.feature
    │       ├── incomplete_scenario_2.feature
    │       ├── incomplete_scenario_3.feature
    │       ├── incomplete_scenario_4.feature
    │       ├── malformed_multiline_scenario_1.feature
    │       ├── malformed_multiline_scenario_2.feature
    │       ├── malformed_multiline_scenario_3.feature
    │       ├── malformed_multiline_scenario_4.feature
    │       ├── malformed_multiline_scenario_5.feature
    │       ├── missing_scenario.feature
    │       ├── multiline_step_scenario.feature
    │       ├── multiline_step_scenario_with_ending_dash.feature
    │       ├── multiline_step_scenario_with_followers.feature
    │       ├── multiline_step_scenario_with_indentation.feature
    │       ├── multiline_step_scenario_with_multiple_blocks.feature
    │       ├── multiline_step_scenario_with_multiple_blocks_and_blank.feature
    │       ├── multiple_scenarios.feature
    │       └── simple_scenario.feature
    ├── filesearch/
    │   ├── exclude.js
    │   ├── include.feature
    │   ├── subdir1/
    │   │   ├── exclude.js
    │   │   └── include.spec
    │   └── subdir2/
    │       └── subdir3/
    │           ├── exclude.js
    │           └── include.specification
    ├── lib/
    │   ├── hospital-steps.js
    │   └── hospital.js
    ├── scores/
    │   └── MultiScoreTests.js
    └── shims/
        ├── FileSystemTests.js
        ├── PathTests.js
        ├── ProcessTests.js
        └── data/
            ├── file3.json
            ├── subdir1/
            │   └── file1.json
            └── subdir2/
                └── file2.feature
Download .txt
Showing preview only (1,933K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (26783 symbols across 268 files)

FILE: dist/yadda-0.10.0.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 356) | function EventBus() {
  function instance (line 389) | function instance() {
  function by_invalid_step (line 541) | function by_invalid_step(result) {
  function validation_report (line 545) | function validation_report(result) {
  function Platform (line 788) | function Platform() {
  function curry (line 955) | function curry(ctx, fn) {
  function invoke (line 962) | function invoke(fn, ctx, args) {
  function is_function (line 966) | function is_function(object) {
  function noop (line 971) | function noop() {}
  function asynchronize (line 973) | function asynchronize(ctx, fn) {
  method soit (line 1087) | get soit() { return this.given }
  method etantdonnees (line 1088) | get etantdonnees() { return this.given }
  method etantdonnee (line 1089) | get etantdonnee() { return this.given }
  method etantdonne (line 1090) | get etantdonne() { return this.given }
  method quand (line 1091) | get quand() { return this.when }
  method lorsque (line 1092) | get lorsque() { return this.when }
  method alors (line 1093) | get alors() { return this.then }
  method gitt (line 1185) | get gitt() { return this.given }
  method når (line 1186) | get når() { return this.when }
  method så (line 1187) | get så() { return this.then }
  method giveth (line 1225) | get giveth() { return this.given }
  method whence (line 1226) | get whence() { return this.when }
  method thence (line 1227) | get thence() { return this.then }
  method sea (line 1272) | get sea() { return this.given }
  method sean (line 1273) | get sean() { return this.given }
  method dado (line 1274) | get dado() { return this.given }
  method dada (line 1275) | get dada() { return this.given }
  method dados (line 1276) | get dados() { return this.given }
  method dadas (line 1277) | get dadas() { return this.given }
  method cuando (line 1278) | get cuando() { return this.when }
  method si (line 1279) | get si() { return this.when }
  method entonces (line 1280) | get entonces() { return this.then }
  function reset (line 1392) | function reset() {
  function split (line 1398) | function split(text) {
  function parse_line (line 1402) | function parse_line(line, index) {
  function stash_annotation (line 1453) | function stash_annotation(event, annotation) {
  function start_feature (line 1459) | function start_feature(event, title) {
  function start_scenario (line 1463) | function start_scenario(event, title) {
  function start_background (line 1498) | function start_background(event, title) {
  function stash_annotation (line 1504) | function stash_annotation(event, annotation) {
  function capture_description (line 1510) | function capture_description(event, text) {
  function end_description (line 1514) | function end_description() {
  function start_scenario (line 1519) | function start_scenario(event, title) {
  function end_description (line 1552) | function end_description() {
  function capture_step (line 1557) | function capture_step(event, text) {
  function start_scenario (line 1561) | function start_scenario(event, data) {
  function validate (line 1566) | function validate() {
  function capture_description (line 1610) | function capture_description(event, text) {
  function end_description (line 1614) | function end_description() {
  function capture_step (line 1619) | function capture_step(event, text) {
  function start_scenario (line 1623) | function start_scenario(event, data) {
  function start_examples (line 1628) | function start_examples(event, data) {
  function validate (line 1633) | function validate() {
  function capture_headings (line 1667) | function capture_headings(event, data) {
  function capture_example (line 1674) | function capture_example(event, data) {
  function split (line 1683) | function split(row, number_of_fields) {
  function start_scenario (line 1691) | function start_scenario(event, data) {
  function validate (line 1696) | function validate() {
  function substitute_all (line 1717) | function substitute_all(example, lines) {
  function substitute (line 1723) | function substitute(example, line) {
  function async_scenarios (line 1853) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1862) | function sync_scenarios(scenarios, next) {
  method mocha (line 1885) | get mocha() {
  method jasmine (line 1893) | get jasmine() {
  function scenarios (line 1926) | function scenarios(scenarios, iterator) {
  function scenarios (line 1965) | function scenarios(scenarios, iterator) {
  function steps (line 1971) | function steps(steps, iterator) {
  function featureFiles (line 2011) | function featureFiles(files, iterator) {
  function features (line 2018) | function features(features, iterator) {
  function describe (line 2024) | function describe(title, subject, iterator) {
  function it_async (line 2031) | function it_async(title, subject, iterator) {
  function it_sync (line 2038) | function it_sync(title, subject, iterator) {
  function is_pending (line 2045) | function is_pending(subject) {
  function scenarios (line 2086) | function scenarios(scenarios, iterator) {
  function scenarios (line 2125) | function scenarios(scenarios, iterator) {
  function steps (line 2131) | function steps(steps, iterator) {
  function get_shim (line 2182) | function get_shim() {
  function isArray (line 2327) | function isArray(xs) {
  function create (line 2426) | function create(prototype, properties) {
  function notObject (line 2451) | function notObject(object) {
  function keysShim (line 2455) | function keysShim(object) {
  function propertyShim (line 2472) | function propertyShim(object) {
  function valueObject (line 2510) | function valueObject(value, key) {
  function normalizeArray (line 2567) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2676) | function trim(arr) {
  function inspect (line 2820) | function inspect(obj, opts) {
  function stylizeWithColor (line 2878) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2890) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2895) | function arrayToHash(array) {
  function formatValue (line 2906) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3012) | function formatPrimitive(ctx, value) {
  function formatError (line 3031) | function formatError(value) {
  function formatArray (line 3036) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3057) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3117) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3140) | function isArray(ar) {
  function isBoolean (line 3145) | function isBoolean(arg) {
  function isNull (line 3150) | function isNull(arg) {
  function isNullOrUndefined (line 3155) | function isNullOrUndefined(arg) {
  function isNumber (line 3160) | function isNumber(arg) {
  function isString (line 3165) | function isString(arg) {
  function isSymbol (line 3170) | function isSymbol(arg) {
  function isUndefined (line 3175) | function isUndefined(arg) {
  function isRegExp (line 3180) | function isRegExp(re) {
  function isObject (line 3185) | function isObject(arg) {
  function isDate (line 3190) | function isDate(d) {
  function isError (line 3195) | function isError(e) {
  function isFunction (line 3200) | function isFunction(arg) {
  function isPrimitive (line 3205) | function isPrimitive(arg) {
  function isBuffer (line 3215) | function isBuffer(arg) {
  function objectToString (line 3224) | function objectToString(o) {
  function pad (line 3229) | function pad(n) {
  function timestamp (line 3238) | function timestamp() {
  function hasOwnProperty (line 3290) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.1.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 356) | function EventBus() {
  function instance (line 389) | function instance() {
  function by_invalid_step (line 541) | function by_invalid_step(result) {
  function validation_report (line 545) | function validation_report(result) {
  function Platform (line 788) | function Platform() {
  function curry (line 955) | function curry(ctx, fn) {
  function invoke (line 962) | function invoke(fn, ctx, args) {
  function is_function (line 966) | function is_function(object) {
  function noop (line 971) | function noop() {}
  function asynchronize (line 973) | function asynchronize(ctx, fn) {
  method soit (line 1087) | get soit() { return this.given }
  method etantdonnees (line 1088) | get etantdonnees() { return this.given }
  method etantdonnee (line 1089) | get etantdonnee() { return this.given }
  method etantdonne (line 1090) | get etantdonne() { return this.given }
  method quand (line 1091) | get quand() { return this.when }
  method lorsque (line 1092) | get lorsque() { return this.when }
  method alors (line 1093) | get alors() { return this.then }
  method gitt (line 1185) | get gitt() { return this.given }
  method når (line 1186) | get når() { return this.when }
  method så (line 1187) | get så() { return this.then }
  method giveth (line 1225) | get giveth() { return this.given }
  method whence (line 1226) | get whence() { return this.when }
  method thence (line 1227) | get thence() { return this.then }
  method sea (line 1272) | get sea() { return this.given }
  method sean (line 1273) | get sean() { return this.given }
  method dado (line 1274) | get dado() { return this.given }
  method dada (line 1275) | get dada() { return this.given }
  method dados (line 1276) | get dados() { return this.given }
  method dadas (line 1277) | get dadas() { return this.given }
  method cuando (line 1278) | get cuando() { return this.when }
  method si (line 1279) | get si() { return this.when }
  method entonces (line 1280) | get entonces() { return this.then }
  function reset (line 1392) | function reset() {
  function split (line 1398) | function split(text) {
  function parse_line (line 1402) | function parse_line(line, index) {
  function stash_annotation (line 1453) | function stash_annotation(event, annotation) {
  function start_feature (line 1459) | function start_feature(event, title) {
  function start_scenario (line 1463) | function start_scenario(event, title) {
  function start_background (line 1498) | function start_background(event, title) {
  function stash_annotation (line 1504) | function stash_annotation(event, annotation) {
  function capture_description (line 1510) | function capture_description(event, text) {
  function end_description (line 1514) | function end_description() {
  function start_scenario (line 1519) | function start_scenario(event, title) {
  function end_description (line 1552) | function end_description() {
  function capture_step (line 1557) | function capture_step(event, text) {
  function start_scenario (line 1561) | function start_scenario(event, data) {
  function validate (line 1566) | function validate() {
  function capture_description (line 1610) | function capture_description(event, text) {
  function end_description (line 1614) | function end_description() {
  function capture_step (line 1619) | function capture_step(event, text) {
  function start_scenario (line 1623) | function start_scenario(event, data) {
  function start_examples (line 1628) | function start_examples(event, data) {
  function validate (line 1633) | function validate() {
  function capture_headings (line 1667) | function capture_headings(event, data) {
  function capture_example (line 1674) | function capture_example(event, data) {
  function split (line 1683) | function split(row, number_of_fields) {
  function start_scenario (line 1691) | function start_scenario(event, data) {
  function validate (line 1696) | function validate() {
  function substitute_all (line 1717) | function substitute_all(example, lines) {
  function substitute (line 1723) | function substitute(example, line) {
  function async_scenarios (line 1853) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1862) | function sync_scenarios(scenarios, next) {
  method mocha (line 1885) | get mocha() {
  method jasmine (line 1893) | get jasmine() {
  function scenarios (line 1926) | function scenarios(scenarios, iterator) {
  function scenarios (line 1965) | function scenarios(scenarios, iterator) {
  function steps (line 1971) | function steps(steps, iterator) {
  function featureFiles (line 2011) | function featureFiles(files, iterator) {
  function features (line 2018) | function features(features, iterator) {
  function describe (line 2024) | function describe(title, subject, iterator) {
  function it_async (line 2031) | function it_async(title, subject, iterator) {
  function it_sync (line 2038) | function it_sync(title, subject, iterator) {
  function is_pending (line 2045) | function is_pending(subject) {
  function scenarios (line 2086) | function scenarios(scenarios, iterator) {
  function scenarios (line 2125) | function scenarios(scenarios, iterator) {
  function steps (line 2131) | function steps(steps, iterator) {
  function get_shim (line 2182) | function get_shim() {
  function isArray (line 2327) | function isArray(xs) {
  function create (line 2426) | function create(prototype, properties) {
  function notObject (line 2451) | function notObject(object) {
  function keysShim (line 2455) | function keysShim(object) {
  function propertyShim (line 2472) | function propertyShim(object) {
  function valueObject (line 2510) | function valueObject(value, key) {
  function normalizeArray (line 2567) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2676) | function trim(arr) {
  function inspect (line 2820) | function inspect(obj, opts) {
  function stylizeWithColor (line 2878) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2890) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2895) | function arrayToHash(array) {
  function formatValue (line 2906) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3012) | function formatPrimitive(ctx, value) {
  function formatError (line 3031) | function formatError(value) {
  function formatArray (line 3036) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3057) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3117) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3140) | function isArray(ar) {
  function isBoolean (line 3145) | function isBoolean(arg) {
  function isNull (line 3150) | function isNull(arg) {
  function isNullOrUndefined (line 3155) | function isNullOrUndefined(arg) {
  function isNumber (line 3160) | function isNumber(arg) {
  function isString (line 3165) | function isString(arg) {
  function isSymbol (line 3170) | function isSymbol(arg) {
  function isUndefined (line 3175) | function isUndefined(arg) {
  function isRegExp (line 3180) | function isRegExp(re) {
  function isObject (line 3185) | function isObject(arg) {
  function isDate (line 3190) | function isDate(d) {
  function isError (line 3195) | function isError(e) {
  function isFunction (line 3200) | function isFunction(arg) {
  function isPrimitive (line 3205) | function isPrimitive(arg) {
  function isBuffer (line 3215) | function isBuffer(arg) {
  function objectToString (line 3224) | function objectToString(o) {
  function pad (line 3229) | function pad(n) {
  function timestamp (line 3238) | function timestamp() {
  function hasOwnProperty (line 3290) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.10.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1040) | function curry(ctx, fn) {
  function invoke (line 1047) | function invoke(fn, ctx, args) {
  function is_function (line 1051) | function is_function(object) {
  function noop (line 1056) | function noop() {}
  function asynchronize (line 1058) | function asynchronize(ctx, fn) {
  method soit (line 1197) | get soit() { return this.given; }
  method etantdonnees (line 1198) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1199) | get etantdonnee() { return this.given; }
  method etantdonne (line 1200) | get etantdonne() { return this.given; }
  method quand (line 1201) | get quand() { return this.when; }
  method lorsque (line 1202) | get lorsque() { return this.when; }
  method alors (line 1203) | get alors() { return this.then; }
  method gitt (line 1300) | get gitt() { return this.given; }
  method når (line 1301) | get når() { return this.when; }
  method så (line 1302) | get så() { return this.then; }
  method giveth (line 1343) | get giveth() { return this.given; }
  method whence (line 1344) | get whence() { return this.when; }
  method thence (line 1345) | get thence() { return this.then; }
  method zakladajac (line 1376) | get zakladajac() { return this.given; }
  method majac (line 1377) | get majac() { return this.given; }
  method jezeli (line 1378) | get jezeli() { return this.when; }
  method jesli (line 1379) | get jesli() { return this.when; }
  method gdy (line 1380) | get gdy() { return this.when; }
  method kiedy (line 1381) | get kiedy() { return this.when; }
  method wtedy (line 1382) | get wtedy() { return this.then; }
  method sea (line 1429) | get sea() { return this.given; }
  method sean (line 1430) | get sean() { return this.given; }
  method dado (line 1431) | get dado() { return this.given; }
  method dada (line 1432) | get dada() { return this.given; }
  method dados (line 1433) | get dados() { return this.given; }
  method dadas (line 1434) | get dadas() { return this.given; }
  method cuando (line 1435) | get cuando() { return this.when; }
  method si (line 1436) | get si() { return this.when; }
  method entonces (line 1437) | get entonces() { return this.then; }
  function reset (line 1562) | function reset() {
  function split (line 1568) | function split(text) {
  function parse_line (line 1572) | function parse_line(line, index) {
  function stash_annotation (line 1626) | function stash_annotation(event, annotation) {
  function start_feature (line 1632) | function start_feature(event, title) {
  function start_scenario (line 1637) | function start_scenario(event, title) {
  function start_background (line 1672) | function start_background(event, title) {
  function stash_annotation (line 1678) | function stash_annotation(event, annotation) {
  function capture_description (line 1684) | function capture_description(event, text) {
  function end_description (line 1688) | function end_description() {
  function start_scenario (line 1693) | function start_scenario(event, title) {
  function validate (line 1700) | function validate() {
  function end_description (line 1731) | function end_description() {
  function capture_step (line 1736) | function capture_step(event, text) {
  function start_scenario (line 1740) | function start_scenario(event, data) {
  function validate (line 1745) | function validate() {
  function capture_description (line 1789) | function capture_description(event, text) {
  function end_description (line 1793) | function end_description() {
  function capture_step (line 1798) | function capture_step(event, text) {
  function start_scenario (line 1802) | function start_scenario(event, data) {
  function start_examples (line 1807) | function start_examples(event, data) {
  function validate (line 1813) | function validate() {
  function capture_headings (line 1847) | function capture_headings(event, data) {
  function capture_example (line 1854) | function capture_example(event, data) {
  function split (line 1863) | function split(row, number_of_fields) {
  function start_scenario (line 1871) | function start_scenario(event, data) {
  function validate (line 1876) | function validate() {
  function substitute_all (line 1897) | function substitute_all(example, lines) {
  function substitute (line 1903) | function substitute(example, line) {
  function async_scenarios (line 2083) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2092) | function sync_scenarios(scenarios, next) {
  method mocha (line 2134) | get mocha() {
  method jasmine (line 2142) | get jasmine() {
  function scenarios (line 2180) | function scenarios(scenarios, iterator) {
  function scenarios (line 2224) | function scenarios(scenarios, iterator) {
  function steps (line 2230) | function steps(steps, iterator) {
  function featureFiles (line 2282) | function featureFiles(files, iterator) {
  function features (line 2288) | function features(features, iterator) {
  function describe (line 2294) | function describe(title, subject, iterator) {
  function it_async (line 2301) | function it_async(title, subject, iterator) {
  function it_sync (line 2308) | function it_sync(title, subject, iterator) {
  function is_pending (line 2315) | function is_pending(subject) {
  function scenarios (line 2364) | function scenarios(scenarios, iterator) {
  function scenarios (line 2408) | function scenarios(scenarios, iterator) {
  function steps (line 2414) | function steps(steps, iterator) {
  function get_shim (line 2476) | function get_shim() {
  function isArray (line 2622) | function isArray(xs) {
  function create (line 2721) | function create(prototype, properties) {
  function notObject (line 2746) | function notObject(object) {
  function keysShim (line 2750) | function keysShim(object) {
  function propertyShim (line 2767) | function propertyShim(object) {
  function valueObject (line 2805) | function valueObject(value, key) {
  function normalizeArray (line 2862) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2971) | function trim(arr) {
  function inspect (line 3115) | function inspect(obj, opts) {
  function stylizeWithColor (line 3173) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3185) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3190) | function arrayToHash(array) {
  function formatValue (line 3201) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3307) | function formatPrimitive(ctx, value) {
  function formatError (line 3326) | function formatError(value) {
  function formatArray (line 3331) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3352) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3412) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3435) | function isArray(ar) {
  function isBoolean (line 3440) | function isBoolean(arg) {
  function isNull (line 3445) | function isNull(arg) {
  function isNullOrUndefined (line 3450) | function isNullOrUndefined(arg) {
  function isNumber (line 3455) | function isNumber(arg) {
  function isString (line 3460) | function isString(arg) {
  function isSymbol (line 3465) | function isSymbol(arg) {
  function isUndefined (line 3470) | function isUndefined(arg) {
  function isRegExp (line 3475) | function isRegExp(re) {
  function isObject (line 3480) | function isObject(arg) {
  function isDate (line 3485) | function isDate(d) {
  function isError (line 3490) | function isError(e) {
  function isFunction (line 3495) | function isFunction(arg) {
  function isPrimitive (line 3500) | function isPrimitive(arg) {
  function isBuffer (line 3510) | function isBuffer(arg) {
  function objectToString (line 3519) | function objectToString(o) {
  function pad (line 3524) | function pad(n) {
  function timestamp (line 3533) | function timestamp() {
  function hasOwnProperty (line 3585) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.11.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1040) | function curry(ctx, fn) {
  function invoke (line 1047) | function invoke(fn, ctx, args) {
  function is_function (line 1051) | function is_function(object) {
  function noop (line 1056) | function noop() {}
  function asynchronize (line 1058) | function asynchronize(ctx, fn) {
  method soit (line 1197) | get soit() { return this.given; }
  method etantdonnees (line 1198) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1199) | get etantdonnee() { return this.given; }
  method etantdonne (line 1200) | get etantdonne() { return this.given; }
  method quand (line 1201) | get quand() { return this.when; }
  method lorsque (line 1202) | get lorsque() { return this.when; }
  method alors (line 1203) | get alors() { return this.then; }
  method gitt (line 1300) | get gitt() { return this.given; }
  method når (line 1301) | get når() { return this.when; }
  method så (line 1302) | get så() { return this.then; }
  method giveth (line 1343) | get giveth() { return this.given; }
  method whence (line 1344) | get whence() { return this.when; }
  method thence (line 1345) | get thence() { return this.then; }
  method zakladajac (line 1376) | get zakladajac() { return this.given; }
  method majac (line 1377) | get majac() { return this.given; }
  method jezeli (line 1378) | get jezeli() { return this.when; }
  method jesli (line 1379) | get jesli() { return this.when; }
  method gdy (line 1380) | get gdy() { return this.when; }
  method kiedy (line 1381) | get kiedy() { return this.when; }
  method wtedy (line 1382) | get wtedy() { return this.then; }
  method sea (line 1429) | get sea() { return this.given; }
  method sean (line 1430) | get sean() { return this.given; }
  method dado (line 1431) | get dado() { return this.given; }
  method dada (line 1432) | get dada() { return this.given; }
  method dados (line 1433) | get dados() { return this.given; }
  method dadas (line 1434) | get dadas() { return this.given; }
  method cuando (line 1435) | get cuando() { return this.when; }
  method si (line 1436) | get si() { return this.when; }
  method entonces (line 1437) | get entonces() { return this.then; }
  function reset (line 1562) | function reset() {
  function split (line 1568) | function split(text) {
  function parse_line (line 1572) | function parse_line(line, index) {
  function stash_annotation (line 1626) | function stash_annotation(event, annotation) {
  function start_feature (line 1632) | function start_feature(event, title) {
  function start_scenario (line 1637) | function start_scenario(event, title) {
  function start_background (line 1672) | function start_background(event, title) {
  function stash_annotation (line 1678) | function stash_annotation(event, annotation) {
  function capture_description (line 1684) | function capture_description(event, text) {
  function end_description (line 1688) | function end_description() {
  function start_scenario (line 1693) | function start_scenario(event, title) {
  function validate (line 1700) | function validate() {
  function end_description (line 1732) | function end_description() {
  function capture_step (line 1737) | function capture_step(event, text) {
  function stash_annotation (line 1741) | function stash_annotation(event, annotation) {
  function start_scenario (line 1746) | function start_scenario(event, data) {
  function validate (line 1751) | function validate() {
  function capture_description (line 1795) | function capture_description(event, text) {
  function end_description (line 1799) | function end_description() {
  function capture_step (line 1804) | function capture_step(event, text) {
  function start_scenario (line 1808) | function start_scenario(event, data) {
  function start_examples (line 1813) | function start_examples(event, data) {
  function validate (line 1819) | function validate() {
  function capture_headings (line 1853) | function capture_headings(event, data) {
  function capture_example (line 1860) | function capture_example(event, data) {
  function split (line 1869) | function split(row, number_of_fields) {
  function start_scenario (line 1877) | function start_scenario(event, data) {
  function validate (line 1882) | function validate() {
  function substitute_all (line 1903) | function substitute_all(example, lines) {
  function substitute (line 1909) | function substitute(example, line) {
  function async_scenarios (line 2089) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2098) | function sync_scenarios(scenarios, next) {
  method mocha (line 2140) | get mocha() {
  method jasmine (line 2148) | get jasmine() {
  function scenarios (line 2186) | function scenarios(scenarios, iterator) {
  function scenarios (line 2230) | function scenarios(scenarios, iterator) {
  function steps (line 2236) | function steps(steps, iterator) {
  function featureFiles (line 2288) | function featureFiles(files, iterator) {
  function features (line 2294) | function features(features, iterator) {
  function describe (line 2300) | function describe(title, subject, iterator) {
  function it_async (line 2307) | function it_async(title, subject, iterator) {
  function it_sync (line 2314) | function it_sync(title, subject, iterator) {
  function is_pending (line 2321) | function is_pending(subject) {
  function scenarios (line 2370) | function scenarios(scenarios, iterator) {
  function scenarios (line 2414) | function scenarios(scenarios, iterator) {
  function steps (line 2420) | function steps(steps, iterator) {
  function get_shim (line 2482) | function get_shim() {
  function isArray (line 2628) | function isArray(xs) {
  function create (line 2727) | function create(prototype, properties) {
  function notObject (line 2752) | function notObject(object) {
  function keysShim (line 2756) | function keysShim(object) {
  function propertyShim (line 2773) | function propertyShim(object) {
  function valueObject (line 2811) | function valueObject(value, key) {
  function normalizeArray (line 2868) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2977) | function trim(arr) {
  function inspect (line 3121) | function inspect(obj, opts) {
  function stylizeWithColor (line 3179) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3191) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3196) | function arrayToHash(array) {
  function formatValue (line 3207) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3313) | function formatPrimitive(ctx, value) {
  function formatError (line 3332) | function formatError(value) {
  function formatArray (line 3337) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3358) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3418) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3441) | function isArray(ar) {
  function isBoolean (line 3446) | function isBoolean(arg) {
  function isNull (line 3451) | function isNull(arg) {
  function isNullOrUndefined (line 3456) | function isNullOrUndefined(arg) {
  function isNumber (line 3461) | function isNumber(arg) {
  function isString (line 3466) | function isString(arg) {
  function isSymbol (line 3471) | function isSymbol(arg) {
  function isUndefined (line 3476) | function isUndefined(arg) {
  function isRegExp (line 3481) | function isRegExp(re) {
  function isObject (line 3486) | function isObject(arg) {
  function isDate (line 3491) | function isDate(d) {
  function isError (line 3496) | function isError(e) {
  function isFunction (line 3501) | function isFunction(arg) {
  function isPrimitive (line 3506) | function isPrimitive(arg) {
  function isBuffer (line 3516) | function isBuffer(arg) {
  function objectToString (line 3525) | function objectToString(o) {
  function pad (line 3530) | function pad(n) {
  function timestamp (line 3539) | function timestamp() {
  function hasOwnProperty (line 3591) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.12.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1040) | function curry(ctx, fn) {
  function invoke (line 1047) | function invoke(fn, ctx, args) {
  function is_function (line 1051) | function is_function(object) {
  function noop (line 1056) | function noop() {}
  function asynchronize (line 1058) | function asynchronize(ctx, fn) {
  method soit (line 1199) | get soit() { return this.given; }
  method etantdonnees (line 1200) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1201) | get etantdonnee() { return this.given; }
  method etantdonne (line 1202) | get etantdonne() { return this.given; }
  method quand (line 1203) | get quand() { return this.when; }
  method lorsque (line 1204) | get lorsque() { return this.when; }
  method alors (line 1205) | get alors() { return this.then; }
  method gitt (line 1303) | get gitt() { return this.given; }
  method når (line 1304) | get når() { return this.when; }
  method så (line 1305) | get så() { return this.then; }
  method giveth (line 1347) | get giveth() { return this.given; }
  method whence (line 1348) | get whence() { return this.when; }
  method thence (line 1349) | get thence() { return this.then; }
  method zakladajac (line 1381) | get zakladajac() { return this.given; }
  method majac (line 1382) | get majac() { return this.given; }
  method jezeli (line 1383) | get jezeli() { return this.when; }
  method jesli (line 1384) | get jesli() { return this.when; }
  method gdy (line 1385) | get gdy() { return this.when; }
  method kiedy (line 1386) | get kiedy() { return this.when; }
  method wtedy (line 1387) | get wtedy() { return this.then; }
  method sea (line 1435) | get sea() { return this.given; }
  method sean (line 1436) | get sean() { return this.given; }
  method dado (line 1437) | get dado() { return this.given; }
  method dada (line 1438) | get dada() { return this.given; }
  method dados (line 1439) | get dados() { return this.given; }
  method dadas (line 1440) | get dadas() { return this.given; }
  method cuando (line 1441) | get cuando() { return this.when; }
  method si (line 1442) | get si() { return this.when; }
  method entonces (line 1443) | get entonces() { return this.then; }
  function reset (line 1568) | function reset() {
  function split (line 1574) | function split(text) {
  function parse_line (line 1578) | function parse_line(line, index) {
  function stash_annotation (line 1632) | function stash_annotation(event, annotation) {
  function start_feature (line 1638) | function start_feature(event, title) {
  function start_scenario (line 1643) | function start_scenario(event, title) {
  function start_background (line 1678) | function start_background(event, title) {
  function stash_annotation (line 1684) | function stash_annotation(event, annotation) {
  function capture_description (line 1690) | function capture_description(event, text) {
  function end_description (line 1694) | function end_description() {
  function start_scenario (line 1699) | function start_scenario(event, title) {
  function validate (line 1706) | function validate() {
  function end_description (line 1738) | function end_description() {
  function capture_step (line 1743) | function capture_step(event, text) {
  function stash_annotation (line 1747) | function stash_annotation(event, annotation) {
  function start_scenario (line 1752) | function start_scenario(event, data) {
  function validate (line 1757) | function validate() {
  function capture_description (line 1801) | function capture_description(event, text) {
  function end_description (line 1805) | function end_description() {
  function capture_step (line 1810) | function capture_step(event, text) {
  function start_scenario (line 1814) | function start_scenario(event, data) {
  function start_examples (line 1819) | function start_examples(event, data) {
  function validate (line 1825) | function validate() {
  function capture_headings (line 1859) | function capture_headings(event, data) {
  function capture_example (line 1866) | function capture_example(event, data) {
  function split (line 1875) | function split(row, number_of_fields) {
  function start_scenario (line 1883) | function start_scenario(event, data) {
  function validate (line 1888) | function validate() {
  function substitute_all (line 1909) | function substitute_all(example, lines) {
  function substitute (line 1915) | function substitute(example, line) {
  function async_scenarios (line 2095) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2104) | function sync_scenarios(scenarios, next) {
  method mocha (line 2146) | get mocha() {
  method jasmine (line 2154) | get jasmine() {
  function scenarios (line 2192) | function scenarios(scenarios, iterator) {
  function scenarios (line 2236) | function scenarios(scenarios, iterator) {
  function steps (line 2242) | function steps(steps, iterator) {
  function featureFiles (line 2294) | function featureFiles(files, iterator) {
  function features (line 2300) | function features(features, iterator) {
  function describe (line 2306) | function describe(title, subject, iterator) {
  function it_async (line 2313) | function it_async(title, subject, iterator) {
  function it_sync (line 2320) | function it_sync(title, subject, iterator) {
  function getIt (line 2327) | function getIt(annotations, next) {
  function getDescribe (line 2333) | function getDescribe(annotations, next) {
  function has_annotation (line 2339) | function has_annotation(annotations, name) {
  function scenarios (line 2388) | function scenarios(scenarios, iterator) {
  function scenarios (line 2432) | function scenarios(scenarios, iterator) {
  function steps (line 2438) | function steps(steps, iterator) {
  function get_shim (line 2500) | function get_shim() {
  function isArray (line 2646) | function isArray(xs) {
  function create (line 2745) | function create(prototype, properties) {
  function notObject (line 2770) | function notObject(object) {
  function keysShim (line 2774) | function keysShim(object) {
  function propertyShim (line 2791) | function propertyShim(object) {
  function valueObject (line 2829) | function valueObject(value, key) {
  function normalizeArray (line 2886) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2995) | function trim(arr) {
  function inspect (line 3139) | function inspect(obj, opts) {
  function stylizeWithColor (line 3197) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3209) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3214) | function arrayToHash(array) {
  function formatValue (line 3225) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3331) | function formatPrimitive(ctx, value) {
  function formatError (line 3350) | function formatError(value) {
  function formatArray (line 3355) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3376) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3436) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3459) | function isArray(ar) {
  function isBoolean (line 3464) | function isBoolean(arg) {
  function isNull (line 3469) | function isNull(arg) {
  function isNullOrUndefined (line 3474) | function isNullOrUndefined(arg) {
  function isNumber (line 3479) | function isNumber(arg) {
  function isString (line 3484) | function isString(arg) {
  function isSymbol (line 3489) | function isSymbol(arg) {
  function isUndefined (line 3494) | function isUndefined(arg) {
  function isRegExp (line 3499) | function isRegExp(re) {
  function isObject (line 3504) | function isObject(arg) {
  function isDate (line 3509) | function isDate(d) {
  function isError (line 3514) | function isError(e) {
  function isFunction (line 3519) | function isFunction(arg) {
  function isPrimitive (line 3524) | function isPrimitive(arg) {
  function isBuffer (line 3534) | function isBuffer(arg) {
  function objectToString (line 3543) | function objectToString(o) {
  function pad (line 3548) | function pad(n) {
  function timestamp (line 3557) | function timestamp() {
  function hasOwnProperty (line 3609) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.13.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1040) | function curry(ctx, fn) {
  function invoke (line 1047) | function invoke(fn, ctx, args) {
  function is_function (line 1051) | function is_function(object) {
  function noop (line 1056) | function noop() {}
  function asynchronize (line 1058) | function asynchronize(ctx, fn) {
  method soit (line 1199) | get soit() { return this.given; }
  method etantdonnees (line 1200) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1201) | get etantdonnee() { return this.given; }
  method etantdonne (line 1202) | get etantdonne() { return this.given; }
  method quand (line 1203) | get quand() { return this.when; }
  method lorsque (line 1204) | get lorsque() { return this.when; }
  method alors (line 1205) | get alors() { return this.then; }
  method gitt (line 1303) | get gitt() { return this.given; }
  method når (line 1304) | get når() { return this.when; }
  method så (line 1305) | get så() { return this.then; }
  method giveth (line 1347) | get giveth() { return this.given; }
  method whence (line 1348) | get whence() { return this.when; }
  method thence (line 1349) | get thence() { return this.then; }
  method zakladajac (line 1381) | get zakladajac() { return this.given; }
  method majac (line 1382) | get majac() { return this.given; }
  method jezeli (line 1383) | get jezeli() { return this.when; }
  method jesli (line 1384) | get jesli() { return this.when; }
  method gdy (line 1385) | get gdy() { return this.when; }
  method kiedy (line 1386) | get kiedy() { return this.when; }
  method wtedy (line 1387) | get wtedy() { return this.then; }
  method sea (line 1435) | get sea() { return this.given; }
  method sean (line 1436) | get sean() { return this.given; }
  method dado (line 1437) | get dado() { return this.given; }
  method dada (line 1438) | get dada() { return this.given; }
  method dados (line 1439) | get dados() { return this.given; }
  method dadas (line 1440) | get dadas() { return this.given; }
  method cuando (line 1441) | get cuando() { return this.when; }
  method si (line 1442) | get si() { return this.when; }
  method entonces (line 1443) | get entonces() { return this.then; }
  function reset (line 1568) | function reset() {
  function split (line 1574) | function split(text) {
  function parse_line (line 1578) | function parse_line(line, index) {
  function stash_annotation (line 1632) | function stash_annotation(event, annotation) {
  function start_feature (line 1638) | function start_feature(event, title) {
  function start_scenario (line 1643) | function start_scenario(event, title) {
  function start_background (line 1678) | function start_background(event, title) {
  function stash_annotation (line 1684) | function stash_annotation(event, annotation) {
  function capture_description (line 1690) | function capture_description(event, text) {
  function end_description (line 1694) | function end_description() {
  function start_scenario (line 1699) | function start_scenario(event, title) {
  function validate (line 1706) | function validate() {
  function end_description (line 1738) | function end_description() {
  function capture_step (line 1743) | function capture_step(event, text) {
  function stash_annotation (line 1747) | function stash_annotation(event, annotation) {
  function start_scenario (line 1752) | function start_scenario(event, data) {
  function validate (line 1757) | function validate() {
  function capture_description (line 1801) | function capture_description(event, text) {
  function end_description (line 1805) | function end_description() {
  function capture_step (line 1810) | function capture_step(event, text) {
  function start_scenario (line 1814) | function start_scenario(event, data) {
  function start_examples (line 1819) | function start_examples(event, data) {
  function validate (line 1825) | function validate() {
  function capture_headings (line 1859) | function capture_headings(event, data) {
  function capture_example (line 1866) | function capture_example(event, data) {
  function split (line 1875) | function split(row, number_of_fields) {
  function start_scenario (line 1883) | function start_scenario(event, data) {
  function validate (line 1888) | function validate() {
  function substitute_all (line 1909) | function substitute_all(example, lines) {
  function substitute (line 1915) | function substitute(example, line) {
  function async_scenarios (line 2095) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2104) | function sync_scenarios(scenarios, next) {
  method mocha (line 2146) | get mocha() {
  method jasmine (line 2154) | get jasmine() {
  function scenarios (line 2192) | function scenarios(scenarios, iterator) {
  function scenarios (line 2236) | function scenarios(scenarios, iterator) {
  function steps (line 2242) | function steps(steps, iterator) {
  function featureFiles (line 2294) | function featureFiles(files, iterator) {
  function features (line 2300) | function features(features, iterator) {
  function describe (line 2306) | function describe(title, subject, iterator) {
  function it_async (line 2313) | function it_async(title, subject, iterator) {
  function it_sync (line 2320) | function it_sync(title, subject, iterator) {
  function getIt (line 2327) | function getIt(annotations, next) {
  function getDescribe (line 2333) | function getDescribe(annotations, next) {
  function has_annotation (line 2339) | function has_annotation(annotations, name) {
  function scenarios (line 2388) | function scenarios(scenarios, iterator) {
  function scenarios (line 2432) | function scenarios(scenarios, iterator) {
  function steps (line 2438) | function steps(steps, iterator) {
  function get_shim (line 2500) | function get_shim() {
  function isArray (line 2646) | function isArray(xs) {
  function create (line 2745) | function create(prototype, properties) {
  function notObject (line 2770) | function notObject(object) {
  function keysShim (line 2774) | function keysShim(object) {
  function propertyShim (line 2791) | function propertyShim(object) {
  function valueObject (line 2829) | function valueObject(value, key) {
  function normalizeArray (line 2886) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2995) | function trim(arr) {
  function inspect (line 3139) | function inspect(obj, opts) {
  function stylizeWithColor (line 3197) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3209) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3214) | function arrayToHash(array) {
  function formatValue (line 3225) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3331) | function formatPrimitive(ctx, value) {
  function formatError (line 3350) | function formatError(value) {
  function formatArray (line 3355) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3376) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3436) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3459) | function isArray(ar) {
  function isBoolean (line 3464) | function isBoolean(arg) {
  function isNull (line 3469) | function isNull(arg) {
  function isNullOrUndefined (line 3474) | function isNullOrUndefined(arg) {
  function isNumber (line 3479) | function isNumber(arg) {
  function isString (line 3484) | function isString(arg) {
  function isSymbol (line 3489) | function isSymbol(arg) {
  function isUndefined (line 3494) | function isUndefined(arg) {
  function isRegExp (line 3499) | function isRegExp(re) {
  function isObject (line 3504) | function isObject(arg) {
  function isDate (line 3509) | function isDate(d) {
  function isError (line 3514) | function isError(e) {
  function isFunction (line 3519) | function isFunction(arg) {
  function isPrimitive (line 3524) | function isPrimitive(arg) {
  function isBuffer (line 3534) | function isBuffer(arg) {
  function objectToString (line 3543) | function objectToString(o) {
  function pad (line 3548) | function pad(n) {
  function timestamp (line 3557) | function timestamp() {
  function hasOwnProperty (line 3609) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.14.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1040) | function curry(ctx, fn) {
  function invoke (line 1047) | function invoke(fn, ctx, args) {
  function is_function (line 1051) | function is_function(object) {
  function noop (line 1056) | function noop() {}
  function asynchronize (line 1058) | function asynchronize(ctx, fn) {
  method soit (line 1199) | get soit() { return this.given; }
  method etantdonnees (line 1200) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1201) | get etantdonnee() { return this.given; }
  method etantdonne (line 1202) | get etantdonne() { return this.given; }
  method quand (line 1203) | get quand() { return this.when; }
  method lorsque (line 1204) | get lorsque() { return this.when; }
  method alors (line 1205) | get alors() { return this.then; }
  method gitt (line 1343) | get gitt() { return this.given; }
  method når (line 1344) | get når() { return this.when; }
  method så (line 1345) | get så() { return this.then; }
  method giveth (line 1387) | get giveth() { return this.given; }
  method whence (line 1388) | get whence() { return this.when; }
  method thence (line 1389) | get thence() { return this.then; }
  method zakladajac (line 1421) | get zakladajac() { return this.given; }
  method majac (line 1422) | get majac() { return this.given; }
  method jezeli (line 1423) | get jezeli() { return this.when; }
  method jesli (line 1424) | get jesli() { return this.when; }
  method gdy (line 1425) | get gdy() { return this.when; }
  method kiedy (line 1426) | get kiedy() { return this.when; }
  method wtedy (line 1427) | get wtedy() { return this.then; }
  method sea (line 1475) | get sea() { return this.given; }
  method sean (line 1476) | get sean() { return this.given; }
  method dado (line 1477) | get dado() { return this.given; }
  method dada (line 1478) | get dada() { return this.given; }
  method dados (line 1479) | get dados() { return this.given; }
  method dadas (line 1480) | get dadas() { return this.given; }
  method cuando (line 1481) | get cuando() { return this.when; }
  method si (line 1482) | get si() { return this.when; }
  method entonces (line 1483) | get entonces() { return this.then; }
  function reset (line 1609) | function reset() {
  function split (line 1615) | function split(text) {
  function parse_line (line 1619) | function parse_line(line, index) {
  function stash_annotation (line 1673) | function stash_annotation(event, annotation) {
  function start_feature (line 1679) | function start_feature(event, title) {
  function start_scenario (line 1684) | function start_scenario(event, title) {
  function start_background (line 1719) | function start_background(event, title) {
  function stash_annotation (line 1725) | function stash_annotation(event, annotation) {
  function capture_description (line 1731) | function capture_description(event, text) {
  function end_description (line 1735) | function end_description() {
  function start_scenario (line 1740) | function start_scenario(event, title) {
  function validate (line 1747) | function validate() {
  function end_description (line 1779) | function end_description() {
  function capture_step (line 1784) | function capture_step(event, text) {
  function stash_annotation (line 1788) | function stash_annotation(event, annotation) {
  function start_scenario (line 1793) | function start_scenario(event, data) {
  function validate (line 1798) | function validate() {
  function capture_description (line 1842) | function capture_description(event, text) {
  function end_description (line 1846) | function end_description() {
  function capture_step (line 1851) | function capture_step(event, text) {
  function start_scenario (line 1855) | function start_scenario(event, data) {
  function start_examples (line 1860) | function start_examples(event, data) {
  function validate (line 1866) | function validate() {
  function capture_headings (line 1900) | function capture_headings(event, data) {
  function capture_example (line 1907) | function capture_example(event, data) {
  function split (line 1916) | function split(row, number_of_fields) {
  function start_scenario (line 1924) | function start_scenario(event, data) {
  function validate (line 1929) | function validate() {
  function substitute_all (line 1950) | function substitute_all(example, lines) {
  function substitute (line 1956) | function substitute(example, line) {
  function async_scenarios (line 2136) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2145) | function sync_scenarios(scenarios, next) {
  method mocha (line 2187) | get mocha() {
  method jasmine (line 2195) | get jasmine() {
  function scenarios (line 2233) | function scenarios(scenarios, iterator) {
  function scenarios (line 2277) | function scenarios(scenarios, iterator) {
  function steps (line 2283) | function steps(steps, iterator) {
  function featureFiles (line 2335) | function featureFiles(files, iterator) {
  function features (line 2341) | function features(features, iterator) {
  function describe (line 2347) | function describe(title, subject, iterator) {
  function it_async (line 2354) | function it_async(title, subject, iterator) {
  function it_sync (line 2361) | function it_sync(title, subject, iterator) {
  function getIt (line 2368) | function getIt(annotations, next) {
  function getDescribe (line 2374) | function getDescribe(annotations, next) {
  function has_annotation (line 2380) | function has_annotation(annotations, name) {
  function scenarios (line 2429) | function scenarios(scenarios, iterator) {
  function scenarios (line 2473) | function scenarios(scenarios, iterator) {
  function steps (line 2479) | function steps(steps, iterator) {
  function get_shim (line 2541) | function get_shim() {
  function isArray (line 2687) | function isArray(xs) {
  function create (line 2786) | function create(prototype, properties) {
  function notObject (line 2811) | function notObject(object) {
  function keysShim (line 2815) | function keysShim(object) {
  function propertyShim (line 2832) | function propertyShim(object) {
  function valueObject (line 2870) | function valueObject(value, key) {
  function normalizeArray (line 2927) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 3036) | function trim(arr) {
  function inspect (line 3180) | function inspect(obj, opts) {
  function stylizeWithColor (line 3238) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3250) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3255) | function arrayToHash(array) {
  function formatValue (line 3266) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3372) | function formatPrimitive(ctx, value) {
  function formatError (line 3391) | function formatError(value) {
  function formatArray (line 3396) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3417) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3477) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3500) | function isArray(ar) {
  function isBoolean (line 3505) | function isBoolean(arg) {
  function isNull (line 3510) | function isNull(arg) {
  function isNullOrUndefined (line 3515) | function isNullOrUndefined(arg) {
  function isNumber (line 3520) | function isNumber(arg) {
  function isString (line 3525) | function isString(arg) {
  function isSymbol (line 3530) | function isSymbol(arg) {
  function isUndefined (line 3535) | function isUndefined(arg) {
  function isRegExp (line 3540) | function isRegExp(re) {
  function isObject (line 3545) | function isObject(arg) {
  function isDate (line 3550) | function isDate(d) {
  function isError (line 3555) | function isError(e) {
  function isFunction (line 3560) | function isFunction(arg) {
  function isPrimitive (line 3565) | function isPrimitive(arg) {
  function isBuffer (line 3575) | function isBuffer(arg) {
  function objectToString (line 3584) | function objectToString(o) {
  function pad (line 3589) | function pad(n) {
  function timestamp (line 3598) | function timestamp() {
  function hasOwnProperty (line 3650) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.2.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 356) | function EventBus() {
  function instance (line 389) | function instance() {
  function by_invalid_step (line 541) | function by_invalid_step(result) {
  function validation_report (line 545) | function validation_report(result) {
  function Platform (line 788) | function Platform() {
  function curry (line 955) | function curry(ctx, fn) {
  function invoke (line 962) | function invoke(fn, ctx, args) {
  function is_function (line 966) | function is_function(object) {
  function noop (line 971) | function noop() {}
  function asynchronize (line 973) | function asynchronize(ctx, fn) {
  method soit (line 1087) | get soit() { return this.given }
  method etantdonnees (line 1088) | get etantdonnees() { return this.given }
  method etantdonnee (line 1089) | get etantdonnee() { return this.given }
  method etantdonne (line 1090) | get etantdonne() { return this.given }
  method quand (line 1091) | get quand() { return this.when }
  method lorsque (line 1092) | get lorsque() { return this.when }
  method alors (line 1093) | get alors() { return this.then }
  method gitt (line 1185) | get gitt() { return this.given }
  method når (line 1186) | get når() { return this.when }
  method så (line 1187) | get så() { return this.then }
  method giveth (line 1225) | get giveth() { return this.given }
  method whence (line 1226) | get whence() { return this.when }
  method thence (line 1227) | get thence() { return this.then }
  method sea (line 1272) | get sea() { return this.given }
  method sean (line 1273) | get sean() { return this.given }
  method dado (line 1274) | get dado() { return this.given }
  method dada (line 1275) | get dada() { return this.given }
  method dados (line 1276) | get dados() { return this.given }
  method dadas (line 1277) | get dadas() { return this.given }
  method cuando (line 1278) | get cuando() { return this.when }
  method si (line 1279) | get si() { return this.when }
  method entonces (line 1280) | get entonces() { return this.then }
  function reset (line 1392) | function reset() {
  function split (line 1398) | function split(text) {
  function parse_line (line 1402) | function parse_line(line, index) {
  function stash_annotation (line 1453) | function stash_annotation(event, annotation) {
  function start_feature (line 1459) | function start_feature(event, title) {
  function start_scenario (line 1463) | function start_scenario(event, title) {
  function start_background (line 1498) | function start_background(event, title) {
  function stash_annotation (line 1504) | function stash_annotation(event, annotation) {
  function capture_description (line 1510) | function capture_description(event, text) {
  function end_description (line 1514) | function end_description() {
  function start_scenario (line 1519) | function start_scenario(event, title) {
  function end_description (line 1552) | function end_description() {
  function capture_step (line 1557) | function capture_step(event, text) {
  function start_scenario (line 1561) | function start_scenario(event, data) {
  function validate (line 1566) | function validate() {
  function capture_description (line 1610) | function capture_description(event, text) {
  function end_description (line 1614) | function end_description() {
  function capture_step (line 1619) | function capture_step(event, text) {
  function start_scenario (line 1623) | function start_scenario(event, data) {
  function start_examples (line 1628) | function start_examples(event, data) {
  function validate (line 1633) | function validate() {
  function capture_headings (line 1667) | function capture_headings(event, data) {
  function capture_example (line 1674) | function capture_example(event, data) {
  function split (line 1683) | function split(row, number_of_fields) {
  function start_scenario (line 1691) | function start_scenario(event, data) {
  function validate (line 1696) | function validate() {
  function substitute_all (line 1717) | function substitute_all(example, lines) {
  function substitute (line 1723) | function substitute(example, line) {
  function async_scenarios (line 1853) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1862) | function sync_scenarios(scenarios, next) {
  method mocha (line 1885) | get mocha() {
  method jasmine (line 1893) | get jasmine() {
  function scenarios (line 1926) | function scenarios(scenarios, iterator) {
  function scenarios (line 1965) | function scenarios(scenarios, iterator) {
  function steps (line 1971) | function steps(steps, iterator) {
  function featureFiles (line 2011) | function featureFiles(files, iterator) {
  function features (line 2018) | function features(features, iterator) {
  function describe (line 2024) | function describe(title, subject, iterator) {
  function it_async (line 2031) | function it_async(title, subject, iterator) {
  function it_sync (line 2038) | function it_sync(title, subject, iterator) {
  function is_pending (line 2045) | function is_pending(subject) {
  function scenarios (line 2086) | function scenarios(scenarios, iterator) {
  function scenarios (line 2125) | function scenarios(scenarios, iterator) {
  function steps (line 2131) | function steps(steps, iterator) {
  function get_shim (line 2182) | function get_shim() {
  function isArray (line 2327) | function isArray(xs) {
  function create (line 2426) | function create(prototype, properties) {
  function notObject (line 2451) | function notObject(object) {
  function keysShim (line 2455) | function keysShim(object) {
  function propertyShim (line 2472) | function propertyShim(object) {
  function valueObject (line 2510) | function valueObject(value, key) {
  function normalizeArray (line 2567) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2676) | function trim(arr) {
  function inspect (line 2820) | function inspect(obj, opts) {
  function stylizeWithColor (line 2878) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2890) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2895) | function arrayToHash(array) {
  function formatValue (line 2906) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3012) | function formatPrimitive(ctx, value) {
  function formatError (line 3031) | function formatError(value) {
  function formatArray (line 3036) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3057) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3117) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3140) | function isArray(ar) {
  function isBoolean (line 3145) | function isBoolean(arg) {
  function isNull (line 3150) | function isNull(arg) {
  function isNullOrUndefined (line 3155) | function isNullOrUndefined(arg) {
  function isNumber (line 3160) | function isNumber(arg) {
  function isString (line 3165) | function isString(arg) {
  function isSymbol (line 3170) | function isSymbol(arg) {
  function isUndefined (line 3175) | function isUndefined(arg) {
  function isRegExp (line 3180) | function isRegExp(re) {
  function isObject (line 3185) | function isObject(arg) {
  function isDate (line 3190) | function isDate(d) {
  function isError (line 3195) | function isError(e) {
  function isFunction (line 3200) | function isFunction(arg) {
  function isPrimitive (line 3205) | function isPrimitive(arg) {
  function isBuffer (line 3215) | function isBuffer(arg) {
  function objectToString (line 3224) | function objectToString(o) {
  function pad (line 3229) | function pad(n) {
  function timestamp (line 3238) | function timestamp() {
  function hasOwnProperty (line 3290) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.3.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 356) | function EventBus() {
  function instance (line 389) | function instance() {
  function by_invalid_step (line 541) | function by_invalid_step(result) {
  function validation_report (line 545) | function validation_report(result) {
  function Platform (line 788) | function Platform() {
  function curry (line 955) | function curry(ctx, fn) {
  function invoke (line 962) | function invoke(fn, ctx, args) {
  function is_function (line 966) | function is_function(object) {
  function noop (line 971) | function noop() {}
  function asynchronize (line 973) | function asynchronize(ctx, fn) {
  method soit (line 1087) | get soit() { return this.given }
  method etantdonnees (line 1088) | get etantdonnees() { return this.given }
  method etantdonnee (line 1089) | get etantdonnee() { return this.given }
  method etantdonne (line 1090) | get etantdonne() { return this.given }
  method quand (line 1091) | get quand() { return this.when }
  method lorsque (line 1092) | get lorsque() { return this.when }
  method alors (line 1093) | get alors() { return this.then }
  method gitt (line 1185) | get gitt() { return this.given }
  method når (line 1186) | get når() { return this.when }
  method så (line 1187) | get så() { return this.then }
  method giveth (line 1225) | get giveth() { return this.given }
  method whence (line 1226) | get whence() { return this.when }
  method thence (line 1227) | get thence() { return this.then }
  method sea (line 1272) | get sea() { return this.given }
  method sean (line 1273) | get sean() { return this.given }
  method dado (line 1274) | get dado() { return this.given }
  method dada (line 1275) | get dada() { return this.given }
  method dados (line 1276) | get dados() { return this.given }
  method dadas (line 1277) | get dadas() { return this.given }
  method cuando (line 1278) | get cuando() { return this.when }
  method si (line 1279) | get si() { return this.when }
  method entonces (line 1280) | get entonces() { return this.then }
  function reset (line 1392) | function reset() {
  function split (line 1398) | function split(text) {
  function parse_line (line 1402) | function parse_line(line, index) {
  function stash_annotation (line 1453) | function stash_annotation(event, annotation) {
  function start_feature (line 1459) | function start_feature(event, title) {
  function start_scenario (line 1463) | function start_scenario(event, title) {
  function start_background (line 1498) | function start_background(event, title) {
  function stash_annotation (line 1504) | function stash_annotation(event, annotation) {
  function capture_description (line 1510) | function capture_description(event, text) {
  function end_description (line 1514) | function end_description() {
  function start_scenario (line 1519) | function start_scenario(event, title) {
  function end_description (line 1552) | function end_description() {
  function capture_step (line 1557) | function capture_step(event, text) {
  function start_scenario (line 1561) | function start_scenario(event, data) {
  function validate (line 1566) | function validate() {
  function capture_description (line 1610) | function capture_description(event, text) {
  function end_description (line 1614) | function end_description() {
  function capture_step (line 1619) | function capture_step(event, text) {
  function start_scenario (line 1623) | function start_scenario(event, data) {
  function start_examples (line 1628) | function start_examples(event, data) {
  function validate (line 1633) | function validate() {
  function capture_headings (line 1667) | function capture_headings(event, data) {
  function capture_example (line 1674) | function capture_example(event, data) {
  function split (line 1683) | function split(row, number_of_fields) {
  function start_scenario (line 1691) | function start_scenario(event, data) {
  function validate (line 1696) | function validate() {
  function substitute_all (line 1717) | function substitute_all(example, lines) {
  function substitute (line 1723) | function substitute(example, line) {
  function async_scenarios (line 1853) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1862) | function sync_scenarios(scenarios, next) {
  method mocha (line 1885) | get mocha() {
  method jasmine (line 1893) | get jasmine() {
  function scenarios (line 1926) | function scenarios(scenarios, iterator) {
  function scenarios (line 1965) | function scenarios(scenarios, iterator) {
  function steps (line 1971) | function steps(steps, iterator) {
  function featureFiles (line 2011) | function featureFiles(files, iterator) {
  function features (line 2018) | function features(features, iterator) {
  function describe (line 2024) | function describe(title, subject, iterator) {
  function it_async (line 2031) | function it_async(title, subject, iterator) {
  function it_sync (line 2038) | function it_sync(title, subject, iterator) {
  function is_pending (line 2045) | function is_pending(subject) {
  function scenarios (line 2086) | function scenarios(scenarios, iterator) {
  function scenarios (line 2125) | function scenarios(scenarios, iterator) {
  function steps (line 2131) | function steps(steps, iterator) {
  function get_shim (line 2182) | function get_shim() {
  function isArray (line 2327) | function isArray(xs) {
  function create (line 2426) | function create(prototype, properties) {
  function notObject (line 2451) | function notObject(object) {
  function keysShim (line 2455) | function keysShim(object) {
  function propertyShim (line 2472) | function propertyShim(object) {
  function valueObject (line 2510) | function valueObject(value, key) {
  function normalizeArray (line 2567) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2676) | function trim(arr) {
  function inspect (line 2820) | function inspect(obj, opts) {
  function stylizeWithColor (line 2878) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2890) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2895) | function arrayToHash(array) {
  function formatValue (line 2906) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3012) | function formatPrimitive(ctx, value) {
  function formatError (line 3031) | function formatError(value) {
  function formatArray (line 3036) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3057) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3117) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3140) | function isArray(ar) {
  function isBoolean (line 3145) | function isBoolean(arg) {
  function isNull (line 3150) | function isNull(arg) {
  function isNullOrUndefined (line 3155) | function isNullOrUndefined(arg) {
  function isNumber (line 3160) | function isNumber(arg) {
  function isString (line 3165) | function isString(arg) {
  function isSymbol (line 3170) | function isSymbol(arg) {
  function isUndefined (line 3175) | function isUndefined(arg) {
  function isRegExp (line 3180) | function isRegExp(re) {
  function isObject (line 3185) | function isObject(arg) {
  function isDate (line 3190) | function isDate(d) {
  function isError (line 3195) | function isError(e) {
  function isFunction (line 3200) | function isFunction(arg) {
  function isPrimitive (line 3205) | function isPrimitive(arg) {
  function isBuffer (line 3215) | function isBuffer(arg) {
  function objectToString (line 3224) | function objectToString(o) {
  function pad (line 3229) | function pad(n) {
  function timestamp (line 3238) | function timestamp() {
  function hasOwnProperty (line 3290) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.4.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method sea (line 1275) | get sea() { return this.given }
  method sean (line 1276) | get sean() { return this.given }
  method dado (line 1277) | get dado() { return this.given }
  method dada (line 1278) | get dada() { return this.given }
  method dados (line 1279) | get dados() { return this.given }
  method dadas (line 1280) | get dadas() { return this.given }
  method cuando (line 1281) | get cuando() { return this.when }
  method si (line 1282) | get si() { return this.when }
  method entonces (line 1283) | get entonces() { return this.then }
  function reset (line 1395) | function reset() {
  function split (line 1401) | function split(text) {
  function parse_line (line 1405) | function parse_line(line, index) {
  function stash_annotation (line 1456) | function stash_annotation(event, annotation) {
  function start_feature (line 1462) | function start_feature(event, title) {
  function start_scenario (line 1466) | function start_scenario(event, title) {
  function start_background (line 1501) | function start_background(event, title) {
  function stash_annotation (line 1507) | function stash_annotation(event, annotation) {
  function capture_description (line 1513) | function capture_description(event, text) {
  function end_description (line 1517) | function end_description() {
  function start_scenario (line 1522) | function start_scenario(event, title) {
  function end_description (line 1555) | function end_description() {
  function capture_step (line 1560) | function capture_step(event, text) {
  function start_scenario (line 1564) | function start_scenario(event, data) {
  function validate (line 1569) | function validate() {
  function capture_description (line 1613) | function capture_description(event, text) {
  function end_description (line 1617) | function end_description() {
  function capture_step (line 1622) | function capture_step(event, text) {
  function start_scenario (line 1626) | function start_scenario(event, data) {
  function start_examples (line 1631) | function start_examples(event, data) {
  function validate (line 1636) | function validate() {
  function capture_headings (line 1670) | function capture_headings(event, data) {
  function capture_example (line 1677) | function capture_example(event, data) {
  function split (line 1686) | function split(row, number_of_fields) {
  function start_scenario (line 1694) | function start_scenario(event, data) {
  function validate (line 1699) | function validate() {
  function substitute_all (line 1720) | function substitute_all(example, lines) {
  function substitute (line 1726) | function substitute(example, line) {
  function async_scenarios (line 1856) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1865) | function sync_scenarios(scenarios, next) {
  method mocha (line 1888) | get mocha() {
  method jasmine (line 1896) | get jasmine() {
  function scenarios (line 1929) | function scenarios(scenarios, iterator) {
  function scenarios (line 1968) | function scenarios(scenarios, iterator) {
  function steps (line 1974) | function steps(steps, iterator) {
  function featureFiles (line 2014) | function featureFiles(files, iterator) {
  function features (line 2021) | function features(features, iterator) {
  function describe (line 2027) | function describe(title, subject, iterator) {
  function it_async (line 2034) | function it_async(title, subject, iterator) {
  function it_sync (line 2041) | function it_sync(title, subject, iterator) {
  function is_pending (line 2048) | function is_pending(subject) {
  function scenarios (line 2089) | function scenarios(scenarios, iterator) {
  function scenarios (line 2128) | function scenarios(scenarios, iterator) {
  function steps (line 2134) | function steps(steps, iterator) {
  function get_shim (line 2185) | function get_shim() {
  function isArray (line 2330) | function isArray(xs) {
  function create (line 2429) | function create(prototype, properties) {
  function notObject (line 2454) | function notObject(object) {
  function keysShim (line 2458) | function keysShim(object) {
  function propertyShim (line 2475) | function propertyShim(object) {
  function valueObject (line 2513) | function valueObject(value, key) {
  function normalizeArray (line 2570) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2679) | function trim(arr) {
  function inspect (line 2823) | function inspect(obj, opts) {
  function stylizeWithColor (line 2881) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2893) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2898) | function arrayToHash(array) {
  function formatValue (line 2909) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3015) | function formatPrimitive(ctx, value) {
  function formatError (line 3034) | function formatError(value) {
  function formatArray (line 3039) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3060) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3120) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3143) | function isArray(ar) {
  function isBoolean (line 3148) | function isBoolean(arg) {
  function isNull (line 3153) | function isNull(arg) {
  function isNullOrUndefined (line 3158) | function isNullOrUndefined(arg) {
  function isNumber (line 3163) | function isNumber(arg) {
  function isString (line 3168) | function isString(arg) {
  function isSymbol (line 3173) | function isSymbol(arg) {
  function isUndefined (line 3178) | function isUndefined(arg) {
  function isRegExp (line 3183) | function isRegExp(re) {
  function isObject (line 3188) | function isObject(arg) {
  function isDate (line 3193) | function isDate(d) {
  function isError (line 3198) | function isError(e) {
  function isFunction (line 3203) | function isFunction(arg) {
  function isPrimitive (line 3208) | function isPrimitive(arg) {
  function isBuffer (line 3218) | function isBuffer(arg) {
  function objectToString (line 3227) | function objectToString(o) {
  function pad (line 3232) | function pad(n) {
  function timestamp (line 3241) | function timestamp() {
  function hasOwnProperty (line 3293) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.5.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method sea (line 1275) | get sea() { return this.given }
  method sean (line 1276) | get sean() { return this.given }
  method dado (line 1277) | get dado() { return this.given }
  method dada (line 1278) | get dada() { return this.given }
  method dados (line 1279) | get dados() { return this.given }
  method dadas (line 1280) | get dadas() { return this.given }
  method cuando (line 1281) | get cuando() { return this.when }
  method si (line 1282) | get si() { return this.when }
  method entonces (line 1283) | get entonces() { return this.then }
  function reset (line 1395) | function reset() {
  function split (line 1401) | function split(text) {
  function parse_line (line 1405) | function parse_line(line, index) {
  function stash_annotation (line 1456) | function stash_annotation(event, annotation) {
  function start_feature (line 1462) | function start_feature(event, title) {
  function start_scenario (line 1466) | function start_scenario(event, title) {
  function start_background (line 1501) | function start_background(event, title) {
  function stash_annotation (line 1507) | function stash_annotation(event, annotation) {
  function capture_description (line 1513) | function capture_description(event, text) {
  function end_description (line 1517) | function end_description() {
  function start_scenario (line 1522) | function start_scenario(event, title) {
  function end_description (line 1555) | function end_description() {
  function capture_step (line 1560) | function capture_step(event, text) {
  function start_scenario (line 1564) | function start_scenario(event, data) {
  function validate (line 1569) | function validate() {
  function capture_description (line 1613) | function capture_description(event, text) {
  function end_description (line 1617) | function end_description() {
  function capture_step (line 1622) | function capture_step(event, text) {
  function start_scenario (line 1626) | function start_scenario(event, data) {
  function start_examples (line 1631) | function start_examples(event, data) {
  function validate (line 1636) | function validate() {
  function capture_headings (line 1670) | function capture_headings(event, data) {
  function capture_example (line 1677) | function capture_example(event, data) {
  function split (line 1686) | function split(row, number_of_fields) {
  function start_scenario (line 1694) | function start_scenario(event, data) {
  function validate (line 1699) | function validate() {
  function substitute_all (line 1720) | function substitute_all(example, lines) {
  function substitute (line 1726) | function substitute(example, line) {
  function async_scenarios (line 1856) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1865) | function sync_scenarios(scenarios, next) {
  method mocha (line 1888) | get mocha() {
  method jasmine (line 1896) | get jasmine() {
  function scenarios (line 1929) | function scenarios(scenarios, iterator) {
  function scenarios (line 1968) | function scenarios(scenarios, iterator) {
  function steps (line 1974) | function steps(steps, iterator) {
  function featureFiles (line 2014) | function featureFiles(files, iterator) {
  function features (line 2021) | function features(features, iterator) {
  function describe (line 2027) | function describe(title, subject, iterator) {
  function it_async (line 2034) | function it_async(title, subject, iterator) {
  function it_sync (line 2041) | function it_sync(title, subject, iterator) {
  function is_pending (line 2048) | function is_pending(subject) {
  function scenarios (line 2092) | function scenarios(scenarios, iterator) {
  function scenarios (line 2131) | function scenarios(scenarios, iterator) {
  function steps (line 2137) | function steps(steps, iterator) {
  function get_shim (line 2188) | function get_shim() {
  function isArray (line 2333) | function isArray(xs) {
  function create (line 2432) | function create(prototype, properties) {
  function notObject (line 2457) | function notObject(object) {
  function keysShim (line 2461) | function keysShim(object) {
  function propertyShim (line 2478) | function propertyShim(object) {
  function valueObject (line 2516) | function valueObject(value, key) {
  function normalizeArray (line 2573) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2682) | function trim(arr) {
  function inspect (line 2826) | function inspect(obj, opts) {
  function stylizeWithColor (line 2884) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2896) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2901) | function arrayToHash(array) {
  function formatValue (line 2912) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3018) | function formatPrimitive(ctx, value) {
  function formatError (line 3037) | function formatError(value) {
  function formatArray (line 3042) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3063) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3123) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3146) | function isArray(ar) {
  function isBoolean (line 3151) | function isBoolean(arg) {
  function isNull (line 3156) | function isNull(arg) {
  function isNullOrUndefined (line 3161) | function isNullOrUndefined(arg) {
  function isNumber (line 3166) | function isNumber(arg) {
  function isString (line 3171) | function isString(arg) {
  function isSymbol (line 3176) | function isSymbol(arg) {
  function isUndefined (line 3181) | function isUndefined(arg) {
  function isRegExp (line 3186) | function isRegExp(re) {
  function isObject (line 3191) | function isObject(arg) {
  function isDate (line 3196) | function isDate(d) {
  function isError (line 3201) | function isError(e) {
  function isFunction (line 3206) | function isFunction(arg) {
  function isPrimitive (line 3211) | function isPrimitive(arg) {
  function isBuffer (line 3221) | function isBuffer(arg) {
  function objectToString (line 3230) | function objectToString(o) {
  function pad (line 3235) | function pad(n) {
  function timestamp (line 3244) | function timestamp() {
  function hasOwnProperty (line 3296) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.6.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method sea (line 1275) | get sea() { return this.given }
  method sean (line 1276) | get sean() { return this.given }
  method dado (line 1277) | get dado() { return this.given }
  method dada (line 1278) | get dada() { return this.given }
  method dados (line 1279) | get dados() { return this.given }
  method dadas (line 1280) | get dadas() { return this.given }
  method cuando (line 1281) | get cuando() { return this.when }
  method si (line 1282) | get si() { return this.when }
  method entonces (line 1283) | get entonces() { return this.then }
  function reset (line 1395) | function reset() {
  function split (line 1401) | function split(text) {
  function parse_line (line 1405) | function parse_line(line, index) {
  function stash_annotation (line 1456) | function stash_annotation(event, annotation) {
  function start_feature (line 1462) | function start_feature(event, title) {
  function start_scenario (line 1466) | function start_scenario(event, title) {
  function start_background (line 1501) | function start_background(event, title) {
  function stash_annotation (line 1507) | function stash_annotation(event, annotation) {
  function capture_description (line 1513) | function capture_description(event, text) {
  function end_description (line 1517) | function end_description() {
  function start_scenario (line 1522) | function start_scenario(event, title) {
  function end_description (line 1555) | function end_description() {
  function capture_step (line 1560) | function capture_step(event, text) {
  function start_scenario (line 1564) | function start_scenario(event, data) {
  function validate (line 1569) | function validate() {
  function capture_description (line 1613) | function capture_description(event, text) {
  function end_description (line 1617) | function end_description() {
  function capture_step (line 1622) | function capture_step(event, text) {
  function start_scenario (line 1626) | function start_scenario(event, data) {
  function start_examples (line 1631) | function start_examples(event, data) {
  function validate (line 1636) | function validate() {
  function capture_headings (line 1670) | function capture_headings(event, data) {
  function capture_example (line 1677) | function capture_example(event, data) {
  function split (line 1686) | function split(row, number_of_fields) {
  function start_scenario (line 1694) | function start_scenario(event, data) {
  function validate (line 1699) | function validate() {
  function substitute_all (line 1720) | function substitute_all(example, lines) {
  function substitute (line 1726) | function substitute(example, line) {
  function async_scenarios (line 1856) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1865) | function sync_scenarios(scenarios, next) {
  method mocha (line 1888) | get mocha() {
  method jasmine (line 1896) | get jasmine() {
  function scenarios (line 1929) | function scenarios(scenarios, iterator) {
  function scenarios (line 1968) | function scenarios(scenarios, iterator) {
  function steps (line 1974) | function steps(steps, iterator) {
  function featureFiles (line 2021) | function featureFiles(files, iterator) {
  function features (line 2028) | function features(features, iterator) {
  function describe (line 2034) | function describe(title, subject, iterator) {
  function it_async (line 2041) | function it_async(title, subject, iterator) {
  function it_sync (line 2048) | function it_sync(title, subject, iterator) {
  function is_pending (line 2055) | function is_pending(subject) {
  function scenarios (line 2099) | function scenarios(scenarios, iterator) {
  function scenarios (line 2138) | function scenarios(scenarios, iterator) {
  function steps (line 2144) | function steps(steps, iterator) {
  function get_shim (line 2203) | function get_shim() {
  function isArray (line 2348) | function isArray(xs) {
  function create (line 2447) | function create(prototype, properties) {
  function notObject (line 2472) | function notObject(object) {
  function keysShim (line 2476) | function keysShim(object) {
  function propertyShim (line 2493) | function propertyShim(object) {
  function valueObject (line 2531) | function valueObject(value, key) {
  function normalizeArray (line 2588) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2697) | function trim(arr) {
  function inspect (line 2841) | function inspect(obj, opts) {
  function stylizeWithColor (line 2899) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2911) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2916) | function arrayToHash(array) {
  function formatValue (line 2927) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3033) | function formatPrimitive(ctx, value) {
  function formatError (line 3052) | function formatError(value) {
  function formatArray (line 3057) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3078) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3138) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3161) | function isArray(ar) {
  function isBoolean (line 3166) | function isBoolean(arg) {
  function isNull (line 3171) | function isNull(arg) {
  function isNullOrUndefined (line 3176) | function isNullOrUndefined(arg) {
  function isNumber (line 3181) | function isNumber(arg) {
  function isString (line 3186) | function isString(arg) {
  function isSymbol (line 3191) | function isSymbol(arg) {
  function isUndefined (line 3196) | function isUndefined(arg) {
  function isRegExp (line 3201) | function isRegExp(re) {
  function isObject (line 3206) | function isObject(arg) {
  function isDate (line 3211) | function isDate(d) {
  function isError (line 3216) | function isError(e) {
  function isFunction (line 3221) | function isFunction(arg) {
  function isPrimitive (line 3226) | function isPrimitive(arg) {
  function isBuffer (line 3236) | function isBuffer(arg) {
  function objectToString (line 3245) | function objectToString(o) {
  function pad (line 3250) | function pad(n) {
  function timestamp (line 3259) | function timestamp() {
  function hasOwnProperty (line 3311) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.7.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method zakladajac (line 1258) | get zakladajac() { return this.given }
  method majac (line 1259) | get majac() { return this.given }
  method jezeli (line 1260) | get jezeli() { return this.when }
  method jesli (line 1261) | get jesli() { return this.when }
  method gdy (line 1262) | get gdy() { return this.when }
  method kiedy (line 1263) | get kiedy() { return this.when }
  method wtedy (line 1264) | get wtedy() { return this.then }
  method sea (line 1308) | get sea() { return this.given }
  method sean (line 1309) | get sean() { return this.given }
  method dado (line 1310) | get dado() { return this.given }
  method dada (line 1311) | get dada() { return this.given }
  method dados (line 1312) | get dados() { return this.given }
  method dadas (line 1313) | get dadas() { return this.given }
  method cuando (line 1314) | get cuando() { return this.when }
  method si (line 1315) | get si() { return this.when }
  method entonces (line 1316) | get entonces() { return this.then }
  function reset (line 1431) | function reset() {
  function split (line 1437) | function split(text) {
  function parse_line (line 1441) | function parse_line(line, index) {
  function stash_annotation (line 1493) | function stash_annotation(event, annotation) {
  function start_feature (line 1499) | function start_feature(event, title) {
  function start_scenario (line 1503) | function start_scenario(event, title) {
  function start_background (line 1538) | function start_background(event, title) {
  function stash_annotation (line 1544) | function stash_annotation(event, annotation) {
  function capture_description (line 1550) | function capture_description(event, text) {
  function end_description (line 1554) | function end_description() {
  function start_scenario (line 1559) | function start_scenario(event, title) {
  function end_description (line 1592) | function end_description() {
  function capture_step (line 1597) | function capture_step(event, text) {
  function start_scenario (line 1601) | function start_scenario(event, data) {
  function validate (line 1606) | function validate() {
  function capture_description (line 1650) | function capture_description(event, text) {
  function end_description (line 1654) | function end_description() {
  function capture_step (line 1659) | function capture_step(event, text) {
  function start_scenario (line 1663) | function start_scenario(event, data) {
  function start_examples (line 1668) | function start_examples(event, data) {
  function validate (line 1673) | function validate() {
  function capture_headings (line 1707) | function capture_headings(event, data) {
  function capture_example (line 1714) | function capture_example(event, data) {
  function split (line 1723) | function split(row, number_of_fields) {
  function start_scenario (line 1731) | function start_scenario(event, data) {
  function validate (line 1736) | function validate() {
  function substitute_all (line 1757) | function substitute_all(example, lines) {
  function substitute (line 1763) | function substitute(example, line) {
  function async_scenarios (line 1893) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1902) | function sync_scenarios(scenarios, next) {
  method mocha (line 1925) | get mocha() {
  method jasmine (line 1933) | get jasmine() {
  function scenarios (line 1966) | function scenarios(scenarios, iterator) {
  function scenarios (line 2005) | function scenarios(scenarios, iterator) {
  function steps (line 2011) | function steps(steps, iterator) {
  function featureFiles (line 2059) | function featureFiles(files, iterator) {
  function features (line 2065) | function features(features, iterator) {
  function describe (line 2071) | function describe(title, subject, iterator) {
  function it_async (line 2078) | function it_async(title, subject, iterator) {
  function it_sync (line 2085) | function it_sync(title, subject, iterator) {
  function is_pending (line 2092) | function is_pending(subject) {
  function scenarios (line 2136) | function scenarios(scenarios, iterator) {
  function scenarios (line 2175) | function scenarios(scenarios, iterator) {
  function steps (line 2181) | function steps(steps, iterator) {
  function get_shim (line 2240) | function get_shim() {
  function isArray (line 2385) | function isArray(xs) {
  function create (line 2484) | function create(prototype, properties) {
  function notObject (line 2509) | function notObject(object) {
  function keysShim (line 2513) | function keysShim(object) {
  function propertyShim (line 2530) | function propertyShim(object) {
  function valueObject (line 2568) | function valueObject(value, key) {
  function normalizeArray (line 2625) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2734) | function trim(arr) {
  function inspect (line 2878) | function inspect(obj, opts) {
  function stylizeWithColor (line 2936) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2948) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2953) | function arrayToHash(array) {
  function formatValue (line 2964) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3070) | function formatPrimitive(ctx, value) {
  function formatError (line 3089) | function formatError(value) {
  function formatArray (line 3094) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3115) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3175) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3198) | function isArray(ar) {
  function isBoolean (line 3203) | function isBoolean(arg) {
  function isNull (line 3208) | function isNull(arg) {
  function isNullOrUndefined (line 3213) | function isNullOrUndefined(arg) {
  function isNumber (line 3218) | function isNumber(arg) {
  function isString (line 3223) | function isString(arg) {
  function isSymbol (line 3228) | function isSymbol(arg) {
  function isUndefined (line 3233) | function isUndefined(arg) {
  function isRegExp (line 3238) | function isRegExp(re) {
  function isObject (line 3243) | function isObject(arg) {
  function isDate (line 3248) | function isDate(d) {
  function isError (line 3253) | function isError(e) {
  function isFunction (line 3258) | function isFunction(arg) {
  function isPrimitive (line 3263) | function isPrimitive(arg) {
  function isBuffer (line 3273) | function isBuffer(arg) {
  function objectToString (line 3282) | function objectToString(o) {
  function pad (line 3287) | function pad(n) {
  function timestamp (line 3296) | function timestamp() {
  function hasOwnProperty (line 3348) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.8.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method zakladajac (line 1258) | get zakladajac() { return this.given }
  method majac (line 1259) | get majac() { return this.given }
  method jezeli (line 1260) | get jezeli() { return this.when }
  method jesli (line 1261) | get jesli() { return this.when }
  method gdy (line 1262) | get gdy() { return this.when }
  method kiedy (line 1263) | get kiedy() { return this.when }
  method wtedy (line 1264) | get wtedy() { return this.then }
  method sea (line 1308) | get sea() { return this.given }
  method sean (line 1309) | get sean() { return this.given }
  method dado (line 1310) | get dado() { return this.given }
  method dada (line 1311) | get dada() { return this.given }
  method dados (line 1312) | get dados() { return this.given }
  method dadas (line 1313) | get dadas() { return this.given }
  method cuando (line 1314) | get cuando() { return this.when }
  method si (line 1315) | get si() { return this.when }
  method entonces (line 1316) | get entonces() { return this.then }
  function reset (line 1431) | function reset() {
  function split (line 1437) | function split(text) {
  function parse_line (line 1441) | function parse_line(line, index) {
  function stash_annotation (line 1493) | function stash_annotation(event, annotation) {
  function start_feature (line 1499) | function start_feature(event, title) {
  function start_scenario (line 1503) | function start_scenario(event, title) {
  function start_background (line 1538) | function start_background(event, title) {
  function stash_annotation (line 1544) | function stash_annotation(event, annotation) {
  function capture_description (line 1550) | function capture_description(event, text) {
  function end_description (line 1554) | function end_description() {
  function start_scenario (line 1559) | function start_scenario(event, title) {
  function validate (line 1566) | function validate() {
  function end_description (line 1597) | function end_description() {
  function capture_step (line 1602) | function capture_step(event, text) {
  function start_scenario (line 1606) | function start_scenario(event, data) {
  function validate (line 1611) | function validate() {
  function capture_description (line 1655) | function capture_description(event, text) {
  function end_description (line 1659) | function end_description() {
  function capture_step (line 1664) | function capture_step(event, text) {
  function start_scenario (line 1668) | function start_scenario(event, data) {
  function start_examples (line 1673) | function start_examples(event, data) {
  function validate (line 1678) | function validate() {
  function capture_headings (line 1712) | function capture_headings(event, data) {
  function capture_example (line 1719) | function capture_example(event, data) {
  function split (line 1728) | function split(row, number_of_fields) {
  function start_scenario (line 1736) | function start_scenario(event, data) {
  function validate (line 1741) | function validate() {
  function substitute_all (line 1762) | function substitute_all(example, lines) {
  function substitute (line 1768) | function substitute(example, line) {
  function async_scenarios (line 1898) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1907) | function sync_scenarios(scenarios, next) {
  method mocha (line 1930) | get mocha() {
  method jasmine (line 1938) | get jasmine() {
  function scenarios (line 1971) | function scenarios(scenarios, iterator) {
  function scenarios (line 2010) | function scenarios(scenarios, iterator) {
  function steps (line 2016) | function steps(steps, iterator) {
  function featureFiles (line 2064) | function featureFiles(files, iterator) {
  function features (line 2070) | function features(features, iterator) {
  function describe (line 2076) | function describe(title, subject, iterator) {
  function it_async (line 2083) | function it_async(title, subject, iterator) {
  function it_sync (line 2090) | function it_sync(title, subject, iterator) {
  function is_pending (line 2097) | function is_pending(subject) {
  function scenarios (line 2141) | function scenarios(scenarios, iterator) {
  function scenarios (line 2180) | function scenarios(scenarios, iterator) {
  function steps (line 2186) | function steps(steps, iterator) {
  function get_shim (line 2245) | function get_shim() {
  function isArray (line 2390) | function isArray(xs) {
  function create (line 2489) | function create(prototype, properties) {
  function notObject (line 2514) | function notObject(object) {
  function keysShim (line 2518) | function keysShim(object) {
  function propertyShim (line 2535) | function propertyShim(object) {
  function valueObject (line 2573) | function valueObject(value, key) {
  function normalizeArray (line 2630) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2739) | function trim(arr) {
  function inspect (line 2883) | function inspect(obj, opts) {
  function stylizeWithColor (line 2941) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2953) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2958) | function arrayToHash(array) {
  function formatValue (line 2969) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3075) | function formatPrimitive(ctx, value) {
  function formatError (line 3094) | function formatError(value) {
  function formatArray (line 3099) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3120) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3180) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3203) | function isArray(ar) {
  function isBoolean (line 3208) | function isBoolean(arg) {
  function isNull (line 3213) | function isNull(arg) {
  function isNullOrUndefined (line 3218) | function isNullOrUndefined(arg) {
  function isNumber (line 3223) | function isNumber(arg) {
  function isString (line 3228) | function isString(arg) {
  function isSymbol (line 3233) | function isSymbol(arg) {
  function isUndefined (line 3238) | function isUndefined(arg) {
  function isRegExp (line 3243) | function isRegExp(re) {
  function isObject (line 3248) | function isObject(arg) {
  function isDate (line 3253) | function isDate(d) {
  function isError (line 3258) | function isError(e) {
  function isFunction (line 3263) | function isFunction(arg) {
  function isPrimitive (line 3268) | function isPrimitive(arg) {
  function isBuffer (line 3278) | function isBuffer(arg) {
  function objectToString (line 3287) | function objectToString(o) {
  function pad (line 3292) | function pad(n) {
  function timestamp (line 3301) | function timestamp() {
  function hasOwnProperty (line 3353) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.10.9.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 22) | function ensure_array(obj) {
  function is_array (line 37) | function is_array(obj) {
  function in_array (line 41) | function in_array(items, item) {
  function flatten (line 49) | function flatten(items) {
  function each (line 57) | function each(items, iterator) {
  function each_async (line 65) | function each_async(items, iterator, callback) {
  function collect (line 79) | function collect(items, iterator) {
  function inject (line 87) | function inject(items, default_value, iterator) {
  function push_all (line 95) | function push_all(items, more_items) {
  function find_all (line 102) | function find_all(items, test) {
  function find (line 112) | function find(items, test) {
  function naked (line 123) | function naked(items) {
  function is_undefined (line 166) | function is_undefined() {
  function is_ambiguous (line 170) | function is_ambiguous() {
  function winning_patterns (line 178) | function winning_patterns() {
  function rank (line 182) | function rank(step, macros) {
  function by_ascending_score (line 191) | function by_ascending_score(a, b) {
  function by_winning_score (line 195) | function by_winning_score(result) {
  function macro_signatures (line 199) | function macro_signatures(result) {
  function EventBus (line 359) | function EventBus() {
  function instance (line 392) | function instance() {
  function by_invalid_step (line 544) | function by_invalid_step(result) {
  function validation_report (line 548) | function validation_report(result) {
  function Platform (line 791) | function Platform() {
  function curry (line 958) | function curry(ctx, fn) {
  function invoke (line 965) | function invoke(fn, ctx, args) {
  function is_function (line 969) | function is_function(object) {
  function noop (line 974) | function noop() {}
  function asynchronize (line 976) | function asynchronize(ctx, fn) {
  method soit (line 1090) | get soit() { return this.given }
  method etantdonnees (line 1091) | get etantdonnees() { return this.given }
  method etantdonnee (line 1092) | get etantdonnee() { return this.given }
  method etantdonne (line 1093) | get etantdonne() { return this.given }
  method quand (line 1094) | get quand() { return this.when }
  method lorsque (line 1095) | get lorsque() { return this.when }
  method alors (line 1096) | get alors() { return this.then }
  method gitt (line 1188) | get gitt() { return this.given }
  method når (line 1189) | get når() { return this.when }
  method så (line 1190) | get så() { return this.then }
  method giveth (line 1228) | get giveth() { return this.given }
  method whence (line 1229) | get whence() { return this.when }
  method thence (line 1230) | get thence() { return this.then }
  method zakladajac (line 1258) | get zakladajac() { return this.given }
  method majac (line 1259) | get majac() { return this.given }
  method jezeli (line 1260) | get jezeli() { return this.when }
  method jesli (line 1261) | get jesli() { return this.when }
  method gdy (line 1262) | get gdy() { return this.when }
  method kiedy (line 1263) | get kiedy() { return this.when }
  method wtedy (line 1264) | get wtedy() { return this.then }
  method sea (line 1308) | get sea() { return this.given }
  method sean (line 1309) | get sean() { return this.given }
  method dado (line 1310) | get dado() { return this.given }
  method dada (line 1311) | get dada() { return this.given }
  method dados (line 1312) | get dados() { return this.given }
  method dadas (line 1313) | get dadas() { return this.given }
  method cuando (line 1314) | get cuando() { return this.when }
  method si (line 1315) | get si() { return this.when }
  method entonces (line 1316) | get entonces() { return this.then }
  function reset (line 1431) | function reset() {
  function split (line 1437) | function split(text) {
  function parse_line (line 1441) | function parse_line(line, index) {
  function stash_annotation (line 1493) | function stash_annotation(event, annotation) {
  function start_feature (line 1499) | function start_feature(event, title) {
  function start_scenario (line 1503) | function start_scenario(event, title) {
  function start_background (line 1538) | function start_background(event, title) {
  function stash_annotation (line 1544) | function stash_annotation(event, annotation) {
  function capture_description (line 1550) | function capture_description(event, text) {
  function end_description (line 1554) | function end_description() {
  function start_scenario (line 1559) | function start_scenario(event, title) {
  function validate (line 1566) | function validate() {
  function end_description (line 1597) | function end_description() {
  function capture_step (line 1602) | function capture_step(event, text) {
  function start_scenario (line 1606) | function start_scenario(event, data) {
  function validate (line 1611) | function validate() {
  function capture_description (line 1655) | function capture_description(event, text) {
  function end_description (line 1659) | function end_description() {
  function capture_step (line 1664) | function capture_step(event, text) {
  function start_scenario (line 1668) | function start_scenario(event, data) {
  function start_examples (line 1673) | function start_examples(event, data) {
  function validate (line 1678) | function validate() {
  function capture_headings (line 1712) | function capture_headings(event, data) {
  function capture_example (line 1719) | function capture_example(event, data) {
  function split (line 1728) | function split(row, number_of_fields) {
  function start_scenario (line 1736) | function start_scenario(event, data) {
  function validate (line 1741) | function validate() {
  function substitute_all (line 1762) | function substitute_all(example, lines) {
  function substitute (line 1768) | function substitute(example, line) {
  function async_scenarios (line 1898) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 1907) | function sync_scenarios(scenarios, next) {
  method mocha (line 1930) | get mocha() {
  method jasmine (line 1938) | get jasmine() {
  function scenarios (line 1971) | function scenarios(scenarios, iterator) {
  function scenarios (line 2010) | function scenarios(scenarios, iterator) {
  function steps (line 2016) | function steps(steps, iterator) {
  function featureFiles (line 2065) | function featureFiles(files, iterator) {
  function features (line 2071) | function features(features, iterator) {
  function describe (line 2077) | function describe(title, subject, iterator) {
  function it_async (line 2084) | function it_async(title, subject, iterator) {
  function it_sync (line 2091) | function it_sync(title, subject, iterator) {
  function is_pending (line 2098) | function is_pending(subject) {
  function scenarios (line 2142) | function scenarios(scenarios, iterator) {
  function scenarios (line 2181) | function scenarios(scenarios, iterator) {
  function steps (line 2187) | function steps(steps, iterator) {
  function get_shim (line 2245) | function get_shim() {
  function isArray (line 2390) | function isArray(xs) {
  function create (line 2489) | function create(prototype, properties) {
  function notObject (line 2514) | function notObject(object) {
  function keysShim (line 2518) | function keysShim(object) {
  function propertyShim (line 2535) | function propertyShim(object) {
  function valueObject (line 2573) | function valueObject(value, key) {
  function normalizeArray (line 2630) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2739) | function trim(arr) {
  function inspect (line 2883) | function inspect(obj, opts) {
  function stylizeWithColor (line 2941) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 2953) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 2958) | function arrayToHash(array) {
  function formatValue (line 2969) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3075) | function formatPrimitive(ctx, value) {
  function formatError (line 3094) | function formatError(value) {
  function formatArray (line 3099) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3120) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3180) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3203) | function isArray(ar) {
  function isBoolean (line 3208) | function isBoolean(arg) {
  function isNull (line 3213) | function isNull(arg) {
  function isNullOrUndefined (line 3218) | function isNullOrUndefined(arg) {
  function isNumber (line 3223) | function isNumber(arg) {
  function isString (line 3228) | function isString(arg) {
  function isSymbol (line 3233) | function isSymbol(arg) {
  function isUndefined (line 3238) | function isUndefined(arg) {
  function isRegExp (line 3243) | function isRegExp(re) {
  function isObject (line 3248) | function isObject(arg) {
  function isDate (line 3253) | function isDate(d) {
  function isError (line 3258) | function isError(e) {
  function isFunction (line 3263) | function isFunction(arg) {
  function isPrimitive (line 3268) | function isPrimitive(arg) {
  function isBuffer (line 3278) | function isBuffer(arg) {
  function objectToString (line 3287) | function objectToString(o) {
  function pad (line 3292) | function pad(n) {
  function timestamp (line 3301) | function timestamp() {
  function hasOwnProperty (line 3353) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.11.0.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 865) | function Platform() {
  function curry (line 1043) | function curry(ctx, fn) {
  function invoke (line 1050) | function invoke(fn, ctx, args) {
  function is_function (line 1054) | function is_function(object) {
  function noop (line 1059) | function noop() {}
  function asynchronize (line 1061) | function asynchronize(ctx, fn) {
  method soit (line 1164) | get soit() { return this.given; }
  method etantdonnees (line 1165) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1166) | get etantdonnee() { return this.given; }
  method etantdonne (line 1167) | get etantdonne() { return this.given; }
  method quand (line 1168) | get quand() { return this.when; }
  method lorsque (line 1169) | get lorsque() { return this.when; }
  method alors (line 1170) | get alors() { return this.then; }
  method gitt (line 1308) | get gitt() { return this.given; }
  method når (line 1309) | get når() { return this.when; }
  method så (line 1310) | get så() { return this.then; }
  method giveth (line 1352) | get giveth() { return this.given; }
  method whence (line 1353) | get whence() { return this.when; }
  method thence (line 1354) | get thence() { return this.then; }
  method zakladajac (line 1386) | get zakladajac() { return this.given; }
  method majac (line 1387) | get majac() { return this.given; }
  method jezeli (line 1388) | get jezeli() { return this.when; }
  method jesli (line 1389) | get jesli() { return this.when; }
  method gdy (line 1390) | get gdy() { return this.when; }
  method kiedy (line 1391) | get kiedy() { return this.when; }
  method wtedy (line 1392) | get wtedy() { return this.then; }
  method sea (line 1440) | get sea() { return this.given; }
  method sean (line 1441) | get sean() { return this.given; }
  method dado (line 1442) | get dado() { return this.given; }
  method dada (line 1443) | get dada() { return this.given; }
  method dados (line 1444) | get dados() { return this.given; }
  method dadas (line 1445) | get dadas() { return this.given; }
  method cuando (line 1446) | get cuando() { return this.when; }
  method si (line 1447) | get si() { return this.when; }
  method entonces (line 1448) | get entonces() { return this.then; }
  function reset (line 1574) | function reset() {
  function split (line 1580) | function split(text) {
  function parse_line (line 1584) | function parse_line(line, index) {
  function stash_annotation (line 1638) | function stash_annotation(event, annotation) {
  function start_feature (line 1644) | function start_feature(event, title) {
  function start_scenario (line 1649) | function start_scenario(event, title) {
  function start_background (line 1684) | function start_background(event, title) {
  function stash_annotation (line 1690) | function stash_annotation(event, annotation) {
  function capture_description (line 1696) | function capture_description(event, text) {
  function end_description (line 1700) | function end_description() {
  function start_scenario (line 1705) | function start_scenario(event, title) {
  function validate (line 1712) | function validate() {
  function end_description (line 1744) | function end_description() {
  function capture_step (line 1749) | function capture_step(event, text) {
  function stash_annotation (line 1753) | function stash_annotation(event, annotation) {
  function start_scenario (line 1758) | function start_scenario(event, data) {
  function validate (line 1763) | function validate() {
  function capture_step (line 1807) | function capture_step(event, text) {
  function start_scenario (line 1811) | function start_scenario(event, data) {
  function start_examples (line 1816) | function start_examples(event, data) {
  function validate (line 1822) | function validate() {
  function capture_headings (line 1856) | function capture_headings(event, data) {
  function capture_example (line 1863) | function capture_example(event, data) {
  function split (line 1872) | function split(row, number_of_fields) {
  function start_scenario (line 1880) | function start_scenario(event, data) {
  function validate (line 1885) | function validate() {
  function substitute_all (line 1906) | function substitute_all(example, lines) {
  function substitute (line 1912) | function substitute(example, line) {
  function async_scenarios (line 2094) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2103) | function sync_scenarios(scenarios, next) {
  method mocha (line 2145) | get mocha() {
  method jasmine (line 2155) | get jasmine() {
  function scenarios (line 2193) | function scenarios(scenarios, iterator) {
  function scenarios (line 2244) | function scenarios(scenarios, iterator) {
  function steps (line 2257) | function steps(steps, iterator) {
  function featureFiles (line 2309) | function featureFiles(files, iterator) {
  function features (line 2315) | function features(features, iterator) {
  function describe (line 2321) | function describe(title, subject, iterator) {
  function it_async (line 2328) | function it_async(title, subject, iterator) {
  function it_sync (line 2335) | function it_sync(title, subject, iterator) {
  function getIt (line 2342) | function getIt(annotations, next) {
  function getDescribe (line 2348) | function getDescribe(annotations, next) {
  function has_annotation (line 2354) | function has_annotation(annotations, name) {
  function scenarios (line 2403) | function scenarios(scenarios, iterator) {
  function scenarios (line 2449) | function scenarios(scenarios, iterator) {
  function steps (line 2456) | function steps(steps, iterator) {
  function step_async (line 2463) | function step_async(step, iterator) {
  function step_sync (line 2475) | function step_sync(step, iterator) {
  function scenarios (line 2523) | function scenarios(scenarios, iterator) {
  function scenarios (line 2574) | function scenarios(scenarios, iterator) {
  function steps (line 2587) | function steps(steps, iterator) {
  function get_shim (line 2650) | function get_shim() {
  function normalizeArray (line 2812) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2921) | function trim(arr) {
  function filter (line 2994) | function filter (xs, f) {
  function noop (line 3058) | function noop() {}

FILE: dist/yadda-0.11.1.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 864) | function Platform() {
  function curry (line 1041) | function curry(ctx, fn) {
  function invoke (line 1048) | function invoke(fn, ctx, args) {
  function is_function (line 1052) | function is_function(object) {
  function noop (line 1057) | function noop() {}
  function asynchronize (line 1059) | function asynchronize(ctx, fn) {
  method soit (line 1200) | get soit() { return this.given; }
  method etantdonnees (line 1201) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1202) | get etantdonnee() { return this.given; }
  method etantdonne (line 1203) | get etantdonne() { return this.given; }
  method quand (line 1204) | get quand() { return this.when; }
  method lorsque (line 1205) | get lorsque() { return this.when; }
  method alors (line 1206) | get alors() { return this.then; }
  method gitt (line 1344) | get gitt() { return this.given; }
  method når (line 1345) | get når() { return this.when; }
  method så (line 1346) | get så() { return this.then; }
  method giveth (line 1388) | get giveth() { return this.given; }
  method whence (line 1389) | get whence() { return this.when; }
  method thence (line 1390) | get thence() { return this.then; }
  method zakladajac (line 1422) | get zakladajac() { return this.given; }
  method majac (line 1423) | get majac() { return this.given; }
  method jezeli (line 1424) | get jezeli() { return this.when; }
  method jesli (line 1425) | get jesli() { return this.when; }
  method gdy (line 1426) | get gdy() { return this.when; }
  method kiedy (line 1427) | get kiedy() { return this.when; }
  method wtedy (line 1428) | get wtedy() { return this.then; }
  method sea (line 1476) | get sea() { return this.given; }
  method sean (line 1477) | get sean() { return this.given; }
  method dado (line 1478) | get dado() { return this.given; }
  method dada (line 1479) | get dada() { return this.given; }
  method dados (line 1480) | get dados() { return this.given; }
  method dadas (line 1481) | get dadas() { return this.given; }
  method cuando (line 1482) | get cuando() { return this.when; }
  method si (line 1483) | get si() { return this.when; }
  method entonces (line 1484) | get entonces() { return this.then; }
  function reset (line 1610) | function reset() {
  function split (line 1616) | function split(text) {
  function parse_line (line 1620) | function parse_line(line, index) {
  function stash_annotation (line 1674) | function stash_annotation(event, annotation) {
  function start_feature (line 1680) | function start_feature(event, title) {
  function start_scenario (line 1685) | function start_scenario(event, title) {
  function start_background (line 1720) | function start_background(event, title) {
  function stash_annotation (line 1726) | function stash_annotation(event, annotation) {
  function capture_description (line 1732) | function capture_description(event, text) {
  function end_description (line 1736) | function end_description() {
  function start_scenario (line 1741) | function start_scenario(event, title) {
  function validate (line 1748) | function validate() {
  function end_description (line 1780) | function end_description() {
  function capture_step (line 1785) | function capture_step(event, text) {
  function stash_annotation (line 1789) | function stash_annotation(event, annotation) {
  function start_scenario (line 1794) | function start_scenario(event, data) {
  function validate (line 1799) | function validate() {
  function capture_step (line 1843) | function capture_step(event, text) {
  function start_scenario (line 1847) | function start_scenario(event, data) {
  function start_examples (line 1852) | function start_examples(event, data) {
  function validate (line 1858) | function validate() {
  function capture_headings (line 1892) | function capture_headings(event, data) {
  function capture_example (line 1899) | function capture_example(event, data) {
  function split (line 1908) | function split(row, number_of_fields) {
  function start_scenario (line 1916) | function start_scenario(event, data) {
  function validate (line 1921) | function validate() {
  function shallowClone (line 1942) | function shallowClone(source) {
  function substitute_all (line 1950) | function substitute_all(example, lines) {
  function substitute (line 1956) | function substitute(example, line) {
  function async_scenarios (line 2136) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2145) | function sync_scenarios(scenarios, next) {
  method mocha (line 2187) | get mocha() {
  method jasmine (line 2197) | get jasmine() {
  function scenarios (line 2235) | function scenarios(scenarios, iterator) {
  function scenarios (line 2286) | function scenarios(scenarios, iterator) {
  function steps (line 2299) | function steps(steps, iterator) {
  function featureFiles (line 2351) | function featureFiles(files, iterator) {
  function features (line 2357) | function features(features, iterator) {
  function describe (line 2363) | function describe(title, subject, iterator) {
  function it_async (line 2370) | function it_async(title, subject, iterator) {
  function it_sync (line 2377) | function it_sync(title, subject, iterator) {
  function getIt (line 2384) | function getIt(annotations, next) {
  function getDescribe (line 2390) | function getDescribe(annotations, next) {
  function has_annotation (line 2396) | function has_annotation(annotations, name) {
  function scenarios (line 2445) | function scenarios(scenarios, iterator) {
  function scenarios (line 2491) | function scenarios(scenarios, iterator) {
  function steps (line 2498) | function steps(steps, iterator) {
  function step_async (line 2505) | function step_async(step, iterator) {
  function step_sync (line 2517) | function step_sync(step, iterator) {
  function scenarios (line 2565) | function scenarios(scenarios, iterator) {
  function scenarios (line 2616) | function scenarios(scenarios, iterator) {
  function steps (line 2629) | function steps(steps, iterator) {
  function get_shim (line 2691) | function get_shim() {
  function isArray (line 2836) | function isArray(xs) {
  function create (line 2935) | function create(prototype, properties) {
  function notObject (line 2960) | function notObject(object) {
  function keysShim (line 2964) | function keysShim(object) {
  function propertyShim (line 2981) | function propertyShim(object) {
  function valueObject (line 3019) | function valueObject(value, key) {
  function normalizeArray (line 3076) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 3185) | function trim(arr) {
  function inspect (line 3329) | function inspect(obj, opts) {
  function stylizeWithColor (line 3387) | function stylizeWithColor(str, styleType) {
  function stylizeNoColor (line 3399) | function stylizeNoColor(str, styleType) {
  function arrayToHash (line 3404) | function arrayToHash(array) {
  function formatValue (line 3415) | function formatValue(ctx, value, recurseTimes) {
  function formatPrimitive (line 3521) | function formatPrimitive(ctx, value) {
  function formatError (line 3540) | function formatError(value) {
  function formatArray (line 3545) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  function formatProperty (line 3566) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
  function reduceToSingleString (line 3626) | function reduceToSingleString(output, base, braces) {
  function isArray (line 3649) | function isArray(ar) {
  function isBoolean (line 3654) | function isBoolean(arg) {
  function isNull (line 3659) | function isNull(arg) {
  function isNullOrUndefined (line 3664) | function isNullOrUndefined(arg) {
  function isNumber (line 3669) | function isNumber(arg) {
  function isString (line 3674) | function isString(arg) {
  function isSymbol (line 3679) | function isSymbol(arg) {
  function isUndefined (line 3684) | function isUndefined(arg) {
  function isRegExp (line 3689) | function isRegExp(re) {
  function isObject (line 3694) | function isObject(arg) {
  function isDate (line 3699) | function isDate(d) {
  function isError (line 3704) | function isError(e) {
  function isFunction (line 3709) | function isFunction(arg) {
  function isPrimitive (line 3714) | function isPrimitive(arg) {
  function isBuffer (line 3724) | function isBuffer(arg) {
  function objectToString (line 3733) | function objectToString(o) {
  function pad (line 3738) | function pad(n) {
  function timestamp (line 3747) | function timestamp() {
  function hasOwnProperty (line 3799) | function hasOwnProperty(obj, prop) {

FILE: dist/yadda-0.11.2.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 865) | function Platform() {
  function curry (line 1043) | function curry(ctx, fn) {
  function invoke (line 1050) | function invoke(fn, ctx, args) {
  function is_function (line 1054) | function is_function(object) {
  function noop (line 1059) | function noop() {}
  function asynchronize (line 1061) | function asynchronize(ctx, fn) {
  method soit (line 1164) | get soit() { return this.given; }
  method etantdonnees (line 1165) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1166) | get etantdonnee() { return this.given; }
  method etantdonne (line 1167) | get etantdonne() { return this.given; }
  method quand (line 1168) | get quand() { return this.when; }
  method lorsque (line 1169) | get lorsque() { return this.when; }
  method alors (line 1170) | get alors() { return this.then; }
  method gitt (line 1308) | get gitt() { return this.given; }
  method når (line 1309) | get når() { return this.when; }
  method så (line 1310) | get så() { return this.then; }
  method giveth (line 1352) | get giveth() { return this.given; }
  method whence (line 1353) | get whence() { return this.when; }
  method thence (line 1354) | get thence() { return this.then; }
  method zakladajac (line 1386) | get zakladajac() { return this.given; }
  method majac (line 1387) | get majac() { return this.given; }
  method jezeli (line 1388) | get jezeli() { return this.when; }
  method jesli (line 1389) | get jesli() { return this.when; }
  method gdy (line 1390) | get gdy() { return this.when; }
  method kiedy (line 1391) | get kiedy() { return this.when; }
  method wtedy (line 1392) | get wtedy() { return this.then; }
  method sea (line 1440) | get sea() { return this.given; }
  method sean (line 1441) | get sean() { return this.given; }
  method dado (line 1442) | get dado() { return this.given; }
  method dada (line 1443) | get dada() { return this.given; }
  method dados (line 1444) | get dados() { return this.given; }
  method dadas (line 1445) | get dadas() { return this.given; }
  method cuando (line 1446) | get cuando() { return this.when; }
  method si (line 1447) | get si() { return this.when; }
  method entonces (line 1448) | get entonces() { return this.then; }
  function reset (line 1574) | function reset() {
  function split (line 1580) | function split(text) {
  function parse_line (line 1584) | function parse_line(line, index) {
  function stash_annotation (line 1638) | function stash_annotation(event, annotation) {
  function start_feature (line 1644) | function start_feature(event, title) {
  function start_scenario (line 1649) | function start_scenario(event, title) {
  function start_background (line 1684) | function start_background(event, title) {
  function stash_annotation (line 1690) | function stash_annotation(event, annotation) {
  function capture_description (line 1696) | function capture_description(event, text) {
  function end_description (line 1700) | function end_description() {
  function start_scenario (line 1705) | function start_scenario(event, title) {
  function validate (line 1712) | function validate() {
  function end_description (line 1744) | function end_description() {
  function capture_step (line 1749) | function capture_step(event, text) {
  function stash_annotation (line 1753) | function stash_annotation(event, annotation) {
  function start_scenario (line 1758) | function start_scenario(event, data) {
  function validate (line 1763) | function validate() {
  function capture_step (line 1807) | function capture_step(event, text) {
  function start_scenario (line 1811) | function start_scenario(event, data) {
  function start_examples (line 1816) | function start_examples(event, data) {
  function validate (line 1822) | function validate() {
  function capture_headings (line 1856) | function capture_headings(event, data) {
  function capture_example (line 1863) | function capture_example(event, data) {
  function split (line 1872) | function split(row, number_of_fields) {
  function start_scenario (line 1880) | function start_scenario(event, data) {
  function validate (line 1885) | function validate() {
  function shallowClone (line 1906) | function shallowClone(source) {
  function substitute_all (line 1914) | function substitute_all(example, lines) {
  function substitute (line 1920) | function substitute(example, line) {
  function async_scenarios (line 2102) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2111) | function sync_scenarios(scenarios, next) {
  method mocha (line 2153) | get mocha() {
  method jasmine (line 2163) | get jasmine() {
  function scenarios (line 2201) | function scenarios(scenarios, iterator) {
  function scenarios (line 2252) | function scenarios(scenarios, iterator) {
  function steps (line 2265) | function steps(steps, iterator) {
  function featureFiles (line 2317) | function featureFiles(files, iterator) {
  function features (line 2323) | function features(features, iterator) {
  function describe (line 2329) | function describe(title, subject, iterator) {
  function it_async (line 2336) | function it_async(title, subject, iterator) {
  function it_sync (line 2343) | function it_sync(title, subject, iterator) {
  function getIt (line 2350) | function getIt(annotations, next) {
  function getDescribe (line 2356) | function getDescribe(annotations, next) {
  function has_annotation (line 2362) | function has_annotation(annotations, name) {
  function scenarios (line 2411) | function scenarios(scenarios, iterator) {
  function scenarios (line 2456) | function scenarios(scenarios, iterator) {
  function steps (line 2462) | function steps(steps, iterator) {
  function scenarios (line 2532) | function scenarios(scenarios, iterator) {
  function scenarios (line 2583) | function scenarios(scenarios, iterator) {
  function steps (line 2596) | function steps(steps, iterator) {
  function get_shim (line 2659) | function get_shim() {
  function normalizeArray (line 2821) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2930) | function trim(arr) {
  function filter (line 3003) | function filter (xs, f) {
  function noop (line 3067) | function noop() {}

FILE: dist/yadda-0.11.3.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 865) | function Platform() {
  function curry (line 1043) | function curry(ctx, fn) {
  function invoke (line 1050) | function invoke(fn, ctx, args) {
  function is_function (line 1054) | function is_function(object) {
  function noop (line 1059) | function noop() {}
  function asynchronize (line 1061) | function asynchronize(ctx, fn) {
  method soit (line 1164) | get soit() { return this.given; }
  method etantdonnees (line 1165) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1166) | get etantdonnee() { return this.given; }
  method etantdonne (line 1167) | get etantdonne() { return this.given; }
  method quand (line 1168) | get quand() { return this.when; }
  method lorsque (line 1169) | get lorsque() { return this.when; }
  method alors (line 1170) | get alors() { return this.then; }
  method gitt (line 1308) | get gitt() { return this.given; }
  method når (line 1309) | get når() { return this.when; }
  method så (line 1310) | get så() { return this.then; }
  method giveth (line 1352) | get giveth() { return this.given; }
  method whence (line 1353) | get whence() { return this.when; }
  method thence (line 1354) | get thence() { return this.then; }
  method zakladajac (line 1386) | get zakladajac() { return this.given; }
  method majac (line 1387) | get majac() { return this.given; }
  method jezeli (line 1388) | get jezeli() { return this.when; }
  method jesli (line 1389) | get jesli() { return this.when; }
  method gdy (line 1390) | get gdy() { return this.when; }
  method kiedy (line 1391) | get kiedy() { return this.when; }
  method wtedy (line 1392) | get wtedy() { return this.then; }
  method sea (line 1440) | get sea() { return this.given; }
  method sean (line 1441) | get sean() { return this.given; }
  method dado (line 1442) | get dado() { return this.given; }
  method dada (line 1443) | get dada() { return this.given; }
  method dados (line 1444) | get dados() { return this.given; }
  method dadas (line 1445) | get dadas() { return this.given; }
  method cuando (line 1446) | get cuando() { return this.when; }
  method si (line 1447) | get si() { return this.when; }
  method entonces (line 1448) | get entonces() { return this.then; }
  function reset (line 1574) | function reset() {
  function split (line 1580) | function split(text) {
  function parse_line (line 1584) | function parse_line(line, index) {
  function stash_annotation (line 1638) | function stash_annotation(event, annotation) {
  function start_feature (line 1644) | function start_feature(event, title) {
  function start_scenario (line 1649) | function start_scenario(event, title) {
  function start_background (line 1684) | function start_background(event, title) {
  function stash_annotation (line 1690) | function stash_annotation(event, annotation) {
  function capture_description (line 1696) | function capture_description(event, text) {
  function end_description (line 1700) | function end_description() {
  function start_scenario (line 1705) | function start_scenario(event, title) {
  function validate (line 1712) | function validate() {
  function end_description (line 1744) | function end_description() {
  function capture_step (line 1749) | function capture_step(event, text) {
  function stash_annotation (line 1753) | function stash_annotation(event, annotation) {
  function start_scenario (line 1758) | function start_scenario(event, data) {
  function validate (line 1763) | function validate() {
  function capture_step (line 1807) | function capture_step(event, text) {
  function start_scenario (line 1811) | function start_scenario(event, data) {
  function start_examples (line 1816) | function start_examples(event, data) {
  function validate (line 1822) | function validate() {
  function capture_headings (line 1856) | function capture_headings(event, data) {
  function capture_example (line 1863) | function capture_example(event, data) {
  function split (line 1872) | function split(row, number_of_fields) {
  function start_scenario (line 1880) | function start_scenario(event, data) {
  function validate (line 1885) | function validate() {
  function shallowClone (line 1906) | function shallowClone(source) {
  function substitute_all (line 1914) | function substitute_all(example, lines) {
  function substitute (line 1920) | function substitute(example, line) {
  function async_scenarios (line 2102) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2111) | function sync_scenarios(scenarios, next) {
  method mocha (line 2153) | get mocha() {
  method jasmine (line 2163) | get jasmine() {
  function scenarios (line 2201) | function scenarios(scenarios, iterator) {
  function scenarios (line 2252) | function scenarios(scenarios, iterator) {
  function steps (line 2265) | function steps(steps, iterator) {
  function featureFiles (line 2317) | function featureFiles(files, iterator) {
  function features (line 2323) | function features(features, iterator) {
  function describe (line 2329) | function describe(title, subject, iterator) {
  function it_async (line 2336) | function it_async(title, subject, iterator) {
  function it_sync (line 2343) | function it_sync(title, subject, iterator) {
  function getIt (line 2350) | function getIt(annotations, next) {
  function getDescribe (line 2356) | function getDescribe(annotations, next) {
  function has_annotation (line 2362) | function has_annotation(annotations, name) {
  function scenarios (line 2411) | function scenarios(scenarios, iterator) {
  function scenarios (line 2456) | function scenarios(scenarios, iterator) {
  function steps (line 2462) | function steps(steps, iterator) {
  function scenarios (line 2532) | function scenarios(scenarios, iterator) {
  function scenarios (line 2583) | function scenarios(scenarios, iterator) {
  function steps (line 2596) | function steps(steps, iterator) {
  function get_shim (line 2659) | function get_shim() {
  function normalizeArray (line 2821) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2930) | function trim(arr) {
  function filter (line 3003) | function filter (xs, f) {
  function noop (line 3067) | function noop() {}

FILE: dist/yadda-0.11.4.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 865) | function Platform() {
  function curry (line 1050) | function curry(ctx, fn) {
  function invoke (line 1057) | function invoke(fn, ctx, args) {
  function is_function (line 1061) | function is_function(object) {
  function noop (line 1066) | function noop() {}
  function asynchronize (line 1068) | function asynchronize(ctx, fn) {
  method soit (line 1171) | get soit() { return this.given; }
  method etantdonnees (line 1172) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1173) | get etantdonnee() { return this.given; }
  method etantdonne (line 1174) | get etantdonne() { return this.given; }
  method quand (line 1175) | get quand() { return this.when; }
  method lorsque (line 1176) | get lorsque() { return this.when; }
  method alors (line 1177) | get alors() { return this.then; }
  method gitt (line 1315) | get gitt() { return this.given; }
  method når (line 1316) | get når() { return this.when; }
  method så (line 1317) | get så() { return this.then; }
  method giveth (line 1359) | get giveth() { return this.given; }
  method whence (line 1360) | get whence() { return this.when; }
  method thence (line 1361) | get thence() { return this.then; }
  method zakladajac (line 1393) | get zakladajac() { return this.given; }
  method majac (line 1394) | get majac() { return this.given; }
  method jezeli (line 1395) | get jezeli() { return this.when; }
  method jesli (line 1396) | get jesli() { return this.when; }
  method gdy (line 1397) | get gdy() { return this.when; }
  method kiedy (line 1398) | get kiedy() { return this.when; }
  method wtedy (line 1399) | get wtedy() { return this.then; }
  method sea (line 1447) | get sea() { return this.given; }
  method sean (line 1448) | get sean() { return this.given; }
  method dado (line 1449) | get dado() { return this.given; }
  method dada (line 1450) | get dada() { return this.given; }
  method dados (line 1451) | get dados() { return this.given; }
  method dadas (line 1452) | get dadas() { return this.given; }
  method cuando (line 1453) | get cuando() { return this.when; }
  method si (line 1454) | get si() { return this.when; }
  method entonces (line 1455) | get entonces() { return this.then; }
  function reset (line 1581) | function reset() {
  function split (line 1587) | function split(text) {
  function parse_line (line 1591) | function parse_line(line, index) {
  function stash_annotation (line 1645) | function stash_annotation(event, annotation) {
  function start_feature (line 1651) | function start_feature(event, title) {
  function start_scenario (line 1656) | function start_scenario(event, title) {
  function start_background (line 1691) | function start_background(event, title) {
  function stash_annotation (line 1697) | function stash_annotation(event, annotation) {
  function capture_description (line 1703) | function capture_description(event, text) {
  function end_description (line 1707) | function end_description() {
  function start_scenario (line 1712) | function start_scenario(event, title) {
  function validate (line 1719) | function validate() {
  function end_description (line 1751) | function end_description() {
  function capture_step (line 1756) | function capture_step(event, text) {
  function stash_annotation (line 1760) | function stash_annotation(event, annotation) {
  function start_scenario (line 1765) | function start_scenario(event, data) {
  function validate (line 1770) | function validate() {
  function capture_step (line 1814) | function capture_step(event, text) {
  function start_scenario (line 1818) | function start_scenario(event, data) {
  function start_examples (line 1823) | function start_examples(event, data) {
  function validate (line 1829) | function validate() {
  function capture_headings (line 1863) | function capture_headings(event, data) {
  function capture_example (line 1870) | function capture_example(event, data) {
  function split (line 1879) | function split(row, number_of_fields) {
  function start_scenario (line 1887) | function start_scenario(event, data) {
  function validate (line 1892) | function validate() {
  function shallowClone (line 1913) | function shallowClone(source) {
  function substitute_all (line 1921) | function substitute_all(example, lines) {
  function substitute (line 1927) | function substitute(example, line) {
  function async_scenarios (line 2109) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2118) | function sync_scenarios(scenarios, next) {
  method mocha (line 2160) | get mocha() {
  method jasmine (line 2170) | get jasmine() {
  function scenarios (line 2208) | function scenarios(scenarios, iterator) {
  function scenarios (line 2259) | function scenarios(scenarios, iterator) {
  function steps (line 2272) | function steps(steps, iterator) {
  function featureFiles (line 2324) | function featureFiles(files, iterator) {
  function features (line 2330) | function features(features, iterator) {
  function describe (line 2336) | function describe(title, subject, iterator) {
  function it_async (line 2343) | function it_async(title, subject, iterator) {
  function it_sync (line 2350) | function it_sync(title, subject, iterator) {
  function getIt (line 2357) | function getIt(annotations, next) {
  function getDescribe (line 2363) | function getDescribe(annotations, next) {
  function has_annotation (line 2369) | function has_annotation(annotations, name) {
  function scenarios (line 2418) | function scenarios(scenarios, iterator) {
  function scenarios (line 2463) | function scenarios(scenarios, iterator) {
  function steps (line 2469) | function steps(steps, iterator) {
  function scenarios (line 2539) | function scenarios(scenarios, iterator) {
  function scenarios (line 2590) | function scenarios(scenarios, iterator) {
  function steps (line 2603) | function steps(steps, iterator) {
  function get_shim (line 2666) | function get_shim() {
  function normalizeArray (line 2828) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2937) | function trim(arr) {
  function filter (line 3010) | function filter (xs, f) {
  function noop (line 3074) | function noop() {}

FILE: dist/yadda-0.11.5.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 25) | function ensure_array(obj) {
  function is_array (line 40) | function is_array(obj) {
  function in_array (line 44) | function in_array(items, item) {
  function flatten (line 52) | function flatten(items) {
  function each (line 60) | function each(items, iterator) {
  function each_async (line 68) | function each_async(items, iterator, callback) {
  function collect (line 82) | function collect(items, iterator) {
  function inject (line 90) | function inject(items, default_value, iterator) {
  function push_all (line 98) | function push_all(items, more_items) {
  function find_all (line 105) | function find_all(items, test) {
  function find (line 115) | function find(items, test) {
  function naked (line 126) | function naked(items) {
  function is_undefined (line 173) | function is_undefined() {
  function is_ambiguous (line 177) | function is_ambiguous() {
  function winning_patterns (line 185) | function winning_patterns() {
  function rank (line 189) | function rank(step, macros) {
  function by_ascending_score (line 198) | function by_ascending_score(a, b) {
  function by_winning_score (line 202) | function by_winning_score(result) {
  function macro_signatures (line 206) | function macro_signatures(result) {
  function EventBus (line 380) | function EventBus() {
  function instance (line 413) | function instance() {
  function by_invalid_step (line 579) | function by_invalid_step(result) {
  function validation_report (line 583) | function validation_report(result) {
  function Platform (line 865) | function Platform() {
  function curry (line 1050) | function curry(ctx, fn) {
  function invoke (line 1057) | function invoke(fn, ctx, args) {
  function is_function (line 1061) | function is_function(object) {
  function noop (line 1066) | function noop() {}
  function asynchronize (line 1068) | function asynchronize(ctx, fn) {
  method soit (line 1171) | get soit() { return this.given; }
  method etantdonnees (line 1172) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1173) | get etantdonnee() { return this.given; }
  method etantdonne (line 1174) | get etantdonne() { return this.given; }
  method quand (line 1175) | get quand() { return this.when; }
  method lorsque (line 1176) | get lorsque() { return this.when; }
  method alors (line 1177) | get alors() { return this.then; }
  method gitt (line 1315) | get gitt() { return this.given; }
  method når (line 1316) | get når() { return this.when; }
  method så (line 1317) | get så() { return this.then; }
  method giveth (line 1359) | get giveth() { return this.given; }
  method whence (line 1360) | get whence() { return this.when; }
  method thence (line 1361) | get thence() { return this.then; }
  method zakladajac (line 1393) | get zakladajac() { return this.given; }
  method majac (line 1394) | get majac() { return this.given; }
  method jezeli (line 1395) | get jezeli() { return this.when; }
  method jesli (line 1396) | get jesli() { return this.when; }
  method gdy (line 1397) | get gdy() { return this.when; }
  method kiedy (line 1398) | get kiedy() { return this.when; }
  method wtedy (line 1399) | get wtedy() { return this.then; }
  method sea (line 1482) | get sea() { return this.given; }
  method sean (line 1483) | get sean() { return this.given; }
  method dado (line 1484) | get dado() { return this.given; }
  method dada (line 1485) | get dada() { return this.given; }
  method dados (line 1486) | get dados() { return this.given; }
  method dadas (line 1487) | get dadas() { return this.given; }
  method cuando (line 1488) | get cuando() { return this.when; }
  method si (line 1489) | get si() { return this.when; }
  method entonces (line 1490) | get entonces() { return this.then; }
  function reset (line 1617) | function reset() {
  function split (line 1623) | function split(text) {
  function parse_line (line 1627) | function parse_line(line, index) {
  function stash_annotation (line 1681) | function stash_annotation(event, annotation) {
  function start_feature (line 1687) | function start_feature(event, title) {
  function start_scenario (line 1692) | function start_scenario(event, title) {
  function start_background (line 1727) | function start_background(event, title) {
  function stash_annotation (line 1733) | function stash_annotation(event, annotation) {
  function capture_description (line 1739) | function capture_description(event, text) {
  function end_description (line 1743) | function end_description() {
  function start_scenario (line 1748) | function start_scenario(event, title) {
  function validate (line 1755) | function validate() {
  function end_description (line 1787) | function end_description() {
  function capture_step (line 1792) | function capture_step(event, text) {
  function stash_annotation (line 1796) | function stash_annotation(event, annotation) {
  function start_scenario (line 1801) | function start_scenario(event, data) {
  function validate (line 1806) | function validate() {
  function capture_step (line 1850) | function capture_step(event, text) {
  function start_scenario (line 1854) | function start_scenario(event, data) {
  function start_examples (line 1859) | function start_examples(event, data) {
  function validate (line 1865) | function validate() {
  function capture_headings (line 1899) | function capture_headings(event, data) {
  function capture_example (line 1906) | function capture_example(event, data) {
  function split (line 1915) | function split(row, number_of_fields) {
  function start_scenario (line 1923) | function start_scenario(event, data) {
  function validate (line 1928) | function validate() {
  function shallowClone (line 1949) | function shallowClone(source) {
  function substitute_all (line 1957) | function substitute_all(example, lines) {
  function substitute (line 1963) | function substitute(example, line) {
  function async_scenarios (line 2145) | function async_scenarios(scenarios, next) {
  function sync_scenarios (line 2154) | function sync_scenarios(scenarios, next) {
  method mocha (line 2196) | get mocha() {
  method jasmine (line 2206) | get jasmine() {
  function scenarios (line 2244) | function scenarios(scenarios, iterator) {
  function scenarios (line 2295) | function scenarios(scenarios, iterator) {
  function steps (line 2308) | function steps(steps, iterator) {
  function featureFiles (line 2360) | function featureFiles(files, iterator) {
  function features (line 2366) | function features(features, iterator) {
  function describe (line 2372) | function describe(title, subject, iterator) {
  function it_async (line 2379) | function it_async(title, subject, iterator) {
  function it_sync (line 2386) | function it_sync(title, subject, iterator) {
  function getIt (line 2393) | function getIt(annotations, next) {
  function getDescribe (line 2399) | function getDescribe(annotations, next) {
  function has_annotation (line 2405) | function has_annotation(annotations, name) {
  function scenarios (line 2454) | function scenarios(scenarios, iterator) {
  function scenarios (line 2499) | function scenarios(scenarios, iterator) {
  function steps (line 2505) | function steps(steps, iterator) {
  function scenarios (line 2575) | function scenarios(scenarios, iterator) {
  function scenarios (line 2626) | function scenarios(scenarios, iterator) {
  function steps (line 2639) | function steps(steps, iterator) {
  function get_shim (line 2702) | function get_shim() {
  function normalizeArray (line 2864) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2973) | function trim(arr) {
  function filter (line 3046) | function filter (xs, f) {
  function noop (line 3110) | function noop() {}

FILE: dist/yadda-0.11.6.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function ensure_array (line 68) | function ensure_array(obj) {
  function is_array (line 83) | function is_array(obj) {
  function in_array (line 87) | function in_array(items, item) {
  function flatten (line 95) | function flatten(items) {
  function each (line 103) | function each(items, iterator) {
  function each_async (line 111) | function each_async(items, iterator, callback) {
  function collect (line 125) | function collect(items, iterator) {
  function inject (line 133) | function inject(items, default_value, iterator) {
  function push_all (line 141) | function push_all(items, more_items) {
  function find_all (line 148) | function find_all(items, test) {
  function find (line 158) | function find(items, test) {
  function naked (line 169) | function naked(items) {
  function is_undefined (line 216) | function is_undefined() {
  function is_ambiguous (line 220) | function is_ambiguous() {
  function winning_patterns (line 228) | function winning_patterns() {
  function rank (line 232) | function rank(step, macros) {
  function by_ascending_score (line 241) | function by_ascending_score(a, b) {
  function by_winning_score (line 245) | function by_winning_score(result) {
  function macro_signatures (line 249) | function macro_signatures(result) {
  function EventBus (line 423) | function EventBus() {
  function instance (line 456) | function instance() {
  function by_invalid_step (line 622) | function by_invalid_step(result) {
  function validation_report (line 626) | function validation_report(result) {
  function Platform (line 908) | function Platform() {
  function curry (line 1093) | function curry(ctx, fn) {
  function invoke (line 1100) | function invoke(fn, ctx, args) {
  function is_function (line 1104) | function is_function(object) {
  function noop (line 1109) | function noop() {}
  function asynchronize (line 1111) | function asynchronize(ctx, fn) {
  method soit (line 1214) | get soit() { return this.given; }
  method etantdonnees (line 1215) | get etantdonnees() { return this.given; }
  method etantdonnee (line 1216) | get etantdonnee() { return this.given; }
  method etantdonne (line 1217) | get etantdonne() { return this.given; }
  method quand (line 1218) | get quand() { return this.when; }
  method lorsque (line 1219) | get lorsque() { return this.when; }
  method alors (line 1220) | get alors() { return this.then; }
  method gitt (line 1358) | get gitt() { return this.given; }
  method når (line 1359) | get når() { return this.when; }
  method så (line 1360) | get så() { return this.then; }
  method giveth (line 1402) | get giveth() { return this.given; }
  method whence (line 1403) | get whence() { return this.when; }
  method thence (line 1404) | get thence() { return this.then; }
  method zakladajac (line 1436) | get zakladajac() { return this.given; }
  method majac (line 1437) | get majac() { return this.given; }
  method jezeli (line 1438) | get jezeli() { return this.when; }
  method jesli (line 1439) | get jesli() { return this.when; }
  method gdy (line 1440) | get gdy() { return this.when; }
  method kiedy (line 1441) | get kiedy() { return this.when; }
  method wtedy (line 1442) | get wtedy() { return this.then; }
  method sea (line 1525) | get sea() { return this.given; }
  method sean (line 1526) | get sean() { return this.given; }
  method dado (line 1527) | get dado() { return this.given; }
  method dada (line 1528) | get dada() { return this.given; }
  method dados (line 1529) | get dados() { return this.given; }
  method dadas (line 1530) | get dadas() { return this.given; }
  method cuando (line 1531) | get cuando() { return this.when; }
  method si (line 1532) | get si() { return this.when; }
  method entonces (line 1533) | get entonces() { return this.then; }
  function reset (line 1660) | function reset() {
  function split (line 1666) | function split(text) {
  function parse_line (line 1670) | function parse_line(line, index) {
  function stash_annotation (line 1724) | function stash_annotation(event, annotation) {
  function start_feature (line 1730) | function start_feature(event, title) {
  function start_scenario (line 1735) | function start_scenario(event, title) {
  function start_background (line 1770) | function start_background(event, title) {
  function stash_annotation (line 1776) | function stash_annotation(event, annotation) {
  function capture_description (line 1782) | function capture_description(event, text) {
  function end_description (line 1786) | function end_description() {
  function start_scenario (line 1791) | function start_scenario(event, title) {
  function validate (line 1798) | function validate() {
  function issue146 (line 1830) | function issue146() {
  function end_description (line 1840) | function end_description() {
  function capture_step (line 1845) | function capture_step(event, text) {
  function stash_annotation (line 1849) | function stash_annotation(event, annotation) {
  function start_scenario (line 1854) | function start_scenario(event, data) {
  function validate (line 1859) | function validate() {
  function capture_step (line 1903) | function capture_step(event, text) {
  function start_scenario (line 1907) | function start_scenario(event, data) {
  function start_examples (line 1912) | function start_examples(event, data) {
  function validate (line 1918) | function validate() {
  function capture_headings (line 1952) | function capture_headings(event, data) {
  function capture_example (line 1959) | function capture_example(event, data) {
  function split (line 1968) | function split(row, number_of_fields) {
  function start_scenario (line 1976) | function start_scenario(event, data) {
  function validate (line 1981) | function validate() {
  function shallowClone (line 2002) | function shallowClone(source) {
  function substitute_all (line 2010) | function substitute_all(example, lines) {
  function substitute (line 2016) | function substitute(example, line) {
  function async_scenarios (line 2198) | function async_scenarios(scena
Copy disabled (too large) Download .json
Condensed preview — 590 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (22,167K chars).
[
  {
    "path": ".codeclimate.yml",
    "chars": 406,
    "preview": "version: '2'\nengines:\n  eslint:\n    enabled: false\n  duplication:\n    enabled: true\n    config:\n      languages:\n       "
  },
  {
    "path": ".eslintignore",
    "chars": 29,
    "preview": "coverage/*\nexamples/*\ndist/*\n"
  },
  {
    "path": ".eslintrc",
    "chars": 181,
    "preview": "{\n  \"extends\": [\"prettier\"],\n  \"plugins\": [\"prettier\"],\n  \"env\": {\n    \"node\": true\n  },\n  \"parserOptions\": {\n    \"ecmaV"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 2751,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/node-js-ci.yml",
    "chars": 1072,
    "preview": "name: Node.js CI\n\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        node-version"
  },
  {
    "path": ".gitignore",
    "chars": 116,
    "preview": "node_modules/\ncoverage/\nnpm-debug.log\n.DS_Store\n*.swp\n*.swo\n*.iml\ncomponents/\nbuild/\n.idea\n.codeclimate\n.nyc_output\n"
  },
  {
    "path": ".husky/.gitignore",
    "chars": 2,
    "preview": "_\n"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 79,
    "preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpm run lint-staged && npm run test\n\n"
  },
  {
    "path": ".jshintignore",
    "chars": 44,
    "preview": "node_modules/*\ndist/*\nexamples/*\ncoverage/*\n"
  },
  {
    "path": ".mocharc.json",
    "chars": 45,
    "preview": "{\n  \"timeout\": \"2000\",\n  \"recursive\": true\n}\n"
  },
  {
    "path": ".npmignore",
    "chars": 117,
    "preview": ".idea\n.codeclimate\n.nyc_output\nbuild\ncomponents\ncoverage\ndist\nnode_modules\nnpm-debug.log\n.DS_Store\n*.swp\n*.swo\n*.iml\n"
  },
  {
    "path": ".prettierignore",
    "chars": 25,
    "preview": "dist\ncoverage\n.nyc_output"
  },
  {
    "path": ".prettierrc.json",
    "chars": 47,
    "preview": "{\n  \"singleQuote\": true,\n  \"printWidth\": 300\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 21600,
    "preview": "# Change Log\n\n## Unreleased\n\n- Restrict dependabot to direct dependencies\n\n## [2.2.0]\n\n- Add support for custom example "
  },
  {
    "path": "README.md",
    "chars": 4553,
    "preview": "# Yadda\n\n[![Gitter](https://badges.gitter.im/acuminous/yadda.svg)](https://gitter.im/acuminous/yadda?utm_source=badge&ut"
  },
  {
    "path": "bin/browserify.js",
    "chars": 765,
    "preview": "'use strict';\n\nvar browserify = require('browserify');\nvar path = require('path');\nvar fs = require('fs');\nvar rootpath "
  },
  {
    "path": "bin/examples.bat",
    "chars": 188,
    "preview": "@echo off\nsetlocal\n\n:run\ncall npm link\npushd examples\nfor /d %%D in (*.*) do echo Running %%D example & pushd %%D & call"
  },
  {
    "path": "bin/examples.js",
    "chars": 267,
    "preview": "'use strict';\n\nvar spawn = require('child_process').spawn;\nvar platform = require('os').platform();\nvar cmd = /^win/.tes"
  },
  {
    "path": "bin/examples.sh",
    "chars": 172,
    "preview": "#!/bin/bash\n\nset -e\n\nnpm link\npushd examples\nfor D in *; do\n    echo \"Running ${D} example\"\n    pushd ${D}\n    npm --log"
  },
  {
    "path": "bin/rev.sh",
    "chars": 840,
    "preview": "#!/bin/bash\nset -e\n\nVERSION_PATTERN=[0-9]+\\\\.[0-9]+\\\\.[0-9]+\nVERSION=$1\n\nif [ -z \"$VERSION\" ]; then\n    echo \"usage: rev"
  },
  {
    "path": "bower.json",
    "chars": 463,
    "preview": "{\n  \"name\": \"yadda\",\n  \"version\": \"2.2.0\",\n  \"homepage\": \"https://github.com/acuminous/yadda\",\n  \"description\": \"A true "
  },
  {
    "path": "component.json",
    "chars": 1803,
    "preview": "{\n  \"name\": \"yadda\",\n  \"version\": \"2.2.0\",\n  \"description\": \"A true BDD framework for JavaScript\",\n  \"repo\": \"acuminous/"
  },
  {
    "path": "dist/yadda-0.10.0.js",
    "chars": 105286,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.1.js",
    "chars": 105254,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.10.js",
    "chars": 112460,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.11.js",
    "chars": 112622,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.12.js",
    "chars": 113192,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.13.js",
    "chars": 113192,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.14.js",
    "chars": 114712,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.2.js",
    "chars": 105270,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.3.js",
    "chars": 105270,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.4.js",
    "chars": 105534,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.5.js",
    "chars": 105683,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.6.js",
    "chars": 106117,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.7.js",
    "chars": 107451,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.8.js",
    "chars": 107606,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.10.9.js",
    "chars": 107577,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.0.js",
    "chars": 101019,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.1.js",
    "chars": 121312,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.2.js",
    "chars": 101264,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.3.js",
    "chars": 101264,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.4.js",
    "chars": 101694,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.5.js",
    "chars": 102840,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.6.js",
    "chars": 103857,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.11.7.js",
    "chars": 105778,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.12.0.js",
    "chars": 92360,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.12.1.js",
    "chars": 92450,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.13.0.js",
    "chars": 96070,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.13.1.js",
    "chars": 95720,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.14.0.js",
    "chars": 102728,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.14.1.js",
    "chars": 103239,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.14.2.js",
    "chars": 104379,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.0.js",
    "chars": 107782,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.1.js",
    "chars": 108201,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.2.js",
    "chars": 112362,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.3.js",
    "chars": 112373,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.4.js",
    "chars": 113760,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.15.5.js",
    "chars": 113843,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.16.0.js",
    "chars": 113963,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.16.1.js",
    "chars": 114007,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.16.2.js",
    "chars": 117249,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.16.3.js",
    "chars": 117454,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.0.js",
    "chars": 117506,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.1.js",
    "chars": 118402,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.10.js",
    "chars": 129562,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.2.js",
    "chars": 126765,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.3.js",
    "chars": 128913,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.4.js",
    "chars": 128915,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.5.js",
    "chars": 129165,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.6.js",
    "chars": 129261,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.7.js",
    "chars": 128941,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.8.js",
    "chars": 129079,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.17.9.js",
    "chars": 129079,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.18.0.js",
    "chars": 129561,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.19.0.js",
    "chars": 129565,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.20.0.js",
    "chars": 129545,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.21.0.js",
    "chars": 129581,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.22.0.js",
    "chars": 129609,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.22.1.js",
    "chars": 132867,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.22.2.js",
    "chars": 132810,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.3.0.js",
    "chars": 30351,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.0.js",
    "chars": 31439,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.1.js",
    "chars": 33223,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.2.js",
    "chars": 33239,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.3.js",
    "chars": 33713,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.4.js",
    "chars": 33178,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.5.js",
    "chars": 33134,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.6.js",
    "chars": 33424,
    "preview": "require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o"
  },
  {
    "path": "dist/yadda-0.4.7.js",
    "chars": 33414,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.5.0.js",
    "chars": 33457,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.5.1.js",
    "chars": 36358,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.5.2.js",
    "chars": 36545,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.0.js",
    "chars": 36300,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.1.js",
    "chars": 36444,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.2.js",
    "chars": 36988,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.3.js",
    "chars": 37066,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.4.js",
    "chars": 37066,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.6.5.js",
    "chars": 37580,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.7.0.js",
    "chars": 38762,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.7.1.js",
    "chars": 38751,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.7.2.js",
    "chars": 38838,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.0.js",
    "chars": 39961,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.1.js",
    "chars": 41977,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.2.js",
    "chars": 43117,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.3.js",
    "chars": 144788,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.4.js",
    "chars": 78843,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.5.js",
    "chars": 79297,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.8.6.js",
    "chars": 79297,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.0.js",
    "chars": 84431,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.1.js",
    "chars": 86286,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.10.js",
    "chars": 91346,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.11.js",
    "chars": 91372,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.2.js",
    "chars": 86358,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.3.js",
    "chars": 86415,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.4.js",
    "chars": 88610,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.5.js",
    "chars": 88607,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.6.js",
    "chars": 88633,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.7.js",
    "chars": 90477,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.8.js",
    "chars": 91317,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-0.9.9.js",
    "chars": 91317,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.0.0.js",
    "chars": 132809,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.0.1.js",
    "chars": 99797,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.1.0.js",
    "chars": 99797,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.1.1.js",
    "chars": 99797,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.2.0.js",
    "chars": 99815,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.3.0.js",
    "chars": 100731,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.3.1.js",
    "chars": 100569,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.4.0.js",
    "chars": 100569,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.5.0.js",
    "chars": 100597,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-1.5.1.js",
    "chars": 100597,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-2.0.0.js",
    "chars": 100656,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-2.0.1.js",
    "chars": 100646,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-2.1.0.js",
    "chars": 110867,
    "preview": "require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!"
  },
  {
    "path": "dist/yadda-2.1.1.js",
    "chars": 104092,
    "preview": "require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!"
  },
  {
    "path": "dist/yadda-2.2.0.js",
    "chars": 104091,
    "preview": "require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!"
  },
  {
    "path": "dist/yadda-umd-0.10.0.js",
    "chars": 105581,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.1.js",
    "chars": 105549,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.10.js",
    "chars": 112755,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.11.js",
    "chars": 112917,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.12.js",
    "chars": 113487,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.13.js",
    "chars": 113487,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.14.js",
    "chars": 115007,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.2.js",
    "chars": 105565,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.3.js",
    "chars": 105565,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.4.js",
    "chars": 105829,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.5.js",
    "chars": 105978,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.6.js",
    "chars": 106412,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.7.js",
    "chars": 107746,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.8.js",
    "chars": 107901,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.10.9.js",
    "chars": 107872,
    "preview": "!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=ty"
  },
  {
    "path": "dist/yadda-umd-0.11.0.js",
    "chars": 101019,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.1.js",
    "chars": 121312,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.2.js",
    "chars": 101264,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.3.js",
    "chars": 101264,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.4.js",
    "chars": 101694,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.5.js",
    "chars": 102840,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.6.js",
    "chars": 103857,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.11.7.js",
    "chars": 105778,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.12.0.js",
    "chars": 92360,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.12.1.js",
    "chars": 92450,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.13.0.js",
    "chars": 96070,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.13.1.js",
    "chars": 95720,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.14.0.js",
    "chars": 102728,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.14.1.js",
    "chars": 103239,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.14.2.js",
    "chars": 104379,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.0.js",
    "chars": 107782,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.1.js",
    "chars": 108201,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.2.js",
    "chars": 112362,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.3.js",
    "chars": 112373,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.4.js",
    "chars": 113760,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.15.5.js",
    "chars": 113843,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.16.0.js",
    "chars": 113963,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.16.1.js",
    "chars": 114007,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.16.2.js",
    "chars": 117249,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.16.3.js",
    "chars": 117454,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.0.js",
    "chars": 117506,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.1.js",
    "chars": 118402,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.10.js",
    "chars": 129562,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.2.js",
    "chars": 126765,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.3.js",
    "chars": 128913,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.4.js",
    "chars": 128915,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.5.js",
    "chars": 129165,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.6.js",
    "chars": 129261,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.7.js",
    "chars": 128941,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.8.js",
    "chars": 129079,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.17.9.js",
    "chars": 129079,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.18.0.js",
    "chars": 129561,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.19.0.js",
    "chars": 129565,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.20.0.js",
    "chars": 129545,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.21.0.js",
    "chars": 129581,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.22.0.js",
    "chars": 129609,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.22.1.js",
    "chars": 132867,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.22.2.js",
    "chars": 132810,
    "preview": "require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return"
  },
  {
    "path": "dist/yadda-umd-0.3.0.js",
    "chars": 30737,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.0.js",
    "chars": 31825,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.1.js",
    "chars": 33609,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.2.js",
    "chars": 33629,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.3.js",
    "chars": 34099,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.4.js",
    "chars": 33564,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  },
  {
    "path": "dist/yadda-umd-0.4.5.js",
    "chars": 33520,
    "preview": "(function(e){if(\"function\"==typeof bootstrap)bootstrap(\"yadda_umd\",e);else if(\"object\"==typeof exports)module.exports=e("
  }
]

// ... and 390 more files (download for full content)

About this extraction

This page contains the full source code of the acuminous/yadda GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 590 files (20.3 MB), approximately 5.4M tokens, and a symbol index with 26783 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!