Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
fi3ework committed Oct 15, 2024
1 parent 00ac75b commit 76eb4f0
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 93 deletions.
45 changes: 6 additions & 39 deletions packages/core/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -542,50 +542,17 @@ const composeFormatConfig = (format: Format): RsbuildConfig => {
}
};

const resolveShims = (shims?: Shims) => {
const resolvedShims = {
const resolveShims = (shims?: Shims): ResolvedShims => {
return {
cjs: {
'import.meta.url': true,
'import.meta.url': shims?.cjs?.['import.meta.url'] ?? true,
},
esm: {
__filename: true,
__dirname: true,
require: false,
__filename: shims?.esm?.__filename ?? false,
__dirname: shims?.esm?.__dirname ?? false,
require: shims?.esm?.require ?? false,
},
};

if (!shims) {
return resolvedShims;
}

if (shims.cjs) {
if (typeof shims.cjs === 'boolean') {
if (shims.cjs === true) {
resolvedShims.cjs['import.meta.url'] = true;
} else {
resolvedShims.cjs['import.meta.url'] = false;
}
} else {
resolvedShims.cjs['import.meta.url'] =
shims.cjs['import.meta.url'] ?? false;
}
}

if (shims.esm) {
if (typeof shims.esm === 'boolean') {
if (shims.esm === true) {
resolvedShims.esm.__filename = true;
resolvedShims.esm.__dirname = true;
resolvedShims.esm.require = true;
}
} else {
resolvedShims.esm.__filename = shims.esm.__filename ?? false;
resolvedShims.esm.__dirname = shims.esm.__dirname ?? false;
resolvedShims.esm.require = shims.esm.require ?? false;
}
}

return resolvedShims;
};

const composeShimsConfig = (
Expand Down
20 changes: 8 additions & 12 deletions packages/core/src/types/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,14 @@ export type BannerAndFooter = {
};

export type Shims = {
cjs?:
| boolean
| {
'import.meta.url'?: boolean;
};
esm?:
| boolean
| {
__filename?: boolean;
__dirname?: boolean;
require?: boolean;
};
cjs?: {
'import.meta.url'?: boolean;
};
esm?: {
__filename?: boolean;
__dirname?: boolean;
require?: boolean;
};
};

export type ResolvedShims = {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/tests/__snapshots__/config.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config 1
},
},
"node": {
"__dirname": "node-module",
"__filename": "node-module",
"__dirname": false,
"__filename": false,
},
"optimization": {
"concatenateModules": true,
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/shims/cjs/rslib.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export default defineConfig({
generateBundleEsmConfig(),
generateBundleCjsConfig({
shims: {
cjs: true,
cjs: { 'import.meta.url': true },
},
}),
],
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/shims/esm/rslib.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { generateBundleEsmConfig } from 'test-helper';
export default defineConfig({
lib: [
generateBundleEsmConfig({
shims: { esm: true },
shims: { esm: { __dirname: true, __filename: true } },
source: {
entry: {
index: './src/index.ts',
Expand All @@ -17,7 +17,7 @@ export default defineConfig({
},
}),
generateBundleEsmConfig({
shims: { esm: true },
shims: { esm: { __dirname: true, __filename: true } },
syntax: 'esnext',
source: {
entry: {
Expand All @@ -31,7 +31,7 @@ export default defineConfig({
},
}),
generateBundleEsmConfig({
shims: { esm: true },
shims: { esm: { __dirname: true, __filename: true } },
syntax: 'esnext',
source: {
entry: {
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/shims/esm/rslibShimsDisabled.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import config from './rslib.config';

export default defineConfig({
...config,
lib: [config.lib[2]!].map((libConfig) => {
lib: [config.lib[0]!, config.lib[2]!].map((libConfig) => {
libConfig.output!.distPath!.root =
libConfig.output!.distPath!.root!.replace(
'./dist/enabled',
Expand Down
5 changes: 4 additions & 1 deletion tests/integration/shims/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,11 @@ describe('ESM shims disabled', async () => {
fixturePath,
configPath: './rslibShimsDisabled.config.ts',
});

expect(entries.esm0).not.toContain('fileURLToPath');

const context = vm.createContext({});
const module = new vm.SourceTextModule(entries.esm, {
const module = new vm.SourceTextModule(entries.esm1!, {
context,
});

Expand Down
60 changes: 26 additions & 34 deletions website/docs/en/config/lib/shims.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,39 @@

- **Type:**

```ts
type Shims = {
cjs?:
| boolean
| {
'import.meta.url'?: boolean;
};
esm?:
| boolean
| {
__filename?: boolean;
__dirname?: boolean;
require?: boolean;
};
};
```
```ts
type Shims = {
cjs?: {
'import.meta.url'?: boolean;
};
esm?: {
__filename?: boolean;
__dirname?: boolean;
require?: boolean;
};
};
```

- **Default:**

```js
{
cjs: {
'import.meta.url': true,
},
esm: {
__filename: true,
__dirname: true,
require: false,
},
}
```
```js
{
cjs: {
'import.meta.url': true,
},
esm: {
__filename: false,
__dirname: false,
require: false,
},
}
```

Used to configure the shims for CommonJS and ESM output.

## shims.cjs

- set to `true` to enable all shims for CommonJS output.
- set to `false` to disable all shims for CommonJS output.
- set the fields to `true` to enable the corresponding shims for CommonJS output.
Set the fields to `true` to enable the corresponding shims for CommonJS output.

### shims.cjs['import.meta.url']

Expand Down Expand Up @@ -80,9 +74,7 @@ Options:

## shims.esm

- set to `true` to enable all shims for ESM output.
- set to `false` to disable all shims for ESM output.
- set the fields to `true` to enable the corresponding shims for ESM output.
Set the fields to `true` to enable the corresponding shims for ESM output.

### shims.esm.\_\_filename

Expand Down

0 comments on commit 76eb4f0

Please sign in to comment.