build: refactor linting setup

This commit is contained in:
iCrawl
2023-08-24 06:43:23 +02:00
parent 788888ab9a
commit fb81f7befb
103 changed files with 1546 additions and 972 deletions

View File

@@ -47,15 +47,15 @@
"undici": "5.23.0"
},
"devDependencies": {
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -49,14 +49,14 @@
"@microsoft/tsdoc": "0.14.2"
},
"devDependencies": {
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6"
},
"engines": {

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src"]
}

View File

@@ -1 +1,2 @@
/** @type {import('prettier').Config} */
module.exports = require('../../.prettierrc.json');

View File

@@ -73,15 +73,15 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "scripts", "__tests__"]
}

View File

@@ -75,17 +75,17 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"downlevel-dts": "^0.11.0",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -62,16 +62,16 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -75,16 +75,16 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src"]
}

View File

@@ -56,13 +56,13 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@types/prompts": "^2.4.4",
"@types/validate-npm-package-name": "^4.0.0",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"terser": "^5.19.2",

View File

@@ -4,6 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": ["**/*.ts", "**/*.js", "**/*.test.ts", "**/*.test.js"],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src"]
}

View File

@@ -4,6 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": ["**/*.ts", "**/*.js", "**/*.test.ts", "**/*.test.js"],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "bin"]
}

View File

@@ -4,18 +4,6 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "bin", "template"],
"exclude": ["template/Deno"]
}

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://json.schemastore.org/lintstagedrc.schema.json",
"*": "prettier --ignore-unknown --write",
"{src/**,test/**,typings/**,scripts/**}.{mjs,js,ts}": "eslint --ext mjs,js,ts --fix"
"{src/**,test/**,typings/**,scripts/**}.{mjs,js,ts}": "cross-env ESLINT_USE_FLAT_CONFIG=false eslint --ext mjs,js,ts --fix"
}

View File

@@ -69,7 +69,7 @@
"devDependencies": {
"@discordjs/docgen": "workspace:^",
"@favware/cliff-jumper": "2.1.1",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"cross-env": "^7.0.3",
"dtslint": "4.2.1",
"eslint": "8.47.0",
@@ -78,7 +78,7 @@
"prettier": "3.0.2",
"tsd": "0.28.1",
"tslint": "6.1.3",
"turbo": "1.10.12",
"turbo": "1.10.13",
"typescript": "5.1.6"
},
"engines": {

View File

@@ -6,6 +6,21 @@
"pretty": false,
// Completeness
"skipDefaultLibCheck": true
"skipDefaultLibCheck": true,
"types": [
"@discordjs/builders",
"@discordjs/util",
"@discordjs/collection",
"@discordjs/rest",
"@discordjs/ws",
"discord-api-types/v10",
"node",
"ws",
"tsd",
"jest",
"undici",
"@sapphire/snowflake"
]
}
}

View File

@@ -65,14 +65,14 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@types/jsdoc-to-markdown": "^7.0.3",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6"
},
"engines": {

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "bin"]
}

View File

@@ -59,15 +59,15 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -76,16 +76,16 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -49,14 +49,14 @@
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6"
},
"engines": {

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src"]
}

View File

@@ -1 +1,2 @@
/** @type {import('prettier').Config} */
module.exports = require('../../.prettierrc.json');

View File

@@ -72,17 +72,17 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"@types/supertest": "^2.0.12",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"supertest": "^6.3.3",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -95,16 +95,16 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -1 +1,18 @@
module.exports = require('../../.prettierrc.json');
/** @type {import('prettier').Config} */
module.exports = {
...require('../../.prettierrc.json'),
overrides: [
{
files: 'turbo/generators/templates/{.cliff-jumperrc.json.hbs,api-extractor.json.hbs,package.json.hbs}',
options: {
parser: 'json',
},
},
{
files: 'turbo/generators/templates/{.lintstagedrc.js.hbs,.prettierrc.js.hbs}',
options: {
parser: 'babel',
},
},
],
};

View File

@@ -6,8 +6,8 @@
"private": true,
"scripts": {
"build": "tsup",
"lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src",
"format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src",
"lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src turbo",
"format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src turbo",
"fmt": "yarn format"
},
"exports": {
@@ -56,23 +56,21 @@
"@microsoft/api-extractor-model": "7.27.6",
"@microsoft/tsdoc": "0.14.2",
"@microsoft/tsdoc-config": "0.16.2",
"commander": "^11.0.0",
"fs-extra": "^11.1.1",
"tslib": "^2.6.2",
"undici": "5.23.0",
"yaml": "2.3.1"
},
"devDependencies": {
"@types/fs-extra": "^11.0.1",
"@types/node": "16.18.41",
"@turbo/gen": "^1.10.13",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -1,104 +0,0 @@
import { mkdir, writeFile, readFile } from 'node:fs/promises';
import { join } from 'node:path';
import { chdir } from 'node:process';
import { copy } from 'fs-extra';
import { parse as parseYAML, stringify as stringifyYAML } from 'yaml';
import cliffJumperJSON from './template/.cliff-jumperrc.json';
import apiExtractorJSON from './template/api-extractor.json';
import templateJSON from './template/template.package.json';
interface LabelerData {
color: string;
name: string;
}
function sortYAMLObject(yaml: Record<string, string[]>) {
const sortedYAML: typeof yaml = {};
for (const key of Object.keys(yaml).sort((a, b) => a.localeCompare(b))) sortedYAML[key] = yaml[key]!;
return sortedYAML;
}
export async function createPackage(packageName: string, packageDescription?: string) {
const packageDir = join('packages', packageName);
// Make directory for package
await mkdir(packageDir);
// Change to subdirectory
chdir(packageDir);
// Create folder structure
await Promise.all([mkdir('src'), mkdir('__tests__')]);
const templateDir = join('..', 'scripts', 'src', 'template');
// Create files
await writeFile(join('src', 'index.ts'), `console.log('Hello, from @discordjs/${packageName}');`);
await writeFile('.eslintrc.json', await readFile(join(templateDir, 'template.eslintrc.json'), 'utf8'));
await writeFile('.gitignore', await readFile(join(templateDir, 'template.gitignore'), 'utf8'));
await writeFile('.lintstagedrc.js', await readFile(join(templateDir, 'template.lintstagedrc.js'), 'utf8'));
await writeFile('.prettierignore', await readFile(join(templateDir, 'template.prettierignore'), 'utf8'));
await writeFile('.prettierrc.js', await readFile(join(templateDir, 'template.prettierrc.js'), 'utf8'));
const packageJSON = {
...templateJSON,
name: templateJSON.name.replace('{name}', packageName),
description: packageDescription ?? '',
};
// Edit changelog script
packageJSON.scripts.changelog = packageJSON.scripts.changelog.replace('{name}', packageName);
// Edit repository directory
packageJSON.repository.directory = packageJSON.repository.directory.replace('{name}', packageName);
// Create package.json
await writeFile(`package.json`, JSON.stringify(packageJSON, null, 2));
// Update cliff.toml
const cliffTOML = (await readFile(join(templateDir, 'cliff.toml'), 'utf8')).replace('{name}', packageName);
await writeFile('cliff.toml', cliffTOML);
// Update .cliff-jumperrc.json
const newCliffJumperJSON = { ...cliffJumperJSON, name: packageName, packagePath: `packages/${packageName}` };
await writeFile('.cliff-jumperrc.json', JSON.stringify(newCliffJumperJSON, null, 2));
// Update api-extractor.json
const newApiExtractorJSON = { ...apiExtractorJSON };
newApiExtractorJSON.docModel.projectFolderUrl = newApiExtractorJSON.docModel.projectFolderUrl.replace(
'{name}',
packageName,
);
await writeFile('api-extractor.json', JSON.stringify(newApiExtractorJSON, null, 2));
// Move to github directory
chdir(join('..', '..', '.github'));
const labelsYAML = parseYAML(await readFile('labels.yml', 'utf8')) as LabelerData[];
labelsYAML.push({ name: `packages:${packageName}`, color: 'fbca04' });
labelsYAML.sort((a, b) => a.name.localeCompare(b.name));
await writeFile('labels.yml', stringifyYAML(labelsYAML));
const labelerYAML = parseYAML(await readFile('labeler.yml', 'utf8')) as Record<string, string[]>;
labelerYAML[`packages:${packageName}`] = [`packages/${packageName}/*`, `packages/${packageName}/**/*`];
await writeFile('labeler.yml', stringifyYAML(sortYAMLObject(labelerYAML)));
const issueLabelerYAML = parseYAML(await readFile('issue-labeler.yml', 'utf8')) as Record<string, string[]>;
issueLabelerYAML[`packages:${packageName}`] = [
`### Which (application|package|application or package) is this (bug report|feature request) for\\?\\n\\n${packageName}\\n`,
];
await writeFile('issue-labeler.yml', stringifyYAML(sortYAMLObject(issueLabelerYAML)));
// Move back to root
chdir('..');
// Copy default files over
await copy(join('packages', 'scripts', 'src', 'template', 'default'), packageDir);
}

View File

@@ -1,2 +1 @@
export * from './generateIndex.js';
export * from './createPackage.js';

View File

@@ -1,14 +0,0 @@
import { program } from 'commander';
import { createPackage } from '../dist/index.mjs';
program
.description('A script for creating discord.js packages.')
.argument('<name>', 'The name of the new package.')
.argument('[description]', 'The description of the new package.');
program.parse();
const [packageName, description] = program.args;
console.log(`Creating package @discordjs/${packageName}...`);
await createPackage(packageName, description);
console.log('Done!');

View File

@@ -1,5 +0,0 @@
{
"name": "",
"org": "discordjs",
"packagePath": ""
}

View File

@@ -1,6 +0,0 @@
{
"extends": "../../api-extractor.json",
"docModel": {
"projectFolderUrl": "https://github.com/discordjs/discord.js/tree/main/packages/{name}"
}
}

View File

@@ -1,21 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig.json",
"extends": "./tsconfig.json",
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
}

View File

@@ -1,3 +0,0 @@
{
"extends": "../../.eslintrc.json"
}

View File

@@ -1,28 +0,0 @@
# Packages
node_modules
# Log files
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Env
.env
# Dist
dist
dist-docs
# Docs
docs/**/*
!docs/README.md
# Miscellaneous
.turbo
.tmp
coverage

View File

@@ -1,6 +0,0 @@
.turbo
coverage
dist
dist-docs
docs/docs.api.json
CHANGELOG.md

View File

@@ -4,17 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
]
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "turbo"]
}

View File

@@ -0,0 +1,93 @@
import { writeFile } from 'node:fs/promises';
import type { PlopTypes } from '@turbo/gen';
import { parse as parseYAML, stringify as stringifyYAML } from 'yaml';
interface LabelerData {
color: string;
name: string;
}
function sortYAMLObject(yaml: Record<string, string[]>) {
const sortedYAML: typeof yaml = {};
for (const key of Object.keys(yaml).sort((a, b) => a.localeCompare(b))) sortedYAML[key] = yaml[key]!;
return sortedYAML;
}
export default function generator(plop: PlopTypes.NodePlopAPI): void {
plop.setGenerator('create-package', {
description: '',
prompts: [
{
type: 'input',
name: 'name',
message: 'The name of the new package',
},
{
type: 'input',
name: 'description',
message: 'The description of the new package.',
},
],
actions: [
{
type: 'add',
path: `${plop.getDestBasePath()}/../{{name}}/src/index.ts`,
template: "console.log('Hello, from @discordjs/{{name}}');",
},
{
type: 'add',
path: `${plop.getDestBasePath()}/../{{name}}/__tests__/.gitkeep`,
},
{
type: 'addMany',
destination: `${plop.getDestBasePath()}/../{{name}}`,
templateFiles: ['templates/**'],
globOptions: { dot: true },
base: 'templates/default/',
stripExtensions: ['hbs'],
},
{
type: 'modify',
path: `${plop.getDestBasePath()}/turbo/generators/templates/cliff.toml`,
async transform(content, answers) {
const cliffTOML = content.replace('{{name}}', answers.name);
await writeFile(`${plop.getDestBasePath()}/../${answers.name}/cliff.toml`, cliffTOML);
return content;
},
},
{
type: 'modify',
path: `${plop.getDestBasePath()}/../../.github/labels.yml`,
transform(content, answers) {
const labelsYAML = parseYAML(content) as LabelerData[];
labelsYAML.push({ name: `packages:${answers.name}`, color: 'fbca04' });
labelsYAML.sort((a, b) => a.name.localeCompare(b.name));
return stringifyYAML(labelsYAML);
},
},
{
type: 'modify',
path: `${plop.getDestBasePath()}/../../.github/labeler.yml`,
transform(content, answers) {
const labelerYAML = parseYAML(content) as Record<string, string[]>;
labelerYAML[`packages:${answers.name}`] = [`packages/${answers.name}/*`, `packages/${answers.name}/**/*`];
return stringifyYAML(sortYAMLObject(labelerYAML));
},
},
{
type: 'modify',
path: `${plop.getDestBasePath()}/../../.github/issue-labeler.yml`,
transform(content, answers) {
const issueLabelerYAML = parseYAML(content) as Record<string, string[]>;
issueLabelerYAML[`packages:${answers.name}`] = [
`### Which (application|package|application or package) is this (bug report|feature request) for\\?\\n\\n${answers.name}\\n`,
];
return stringifyYAML(sortYAMLObject(issueLabelerYAML));
},
},
],
});
}

View File

@@ -0,0 +1 @@
{ "name": "{{name}}", "org": "discordjs", "packagePath": "packages/{{name}}" }

View File

@@ -0,0 +1,2 @@
# Packages node_modules # Log files logs *.log npm-debug.log* # Runtime data pids *.pid *.seed # Env .env # Dist dist
dist-docs # Docs docs/**/* !docs/README.md # Miscellaneous .turbo .tmp coverage

View File

@@ -0,0 +1 @@
.turbo coverage dist dist-docs docs/docs.api.json CHANGELOG.md

View File

@@ -0,0 +1,4 @@
{
"extends": "../../api-extractor.json",
"docModel": { "projectFolderUrl": "https://github.com/discordjs/discord.js/tree/main/packages/{{name}}" }
}

View File

@@ -57,7 +57,7 @@ commit_parsers = [
{ body = ".*security", group = "Security"},
]
filter_commits = true
tag_pattern = "@discordjs/{name}@[0-9]*"
tag_pattern = "@discordjs/{{name}}@[0-9]*"
ignore_tags = ""
topo_order = true
sort_commits = "newest"

View File

@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/tsconfig.json",
"extends": "./tsconfig.json",
"compilerOptions": {
"allowJs": true
},
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -1,3 +1,3 @@
import { createTsupConfig } from '../../tsup.config.js';
export default createTsupConfig({});
export default createTsupConfig();

View File

@@ -1,7 +1,7 @@
{
"name": "@discordjs/{name}",
"name": "@discordjs/{{name}}",
"version": "0.1.0",
"description": "",
"description": "{{description}}",
"scripts": {
"test": "vitest run",
"build": "tsup",
@@ -10,17 +10,24 @@
"format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__",
"docs": "yarn build:docs && api-extractor run --local && api-extractor run --local --config ./api-extractor-docs.json",
"prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/{name}/*'",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/{{name}}/*'",
"release": "cliff-jumper"
},
"exports": {
".": {
"require": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
},
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
}
}
},
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
},
"directories": {
"lib": "src",
"test": "__tests__"
@@ -37,7 +44,7 @@
"repository": {
"type": "git",
"url": "https://github.com/discordjs/discord.js.git",
"directory": "packages/{name}"
"directory": "packages/{{name}}"
},
"bugs": {
"url": "https://github.com/discordjs/discord.js/issues"
@@ -47,11 +54,11 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.42",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.47",
"eslint-config-neon": "^0.1.54",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsup": "^7.2.0",

View File

@@ -1 +1,2 @@
/** @type {import('prettier').Config} */
export * from '../../.prettierrc.json' assert { type: 'json' };

View File

@@ -67,8 +67,8 @@
"@storybook/react": "^7.3.2",
"@storybook/react-vite": "^7.3.2",
"@storybook/testing-library": "^0.2.0",
"@types/node": "16.18.41",
"@types/react": "^18.2.20",
"@types/node": "16.18.44",
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
"@unocss/eslint-plugin": "^0.55.2",
"@unocss/reset": "^0.55.2",
@@ -77,12 +77,12 @@
"chromatic": "^6.23.0",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"prop-types": "^15.8.1",
"storybook": "^7.3.2",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"unocss": "^0.55.2",
"vite": "^4.4.9",

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", ".storybook"]
}

View File

@@ -63,16 +63,16 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "16.18.41",
"@types/node": "16.18.44",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"prettier": "^3.0.2",
"tsd": "^0.28.1",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"vitest": "^0.34.2"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}

View File

@@ -74,19 +74,19 @@
"@babel/preset-typescript": "^7.22.5",
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/jest": "^29.5.3",
"@types/node": "16.18.41",
"@types/jest": "^29.5.4",
"@types/node": "16.18.44",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"jest": "^29.6.3",
"jest-websocket-mock": "^2.4.1",
"mock-socket": "^9.2.1",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"tweetnacl": "^1.0.3",
"typescript": "^5.1.6"
},

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "scripts", "__tests__", "__mocks__"]
}

View File

@@ -85,17 +85,17 @@
"devDependencies": {
"@favware/cliff-jumper": "^2.1.1",
"@microsoft/api-extractor": "^7.36.4",
"@types/node": "18.17.6",
"@types/node": "18.17.9",
"@vitest/coverage-v8": "^0.34.2",
"cross-env": "^7.0.3",
"esbuild-plugin-version-injector": "^1.2.0",
"eslint": "^8.47.0",
"eslint-config-neon": "^0.1.54",
"eslint-config-neon": "^0.1.56",
"eslint-formatter-pretty": "^5.0.0",
"mock-socket": "^9.2.1",
"prettier": "^3.0.2",
"tsup": "^7.2.0",
"turbo": "^1.10.12",
"turbo": "^1.10.13",
"typescript": "^5.1.6",
"undici": "5.23.0",
"vitest": "^0.34.2",

View File

@@ -4,18 +4,5 @@
"compilerOptions": {
"allowJs": true
},
"include": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.mjs",
"**/*.jsx",
"**/*.test.ts",
"**/*.test.js",
"**/*.test.mjs",
"**/*.spec.ts",
"**/*.spec.js",
"**/*.spec.mjs"
],
"exclude": []
"include": ["*.ts", "*.tsx", "*.js", "*.cjs", "*.mjs", "src", "__tests__"]
}