Skip to content

Commit 76ddbd1

Browse files
chore: migrate from CJS to ESM (#12)
* chore: migrate from CJS to ESM * chore: change from `dist/test-helpers` to `test-helpers/dist` * fix: use `bin.ts` instead of `index.ts` * fix: replace `__dirname` with `import.meta.url` * chore: bump `gradient-string` and remove leftovers * fix: remove dependency check rule * fix: migrate from `esbuild` to `tsc` * fix: adapt `test-helpers` package for ESM * refactor: fix template path * fix: set `NodeNext` for `moduleResolution` and `module` --------- Co-authored-by: Maciej Jastrzębski <[email protected]>
1 parent 1a2b63f commit 76ddbd1

19 files changed

+70
-61
lines changed

eslint.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const nx = require('@nx/eslint-plugin');
1+
import nx from '@nx/eslint-plugin';
22

3-
module.exports = [
3+
export default [
44
...nx.configs['flat/base'],
55
...nx.configs['flat/typescript'],
66
...nx.configs['flat/javascript'],

nx.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,19 @@
1414
"@nx/js:tsc": {
1515
"cache": true,
1616
"dependsOn": ["^build"],
17-
"inputs": ["default", "^default"]
17+
"inputs": ["default", "^default"],
18+
"options": {
19+
"outputPath": "{projectRoot}/dist",
20+
"main": "{projectRoot}/src/index.ts",
21+
"tsConfig": "{projectRoot}/tsconfig.lib.json",
22+
"assets": ["packages/{projectRoot}/*.md"],
23+
"buildableProjectDepsInPackageJsonType": "dependencies",
24+
"generateExportsField": true,
25+
"compilerOptions": {
26+
"module": "NodeNext",
27+
"outDir": "packages/{projectRoot}/dist"
28+
}
29+
}
1830
}
1931
},
2032
"release": {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"name": "rnef",
33
"version": "0.0.0",
44
"license": "MIT",
5+
"type": "module",
56
"scripts": {
6-
"build": "nx build create-app",
7+
"build": "nx run-many -t build",
78
"test": "nx run-many --target=test --watch=false",
89
"lint": "nx run-many --target=lint"
910
},
Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
1-
const baseConfig = require('../../eslint.config.js');
1+
import baseConfig from '../../eslint.config.js';
2+
import jsoncParser from 'jsonc-eslint-parser';
23

3-
module.exports = [
4+
export default [
45
...baseConfig,
56
{
67
files: ['**/*.json'],
7-
rules: {
8-
'@nx/dependency-checks': [
9-
'error',
10-
{
11-
ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'],
12-
},
13-
],
14-
},
158
languageOptions: {
16-
parser: require('jsonc-eslint-parser'),
9+
parser: jsoncParser,
1710
},
1811
},
1912
];

packages/create-app/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"name": "@callstack/create-rnef-app",
33
"version": "0.0.1",
4-
"type": "commonjs",
4+
"type": "module",
55
"main": "./src/index.js",
66
"typings": "./src/index.d.ts",
77
"bin": {
88
"create-rnef-app": "./src/bin.js"
99
},
1010
"dependencies": {
1111
"@clack/prompts": "^0.7.0",
12-
"gradient-string": "^2.0.2",
12+
"gradient-string": "^3.0.0",
1313
"minimist": "^1.2.8",
1414
"tslib": "^2.3.0"
1515
},

packages/create-app/project.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,10 @@
1515
"targets": {
1616
"build": {
1717
"executor": "@nx/js:tsc",
18-
"outputs": ["{options.outputPath}"],
1918
"options": {
2019
"outputPath": "packages/create-app/dist",
21-
"main": "packages/create-app/src/index.ts",
22-
"tsConfig": "packages/create-app/tsconfig.lib.json",
23-
"assets": ["packages/create-app/*.md"]
20+
"main": "packages/create-app/src/bin.ts",
21+
"tsConfig": "packages/create-app/tsconfig.lib.json"
2422
}
2523
},
2624
"lint": {

packages/create-app/src/bin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
#!/usr/bin/env node
2-
export * from './lib/create-app';
2+
export * from './lib/create-app.js';

packages/create-app/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from './lib/create-app';
1+
export * from './lib/create-app.js';

packages/create-app/src/lib/create-app.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'node:fs';
2-
import path from 'node:path';
3-
import editTemplate from './edit-template';
4-
import { parsePackageInfo } from './parsers';
2+
import path, { dirname } from 'node:path';
3+
import editTemplate from './edit-template.js';
4+
import { parsePackageInfo } from './parsers.js';
55
import {
66
cancelAndExit,
77
printHelpMessage,
@@ -11,10 +11,11 @@ import {
1111
printWelcomeMessage,
1212
printByeMessage,
1313
promptTemplate,
14-
} from './prompts';
15-
import { copyDir, isEmptyDir, removeDir, resolveAbsolutePath } from './fs';
16-
import { printLogo } from './logo';
17-
import { parseCliOptions } from './parse-cli-options';
14+
} from './prompts.js';
15+
import { copyDir, isEmptyDir, removeDir, resolveAbsolutePath } from './fs.js';
16+
import { printLogo } from './logo.js';
17+
import { parseCliOptions } from './parse-cli-options.js';
18+
import { fileURLToPath } from 'node:url';
1819

1920
const TEMPLATES = ['default'];
2021

@@ -53,6 +54,9 @@ async function create() {
5354
removeDir(absoluteTargetDir);
5455

5556
const templateName = options.template ?? (await promptTemplate(TEMPLATES));
57+
58+
const __dirname = dirname(fileURLToPath(import.meta.url));
59+
5660
const srcDir = path.join(
5761
__dirname,
5862
// Workaround for getting the template from within the monorepo

packages/create-app/src/lib/prompts.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import {
88
text,
99
} from '@clack/prompts';
1010
import fs from 'node:fs';
11-
import path from 'node:path';
12-
import { parsePackageManagerFromUserAgent } from './parsers';
13-
import { validateProjectName } from './validate-project-name';
11+
import { dirname, join } from 'node:path';
12+
import { parsePackageManagerFromUserAgent } from './parsers.js';
13+
import { validateProjectName } from './validate-project-name.js';
14+
import { fileURLToPath } from 'node:url';
1415

1516
export function printHelpMessage(templates: string[]) {
1617
console.log(`
@@ -30,7 +31,9 @@ export function printHelpMessage(templates: string[]) {
3031
}
3132

3233
export function printVersionMessage() {
33-
const packageJsonPath = path.join(__dirname, '..', '..', 'package.json');
34+
const __dirname = dirname(fileURLToPath(import.meta.url));
35+
36+
const packageJsonPath = join(__dirname, '..', '..', 'package.json');
3437
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
3538
console.log(`${packageJson.version}`);
3639
}

0 commit comments

Comments
 (0)