Skip to content

Commit 6e00bd0

Browse files
committed
Migrate from CommonJS -> ESM
1 parent fcb6f73 commit 6e00bd0

36 files changed

+223
-212
lines changed

.gitignore

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ npm-debug.log
1111
node_modules
1212
*.js
1313
*.map
14-
dist/
15-
dist_tests/
14+
dist-cjs/
15+
dist-esm/
1616
yarn-error.log

.npmignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ node_modules
77
*.map
88
example
99
test
10-
dist/test
10+
dist-esm/test
1111
circle.yml
1212
ARCHITECTURE.md
1313
CONTRIBUTING.md

.vscode/launch.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"type": "node",
66
"request": "launch",
77
"name": "Launch Program",
8-
"program": "${workspaceRoot}/node_modules/.bin/ava ./dist/test/test.js",
8+
"program": "${workspaceRoot}/node_modules/.bin/ava ./dist-esm/test/test.js",
99
"cwd": "${workspaceRoot}"
1010
},
1111
{

package-lock.json

+22-36
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+15-11
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@
22
"name": "json-schema-to-typescript",
33
"version": "14.0.5",
44
"description": "compile json schema to typescript typings",
5-
"main": "dist/src/index.js",
5+
"main": "dist-cjs/src/index.js",
6+
"exports": {
7+
"require": "./dist-cjs/src/index.js",
8+
"import": "./dist-esm/src/index.js"
9+
},
610
"bin": {
7-
"json2ts": "dist/src/cli.js"
11+
"json2ts": "dist-esm/src/cli.js"
812
},
9-
"typings": "dist/src/index.d.ts",
13+
"type": "module",
14+
"typings": "dist-esm/src/index.d.ts",
1015
"engines": {
1116
"node": ">=16.0.0"
1217
},
1318
"scripts": {
1419
"build": "npm run lint && npm run clean && npm run build:browser && npm run build:server",
15-
"build:browser": "browserify src/index.ts -s jstt -p tsify > dist/bundle.js",
16-
"build:server": "tsc -d",
17-
"clean": "shx rm -rf dist && mkdir dist",
20+
"build:browser": "browserify src/index.ts -s jstt -p tsify > dist-esm/bundle.js",
21+
"build:server": "tsc -p ./tsconfig.cjs.json -d && tsc -p ./tsconfig.esm.json -d",
22+
"clean": "shx rm -rf dist-cjs && shx rm -rf dist-esm",
1823
"format": "prettier \"{src,test}/*.ts\" --write",
1924
"format-check": "prettier \"{src,test}/*.ts\" --check",
2025
"lint": "eslint src/*.ts test/*.ts",
@@ -23,7 +28,7 @@
2328
"stresstest": "seq 1 10 | xargs -I{} npm test",
2429
"prepublishOnly": "npm test",
2530
"pre-test": "npm run clean && npm run format-check && npm run build:server",
26-
"watch": "tsc -w",
31+
"watch": "tsc -p ./tsconfig.esm.json -w",
2732
"watch:test": "ava -w"
2833
},
2934
"repository": {
@@ -50,15 +55,14 @@
5055
"dependencies": {
5156
"@apidevtools/json-schema-ref-parser": "^11.5.5",
5257
"@types/json-schema": "^7.0.15",
53-
"@types/lodash": "^4.17.0",
58+
"@types/lodash-es": "^4.17.12",
5459
"cli-color": "^2.0.4",
5560
"glob": "^10.3.12",
5661
"is-glob": "^4.0.3",
5762
"js-yaml": "^4.1.0",
58-
"lodash": "^4.17.21",
63+
"lodash-es": "^4.17.21",
5964
"minimist": "^1.2.8",
6065
"mkdirp": "^3.0.1",
61-
"mz": "^2.7.0",
6266
"node-fetch": "^3.3.2",
6367
"prettier": "^3.2.5"
6468
},
@@ -87,7 +91,7 @@
8791
},
8892
"ava": {
8993
"files": [
90-
"./dist/test/test.js"
94+
"./dist-esm/test/test.js"
9195
],
9296
"snapshotDir": "./test/__snapshots__"
9397
},

src/cli.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#!/usr/bin/env node
22

33
import minimist from 'minimist'
4-
import {readFile, writeFile, existsSync, lstatSync, readdirSync} from 'mz/fs'
4+
import {existsSync, readdirSync, readFileSync, lstatSync, writeFileSync} from 'fs'
55
import * as mkdirp from 'mkdirp'
66
import {glob} from 'glob'
77
import isGlob from 'is-glob'
88
import {join, resolve, dirname} from 'path'
9-
import {compile, DEFAULT_OPTIONS, Options} from './index'
10-
import {pathTransform, error, parseFileAsJSONSchema, justName} from './utils'
9+
import {compile, DEFAULT_OPTIONS, Options} from './index.js'
10+
import {pathTransform, error, parseFileAsJSONSchema, justName} from './utils.js'
1111

1212
main(
1313
minimist(process.argv.slice(2), {
@@ -114,14 +114,14 @@ async function processDir(argIn: string, argOut: string | undefined, argv: Parti
114114
)
115115
}
116116

117-
async function outputResult(result: string, outputPath: string | undefined): Promise<void> {
117+
function outputResult(result: string, outputPath: string | undefined): void {
118118
if (!outputPath) {
119119
process.stdout.write(result)
120120
} else {
121121
if (!isDir(dirname(outputPath))) {
122122
mkdirp.sync(dirname(outputPath))
123123
}
124-
return await writeFile(outputPath, result)
124+
return writeFileSync(outputPath, result)
125125
}
126126
}
127127

@@ -150,18 +150,18 @@ async function readInput(argIn?: string): Promise<{filename: string | null; cont
150150
}
151151
return {
152152
filename: argIn,
153-
contents: await readFile(resolve(process.cwd(), argIn), 'utf-8'),
153+
contents: readFileSync(resolve(process.cwd(), argIn), 'utf-8'),
154154
}
155155
}
156156

157157
async function readStream(stream: NodeJS.ReadStream): Promise<string> {
158-
const chunks = []
158+
const chunks: Uint8Array[] = []
159159
for await (const chunk of stream) chunks.push(chunk)
160160
return Buffer.concat(chunks).toString('utf8')
161161
}
162162

163163
function printHelp() {
164-
const pkg = require('../../package.json')
164+
const pkg = JSON.parse(readFileSync('../../package.json', 'utf8'))
165165

166166
process.stdout.write(
167167
`

src/formatter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {format as prettify} from 'prettier'
2-
import {Options} from './'
2+
import {Options} from './index.js'
33

44
export async function format(code: string, options: Options): Promise<string> {
55
if (!options.format) {

src/generator.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {memoize, omit} from 'lodash'
2-
import {DEFAULT_OPTIONS, Options} from './index'
1+
import {memoize, omit} from 'lodash-es'
2+
import {DEFAULT_OPTIONS, Options} from './index.js'
33
import {
44
AST,
55
ASTWithStandaloneName,
@@ -13,8 +13,8 @@ import {
1313
TNamedInterface,
1414
TUnion,
1515
T_UNKNOWN,
16-
} from './types/AST'
17-
import {log, toSafeString} from './utils'
16+
} from './types/AST.js'
17+
import {log, toSafeString} from './utils.js'
1818

1919
export function generate(ast: AST, options = DEFAULT_OPTIONS): string {
2020
return (

src/index.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import {readFileSync} from 'fs'
22
import {JSONSchema4} from 'json-schema'
33
import {ParserOptions as $RefOptions} from '@apidevtools/json-schema-ref-parser'
4-
import {cloneDeep, endsWith, merge} from 'lodash'
4+
import {cloneDeep, endsWith, merge} from 'lodash-es'
55
import {dirname} from 'path'
66
import {Options as PrettierOptions} from 'prettier'
7-
import {format} from './formatter'
8-
import {generate} from './generator'
9-
import {normalize} from './normalizer'
10-
import {optimize} from './optimizer'
11-
import {parse} from './parser'
12-
import {dereference} from './resolver'
13-
import {error, stripExtension, Try, log, parseFileAsJSONSchema} from './utils'
14-
import {validate} from './validator'
7+
import {format} from './formatter.js'
8+
import {generate} from './generator.js'
9+
import {normalize} from './normalizer.js'
10+
import {optimize} from './optimizer.js'
11+
import {parse} from './parser.js'
12+
import {dereference} from './resolver.js'
13+
import {error, stripExtension, Try, log, parseFileAsJSONSchema} from './utils.js'
14+
import {validate} from './validator.js'
1515
import {isDeepStrictEqual} from 'util'
16-
import {link} from './linker'
17-
import {validateOptions} from './optionValidator'
18-
import {JSONSchema as LinkedJSONSchema} from './types/JSONSchema'
16+
import {link} from './linker.js'
17+
import {validateOptions} from './optionValidator.js'
18+
import {JSONSchema as LinkedJSONSchema} from './types/JSONSchema.js'
1919

20-
export {EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema} from './types/JSONSchema'
20+
export {EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema} from './types/JSONSchema.js'
2121

2222
export interface Options {
2323
/**

src/linker.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {JSONSchema, Parent, LinkedJSONSchema} from './types/JSONSchema'
2-
import {isPlainObject} from 'lodash'
1+
import {JSONSchema, Parent, LinkedJSONSchema} from './types/JSONSchema.js'
2+
import {isPlainObject} from 'lodash-es'
33
import {JSONSchema4Type} from 'json-schema'
44

55
/**

src/normalizer.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import {JSONSchemaTypeName, LinkedJSONSchema, NormalizedJSONSchema, Parent} from './types/JSONSchema'
2-
import {appendToDescription, escapeBlockComment, isSchemaLike, justName, toSafeString, traverse} from './utils'
3-
import {Options} from './'
4-
import {DereferencedPaths} from './resolver'
1+
import {JSONSchemaTypeName, LinkedJSONSchema, NormalizedJSONSchema, Parent} from './types/JSONSchema.js'
2+
import {appendToDescription, escapeBlockComment, isSchemaLike, justName, toSafeString, traverse} from './utils.js'
3+
import {Options} from './index.js'
4+
import {DereferencedPaths} from './resolver.js'
55
import {isDeepStrictEqual} from 'util'
66

77
type Rule = (

src/optimizer.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {uniqBy} from 'lodash'
2-
import {Options} from '.'
3-
import {generateType} from './generator'
4-
import {AST, T_ANY, T_UNKNOWN} from './types/AST'
5-
import {log} from './utils'
1+
import {uniqBy} from 'lodash-es'
2+
import {Options} from './index.js'
3+
import {generateType} from './generator.js'
4+
import {AST, T_ANY, T_UNKNOWN} from './types/AST.js'
5+
import {log} from './utils.js'
66

77
export function optimize(ast: AST, options: Options, processed = new Set<AST>()): AST {
88
if (processed.has(ast)) {

src/optionValidator.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Options} from '.'
1+
import {Options} from './index.js'
22

33
export function validateOptions({maxItems}: Partial<Options>): void {
44
if (maxItems !== undefined && maxItems < -1) {

0 commit comments

Comments
 (0)