@raclettejs/core 0.1.30 → 0.1.32-nightly
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -3
- package/dist/cli.js +1562 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.js +452 -0
- package/dist/index.js.map +7 -0
- package/package.json +4 -4
- package/services/backend/.yarn/install-state.gz +0 -0
- package/services/backend/dist/core/eventBus/index.js +7 -0
- package/services/backend/dist/core/pluginSystem/configGenerator/index.js +346 -0
- package/services/backend/dist/core/sockets/index.js +95 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/account/events/index.js +31 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/account/index.js +48 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/account/routes/index.js +15 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/composition/events/index.js +22 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/composition/index.js +51 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/composition/routes/index.js +19 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/interactionLink/events/index.js +22 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/interactionLink/index.js +48 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/index.js +19 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/project/events/index.js +31 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/project/index.js +49 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/project/routes/index.js +16 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/tag/events/index.js +39 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/tag/index.js +50 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/tag/routes/index.js +19 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/user/events/index.js +31 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/user/index.js +51 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/user/routes/index.js +21 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/workSession/events/index.js +31 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/workSession/index.js +48 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/datatypes/workSession/routes/index.js +15 -0
- package/services/backend/dist/corePlugins/raclette__core/backend/index.js +34 -0
- package/services/backend/dist/domains/index.js +11 -0
- package/services/backend/dist/domains/system/index.js +11 -0
- package/services/backend/dist/domains/system/routes/index.js +17 -0
- package/services/backend/dist/helpers/index.js +14 -0
- package/services/backend/dist/index.js +3 -0
- package/services/backend/dist/modules/authentication/index.js +253 -0
- package/services/backend/dist/shared/types/core/index.js +8 -0
- package/services/backend/dist/shared/types/dataTypes/index.js +6 -0
- package/services/backend/dist/shared/types/index.js +8 -0
- package/services/backend/dist/shared/types/plugins/index.js +8 -0
- package/services/backend/dist/types/index.js +12 -0
- package/services/backend/dist/utils/index.js +2 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.patchOwn.ts +1 -1
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/user.service.ts +22 -1
- package/services/backend/yarn.lock +1 -1
- package/services/frontend/.yarn/install-state.gz +0 -0
- package/services/frontend/package.json +2 -2
- package/services/frontend/src/core/lib/data/dataApi.ts +1 -2
- package/services/frontend/src/orchestrator/ProductOrchestrator.vue +8 -1
- package/services/frontend/src/orchestrator/assets/styles/layers.css +1 -4
- package/services/frontend/src/orchestrator/assets/styles/tailwindStyles.css +3 -3
- package/services/frontend/src/orchestrator/assets/styles/vuetifyStyles.scss +4 -1
- package/services/frontend/src/orchestrator/components/dataExport/DataExporter.vue +303 -0
- package/services/frontend/src/orchestrator/components/dataTable/BaseDataTable.vue +473 -0
- package/services/frontend/src/orchestrator/components/dataTable/FileUpload.vue +83 -0
- package/services/frontend/src/orchestrator/components/dataTable/SelectionDialog.vue +169 -0
- package/services/frontend/src/orchestrator/components/dataTable/SummaryDialog.vue +211 -0
- package/services/frontend/src/orchestrator/components/index.ts +2 -0
- package/services/frontend/src/orchestrator/composables/index.ts +1 -0
- package/services/frontend/src/orchestrator/composables/useExport/formats/builtins.ts +124 -0
- package/services/frontend/src/orchestrator/composables/useExport/index.ts +176 -0
- package/services/frontend/src/orchestrator/composables/useExport/types.ts +141 -0
- package/services/frontend/src/orchestrator/i18n/de-DE.json +26 -1
- package/services/frontend/src/orchestrator/i18n/en-EU.json +26 -1
- package/services/frontend/src/orchestrator/i18n/sk.json +26 -1
- package/services/frontend/src/orchestrator/i18n/tl-TL.json +14 -0
- package/services/frontend/src/orchestrator/setup/vuetify.ts +0 -1
- package/services/frontend/yarn.lock +4854 -0
- package/types/index.ts +1 -1
- package/package/LICENSE.md +0 -699
- package/package/README.md +0 -49
- package/package/dev/README.md +0 -4
- package/package/index.js +0 -11
- package/package/raclette.default.config.yaml +0 -60
- package/package/services/backend/README.md +0 -172
- package/package/services/backend/yarn.lock +0 -5320
- package/package/services/frontend/README.md +0 -511
- package/package/services/frontend/src/core/lib/eggs/readme.md +0 -75
- package/package/services/frontend/yarn.lock +0 -0
- package/package/src/README.md +0 -404
- package/package/templates/README.md +0 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
var ke=Object.create;var J=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,Ne=Object.prototype.hasOwnProperty;var C=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var W=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var _e=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of je(r))!Ne.call(e,o)&&o!==t&&J(e,o,{get:()=>r[o],enumerable:!(n=Ae(r,o))||n.enumerable});return e};var Ie=(e,r,t)=>(t=e!=null?ke(De(e)):{},_e(r||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e));var ie=W(($r,He)=>{He.exports={name:"dotenv",version:"17.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var fe=W((Lr,y)=>{var $=C("fs"),j=C("path"),Qe=C("os"),ze=C("crypto"),Ze=ie(),L=Ze.version,ae=["\u{1F510} encrypt with Dotenvx: https://dotenvx.com","\u{1F510} prevent committing .env to code: https://dotenvx.com/precommit","\u{1F510} prevent building .env in docker: https://dotenvx.com/prebuild","\u{1F916} agentic secret storage: https://dotenvx.com/as2","\u26A1\uFE0F secrets for agents: https://dotenvx.com/as2","\u{1F6E1}\uFE0F auth for agents: https://vestauth.com","\u{1F6E0}\uFE0F run anywhere with `dotenvx run -- yourcommand`","\u2699\uFE0F specify custom .env file path with { path: '/custom/path/.env' }","\u2699\uFE0F enable debug logging with { debug: true }","\u2699\uFE0F override existing env vars with { override: true }","\u2699\uFE0F suppress all logs with { quiet: true }","\u2699\uFE0F write to custom object with { processEnv: myObject }","\u2699\uFE0F load multiple .env files with { path: ['.env.local', '.env'] }"];function Xe(){return ae[Math.floor(Math.random()*ae.length)]}function w(e){return typeof e=="string"?!["false","0","no","off",""].includes(e.toLowerCase()):!!e}function er(){return process.stdout.isTTY}function rr(e){return er()?`\x1B[2m${e}\x1B[0m`:e}var tr=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function nr(e){let r={},t=e.toString();t=t.replace(/\r\n?/mg,`
|
|
3
|
+
`);let n;for(;(n=tr.exec(t))!=null;){let o=n[1],i=n[2]||"";i=i.trim();let s=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),s==='"'&&(i=i.replace(/\\n/g,`
|
|
4
|
+
`),i=i.replace(/\\r/g,"\r")),r[o]=i}return r}function or(e){e=e||{};let r=pe(e);e.path=r;let t=u.configDotenv(e);if(!t.parsed){let s=new Error(`MISSING_DATA: Cannot parse ${r} for an unknown reason`);throw s.code="MISSING_DATA",s}let n=ue(e).split(","),o=n.length,i;for(let s=0;s<o;s++)try{let a=n[s].trim(),p=ir(t,a);i=u.decrypt(p.ciphertext,p.key);break}catch(a){if(s+1>=o)throw a}return u.parse(i)}function sr(e){console.error(`[dotenv@${L}][WARN] ${e}`)}function T(e){console.log(`[dotenv@${L}][DEBUG] ${e}`)}function ce(e){console.log(`[dotenv@${L}] ${e}`)}function ue(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function ir(e,r){let t;try{t=new URL(r)}catch(a){if(a.code==="ERR_INVALID_URL"){let p=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw p.code="INVALID_DOTENV_KEY",p}throw a}let n=t.password;if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let o=t.searchParams.get("environment");if(!o){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${o.toUpperCase()}`,s=e.parsed[i];if(!s){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:s,key:n}}function pe(e){let r=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let t of e.path)$.existsSync(t)&&(r=t.endsWith(".vault")?t:`${t}.vault`);else r=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else r=j.resolve(process.cwd(),".env.vault");return $.existsSync(r)?r:null}function le(e){return e[0]==="~"?j.join(Qe.homedir(),e.slice(1)):e}function ar(e){let r=w(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),t=w(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(r||!t)&&ce("Loading env from encrypted .env.vault");let n=u._parseVault(e),o=process.env;return e&&e.processEnv!=null&&(o=e.processEnv),u.populate(o,n,e),{parsed:n}}function lr(e){let r=j.resolve(process.cwd(),".env"),t="utf8",n=process.env;e&&e.processEnv!=null&&(n=e.processEnv);let o=w(n.DOTENV_CONFIG_DEBUG||e&&e.debug),i=w(n.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?t=e.encoding:o&&T("No encoding is specified. UTF-8 is used by default");let s=[r];if(e&&e.path)if(!Array.isArray(e.path))s=[le(e.path)];else{s=[];for(let f of e.path)s.push(le(f))}let a,p={};for(let f of s)try{let h=u.parse($.readFileSync(f,{encoding:t}));u.populate(p,h,e)}catch(h){o&&T(`Failed to load ${f} ${h.message}`),a=h}let D=u.populate(n,p,e);if(o=w(n.DOTENV_CONFIG_DEBUG||o),i=w(n.DOTENV_CONFIG_QUIET||i),o||!i){let f=Object.keys(D).length,h=[];for(let K of s)try{let O=j.relative(process.cwd(),K);h.push(O)}catch(O){o&&T(`Failed to load ${K} ${O.message}`),a=O}ce(`injecting env (${f}) from ${h.join(",")} ${rr(`-- tip: ${Xe()}`)}`)}return a?{parsed:p,error:a}:{parsed:p}}function cr(e){if(ue(e).length===0)return u.configDotenv(e);let r=pe(e);return r?u._configVault(e):(sr(`You set DOTENV_KEY but you are missing a .env.vault file at ${r}. Did you forget to build it?`),u.configDotenv(e))}function ur(e,r){let t=Buffer.from(r.slice(-64),"hex"),n=Buffer.from(e,"base64"),o=n.subarray(0,12),i=n.subarray(-16);n=n.subarray(12,-16);try{let s=ze.createDecipheriv("aes-256-gcm",t,o);return s.setAuthTag(i),`${s.update(n)}${s.final()}`}catch(s){let a=s instanceof RangeError,p=s.message==="Invalid key length",D=s.message==="Unsupported state or unable to authenticate data";if(a||p){let f=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw f.code="INVALID_DOTENV_KEY",f}else if(D){let f=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw f.code="DECRYPTION_FAILED",f}else throw s}}function pr(e,r,t={}){let n=!!(t&&t.debug),o=!!(t&&t.override),i={};if(typeof r!="object"){let s=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw s.code="OBJECT_REQUIRED",s}for(let s of Object.keys(r))Object.prototype.hasOwnProperty.call(e,s)?(o===!0&&(e[s]=r[s],i[s]=r[s]),n&&T(o===!0?`"${s}" is already defined and WAS overwritten`:`"${s}" is already defined and was NOT overwritten`)):(e[s]=r[s],i[s]=r[s]);return i}var u={configDotenv:lr,_configVault:ar,_parseVault:or,config:cr,decrypt:ur,parse:nr,populate:pr};y.exports.configDotenv=u.configDotenv;y.exports._configVault=u._configVault;y.exports._parseVault=u._parseVault;y.exports.config=u.config;y.exports.decrypt=u.decrypt;y.exports.parse=u.parse;y.exports.populate=u.populate;y.exports=u});var H=(e=0)=>r=>`\x1B[${r+e}m`,Q=(e=0)=>r=>`\x1B[${38+e};5;${r}m`,z=(e=0)=>(r,t,n)=>`\x1B[${38+e};2;${r};${t};${n}m`,l={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Er=Object.keys(l.modifier),Se=Object.keys(l.color),$e=Object.keys(l.bgColor),xr=[...Se,...$e];function Le(){let e=new Map;for(let[r,t]of Object.entries(l)){for(let[n,o]of Object.entries(t))l[n]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},t[n]=l[n],e.set(o[0],o[1]);Object.defineProperty(l,r,{value:t,enumerable:!1})}return Object.defineProperty(l,"codes",{value:e,enumerable:!1}),l.color.close="\x1B[39m",l.bgColor.close="\x1B[49m",l.color.ansi=H(),l.color.ansi256=Q(),l.color.ansi16m=z(),l.bgColor.ansi=H(10),l.bgColor.ansi256=Q(10),l.bgColor.ansi16m=z(10),Object.defineProperties(l,{rgbToAnsi256:{value(r,t,n){return r===t&&t===n?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(r){let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(r.toString(16));if(!t)return[0,0,0];let[n]=t;n.length===3&&(n=[...n].map(i=>i+i).join(""));let o=Number.parseInt(n,16);return[o>>16&255,o>>8&255,o&255]},enumerable:!1},hexToAnsi256:{value:r=>l.rgbToAnsi256(...l.hexToRgb(r)),enumerable:!1},ansi256ToAnsi:{value(r){if(r<8)return 30+r;if(r<16)return 90+(r-8);let t,n,o;if(r>=232)t=((r-232)*10+8)/255,n=t,o=t;else{r-=16;let a=r%36;t=Math.floor(r/36)/5,n=Math.floor(a/6)/5,o=a%6/5}let i=Math.max(t,n,o)*2;if(i===0)return 30;let s=30+(Math.round(o)<<2|Math.round(n)<<1|Math.round(t));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(r,t,n)=>l.ansi256ToAnsi(l.rgbToAnsi256(r,t,n)),enumerable:!1},hexToAnsi:{value:r=>l.ansi256ToAnsi(l.hexToAnsi256(r)),enumerable:!1}}),l}var Ve=Le(),d=Ve;import N from"node:process";import Pe from"node:os";import Z from"node:tty";function g(e,r=globalThis.Deno?globalThis.Deno.args:N.argv){let t=e.startsWith("-")?"":e.length===1?"-":"--",n=r.indexOf(t+e),o=r.indexOf("--");return n!==-1&&(o===-1||n<o)}var{env:c}=N,k;g("no-color")||g("no-colors")||g("color=false")||g("color=never")?k=0:(g("color")||g("colors")||g("color=true")||g("color=always"))&&(k=1);function Fe(){if("FORCE_COLOR"in c)return c.FORCE_COLOR==="true"?1:c.FORCE_COLOR==="false"?0:c.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(c.FORCE_COLOR,10),3)}function Me(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Be(e,{streamIsTTY:r,sniffFlags:t=!0}={}){let n=Fe();n!==void 0&&(k=n);let o=t?k:n;if(o===0)return 0;if(t){if(g("color=16m")||g("color=full")||g("color=truecolor"))return 3;if(g("color=256"))return 2}if("TF_BUILD"in c&&"AGENT_NAME"in c)return 1;if(e&&!r&&o===void 0)return 0;let i=o||0;if(c.TERM==="dumb")return i;if(N.platform==="win32"){let s=Pe.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in c)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in c)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in c)||c.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in c)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(c.TEAMCITY_VERSION)?1:0;if(c.COLORTERM==="truecolor"||c.TERM==="xterm-kitty"||c.TERM==="xterm-ghostty"||c.TERM==="wezterm")return 3;if("TERM_PROGRAM"in c){let s=Number.parseInt((c.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(c.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(c.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(c.TERM)||"COLORTERM"in c?1:i}function X(e,r={}){let t=Be(e,{streamIsTTY:e&&e.isTTY,...r});return Me(t)}var Ge={stdout:X({isTTY:Z.isatty(1)}),stderr:X({isTTY:Z.isatty(2)})},ee=Ge;function re(e,r,t){let n=e.indexOf(r);if(n===-1)return e;let o=r.length,i=0,s="";do s+=e.slice(i,n)+r+t,i=n+o,n=e.indexOf(r,i);while(n!==-1);return s+=e.slice(i),s}function te(e,r,t,n){let o=0,i="";do{let s=e[n-1]==="\r";i+=e.slice(o,s?n-1:n)+r+(s?`\r
|
|
5
|
+
`:`
|
|
6
|
+
`)+t,o=n+1,n=e.indexOf(`
|
|
7
|
+
`,o)}while(n!==-1);return i+=e.slice(o),i}var{stdout:ne,stderr:oe}=ee,_=Symbol("GENERATOR"),v=Symbol("STYLER"),E=Symbol("IS_EMPTY"),se=["ansi","ansi","ansi256","ansi16m"],b=Object.create(null),Ye=(e,r={})=>{if(r.level&&!(Number.isInteger(r.level)&&r.level>=0&&r.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=ne?ne.level:0;e.level=r.level===void 0?t:r.level};var Ue=e=>{let r=(...t)=>t.join(" ");return Ye(r,e),Object.setPrototypeOf(r,x.prototype),r};function x(e){return Ue(e)}Object.setPrototypeOf(x.prototype,Function.prototype);for(let[e,r]of Object.entries(d))b[e]={get(){let t=A(this,S(r.open,r.close,this[v]),this[E]);return Object.defineProperty(this,e,{value:t}),t}};b.visible={get(){let e=A(this,this[v],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var I=(e,r,t,...n)=>e==="rgb"?r==="ansi16m"?d[t].ansi16m(...n):r==="ansi256"?d[t].ansi256(d.rgbToAnsi256(...n)):d[t].ansi(d.rgbToAnsi(...n)):e==="hex"?I("rgb",r,t,...d.hexToRgb(...n)):d[t][e](...n),qe=["rgb","hex","ansi256"];for(let e of qe){b[e]={get(){let{level:t}=this;return function(...n){let o=S(I(e,se[t],"color",...n),d.color.close,this[v]);return A(this,o,this[E])}}};let r="bg"+e[0].toUpperCase()+e.slice(1);b[r]={get(){let{level:t}=this;return function(...n){let o=S(I(e,se[t],"bgColor",...n),d.bgColor.close,this[v]);return A(this,o,this[E])}}}}var Ke=Object.defineProperties(()=>{},{...b,level:{enumerable:!0,get(){return this[_].level},set(e){this[_].level=e}}}),S=(e,r,t)=>{let n,o;return t===void 0?(n=e,o=r):(n=t.openAll+e,o=r+t.closeAll),{open:e,close:r,openAll:n,closeAll:o,parent:t}},A=(e,r,t)=>{let n=(...o)=>Je(n,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(n,Ke),n[_]=e,n[v]=r,n[E]=t,n},Je=(e,r)=>{if(e.level<=0||!r)return e[E]?"":r;let t=e[v];if(t===void 0)return r;let{openAll:n,closeAll:o}=t;if(r.includes("\x1B"))for(;t!==void 0;)r=re(r,t.close,t.open),t=t.parent;let i=r.indexOf(`
|
|
8
|
+
`);return i!==-1&&(r=te(r,o,n,i)),n+r+o};Object.defineProperties(x.prototype,b);var We=x(),Ir=x({level:oe?oe.level:0});var m=We;var fr=Ie(fe(),1);import Jr from"chokidar";import Hr from"fs-extra";import zr from"path";import Mr from"fs-extra";import Gr from"path";var V=class{constructor(){this.level="info";this.verbose=!1}setLevel(r){this.level=r}setVerbose(r){this.verbose=r}shouldLog(r){let t={error:0,warn:1,info:2,debug:3};return r==="debug"&&this.verbose?!0:t[r]<=t[this.level]}getTypeStyle(r){switch(r){case"success":return m.green;case"error":return m.red;case"warning":return m.yellow;case"info":return m.blue;case"instruction":return m.cyan;case"progress":return m.reset;case"debug":return m.gray;case"raclette":return m.rgb(221,139,64);default:return t=>t}}getTypeIcon(r){switch(r){case"success":return"\u2705";case"error":return"\u274C";case"warning":return"\u26A0\uFE0F";case"info":return"\u2139\uFE0F ";case"instruction":return"\u{1F4A1}";case"progress":return"\u{1F504}";case"debug":return"";case"raclette":return"\u{1F9C0}";default:return""}}log(r,t,n){if(!this.shouldLog(r))return;let o=n?this.getTypeStyle(n):m.reset,i=n?this.getTypeIcon(n):"",s=i?`${i} `:"";console.log(o(`${s}${t}`))}logError(r,t){if(!this.shouldLog("error"))return;let n=this.getTypeStyle("error"),o=this.getTypeIcon("error"),i=o?`${o} `:"";t?console.error(n(`${i}${r}`),t):console.error(n(`${i}${r}`))}error(r,t){this.logError(r,t)}warn(r){this.log("warn",r,"warning")}info(r){this.log("info",r,"info")}debug(r){this.log("debug",r,"debug")}success(r){this.log("info",r,"success")}instruction(r){this.log("info",r,"instruction")}progress(r){this.log("info",r,"progress")}raclette(r){this.log("info",r,"raclette")}raw(r,t="info"){this.shouldLog(t)&&console.log(r)}},R=new V;var gr=e=>e;import Re from"fs-extra";import Oe from"path";var ge=(e=!1)=>["eslint","@eslint/js","globals","eslint-config-prettier","prettier","eslint-plugin-prettier",...e?P():[]],P=()=>[],de=()=>["import globals from 'globals';","import eslintConfigPrettier from 'eslint-config-prettier';"],me=(e=!1)=>{let r=` // JavaScript config
|
|
9
|
+
{
|
|
10
|
+
files: ["**/*.{js,mjs,cjs}"],
|
|
11
|
+
languageOptions: {
|
|
12
|
+
globals: {
|
|
13
|
+
...globals.browser,
|
|
14
|
+
...globals.node,
|
|
15
|
+
test: "readonly",
|
|
16
|
+
expect: "readonly",
|
|
17
|
+
it: "readonly",
|
|
18
|
+
cy: "readonly"
|
|
19
|
+
},
|
|
20
|
+
ecmaVersion: "latest",
|
|
21
|
+
sourceType: 'module'
|
|
22
|
+
},
|
|
23
|
+
rules: {
|
|
24
|
+
// Common recommended rules
|
|
25
|
+
"no-console": "warn",
|
|
26
|
+
"prefer-const": "error",
|
|
27
|
+
"no-unused-vars": "warn",
|
|
28
|
+
"curly": ["error", "all"],
|
|
29
|
+
"eqeqeq": ["error", "always"],
|
|
30
|
+
"require-await": "error",
|
|
31
|
+
"padding-line-between-statements": [
|
|
32
|
+
"error",
|
|
33
|
+
// nextline after const
|
|
34
|
+
{ blankLine: "always", prev: "const", next: "*" },
|
|
35
|
+
// nextline after let
|
|
36
|
+
{ blankLine: "always", prev: "let", next: "*" },
|
|
37
|
+
// allow const after const
|
|
38
|
+
{ blankLine: "any", prev: "const", next: "const" },
|
|
39
|
+
// allow let after const
|
|
40
|
+
{ blankLine: "any", prev: "const", next: "let" },
|
|
41
|
+
// allow const after let
|
|
42
|
+
{ blankLine: "any", prev: "let", next: "const" },
|
|
43
|
+
// allow let after let
|
|
44
|
+
{ blankLine: "any", prev: "let", next: "let" },
|
|
45
|
+
// add blank line before return statements
|
|
46
|
+
{ blankLine: "always", prev: "*", next: "return" },
|
|
47
|
+
// new line between method declarations
|
|
48
|
+
{ blankLine: "always", prev: "const", next: "block-like" }
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}`;return e?r+`,
|
|
52
|
+
|
|
53
|
+
`+dr():r},dr=()=>` // Style recommended config
|
|
54
|
+
{
|
|
55
|
+
files: ["**/*.{js,mjs,cjs,ts,tsx}"],
|
|
56
|
+
rules: {
|
|
57
|
+
// Style and formatting rules
|
|
58
|
+
"semi": ["error", "never"],
|
|
59
|
+
"quotes": ["error", "double", { "avoidEscape": true }],
|
|
60
|
+
"comma-dangle": ["error", "always-multiline"],
|
|
61
|
+
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0 }],
|
|
62
|
+
"object-curly-spacing": ["error", "always"],
|
|
63
|
+
"array-bracket-spacing": ["error", "never"],
|
|
64
|
+
"computed-property-spacing": ["error", "never"],
|
|
65
|
+
"comma-spacing": ["error", { "before": false, "after": true }],
|
|
66
|
+
"eol-last": ["error", "always"],
|
|
67
|
+
"indent": ["error", 2],
|
|
68
|
+
"linebreak-style": ["error", "unix"],
|
|
69
|
+
"no-trailing-spaces": "error",
|
|
70
|
+
"dot-notation": ["error", { allowKeywords: true }],
|
|
71
|
+
"id-length": [
|
|
72
|
+
"error",
|
|
73
|
+
{ min: 3, exceptions: ["i", "j", "a", "b", "fs", "id"], properties: "never" },
|
|
74
|
+
],
|
|
75
|
+
}
|
|
76
|
+
}`;var F=(e=!1)=>["eslint-plugin-react","eslint-plugin-react-hooks",...e?M():[]],M=()=>[],ye=()=>["import react from 'eslint-plugin-react';","import reactHooks from 'eslint-plugin-react-hooks';"],he=(e=!1)=>{let r=` // React config
|
|
77
|
+
{
|
|
78
|
+
files: ["**/*.{jsx,tsx}"],
|
|
79
|
+
plugins: {
|
|
80
|
+
react,
|
|
81
|
+
'react-hooks': reactHooks
|
|
82
|
+
},
|
|
83
|
+
rules: {
|
|
84
|
+
// Essential React rules
|
|
85
|
+
"react/jsx-uses-react": "error",
|
|
86
|
+
"react/jsx-uses-vars": "error",
|
|
87
|
+
"react-hooks/rules-of-hooks": "error",
|
|
88
|
+
"react-hooks/exhaustive-deps": "warn",
|
|
89
|
+
|
|
90
|
+
// Additional sensible React rules
|
|
91
|
+
"react/prop-types": "warn",
|
|
92
|
+
"react/jsx-no-duplicate-props": "error",
|
|
93
|
+
"react/jsx-no-undef": "error",
|
|
94
|
+
"react/jsx-pascal-case": "error",
|
|
95
|
+
"react/no-direct-mutation-state": "error",
|
|
96
|
+
"react/no-unescaped-entities": "error"
|
|
97
|
+
}
|
|
98
|
+
}`;return e?r+`,
|
|
99
|
+
|
|
100
|
+
`+mr():r},mr=()=>"";var ve=(e=!1)=>["typescript-eslint",...e?B():[]],B=()=>["eslint-plugin-import","eslint-plugin-prefer-arrow-functions"],be=e=>{let r=["import tseslint from 'typescript-eslint';"];return e&&(r.push("import importPlugin from 'eslint-plugin-import';"),r.push("import preferArrow from 'eslint-plugin-prefer-arrow-functions';")),r},we=(e=!1)=>{let t=` // TypeScript config
|
|
101
|
+
{
|
|
102
|
+
files: ["**/*.{ts,tsx}"],
|
|
103
|
+
plugins: ${e?`{
|
|
104
|
+
'@typescript-eslint': tseslint.plugin,
|
|
105
|
+
'import': importPlugin,
|
|
106
|
+
'prefer-arrow': preferArrow
|
|
107
|
+
}`:`{
|
|
108
|
+
'@typescript-eslint': tseslint.plugin
|
|
109
|
+
}`},
|
|
110
|
+
languageOptions: {
|
|
111
|
+
parser: tseslint.parser,
|
|
112
|
+
parserOptions: {
|
|
113
|
+
ecmaVersion: "latest",
|
|
114
|
+
sourceType: 'module',
|
|
115
|
+
project: './tsconfig.json'
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
rules: {
|
|
119
|
+
// Basic TypeScript rules
|
|
120
|
+
'no-unused-vars': 'off', // disable JS rule in favor of TS rule
|
|
121
|
+
'@typescript-eslint/no-unused-vars': ['warn', {
|
|
122
|
+
argsIgnorePattern: '^(_|error|config|options|args|props|params|fastify|req|request|res|reply)',
|
|
123
|
+
varsIgnorePattern: '^(_|error|config|options|args|props|params)',
|
|
124
|
+
caughtErrorsIgnorePattern: '^(_|error|config|options|args|props|params)'
|
|
125
|
+
}]
|
|
126
|
+
}
|
|
127
|
+
}`;return e?t+`,
|
|
128
|
+
|
|
129
|
+
`+yr():t},yr=()=>` // TypeScript recommended config
|
|
130
|
+
{
|
|
131
|
+
files: ["**/*.{ts,tsx}"],
|
|
132
|
+
rules: {
|
|
133
|
+
// More opinionated TypeScript rules
|
|
134
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
135
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
136
|
+
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
137
|
+
'@typescript-eslint/no-non-null-assertion': 'warn',
|
|
138
|
+
'@typescript-eslint/no-inferrable-types': 'warn',
|
|
139
|
+
'@typescript-eslint/naming-convention': [
|
|
140
|
+
'error',
|
|
141
|
+
{
|
|
142
|
+
selector: 'interface',
|
|
143
|
+
format: ['PascalCase'],
|
|
144
|
+
custom: {
|
|
145
|
+
regex: '^I[A-Z]',
|
|
146
|
+
match: false
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
selector: 'typeAlias',
|
|
151
|
+
format: ['PascalCase']
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
selector: 'enum',
|
|
155
|
+
format: ['PascalCase']
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
'@typescript-eslint/consistent-type-imports': [
|
|
159
|
+
'error',
|
|
160
|
+
{
|
|
161
|
+
prefer: 'type-imports',
|
|
162
|
+
disallowTypeAnnotations: false
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],
|
|
166
|
+
'@typescript-eslint/prefer-optional-chain': 'warn',
|
|
167
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'warn',
|
|
168
|
+
'@typescript-eslint/prefer-ts-expect-error': 'warn',
|
|
169
|
+
|
|
170
|
+
// Import organization
|
|
171
|
+
'import/order': ['error', {
|
|
172
|
+
'groups': [
|
|
173
|
+
'type',
|
|
174
|
+
['builtin', 'external'],
|
|
175
|
+
['internal', 'parent', 'sibling', 'index'],
|
|
176
|
+
],
|
|
177
|
+
'alphabetize': {
|
|
178
|
+
'order': 'asc',
|
|
179
|
+
'caseInsensitive': true,
|
|
180
|
+
},
|
|
181
|
+
'pathGroups': [
|
|
182
|
+
// Handle all type imports first, from both external and internal
|
|
183
|
+
{
|
|
184
|
+
'pattern': 'type',
|
|
185
|
+
'group': 'type',
|
|
186
|
+
'position': 'before',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
'pattern': '{type,types,Types}',
|
|
190
|
+
'group': 'type',
|
|
191
|
+
'position': 'before',
|
|
192
|
+
},
|
|
193
|
+
// Handle aliased paths as internal
|
|
194
|
+
{
|
|
195
|
+
'pattern': '@/**',
|
|
196
|
+
'group': 'internal',
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
'pathGroupsExcludedImportTypes': ['type'],
|
|
200
|
+
}],
|
|
201
|
+
|
|
202
|
+
// Arrow function preference
|
|
203
|
+
'prefer-arrow/prefer-arrow-functions': [
|
|
204
|
+
'error',
|
|
205
|
+
{
|
|
206
|
+
'disallowPrototype': true,
|
|
207
|
+
'singleReturnOnly': false,
|
|
208
|
+
'classPropertiesAllowed': false,
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
}`;var G=(e=!1)=>["eslint-plugin-vue","vue-eslint-parser",...e?Y():[]],Y=()=>[],Ce=()=>["import vue from 'eslint-plugin-vue';","import vueEslintParser from 'vue-eslint-parser';"],Ee=(e=!1)=>{let r=` // Vue config
|
|
213
|
+
{
|
|
214
|
+
files: ["**/*.vue"],
|
|
215
|
+
// Manually add Vue plugin
|
|
216
|
+
plugins: {
|
|
217
|
+
vue
|
|
218
|
+
},
|
|
219
|
+
languageOptions: {
|
|
220
|
+
parser: vueEslintParser,
|
|
221
|
+
parserOptions: {
|
|
222
|
+
ecmaVersion: "latest",
|
|
223
|
+
sourceType: 'module',
|
|
224
|
+
parser: tseslint.parser,
|
|
225
|
+
extraFileExtensions: [".vue"]
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
rules: {
|
|
229
|
+
// Essential Vue rules (from ESLint plugin Vue)
|
|
230
|
+
"vue/multi-word-component-names": "off",
|
|
231
|
+
"vue/no-mutating-props": "error",
|
|
232
|
+
"vue/no-reserved-component-names": "error",
|
|
233
|
+
"vue/no-use-v-if-with-v-for": "error",
|
|
234
|
+
"vue/require-v-for-key": "error",
|
|
235
|
+
"vue/valid-template-root": "error",
|
|
236
|
+
"vue/valid-v-bind": "error",
|
|
237
|
+
"vue/valid-v-cloak": "error",
|
|
238
|
+
"vue/valid-v-else-if": "error",
|
|
239
|
+
"vue/valid-v-else": "error",
|
|
240
|
+
"vue/valid-v-for": "error",
|
|
241
|
+
"vue/valid-v-html": "error",
|
|
242
|
+
"vue/valid-v-if": "error",
|
|
243
|
+
"vue/valid-v-model": "error",
|
|
244
|
+
"vue/valid-v-on": "error",
|
|
245
|
+
"vue/valid-v-once": "error",
|
|
246
|
+
"vue/valid-v-pre": "error",
|
|
247
|
+
"vue/valid-v-show": "error",
|
|
248
|
+
"vue/valid-v-slot": "error",
|
|
249
|
+
"vue/valid-v-text": "error",
|
|
250
|
+
}
|
|
251
|
+
}`;return e?r+`,
|
|
252
|
+
|
|
253
|
+
`+hr():r},hr=()=>` // Vue recommended config
|
|
254
|
+
{
|
|
255
|
+
files: ["**/*.vue"],
|
|
256
|
+
rules: {
|
|
257
|
+
// Recommended Vue rules
|
|
258
|
+
"vue/component-name-in-template-casing": ["error", "PascalCase"],
|
|
259
|
+
"vue/match-component-file-name": [
|
|
260
|
+
"error",
|
|
261
|
+
{
|
|
262
|
+
extensions: ["vue"],
|
|
263
|
+
shouldMatchCase: true
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"vue/match-component-import-name": "error",
|
|
267
|
+
"vue/attribute-hyphenation": "error",
|
|
268
|
+
"vue/component-definition-name-casing": ["error", "PascalCase"],
|
|
269
|
+
"vue/html-closing-bracket-newline": "error",
|
|
270
|
+
"vue/html-closing-bracket-spacing": "error",
|
|
271
|
+
"vue/html-end-tags": "error",
|
|
272
|
+
"vue/html-indent": ["error", 2],
|
|
273
|
+
"vue/html-quotes": "error",
|
|
274
|
+
"vue/html-self-closing": ["error", {
|
|
275
|
+
"html": {
|
|
276
|
+
"void": "any",
|
|
277
|
+
"normal": "any",
|
|
278
|
+
"component": "always"
|
|
279
|
+
}
|
|
280
|
+
}],
|
|
281
|
+
"vue/max-attributes-per-line": ["error", {
|
|
282
|
+
"singleline": 3,
|
|
283
|
+
"multiline": 1
|
|
284
|
+
}],
|
|
285
|
+
"vue/no-multi-spaces": "error",
|
|
286
|
+
"vue/no-spaces-around-equal-signs-in-attribute": "error",
|
|
287
|
+
"vue/no-template-shadow": "error",
|
|
288
|
+
"vue/one-component-per-file": "error",
|
|
289
|
+
"vue/prop-name-casing": ["error", "camelCase"],
|
|
290
|
+
"vue/require-default-prop": "error",
|
|
291
|
+
"vue/require-prop-types": "error",
|
|
292
|
+
"vue/v-bind-style": "error",
|
|
293
|
+
"vue/v-on-style": "error",
|
|
294
|
+
"vue/v-slot-style": "error"
|
|
295
|
+
}
|
|
296
|
+
}`;var xe=e=>{let r=e.eslint?.useRecommended!==!1,t=[...ge(),...ve()];return e.frontend?.framework==="vue"?t.push(...G()):e.frontend?.framework==="react"&&t.push(...F()),r&&(t.push(...P(),...B()),e.frontend?.framework==="vue"?t.push(...Y()):e.frontend?.framework==="react"&&t.push(...M())),[...new Set(t)]};import{existsSync as U}from"fs";import q from"path";var Te=e=>{let r=[...e].sort(),t=U(q.join(process.cwd(),"yarn.lock")),n=U(q.join(process.cwd(),"pnpm-lock.yaml")),o=U(q.join(process.cwd(),"bun.lockb")),i="npm",s="install";return t?(i="yarn",s="add"):n?(i="pnpm",s="add"):o&&(i="bun",s="add"),`${i} ${s} -D ${r.join(" ")}`};var vr=async(e,r,t=!0)=>{let n=Oe.join(r,"eslint.config.mjs");R.debug(`Generating eslint.config.mjs in ${r}`);let o=e.eslint?.useRecommended!==!1,i=br(e,o),s=[];if(s.push(` // TS ESLint base rules
|
|
297
|
+
{
|
|
298
|
+
files: ["**/*.{ts,tsx}"],
|
|
299
|
+
plugins: {
|
|
300
|
+
'@typescript-eslint': tseslint.plugin
|
|
301
|
+
},
|
|
302
|
+
languageOptions: {
|
|
303
|
+
parser: tseslint.parser
|
|
304
|
+
},
|
|
305
|
+
rules: {
|
|
306
|
+
// Essential TypeScript syntax rules - equivalent to tseslint.configs.recommended
|
|
307
|
+
"@typescript-eslint/ban-ts-comment": "warn",
|
|
308
|
+
"@typescript-eslint/no-explicit-any": "warn",
|
|
309
|
+
"@typescript-eslint/no-var-requires": "error",
|
|
310
|
+
"@typescript-eslint/no-empty-interface": "warn",
|
|
311
|
+
"@typescript-eslint/no-inferrable-types": "warn",
|
|
312
|
+
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
|
|
313
|
+
"@typescript-eslint/no-non-null-assertion": "warn",
|
|
314
|
+
"@typescript-eslint/no-unnecessary-type-constraint": "error"
|
|
315
|
+
}
|
|
316
|
+
}`),s.push(` // Ignore patterns
|
|
317
|
+
{
|
|
318
|
+
ignores: [
|
|
319
|
+
"**/node_modules/**",
|
|
320
|
+
"**/dist/**",
|
|
321
|
+
"**/build/**",
|
|
322
|
+
"**/coverage/**",
|
|
323
|
+
"**/*.d.ts",
|
|
324
|
+
".raclette/**",
|
|
325
|
+
".gitignore"
|
|
326
|
+
]
|
|
327
|
+
}`),s.push(me(o)),s.push(we(o)),e.frontend?.framework==="vue"&&s.push(Ee(o)),e.frontend?.framework==="react"&&s.push(he(o)),e.eslint?.rules&&Object.keys(e.eslint.rules).length>0){let p=JSON.stringify(e.eslint.rules,null,2).replace(/"([^"]+)":/g,"$1:");s.push(` // User custom rules
|
|
328
|
+
{
|
|
329
|
+
rules: ${p}
|
|
330
|
+
}`)}if(e.eslint?.ignores&&e.eslint.ignores.length>0){let p=JSON.stringify(e.eslint.ignores).replace(/^\[|\]$/g,"");s.push(` // User custom ignores
|
|
331
|
+
{
|
|
332
|
+
ignores: [${p}]
|
|
333
|
+
}`)}s.push(` // Prettier config (must be last)
|
|
334
|
+
{
|
|
335
|
+
rules: {
|
|
336
|
+
...eslintConfigPrettier.rules
|
|
337
|
+
}
|
|
338
|
+
}`);let a=`/*#############################################################
|
|
339
|
+
|
|
340
|
+
Generated ESLint Configuration for ${e.name||"raclette"}
|
|
341
|
+
This file is auto-generated and should not be edited directly
|
|
342
|
+
Extend this config in your project's eslint.config.mjs
|
|
343
|
+
|
|
344
|
+
#############################################################*/
|
|
345
|
+
|
|
346
|
+
// Import required plugins and parsers
|
|
347
|
+
${i.join(`
|
|
348
|
+
`)}
|
|
349
|
+
|
|
350
|
+
// Exported configuration that can be extended
|
|
351
|
+
export const racletteEslintConfig = [
|
|
352
|
+
${s.join(`,
|
|
353
|
+
|
|
354
|
+
`)}
|
|
355
|
+
]
|
|
356
|
+
|
|
357
|
+
// Helper function for extending the config
|
|
358
|
+
export const withRaclette = (...userConfigs) => {
|
|
359
|
+
// Simple array concatenation
|
|
360
|
+
return [...racletteEslintConfig, ...userConfigs.flat()];
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Default export for direct usage
|
|
364
|
+
export default racletteEslintConfig
|
|
365
|
+
`;await Re.writeFile(n,a),t&&await wr(r,e),R.debug(`Generated eslint.config.mjs in ${r}`)},br=(e,r)=>{let t=[];return t.push(...de()),t.push(...be(r)),e.frontend?.framework==="vue"?t.push(...Ce()):e.frontend?.framework==="react"&&t.push(...ye()),t},wr=async(e,r)=>{let t=Oe.join(e,"ESLINT-README.md"),n=xe(r),i=`# racletteJS ESLint Configuration
|
|
366
|
+
|
|
367
|
+
This directory contains an auto-generated ESLint configuration for your racletteJS project.
|
|
368
|
+
|
|
369
|
+
## Required Dependencies
|
|
370
|
+
|
|
371
|
+
To use this ESLint configuration, you need to install the following dependencies:
|
|
372
|
+
|
|
373
|
+
\`\`\`bash
|
|
374
|
+
${Te(n)}
|
|
375
|
+
\`\`\`
|
|
376
|
+
|
|
377
|
+
## How to Use
|
|
378
|
+
|
|
379
|
+
Create an \`eslint.config.mjs\` file in your project root with:
|
|
380
|
+
|
|
381
|
+
\`\`\`js
|
|
382
|
+
// eslint.config.mjs
|
|
383
|
+
import { withRaclette } from './.raclette/eslint.config.mjs'
|
|
384
|
+
|
|
385
|
+
export default withRaclette(
|
|
386
|
+
// Your custom configs here
|
|
387
|
+
{
|
|
388
|
+
// Example: Override a rule
|
|
389
|
+
rules: {
|
|
390
|
+
'no-console': 'off'
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
// Add more config objects as needed
|
|
394
|
+
)
|
|
395
|
+
\`\`\`
|
|
396
|
+
|
|
397
|
+
## Features
|
|
398
|
+
|
|
399
|
+
- Project-aware configuration that understands your racletteJS project structure
|
|
400
|
+
- Framework-specific rules (Vue, React) automatically included based on your project
|
|
401
|
+
- Seamless integration with your IDE
|
|
402
|
+
- Clean, modern approach using ESLint's flat config system
|
|
403
|
+
|
|
404
|
+
## Editor Integration
|
|
405
|
+
|
|
406
|
+
For Visual Studio Code users, make sure to add this to your \`.vscode/settings.json\`:
|
|
407
|
+
|
|
408
|
+
\`\`\`json
|
|
409
|
+
{
|
|
410
|
+
"eslint.experimental.useFlatConfig": true
|
|
411
|
+
}
|
|
412
|
+
\`\`\`
|
|
413
|
+
|
|
414
|
+
This enables support for the flat config format in the ESLint extension.
|
|
415
|
+
|
|
416
|
+
## Adding Custom Rules
|
|
417
|
+
|
|
418
|
+
You can customize the ESLint rules by:
|
|
419
|
+
|
|
420
|
+
1. Adding rules in your \`eslint.config.mjs\` file:
|
|
421
|
+
|
|
422
|
+
\`\`\`js
|
|
423
|
+
export default withRaclette(
|
|
424
|
+
{
|
|
425
|
+
// Your custom rules
|
|
426
|
+
rules: {
|
|
427
|
+
'indent': ['error', 4],
|
|
428
|
+
'quotes': ['error', 'single']
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
)
|
|
432
|
+
\`\`\`
|
|
433
|
+
|
|
434
|
+
2. Or by adding them to your \`raclette.config.js\` file:
|
|
435
|
+
|
|
436
|
+
\`\`\`js
|
|
437
|
+
export default {
|
|
438
|
+
// ...other racletteJS config
|
|
439
|
+
eslint: {
|
|
440
|
+
useRecommended: true, // Set to false to disable recommended rules
|
|
441
|
+
rules: {
|
|
442
|
+
'indent': ['error', 4],
|
|
443
|
+
'quotes': ['error', 'single']
|
|
444
|
+
},
|
|
445
|
+
ignores: [
|
|
446
|
+
'legacy/**'
|
|
447
|
+
]
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
\`\`\`
|
|
451
|
+
`;await Re.writeFile(t,i)};export{gr as defineRacletteConfig,vr as generateEslintConfig};
|
|
452
|
+
//# sourceMappingURL=index.js.map
|