Skip to content

Commit

Permalink
Merge branch 'rollup:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
flyingbirdhub committed Dec 12, 2022
2 parents bf20931 + 7b62557 commit 2803147
Show file tree
Hide file tree
Showing 13 changed files with 362 additions and 45 deletions.
8 changes: 8 additions & 0 deletions packages/commonjs/CHANGELOG.md
@@ -1,5 +1,13 @@
# @rollup/plugin-commonjs ChangeLog

## v23.0.4

_2022-12-07_

### Bugfixes

- fix: declaration tag @default for ignoreTryCatch + fix some typos [#1370](https://github.com/rollup/plugins/pull/1370)

## v23.0.3

_2022-11-27_
Expand Down
2 changes: 1 addition & 1 deletion packages/commonjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@rollup/plugin-commonjs",
"version": "23.0.3",
"version": "23.0.4",
"publishConfig": {
"access": "public"
},
Expand Down
20 changes: 10 additions & 10 deletions packages/commonjs/types/index.d.ts
Expand Up @@ -109,17 +109,17 @@ interface RollupCommonJSOptions {
* they should be left unconverted as it requires an optional dependency
* that may or may not be installed beside the rolled up package.
* Due to the conversion of `require` to a static `import` - the call is
* hoisted to the top of the file, outside of the `try-catch` clause.
* hoisted to the top of the file, outside the `try-catch` clause.
*
* - `true`: All `require` calls inside a `try` will be left unconverted.
* - `true`: Default. All `require` calls inside a `try` will be left unconverted.
* - `false`: All `require` calls inside a `try` will be converted as if the
* `try-catch` clause is not there.
* - `remove`: Remove all `require` calls from inside any `try` block.
* - `string[]`: Pass an array containing the IDs to left unconverted.
* - `((id: string) => boolean|'remove')`: Pass a function that control
* - `((id: string) => boolean|'remove')`: Pass a function that controls
* individual IDs.
*
* @default false
* @default true
*/
ignoreTryCatch?:
| boolean
Expand All @@ -133,14 +133,14 @@ interface RollupCommonJSOptions {
* NodeJS where ES modules can only import a default export from a CommonJS
* dependency.
*
* If you set `esmExternals` to `true`, this plugins assumes that all
* If you set `esmExternals` to `true`, this plugin assumes that all
* external dependencies are ES modules and respect the
* `requireReturnsDefault` option. If that option is not set, they will be
* rendered as namespace imports.
*
* You can also supply an array of ids to be treated as ES modules, or a
* function that will be passed each external id to determine if it is an ES
* module.
* function that will be passed each external id to determine whether it is
* an ES module.
* @default false
*/
esmExternals?: boolean | ReadonlyArray<string> | ((id: string) => boolean);
Expand All @@ -158,7 +158,7 @@ interface RollupCommonJSOptions {
* import * as foo from 'foo';
* ```
*
* However there are some situations where this may not be desired.
* However, there are some situations where this may not be desired.
* For these situations, you can change Rollup's behaviour either globally or
* per module. To change it globally, set the `requireReturnsDefault` option
* to one of the following values:
Expand Down Expand Up @@ -208,7 +208,7 @@ interface RollupCommonJSOptions {
* Some modules contain dynamic `require` calls, or require modules that
* contain circular dependencies, which are not handled well by static
* imports. Including those modules as `dynamicRequireTargets` will simulate a
* CommonJS (NodeJS-like) environment for them with support for dynamic
* CommonJS (NodeJS-like) environment for them with support for dynamic
* dependencies. It also enables `strictRequires` for those modules.
*
* Note: In extreme cases, this feature may result in some paths being
Expand All @@ -222,7 +222,7 @@ interface RollupCommonJSOptions {
* To avoid long paths when using the `dynamicRequireTargets` option, you can use this option to specify a directory
* that is a common parent for all files that use dynamic require statements. Using a directory higher up such as `/`
* may lead to unnecessarily long paths in the generated code and may expose directory names on your machine like your
* home directory name. By default it uses the current working directory.
* home directory name. By default, it uses the current working directory.
*/
dynamicRequireRoot?: string;
}
Expand Down
8 changes: 8 additions & 0 deletions packages/terser/CHANGELOG.md
@@ -1,5 +1,13 @@
# @rollup/plugin-terser ChangeLog

## v0.2.0

_2022-12-05_

### Features

- feat: parallel execution [#1341](https://github.com/rollup/plugins/pull/1341)

## v0.1.0

_2022-10-27_
Expand Down
37 changes: 29 additions & 8 deletions packages/terser/README.md
Expand Up @@ -9,11 +9,11 @@

# @rollup/plugin-terser

🍣 A Rollup plugin to generate a minified output bundle.
🍣 A Rollup plugin to generate a minified bundle with terser.

## Requirements

This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v14.0.0+) and Rollup v1.20.0+.
This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v14.0.0+) and Rollup v2.0+.

## Install

Expand All @@ -27,7 +27,7 @@ npm install @rollup/plugin-terser --save-dev

Create a `rollup.config.js` [configuration file](https://www.rollupjs.org/guide/en/#configuration-files) and import the plugin:

```js
```typescript
import terser from '@rollup/plugin-terser';

export default {
Expand All @@ -47,13 +47,34 @@ Then call `rollup` either via the [CLI](https://www.rollupjs.org/guide/en/#comma
The plugin accepts a terser [Options](https://github.com/terser/terser#minify-options) object as input parameter,
to modify the default behaviour.

In addition to the `terser` options, it is also possible to provide the following options:

### `maxWorkers`

Type: `Number`<br>
Default: `undefined`

Instructs the plugin to use a specific amount of cpu threads.

```typescript
import terser from '@rollup/plugin-terser';

export default {
input: 'src/index.js',
output: {
dir: 'output',
format: 'cjs'
},
plugins: [
terser({
maxWorkers: 4
})
]
};
```

## Meta

[CONTRIBUTING](/.github/CONTRIBUTING.md)

[LICENSE (MIT)](/LICENSE)

## Credits

This package was originally developed by [https://github.com/TrySound](TrySound) but is not
maintained anymore.
5 changes: 4 additions & 1 deletion packages/terser/package.json
@@ -1,6 +1,6 @@
{
"name": "@rollup/plugin-terser",
"version": "0.1.0",
"version": "0.2.0",
"publishConfig": {
"access": "public"
},
Expand Down Expand Up @@ -61,9 +61,12 @@
}
},
"dependencies": {
"serialize-javascript": "^6.0.0",
"smob": "^0.0.6",
"terser": "^5.15.1"
},
"devDependencies": {
"@types/serialize-javascript": "^5.0.2",
"rollup": "^3.0.0-7",
"typescript": "^4.8.3"
},
Expand Down
27 changes: 5 additions & 22 deletions packages/terser/src/index.ts
@@ -1,25 +1,8 @@
import type { NormalizedOutputOptions, RenderedChunk } from 'rollup';
import type { MinifyOptions } from 'terser';
import { minify } from 'terser';
import { runWorker } from './worker';
import terser from './module';

export default function terser(options?: MinifyOptions) {
return {
name: 'terser',
runWorker();

async renderChunk(code: string, chunk: RenderedChunk, outputOptions: NormalizedOutputOptions) {
const defaultOptions: MinifyOptions = {
sourceMap: outputOptions.sourcemap === true || typeof outputOptions.sourcemap === 'string'
};
export * from './type';

if (outputOptions.format === 'es') {
defaultOptions.module = true;
}

if (outputOptions.format === 'cjs') {
defaultOptions.toplevel = true;
}

return minify(code, { ...defaultOptions, ...(options || {}) });
}
};
}
export default terser;
72 changes: 72 additions & 0 deletions packages/terser/src/module.ts
@@ -0,0 +1,72 @@
import type { NormalizedOutputOptions, RenderedChunk } from 'rollup';
import { hasOwnProperty, isObject, merge } from 'smob';

import type { Options } from './type';
import { WorkerPool } from './worker-pool';

export default function terser(options: Options = {}) {
const workerPool = new WorkerPool({
filePath: __filename,
maxWorkers: options.maxWorkers
});

return {
name: 'terser',

async renderChunk(code: string, chunk: RenderedChunk, outputOptions: NormalizedOutputOptions) {
const defaultOptions: Options = {
sourceMap: outputOptions.sourcemap === true || typeof outputOptions.sourcemap === 'string'
};

if (outputOptions.format === 'es') {
defaultOptions.module = true;
}

if (outputOptions.format === 'cjs') {
defaultOptions.toplevel = true;
}

try {
const { code: result, nameCache } = await workerPool.addAsync({
code,
options: merge({}, options || {}, defaultOptions)
});

if (options.nameCache && nameCache) {
let vars: Record<string, any> = {
props: {}
};

if (hasOwnProperty(options.nameCache, 'vars') && isObject(options.nameCache.vars)) {
vars = merge({}, options.nameCache.vars || {}, vars);
}

if (hasOwnProperty(nameCache, 'vars') && isObject(nameCache.vars)) {
vars = merge({}, nameCache.vars, vars);
}

// eslint-disable-next-line no-param-reassign
options.nameCache.vars = vars;

let props: Record<string, any> = {};

if (hasOwnProperty(options.nameCache, 'props') && isObject(options.nameCache.props)) {
// eslint-disable-next-line prefer-destructuring
props = options.nameCache.props;
}

if (hasOwnProperty(nameCache, 'props') && isObject(nameCache.props)) {
props = merge({}, nameCache.props, props);
}

// eslint-disable-next-line no-param-reassign
options.nameCache.props = props;
}

return result;
} catch (e) {
return Promise.reject(e);
}
}
};
}
33 changes: 33 additions & 0 deletions packages/terser/src/type.ts
@@ -0,0 +1,33 @@
import type { MinifyOptions } from 'terser';

export interface Options extends MinifyOptions {
nameCache?: Record<string, any>;
maxWorkers?: number;
}

export interface WorkerContext {
code: string;
options: Options;
}

export type WorkerCallback = (err: Error | null, output?: WorkerOutput) => void;

export interface WorkerContextSerialized {
code: string;
options: string;
}

export interface WorkerOutput {
code: string;
nameCache?: Options['nameCache'];
}

export interface WorkerPoolOptions {
filePath: string;
maxWorkers?: number;
}

export interface WorkerPoolTask {
context: WorkerContext;
cb: WorkerCallback;
}

0 comments on commit 2803147

Please sign in to comment.