Skip to content

Commit

Permalink
fix(js): update generated .swcrc file to align with @swc/[email protected] (#…
Browse files Browse the repository at this point in the history
…19214)

Co-authored-by: Jason Jean <[email protected]>
  • Loading branch information
jaysoo and FrozenPandaz authored Sep 22, 2023
1 parent 75890f5 commit 903c4fe
Show file tree
Hide file tree
Showing 13 changed files with 428 additions and 307 deletions.
3 changes: 1 addition & 2 deletions e2e/js/src/js-executor-node.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ describe('js:node executor', () => {
expect(output).toContain('This is an error');
}, 240_000);

// TODO: Re-enable this when it is passing
xit('should execute library compiled with rollup', async () => {
it('should execute library compiled with rollup', async () => {
const rollupLib = uniq('rolluplib');

runCLI(
Expand Down
14 changes: 3 additions & 11 deletions e2e/js/src/js-executor-swc.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import { satisfies } from 'semver';
import { execSync } from 'child_process';
import {
checkFilesDoNotExist,
checkFilesExist,
cleanupProject,
detectPackageManager,
newProject,
packageManagerLockFile,
readJson,
runCLI,
runCLIAsync,
tmpProjPath,
uniq,
updateFile,
Expand Down Expand Up @@ -65,14 +62,9 @@ describe('js:swc executor', () => {
packageManagerLockFile[detectPackageManager(tmpProjPath())]
}`
);
expect(
satisfies(
readJson(`dist/libs/${lib}/package.json`).peerDependencies[
'@swc/helpers'
],
readJson(`package.json`).dependencies['@swc/helpers']
)
).toBeTruthy();
expect(readJson(`dist/libs/${lib}/package.json`)).toHaveProperty(
'peerDependencies.@swc/helpers'
);

// Legacy behavior (updateBuildableProjectDepsInPackageJson): don't add @swc/helpers if externalHelpers is false
// TODO(v17): Remove this test
Expand Down
6 changes: 2 additions & 4 deletions e2e/js/src/js-packaging.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ describe('packaging libs', () => {

afterEach(() => cleanupProject());

// TODO Re-enable this when it is passing
xit('should bundle libs using esbuild, vite, rollup and be used in CJS/ESM projects', () => {
it('should bundle libs using esbuild, vite, rollup and be used in CJS/ESM projects', () => {
const esbuildLib = uniq('esbuildlib');
const viteLib = uniq('vitelib');
const rollupLib = uniq('rolluplib');
Expand Down Expand Up @@ -130,8 +129,7 @@ describe('packaging libs', () => {
expect(output).toContain('rollup default');
}, 500_000);

// TODO Re-enable this when it is passing
xit('should build with tsc, swc and be used in CJS/ESM projects', async () => {
it('should build with tsc, swc and be used in CJS/ESM projects', async () => {
const tscLib = uniq('tsclib');
const swcLib = uniq('swclib');
const tscEsmLib = uniq('tscesmlib');
Expand Down
3 changes: 1 addition & 2 deletions e2e/rollup/src/rollup.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,7 @@ describe('Rollup Plugin', () => {
});
});

// TODO: Re-enable this when it is passing
xit('should be able to build libs generated with @nx/js:lib --bundler rollup', () => {
it('should be able to build libs generated with @nx/js:lib --bundler rollup', () => {
const jsLib = uniq('jslib');
runCLI(`generate @nx/js:lib ${jsLib} --bundler rollup`);
expect(() => runCLI(`build ${jsLib}`)).not.toThrow();
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@
"@supabase/supabase-js": "^2.26.0",
"@svgr/rollup": "^8.0.1",
"@svgr/webpack": "^8.0.1",
"@swc-node/register": "^1.4.2",
"@swc-node/register": "^1.6.7",
"@swc/cli": "0.1.62",
"@swc/core": "^1.3.51",
"@swc/core": "^1.3.85",
"@swc/jest": "^0.2.20",
"@testing-library/react": "13.4.0",
"@types/cytoscape": "^3.18.2",
Expand Down
19 changes: 19 additions & 0 deletions packages/js/migrations.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
"version": "16.6.0-beta.0",
"description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.",
"factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps"
},
"16-8-2-update-swcrc": {
"cli": "nx",
"version": "16.8.2-beta.0",
"description": "Remove invalid options (strict, noInterop) for ES6 type modules.",
"factory": "./src/migrations/update-16-8-2/update-swcrc"
}
},
"packageJsonUpdates": {
Expand Down Expand Up @@ -98,6 +104,19 @@
"version": "~5.1.3"
}
}
},
"16.8.2": {
"version": "16.8.2-beta.0",
"packages": {
"@swc/core": {
"version": "~1.3.85",
"alwaysAddToPackageJson": false
},
"@swc/helpers": {
"version": "~0.5.2",
"alwaysAddToPackageJson": false
}
}
}
}
}
82 changes: 82 additions & 0 deletions packages/js/src/migrations/update-16-8-2/update-swcrc.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { addProjectConfiguration, readJson, Tree, writeJson } from '@nx/devkit';
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import update from './update-swcrc';

describe('Migration: update .swcrc', () => {
let tree: Tree;

beforeEach(async () => {
tree = createTreeWithEmptyWorkspace();
});

it('should remove invalid options for ES6 modules', async () => {
addProjectConfiguration(tree, 'pkg', {
root: 'pkg',
});
writeJson(tree, 'pkg/.swcrc', {
module: {
type: 'es6',
strict: true,
noInterop: true,
},
});

await update(tree);

expect(readJson(tree, 'pkg/.swcrc')).toEqual({
module: {
type: 'es6',
},
});
});

it('should keep options for CommonJS modules', async () => {
addProjectConfiguration(tree, 'pkg', {
root: 'pkg',
});
writeJson(tree, 'pkg/.swcrc', {
module: {
type: 'commonjs',
strict: true,
noInterop: true,
},
});

await update(tree);

expect(readJson(tree, 'pkg/.swcrc')).toEqual({
module: {
type: 'commonjs',
strict: true,
noInterop: true,
},
});
});

it('should ignore projects without module options in .swcrc', async () => {
addProjectConfiguration(tree, 'pkg', {
root: 'pkg',
});
writeJson(tree, 'pkg/.swcrc', {
jsc: {
target: 'es2017',
},
});

await expect(update(tree)).resolves.not.toThrow();

expect(readJson(tree, 'pkg/.swcrc')).toEqual({
jsc: {
target: 'es2017',
},
});
});

it('should ignore projects without .swcrc', async () => {
addProjectConfiguration(tree, 'pkg', {
root: 'pkg',
});

await expect(update(tree)).resolves.not.toThrow();
});
});
30 changes: 30 additions & 0 deletions packages/js/src/migrations/update-16-8-2/update-swcrc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import {
formatFiles,
getProjects,
readJson,
Tree,
writeJson,
} from '@nx/devkit';
import { join } from 'path';

export default async function update(tree: Tree) {
const projects = getProjects(tree);

for (const config of projects.values()) {
const swcrcPath = join(config.root, '.swcrc');
if (!tree.exists(swcrcPath)) continue;
const json = readJson(tree, swcrcPath);
// No longer need strict or noInterop for es6 modules
// See: https://github.com/swc-project/swc/commit/7e8d72d
if (
json.module?.type === 'es6' &&
(json.module?.strict || json.module?.noInterop)
) {
delete json.module.noInterop;
delete json.module.strict;
writeJson(tree, swcrcPath, json);
}
}

await formatFiles(tree);
}
4 changes: 1 addition & 3 deletions packages/js/src/utils/swc/add-swc-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ const swcOptionsString = (type: 'commonjs' | 'es6' = 'commonjs') => `{
"loose": true
},
"module": {
"type": "${type}",
"strict": true,
"noInterop": true
"type": "${type}"
},
"sourceMaps": true,
"exclude": ${JSON.stringify(defaultExclude)}
Expand Down
4 changes: 2 additions & 2 deletions packages/js/src/utils/versions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ export const nxVersion = require('../../package.json').version;
export const esbuildVersion = '^0.17.17';
export const prettierVersion = '^2.6.2';
export const swcCliVersion = '~0.1.62';
export const swcCoreVersion = '~1.3.51';
export const swcHelpersVersion = '~0.5.0';
export const swcCoreVersion = '~1.3.85';
export const swcHelpersVersion = '~0.5.2';
export const swcNodeVersion = '~1.4.2';
export const tsLibVersion = '^2.3.0';
export const typesNodeVersion = '18.7.1';
Expand Down
4 changes: 2 additions & 2 deletions packages/nx/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@
"node-machine-id": "1.1.12"
},
"peerDependencies": {
"@swc-node/register": "^1.4.2",
"@swc/core": "^1.2.173"
"@swc-node/register": "^1.6.7",
"@swc/core": "^1.3.85"
},
"peerDependenciesMeta": {
"@swc-node/register": {
Expand Down
Loading

1 comment on commit 903c4fe

@vercel
Copy link

@vercel vercel bot commented on 903c4fe Sep 22, 2023

Choose a reason for hiding this comment

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

Successfully deployed to the following URLs:

nx-dev – ./

nx-dev-git-master-nrwl.vercel.app
nx-dev-nrwl.vercel.app
nx.dev
nx-five.vercel.app

Please sign in to comment.