├── .editorconfig ├── .github └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .prettierrc ├── CHANGELOG.md ├── LICENCE ├── README.md ├── benchmark ├── CHANGELOG.md ├── benchmark.suite.js ├── libs │ ├── commander.js │ ├── gluegun.js │ ├── index.js │ ├── lesy.js │ └── yargs.js ├── package.json └── results │ ├── perf.chart.html │ └── perf.json ├── commitlint.config.js ├── docs ├── CHANGELOG.md ├── LICENSE ├── README.md ├── builder │ └── doc │ │ ├── create-pages.js │ │ ├── create-schema.js │ │ └── utils.js ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── lesy-config.json ├── lesy-routes.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── src │ ├── components │ │ ├── common │ │ │ ├── button.js │ │ │ ├── footer.js │ │ │ ├── header.js │ │ │ ├── heading.js │ │ │ ├── icon.js │ │ │ ├── link-button.js │ │ │ ├── newsletter.js │ │ │ ├── search-preview.js │ │ │ ├── search.js │ │ │ ├── seo.js │ │ │ └── theme-switch.js │ │ ├── doc │ │ │ ├── footer-nav.js │ │ │ ├── sidebar.js │ │ │ └── toc.js │ │ ├── home │ │ │ ├── chart.js │ │ │ ├── example.js │ │ │ ├── features │ │ │ │ ├── artist.js │ │ │ │ ├── commands.js │ │ │ │ ├── index.js │ │ │ │ ├── middlewares.js │ │ │ │ ├── performance.js │ │ │ │ ├── pilot.js │ │ │ │ ├── plugins.js │ │ │ │ └── testing.js │ │ │ ├── mac-frame.js │ │ │ ├── others-features.js │ │ │ ├── reel.js │ │ │ ├── split-card.js │ │ │ └── step.js │ │ ├── libraries │ │ │ └── two-fold-card.js │ │ └── plugins │ │ │ └── package-card.js │ ├── content │ │ ├── docs │ │ │ ├── codebase │ │ │ │ ├── contributing.md │ │ │ │ ├── license.md │ │ │ │ ├── release-notes.md │ │ │ │ └── roadmap.md │ │ │ ├── components │ │ │ │ ├── commands.md │ │ │ │ ├── configuration.md │ │ │ │ ├── features.md │ │ │ │ ├── middlewares.md │ │ │ │ ├── plugins.md │ │ │ │ └── validators.md │ │ │ ├── development │ │ │ │ ├── indepth-concepts.md │ │ │ │ ├── local-setup.md │ │ │ │ └── project-overview.md │ │ │ ├── extensions │ │ │ │ ├── libraries-overview.md │ │ │ │ └── plugins-overview.md │ │ │ ├── getting-started │ │ │ │ ├── installation.md │ │ │ │ ├── introduction.md │ │ │ │ └── overview.md │ │ │ ├── resources │ │ │ │ ├── lesy-cli.md │ │ │ │ └── starter-template.md │ │ │ └── testing │ │ │ │ └── testbed.md │ │ ├── libraries │ │ │ └── standalone │ │ │ │ ├── artist-UI.md │ │ │ │ └── object-validator.md │ │ ├── plugins │ │ │ └── official │ │ │ │ ├── arg-validator.md │ │ │ │ ├── artist.md │ │ │ │ ├── auto-help.md │ │ │ │ ├── config-files.md │ │ │ │ ├── local-store.md │ │ │ │ ├── pilot-dashboard.md │ │ │ │ ├── prompt.md │ │ │ │ ├── scaffold-generator.md │ │ │ │ └── sidekick.md │ │ └── tutorial │ │ │ └── todo-app │ │ │ ├── overview.md │ │ │ ├── step-1-add-database.md │ │ │ ├── step-2-create-commands.md │ │ │ ├── step-3-add-todo-stats.md │ │ │ ├── step-4-display-help.md │ │ │ ├── step-5-web-interface.md │ │ │ ├── step-6-dynamic-todo.md │ │ │ ├── step-7-testing.md │ │ │ └── wrapup-and-release.md │ ├── images │ │ ├── gatsby-astronaut.png │ │ └── gatsby-icon.png │ ├── layouts │ │ ├── doc.layout.js │ │ └── general.layout.js │ ├── pages │ │ ├── 404.js │ │ ├── benchmark.js │ │ ├── branding.js │ │ ├── community.js │ │ ├── index.js │ │ ├── libraries.js │ │ └── plugins.js │ ├── styles │ │ ├── common.css │ │ ├── fonts.css │ │ ├── release-notes.scss │ │ ├── syntax │ │ │ ├── base.scss │ │ │ ├── dark.scss │ │ │ └── light.scss │ │ └── tailwind.css │ └── templates │ │ └── doc.template.js ├── static │ ├── .doc │ ├── .doc-links │ ├── data │ │ └── perf.json │ ├── images │ │ ├── home-icons │ │ │ ├── artist.png │ │ │ ├── command.png │ │ │ ├── middleware.png │ │ │ ├── more.png │ │ │ ├── performance.png │ │ │ ├── pilot.png │ │ │ └── plugins.png │ │ ├── home-illus │ │ │ ├── middleware.svg │ │ │ └── plugins.svg │ │ ├── lesy-core-flow.png │ │ ├── lesy-core-flow2.png │ │ ├── lesy-head.svg │ │ ├── library-intros │ │ │ ├── artist.png │ │ │ └── validator.png │ │ ├── logo.png │ │ ├── pilot │ │ │ └── console.png │ │ ├── plugin-intros │ │ │ ├── artist.png │ │ │ ├── config.png │ │ │ ├── generator.png │ │ │ ├── help.png │ │ │ ├── pilot.png │ │ │ ├── prompter.png │ │ │ ├── store.png │ │ │ └── validator.png │ │ ├── render1612453288681.gif │ │ └── social.png │ ├── js │ │ └── theme.js │ └── webfonts │ │ ├── Basier_Mono_webfont_license.pdf │ │ └── basier-square-mono-regular │ │ ├── basiersquaremono-regular-demo.html │ │ ├── basiersquaremono-regular-webfont.eot │ │ ├── basiersquaremono-regular-webfont.ttf │ │ ├── basiersquaremono-regular-webfont.woff │ │ ├── basiersquaremono-regular-webfont.woff2 │ │ ├── generator_config.txt │ │ ├── specimen_files │ │ ├── grid_12-825-55-15.css │ │ └── specimen_stylesheet.css │ │ └── stylesheet.css └── tailwind.config.js ├── jest.config.js ├── lerna.json ├── lint-staged.config.js ├── package-lock.json ├── package.json ├── packages ├── cli │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── __tests__ │ │ └── main.spec.ts │ ├── bin │ │ └── cmd │ ├── package.json │ ├── src │ │ ├── commands │ │ │ ├── default.command.ts │ │ │ └── new.command.ts │ │ ├── index.ts │ │ └── templates │ │ │ ├── js-basic │ │ │ └── {{name}} │ │ │ │ ├── __tests__ │ │ │ │ ├── hello.command.integration.test.js │ │ │ │ └── hello.command.test.js │ │ │ │ ├── bin │ │ │ │ └── cmd │ │ │ │ ├── jest.config.js │ │ │ │ ├── package.json │ │ │ │ └── src │ │ │ │ ├── commands │ │ │ │ ├── default.js │ │ │ │ └── hello.js │ │ │ │ └── index.js │ │ │ └── ts-basic │ │ │ └── {{name}} │ │ │ ├── __tests__ │ │ │ ├── hello.command.integration.test.ts │ │ │ └── hello.command.test.ts │ │ │ ├── bin │ │ │ └── cmd │ │ │ ├── jest.config.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── commands │ │ │ │ ├── default.ts │ │ │ │ └── hello.ts │ │ │ └── index.ts │ │ │ └── tsconfig.json │ ├── tsconfig.build.json │ └── tsconfig.json ├── compiler │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── core │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── __tests__ │ │ ├── __snapshots__ │ │ │ └── core.spec.ts.snap │ │ ├── command.spec.ts │ │ ├── core.spec.ts │ │ ├── feature.spec.ts │ │ ├── fixtures │ │ │ ├── command.ts │ │ │ ├── commands │ │ │ │ ├── command.one.ts │ │ │ │ └── command.two.ts │ │ │ ├── feature.ts │ │ │ ├── features │ │ │ │ ├── feature.one.ts │ │ │ │ └── feature.two.ts │ │ │ ├── middleware.ts │ │ │ └── middlewares │ │ │ │ ├── middleware.end.ts │ │ │ │ └── middleware.start.ts │ │ ├── helpers │ │ │ ├── cmdCreators.ts │ │ │ ├── data.provider.ts │ │ │ └── loaderdata.provider.ts │ │ ├── loader.spec.ts │ │ └── middleware.spec.ts │ ├── package.json │ ├── src │ │ ├── command.ts │ │ ├── core.ts │ │ ├── feature.ts │ │ ├── index.ts │ │ ├── loader.ts │ │ ├── middleware.ts │ │ ├── model.ts │ │ └── utilities.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── helpers │ └── validator │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ ├── __snapshots__ │ │ │ └── validator.spec.ts.snap │ │ └── validator.spec.ts │ │ ├── package.json │ │ ├── src │ │ ├── index.ts │ │ └── validators.ts │ │ └── tsconfig.json ├── misc │ ├── artist-ui │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── artist.spec.ts │ │ │ ├── elements.spec.ts │ │ │ └── utils.spec.ts │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ │ ├── elements │ │ │ │ ├── box.ts │ │ │ │ ├── column.ts │ │ │ │ ├── div.ts │ │ │ │ ├── index.ts │ │ │ │ ├── newline.ts │ │ │ │ ├── progress.ts │ │ │ │ ├── row.ts │ │ │ │ ├── space.ts │ │ │ │ ├── span.ts │ │ │ │ ├── spinner.ts │ │ │ │ ├── text.ts │ │ │ │ └── unknown.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── captain │ │ ├── CHANGELOG.md │ │ ├── index.js │ │ ├── main.js │ │ ├── package.json │ │ └── public │ │ │ └── flashscreen.html │ ├── pilot-ui │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── angular.json │ │ ├── karma.conf.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── setup │ │ │ ├── config-store.js │ │ │ └── socket.js │ │ ├── src │ │ │ ├── app │ │ │ │ ├── components │ │ │ │ │ ├── command │ │ │ │ │ │ ├── command.component.ts │ │ │ │ │ │ └── command.template.html │ │ │ │ │ ├── console │ │ │ │ │ │ ├── console.component.ts │ │ │ │ │ │ └── console.template.html │ │ │ │ │ ├── footer │ │ │ │ │ │ ├── footer.component.ts │ │ │ │ │ │ └── footer.template.html │ │ │ │ │ ├── header │ │ │ │ │ │ ├── header.component.ts │ │ │ │ │ │ └── header.template.html │ │ │ │ │ ├── heading │ │ │ │ │ │ ├── heading.component.ts │ │ │ │ │ │ └── heading.template.html │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── middlewares │ │ │ │ │ │ ├── middlewares.component.ts │ │ │ │ │ │ └── middlewares.template.html │ │ │ │ │ ├── prompt │ │ │ │ │ │ ├── prompt.component.ts │ │ │ │ │ │ └── prompt.template.html │ │ │ │ │ ├── searchbar │ │ │ │ │ │ ├── searchbar.component.ts │ │ │ │ │ │ └── searchbar.template.html │ │ │ │ │ ├── sidemenu │ │ │ │ │ │ ├── sidemenu.component.ts │ │ │ │ │ │ └── sidemenu.template.html │ │ │ │ │ └── toast │ │ │ │ │ │ ├── toast.component.ts │ │ │ │ │ │ └── toast.template.html │ │ │ │ ├── directives │ │ │ │ │ ├── copy │ │ │ │ │ │ └── copy.directive.ts │ │ │ │ │ ├── panel │ │ │ │ │ │ └── panel.directive.ts │ │ │ │ │ ├── popover │ │ │ │ │ │ └── popover.directive.ts │ │ │ │ │ └── tooltip │ │ │ │ │ │ └── tooltip.directive.ts │ │ │ │ ├── modules │ │ │ │ │ └── query │ │ │ │ │ │ ├── classes │ │ │ │ │ │ ├── checkbox.class.ts │ │ │ │ │ │ ├── dropdown.class.ts │ │ │ │ │ │ └── textbox.class.ts │ │ │ │ │ │ ├── components │ │ │ │ │ │ ├── form │ │ │ │ │ │ │ ├── form.component.ts │ │ │ │ │ │ │ └── form.template.html │ │ │ │ │ │ └── input │ │ │ │ │ │ │ ├── input.component.ts │ │ │ │ │ │ │ └── input.template.html │ │ │ │ │ │ ├── model.ts │ │ │ │ │ │ ├── pipes │ │ │ │ │ │ └── name-pipe.ts │ │ │ │ │ │ ├── query.module.ts │ │ │ │ │ │ └── services │ │ │ │ │ │ ├── control.service.ts │ │ │ │ │ │ └── query.service.ts │ │ │ │ ├── pages │ │ │ │ │ ├── commands │ │ │ │ │ │ ├── commands.page.ts │ │ │ │ │ │ └── commands.template.html │ │ │ │ │ ├── config │ │ │ │ │ │ ├── config.page.ts │ │ │ │ │ │ └── config.template.html │ │ │ │ │ ├── help │ │ │ │ │ │ ├── help.content.ts │ │ │ │ │ │ ├── help.page.ts │ │ │ │ │ │ └── help.template.html │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── projects │ │ │ │ │ │ ├── projects.page.ts │ │ │ │ │ │ └── projects.template.html │ │ │ │ │ ├── run │ │ │ │ │ │ ├── run.page.ts │ │ │ │ │ │ └── run.template.html │ │ │ │ │ └── settings │ │ │ │ │ │ ├── settings.page.ts │ │ │ │ │ │ └── settings.template.html │ │ │ │ ├── pilot.config.ts │ │ │ │ ├── pilot.main.ts │ │ │ │ ├── pilot.models.ts │ │ │ │ ├── pilot.module.ts │ │ │ │ ├── pilot.routing.module.ts │ │ │ │ ├── pilot.template.html │ │ │ │ ├── services │ │ │ │ │ ├── commands.service.ts │ │ │ │ │ ├── common.service.ts │ │ │ │ │ ├── hotkeys.service.ts │ │ │ │ │ ├── logs.service.ts │ │ │ │ │ ├── middlewares.service.ts │ │ │ │ │ ├── modal.service.ts │ │ │ │ │ ├── notification.service.ts │ │ │ │ │ ├── projects.service.ts │ │ │ │ │ ├── prompt.service.ts │ │ │ │ │ ├── runners.service.ts │ │ │ │ │ ├── safehtml.service.ts │ │ │ │ │ ├── utils.service.ts │ │ │ │ │ └── ws.service.ts │ │ │ │ └── store │ │ │ │ │ ├── actions │ │ │ │ │ ├── command.actions.ts │ │ │ │ │ ├── commands.actions.ts │ │ │ │ │ ├── common.actions.ts │ │ │ │ │ ├── logs.actions.ts │ │ │ │ │ ├── middlewares.actions.ts │ │ │ │ │ ├── notification.actions.ts │ │ │ │ │ ├── project.actions.ts │ │ │ │ │ ├── projects.actions.ts │ │ │ │ │ ├── prompt.actions.ts │ │ │ │ │ └── runners.actions.ts │ │ │ │ │ └── states │ │ │ │ │ ├── command.state.ts │ │ │ │ │ ├── commands.state.ts │ │ │ │ │ ├── common.state.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── logs.state.ts │ │ │ │ │ ├── middlewares.state.ts │ │ │ │ │ ├── notification.state.ts │ │ │ │ │ ├── project.state.ts │ │ │ │ │ ├── projects.state.ts │ │ │ │ │ ├── prompt.state.ts │ │ │ │ │ └── runners.state.ts │ │ │ ├── assets │ │ │ │ ├── .gitkeep │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ ├── apple-touch-icon.png │ │ │ │ ├── browserconfig.xml │ │ │ │ ├── favicon-16x16.png │ │ │ │ ├── favicon-32x32.png │ │ │ │ ├── icons │ │ │ │ │ ├── remixicon.css │ │ │ │ │ ├── remixicon.eot │ │ │ │ │ ├── remixicon.less │ │ │ │ │ ├── remixicon.svg │ │ │ │ │ ├── remixicon.symbol.svg │ │ │ │ │ ├── remixicon.ttf │ │ │ │ │ ├── remixicon.woff │ │ │ │ │ └── remixicon.woff2 │ │ │ │ ├── site.webmanifest │ │ │ │ └── svg │ │ │ │ │ └── choose-cmd.svg │ │ │ ├── environments │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.scss │ │ │ ├── tailwind.scss │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ └── tsconfig.spec.json │ │ ├── tailwind.config.js │ │ ├── tsconfig.app.json │ │ ├── tsconfig.base.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ ├── tslint.json │ │ └── webpack.config.js │ └── test-utils │ │ ├── CHANGELOG.md │ │ ├── index.js │ │ └── package.json ├── plugins │ ├── lesy-plugin-artist │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── package.json │ │ ├── src │ │ │ ├── artist.feature.ts │ │ │ ├── artist.middleware.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── lesy-plugin-config │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── config-plugin.spec.ts │ │ │ └── test-config.json │ │ ├── package.json │ │ ├── src │ │ │ ├── index.ts │ │ │ └── middlewares │ │ │ │ └── config.mw.ts │ │ └── tsconfig.json │ ├── lesy-plugin-demo │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ │ ├── commands │ │ │ │ ├── cmd-name.command.ts │ │ │ │ ├── console-colors.command.ts │ │ │ │ └── input.command.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── lesy-plugin-generator │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── fixtures │ │ │ │ ├── dynamic │ │ │ │ │ └── {{filename}}.txt │ │ │ │ └── static │ │ │ │ │ └── ins.txt │ │ │ └── generator-plugin.spec.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── generator.feature.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── lesy-plugin-help │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── fixtures │ │ │ │ └── help.feature.ts │ │ │ └── help.command.test.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── help.command.ts │ │ │ ├── help.config.ts │ │ │ ├── help.middleware.ts │ │ │ ├── help.model.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── lesy-plugin-pilot │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── fixtures │ │ │ │ └── hello.txt │ │ │ └── run.command.test.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── __tests__ │ │ │ │ └── pilot.socket.test.ts │ │ │ ├── helpers │ │ │ │ ├── banner.ts │ │ │ │ └── public-ip.ts │ │ │ ├── index.ts │ │ │ ├── interceptor.middleware.ts │ │ │ ├── models.ts │ │ │ ├── pilot.command.ts │ │ │ ├── pilot.feature.ts │ │ │ ├── pilot.socket.ts │ │ │ └── run.command.ts │ │ └── tsconfig.json │ ├── lesy-plugin-prompt │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── fixtures │ │ │ │ └── package.json │ │ │ └── plugin.test.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── index.ts │ │ │ └── prompt.feature.ts │ │ └── tsconfig.json │ ├── lesy-plugin-sidekick │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ ├── fixtures │ │ │ │ └── package.json │ │ │ └── plugin.test.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── features │ │ │ │ └── pkg.feature.ts │ │ │ ├── index.ts │ │ │ └── middlewares │ │ │ │ ├── error.middleware.ts │ │ │ │ └── version.middlware.ts │ │ └── tsconfig.json │ ├── lesy-plugin-store │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ │ └── store.command.test.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── commands │ │ │ │ ├── get.store.command.ts │ │ │ │ ├── remove.store.command.ts │ │ │ │ ├── set.store.command.ts │ │ │ │ └── store.command.ts │ │ │ ├── index.ts │ │ │ ├── store.feature.ts │ │ │ └── store.middleware.ts │ │ └── tsconfig.json │ └── lesy-plugin-validator │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENCE │ │ ├── README.md │ │ ├── __tests__ │ │ └── validator.middleware.test.ts │ │ ├── package.json │ │ ├── src │ │ ├── index.ts │ │ └── validator.middleware.ts │ │ └── tsconfig.json ├── testbed │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── custom.tsConfig.json │ │ └── index.ts │ └── tsconfig.json └── types │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── command.d.ts │ ├── command.d.ts.map │ ├── core.d.ts │ ├── core.d.ts.map │ ├── feature.d.ts │ ├── feature.d.ts.map │ ├── index.d.ts │ ├── index.d.ts.map │ ├── loader.d.ts │ ├── loader.d.ts.map │ ├── middleware.d.ts │ ├── middleware.d.ts.map │ ├── model.d.ts │ ├── model.d.ts.map │ ├── package.json │ ├── utilities.d.ts │ └── utilities.d.ts.map ├── tsconfig.base.json └── tslint.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | charset = utf-8 7 | trim_trailing_whitespace = false 8 | insert_final_newline = false -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "semi": true, 5 | "singleQuote": false 6 | } 7 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | ----------- 3 | 4 | Copyright (c) 2019 Lokesh Rajendran 5 | Permission is hereby granted, free of charge, to any person 6 | obtaining a copy of this software and associated documentation 7 | files (the "Software"), to deal in the Software without 8 | restriction, including without limitation the rights to use, 9 | copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following 12 | conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 | OTHER DEALINGS IN THE SOFTWARE. 25 | 26 | English Česky -------------------------------------------------------------------------------- /benchmark/benchmark.suite.js: -------------------------------------------------------------------------------- 1 | const b = require("benny"); 2 | const commander = require("commander"); 3 | const yargs = require("yargs"); 4 | const { build: gluegun } = require("gluegun"); 5 | const lesy = require("@lesy/compiler"); 6 | const { commanderCode, gluegunCode, yargsCode, lesyCode } = require("./libs"); 7 | 8 | const options = { 9 | // minSamples: 100 10 | }; 11 | 12 | b.suite( 13 | "Performance test", 14 | b.add( 15 | "lesy", 16 | async () => { 17 | await lesyCode(lesy); 18 | }, 19 | options, 20 | ), 21 | 22 | b.add( 23 | "commander", 24 | () => { 25 | commanderCode(commander); 26 | }, 27 | options, 28 | ), 29 | 30 | b.add( 31 | "yargs", 32 | () => { 33 | yargsCode(yargs); 34 | }, 35 | options, 36 | ), 37 | 38 | b.add( 39 | "glugun", 40 | async () => { 41 | await gluegunCode(gluegun); 42 | }, 43 | options, 44 | ), 45 | 46 | b.cycle(), 47 | b.complete(), 48 | b.save({ file: "perf", version: "1.0.0", folder: "./results" }), 49 | b.save({ file: "perf", format: "chart.html", folder: "./results" }), 50 | ); 51 | -------------------------------------------------------------------------------- /benchmark/libs/commander.js: -------------------------------------------------------------------------------- 1 | module.exports = (program) => { 2 | program.command("greet").action(function () {}); 3 | 4 | program.parse(["./", "./", "greet"]); 5 | }; 6 | -------------------------------------------------------------------------------- /benchmark/libs/gluegun.js: -------------------------------------------------------------------------------- 1 | module.exports = async (greet) => { 2 | const movieCLI = greet("greetings") 3 | .command({ 4 | name: "greet", 5 | run: () => {}, 6 | }) 7 | .src(__dirname) 8 | .exclude([ 9 | "meta", 10 | "strings", 11 | "print", 12 | "filesystem", 13 | "semver", 14 | "system", 15 | "prompt", 16 | "http", 17 | "template", 18 | "patching", 19 | ]) 20 | .create(); 21 | 22 | await movieCLI.run(["greet"]); 23 | }; 24 | -------------------------------------------------------------------------------- /benchmark/libs/index.js: -------------------------------------------------------------------------------- 1 | const commanderCode = require("./commander"); 2 | const yargsCode = require("./yargs"); 3 | const gluegunCode = require("./gluegun"); 4 | const lesyCode = require("./lesy"); 5 | 6 | module.exports = { commanderCode, yargsCode, gluegunCode, lesyCode }; 7 | -------------------------------------------------------------------------------- /benchmark/libs/lesy.js: -------------------------------------------------------------------------------- 1 | module.exports = async (lesy) => 2 | await lesy({ 3 | loadDefaultPlugins: false, 4 | commands: [{ name: "greet", run: () => {} }], 5 | }).parse(["greet"]); 6 | -------------------------------------------------------------------------------- /benchmark/libs/yargs.js: -------------------------------------------------------------------------------- 1 | module.exports = (yargs) => { 2 | yargs 3 | .command( 4 | "greet", 5 | "greeting", 6 | () => {}, 7 | (argv) => {}, 8 | ) 9 | .parse(["greet"]); 10 | }; 11 | -------------------------------------------------------------------------------- /benchmark/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lesy/lesy-benchmark", 3 | "version": "1.0.0-beta.18", 4 | "main": "benchmark.suite.js", 5 | "scripts": { 6 | "benchmark": "node ./benchmark.suite.js", 7 | "benchmarkWS": "node --max-old-space-size=10000 ./benchmark.suite.js", 8 | "copy-to-docs": "cp results/perf.json ../docs/static/" 9 | }, 10 | "private": true, 11 | "dependencies": { 12 | "@lesy/compiler": "^1.0.0-beta.18", 13 | "benny": "^3.6.14", 14 | "commander": "^6.0.0", 15 | "gluegun": "^4.4.0", 16 | "yargs": "^15.4.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /benchmark/results/perf.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Performance test", 3 | "date": "2020-09-16T02:50:16.591Z", 4 | "version": "1.0.0", 5 | "results": [ 6 | { 7 | "name": "lesy", 8 | "ops": 195019, 9 | "margin": 0.77, 10 | "percentSlower": 18.55 11 | }, 12 | { 13 | "name": "commander", 14 | "ops": 239421, 15 | "margin": 42.26, 16 | "percentSlower": 0 17 | }, 18 | { 19 | "name": "yargs", 20 | "ops": 8520, 21 | "margin": 23.18, 22 | "percentSlower": 96.44 23 | }, 24 | { 25 | "name": "glugun", 26 | "ops": 261, 27 | "margin": 23.46, 28 | "percentSlower": 99.89 29 | } 30 | ], 31 | "fastest": { 32 | "name": "commander", 33 | "index": 1 34 | }, 35 | "slowest": { 36 | "name": "glugun", 37 | "index": 3 38 | } 39 | } -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | const lernaScopesConfig = require("@commitlint/config-lerna-scopes"); 2 | 3 | const scopes = ["release"]; 4 | 5 | const getScopes = (initialEnum = []) => ctx => 6 | lernaScopesConfig.utils 7 | .getPackages() 8 | .then(packageList => initialEnum.concat(packageList)) 9 | .then(scopeList => [2, "always", scopeList]); 10 | 11 | module.exports = { 12 | extends: ["@commitlint/config-conventional"], 13 | rules: { 14 | "scope-enum": ctx => getScopes(scopes)(ctx), 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /docs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | ----------- 3 | 4 | Copyright (c) 2019 Lokesh Rajendran 5 | Permission is hereby granted, free of charge, to any person 6 | obtaining a copy of this software and associated documentation 7 | files (the "Software"), to deal in the Software without 8 | restriction, including without limitation the rights to use, 9 | copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following 12 | conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Lesy JS documentation 2 | -------------------------------------------------------------------------------- /docs/builder/doc/create-pages.js: -------------------------------------------------------------------------------- 1 | const { routes, redirected } = require("../../lesy-routes"); 2 | const { iteratePages, sidebarMenuItems } = require("./utils"); 3 | 4 | exports.createPages = async ({ actions }) => { 5 | const { createRedirect, createPage } = actions; 6 | 7 | const pages = iteratePages(routes); 8 | const sidebarItems = sidebarMenuItems(pages); 9 | 10 | pages.forEach(page => { 11 | createPage({ 12 | component: require.resolve("../../src/templates/doc.template.js"), 13 | path: page.slug, 14 | context: { ...page, sidebarItems: sidebarItems[page.parent.path] }, 15 | }); 16 | }); 17 | 18 | redirected.forEach(({ from, to }) => { 19 | createRedirect({ 20 | fromPath: from, 21 | toPath: to, 22 | isPermanent: true, 23 | redirectInBrowser: true, 24 | }); 25 | }); 26 | }; 27 | -------------------------------------------------------------------------------- /docs/builder/doc/create-schema.js: -------------------------------------------------------------------------------- 1 | const appConfig = require("../../lesy-config.json"); 2 | exports.createSchemaCustomization = ({ actions, schema }) => { 3 | const { createTypes } = actions; 4 | const typeDefs = [ 5 | "type Mdx implements Node { frontmatter: Frontmatter }", 6 | schema.buildObjectType({ 7 | name: "Frontmatter", 8 | fields: { 9 | icon: { 10 | type: "String", 11 | resolve(source, args, context, info) { 12 | const { icon } = source; 13 | if (source.icon == null) { 14 | return appConfig.doc["default-page-icon"]; 15 | } 16 | return icon; 17 | }, 18 | }, 19 | }, 20 | }), 21 | ]; 22 | createTypes(typeDefs); 23 | }; 24 | -------------------------------------------------------------------------------- /docs/gatsby-browser.js: -------------------------------------------------------------------------------- 1 | import "./src/styles/tailwind.css"; 2 | import "./src/styles/fonts.css"; 3 | import "./src/styles/common.css"; 4 | import "./src/styles/release-notes.scss"; 5 | import "./src/styles/syntax/light.scss"; 6 | import "./src/styles/syntax/dark.scss"; 7 | import "remixicon/fonts/remixicon.css"; 8 | import "@lesy/brand/font/style.css"; 9 | -------------------------------------------------------------------------------- /docs/gatsby-node.js: -------------------------------------------------------------------------------- 1 | // Documentation pages and schema 2 | const { createPages } = require("./builder/doc/create-pages"); 3 | const { createSchemaCustomization } = require("./builder/doc/create-schema"); 4 | 5 | module.exports = { 6 | createPages, 7 | createSchemaCustomization, 8 | }; 9 | -------------------------------------------------------------------------------- /docs/gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | const React = require("react"); 2 | 3 | exports.onRenderBody = ({ setHeadComponents }) => { 4 | setHeadComponents([