mejora 1.6.0 → 1.6.2
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as e}from"node:module";import{createHash as t}from"node:crypto";import{mkdir as n}from"node:fs/promises";import{pathToFileURL as r}from"node:url";var i=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),a=e(import.meta.url);const o=/^[A-Za-z]:\//;function s(e=``){return e&&e.replace(/\\/g,`/`).replace(o,e=>e.toUpperCase())}const c=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,l=/^[A-Za-z]:$/,u=/^\/([A-Za-z]:)?$/;function d(){return typeof process<`u`&&typeof process.cwd==`function`?process.cwd().replace(/\\/g,`/`):`/`}const f=function(...e){e=e.map(e=>s(e));let t=``,n=!1;for(let r=e.length-1;r>=-1&&!n;r--){let i=r>=0?e[r]:d();!i||i.length===0||(t=`${i}/${t}`,n=m(i))}return t=p(t,!n),n&&!m(t)?`/${t}`:t.length>0?t:`.`};function p(e,t){let n=``,r=0,i=-1,a=0,o=null;for(let s=0;s<=e.length;++s){if(s<e.length)o=e[s];else if(o===`/`)break;else o=`/`;if(o===`/`){if(!(i===s-1||a===1))if(a===2){if(n.length<2||r!==2||n[n.length-1]!==`.`||n[n.length-2]!==`.`){if(n.length>2){let e=n.lastIndexOf(`/`);e===-1?(n=``,r=0):(n=n.slice(0,e),r=n.length-1-n.lastIndexOf(`/`)),i=s,a=0;continue}else if(n.length>0){n=``,r=0,i=s,a=0;continue}}t&&(n+=n.length>0?`/..`:`..`,r=2)}else n.length>0?n+=`/${e.slice(i+1,s)}`:n=e.slice(i+1,s),r=s-i-1;i=s,a=0}else o===`.`&&a!==-1?++a:a=-1}return n}const m=function(e){return c.test(e)},h=function(e,t){let n=f(e).replace(u,`$1`).split(`/`),r=f(t).replace(u,`$1`).split(`/`);if(r[0][1]===`:`&&n[0][1]===`:`&&n[0]!==r[0])return r.join(`/`);let i=[...n];for(let e of i){if(r[0]!==e)break;n.shift(),r.shift()}return[...n.map(()=>`..`),...r].join(`/`)},g=function(e){let t=s(e).replace(/\/$/,``).split(`/`).slice(0,-1);return t.length===1&&l.test(t[0])&&(t[0]+=`/`),t.join(`/`)||(m(e)?`/`:`.`)}
|
|
2
|
-
`);throw TypeError(`Failed to read TypeScript config: ${e}`)}let
|
|
3
|
-
`),a=
|
|
4
|
-
`),n=`(global) - TS${e.code}: ${t}`;O.push(n)}return{items:O.toSorted(),type:`items`}}function
|
|
1
|
+
import{createRequire as e}from"node:module";import{createHash as t}from"node:crypto";import{mkdir as n}from"node:fs/promises";import{pathToFileURL as r}from"node:url";var i=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),a=e(import.meta.url);const o=/^[A-Za-z]:\//;function s(e=``){return e&&e.replace(/\\/g,`/`).replace(o,e=>e.toUpperCase())}const c=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,l=/^[A-Za-z]:$/,u=/^\/([A-Za-z]:)?$/;function d(){return typeof process<`u`&&typeof process.cwd==`function`?process.cwd().replace(/\\/g,`/`):`/`}const f=function(...e){e=e.map(e=>s(e));let t=``,n=!1;for(let r=e.length-1;r>=-1&&!n;r--){let i=r>=0?e[r]:d();!i||i.length===0||(t=`${i}/${t}`,n=m(i))}return t=p(t,!n),n&&!m(t)?`/${t}`:t.length>0?t:`.`};function p(e,t){let n=``,r=0,i=-1,a=0,o=null;for(let s=0;s<=e.length;++s){if(s<e.length)o=e[s];else if(o===`/`)break;else o=`/`;if(o===`/`){if(!(i===s-1||a===1))if(a===2){if(n.length<2||r!==2||n[n.length-1]!==`.`||n[n.length-2]!==`.`){if(n.length>2){let e=n.lastIndexOf(`/`);e===-1?(n=``,r=0):(n=n.slice(0,e),r=n.length-1-n.lastIndexOf(`/`)),i=s,a=0;continue}else if(n.length>0){n=``,r=0,i=s,a=0;continue}}t&&(n+=n.length>0?`/..`:`..`,r=2)}else n.length>0?n+=`/${e.slice(i+1,s)}`:n=e.slice(i+1,s),r=s-i-1;i=s,a=0}else o===`.`&&a!==-1?++a:a=-1}return n}const m=function(e){return c.test(e)},h=function(e,t){let n=f(e).replace(u,`$1`).split(`/`),r=f(t).replace(u,`$1`).split(`/`);if(r[0][1]===`:`&&n[0][1]===`:`&&n[0]!==r[0])return r.join(`/`);let i=[...n];for(let e of i){if(r[0]!==e)break;n.shift(),r.shift()}return[...n.map(()=>`..`),...r].join(`/`)},g=function(e){let t=s(e).replace(/\/$/,``).split(`/`).slice(0,-1);return t.length===1&&l.test(t[0])&&(t[0]+=`/`),t.join(`/`)||(m(e)?`/`:`.`)},_=(e,t)=>{if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t,n={};for(let t of Object.keys(e).toSorted())n[t]=e[t];return n}return t};function v(e){let n=JSON.stringify(e??null,_);return t(`sha256`).update(n).digest(`hex`)}async function y(e=process.cwd(),t){let r=f(e,`node_modules`,`.cache`,`mejora`,...t?[t]:[]);return await n(r,{recursive:!0}),r}const b=({column:e,cwd:t,filePath:n,line:r,ruleId:i})=>`${h(t,n)}:${r}:${e} - ${i}`;async function x(){try{await import(`eslint`)}catch{throw Error(`ESLint check requires eslint but it's not installed.`)}}async function S(e){let{ESLint:t}=await import(`eslint`),n=process.cwd(),r=await new t({cache:!0,cacheLocation:`${await y(n,`eslint`)}/${v(e)}.eslintcache`,concurrency:`auto`,overrideConfig:e.overrides}).lintFiles(e.files),i=[];for(let{filePath:e,messages:t}of r)for(let{column:r,line:a,ruleId:o}of t)if(o){let t=b({column:r,cwd:n,filePath:e,line:a,ruleId:o});i.push(t)}return{items:i.toSorted(),type:`items`}}function C(e){return{type:`eslint`,...e}}async function w(){try{await import(`typescript`)}catch{throw Error(`TypeScript check requires typescript but it's not installed.`)}}const T=({character:e,code:t,cwd:n,fileName:r,line:i,message:a})=>`${h(n,r)}:${i+1}:${e+1} - TS${t}: ${a}`;async function E(e){let{createIncrementalCompilerHost:t,createIncrementalProgram:n,findConfigFile:r,flattenDiagnosticMessageText:i,getPreEmitDiagnostics:a,parseJsonConfigFileContent:o,readConfigFile:s,sys:c,version:l}=await import(`typescript`),u=process.cwd(),d=c.fileExists.bind(c),p=c.readFile.bind(c),m=e.tsconfig?f(e.tsconfig):r(u,d,`tsconfig.json`);if(!m)throw Error(`TypeScript config file not found`);let{config:h,error:g}=s(m,p);if(g){let e=typeof g.messageText==`string`?g.messageText:i(g.messageText,`
|
|
2
|
+
`);throw TypeError(`Failed to read TypeScript config: ${e}`)}let _=o(h,c,u,e.overrides?.compilerOptions),b=f(await y(u,`typescript`),`${v({configPath:m,overrides:e.overrides?.compilerOptions??{},parsedOptions:_.options,typescriptVersion:l})}.tsbuildinfo`),x={..._.options,incremental:!0,noEmit:!0,skipLibCheck:_.options.skipLibCheck??!0,tsBuildInfoFile:b},S=t(x,c),C=S.writeFile.bind(S);S.writeFile=(e,t,...n)=>{f(e)===f(b)&&C(e,t,...n)};let w=n({host:S,options:x,projectReferences:_.projectReferences??[],rootNames:_.fileNames}),E=a(w.getProgram());w.emit();let D=E.filter(e=>{if(!e.file)return!0;let t=f(e.file.fileName),n=f(u);return t===n||t.startsWith(n+`/`)}),O=[];for(let e of D)if(e.file&&e.start!==void 0){let{character:t,line:n}=e.file.getLineAndCharacterOfPosition(e.start),r=i(e.messageText,`
|
|
3
|
+
`),a=T({character:t,code:e.code,cwd:u,fileName:e.file.fileName,line:n,message:r});O.push(a)}else{let t=i(e.messageText,`
|
|
4
|
+
`),n=`(global) - TS${e.code}: ${t}`;O.push(n)}return{items:O.toSorted(),type:`items`}}function D(e){return{type:`typescript`,...e}}var O=i(((e,t)=>{let n=a(`path`),r=a(`fs`),i=a(`os`),o=a(`url`),s=r.promises.readFile;function c(e,t){return[`package.json`,`.${e}rc.json`,`.${e}rc.js`,`.${e}rc.cjs`,...t?[]:[`.${e}rc.mjs`],`.config/${e}rc`,`.config/${e}rc.json`,`.config/${e}rc.js`,`.config/${e}rc.cjs`,...t?[]:[`.config/${e}rc.mjs`],`${e}.config.js`,`${e}.config.cjs`,...t?[]:[`${e}.config.mjs`]]}function l(e){return n.dirname(e)||n.sep}let u=(e,t)=>JSON.parse(t),d=typeof __webpack_require__==`function`?__non_webpack_require__:a,f=Object.freeze({".js":d,".json":d,".cjs":d,noExt:u});t.exports.defaultLoadersSync=f;let p=async e=>{try{return(await import(o.pathToFileURL(e).href)).default}catch(t){try{return d(e)}catch(e){throw e.code===`ERR_REQUIRE_ESM`||e instanceof SyntaxError&&e.toString().includes(`Cannot use import statement outside a module`)?t:e}}},m=Object.freeze({".js":p,".mjs":p,".cjs":p,".json":u,noExt:u});t.exports.defaultLoaders=m;function h(e,t,r){let a={stopDir:i.homedir(),searchPlaces:c(e,r),ignoreEmptySearchPlaces:!0,cache:!0,transform:e=>e,packageProp:[e],...t,loaders:{...r?f:m,...t.loaders}};return a.searchPlaces.forEach(e=>{let t=n.extname(e)||`noExt`,r=a.loaders[t];if(!r)throw Error(`Missing loader for extension "${e}"`);if(typeof r!=`function`)throw Error(`Loader for extension "${e}" is not a function: Received ${typeof r}.`)}),a}function g(e,t){return typeof e==`string`&&e in t?t[e]:(Array.isArray(e)?e:e.split(`.`)).reduce((e,t)=>e===void 0?e:e[t],t)||null}function _(e){if(!e)throw Error(`load must pass a non-empty string`)}function v(e,t){if(!e)throw Error(`No loader specified for extension "${t}"`);if(typeof e!=`function`)throw Error(`loader is not a function`)}let y=e=>(t,n,r)=>(e&&t.set(n,r),r);t.exports.lilconfig=function(e,t){let{ignoreEmptySearchPlaces:i,loaders:a,packageProp:o,searchPlaces:c,stopDir:u,transform:d,cache:f}=h(e,t??{},!1),p=new Map,m=new Map,b=y(f);return{async search(e=process.cwd()){let t={config:null,filepath:``},m=new Set,h=e;dirLoop:for(;;){if(f){let e=p.get(h);if(e!==void 0){for(let t of m)p.set(t,e);return e}m.add(h)}for(let e of c){let c=n.join(h,e);try{await r.promises.access(c)}catch{continue}let l=String(await s(c)),u=n.extname(e)||`noExt`,d=a[u];if(e===`package.json`){let e=g(o,await d(c,l));if(e!=null){t.config=e,t.filepath=c;break dirLoop}continue}let f=l.trim()===``;if(!(f&&i)){f?(t.isEmpty=!0,t.config=void 0):(v(d,u),t.config=await d(c,l)),t.filepath=c;break dirLoop}}if(h===u||h===l(h))break dirLoop;h=l(h)}let _=t.filepath===``&&t.config===null?d(null):d(t);if(f)for(let e of m)p.set(e,_);return _},async load(e){_(e);let t=n.resolve(process.cwd(),e);if(f&&m.has(t))return m.get(t);let{base:r,ext:c}=n.parse(t),l=c||`noExt`,u=a[l];v(u,l);let p=String(await s(t));if(r===`package.json`)return b(m,t,d({config:g(o,await u(t,p)),filepath:t}));let h={config:null,filepath:t},y=p.trim()===``;return y&&i?b(m,t,d({config:void 0,filepath:t,isEmpty:!0})):(h.config=y?void 0:await u(t,p),b(m,t,d(y?{...h,isEmpty:y,config:void 0}:h)))},clearLoadCache(){f&&m.clear()},clearSearchCache(){f&&p.clear()},clearCaches(){f&&(m.clear(),p.clear())}}},t.exports.lilconfigSync=function(e,t){let{ignoreEmptySearchPlaces:i,loaders:a,packageProp:o,searchPlaces:s,stopDir:c,transform:u,cache:d}=h(e,t??{},!0),f=new Map,p=new Map,m=y(d);return{search(e=process.cwd()){let t={config:null,filepath:``},p=new Set,m=e;dirLoop:for(;;){if(d){let e=f.get(m);if(e!==void 0){for(let t of p)f.set(t,e);return e}p.add(m)}for(let e of s){let s=n.join(m,e);try{r.accessSync(s)}catch{continue}let c=n.extname(e)||`noExt`,l=a[c],u=String(r.readFileSync(s));if(e===`package.json`){let e=g(o,l(s,u));if(e!=null){t.config=e,t.filepath=s;break dirLoop}continue}let d=u.trim()===``;if(!(d&&i)){d?(t.isEmpty=!0,t.config=void 0):(v(l,c),t.config=l(s,u)),t.filepath=s;break dirLoop}}if(m===c||m===l(m))break dirLoop;m=l(m)}let h=t.filepath===``&&t.config===null?u(null):u(t);if(d)for(let e of p)f.set(e,h);return h},load(e){_(e);let t=n.resolve(process.cwd(),e);if(d&&p.has(t))return p.get(t);let{base:s,ext:c}=n.parse(t),l=c||`noExt`,f=a[l];v(f,l);let h=String(r.readFileSync(t));if(s===`package.json`)return u({config:g(o,f(t,h)),filepath:t});let y={config:null,filepath:t},b=h.trim()===``;return b&&i?m(p,t,u({filepath:t,config:void 0,isEmpty:!0})):(y.config=b?void 0:f(t,h),m(p,t,u(b?{...y,isEmpty:b,config:void 0}:y)))},clearLoadCache(){d&&p.clear()},clearSearchCache(){d&&f.clear()},clearCaches(){d&&(p.clear(),f.clear())}}}}))();const k=async e=>{let t=await import(r(e).href);return t&&typeof t==`object`&&`default`in t?t.default:t},A=e=>e,j=async()=>{let e=await(0,O.lilconfig)(`mejora`,{loaders:{".js":k,".mjs":k,".mts":k,".ts":k},searchPlaces:[`mejora.config.ts`,`mejora.config.mts`,`mejora.config.js`,`mejora.config.mjs`]}).search(process.cwd());if(!e?.config)throw Error(`No configuration file found.`);return e.config};export{w as a,x as c,D as i,g as l,j as n,C as o,E as r,S as s,A as t,h as u};
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,o as t,t as n}from"./config-
|
|
1
|
+
import{i as e,o as t,t as n}from"./config-WGYN8jMV.mjs";export{n as defineConfig,t as eslint,t as eslintCheck,e as typescript,e as typescriptCheck};
|
package/dist/run.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as e,c as t,l as n,n as r,r as i,s as a,u as o}from"./config-
|
|
3
|
-
`,r=e.snapshot.items.length,i=[`${n}${e.checkId}:`,` Initial baseline created with ${
|
|
4
|
-
`}${e.checkId}:`,...
|
|
5
|
-
`,r=e.snapshot.items.length;return e.duration===void 0?[`${n}${e.checkId} (${
|
|
6
|
-
`)}function
|
|
7
|
-
`)}const
|
|
2
|
+
import{a as e,c as t,l as n,n as r,r as i,s as a,u as o}from"./config-WGYN8jMV.mjs";import{mkdir as s,readFile as c,writeFile as l}from"node:fs/promises";import*as u from"node:util";import{inspect as d,parseArgs as f,styleText as p}from"node:util";import{env as m}from"node:process";function h(e,t){if(!(e===void 0||t===0))return e/t}function g(e){let{results:t,totalDuration:n}=e,r=t.length,i=[],a=[],o=[],s=[],c=0,l=0,u=0,d=0,f=0,p=[];for(let e of t){let t=e.snapshot.items.length;f+=t,e.isInitial?(u+=t,o.push(e.checkId)):(e.hasImprovement&&(c+=e.removedItems.length,i.push(e.checkId)),e.hasRegression&&(l+=e.newItems.length,a.push(e.checkId)),!e.hasImprovement&&!e.hasRegression&&(d+=t,s.push(e.checkId))),p.push({checkId:e.checkId,duration:e.duration,hasImprovement:e.hasImprovement,hasRegression:e.hasRegression,isInitial:e.isInitial,newItems:e.newItems,removedItems:e.removedItems,totalIssues:t})}let m={checks:p,exitCode:e.exitCode,hasImprovement:e.hasImprovement,hasRegression:e.hasRegression,summary:{avgDuration:h(n,r),checksRun:r,improvementChecks:i,improvements:c,initial:u,initialChecks:o,regressionChecks:a,regressions:l,totalIssues:f,unchanged:d,unchangedChecks:s},totalDuration:n};return JSON.stringify(m,null,2)}const _=e=>t=>p(e,typeof t==`number`?t.toString():t),v=_(`blue`),y=_(`bold`),ee=_(`cyan`),b=_(`dim`),x=_(`green`),S=_(`red`),te=_(`gray`);function ne(e){if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return t%1==0?`${t}s`:`${t.toFixed(1)}s`;let n=e/6e4;if(n<60)return n%1==0?`${n}m`:`${n.toFixed(1)}m`;let r=e/36e5;return r%1==0?`${r}h`:`${r.toFixed(1)}h`}function C(e){let t=Math.round(e);return t<1?`<1ms`:ne(t)}function w(e,t){return e===1?t:`${t}s`}function T(e,t=10){let n=[],r=e.slice(0,t);for(let e of r)n.push(` ${b(e)}`);let i=e.length-t;return i>0&&n.push(` ${b(`... and ${i} more`)}`),n}function re(e){return e===void 0?[]:[` ${b(`Duration`)} ${C(e)}`]}function ie(e){return[` ${b(`Issues`)} ${y(e)}`]}function E(e){return[...re(e.duration),...ie(e.snapshot.items.length)]}function D(e){if(!e.hasRegression)return[];let t=e.newItems.length;return[` ${S(t)} new ${w(t,`issue`)} (${w(t,`regression`)}):`,...T(e.newItems)]}function O(e){if(!e.hasImprovement)return[];let t=e.removedItems.length;return[` ${x(t)} ${w(t,`issue`)} fixed (${w(t,`improvement`)}):`,...T(e.removedItems)]}function k(e,t){let n=t?``:`
|
|
3
|
+
`,r=e.snapshot.items.length,i=[`${n}${e.checkId}:`,` Initial baseline created with ${v(r)} ${w(r,`issue`)}`];return e.snapshot.items.length>0&&i.push(...T(e.snapshot.items)),i.push(``,...E(e)),i}function ae(e,t){return[`${t?``:`
|
|
4
|
+
`}${e.checkId}:`,...D(e),...O(e),``,...E(e)]}function oe(e,t){let n=t?``:`
|
|
5
|
+
`,r=e.snapshot.items.length;return e.duration===void 0?[`${n}${e.checkId} (${y(r)})`]:[`${n}${e.checkId} (${y(r)}) ${b(C(e.duration))}`]}function se(e,t){return e.isInitial?k(e,t):e.hasRegression||e.hasImprovement?ae(e,t):oe(e,t)}function ce(e,t){return t?v(`✔ Initial baseline created successfully`):e.hasRegression?`${S(`✗ Regressions detected`)} - Run failed`:e.hasImprovement?`${x(`✔ Improvements detected`)} - Baseline updated`:x(`✔ All checks passed`)}function le(e){let t={hasAnyInitial:!1,totalImprovements:0,totalInitial:0,totalIssues:0,totalRegressions:0,totalUnchanged:0};for(let n of e.results){let e=n.snapshot.items.length;if(t.totalIssues+=e,n.isInitial){t.hasAnyInitial=!0,t.totalInitial+=e;continue}let{hasImprovement:r,hasRegression:i}=n;r&&(t.totalImprovements+=n.removedItems.length),i&&(t.totalRegressions+=n.newItems.length),!r&&!i&&(t.totalUnchanged+=e)}let n=[` ${b(`Improvements`)} ${x(t.totalImprovements)}`,` ${b(`Regressions`)} ${S(t.totalRegressions)}`,` ${b(`Unchanged`)} ${t.totalUnchanged}`,` ${b(`Initial`)} ${v(t.totalInitial)}`,` ${b(`Checks`)} ${e.results.length}`,` ${b(`Issues`)} ${y(t.totalIssues)}`],r=h(e.totalDuration,e.results.length);return e.totalDuration!==void 0&&r!==void 0&&n.push(` ${b(`Duration`)} ${C(e.totalDuration)} ${te(`(avg ${C(r)})`)}`),n.push(``,ce(e,t.hasAnyInitial)),n.join(`
|
|
6
|
+
`)}function ue(e){let t=[];for(let[n,r]of e.results.entries())t.push(...se(r,n===0));return t.length>0&&t.push(``),t.push(le(e)),t.join(`
|
|
7
|
+
`)}const A=e=>e in m&&m[e]!==`0`&&m[e]!==`false`;var j=A(`CI`)||A(`CONTINUOUS_INTEGRATION`);const de=[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`],M=`\x1B[?25h`,N=`\r\x1B[K`,fe={succeed:`✔`,fail:`✖`,warn:`!`,info:`ℹ`},P={succeed:`green`,fail:`red`,warn:`yellow`,info:`blue`,spinner:`cyan`},pe=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],F=/(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F)(?:\u200d(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F))*/uy,I=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,L=/\p{M}+/uy;function R(e,t){let n=0,r,i=t.length-1;if(e<t[0][0]||e>t[i][1])return!1;for(;i>=n;)if(r=Math.floor((n+i)/2),e>t[r][1])n=r+1;else if(e<t[r][0])i=r-1;else return!0;return!1}function z(e){return e===0||e<32||e>=127&&e<160||R(e,pe)?0:e>=4352&&(e<=4447||e==9001||e==9002||e>=11904&&e<=42191&&e!=12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141)?2:1}function B(e){let t=0,n=0;for(let r=0;r<e.length;r++){if(n=e[r].charCodeAt(0),n>=32&&n<127){t++;continue}if(I.lastIndex=r,I.test(e)){r=I.lastIndex-1;continue}if(F.lastIndex=r,F.test(e)){r=F.lastIndex-1,t+=2;continue}if(L.lastIndex=r,L.test(e)){r=L.lastIndex-1;continue}t+=z(n)}return t}function me(e,t){let n=e.split(`
|
|
8
8
|
`).length;if(t===1/0)return n;for(let r of e.split(`
|
|
9
|
-
`))n+=Math.max(Math.ceil(
|
|
10
|
-
`:``),r.finished||(t=!1)}this.lastLinesAmt=
|
|
9
|
+
`))n+=Math.max(Math.ceil(B(r)/t)-1,0);return n}var he=class{text;onChange;onFinish;finished=!1;newLineEnding=!0;constructor(e){this.text=e}setText(e){this.text=e,typeof this.onChange==`function`&&this.onChange()}finish(){!this.finished&&typeof this.onFinish==`function`&&this.onFinish(),this.finished=!0}output(){return this.text}disableNewLineEnding(){this.newLineEnding=!1}};const V=new class{hideCursor;components=[];lastLinesAmt=0;terminalWidth=1/0;finishedComponents=0;outputBuffer=``;constructor(e=!0){this.hideCursor=e}addComponent(e){this.components.push(e),e.onChange=this.render.bind(this),e.onFinish=this.onComponentFinish.bind(this),process.stdout.getWindowSize&&(this.terminalWidth=process.stdout.getWindowSize()[0]),this.render()}onComponentFinish(){this.finishedComponents++,this.finishedComponents===this.components.length&&(this._reset(),process.stdout.write(M))}removeComponent(e){this.components=this.components.filter(t=>t!==e),e.onChange=void 0,e.finished&&this.finishedComponents--,this.render()}render(){if(this.outputBuffer=``,this.clear(),this.components.length===0){process.stdout.write(this.outputBuffer),this.hideCursor&&process.stdout.write(M),this.lastLinesAmt=0;return}this.hideCursor&&(this.outputBuffer+=`\x1B[?25l`);let e=``,t=!0;for(let n=0;n<this.components.length;n++){let r=this.components[n];e+=r.output()+(n!==this.components.length-1||r.newLineEnding?`
|
|
10
|
+
`:``),r.finished||(t=!1)}this.lastLinesAmt=me(e,this.terminalWidth),this.outputBuffer+=e,t&&(this._reset(),this.outputBuffer+=M),process.stdout.write(this.outputBuffer)}clear(){for(let e=0;e<this.lastLinesAmt-1;e++)this.outputBuffer+=N+`\x1B[1A`;this.outputBuffer+=N}_reset(){this.components=[],this.lastLinesAmt=0,this.terminalWidth=1/0,this.finishedComponents=0}};var ge=class{running=!1;text=``;currentSymbol;symbolFormatter;interval;frameIndex=0;symbols;frames;component=new he(``);colors;constructor(e=``,{disableNewLineEnding:t,colors:n,frames:r=de,symbols:i={}}={}){this.symbols={...fe,...i},typeof n==`object`?this.colors={...P,...n}:n!==!1&&(this.colors=P),t===!0&&this.component.disableNewLineEnding(),typeof e==`string`&&(e={text:e}),delete e.symbol,this.setDisplay(e,!1),this.frames=r,this.currentSymbol=r[0]}start(e=50){if(this.running)throw Error(`Spinner is already running.`);this.component.finished&&(this.component.finished=!1),this.interval=setInterval(this.tick.bind(this),e),this.running=!0,this.currentSymbol=this.frames[0],this.tick(),V.addComponent(this.component),this.addListeners()}tick(){this.currentSymbol=this.format(this.frames[this.frameIndex++],`spinner`),this.frameIndex===this.frames.length&&(this.frameIndex=0),this.refresh()}onProcessExit=e=>{this.stop();let t;t=e===`SIGTERM`?143:e===`SIGINT`?130:Number(e),process.exit(t)};addListeners(){process.once(`SIGTERM`,this.onProcessExit),process.once(`SIGINT`,this.onProcessExit),process.once(`exit`,this.onProcessExit)}clearListeners(){process.off(`SIGTERM`,this.onProcessExit),process.off(`SIGINT`,this.onProcessExit),process.off(`exit`,this.onProcessExit)}refresh(){let e=this.currentSymbol;this.symbolFormatter&&(e=this.symbolFormatter(e));let t=(e?e+` `:``)+this.text;this.component.setText(t)}setDisplay(e={},t=!0){typeof e.symbol==`string`&&(typeof e.symbolType==`string`?this.currentSymbol=this.format(e.symbol,e.symbolType):this.currentSymbol=e.symbol),typeof e.text==`string`&&this.setText(e.text,!1),e.symbolFormatter&&(this.symbolFormatter=e.symbolFormatter),t&&this.refresh(),typeof e.symbol==`string`&&this.end()}setText(e,t=!0){this.text=this.format(e,`text`),this.running&&t&&this.refresh()}succeed(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.succeed,symbolType:`succeed`}):this.setDisplay({...e,symbol:this.symbols.succeed,symbolType:`succeed`})}fail(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.fail,symbolType:`fail`}):this.setDisplay({...e,symbol:this.symbols.fail,symbolType:`fail`})}warn(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.warn,symbolType:`warn`}):this.setDisplay({...e,symbol:this.symbols.warn,symbolType:`warn`})}info(e){typeof e==`string`?this.setDisplay({text:e,symbol:this.symbols.info,symbolType:`info`}):this.setDisplay({...e,symbol:this.symbols.info,symbolType:`info`})}stop(){this.end(!1)}end(e=!0){clearInterval(this.interval),this.clearListeners(),e?this.component.finish():V.removeComponent(this.component),this.running=!1}format(e,t){if(this.colors===void 0)return e;let n=this.colors[t];return n&&u.styleText!==void 0?u.styleText(n,e):e}};function _e(e,t){let n=e;for(let e=0;e<t&&n.includes(`}`);e++){let e=n.lastIndexOf(`}`);n=n.slice(0,e)+n.slice(e+1)}return n}function ve(e,t){return`${e}\n${` }`.repeat(t)}`}function ye(e){let t=0,n=0;for(let r of e)r===`{`&&t++,r===`}`&&n++;if(t===n)return e;let r=Math.abs(t-n);return n>t?_e(e,r):ve(e,r)}function be(e){let t=e.trim();return ye(t.endsWith(`,`)?t.slice(0,-1):t)}function xe(e){return`{
|
|
11
11
|
"version": 1,
|
|
12
12
|
${e}
|
|
13
|
-
}`}function
|
|
13
|
+
}`}function Se(e){if(e.checks)return e;let t={};for(let[n,r]of Object.entries(e))n!==`version`&&(t[n]=r);return{checks:t,version:1}}function H(e){try{let t=xe(be(e));return Se(JSON.parse(t))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse baseline during conflict resolution: ${t}`,{cause:e})}}function Ce(e){let t=[...e.matchAll(/<<<<<<< .*\n([\s\S]*?)\n=======\n([\s\S]*?)\n>>>>>>> .*$/gm)];if(t.length===0)throw Error(`Could not parse conflict markers in baseline`);return t.map(([,e=``,t=``])=>({ours:e,theirs:t}))}function we(e){let t=new Set;for(let n of e)for(let e of Object.keys(n.checks))t.add(e);return t}function Te(e,t){let n=new Set;for(let r of e){let e=r.checks[t];if(e?.items)for(let t of e.items)n.add(t)}return[...n].toSorted()}function Ee(e){let t={checks:{},version:1},n=we(e);for(let r of n)t.checks[r]={items:Te(e,r),type:`items`};return t}function De(e){let t=Ce(e),n=[];for(let{ours:e,theirs:r}of t)n.push(H(e),H(r));return Ee(n)}const U=`__unparsable__`;function Oe(e){return e.replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`[`,`[`).replaceAll(`]`,`]`)}function W(e){if(!e)return{filePath:void 0,line:void 0};let t=/^(.+?):(\d+)(?::\d+)?$/.exec(e);return t?{filePath:t[1],line:t[2]}:{filePath:e,line:void 0}}function G(e){let[t,...n]=e.split(` - `);return{description:n.join(` - `),pathWithLocation:t}}function K(e,t){return o(t,e)}function q(e,t,n){let r=o(t,e);return n?`${r}#L${n}`:r}function J(e,t){return`[${e}](${t})`}function ke(e,t,n,r){let{description:i,pathWithLocation:a}=G(e),{line:o}=W(a),s=K(t,n),c=q(t,r,o);return`- ${J(o?`Line ${o}`:s,c)}${i?` - ${Oe(i)}`:``}\n`}function Ae(e){let t=Object.groupBy(e,e=>{let{pathWithLocation:t}=G(e),{filePath:n=U}=W(t);return n});return Object.entries(t).map(([e,t=[]])=>({filePath:e,items:t})).toSorted((e,t)=>e.filePath===U?1:t.filePath===U?-1:e.filePath.localeCompare(t.filePath))}function je(e){let t=`\n### Other Issues (${e.length})\n\n`;for(let n of e)t+=`- ${n}\n`;return`${t}\n`}function Me(e,t,n){if(e.filePath===U)return je(e.items);let r=`\n### ${J(K(e.filePath,t),q(e.filePath,n))} (${e.items.length})\n\n`;for(let i of e.items)r+=ke(i,e.filePath,t,n);return`${r}\n`}function Ne(e,t,n,r){let i=t.length,a=`\n## ${e} (${i} ${w(i,`issue`)})\n\n`;if(t.length===0)return`${a}No issues\n`;let o=Ae(t);for(let e of o)a+=Me(e,n,r);return a}function Pe(e){return`${e.replaceAll(/\n{3,}/g,`
|
|
14
14
|
|
|
15
|
-
`).trimEnd()}\n`}function
|
|
16
|
-
`;for(let[i,{items:a=[]}]of Object.entries(e.checks))r+=
|
|
17
|
-
`).slice(1).map(e=>
|
|
15
|
+
`).trimEnd()}\n`}function Fe(e,t){let n=process.cwd(),r=`# Mejora Baseline
|
|
16
|
+
`;for(let[i,{items:a=[]}]of Object.entries(e.checks))r+=Ne(i,a,n,t);return Pe(r)}const Ie=(e,t)=>{if(!t)return!1;let n=e.items??[],r=t.items??[];if(n.length!==r.length)return!1;let i=n.toSorted(),a=r.toSorted();return i.every((e,t)=>e===a[t])};function Le(e){let t=[e.message];if(e.stack){let n=e.stack.split(`
|
|
17
|
+
`).slice(1).map(e=>b(e.trim())).join(`
|
|
18
18
|
`);t.push(n)}return t.join(`
|
|
19
|
-
`)}function
|
|
19
|
+
`)}function Y(...e){return e.map(e=>typeof e==`string`?e:e instanceof Error?Le(e):d(e,{colors:!1,depth:10})).join(` `)}const X={error:(...e)=>{console.error(S(`✖`),Y(...e))},log:(...e)=>{console.log(Y(...e))},start:(...e)=>{console.log(ee(`◐`),Y(...e))},success:(...e)=>{console.log(x(`✔`),Y(...e))}};var Z=class e{baselinePath;constructor(e=`.mejora/baseline.json`){this.baselinePath=e}static create(e){return{checks:e,version:1}}static getEntry(e,t){return e?.checks[t]}static update(t,n,r){let i=t??e.create({}),a=i.checks[n];return Ie(r,a)?i:{...i,checks:{...i.checks,[n]:r}}}async load(){try{let e=await c(this.baselinePath,`utf8`);if(e.includes(`<<<<<<<`)){X.start(`Merge conflict detected in baseline, auto-resolving...`);let t=De(e);return await this.save(t,!0),X.success(`Baseline conflict resolved`),t}return JSON.parse(e)}catch(e){if(e.code===`ENOENT`)return null;throw e}}async save(e,t=!1){if(j&&!t)return;let r=`${JSON.stringify(e,null,2)}\n`,i=this.baselinePath.replace(`.json`,`.md`),a=Fe(e,n(this.baselinePath));await s(n(this.baselinePath),{recursive:!0}),await Promise.all([l(this.baselinePath,r,`utf8`),l(i,a,`utf8`)])}};function Re(){return{hasImprovement:!1,hasRegression:!1,isInitial:!0,newItems:[],removedItems:[]}}function Q(e,t){return{hasImprovement:t.length>0,hasRegression:e.length>0,isInitial:!1,newItems:e.toSorted(),removedItems:t.toSorted()}}function ze(e,t){let n=[];for(let r of e)t.has(r)||n.push(r);return n}function Be(e,t){let n=[];for(let r of t)e.has(r)||n.push(r);return n}function Ve(e,t){let n=new Set(e.items),r=new Set(t.items);return Q(ze(n,r),Be(n,r))}function He(e,t){return t?Ve(e,t):Re()}var Ue=class n{baselineManager;isCI;constructor(e,t=j){this.baselineManager=new Z(e),this.isCI=t}static filterChecks(e,t){let r={...e};if(t.only){let e=n.resolveRegex(t.only,`--only`);r=Object.fromEntries(Object.entries(r).filter(([t])=>e.test(t)))}if(t.skip){let e=n.resolveRegex(t.skip,`--skip`);r=Object.fromEntries(Object.entries(r).filter(([t])=>!e.test(t)))}return r}static resolveRegex(e,t){try{return new RegExp(e)}catch{throw Error(`Invalid regex pattern for ${t}: "${e}"`)}}static async runCheck(n){return n.type===`eslint`?(await t(),a(n)):(await e(),i(n))}async run(e,t={}){let r=performance.now(),i=await this.baselineManager.load(),a=[],o=!1,s=!1,c=!1,l=i,u=n.filterChecks(e.checks,t),d=!t.json&&!this.isCI&&process.stdout.isTTY;for(let[e,f]of Object.entries(u)){let u=d?new ge(`Running ${e}...`):null;try{u?u.start():X.start(`Running ${e}...`);let r=performance.now(),d=await n.runCheck(f),p=performance.now()-r,m=Z.getEntry(i,e),h=He(d,m),g={baseline:m,checkId:e,duration:p,hasImprovement:h.hasImprovement,hasRegression:h.hasRegression,isInitial:h.isInitial,newItems:h.newItems,removedItems:h.removedItems,snapshot:d};a.push(g),h.hasRegression&&(o=!0),h.hasImprovement&&(s=!0),h.isInitial&&(c=!0),(h.hasImprovement||t.force||h.isInitial)&&(l=Z.update(l,e,{items:d.items,type:d.type})),u?u.succeed(`${e} complete`):X.success(`${e} complete`)}catch(t){return u?u.fail(`${e} failed`):X.error(`${e} failed`),X.error(`Error running check "${e}":`,t),{exitCode:2,hasImprovement:!1,hasRegression:!0,results:a,totalDuration:performance.now()-r}}}l&&l!==i&&(!o||t.force||c)&&await this.baselineManager.save(l,t.force);let f=0;o&&!t.force&&(f=1);let p=performance.now()-r;return{exitCode:f,hasImprovement:s,hasRegression:o,results:a,totalDuration:p}}};const{values:$}=f({allowPositionals:!1,options:{force:{default:!1,short:`f`,type:`boolean`},help:{short:`h`,type:`boolean`},json:{default:!1,type:`boolean`},only:{type:`string`},skip:{type:`string`}},strict:!0});$.help&&(X.log(`
|
|
20
20
|
mejora - Prevent regressions by allowing only improvement
|
|
21
21
|
|
|
22
22
|
Usage:
|
|
@@ -35,4 +35,4 @@ Examples:
|
|
|
35
35
|
mejora --json
|
|
36
36
|
mejora --only "eslint > *"
|
|
37
37
|
mejora --skip typescript
|
|
38
|
-
`),process.exit(0));try{let e=new
|
|
38
|
+
`),process.exit(0));try{let e=new Ue,t=await r(),n=await e.run(t,{force:$.force,json:$.json,only:$.only,skip:$.skip});$.json?X.log(g(n)):(X.log(``),X.log(ue(n))),process.exit(n.exitCode)}catch(e){e instanceof Error?X.error(e.message):X.error(e),process.exit(2)}export{};
|