@elsikora/setup-wizard
Version:
Setup Wizard - CLI scaffolding utility
1,383 lines (1,381 loc) • 54.9 kB
JavaScript
#!/usr/bin/env node
import { EEslintFeature } from '../enum/eslint-feature.enum.js';
import { EFramework } from '../enum/framework.enum.js';
const FRAMEWORK_CONFIG = {
[EFramework.ADONIS]: {
description: "AdonisJS Node.js framework project",
displayName: "AdonisJS",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PERFECTIONIST],
fileIndicators: [".adonisrc.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["app/**/*.ts", "start/**/*.ts"],
name: EFramework.ADONIS,
packageIndicators: {
dependencies: ["@adonisjs/core"],
},
},
[EFramework.ALPINE]: {
description: "Alpine.js lightweight frontend framework",
displayName: "Alpine.js",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js", "public/**/*.js"],
name: EFramework.ALPINE,
packageIndicators: {
dependencies: ["alpinejs"],
},
},
[EFramework.ANGULAR]: {
description: "Angular framework project",
displayName: "Angular",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.SONAR, EEslintFeature.STYLISTIC, EEslintFeature.CSS],
fileIndicators: ["angular.json", ".angular-cli.json", "angular-cli.json"],
ignorePath: {
directories: [".angular"],
patterns: ["src/assets/**/*", "src/environments/**/*", "*.spec.ts"],
},
lintPaths: ["src/**/*.ts", "src/**/*.html", "src/**/*.scss"],
name: EFramework.ANGULAR,
packageIndicators: {
dependencies: ["@angular/core"],
devDependencies: ["@angular-devkit/build-angular"],
},
},
[EFramework.ANTD]: {
description: "Ant Design React UI library project",
displayName: "Ant Design",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.ANTD,
packageIndicators: {
dependencies: ["antd"],
},
},
[EFramework.APOLLO]: {
description: "Apollo GraphQL client/server project",
displayName: "Apollo",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.NODE],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.APOLLO,
packageIndicators: {
dependencies: ["@apollo/client", "apollo-server"],
},
},
[EFramework.ASTRO]: {
description: "Astro static site generator",
displayName: "Astro",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.TAILWIND_CSS, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.MARKDOWN],
fileIndicators: ["astro.config.mjs", "astro.config.ts"],
ignorePath: {
directories: [".astro"],
patterns: ["public/**/*", "**/*.d.ts"],
},
lintPaths: ["src/**/*.astro", "src/**/*.ts", "src/**/*.tsx"],
name: EFramework.ASTRO,
packageIndicators: {
dependencies: ["astro"],
devDependencies: ["@astrojs/tailwind"],
},
},
[EFramework.BABEL]: {
description: "Babel compiler configuration",
displayName: "Babel",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON],
fileIndicators: ["babel.config.js", ".babelrc"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.BABEL,
packageIndicators: {
devDependencies: ["@babel/core"],
},
},
[EFramework.BACKBONE]: {
description: "Backbone.js framework project",
displayName: "Backbone.js",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js"],
name: EFramework.BACKBONE,
packageIndicators: {
dependencies: ["backbone", "underscore"],
},
},
[EFramework.BLITZ]: {
description: "Blitz.js full-stack React framework",
displayName: "Blitz.js",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.NODE],
fileIndicators: ["blitz.config.js", "blitz.config.ts"],
ignorePath: {
directories: [".blitz"],
patterns: [],
},
lintPaths: ["app/**/*"],
name: EFramework.BLITZ,
packageIndicators: {
dependencies: ["blitz"],
},
},
[EFramework.BOOTSTRAP]: {
description: "Bootstrap UI library project",
displayName: "Bootstrap",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.BOOTSTRAP,
packageIndicators: {
dependencies: ["bootstrap"],
},
},
[EFramework.CAPACITOR]: {
description: "Capacitor mobile application framework",
displayName: "Capacitor",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: ["capacitor.config.json", "capacitor.config.ts"],
ignorePath: {
directories: ["android", "ios"],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.CAPACITOR,
packageIndicators: {
dependencies: ["@capacitor/core"],
},
},
[EFramework.CHAKRA_UI]: {
description: "Chakra UI React component library",
displayName: "Chakra UI",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.CHAKRA_UI,
packageIndicators: {
dependencies: ["@chakra-ui/react"],
},
},
[EFramework.CYPRESS]: {
description: "Cypress end-to-end testing framework",
displayName: "Cypress",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: ["cypress.config.js", "cypress.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["cypress/**/*.js", "cypress/**/*.ts"],
name: EFramework.CYPRESS,
packageIndicators: {
devDependencies: ["cypress"],
},
},
[EFramework.DIRECTUS]: {
description: "Directus headless CMS project",
displayName: "Directus",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: ["directus.config.js", "directus-extension.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["extensions/**/*"],
name: EFramework.DIRECTUS,
packageIndicators: {
dependencies: ["directus"],
},
},
[EFramework.DRIZZLE]: {
description: "Drizzle ORM for TypeScript",
displayName: "Drizzle ORM",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.NODE, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.DRIZZLE,
packageIndicators: {
dependencies: ["drizzle-orm"],
},
},
[EFramework.ELECTRON]: {
description: "Electron desktop application framework",
displayName: "Electron",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JAVASCRIPT, EEslintFeature.CSS],
fileIndicators: ["electron.config.js", "electron-builder.yml", "electron-builder.json"],
ignorePath: {
directories: ["release"],
patterns: ["build/**/*", "**/*.d.ts"],
},
lintPaths: ["src/**/*", "app/**/*", "main/**/*", "renderer/**/*"],
name: EFramework.ELECTRON,
packageIndicators: {
dependencies: ["electron"],
devDependencies: ["electron-builder"],
},
},
[EFramework.ELEVENTY]: {
description: "Eleventy static site generator",
displayName: "Eleventy",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.MARKDOWN, EEslintFeature.CSS],
fileIndicators: [".eleventy.js", "eleventy.config.js"],
ignorePath: {
directories: ["_site"],
patterns: [],
},
lintPaths: ["src/**/*", "content/**/*"],
name: EFramework.ELEVENTY,
packageIndicators: {
devDependencies: ["@11ty/eleventy"],
},
},
[EFramework.EMBER]: {
description: "Ember.js framework project",
displayName: "Ember.js",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS, EEslintFeature.JSX],
fileIndicators: ["ember-cli-build.js", ".ember-cli"],
ignorePath: {
directories: ["tmp"],
patterns: [],
},
lintPaths: ["app/**/*", "tests/**/*"],
name: EFramework.EMBER,
packageIndicators: {
dependencies: ["ember-source", "ember-cli"],
},
},
[EFramework.ESBUILD]: {
description: "esbuild bundler project",
displayName: "esbuild",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.ESBUILD,
packageIndicators: {
devDependencies: ["esbuild"],
},
},
[EFramework.ESLINT]: {
description: "ESLint configuration",
displayName: "ESLint",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON],
fileIndicators: [".eslintrc", ".eslintrc.js", ".eslintrc.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.ESLINT,
packageIndicators: {
devDependencies: ["eslint"],
},
},
[EFramework.EXPO]: {
description: "Expo framework for React Native apps",
displayName: "Expo",
features: [EEslintFeature.REACT, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.TYPESCRIPT],
fileIndicators: ["app.json", "app.config.js"],
ignorePath: {
directories: ["ios", "android"],
patterns: [],
},
lintPaths: ["App.js", "src/**/*"],
name: EFramework.EXPO,
packageIndicators: {
dependencies: ["expo"],
},
},
[EFramework.EXPRESS]: {
description: "Express.js Node.js framework project",
displayName: "Express.js",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PERFECTIONIST, EEslintFeature.SONAR, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: ["public/**/*", "uploads/**/*"],
},
isSupportWatch: true,
lintPaths: ["src/**/*.js", "routes/**/*.js", "controllers/**/*.js", "models/**/*.js"],
name: EFramework.EXPRESS,
packageIndicators: {
dependencies: ["express"],
},
},
[EFramework.FASTIFY]: {
description: "Fastify Node.js framework project",
displayName: "Fastify",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PERFECTIONIST, EEslintFeature.PRETTIER, EEslintFeature.SONAR],
fileIndicators: ["fastify.config.js", "fastify.config.ts"],
ignorePath: {
directories: [],
patterns: ["test/**/*", "**/*.spec.ts"],
},
isSupportWatch: true,
lintPaths: ["src/**/*.ts", "routes/**/*.ts", "plugins/**/*.ts"],
name: EFramework.FASTIFY,
packageIndicators: {
dependencies: ["fastify"],
},
},
[EFramework.FEATHERS]: {
description: "Feathers Node.js framework project",
displayName: "Feathers",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["feathers-cli.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js", "src/**/*.ts"],
name: EFramework.FEATHERS,
packageIndicators: {
dependencies: ["@feathersjs/feathers"],
},
},
[EFramework.FLUTTER]: {
description: "Flutter cross-platform framework (Dart)",
displayName: "Flutter",
features: [EEslintFeature.PRETTIER, EEslintFeature.YAML],
fileIndicators: ["pubspec.yaml"],
ignorePath: {
directories: [".dart_tool"],
patterns: [],
},
lintPaths: [],
name: EFramework.FLUTTER,
packageIndicators: {
dependencies: [],
devDependencies: [],
},
},
[EFramework.FRESH]: {
description: "Fresh full-stack framework for Deno",
displayName: "Fresh (Deno)",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["fresh.config.ts"],
ignorePath: {
directories: [".git", ".vscode"],
patterns: [],
},
lintPaths: ["routes/**/*", "islands/**/*"],
name: EFramework.FRESH,
packageIndicators: {},
},
[EFramework.GATSBY]: {
description: "Gatsby React-based static site generator",
displayName: "Gatsby",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.MARKDOWN],
fileIndicators: ["gatsby-config.js", "gatsby-config.ts", "gatsby-node.js", "gatsby-node.ts"],
ignorePath: {
directories: ["public", ".cache"],
patterns: ["**/*.d.ts"],
},
lintPaths: ["src/**/*", "plugins/**/*"],
name: EFramework.GATSBY,
packageIndicators: {
dependencies: ["gatsby"],
},
},
[EFramework.GRAPHQL]: {
description: "Generic GraphQL usage (apollo, graphql.js, etc.)",
displayName: "GraphQL",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.NODE, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.GRAPHQL,
packageIndicators: {
dependencies: ["graphql"],
},
},
[EFramework.GRIDSOME]: {
description: "Gridsome Vue.js static site generator",
displayName: "Gridsome",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS, EEslintFeature.JSX],
fileIndicators: ["gridsome.config.js", "gridsome.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.GRIDSOME,
packageIndicators: {
dependencies: ["gridsome", "vue"],
},
},
[EFramework.HAPI]: {
description: "hapi Node.js framework project",
displayName: "hapi",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js"],
name: EFramework.HAPI,
packageIndicators: {
dependencies: ["@hapi/hapi"],
},
},
[EFramework.I18NEXT]: {
description: "i18next internationalization framework",
displayName: "i18next",
features: [EEslintFeature.I18NEXT],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.I18NEXT,
packageIndicators: {
dependencies: ["i18next"],
},
},
[EFramework.IONIC]: {
description: "Ionic mobile & desktop framework project",
displayName: "Ionic",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS, EEslintFeature.JSX],
fileIndicators: ["ionic.config.json"],
ignorePath: {
directories: ["www"],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.IONIC,
packageIndicators: {
dependencies: ["@ionic/angular"],
either: ["@ionic/react", "@ionic/vue"],
},
},
[EFramework.JASMINE]: {
description: "Jasmine testing framework",
displayName: "Jasmine",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["jasmine.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["spec/**/*"],
name: EFramework.JASMINE,
packageIndicators: {
devDependencies: ["jasmine"],
},
},
[EFramework.JEST]: {
description: "Jest testing framework config",
displayName: "Jest",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: ["jest.config.js", "jest.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["tests/**/*", "__tests__/**/*"],
name: EFramework.JEST,
packageIndicators: {
devDependencies: ["jest"],
},
},
[EFramework.JOTAI]: {
description: "Jotai atomic state management for React",
displayName: "Jotai",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.JOTAI,
packageIndicators: {
dependencies: ["jotai"],
},
},
[EFramework.KARMA]: {
description: "Karma test runner",
displayName: "Karma",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["karma.conf.js"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["test/**/*", "src/**/*"],
name: EFramework.KARMA,
packageIndicators: {
devDependencies: ["karma"],
},
},
[EFramework.KEYSTONE]: {
description: "Keystone.js headless CMS framework",
displayName: "Keystone",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["keystone.ts", "keystone.js"],
ignorePath: {
directories: [".keystone"],
patterns: [],
},
lintPaths: ["schema/**/*", "routes/**/*"],
name: EFramework.KEYSTONE,
packageIndicators: {
dependencies: ["@keystone-6/core"],
},
},
[EFramework.KOA]: {
description: "Koa Node.js framework project",
displayName: "Koa",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PERFECTIONIST, EEslintFeature.PRETTIER, EEslintFeature.TYPESCRIPT],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: ["public/**/*", "test/**/*"],
},
isSupportWatch: true,
lintPaths: ["src/**/*.js", "routes/**/*.js", "middleware/**/*.js"],
name: EFramework.KOA,
packageIndicators: {
dependencies: ["koa"],
},
},
[EFramework.LESS]: {
description: "Less CSS preprocessor configuration",
displayName: "Less",
features: [EEslintFeature.CSS],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.LESS,
packageIndicators: {
devDependencies: ["less"],
},
},
[EFramework.LIT]: {
description: "Lit library project for web components",
displayName: "Lit",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS, EEslintFeature.JSX],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.ts"],
name: EFramework.LIT,
packageIndicators: {
dependencies: ["lit"],
},
},
[EFramework.LOOPBACK]: {
description: "LoopBack Node.js framework project",
displayName: "LoopBack",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["loopback.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.ts"],
name: EFramework.LOOPBACK,
packageIndicators: {
dependencies: ["@loopback/core"],
},
},
[EFramework.MARKO]: {
description: "Marko UI framework project",
displayName: "Marko",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["marko-cli.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.marko", "src/**/*.js"],
name: EFramework.MARKO,
packageIndicators: {
dependencies: ["marko"],
},
},
[EFramework.MATERIAL_UI]: {
description: "Material-UI React UI library project",
displayName: "Material-UI (MUI)",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.MATERIAL_UI,
packageIndicators: {
dependencies: ["@mui/material", "@mui/core", "@emotion/react"],
},
},
[EFramework.MEDUSA]: {
description: "Medusa JS eCommerce backend framework",
displayName: "Medusa",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["medusa-config.js", "medusa-config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.MEDUSA,
packageIndicators: {
dependencies: ["@medusajs/medusa"],
},
},
[EFramework.METEOR]: {
description: "Meteor full-stack JS framework project",
displayName: "Meteor",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.CSS],
fileIndicators: [".meteor/release"],
ignorePath: {
directories: ["public"],
patterns: [],
},
lintPaths: ["client/**/*", "server/**/*", "imports/**/*"],
name: EFramework.METEOR,
packageIndicators: {
dependencies: ["meteor-node-stubs"],
},
},
[EFramework.MITHRIL]: {
description: "Mithril.js framework project",
displayName: "Mithril.js",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js"],
name: EFramework.MITHRIL,
packageIndicators: {
dependencies: ["mithril"],
},
},
[EFramework.MOBX]: {
description: "MobX state management for JavaScript/React",
displayName: "MobX",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.MOBX,
packageIndicators: {
dependencies: ["mobx"],
},
},
[EFramework.MOCHA]: {
description: "Mocha testing framework",
displayName: "Mocha",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: [".mocharc.js", ".mocharc.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["test/**/*"],
name: EFramework.MOCHA,
packageIndicators: {
devDependencies: ["mocha"],
},
},
[EFramework.MONGOOSE]: {
description: "Mongoose ODM for MongoDB",
displayName: "Mongoose",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["models/**/*"],
name: EFramework.MONGOOSE,
packageIndicators: {
dependencies: ["mongoose"],
},
},
[EFramework.NATIVESCRIPT]: {
description: "NativeScript cross-platform framework",
displayName: "NativeScript",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["nativescript.config.ts", "nativescript.config.js"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["app/**/*"],
name: EFramework.NATIVESCRIPT,
packageIndicators: {
dependencies: ["nativescript"],
},
},
[EFramework.NEST]: {
description: "NestJS framework project",
displayName: "NestJS",
features: [EEslintFeature.NEST, EEslintFeature.TYPESCRIPT, EEslintFeature.PERFECTIONIST, EEslintFeature.SONAR, EEslintFeature.PRETTIER],
fileIndicators: ["nest-cli.json", ".nest-cli.json"],
ignorePath: {
directories: [],
patterns: ["**/*.spec.ts", "**/*.e2e-spec.ts"],
},
isSupportWatch: true,
lintPaths: ["src/**/*.ts", "test/**/*.ts", "libs/**/*.ts"],
name: EFramework.NEST,
packageIndicators: {
dependencies: ["@nestjs/core", "@nestjs/common"],
devDependencies: ["@nestjs/cli"],
},
},
[EFramework.NEXT]: {
description: "Next.js React framework project",
displayName: "Next.js",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.TAILWIND_CSS, EEslintFeature.PRETTIER, EEslintFeature.NEXT, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["next.config.js", "next.config.mjs", "next.config.ts"],
ignorePath: {
directories: [".next"],
patterns: ["**/*.d.ts", "public/**/*"],
},
isSupportWatch: true,
lintPaths: ["pages/**/*", "app/**/*", "components/**/*", "lib/**/*"],
name: EFramework.NEXT,
packageIndicators: {
dependencies: ["next"],
},
},
[EFramework.NIGHTWATCH]: {
description: "Nightwatch.js end-to-end testing framework",
displayName: "Nightwatch",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: ["nightwatch.conf.js"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["tests/**/*"],
name: EFramework.NIGHTWATCH,
packageIndicators: {
devDependencies: ["nightwatch"],
},
},
[EFramework.NONE]: {
description: "No specific framework detected",
displayName: "Generic Project",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
ignorePath: {
directories: [],
patterns: ["**/*.min.js", "**/*.bundle.js"],
},
lintPaths: ["src/**/*", "lib/**/*"],
name: EFramework.NONE,
packageIndicators: {},
},
[EFramework.NUXT]: {
description: "Nuxt.js Vue framework project",
displayName: "Nuxt.js",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.TAILWIND_CSS, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["nuxt.config.js", "nuxt.config.ts"],
ignorePath: {
directories: [".nuxt"],
patterns: ["static/**/*", "assets/**/*"],
},
lintPaths: ["pages/**/*.vue", "components/**/*.vue", "layouts/**/*.vue"],
name: EFramework.NUXT,
packageIndicators: {
dependencies: ["nuxt"],
devDependencies: ["@nuxt/types"],
},
},
[EFramework.PARCEL]: {
description: "Parcel bundler project",
displayName: "Parcel",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.PARCEL,
packageIndicators: {
devDependencies: ["parcel"],
},
},
[EFramework.PINIA]: {
description: "Pinia state management for Vue",
displayName: "Pinia",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.PINIA,
packageIndicators: {
dependencies: ["pinia"],
},
},
[EFramework.PLAYWRIGHT]: {
description: "Playwright end-to-end testing framework",
displayName: "Playwright",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: ["playwright.config.js", "playwright.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["tests/**/*"],
name: EFramework.PLAYWRIGHT,
packageIndicators: {
devDependencies: ["@playwright/test"],
},
},
[EFramework.POLYMER]: {
description: "Polymer library project",
displayName: "Polymer",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["polymer.json"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js"],
name: EFramework.POLYMER,
packageIndicators: {
dependencies: ["@polymer/polymer"],
},
},
[EFramework.POSTCSS]: {
description: "PostCSS configuration project",
displayName: "PostCSS",
features: [EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: ["postcss.config.js"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.POSTCSS,
packageIndicators: {
devDependencies: ["postcss"],
},
},
[EFramework.PREACT]: {
description: "Preact lightweight React alternative",
displayName: "Preact",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["preact.config.js"],
ignorePath: {
directories: [],
patterns: ["**/*.d.ts"],
},
lintPaths: ["src/**/*.jsx", "src/**/*.tsx"],
name: EFramework.PREACT,
packageIndicators: {
dependencies: ["preact"],
},
},
[EFramework.PRETTIER]: {
description: "Prettier code formatter configuration",
displayName: "Prettier",
features: [EEslintFeature.PRETTIER],
fileIndicators: [".prettierrc", ".prettierrc.js", "prettier.config.js"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.PRETTIER,
packageIndicators: {
devDependencies: ["prettier"],
},
},
[EFramework.PRISMA]: {
description: "Prisma ORM configuration",
displayName: "Prisma",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.NODE, EEslintFeature.PRETTIER],
fileIndicators: ["prisma/schema.prisma"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.PRISMA,
packageIndicators: {
dependencies: ["@prisma/client"],
devDependencies: ["prisma"],
},
},
[EFramework.PUPPETEER]: {
description: "Puppeteer testing / automation tool",
displayName: "Puppeteer",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSON],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["tests/**/*"],
name: EFramework.PUPPETEER,
packageIndicators: {
devDependencies: ["puppeteer"],
},
},
[EFramework.QWIK]: {
description: "Qwik resumable frontend framework project",
displayName: "Qwik",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.JAVASCRIPT],
fileIndicators: ["qwik.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.QWIK,
packageIndicators: {
dependencies: ["@builder.io/qwik"],
},
},
[EFramework.REACT]: {
description: "React library project",
displayName: "React",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.TAILWIND_CSS, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS],
fileIndicators: ["src/App.jsx", "src/App.tsx"],
ignorePath: {
directories: [],
patterns: ["**/*.d.ts", "public/**/*"],
},
lintPaths: ["src/**/*", "components/**/*"],
name: EFramework.REACT,
packageIndicators: {
dependencies: ["react", "react-dom"],
},
},
[EFramework.REACT_NATIVE]: {
description: "React Native mobile application project",
displayName: "React Native",
features: [EEslintFeature.REACT, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.TYPESCRIPT],
fileIndicators: [],
ignorePath: {
directories: ["android", "ios"],
patterns: [],
},
lintPaths: ["App.js", "src/**/*"],
name: EFramework.REACT_NATIVE,
packageIndicators: {
dependencies: ["react-native"],
},
},
[EFramework.RECOIL]: {
description: "Recoil state management for React",
displayName: "Recoil",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.RECOIL,
packageIndicators: {
dependencies: ["recoil"],
},
},
[EFramework.REDUX]: {
description: "Redux state management for React",
displayName: "Redux",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.REDUX,
packageIndicators: {
dependencies: ["redux"],
either: ["react-redux"],
},
},
[EFramework.REDWOOD]: {
description: "RedwoodJS full-stack framework project",
displayName: "RedwoodJS",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.NODE],
fileIndicators: ["redwood.toml"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["api/src/**/*", "web/src/**/*"],
name: EFramework.REDWOOD,
packageIndicators: {
dependencies: ["@redwoodjs/core"],
},
},
[EFramework.RELAY]: {
description: "Relay GraphQL client for React",
displayName: "Relay",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.RELAY,
packageIndicators: {
dependencies: ["react-relay", "relay-runtime"],
},
},
[EFramework.REMIX]: {
description: "Remix React framework project",
displayName: "Remix",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.TAILWIND_CSS, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: ["remix.config.js", "remix.config.ts", "app/root.tsx"],
ignorePath: {
directories: ["public/build"],
patterns: ["public/**/*", "**/*.d.ts"],
},
lintPaths: ["app/**/*", "routes/**/*", "styles/**/*"],
name: EFramework.REMIX,
packageIndicators: {
dependencies: ["@remix-run/react", "@remix-run/node"],
},
},
[EFramework.RESTIFY]: {
description: "Restify Node.js framework project",
displayName: "Restify",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.js"],
name: EFramework.RESTIFY,
packageIndicators: {
dependencies: ["restify"],
},
},
[EFramework.ROLLUP]: {
description: "Rollup bundler project",
displayName: "Rollup",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: ["rollup.config.js", "rollup.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.ROLLUP,
packageIndicators: {
devDependencies: ["rollup"],
},
},
[EFramework.SAILS]: {
description: "Sails.js MVC Node.js framework project",
displayName: "Sails.js",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["sails.config.js"],
ignorePath: {
directories: ["views"],
patterns: [],
},
lintPaths: ["api/**/*.js", "config/**/*.js"],
name: EFramework.SAILS,
packageIndicators: {
dependencies: ["sails"],
},
},
[EFramework.SASS]: {
description: "Sass/SCSS preprocessor configuration",
displayName: "Sass/SCSS",
features: [EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.SASS,
packageIndicators: {
devDependencies: ["sass"],
},
},
[EFramework.SEQUELIZE]: {
description: "Sequelize ORM configuration",
displayName: "Sequelize",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.NODE, EEslintFeature.PRETTIER],
fileIndicators: ["sequelize.config.js", ".sequelizerc"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["models/**/*", "migrations/**/*"],
name: EFramework.SEQUELIZE,
packageIndicators: {
dependencies: ["sequelize"],
},
},
[EFramework.SNOWPACK]: {
description: "Snowpack build tool project",
displayName: "Snowpack",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: ["snowpack.config.js", "snowpack.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.SNOWPACK,
packageIndicators: {
devDependencies: ["snowpack"],
},
},
[EFramework.SOLID]: {
description: "Solid.js frontend library project",
displayName: "Solid.js",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.JAVASCRIPT],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*.tsx", "components/**/*.tsx"],
name: EFramework.SOLID,
packageIndicators: {
dependencies: ["solid-js"],
},
},
[EFramework.STORYBOOK]: {
description: "Storybook UI component explorer",
displayName: "Storybook",
features: [EEslintFeature.REACT, EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [".storybook/main.js", ".storybook/main.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["stories/**/*"],
name: EFramework.STORYBOOK,
packageIndicators: {
devDependencies: ["@storybook/react", "@storybook/vue", "@storybook/svelte"],
},
},
[EFramework.STRAPI]: {
description: "Strapi Headless CMS framework project",
displayName: "Strapi",
features: [EEslintFeature.NODE, EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*", "config/**/*"],
name: EFramework.STRAPI,
packageIndicators: {
dependencies: ["strapi"],
},
},
[EFramework.STYLED_COMPONENTS]: {
description: "Styled Components for React",
displayName: "Styled Components",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.STYLED_COMPONENTS,
packageIndicators: {
dependencies: ["styled-components"],
},
},
[EFramework.SVELTE]: {
description: "Svelte framework project",
displayName: "Svelte",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.TAILWIND_CSS, EEslintFeature.CSS, EEslintFeature.JAVASCRIPT],
fileIndicators: ["svelte.config.js"],
ignorePath: {
directories: [".svelte-kit"],
patterns: ["static/**/*", "**/*.d.ts"],
},
lintPaths: ["src/**/*.svelte", "src/**/*.ts", "src/**/*.js"],
name: EFramework.SVELTE,
packageIndicators: {
dependencies: ["svelte"],
devDependencies: ["@sveltejs/kit"],
},
},
[EFramework.SVELTEKIT]: {
description: "SvelteKit meta-framework project",
displayName: "SvelteKit",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.PRETTIER, EEslintFeature.TAILWIND_CSS, EEslintFeature.CSS, EEslintFeature.JAVASCRIPT],
fileIndicators: ["svelte.config.js", "svelte.config.ts"],
ignorePath: {
directories: [".svelte-kit"],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.SVELTEKIT,
packageIndicators: {
dependencies: ["@sveltejs/kit", "svelte"],
},
},
[EFramework.SWR]: {
description: "SWR React hooks library for data fetching",
displayName: "SWR",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.SWR,
packageIndicators: {
dependencies: ["swr"],
},
},
[EFramework.TAILWIND]: {
description: "Tailwind CSS setup project",
displayName: "Tailwind CSS",
features: [EEslintFeature.TAILWIND_CSS, EEslintFeature.CSS, EEslintFeature.PRETTIER],
fileIndicators: ["tailwind.config.js", "tailwind.config.ts"],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.TAILWIND,
packageIndicators: {
devDependencies: ["tailwindcss"],
},
},
[EFramework.TANSTACK_QUERY]: {
description: "TanStack React Query for data fetching",
displayName: "TanStack Query (React Query)",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER, EEslintFeature.TANSTACK],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.TANSTACK_QUERY,
packageIndicators: {
dependencies: ["@tanstack/react-query"],
},
},
[EFramework.TANSTACK_ROUTER]: {
description: "TanStack React Router",
displayName: "TanStack Router (React Router)",
features: [EEslintFeature.REACT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSX, EEslintFeature.PRETTIER, EEslintFeature.TANSTACK],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.TANSTACK_ROUTER,
packageIndicators: {
dependencies: ["@tanstack/react-router"],
},
},
[EFramework.TAURI]: {
description: "Tauri desktop application framework",
displayName: "Tauri",
features: [EEslintFeature.NODE, EEslintFeature.TYPESCRIPT, EEslintFeature.JAVASCRIPT, EEslintFeature.PRETTIER],
fileIndicators: ["tauri.conf.json"],
ignorePath: {
directories: ["src-tauri"],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.TAURI,
packageIndicators: {
dependencies: ["@tauri-apps/api"],
},
},
[EFramework.TRPC]: {
description: "tRPC end-to-end typesafe API",
displayName: "tRPC",
features: [EEslintFeature.TYPESCRIPT, EEslintFeature.NODE, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: ["src/**/*"],
name: EFramework.TRPC,
packageIndicators: {
dependencies: ["@trpc/server", "@trpc/client"],
},
},
[EFramework.TURBOPACK]: {
description: "Turbopack (experimental bundler by Vercel)",
displayName: "Turbopack",
features: [EEslintFeature.JAVASCRIPT, EEslintFeature.TYPESCRIPT, EEslintFeature.JSON, EEslintFeature.PRETTIER],
fileIndicators: [],
ignorePath: {
directories: [],
patterns: [],
},
lintPaths: [],
name: EFramework.TURBOPACK,
packageIndicators: {
devDependencies: ["@vercel/turbopack"],
},
},
[EFramework.TYPEORM]: {
description: "TypeORM configuration",