Skip to content

Commit

Permalink
chore: fully qualified imports for esm compatibility
Browse files Browse the repository at this point in the history
ESM requires fully qualified imports, but tsc can't do that when transpiling.

Add eslint rules to enforce esm-compliant source and fix existing code.

This makes it possible to use cardano-js-sdk in node.js with ESM.

Previously it was possible with --experimental-specifier-resolution=node,
but this option has now been removed from node.js
  • Loading branch information
mkazlauskas committed Jun 6, 2024
1 parent 9a7856a commit 0b8d7f5
Show file tree
Hide file tree
Showing 1,285 changed files with 15,657 additions and 5,578 deletions.
11 changes: 8 additions & 3 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@ module.exports = {
extends: [
'@atixlabs/eslint-config/configurations/node',
'plugin:@typescript-eslint/recommended',
'plugin:require-extensions/recommended',
'plugin:import/recommended',
'plugin:jsdoc/recommended'
],
parser: '@typescript-eslint/parser',
plugins: ['jsdoc', 'sort-keys-fix', 'sort-imports-es6-autofix', 'jest'],
plugins: ['jsdoc', 'sort-keys-fix', 'sort-imports-es6-autofix', 'jest', 'require-extensions'],
root: true,
rules: {
'@typescript-eslint/ban-types': 0,
// Those 2 would be nice, but requires ts parserServices which makes lint much slower
// '@typescript-eslint/consistent-type-exports': 'warn',
// '@typescript-eslint/consistent-type-imports': 'warn',
// covered by unicorn/prefer-module
'@typescript-eslint/explicit-module-boundary-types': 0,
'@typescript-eslint/no-non-null-assertion': 0,
Expand All @@ -26,8 +31,8 @@ module.exports = {
// typescript checks return types
camelcase: 0,
'consistent-return': 0,
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/test/**/*.ts'] }],
// eslint compains about TS enums hence disable here and enable @typescript-eslint/no-shadow
'import/no-unresolved': 0,
'jsdoc/multiline-blocks': ['error', { minimumLengthForMultiline: maxLineLength, noMultilineBlocks: true }],
'jsdoc/no-undefined-types': 0,
Expand All @@ -54,7 +59,7 @@ module.exports = {
'error',
{
paths: ['lodash'],
patterns: ['@cardano-sdk/*/src/*']
patterns: ['@cardano-sdk/*/src/*', 'lodash/*', '!lodash/*.js']
}
],
'no-shadow': 'off',
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,12 @@
"eslint": "^7.32.0",
"eslint-import-resolver-typescript": "^2.7.0",
"eslint-plugin-filenames": "^1.3.2",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^24.4.0",
"eslint-plugin-jsdoc": "^36.0.7",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-require-extensions": "^0.1.3",
"eslint-plugin-sonarjs": "^0.9.1",
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
"eslint-plugin-sort-keys-fix": "^1.1.2",
Expand All @@ -82,6 +83,7 @@
"npm-run-all": "^4.1.5",
"prettier": "^2.3.2",
"ts-jest": "^28.0.7",
"ts-jest-resolver": "^2.0.1",
"ts-node": "^10.0.0",
"ts-node-dev": "^1.1.8",
"typedoc": "^0.23.24",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { AssetProvider, HttpProviderConfigPaths } from '@cardano-sdk/core';
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { apiVersion } from '../version';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import type { AssetProvider, HttpProviderConfigPaths } from '@cardano-sdk/core';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';

/** The AssetProvider endpoint paths. */
const paths: HttpProviderConfigPaths<AssetProvider> = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './assetInfoHttpProvider';
export * from './assetInfoHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ChainHistoryProvider, HttpProviderConfigPaths, ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { apiVersion } from '../version';
import { ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import type { ChainHistoryProvider, HttpProviderConfigPaths } from '@cardano-sdk/core';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';

/** The ChainHistoryProvider endpoint paths. */
const paths: HttpProviderConfigPaths<ChainHistoryProvider> = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './chainHistoryHttpProvider';
export * from './chainHistoryHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { HandleProvider, handleProviderPaths } from '@cardano-sdk/core';
import { apiVersion } from '../version';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import { handleProviderPaths } from '@cardano-sdk/core';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HandleProvider } from '@cardano-sdk/core';

/**
* Connect to a Cardano Services HttpServer instance with the service available
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './handleHttpProvider';
export * from './handleHttpProvider.js';
8 changes: 5 additions & 3 deletions packages/cardano-services-client/src/HttpProvider.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { HttpProviderConfigPaths, Provider, ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { Logger } from 'ts-log';
import { ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { fromSerializableObject, toSerializableObject } from '@cardano-sdk/util';
import axios, { AxiosAdapter, AxiosRequestConfig, AxiosResponseTransformer } from 'axios';
import axios from 'axios';
import packageJson from '../package.json';
import type { AxiosAdapter, AxiosRequestConfig, AxiosResponseTransformer } from 'axios';
import type { HttpProviderConfigPaths, Provider } from '@cardano-sdk/core';
import type { Logger } from 'ts-log';

const isEmptyResponse = (response: any) => response === '';

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './networkInfoHttpProvider';
export * from './networkInfoHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { HttpProviderConfigPaths, NetworkInfoProvider } from '@cardano-sdk/core';
import { apiVersion } from '../version';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HttpProviderConfigPaths, NetworkInfoProvider } from '@cardano-sdk/core';

/** The NetworkInfoProvider endpoint paths. */
const paths: HttpProviderConfigPaths<NetworkInfoProvider> = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './rewardsHttpProvider';
export * from './rewardsHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { HttpProviderConfigPaths, ProviderError, ProviderFailure, RewardsProvider } from '@cardano-sdk/core';
import { apiVersion } from '../version';
import { mapHealthCheckError } from '../mapHealthCheckError';
import { ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import { mapHealthCheckError } from '../mapHealthCheckError.js';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HttpProviderConfigPaths, RewardsProvider } from '@cardano-sdk/core';

/** The RewardsProvider endpoint paths. */
const paths: HttpProviderConfigPaths<RewardsProvider> = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './stakePoolHttpProvider';
export * from './stakePoolHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { HttpProviderConfigPaths, StakePoolProvider } from '@cardano-sdk/core';
import { apiVersion } from '../version';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HttpProviderConfigPaths, StakePoolProvider } from '@cardano-sdk/core';

/** The StakePoolProvider endpoint paths. */
const paths: HttpProviderConfigPaths<StakePoolProvider> = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { Cardano, ProviderError, ProviderFailure, SubmitTxArgs, TxBodyCBOR, TxSubmitProvider } from '@cardano-sdk/core';
import { Logger } from 'ts-log';
import { Cardano, ProviderError, ProviderFailure, TxBodyCBOR } from '@cardano-sdk/core';
import { hexStringToBuffer } from '@cardano-sdk/util';
import { mapCardanoTxSubmitError } from './cardanoTxSubmitErrorMapper';
import axios, { AxiosAdapter, AxiosInstance } from 'axios';
import { mapCardanoTxSubmitError } from './cardanoTxSubmitErrorMapper.js';
import axios from 'axios';
import type { AxiosAdapter, AxiosInstance } from 'axios';
import type { Logger } from 'ts-log';
import type { SubmitTxArgs, TxSubmitProvider } from '@cardano-sdk/core';

export type TxSubmitApiProviderProperties = {
baseUrl: URL;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export * from './TxSubmitApiProvider';
export * from './txSubmitHttpProvider';
export * from './TxSubmitApiProvider.js';
export * from './txSubmitHttpProvider.js';
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@ import {
GeneralCardanoNodeError,
GeneralCardanoNodeErrorCode,
HandleOwnerChangeError,
HttpProviderConfigPaths,
ProviderError,
ProviderFailure,
TxSubmissionError,
TxSubmissionErrorCode,
TxSubmitProvider,
reasonToProviderFailure
} from '@cardano-sdk/core';
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { apiVersion } from '../version';
import { mapHealthCheckError } from '../mapHealthCheckError';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import { mapHealthCheckError } from '../mapHealthCheckError.js';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HttpProviderConfigPaths, TxSubmissionErrorCode, TxSubmitProvider } from '@cardano-sdk/core';

/** The TxSubmitProvider endpoint paths. */
const paths: HttpProviderConfigPaths<TxSubmitProvider> = {
Expand Down
2 changes: 1 addition & 1 deletion packages/cardano-services-client/src/UtxoProvider/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './utxoHttpProvider';
export * from './utxoHttpProvider.js';
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { CreateHttpProviderConfig, createHttpProvider } from '../HttpProvider';
import { HttpProviderConfigPaths, ProviderError, ProviderFailure, UtxoProvider } from '@cardano-sdk/core';
import { apiVersion } from '../version';
import { mapHealthCheckError } from '../mapHealthCheckError';
import { ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { apiVersion } from '../version.js';
import { createHttpProvider } from '../HttpProvider.js';
import { mapHealthCheckError } from '../mapHealthCheckError.js';
import type { CreateHttpProviderConfig } from '../HttpProvider.js';
import type { HttpProviderConfigPaths, UtxoProvider } from '@cardano-sdk/core';

/** The UtxoProvider endpoint paths. */
const paths: HttpProviderConfigPaths<UtxoProvider> = {
Expand Down
20 changes: 10 additions & 10 deletions packages/cardano-services-client/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export * from './AssetInfoProvider';
export * from './HttpProvider';
export * from './TxSubmitProvider';
export * from './StakePoolProvider';
export * from './UtxoProvider';
export * from './ChainHistoryProvider';
export * from './NetworkInfoProvider';
export * from './RewardsProvider';
export * from './HandleProvider';
export * from './version';
export * from './AssetInfoProvider/index.js';
export * from './HttpProvider.js';
export * from './TxSubmitProvider/index.js';
export * from './StakePoolProvider/index.js';
export * from './UtxoProvider/index.js';
export * from './ChainHistoryProvider/index.js';
export * from './NetworkInfoProvider/index.js';
export * from './RewardsProvider/index.js';
export * from './HandleProvider/index.js';
export * from './version.js';
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Cardano } from '@cardano-sdk/core';
import { assetInfoHttpProvider } from '../../src';
import { config } from '../util';
import { assetInfoHttpProvider } from '../../src/index.js';
import { config } from '../util.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable sonarjs/no-duplicate-string */
import { ProviderFailure } from '@cardano-sdk/core';
import { axiosError, config, healthCheckResponseWithState } from '../util';
import { chainHistoryHttpProvider } from '../../src';
import { axiosError, config, healthCheckResponseWithState } from '../util.js';
import { chainHistoryHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { config } from '../util';
import { handleHttpProvider } from '../../src';
import { config } from '../util.js';
import { handleHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
11 changes: 7 additions & 4 deletions packages/cardano-services-client/test/HttpProvider.test.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
/* eslint-disable sonarjs/cognitive-complexity */
/* eslint-disable sonarjs/no-duplicate-string */
import { HttpProviderConfig, createHttpProvider } from '../src';
import { Provider, ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { Server } from 'http';
import { ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { createHttpProvider } from '../src/index.js';
import { fromSerializableObject, toSerializableObject } from '@cardano-sdk/util';
import { getPort } from 'get-port-please';
import { logger } from '@cardano-sdk/util-dev';
import express, { RequestHandler } from 'express';
import express from 'express';
import path from 'path';
import type { HttpProviderConfig } from '../src/index.js';
import type { Provider } from '@cardano-sdk/core';
import type { RequestHandler } from 'express';
import type { Server } from 'http';

const packageJson = require(path.join(__dirname, '..', 'package.json'));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { config } from '../util';
import { networkInfoHttpProvider } from '../../src';
import { config } from '../util.js';
import { networkInfoHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Cardano, Reward } from '@cardano-sdk/core';
import { config, healthCheckResponseWithState } from '../util';
import { rewardsHttpProvider } from '../../src';
import { Cardano } from '@cardano-sdk/core';
import { config, healthCheckResponseWithState } from '../util.js';
import { rewardsHttpProvider } from '../../src/index.js';
import { toSerializableObject } from '@cardano-sdk/util';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';
import type { Reward } from '@cardano-sdk/core';

describe('rewardsHttpProvider', () => {
const rewardAccount = Cardano.RewardAccount('stake_test1uzxvhl83q8ujv2yvpy6n2krvpdlqqx28h7e9vsk6re43h3c3kufy6');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { config } from '../util';
import { stakePoolHttpProvider } from '../../src';
import { config } from '../util.js';
import { stakePoolHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CardanoNodeUtil, TxSubmissionErrorCode } from '@cardano-sdk/core';
import { mapCardanoTxSubmitError } from '../../src/TxSubmitProvider/cardanoTxSubmitErrorMapper';
import { mapCardanoTxSubmitError } from '../../src/TxSubmitProvider/cardanoTxSubmitErrorMapper.js';

describe('mapCardanoTxSubmitError', () => {
describe('stringish errors', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@ import {
GeneralCardanoNodeErrorCode,
ProviderError,
ProviderFailure,
TxCBOR,
TxSubmissionError,
TxSubmissionErrorCode
} from '@cardano-sdk/core';
import { bufferToHexString } from '@cardano-sdk/util';
import { config } from '../util';
import { config } from '../util.js';
import { handleProviderMocks } from '@cardano-sdk/util-dev';
import { txSubmitHttpProvider } from '../../src';
import { txSubmitHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

const emptyUintArrayAsHexString = bufferToHexString(Buffer.from(new Uint8Array()));
const emptyUintArrayAsHexString = TxCBOR(bufferToHexString(Buffer.from(new Uint8Array())));

describe('txSubmitHttpProvider', () => {
describe('healthCheck', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Cardano } from '@cardano-sdk/core';
import { config, healthCheckResponseWithState } from '../util';
import { utxoHttpProvider } from '../../src';
import { config, healthCheckResponseWithState } from '../util.js';
import { utxoHttpProvider } from '../../src/index.js';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';

Expand Down
3 changes: 2 additions & 1 deletion packages/cardano-services-client/test/util.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Asset, Cardano, ProviderError, ProviderFailure } from '@cardano-sdk/core';
import { AxiosError, AxiosResponse } from 'axios';
import { AxiosError } from 'axios';
import { logger } from '@cardano-sdk/util-dev';
import { toSerializableObject } from '@cardano-sdk/util';
import type { AxiosResponse } from 'axios';

export const config = { baseUrl: 'http://some-hostname:3000', logger };

Expand Down
10 changes: 5 additions & 5 deletions packages/cardano-services/src/Asset/AssetHttpService.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AssetProvider } from '@cardano-sdk/core';
import { HttpService } from '../Http';
import { Logger } from 'ts-log';
import { ServiceNames } from '../Program/programs/types';
import { providerHandler } from '../util';
import { HttpService } from '../Http/index.js';
import { ServiceNames } from '../Program/programs/types.js';
import { providerHandler } from '../util/index.js';
import express from 'express';
import type { AssetProvider } from '@cardano-sdk/core';
import type { Logger } from 'ts-log';

/** Dependencies that are need to create AssetHttpService */
export interface AssetHttpServiceDependencies {
Expand Down
Loading

0 comments on commit 0b8d7f5

Please sign in to comment.