Skip to content

Commit

Permalink
feat: support CJS and ESM (#601)
Browse files Browse the repository at this point in the history
  • Loading branch information
louis-bompart authored Jan 13, 2023
1 parent c12341e commit 0ea4769
Show file tree
Hide file tree
Showing 10 changed files with 119 additions and 17 deletions.
3 changes: 2 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ jest.setup.ts
jest.config.js
commitlint.config.js
.eslintrc.js
webpack.config.js
webpack.config.js
scripts
3 changes: 2 additions & 1 deletion jest.config.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const unmockedDependencies = ['query-string', 'decode-uri-component', 'split-on-first', 'filter-obj'];
const unmockedDependencies = ['query-string-esm', 'decode-uri-component', 'split-on-first', 'filter-obj'];

// /*
// * For a detailed explanation regarding each configuration property, visit:
Expand All @@ -19,6 +19,7 @@ export default {
preset: 'ts-jest/presets/default-esm',
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
'^#query-string': 'query-string-esm',
},
globals: {'ts-jest': {tsconfig: '<rootDir>/../tsconfig.test.json', useESM: true}},
transform: {
Expand Down
56 changes: 54 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 19 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@
"name": "@coveo/platform-client",
"version": "0.0.0-development",
"description": "",
"main": "dist/Entry.js",
"type": "module",
"types": "dist/definitions/Entry.d.ts",
"exports": {
".": {
"types": "./dist/types/Entry.d.ts",
"import": "./dist/esm/Entry.js",
"require": "./dist/cjs/Entry.js"
}
},
"types": "dist/types/Entry.d.ts",
"main": "dist/cjs/Entry.js",
"keywords": [
"coveo",
"api",
Expand All @@ -14,8 +21,8 @@
"web"
],
"scripts": {
"start": "tsc -p tsconfig.build.json --watch",
"build": "eslint \"src/**.*\" --ignore-pattern '**/*.spec.*' --color && tsc -p tsconfig.build.json",
"start": "tsc -p tsconfig.build.esm.json --watch",
"build": "eslint \"src/**.*\" --ignore-pattern '**/*.spec.*' --color && tsc -p tsconfig.build.cjs.json && tsc -p tsconfig.build.esm.json && node scripts/dualOutputCompat.js",
"test": "jest --clearCache && jest",
"test:changed": "jest --watch",
"test:watch": "jest --watchAll",
Expand Down Expand Up @@ -74,9 +81,16 @@
"path": "./node_modules/cz-conventional-changelog"
}
},
"imports": {
"#query-string": {
"import": "query-string-esm",
"require": "query-string-cjs"
}
},
"dependencies": {
"exponential-backoff": "^3.1.0",
"query-string": "^8.0.0"
"query-string-esm": "npm:query-string@^8.0.0",
"query-string-cjs": "npm:query-string@^7.0.0"
},
"publishConfig": {
"access": "public"
Expand Down
23 changes: 23 additions & 0 deletions scripts/dualOutputCompat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import {readFileSync, writeFileSync} from 'node:fs';

// Ensure NodeJS resolves dist/cjs/**/*.js as dist/cjs/**/*.cjs
writeFileSync(
'dist/cjs/package.json',
JSON.stringify({
type: 'commonjs',
})
);

// Ensure NodeJS resolves dist/esm/**/*.js as dist/esm/**/*.mjs
writeFileSync(
'dist/esm/package.json',
JSON.stringify({
type: 'module',
})
);

// Replace #query-string by the proper query-string version.
const cjsPath = 'dist/cjs/resources/Resource.js';
writeFileSync(cjsPath, readFileSync(cjsPath, 'utf-8').replaceAll(/#query-string/gm, 'query-string-cjs'));
const esmPath = 'dist/esm/resources/Resource.js';
writeFileSync(esmPath, readFileSync(esmPath, 'utf-8').replaceAll(/#query-string/gm, 'query-string-esm'));
3 changes: 1 addition & 2 deletions src/resources/Resource.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import queryString from 'query-string';

import API from '../APICore.js';
import queryString from '#query-string';

class Resource {
static baseUrl: string;
Expand Down
9 changes: 9 additions & 0 deletions tsconfig.build.cjs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"extends": "./tsconfig",
"include": ["src/*"],
"exclude": ["node_modules"],
"compilerOptions": {
"module": "CommonJS",
"outDir": "dist/cjs"
}
}
8 changes: 8 additions & 0 deletions tsconfig.build.esm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"extends": "./tsconfig",
"include": ["src/*"],
"exclude": ["node_modules"],
"compilerOptions": {
"outDir": "dist/esm"
}
}
5 changes: 0 additions & 5 deletions tsconfig.build.json

This file was deleted.

2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"sourceMap": true,
"declaration": true,
"target": "ESNext",
"declarationDir": "dist/definitions",
"declarationDir": "dist/types",
"lib": ["DOM", "ESNext"],
"moduleResolution": "Node16",
"importHelpers": true,
Expand Down

0 comments on commit 0ea4769

Please sign in to comment.