Skip to content

Commit

Permalink
build: refactor build system (#8324)
Browse files Browse the repository at this point in the history
  • Loading branch information
iCrawl committed Jul 20, 2022
1 parent d124541 commit 3b0197b
Show file tree
Hide file tree
Showing 27 changed files with 1,116 additions and 334 deletions.
@@ -0,0 +1,36 @@
diff --git a/dist/rollup-plugin-typescript2.cjs.js b/dist/rollup-plugin-typescript2.cjs.js
index 9ab972b041cc76f8f786d6a20f3efb53c364cad6..13e056a3c0971eb18b307d91fad096a9f3b9de79 100644
--- a/dist/rollup-plugin-typescript2.cjs.js
+++ b/dist/rollup-plugin-typescript2.cjs.js
@@ -29799,6 +29799,13 @@ const typescript = (options) => {
declarations[key] = { type: result.dts, map: result.dtsmap };
context.debug(() => `${safe.exports.blue("generated declarations")} for '${key}'`);
}
+ // if a user sets this compilerOption, they probably want another plugin (e.g. Babel, ESBuild) to transform their TS instead, while rpt2 just type-checks and/or outputs declarations
+ // note that result.code is non-existent if emitDeclarationOnly per https://github.com/ezolenko/rollup-plugin-typescript2/issues/268
+ if (parsedConfig.options.emitDeclarationOnly)
+ {
+ context.debug(() => `${blue("emitDeclarationOnly")} enabled, not transforming TS'`);
+ return undefined;
+ }
const transformResult = { code: result.code, map: { mappings: "" } };
if (result.map) {
if (pluginOptions.sourceMapCallback)
diff --git a/dist/rollup-plugin-typescript2.es.js b/dist/rollup-plugin-typescript2.es.js
index e43bf8f03bc6792b61d8352e04bb6466712426c2..420e8f0d0d109076bc72e9d60240077235a9ba11 100644
--- a/dist/rollup-plugin-typescript2.es.js
+++ b/dist/rollup-plugin-typescript2.es.js
@@ -29770,6 +29770,13 @@ const typescript = (options) => {
declarations[key] = { type: result.dts, map: result.dtsmap };
context.debug(() => `${safe.exports.blue("generated declarations")} for '${key}'`);
}
+ // if a user sets this compilerOption, they probably want another plugin (e.g. Babel, ESBuild) to transform their TS instead, while rpt2 just type-checks and/or outputs declarations
+ // note that result.code is non-existent if emitDeclarationOnly per https://github.com/ezolenko/rollup-plugin-typescript2/issues/268
+ if (parsedConfig.options.emitDeclarationOnly)
+ {
+ context.debug(() => `${blue("emitDeclarationOnly")} enabled, not transforming TS'`);
+ return undefined;
+ }
const transformResult = { code: result.code, map: { mappings: "" } };
if (result.map) {
if (pluginOptions.sourceMapCallback)
93 changes: 93 additions & 0 deletions build.config.ts
@@ -0,0 +1,93 @@
import { relative, resolve } from 'node:path';
import glob from 'fast-glob';
import typescript from 'rollup-plugin-typescript2';
import { defineBuildConfig, BuildEntry } from 'unbuild';

interface ConfigOptions {
entries: (BuildEntry | string)[];
minify: boolean;
emitCJS: boolean;
externals: string[];
cjsBridge: boolean;
sourcemap: boolean;
preserveModules: boolean;
preserveModulesRoot: string;
declaration: boolean;
typeCheck: boolean;
}

export function createUnbuildConfig({
entries = [{ builder: 'rollup', input: 'src/index' }],
minify = false,
emitCJS = true,
cjsBridge = true,
externals = [],
sourcemap = true,
preserveModules = true,
preserveModulesRoot = 'src',
declaration = true,
typeCheck = false,
}: Partial<ConfigOptions> = {}) {
const files = glob
.sync('**', { cwd: 'src' })
.map((file) => [`${file.slice(0, -2)}cjs`, `${file.slice(0, -2)}mjs`])
.flat();

return defineBuildConfig({
entries,
clean: true,
rollup: {
esbuild: {
minify,
minifyIdentifiers: false,
},
emitCJS,
cjsBridge,
json: {
namedExports: false,
},
},

externals: [...files, ...externals],

hooks: {
'rollup:options': (_, options) => {
// @ts-expect-error: This will always be an array
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
options.output![0] = {
// @ts-expect-error: This will always be an array
...options.output![0],
sourcemap,
preserveModules,
preserveModulesRoot,
};

if (emitCJS) {
// @ts-expect-error: This will always be an array
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
options.output![1] = {
// @ts-expect-error: This will always be an array
...options.output![1],
sourcemap,
preserveModules,
preserveModulesRoot,
};
}

if (declaration) {
options.plugins?.unshift(
typescript({
check: typeCheck,
tsconfig: relative(__dirname, resolve(process.cwd(), 'tsconfig.json')),
tsconfigOverride: {
compilerOptions: {
emitDeclarationOnly: true,
},
},
}),
);
}
},
},
});
}
10 changes: 7 additions & 3 deletions package.json
Expand Up @@ -41,19 +41,23 @@
"@commitlint/config-angular": "^17.0.3",
"@favware/cliff-jumper": "^1.8.5",
"@favware/npm-deprecate": "^1.0.4",
"@typescript-eslint/eslint-plugin": "^5.30.6",
"@typescript-eslint/parser": "^5.30.6",
"@typescript-eslint/eslint-plugin": "^5.30.7",
"@typescript-eslint/parser": "^5.30.7",
"conventional-changelog-cli": "^2.2.2",
"eslint": "^8.20.0",
"eslint-config-marine": "^9.4.1",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-typescript": "^3.2.7",
"eslint-import-resolver-typescript": "^3.3.0",
"eslint-plugin-import": "^2.26.0",
"fast-glob": "^3.2.11",
"husky": "^8.0.1",
"is-ci": "^3.0.1",
"prettier": "^2.7.1",
"typescript": "^4.7.4"
},
"resolutions": {
"rollup-plugin-typescript2@0.32.1": "patch:rollup-plugin-typescript2@npm:0.32.1#.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch"
},
"engines": {
"node": ">=16.9.0"
},
Expand Down
3 changes: 3 additions & 0 deletions packages/actions/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig({ minify: true });
10 changes: 6 additions & 4 deletions packages/actions/package.json
Expand Up @@ -5,17 +5,17 @@
"private": true,
"scripts": {
"test": "vitest run",
"build": "tsup",
"build": "unbuild",
"lint": "prettier --check . && eslint src __tests__ --ext mjs,js,ts",
"format": "prettier --write . && eslint src __tests__ --ext mjs,js,ts --fix",
"fmt": "yarn format"
},
"main": "./dist/index.js",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
},
"directories": {
Expand Down Expand Up @@ -50,11 +50,13 @@
},
"devDependencies": {
"@types/node": "^16.11.45",
"c8": "^7.11.3",
"c8": "^7.12.0",
"eslint": "^8.20.0",
"prettier": "^2.7.1",
"rollup-plugin-typescript2": "0.32.1",
"tsup": "^6.1.3",
"typescript": "^4.7.4",
"unbuild": "^0.7.4",
"vitest": "^0.18.1"
},
"engines": {
Expand Down
3 changes: 3 additions & 0 deletions packages/builders/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig();
10 changes: 6 additions & 4 deletions packages/builders/package.json
Expand Up @@ -4,7 +4,7 @@
"description": "A set of builders that you can use when creating your bot",
"scripts": {
"test": "vitest run",
"build": "tsup",
"build": "unbuild",
"lint": "prettier --check . && eslint src __tests__ --ext mjs,js,ts",
"format": "prettier --write . && eslint src __tests__ --ext mjs,js,ts --fix",
"fmt": "yarn format",
Expand All @@ -13,12 +13,12 @@
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'",
"release": "cliff-jumper"
},
"main": "./dist/index.js",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
},
"directories": {
Expand Down Expand Up @@ -65,11 +65,13 @@
"@favware/cliff-jumper": "^1.8.5",
"@microsoft/api-extractor": "^7.28.4",
"@types/node": "^16.11.45",
"c8": "^7.11.3",
"c8": "^7.12.0",
"eslint": "^8.20.0",
"prettier": "^2.7.1",
"rollup-plugin-typescript2": "0.32.1",
"tsup": "^6.1.3",
"typescript": "^4.7.4",
"unbuild": "^0.7.4",
"vitest": "^0.18.1"
},
"engines": {
Expand Down
3 changes: 3 additions & 0 deletions packages/collection/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig();
10 changes: 6 additions & 4 deletions packages/collection/package.json
Expand Up @@ -4,7 +4,7 @@
"description": "Utility data structure used in discord.js",
"scripts": {
"test": "vitest run",
"build": "tsup",
"build": "unbuild",
"lint": "prettier --check . && eslint src __tests__ --ext mjs,js,ts",
"format": "prettier --write . && eslint src __tests__ --ext mjs,js,ts --fix",
"fmt": "yarn format",
Expand All @@ -13,12 +13,12 @@
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'",
"release": "cliff-jumper"
},
"main": "./dist/index.js",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
},
"directories": {
Expand Down Expand Up @@ -54,11 +54,13 @@
"@favware/cliff-jumper": "^1.8.5",
"@microsoft/api-extractor": "^7.28.4",
"@types/node": "^16.11.45",
"c8": "^7.11.3",
"c8": "^7.12.0",
"eslint": "^8.20.0",
"prettier": "^2.7.1",
"rollup-plugin-typescript2": "0.32.1",
"tsup": "^6.1.3",
"typescript": "^4.7.4",
"unbuild": "^0.7.4",
"vitest": "^0.18.1"
},
"engines": {
Expand Down
3 changes: 3 additions & 0 deletions packages/docgen/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig({ minify: true, externals: ['package.cjs', 'package.mjs'] });
16 changes: 5 additions & 11 deletions packages/docgen/package.json
Expand Up @@ -3,23 +3,15 @@
"version": "0.12.0",
"description": "The docs.json generator for discord.js and its related projects",
"scripts": {
"build": "tsup",
"build": "unbuild",
"lint": "prettier --check . && eslint src --ext mjs,js,ts",
"format": "prettier --write . && eslint src --ext mjs,js,ts --fix",
"fmt": "yarn format",
"prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/docgen/*'",
"release": "cliff-jumper"
},
"bin": "./dist/index.js",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"bin": "./dist/index.cjs",
"directories": {
"lib": "src"
},
Expand Down Expand Up @@ -62,8 +54,10 @@
"@types/node": "^16.11.45",
"eslint": "^8.20.0",
"prettier": "^2.7.1",
"rollup-plugin-typescript2": "0.32.1",
"tsup": "^6.1.3",
"typescript": "^4.7.4"
"typescript": "^4.7.4",
"unbuild": "^0.7.4"
},
"engines": {
"node": ">=16.9.0"
Expand Down
3 changes: 3 additions & 0 deletions packages/proxy-container/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig({ emitCJS: false, cjsBridge: false });
8 changes: 5 additions & 3 deletions packages/proxy-container/package.json
Expand Up @@ -3,14 +3,14 @@
"version": "0.1.0",
"description": "Lightweight HTTP proxy for Discord's API, brought to you as a container 📦",
"scripts": {
"build": "tsup",
"build": "unbuild",
"lint": "prettier --check . && eslint src --ext mjs,js,ts",
"format": "prettier --write . && eslint src --ext mjs,js,ts --fix",
"fmt": "yarn format",
"prepack": "yarn build && yarn lint",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy-container/*'"
},
"main": "./dist/index.js",
"main": "./dist/index.mjs",
"type": "module",
"directories": {
"lib": "src"
Expand Down Expand Up @@ -52,8 +52,10 @@
"@types/node": "^16.11.45",
"eslint": "^8.20.0",
"prettier": "^2.7.1",
"rollup-plugin-typescript2": "0.32.1",
"tsup": "^6.1.3",
"typescript": "^4.7.4"
"typescript": "^4.7.4",
"unbuild": "^0.7.4"
},
"engines": {
"node": ">=16.9.0"
Expand Down
3 changes: 3 additions & 0 deletions packages/proxy/build.config.ts
@@ -0,0 +1,3 @@
import { createUnbuildConfig } from '../../build.config';

export default createUnbuildConfig();

1 comment on commit 3b0197b

@vercel
Copy link

@vercel vercel bot commented on 3b0197b Jul 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.