UNPKG

@elsikora/setup-wizard

Version:

Setup Wizard - CLI scaffolding utility

1,383 lines (1,381 loc) 54.9 kB
#!/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",