eslint / config-inspector

A visual tool for inspecting and understanding your ESLint flat configs.
https://www.npmjs.com/package/@eslint/config-inspector
Apache License 2.0
518 stars 15 forks source link

configurable base path for build command for hosting as GitLab pages #41

Closed JohannesKonings closed 2 months ago

JohannesKonings commented 2 months ago

Hi,

with https://github.com/eslint/config-inspector/issues/33 a configurable basePath for the static build was requested. Unfortunately it doesn't work if the inspecor is not deployed at the root level. With the following script it works then for a non root path (in that case eslint):

import { readFileSync, readdirSync, statSync, writeFileSync } from 'fs';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';

// @ts-ignore
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const rootPath = __dirname.split('src')[0];

const indexHtmlPath = `${rootPath}.eslint-config-inspector/index.html`;
const indexHtmlString = readFileSync(indexHtmlPath, 'utf8');
const faviconReplaced = indexHtmlString.replace(
  /\/favicon.svg/g,
  './favicon.svg',
);
const nuxtHrefReplaced = faviconReplaced.replace(
  /href="\/_nuxt\//g,
  'href="/eslint/_nuxt/',
);
const nuxtSrcReplaced = nuxtHrefReplaced.replace(
  /src="\/_nuxt\//g,
  'src="/eslint/_nuxt/',
);

const baseReplaced = nuxtSrcReplaced.replace(
  /baseURL:"\//g,
  'baseURL:"/eslint/',
);

writeFileSync(indexHtmlPath, baseReplaced);

const getAllFiles = (dirPath: string, arrayOfFiles: string[] = []) => {
  const files = readdirSync(dirPath);

  files.forEach((file) => {
    if (statSync(join(dirPath, file)).isDirectory()) {
      arrayOfFiles = getAllFiles(join(dirPath, file), arrayOfFiles);
    } else {
      arrayOfFiles.push(join(dirPath, file));
    }
  });

  return arrayOfFiles;
};

const allFiles = getAllFiles(`${rootPath}.eslint-config-inspector`);

const searchAndReplace = (file: string) => {
  const fileString = readFileSync(file, 'utf8');
  const replaced = fileString.replace(
    /\/api\/payload.json/g,
    '/eslint/api/payload.json',
  );
  writeFileSync(file, replaced);
};
for (const file of allFiles) {
  searchAndReplace(file);
}

Is there a way to configre that via a cli parameter?

thanks