[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/SSHari/ssh-dev-scripts/master/scripts/setup.js [Back]  [Original]

const fs = require('fs');
const path = require('path');
const util = require('util');
const exec = util.promisify(require('child_process').exec);

/* File Contents */
const eslintIgnore = `node_modules
babel.config.js
release.config.js
rollup.config.js
**/__tests__/**
dist`;

const babelConfig = `module.exports = require('ssh-dev-scripts/src/babel.config');`;

const eslintConfig = `module.exports = require('ssh-dev-scripts/src/eslint.config');`;

const prettierConfig = `module.exports = require('ssh-dev-scripts/src/prettier.config');`;

const releaseConfig = `module.exports = require('ssh-dev-scripts/src/release.config');`;

const rollupConfig = `import { createFileConfig, createExternalDeps } from 'ssh-dev-scripts/src/rollup.config';
export default createFileConfig({ external: createExternalDeps({ '@babel/runtime': 'version' }) });`;

const tsConfig = `{
  "extends": "ssh-dev-scripts/src/tsconfig.json",
  "compilerOptions": {
    "baseUrl": "src",
    "declarationDir": "dist/types",
    "outDir": "dist",
    "rootDir": "src"
  },
  "include": ["src"]
}`;

const tsConfigBuild = `{
  "extends": "./tsconfig.json",
  "exclude": ["src/**/*.spec.ts*", "src/**/__tests__/**"]
}`;

async function setup() {
  const { stdout } = await exec('npm -v');
  const [major] = stdout?.split('.');

  if (Number(major) < 7) {
    console.warn(`This script expects npm to be on version 7+, but the npm major version in this environment is ${major}`);
    process.exitCode = 1;
  } else {
    // Set up scripts
    await exec('npm set-script build "npm-run-all --parallel build:app build:types"');
    await exec('npm set-script build:app "rollup -c"');
    await exec('npm set-script build:types "tsc -p tsconfig.build.json"');
    await exec('npm set-script format:files "prettier --ignore-path .gitignore ."');
    await exec('npm set-script format:check "npm run format:files -- --check"');
    await exec('npm set-script format "npm run format:files -- --write"');
    await exec('npm set-script lint "eslint ."');
    await exec('npm set-script prepare "husky install"');
    await exec('npm set-script test "jest"');
    await exec('npm set-script typecheck "tsc --noEmit --emitDeclarationOnly false"');
    await exec('npm set-script validate "npm-run-all --parallel format:check lint test typecheck"');

    // Set up config files
    writeFile('.eslintignore', eslintIgnore);
    writeFile('babel.config.js', babelConfig);
    writeFile('eslint.config.js', eslintConfig);
    writeFile('prettier.config.js', prettierConfig);
    writeFile('release.config.js', releaseConfig);
    writeFile('rollup.config.js', rollupConfig);
    writeFile('tsconfig.build.json', tsConfigBuild);
    writeFile('tsconfig.json', tsConfig);

    // Set up husky
    try {
      await exec('mkdir .husky');
      await exec('npx husky add .husky/pre-commit "npm run validate"');
    } catch (error) {
      console.error('Failed to set up husky');
    }
  }
}

function writeFile(fileName, content) {
  try {
    fs.writeFileSync(fileName, content);
  } catch (error) {
    console.error(`Failed to write the file ${fileName}.`);
  }
}

setup();

Web Proxy Viewer  |  New URL  |  Original Page