@raclettejs/core 0.1.33-canary.3 → 0.1.33

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.
@@ -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: 2022,
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: 2022,
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: 2022,
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
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@raclettejs/core",
3
- "version": "0.1.33-canary.3",
3
+ "version": "0.1.33",
4
4
  "description": "racletteJS core package",
5
5
  "repository": "https://gitlab.com/raclettejs/core",
6
6
  "author": "Pacifico Digital Explorations GmbH <info@raclettejs.com>",
7
7
  "license": "AGPL-3.0-only",
8
8
  "type": "module",
9
9
  "scripts": {
10
+ ":install": "yarn install",
11
+ ":install:services": "yarn --cwd ./services/backend install && yarn --cwd ./services/frontend install",
10
12
  "build": "node build.mjs || true",
11
13
  "dev": "node watch.mjs",
12
14
  "watch": "node watch.mjs",
@@ -80,7 +82,7 @@
80
82
  "@emnapi/core": "1.9.2",
81
83
  "@emnapi/runtime": "1.9.2",
82
84
  "@eslint/js": "9.35.0",
83
- "@raclettejs/types": "^0.1.33-canary.3",
85
+ "@raclettejs/types": "^0.1.33",
84
86
  "@types/fs-extra": "11.0.4",
85
87
  "@types/js-yaml": "4.0.9",
86
88
  "@types/node": "25.5.0",
@@ -96,7 +98,7 @@
96
98
  "husky": "9.1.7",
97
99
  "prettier": "3.8.1",
98
100
  "typescript": "5.9.3",
99
- "typescript-eslint": "8.57.1",
100
- "vue-eslint-parser": "9.4.3"
101
+ "typescript-eslint": "8.59.2",
102
+ "vue-eslint-parser": "10.3.0"
101
103
  }
102
104
  }
@@ -183,9 +183,9 @@ export default async (): Promise<FastifyInstance> => {
183
183
  if (isAllowed) {
184
184
  callback(null, true)
185
185
  } else {
186
- fastify.log.warn(`CORS blocked origin: ${origin}.`)
186
+ fastify.log.warn(`CORS blocked origin: ${origin}`)
187
187
  fastify.log.debug(
188
- `Allowed CORS origins are: ${allowedOrigins.join(" | ")}`,
188
+ 'Allowed CORS origins are: ' + allowedOrigins.join(" | "),
189
189
  )
190
190
  callback(new Error("Not allowed by CORS"), false)
191
191
  }
@@ -1 +1,9 @@
1
- export type {}
1
+ /**
2
+ * ⚠️ WARNING: THIS FILE IS AUTO-GENERATED ⚠️
3
+ *
4
+ * This file is generated by the type generation system.
5
+ * Any manual changes will be overwritten on next server start and should always be committed.
6
+ *
7
+ */
8
+
9
+ export type * from './pacifico__openstack-billing-dashboard'