json-schema-library
json-schema-library copied to clipboard
Doesn't work with native ESM modules
If I create a module:
package.json:
{
"type": "module",
"name": "20240613114707-1603",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"json-schema-library": "^9.3.5"
}
}
index.mjs:
import { Draft2019 } from "json-schema-library";
console.log(Draft2019);
And run it, then this module doesn't provide the expected exports:
➜ node index.mjs
file:///Users/tmcw/tmp/20240613114707-1603/index.mjs:1
import { Draft2019 } from "json-schema-library";
^^^^^^^^^
SyntaxError: Named export 'Draft2019' not found. The requested module 'json-schema-library' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from 'json-schema-library';
const { Draft2019 } = pkg;
at ModuleJob._instantiate (node:internal/modules/esm/module_job:132:21)
at async ModuleJob.run (node:internal/modules/esm/module_job:214:5)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:113:12)
Node.js v20.11.0
It looks like the ESM mode of using this module doesn't work - there isn't a type: module, or an exports: property in package.json.
It also looks like the modules that are getting generated by the tsconfig use imports that lack .js extensions, so the source won't be compatible with native ESM either.
Hi Tom,
- the readme refers to version 10, which is currently released as a pre-release version [email protected]
- installing the current latest version you have to reference the readme for version 9
In your case, either install [email protected]. Do this, if you need Draft-2019 support. Here you would be an early adapter, but overall this is the most compliant release yet.
Or start using Draft-07 with import { Draft7 } from "json-schema-library" as is documented here https://github.com/sagold/json-schema-library/tree/d2d6e6451ea3f3b8c056f497182fd805226a20a7
This is not self explanatory and I will add a clarification to the readme.
Sorry for the inconvenience, Sascha
Hi - I don't think that's the issue, installing 10.0.0-rc1 doesn't resolve the issue, and the issue is about ESM exports and compatibility - if I dial it back to just Draft
import { Draft } from "json-schema-library";
console.log(Draft);
This still produces the error with the given repro:
file:///Users/tmcw/tmp/20240613162355-25356/index.mjs:1
import { Draft } from "json-schema-library";
^^^^^
SyntaxError: Named export 'Draft' not found. The requested module 'json-schema-library' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from 'json-schema-library';
const { Draft } = pkg;
Note previous discussion on this topic https://github.com/sagold/json-schema-library/issues/51
Can you share a simple build-setup to reproduce your issue?
The top post is a complete setup for reproducing the issue - here's the same thing as a gist if you want something git-clonable.
With [email protected] an esm bundle is exporte. I can correctly import this library using node 22.21.0 although a type: "module" is not specified in the package.json.
If this still fails we need to follow: https://github.com/sagold/json-schema-library/pull/74 and change the code base to use proper esm module syntax.